From 1bd239cca116e5359d0fbf738907692040b27304 Mon Sep 17 00:00:00 2001 From: Aulo Aasmaa Date: Tue, 15 Nov 2022 19:51:38 +0200 Subject: [PATCH 1/5] [strings] Added Estonian (et) translations * Translations to Estonian language (et). Signed-off-by: Aulo Aasmaa --- data/categories.txt | 412 ++++++++- data/countries_names.txt | 1490 +++++++++++++++++++++++++++++++- data/strings/strings.txt | 641 ++++++++++++++ data/strings/types_strings.txt | 822 ++++++++++++++++++ 4 files changed, 3359 insertions(+), 6 deletions(-) diff --git a/data/categories.txt b/data/categories.txt index f3d5528fc4..daaa9b97d8 100644 --- a/data/categories.txt +++ b/data/categories.txt @@ -74,6 +74,7 @@ pt:Onde comer|comer|comida pt-BR:Onde comer|comer|comida|alimentação ro:Unde să mănânci|Alimentație|mâncare es:Dónde comer|Comer +et:Kus süüa|Toit eu:Non jan|Jaten sv:Var att äta|Mat th:กินร้านไหนดี|อาหาร @@ -113,6 +114,7 @@ pt:Mercearias|Minimercados|Supermercados|Hipermercados|Comida|Alimentos|Loja pt-BR:Mercados|Alimentação|Loja ro:4Alimentare|Produse|Alimentație|Mâncare|Magazin es:Alimentación|Productos|Comer|Tienda +et:Toidukaubad|Pood eu:Produktuak|Jan|Denda sv:Produkter|Mat|Butik|Affär th:ซื้อของกินของใช้|อาหาร|ร้านค้า @@ -152,6 +154,7 @@ pt:5Transporte pt-BR:5Transporte ro:5Transport es:5Transporte +et:Transport eu:5Garraioa sv:5Transport th:การขนส่ง @@ -190,6 +193,7 @@ pt:3Combustível pt-BR:Combustível ro:4Benzinărie|Benzină|Gaz es:3Gasolinera +et:Tankla eu:3Gasolindegia sv:3Bensin th:ก๊าซ @@ -229,6 +233,7 @@ pt:5Estacionamento pt-BR:5Estacionamento ro:4Parcare es:5Aparcamiento +et:Parkla eu:5Aparkalekua sv:4Parkering th:ที่จอดรถ @@ -267,6 +272,7 @@ pt:5Compras|Loja pt-BR:5Compras|Loja ro:5Shopping|Cumpărături|Magazin es:5Compras|Tienda +et:Ostud|Pood eu:5Erosketak|Denda sv:5Shopping|Butik|Affär th:ช็อปปิง|ร้านค้า @@ -306,6 +312,7 @@ pt:Hotel|Hotéis pt-BR:Hotel|Hoteles ro:Hotel|Hoteluri es:Hotel|Hoteles +et:Hotell|Hotellid eu:Hotela sv:Hotell|Hotellen th:โรงแรม @@ -344,6 +351,7 @@ pt:4Atrações turísticas|3Turismo|Miradouros pt-BR:4Atraçãos|3Turismo ro:5Obiective turistice|4Turism es:4Turismo +et:Vaatamisväärsused eu:4Turismoa sv:4Sevärdheter|4Attraktion|4Turism th:สถานที่ท่องเที่ยว @@ -382,6 +390,7 @@ pt:Entretenimento pt-BR:Entretenimento ro:Divertisment es:Entretenimiento +et:Meelelahutus eu:Entretenimendua sv:Underhållning th:แหล่งบันเทิง @@ -420,6 +429,7 @@ pt:Vida noturna pt-BR:Vida noturna ro:Viața nocturnă|cu prietenii|petrecere es:Vida nocturna +et:Ööelu eu:Gaueko bizitza sv:Nattliv th:ไนท์ไลฟ์ @@ -458,6 +468,7 @@ pt:Atividades com crianças pt-BR:Feriados em família ro:Divertisment cu copiii|Divertisment cu familia|Vacanță cu copiii es:Ocio en familia +et:Perepuhkus eu:Umeekin atseden hartu sv:Semester med barn th:วันหยุดสำหรับครอบครัว @@ -496,6 +507,7 @@ pt:3Multibanco|2MB|Caixa Multibanco|2ATM|Multicaixa|Caixa automática|Terminal b pt-BR:3Caixa eletrônico|caixa automático|banco 24 horas ro:3Bancomat|ATM es:Cajero|cajero automático +et:Pangaautomaat eu:4Kutxazain automatikoa sv:3Bankomat th:2เอทีเอ็ม @@ -573,6 +585,7 @@ pt:dinheiro|U+1F3E7|U+1F4B2|U+1F4B3|U+1F4B4|U+1F4B5|U+1F4B6|U+1F4B7 pt-BR:dinheiro|U+1F3E7|U+1F4B2|U+1F4B3|U+1F4B4|U+1F4B5|U+1F4B6|U+1F4B7 ro:bani es:dinero +et:Raha eu:3dirua sv:pengar th:เงิน|atm @@ -610,6 +623,7 @@ pt:3Banco pt-BR:3Banco ro:3Bancă es:3Banco +et:3Pank eu:3Bankua sv:3Bank th:3ธนาคาร @@ -645,6 +659,7 @@ pt:dinheiro|U+1F3E6|U+1F4B0|U+1F4B2|U+1F4B3|U+1F4B4|U+1F4B5|U+1F4B6|U+1F4B7 pt-BR:dinheiro|U+1F3E6|U+1F4B0|U+1F4B2|U+1F4B3|U+1F4B4|U+1F4B5|U+1F4B6|U+1F4B7 ro:bani es:dinero +et:raha eu:3dirua sv:pengar th:เงิน @@ -683,6 +698,7 @@ pt-BR:Reciclagem|Utilização de resíduos|Recicláveis|Coleta de seletiva|Separ ro:Reciclarea deșeurilor|Reciclare|Recepționarea reciclării|Colectarea separată a gunoiului|Sortarea gunoiului|Reutilizare es:Reciclaje|Reciclaje de residuos|Eliminación de residuos|Materiales reciclables|Recogida selectiva de basura|Clasificación de residuos|Reutilización eu:Hondakinen birziklapena|Hondakinak ezabatzea|Material birziklagarriak|Zabor bilketa selektiboa|Hondakinak sailkatzea|Berrerabilpena +et:Taaskasutus|Jäätmete kasutamine|Jäätmete äraandmine|Taaskasutatavad|Prügi eraldi korjamine|Prügi sorteerimne|Taaskasutus es-MX:Reciclaje|Reciclaje de desechos|Eliminación de desechos|Materiales reciclables|Recogida separada de basura|Clasificación de desechos|Reutilización sv:Återvinning av avfall|Avfallsbehandling|Återvinningsbart avfall|Separat sopinsamling|Sopsortering|Återanvändning th:การรีไซเคิล|การใช้ประโยชน์จากขยะ|รีไซเคิลได้|ที่รวบรวมขยะแยกประเภท|การแยกขยะ|รียูส @@ -717,6 +733,7 @@ pt:3Câmbio|3troca|dinheiro|Agência de câmbio pt-BR:3Casa de câmbio|3troca|dinheiro ro:3Schimb valutar|schimb es:3Cambio de divisas|dinero +et:4Valuutavahetus eu:3Moneta-trukea|dirua sv:3Valutaväxling|3växling|pengar th:1แลกเปลี่ยนเงินตรา|หลักสูตร|เงิน @@ -752,6 +769,7 @@ pt:2Bar|2pub|cerveja|beber pt-BR:2Drinqueria|bar|pub|boteco|cerveja|drink|beber|alimentação ro:2Bar|2cârciumă|băutură es:2Bar|2pub +et:2Baar|pubi eu:2Taberna|2pub sv:2Bar|2pub|krog|öl|drink th:2บาร์|ผับ|เบียร์|เครื่องดื่ม @@ -788,6 +806,7 @@ pt:3Café|3cafeteria|3restaurante pt-BR:3Café|3cafeteria|3restaurante|alimentação ro:3Cafenea|3restaurant es:3Café|3restaurante +et:3Kohvik|3restoran eu:3Kafetegia|3Jatetxea sv:3Café|3restaurang th:3 คาเฟ่|ร้านอาหาร่ @@ -824,6 +843,7 @@ pt:4Comida rápida|4Comida de plástico|4comida para levar|4comida pronta|pronto pt-BR:4Lanchonete|fast-food|3alimentação ro:Fast food|3restaurant es:4Comida rápida|restaurante|café +et:4Kiirtoit|3restoran|3kohvik|kaasaost|rämpstoit eu:4Fast food|jatetxea|kafetegia sv:4Snabbmat|3restaurang|3café|takeaway th:1อาหารจานด่วน|ร้านอาหาร|คาเฟ่|นำกลับ @@ -859,6 +879,7 @@ pt:3Restaurante|3café|3almoço|3almoçar|3local onde comer|3refeição pt-BR:3Restaurante|3comida|3alimentação ro:3Restaurant|3cafenea es:3Restaurante|3café +et:3Restoran|3kohvik eu:3Jatetxea|3Kafetegia sv:3Restaurang|3café th:3ร้านอาหาร @@ -883,6 +904,7 @@ da:3Tankstation nl:3Tankstation|3brandstof fr:Station-service|3carburant|3essence de:Tankstation|Tankstelle +et:3Tankla hu:3Benzinkút|benzin id:Pompa bensin ja:ガスステーション|ガス|燃料|軽油|給油 @@ -927,6 +949,7 @@ pt:3Padaria pt-BR:3Padaria|3panificadora ro:3Brutărie es:3Panadería +et:3Pagariäri eu:3Okindegia sv:3Bageri th:3เบเกอรี่ @@ -950,6 +973,7 @@ da:Butik|forretning de:3Verbrauchermarkt|5Geschäft|5Laden el:Κατάστημα es:Tienda +et:Pood eu:Denda fa:مرکزخرید fi:Kauppa @@ -1000,6 +1024,7 @@ pt:4Cosméticos|estética pt-BR:4Cosméticos|estética ro:4Cosmetică|centru de îngrijire es:4Productos cosméticos +et:4Kosmeetika eu:4Produktu kosmetikoak sv:4Kosmetika th:เครื่องสำอาง @@ -1037,6 +1062,7 @@ pt:Loja de conveniência pt-BR:Loja de conveniência|4mercadinho|compras ro:4Magazin mixt|minimarket|supermarket|magazin es:Tienda de barrio +et:Lähipood eu:Auzoko denda sv:Närbutik th:ร้านสะดวกซื้อ @@ -1060,6 +1086,7 @@ da:Delikatessebutik de:Feinkostgeschäft el:Εκλεκτά τρόφιμα es:Delicatesen +et:Maiustused eu:Delitua fi:Herkkukauppa fr:4Épicerie fine @@ -1088,6 +1115,7 @@ zh-Hant:熟食店 shop-farm|@food en:Farm food ru:Фермерская еда +et:Talutoit shop-garden_centre en:4Garden Centre|U+1F3EC|U+1F3EA|U+1F3E1 @@ -1112,6 +1140,7 @@ pt:Loja de jardinagem|3jardinagem pt-BR:Loja de plantas|jardinagem|jardim|compras ro:Pepinieră|magazin cu articole de grădinărit es:Vivero|tienda de jardinería +et:Aianduskeskus eu:Haurtzaindegia|lorategi denda sv:Plantskola|trädgårdsbutik th:สถานรับเลี้ยงเด็ก|เนอร์สเซอรี่ @@ -1128,10 +1157,12 @@ shop-grocery|@food en:Grocery fr:Épicerie ru:Бакалея +et:Toidukaubad shop-health_food|@food en:Health food ru:Здоровая еда +et:Tervisetoit shop-mobile_phone en:4Cell Phones|4Mobile Phones|6smartphones|electronics store|U+1F3EC|U+1F3EA|U+1F4F1|U+1F4F2 @@ -1156,6 +1187,7 @@ pt:Loja de telemóveis|Telemóveis|loja de aparelhos eletrónicos pt-BR:Loja de celulares|celulares|telefone ro:Magazin de telefoane mobile|magazin de electronice es:Móviles|Tienda de telefonía móvil|tienda de aparatos electrónicos +et:4Mobiiltelefonid|Elektroonikapood eu:Sakelako telefonoak|Sakelako telefono denda|elektronika denda sv:4Mobilbutik|elektronikaffär th:ร้านขายโทรศัพท์มือถือ|ร้านขายอุปกรณ์อิเล็กโทรนิก @@ -1192,6 +1224,7 @@ pt:4Florista pt-BR:4Florista|Floricultura|flores ro:4Florărie es:4Floristería|tienda de flores +et:4Florist|lillepood eu:4Loredenda sv:Blomsteraffär th:ร้านดอกไม้ @@ -1227,6 +1260,7 @@ pt:2Talho|2Açougueiro pt-BR:Açougue|açougueiro ro:Măcelărie es:4Carnicería|carne +et:Lihapood eu:4Harategia|haragia sv:Slaktare th:ร้านขายเนื้อ @@ -1262,6 +1296,7 @@ pt:Loja de móveis|3Mobiliário pt-BR:Loja de móveis ro:Magazin de mobilă es:Tienda de muebles +et:Mööblipood eu:Altzari denda sv:4Möbelaffär th:ร้านเฟอร์นิเจอร์ @@ -1284,6 +1319,7 @@ da:Køkkenforretning de:6Küchengeschäft|Küchenstudio el:Κατάστημα κουζίνας es:Tienda de cocina +et:Köögipood eu:Sukalde-denda fa:ﻪﻧﺎﺧﺰﭙﺷﺁ ﻩﺎﮕﺷﻭﺮﻓ fi:Keittiökauppa @@ -1336,6 +1372,7 @@ pt:Loja de bebidas|bebidas alcoólicas pt-BR:Loja de bebidas|bebidas alcoólicas ro:Băuturi alcoolice es:4Licorería|licor +et:Alkoholipood|4alkohol eu:4Likore-denda|likore sv:Spritaffär|4alkohol th:ร้านขายเหล้า @@ -1371,6 +1408,7 @@ pt:4Livraria pt-BR:4Livraria ro:4Librărie es:4Librería +et:Raamatupood eu:4Liburudenda sv:Bokaffär th:ร้านหนังสือ @@ -1406,6 +1444,7 @@ pt:Sapataria|loja de calçado pt-BR:Sapataria|loja de calçados ro:Magazin de încălțăminte es:4Zapatería +et:Kingapood eu:4Oinetako denda sv:Skobutik th:ร้านขายรองเท้า @@ -1442,6 +1481,7 @@ pt:Loja de eletrônica pt-BR:Loja de eletrônicos ro:4Electronice es:4Electrónica +et:4Elektroonika eu:4Elektronika sv:4Elektronik|elektronikaffär th:ร้านขายอุปกรณ์อิเล็กทรอนิกส์ @@ -1477,6 +1517,7 @@ pt:Loja de ferramentas|ferragens pt-BR:Loja de ferramentas|ferragens ro:Magazin de bricolaj|hardware es:Ferretería|bricolaje +et:Rauakaubad|Tööriistapood eu:Hardwarea|Bricolajea sv:Järnhandel th:ร้านขายฮาร์ดแวร์|ร้านขายวัสดุอุปกรณ์ @@ -1513,6 +1554,7 @@ pt:Joias|Joalharia pt-BR:Joalheria ro:4Bijutier es:Joyería +et:Ehtepood eu:Bitxiak sv:Smycken|4juvelerare|guldsmed th:ร้านขายเครื่องประดับ @@ -1549,6 +1591,7 @@ pt:Oculista|4Óptica|Ótica pt-BR:Ótica|4oculista|3óculos ro:4Optică es:4Óptica +et:4Optometrist eu:4Optika sv:4Optiker|glasögonaffär th:ร้านแว่น @@ -1584,6 +1627,7 @@ pt:Loja de lembranças|Lembranças|presentes pt-BR:Loja de presentes ro:Magazin de suveniruri es:Tienda de regalos +et:Kingitusepood|4suveniiripood eu:Denda sv:Presentaffär th:ร้านของขวัญ @@ -1619,6 +1663,7 @@ pt:Salão de beleza|cabeleireiro|cabeleireira|brabeiro pt-BR:Salão de beleza ro:Salon de înfrumusețare es:Centro de belleza +et:Ilusalong eu:Apaindegia sv:Skönhetssalong th:2ร้านเสริมสวย|2ร้านขายผลิตภัณฑ์ความงาม @@ -1656,6 +1701,7 @@ pt:3Cash and carry|Venda a retalho pt-BR:Quitanda|verdureiro|varejão ro:Băcănie|fructe|legume es:4Frutería +et:Juurviljapood eu:4Barazaina sv:Grönsakshandlare th:ร้านขายผัด @@ -1691,6 +1737,7 @@ pt:Artigos desportivos|3Desporto pt-BR:Artigos esportivos ro:Articole sportive es:Artículos de deporte +et:Spordipood eu:Kirol artikuluak sv:4Sportaffär th:สินค้ากีฬา @@ -1726,6 +1773,7 @@ pt:3Supermercado|Hipermercado pt-BR:3Supermercado|mercado ro:3Supermarket es:3Supermercado +et:3Supermarket eu:3Supermerkatua sv:3Stormarknad|dagligvaruhandel th:3ซูเปอร์มาร์เก็ต @@ -1763,6 +1811,7 @@ pt:Centro comercia|3Shopping pt-BR:Shopping center ro:Mall es:Centro comercial +et:Ostukeskus eu:Merkataritza-gune sv:Galleria|köpcentrum th:เดอะมอลล์ @@ -1800,6 +1849,7 @@ pt:Grande armazém pt-BR:Loja de departamentos|compras ro:Magazin universal es:Grandes almacenes +et:Kaubamaja eu:Denda handiak sv:Varuhus th:ห้างสรรพสินค้า @@ -1836,6 +1886,7 @@ pt:4Bebidas pt-BR:4Bebidas ro:Băuturi es:4Bebidas +et:Joogid eu:4Edariak sv:Drinkar|drycker th:เครื่องดื่ม @@ -1871,6 +1922,7 @@ pt:Loja de informática pt-BR:Loja de informática ro:Magazin de calculatoare es:Tienda de informática|tienda de ordenadores +et:Arvutipood eu:4Informatika-denda sv:Datorbutik th:ร้านขายคอมพิวเตอร์ @@ -1907,6 +1959,7 @@ pt:4Confeitaria|loja de doces|bolos|doces|guloseimas pt-BR:4Confeitaria|loja de doces ro:Cofetărie|dulciuri es:4Confitería +et:Kommipood eu:4Gozogintza sv:Konditori|godisbutik th:ร้านขายขนมหวาน|ร้านขายลูกกวาด @@ -1942,6 +1995,7 @@ pt:4Lavandaria pt-BR:4Lavanderia ro:Spălătorie es:4Lavandería +et:Pesula eu:4Garbitegia sv:Tvättstuga|tvättomat th:ร้านซักรีด @@ -1977,6 +2031,7 @@ pt:Loja de brinquedos|3brinquedos pt-BR:Loja de brinquedos ro:Magazin de jucării es:Tienda de juguetes|juguetería +et:Mänguasjapood eu:Jostailu-denda sv:Leksaksaffär th:ร้านขายของเล่น @@ -2010,6 +2065,7 @@ pl:Targ|bazar|targowisko pt:Feira|3Mercado pt-BR:3Mercado|mercadão|feira-livre es:3Mercado +et:3Turg eu:3Merkatua sv:3Marknadsplats|marknad th:2ตลาดสินค้า|ตลาด|ร้าน @@ -2045,6 +2101,7 @@ pt:Loja de roupas|3roupa|3vestuário pt-BR:Loja de roupas ro:Magazin de haine es:Tienda de ropa|3ropa +et:Rõivapood eu:3Arropa denda sv:Klädbutik|klädaffär|4kläder th:ร้านขายเสื้อผ้า|ร้าน @@ -2062,6 +2119,7 @@ shop-caravan|@rv en:2RV dealership|4Caravan dealership|Motorhome dealership be:Продаж аўтадамоў es:Venta de caravanas|Venta de autocaravanas +et:Haagiselamute müük fr:Concessionnaire de caravanes et camping-cars ru:Продажа автодомов tr:Karavan galerisi @@ -2093,6 +2151,7 @@ pt:Loja de carros|3Stande|4concessionária|2veículos pt-BR:Loja de carros|4concessionária|veículos ro:Magazin auto es:Venta de coches +et:Autopood eu:Autoen salmenta sv:Bilåterförsäljare th:ร้านค้ารถยนต์ @@ -2129,6 +2188,7 @@ pt:Loja de bicicletas|4bicicleta pt-BR:Loja de bicicletas|4bicicletaria|4bicicleta|bike ro:3Bicicletă|Magazin biciclete es:Tienda de bicicletas|4bicicleta|bici +et:3Jalgrattapood eu:4Bizikleta-denda|4bizikleta sv:4Cykelaffär|cykel th:4จักรยาน|ร้าน @@ -2163,6 +2223,7 @@ pl:3Kiosk|gazety|prasa pt:4Quiosque pt-BR:4Quiosque es:4Quiosco +et:3Kiosk eu:4Kioskoa sv:3Kiosk th:ร้าน @@ -2198,6 +2259,7 @@ pt:2Paragem de autocarro|2autocarros pt-BR:2Ponto de ônibus ro:3Stație de autobuz es:Parada de autobús +et:Bussipeatus eu:Autobus geltokia sv:Busshållplats|3buss|hållplats th:ป้ายรถเมล์|รถเมล์|ขนส่ง @@ -2233,6 +2295,7 @@ pt:3Paragem de elétrico|2elétrico pt-BR:3Parada de bonde|via férrea ro:3Stație de tramvai es:Parada de tranvía +et:Trammipeatus eu:Tranbiaren geltokia sv:Spårvagnshållplats|3spårvagn|hållplats th:ป้ายรถราง|ขนส่ง @@ -2268,6 +2331,7 @@ pt:2Estação rodoviária|2autocarros|2rodoviária pt-BR:2Rodoviária|estação BRT ro:3Gara de autobuz es:Estación de autobuses +et:Bussijaam eu:Autobus geltokia sv:2Busstation|buss|station th:สถานีขนส่ง|ขนส่ง|สถานี @@ -2304,6 +2368,7 @@ pt:Estação de comboios|2caminhos-de-ferro|2Comboios|2Apeadeiro pt-BR:Estação de trem|ferrovia ro:Feroviar es:3Estación de tren|3tren +et:Rongijaam eu:3Tren geltokia|3tren sv:3Tågstation|4järnväg|järnväg|3tåg|4station th:3สถานีรถไฟ|รถไฟ|สถานี|ขนส่ง @@ -2340,6 +2405,7 @@ pt:3Metropolitano pt-BR:Estação do metrô|3Mêtro|Entrada de estação do metrô ro:3Metrou es:3Metro +et:3Metroo eu:3Metro sv:3Tunnelbana|3tunnelbana|3metro|3tunnelbana th:3รถไฟ|สถานีรถไฟใต้ดิน|ท่อ|เมโทร|ใต้ดิน @@ -2376,6 +2442,7 @@ pt:2Terminal de ferry|2Balsa|2Ferry pt-BR:2Estação de barcas|balsa ro:3Feribot|terminal es:3Transbordador|terminal +et:3Praam|terminal|transport eu:3Ferry|terminal sv:3Färja|färjeläge|terminal th:2เฟอร์รี่|สถานี @@ -2412,6 +2479,7 @@ pt:2Táxi|2Praça de táxis pt-BR:2Táxi ro:3Taxi es:3Taxi +et:3Takso eu:3Taxia sv:3Taxi th:3แท็กซี่ @@ -2449,6 +2517,7 @@ pt:Câmara municipal|Junta de fregesia|3Prefeitura pt-BR:3Prefeitura ro:3Primărie es:3Ayuntamiento +et:3Raekoda eu:3Udaletxea sv:3Rådhus th:3ศาลากลางจังหวัด|การท่องเที่ยว @@ -2485,6 +2554,7 @@ pt:3Atração turística pt-BR:3Atração turística ro:3Punct de atracție|obiective turistice es:3Atracción turística|3turismo +et:3Vaatamisväärsus eu:3Turismo-erakarpena|3turismoa sv:3Attraktion|3turism|3sevärdheter th:3การท่องเที่ยว|แหล่งท่องเที่ยว|สถานที่ท่องเที่ยว @@ -2521,6 +2591,7 @@ pt:3Obra de arte|3instalação artística pt-BR:3Obra de arte|3instalação artística ro:3Turism es:3Obras de arte +et:Kunstiteos eu:3Artelan sv:3Konstverk|3turism th:งานศิลปะ|3การท่องเที่ยว @@ -2557,6 +2628,7 @@ pt:2Miradouro|3Mirante pt-BR:4Mirante|miradouro ro:3Punct de vedere es:3Vista panorámica +et:3Vaateplatvorm eu:3Bista panoramikoa sv:4Utsiktsplats th:3จุดชมวิว|การท่องเที่ยว @@ -2593,6 +2665,7 @@ pt:3Informações turísticas|4informação pt-BR:3Informações turísticas|4informação ro:3Informații turistice es:4Información +et:3Turisti-info eu:4Informazioa sv:4Turistinformation|4information th:4ข้อมูลการท่องเที่ยว|ข้อมูล @@ -2629,6 +2702,7 @@ pt:4Local de piqueniques|3Parque de merendas|3piqueniques pt-BR:4Local de piquenique|churrasqueira ro:3Locații picnic es:3Picnic +et:3Pikniku koht eu:3Piknika sv:3Picknickplatser th:3เว็บไซต์ปิกนิก @@ -2665,6 +2739,7 @@ pt:Local de culto|3templo|Local de oração pt-BR:Local de culto|3templo|igreja ro:3Loc de cult|3templu es:4Lugar de culto|templo +et:Religioosne koht|3Tempel eu:4Gurtzalekua|3tenplua sv:4Plats för tillbedjan|gudstjänstplats|helgedom|3tempel th:2สถานที่ประกอบพิธีกรรม @@ -2701,6 +2776,7 @@ pt:Igreja|local de culto|templo|catedral|basílica pt-BR:Igreja|local de culto|templo|catedral|basílica ro:Biserică|loc de cult|templu es:3Iglesia|templo|lugar de culto|basílica +et:4Kirik|religioosne koht|tempel|katedraal|basiilika eu:3Eliza|tenplua|gurtzalekua|basilika sv:4Kyrka|plats för tillbedjan|tempel th:โบสถ์|สถานที่ประกอบพิธีกรรม @@ -2736,6 +2812,7 @@ pt:4Mesquita|local de culto|templo pt-BR:4Mesquita|local de culto|templo ro:4Moschee|loc de cult|templu es:4Mezquita|templo|lugar de culto +et:Mošee|religioosne koht eu:4Meskita|tenplua|gurtzalekua sv:4Moské|plats för tillbedjan|tempel th:มัสยิด|สถานที่ประกอบพิธีกรรม @@ -2771,6 +2848,7 @@ pt:Templo|local de culto pt-BR:Templo budista|local de culto ro:Templu|loc de cult es:Templo|lugar de culto +et:Tempel|religioosne koht eu:3Tenplua|4gurtzalekua sv:Tempel|plats för tillbedjan th:วัด|สถานที่ประกอบพิธีกรรม @@ -2806,6 +2884,7 @@ pt:Templo|local de culto pt-BR:Templo hindu|local de culto ro:Templu|loc de cult es:Templo|lugar de culto +et:Tempel|religioosne koht eu:3Tenplua|4gurtzalekua sv:Tempel|plats för tillbedjan th:วัด|สถานที่ประกอบพิธีกรรม @@ -2841,6 +2920,7 @@ pt:Santuário|templo|local de culto pt-BR:Templo shintoísta|santuário|local de culto ro:Sanctuar|templu|loc de cult es:Ermita|templo|lugar de culto +et:Pühamu|religioosne koht eu:Ermita|tenplua|gurtzalekua sv:Altare|plats för tillbedjan|tempel th:ศาลเจ้า|สถานที่ประกอบพิธีกรรม @@ -2876,6 +2956,7 @@ pt:4Sinagoga|templo|local de culto pt-BR:4Sinagoga|templo|local de culto ro:4Sinagogă|templu|loc de cult es:4Sinagoga|templo|lugar de culto +et:4Sünagoog|tempel|religioosne koht eu:4Sinagoga|tenplua|gurtzalekua sv:4Synagoga|plats för tillbedjan|tempel th:มัสยิดยิว|สถานที่ประกอบพิธีกรรม @@ -2911,6 +2992,7 @@ pt:Templo taoísta|local de culto pt-BR:Templo taoísta|local de culto ro:Templu|loc de cult es:Templo|lugar de culto +et:Tempel|religioosne koht eu:Tenplua|gurtzalekua sv:Tempel|plats för tillbedjan th:วัด|สถานที่ประกอบพิธีกรรม @@ -2946,6 +3028,7 @@ pt:2Museu|3galeria pt-BR:2Museu ro:3Muzeu es:2Museo +et:2Muuseum eu:2Museoa sv:2Museum th:2พิพิธภัณฑ์|แหล่งท่องเที่ยว|การท่องเที่ยว @@ -2982,6 +3065,7 @@ pt:2Queda de água|2Cascata|2Salto|2Catarata pt-BR:2Cachoeira|2Queda de água|2Cascata|2Salto|2Catarata ro:3Cascadă es:3Cascada +et:3Kosk eu:3Kaskada sv:2Vattenfall th:2น้ำตก @@ -3005,6 +3089,7 @@ da:3Arkæologisk sted de:Ausgrabungen|4Ausgrabungsstätte|4Archäologische Stätte el:Αρχαιολογικός χώρος|θέαμα|τουρισμός|αξιοθέατα es:Yacimiento arqueológico +et:4Arheoloogiline koht eu:Aztarnategi arkeologikoa fa:سایت باستان شناسی fi:3Arkeologinen kohde @@ -3043,6 +3128,7 @@ da:Slagmark de:4Schlachtfeld el:Πεδίο μάχης es:Campo de batalla +et:Lahinguväli eu:Gudu zelai fa:میدان جنگ fi:Taistelukenttä @@ -3080,6 +3166,7 @@ da:Grænsesten de:4Grenzstein|4Markstein el:Οριακή πέτρα es:Hito fronterizo +et:Piirikivi eu:Zedarri fa:نشانگر مرز fi:Rajamerkki @@ -3118,6 +3205,7 @@ de:Burg|Schloss|Festung|Palast|Wallburg|Kreml|Herrenhaus|Palais|Ruine el:Κάστρο|θέαμα|τουρισμός|αξιοθέατα|Ρωμαϊκό κάστρο|Οχυρωμένη εκκλησία|Φρούριο|Κρεμλίνο|Αρχοντικό|Παλάτι es:4Castillo|Castrum|Iglesia fortificada|Fortaleza|Castro|Kremlin|Casa solariega|Palacio eu:4Gaztelua|Castrum|Eliza-gotorleku|Gotorlekua|Kastro|Kremlina|Jauregitxo|Jauregi +et:Loss|Palee|Kindlus|Linnamägi|Kreml|Mõis fa:قلعه تاریخی|قلعه رومی|کلیسای مستحکم|تپه‌قلعه|کرملین|خانه ارباب یا صاحب تیول|کاخ|گردشگری fi:Linna|Castra|Linnoitus|Linnavuori|Kreml|Kartano|Palatsi fr:4Château|4Forteresse|4Palais|Église fortifiée|Colline fortifiée|Kremlin|Manoir @@ -3154,6 +3242,7 @@ da:Byport de:4Stadttor el:Πύλη της πόλης es:Puerta de la ciudad +et:Linnavärav eu:Portale fa:دروازه شهر fi:Kaupungin portti @@ -3191,6 +3280,7 @@ da:Bymur de:Stadtmauer el:Τείχος της πόλης es:Muro de la ciudad +et:Linnamüür eu:Hiri harresia fa:دیوار شهر fi:Kaupungin muuri @@ -3228,6 +3318,7 @@ da:Fort de:Fort el:Φορτ es:Fuerte +et:Kindlus eu:Gotorlekua fa:دژ fi:Fort @@ -3265,6 +3356,7 @@ da:Galge de:3Galgen el:Αγχόνη es:Horca +et:Võllas eu:Urkamendi fa:چوبه دار fi:Sappeja @@ -3301,6 +3393,7 @@ da:Mindesmærke|mindesten de:Denkmal|Gedenkstätte el:Μνημείο|θέαμα|τουρισμός|αξιοθέατα es:4Memorial +et:4Mälestusmärk|monument eu:4Oroigarria fa:یادبود تاریخی fi:3Muistomerkki @@ -3338,6 +3431,7 @@ da:Mindesmærkekors de:3Gedenkkreuz el:Σταυρός μνήμης es:Cruz conmemorativa +et:Mälestusrist eu:Oroimenezko gurutzea fa:صلیب یادبود fi:Muistoristi @@ -3375,6 +3469,7 @@ da:Mindesmærke de:3Gedenktafel el:Μνημείο es:Placa conmemorativa +et:Mälestusmärk eu:Oroitzapenezko plaka fa:گردشگری fi:Muistomerkki @@ -3413,6 +3508,7 @@ da:Mindesmærke de:4Skulptur el:Μνημείο es:Escultura +et:Skulptuur eu:Eskultura fa:گردشگری fi:Muistomerkki @@ -3450,6 +3546,7 @@ da:Mindesmærke de:4Statue el:Μνημείο es:Estatua +et:Kuju eu:Estatua fa:گردشگری fi:Muistomerkki @@ -3487,6 +3584,7 @@ da:Stolpersten de:3Stolperstein el:Λίθοι Μνήμης es:Stolperstein +et:Komistuskivi eu:Stolperstein fa:سنگ مانع fi:Kompastuskivet @@ -3524,6 +3622,7 @@ da:Krigsmindesmærke de:4Kriegerdenkmal|Kriegsdenkmal el:Μνημείο του Αγνώστου Στρατιώτη es:Monumento a la guerra +et:Sõjamemoriaal eu:Gerra memoriala fa:رزم‌یاد fi:Sotamuistomerkki @@ -3561,6 +3660,7 @@ da:4Monument de:4Monument el:Μνημείο|θέαμα|τουρισμός|αξιοθέατα es:4Monumento +et:4Monument eu:4Monumentua fa:بنای تاریخی fi:4Monumentti @@ -3598,6 +3698,7 @@ da:Kag de:Pranger el:Κύφωνας es:Picota +et:Häbipost eu:Urkabe fa:تخته‌بند fi:Häpeäpaalu @@ -3635,6 +3736,7 @@ da:3Ruiner de:3Ruinen el:Ερείπια|χαλάσματα|θέαμα|τουρισμός|αξιοθέατα es:3Ruinas +et:3Varemed eu:3Hondakinak fa:خرابه های تاریخی fi:Rauniot @@ -3671,6 +3773,7 @@ cs:Pamětihodnost de:4Schiff|Boot el:Αξιοθέατο es:Barco|Navío +et:Laev|paat eu:Turismoa fa:گردشگری fi:Nähtävyydet @@ -3709,6 +3812,7 @@ da:Grav de:Grab el:Αξιοθέατο es:Tumba|Sepultura +et:Hauakamber|haud|memoriaal eu:Ehorztoki fa:گردشگری fi:Nähtävyydet @@ -3746,6 +3850,7 @@ da:Kors ved vejsiden de:4Wegkreuz|4Flurkreuz el:Σταυρός στην άκρη του δρόμου es:Cruz de término +et:Teeäärne rist eu:Bideko gurutze fa:صلیب کنار راه fi:Tienvarren risti @@ -3783,6 +3888,7 @@ da:Skrin ved vejsiden de:4Bildstock|4Marterl|4Wegstock|4Helgenstöckli el:Εικονοστάσιο στην άκρη του δρόμου es:Peto de ánimas +et:Teeäärne pühakoht eu:Bide bazterreko baseliza fa:حرم کنار راه fi:Tienvarren pyhäkkö @@ -3816,6 +3922,7 @@ ru:Место для выгула собак|3выгул собак|Площад bg:Кучешка зона|домашни любимци cs:3Psí hřiště es:Parque para perros +et:3Koerte ala|koerte park fr:Parc canin nl:4Hondenpark|Hondengebied ko:개 놀이 공원|도그 파크 @@ -3850,6 +3957,7 @@ pl:2Ogród pt:2Jardim pt-BR:2Jardim|lazer es:2Jardín +et:3Aed eu:2Lorategia sv:2Trädgård th:2สวน @@ -3886,6 +3994,7 @@ pt:2Assento|3Banco pt-BR:Assento|Banco de praça ro:Banchetă|Bancă|Bancă parc es:Banco +et:Pink eu:Bankua sv:Bänk th:ม้านั่ง @@ -3922,6 +4031,7 @@ pt:Aluguer de bicicletas|4bicicleta|3aluguar pt-BR:Aluguel de bicicletas|4bicicleta|3aluguel ro:Închiriere de biciclete|Bicicletă es:Alquiler de bicicletas|4bicicleta|3alquiler +et:Jalgrataste laenutus eu:Bizikleta alokairua|4bizikleta|3alokairua sv:4Cykeluthyrning|cykel|cykel|3uthyrning th:4จักรยานให้เช่า|4จักรยาน|บริการรถเช่า @@ -3942,6 +4052,7 @@ cs:Oprava jízdních kol|4jízdní kolo|3kolo|Oprava da:4Cykel reparation de:4Fahrradreparatur|Radservicestation|Radreparatur es:Reparación de bicicletas|4bicicleta +et:Jalgrataste remondipunkt fa:تعمیر دوچرخه fi:Polkupyörän korjaus fr:Réparation de vélos|vélo|bicyclette|réparation @@ -3968,6 +4079,7 @@ da:Delebiler de:3Carsharing|Car-Sharing|Carsharing-Dienste|Auto teilen|Auto|Teilen|Fahrgemeinschaft|Mitfahrzentrale el:Παραχώρηση αυτοκινήτου es:Compartir coche +et:Auto jagamine eu:Partekatu autoa fi:Autojen yhteiskäyttö fr:Station d'autopartage|auto-partage @@ -4016,6 +4128,7 @@ pt:Aluguer de automóveis|3carro|3automóvel|3aluguer|3rent-a-car pt-BR:Aluguel de automóveis|carro|aluguel ro:Închiriere mașini es:3Coche de alquiler|alquiler +et:4Autorent eu:3Autoa alokairua|alokairua sv:3Biluthyrning|bilpool|bil|uthyrning|delning th:3รถยนต์|บริการรถเช่า @@ -4052,6 +4165,7 @@ pt:3Cinema pt-BR:3Cinema ro:3Cinema es:3Cine +et:3Kino eu:3Zinema sv:3Bio|biograf th:3โรงภาพยนตร์ @@ -4089,6 +4203,7 @@ pt:3Teatro pt-BR:3Teatro ro:3Teatru es:3Teatro +et:3Teater eu:3Antzerkia sv:3Teater th:3โรงละคร @@ -4125,6 +4240,7 @@ pt:3Discoteca|3dançar|3Danceteria pt-BR:3Boate|3discoteca|4casa noturna|3dançar ro:Club de noapte es:3Discoteca +et:3Ööklubi eu:3Diskoteka sv:3Nattklubb|3disco|dans th:3ไนต์คลับ|การเต้นรำ @@ -4160,6 +4276,7 @@ pt:Bordel|3Casa de prostituição pt-BR:Bordel ro:Bordel es:Burdel +et:Bordell eu:Bordela sv:Bordell th:ซ่อง @@ -4193,6 +4310,7 @@ pl:Kasyno pt:Casino pt-BR:Cassino es:Casino +et:Kasiino eu:Kasinoa sv:Kasino th:คาสิโน @@ -4228,6 +4346,7 @@ pt:Escola técnica|3Cursos técnicos pt-BR:Escola técnica ro:4Colegiu es:4Colegio +et:Kolledž eu:4Unibertsitatea sv:Högskola th:วิทยาลัย @@ -4265,6 +4384,7 @@ pt:Quartel de bombeiros|2Bombeiros pt-BR:Posto de bombeiros|corpo de bombeiros ro:Unitate de pompieri es:Parque de bomberos +et:Tuletõrje jaam eu:Suhiltzaileen parkea sv:Brandstation th:2สถานีดับเพลิง @@ -4301,6 +4421,7 @@ pt:4Fonte decorativa|chafariz pt-BR:4Fonte|chafariz ro:4Fântână es:4Fuente +et:Purskkaev eu:4Iturria sv:4Fontän th:น้ำพุ @@ -4337,6 +4458,7 @@ pt:Sepultura|5Cemitério pt-BR:5Cemitério ro:Cimitir es:5Cementerio +et:Surnuaed eu:5Hilerria sv:Begravningsplats|kyrkogård|gravplats th:สุสาน @@ -4359,6 +4481,7 @@ da:Bedemand de:7Bestattungsinstitut|Bestatter|5Beerdigungsunternehmer|Beerdigungsinstitut|Leichenbestatter el:Γραφεία τελετών es:5Funeraria +et:Matusebüroo eu:5Beilatokia fa:مسئول تشییع جنازه fi:Hautaustoimisto @@ -4410,6 +4533,7 @@ pt:3Hospital pt-BR:3Hospital ro:3Spital es:4Hospital +et:4Haigla eu:4Ospitalea sv:4Sjukhus th:3คลินิก @@ -4434,6 +4558,7 @@ da:sygehus nl:kliniek|hospitaal|3dokter|3eerste hulp fr:clinique|3médecin|3docteur de:Spital|Klinik|3Arzt|Doktor|Medizinische Einrichtung|Medizinisches Zentrum|Gesundheitswesen|3Ambulanz|Gesundheitsdienstleistungen|Erste Hilfe +et:Haigla|kliinik|3arst|meditsiinikeskus|terviseteenused|esmaabi hu:rendelőintézet|3orvos ja:クリニック|医師|医者|ドクター|救急|診療 mr:रुग्णालय|हॉस्पिटल @@ -4474,6 +4599,7 @@ pt:4Clínica|centro de saúde|USF|Unidade de Saúde Familiar|Posto médico|polic pt-BR:4Clínica|centro de saúde|posto de saúde|policlínica|centro médico|posto médico ro:4Clinică|5policlinică|4doctor|medic|diagnostică es:4Clínica|centro de salud|hospital +et:4Kliinik|haigla|3arst|diagnostika|terviseteenused eu:4Klinika|osasun zentroa|ospitalea sv:4Klinik|sjukhus th:คลินิก|โรงพยาบาล @@ -4508,6 +4634,7 @@ pt:Médico|Gabinete médico|Consultório médico|clínica pt-BR:Consultório médico|clínica|saúde ro:4Doctor|medic|Cabinet medical|Clinică|spital es:Consulta del médico|Clínica|hospital +et:Arsti vastuvõtt|kliinik|haigla eu:Medikua|Klinika|Ospitalea sv:Läkarmottagning|klinik|sjukhus th:ห้องแพทย์|โรงพยาบาล|คลินิก @@ -4543,6 +4670,7 @@ pt:4Dentista pt-BR:4Dentista|cirurgião dentista|centro odontológico ro:4Dentist es:4Dentista +et:4Hambaarst eu:4Odontologoa sv:Tandläkare th:ทันตแพทย์ @@ -4566,6 +4694,7 @@ da:Medicinsk laboratorium de:Medizinisches Labor el:Ιατρικό Εργαστήριο es:Laboratorio médico +et:Meditsiinilabor|labor eu:Medikuntza laborategia fa:ﯽﮑﺷﺰﭘ ﻩﺎﮕﺸﯾﺎﻣﺯﺁ fi:Lääketieteellinen laboratorio @@ -4653,6 +4782,7 @@ pt:Posto de caça pt-BR:Estande de caça ro:Stand de vânătoare es:Galería de caza +et:Jahipidamise koht eu:Ehiza galeria sv:Jakttorn th:จุดล่าสัตว์ @@ -4690,6 +4820,7 @@ pt:Jardim de infância|Jardim infantil|escola infantil|pré-escola pt-BR:Jardim de infância|escola infantil|pré-escola ro:Grădiniță es:Guardería +et:Lasteaed|päevahoid|eelkool eu:Haurtzaindegia sv:Förskola|dagis th:4โรงเรียนอนุบาล @@ -4726,6 +4857,7 @@ pt:3Biblioteca pt-BR:3Biblioteca ro:3Bibliotecă es:3Biblioteca +et:3Raamatukogu eu:3Liburutegia sv:3Bibliotek th:3ห้องสมุด @@ -4754,6 +4886,7 @@ pt:3Estacionamento pt-BR:3Estacionamento tr:Otopark es:3aparcamiento +et:3Parkla eu:3Aparkalekua sv:Parkering uk:автостоянка @@ -4789,6 +4922,7 @@ pt:3Farmácia pt-BR:3Farmácia ro:3Farmacie es:3Farmacia +et:3Apteek eu:3Farmazia sv:3Apotek th:3ร้านขายยา @@ -4821,6 +4955,7 @@ pt:Parafarmácia pt-BR:3Drogaria tr:eczane es:3Farmacia +et:3Apteek eu:3Farmazia sv:apotekare th:เภสัชกร @@ -4855,6 +4990,7 @@ pt:3Correios pt-BR:3Correios ro:3Poştă es:4Oficina de correos +et:3Post eu:Posta bulegoa sv:3Post th:3ไปรษณีย์ @@ -4893,6 +5029,7 @@ pt:3Caixa de correio|correios pt-BR:3Caixa de correio|correios ro:Cutie poștală es:3Buzón +et:3Postkast eu:3Postontzia sv:3Postlåda|brevlåda|post th:3ตู้จดหมาย|ไปรษณีย์ @@ -4923,6 +5060,7 @@ pt:Estação de correios|Posto de correios|Correios pt-BR:3Correios ro:Oficiu poștal es:3post +et:3Postkontor eu:4Posta bulegoa|3post sv:3Postkontor tr:3Postane @@ -4955,6 +5093,7 @@ pt:Contentor do lixo|Caixote do lixo|lixo pt-BR:Depósito de lixo|lixo ro:Gunoi es:Basura +et:Prügikast eu:Zaborrontzia sv:4Avfallscontainer|Soptunna|skräp|avfall th:ขยะ|ถังขยะ @@ -4994,6 +5133,7 @@ pt:Centro de reciclagem|Ecocentro pt-BR:Reciclagem|descarte seletivo ro:Centru de reciclare es:Centro de reciclaje|punto limpio +et:Taaskasutuskeskus eu:Birziklatze zentroa|garbigune sv:Återvinningscentral th:ศูนย์รีไซเคิล @@ -5030,6 +5170,7 @@ pt:Ecoponto|Contentor de reciclagem|Papelão|Vidrão|Embalão|Oleão|reciclagem pt-BR:Recipiente de reciclagem ro:Containere pentru reciclare es:Contenedor de reciclaje +et:Prügikonteiner eu:Birziklatzeko edukiontzia es-MX:Contenedor de reciclaje sv:Behållare för återvinningsbart avfall @@ -5054,6 +5195,7 @@ da:Batterier de:Batterien el:Μπαταρίες es:Baterías +et:Patareid eu:Bateriak fa:ﺎﻫ ﯼﺮﺗﺎﺑ fi:Paristot @@ -5107,6 +5249,7 @@ ro:Haine vechi|Înmânarea lucrurilor inutile es:Ropa vieja|Reciclaje de cosas innecesarias eu:Arropa zaharra|Alferrikako gauzak birziklatzea es-MX:Ropa vieja|Reciclaje de cosas innecesarias +et:Rõivaste taaskasutus sv:Gamla kläder|Överlämna onödiga saker th:เสื้อผ้าเก่า|รีไซเคิลเสื้อผ้าเก่า tr:4Eski kıyafetler|Eski kıyafetler geri dönüşümü|Kıyafet toplama kutusu @@ -5144,6 +5287,7 @@ ro:Deșeuri de sticlă es:Cascos de botellas eu:Botila kaskoak es-MX:Envase de vidrio +et:Taarapunkt sv:Returglas th:ขวดแก้ว tr:4Cam şişeler Geri Dönüşümü @@ -5181,6 +5325,7 @@ ro:Deșeuri de hârtie es:Desperdicio de papel|Papel de desecho eu:Hondakin-papera|Hondar-papera es-MX:Desechos de papel +et:Vanapaber sv:Returpapper th:ขยะกระดาษ tr:5Kağıt atıkları Geri Dönüşümü @@ -5218,6 +5363,7 @@ ro:Deșeuri de plastic es:Residuos de plástico|Residuos plásticos eu:Hondakin plastikoa|Hondakin plastikoa es-MX:Desechos de plástico +et:Plastiku taaskasutus sv:Plastavfall th:ขยะพลาสติก tr:5Plastik atıklar Geri Dönüşümü @@ -5255,6 +5401,7 @@ ro:Sticle de plastic es:Botellas de plástico eu:Plastikozko botilak es-MX:Botellas de plástico +et:Plastpudelite taaskasutus sv:Samling av plastflaskor th:ขวดพลาสติก tr:5Plastik şişeler Geri Dönüşümü @@ -5292,6 +5439,7 @@ ro:Resturi de metal es:Residuos de metal|Chatarra eu:Hondakin metalikoak|Chatarra es-MX:Desechos de metal +et:Vanametalli kokkuost sv:Metallskrap th:โลหะมีคม tr:5Hurda Metaller Geri Dönüşümü @@ -5328,7 +5476,8 @@ pt-BR:Lixo eletrônico ro:Deșeuri electrice es:Residuos electrónicos|Chatarra electrónica eu:Hondakin elektronikoak|Chatarra elektronikoa -es-MX:Desechos electrónicos +es-MX:Desechos electrónico +et:Elektroonika taaskasutus sv:Elektriskt avfall th:ขยะอิเล็กทรอนิกส์ tr:5Elektronik Geri Dönüşümü @@ -5347,6 +5496,7 @@ be:5Прыём кардона|Прыём макулатуры|5Перапрац tr:5Karton Geri Dönüşümü uk:5Прийом картону|Прийом макулатури|5Переробка картону|5Здати картон|Здати макулатуру|4Збір картону|Збір макулатури|5Макулатура mr:पुठ्ठा भंगारवाला +et:Lainepapi taaskasutus recycling-cans|@recycling en:4Recycling of Cans|4Cans Recycling|4Aluminium Cans Recycling|3Tin Cans Recycling @@ -5355,6 +5505,7 @@ be:5Прыём бляшаных і алюмініевых слоікаў|5Пер tr:4Kutu Geri Dönüşümü uk:5Прийом жерстяних та алюмінієвих банок|5Переробка жерстяних та алюмінієвих банок|5Здати жерстяні та алюмінієві банки|4Збір жерстяних та алюмінієвих банок|6Консервні банки|5Жерстяні банки|5Алюмінієві банки|Пивні банки mr:कॅन भंगारवाला +et:Purkide taaskasutus recycling-shoes|@recycling en:4Recycling of Shoes|Shoes Recycling|Donate Shoes @@ -5363,6 +5514,7 @@ ru:5Приём обуви|Старая обувь|5Сдать обувь tr:5Ayakkabı Geri Dönüşümü|Ayakkabı Toplama Kutusu uk:5Прийом взуття|Старе взуття|5Здати взуття mr:शूज भंगारवाला +et:Jalanõude taaskasutus recycling-green_waste|@recycling en:4Recycling of Green Waste|5Organic Waste Recycling|5Green Waste Recycling|Food Waste|Garden Waste @@ -5371,6 +5523,7 @@ ru:5Приём органических отходов|Приём пищевых tr:5Yeşil Atıkların Geri Dönüşümü uk:5Прийом органічних відходів|Прийом харчових відходів|5Здати органічні відходи|4Збір органічних відходів|Збір харчових відходів|5Харчові відходи|6Садові відходи mr:हिरव्या कचऱ्याचे पुनर्वापर +et:Rohejäätmete taaskasutus recycling-cartons|@recycling en:4Recycling of Bewerage Cartons|5Cartons Recycling|5Bewerage Cartons Recycling @@ -5378,6 +5531,7 @@ be:5Прыём тетрапака|5Здаць тетрапак|4Збор тет ru:5Приём тетрапака|5Сдать тетрапак|4Сбор тетрапака|5Тетрапак tr:5Karton Kutu Geri Dönüşümü|4Tetrapak uk:5Прийом тетрапака|5Здати тетрапак|4Збір тетрапака|5Тетрапак +et:Tetrapakkide taaskasutus amenity-sanitary_dump_station|@rv en:2RV Dump Station|5Holding Tank Dump Station|4Dump Station|sanitary dump station|sewage|RV waste|5motorhome dump station|5camper dump station|4caravan dump station @@ -5389,6 +5543,7 @@ it:4Camper service ru:4Слив нечистот|слив туалета|слив для туалета|нечистоты|канализация tr:6Karavan Çöplüğü uk:4Злив нечистот|слив туалету|слив для туалету|нечистоти|каналізація +et:Haagiselamute jäätmepunkt amenity-school en:3School|U+1F392|U+1F3EB @@ -5412,6 +5567,7 @@ pt:3Escola pt-BR:3Escola ro:3Școală es:3Escuela|colegio +et:3Kool eu:3Eskola|institutua sv:3Skola th:2โรงเรียน @@ -5448,6 +5604,7 @@ pt:Abrigo pt-BR:Abrigo ro:Adăpost es:Refugio +et:4Varjend eu:Aterpea sv:Skyddsrum th:ที่อยู่อาศัย @@ -5484,6 +5641,7 @@ pt:3Telefone pt-BR:3Telefone|3orelhão ro:3Telefon es:2Teléfono +et:2Telefon eu:3Telefonoa sv:2Telefon th:2โทรศัพท์ @@ -5522,6 +5680,7 @@ pt:Casa de banho|WC pt-BR:4Banheiro ro:3Toaletă es:WC +et:WC eu:Komuna sv:3Toalett th:3ห้องน้ำ @@ -5552,6 +5711,7 @@ pl:wc|ubikacja|wychodek pt:Casa de banho|WC|Sanitários|lavatório pt-BR:toalete|wc|sanitários|lavabo|privada es:3Baños|aseos|3lavabo|inodoro|baño|wc +et:WC|tualett eu:3Komunak|3konketa sv:WC|toalett tr:WC|tuvalet @@ -5582,6 +5742,7 @@ pt:4Universidade|faculdade|poliécnico pt-BR:4Universidade|faculdade ro:4Universitate es:4Universidad +et:4Ülikool eu:4Unibertsitatea sv:4Universitet th:4มหาวิทยาลัย @@ -5618,6 +5779,7 @@ pt:Continente pt-BR:Continente ro:Continent es:Continente +et:Kontinent eu:Kontinentea sv:Kontinent th:ทวีป @@ -5654,6 +5816,7 @@ pt:País pt-BR:País ro:Continent es:País +et:Riik eu:Herrialdea sv:Land th:ประเทศ @@ -5690,6 +5853,7 @@ pt:Cidade pt-BR:Cidade ro:Municipiu es:Ciudad +et:Linn eu:Herria sv:Stad|stad th:เมือง @@ -5726,6 +5890,7 @@ pt:Vila|Cidade pt-BR:Cidade ro:Oraș es:Pueblo +et:Linn eu:Herria sv:Stad|stad th:เมือง @@ -5762,6 +5927,7 @@ pt:Capital pt-BR:Capital ro:Capitală es:Capital|ciudad +et:Pealinn|linn eu:Hiriburua|hiria sv:Huvudstad|stad th:เมือง|เมืองหลวง @@ -5798,6 +5964,7 @@ pt:Município pt-BR:Município ro:Județ es:Municipio +et:Maakond eu:Udalerria sv:Län th:เขต @@ -5833,6 +6000,7 @@ pt:Estado|província pt-BR:Estado|província ro:Stat es:Estado|provincia +et:Maakond|provints eu:Estatu|probintzia sv:Stat|provins th:รัฐ @@ -5869,6 +6037,7 @@ pt:Região pt-BR:Região ro:Regiune es:Región +et:Piirkond eu:Eskualdea sv:Region th:ภูมิภาค @@ -5905,6 +6074,7 @@ pt:Ilha pt-BR:Ilha ro:Insulă es:Isla +et:Saar eu:Uhartea sv:Ö th:เกาะ @@ -5941,6 +6111,7 @@ pt:Subúrbio|distrito pt-BR:Bairro|subúrbio|distrito ro:Suburbie es:Barrio +et:Eeslinn eu:Auzoa sv:Förort|distrikt th:1ชานเมือง @@ -5966,6 +6137,7 @@ nl:Gehucht|buurtschap|dorpje|dorp fi:Pieni kylä fr:Hameau|village de:Weiler|Dorf +et:Külake hu:Falucska id:Dusun it:Piccolo villaggio @@ -6013,6 +6185,7 @@ pt:Vila pt-BR:Povoado|aldeia|vila ro:Sat es:Pueblo|aldea +et:Küla eu:Herri sv:By|by th:หมู่บ้าน|หมู่บ้านเล็ก ๆ @@ -6049,6 +6222,7 @@ pt:Localidade pt-BR:Localidade ro:Localitate es:Localidad +et:Paikkond eu:Kokapena sv:Lokalitet th:ท้องถิ่น @@ -6085,6 +6259,7 @@ pt:Quinta pt-BR:Fazenda|sítio|chácara ro:Fermă es:Granja +et:Talu eu:Baserria sv:Bondgård|gård th:ฟาร์ม @@ -6121,6 +6296,7 @@ pt:Pista de corridas pt-BR:Pista de corrida ro:Pistă de curse es:Circuito +et:Ringrada eu:Zirkuitua sv:Racerbana th:1สนามแข่ง @@ -6156,6 +6332,7 @@ pt:Caminho|trilho pt-BR:Caminho|trilha ro:Cale es:Camino +et:Rada eu:Bidea sv:Gångväg|gångstig|stig|väg th:เส้นทาง @@ -6192,6 +6369,7 @@ pt:Rua|rodovia|estrada|avenida pt-BR:Rua|rodovia|estrada|avenida ro:Stradă es:Calle +et:Tänav eu:Kalea sv:Gata|väg th:ถนน @@ -6227,6 +6405,7 @@ pt:4Saída de autoestrada pt-BR:2Saída|3junção ro:Ieșire es:Salida|3intersección +et:3Väljumine|3ristmik eu:Irten|3elkargunea sv:3Avfart|3korsning th:4ทางออก @@ -6269,6 +6448,7 @@ pt:Pico|montanha|monte pt-BR:Pico|montanha ro:Munte es:Cima|pico|montaña +et:Tipp|mägi eu:Goia|gailurra|mendia sv:Bergstopp|berg th:จุดสูงสุด|ภูเขา @@ -6286,6 +6466,7 @@ mr:शिखर natural-saddle|mountain_pass en:4Saddle|Pass be:4Седлавіна|5Перавал +et:Sadul fr:Col it:4Sella ru:4Седловина|5Перевал @@ -6315,6 +6496,7 @@ pt:Estreito pt-BR:Estreito ro:Strâmtoare es:Estrecho +et:Väin eu:Estua es-MX:Estrecho sv:Sund @@ -6352,6 +6534,7 @@ pt:Floresta|mata pt-BR:Floresta|mata ro:Pădure es:Bosque +et:Mets eu:Basoa sv:Skog th:ป่า @@ -6388,6 +6571,7 @@ pt:Parque|parque urbano pt-BR:Parque|praça ro:Parc es:Parque +et:Park eu:Parkea sv:Park th:สวนสาธารณะ @@ -6424,6 +6608,7 @@ pt:3Hostel|3Pousada|motel|Albergue pt-BR:3Hostel|3pousada|2albergue ro:3Hostel es:3Albergue juvenil|hostal|motel +et:3Hostel|motell eu:3Gazte aterpea|aterpetxea|motel sv:3Vandrarhem|motell th:3หอพัก|โมเทล @@ -6455,6 +6640,7 @@ pl:Hotel pt:motel pt-BR:motel es:motel +et:motell eu:Motel sv:motell th:โมเทล @@ -6489,6 +6675,7 @@ pt:Casa de hóspedes|pousada|motel|albergue pt-BR:Pousada|casa de hóspedes|hospedagem ro:Pensiune es:Casa de huéspedes|albergue juvenil|hostal +et:Külalistemaja eu:Ostatua|gaztetxea|aterpea sv:Gästhus|vandrarhem th:3เกสท์เฮ้าส์|โรงแรม์|์โรงแรม @@ -6525,6 +6712,7 @@ pt:3Motel|3hotel de estrada|3Pousada pt-BR:3Motel|3hotel de estrada|3pousada ro:Motel es:3Motel|albergue juvenil|hostal +et:3Motell|hostel eu:3Motel|gazte aterpea|aterpetxea sv:3Motell|vandrarhem th:3โมเทล|หอพัก @@ -6559,6 +6747,7 @@ pt:Alojamento nas montanhas|cabana alpina|3pousada|motel|hotel pt-BR:Abrigo de montanha|cabana alpina|3pousada|motel|hotel ro:Cabană de munte|hotel es:4Cabaña|cabaña alpina|hotel de montaña|hotel +et:Mägimajake|hotell|hostel|alpimaja eu:4Kabina|alpetar kabina|mendiko hotela|hotela sv:Bergsboende|hotell|vandrarhem|fjällstuga th:2ที่พักบนภูเขาโรงแรม @@ -6592,6 +6781,7 @@ pt:Cabeleireiro|Cabeleireira|barbeiro pt-BR:Cabeleireiro|barbeiro ro:Coafor es:4Peluquería +et:Juuksur eu:4Ile-apaintzailea sv:3Frisör th:3ช่างทำผม @@ -6628,6 +6818,7 @@ pt:3Aeroporto|aeródromo|3avião pt-BR:3Aeroporto|aeródromo ro:3Aeroport es:3Aeropuerto|3avión +et:3Lennujaam eu:3Aireportua|3Hegazkina sv:3Flygplats|3flygplan th:3สนามบิน|เครื่องบิน @@ -6664,6 +6855,7 @@ pt:5Estádio|desporto pt-BR:5Estádio|esporte ro:4Stadion es:5Estadio|4deporte +et:4Staadion eu:5Estadioa|4kirola sv:4Stadion|4sport th:สนามกีฬา @@ -6700,6 +6892,7 @@ pt:Parque infantil pt-BR:Parquinho|parque infantil ro:Loc de joacă es:Patio de recreo +et:4Mänguplats eu:Jolastokia sv:Lekplats th:สนามเด็กเล่น @@ -6737,6 +6930,7 @@ pt:Centro desportivo|desporto|complexo desportivo pt-BR:Centro esportivo|clube|esporte|complexo esportivo ro:4Sport es:Polideportivo|deporte +et:Spordikeskus eu:Kiroldegia|Kirola sv:4Sportcenter|sport th:กีฬา @@ -6773,6 +6967,7 @@ pt:Campo de golfe pt-BR:Campo de golfe ro:Teren de golf es:Campo de golf +et:Golfiväljak eu:Golf kurtsoa sv:Golfbana th:สนามกอล์ฟ @@ -6809,6 +7004,7 @@ pt:Campo de desporto|campo|desporto pt-BR:Campo de esportes|campo|quadra|esporte ro:Teren de sport|gazon es:Complejo deportivo|terreno|deporte +et:Spordiväljak eu:Kiroldegia|Lurra|Kirola sv:Idrottsplats|bana|sport th:พื้นสนามกีฬา|ขว้าง|กีฬา @@ -6845,6 +7041,7 @@ pt:4Piscina|desporto pt-BR:4Piscina|esporte ro:Piscină es:4Piscina|deporte +et:4Ujumisbassein|sport eu:4Igerilekua|kirola sv:4Simbassäng|sport th:4สระว่ายน้ำ @@ -6869,6 +7066,7 @@ de:Amerikanischer Fußball el:αμερικάνικο ποδόσφαιρο es:Fútbol americano es-MX:Fútbol americano +et:Ameerika jalgpall eu:Futbol amerikarra fa:فوتبال آمریکایی fi:Amerikkalainen jalkapallo @@ -6907,6 +7105,7 @@ de:Bogenschießen el:Τοξοβολία es:Tiro al arco es-MX:Tiro al arco +et:Vibulaskmine eu:Arku-tiroa fa:تیراندازی با کمان fi:Jousiammunta @@ -6945,6 +7144,7 @@ da:Atletik de:Leichtathletik el:Στίβος es:Atletismo +et:Kergejõustik eu:Atletismoa fa:ورزشکاری fi:Yleisurheilu @@ -6979,6 +7179,7 @@ da:Australsk fodbold de:Australian Football el:Αυστραλιανό ποδόσφαιρο es:Fútbol australiano +et:Austraalia jalgpall eu:Australiako futbol araua fa:فوتبال استرالیایی fi:Australialainen jalkapallo @@ -7013,6 +7214,7 @@ de:Baseball el:Μπέιζμπολ es:Béisbol es-MX:Béisbol +et:Pesapall eu:Beisbol fa:بیسبال fi:Baseball @@ -7050,6 +7252,7 @@ da:Basketball de:Basketball el:Καλαθόσφαιρα es:Baloncesto +et:Korvpall eu:Saskibaloia fa:بسکتبال fi:Koripallo @@ -7085,6 +7288,7 @@ de:Beachvolleyball el:Μπιτς βόλεϊ es:Voleibol de playa eu:Hondartza-bolei +et:Rannavõrkpall fa:والیبال ساحلی fi:Rantalentopallo fr:Beach-volley @@ -7117,6 +7321,7 @@ ar:لعبة البولينج be:Боўлз de:Bowls es:Bolos sobre hierba +et:Murukeegel fa:لعبة البولينج fi:Nurmikeilailu fr:Boulingrin @@ -7148,6 +7353,7 @@ da:Skak de:Schach el:Σκάκι es:Ajedrez +et:Male eu:Xake fa:شطرنج fi:Shakki @@ -7182,6 +7388,7 @@ be:Крикет cs:Kriket de:Cricket es:Críquet +et:Kriket eu:Kilkerra fa:کریکت fi:Kriketti @@ -7215,6 +7422,7 @@ de:Eisstockschießen|Curling el:Κέρλινγκ es:Curling es-MX:Curling +et:Kurling eu:Curling fa:کرلینگ fi:Curling @@ -7252,6 +7460,7 @@ da:Ridesport de:Reitsport el:Ιππασία es:Deportes ecuestres +et:Ratsasport eu:Zaldi-kirolak fa:سوارکاری fi:Ratsastus @@ -7286,6 +7495,7 @@ de:Golf el:Γκολφ es:Golf es-MX:Golf +et:Golf eu:Golfa fa:گلف fi:Golf @@ -7324,6 +7534,7 @@ de:Gymnastik el:Γυμναστική es:Gimnasia es-MX:Gimnasia +et:Sportvõimlemine eu:Gimnasia fa:ژیمناستیک fi:Voimistelu @@ -7362,6 +7573,7 @@ de:Handball el:Τόπι es:Balonmano es-MX:Balonmano +et:Käsipall eu:Eskubaloia fa:هندبال fi:Käsipallo @@ -7401,6 +7613,7 @@ de:Gerätetauchen el:Κατάδυση es:Submarinismo es-MX:Submarinismo +et:Sukeldumiskoht eu:Urpekaritza fa:غواصی fi:Sukellus @@ -7438,6 +7651,7 @@ de:Schießen el:Κυνήγι es:Tiroteo es-MX:Tiroteo +et:Laskmine eu:Tiroketa fa:ورزش تیراندازی fi:Ammunta @@ -7476,6 +7690,7 @@ da:Skateboarding de:Skateboarding el:Σκέιτμπορντινγκ es:Monopatinaje +et:Rulasõit eu:Skateboarding fa:اسکیت‌بردینگ fi:Rullalautailu @@ -7513,6 +7728,7 @@ de:Skifahren el:Χιονοδρόμια es:Esquí es-MX:Esquí +et:Suusatamine eu:Eskia fa:اسکی fi:Hiihto @@ -7551,6 +7767,7 @@ de:Fußball el:Ποδόσφαιρο es:Fútbol es-MX:Fútbol +et:Jalgpall eu:Futbola fa:فوتبال fi:Jalkapallo @@ -7589,6 +7806,7 @@ da:Svømning de:Schwimmen el:Κολύμβηση es:Natación +et:Ujumine eu:Igeriketa fa:شنا fi:Uinti @@ -7627,6 +7845,7 @@ da:Bordtennis de:Tischtennis el:Επιτραπέζια αντισφαίριση es:Tenis de mesa +et:Lauatennis eu:Mahai-tenis fa:تنیس روی میز fi:Pöytätennis @@ -7665,6 +7884,7 @@ de:Tennis el:Τένις es:Tenis es-MX:Tenis +et:Tennis eu:Tenisa fa:تنیس fi:Tennis @@ -7703,6 +7923,7 @@ da:Volleyball de:Volleyball el:Πετοσφαίριση es:Voleibol +et:Võrkpall eu:Boleibol fa:والیبال fi:Lentopallo @@ -7740,6 +7961,7 @@ da:Keglespil|Bowling de:Kegeln|Bowling el:Μπόουλινγκ με εννέα κορίνες|Μπόουλινγκ es:Bolos de nueve bolas|Bowling +et:Bowling|keegel eu:Boloak|Bowling fa:اسکیت|بولینگ fi:Yhdeksän-pin keilailu|Keilailu @@ -7789,6 +8011,7 @@ pt:Edifício|prédio|construção pt-BR:Edifício|prédio|construção ro:Clădire es:Edificio +et:Hoone eu:Eraikin sv:Byggnad th:2อาคาร @@ -7827,6 +8050,7 @@ pt:4Polícia pt-BR:4Polícia ro:4Poliție es:4Policía +et:4Politsei eu:4Poliziak sv:4Polis th:4ตำรวจ @@ -7861,6 +8085,7 @@ zh-Hant:警察|警員 sk:3policajná stanica fa:کلانتری|اگاهی el:Αστυνομία +et:Politsei office-diplomatic en:4Embassy @@ -7884,6 +8109,7 @@ pt:4Embaixada|3Consulado pt-BR:4Embaixada ro:4Ambasadă es:4Embajada +et:4Saatkond eu:4Enbaxada sv:4Ambassad th:4สถานทูต @@ -7920,6 +8146,7 @@ pt:Baía pt-BR:Baía ro:Golf es:Bahía +et:Laht eu:Badia sv:Bukt th:อ่าว @@ -7957,6 +8184,7 @@ da:3Vand de:3Wasser el:3Νερό es:3Agua +et:3Vesi eu:3Ura fa:اب fi:3Vesi @@ -8007,6 +8235,7 @@ pt:2Água potável|4bebedouro|bebedoiro pt-BR:2Água potável|4bebedouro ro:Apă de băut|apă potabilă es:3Agua potable|Fuente de agua potable +et:4Joogivesi eu:3Edateko ura|Edateko uraren iturria sv:4Dricksvatten th:4น้ำดื่ม @@ -8044,6 +8273,7 @@ pt:Nascente pt-BR:Nascente ro:Izvor es:Manantial +et:Allikas eu:Udaberria sv:Vattenkälla th:ฤดูใบไม้ผลิ @@ -8081,6 +8311,7 @@ pt:Poço de água pt-BR:Poço de água ro:Puț de apă es:Pozo +et:Kaev eu:Ur putzua sv:Brunn th:บ่อน้ำ @@ -8105,6 +8336,7 @@ da:Vandstation de:6Wasseranschluss el:Παροχή νερού es:Fuente de agua|agua para caravana +et:Haagiselamu veepunkt eu:Ur iturria|karabanarako ura fi:Vesipiste fr:Point d’eau|eau pour caravane @@ -8141,6 +8373,7 @@ cs:Vodovodní kohoutek da:Vandhane de:6Wasserhahn el:Βρύση νερού +et:Veekraan es:Toma de agua eu:Ura hartzea fi:Vesihana @@ -8184,6 +8417,7 @@ cs:Vodní plocha da:Vandmasse de:Wasserfläche|Gewässer es:Cuerpo de agua +et:Veekogu eu:Ur-masa fa:پهنه آبی fi:Vesimuodostuma @@ -8218,6 +8452,7 @@ cs:Vodní nádrž da:Vandbassin de:Wasserbecken el:Μια λεκάνη νερού +et:Veehoidla es:Cuenca eu:Arroa fa:حوضه آب @@ -8271,6 +8506,7 @@ pt:Lagoa pt-BR:Lagoa ro:5Heleșteu es:5Estanque +et:Tiik eu:5Urmaela sv:Damm th:1บ่อ|น้ำ @@ -8309,6 +8545,7 @@ pt:Lago pt-BR:Lago ro:Lac es:Lago +et:Järv eu:Lakua sv:Sjö th:ทะเลสาบ @@ -8335,6 +8572,7 @@ da:5Reservoir de:5Reservoir el:Δεξαμενή es:5Reservorio +et:Reservuaar eu:5Urtegia fa:مخزن fi:Säiliö @@ -8385,6 +8623,7 @@ pt:Rio pt-BR:Rio|Ribeiro|Ribeira|Córrego|Riaxo ro:Râu es:Río +et:Jõgi|oja eu:Ibai sv:Flod th:แม่น้ำ @@ -8422,6 +8661,7 @@ pt:Canal pt-BR:Canal ro:Canal es:Canal +et:Kanal eu:Kanala sv:Kanal th:คลอง @@ -8458,6 +8698,7 @@ pt:Oficina de reparação de automóveis|Oficina de automóveis|Oficina|4mecâni pt-BR:Oficina de automóveis|mecânica|4mecânico|auto elétro ro:Atelier de reparații auto es:4Taller|3reparación de automóviles|coche|automóvil +et:4Autoremont eu:4Tailerra|3autoen konponketa|autoa|automobila sv:3Bilreparatör|bilverkstad|4servicestation|bil th:3ร้านซ่อมรถยนต์|สถานีบริการ @@ -8494,6 +8735,7 @@ pt:2Parque de campismo|4Campismo|5Acampamento|área de acampamento|local de acam pt-BR:4Local de acampamento|área de acampamento|4camping ro:4Camping es:4Campamento|cámping|acampar|acampada +et:5Kämping eu:4Kanpalekua|kanpamentua|kanpina sv:4Camping|campingplats|campingområde th:4การตั้งแคมป์|สถานที่ตั้งแคมป์|ที่ตั้งแคม @@ -8531,6 +8773,7 @@ pt:3Parque de caravanismo|caravanismo|4Parque de campismo|3caravana|autocaravana pt-BR:4Área de trailers|caravanismo|acampamento ro:Teren pentru campare es:Zona de caravanas|zona de camping +et:Haagiselamute ala|matkamine eu:Karabana gunea|kanpalekua sv:4Husvagnsplats th:4ขบวนนักเดินทาง @@ -8564,6 +8807,7 @@ pt:Escritório|empresa pt-BR:Escritório|empresa ro:Birou es:Oficina +et:Kontor eu:Bulegoa sv:Kontor|företag th:สำนักงาน|บริษัท @@ -8601,6 +8845,7 @@ pt:Escritório de empresa pt-BR:Escritório de empresa ro:Sediu companei es:Oficina +et:Ettevõtte kontor eu:Bulegoa sv:Företagskontor th:สำนักงานบริษัท @@ -8622,7 +8867,7 @@ ar:مكتب حكومي cs:Úřad vlády da:Regeringskontor nl:Overheidskantoor|overheidspand|regeringskantoor -fi:Viranomaistoimito +fi:Viranomaistoimisto fr:Administration publique de:Regierungsstelle hu:Kormányzati iroda @@ -8636,6 +8881,7 @@ pt:Gabinete governamental|órgão público pt-BR:Gabinete governamental|órgão público ro:Birou guvernamental es:Oficina gubernamental +et:Riigikantselei eu:Gobernu bulegoa sv:Ämbetsverk|myndighet th:หน่วยงานราชการ @@ -8672,6 +8918,7 @@ pt:Escritório de advogados|2Advogado pt-BR:Escritório de advogado|4advocacia ro:Firmă de avocatură es:Despacho de abogados|bufete +et:Advokaadibüroo eu:Abokatu bulego|abokatu bulego sv:4Advokatkontor th:สำนักงานทนายความ @@ -8707,6 +8954,7 @@ pt:Operadora móvel|3Operadora de telecomunicações pt-BR:Operadora de telecomunicações|telefonia|móvel ro:Operator de telefonie mobilă es:Operadora de telefonía móvil +et:Mobiilside operaator eu:Telefono mugikorren operadorea sv:Mobiloperatör th:ผู้ให้บริการโทรศัพท์มือถือ @@ -8730,6 +8978,7 @@ da:Biavler de:Imker el:Μελισσοκόμος es:Apicultor +et:Mesinik eu:Erlezaina fa:زنبوردار fi:Mehiläishoitaja @@ -8767,6 +9016,7 @@ da:Smed de:Schmied el:Σιδηρουργός es:Herrero +et:Sepp eu:Errementari fa:آهنگر fi:Seppä @@ -8804,6 +9054,7 @@ da:Bryggeri de:4Brauerei|Brauhaus|Hausbrauerei|Bier|Bierausschank|Hausbräu el:Ζυθοποιείο es:Fábrica de cerveza|6cervecera +et:Käsitöö pruulikoda eu:5Garagardotegia fa:کارخانه ابجوسازی fi:Panimo @@ -8842,6 +9093,7 @@ da:Tømrer de:4Zimmermann el:Ξυλουργός es:5Carpintero +et:Puusepp eu:5Arotza fa:نجار fi:Puuseppä @@ -8879,6 +9131,7 @@ da:Konfekture de:Konditor el:Ζαχαροπλάστης es:Confitería +et:Kondiiter eu:Gozogilea fa:قنادی fi:Kondiittori @@ -8916,6 +9169,7 @@ da:4Elektriker de:4Elektriker el:Ηλεκτρολόγος es:4Electricista +et:4Elektrik eu:4Elektrizista fa:برق کار fi:5Sähkömies @@ -8953,6 +9207,7 @@ da:Reparation af elektronik de:4Elektrogerätereparatur el:Επισκευή ηλεκτρονικών es:Reparación de aparatos electrónicos +et:Elektroonika remont eu:Elektronika Konponketa fa:تعمیرات الکترونیک fi:Elektroniikan korjaus @@ -8991,6 +9246,7 @@ da:Gartner de:Landschaftsgärtner|Gärtnerei el:Κηπουρός es:Paisajista +et:Aednik eu:Paisaia fa:باغبان fi:Puutarhuri @@ -9028,6 +9284,7 @@ da:Kunsthåndværk de:Kunsthandwerk el:Χειροτεχνία es:Artesanía +et:Käsitöö eu:Eskulangintza fa:صنایع دستی fi:Käsityö @@ -9065,6 +9322,7 @@ da:Blikkenslager de:Heizung, Lüftung und Klimatisierung el:Ψυκτικός es:Aire acondicionado +et:Õhkkonditsioneer eu:Aire girotua fa:گرمایش و تهویه‌هوا fi:Ilmastointilaite @@ -9102,6 +9360,7 @@ da:5Metalarbejder de:Schlosser el:5Μεταλλουργός es:Trabajador del metal +et:5Metallitööline eu:Metalgintzako langilea fa:اهن کار fi:5Metallimies @@ -9140,6 +9399,7 @@ da:Maler de:Maler el:Μπογιατζής es:Pintor +et:Maaler eu:Margolaria fa:نقاش fi:Maalari @@ -9177,6 +9437,7 @@ da:4Fotograf|studio de:4Fotograf|Fotostudio el:Φωτογράφος|Στούντιο φωτογραφίας es:4Fotógrafo|estudio de fotografía +et:4Fotograaf|fotograafia stuudio eu:4Argazkilaria|argazki estudioa fa:عکاس fi:Valokuvaaja @@ -9214,6 +9475,7 @@ da:VVS-mand de:Installateur el:Υδραυλικός es:Fontanero +et:Santehnik eu:Iturgina fa:لوله کش fi:Putkimies @@ -9252,6 +9514,7 @@ da:Savværk de:Sägewerk el:Πριστήριο es:Serrería +et:Saeveski eu:Zerrategi fa:کارخانه چوب‌بری fi:Saha @@ -9289,6 +9552,7 @@ da:Skomager|skoreparation de:Schuhreparatur|4Schuhmacher|Schuster el:Υποδηματοποιός|τσαγκάρης es:5Zapatero|zapatería +et:5Kingsepp eu:5Zapatari fa:کفاش fi:Suutari @@ -9327,6 +9591,7 @@ da:Vingård de:4Weingut el:Οινοποιείο es:4Bodega|Vino +et:Veinikelder eu:Upategi fa:شراب‌خانه fi:Viinitila @@ -9365,6 +9630,7 @@ da:Skrædder de:4Schneider el:Ράφτης|ράπτης es:Sastre|sastrería +et:Rätsep eu:Jostun|jantzi fa:خیاطی fi:Räätäli @@ -9415,6 +9681,7 @@ pt:Praça|Praceta|Largo pt-BR:Largo|praça|rua de pedestres|escadaria ro:Piață es:Plaza +et:Palee eu:Plaza sv:Torg th:สี่เหลี่ยม @@ -9450,6 +9717,7 @@ pt:Mar pt-BR:Mar ro:Mare es:Mar +et:Meri eu:Itsasoa sv:Hav th:เห็น @@ -9486,6 +9754,7 @@ pt:Oceano pt-BR:Oceano ro:Ocean es:Océano +et:Ookean eu:Ozeanoa sv:Ocean th:มหาสมุทร @@ -9524,6 +9793,7 @@ pt:WiFi|Wi-Fi pt-BR:WiFi|Wi-Fi ro:WiFi|Wi-Fi es:WiFi|Wi-Fi +et:WiFi|Wi-Fi eu:WiFi|Wi-Fi sv:WiFi|Wi-Fi th:WiFi|Wi-Fi @@ -9560,6 +9830,7 @@ pt:3Internet pt-BR:3Internet ro:3Internet es:3Internet +et:3Internet eu:3Internet sv:3Internet th:3อินเทอร์เน็ต|3Internet @@ -9596,6 +9867,7 @@ pt:Praia pt-BR:Praia ro:Plajă es:Playa +et:Rand eu:Hondartza sv:Strand th:ชายหาด @@ -9631,6 +9903,7 @@ pt:Farol pt-BR:Farol ro:Far es:Faro +et:Majakas eu:Itsasargia sv:Fyr th:ประภาคาร @@ -9649,6 +9922,7 @@ en:4Survey Point|survey marker|survey benchmark|4geodetic mark|geodetic vertex|4 be:4Геадэзічны пункт de:4Vermessungspunkt el:4Γεωδαιτικό σημείο +et:4Vaatluspunkt|geodeetiline punkt|4trigonomeetriline punkt|triangulatsioonipunkt|trigopunkt|4triangulaator fr:4Borne géodésique ja:測量標 pl:4Znak geodezyjny @@ -9666,6 +9940,7 @@ da:øko|bio|sundt|biologisk|miljømæssigt|naturligt|organisk de:3Bio|Biologische|biologisch|5Ökologische|Ökologisches|öko|bio|4organische|organisch|naturnah|natürliches|natürlich|gesundes|gesund|umweltfreundlich el:οικολογικό|βιολογικό|υγιεινό|φυσικό es:eco|5ecológicos|ecológica|ecológico|5orgánicos|orgánico|5biológica|biológicos|biológico|bio|natural|saludable +et:4orgaaniline|bio|bioloogiline|öko|ökoloogiline|tervislik eu:Eko|4ekologikoa|4organikoa|4biologikoa|bio|naturala|osasuntsua fa:اکو|زیستی|سالم|بیولوژیکی|زیست محیطی|طبیعی|ارگانیک fi:eko|bio|terveellinen|biologinen|ekologinen|luonnollinen|orgaaninen @@ -9716,6 +9991,7 @@ pt:Centro de cópias|4Fotocópias|4Impressões|Reprografia|Loja de fotocópias pt-BR:4Copiadora|4impressões ro:Centru copiere|4Imprimare es:4Copistería|4imprenta|Centro de copiado|Centro de fotocopiado +et:4Koopiakeskus|trükikoda eu:4Kopiagailu denda|4inprimaketa|Kopia zentroa|Fotokopia zentroa sv:4Kopieringsbutik|4Tryckare th:ร้านถ่ายเอกสาร|เครื่องพิมพ์ @@ -9751,6 +10027,7 @@ pt:Artigos para fotografia|molduras pt-BR:Artigos para fotografia|molduras|comércio|compras ro:Centru fotografii|cadre es:Artículos de fotografía +et:4Fotopood|raamid eu:Argazkilaritza artikuluak sv:4Fotoaffär|ramar th:ร้านถ่ายภาพ|กรอบ|ร้าน @@ -9785,6 +10062,7 @@ pt:Agência de viagens|viagens pt-BR:Agência de viagem|viagens ro:Agenție de voiaj|tururi es:Agencia de viajes|viajes +et:Reisibüroo eu:Bidaia agentzia|bidaia sv:Resebyrå|rundturer th:สำนักงานการท่องเที่ยว|ทัวร์ @@ -9820,6 +10098,7 @@ pt:Artigos de desporto ao ar livre|caminhada|pedestrianismo|escalada|campismo pt-BR:Equipamentos esportivos|caminhada|escalada|camping|comércio ro:Echipament de exterior|trekking|cățărare|campare es:Equipamiento|senderismo|escalada|acampada +et:Välisvarustus|matkamine eu:Ekipamendua|mendi-ibilaldiak|eskalada|kanpalekua sv:Fritidsutrustning|vandring|klättring|camping th:อุปกรณ์กลางแจ้ง|เดินป่า|ปีนเขา|ตั้งแคมป์|ร้าน @@ -9854,6 +10133,7 @@ pt:Limpeza a seco|lavandaria|Lavagem a seco pt-BR:Lavagem a seco|lavanderia ro:Curățătorie chimică|curățătorie es:Tintorería +et:Keemiline pesu|puhastus eu:Garbigailua sv:Kemtvätt|tvätt th:ซักแห้ง|ทำความสะอาด @@ -9890,6 +10170,7 @@ pt:Loja de pneus|pneus pt-BR:Loja de pneus|borracharia|borracheiro|comércio ro:Magazin anvelope es:Tienda de neumáticos +et:Rehvipood|rehvid eu:Pneumatikoen denda sv:Däckaffär th:ร้านยาง @@ -9925,6 +10206,7 @@ pt:5Lavagem de veículos pt-BR:5Lava-jato|5Lavagem de veículos ro:Spălătorie auto es:5Lavado de coches +et:Autopesu eu:5Auto-garbiketa sv:Biltvätt th:ล้างรถ @@ -9960,6 +10242,7 @@ pt:4Veterinário pt-BR:4Veterinário ro:Cabinet veterinar es:Clínica veterinaria +et:Loomaarst|4veterinaar eu:Albaitaritzako klinika sv:4Veterinär th:สัตวแพทย์ @@ -9995,6 +10278,7 @@ pt:Posto de carregamento elétrico|Estação de carregamento elétrico|3Ponto de pt-BR:Eletroposto|recarga|abastecimento ro:Stație încărcare|încărcare es:Estación de carga +et:4Laadimispunkt|laadimine eu:Kargatzeko geltokia sv:Laddstation|laddning th:สถานีชาร์จ|ชาร์จ @@ -10030,6 +10314,7 @@ pt:Creche|jardim de infância|jardim infantil pt-BR:Creche|jardim de infância ro:De îngrijire a copilului|Grădiniță|Îngrijire copii es:Guardería +et:Lasteaed|4Lastehoid eu:Haurtzaindegia sv:Barnomsorg|Förskola th:สถานรับเลี้ยงเด็ก|ดูแลเด็ก @@ -10066,6 +10351,7 @@ pt:Estacionamento de bicicletas pt-BR:Bicicletário|estacionamento de bicicletas ro:Parcare biciclete es:Aparcamiento de bicis +et:4Jalgrattaparkla eu:Bizikleta aparkalekua sv:4Cykelparkering th:ที่จอดจักรยาน @@ -10103,6 +10389,7 @@ pt:Caixote do lixo pt-BR:Cesto de lixo|lixeira ro:Pubelă es:Papelera +et:Prügikast eu:Paper-ontzia sv:Papperskorg|soptunna th:ถังขยะ @@ -10138,6 +10425,7 @@ pt:3Telefone de emergência pt-BR:3Telefone de emergência ro:3Telefon de urgență es:3Teléfono de emergencia +et:4Hädaabi telefon eu:3Larrialdietarako telefonoa sv:4Nödtelefon th:โทรศัพท์ฉุกเฉิน @@ -10176,6 +10464,7 @@ pt:Centro de fitness|Ginásio pt-BR:Academia de ginástica|academia de musculação|centro de fitness|ginásio ro:Centru fitness es:Centro de fitness|gimnasio +et:Jõusaal eu:Fitness zentroa|gimnasioa sv:Gym th:ฟิตเนสเซ็นเตอร์|ยิม @@ -10211,6 +10500,7 @@ pt:3Sauna pt-BR:3Sauna ro:3Saună es:3Sauna +et:3Saun eu:3Sauna sv:4Bastu th:ซาวน่า @@ -10248,6 +10538,7 @@ pt:Reparação de pneus|Recauchutagem pt-BR:Borracheiro|borracharia|pneus ro:Vulcanizare es:Reparación de neumáticos +et:Rehviparandus eu:Pneumatikoen konponketa sv:Däckverkstad th:ร้านปะยาง @@ -10283,6 +10574,7 @@ pt:Parafarmácia pt-BR:4Drogaria|farmácia ro:Mercerie es:4Droguería +et:Apteeker eu:4Botika sv:Hushållskemikalier th:ร้านเคมีภัณฑ์ @@ -10319,6 +10611,7 @@ pt:Loja de animais|loja de artigos para animais pt-BR:3Pet-shop|loja de artigos para animais ro:3Pet shop es:Tienda de mascotas +et:3Loomapood|Loomapood eu:Animali denda sv:Djuraffär th:เพ็ทชอป @@ -10354,6 +10647,7 @@ pt:Jardim zoológico|3Zoológico pt-BR:Jardim zoológico|3Zoológico ro:Grădină zoologică es:Zoo +et:Loomaaed eu:Zooa sv:Zoo th:สวนสัตว์ @@ -10385,12 +10679,13 @@ id:Kantor wisata it:Ufficio turistico ja:観光案内所 ko:관광정보센터|안내소|관광 안내소|여행객 안내소|여행자 안내소 -nb:3Turistkontor +nb:Turismiinfo pl:Biuro informacji turystycznej pt:Posto de turismo|Posto de informação turística pt-BR:Escritório de turismo ro:Birou de informații turistice es:Oficina de turismo +et:Turismipunkt eu:Turismo bulegoa sv:3Turistcenter th:ศูนย์บริการนักท่องเที่ยว @@ -10427,6 +10722,7 @@ pt:Centro comunitário|Casa do povo pt-BR:Centro comunitário ro:Centru comunitar es:Centro comunitario +et:Kogukonna keskus eu:Komunitate Zentroa sv:Stadshus th:ศูนย์ชุมชน @@ -10462,6 +10758,7 @@ pt:4Tribunal pt-BR:4Tribunal ro:Judecătorie es:Juzgado +et:Kohtumaja eu:Auzitegia sv:Domstol th:ศาล @@ -10498,6 +10795,7 @@ pt:Máquina de venda de tabaco pt-BR:Máquina de venda de cigarros ro:Automat de țigări es:Máquina expendedora de tabaco +et:Sigaretiautomaat eu:4Tabakoa saltzeko makina sv:Cigarettmaskin|cigarettautomat th:เครื่องขายบุหรี่ @@ -10516,6 +10814,7 @@ en:4Coffee Dispenser|Coffee be:3Кававы аўтамат|кава de:6Kaffeeautomat es:Máquina expendedora de café|Café +et:4Kohviautomaat|Kohvi eu:3Kafea saltzeko makina|Kafea fr:Distributeur de café|Café it:Distributore automatico di caffè|Caffè @@ -10528,6 +10827,7 @@ en:4Condoms Dispenser|Condoms|Condomat be:Аўтамат з прэзерватывамі|5прэзерватывы|5кандамат de:6Kondomautomat es:Máquina expendedora de condones|Condones +et:4Kondoomiautomaat|Kondoomid|Kondomaat eu:4Kondoiak saltzeko makina|Preserbatiboak fr:Distributeur de préservatifs|Préservatifs it:Distributore di profilattici|Preservativi @@ -10558,6 +10858,7 @@ pt:Máquina de venda de bebidas pt-BR:Máquina de venda de bebidas ro:Automat de băuturi es:Máquina expendedora de bebidas +et:Joogiautomaat eu:4Edari saltzeko makina sv:Läskautomat th:เครื่องขายเครื่องดื่มอัตโนมัติ @@ -10576,6 +10877,7 @@ en:4Food Dispenser|Food|Snacks be:Аўтамат з ежай|5перакус|4снэкі de:5Essensautomat|9Lebensmittelautomat|Snacks|Knabbereien|Nahrungsmittelautomat es:Máquina expendedora de comida|Comida|Snacks +et:Toiduautomaat|Toit|Suupisted eu:4Janaria saltzeko makina|Elikagaia|Askariak fr:Distributeur d'aliments|Aliments it:Distributore automatico di alimenti|Macchinetta automatica|Snack @@ -10594,6 +10896,7 @@ da:4Parkeringsbilletmaskine de:4Parkautomat|Parkscheinautomat|Parkticketautomat el:Εισιτήρια στάθμευσης es:Máquina de pago de tique de aparcamiento +et:Parkimispiletid|Parkimisautomaat eu:4Aparkatzeko txartelak ordaintzeko makina fa:پارکو متر fi:Pysäköintimaksuautomaatti @@ -10628,6 +10931,7 @@ da:Billetautomat for offentlig transport de:5Fahrkartenautomat|5Fahrscheinautomat el:Μηχάνημα αυτόματης πώλησης εισιτηρίων για τα μέσα μαζικής μεταφοράς es:Máquina expendedora de boletos para el transporte público +et:Piletiautomaat|Ühistranspordi piletid|Piletid eu:4Garraio publikorako txartelak saltzeko makina es-MX:Máquina expendedora de billetes de transporte público fa:دستگاه فروش خودکار بلیط های حمل و مواصلات عمومی @@ -10661,6 +10965,7 @@ en:4Newspaper Dispenser|Newspapers be:Газетны аўтамат|газетамат|3газеты|4прэса de:Zeitungsautomat|Zeitungsständer es:Máquina expendedora de periódicos|Periódicos +et:4Ajalehtede automaat|Ajalehed eu:4Egunkariak saltzeko makina|Egunkariak fr:Distributeur de journaux|Journaux it:Distributore automatico di giornali|Riviste @@ -10673,6 +10978,7 @@ en:4Sweets Dispenser|Sweets|4Candies|Lollies be:Аўтамат з прысмакамі|4прысмакі|4цукеркі de:Süßigkeitenautomat|Süßwaren|Süßigkeiten es:Máquina expendedora de dulces|Dulces|Chuches|Chucherías +et:4Maiustuste automaat|Maiustused|4Kommid|Pulgakommid eu:4Gozokiak saltzeko makina|Gozokiak fr:Distributeur de bonbons|Bonbons it:Distributore di dolci|Caramelle @@ -10684,6 +10990,7 @@ amenity-vending_machine-excrement_bags en:5Excrement Bags Dispenser|4Poop Bags|3Dog Poop Bags|Animal Waste be:5Мяшкі дзеля экскрыментаў|Какашкі|5Пакеты для какашак de:Hundetütenspender|Hundekotsähuckchenspender|Hundekotbeutelspender|Hundekotbeutel +et:4Koeraväljaheidete kottide automaat|Loomade väljaheited fr:5Distributeur de sacs à excréments ru:5Пакеты для экскрементов|Какашки|Пакеты для какашек tr:5Dışkı torbası dispenseri @@ -10694,6 +11001,7 @@ amenity-parcel_locker|@post en:4Parcel Locker|4Parcel Pickup be:3Паштамат|5Атрыманне пасылак de:5Paketstation|Paket Abholstation|Paket SB|Paket Versandstation +et:4Pakiautomaat fr:Consigne automatique pour colis|3locker ru:3Почтомат|Постамат|5Получение посылок tr:4koli dolabı @@ -10704,6 +11012,7 @@ amenity-vending_machine-fuel|@fuel en:Fuel Dispenser|Gas Pump be:Паліўная калонка|бензакалонка|палівараздатачная калонка de:Tankautomat +et:Tankimisautomaat ru:Топливная колонка|бензоколонка|топливораздаточная колонка tr:Yakıt dağıtıcı uk:Паливна колонка|бензоколонка|пальнороздавальна колонка @@ -10731,6 +11040,7 @@ pt:Garagem pt-BR:Garagem ro:Garaj es:Garaje +et:Garaaž eu:Garajea sv:Garage th:อาคารจอดรถ @@ -10768,6 +11078,7 @@ pt:Área de descanso pt-BR:Área de descanso ro:Zonă de odihnă es:Área de descanso +et:Kiirtee puhkepeatus eu:Atseden gunea sv:Viloplats th:บริเวณพักผ่อน @@ -10802,6 +11113,7 @@ pt:Chaminé de fábrica pt-BR:Chaminé de fábrica ro:Coș de fabrică es:Chimenea de fábrica +et:Tehase korsten eu:Fabrikako tximinia sv:Fabriksskorsten th:ปล่องควันโรงงาน @@ -10836,6 +11148,7 @@ pt:Torre pt-BR:Torre ro:Turn es:Torre +et:Torn eu:Dorrea sv:Torn th:หอคอย @@ -10871,6 +11184,7 @@ pt:Casa de apostas|Lotaria|Euromilhões|3Totoloto|3Totobola|Payshop pt-BR:Casa de apostas ro:Casă de pariuri es:Casa de apuestas +et:5Kirjastaja eu:Apustu etxea sv:5Bookmaker|vadhållningsagent th:ร้านรับแทงพนัน @@ -10906,6 +11220,7 @@ pt:Peixaria|Peixes|Mariscos pt-BR:Peixaria ro:Pescărie es:Pescadería +et:Mereandide pood|4kalaturg|4mereannid|kala eu:Arrain-denda sv:Fiskhandlare th:ร้านขายปลา @@ -10929,6 +11244,7 @@ da:Genbrugsbutik de:Second-Hand-Laden el:Κατάστημα μεταχειρισμένων es:Tienda de segunda mano +et:4Kasutatud|Kirbuturg eu:Bigarren eskuko denda fa:ﻡﻭﺩ ﺖﺳﺩ ﻩﺎﮕﺷﻭﺮﻓ fi:Second Hand Store @@ -10966,6 +11282,7 @@ da:Velgørenhedsbutik de:Wohltätigkeitsladen el:Φιλανθρωπικό κατάστημα es:Tienda de caridad +et:Heategevuspood eu:Ongintzazko Denda fa:ﻪﯾﺮﯿﺧ ﻩﺎﮕﺷﻭﺮﻓ fi:Hyväntekeväisyysmyymälä @@ -11016,6 +11333,7 @@ pt:Bilheteira|Bilhetes|Máquina de pagamento pt-BR:Bilheteria ro:Casă de bilete es:Venta de entradas +et:Piletimüük eu:Sarreren salmenta sv:Biljettkontor th:จุดจำหน่ายตั๋ว @@ -11051,6 +11369,7 @@ pt:Loja de Vinhos|vinhos|bebidas alcoólicas pt-BR:Loja de vinhos|bebidas ro:Vinărie es:Tienda de vinos|Vino +et:Alkoholipood eu:Ardo-denda|Ardoa sv:Vinhandel th:ร้านขายไวน์ @@ -11086,6 +11405,7 @@ pt:Peças para automóveis pt-BR:Peças de carro|auto peças ro:Piese auto es:Piezas de automóvil +et:Autovaruosad eu:Autoen piezak sv:Bildelar th:อะไหล่รถยนต์ @@ -11123,6 +11443,7 @@ pt:4Chalé pt-BR:4Chalé ro:4Cabană es:4Chalé +et:Suvila eu:4Txaleta sv:Stuga th:ชาเลต์ @@ -11156,6 +11477,7 @@ pt:Painel de informações pt-BR:Painel de informações ro:Panou de informații es:Tablón de información +et:Infotahvel eu:Informazio taula sv:Informationstavla th:บอร์ดประชาสัมพันธ์ @@ -11191,6 +11513,7 @@ pt:Mapa turístico pt-BR:Mapa turístico ro:Hartă turistică es:Mapa turístico +et:Turistide kaart eu:Mapa turistikoa sv:Turistkarta th:แผนที่ท่องเที่ยว @@ -11226,6 +11549,7 @@ pt:Estação de teleférico|teleférico pt-BR:Estação de teleférico ro:Stație de teleferic es:Estación de teleférico +et:Köisraja jaam eu:Teleferiko geltokia sv:Linbanestation th:สถานีกระเช้าลอยฟ้า @@ -11260,6 +11584,7 @@ pt:Heliporto|Heliponto pt-BR:Heliponto|heliporto ro:Heliport es:Helipuerto +et:Helikopteri plats eu:Heliportua sv:Helikopterplatta th:ที่จอดเฮลิคอปเตอร์ @@ -11295,6 +11620,7 @@ pt:Controlo fronteiriço pt-BR:Controle de fronteira ro:Control vamal es:Control de fronteras +et:Piirikontroll eu:Muga kontrola sv:Gränskontroll th:ด่านตรวจคนเข้าเมือง @@ -11330,6 +11656,7 @@ pt:Parque aquático pt-BR:Parque aquático ro:Parc acvatic|3aquapark es:Parque acuático +et:Veepark eu:Ur-parkea sv:Äventyrspark th:สวนน้ำ @@ -11365,6 +11692,7 @@ pt:Torre de água|caixa de água|depósito de água elevado pt-BR:Torre de água|caixa de água ro:Turn de apă es:Depósito de agua +et:Veetorn eu:Ur depositua sv:Vattentorn th:อ่างเก็บน้ำ @@ -11400,6 +11728,7 @@ pt:Moinho de vento|moinho pt-BR:Moinho de vento ro:Moară de vânt es:Molino +et:Tuuleveski eu:Haize-errota sv:Väderkvarn th:กังหันลม @@ -11437,6 +11766,7 @@ mr:पवनचक्की # pt-BR:Búnquer|Bunker # ro:Buncăr # es:Búnker +# et:Punker # eu:Bunkerra # sv:Bunker # th:บังเกอร์ @@ -11472,6 +11802,7 @@ pt:4Caverna pt-BR:4Caverna ro:Peșteră es:Cueva|4Caverna +et:Koobas eu:4Haitzuloa sv:4Grotta th:ถ้ำ @@ -11507,6 +11838,7 @@ pt:Árvore pt-BR:Árvore ro:Arbore es:Árbol +et:Puu eu:Zuhaitza sv:Träd th:ต้นไม้ @@ -11542,6 +11874,7 @@ pt:4Vulcão pt-BR:4Vulcão ro:4Vulcan es:4Volcán +et:4Vulkaan eu:4Sumendia sv:4Vulkan th:ภูเขาไฟ @@ -11579,6 +11912,7 @@ pt-BR:Corretor imobiliário|agente imobiliário ro:Agent imobiliar es:Agente inmobiliario eu:Higiezinen agentea +et:Kinnisvara vahendaja sv:Fastighetsmäklare th:นายหน้าอสังหาริมทรัพย์ tr:Emlak|Emlakçı @@ -11612,6 +11946,7 @@ pt:Comporta de eclusa pt-BR:Comporta de eclusa ro:Ecluză es:Compuerta +et:Lüüsi värav eu:Atea sv:Slussport th:ประตูระบายน้ำ @@ -11646,6 +11981,7 @@ pt:Biblioteca livre|troca de livros pt-BR:Biblioteca livre|troca de livros ro:Bibliotecă|Schimb de cărți es:Intercambio de libros|librería +et:Raamatuvahetus|raamaturiiul eu:Liburu-trukea|liburudenda sv:Bokskåp|bokutbyte th:ตู้หนังสือ สถานที่แลกเปลี่ยนหนังสือ @@ -11680,6 +12016,7 @@ pt:Escalada pt-BR:Ginásio de escalada ro:Centru cățărare es:Centro de escalada +et:Ronimiskeskus eu:Eskalada zentroa sv:Klättercentrum th:ศูนย์ปีนเขา @@ -11716,6 +12053,7 @@ pt:Clube de tiro|Campo de tiro pt-BR:Clube de tiro ro:Tir es:Campo de tiro +et:Lasketiir eu:Tiro eremua sv:Skjutbana th:สนามยิงปืน @@ -11752,6 +12090,7 @@ pt:Centro de natação pt-BR:Centro de natação ro:Piscină es:Centro de natación +et:Ujumine eu:Igeriketa zentroa sv:Simhall th:ศูนย์ว่ายน้ำ @@ -11788,6 +12127,7 @@ pt:Estúdio de ioga pt-BR:Estúdio de ioga ro:Studio yoga es:Centro de yoga +et:Jooga eu:Yoga sv:Yogastudio th:โยคะสตูดิโอ @@ -11823,6 +12163,7 @@ pt:5Apartamentos pt-BR:5Apartamentos ro:5Apartamente es:5Apartamentos +et:5Korterid eu:5Apartamentuak sv:Lägenheter th:อพาร์ตเมนต์ @@ -11859,6 +12200,7 @@ pt:Resort pt-BR:Resort ro:Stațiuni es:Resort +et:Kuurort eu:Hotela sv:Semesterort|resort th:รีสอร์ต @@ -11882,6 +12224,7 @@ da:5Biergarten de:5Biergarten el:Μπυραρία es:5Biergarten +et:5Õlleaed eu:5Biergarten fi:5Biergarten fr:5Biergarten @@ -11916,6 +12259,7 @@ da:Køreskole de:Fahrschule el:Σχολή οδήγησης es:4Autoescuela +et:4Autokool eu:4Autoeskola fi:4Autokoulu fr:4Auto-école @@ -11953,6 +12297,7 @@ da:Musikskolen de:Musikschule el:Μουσική Σχολή es:Escuela de música +et:Muusikakool eu:Musika Eskola fa:ﯽﻘﯿﺳﻮﻣ ﻩﺎﮕﺷﺯﻮﻣﺁ fi:Musiikkikoulu @@ -11989,6 +12334,7 @@ da:Sprogskole de:Sprachschule el:Σχολή Γλωσσών es:Escuela de idiomas +et:Keeltekool eu:Hizkuntza Eskola fa:ﻥﺎﺑﺯ ﻪﺳﺭﺪﻣ fi:Kielikoulu @@ -12026,6 +12372,7 @@ da:Isbod de:Eis|Eisstand|Eisdiele el:Παγωτατζίδικο es:5Heladería +et:5Jäätis eu:5Izozkitegia fi:5Jäätelökioski fr:Stand de crème glacée|Marchand de glaces @@ -12062,6 +12409,7 @@ da:3Internetcafe de:3Internetcafé el:Καφετέρια με Ίντερνετ es:5Cibercafé +et:5Internetikohvik eu:5Internet kafetegia fi:3Internetkahvila fr:5Cybercafé @@ -12098,6 +12446,7 @@ da:4Motorcykelparkering de:4Motorrad-Parkplatz|9Motorradparkplatz el:Χώρος στάθμευσης μοτοσικλετών es:Aparcamiento de motos +et:Mootorrattaparkla eu:Motoentzako aparkalekua fi:5Moottoripyörien pysäköinti fr:Parking moto @@ -12134,6 +12483,7 @@ da:Handicapparkeringsplads de:Behindertenparkplatz el:Χώρος στάθμευσης για ΑΜΕΑ es:Plaza de aparcamiento para discapacitados +et:Invaliidide parkimiskoht eu:Ezinduentzako aparkalekua fa:ﻦﯿﻟﻮﻠﻌﻣ ﮎﺭﺎﭘ ﯼﺎﺟ fi:Vammaispysäköinti @@ -12170,6 +12520,7 @@ da:Plejehjem de:Pflegeheim el:Γηροκομείο es:Residencia de ancianos +et:Hooldekodu eu:Zaharren egoitza fi:Hoitokoti fr:Maison de retraite @@ -12206,6 +12557,7 @@ da:Betalingsautomat de:Bezahlterminal el:Τερματικό πληρωμών es:Terminal de pago +et:Makseterminal eu:Ordainketa terminala fi:Maksupääte fr:Terminal de paiement @@ -12242,6 +12594,7 @@ da:Bruser de:Dusche el:Ντους es:Ducha +et:Dušš eu:Dutxa fi:Suihku fr:Douche @@ -12279,6 +12632,7 @@ da:Hjertestarter de:4Defibrillator el:Πρώτες βοήθειες|απινιδωτής es:4Desfibrilador +et:4Defibrillaator eu:Desfibriladorea fi:4Defibrillaattori fr:4Défibrillateur|DAE @@ -12316,6 +12670,7 @@ da:4Brandhane de:4Hydrant el:Πυροσβεστικός κρουνός es:Boca de incendio +et:Tuletõrjehüdrant eu:Suteen hidrantea fi:5Paloposti fr:Bouche d’incendie|borne d'incendie @@ -12352,6 +12707,7 @@ da:3Fitness-station de:3Fitnessstation el:Γυμναστήριο es:Gimnasio +et:Välivõimla eu:Gimnasioa fi:Kuntokeskus fr:Station de fitness|Parcours de santé @@ -12389,6 +12745,7 @@ da:Forsikringskontor de:Versicherungsbüro el:Ασφαλιστικό γραφείο es:Oficina de seguros +et:Kindlustusasutus eu:Aseguru bulegoa fi:Vakuutuslaitos fr:Bureau d’assurance|assureur @@ -12425,6 +12782,7 @@ da:3NGO-kontor de:Büro einer Nichtregierungsorganisation el:Γραφείο ΜΚΟ es:Sede de ONG +et:Valitsusest sõltumatu ühenduse kontor eu:GKEen egoitza fi:Valtioista riippumattoman järjestön toimisto fr:Bureau d'ONG|organisation non gouvernementale @@ -12461,6 +12819,7 @@ da:4Erotisk butik de:4Erotikladen|3Sexshop|Erotikshop el:Κατάστημα ερωτικών ειδών es:3Sex Shop +et:3Erootikapood eu:3Sex Shop fi:4Erotiikkaliike fr:Boutique érotique @@ -12496,6 +12855,7 @@ da:4Massageklinik de:4Massagesalon|Massagezentrum|Massagetherapie|Massageanwendungen|Massagecenter|Wellness-Center|Wellnessbehandlung|Wellnessanwendungen el:Αίθουσα μασάζ es:Salón de masajes +et:Massaažisalong eu:Masaje gela fi:Hierontahuone fr:Salon de massage @@ -12532,6 +12892,7 @@ da:4Motorcykelforhandler de:4Motorradladen el:Κατάστημα μοτοσυκλετών es:Tienda de motos +et:Motopood eu:Moto denda fi:4Moottoripyöräliike fr:Magasin de motos @@ -12567,6 +12928,7 @@ cs:Novinový stánek da:Avis-kiosk de:Zeitungsstand|Trafik el:Εφημεριδοπώλης|πρακτορείο εφημερίδων +et:Ajalehepunkt|4ajalehed es:Puesto de venta de periódicos eu:Kioskoa fi:Lehtikioski @@ -12604,6 +12966,7 @@ da:Pantelåner de:Pfandleihe el:Ενεχυροδανειστήριο es:Casa de empeños +et:Pandimaja eu:Peoia fi:Panttilainaamo fr:Prêteur sur gages @@ -12639,6 +13002,7 @@ da:Kontorartikler de:7Schreibwarenladen el:Κατάστημα γραφικής ύλης|χαρτικά es:Papelería +et:Kirjatarvete pood eu:Papergintza fi:Kirjoitustarvikekauppa fr:Papeterie @@ -12675,6 +13039,7 @@ da:4Tatovør de:4Tattoo-Studio el:4Τατουάζ|δερματοστιξία es:4Tatuajes +et:4Tätoveeringud eu:4Tatuajeak fi:4Tatuointiliike fr:Salon de tatouage|tatoueur @@ -12711,6 +13076,7 @@ da:Småtingsbutik de:Billigladen|Niedrigpreisgeschäft el:Παντοπωλείο|Μπακάλικο|Ψιλικατζίδικο es:Tienda de Variedades +et:Odavpood eu:Barietate Denda fi:Halpakauppa fr:Bazar @@ -12761,6 +13127,7 @@ ro:Magazin video es:Tienda de vídeo eu:Bideo-denda es-MX:Tienda de vídeo +et:Videopood sv:4Video butik th:ร้านขายดีวีดี tr:4Video mağazası @@ -12798,6 +13165,7 @@ ro:Magazin de jocuri video es:Tienda de videojuegos eu:Bideo-jokoen denda es-MX:Tienda de videojuegos +et:Videomängude pood sv:4Videospel butik th:ร้านขายวิดีโอเกม tr:Video oyunları mağazası @@ -12821,6 +13189,7 @@ da:Vildmarkshytte de:Wildnishütte el:Καλύβα|αγροικία es:4Cabaña +et:Loodusonn eu:4Kabina fi:Autiotupa fr:Refuge non gardé|Refuge-bivouac @@ -12852,6 +13221,7 @@ ru:3Галерея|музей|картины|картинная галерея bg:3Галерия|музей|изложба|картини de:3Galerie|Museum|Kunstgalerie|Kunstausstellung es:3Galería de arte|museo +et:3Galerii|muuseum eu:3Arte galeria|museoa fr:3Galerie d'art|musée d'art ko:갤러리|박물관 @@ -12872,6 +13242,7 @@ bg:Увеселителен парк de:Freizeitpark|Vergnügungspark fr:Parc d'attractions|Parc de loisirs es:Parque de atracciones +et:Teemapark|Lõbustuspark eu:Parke tematiko fi:Huvipuisto ko:테마 파크 @@ -12894,6 +13265,7 @@ da:National park de:5Naturschutzpark|Nationalpark el:Εθνικό πάρκο es:Parque nacional +et:Rahvuspark eu:Parke Nazionala fi:Kansallispuisto fr:Parc national @@ -12930,6 +13302,7 @@ da:Reservat de:5Naturschutzgebiet el:Φυσικό απόθεμα es:Territorio reservado +et:Looduskaitseala eu:Erreserbatutako lurraldea fi:Luonnonsuojelualue fr:Réserve naturelle @@ -12965,6 +13338,7 @@ da:Tange de:Kap|Landzunge|Landspitze el:Ακρωτήρι es:Cabo +et:Neem eu:Lurmuturra fi:Niemeke fr:Cap @@ -13000,6 +13374,7 @@ da:3Gejser de:3Geysir el:Θερμοπίδακας es:3Geiser +et:3Geiser eu:3Geiserra fi:3Geysir fr:3Geyser @@ -13035,6 +13410,7 @@ da:Gletsjer de:Gletscher|Ferner|Kees|Firn el:Παγετώνας es:Glaciar +et:Liustik eu:Glaziarra fi:Jäätikkö fr:Glacier @@ -13083,6 +13459,7 @@ pt:Vau|passo|Passagem em curso de água baixo pt-BR:Vau|passo|Rio raso|Passagem em curso de água baixo ro:Superficial es:Vado (de lugar) +et:Koolmekoht eu:Ford (lekukoa) es-MX:Vado (de lugar) sv:Vadställe @@ -13100,6 +13477,7 @@ leisure-marina en:3Marina be:4Прычал|3Марына de:5Jachthafen +et:Randumiskoht ja:マリーナ pt:3Marina pt-BR:3Marina @@ -13118,6 +13496,7 @@ da:Sted for arrangementer de:Veranstaltungszentrum el:Κέντρο εκδηλώσεων es:Lugar de los eventos +et:Ürituste toimumiskoht eu:Ekitaldien Lekua fa:محل برگزاری رویدادها fi:Tapahtumapaikka @@ -13151,6 +13530,7 @@ en:Chocolate Shop be:Шакалад de:Schokoladengeschäft es:Tienda de chocolate +et:Šokolaadipood fr:Chocolatier it:Choccolateria ja:チョコレート屋 @@ -13164,6 +13544,7 @@ shop-coffee|@food en:Cofee store be:Кава de:Kaffeegeschäft +et:Kohvipood fr:Boutique de cafés it:Negozio di caffè ja:コーヒー屋 @@ -13176,6 +13557,7 @@ ru:Кофе shop-fabric en:Fabric shop de:Textilgeschäft +et:Kangapood fr:Magasin de tissus it:Merceria nl:Stoffenwinkel @@ -13186,6 +13568,7 @@ shop-money_lender en:Money lender be:Ліхвяр de:Geldverleiher +et:Rahalaenutus pl:ożyczkodawca pt:Prestamista pt-BR:Prestamista @@ -13196,6 +13579,7 @@ en:Record store|vinyl be:Музыка de:Musikgeschäft es:Disquería|Tienda de discos +et:Plaadipood fr:Disquaire|vinyle|CD it:Negozio di Dischi ja:CDショップ @@ -13210,6 +13594,7 @@ shop-musical_instrument en:Musical instruments be:Музычныя інструменты de:4Musikinstrumenteladen|Musikhaus +et:Muusikariistad fr:Magasin d'instruments de musique it:Negozio di strumenti ja:楽器店 @@ -13224,6 +13609,7 @@ shop-tea en:Tea store be:Гарбата es:Tienda de té +et:Teepood de:Teegeschäft fr:Boutique de thés it:Negozio di tè @@ -13246,6 +13632,7 @@ da:Antikviteter de:Antiquitäten el:Αντίκες es:Antigüedades +et:Antikvariaat eu:Antigoalekoak fa:ﺕﺎﺟ ﻪﻘﯿﺘﻋ fi:Antiikkia @@ -13283,6 +13670,7 @@ da:Kunstbutik de:Kunstgeschäft el:Κατάστημα Τεχνών es:Tienda de artes +et:Kunstipood eu:Arte Denda fa:ﺮﻨﻫ ﻩﺎﮕﺷﻭﺮﻓ fi:Taidekauppa @@ -13320,6 +13708,7 @@ da:Børnebutik de:Kinderladen|4Babybedarf el:Παιδικό κατάστημα es:Tienda de niños +et:Beebikaubad eu:Haurrentzako denda fa:ﻥﺎﮐﺩﻮﮐ ﻩﺎﮕﺷﻭﺮﻓ fi:Lasten kauppa @@ -13357,6 +13746,7 @@ da:Tasker butik de:Taschen Shop el:Κατάστημα τσαντών es:Tienda de bolsos +et:Kotipood eu:Poltsen Denda fa:ﻒﯿﮐ ﻩﺎﮕﺷﻭﺮﻓ fi:Laukkukauppa @@ -13394,6 +13784,7 @@ da:Ostebutik de:3Käseladen el:Τυροκομείο es:Tienda de queso +et:Juustupood eu:Gazta Denda fa:ﺮﯿﻨﭘ ﻩﺎﮕﺷﻭﺮﻓ fi:Juustokauppa @@ -13431,6 +13822,7 @@ da:Mejeriprodukter de:Milchprodukte el:Γαλακτοκομικά προϊόντα es:Productos lácteos +et:Piimatooted eu:Esnekiak fa:ﯽﻨﺒﻟ ﺕﻻﻮﺼﺤﻣ fi:Maitotuotteet @@ -13468,6 +13860,7 @@ da:El-butik de:Elektrogeschäft el:Μαγαζί ηλεκτρικών ειδών es:Tienda de electricidad +et:Elektritarvikute pood eu:Elektrizitate Denda fa:ﯽﮑﯾﺮﺘﮑﻟﺍ ﻡﺯﺍﻮﻟ ﻩﺯﺎﻐﻣ fi:Sähköliike @@ -13505,6 +13898,7 @@ da:Fiskeri butik de:Angelgeschäft el:Κατάστημα ψαρέματος es:Tienda de pesca +et:Kalapüügi pood eu:Arrantza Denda fa:ﯼﺮﯿﮕﯿﻫﺎﻣ ﻩﺎﮕﺷﻭﺮﻓ fi:Kalastuskauppa @@ -13542,6 +13936,7 @@ da:Indvendige dekorationer de:Innendekorationen el:Διακοσμήσεις εσωτερικών χώρων es:Decoraciones interiores +et:Sisustuse kaunistused eu:Barruko Apaingarriak fa:ﯽﻠﺧﺍﺩ ﻥﻮﯿﺳﺍﺭﻮﮐﺩ fi:Sisustuskoristeet @@ -13579,6 +13974,7 @@ da:Lotterikuponer de:Lotteriescheine el:Λαχεία es:Boletos de lotería +et:Loteriipiletid eu:Loteria Sarrerak fa:ﯽﯾﺎﻣﺯﺁ ﺖﺨﺑ ﻂﯿﻠﺑ fi:Lottoliput @@ -13616,6 +14012,7 @@ da:Medicinske forsyninger de:Medizinische Versorgung el:Ιατρικά Είδη es:Suministros médicos +et:Meditsiinitarvikud eu:Medikuntza-hornidura fa:ﯽﮑﺷﺰﭘ ﻡﺯﺍﻮﻟ fi:Lääketieteellisiä tarvikkeita @@ -13653,6 +14050,7 @@ da:Kosttilskud de:Nahrungsergänzungsmittel el:Συμπληρώματα Διατροφής es:Suplementos Nutricionales +et:Toidulisandid eu:Nutrizio osagarriak fa:ﯽﯾﺍﺬﻏ ﯼﺎﻫ ﻞﻤﮑﻣ fi:Ravintolisät @@ -13690,6 +14088,7 @@ da:Maling de:Farben el:Βαφές es:Pinturas +et:Värvid eu:Margoak fa:ﺪﻨﮐ ﯽﻣ ﮓﻧﺭ fi:Maalit @@ -13727,6 +14126,7 @@ da:Parfumeri de:Parfümerie el:Αρωματοποιία es:Perfumería +et:Parfümeeria eu:Lurringintza fa:ﯼﺯﺎﺳﺮﻄﻋ fi:Hajuvedet @@ -13764,6 +14164,7 @@ da:Syudstyr de:Nähzubehör el:Είδη Ραπτικής es:Materiales de costura +et:Õmblustarvikud eu:Josteko hornigaiak fa:ﯽﻃﺎﯿﺧ ﻡﺯﺍﻮﻟ fi:Ompelutarvikkeet @@ -13801,6 +14202,7 @@ da:Lagerudlejning de:Speichermiete el:Ενοικίαση αποθηκευτικού χώρου es:Alquiler de almacenamiento +et:Ladustuse rent eu:Biltegiratzeko alokairua fa:ﺭﺎﺒﻧﺍ ﻩﺭﺎﺟﺍ fi:Varastoinnin vuokraus @@ -13838,6 +14240,7 @@ da:Tobak de:Tabak el:Καπνός es:Tabaco +et:Tubakas eu:Tabakoa fa:ﻮﮐﺎﺒﻨﺗ fi:Tupakka @@ -13875,6 +14278,7 @@ da:Handler forsyninger de:Handelsbedarf el:Εμπόριο Προμήθειες es:Suministros comerciales +et:Kaubanduse tarvikud eu:Lanbideen hornidurak fa:ﻡﺯﺍﻮﻟ ﺕﺭﺎﺠﺗ fi:Kauppa tarvikkeita @@ -13912,6 +14316,7 @@ da:Ure de:Uhren el:Ρολόγια es:Relojes +et:Kellad eu:Erlojuak fa:ﺖﻋﺎﺳ fi:Kellot @@ -13949,6 +14354,7 @@ da:Engros butik de:Großhandelsgeschäft el:Κατάστημα χονδρικής es:Almacén al por mayor +et:Hulgimüügi pood eu:Handizkako denda fa:ﯽﺷﻭﺮﻓ ﻩﺪﻤﻋ ﻩﺎﮕﺷﻭﺮﻓ fi:Tukkukauppa diff --git a/data/countries_names.txt b/data/countries_names.txt index eece54a214..63681529f3 100644 --- a/data/countries_names.txt +++ b/data/countries_names.txt @@ -20,6 +20,7 @@ pt = Abecásia ro = Abhazia es = Abjasia + et = Abhaasia eu = Abkhazia sv = Abchazien th = อับฮาเซีย @@ -54,6 +55,7 @@ pt = Afeganistão ro = Afganistan es = Afganistán + et = Afganistan eu = Afganistan sv = Afghanistan th = ประเทศอัฟกานิสถาน @@ -89,6 +91,7 @@ pt = Alabama ro = Alabama es = Alabama + et = Alabama eu = Alabama sv = Alabama th = รัฐแอละแบมา @@ -123,6 +126,7 @@ pt = Albânia ro = Albania es = Albania + et = Albaania eu = Albaniarra sv = Albanien th = ประเทศแอลเบเนีย @@ -158,6 +162,7 @@ pt = Argélia ro = Algeria es = Argelia + et = Alžeeria eu = Aljeria sv = Algeriet th = ประเทศแอลจีเรีย @@ -193,6 +198,7 @@ pt = Argélia — Centro ro = Algeria — Centru es = Argelia — Centro + et = Alžeeria - Keskosa sv = Algeriet — Central th = ประเทศแอลจีเรีย — กลาง tr = Cezayir — Merkez @@ -226,6 +232,7 @@ pt = Argélia — Norte ro = Algeria — Nord es = Argelia — Norte + et = Alžeeria - Põhi sv = Algeriet — Nord th = ประเทศแอลจีเรีย — เหนือ tr = Cezayir — Kuzey @@ -259,6 +266,7 @@ pt = Andorra ro = Andorra es = Andorra + et = Andorra eu = Andorra sv = Andorra th = ประเทศอันดอร์รา @@ -293,6 +301,7 @@ pt = Angola ro = Angola es = Angola + et = Angola eu = Angola sv = Angola th = ประเทศแองโกลา @@ -328,6 +337,7 @@ pt = Anguilla ro = Anguilla es = Anguila + et = Anguilla eu = Aingira sv = Anguilla th = แองกวิลลา @@ -362,6 +372,7 @@ pt = Antártica ro = Antarctida es = Antártida + et = Antarktika eu = Antartika sv = Antarktis th = ทวีปแอนตาร์กติกา @@ -397,6 +408,7 @@ pt = Antígua e Barbuda ro = Antigua și Barbuda es = Antigua y Barbuda + et = Antigua ja Barbuda eu = Zaharrak eta bizardunak sv = Antigua och Barbuda th = ประเทศแอนติกาและบาร์บูดา @@ -431,6 +443,7 @@ pt = Argentina ro = Argentina es = Argentina + et = Argentiina eu = Argentina sv = Argentina th = อาร์เจนตินา @@ -466,6 +479,7 @@ pt = Buenos Aires — Norte ro = Provincia Buenos Aires — Nord es = Buenos Aires — Norte + et = Buenos Aires - Põhi sv = Buenos Aires — Nord th = รัฐบัวโนสไอเรส — เหนือ tr = Buenos Aires Eyaleti — Kuzey @@ -499,6 +513,7 @@ pt = Buenos Aires — Sul ro = Provincia Buenos Aires — Sud es = Buenos Aires — Sur + et = Buenos Aires - Lõuna sv = Buenos Aires — Syd th = รัฐบัวโนสไอเรส — ใต้ tr = Buenos Aires Eyaleti — Güney @@ -532,6 +547,7 @@ pt = Cuyo ro = Cuyo es = Cuyo + et = Cuyo sv = Cuyo th = คูโย tr = Cuyo @@ -565,6 +581,7 @@ pt = Mesopotâmia argentina ro = Mesopotamia es = Mesopotamia argentina + et = Mesopotaamia sv = Mesopotamien th = เมโสโปเตเมีย tr = Mezopotamya @@ -598,6 +615,7 @@ pt = Noroeste argentino ro = Argentina de Nord-Vest es = Noroeste argentino + et = Loode-Argentiina sv = Argentina nordväst th = ตะวันตกเฉียงเหนือของอาร์เจนตินา tr = Kuzeybatı Arjantin @@ -631,6 +649,7 @@ pt = Pampas ro = Pampas es = Región pampeana + et = Pampa sv = Pampas th = ปัมปัส tr = Pampa @@ -664,6 +683,7 @@ pt = Patagónia ro = Patagonia es = Patagonia + et = Patagoonia sv = Patagonien th = ปาตาโกเนีย tr = Patagonya @@ -697,6 +717,7 @@ pt = Arizona ro = Arizona es = Arizona + et = Arizona eu = Arizona sv = Arizona th = รัฐแอริโซนา @@ -731,6 +752,7 @@ pt = Arménia ro = Armenia es = Armenia + et = Armeenia eu = Armenia sv = Armenien th = ประเทศอาร์มีเนีย @@ -766,6 +788,7 @@ pt = Austrália ro = Australia es = Australia + et = Austraalia eu = Australia sv = Australien th = ประเทศออสเตรเลีย @@ -801,6 +824,7 @@ pt = Melbourne ro = Melbourne es = Melbourne + et = Melbourne sv = Melbourne th = เมลเบิร์น tr = Melbourne @@ -834,6 +858,7 @@ pt = Nova Gales do Sul ro = Noul Wales de Sud es = Nueva Gales del Sur + et = Uus Lõuna-Wales sv = New South Wales th = รัฐนิวเซาท์เวลส์ tr = Yeni Güney Galler @@ -867,6 +892,7 @@ pt = Território do Norte ro = Teritoriul de Nord es = Territorio del Norte + et = Põhjaterritoorium sv = Northern Territory th = นอร์เทิร์นเทร์ริทอรี tr = Kuzey Toprakları @@ -890,6 +916,7 @@ fi = Queensland fr = Queensland de = Queensland + et = Queensland hu = Queensland id = Queensland it = Queensland @@ -933,6 +960,7 @@ pt = Austrália Meridional ro = Australia de Sud es = Australia Meridional + et = Lõuna-Austraalia sv = South Australia th = รัฐเซาท์ออสเตรเลีย tr = Güney Avustralya @@ -966,6 +994,7 @@ pt = Tasmânia ro = Tasmania es = Tasmania + et = Tasmaania sv = Tasmanien th = รัฐแทสเมเนีย tr = Tasmanya @@ -999,6 +1028,7 @@ pt = Vitória ro = Victoria es = Victoria + et = Victoria sv = Victoria th = รัฐวิกตอเรีย tr = Victoria @@ -1032,6 +1062,7 @@ pt = Austrália Ocidental ro = Australia de Vest es = Australia Occidental + et = Lääne-Austraalia sv = Western Australia th = รัฐเวสเทิร์นออสเตรเลีย tr = Batı Avustralya @@ -1065,6 +1096,7 @@ pt = Áustria ro = Austria es = Austria + et = Austria eu = Austria sv = Österrike th = ประเทศออสเตรีย @@ -1100,6 +1132,7 @@ pt = Burgenland ro = Burgenland es = Burgenland + et = Burgenland sv = Burgenland th = รัฐบูร์เกนลันด์ tr = Burgenland @@ -1133,6 +1166,7 @@ pt = Caríntia ro = Carintia es = Carintia + et = Kärnten sv = Kärnten th = รัฐคารินเทีย tr = Karintiya @@ -1166,6 +1200,7 @@ pt = Baixa Áustria — Oeste ro = Austria Inferioară — Vest es = Baja Austria — Oeste + et = Alam-Austria - Lääs sv = Niederösterreich — Väst th = รัฐโลว์เออร์ออสเตรีย — ตะวันตก tr = Aşağı Avusturya — Batı @@ -1199,6 +1234,7 @@ pt = Viena ro = Viena es = Viena + et = Viin sv = Wien th = เวียนนา tr = Viyana @@ -1232,6 +1268,7 @@ pt = Salzburgo ro = Salzburg es = Salzburgo + et = Salzburg sv = Salzburg th = รัฐซาลซ์บูร์ก tr = Salzburg @@ -1265,6 +1302,7 @@ pt = Estíria ro = Stiria es = Estiria + et = Steiermark sv = Steiermark th = รัฐสติเรีย tr = Steiermark @@ -1298,6 +1336,7 @@ pt = Tirol ro = Tirol es = Tirol + et = Tirool sv = Tyrolen th = รัฐทิโรล tr = Tirol @@ -1331,6 +1370,7 @@ pt = Alta Áustria ro = Austria Superioară es = Alta Austria + et = Ülem-Austria sv = Oberösterreich th = รัฐอัปเปอร์ออสเตรีย tr = Yukarı Avusturya @@ -1364,6 +1404,7 @@ pt = Vorarlberg ro = Vorarlberg es = Vorarlberg + et = Vorarlberg sv = Vorarlberg th = รัฐโฟราร์ลแบร์ก tr = Vorarlberg @@ -1397,6 +1438,7 @@ pt = Azerbaijão ro = Azerbaidjan es = Azerbaiyán + et = Aserbaidžaan eu = Azerbaijango sv = Azerbajdzjan th = ประเทศอาเซอร์ไบจาน @@ -1432,6 +1474,7 @@ pt = Azerbaijão ro = Azerbaidjan es = Azerbaiyán + et = Aserbaidžaan eu = Azerbaijango sv = Azerbajdzjan th = ประเทศอาเซอร์ไบจาน @@ -1466,6 +1509,7 @@ pt = Bahrein ro = Bahrain es = Baréin + et = Bahrein eu = Bahrain sv = Bahrain th = ประเทศบาห์เรน @@ -1502,6 +1546,7 @@ ro = Bangladesh es = Bangladés eu = Bangladesh + et = Bangladesh sv = Bangladesh th = ประเทศบังกลาเทศ tr = Bangladeş @@ -1536,6 +1581,7 @@ pt = Barbados ro = Barbados es = Barbados + et = Barbados eu = Barbados sv = Barbados th = ประเทศบาร์เบโดส @@ -1571,6 +1617,7 @@ pt = Bielorrússia ro = Belarus es = Bielorrusia + et = Valgevene eu = Bielorrusia sv = Vitryssland th = ประเทศเบลารุส @@ -1606,6 +1653,7 @@ pt = Brest ro = Regiunea Brest es = Provincia de Brest + et = Bresti piirkond sv = Brests voblast th = ภูมิภาคเบรสท์ tr = Brest Voblastı @@ -1639,6 +1687,7 @@ pt = Voblast de Homiel ro = Regiunea Gomel es = Provincia de Gómel + et = Gomeli piirkond sv = Homels voblast th = ภูมิภาคโกเมล tr = Homyel Voblastı @@ -1672,6 +1721,7 @@ pt = Hrodna ro = Regiunea Hrodna es = Provincia de Grodno + et = Grodno piirkond sv = Hrodnas voblast th = ภูมิภาคกรอดโน tr = Hrodna Voblastı @@ -1705,6 +1755,7 @@ pt = Voblast de Mahilou ro = Regiunea Moghilău es = Provincia de Maguilov + et = Mogilevi piirkond sv = Mahiljoŭs voblast th = ภูมิภาคโมลิเกฟ tr = Mahilyov Voblastı @@ -1738,6 +1789,7 @@ pt = Voblast de Minsk ro = Regiunea Minsk es = Provincia de Minsk + et = Minski piirkond sv = Minsks voblast th = ภูมิภาคมิสก์ tr = Minsk Voblastı @@ -1771,6 +1823,7 @@ pt = Voblast de Viciebsk ro = Regiunea Vițebsk es = Provincia de Vítebsk + et = Vitebski piirkond sv = Vitsebsks voblast th = ภูมิภาควีเซียบสค์ tr = Vitsebsk Voblastı @@ -1804,6 +1857,7 @@ pt = Bélgica ro = Belgia es = Bélgica + et = Belgia eu = Belgika sv = Belgien th = ประเทศเบลเยียม @@ -1839,6 +1893,7 @@ pt = Antuérpia ro = Anvers es = Provincia de Amberes + et = Antwerpeni maakond sv = Antwerpen th = มณฑลแอนต์เวิร์ป tr = Anvers @@ -1872,6 +1927,7 @@ pt = Flandres Oriental ro = Flandra de Est es = Provincia de Flandes Oriental + et = Ida-Flandria maakond sv = Östflandern th = จังหวัดฟลานเดอร์ตะวันออก tr = Doğu Flandre @@ -1905,6 +1961,7 @@ pt = Brabante Flamengo ro = Brabantul Flamand es = Brabante Flamenco + et = Flaami Brabanti maakond sv = Flamländska Brabant th = มณฑลเฟลมิชบราบันต์ tr = Flaman Brabant @@ -1938,6 +1995,7 @@ pt = Hainaut ro = Hainaut es = Provincia de Henao + et = Hainaut maakond sv = Hainaut th = มณฑลแอโน tr = Hainaut @@ -1971,6 +2029,7 @@ pt = Liège ro = Liège es = Provincia de Lieja + et = Liège'i maakond sv = Liège th = มณฑลลีแยฌ tr = Liège @@ -2004,6 +2063,7 @@ pt = Limburgo ro = Limburg es = Limburgo + et = Limburgi maakond sv = Limburg th = มณฑลลิมเบิร์ก tr = Limburg @@ -2037,6 +2097,7 @@ pt = Luxemburgo ro = Luxemburg es = Provincia de Luxemburgo + et = Luksemburgi maakond sv = Luxemburg th = มณฑลลักเซมเบิร์ก tr = Lüksemburg, Belçika @@ -2070,6 +2131,7 @@ pt = Namur ro = Namur es = Provincia de Namur + et = Namuri maakond sv = Namur th = มณฑลนามูร์ tr = Namur @@ -2103,6 +2165,7 @@ pt = Brabante Valão ro = Brabantul Valon es = Provincia del Brabante Valón + et = Valloonia Brabanti maakond sv = Vallonska Brabant th = มณฑลวัลลูนบราบันต์ tr = Valon Brabant @@ -2136,6 +2199,7 @@ pt = Flandres Ocidental ro = Flandra de Vest es = Provincia de Flandes Occidental + et = Lääne-Flandria maakond sv = Västflandern th = จังหวัดฟลานเดอร์ตะวันตก tr = Batı Flandre @@ -2169,6 +2233,7 @@ pt = Belize ro = Belize es = Belice + et = Belize eu = Belize sv = Belize th = ประเทศเบลีซ @@ -2203,6 +2268,7 @@ pt = Benim ro = Benin es = Benín + et = Benin eu = Benin sv = Benin th = ประเทศเบนิน @@ -2237,6 +2303,7 @@ pt = Bermudas ro = Insulele Bermude es = Bermudas + et = Bermuda eu = Bermudak sv = Bermuda th = เบอร์มิวดา @@ -2272,6 +2339,7 @@ pt = Butão ro = Bhutan es = Bután + et = Bhutan eu = Bhutan sv = Bhutan th = ประเทศภูฏาน @@ -2307,6 +2375,7 @@ pt = Bolívia ro = Bolivia es = Bolivia + et = Boliivia eu = Bolivia sv = Bolivia th = ประเทศโบลิเวีย @@ -2344,6 +2413,7 @@ ro = Bolivia – Nord es = Bolivia – Norte es-MX = Bolivia – Norte + et = Boliivia - Põhi sv = Bolivia – Nord th = โบลิเวีย – ตอนเหนือ tr = Bolivya – Kuzey @@ -2380,6 +2450,7 @@ ro = Bolivia – Sud es = Bolivia – Sur es-MX = Bolivia – Sur + et = Boliivia - Lõuna sv = Bolivia – Söder th = โบลิเวีย – ตอนใต้ tr = Bolivya – Güney @@ -2415,6 +2486,7 @@ ro = Bosnia și Herțegovina es = Bosnia y Herzegovina eu = Bosnia eta Herzegovina + et = Bosnia ja Hertsegoviina sv = Bosnien och Hercegovina th = ประเทศบอสเนียและเฮอร์เซโกวีนา tr = Bosna-Hersek @@ -2449,6 +2521,7 @@ pt = Distrito de Brčko ro = Districtul Brčko es = Distrito de Brčko + et = Brčko piirkond sv = Brčko th = เขตเบิตช์โค tr = Brçko Bölgesi @@ -2482,6 +2555,7 @@ pt = Federação da Bósnia e Herzegovina ro = Federația Bosniei și Herțegovinei es = Federación de Bosnia y Herzegovina + et = Bosnia ja Hertsegoviina Föderatsioon sv = Federationen Bosnien och Hercegovina th = สหพันธรัฐบอสเนียและเฮอร์เซโกวีนา tr = Bosna-Hersek Federasyonu @@ -2515,6 +2589,7 @@ pt = República Sérvia ro = Republika Srpska es = República Srpska + et = Serbia Vabariik sv = Republika Srpska th = สาธารณรัฐเซิร์ปสกา tr = Sırp Cumhuriyeti @@ -2549,6 +2624,7 @@ ro = Botswana es = Botsuana eu = Botswana + et = Botswana sv = Botswana th = ประเทศบอตสวานา tr = Botsvana @@ -2583,6 +2659,7 @@ pt = Brasil ro = Brazilia es = Brasil + et = Brasiilia eu = Brasil sv = Brasilien th = ประเทศบราซิล @@ -2618,6 +2695,7 @@ pt = Bahia ro = Bahia es = Bahía + et = Bahia sv = Bahia th = รัฐบาเยีย tr = Bahia @@ -2651,6 +2729,7 @@ pt = Goiás ro = Goiás es = Goiás + et = Goiás sv = Goiás th = รัฐโกยาส tr = Goiás @@ -2684,6 +2763,7 @@ pt = Mato Grosso ro = Mato Grosso es = Mato Grosso + et = Mato Grosso sv = Mato Grosso th = รัฐมาตูโกรสซู tr = Mato Grosso @@ -2717,6 +2797,7 @@ pt = Mato Grosso do Sul ro = Mato Grosso do Sul es = Mato Grosso del Sur + et = Mato Grosso do Sul sv = Mato Grosso do Sul th = รัฐมาตูโกรสซูโดซูล tr = Mato Grosso do Sul @@ -2750,6 +2831,7 @@ pt = Região Norte do Brasil ro = Regiunea de Nord, Brazilia es = Región Norte de Brasil + et = Põhjapiirkond, Brasiilia sv = Norra regionen, Brasilien th = ภูมิภาคเหนือ บราซิล tr = Kuzey Bölgesi, Brezilya @@ -2783,6 +2865,7 @@ pt = Região Nordeste do Brasil ro = Regiunea de Nord-Est es = Región Nordeste de Brasil + et = Kirdepiirkond sv = Nordöstra regionen th = ภูมิภาคตะวันออกเฉียงเหนือ tr = Kuzeydoğu Bölgesi @@ -2816,6 +2899,7 @@ pt = Paraíba ro = Paraíba es = Paraíba + et = Paraíba sv = Paraíba th = รัฐปาราอีบา tr = Paraíba @@ -2849,6 +2933,7 @@ pt = Paraná ro = Paraná es = Paraná + et = Paraná sv = Paraná th = รัฐปารานา tr = Paraná @@ -2882,6 +2967,7 @@ pt = Rio Grande do Norte ro = Rio Grande do Norte es = Río Grande del Norte + et = Rio Grande do Norte sv = Rio Grande do Norte th = รัฐรีโอกรันดีโดนอร์เต tr = Rio Grande do Norte @@ -2915,6 +3001,7 @@ pt = Santa Catarina ro = Santa Catarina es = Santa Catarina + et = Santa Catarina sv = Santa Catarina th = รัฐซันตากาตารีนา tr = Santa Catarina @@ -2948,6 +3035,7 @@ pt = Região Sul do Brasil ro = Brazilia de Sud es = Región Sur de Brasil + et = Lõuna-Brasiilia sv = Södra Brasilien th = บราซิลใต้ tr = Güney Brezilya @@ -2981,6 +3069,7 @@ pt = Espírito Santo ro = Espírito Santo es = Espírito Santo + et = Espírito Santo sv = Espírito Santo th = รัฐเอสปีรีตูซานตู tr = Espírito Santo @@ -3014,6 +3103,7 @@ pt = Minas Gerais — Contagem ro = Minas Gerais — Contagem es = Minas Gerais — Contagem + et = Minas Gerais — Contagem sv = Minas Gerais — Contagem th = มีนัสเชไรส์ — คอนทาเจม tr = Minas Gerais — Contagem @@ -3047,6 +3137,7 @@ pt = Minas Gerais — Norte ro = Minas Gerais — Nord es = Minas Gerais — Norte + et = Minas Gerais - Põhi sv = Minas Gerais — Nord th = รัฐมีนัสเชไรส์ — เหนือ tr = Minas Gerais — Kuzey @@ -3080,6 +3171,7 @@ pt = Rio de Janeiro ro = Rio de Janeiro es = Río de Janeiro + et = Rio de Janeiro sv = Rio de Janeiro th = รัฐรีโอเดจาเนโร tr = Rio de Janeiro @@ -3113,6 +3205,7 @@ pt = São Paulo — Campinas ro = São Paulo — Campinas es = São Paulo — Campinas + et = São Paulo — Campinas sv = São Paulo — Campinas th = ซาวเปาโล — แคมปินาส tr = São Paulo — Campinas @@ -3146,6 +3239,7 @@ pt = São Paulo — Santos ro = São Paulo — Santos, São Paulo es = São Paulo — Santos + et = São Paulo — Santos sv = São Paulo — Santos, São Paulo th = รัฐเซาเปาลู — ซังตูส tr = São Paulo — Santos @@ -3179,6 +3273,7 @@ pt = São Paulo — Ribeirão Preto ro = São Paulo — Ribeirão Preto es = São Paulo — Ribeirão Preto + et = São Paulo — Ribeirão Preto sv = São Paulo — Ribeirão Preto th = ซาวเปาโล — ริเบราว เพรโต tr = São Paulo — Ribeirão Preto @@ -3212,6 +3307,7 @@ pt = Território Britânico do Oceano Índico ro = Teritoriul Britanic din Oceanul Indian es = Territorio Británico del Océano Índico + et = Briti India ookeani territoorium eu = Britainia Handiko Indiako Ozeanoko Lurraldea sv = Brittiska territoriet i Indiska oceanen th = บริติชอินเดียนโอเชียนเทร์ริทอรี @@ -3246,6 +3342,7 @@ pt = Ilhas Virgens Britânicas ro = Insulele Virgine Britanice es = Islas Vírgenes Británicas + et = Briti Neitsisaared eu = Britainiar Birjina Uharteak sv = Brittiska Jungfruöarna th = หมู่เกาะบริติชเวอร์จิน @@ -3280,6 +3377,7 @@ pt = Brunei ro = Brunei es = Brunéi + et = Brunei eu = Brunei sv = Brunei th = ประเทศบรูไน @@ -3315,6 +3413,7 @@ pt = Bulgária ro = Bulgaria es = Bulgaria + et = Bulgaaria eu = Bulgaria sv = Bulgarien th = ประเทศบัลแกเรีย @@ -3350,6 +3449,7 @@ pt = Burkina Faso ro = Burkina Faso es = Burkina Faso + et = Burkina Faso eu = Burkina Faso sv = Burkina Faso th = ประเทศบูร์กินาฟาโซ @@ -3384,6 +3484,7 @@ pt = Burundi ro = Burundi es = Burundi + et = Burundi eu = Burundi sv = Burundi th = ประเทศบุรุนดี @@ -3419,6 +3520,7 @@ pt = Califórnia ro = California es = California + et = Kalifornia eu = Kalifornia sv = Kalifornien th = รัฐแคลิฟอร์เนีย @@ -3453,6 +3555,7 @@ pt = Camboja ro = Cambodgia es = Camboya + et = Kambodža eu = Kanbodia sv = Kambodja th = ประเทศกัมพูชา @@ -3488,6 +3591,7 @@ pt = Camarões ro = Camerun es = Camerún + et = Kamerun eu = Kamerun sv = Kamerun th = ประเทศแคเมอรูน @@ -3523,6 +3627,7 @@ pt = Camarões — Centro ro = Camerun — Centru es = Camerún — Centro + et = Kamerun - Keskosa sv = Kamerun — Central th = ประเทศแคเมอรูน — กลาง tr = Kamerun — Merkez @@ -3556,6 +3661,7 @@ pt = Camarões — Oeste ro = Camerun — Vest es = Camerún — Oeste + et = Kamerun - Lääs sv = Kamerun — Väst th = ประเทศแคเมอรูน — ตะวันตก tr = Kamerun — Batı @@ -3589,6 +3695,7 @@ pt = Campo de gelo do sul da Patagónia ro = Campo de Hielo Sur es = Campo de hielo Patagónico Sur + et = Lõuna-Patagoonia jääväli eu = Hego Patagoniako Izotz Eremua sv = Södra patagoniska isfältet th = ลานน้ำแข็งพาตาโกเนียนใต้ @@ -3623,6 +3730,7 @@ pt = Canadá ro = Canada es = Canadá + et = Kanada eu = Kanada sv = Kanada th = ประเทศแคนาดา @@ -3658,6 +3766,7 @@ pt = Alberta ro = Alberta es = Alberta + et = Alberta sv = Alberta th = รัฐแอลเบอร์ตา tr = Alberta @@ -3691,6 +3800,7 @@ pt = Edmonton ro = Edmonton es = Edmonton + et = Edmonton sv = Edmonton th = เอดมันตัน tr = Edmonton @@ -3724,6 +3834,7 @@ pt = Alberta — Norte ro = Alberta — Nord es = Alberta — Norte + et = Alberta - Põhi sv = Alberta — Nord th = รัฐแอลเบอร์ตา — เหนือ tr = Alberta — Kuzey @@ -3757,6 +3868,7 @@ pt = Alberta — Sul ro = Alberta — Sud es = Alberta — Sur + et = Alberta - Lõuna sv = Alberta — Syd th = รัฐแอลเบอร์ตา — ใต้ tr = Alberta — Güney @@ -3790,6 +3902,7 @@ pt = Colúmbia Britânica ro = Columbia Britanică es = Columbia Británica + et = Briti Kolumbia sv = British Columbia th = รัฐบริติชโคลัมเบีย tr = Britanya Kolumbiyası @@ -3823,6 +3936,7 @@ pt = Colúmbia Britânica — Centro ro = Columbia Britanică — Centru es = Columbia Británica — Centro + et = Briti Kolumbia - Keskosa sv = British Columbia — Central th = รัฐบริติชโคลัมเบีย — กลาง tr = Britanya Kolumbiyası — Merkez @@ -3856,6 +3970,7 @@ pt = Colúmbia Britânica — Leste ro = Columbia Britanică — Est es = Columbia Británica — Este + et = Briti Kolumbia - Ida sv = British Columbia — Öst th = รัฐบริติชโคลัมเบีย — ตะวันออก tr = Britanya Kolumbiyası — Doğu @@ -3889,6 +4004,7 @@ pt = Ilha Vancouver ro = Insula Vancouver es = Isla de Vancouver + et = Vancouveri saar sv = Vancouver Island th = เกาะแวนคูเวอร์ tr = Vancouver Adası @@ -3922,6 +4038,7 @@ pt = Colúmbia Britânica — Oeste ro = Columbia Britanică — Vest es = Columbia Británica — Oeste + et = Briti Kolumbia - Lääs sv = British Columbia — Väst th = รัฐบริติชโคลัมเบีย — ตะวันตก tr = Britanya Kolumbiyası — Batı @@ -3955,6 +4072,7 @@ pt = Colúmbia Britânica — Norte ro = Columbia Britanică — Nord es = Columbia Británica — Norte + et = Briti Kolumbia - Põhi sv = British Columbia — Nord th = รัฐบริติชโคลัมเบีย — เหนือ tr = Britanya Kolumbiyası — Kuzey @@ -3988,6 +4106,7 @@ pt = Kelowna ro = Kelowna es = Kelowna + et = Kelowna sv = Kelowna th = เคโลนา tr = Kelowna, Britanya Kolumbiyası @@ -4021,6 +4140,7 @@ pt = Vancouver ro = Vancouver es = Vancouver + et = Vancouver sv = Vancouver th = แวนคูเวอร์ tr = Vancouver @@ -4054,6 +4174,7 @@ pt = Labrador ro = Labrador es = Labrador + et = Labrador sv = Labrador th = ลาบราดอร์ tr = Labrador @@ -4087,6 +4208,7 @@ pt = Labrador — Norte ro = Labrador - Nord es = Labrador — Norte + et = Labrador - Põhi sv = Labrador — Nord th = ลาบราดอร์ — เหนือ tr = Labrador — Kuzey @@ -4120,6 +4242,7 @@ pt = Labrador — Sul ro = Labrador - Sud es = Labrador — Sur + et = Labrador - Lõuna sv = Labrador — Syd th = ลาบราดอร์ — ใต้ tr = Labrador — Güzen @@ -4153,6 +4276,7 @@ pt = Labrador — Oeste ro = Labrador - Vest es = Labrador — Oeste + et = Labrador - Lääs sv = Labrador — Väst th = ลาบราดอร์ — ตะวันตก tr = Labrador — Batı @@ -4186,6 +4310,7 @@ pt = Manitoba ro = Manitoba es = Manitoba + et = Manitoba sv = Manitoba th = รัฐแมนิโทบา tr = Manitoba @@ -4219,6 +4344,7 @@ pt = Manitoba — Norte ro = Manitoba — Nord es = Manitoba — Norte + et = Manitoba — Põhi sv = Manitoba — Nord th = รัฐแมนิโทบา — เหนือ tr = Manitoba — Kuzey @@ -4252,6 +4378,7 @@ pt = Manitoba — Oeste ro = Manitoba — Vest es = Manitoba — Oeste + et = Manitoba — Lääs sv = Manitoba — Väst th = รัฐแมนิโทบา — ตะวันตก tr = Manitoba — Batı @@ -4285,6 +4412,7 @@ pt = Brandon ro = Brandon es = Brandon + et = Brandon sv = Brandon th = แบรนดอน tr = Brandon @@ -4318,6 +4446,7 @@ pt = Winnipeg ro = Winnipeg es = Winnipeg + et = Winnipeg sv = Winnipeg th = วินนิเพก tr = Winnipeg @@ -4351,6 +4480,7 @@ pt = Nova Brunswick ro = Noul Brunswick es = Nuevo Brunswick + et = New Brunswick sv = New Brunswick th = รัฐนิวบรันสวิก tr = New Brunswick @@ -4384,6 +4514,7 @@ pt = Terra Nova ro = Terranova es = Isla de Terranova + et = Newfoundland sv = Newfoundland th = เกาะนิวฟันด์แลนด์ tr = Newfoundland @@ -4417,6 +4548,7 @@ pt = Terra Nova — Leste ro = Terranova — Est es = Isla de Terranova — Este + et = Newfoundland — Ida sv = Newfoundland — Öst th = เกาะนิวฟันด์แลนด์ — ตะวันออก tr = Newfoundland — Doğu @@ -4450,6 +4582,7 @@ pt = Terra Nova — Norte ro = Terranova — Nord es = Isla de Terranova — Norte + et = Newfoundland — Põhi sv = Newfoundland — Nord th = เกาะนิวฟันด์แลนด์ — เหนือ tr = Newfoundland — Kuzey @@ -4483,6 +4616,7 @@ pt = Terra Nova — Sul ro = Terranova — Sud es = Isla de Terranova — Sur + et = Newfoundland — Lõuna sv = Newfoundland — Syd th = เกาะนิวฟันด์แลนด์ — ใต้ tr = Newfoundland — Güney @@ -4516,6 +4650,7 @@ pt = Terra Nova — Oeste ro = Terranova — Vest es = Isla de Terranova — Oeste + et = Newfoundland — Lääs sv = Newfoundland — Väst th = เกาะนิวฟันด์แลนด์ — ตะวันตก tr = Newfoundland — Batı @@ -4549,6 +4684,7 @@ pt = Territórios do Noroeste ro = Teritoriile de Nordvest es = Territorios del Noroeste + et = Loodeterritooriumid sv = Northwest Territories th = นอร์ทเวสต์เทร์ริทอรีส์ tr = Kuzeybatı Toprakları @@ -4582,6 +4718,7 @@ pt = Territórios do Noroeste — Leste ro = Teritoriile de Nordvest — Est es = Territorios del Noroeste — Este + et = Loodeterritooriumid - Ida sv = Northwest Territories — Öst th = นอร์ทเวสต์เทร์ริทอรีส์ — ตะวันออก tr = Kuzeybatı Toprakları — Doğu @@ -4615,6 +4752,7 @@ pt = Territórios do Noroeste — Norte ro = Teritoriile de Nordvest — Nord es = Territorios del Noroeste — Norte + et = Loodeterritooriumid - Põhi sv = Northwest Territories — Nord th = นอร์ทเวสต์เทร์ริทอรีส์ — เหนือ tr = Kuzeybatı Toprakları — Kuzey @@ -4648,6 +4786,7 @@ pt = Yellowknife ro = Yellowknife es = Yellowknife + et = Yellowknife sv = Yellowknife th = เยลโลวไนฟ์ tr = Yellowknife @@ -4681,6 +4820,7 @@ pt = Nova Escócia ro = Noua Scoție es = Nueva Escocia + et = Nova Scotia sv = Nova Scotia th = รัฐโนวาสโกเชีย tr = Yeni İskoçya @@ -4714,6 +4854,7 @@ pt = Halifax ro = Halifax es = Halifax + et = Halifax sv = Halifax th = ฮาลิแฟกซ์ tr = Halifax @@ -4747,6 +4888,7 @@ pt = Sydney ro = Sydney es = Sydney + et = Sydney sv = Sydney th = ซิดนีย์ tr = Sidney @@ -4780,6 +4922,7 @@ pt = Nunavut ro = Nunavut es = Nunavut + et = Nunavut sv = Nunavut th = นูนาวุต tr = Nunavut @@ -4813,6 +4956,7 @@ pt = Nunavut — Norte ro = Nunavut — Nord es = Nunavut — Norte + et = Nunavut - Põhi sv = Nunavut — Nord th = นูนาวุต — เหนือ tr = Nunavut — Kuzey @@ -4846,6 +4990,7 @@ pt = Nunavut — Sul ro = Nunavut — Sud es = Nunavut — Sur + et = Nunavut - Lõuna sv = Nunavut — Syd th = นูนาวุต — ใต้ tr = Nunavut — Güney @@ -4880,6 +5025,7 @@ pt = Ontário ro = Ontario es = Ontario + et = Ontario sv = Ontario th = รัฐออนแทรีโอ tr = Ontario @@ -4913,6 +5059,7 @@ pt = Barrie ro = Barrie es = Barrie + et = Barrie sv = Barrie th = แบรรีย์ tr = Barrie @@ -4946,6 +5093,7 @@ pt = Kingston ro = Kingston es = Kingston + et = Kingston sv = Kingston th = คิงสตัน tr = Kingston @@ -4979,6 +5127,7 @@ pt = London ro = Londra es = London + et = London sv = London th = ลอนดอน tr = London @@ -5012,6 +5161,7 @@ pt = Timmins ro = Timmins es = Timmins + et = Timmins sv = Timmins th = ทิมมินส์ tr = Timmins @@ -5045,6 +5195,7 @@ pt = Moose Factory ro = Moose Factory es = Moose Factory + et = Moose Factory sv = Moose Factory th = มูส แฟกตอรี tr = Moose Factory @@ -5078,6 +5229,7 @@ pt = Sudbury ro = Greater Sudbury es = Gran Sudbury + et = Greater Sudbury sv = Greater Sudbury th = เกรตเตอร์ ซัดบูรี tr = Greater Sudbury @@ -5111,6 +5263,7 @@ pt = North Bay ro = North Bay es = North Bay + et = North Bay sv = North Bay th = อ่าวเหนือ tr = North Bay @@ -5144,6 +5297,7 @@ pt = Sault Ste. Marie ro = Sault Sainte Marie es = Sault Ste. Marie + et = Sault Ste. Marie sv = Sault Ste. Marie th = ซูเซนต์มารี tr = Sault Ste. Marie @@ -5177,6 +5331,7 @@ pt = Wawa ro = Wawa es = Wawa + et = Wawa sv = Wawa th = วาวา tr = Wawa @@ -5210,6 +5365,7 @@ pt = Thunder Bay ro = Thunder Bay es = Thunder Bay + et = Thunder Bay sv = Thunder Bay th = ธันเดอร์เบย์ tr = Thunder Bay @@ -5243,6 +5399,7 @@ pt = Ontário — Norte ro = Ontario — Nord es = Ontario — Norte + et = Ontario - Põhi sv = Ontario — Nord th = รัฐออนแทรีโอ — เหนือ tr = Ontario — Kuzey @@ -5276,6 +5433,7 @@ pt = Toronto ro = Toronto es = Toronto + et = Toronto sv = Toronto th = โทรอนโต tr = Toronto @@ -5309,6 +5467,7 @@ pt = Ilha do Príncipe Eduardo ro = Insula Prințului Edward es = Isla del Príncipe Eduardo + et = Prints Edwardi saar sv = Prince Edward Island th = รัฐปรินซ์เอ็ดเวิร์ดไอแลนด์ tr = Prens Edward Adası @@ -5342,6 +5501,7 @@ pt = Quebec ro = Provincia Québec es = Quebec + et = Quebec sv = Québec th = รัฐควิเบก tr = Québec @@ -5375,6 +5535,7 @@ pt = Quebec ro = Québec es = Quebec + et = Quebec sv = Québec th = ควิเบก tr = Québec @@ -5408,6 +5569,7 @@ pt = Quebec — Norte ro = Provincia Québec — Nord es = Quebec — Norte + et = Quebec - Põhi sv = Québec — Nord th = รัฐควิเบก — เหนือ tr = Québec — Kuzey @@ -5441,6 +5603,7 @@ pt = Montreal ro = Montréal es = Montreal + et = Montreal sv = Montréal th = มอนทรีออล tr = Montreal @@ -5474,6 +5637,7 @@ pt = Sept-Îles ro = Sept-Îles es = Sept-Îles + et = Sept-Îles sv = Sept-Îles th = เซอิล tr = Sept-Îles @@ -5507,6 +5671,7 @@ pt = Rimouski ro = Rimouski es = Rimouski + et = Rimouski sv = Rimouski th = ริมูสกี tr = Rimouski @@ -5540,6 +5705,7 @@ pt = Saguenay ro = Saguenay es = Saguenay + et = Saguenay sv = Saguenay th = ซากีเนย์ tr = Saguenay @@ -5573,6 +5739,7 @@ pt = Chibougamau ro = Chibougamau es = Chibougamau + et = Chibougamau sv = Chibougamau th = ชิโบกาเมา tr = Chibougamau @@ -5606,6 +5773,7 @@ pt = Rouyn-Noranda ro = Rouyn-Noranda es = Rouyn-Noranda + et = Rouyn-Noranda sv = Rouyn-Noranda th = โรน-นอรันดา tr = Rouyn-Noranda @@ -5639,6 +5807,7 @@ pt = Saskatchewan ro = Saskatchewan es = Saskatchewan + et = Saskatchewan sv = Saskatchewan th = รัฐซัสแคตเชวัน tr = Saskatchewan @@ -5672,6 +5841,7 @@ pt = Saskatchewan — Norte ro = Saskatchewan — Nord es = Saskatchewan — Norte + et = Saskatchewan — Põhi sv = Saskatchewan — Nord th = รัฐซัสแคตเชวัน — เหนือ tr = Saskatchewan — Kuzey @@ -5705,6 +5875,7 @@ pt = Saskatchewan — Sul ro = Saskatchewan — Sud es = Saskatchewan — Sur + et = Saskatchewan — Lõuna sv = Saskatchewan — Syd th = รัฐซัสแคตเชวัน — ใต้ tr = Saskatchewan — Güney @@ -5738,6 +5909,7 @@ pt = Yukon ro = Yukon es = Yukón + et = Yukon sv = Yukon th = ยูคอน tr = Yukon @@ -5771,6 +5943,7 @@ pt = Yukon — Norte ro = Yukon — Nord es = Yukón — Norte + et = Yukon - Põhi sv = Yukon — Nord th = ยูคอน — เหนือ tr = Yukon — Kuzey @@ -5804,6 +5977,7 @@ pt = Whitehorse ro = Whitehorse, Yukon es = Whitehorse + et = Whitehorse sv = Whitehorse th = ไวท์ฮอร์ส tr = Whitehorse @@ -5837,6 +6011,7 @@ pt = Cabo Verde ro = Republica Capului Verde es = Cabo Verde + et = Roheneemesaared eu = Cabo Verde sv = Kap Verde th = ประเทศกาบูเวร์ดี @@ -5871,6 +6046,7 @@ pt = Pequenas Antilhas ro = Antilele Mici es = Antillas Menores + et = Väikesed Antillid eu = Antilla Txikiak sv = Små Antillerna th = เลสเซอร์แอนทิลลีส @@ -5906,6 +6082,7 @@ pt-BR = Aruba, Curação and Países Baixos Caribenhos ro = Aruba, Curacao și Caraibe Olanda es = Aruba, Curazao y las Antillas Neerlandesas + et = Aruba, Curaçao ja Kariibi mere piirkonna Holland eu = Aruba, Curacao eta Herbehereetako Antillak es-MX = Aruba, Curazao y las Antillas Holandesas sv = Aruba, Curaçao och Karibiska Nederländerna @@ -5942,6 +6119,7 @@ pt = Ilhas Cayman ro = Insulele Cayman es = Islas Caimán + et = Kaimani saared eu = Kaiman Uharteak sv = Caymanöarna th = หมู่เกาะเคย์แมน @@ -5976,6 +6154,7 @@ pt = República Centro-Africana ro = Republica Centrafricană es = República Centroafricana + et = Kesk-Aafrika Vabariik eu = Afrika Erdiko Errepublika sv = Centralafrikanska republiken th = สาธารณรัฐแอฟริกากลาง @@ -6010,6 +6189,7 @@ pt = Região da Anatólia Central ro = Regiunea Anatolia Centrală es = Región de Anatolia Central + et = Kesk-Anatoolia piirkond eu = Erdialdeko Anatolia eskualdea sv = Centrala Anatolien th = ภูมิภาคแอนาโตเลียกลาง @@ -6044,6 +6224,7 @@ pt = Chade ro = Ciad es = Chad + et = Tšaad eu = Txad sv = Tchad th = ประเทศชาด @@ -6079,6 +6260,7 @@ pt = Chile ro = Chile es = Chile + et = Tšiili eu = Txile sv = Chile th = ประเทศชิลี @@ -6114,6 +6296,7 @@ pt = Chile — Norte ro = Chile — Nord es = Chile — Norte + et = Tšiili - Põhi sv = Chile — Nord th = ประเทศชิลี — เหนือ tr = Şili — Kuzey @@ -6147,6 +6330,7 @@ pt = Chile — Sul ro = Chile — Sud es = Chile — Sur + et = Tšiili - Lõuna sv = Chile — Syd th = ประเทศชิลี — ใต้ tr = Şili — Güney @@ -6180,6 +6364,7 @@ pt = Anhui ro = Anhui es = Anhui + et = Anhui sv = Anhui th = มณฑลอานฮุย tr = Anhui @@ -6213,6 +6398,7 @@ pt = Chongqing ro = Chongqing es = Chongqing + et = Chongqing sv = Chongqing th = ฉงชิ่ง tr = Çongçing @@ -6246,6 +6432,7 @@ pt = Fujian ro = Fujian es = Fujian + et = Fujian sv = Fujian th = มณฑลฝูเจี้ยน tr = Fujian @@ -6279,6 +6466,7 @@ pt = Gansu ro = Gansu es = Gansu + et = Gansu sv = Gansu th = มณฑลกานซู tr = Kansu @@ -6312,6 +6500,7 @@ pt = Guangdong ro = Guangdong es = Provincia de Cantón + et = Guangdong sv = Guangdong th = มณฑลกวางตุ้ง tr = Guangdong @@ -6345,6 +6534,7 @@ pt = Guangxi ro = Guangxi es = Guangxi + et = Guangxi sv = Guangxi th = เขตปกครองตนเองกว่างซีจ้วง tr = Guangxi Zhuang Özerk Bölgesi @@ -6378,6 +6568,7 @@ pt = Guizhou ro = Guizhou es = Guizhou + et = Guizhou sv = Guizhou th = มณฑลกุ้ยโจว tr = Guizhou @@ -6411,6 +6602,7 @@ pt = Hebei ro = Hebei es = Hebei + et = Hebei sv = Hebei th = มณฑลเหอเป่ย์ tr = Hebei @@ -6444,6 +6636,7 @@ pt = Heilongjiang ro = Heilongjiang es = Heilongjiang + et = Heilongjiang sv = Heilongjiang th = มณฑลเฮย์หลงเจียง tr = Heilongjiang @@ -6477,6 +6670,7 @@ pt = Henan ro = Henan es = Henan + et = Henan sv = Henan th = มณฑลเหอหนาน tr = Henan @@ -6510,6 +6704,7 @@ pt = Hubei ro = Hubei es = Hubei + et = Hubei sv = Hubei th = มณฑลหูเป่ย์ tr = Hubei @@ -6543,6 +6738,7 @@ pt = Hunan ro = Hunan es = Hunan + et = Hunan sv = Hunan th = มณฑลหูหนาน tr = Hunan @@ -6576,6 +6772,7 @@ pt = Mongólia Interior ro = Mongolia Interioară es = Mongolia Interior + et = Sise-Mongoolia sv = Inre Mongoliet th = เขตปกครองตนเองมองโกเลียใน tr = İç Moğolistan @@ -6609,6 +6806,7 @@ pt = Jiangsu ro = Jiangsu es = Jiangsu + et = Jiangsu sv = Jiangsu th = มณฑลเจียงซู tr = Jiangsu @@ -6642,6 +6840,7 @@ pt = Jiangxi ro = Jiangxi es = Jiangxi + et = Jiangxi sv = Jiangxi th = มณฑลเจียงซี tr = Jiangxi @@ -6675,6 +6874,7 @@ pt = Jilin ro = Jilin es = Jilin + et = Jilin sv = Jilin th = มณฑลจี๋หลิน tr = Jilin @@ -6708,6 +6908,7 @@ pt = Liaoning ro = Liaoning es = Liaoning + et = Liaoning sv = Liaoning th = มณฑลเหลียวหนิง tr = Liaoning @@ -6741,6 +6942,7 @@ pt = Ningxia ro = Ningxia es = Ningxia + et = Ningxia sv = Ningxia th = เขตปกครองตนเองหนิงเซี่ยหุย tr = Ningxia Huizu Özerk Bölgesi @@ -6774,6 +6976,7 @@ pt = Qinghai ro = Qinghai es = Qinghai + et = Qinghai sv = Qinghai th = มณฑลชิงไห่ tr = Çinghay @@ -6807,6 +7010,7 @@ pt = Shaanxi ro = Shaanxi es = Shaanxi + et = Shaanxi sv = Shaanxi th = มณฑลส่านซี tr = Şensi @@ -6840,6 +7044,7 @@ pt = Shandong ro = Shandong es = Shandong + et = Shandong sv = Shandong th = มณฑลซานตง tr = Şantung @@ -6873,6 +7078,7 @@ pt = Xangai ro = Shanghai es = Shanghái + et = Shanghái sv = Shanghai th = เซี่ยงไฮ้ tr = Şanghay @@ -6906,6 +7112,7 @@ pt = Shanxi ro = Shanxi es = Shanxi + et = Shanxi sv = Shanxi th = มณฑลซานซี tr = Şansi @@ -6939,6 +7146,7 @@ pt = Sichuan ro = Sichuan es = Sichuan + et = Sichuan sv = Sichuan th = มณฑลเสฉวน tr = Siçuan @@ -6972,6 +7180,7 @@ pt = Região Autônoma do Tibete ro = Regiunea autonomă Tibet es = Tíbet + et = Tiibeti autonoomne piirkond sv = Autonoma regionen Tibet th = เขตปกครองตนเองทิเบต tr = Tibet Özerk Bölgesi @@ -7005,6 +7214,7 @@ pt = Xinjiang ro = Xinjiang es = Sinkiang + et = Xinjiangi uiguuri autonoomne piirkond sv = Xinjiang th = เขตปกครองตนเองซินเจียงอุยกูร์ tr = Sincan Uygur Özerk Bölgesi @@ -7038,6 +7248,7 @@ pt = Yunnan ro = Yunnan es = Yunnan + et = Yunnan sv = Yunnan th = มณฑลยูนนาน tr = Yünnan @@ -7071,6 +7282,7 @@ pt = Zhejiang ro = Zhejiang es = Zhejiang + et = Zhejiang sv = Zhejiang th = มณฑลเจ้อเจียง tr = Zhejiang @@ -7104,6 +7316,7 @@ pt = Colômbia ro = Columbia es = Colombia + et = Kolumbia eu = Kolonbia sv = Colombia th = ประเทศโคลอมเบีย @@ -7139,6 +7352,7 @@ pt = Colômbia — Leste ro = Columbia — Est es = Colombia — Este + et = Kolumbia - Ida sv = Colombia — Öst th = ประเทศโคลอมเบีย — ตะวันออก tr = Kolombiya — Doğu @@ -7172,6 +7386,7 @@ pt = Colômbia — Norte ro = Columbia — Nord es = Colombia — Norte + et = Kolumbia - Põhi sv = Colombia — Nord th = ประเทศโคลอมเบีย — เหนือ tr = Kolombiya — Kuzey @@ -7205,6 +7420,7 @@ pt = Colômbia — Oeste ro = Columbia — Vest es = Colombia — Oeste + et = Kolumbia - Lääs sv = Colombia — Väst th = ประเทศโคลอมเบีย — ตะวันตก tr = Kolombiya — Batı @@ -7238,6 +7454,7 @@ pt = Colorado ro = Colorado es = Colorado + et = Colorado eu = Colorado sv = Colorado th = รัฐโคโลราโด @@ -7272,6 +7489,7 @@ pt = Comores ro = Comore es = Comoras + et = Komoorid eu = Komoreak sv = Komorerna th = ประเทศคอโมโรส @@ -7306,6 +7524,7 @@ pt = Congo ro = Republica Congo es = República del Congo + et = Kongo Vabariik eu = Kongoko Errepublika sv = Kongo-Brazzaville th = สาธารณรัฐคองโก @@ -7340,6 +7559,7 @@ pt = República Democrática do Congo ro = Republica Democrată Congo es = República Democrática del Congo + et = Kongo Demokraatlik Vabariik eu = Kongoko Errepublika Demokratikoa sv = Kongo-Kinshasa th = สาธารณรัฐประชาธิปไตยคองโก @@ -7374,6 +7594,7 @@ pt = Ilhas Cook ro = Insulele Cook es = Islas Cook + et = Cooki saared eu = Cook uharteak sv = Cooköarna th = หมู่เกาะคุก @@ -7408,6 +7629,7 @@ pt = Costa Rica ro = Costa Rica es = Costa Rica + et = Costa Rica eu = Costa Rica sv = Costa Rica th = ประเทศคอสตาริกา @@ -7443,6 +7665,7 @@ pt = Costa do Marfim ro = Coasta de Fildeș es = Costa de Marfil + et = Elevandiluurannik eu = Boli Kosta sv = Elfenbenskusten th = ประเทศโกตดิวัวร์ @@ -7477,6 +7700,7 @@ pt = Crimeia ro = Crimeea es = península de Crimea + et = Krimmi poolsaar eu = Krimen penintsula sv = Krim th = คาบสมุทรไครเมีย @@ -7512,6 +7736,7 @@ pt = Croácia ro = Croația es = Croacia + et = Horvaatia eu = Kroazia sv = Kroatien th = ประเทศโครเอเชีย @@ -7547,6 +7772,7 @@ pt = Cuba ro = Cuba es = Cuba + et = Kuuba eu = Kuba sv = Kuba th = ประเทศคิวบา @@ -7582,6 +7808,7 @@ pt = Chipre ro = Cipru es = Chipre + et = Küpros eu = Zipre sv = Cypern th = ประเทศไซปรัส @@ -7617,6 +7844,7 @@ pt = República Checa ro = Cehia es = República Checa + et = Tšehhi Vabariik eu = Txekiar Errepublika sv = Tjeckien th = สาธารณรัฐเช็ก @@ -7652,6 +7880,7 @@ pt = Morávia do Sul ro = Regiunea Moravia de Sud es = Región de Moravia Meridional + et = Lõuna-Moravi piirkond sv = Södra Mähren th = ภูมิภาคโมราเวียนใต้ tr = Güney Moravya ili @@ -7685,6 +7914,7 @@ pt = Vysočina ro = Regiunea Vysočina es = Región de Vysočina + et = Vysočina piirkond sv = Vysočina th = ภูมิภาควิซอชินา tr = Vysočina Bölgesi @@ -7718,6 +7948,7 @@ pt = Boêmia do Sul ro = Regiunea Boemia de Sud es = Región de Bohemia Meridional + et = Lõuna-Böömimaa piirkond sv = Södra Böhmen th = ภูมิภาคโบฮีเมียนใต้ tr = Güney Bohemya ili @@ -7751,6 +7982,7 @@ pt = Plzeň ro = Regiunea Plzeň es = Región de Pilsen + et = Pilseni piirkond sv = Plzeň th = ภูมิภาคพัลเซน tr = Plzeň Bölgesi @@ -7784,6 +8016,7 @@ pt = Karlovy Vary ro = Regiunea Karlovy Vary es = Región de Karlovy Vary + et = Karlovy Vary piirkond sv = Karlovy Vary th = ภูมิภาคาร์โลวีแวรี tr = Karlovy Vary ili @@ -7817,6 +8050,7 @@ pt = Morávia-Silésia ro = Regiunea Moravia-Silezia es = Región de Moravia-Silesia + et = Moraavia-Sileesia piirkond sv = Mähren-Schlesien th = ภูมิภาคโมราเวียน-ซิเลเซียน tr = Moravian-Silesian Bölgesi @@ -7850,6 +8084,7 @@ pt = Olomouc ro = Regiunea Olomouc es = Región de Olomouc + et = Olomouci piirkond sv = Olomouc th = ภูมิภาคโอโลโมก tr = Olomouc Bölgesi @@ -7883,6 +8118,7 @@ pt = Praga ro = Praga es = Praga + et = Praha sv = Prag th = ปราก tr = Prag @@ -7916,6 +8152,7 @@ pt = Hradec Králové ro = Regiunea Hradec Králové es = Región de Hradec Králové + et = Hradec Králové piirkond sv = Hradec Králové th = ภูมิภาคฮราเดก คราโลวี tr = Hradec Králové ili @@ -7949,6 +8186,7 @@ pt = Liberec ro = Regiunea Liberec es = Región de Liberec + et = Libereci piirkond sv = Liberec th = ภูมิภาคลิเบอเรก tr = Liberec Bölgesi @@ -7982,6 +8220,7 @@ pt = Pardubice ro = Regiunea Pardubice es = Región de Pardubice + et = Pardubice piirkond sv = Pardubice th = ภูมิภาคพาร์ดูไบซ์ tr = Pardubice Bölgesi @@ -8015,6 +8254,7 @@ pt = Boêmia Central — Leste ro = Regiunea Boemia Centrală — Est es = Bohemia Central — Este + et = Kesk-Böömimaa piirkond – Ida sv = Mellersta Böhmen — Öst th = ภูมิภาคโบฮีเมียนกลาง — ตะวันออก tr = Orta Çek Bölgesi — Doğu @@ -8048,6 +8288,7 @@ pt = Boêmia Central — Oeste ro = Regiunea Boemia Centrală — Vest es = Bohemia Central — Oeste + et = Kesk-Böömimaa piirkond – Lääs sv = Mellersta Böhmen — Väst th = ภูมิภาคโบฮีเมียนกลาง — ตะวันตก tr = Orta Çek Bölgesi — Batı @@ -8081,6 +8322,7 @@ pt = Ústí nad Labem ro = Regiunea Ústí nad Labem es = Región de Ústí nad Labem + et = Ústí nad Labemi piirkond sv = Ústí nad Labem th = ภูมิภาคอูซชิ นาด ลาเบม tr = Ústí nad Labem Bölgesi @@ -8114,6 +8356,7 @@ pt = Zlín ro = Regiunea Zlín es = Región de Zlín + et = Zlini piirkond sv = Zlín th = ภูมิภาคซิน tr = Zlín Bölgesi @@ -8147,6 +8390,7 @@ pt = Dinamarca ro = Danemarca es = Dinamarca + et = Taani eu = Danimarka sv = Danmark th = ประเทศเดนมาร์ก @@ -8182,6 +8426,7 @@ pt = Região da Capital ro = Regiunea Hovedstaden es = Región Capital + et = Taani pealinna piirkond sv = Region Hovedstaden th = ภูมิภาคกลางของเดนมาร์ก tr = Danimarka Başkent Bölgesi @@ -8215,6 +8460,7 @@ pt = Jutlândia Central ro = Regiunea Midtjylland es = Jutlandia Central + et = Kesk-Taani piirkond sv = Region Mittjylland th = ภูมิภาคเดนมาร์กกลาง tr = Merkezi Danimarka Bölgesi @@ -8248,6 +8494,7 @@ pt = Jutlândia do Norte ro = Regiunea Nordjylland es = Jutlandia Septentrional + et = Põhja-Taani piirkond sv = Region Nordjylland th = ภูมิภาคเดนมาร์กเหนือ tr = Kuzey Danimarka Bölgesi @@ -8281,6 +8528,7 @@ pt = Zelândia ro = Regiunea Sjælland es = Región de Selandia + et = Själlandi piirkond sv = Region Själland th = ภูมิภาคซีย์แลนด์ tr = Zealand Bölgesi @@ -8314,6 +8562,7 @@ pt = Dinamarca do Sul ro = Regiunea Syddanmark es = Dinamarca Meridional + et = Lõuna-Taani piirkond sv = Region Syddanmark th = ภูมิภาคใต้ของเดนมาร์ก tr = Güney Danimarka Bölgesi @@ -8347,6 +8596,7 @@ pt = Djibouti ro = Djibouti es = Yibuti + et = Djibouti eu = Djibouti sv = Djibouti th = ประเทศจิบูตี @@ -8382,6 +8632,7 @@ pt = Dominica ro = Dominica es = Dominica + et = Dominica eu = Dominika sv = Dominica th = ประเทศดอมินีกา @@ -8417,6 +8668,7 @@ pt = República Dominicana ro = Republica Dominicană es = República Dominicana + et = Dominikaani Vabariik eu = Dominikar Errepublika sv = Dominikanska republiken th = สาธารณรัฐโดมินิกัน @@ -8451,6 +8703,7 @@ pt = Timor-Leste ro = Timorul de Est es = Timor Oriental + et = Ida-Timor eu = Ekialdeko Timor sv = Östtimor th = ประเทศติมอร์-เลสเต @@ -8485,6 +8738,7 @@ pt = Equador ro = Ecuador es = Ecuador + et = Ecuador eu = Ekuador sv = Ecuador th = ประเทศเอกวาดอร์ @@ -8520,6 +8774,7 @@ pt = Egito ro = Egipt es = Egipto + et = Egiptus eu = Egipto sv = Egypten th = ประเทศอียิปต์ @@ -8555,6 +8810,7 @@ pt = El Salvador ro = El Salvador es = El Salvador + et = El Salvador eu = Salbatzailea sv = El Salvador th = ประเทศเอลซัลวาดอร์ @@ -8589,6 +8845,7 @@ pt = Guiné Equatorial ro = Guineea Ecuatorială es = Guinea Ecuatorial + et = Ekvatoriaal-Guinea eu = Ekuatore Ginea sv = Ekvatorialguinea th = ประเทศอิเควทอเรียลกินี @@ -8623,6 +8880,7 @@ pt = Eritreia ro = Eritreea es = Eritrea + et = Eritrea eu = Eritrea sv = Eritrea th = ประเทศเอริเทรีย @@ -8657,6 +8915,7 @@ pt = Estónia ro = Estonia es = Estonia + et = Eesti eu = Estonia sv = Estland th = ประเทศเอสโตเนีย @@ -8692,6 +8951,7 @@ pt = Estónia — Leste ro = Estonia — Est es = Estonia — Este + et = Eesti - Ida sv = Estland — Öst th = ประเทศเอสโตเนีย — ตะวันออก tr = Estonya — Doğu @@ -8725,6 +8985,7 @@ pt = Estónia — Oeste ro = Estonia — Vest es = Estonia — Oeste + et = Eesti - Lääs sv = Estland — Väst th = ประเทศเอสโตเนีย — ตะวันตก tr = Estonya — Batı @@ -8758,6 +9019,7 @@ pt = Etiópia ro = Etiopia es = Etiopía + et = Etioopia eu = Etiopia sv = Etiopien th = ประเทศเอธิโอเปีย @@ -8793,6 +9055,7 @@ pt = Ilhas Malvinas ro = Insulele Falkland es = Islas Malvinas + et = Falklandi saared eu = Falkland uharteak sv = Falklandsöarna th = หมู่เกาะฟอล์กแลนด์ @@ -8827,6 +9090,7 @@ pt = Ilhas Feroe ro = Insulele Feroe es = Islas Feroe + et = Fääri saared eu = Faroe uharteak sv = Färöarna th = หมู่เกาะแฟโร @@ -8861,6 +9125,7 @@ pt = Micronésia ro = Micronezia es = Micronesia + et = Mikroneesia eu = Mikronesia sv = Mikronesien th = ประเทศไมโครนีเซีย @@ -8895,6 +9160,7 @@ pt = Fiji ro = Fiji es = Fiyi + et = Fidži eu = Fiji sv = Fiji th = ประเทศฟิจิ @@ -8929,6 +9195,7 @@ pt = Finlândia ro = Finlanda es = Finlandia + et = Soome eu = Finlandia sv = Finland th = ประเทศฟินแลนด์ @@ -8964,6 +9231,7 @@ pt = Finlândia Oriental ro = Finlanda de Est es = Finlandia Oriental + et = Ida-Soome sv = Östra Finlands län th = จังหวัดทางตะวันออกของฟินแลนด์ tr = Doğu Finlandiya İli @@ -8997,6 +9265,7 @@ pt = Norte da Finlândia ro = Finlanda de Nord es = Norte de Finlandia + et = Põhja-Soome sv = Norra Finland th = ฟินแลนด์เหนือ tr = Kuzey Finlandiya @@ -9030,6 +9299,7 @@ pt = Finlândia Meridional — Helsínquia ro = Finlanda de Sud — Helsinki es = Finlandia Meridional — Helsinki + et = Lõuna-Soome - Helsingi sv = Södra Finlands län — Helsingfors th = จังหวัดทางใต้ของฟินแลนด์ — เฮลซินกิ tr = Güney Finlandiya İli — Helsinki @@ -9063,6 +9333,7 @@ pt = Finlândia Meridional — Lappeenranta ro = Finlanda de Sud — Lappeenranta es = Finlandia Meridional — Lappeenranta + et = Lõuna-Soome - Lappeenranta sv = Södra Finlands län — Villmanstrand th = จังหวัดทางใต้ของฟินแลนด์ — แลปพีนรันดา tr = Güney Finlandiya İli — Lappeenranta @@ -9096,6 +9367,7 @@ pt = Finlândia Própria ro = Finlanda Propriu-Zisă es = Finlandia Propia + et = Edela-Soome sv = Egentliga Finland th = ตะวันตกเฉียงใต้ของฟินแลนด์ tr = Güneybatı Finlandiya @@ -9129,6 +9401,7 @@ pt = Finlândia Ocidental ro = Finlanda de Vest es = Finlandia Occidental + et = Lääne-Soome sv = Västra Finlands län th = จังหวัดทางตะวันตกของฟินแลนด์ tr = Batı Finlandiya İli @@ -9162,6 +9435,7 @@ pt = Flórida ro = Florida es = Florida + et = Florida eu = Florida sv = Florida th = รัฐฟลอริดา @@ -9196,6 +9470,7 @@ pt = França ro = Franța es = Francia + et = Prantsusmaa eu = Frantzia sv = Frankrike th = ประเทศฝรั่งเศส @@ -9231,6 +9506,7 @@ pt = Alsácia ro = Alsacia es = Alsacia + et = Alsace sv = Alsace th = แคว้นอาลซัส tr = Alsas @@ -9264,6 +9540,7 @@ pt = Baixo Reno ro = Bas-Rhin es = Bajo Rin + et = Alam-Rein sv = Bas-Rhin th = จังหวัดบา-แร็ง tr = Bas-Rhin @@ -9297,6 +9574,7 @@ pt = Alto Reno ro = Haut-Rhin es = Alto Rin + et = Ülem-Rein sv = Haut-Rhin th = จังหวัดโอ-แร็ง tr = Haut-Rhin @@ -9330,6 +9608,7 @@ pt = Aquitânia ro = Aquitania es = Aquitania + et = Akvitaania sv = Aquitaine th = แคว้นอากีแตน tr = Akitanya @@ -9363,6 +9642,7 @@ pt = Dordonha ro = Dordogne es = Dordoña + et = Dordogne sv = Dordogne th = จังหวัดดอร์ดอญ tr = Dordogne @@ -9396,6 +9676,7 @@ pt = Gironda ro = Gironde es = Gironda + et = Gironde sv = Gironde th = จังหวัดฌีรงด์ tr = Gironde @@ -9429,6 +9710,7 @@ pt = Landes ro = Landes es = Landas + et = Landes sv = Landes th = จังหวัดล็องด์ tr = Landes @@ -9462,6 +9744,7 @@ pt = Lot e Garona ro = Lot-et-Garonne es = Lot y Garona + et = Lot-et-Garonne sv = Lot-et-Garonne th = จังหวัดลอเตการอน tr = Lot-et-Garonne @@ -9495,6 +9778,7 @@ pt = Pirineus Atlânticos ro = Pyrénées-Atlantiques es = Pirineos Atlánticos + et = Atlandi-Püreneed sv = Pyrénées-Atlantiques th = จังหวัดปีเรเน-อัตล็องติก tr = Pyrénées-Atlantiques @@ -9528,6 +9812,7 @@ pt = Auvérnia ro = Auvergne es = Auvernia + et = Auvergne sv = Auvergne th = แคว้นโอแวร์ญ tr = Auvergne @@ -9561,6 +9846,7 @@ pt = Allier ro = Allier es = Allier + et = Allier sv = Allier th = จังหวัดอาลีเย tr = Allier @@ -9594,6 +9880,7 @@ pt = Cantal ro = Cantal es = Cantal + et = Cantal sv = Cantal th = จังหวัดก็องตาล tr = Cantal @@ -9627,6 +9914,7 @@ pt = Haute-Loire ro = Haute-Loire es = Alto Loira + et = Ülem-Loire sv = Haute-Loire th = จังหวัดโอต-ลัวร์ tr = Haute-Loire @@ -9660,6 +9948,7 @@ pt = Puy-de-Dôme ro = Puy-de-Dôme es = Puy-de-Dôme + et = Puy-de-Dôme sv = Puy-de-Dôme th = จังหวัดปุย-เดอ-โดม tr = Puy-de-Dôme @@ -9693,6 +9982,7 @@ pt = Bretanha ro = Bretania es = Bretaña + et = Bretagne sv = Bretagne th = บริตานี tr = Bretonya @@ -9726,6 +10016,7 @@ pt = Côtes-d'Armor ro = Côtes-d'Armor es = Côtes-d'Armor + et = Côtes-d'Armor sv = Côtes-d'Armor th = จังหวัดโกต-ดาร์มอร์ tr = Côtes-d'Armor @@ -9759,6 +10050,7 @@ pt = Finistère ro = Finistère es = Finisterre + et = Finistère sv = Finistère th = จังหวัดฟีนิสแตร์ tr = Finistère @@ -9792,6 +10084,7 @@ pt = Ille-et-Vilaine ro = Ille-et-Vilaine es = Ille y Vilaine + et = Ille-et-Vilaine sv = Ille-et-Vilaine th = จังหวัดอีเลวีแลน tr = Ille-et-Vilaine @@ -9825,6 +10118,7 @@ pt = Morbihan ro = Morbihan es = Morbihan + et = Morbihan sv = Morbihan th = จังหวัดมอร์บีอ็อง tr = Morbihan @@ -9858,6 +10152,7 @@ pt = Borgonha ro = Burgundia es = Borgoña + et = Burgundia sv = Bourgogne th = แคว้นบูร์กอญ tr = Burgonya @@ -9891,6 +10186,7 @@ pt = Côte-d'Or ro = Côte-d'Or es = Côte-d'Or + et = Côte-d'Or sv = Côte-d’Or th = จังหวัดโกต-ดอร์ tr = Côte-d'Or @@ -9924,6 +10220,7 @@ pt = Nièvre ro = Nièvre es = Nièvre + et = Nièvre sv = Nièvre th = จังหวัดเนียฟวร์ tr = Nièvre @@ -9957,6 +10254,7 @@ pt = Saône-et-Loire ro = Saône-et-Loire es = Saona y Loira + et = Saône-et-Loire sv = Saône-et-Loire th = จังหวัดโซเนลัวร์ tr = Saône-et-Loire @@ -9990,6 +10288,7 @@ pt = Yonne ro = Yonne es = Yonne + et = Yonne sv = Yonne th = จังหวัดอียอน tr = Yonne @@ -10023,6 +10322,7 @@ pt = Centro-Vale do Loire ro = Centru es = Centro + et = Kesk-Loire'i org sv = Centre th = แคว้นซ็องทร์ tr = Merkez @@ -10056,6 +10356,7 @@ pt = Cher ro = Cher es = Cher + et = Cher sv = Cher th = จังหวัดแชร์ tr = Cher, Fransa @@ -10089,6 +10390,7 @@ pt = Eure-et-Loir ro = Eure-et-Loir es = Eure y Loir + et = Eure-et-Loir sv = Eure-et-Loir th = จังหวัดเออเรลัวร์ tr = Eure-et-Loir @@ -10122,6 +10424,7 @@ pt = Indre ro = Indre es = Indre + et = Indre sv = Indre th = จังหวัดแอ็งดร์ tr = Indre @@ -10155,6 +10458,7 @@ pt = Indre-et-Loire ro = Indre-et-Loire es = Indre y Loira + et = Indre-et-Loire sv = Indre-et-Loire th = จังหวัดแอ็งเดรลัวร์ tr = Indre-et-Loire @@ -10188,6 +10492,7 @@ pt = Loir-et-Cher ro = Loir-et-Cher es = Loir y Cher + et = Loir-et-Cher sv = Loir-et-Cher th = จังหวัดลัวเรแชร์ tr = Loir-et-Cher @@ -10221,6 +10526,7 @@ pt = Loiret ro = Loiret es = Loiret + et = Loiret sv = Loiret th = จังหวัดลัวแร tr = Loiret @@ -10254,6 +10560,7 @@ pt = Champanha-Ardenas ro = Champagne-Ardenne es = Champaña-Ardenas + et = Champagne-Ardenne sv = Champagne-Ardenne th = แคว้นช็องปาญาร์แดน tr = Champagne-Ardenne @@ -10287,6 +10594,7 @@ pt = Córsega ro = Corsica es = Córcega + et = Korsika sv = Korsika th = คอร์ซิกา tr = Korsika @@ -10320,6 +10628,7 @@ pt = Franco-Condado ro = Franche-Comté es = Franco Condado + et = Franche-Comté sv = Franche-Comté th = แคว้นฟร็องช์-กงเต tr = Franche-Comté @@ -10353,6 +10662,7 @@ pt = Guiana Francesa ro = Guyana Franceză es = Guayana Francesa + et = Prantsuse Guajaana sv = Franska Guyana th = เฟรนช์เกียนา tr = Fransız Guyanası @@ -10386,6 +10696,7 @@ pt = Ilha de França ro = Île-de-France es = Isla de Francia + et = Île-de-France sv = Île-de-France th = แคว้นอีล-เดอ-ฟร็องส์ tr = Île-de-France (bölge) @@ -10419,6 +10730,7 @@ pt = Essonne ro = Essonne es = Essonne + et = Essonne sv = Essonne th = จังหวัดเอซอน tr = Essonne @@ -10452,6 +10764,7 @@ pt = Altos do Sena ro = Hauts-de-Seine es = Altos del Sena + et = Hauts-de-Seine sv = Hauts-de-Seine th = จังหวัดโอดแซน tr = Hauts-de-Seine @@ -10485,6 +10798,7 @@ pt = Paris ro = Paris es = París + et = Pariis sv = Paris th = ปารีส tr = Paris @@ -10518,6 +10832,7 @@ pt = Seine-Saint-Denis ro = Seine-Saint-Denis es = Sena-Saint Denis + et = Seine-Saint-Denis sv = Seine-Saint-Denis th = จังหวัดแซน-แซ็ง-เดอนี tr = Seine-Saint-Denis @@ -10551,6 +10866,7 @@ pt = Sena e Marne ro = Seine-et-Marne es = Sena y Marne + et = Seine-et-Marne sv = Seine-et-Marne th = จังหวัดแซเนมาร์น tr = Seine-et-Marne @@ -10584,6 +10900,7 @@ pt = Val-d'Oise ro = Val-d'Oise es = Valle del Oise + et = Val-d'Oise sv = Val-d'Oise th = จังหวัดวาล-ดวซ tr = Val-d'Oise @@ -10617,6 +10934,7 @@ pt = Val-de-Marne ro = Val-de-Marne es = Valle del Marne + et = Val-de-Marne sv = Val-de-Marne th = จังหวัดวาล-เดอ-มาร์น tr = Val-de-Marne @@ -10650,6 +10968,7 @@ pt = Yvelines ro = Yvelines es = Yvelines + et = Yvelines sv = Yvelines th = จังหวัดอีฟว์ลีน tr = Yvelines @@ -10683,6 +11002,7 @@ pt = Languedoque-Rossilhão ro = Languedoc-Roussillon es = Languedoc-Rosellón + et = Languedoc-Roussillon sv = Languedoc-Roussillon th = แคว้นล็องก์ด็อก-รูซียง tr = Languedoc-Roussillon @@ -10716,6 +11036,7 @@ pt = Aude ro = Aude es = Aude + et = Aude sv = Aude th = จังหวัดโอด tr = Aude @@ -10749,6 +11070,7 @@ pt = Gard ro = Gard es = Gard + et = Gard sv = Gard th = จังหวัดการ์ tr = Gard @@ -10782,6 +11104,7 @@ pt = Hérault ro = Hérault es = Hérault + et = Hérault sv = Hérault th = จังหวัดเอโร tr = Hérault, Fransa @@ -10815,6 +11138,7 @@ pt = Lozère ro = Lozère es = Lozère + et = Lozère sv = Lozère th = จังหวัดลอแซร์ tr = Lozère @@ -10848,6 +11172,7 @@ pt = Pirineus Orientais ro = Pyrénées-Orientales es = Pirineos Orientales + et = Pyrénées-Orientales sv = Pyrénées-Orientales th = จังหวัดปีเรเน-ออรีย็องตาล tr = Pyrénées-Orientales @@ -10881,6 +11206,7 @@ pt = Limusino ro = Limousin es = Lemosín + et = Limousin sv = Limousin th = แคว้นลีมูแซ็ง tr = Limousin @@ -10914,6 +11240,7 @@ pt = Lorena ro = Lorena es = Lorena + et = Lorraine sv = Lorraine th = แคว้นลอแรน tr = Lorraine @@ -10947,6 +11274,7 @@ pt = Meurthe-et-Moselle ro = Meurthe-et-Moselle es = Meurthe y Mosela + et = Meurthe-et-Moselle sv = Meurthe-et-Moselle th = จังหวัดเมอร์เตมอแซล tr = Meurthe-et-Moselle @@ -10980,6 +11308,7 @@ pt = Meuse ro = Meuse es = Mosa + et = Meuse sv = Meuse th = จังหวัดเมิซ tr = Meuse @@ -11013,6 +11342,7 @@ pt = Mosela ro = Moselle es = Mosela + et = Moselle sv = Moselle th = จังหวัดมอแซล tr = Moselle @@ -11046,6 +11376,7 @@ pt = Vosges ro = Vosges es = Vosgos + et = Vosges sv = Vosges th = จังหวัดโวฌ tr = Vosges @@ -11079,6 +11410,7 @@ pt = Baixa Normandia ro = Normandia de Jos es = Baja Normandía + et = Alam-Normandia sv = Basse-Normandie th = แคว้นบัส-นอร์ม็องดี tr = Aşağı Normandiya @@ -11112,6 +11444,7 @@ pt = Calvados ro = Calvados es = Calvados + et = Calvados sv = Calvados th = จังหวัดกาลวาโดส tr = Calvados @@ -11145,6 +11478,7 @@ pt = Mancha ro = Manche es = Mancha + et = Manche sv = Manche th = จังหวัดม็องช์ tr = Manche @@ -11178,6 +11512,7 @@ pt = Orne ro = Orne es = Orne + et = Orne sv = Orne th = จังหวัดออร์น tr = Orne @@ -11211,6 +11546,7 @@ pt = Midi-Pirinéus ro = Midi-Pirinei es = Mediodía-Pirineos + et = Midi-Pyrénées sv = Midi-Pyrénées th = แคว้นมีดี-ปีเรเน tr = Midi-Pyrénées @@ -11244,6 +11580,7 @@ pt = Ariège ro = Ariège es = Ariège + et = Ariège sv = Ariège th = จังหวัดอาเรียฌ tr = Ariège @@ -11277,6 +11614,7 @@ pt = Aveyron ro = Aveyron es = Aveyron + et = Aveyron sv = Aveyron th = จังหวัดอาแวรง tr = Aveyron @@ -11310,6 +11648,7 @@ pt = Gers ro = Gers es = Gers + et = Gers sv = Gers th = จังหวัดแฌร์ tr = Gers @@ -11343,6 +11682,7 @@ pt = Alta Garona ro = Haute-Garonne es = Alto Garona + et = Ülem-Garonne sv = Haute-Garonne th = จังหวัดโอต-การอน tr = Haute-Garonne @@ -11376,6 +11716,7 @@ pt = Altos Pirenéus ro = Hautes-Pyrénées es = Altos Pirineos + et = Ülem-Püreneed sv = Hautes-Pyrénées th = จังหวัดโอต-ปีเรเน tr = Hautes-Pyrénées @@ -11409,6 +11750,7 @@ pt = Lot ro = Lot es = Lot + et = Lot sv = Lot th = จังหวัดล็อต tr = Lot @@ -11442,6 +11784,7 @@ pt = Tarn ro = Tarn es = Tarn + et = Tarn sv = Tarn th = จังหวัดตาร์น tr = Tarn @@ -11475,6 +11818,7 @@ pt = Tarn-et-Garonne ro = Tarn-et-Garonne es = Tarn y Garona + et = Tarn-et-Garonne sv = Tarn-et-Garonne th = จังหวัดตาร์เนการอน tr = Tarn-et-Garonne @@ -11508,6 +11852,7 @@ pt = Nova Caledónia ro = Noua Caledonie es = Nueva Caledonia + et = Uus-Kaledoonia sv = Nya Kaledonien th = นิวแคลิโดเนีย tr = Yeni Kaledonya @@ -11541,6 +11886,7 @@ pt = Nord-Pas-de-Calais ro = Nord-Pas-de-Calais es = Norte-Paso de Calais + et = Nord-Pas-de-Calais sv = Nord-Pas-de-Calais th = แคว้นนอร์-ปาดกาแล tr = Nord-Pas-de-Calais @@ -11574,6 +11920,7 @@ pt = Lille ro = Lille es = Lille + et = Lille sv = Lille th = ลีล tr = Lille @@ -11607,6 +11954,7 @@ pt = Norte (departamento) ro = Nord es = Norte + et = Nord sv = Nord th = จังหวัดนอร์ tr = Nord, Fransa @@ -11640,6 +11988,7 @@ pt = Pas-de-Calais ro = Pas-de-Calais es = Paso de Calais + et = Pas-de-Calais sv = Pas-de-Calais th = จังหวัดปาดกาแล tr = Pas-de-Calais @@ -11673,6 +12022,7 @@ pt = País do Loire ro = Pays de la Loire es = Países del Loira + et = Pays de la Loire sv = Pays de la Loire th = แคว้นเปอีเดอลาลัวร์ tr = Pays de la Loire @@ -11706,6 +12056,7 @@ pt = Loire-Atlantique ro = Loire-Atlantique es = Loira Atlántico + et = Loire-Atlantique sv = Loire-Atlantique th = จังหวัดลัวรัตล็องติก tr = Loire-Atlantique @@ -11739,6 +12090,7 @@ pt = Maine-et-Loire ro = Maine-et-Loire es = Maine y Loira + et = Maine-et-Loire sv = Maine-et-Loire th = จังหวัดแมเนลัวร์ tr = Maine-et-Loire @@ -11772,6 +12124,7 @@ pt = Mayenne ro = Mayenne es = Mayenne + et = Mayenne sv = Mayenne th = จังหวัดมาแยน tr = Mayenne @@ -11805,6 +12158,7 @@ pt = Sarthe ro = Sarthe es = Sarthe + et = Sarthe sv = Sarthe th = จังหวัดซาร์ต tr = Sarthe @@ -11838,6 +12192,7 @@ pt = Vendeia ro = Vendée es = Vandea + et = Vendée sv = Vendée th = จังหวัดว็องเด tr = Vendée @@ -11871,6 +12226,7 @@ pt = Picardia ro = Picardia es = Picardía + et = Pikardia sv = Picardie th = แคว้นปีการ์ดี tr = Picardie @@ -11904,6 +12260,7 @@ pt = Aisne ro = Aisne es = Aisne + et = Aisne sv = Aisne th = จังหวัดแอน tr = Aisne @@ -11937,6 +12294,7 @@ pt = Oise ro = Oise es = Oise + et = Oise sv = Oise th = จังหวัดอวซ tr = Oise @@ -11970,6 +12328,7 @@ pt = Somme ro = Somme es = Somme + et = Somme sv = Somme th = จังหวัดซอม tr = Somme @@ -12003,6 +12362,7 @@ pt = Poitou-Charentes ro = Poitou-Charentes es = Poitou-Charentes + et = Poitou-Charentes sv = Poitou-Charentes th = แคว้นปัวตู-ชาร็องต์ tr = Poitou-Charentes @@ -12036,6 +12396,7 @@ pt = Charente ro = Charente es = Charente + et = Charente sv = Charente th = จังหวัดชาร็องต์ tr = Charente @@ -12069,6 +12430,7 @@ pt = Charente-Maritime ro = Charente-Maritime es = Charente Marítimo + et = Charente-Maritime sv = Charente-Maritime th = จังหวัดชาร็องต์-มารีตีม tr = Charente-Maritime @@ -12102,6 +12464,7 @@ pt = Deux-Sèvres ro = Deux-Sèvres es = Deux-Sèvres + et = Deux-Sèvres sv = Deux-Sèvres th = จังหวัดเดอ-แซฟวร์ tr = Deux-Sèvres @@ -12135,6 +12498,7 @@ pt = Vienne ro = Vienne es = Vienne + et = Vienne sv = Vienne th = จังหวัดเวียน tr = Vienne @@ -12168,6 +12532,7 @@ pt = Provença-Alpes-Costa Azul ro = Provența-Alpi-Coasta de Azur es = Provenza-Alpes-Costa Azul + et = Provence-Alpes-Côte d'Azur sv = Provence-Alpes-Côte d'Azur th = แคว้นพรอว็องซาลป์โกตดาซูร์ tr = Provence-Alpes-Côte d'Azur @@ -12201,6 +12566,7 @@ pt = Alpes da Alta Provença ro = Alpes-de-Haute-Provence es = Alpes de Alta Provenza + et = Alpes-de-Haute-Provence sv = Alpes-de-Haute-Provence th = จังหวัดอาลป์-เดอ-โอต-พรอว็องส์ tr = Alpes-de-Haute-Provence @@ -12234,6 +12600,7 @@ pt = Bocas do Ródano ro = Bouches-du-Rhône es = Bocas del Ródano + et = Bouches-du-Rhône sv = Bouches-du-Rhône th = จังหวัดบุช-ดูว์-โรน tr = Bouches-du-Rhône @@ -12267,6 +12634,7 @@ pt = Altos Alpes ro = Hautes-Alpes es = Altos Alpes + et = Hautes-Alpes sv = Hautes-Alpes th = จังหวัดโอตซาลป์ tr = Hautes-Alpes @@ -12300,6 +12668,7 @@ pt = Alpes Marítimos ro = Alpes-Maritimes es = Alpes Marítimos + et = Alpes-Maritimes sv = Alpes-Maritimes th = จังหวัดอาลป์-มารีตีม tr = Alpes-Maritimes @@ -12333,6 +12702,7 @@ pt = Var ro = Var es = Var + et = Var sv = Var th = จังหวัดวาร์ tr = Var @@ -12366,6 +12736,7 @@ pt = Vaucluse ro = Vaucluse es = Vaucluse + et = Vaucluse sv = Vaucluse th = จังหวัดโวกลูซ tr = Vaucluse @@ -12399,6 +12770,7 @@ pt = Ródano-Alpes ro = Ron-Alpi es = Ródano-Alpes + et = Rhône-Alpes sv = Rhône-Alpes th = แคว้นโรนาลป์ tr = Rhône-Alpes @@ -12432,6 +12804,7 @@ pt = Ain ro = Ain es = Ain + et = Ain sv = Ain th = จังหวัดแอ็ง tr = Ain @@ -12465,6 +12838,7 @@ pt = Ardèche ro = Ardèche es = Ardéche + et = Ardèche sv = Ardèche th = จังหวัดอาร์แด็ช tr = Ardèche @@ -12498,6 +12872,7 @@ pt = Drôme ro = Drôme es = Drôme + et = Drôme sv = Drôme th = จังหวัดโดรม tr = Drôme @@ -12531,6 +12906,7 @@ pt = Alta Saboia ro = Haute-Savoie es = Alta Saboya + et = Haute-Savoie sv = Haute-Savoie th = จังหวัดโอต-ซาวัว tr = Haute-Savoie @@ -12564,6 +12940,7 @@ pt = Isère ro = Isère es = Isère + et = Isère sv = Isère th = จังหวัดอีแซร์ tr = Isère @@ -12597,6 +12974,7 @@ pt = Loire ro = Loire es = Loira + et = Loire sv = Loire th = จังหวัดลัวร์ tr = Loire @@ -12630,6 +13008,7 @@ pt = Ródano ro = Rhône es = Ródano + et = Rhône sv = Rhône th = จังหวัดโรน tr = Rhône @@ -12663,6 +13042,7 @@ pt = Saboia ro = Savoie es = Saboya + et = Savoie sv = Savoie th = จังหวัดซาวัว tr = Savoie @@ -12696,6 +13076,7 @@ pt = Terras Austrais e Antárticas Francesas ro = Teritoriile australe și antarctice franceze es = Tierras Australes y Antárticas Francesas + et = Prantsuse lõuna- ja Antarktika maad sv = Franska sydterritorierna th = เฟรนช์เซาเทิร์นและแอนตาร์กติกแลนส์ tr = Fransız Güney ve Antarktika Toprakları @@ -12729,6 +13110,7 @@ pt = Alta Normandia ro = Normandia de Sus es = Alta Normandía + et = Ülem-Normandia sv = Haute-Normandie th = แคว้นโอต-นอร์ม็องดี tr = Yukarı Normandiya @@ -12762,6 +13144,7 @@ pt = Polinésia Francesa ro = Polinezia Franceză es = Polinesia Francesa + et = Prantsuse Polüneesia eu = Polinesia frantsesa sv = Franska Polynesien th = เฟรนช์โปลินีเซีย @@ -12796,6 +13179,7 @@ pt = Gabão ro = Gabon es = Gabón + et = Gabon eu = Gabon sv = Gabon th = ประเทศกาบอง @@ -12830,6 +13214,7 @@ pt = Geórgia ro = Georgia es = Georgia + et = Gruusia eu = Georgia sv = Georgien th = ประเทศจอร์เจีย @@ -12864,6 +13249,7 @@ pt = Geórgia ro = Georgia es = Georgia + et = Gruusia eu = Georgia sv = Georgien th = ประเทศจอร์เจีย @@ -12898,6 +13284,7 @@ pt = Alemanha ro = Germania es = Alemania + et = Saksamaa eu = Alemania sv = Tyskland th = ประเทศเยอรมนี @@ -12933,6 +13320,7 @@ pt = Baden-Württemberg ro = Baden-Württemberg es = Baden-Wurtemberg + et = Baden-Württemberg sv = Baden-Württemberg th = รัฐบาเดิน-เวือร์ทเทมแบร์ก tr = Baden-Württemberg @@ -12966,6 +13354,7 @@ pt = Freiburg im Breisgau ro = Freiburg im Breisgau es = Friburgo de Brisgovia + et = Freiburg im Breisgau sv = Freiburg im Breisgau th = ไฟรบูร์กอิมไบรส์เกา tr = Freiburg im Breisgau @@ -12999,6 +13388,7 @@ pt = Karlsruhe ro = Regiunea administrativă Karlsruhe es = Región de Karlsruhe + et = Karlsruhe sv = Karlsruheregionen th = ภูมิภาครัฐบาลคาร์ลูช tr = Regierungsbezirk Karlsruhe @@ -13032,6 +13422,7 @@ pt = Estugarda — Heilbronn ro = Regiunea administrativă Stuttgart — Heilbronn es = Región Administrativa de Stuttgart — Heilbronn + et = Stuttgart — Heilbronn sv = Stuttgartregionen — Heilbronn th = ภูมิภาครัฐบาลชตุทท์การ์ท — เฮลบรอน tr = Regierungsbezirk Stuttgart — Heilbronn @@ -13065,6 +13456,7 @@ pt = Estugarda — Estugarda ro = Regiunea administrativă Stuttgart — Stuttgart es = Región Administrativa de Stuttgart — Stuttgart + et = Stuttgart — Stuttgart sv = Stuttgartregiionen — Stuttgart th = ภูมิภาครัฐบาลชตุทท์การ์ท — ชตุทท์การ์ท tr = Regierungsbezirk Stuttgart — Stuttgart @@ -13098,6 +13490,7 @@ pt = Tubinga ro = Regiunea administrativă Tübingen es = Región de Tubinga + et = Tübingen sv = Tübingen th = ทีบิเงน tr = Regierungsbezirk Tübingen @@ -13131,6 +13524,7 @@ pt = Berlim ro = Berlin es = Berlín + et = Berliin sv = Berlin th = เบอร์ลิน tr = Berlin @@ -13164,6 +13558,7 @@ pt = Brandemburgo — Norte ro = Brandenburg — Nord es = Brandeburgo — Norte + et = Brandenburg — Põhi sv = Brandenburg — Nord th = รัฐบรันเดนบูร์ก — เหนือ tr = Brandenburg — Kuzey @@ -13197,6 +13592,7 @@ pt = Brandemburgo — Sul ro = Brandenburg — Sud es = Brandeburgo — Sur + et = Brandenburg — Lõuna sv = Brandenburg — Syd th = รัฐบรันเดนบูร์ก — ใต้ tr = Brandenburg — Güney @@ -13230,6 +13626,7 @@ pt = Baviera ro = Bavaria es = Baviera + et = Baieri sv = Bayern th = รัฐบาวาเรีย tr = Bavyera @@ -13263,6 +13660,7 @@ pt = Baixa Baviera ro = Niederbayern es = Niederbayern + et = Alam-Baieri sv = Niederbayern th = โลว์เออร์บาวาเรีย tr = Niederbayern @@ -13296,6 +13694,7 @@ pt = Baixa Francónia ro = Franconia Inferioară es = Baja Franconia + et = Alam-Frangoonia sv = Unterfranken th = แฟรงโคเนียใต้ tr = Aşağı Franconia @@ -13329,6 +13728,7 @@ pt = Média Francónia ro = Franconia Mijlocie es = Franconia Media + et = Kesk-Frangoonia sv = Mittelfranken th = แฟรงโคเนียกลาง tr = Orta Franconia @@ -13362,6 +13762,7 @@ pt = Suábia ro = Suabia es = Suabia + et = Švaabimaa sv = Schwaben th = สวาเบีย tr = Svabya @@ -13395,6 +13796,7 @@ pt = Alta Baviera — Leste ro = Oberbayern — Est es = Alta Baviera — Este + et = Ülem-Baieri - Ida sv = Oberbayern — Öst th = อัปเปอร์บาวาเรีย — ตะวันออก tr = Oberbayern — Doğu @@ -13428,6 +13830,7 @@ pt = Alta Baviera — Ingolstadt ro = Oberbayern — Ingolstadt es = Alta Baviera — Ingolstadt + et = Ülem-Baieri - Ingolstadt sv = Oberbayern — Ingolstadt th = อัปเปอร์บาวาเรีย — อิงโกลชตัดท์ tr = Oberbayern — Ingolstadt @@ -13461,6 +13864,7 @@ pt = Alta Baviera — Munique ro = Oberbayern — München es = Alta Baviera — Múnich + et = Ülem-Baieri - München sv = Oberbayern — München th = อัปเปอร์บาวาเรีย — มิวนิก tr = Oberbayern — Münih @@ -13494,6 +13898,7 @@ pt = Alta Francónia ro = Franconia Superioară es = Alta Franconia + et = Ülem-Frangoonia sv = Oberfranken th = แฟรงโคเนียเหนือ tr = Yukarı Franconia @@ -13527,6 +13932,7 @@ pt = Alto Palatinado ro = Palatinatul Superior es = Alto Palatinado + et = Ülem-Pfalz sv = Oberpfalz th = พาลาทิเนตเหนือ tr = Yukarı Palatina @@ -13560,6 +13966,7 @@ pt = Hamburgo ro = Hamburg es = Hamburgo + et = Hamburg sv = Hamburg th = ฮัมบูร์ก tr = Hamburg @@ -13593,6 +14000,7 @@ pt = Hesse ro = Hessa es = Hesse + et = Hesse sv = Hessen th = รัฐเฮสเซิน tr = Hessen @@ -13626,6 +14034,7 @@ pt = Darmstadt ro = Darmstadt es = Darmstadt + et = Darmstadt sv = Regierungsbezirk Darmstadt th = ภูมิภาครัฐบาลแดมสตาต tr = Regierungsbezirk Darmstadt @@ -13659,6 +14068,7 @@ pt = Gießen ro = Gießen es = Región de Gießen + et = Giessen sv = Regierungsbezirk Gießen th = ภูมิภาครัฐบาลกิซเซน tr = Regierungsbezirk Gießen @@ -13692,6 +14102,7 @@ pt = Kassel ro = Kassel es = Región de Kassel + et = Kassel sv = Regierungsbezirk Kassel th = ภูมิภาครัฐบาล คาซเซล tr = Regierungsbezirk Kassel @@ -13725,6 +14136,7 @@ pt = Baixa Saxônia ro = Saxonia Inferioară es = Baja Sajonia + et = Alam-Saksimaa sv = Niedersachsen th = รัฐโลว์เออร์แซกโซนี tr = Aşağı Saksonya @@ -13758,6 +14170,7 @@ pt = Bremen ro = Brema es = Bremen + et = Bremen sv = Bremen th = รัฐเบรเมิน tr = Bremen @@ -13791,6 +14204,7 @@ pt = Lüneburg ro = Lüneburg es = Luneburgo + et = Lüneburg sv = Lüneburg th = ลิเนอร์เบิร์ก tr = Lüneburg @@ -13824,6 +14238,7 @@ pt = Hanover ro = Hanovra es = Hannover + et = Hannover sv = Hannover th = ฮันโนเวอร์ tr = Hannover @@ -13857,6 +14272,7 @@ pt = Oldemburgo ro = Oldenburg es = Oldenburgo + et = Oldenburg sv = Oldenburg th = โอเดนเบิร์ก tr = Oldenburg @@ -13890,6 +14306,7 @@ pt = Mecklemburgo-Pomerânia Ocidental ro = Mecklenburg - Pomerania Inferioară es = Mecklemburgo-Pomerania Occidental + et = Mecklenburg-Vorpommern sv = Mecklenburg-Vorpommern th = รัฐเมคเลนบูร์ก-ฟอร์พอมเมิร์น tr = Mecklenburg-Vorpommern @@ -13923,6 +14340,7 @@ pt = Renânia do Norte-Vestfália ro = Renania de Nord-Westfalia es = Renania del Norte-Westfalia + et = Nordrhein-Westfalen sv = Nordrhein-Westfalen th = รัฐนอร์ดไรน์-เวสท์ฟาเลิน tr = Kuzey Ren-Vestfalya @@ -13956,6 +14374,7 @@ pt = Arnsberg — Arnsberg ro = Arnsberg — Arnsberg es = Arnsberg — Arnsberg + et = Arnsberg — Arnsberg sv = Arnsberg — Arnsberg th = ภูมิภาครัฐบาลอันส์เบิร์ก — อันส์เบิร์ก tr = Arnsberg — Arnsberg @@ -13989,6 +14408,7 @@ pt = Arnsberg — Dortmund ro = Arnsberg — Dortmund es = Arnsberg — Dortmund + et = Arnsberg — Dortmund sv = Arnsberg — Dortmund th = ภูมิภาครัฐบาลอันส์เบิร์ก — ดอร์ทมุนด์ tr = Arnsberg — Dortmund @@ -14022,6 +14442,7 @@ pt = Detmold ro = Detmold es = Detmold + et = Detmold sv = Detmold th = ภูมิภาครัฐบาลเดทโมล์ด tr = Detmold @@ -14055,6 +14476,7 @@ pt = Düsseldorf — Düsseldorf ro = Düsseldorf — Düsseldorf es = Düsseldorf — Düsseldorf + et = Düsseldorf — Düsseldorf sv = Düsseldorf — Düsseldorf th = ภูมิภาครัฐบาลดัซเซลดอร์ฟ — ดัซเซลดอร์ฟ tr = Düsseldorf — Düsseldorf @@ -14088,6 +14510,7 @@ pt = Düsseldorf — Mülheim ro = Düsseldorf — Mülheim an der Ruhr es = Düsseldorf — Mülheim an der Ruhr + et = Düsseldorf — Mülheim an der Ruhr sv = Düsseldorf — Mülheim an der Ruhr th = ภูมิภาครัฐบาลดัซเซลดอร์ฟ — มิลเลียม อัน เดอร์ เรอร์ tr = Düsseldorf — Mülheim an der Ruhr @@ -14121,6 +14544,7 @@ pt = Düsseldorf — Wesel ro = Düsseldorf — Wesel es = Düsseldorf — Wesel + et = Düsseldorf — Wesel sv = Düsseldorf — Wesel th = ภูมิภาครัฐบาลดัซเซลดอร์ฟ — วีเซล tr = Düsseldorf — Wesel @@ -14154,6 +14578,7 @@ pt = Colônia — Aquisgrano ro = Köln — Aachen es = Colonia — Aquisgrán + et = Köln — Aachen sv = Köln — Aachen th = ภูมิภาครัฐบาลโคโลน — อาเชน tr = Köln — Aachen @@ -14187,6 +14612,7 @@ pt = Colônia — Colônia ro = Köln — Köln es = Colonia — Colonia + et = Köln — Köln sv = Köln — Köln th = ภูมิภาครัฐบาลโคโลน — โคโลน tr = Köln — Köln @@ -14220,6 +14646,7 @@ pt = Münster — Münster ro = Münster — Münster es = Münster — Münster + et = Münster — Münster sv = Münster — Münster th = ภูมิภาครัฐบาลมุนสเตอร์ — มุนสเตอร์ tr = Münster — Münster, Vestfalya @@ -14253,6 +14680,7 @@ pt = Münster — Recklinghausen ro = Münster — Recklinghausen es = Münster — Recklinghausen + et = Münster — Recklinghausen sv = Münster — Recklinghausen th = ภูมิภาครัฐบาลมุนสเตอร์ — เร็กลิงเฮาเซน tr = Münster — Recklinghausen @@ -14286,6 +14714,7 @@ pt = Renânia-Palatinado — Coblença ro = Renania-Palatinat — Koblenz es = Renania-Palatinado — Coblenza + et = Rheinland-Pfalz – Koblenz sv = Rheinland-Pfalz — Koblenz th = ไรน์แลนด์-พาลาติเนต — โคเบลนซ์ tr = Renanya-Palatina — Koblenz @@ -14319,6 +14748,7 @@ pt = Renânia-Palatinado — Mainz ro = Renania-Palatinat — Mainz es = Renania-Palatinado — Maguncia + et = Rheinland-Pfalz – Mainz sv = Rheinland-Pfalz — Mainz th = รัฐไรน์ลันด์-พฟัลซ์ — ไมนซ์ tr = Renanya-Palatina — Mainz @@ -14352,6 +14782,7 @@ pt = Sarre ro = Saarland es = Sarre + et = Saarland sv = Saarland th = รัฐซาร์ลันด์ tr = Saarland @@ -14385,6 +14816,7 @@ pt = Saxônia-Anhalt ro = Saxonia-Anhalt es = Sajonia-Anhalt + et = Saksimaa-Anhalt sv = Sachsen-Anhalt th = รัฐแซกโซนี-อันฮัลต์ tr = Saksonya-Anhalt @@ -14418,6 +14850,7 @@ pt = Saxônia — Dresden ro = Saxonia — Dresda es = Sajonia — Dresde + et = Saksimaa - Dresden sv = Sachsen — Dresden th = รัฐซัคเซิน — เดรสเดิน tr = Saksonya — Dresden @@ -14451,6 +14884,7 @@ pt = Saxônia — Leipzig ro = Saxonia — Leipzig es = Sajonia — Leipzig + et = Saksimaa - Leipzig sv = Sachsen — Leipzig th = รัฐซัคเซิน — ไลพ์ซิก tr = Saksonya — Leipzig @@ -14484,6 +14918,7 @@ pt = Schleswig-Holstein ro = Schleswig-Holstein es = Schleswig-Holstein + et = Schleswig-Holstein sv = Schleswig-Holstein th = รัฐชเลสวิก-โฮลชไตน์ tr = Schleswig-Holstein @@ -14517,6 +14952,7 @@ pt = Turíngia ro = Turingia es = Turingia + et = Tüüringi sv = Thüringen th = รัฐเทือริงเงิน tr = Türingiya @@ -14550,6 +14986,7 @@ pt = Gana ro = Ghana es = Ghana + et = Ghana eu = Ghana sv = Ghana th = ประเทศกานา @@ -14585,6 +15022,7 @@ pt = Gibraltar ro = Gibraltar es = Gibraltar + et = Gibraltar eu = Gibraltar sv = Gibraltar th = ยิบรอลตาร์ @@ -14620,6 +15058,7 @@ pt = Grécia ro = Grecia es = Grecia + et = Kreeka eu = Grezia sv = Grekland th = ประเทศกรีซ @@ -14655,6 +15094,7 @@ pt = Egeu ro = Regiunea Egeea es = Egeo + et = Egeuse sv = Egeiska havsregionen th = แอเจียน tr = Ege @@ -14688,6 +15128,7 @@ pt = Ática ro = Regiunea Atica es = Ática + et = Atika sv = Attica-regionen th = แอตติกา tr = Attika @@ -14721,6 +15162,7 @@ pt = Creta ro = Regiunea Creta es = Creta + et = Kreeta sv = Kretaregionen th = ครีต tr = Girit @@ -14754,6 +15196,7 @@ pt = Épiro e Macedônia Ocidental ro = Regiunea Epirul și Macedonia de Vest es = Oeste de Macedonia y Epiro + et = Epeiros ja Lääne-Makedoonia sv = Epirus och Västmakedonien th = อีพิรุสและมาซิโดเนียตะวันตก tr = Epir ve Batı Makedonya @@ -14787,6 +15230,7 @@ pt = Macedônia e Trácia ro = Regiunea Macedonia și Tracia es = Macedonia y Tracia + et = Makedoonia ja Traakia sv = Makedonien och Thrakien th = มาซิโดเนียและเทรซ tr = Makedonya ve Trakya @@ -14820,6 +15264,7 @@ pt = Tessália e Grécia Central ro = Regiunea Tesalia și Grecia Centrală es = Centro de Grecia y Tesalia + et = Tessaalia ja Kesk-Kreeka sv = Thessalien och centrala Grekland th = เทซซาลีและกรีซกลาง tr = Teselya ve Merkez Yunanistan @@ -14853,6 +15298,7 @@ pt = Peloponeso ro = Regiunea Peloponesul es = Peloponeso + et = Peloponnesos sv = Peloponnesos-regionen th = เพโลปอนนีส tr = Mora Yarımadası @@ -14886,6 +15332,7 @@ pt = Gronelândia ro = Groenlanda es = Groenlandia + et = Gröönimaa eu = Groenlandia sv = Grönland th = กรีนแลนด์ @@ -14921,6 +15368,7 @@ pt = Granada ro = Grenada es = Granada + et = Grenada eu = Granada sv = Grenada th = ประเทศเกรเนดา @@ -14955,6 +15403,7 @@ pt = Guadalupe ro = Guadelupa es = Guadalupe + et = Guadeloupe eu = Guadalupe sv = Guadeloupe th = กัวเดอลุป @@ -14989,6 +15438,7 @@ pt = Guatemala ro = Guatemala es = Guatemala + et = Guatemala eu = Guatemala sv = Guatemala th = ประเทศกัวเตมาลา @@ -15023,6 +15473,7 @@ pt = Guernsey ro = Guernsey es = Guernsey + et = Guernsey eu = Guernsey sv = Guernsey th = เกิร์นซีย์ @@ -15057,6 +15508,7 @@ pt = Guiné ro = Guineea es = Guinea + et = Guinea eu = Ginea sv = Guinea th = ประเทศกินี @@ -15091,6 +15543,7 @@ pt = Guiné-Bissau ro = Guineea-Bissau es = Guinea-Bisáu + et = Guinea-Bissau eu = Ginea-Bissau sv = Guinea-Bissau th = ประเทศกินี-บิสเซา @@ -15125,6 +15578,7 @@ pt = Guiana ro = Guyana es = Guyana + et = Guyana eu = Guyana sv = Guyana th = ประเทศกายอานา @@ -15160,6 +15614,7 @@ pt = Haiti ro = Haiti es = Haití + et = Haiti eu = Haiti sv = Haiti th = ประเทศเฮติ @@ -15195,6 +15650,7 @@ pt = Honduras ro = Honduras es = Honduras + et = Honduras eu = Honduras sv = Honduras th = ประเทศฮอนดูรัส @@ -15230,6 +15686,7 @@ pt = Hungria ro = Ungaria es = Hungría + et = Ungari eu = Hungaria sv = Ungern th = ประเทศฮังการี @@ -15265,6 +15722,7 @@ pt = Hungria Central ro = Ungaria Centrală es = Közép-Magyarország + et = Kesk-Ungari sv = Mellersta Ungern th = ฮังการีกลาง tr = Orta Macaristan @@ -15298,6 +15756,7 @@ pt = Hungria — Leste ro = Ungaria — Est es = Hungría — Este + et = Ungari - Ida sv = Ungern — Öst th = ประเทศฮังการี — ตะวันออก tr = Macaristan — Doğu @@ -15331,6 +15790,7 @@ pt = Hungria — Oeste ro = Ungaria — Vest es = Hungría — Oeste + et = Ungari - Lääs sv = Ungern — Väst th = ประเทศฮังการี — ตะวันตก tr = Macaristan — Batı @@ -15364,6 +15824,7 @@ pt = Islândia ro = Islanda es = Islandia + et = Island eu = Islandia sv = Island th = ประเทศไอซ์แลนด์ @@ -15399,6 +15860,7 @@ pt = Illinois ro = Illinois es = Illinois + et = Illinois eu = Illinois sv = Illinois th = รัฐอิลลินอยส์ @@ -15433,6 +15895,7 @@ pt = Índia ro = India es = India + et = India eu = India sv = Indien th = ประเทศอินเดีย @@ -15468,6 +15931,7 @@ pt = Andamão e Nicobar ro = Insulele Andaman și Nicobar es = Islas Andamán y Nicobar + et = Andamani ja Nicobari saared sv = Andamanerna och Nikobarerna th = หมู่เกาะอันดามันและนิโคบาร์ tr = Andaman ve Nikobar adaları @@ -15502,6 +15966,7 @@ pt = Andhra Pradesh ro = Andhra Pradesh es = Andhra Pradesh + et = Andhra Pradesh sv = Andhra Pradesh th = รัฐอานธรประเทศ tr = Andhra Pradeş @@ -15536,6 +16001,7 @@ pt = Arunachal Pradesh ro = Arunachal Pradesh es = Arunachal Pradesh + et = Arunachal Pradesh sv = Arunachal Pradesh th = รัฐอรุณาจัลประเทศ tr = Arunaçhal Pradesh @@ -15570,6 +16036,7 @@ pt = Assam ro = Assam es = Assam + et = Assam sv = Assam th = รัฐอัสสัม tr = Assam @@ -15604,6 +16071,7 @@ pt = Bihar ro = Bihar es = Bihar + et = Bihar sv = Bihar th = รัฐพิหาร tr = Bihar @@ -15638,6 +16106,7 @@ pt = Chandigarh ro = Chandigarh es = Chandigarh + et = Chandigarh sv = Chandigarh th = จัณฑีครห์ tr = Çhandigarh @@ -15672,6 +16141,7 @@ pt = Chhattisgarh ro = Chhattisgarh es = Chhattisgarh + et = Chhattisgarh sv = Chhattisgarh th = รัฐฉัตติสครห์ tr = Chhattisgarh @@ -15706,6 +16176,7 @@ pt = Deli ro = Delhi es = Delhi + et = Delhi sv = Delhi th = เดลี tr = Delhi @@ -15740,6 +16211,7 @@ pt = Goa ro = Goa es = Goa + et = Goa sv = Goa th = รัฐกัว tr = Goa @@ -15774,6 +16246,7 @@ pt = Gujarate ro = Gujarat es = Guyarat + et = Gujarat sv = Gujarat th = รัฐคุชราต tr = Gucerat @@ -15808,6 +16281,7 @@ pt = Haryana ro = Haryana es = Haryana + et = Haryana sv = Haryana th = รัฐหรยาณา tr = Haryana @@ -15842,6 +16316,7 @@ pt = Himachal Pradesh ro = Himachal Pradesh es = Himachal Pradesh + et = Himachal Pradesh sv = Himachal Pradesh th = รัฐหิมาจัลประเทศ tr = Himaçhal Pradeş @@ -15876,6 +16351,7 @@ pt = Jammu e Caxemira ro = Jammu și Cașmir es = Jammu y Cachemira + et = Jammu ja Kashmir sv = Jammu och Kashmir th = รัฐชัมมูและกัศมีร์ tr = Cemmu ve Keşmir @@ -15910,6 +16386,7 @@ pt = Jharkhand ro = Jharkhand es = Jharkhand + et = Jharkhand sv = Jharkhand th = รัฐฌารขัณฑ์ tr = Jharkhand @@ -15944,6 +16421,7 @@ pt = Karnataka ro = Karnataka es = Karnataka + et = Karnataka sv = Karnataka th = รัฐกรณาฏกะ tr = Karnataka @@ -15978,6 +16456,7 @@ pt = Kerala ro = Kerala es = Kerala + et = Kerala sv = Kerala th = รัฐเกรละ tr = Kerala @@ -16012,6 +16491,7 @@ pt = Laquedivas ro = Lakshadweep es = Laquedivas + et = Lakshadweep sv = Lakshadweep th = ลักษทวีป tr = Lakşadvip Adaları @@ -16046,6 +16526,7 @@ pt = Madhya Pradesh ro = Madhya Pradesh es = Madhya Pradesh + et = Madhya Pradesh sv = Madhya Pradesh th = รัฐมัธยประเทศ tr = Madhya Pradesh @@ -16080,6 +16561,7 @@ pt = Maharashtra ro = Maharashtra es = Maharastra + et = Maharashtra sv = Maharashtra th = รัฐมหาราษฏระ tr = Maharaştra @@ -16114,6 +16596,7 @@ pt = Manipur ro = Manipur es = Manipur + et = Manipur sv = Manipur th = รัฐมณีปุระ tr = Manipur @@ -16148,6 +16631,7 @@ pt = Meghalaya ro = Meghalaya es = Megalaya + et = Meghalaya sv = Meghalaya th = รัฐเมฆาลัย tr = Meghalaya @@ -16182,6 +16666,7 @@ pt = Mizoram ro = Mizoram es = Mizorán + et = Mizoram sv = Mizoram th = รัฐมิโซรัม tr = Mizoram @@ -16216,6 +16701,7 @@ pt = Nagaland ro = Nagaland es = Nagaland + et = Nagaland sv = Nagaland th = รัฐนาคาแลนด์ tr = Nagaland @@ -16250,6 +16736,7 @@ pt = Orissa ro = Orissa es = Orissa + et = Odisha sv = Orissa th = รัฐโอริสสา tr = Orissa @@ -16284,6 +16771,7 @@ pt = Punjab ro = Punjab es = Punyab + et = Punjab sv = Punjab th = รัฐปัญจาบ tr = Pencap @@ -16318,6 +16806,7 @@ pt = Rajastão ro = Rajasthan es = Rajastán + et = Rajasthan sv = Rajasthan th = รัฐราชสถาน tr = Racasthan @@ -16352,6 +16841,7 @@ pt = Siquim ro = Sikkim es = Sikkim + et = Sikkim sv = Sikkim th = รัฐสิกขิม tr = Sikkim @@ -16386,6 +16876,7 @@ pt = Tamil Nadu ro = Tamil Nadu es = Tamil Nadu + et = Tamil Nadu sv = Tamil Nadu th = รัฐทมิฬนาฑู tr = Tamil Nadu @@ -16420,6 +16911,7 @@ pt = Telangana ro = Telangana es = Telingana + et = Telangana sv = Telangana th = รัฐเตลันกานา tr = Telangana @@ -16454,6 +16946,7 @@ pt = Tripura ro = Tripura es = Tripura + et = Tripura sv = Tripura th = รัฐตริปุระ tr = Tripura @@ -16488,6 +16981,7 @@ pt = Uttar Pradesh ro = Uttar Pradesh es = Uttar Pradesh + et = Uttar Pradesh sv = Uttar Pradesh th = รัฐอุตตรประเทศ tr = Uttar Pradeş @@ -16522,6 +17016,7 @@ pt = Uttarakhand ro = Uttarakhand es = Uttarakhand + et = Uttarakhand sv = Uttarakhand th = รัฐอุตตราขัณฑ์ tr = Uttarakhand @@ -16556,6 +17051,7 @@ pt = Bengala Ocidental ro = Bengalul de Vest es = Bengala Occidental + et = Lääne-Bengal sv = Västbengalen th = รัฐเบงกอลตะวันตก tr = Batı Bengal @@ -16590,6 +17086,7 @@ pt = Indiana ro = Indiana es = Indiana + et = Indiana eu = Indiana sv = Indiana th = รัฐอินดีแอนา @@ -16624,6 +17121,7 @@ pt = Indonésia ro = Indonezia es = Indonesia + et = Indoneesia eu = Indonesia sv = Indonesien th = ประเทศอินโดนีเซีย @@ -16659,6 +17157,7 @@ pt = Celebes, Kalimantan ro = Sulawesi, Kalimantan es = Célebes, Kalimantan + et = Sulawesi, Kalimantan sv = Sulawesi, Kalimantan th = สุลาเวสี กะลิมันตัน tr = Sulawesi, Kalimantan @@ -16692,6 +17191,7 @@ pt = Indonésia — Leste ro = Indonezia — Est es = Indonesia — Este + et = Indoneesia - Ida sv = Indonesien — Öst th = ประเทศอินโดนีเซีย — ตะวันออก tr = Endonezya — Doğu @@ -16725,6 +17225,7 @@ pt = Java Ocidental ro = Provincia Java de Vest es = Java Occidental + et = Lääne-Jaava maakond sv = Jawa Barat th = จังหวัดชวาตะวันตก tr = Batı Cava @@ -16758,6 +17259,7 @@ pt = Java Central ro = Provincia Java Centrală es = Java Central + et = Kesk-Jaava maakond sv = Jawa Tengah th = จังหวัดชวากลาง tr = Orta Cava @@ -16791,6 +17293,7 @@ pt = Java Oriental ro = Provincia Java de Est es = Java Oriental + et = Ida-Jaava maakond sv = Jawa Timur th = จังหวัดจาวาตะวันออก tr = Doğu Cava @@ -16824,6 +17327,7 @@ pt = Pequenas Ilhas da Sonda ro = Insulele Lesser Sunda es = Islas menores de la Sonda + et = Väikesed Sunda saared sv = Små Sundaöarna th = หมู่เกาะซุนดาน้อย tr = Küçük Sunda Adaları @@ -16857,6 +17361,7 @@ pt = Sumatra ro = Sumatra es = Sumatra + et = Sumatra sv = Sumatra th = เกาะสุมาตรา tr = Sumatra @@ -16890,6 +17395,7 @@ pt = Iowa ro = Iowa es = Iowa + et = Iowa eu = Iowa sv = Iowa th = รัฐไอโอวา @@ -16924,6 +17430,7 @@ pt = Irão ro = Iran es = Irán + et = Iraan eu = Iran sv = Iran th = ประเทศอิหร่าน @@ -16959,6 +17466,7 @@ pt = Irão — Norte ro = Iran — Nord es = Irán — Norte + et = Iraan - Põhi sv = Iran — Nord th = ประเทศอิหร่าน — เหนือ tr = İran — Kuzey @@ -16992,6 +17500,7 @@ pt = Irão — Sul ro = Iran — Sud es = Irán — Sur + et = Iraan - Lõuna sv = Iran — Syd th = ประเทศอิหร่าน — ใต้ tr = İran — Güney @@ -17025,6 +17534,7 @@ pt = Iraque ro = Irak es = Irak + et = Iraak eu = Irak sv = Irak th = ประเทศอิรัก @@ -17060,6 +17570,7 @@ pt = República da Irlanda ro = Irlanda es = Irlanda + et = Iirimaa eu = Irlanda sv = Irland th = ประเทศไอร์แลนด์ @@ -17095,6 +17606,7 @@ pt = Connacht ro = Connacht es = Connacht + et = Connacht sv = Connacht th = คอนนัก tr = Connacht @@ -17128,6 +17640,7 @@ pt = Leinster ro = Leinster es = Leinster + et = Leinster sv = Leinster th = ไลน์สเตอร์ tr = Leinster @@ -17161,6 +17674,7 @@ pt = Munster ro = Munster es = Munster + et = Munster sv = Munster th = มุนสเตอร์ tr = Munster @@ -17194,6 +17708,7 @@ pt = Ulster ro = Ulster es = Úlster + et = Ulster sv = Ulster th = อัลสเตอร์ tr = Ulster @@ -17227,8 +17742,9 @@ pt = Ilha de Man ro = Insula Man es = Isla de Man + et = Isle of Man eu = Man uhartea - sv = Isle of Man + sv = Mani saar th = เกาะแมน tr = Man Adası uk = Мен @@ -17261,6 +17777,7 @@ pt = Israel ro = Israel es = Israel + et = Iisrael eu = Israel sv = Israel th = ประเทศอิสราเอล @@ -17296,6 +17813,7 @@ pt = Israel ro = Israel es = Israel + et = Iisrael eu = Israel sv = Israel th = ประเทศอิสราเอล @@ -17330,6 +17848,7 @@ pt = Itália ro = Italia es = Italia + et = Itaalia eu = Italia sv = Italien th = ประเทศอิตาลี @@ -17365,6 +17884,7 @@ pt = Abruzos ro = Abruzzo es = Abruzos + et = Abruzzo sv = Abruzzo th = แคว้นอาบรุซโซ tr = Abruzzo @@ -17398,6 +17918,7 @@ pt = Vale de Aosta ro = Valle d'Aosta es = Valle de Aosta + et = Aosta org sv = Aostadalen th = แคว้นปกครองตนเองวัลเลดาออสตา tr = Aosta Vadisi @@ -17431,6 +17952,7 @@ pt = Apúlia ro = Apulia es = Apulia + et = Apulia sv = Apulien th = แคว้นปูลยา tr = Puglia @@ -17464,6 +17986,7 @@ pt = Basilicata ro = Basilicata es = Basilicata + et = Basilicata sv = Basilicata th = แคว้นบาซีลีกาตา tr = Basilicata @@ -17497,6 +18020,7 @@ pt = Calábria ro = Calabria es = Calabria + et = Calabria sv = Kalabrien th = แคว้นกาลาเบรีย tr = Calabria @@ -17530,6 +18054,7 @@ pt = Campânia ro = Campania es = Campania + et = Campania sv = Kampanien th = แคว้นกัมปาเนีย tr = Campania @@ -17563,6 +18088,7 @@ pt = Emília-Romanha ro = Emilia-Romagna es = Emilia-Romaña + et = Emilia-Romagna sv = Emilia-Romagna th = แคว้นเอมีเลีย-โรมัญญา tr = Emilia-Romagna @@ -17596,6 +18122,7 @@ pt = Bolonha ro = Provincia Bologna es = Bolonia + et = Bologna maakond sv = Bologna th = จังหวัดโบโลนา tr = Bologna ili @@ -17629,6 +18156,7 @@ pt = Ferrara ro = Provincia Ferrara es = Ferrara + et = Ferrara maakond sv = Ferrara th = จังหวัดเฟอร์รารา tr = Ferrara ili @@ -17662,6 +18190,7 @@ pt = Forlì-Cesena ro = Provincia Forlì-Cesena es = Forlì-Cesena + et = Forlì-Cesena maakond sv = Forlì-Cesena th = จังหวัดฟอร์ซี-เซเซนา tr = Forli-Cesena ili @@ -17695,6 +18224,7 @@ pt = Módena ro = Provincia Modena es = Módena + et = Modena maakond sv = Modena th = จังหวัดโมเดนา tr = Modena ili @@ -17728,6 +18258,7 @@ pt = Parma ro = Provincia Parma es = Parma + et = Parma maakond sv = Parma th = จังหวัดพาร์มา tr = Parma ili @@ -17761,6 +18292,7 @@ pt = Placência ro = Provincia Piacenza es = Piacenza + et = Piacenza maakond sv = Piacenza th = จังหวัดพิอาเซนซา tr = Piacenza ili @@ -17794,6 +18326,7 @@ pt = Ravena ro = Provincia Ravenna es = Rávena + et = Ravenna maakond sv = Ravenna th = จังหวัดราเวนนา tr = Ravenna ili @@ -17827,6 +18360,7 @@ pt = Reggio Emilia ro = Provincia Reggio Emilia es = Reggio Emilia + et = Reggio Emilia maakond sv = Reggio Emilia th = จังหวัดเรกกิโอ เอมิเลีย tr = Reggio Emilia ili @@ -17860,6 +18394,7 @@ pt = Rimini ro = Provincia Rimini es = Rímini + et = Rimini maakond sv = Rimini th = จังหวัดริมินิ tr = Rimini ili @@ -17893,6 +18428,7 @@ pt = Friul-Veneza Júlia ro = Friuli-Veneția Giulia es = Friuli-Venecia Julia + et = Friuli–Venezia Giulia sv = Friuli-Venezia Giulia th = แคว้นปกครองตนเองฟรีอูลี-เวเนเซียจูเลีย tr = Friuli-Venezia Giulia @@ -17926,6 +18462,7 @@ pt = Gorizia ro = Provincia Gorizia es = Gorizia + et = Gorizia maakond sv = Gorizia th = จังหวัดกอริเซีย tr = Gorizia ili @@ -17959,6 +18496,7 @@ pt = Pordenone ro = Provincia Pordenone es = Pordenone + et = Pordenone maakond sv = Pordenone th = จังหวัดพอร์เดโนเน tr = Pordenone ili @@ -17992,6 +18530,7 @@ pt = Trieste ro = Provincia Trieste es = Trieste + et = Trieste maakond sv = Trieste th = จังหวัดทริสที tr = Trieste ili @@ -18025,6 +18564,7 @@ pt = Udine ro = Provincia Udine es = Udine + et = Udine maakond sv = Udine th = จังหวัดอูดีน tr = Udine ili @@ -18058,6 +18598,7 @@ pt = Lácio ro = Lazio es = Lacio + et = Lazio sv = Lazio th = แคว้นลาซีโอ tr = Lazio @@ -18091,6 +18632,7 @@ pt = Ligúria ro = Liguria es = Liguria + et = Liguria sv = Ligurien th = แคว้นลิกูเรีย tr = Ligurya @@ -18124,6 +18666,7 @@ pt = Lombardia ro = Lombardia es = Lombardía + et = Lombardia sv = Lombardiet th = แคว้นลอมบาร์เดีย tr = Lombardiya @@ -18157,6 +18700,7 @@ pt = Bérgamo ro = Provincia Bergamo es = Bérgamo + et = Bergamo maakond sv = Bergamo th = จังหวัดเบอร์กาโม tr = Bergamo ili @@ -18190,6 +18734,7 @@ pt = Bréscia ro = Provincia Brescia es = Brescia + et = Brescia maakond sv = Brescia th = จังหวัดเบรเซีย tr = Brescia ili @@ -18223,6 +18768,7 @@ pt = Como ro = Provincia Como es = Como + et = Como maakond sv = Como th = จังหวัดโคโม tr = Como ili @@ -18256,6 +18802,7 @@ pt = Cremona ro = Provincia Cremona es = Cremona + et = Cremona maakond sv = Cremona th = จังหวัดครีโมนา tr = Cremona ili @@ -18289,6 +18836,7 @@ pt = Lecco ro = Provincia Lecco es = Lecco + et = Lecco maakond sv = Lecco th = จังหวัดเลคโค tr = Lecco ili @@ -18322,6 +18870,7 @@ pt = Lodi ro = Provincia Lodi es = Lodi + et = Lodi maakond sv = Lodi th = จังหวัดโลดี tr = Lodi ili @@ -18355,6 +18904,7 @@ pt = Mântua (província) ro = Provincia Mantova es = Mantua + et = Mantua maakond sv = Mantova th = จังหวัดมาตูอา tr = Mantova ili @@ -18388,6 +18938,7 @@ pt = Milão ro = Provincia Milano es = Milán + et = Milano maakond sv = Milano th = จังหวัดมิลาน tr = Milano ili @@ -18421,6 +18972,7 @@ pt = Província de Monza e Brianza ro = Provincia Monza-Brianza es = Monza y Brianza + et = Monza ja Brianza maakond sv = Monza e Brianza th = จังหวัดมอนซาและบริอันซา tr = Monza ve Brianza ili @@ -18454,6 +19006,7 @@ pt = Pavia ro = Provincia Pavia es = Pavía + et = Pavia maakond sv = Pavia th = จังหวัดพาเวีย tr = Pavia ili @@ -18487,6 +19040,7 @@ pt = Sondrio ro = Provincia Sondrio es = Sondrio + et = Sondrio maakond sv = Sondrio th = จังหวัดซอนดริโอ tr = Sondrio ili @@ -18520,6 +19074,7 @@ pt = Varese ro = Provincia Varese es = Varese + et = Varese maakond sv = Varese th = จังหวัดวาราซี tr = Varese ili @@ -18553,6 +19108,7 @@ pt = Marcas ro = Marche es = Marcas + et = Marche sv = Marche th = แคว้นมาร์เก tr = Marche @@ -18586,6 +19142,7 @@ pt = Molise ro = Molise es = Molise + et = Molise sv = Molise th = แคว้นโมลีเซ tr = Molise @@ -18619,6 +19176,7 @@ pt = Piemonte ro = Piemont es = Piamonte + et = Piedmont sv = Piemonte th = แคว้นปีเอมอนเต tr = Piyemonte @@ -18652,6 +19210,7 @@ pt = Alexandria (província) ro = Provincia Alessandria es = Alessandria + et = Alessandria maakond sv = Alessandria th = จังหวัดอเลสซันเดรีย tr = Alessandria ili @@ -18685,6 +19244,7 @@ pt = Asti ro = Provincia Asti es = Asti + et = Asti maakond sv = Asti th = จังหวัดแอสตี tr = Asti ili @@ -18718,6 +19278,7 @@ pt = Biella ro = Provincia Biella es = Biella + et = Biella maakond sv = Biella th = จังหวัดบิเอลลา tr = Biella ili @@ -18751,6 +19312,7 @@ pt = Cuneo ro = Provincia Cuneo es = Cuneo + et = Cuneo maakond sv = Cuneo th = จังหวัดคูเนโน tr = Cuneo ili @@ -18784,6 +19346,7 @@ pt = Novara ro = Provincia Novara es = Novara + et = Novara maakond sv = Novara th = จังหวัดโนวารา tr = Novara ili @@ -18817,6 +19380,7 @@ pt = Turim ro = Provincia Torino es = Turín + et = Torino maakond sv = Torino th = จังหวัดตูริน tr = Torino ili @@ -18850,6 +19414,7 @@ pt = Verbano Cusio Ossola ro = Provincia Verbano-Cusio-Ossola es = Verbano-Cusio-Ossola + et = Verbano-Cusio-Ossola sv = Verbano Cusio Ossola th = เวอร์บาโน-คูซิโอ-ออสโซลา tr = Verbano-Cusio-Ossola ili @@ -18883,6 +19448,7 @@ pt = Vercelli ro = Provincia Vercelli es = Vercelli + et = Vercelli maakond sv = Vercelli th = จังหวัดเวอร์เซลลี tr = Vercelli ili @@ -18916,6 +19482,7 @@ pt = Sardenha ro = Sardinia es = Cerdeña + et = Sardiinia sv = Sardinien th = แคว้นปกครองตนเองซาร์ดิเนีย tr = Sardinya @@ -18949,6 +19516,7 @@ pt = Sicília ro = Sicilia es = Sicilia + et = Sitsiilia sv = Sicilien th = แคว้นปกครองตนเองซิซิลี tr = Sicilya @@ -18982,6 +19550,7 @@ pt = Trentino-Alto Ádige ro = Trentino-Tirolul de Sud es = Trentino-Alto Adigio + et = Trentino-Lõuna-Tirool sv = Trentino-Alto Adige th = แคว้นปกครองตนเองเตรนตีโน-อัลโตอาดีเจ tr = Trentino-Alto Adige @@ -19015,6 +19584,7 @@ pt = Toscana — Grosseto ro = Toscana — Provincia Grosseto es = Toscana — Grosseto + et = Toscana - Grosseto maakond sv = Toscana — Grosseto th = ทัสคานี — จังหวัดกรอสเซโต tr = Toskana — Grosseto ili @@ -19048,6 +19618,7 @@ pt = Toscana — Massa-Carrara ro = Toscana — Provincia Massa-Carrara es = Toscana — Massa y Carrara + et = Toscana - Massa ja Carrara maakond sv = Toscana — Massa-Carrara th = ทัสคานี — จังหวัดมัสซาและคาร์รารา tr = Toskana — Massa ve Carrara ili @@ -19081,6 +19652,7 @@ pt = Úmbria ro = Umbria es = Umbría + et = Umbria sv = Umbrien th = แคว้นอุมเบรีย tr = Umbria @@ -19114,6 +19686,7 @@ pt = Véneto ro = Veneto es = Véneto + et = Veneto sv = Veneto th = แคว้นเวเนโต tr = Veneto @@ -19147,6 +19720,7 @@ pt = Belluno ro = Provincia Belluno es = Belluno + et = Belluno maakond sv = Belluno th = จังหวัดเบลลูโน tr = Belluno ili @@ -19180,6 +19754,7 @@ pt = Pádua ro = Provincia Padova es = Padua + et = Padua maakond sv = Padova th = จังหวัดพาดูอา tr = Padova ili @@ -19213,6 +19788,7 @@ pt = Rovigo ro = Provincia Rovigo es = Rovigo + et = Rovigo maakond sv = Rovigo th = จังหวัดโรวิโก tr = Rovigo ili @@ -19246,6 +19822,7 @@ pt = Treviso ro = Provincia Treviso es = Treviso + et = Treviso maakond sv = Treviso th = จังหวัดเทรวิโซ tr = Treviso ili @@ -19279,6 +19856,7 @@ pt = Veneza ro = Provincia Veneția es = Venecia + et = Veneetsia maakond sv = Venedig th = จังหวัดเวนิส tr = Venezia ili @@ -19312,6 +19890,7 @@ pt = Verona ro = Provincia Verona es = Verona + et = Verona maakond sv = Verona th = จังหวัดเวโรนา tr = Verona ili @@ -19345,6 +19924,7 @@ pt = Vicenza ro = Provincia Vicenza es = Vicenza + et = Vicenza maakond sv = Vicenza th = จังหวัดวิเซนซา tr = Vicenza ili @@ -19378,6 +19958,7 @@ pt = Jamaica ro = Jamaica es = Jamaica + et = Jamaica eu = Jamaika sv = Jamaica th = ประเทศจาเมกา @@ -19413,6 +19994,7 @@ pt = Japão ro = Japonia es = Japón + et = Jaapan eu = Japonia sv = Japan th = ประเทศญี่ปุ่น @@ -19448,6 +20030,7 @@ pt = Região de Chubu ro = Regiunea Chūbu es = Región de Chūbu + et = Chūbu piirkond sv = Chubu th = ชูบุ tr = Chūbu @@ -19482,6 +20065,7 @@ pt = Aichi ro = Prefectura Aichi es = Prefectura de Aichi + et = Aichi prefektuur sv = Aichi prefektur th = จังหวัดไอชิ tr = Aichi Vilayeti @@ -19516,6 +20100,7 @@ pt = Fukui ro = Prefectura Fukui es = Prefectura de Fukui + et = Fukui prefektuur sv = Fukui prefektur th = จังหวัดฟุกุอิ tr = Fukui Vilayeti @@ -19550,6 +20135,7 @@ pt = Gifu ro = Prefectura Gifu es = Prefectura de Gifu + et = Gifu prefektuur sv = Gifu prefektur th = จังหวัดกิฟุ tr = Gifu Vilayeti @@ -19583,6 +20169,7 @@ pt = Ishikawa ro = Prefectura Ishikawa es = Prefectura de Ishikawa + et = Ishikawa prefektuur sv = Ishikawa prefektur th = จังหวัดอิชิกะวะ tr = Ishikawa Vilayeti @@ -19616,6 +20203,7 @@ pt = Nagano ro = Prefectura Nagano es = Prefectura de Nagano + et = Nagano prefektuur sv = Nagano prefektur th = จังหวัดนะงะโนะ tr = Nagano Vilayeti @@ -19650,6 +20238,7 @@ pt = Niigata ro = Prefectura Niigata es = Prefectura de Niigata + et = Niigata prefektuur sv = Niigata prefektur th = จังหวัดนีงะตะ tr = Niigata Vilayeti @@ -19684,6 +20273,7 @@ pt = Shizuoka ro = Prefectura Shizuoka es = Prefectura de Shizuoka + et = Shizuoka prefektuur sv = Shizuoka prefektur th = จังหวัดชิซุโอะกะ tr = Shizuoka Vilayeti @@ -19718,6 +20308,7 @@ pt = Toyama ro = Prefectura Toyama es = Prefectura de Toyama + et = Toyama prefektuur sv = Toyama prefektur th = จังหวัดโทะยะมะ tr = Toyama Vilayeti @@ -19751,6 +20342,7 @@ pt = Yamanashi ro = Prefectura Yamanashi es = Prefectura de Yamanashi + et = Yamanashi prefektuur sv = Yamanashi prefektur th = จังหวัดยะมะนะชิ tr = Yamanashi Vilayeti @@ -19785,6 +20377,7 @@ pt = Região de Chugoku ro = Regiunea Chūgoku es = Región de Chūgoku + et = Chūgoku piirkond sv = Chugoku th = ชูโงะกุ tr = Chūgoku @@ -19819,6 +20412,7 @@ pt = Província de Hiroshima ro = Prefectura Hiroshima es = Prefectura de Hiroshima + et = Hiroshima prefektuur sv = Hiroshima prefektur th = จังหวัดฮิโระชิมะ tr = Hiroshima Vilayeti @@ -19853,6 +20447,7 @@ pt = Okayama ro = Prefectura Okayama es = Prefectura de Okayama + et = Okayama prefektuur sv = Okayama prefektur th = จังหวัดโอะกะยะมะ tr = Okayama Vilayeti @@ -19887,6 +20482,7 @@ pt = Shimane ro = Prefectura Shimane es = Prefectura de Shimane + et = Shimane prefektuur sv = Shimane prefektur th = จังหวัดชิมะเนะ tr = Shimane Vilayeti @@ -19921,6 +20517,7 @@ pt = Tottori ro = Prefectura Tottori es = Prefectura de Tottori + et = Tottori prefektuur sv = Tottori prefektur th = จังหวัดทตโตะริ tr = Tottori Vilayeti @@ -19955,6 +20552,7 @@ pt = Yamaguchi ro = Prefectura Yamaguchi es = Prefectura de Yamaguchi + et = Yamaguchi prefektuur sv = Yamaguchi prefektur th = จังหวัดยะมะงุชิ tr = Yamaguchi Vilayeti @@ -19989,6 +20587,7 @@ pt = Hokkaido ro = Insula Hokkaidō es = Hokkaidō + et = Hokkaido sv = Hokkaido th = จังหวัดฮกไกโด tr = Hokkaidō @@ -20023,6 +20622,7 @@ pt = Hokkaido — Leste ro = Insula Hokkaidō — Est es = Hokkaidō — Este + et = Hokkaido - Ida sv = Hokkaido — Öst th = จังหวัดฮกไกโด — ตะวันออก tr = Hokkaidō — Doğu @@ -20056,6 +20656,7 @@ pt = Hokkaido — Norte ro = Insula Hokkaidō — Nord es = Hokkaidō — Norte + et = Hokkaido - Põhi sv = Hokkaido — Nord th = จังหวัดฮกไกโด — เหนือ tr = Hokkaidō — Kuzey @@ -20089,6 +20690,7 @@ pt = Hokkaido — Oeste ro = Insula Hokkaidō — Vest es = Hokkaidō — Oeste + et = Hokkaido - Lääs sv = Hokkaido — Väst th = จังหวัดฮกไกโด — ตะวันตก tr = Hokkaidō — Batı @@ -20122,6 +20724,7 @@ pt = Região de Kanto ro = Regiunea Kantō es = Región de Kantō + et = Kanto piirkond sv = Kanto th = คันโต tr = Kantō @@ -20156,6 +20759,7 @@ pt = Chiba ro = Prefectura Chiba es = Chiba + et = Chiba prefektuur sv = Chiba prefektur th = จังหวัดชิบะ tr = Chiba ili @@ -20190,6 +20794,7 @@ pt = Gunma ro = Prefectura Gunma es = Prefectura de Gunma + et = Gunma prefektuur sv = Gunma prefektur th = จังหวัดกุมมะ tr = Gunma Vilayeti @@ -20223,6 +20828,7 @@ pt = Ibaraki ro = Prefectura Ibaraki es = Prefectura de Ibaraki + et = Ibaraki prefektuur sv = Ibaraki prefektur th = จังหวัดอิบะระกิ tr = Ibaraki @@ -20256,6 +20862,7 @@ pt = Kanagawa ro = Prefectura Kanagawa es = Prefectura de Kanagawa + et = Kanagawa prefektuur sv = Kanagawa prefektur th = จังหวัดคะนะงะวะ tr = Kanagawa ili @@ -20290,6 +20897,7 @@ pt = Saitama ro = Prefectura Saitama es = Prefectura de Saitama + et = Saitama prefektuur sv = Saitama prefektur th = จังหวัดไซตะมะ tr = Saitama ili @@ -20324,6 +20932,7 @@ pt = Tochigi ro = Prefectura Tochigi es = Prefectura de Tochigi + et = Tochigi prefektuur sv = Tochigi prefektur th = จังหวัดโทะชิงิ tr = Tochigi Vilayeti @@ -20358,6 +20967,7 @@ pt = Tóquio ro = Tokio es = Tokio + et = Tokyo prefektuur sv = Tokyo prefektur th = โตเกียว tr = Tokyo @@ -20392,6 +21002,7 @@ pt = Região de Kansai ro = Regiunea Kansai es = Región de Kinki + et = Kansai piirkond sv = Kansai th = คันไซ tr = Kansai @@ -20425,6 +21036,7 @@ pt = Mie ro = Prefectura Mie es = Prefectura de Mie + et = Mie prefektuur sv = Mie prefektur th = จังหวัดมิเอะ tr = Mie ili @@ -20458,6 +21070,7 @@ pt = Nara ro = Prefectura Nara es = Prefectura de Nara + et = Nara prefektuur sv = Nara prefektur th = จังหวัดนะระ tr = Nara Vilayeti @@ -20492,6 +21105,7 @@ pt = Osaka ro = Prefectura Osaka es = Prefectura de Osaka + et = Osaka prefektuur sv = Osaka prefektur th = จังหวัดโอซะกะ tr = Osaka ili @@ -20526,6 +21140,7 @@ pt = Wakayama ro = Prefectura Wakayama es = Prefectura de Wakayama + et = Wakayama prefektuur sv = Wakayama prefektur th = จังหวัดวะกะยะมะ tr = Wakayama Vilayeti @@ -20560,6 +21175,7 @@ pt = Kyushu ro = Kyūshū es = Kyūshū + et = Kyushu sv = Kyushu th = เกาะคีวชู tr = Kyūshū @@ -20594,6 +21210,7 @@ pt = Fukuoka ro = Prefectura Fukuoka es = Prefectura de Fukuoka + et = Fukuoka prefektuur sv = Fukuoka prefektur th = จังหวัดฟุกุโอะกะ tr = Fukuoka Vilayeti @@ -20628,6 +21245,7 @@ pt = Kagoshima ro = Prefectura Kagoshima es = Kagoshima + et = Kagoshima prefektuur sv = Kagoshima prefektur th = จังหวัดคะโงะชิมะ tr = Kagoşima ili @@ -20662,6 +21280,7 @@ pt = Kumamoto ro = Prefectura Kumamoto es = Prefectura de Kumamoto + et = Kumamoto prefektuur sv = Kumamoto prefektur th = จังหวัดคุมะโมะโตะ tr = Kumamoto Vilayeti @@ -20696,6 +21315,7 @@ pt = Miyazaki ro = Prefectura Miyazaki es = Prefectura de Miyazaki + et = Miyazaki prefektuur sv = Miyazaki prefektur th = จังหวัดมิยะซะกิ tr = Miyazaki Vilayeti @@ -20730,6 +21350,7 @@ pt = Nagasaki ro = Prefectura Nagasaki es = Prefectura de Nagasaki + et = Nagasaki prefektuur sv = Nagasaki prefektur th = จังหวัดนะงะซะกิ tr = Nagasaki Vilayeti @@ -20764,6 +21385,7 @@ pt = Oita ro = Prefectura Ōita es = Prefectura de Ōita + et = Oita prefektuur sv = Oita prefektur th = จังหวัดโออิตะ tr = Ōita Vilayeti @@ -20797,6 +21419,7 @@ pt = Okinawa ro = Prefectura Okinawa es = Prefectura de Okinawa + et = Okinawa prefektuur sv = Okinawa prefektur th = จังหวัดโอะกินะวะ tr = Okinawa @@ -20831,6 +21454,7 @@ pt = Saga ro = Prefectura Saga es = Prefectura de Saga + et = Saga prefektuur sv = Saga prefektur th = จังหวัดซะงะ tr = Saga Vilayeti @@ -20864,6 +21488,7 @@ pt = Shikoku ro = Shikoku es = Shikoku + et = Shikoku sv = Shikoku th = เกาะชิโกะกุ tr = Shikoku @@ -20897,6 +21522,7 @@ pt = Ehime ro = Prefectura Ehime es = Prefectura de Ehime + et = Ehime prefektuur sv = Ehime prefektur th = จังหวัดเอะฮิเมะ tr = Ehime Vilayeti @@ -20930,6 +21556,7 @@ pt = Kagawa ro = Prefectura Kagawa es = Prefectura de Kagawa + et = Kagawa prefektuur sv = Kagawa prefektur th = จังหวัดคะงะวะ tr = Kagawa Vilayeti @@ -20963,6 +21590,7 @@ pt = Kochi ro = Prefectura Kōchi es = Prefectura de Kōchi + et = Kochi prefektuur sv = Kochi prefektur th = จังหวัดโคชิ tr = Kōchi Vilayeti @@ -20996,6 +21624,7 @@ pt = Quioto ro = Prefectura Kyoto es = Prefectura de Kioto + et = Kyoto prefektuur sv = Kyoto prefektur th = จังหวัดเคียวโตะ tr = Kyōto Vilayeti @@ -21030,6 +21659,7 @@ pt = Tokushima ro = Prefectura Tokushima es = Prefectura de Tokushima + et = Tokushima prefektuur sv = Tokushima prefektur th = จังหวัดโทะกุชิมะ tr = Tokushima Vilayeti @@ -21063,6 +21693,7 @@ pt = Região de Tohoku ro = Regiunea Tōhoku es = Región de Tōhoku + et = Tohoku piirkond sv = Tohoku th = โทโฮะกุ tr = Tōhoku @@ -21097,6 +21728,7 @@ pt = Akita ro = Prefectura Akita es = Akita + et = Akita prefektuur sv = Akita prefektur th = จังหวัดอะกิตะ tr = Akita @@ -21131,6 +21763,7 @@ pt = Aomori ro = Prefectura Aomori es = Prefectura de Aomori + et = Aomori prefektuur sv = Aomori prefektur th = จังหวัดอะโอะโมะริ tr = Aomori Vilayeti @@ -21164,6 +21797,7 @@ pt = Fukushima ro = Prefectura Fukushima es = Prefectura de Fukushima + et = Fukushima prefektuur sv = Fukushima-prefekturen th = จังหวัดฟุกุชิมะ tr = Fukushima Vilayeti @@ -21198,6 +21832,7 @@ pt = Iwate ro = Prefectura Iwate es = Prefectura de Iwate + et = Iwate prefektuur sv = Iwate th = จังหวัดอิวะเตะ tr = Iwate @@ -21231,6 +21866,7 @@ pt = Miyagi ro = Prefectura Miyagi es = Miyagi + et = Miyagi prefektuur sv = Miyagi prefektur th = จังหวัดมิยะงิ tr = Miyagi Vilayeti @@ -21264,6 +21900,7 @@ pt = Yamagata ro = Prefectura Yamagata es = Prefectura de Yamagata + et = Yamagata prefektuur sv = Yamagata prefektur th = จังหวัดยะมะงะตะ tr = Yamagata Vilayeti @@ -21297,6 +21934,7 @@ pt = Jersey ro = Insula Jersey es = Jersey + et = Jersey eu = Jertsea sv = Jersey th = เจอร์ซีย์ @@ -21331,6 +21969,7 @@ pt = Jerusalém ro = Ierusalim es = Jerusalén + et = Jeruusalemm eu = Jerusalem sv = Jerusalem th = เยรูซาเลม @@ -21365,6 +22004,7 @@ pt = Jordânia ro = Iordania es = Jordania + et = Jordaania eu = Jordania sv = Jordanien th = ประเทศจอร์แดน @@ -21400,6 +22040,7 @@ pt = Kansas ro = Kansas es = Kansas + et = Kansas eu = Kansas sv = Kansas th = รัฐแคนซัส @@ -21434,6 +22075,7 @@ pt = Cazaquistão ro = Kazahstan es = Kazajistán + et = Kasahstan eu = Kazakhstan sv = Kazakstan th = ประเทศคาซัคสถาน @@ -21469,6 +22111,7 @@ pt = Kentucky ro = Kentucky es = Kentucky + et = Kentucky eu = Kentucky sv = Kentucky th = รัฐเคนทักกี @@ -21503,6 +22146,7 @@ pt = Quénia ro = Kenya es = Kenia + et = Keenia eu = Kenya sv = Kenya th = ประเทศเคนยา @@ -21538,6 +22182,7 @@ pt = Lesoto ro = Lesotho es = Lesoto + et = Lesotho eu = Lesotho sv = Lesotho th = ประเทศเลโซโท @@ -21572,6 +22217,7 @@ pt = Kiribati ro = Kiribati es = Kiribati + et = Kiribati eu = Kiribati sv = Kiribati th = ประเทศคิริบาส @@ -21606,6 +22252,7 @@ pt = Kuwait ro = Kuweit es = Kuwait + et = Kuveit eu = Kuwait sv = Kuwait th = ประเทศคูเวต @@ -21641,6 +22288,7 @@ pt = Quirguistão ro = Kirghiztan es = Kirguistán + et = Kõrgõzstan eu = Kirgizistan sv = Kirgizistan th = ประเทศคีร์กีซสถาน @@ -21675,6 +22323,7 @@ pt = Laos ro = Laos es = Laos + et = Laos eu = Laos sv = Laos th = ประเทศลาว @@ -21709,6 +22358,7 @@ pt = Letónia ro = Letonia es = Letonia + et = Läti eu = Letonian sv = Lettland th = ประเทศลัตเวีย @@ -21743,6 +22393,7 @@ pt = Líbano ro = Liban es = Líbano + et = Liibanon eu = Libano sv = Libanon th = ประเทศเลบานอน @@ -21778,6 +22429,7 @@ pt = Libéria ro = Liberia es = Liberia + et = Libeeria eu = Liberia sv = Liberia th = ประเทศไลบีเรีย @@ -21813,6 +22465,7 @@ pt = Líbia ro = Libia es = Libia + et = Liibüa eu = Libia sv = Libyen th = ประเทศลิเบีย @@ -21848,6 +22501,7 @@ pt = Liechtenstein ro = Liechtenstein es = Liechtenstein + et = Liechtenstein eu = Liechtenstein sv = Liechtenstein th = ประเทศลิกเตนสไตน์ @@ -21883,6 +22537,7 @@ pt = Lituânia ro = Lituania es = Lituania + et = Leedu eu = Lituania sv = Litauen th = ประเทศลิทัวเนีย @@ -21919,6 +22574,7 @@ ro = Louisiana es = Luisiana eu = Louisiana + et = Louisiana sv = Louisiana th = รัฐลุยเซียนา tr = Louisiana @@ -21952,6 +22608,7 @@ pt = Luxemburgo ro = Luxemburg es = Luxemburgo + et = Luksemburg eu = Luxenburgo sv = Luxemburg th = ประเทศลักเซมเบิร์ก @@ -21987,6 +22644,7 @@ pt = República da Macedónia ro = Republica Macedonia es = República de Macedonia + et = Makedoonia eu = Mazedoniako Errepublika sv = Makedonien th = ประเทศมาซิโดเนีย @@ -22022,6 +22680,7 @@ pt = Madagáscar ro = Madagascar es = Madagascar + et = Madagaskar eu = Madagaskar sv = Madagaskar th = ประเทศมาดากัสการ์ @@ -22057,6 +22716,7 @@ pt = Malawi ro = Malawi es = Malaui + et = Malawi eu = Malawi sv = Malawi th = ประเทศมาลาวี @@ -22091,6 +22751,7 @@ pt = Malásia ro = Malaezia es = Malasia + et = Malaisia eu = Malaysia sv = Malaysia th = ประเทศมาเลเซีย @@ -22126,6 +22787,7 @@ pt = Maldivas ro = Maldive es = Maldivas + et = Maldiivid eu = Maldibak sv = Maldiverna th = ประเทศมัลดีฟส์ @@ -22161,6 +22823,7 @@ pt = Mali ro = Mali es = Malí + et = Mali eu = Mali sv = Mali th = ประเทศมาลี @@ -22196,6 +22859,7 @@ pt = Malta ro = Malta es = Malta + et = Malta eu = Malta sv = Malta th = ประเทศมอลตา @@ -22231,6 +22895,7 @@ pt = Ilhas Marshall ro = Insulele Marshall es = Islas Marshall + et = Marshalli saared eu = Marshall Uharteak sv = Marshallöarna th = สาธารณรัฐหมู่เกาะมาร์แชลล์ @@ -22265,6 +22930,7 @@ pt = Martinica ro = Martinica es = Martinica + et = Martinique eu = Martinika sv = Martinique th = มาร์ตีนิก @@ -22299,6 +22965,7 @@ pt = Maryland ro = Maryland es = Maryland + et = Maryland eu = Maryland sv = Maryland th = รัฐแมริแลนด์ @@ -22333,6 +23000,7 @@ pt = Massachusetts ro = Massachusetts es = Massachusetts + et = Massachusetts eu = Massachusetts sv = Massachusetts th = รัฐแมสซาชูเซตส์ @@ -22367,6 +23035,7 @@ pt = Mauritânia ro = Mauritania es = Mauritania + et = Mauritaania eu = Mauritania sv = Mauretanien th = ประเทศมอริเตเนีย @@ -22401,6 +23070,7 @@ pt = Maurícia ro = Mauritius es = Mauricio + et = Mauritius eu = Mauricio sv = Mauritius th = ประเทศมอริเชียส @@ -22436,6 +23106,7 @@ pt = México ro = Mexic es = México + et = Mehhiko eu = Mexiko sv = Mexiko th = ประเทศเม็กซิโก @@ -22471,6 +23142,7 @@ pt = Baja California ro = Baja California es = Baja California + et = Baja California sv = Baja California th = รัฐบาฮากาลิฟอร์เนีย tr = Aşağı Kaliforniya @@ -22504,6 +23176,7 @@ pt = Nuevo León ro = Nuevo León es = Nuevo León + et = Nuevo León sv = Nuevo León th = รัฐนวยโวเลออง tr = Nuevo León @@ -22537,6 +23210,7 @@ pt = Nayarit ro = Nayarit es = Nayarit + et = Nayarit sv = Nayarit th = รัฐนายาริต tr = Nayarit @@ -22570,6 +23244,7 @@ pt = México — Leste ro = Mexic — Est es = México — Este + et = Mehhiko - Ida sv = Mexiko — Öst th = ประเทศเม็กซิโก — ตะวันออก tr = Meksika — Doğu @@ -22603,6 +23278,7 @@ pt = Cidade do México ro = Ciudad de México es = Ciudad de México + et = Mexico City sv = Mexico City th = เม็กซิโกซิตี tr = Meksika @@ -22636,6 +23312,7 @@ pt = México — Norte ro = Mexic — Nord es = México — Norte + et = Mehhiko - Põhi sv = Mexiko — Nord th = ประเทศเม็กซิโก — เหนือ tr = Meksika — Kuzey @@ -22669,6 +23346,7 @@ pt = México — Sul ro = Mexic — Sud es = México — Sur + et = Mehhiko - Lõuna sv = Mexiko — Syd th = ประเทศเม็กซิโก — ใต้ tr = Meksika — Güney @@ -22702,6 +23380,7 @@ pt = Michigan ro = Michigan es = Míchigan + et = Michigan eu = Michigan sv = Michigan th = รัฐมิชิแกน @@ -22736,6 +23415,7 @@ pt = Minnesota ro = Minnesota es = Minnesota + et = Minnesota eu = Minnesota sv = Minnesota th = รัฐมินนิโซตา @@ -22770,6 +23450,7 @@ pt = Missouri ro = Missouri es = Misuri + et = Missouri eu = Missouri sv = Missouri th = รัฐมิสซูรี @@ -22804,6 +23485,7 @@ pt = Moldávia ro = Republica Moldova es = Moldavia + et = Moldova eu = Moldova sv = Moldavien th = ประเทศมอลโดวา @@ -22839,6 +23521,7 @@ pt = Mónaco ro = Monaco es = Mónaco + et = Monaco eu = Monako sv = Monaco th = ประเทศโมนาโก @@ -22874,6 +23557,7 @@ pt = Mongólia ro = Mongolia es = Mongolia + et = Mongoolia eu = Mongolia sv = Mongoliet th = ประเทศมองโกเลีย @@ -22909,6 +23593,7 @@ pt = Montenegro ro = Muntenegru es = Montenegro + et = Montenegro eu = Montenegro sv = Montenegro th = ประเทศมอนเตเนโกร @@ -22943,6 +23628,7 @@ pt = Montserrat ro = Montserrat es = Montserrat + et = Montserrat eu = Montserrat sv = Montserrat th = มอนต์เซอร์รัต @@ -22977,6 +23663,7 @@ pt = Marrocos ro = Maroc es = Marruecos + et = Maroko eu = Maroko sv = Marocko th = ประเทศโมร็อกโก @@ -23012,6 +23699,7 @@ pt = Doukkala-Abda ro = Regiunea Doukkala-Abda es = Dukala-Abda + et = Doukkala-Abda sv = Doukala-Abda th = ดูกกาลา-แอบดา tr = Doukkala-Abda @@ -23045,6 +23733,7 @@ pt = Rabat-Salé-Zemmour-Zaer ro = Regiunea Rabat-Salé-Zemmour-Zaer es = Rabat-Salé-Zemur-Zaer + et = Rabat-Salé-Zemmour-Zaer sv = Rabat-Salé-Zemmour-Zaēr th = ราบัด-เซล-เซมมัวร์-แซร์ tr = Rabat-Salé-Zemmour-Zaer @@ -23078,6 +23767,7 @@ pt = Marrocos — Sul ro = Maroc — Sud es = Marruecos — Sur + et = Maroko - Lõuna sv = Marocko — Syd th = ประเทศโมร็อกโก — ใต้ tr = Fas — Güney @@ -23111,6 +23801,7 @@ pt = Saara Ocidental ro = Sahara Occidentală es = Sahara Occidental + et = Lääne-Sahara sv = Västsahara th = เวสเทิร์นสะฮารา tr = Batı Sahra @@ -23144,6 +23835,7 @@ pt = Moçambique ro = Mozambic es = Mozambique + et = Mosambiik eu = Mozambike sv = Moçambique th = ประเทศโมซัมบิก @@ -23178,6 +23870,7 @@ pt = Myanmar ro = Birmania es = Birmania + et = Myanmar eu = Birmania sv = Burma th = ประเทศพม่า @@ -23213,6 +23906,7 @@ pt = Nagorno-Karabakh ro = Nagorno-Karabah es = Nagorno Karabaj + et = Nagorno-Karabakh eu = Nagorno-Karabakh sv = Nagorno-Karabach th = นากอร์โน-คาราบัค @@ -23247,6 +23941,7 @@ pt = Namíbia ro = Namibia es = Namibia + et = Namiibia eu = Namibia sv = Namibia th = ประเทศนามิเบีย @@ -23282,6 +23977,7 @@ pt = Nauru ro = Nauru es = Nauru + et = Nauru eu = Nauru sv = Nauru th = ประเทศนาอูรู @@ -23316,6 +24012,7 @@ pt = Nepal ro = Nepal es = Nepal + et = Nepal eu = Nepal sv = Nepal th = ประเทศเนปาล @@ -23351,6 +24048,7 @@ pt = Nepal — Leste ro = Nepal — Est es = Nepal — Este + et = Nepal - Ida sv = Nepal — Öst th = ประเทศเนปาล — ตะวันออก tr = Nepal — Doğu @@ -23384,6 +24082,7 @@ pt = Nepal — Oeste ro = Nepal — Vest es = Nepal — Oeste + et = Nepal - Lääs sv = Nepal — Väst th = ประเทศเนปาล — ตะวันตก tr = Nepal — Batı @@ -23417,6 +24116,7 @@ pt = Países Baixos ro = Olanda es = Países Bajos + et = Holland eu = Herbehereak sv = Nederländerna th = ประเทศเนเธอร์แลนด์ @@ -23451,6 +24151,7 @@ pt = Drente ro = Drenthe es = Drente + et = Drenthe sv = Drenthe th = จังหวัดเดรนเทอ tr = Drenthe @@ -23484,6 +24185,7 @@ pt = Flevolândia ro = Flevoland es = Flevolanda + et = Flevoland sv = Flevoland th = จังหวัดเฟลโฟลันด์ tr = Flevoland @@ -23517,6 +24219,7 @@ pt = Frísia ro = Provincia Frizia es = Frisia + et = Friisimaa sv = Friesland th = จังหวัดฟรีสลันด์ tr = Frizya @@ -23550,6 +24253,7 @@ pt = Guéldria — Nimegue ro = Gelderland — Nijmegen es = Güeldres — Nimega + et = Gelderland — Nijmegen sv = Gelderland — Nijmegen th = จังหวัดเกลเดอร์ลันด์ — ไนเมเคิน tr = Gelderland — Nijmegen @@ -23583,6 +24287,7 @@ pt = Guéldria — Apeldoorn ro = Gelderland — Apeldoorn es = Güeldres — Apeldoorn + et = Gelderland — Apeldoorn sv = Gelderland — Apeldoorn th = จังหวัดเกลเดอร์ลันด์ — อาเพลโดร์น tr = Gelderland — Apeldoorn @@ -23616,6 +24321,7 @@ pt = Guéldria — Zutphen ro = Gelderland — Zutphen es = Güeldres — Zutphen + et = Gelderland — Zutphen sv = Gelderland — Zutphen th = เกลเดอร์แลนด์ — ซิตเฟน tr = Gelderland — Zutphen @@ -23649,6 +24355,7 @@ pt = Groninga ro = Groningen es = Provincia de Groninga + et = Groningen sv = Groningen th = จังหวัดโกรนิงเงิน tr = Groningen @@ -23682,6 +24389,7 @@ pt = Limburgo ro = Limburg es = Limburgo + et = Limburg sv = Limburg th = จังหวัดลิมบูร์ก tr = Limburg, Hollanda @@ -23715,6 +24423,7 @@ pt = Brabante do Norte — Eindhoven ro = Brabantul de Nord — Eindhoven es = Brabante Septentrional — Eindhoven + et = Põhja-Brabant - Eindhoven sv = Noord-Brabant — Eindhoven th = จังหวัดนอร์ทบราแบนต์ — ไอนด์โฮเวน tr = Kuzey Brabant — Eindhoven @@ -23748,6 +24457,7 @@ pt = Brabante do Norte — Roosendaal ro = Brabantul de Nord — Roosendaal es = Brabante Septentrional — Roosendaal + et = Põhja-Brabant — Roosendaal sv = Noord-Brabant — Roosendaal th = จังหวัดนอร์ทบราแบนต์ — โรเซนดาล tr = Kuzey Brabant — Roosendaal @@ -23781,6 +24491,7 @@ pt = Brabante do Norte — Tilburgo ro = Brabantul de Nord — Tilburg es = Brabante Septentrional — Tilburgo + et = Põhja-Brabant — Tilburg sv = Noord-Brabant — Tilburg th = จังหวัดนอร์ทบราแบนต์ — ติลบืร์ค tr = Kuzey Brabant — Tilburg @@ -23814,6 +24525,7 @@ pt = Norte de Brabant — Uden ro = Brabantul de Nord — Uden es = Brabante Septentrional — Uden + et = Põhja-Brabant — Uden sv = Noord-Brabant — Uden th = บราบันต์เหนือ — อูเดน tr = Kuzey Brabant — Uden @@ -23847,6 +24559,7 @@ pt = Holanda do Norte — Alkmaar ro = Olanda de Nord — Alkmaar es = Holanda Septentrional — Alkmaar + et = Põhja-Holland - Alkmaar sv = Noord-Holland — Alkmaar th = ฮอลแลนด์เหนือ — อัลค์มาร์ tr = Kuzey Hollanda — Alkmaar @@ -23880,6 +24593,7 @@ pt = Holanda do Norte — Amesterdão ro = Olanda de Nord — Amsterdam es = Holanda Septentrional — Ámsterdam + et = Põhja-Holland - Amsterdam sv = Noord-Holland — Amsterdam th = จังหวัดนอร์ทฮอลแลนด์ — อัมสเตอร์ดัม tr = Kuzey Hollanda — Amsterdam @@ -23913,6 +24627,7 @@ pt = Norte da Holanda — Zaanstad ro = Olanda de Nord — Zaanstad es = Holanda Septentrional — Zaanstad + et = Põhja-Holland - Zaanstad sv = Noord-Holland — Zaanstad th = จังหวัดนอร์ทฮอลแลนด์ — ซานสตัด tr = Kuzey Hollanda — Zaanstad @@ -23946,6 +24661,7 @@ pt = Overissel — Enschede ro = Overijssel — Enschede es = Overijssel — Enschede + et = Overijssel — Enschede sv = Overijssel — Enschede th = จังหวัดโอเฟอไรส์เซิล — แอ็นสเคอเด tr = Overijssel — Enschede @@ -23979,6 +24695,7 @@ pt = Overissel — Zwolle ro = Overijssel — Zwolle es = Overijssel — Zwolle + et = Overijssel — Zwolle sv = Overijssel — Zwolle th = จังหวัดโอเฟอไรส์เซิล — ซโวลเลอ tr = Overijssel — Zwolle @@ -24012,6 +24729,7 @@ pt = Sul da Holanda — Brielle ro = Olanda de Sud — Brielle es = Holanda Meridional — Brielle + et = Lõuna-Holland - Brielle sv = Zuid-Holland — Brielle th = ฮอลแลนด์ใต้ — บริเอล tr = Güney Hollanda — Brielle @@ -24045,6 +24763,7 @@ pt = Holanda do Sul — Haia ro = Olanda de Sud — Haga es = Holanda Meridional — La Haya + et = Lõuna-Holland - Haag sv = Zuid-Holland — Haag th = จังหวัดเซาท์ฮอลแลนด์ — เดอะเฮก tr = Güney Hollanda — Lahey @@ -24078,6 +24797,7 @@ pt = Holanda do Sul — Leida ro = Olanda de Sud — Leiden es = Holanda Meridional — Leiden + et = Lõuna-Holland - Leiden sv = Zuid-Holland — Leiden th = จังหวัดเซาท์ฮอลแลนด์ — ไลเดิน tr = Güney Hollanda — Leiden @@ -24111,6 +24831,7 @@ pt = Holanda do Sul — Roterdão ro = Olanda de Sud — Rotterdam es = Holanda Meridional — Róterdam + et = Lõuna-Holland - Rotterdam sv = Zuid-Holland — Rotterdam th = จังหวัดเซาท์ฮอลแลนด์ — รอตเทอร์ดาม tr = Güney Hollanda — Rotterdam @@ -24144,6 +24865,7 @@ pt = Utrecht — Amersfoort ro = Utrecht — Amersfoort es = Provincia de Utrecht — Amersfoort + et = Utrecht — Amersfoort sv = Utrecht — Amersfoort th = จังหวัดยูเทรกต์ — อาเมอร์สโฟร์ต tr = Utrecht — Amersfoort @@ -24177,6 +24899,7 @@ pt = Utrecht — Utrecht ro = Utrecht — Utrecht es = Provincia de Utrecht — Utrecht + et = Utrecht — Utrecht sv = Utrecht — Utrecht th = จังหวัดยูเทรกต์ — ยูเทรกต์ tr = Utrecht — Utrecht @@ -24210,6 +24933,7 @@ pt = Zelândia ro = Zeelanda es = Zelanda + et = Zeeland sv = Zeeland th = จังหวัดเซลันด์ tr = Zelanda @@ -24243,6 +24967,7 @@ pt = Nova Jérsei ro = New Jersey es = Nueva Jersey + et = New Jersey eu = New Jersey sv = New Jersey th = รัฐนิวเจอร์ซีย์ @@ -24277,6 +25002,7 @@ pt = Nova Iorque ro = New York es = Nueva York + et = New York eu = New York sv = New York th = รัฐนิวยอร์ก @@ -24311,6 +25037,7 @@ pt = Nova Zelândia ro = Noua Zeelandă es = Nueva Zelanda + et = Uus-Meremaa eu = Zelanda Berria sv = Nya Zeeland th = ประเทศนิวซีแลนด์ @@ -24346,6 +25073,7 @@ pt = Norte — Auckland ro = Nord — Auckland es = Norte — Auckland + et = Põhi - Auckland sv = Nord — Auckland th = เหนือ — ออกแลนด์ tr = Kuzey — Auckland @@ -24379,6 +25107,7 @@ pt = Norte — Wellington ro = Nord — Wellington es = Norte — Wellington + et = Põhi - Wellington sv = Nord — Wellington th = เหนือ — เวลลิงตัน tr = Kuzey — Wellington @@ -24412,6 +25141,7 @@ pt = Sul — Canterbury ro = Regiunea Canterbury - Sud es = Sur — Canterbury + et = Lõuna - Canterbury piirkond sv = Syd — Canterbury, Nya Zeeland th = ใต้ — ภูมิภาคแคนเทอร์เบอรรี tr = Güney — Canterbury Bölgesi @@ -24445,6 +25175,7 @@ pt = Sul — Região Sul ro = Regiunea Southland - Sud es = Sur — Southland + et = Lõuna - Southland sv = Syd — Southland th = ใต้ — ภูมิภาคเซาต์แลนด์ tr = Güney — Southland Bölgesi @@ -24478,6 +25209,7 @@ pt = Nicarágua ro = Nicaragua es = Nicaragua + et = Nicaragua eu = Nikaragua sv = Nicaragua th = ประเทศนิการากัว @@ -24512,6 +25244,7 @@ pt = Níger ro = Niger es = Níger + et = Niger eu = Niger sv = Niger th = ประเทศไนเจอร์ @@ -24546,6 +25279,7 @@ pt = Nigéria ro = Nigeria es = Nigeria + et = Nigeeria eu = Nigeria sv = Nigeria th = ประเทศไนจีเรีย @@ -24581,6 +25315,7 @@ pt = Niue ro = Niue es = Niue + et = Niue eu = Niue sv = Niue th = นีอูเอ @@ -24615,6 +25350,7 @@ pt = Carolina do Norte ro = Carolina de Nord es = Carolina del Norte + et = Põhja-Carolina eu = Ipar Carolina sv = North Carolina th = รัฐนอร์ทแคโรไลนา @@ -24649,6 +25385,7 @@ pt = Dakota do Norte ro = Dakota de Nord es = Dakota del Norte + et = Põhja-Dakota eu = Ipar Dakota sv = North Dakota th = รัฐนอร์ทดาโคตา @@ -24683,6 +25420,7 @@ pt = Coreia do Norte ro = Coreea de Nord es = Corea del Norte + et = Põhja-Korea eu = Iparraldeko Korea sv = Nordkorea th = ประเทศเกาหลีเหนือ @@ -24718,6 +25456,7 @@ pt = Noruega ro = Norvegia es = Noruega + et = Norra eu = Norvegia sv = Norge th = ประเทศนอร์เวย์ @@ -24753,6 +25492,7 @@ pt = Ilha Bouvet ro = Insula Bouvet es = Isla Bouvet + et = Bouvet' saar sv = Bouvetön th = เกาะบูเว tr = Bouvet Adası @@ -24786,6 +25526,7 @@ pt = Oslo ro = Oslo es = Oslo + et = Oslo sv = Oslo th = ออสโล tr = Oslo @@ -24819,6 +25560,7 @@ pt = Hedmark ro = Hedmark es = Hedmark + et = Hedmark sv = Hedmark fylke th = เฮดมาร์ก tr = Hedmark @@ -24852,6 +25594,7 @@ pt = Jan Mayen ro = Insula Jan Mayen es = Jan Mayen + et = Jan Mayen sv = Jan Mayen th = ยานไมเอน tr = Jan Mayen @@ -24885,6 +25628,7 @@ pt = Nord-Norge ro = Nord-Norge es = Nord-Norge + et = Põhja-Norra sv = Nordnorge th = นอร์เวย์เหนือ tr = Kuzey Norveç @@ -24918,6 +25662,7 @@ pt = Oppland ro = Oppland es = Oppland + et = Oppland sv = Oppland fylke th = ออปแลนด์ tr = Oppland @@ -24951,6 +25696,7 @@ pt = Sørlandet ro = Sørlandet es = Sørlandet + et = Lõuna-Norra sv = Sørlandet th = นอร์เวย์ใต้ tr = Güney Norveç @@ -24984,6 +25730,7 @@ pt = Svalbard ro = Svalbard es = Svalbard + et = Svalbard sv = Svalbard th = สฟาลบาร์ tr = Svalbard @@ -25017,6 +25764,7 @@ pt = Trøndelag ro = Trøndelag es = Trøndelag + et = Trøndelag sv = Trøndelag th = ทรอนเดอลาก tr = Trøndelag @@ -25050,6 +25798,7 @@ pt = Vestlandet ro = Vestlandet es = Vestlandet + et = Lääne-Norra sv = Vestlandet th = นอร์เวย์ตะวันตก tr = Batı Norveç @@ -25083,6 +25832,7 @@ pt = Ohio ro = Ohio es = Ohio + et = Ohio eu = Ohio sv = Ohio th = รัฐโอไฮโอ @@ -25117,6 +25867,7 @@ pt = Oklahoma ro = Oklahoma es = Oklahoma + et = Oklahoma eu = Oklahoma sv = Oklahoma th = รัฐโอคลาโฮมา @@ -25151,6 +25902,7 @@ pt = Omã ro = Oman es = Omán + et = Omaan eu = Oman sv = Oman th = ประเทศโอมาน @@ -25186,6 +25938,7 @@ pt = Oregon ro = Oregon es = Oregón + et = Oregon eu = Oregon sv = Oregon th = รัฐออริกอน @@ -25220,6 +25973,7 @@ pt = Paquistão ro = Pakistan es = Pakistán + et = Pakistan eu = Pakistan sv = Pakistan th = ประเทศปากีสถาน @@ -25255,6 +26009,7 @@ pt = Palau ro = Palau es = Palaos + et = Palau eu = Palau sv = Palau th = ประเทศปาเลา @@ -25289,6 +26044,7 @@ pt = Territórios Palestinianos ro = Teritoriile Palestiniene es = Territorios Palestinos + et = Palestiina alad eu = Palestinako lurraldeak sv = Palestinska territorier th = รัฐปาเลสไตน์ @@ -25323,6 +26079,7 @@ pt = Territórios Palestinianos ro = Teritoriile Palestiniene es = Territorios Palestinos + et = Palestiina alad eu = Palestinako lurraldeak sv = Palestinska territorier th = รัฐปาเลสไตน์ @@ -25357,6 +26114,7 @@ pt = Panamá ro = Panama es = Panamá + et = Panama eu = Panama sv = Panama th = ประเทศปานามา @@ -25391,6 +26149,7 @@ pt = Papua-Nova Guiné ro = Papua Noua Guinee es = Papúa Nueva Guinea + et = Paapua Uus-Guinea eu = Papua Ginea Berria sv = Papua Nya Guinea th = ประเทศปาปัวนิวกินี @@ -25426,6 +26185,7 @@ pt = Paraguai ro = Paraguay es = Paraguay + et = Paraguay eu = Paraguai sv = Paraguay th = ประเทศปารากวัย @@ -25461,6 +26221,7 @@ pt = Pensilvânia ro = Pennsylvania es = Pensilvania + et = Pennsylvania eu = Pennsylvania sv = Pennsylvania th = รัฐเพนซิลเวเนีย @@ -25495,6 +26256,7 @@ pt = China ro = China es = China + et = Hiina eu = Txina sv = Kina th = ประเทศจีน @@ -25530,6 +26292,7 @@ pt = Peru ro = Peru es = Perú + et = Peruu eu = Peru sv = Peru th = ประเทศเปรู @@ -25565,6 +26328,7 @@ pt = Peru — Norte ro = Peru — Nord es = Perú — Norte + et = Peruu - Põhi sv = Peru — Nord th = ประเทศเปรู — เหนือ tr = Peru — Kuzey @@ -25598,6 +26362,7 @@ pt = Peru — Sul ro = Peru — Sud es = Perú — Sur + et = Peruu - Lõuna sv = Peru — Syd th = ประเทศเปรู — ใต้ tr = Peru — Güney @@ -25631,6 +26396,7 @@ pt = Filipinas ro = Filipine es = Filipinas + et = Filipiinid eu = Filipinak sv = Filippinerna th = ประเทศฟิลิปปินส์ @@ -25666,6 +26432,7 @@ pt = Grande Manila ro = Metro Manila es = Gran Manila + et = Metro Manila sv = Metro Manila th = เมโทรมะนิลา tr = Metro Manila @@ -25699,6 +26466,7 @@ pt = Luzon — Norte ro = Luzon — Nord es = Luzón — Norte + et = Luzon - Põhi sv = Luzon — Nord th = เกาะลูซอน — เหนือ tr = Luzon — Kuzey @@ -25732,6 +26500,7 @@ pt = Luzon — Sul ro = Luzon — Sud es = Luzón — Sur + et = Luzon - Lõuna sv = Luzon — Syd th = เกาะลูซอน — ใต้ tr = Luzon — Güney @@ -25765,6 +26534,7 @@ pt = Mindanau ro = Mindanao es = Mindanao + et = Mindanao sv = Mindanao th = มินดาเนา tr = Mindanao @@ -25798,6 +26568,7 @@ pt = Visayas ro = Visayas es = Bisayas + et = Visayas sv = Visayaöarna th = วิซายาส tr = Visayas @@ -25831,6 +26602,7 @@ pt = Ilhas Pitcairn ro = Insulele Pitcairn es = Islas Pitcairn + et = Pitcairn eu = Pitcairn uharteak sv = Pitcairnöarna th = หมู่เกาะพิตแคร์น @@ -25865,6 +26637,7 @@ pt = Polónia ro = Polonia es = Polonia + et = Poola eu = Polonia sv = Polen th = ประเทศโปแลนด์ @@ -25900,6 +26673,7 @@ pt = Voivodia da Grande Polônia ro = Voievodatul Polonia Mare es = Voivodato de Gran Polonia + et = Suur-Poola vojevoodkond sv = Storpolens vojvodskap th = เขตการปกครองพิเศษเกรตเตอร์โปแลนด์ tr = Büyük Polonya Voyvodalığı @@ -25933,6 +26707,7 @@ pt = Voivodia da Cujávia-Pomerânia ro = Voievodatul Cuiavia și Pomerania es = Cuyavia y Pomerania + et = Kuyavia-Pommeri vojevoodkond sv = Kujavien-Pommerns vojvodskap th = เขตการปกครองพิเศษคูยาเวียน-โพเมราเนียน tr = Kuyavian-Pomeranian Voyvodalığı @@ -25966,6 +26741,7 @@ pt = Voivodia da Pequena Polónia ro = Voievodatul Polonia Mică es = Voivodato de Pequeña Polonia + et = Väike-Poola vojevoodkond sv = Lillpolens vojvodskap th = เขตการปกครองพิเศษเลสเซอร์โปแลนด์ tr = Küçük Polonya Voyvodalığı @@ -25999,6 +26775,7 @@ pt = Voivodia de Łódź ro = Voievodatul Łódź es = Voivodato de Łódź + et = Łódźi vojevoodkond sv = Łódź vojvodskap th = เขตการปกครองพิเศษวูช tr = Łódź Voyvodalığı @@ -26032,6 +26809,7 @@ pt = Voivodia da Baixa Silésia ro = Voievodatul Silezia Inferioară es = Baja Silesia + et = Alam-Sileesia vojevoodkond sv = Nedre Schlesiens vojvodskap th = จังหวัดดอลนือชล็องสก์ tr = Aşağı Silezya Voyvodalığı @@ -26065,6 +26843,7 @@ pt = Voivodia de Lublin ro = Voievodatul Lublin es = Lublin + et = Lublini vojevoodkond sv = Lublins vojvodskap th = เขตการปกครองพิเศษลูบลิน tr = Lublin Voyvodalığı @@ -26098,6 +26877,7 @@ pt = Voivodia da Lubúsquia ro = Voievodatul Lubusz es = Voivodato de Lubusz + et = Lubuszi vojevoodkond sv = Lubusz vojvodskap th = เขตการปกครองพิเศษลูบัส tr = Lubusz Voyvodalığı @@ -26131,6 +26911,7 @@ pt = Voivodia da Mazóvia ro = Voievodatul Mazovia es = Voivodato de Mazovia + et = Masoovia vojevoodkond sv = Masoviens vojvodskap th = เขตการปกครองพิเศษมาโซเวียน tr = Mazovya Voyvodalığı @@ -26164,6 +26945,7 @@ pt = Voivodia de Opole ro = Voievodatul Opole es = Opole + et = Opole vojevoodkond sv = Opole vojvodskap th = เขตการปกครองพิเศษโอโปเล tr = Opole Voyvodalığı @@ -26197,6 +26979,7 @@ pt = Voivodia da Podláquia ro = Voievodatul Podlasia es = Voivodato de Podlaquia + et = Podlaskie vojevoodkond sv = Podlasiens vojvodskap th = เขตการปกครองพิเศษพอดลาสกี tr = Podlaskie Voyvodalığı @@ -26230,6 +27013,7 @@ pt = Voivodia da Pomerânia ro = Voievodatul Pomerania es = Voivodato de Pomerania + et = Pommeri vojevoodkond sv = Pommerns vojvodskap th = จังหวัดปอมอแช tr = Pomeranya Voyvodalığı @@ -26263,6 +27047,7 @@ pt = Voivodia da Silésia ro = Voievodatul Silezia es = Voivodato de Silesia + et = Sileesia vojevoodkond sv = Schlesiens vojvodskap th = เขตการปกครองพิเศษซิเลเซียน tr = Silezya Voyvodalığı @@ -26296,6 +27081,7 @@ pt = Voivodia da Subcarpácia ro = Voievodatul Subcarpatia es = Voivodato de Subcarpacia + et = Podkarpackie vojevoodkond sv = Nedre Karpaternas vojvodskap th = เขตการปกครองพิเศษพอดคาพาคี tr = Alt Karpatya Voyvodalığı @@ -26329,6 +27115,7 @@ pt = Voivodia de Santa Cruz ro = Voievodatul Sfintei Cruci es = Voivodato de Santa Cruz + et = Świętokrzyskie vojevoodkond sv = Święty Krzyż vojvodskap th = เขตการปกครองพิเศษชวินโตคริสกี tr = Świętokrzyskie Voyvodalığı @@ -26362,6 +27149,7 @@ pt = Voivodia da Vármia-Masúria ro = Voievodatul Varmia și Mazuria es = Voivodato de Varmia y Masuria + et = Warmia-Masuuria vojevoodkond sv = Ermland-Masuriens vojvodskap th = เขตการปกครองพิเศษวอร์เมียน-มาซูเรียน tr = Warmian-Masurian VoivoVoyvodalığıeship @@ -26395,6 +27183,7 @@ pt = Voivodia da Pomerânia Ocidental ro = Voievodatul Pomerania Occidentală es = Voivodato de Pomerania Occidental + et = Lääne-Pommeri vojevoodkond sv = Västpommerns vojvodskap th = เขตการปกครองพิเศษโพเมราเนียนตะวันตก tr = Batı Pomeranya Voyvodalığı @@ -26428,6 +27217,7 @@ pt = Portugal ro = Portugalia es = Portugal + et = Portugal eu = Portugal sv = Portugal th = ประเทศโปรตุเกส @@ -26463,6 +27253,7 @@ pt = Portugal — Norte ro = Portugalia — Nord es = Portugal — Norte + et = Portugal - Põhi sv = Portugal — Nord th = ประเทศโปรตุเกส — เหนือ tr = Portekiz — Kuzey @@ -26496,6 +27287,7 @@ pt = Portugal — Sul ro = Portugalia — Sud es = Portugal — Sur + et = Portugal - Põhi sv = Portugal — Syd th = ประเทศโปรตุเกส — ใต้ tr = Portekiz — Güney @@ -26529,6 +27321,7 @@ pt = Catar ro = Qatar es = Catar + et = Katar eu = Dastamena sv = Qatar th = ประเทศกาตาร์ @@ -26564,6 +27357,7 @@ pt = Kosovo ro = Kosovo es = Kosovo + et = Kosovo eu = Kosovo sv = Kosovo th = ประเทศคอซอวอ @@ -26598,6 +27392,7 @@ pt = Roménia ro = România es = Rumania + et = Rumeenia eu = Errumania sv = Rumänien th = ประเทศโรมาเนีย @@ -26632,6 +27427,7 @@ pt = Centro ro = Regiunea de dezvoltare Centru es = Centro + et = Kesk-Rumeenia sv = Central th = เซนทรู tr = Centru @@ -26665,6 +27461,7 @@ pt = Nordeste ro = Regiunea de dezvoltare Nord-Est es = Nordeste + et = Kirde-Rumeenia sv = Nordost th = นอร์ดอีสต์ tr = Nord-Est @@ -26698,6 +27495,7 @@ pt = Noroeste ro = Regiunea de dezvoltare Nord-Vest es = Nord-Vest + et = Loode-Rumeenia sv = Nordväst th = นอร์ดเวสต์ tr = Nord-Vest @@ -26731,6 +27529,7 @@ pt = Sul ro = Regiunea de dezvoltare Sud es = Sur + et = Lõuna-Rumeenia sv = Syd th = เซาต์ tr = Sud @@ -26764,6 +27563,7 @@ pt = Sudeste ro = Regiunea de dezvoltare Sud-Est es = Sureste + et = Kagu-Rumeenia sv = Sydost th = เซาต์อีสต์ tr = Sud-Est @@ -26797,6 +27597,7 @@ pt = Sudoeste ro = Regiunea de dezvoltare Sud-Vest es = Sud-Vest + et = Edela-Rumeenia sv = Sydväst th = เซาต์เวสต์ tr = Sud-Vest @@ -26830,6 +27631,7 @@ pt = Oeste ro = Regiunea de dezvoltare Vest es = Vest + et = Lääne-Rumeenia sv = Väst th = เวสต์ tr = Vest @@ -26863,6 +27665,7 @@ pt = Krai de Altai ro = Ținutul Altai es = Krai de Altái + et = Altai krai sv = Altaj kraj th = อัลไต ไคร tr = Altay Krayı @@ -26896,6 +27699,7 @@ pt = Altai (república) ro = Republica Altai es = Altái + et = Altai Vabariik sv = Altajrepubliken th = สาธารณรัฐอัลไต tr = Altay Cumhuriyeti @@ -26929,6 +27733,7 @@ pt = Oblast de Amur ro = Regiunea Amur es = Amur + et = Amuuri oblast sv = Amur oblast th = แคว้นปกครองตนเองอาเมอร์ tr = Amur Oblastı @@ -26962,6 +27767,7 @@ pt = Oblast de Arkhangelsk — Centro ro = Regiunea Arhanghelsk — Centru es = Óblast de Arjánguelsk — Centro + et = Arhangelski oblast - keskosa sv = Archangelsk oblast — Central th = แคว้นปกครองตนเองอาฮันเจล — กลาง tr = Arhangelsk Oblastı — Merkez @@ -26995,6 +27801,7 @@ pt = Oblast de Arkhangelsk — Norte ro = Regiunea Arhanghelsk — Nord es = Óblast de Arjánguelsk — Norte + et = Arhangelski oblast - Põhi sv = Archangelsk oblast — Nord th = แคว้นปกครองตนเองอาฮันเจล— เหนือ tr = Arhangelsk Oblastı — Kuzey @@ -27028,6 +27835,7 @@ pt = Oblast de Astracã ro = Regiunea Astrahan es = Astracán + et = Astrahani oblast sv = Astrachan oblast th = แคว้นปกครองตนเองแอสตราคาน tr = Astrahan Oblastı @@ -27061,6 +27869,7 @@ pt = Bascortostão ro = Bașchiria es = Bashkortostán + et = Baškortostani Vabariik sv = Basjkirien th = สาธารณรัฐบาชคอร์โตสตาน tr = Başkurdistan @@ -27094,6 +27903,7 @@ pt = Oblast de Belgorod ro = Regiunea Belgorod es = Óblast de Bélgorod + et = Belgorodi oblast sv = Belgorod oblast th = เบลโกรอดโอบลาสต์ tr = Belgorod Oblastı @@ -27127,6 +27937,7 @@ pt = Oblast de Briansk ro = Regiunea Briansk es = Óblast de Briansk + et = Brjanski oblast sv = Brjansk oblast th = แคว้นปกครองตนเองบริอันสก์ tr = Bryansk Oblastı @@ -27160,6 +27971,7 @@ pt = Buriácia ro = Buriația es = Buriatia + et = Burjaadi Vabariik sv = Burjatien th = สาธารณรัฐเบอร์ยัต tr = Buryatya @@ -27193,6 +28005,7 @@ pt = Chechênia ro = Cecenia es = Chechenia + et = Tšetšeenia Vabariik sv = Tjetjenien th = สาธารณรัฐเชเชน tr = Çeçenistan @@ -27226,6 +28039,7 @@ pt = Oblast de Cheliabinsk ro = Regiunea Celiabinsk es = Cheliábinsk + et = Tšeljabinski oblast sv = Tjeljabinsk oblast th = แคว้นปกครองตนเองเชลินอาบินสก์ tr = Çelyabinsk Oblastı @@ -27259,6 +28073,7 @@ pt = Chukotka ro = Districtul autonom Ciukotka es = Chukotka + et = Tšukotka autonoomne ringkond sv = Tjuktjien th = เขตปกครองตนเองชูโคตกา tr = Çukotka Özerk Okrugu @@ -27292,6 +28107,7 @@ pt = Chuváchia ro = Ciuvașia es = Chuvasia + et = Tšuvassi Vabariik sv = Tjuvasjien th = สาธารณรัฐชูวาช tr = Çuvaşistan @@ -27325,6 +28141,7 @@ pt = Inguchétia ro = Ingușetia es = Ingusetia + et = Inguššia Vabariik sv = Ingusjien th = สาธารณรัฐอินกูเชเทีย tr = İnguşetya @@ -27358,6 +28175,7 @@ pt = Oblast de Irkutsk ro = Regiunea Irkutsk es = Irkutsk + et = Irkutski oblast sv = Irkutsk oblast th = แคว้นปกครองตนเองเออร์คุตสก์ tr = İrkutsk Oblastı @@ -27391,6 +28209,7 @@ pt = Oblast de Ivanovo ro = Regiunea Ivanovo es = Óblast de Ivánovo + et = Ivanovo oblast sv = Ivanovo oblast th = แคว้นปกครองตนเองอิวาโนโว tr = İvanovo Oblastı @@ -27424,6 +28243,7 @@ pt = Oblast Autônomo Judaico ro = Regiunea Autonomă Evreiască es = Óblast Autónomo Hebreo + et = Juudi autonoomne oblast sv = Judiska autonoma länet th = แคว้นปกครองตนเองชาวยิว tr = Yahudi Özerk Oblastı @@ -27457,6 +28277,7 @@ pt = Cabárdia-Balcária ro = Cabardino-Balcaria es = Kabardia-Balkaria + et = Kabardino-Balkari Vabariik sv = Kabardinien-Balkarien th = สาธารณรัฐคาบาร์ดิโน-บัลการ์ tr = Kabardino-Balkarya @@ -27490,6 +28311,7 @@ pt = Oblast de Kaliningrado ro = Regiunea Kaliningrad es = Óblast de Kaliningrado + et = Kaliningradi oblast sv = Kaliningrad oblast th = คาลินินกราดโอบลาสต์ tr = Kaliningrad Oblastı @@ -27523,6 +28345,7 @@ pt = Oblast de Kaluga ro = Regiunea Kaluga es = Kaluga + et = Kaluga oblast sv = Kaluga oblast th = แคว้นปกครองตนเองคาลูกา tr = Kaluga Oblastı @@ -27556,6 +28379,7 @@ pt = Krai de Kamtchatka ro = Ținutul Kamceatka es = Kamchatka + et = Kamtšatka krai sv = Kamtjatka kraj th = เขตปกครองแคมชัดกา tr = Kamçatka Krayı @@ -27589,6 +28413,7 @@ pt = Carachai-Circássia ro = Karaciai-Cerchezia es = Karacháyevo-Cherkesia + et = Karatšai-Tšerkessi Vabariik sv = Karatjajen-Tjerkessien th = สาธารณรัฐคาราไช-เชอร์เคส tr = Karaçay-Çerkesya @@ -27622,6 +28447,7 @@ pt = Oblast de Kemerovo ro = Regiunea Kemerovo es = Kémerovo + et = Kemerovo oblast sv = Kemerovo oblast th = แคว้นปกครองตนเองเคเมโรโว tr = Kemerovo Oblastı @@ -27655,6 +28481,7 @@ pt = Krai de Khabarovsk ro = Ținutul Habarovsk es = Jabárovsk + et = Habarovski krai sv = Chabarovsk kraj th = เขตปกครองคาบาโรฟสก์ tr = Habarovsk Krayı @@ -27688,6 +28515,7 @@ pt = Cacássia ro = Hacasia es = Jakasia + et = Hakassia Vabariik sv = Chakassien th = สาธารณรัฐคาคาเซีย tr = Hakasya @@ -27721,6 +28549,7 @@ pt = Oblast de Kirov ro = Regiunea Kirov es = Kírov + et = Kirovi oblast sv = Kirov oblast th = แคว้นปกครองตนเองคิรอฟ tr = Kirov Oblastı @@ -27754,6 +28583,7 @@ pt = República de Komi ro = Republica Komi es = Komi + et = Komi Vabariik sv = Komi th = สาธารณรัฐโคมิ tr = Komi Cumhuriyeti @@ -27787,6 +28617,7 @@ pt = Oblast de Kostroma ro = Regiunea Kostroma es = Óblast de Kostromá + et = Kostroma oblast sv = Kostroma oblast th = แคว้นปกครองตนเองคอสโตรมา tr = Kostroma Oblastı @@ -27820,6 +28651,7 @@ pt = Krai de Krasnodar — Norte ro = Ținutul Krasnodar — Nord es = Krai de Krasnodar — Norte + et = Krasnodari krai - Põhi sv = Krasnodar kraj — Nord th = เขตปกครองคราสโนดาร์ — เหนือ tr = Krasnodar Krayı — Kuzey @@ -27853,6 +28685,7 @@ pt = Krai de Krasnodar, Adiguésia ro = Ținutul Krasnodar, Adîgheia es = Krai de Krasnodar, Adigueya + et = Krasnodari krai, Adygea Vabariik sv = Krasnodar kraj, Adygeiska republiken th = เขตปกครองคราสโนดาร์ สาธารณรัฐอดีเกีย tr = Krasnodar Krayı, Adıge Cumhuriyeti @@ -27886,6 +28719,7 @@ pt = Krai de Krasnoiarsk ro = Ținutul Krasnoiarsk es = Krasnoyarsk + et = Krasnojarsk krai sv = Krasnojarsk kraj th = สาธารณรัฐคราสโนยาสก์ tr = Krasnoyarsk Krayı @@ -27919,6 +28753,7 @@ pt = Oblast de Kurgan ro = Regiunea Kurgan es = Kurgán + et = Kurgani oblast sv = Kurgan oblast th = แคว้นปกครองตนเองเคอร์กัน tr = Kurgan Oblastı @@ -27952,6 +28787,7 @@ pt = Oblast de Kursk ro = Regiunea Kursk es = óblast de Kursk + et = Kurski oblast sv = Kursk oblast th = แคว้นปกครองตนเองเคิรสก์ tr = Kursk Oblastı @@ -27985,6 +28821,7 @@ pt = Oblast de Leningrado — Norte ro = Regiunea Leningrad — Nord es = Óblast de Leningrado — Norte + et = Leningradi oblast - Põhi sv = Leningrad oblast — Nord th = แคว้นปกครองตนเองเลนินแกรด — เหนือ tr = Leningrad eyaleti — Kuzey @@ -28018,6 +28855,7 @@ pt = Oblast de Leningrado — Sul ro = Regiunea Leningrad — Sud es = Óblast de Leningrado — Sur + et = Leningradi oblast - Lõuna sv = Leningrad oblast — Syd th = แคว้นปกครองตนเองเลนินแกรด — ใต้ tr = Leningrad eyaleti — Güney @@ -28051,6 +28889,7 @@ pt = Oblast de Lipetsk ro = Regiunea Lipețk es = Óblast de Lípetsk + et = Libetski oblast sv = Lipetsk oblast th = แคว้นปกครองตนเองลิเปตสก์ tr = Lipetsk Oblastı @@ -28084,6 +28923,7 @@ pt = Oblast de Magadan ro = Regiunea Magadan es = Magadán + et = Magadani oblast sv = Magadan oblast th = แคว้นปกครองตนเองมาดาดาน tr = Magadan Oblastı @@ -28117,6 +28957,7 @@ pt = Mari El ro = Mari El es = Mari-El + et = Mari El Vabariik sv = Marij El th = สาธารณรัฐมาริ เอล tr = Mari El @@ -28150,6 +28991,7 @@ pt = Moscovo ro = Moscova es = Moscú + et = Moskva sv = Moskva th = มอสโก tr = Moskova @@ -28183,6 +29025,7 @@ pt = Oblast de Moscou ro = Regiunea Moscova es = Óblast de Moscú + et = Moskva oblast sv = Moskva oblast th = แคว้นปกครองตนเองมอสโกว tr = Moskova Oblastı @@ -28216,6 +29059,7 @@ pt = Oblast de Murmansk ro = Regiunea Murmansk es = Óblast de Múrmansk + et = Murmanski oblast sv = Murmansk oblast th = แคว้นปกครองตนเองเมอร์มันสก์ tr = Murmansk Oblastı @@ -28249,6 +29093,7 @@ pt = Nenetsia ro = Districtul autonom Neneția es = Nenetsia + et = Neenetsi autonoomne ringkond sv = Nentsien th = เขตปกครองตนเองเนเนต tr = Nenets Özerk Okrugu @@ -28282,6 +29127,7 @@ pt = Oblast de Níjni Novgorod ro = Regiunea Nijni Novgorod es = Óblast de Nizhni Nóvgorod + et = Nižni Novgorodi oblast sv = Nizjnij Novgorod oblast th = แคว้นปกครองตนเองนิสนีย์ นอฟโกรอด tr = Nijniy Novgorod Oblastı @@ -28315,6 +29161,7 @@ pt = Ossétia do Norte-Alânia ro = Osetia de Nord es = Osetia del Norte - Alania + et = Põhja-Osseetia-Alania Vabariik sv = Nordossetien th = สาธารณรัฐออสเซเทีย-อะลาเนียเหนือ tr = Kuzey Osetya-Alanya @@ -28348,6 +29195,7 @@ pt = Oblast de Novgorod ro = Regiunea Novgorod es = Óblast de Nóvgorod + et = Novgorodi oblast sv = Novgorod oblast th = แคว้นปกครองตนเองนอฟโกรอด tr = Novgorod Oblastı @@ -28381,6 +29229,7 @@ pt = Oblast de Novosibirsk ro = Regiunea Novosibirsk es = Novosibirsk + et = Novosibirski oblast sv = Novosibirsk oblast th = โนโวซีบีสค์โอบลาสต์ tr = Novosibirsk Oblastı @@ -28414,6 +29263,7 @@ pt = Oblast de Omsk ro = Regiunea Omsk es = Omsk + et = Omski oblast sv = Omsk oblast th = แคว้นปกครองตนเองออมสก์ tr = Omsk Oblastı @@ -28447,6 +29297,7 @@ pt = Oblast de Oremburgo ro = Regiunea Orenburg es = Óblast de Oremburgo + et = Orenburgi oblast sv = Orenburg oblast th = แคว้นปกครองตนเองโอเรนเบิร์ก tr = Orenburg Oblastı @@ -28480,6 +29331,7 @@ pt = Oblast de Oriol ro = Regiunea Oriol es = Oriol + et = Oryoli oblast sv = Orjol oblast th = แคว้นปกครองตนเองออร์โยล tr = Oryol Oblastı @@ -28513,6 +29365,7 @@ pt = Oblast de Penza ro = Regiunea Penza es = Óblast de Penza + et = Penza oblast sv = Penza oblast th = แคว้นปกครองตนเองเพนซา tr = Penza Oblastı @@ -28546,6 +29399,7 @@ pt = Krai de Perm ro = Ținutul Perm es = Perm + et = Permi krai sv = Perm kraj th = เขตปกครองเพิร์ม tr = Perm Krayı @@ -28579,6 +29433,7 @@ pt = Krai do Litoral ro = Ținutul Primorie es = Primorie + et = Primorski krai sv = Primorje kraj th = เขตปกครองพริมอร์สกี tr = Primorskiy Krayı @@ -28612,6 +29467,7 @@ pt = Oblast de Pskov ro = Regiunea Pskov es = Óblast de Pskov + et = Pihkva oblast sv = Pskov oblast th = แคว้นปกครองตนเองพัสคอฟ tr = Pskov Oblastı @@ -28645,6 +29501,7 @@ pt = Daguestão ro = Daghestan es = Daguestán + et = Dagestani Vabariik sv = Dagestan th = สาธารณรัฐดาเกสถาน tr = Dağıstan @@ -28678,6 +29535,7 @@ pt = Calmúquia ro = Calmîchia es = Kalmukia + et = Kalmõkkia Vabariik sv = Kalmuckien th = สาธารณรัฐคัลมืยคียา tr = Kalmukya @@ -28711,6 +29569,7 @@ pt = República da Carélia ro = Republica Carelia es = República de Carelia + et = Karjala Vabariik sv = Karelska republiken th = สาธารณรัฐคาเรลียา tr = Karelya Cumhuriyeti @@ -28744,6 +29603,7 @@ pt = Mordóvia ro = Mordovia es = Mordovia + et = Mordva Vabariik sv = Mordvinien th = สาธารณรัฐมอร์โดเวีย tr = Mordovya @@ -28777,6 +29637,7 @@ pt = Oblast de Rostov ro = Regiunea Rostov es = Rostov + et = Rostovi oblast sv = Rostov oblast th = แคว้นปกครองตนเองรอสตอฟ tr = Rostov Oblastı @@ -28810,6 +29671,7 @@ pt = Oblast de Riazan ro = Regiunea Riazan es = Óblast de Riazán + et = Rjazani oblast sv = Rjazan oblast th = แคว้นปกครองตนเองรยาซัน tr = Ryazan Oblastı @@ -28843,6 +29705,7 @@ pt = São Petersburgo ro = Sankt Petersburg es = San Petersburgo + et = Peterburi sv = Sankt Petersburg th = เซนต์ปีเตอร์สเบิร์ก tr = Sankt Petersburg @@ -28876,6 +29739,7 @@ pt = Iacútia ro = Iacuția es = Sajá + et = Sakha Vabariik sv = Sacha th = สาธารณรัฐซาฮา tr = Yakutistan @@ -28909,6 +29773,7 @@ pt = Oblast de Sacalina ro = Regiunea Sahalin es = Sajalín + et = Sahhalini oblast sv = Sachalin oblast th = แคว้นปกครองตนเองซาคาลิน tr = Sahalin Oblastı @@ -28942,6 +29807,7 @@ pt = Oblast de Samara ro = Regiunea Samara es = Óblast de Samara + et = Samara oblast sv = Samara oblast th = แคว้นปกครองตนเองซามารา tr = Samara Oblastı @@ -28975,6 +29841,7 @@ pt = Oblast de Saratov ro = Regiunea Saratov es = Óblast de Sarátov + et = Saratovi oblast sv = Saratov oblast th = แคว้นปกครองตนเองซาราทอฟ tr = Saratov Oblastı @@ -29008,6 +29875,7 @@ pt = Oblast de Smolensk ro = Regiunea Smolensk es = Smolensk + et = Smolenski oblast sv = Smolensk oblast th = แคว้นปกครองตนเองสโมเลนสก์ tr = Smolensk Oblastı @@ -29041,6 +29909,7 @@ pt = Krai de Stavropol ro = Ținutul Stavropol es = Stávropol + et = Stavropoli krai sv = Stavropol kraj th = แคว้นปกครองตนเองสตาฟโรพอล tr = Stavropol Krayı @@ -29074,6 +29943,7 @@ pt = Oblast de Sverdlovsk ro = Regiunea Sverdlovsk es = Sverdlovsk + et = Sverdlovski oblast sv = Sverdlovsk oblast th = แคว้นปกครองตนเองสเวอร์ดอฟสก์ tr = Sverdlovsk Oblastı @@ -29107,6 +29977,7 @@ pt = Oblast de Tambov ro = Regiunea Tambov es = Tambov + et = Tambovi oblast sv = Tambov oblast th = แคว้นปกครองตนเองทัมบอฟ tr = Tambov Oblastı @@ -29140,6 +30011,7 @@ pt = Tartaristão ro = Tatarstan es = Tartaristán + et = Tatarstani Vabariik sv = Tatarstan th = สาธารณรัฐตาตาร์สถาน tr = Tataristan @@ -29173,6 +30045,7 @@ pt = Oblast de Tomsk ro = Regiunea Tomsk es = Tomsk + et = Tomski oblast sv = Tomsk oblast th = แคว้นปกครองตนเองทอมสก์ tr = Tomsk Oblastı @@ -29206,6 +30079,7 @@ pt = Oblast de Tula ro = Regiunea Tula es = Óblast de Tula + et = Tula oblast sv = Tula oblast th = แคว้นปกครองตนเองทูลา tr = Tula Oblastı @@ -29239,6 +30113,7 @@ pt = Tuva ro = Tuva es = Tuvá + et = Tuva Vabariik sv = Tuva th = สาธารณรัฐทูวา tr = Tuva Cumhuriyeti @@ -29272,6 +30147,7 @@ pt = Oblast de Tver ro = Regiunea Tver es = Óblast de Tver + et = Tveri oblast sv = Tver oblast th = แคว้นปกครองตนเองเทวอร์ tr = Tver Oblastı @@ -29305,6 +30181,7 @@ pt = Oblast de Tiumen ro = Regiunea Tiumen es = Tiumén + et = Tjumeni oblast sv = Tiumen oblast th = ทยูเมน tr = Tümen Oblastı @@ -29338,6 +30215,7 @@ pt = Udmúrtia ro = Udmurtia es = Udmurtia + et = Udmurdi Vabariik sv = Udmurtien th = สาธารณรัฐอุดเมิร์ต tr = Udmurtya @@ -29371,6 +30249,7 @@ pt = Oblast de Ulianovsk ro = Regiunea Ulianovsk es = Uliánovsk + et = Uljanovski oblast sv = Uljanovsk oblast th = แคว้นปกครองตนเองอูไลนอฟสก์ tr = Ulyanovsk Oblastı @@ -29404,6 +30283,7 @@ pt = Oblast de Vladimir ro = Regiunea Vladimir es = Óblast de Vladímir + et = Vladimiri oblast sv = Vladimir oblast th = แคว้นปกครองตนเองวลาดิเมีย tr = Vladimir Oblastı @@ -29437,6 +30317,7 @@ pt = Oblast de Volgogrado ro = Regiunea Volgograd es = Volgogrado + et = Volgogradi oblast sv = Volgograd oblast th = แคว้นปกครองตนเองวอลโกกราด tr = Volgograd Oblastı @@ -29470,6 +30351,7 @@ pt = Oblast de Vologda ro = Regiunea Vologda es = Oblast Vologda + et = Vologda oblast sv = Vologda oblast th = แคว้นปกครองตนเองโวโลกดา tr = Vologda Oblastı @@ -29503,6 +30385,7 @@ pt = Oblast de Voronej ro = Regiunea Voronej es = Óblast de Vorónezh + et = Voroneži oblast sv = Voronezj oblast th = แคว้นปกครองตนเองโวโรเนช tr = Voronej Oblastı @@ -29536,6 +30419,7 @@ pt = Iamália ro = Districtul autonom Iamalia-Neneția es = Yamalia-Nenetsia + et = Jamalo-Neenetsi autonoomne üksus sv = Jamalo-Nentsien th = เขตปกครองตนเองยามาโล-เนเนต tr = Yamalo-Nenets Özerk Okrugu @@ -29569,6 +30453,7 @@ pt = Oblast de Iaroslavl ro = Regiunea Iaroslavl es = Óblast de Yaroslavl + et = Jaroslavli oblast sv = Jaroslavl oblast th = แคว้นปกครองตนเองยาโรสลาฟ tr = Yaroslavl Oblastı @@ -29602,6 +30487,7 @@ pt = Khantia-Mansia ro = Districtul autonom Hantî-Mansi es = Janti-Mansi + et = Hanti-Mansi autonoomne üksus sv = Chantien-Mansien th = เขตปกครองตนเองคานที-มานซี tr = Hantı-Mansi Özerk Okrugu @@ -29635,6 +30521,7 @@ pt = Krai de Zabaykalsky ro = Regiunea Transbaikal es = Zabaikalie + et = Trans-Baikali krai sv = Zabajkalskij kraj th = เขตปกครองซาบายคาลสกี tr = Zabaykalskiy Krayı @@ -29668,6 +30555,7 @@ pt = Rússia ro = Rusia es = Rusia + et = Venemaa eu = Errusia sv = Ryssland th = ประเทศรัสเซีย @@ -29703,6 +30591,7 @@ pt = Ruanda ro = Rwanda es = Ruanda + et = Ruanda eu = Ruanda sv = Rwanda th = ประเทศรวันดา @@ -29739,6 +30628,7 @@ ro = Republica Arabă Democrată Saharawi es = República Árabe Saharaui Democrática eu = Saharako Errepublika Arabiar Demokratikoa + et = Sahara Araabia Demokraatlik Vabariik sv = Sahariska arabiska demokratiska republiken th = สาธารณรัฐประชาธิปไตยอาหรับซาห์ราวี tr = Sahra Demokratik Arap Cumhuriyeti @@ -29772,6 +30662,7 @@ pt = Coletividade de São Bartolomeu ro = Saint Barthélemy es = San Bartolomé + et = Saint-Barthélemy eu = San Bartolome sv = Saint-Barthélemy th = แซ็ง-บาร์เตเลมี @@ -29806,6 +30697,7 @@ pt = Santa Helena, Ascensão e Tristão da Cunha ro = Sfânta Elena, Ascension și Tristan da Cunha es = Santa Elena, Ascensión y Tristán de Acuña + et = Santa Helena, Ascension ja Tristan da Cunha eu = Santa Helena, Ascension eta Tristan da Cunha sv = Sankta Helena, Ascension och Tristan da Cunha th = เซนต์เฮเลนา อัสเซนชัน และตริสตันดากูนยา @@ -29840,6 +30732,7 @@ pt = São Cristóvão e Nevis ro = Sfântul Cristofor și Nevis es = San Cristóbal y Nieves + et = Saint Kitts ja Nevis eu = Saint Kitts eta Nevis sv = Saint Kitts och Nevis th = ประเทศเซนต์คิตส์และเนวิส @@ -29874,6 +30767,7 @@ pt = Santa Lúcia ro = Sfânta Lucia es = Santa Lucía + et = Santa Lucia eu = Santa Luzia sv = Saint Lucia th = ประเทศเซนต์ลูเซีย @@ -29908,6 +30802,7 @@ pt = São Martinho ro = Saint Martin es = San Martín + et = Saint-Martin eu = San Martin sv = Saint Martin th = เซนต์มาร์ติน @@ -29942,6 +30837,7 @@ pt = São Vicente e Granadinas ro = Sfântul Vicențiu și Grenadine es = San Vicente y las Granadinas + et = Saint Vincent ja Grenadiinid eu = San Bizente eta Grenadinak sv = Saint Vincent och Grenadinerna th = ประเทศเซนต์วินเซนต์และเกรนาดีนส์ @@ -29976,6 +30872,7 @@ pt = Samoa ro = Samoa es = Samoa + et = Samoa eu = Samoa sv = Samoa th = ประเทศซามัว @@ -30010,6 +30907,7 @@ pt = San Marino ro = San Marino es = San Marino + et = San Marino eu = San Marino sv = San Marino th = ประเทศซานมารีโน @@ -30044,6 +30942,7 @@ pt = São Tomé e Príncipe ro = São Tomé și Príncipe es = Santo Tomé y Príncipe + et = São Tome ja Principe eu = Sao Tome eta Principe sv = São Tomé och Príncipe th = ประเทศเซาตูเมและปรินซิปี @@ -30078,6 +30977,7 @@ pt = Arábia Saudita ro = Arabia Saudită es = Arabia Saudita + et = Saudi Araabia eu = Saudi Arabia sv = Saudiarabien th = ประเทศซาอุดีอาระเบีย @@ -30113,6 +31013,7 @@ pt = Senegal ro = Senegal es = Senegal + et = Senegal eu = Senegal sv = Senegal th = ประเทศเซเนกัล @@ -30148,6 +31049,7 @@ pt = Sérvia ro = Serbia es = Serbia + et = Serbia eu = Serbiarra sv = Serbien th = ประเทศเซอร์เบีย @@ -30183,6 +31085,7 @@ pt = Seychelles ro = Seychelles es = Seychelles + et = Seišellid eu = Seychelles sv = Seychellerna th = ประเทศเซเชลส์ @@ -30218,6 +31121,7 @@ pt = Serra Leoa ro = Sierra Leone es = Sierra Leona + et = Sierra Leone eu = Sierra Leona sv = Sierra Leone th = ประเทศเซียร์ราลีโอน @@ -30253,6 +31157,7 @@ pt = Singapura ro = Singapore es = Singapur + et = Singapur eu = Singapur sv = Singapore th = ประเทศสิงคโปร์ @@ -30288,6 +31193,7 @@ pt = Eslováquia ro = Slovacia es = Eslovaquia + et = Slovakkia eu = Eslovakia sv = Slovakien th = ประเทศสโลวาเกีย @@ -30323,6 +31229,7 @@ pt = Banská Bystrica ro = Regiunea Banská Bystrica es = Región de Banská Bystrica + et = Banská Bystrica piirkond sv = Banská Bystrica th = ภูมิภาคบันสกา บิสทริกา tr = Banská Bystrica Bölgesi @@ -30356,6 +31263,7 @@ pt = Bratislava ro = Regiunea Bratislava es = Región de Bratislava + et = Bratislava piirkond sv = Bratislava th = ภูมิภาคบราทิสลาวา tr = Bratislava Bölgesi @@ -30389,6 +31297,7 @@ pt = Košice ro = Regiunea Košice es = Región de Košice + et = Košice piirkond sv = Košice th = ภูมิภาคโคซิเซ tr = Košice Bölgesi @@ -30422,6 +31331,7 @@ pt = Nitra ro = Regiunea Nitra es = Región de Nitra + et = Nitra piirkond sv = Nitra th = ภูมิภาคนิตรา tr = Nitra Bölgesi @@ -30455,6 +31365,7 @@ pt = Prešov ro = Regiunea Prešov es = Región de Prešov + et = Prešovi piirkond sv = Prešov th = ภูมิภาคเพรโช tr = Prešov Bölgesi @@ -30488,6 +31399,7 @@ pt = Trenčín ro = Regiunea Trenčín es = Región de Trenčín + et = Trenčíni piirkond sv = Trenčín th = ภูมิภาคเทรนจิน tr = Trenčín Bölgesi @@ -30521,6 +31433,7 @@ pt = Trnava ro = Regiunea Trnava es = Región de Trnava + et = Trnava piirkond sv = Trnava th = ภูมิภาคทรนาวา tr = Trnava Bölgesi @@ -30554,6 +31467,7 @@ pt = Žilina ro = Regiunea Žilina es = Región de Žilina + et = Žilina piirkond sv = Žilina th = ภูมิภาคซิลินา tr = Žilina Bölgesi @@ -30587,6 +31501,7 @@ pt = Eslovénia ro = Slovenia es = Eslovenia + et = Sloveenia eu = Eslovenia sv = Slovenien th = ประเทศสโลวีเนีย @@ -30622,6 +31537,7 @@ pt = Ilhas Salomão ro = Insulele Solomon es = Islas Salomón + et = Saalomoni saared eu = Salomon Uharteak sv = Salomonöarna th = หมู่เกาะโซโลมอน @@ -30657,6 +31573,7 @@ pt = Somália ro = Somalia es = Somalia + et = Somaalia eu = Somalia sv = Somalia th = ประเทศโซมาเลีย @@ -30692,6 +31609,7 @@ pt = África do Sul ro = Africa de Sud es = Sudáfrica + et = Lõuna-Aafrika eu = Hegoafrika sv = Sydafrika th = ประเทศแอฟริกาใต้ @@ -30727,6 +31645,7 @@ pt = Cabo Oriental ro = Provincia Eastern Cape es = Provincia Oriental del Cabo + et = Eastern Cape sv = Östra Kapprovinsen th = อีสเทิร์นเคป tr = Doğu Kap @@ -30760,6 +31679,7 @@ pt = Estado Livre ro = Provincia Free State es = Provincia del Estado Libre + et = Free State sv = Fristatsprovinsen th = ฟรีเสตท tr = Özgür Devlet @@ -30793,6 +31713,7 @@ pt = Gauteng ro = Provincia Gauteng es = Gauteng + et = Gauteng sv = Gauteng th = เฮาเทง tr = Gauteng @@ -30826,6 +31747,7 @@ pt = KwaZulu-Natal ro = Provincia KwaZulu-Natal es = KwaZulu-Natal + et = KwaZulu-Natal sv = KwaZulu-Natal th = ควาซูลู-นาทาล tr = KwaZulu-Natal @@ -30859,6 +31781,7 @@ pt = Limpopo ro = Provincia Limpopo es = Provincia de Limpopo + et = Limpopo sv = Limpopoprovinsen th = ลิมโปโป tr = Limpopo @@ -30892,6 +31815,7 @@ pt = Mpumalanga ro = Provincia Mpumalanga es = Mpumalanga + et = Mpumalanga sv = Mpumalanga th = มปูมาลังกา tr = Mpumalanga @@ -30925,6 +31849,7 @@ pt = Noroeste ro = Provincia North West es = Provincia del Noroeste + et = North West sv = Nordvästprovinsen th = นอร์ธเวสต์ tr = Kuzeybatı @@ -30958,6 +31883,7 @@ pt = Cabo Setentrional ro = Provincia Northern Cape es = Provincia Septentrional del Cabo + et = Northern Cape sv = Norra Kapprovinsen th = นอร์ธเทิร์นเคป tr = Kuzey Kap @@ -30991,6 +31917,7 @@ pt = Cabo Ocidental ro = Provincia Western Cape es = Provincia Occidental del Cabo + et = Western Cape sv = Västra Kapprovinsen th = เวสเทริ์นเคป tr = Batı Kap @@ -31024,6 +31951,7 @@ pt = Carolina do Sul ro = Carolina de Sud es = Carolina del Sur + et = Lõuna-Carolina eu = Hego Carolina sv = South Carolina th = รัฐเซาท์แคโรไลนา @@ -31057,6 +31985,7 @@ pt = Ilhas Geórgia do Sul e Sandwich do Sul ro = Georgia de Sud și Insulele Sandwich de Sud es = Islas Georgias del Sur y Sándwich del Sur + et = Lõuna-Georgia ja Lõuna-Sandwichi saared eu = Hego Georgia eta Hego Sandwich uharteak sv = Sydgeorgien och Sydsandwichöarna th = เกาะเซาท์จอร์เจียและหมู่เกาะเซาท์แซนด์วิช @@ -31090,6 +32019,7 @@ pt = Coreia do Sul ro = Coreea de Sud es = Corea del Sur + et = Lõuna-Korea eu = Hego Korea sv = Sydkorea th = ประเทศเกาหลีใต้ @@ -31124,6 +32054,7 @@ pt = Coreia do Sul — Norte ro = Coreea de Sud — Nord es = Corea del Sur — Norte + et = Lõuna-Korea - Põhi sv = Sydkorea — Nord th = ประเทศเกาหลีใต้ — เหนือ tr = Güney Kore — Kuzey @@ -31156,6 +32087,7 @@ pt = Coreia do Sul — Sul ro = Coreea de Sud — Sud es = Corea del Sur — Sur + et = Lõuna-Korea - Lõuna sv = Sydkorea — Syd th = ประเทศเกาหลีใต้ — ใต้ tr = Güney Kore — Güney @@ -31188,6 +32120,7 @@ pt = Ossétia do Sul ro = Osetia de Sud es = Osetia del Sur + et = Lõuna-Osseetia eu = Hego Osetia sv = Sydossetien th = เซาท์ออสซีเชีย @@ -31221,6 +32154,7 @@ pt = Sudão do Sul ro = Sudanul de Sud es = Sudán del Sur + et = Lõuna-Sudaan eu = Hego Sudan sv = Sydsudan th = ประเทศเซาท์ซูดาน @@ -31254,6 +32188,7 @@ pt = Espanha ro = Spania es = España + et = Hispaania eu = Espainia sv = Spanien th = ประเทศสเปน @@ -31288,6 +32223,7 @@ pt = Andaluzia ro = Andaluzia es = Andalucía + et = Andaluusia eu = Andaluzia sv = Andalusien th = แคว้นอันดาลูซีอา @@ -31321,6 +32257,7 @@ pt = Aragão ro = Aragon es = Aragón + et = Aragon eu = Aragoi sv = Aragonien th = แคว้นอารากอง @@ -31354,6 +32291,7 @@ pt = Baleares ro = Insulele Baleare es = Islas Baleares + et = Baleaari saared eu = Balear Uharteak sv = Balearerna th = หมู่เกาะแบลีแอริก @@ -31387,6 +32325,7 @@ pt = Comunidade autónoma do País Basco ro = Țara Bascilor es = País Vasco + et = Baskimaa eu = Euskadi sv = Regionen Baskien th = แคว้นบาสก์ @@ -31420,6 +32359,7 @@ pt = Canárias ro = Insulele Canare es = Canarias + et = Kanaari saared eu = Kanariar Uharteak sv = Kanarieöarna th = หมู่เกาะคะเนรี @@ -31453,6 +32393,7 @@ pt = Cantábria ro = Cantabria es = Cantabria + et = Cantabria eu = Kantabria sv = Kantabrien th = แคว้นกันตาเบรีย @@ -31486,6 +32427,7 @@ pt = Castela e Leão ro = Castilia și León es = Castilla y León + et = Kastiilia ja León eu = Gaztela eta Leon sv = Kastilien och León th = แคว้นคาสตีลและเลออน @@ -31519,6 +32461,7 @@ pt = Castela-Mancha ro = Castilia-La Mancha es = Castilla-La Mancha + et = Castile-La Mancha eu = Gaztela-Mantxa sv = Kastilien-La Mancha th = แคว้นคาสตีล-ลามันชา @@ -31552,6 +32495,7 @@ pt = Barcelona ro = Provincia Barcelona es = Provincia de Barcelona + et = Barcelona maakond eu = Bartzelonako probintzia sv = Barcelona th = จังหวัดบาร์เซโลนา @@ -31585,6 +32529,7 @@ pt = Girona ro = Provincia Girona es = Provincia de Gerona + et = Girona maakond eu = Gironako probintzia sv = Girona th = จังหวัดกิโรนา @@ -31618,6 +32563,7 @@ pt = Província de Lérida ro = Provincia Lleida es = Provincia de Lérida + et = Lleida maakond eu = Lleidako probintzia sv = Lleida th = จังหวัดเลดา @@ -31651,6 +32597,7 @@ pt = Tarragona ro = Provincia Tarragona es = Provincia de Tarragona + et = Tarragona maakond eu = Tarragonako probintzia sv = Tarragona th = จังหวัดทาร์ราโกนา @@ -31684,6 +32631,7 @@ pt = Ceuta ro = Ceuta es = Ceuta + et = Ceuta eu = Ceuta sv = Ceuta th = เซวตา @@ -31717,6 +32665,7 @@ pt = Comunidade autónoma de Madrid ro = Madrid es = Comunidad de Madrid + et = Madridi kogukond eu = Madrilgo Erkidegoa sv = Madrid th = แคว้นมาดริด @@ -31750,6 +32699,7 @@ pt = Navarra ro = Navarra es = Navarra + et = Navarra eu = Nafarroa sv = Navarra th = แคว้นนาวาร์ @@ -31783,6 +32733,7 @@ pt = Estremadura (Espanha) ro = Extremadura es = Extremadura + et = Extremadura eu = Estremadura sv = Extremadura th = แคว้นเอกซ์เตรมาดูรา @@ -31816,6 +32767,7 @@ pt = Galiza ro = Galicia es = Galicia + et = Galicia eu = Galizia sv = Galicien th = แคว้นกาลิเซีย @@ -31849,6 +32801,7 @@ pt = La Rioja ro = La Rioja es = La Rioja + et = La Rioja eu = Errioxa sv = La Rioja th = แคว้นลารีโอคา @@ -31882,6 +32835,7 @@ pt = Melilla ro = Melilla es = Melilla + et = Melilla eu = Melilla sv = Melilla th = เมลียา @@ -31915,6 +32869,7 @@ pt = Astúrias ro = Asturia es = Principado de Asturias + et = Astuuria eu = Asturiasko Printzerria sv = Asturien th = แคว้นอัสตูเรียส @@ -31948,6 +32903,7 @@ pt = Região de Múrcia ro = Murcia es = Región de Murcia + et = Murcia piirkond eu = Murtziako Eskualdea sv = Murcia th = แคว้นมูร์เซีย @@ -31981,6 +32937,7 @@ pt = Comunidade Valenciana ro = Comunitatea Valenciană es = Comunidad Valenciana + et = Valencia eu = Valentziako Erkidegoa sv = Valencia th = แคว้นบาเลนเซีย @@ -32014,6 +32971,7 @@ pt = Sri Lanka ro = Sri Lanka es = Sri Lanka + et = Sri Lanka eu = Sri Lanka sv = Sri Lanka th = ประเทศศรีลังกา @@ -32048,6 +33006,7 @@ pt = Sudão ro = Sudan es = Sudán + et = Sudaan eu = Sudan sv = Sudan th = ประเทศซูดาน @@ -32082,6 +33041,7 @@ pt = Suriname ro = Surinam es = Surinam + et = Suriname eu = Surinam sv = Surinam th = ประเทศซูรินาม @@ -32116,6 +33076,7 @@ pt-BR = Essuatíni ro = Eswatini es = Esuatini + et = Eswatini eu = Eswatini es-MX = Esuatini sv = Eswatini @@ -32151,6 +33112,7 @@ pt = Suécia ro = Suedia es = Suecia + et = Rootsi eu = Suedia sv = Sverige th = ประเทศสวีเดน @@ -32185,6 +33147,7 @@ pt = Bergslagen ro = Bergslagen es = Bergslagen + et = Bergslagen sv = Bergslagen th = เบอร์สลาเกน tr = Bergslagen @@ -32217,6 +33180,7 @@ pt = Mälardalen ro = Mälardalen es = Mälardalen + et = Pealinna piirkond sv = Mälardalen th = มาลาร์ดาเลน tr = Mälardalen @@ -32249,6 +33213,7 @@ pt = Mellannorrland ro = Mellannorrland es = Mellannorrland + et = Keskn-Norland sv = Mellannorrland th = เมลานอร์แลนด์ tr = Mellannorrland @@ -32281,6 +33246,7 @@ pt = Norra Sverige ro = Norra Sverige es = Norra Sverige + et = Põhja-Rootsi sv = Norra Sverige th = นอร์แลนด์ tr = Norra Sverige @@ -32313,6 +33279,7 @@ pt = Ostra Götaland ro = Ostra Götaland es = Ostra Götaland + et = Ida-Götaland sv = Östergötland th = ออสตราโนตาลัน tr = Ostra Götaland @@ -32345,6 +33312,7 @@ pt = Södra Götaland ro = Södra Götaland es = Södra Götaland + et = Lõuna-Götaland sv = Södra Götaland th = โซดราโนตาลัน tr = Södra Götaland @@ -32377,6 +33345,7 @@ pt = Västra Götaland ro = Västra Götaland es = Västra Götaland + et = Lääne-Götaland sv = Västergötland th = วาสตราโนตาลัน tr = Västra Götaland @@ -32409,6 +33378,7 @@ pt = Suíça ro = Elveția es = Suiza + et = Šveits eu = Suitza sv = Schweiz th = ประเทศสวิตเซอร์แลนด์ @@ -32443,6 +33413,7 @@ pt = Suíça Central ro = Elveția Centrală es = Suiza Central + et = Kesk-Šveits sv = Centralschweiz th = สวิตเซอร์แลนด์กลาง tr = Orta İsviçre @@ -32475,6 +33446,7 @@ pt = Suíça Ocidental ro = Elveția de Est es = Suiza oriental + et = Ida-Šveits sv = Östra Schweiz th = สวิตเซอร์แลนด์ตะวันออก tr = Doğu İsviçre @@ -32507,6 +33479,7 @@ pt = Espaço Mittelland ro = Spațiul Mittelland es = Mittelland + et = Espace Mittelland sv = Schweizer Mittelland th = เอสเปส มิตเตลลัน tr = Espace Mittelland @@ -32539,6 +33512,7 @@ pt = Região Lemánica ro = Regiunea lacul Geneva es = Región del lago Lemán + et = Genfi järve piirkond sv = Genèvesjöregionen th = พื้นที่ทะเลสาบเจนีวา tr = Lake Geneva bölgesi @@ -32571,6 +33545,7 @@ pt = Noroeste da Suíça ro = Elveția de Nord-Vest es = Suiza Nor-Occidental + et = Loode-Šveits sv = Nordvästra Schweiz th = สวิตเซอร์แลนด์ตะวันตกเฉียงเหนือ tr = Kuzeybatı İsviçre @@ -32603,6 +33578,7 @@ pt = Ticino ro = Cantonul Ticino es = Tesino + et = Ticino sv = Ticino th = รัฐทีชีโน tr = Ticino @@ -32635,6 +33611,7 @@ pt = Área Metropolitana de Zurique ro = Zona metropolitană Zurich es = Área metropolitana de Zurich + et = Zürich sv = Zürich storstadsområde th = มหานครซูริก tr = Zürih metropolitan bölgesi @@ -32667,6 +33644,7 @@ pt = Síria ro = Siria es = Siria + et = Süüria eu = Siria sv = Syrien th = ประเทศซีเรีย @@ -32701,6 +33679,7 @@ pt = República da China ro = Taiwan es = República de China + et = Taiwan eu = Txinako Errepublika sv = Taiwan th = ประเทศไต้หวัน @@ -32735,6 +33714,7 @@ pt = Tajiquistão ro = Tadjikistan es = Tayikistán + et = Tadžikistan eu = Tadjikistan sv = Tadzjikistan th = ประเทศทาจิกิสถาน @@ -32769,6 +33749,7 @@ pt = Tanzânia ro = Tanzania es = Tanzania + et = Tansaania eu = Tanzania sv = Tanzania th = ประเทศแทนซาเนีย @@ -32803,6 +33784,7 @@ pt = Tennessee ro = Tennessee es = Tennessee + et = Tennessee eu = Tennessee sv = Tennessee th = รัฐเทนเนสซี @@ -32836,6 +33818,7 @@ pt = Texas ro = Texas es = Texas + et = Texas eu = Texas sv = Texas th = รัฐเทกซัส @@ -32869,6 +33852,7 @@ pt = Tailândia ro = Thailanda es = Tailandia + et = Tai eu = Thailandia sv = Thailand th = ประเทศไทย @@ -32903,6 +33887,7 @@ pt = Tailândia — Norte ro = Thailanda — Nord es = Tailandia — Norte + et = Tai - Põhi sv = Thailand — Nord th = ประเทศไทย — เหนือ tr = Tayland — Kuzey @@ -32935,6 +33920,7 @@ pt = Tailândia — Sul ro = Thailanda — Sud es = Tailandia — Sur + et = Tai - Lõuna sv = Thailand — Syd th = ประเทศไทย — ใต้ tr = Tayland — Güney @@ -32967,6 +33953,7 @@ pt = Bahamas ro = Bahamas es = Bahamas + et = Bahama saared eu = Bahamak sv = Bahamas th = ประเทศบาฮามาส @@ -33000,6 +33987,7 @@ pt = Gâmbia ro = Gambia es = Gambia + et = Gambia eu = Gambia sv = Gambia th = ประเทศแกมเบีย @@ -33033,6 +34021,7 @@ pt = Togo ro = Togo es = Togo + et = Togo eu = Joan sv = Togo th = ประเทศโตโก @@ -33066,6 +34055,7 @@ pt = Tokelau ro = Tokelau es = Tokelau + et = Tokelau eu = Tokelau sv = Tokelau th = โตเกเลา @@ -33099,6 +34089,7 @@ pt = Tonga ro = Tonga es = Tonga + et = Tonga eu = Tonga sv = Tonga th = ประเทศตองกา @@ -33132,6 +34123,7 @@ pt = Trinidad e Tobago ro = Trinidad și Tobago es = Trinidad y Tobago + et = Trinidad ja Tobago eu = Trinidad eta Tobago sv = Trinidad och Tobago th = ประเทศตรินิแดดและโตเบโก @@ -33166,6 +34158,7 @@ pt = Tunísia ro = Tunisia es = Túnez + et = Tuneesia eu = Tunisia sv = Tunisien th = ประเทศตูนิเซีย @@ -33199,6 +34192,7 @@ pt = Turquia ro = Turcia es = Turquía + et = Türgi eu = Turkia sv = Turkiet th = ประเทศตุรกี @@ -33233,6 +34227,7 @@ pt = Região do Egeu ro = Regiunea Egeeană es = Región del Egeo + et = Egeuse mere piirkond sv = Egeiska regionen th = ภูมิภาคแอเกียน tr = Ege Bölgesi @@ -33265,6 +34260,7 @@ pt = Região do Mar Negro ro = Regiunea Mării Negre es = Región del Mar Negro + et = Musta mere piirkond sv = Svarta havsregionen th = ภูมิภาคแบล็กซี tr = Karadeniz Bölgesi @@ -33297,6 +34293,7 @@ pt = Região da Anatólia Oriental ro = Regiunea Anatolia de Est es = Región de Anatolia Oriental + et = Ida-Anatoolia piirkond sv = Östanatolien th = ภูมิภาคแอนาโตเลียตะวันออก tr = Doğu Anadolu Bölgesi @@ -33329,6 +34326,7 @@ pt = Região de Mármara ro = Regiunea Marmara es = Región del Mármara + et = Marmara piirkond sv = Marmara-regionen th = ภูมิภาคมาร์มารา tr = Marmara Bölgesi @@ -33361,6 +34359,7 @@ pt = Região do Mediterrâneo ro = Regiunea Mediteraneană es = Región del Mediterráneo + et = Vahemere piirkond sv = Medelhavsregionen th = ภูมิภาคเมดิเตอร์เรเนียน tr = Akdeniz Bölgesi @@ -33393,6 +34392,7 @@ pt = Região do Sudeste da Anatólia ro = Regiunea Anatolia de Sud-Est es = Región del Sureste de Anatolia + et = Kagu-Anatoolia piirkond sv = Sydöstra Anatolien th = ภูมิภาคแอนาโตเลียตะวันออกเฉียงใต้ tr = Güneydoğu Anadolu Bölgesi @@ -33425,6 +34425,7 @@ pt = Turquemenistão ro = Turkmenistan es = Turkmenistán + et = Türkmenistan eu = Turkmenistan sv = Turkmenistan th = ประเทศเติร์กเมนิสถาน @@ -33459,6 +34460,7 @@ pt = Turks e Caicos ro = Insulele Turks și Caicos es = Islas Turcas y Caicos + et = Turksi ja Caicose saared eu = Turks eta Caicos uharteak sv = Turks- och Caicosöarna th = หมู่เกาะเติกส์และหมู่เกาะเคคอส @@ -33492,6 +34494,7 @@ pt = Tuvalu ro = Tuvalu es = Tuvalu + et = Tuvalu eu = Tuvaluarra sv = Tuvalu th = ประเทศตูวาลู @@ -33525,6 +34528,7 @@ pt = Midlands Orientais ro = East Midlands es = Midlands del Este + et = Ida-Midlands sv = East Midlands th = อีสต์มิดแลนส์ tr = East Midlands @@ -33557,6 +34561,7 @@ pt = Leste da Inglaterra — Essex ro = East of England — Essex es = Este de Inglaterra — Essex + et = Ida-Inglismaa - Essex sv = Östra England — Essex th = อีสต์ออฟอิงแลนด์ — เอสเซกซ์ tr = Doğu İngiltere — Essex @@ -33589,6 +34594,7 @@ pt = Leste da Inglaterra — Norfolk ro = East of England — Norfolk es = Este de Inglaterra — Norfolk + et = Ida-Inglismaa - Norfolk sv = Östra England — Norfolk th = อีสต์ออฟอิงแลนด์ — นอร์ฟอล์ก tr = Doğu İngiltere — Norfolk @@ -33621,6 +34627,7 @@ pt = Grande Londres ro = Londra Mare es = Gran Londres + et = Suur-London sv = Storlondon th = เกรเทอร์ลอนดอน tr = Büyük Londra Bölgesi @@ -33653,6 +34660,7 @@ pt = Nordeste da Inglaterra ro = North East England es = Nordeste de Inglaterra + et = Kirde-Inglismaa sv = Nordöstra England th = นอร์ทอีสต์อิงแลนด์ tr = Kuzey Doğu İngiltere @@ -33685,6 +34693,7 @@ pt = Noroeste da Inglaterra ro = North West England es = Noroeste de Inglaterra + et = Loode-Inglismaa sv = Nordvästra England th = นอร์ทเวสต์อิงแลนด์ tr = Kuzey-Batı İngiltere @@ -33717,6 +34726,7 @@ pt = Sudeste da Inglaterra — Brighton ro = South East England — Brighton es = Sudeste de Inglaterra — Brighton + et = Kagu-Inglismaa - Brighton sv = Sydöstra England — Brighton th = เซาท์อีสต์อิงแลนด์ — ไบรตัน tr = Güney Doğu İngiltere — Brighton @@ -33749,6 +34759,7 @@ pt = Sudeste da Inglaterra — Oxford ro = South East England — Oxford es = Sudeste de Inglaterra — Oxford + et = Kagu-Inglismaa - Oxford sv = Sydöstra England — Oxford th = เซาท์อีสต์อิงแลนด์ — อ๊อกซฟอร์ด tr = Güney Doğu İngiltere — Oxford @@ -33781,6 +34792,7 @@ pt = Sudoeste da Inglaterra — Bristol ro = South West England — Bristol es = Sudoeste de Inglaterra — Brístol + et = Edela-Inglismaa - Bristol sv = Sydvästra England — Bristol th = เซาท์เวสต์อิงแลนด์ — บริสตอล tr = Güneybatı İngiltere — Bristol @@ -33813,6 +34825,7 @@ pt = Sudoeste da Inglaterra — Cornualha ro = South West England — Cornwall es = Sudoeste de Inglaterra — Cornualles + et = Edela-Inglismaa - Cornwall sv = Sydvästra England — Cornwall th = เซาท์เวสต์อิงแลนด์ — คอร์นวอลล์ tr = Güneybatı İngiltere — Cornwall @@ -33845,6 +34858,7 @@ pt = Midlands Ocidentais ro = West Midlands es = Midlands del Oeste + et = Lääne-Midlands sv = West Midlands th = เวสต์มิดแลนส์ tr = West Midlands @@ -33857,7 +34871,7 @@ sk = West Midlands [UK_England_Yorkshire and the Humber] - en = Yorkshire and the Humber + en = Yorkshire and the Humber ru = Йоркшир и Хамбер ar = يوركشاير وهامبر ca = Yorkshire and the Humber @@ -33877,6 +34891,7 @@ pt = Yorkshire e Humber ro = Yorkshire and the Humber es = Yorkshire y Humber + et = Yorkshire ja Humber sv = Yorkshire och Humber th = ยอร์กเชอร์และฮัมเบอร์ tr = Yorkshire ve Humber @@ -33909,6 +34924,7 @@ pt = Irlanda do Norte ro = Irlanda de Nord es = Irlanda del Norte + et = Põhja-Iirimaa sv = Nordirland th = ไอร์แลนด์เหนือ tr = Kuzey İrlanda @@ -33941,6 +34957,7 @@ pt = Escócia — Norte ro = Scoția — Nord es = Escocia — Norte + et = Šotimaa - Põhi sv = Skottland — Nord th = ประเทศสกอตแลนด์ — เหนือ tr = İskoçya — Kuzey @@ -33973,6 +34990,7 @@ pt = Escócia — Sul ro = Scoția — Sud es = Escocia — Sur + et = Šotimaa - Lõuna sv = Skottland — Syd th = ประเทศสกอตแลนด์ — ใต้ tr = İskoçya — Güney @@ -34005,6 +35023,7 @@ pt = País de Gales ro = Țara Galilor es = Gales + et = Wales sv = Wales th = ประเทศเวลส์ tr = Galler @@ -34037,6 +35056,7 @@ pt = Birmingham ro = Birmingham es = Birmingham + et = Birmingham sv = Birmingham th = เบอร์มิงแฮม tr = Birmingham @@ -34069,6 +35089,7 @@ pt = Montgomery ro = Montgomery, Alabama es = Montgomery + et = Montgomery sv = Montgomery, Alabama th = มอนต์กอเมอรี tr = Montgomery, Alabama @@ -34101,6 +35122,7 @@ pt = Alasca ro = Alaska es = Alaska + et = Alaska sv = Alaska th = รัฐอะแลสกา tr = Alaska @@ -34134,6 +35156,7 @@ pt = Flagstaff ro = Flagstaff es = Flagstaff + et = Flagstaff sv = Flagstaff th = แฟลกสแตฟฟ์ tr = Flagstaff @@ -34166,6 +35189,7 @@ pt = Phoenix ro = Phoenix es = Phoenix + et = Phoenix sv = Phoenix th = ฟีนิกซ์ tr = Phoenix @@ -34198,6 +35222,7 @@ pt = Tucson ro = Tucson, Arizona es = Tucson + et = Tucson sv = Tucson th = ทูซอน tr = Tucson @@ -34230,6 +35255,7 @@ pt = Arkansas ro = Arkansas es = Arkansas + et = Arkansas sv = Arkansas th = รัฐอาร์คันซอ tr = Arkansas @@ -34262,6 +35288,7 @@ pt = Bakersfield ro = Bakersfield, California es = Bakersfield + et = Bakersfield sv = Bakersfield th = เบเกอร์ฟิลด์ tr = Bakersfield, Kaliforniya @@ -34294,6 +35321,7 @@ pt = Lancaster ro = Lancaster es = Lancaster + et = Lancaster sv = Lancaster th = แลงคาสเตอร์ tr = Lancaster @@ -34326,6 +35354,7 @@ pt = Chico ro = Chico es = Chico + et = Chico sv = Chico, Kalifornien th = ชิโค tr = Chico, Kaliforniya @@ -34358,6 +35387,7 @@ pt = Los Angeles ro = Los Angeles es = Los Ángeles + et = Los Angeles sv = Los Angeles th = ลอสแอนเจลิส tr = Los Angeles @@ -34390,6 +35420,7 @@ pt = Los Angeles — Norte ro = Los Angeles — Nord es = Los Ángeles — Norte + et = Los Angeles — Põhi sv = Los Angeles — Nord th = ลอสแอนเจลิส — เหนือ tr = Los Angeles — Kuzey @@ -34422,6 +35453,7 @@ pt = Redding ro = Redding es = Redding + et = Redding sv = Redding th = เรดดิง tr = Redding @@ -34454,6 +35486,7 @@ pt = Fresno ro = Fresno es = Fresno + et = Fresno sv = Fresno th = เฟรสโน tr = Fresno @@ -34486,6 +35519,7 @@ pt = Sacramento ro = Sacramento, California es = Sacramento + et = Sacramento sv = Sacramento th = แซคราเมนโต tr = Sacramento @@ -34518,6 +35552,7 @@ pt = Stockton ro = Stockton, California es = Stockton + et = Stockton sv = Stockton, Kalifornien th = สต็อกตัน tr = Stockton @@ -34550,6 +35585,7 @@ pt = San Diego ro = San Diego es = San Diego + et = San Diego sv = San Diego th = แซนดีเอโก tr = San Diego @@ -34582,6 +35618,7 @@ pt = São Francisco ro = San Francisco es = San Francisco + et = San Francisco sv = San Francisco th = ซานฟรานซิสโก tr = San Francisco @@ -34614,6 +35651,7 @@ pt = Santa Cruz ro = Santa Cruz es = Santa Cruz + et = Santa Cruz sv = Santa Cruz th = ซานตา ครูซ tr = Santa Cruz @@ -34646,6 +35684,7 @@ pt = Aspen ro = Aspen es = Aspen + et = Aspen sv = Aspen th = แอสเพน tr = Aspen @@ -34678,6 +35717,7 @@ pt = Denver ro = Denver es = Denver + et = Denver sv = Denver th = เดนเวอร์ tr = Denver @@ -34710,6 +35750,7 @@ pt = Colorado — Sul ro = Colorado — Sud es = Colorado — Sur + et = Colorado — Lõuna sv = Colorado — Syd th = รัฐโคโลราโด — ใต้ tr = Colorado — Güney @@ -34742,6 +35783,7 @@ pt = Connecticut ro = Connecticut es = Connecticut + et = Connecticut sv = Connecticut th = รัฐคอนเนตทิคัต tr = Connecticut @@ -34774,6 +35816,7 @@ pt = Delaware ro = Delaware es = Delaware + et = Delaware sv = Delaware th = รัฐเดลาแวร์ tr = Delaware @@ -34806,6 +35849,7 @@ pt = Jacksonville ro = Jacksonville, Florida es = Jacksonville + et = Jacksonville sv = Jacksonville, Florida th = แจ็กสันวิลล์ tr = Jacksonville @@ -34838,6 +35882,7 @@ pt = Miami ro = Miami es = Miami + et = Miami sv = Miami th = ไมแอมี tr = Miami @@ -34870,6 +35915,7 @@ pt = Orlando ro = Orlando, Florida es = Orlando + et = Orlando sv = Orlando, Florida th = ออร์แลนโด tr = Orlando, Florida @@ -34902,6 +35948,7 @@ pt = Tampa ro = Tampa, Florida es = Tampa + et = Tampa sv = Tampa th = แทมปา tr = Tampa, Florida @@ -34934,6 +35981,7 @@ pt = Geórgia ro = Georgia es = Georgia + et = Georgia sv = Georgia th = รัฐจอร์เจีย tr = Georgia @@ -34966,6 +36014,7 @@ pt = Atlanta ro = Atlanta es = Atlanta + et = Atlanta sv = Atlanta th = แอตแลนตา tr = Atlanta @@ -34998,6 +36047,7 @@ pt = Macon ro = Macon es = Macon + et = Macon sv = Macon th = มาคอน tr = Macon @@ -35030,6 +36080,7 @@ pt = Geórgia — Norte ro = Georgia — Nord es = Georgia — Norte + et = Georgia - Põhi sv = Georgia — Nord th = รัฐจอร์เจีย — เหนือ tr = Georgia — Kuzey @@ -35062,6 +36113,7 @@ pt = Geórgia — Sul ro = Georgia — Sud es = Georgia — Sur + et = Georgia - Lõuna sv = Georgia — Syd th = รัฐจอร์เจีย — ใต้ tr = Georgia — Güney @@ -35094,6 +36146,7 @@ pt = Guam ro = Guam es = Guam + et = Guam sv = Guam th = กวม tr = Guam @@ -35126,6 +36179,7 @@ pt = Havaí ro = Hawaii es = Hawái + et = Hawaii sv = Hawaii th = รัฐฮาวาย tr = Hawaii @@ -35158,6 +36212,7 @@ pt = Idaho ro = Idaho es = Idaho + et = Idaho sv = Idaho th = รัฐไอดาโฮ tr = Idaho @@ -35190,6 +36245,7 @@ pt = Chicago ro = Chicago es = Chicago + et = Chicago sv = Chicago th = ชิคาโก tr = Şikago @@ -35222,6 +36278,7 @@ pt = Elgin ro = Elgin es = Elgin + et = Elgin sv = Elgin th = เอลจิน tr = Elgin @@ -35254,6 +36311,7 @@ pt = Rockford ro = Rockford es = Rockford + et = Rockford sv = Rockford th = ร็อกฟอร์ด tr = Rockford @@ -35286,6 +36344,7 @@ pt = Illinois — Sul ro = Illinois — Sud es = Illinois — Sur + et = Illinois - Lõuna sv = Illinois — Syd th = รัฐอิลลินอยส์ — ใต้ tr = Illinois — Güney @@ -35318,6 +36377,7 @@ pt = Springfield ro = Springfield es = Springfield + et = Springfield sv = Springfield th = สปริงฟิลด์ tr = Springfield @@ -35350,6 +36410,7 @@ pt = Indiana — Norte ro = Indiana — Nord es = Indiana — Norte + et = Indiana - Põhi sv = Indiana — Nord th = รัฐอินดีแอนา — เหนือ tr = Indiana — Kuzey @@ -35382,6 +36443,7 @@ pt = Indiana — Sul ro = Indiana — Sud es = Indiana — Sur + et = Indiana - Lõuna sv = Indiana — Syd th = รัฐอินดีแอนา — ใต้ tr = Indiana — Güney @@ -35414,6 +36476,7 @@ pt = Des Moines ro = Des Moines es = Des Moines + et = Des Moines sv = Des Moines th = ดิมอยน์ tr = Des Moines @@ -35446,6 +36509,7 @@ pt = Waterloo ro = Waterloo es = Waterloo + et = Waterloo sv = Waterloo th = วอเตอร์ลู tr = Waterloo @@ -35478,6 +36542,7 @@ pt = Iowa — Oeste ro = Iowa — Vest es = Iowa — Oeste + et = Iowa - Lääs sv = Iowa — Väst th = รัฐไอโอวา — ตะวันตก tr = Iowa — Batı @@ -35510,6 +36575,7 @@ pt = Kansas — Leste ro = Kansas — Est es = Kansas — Este + et = Kansas - Ida sv = Kansas — Öst th = รัฐแคนซัส — ตะวันออก tr = Kansas — Doğu @@ -35542,6 +36608,7 @@ pt = Kansas — Oeste ro = Kansas — Vest es = Kansas — Oeste + et = Kansas - Lääs sv = Kansas — Väst th = รัฐแคนซัส — ตะวันตก tr = Kansas — Batı @@ -35574,6 +36641,7 @@ pt = Kentucky — Leste ro = Kentucky — Est es = Kentucky — Este + et = Kentucky - Ida sv = Kentucky — Öst th = รัฐเคนทักกี — ตะวันออก tr = Kentucky — Doğu @@ -35606,6 +36674,7 @@ pt = Kentucky — Oeste ro = Kentucky — Vest es = Kentucky — Oeste + et = Kentucky - Lääs sv = Kentucky — Väst th = รัฐเคนทักกี — ตะวันตก tr = Kentucky — Batı @@ -35638,6 +36707,7 @@ pt = Luisiana — Oeste ro = Louisiana — Vest es = Luisiana — Oeste + et = Luisiana - Lääs sv = Louisiana — Väst th = รัฐลุยเซียนา — ตะวันตก tr = Louisiana — Batı @@ -35670,6 +36740,7 @@ pt = Nova Orleães ro = New Orleans es = Nueva Orleans + et = New Orleans sv = New Orleans th = นิวออร์ลีนส์ tr = New Orleans @@ -35702,6 +36773,7 @@ pt = Maine ro = Maine es = Maine + et = Maine sv = Maine th = รัฐเมน tr = Maine @@ -35734,6 +36806,7 @@ pt = Baltimore ro = Baltimore es = Baltimore + et = Baltimore sv = Baltimore th = บอลทิมอร์ tr = Baltimore @@ -35765,7 +36838,8 @@ pl = Zachód, Waszyngton pt = Oeste, Washington ro = Vest, Washington - es = Oeste, Washington D. C. + es = Oeste, Washington D.C. + et = Lääs, Washington D.C. sv = Väst, Washington, D.C. th = ตะวันตก, วอชิงตัน ดี.ซี. tr = Batı, Washington @@ -35798,6 +36872,7 @@ pt = Boston ro = Boston es = Boston + et = Boston sv = Boston th = บอสตัน tr = Boston @@ -35830,6 +36905,7 @@ pt = Worcester ro = Worcester, Massachusetts es = Worcester + et = Worcester sv = Worcester, Massachusetts th = วูสเตอร์ tr = Worcester, Massachusetts @@ -35862,6 +36938,7 @@ pt = Plymouth ro = Plymouth es = Plymouth + et = Plymouth sv = Plymouth th = ไพลมัต tr = Plymouth @@ -35894,6 +36971,7 @@ pt = Barnstable (Massachusetts) ro = Barnstable es = Barnstable (Massachusetts) + et = Barnstable sv = Barnstable th = บาร์นสตาเบิล tr = Barnstable @@ -35926,6 +37004,7 @@ pt = Springfield ro = Springfield, Massachusetts es = Springfield + et = Springfield sv = Springfield, Massachusetts th = สปริงฟิลด์ tr = Springfield, Massachusetts @@ -35958,6 +37037,7 @@ pt = Detroit ro = Detroit es = Detroit + et = Detroit sv = Detroit th = ดีทรอยต์ tr = Detroit @@ -35990,6 +37070,7 @@ pt = Michigan — Norte ro = Michigan — Nord es = Míchigan — Norte + et = Michigan — Põhi sv = Michigan — Nord th = รัฐมิชิแกน — เหนือ tr = Michigan — Kuzey @@ -36022,6 +37103,7 @@ pt = Michigan — Sul ro = Michigan — Sud es = Míchigan — Sur + et = Michigan — Lõuna sv = Michigan — Syd th = รัฐมิชิแกน — ใต้ tr = Michigan — Güney @@ -36054,6 +37136,7 @@ pt = Minneapolis ro = Minneapolis es = Mineápolis + et = Minneapolis sv = Minneapolis th = มินนีแอโพลิส tr = Minneapolis @@ -36086,6 +37169,7 @@ pt = Minnesota — Norte ro = Minnesota — Nord es = Minnesota — Norte + et = Minnesota — Põhi sv = Minnesota — Nord th = รัฐมินนิโซตา — เหนือ tr = Minnesota — Kuzey @@ -36118,6 +37202,7 @@ pt = Rochester ro = Rochester es = Rochester + et = Rochester sv = Rochester th = โรเชสเตอร์ tr = Rochester @@ -36150,6 +37235,7 @@ pt = St. Cloud ro = St. Cloud es = St. Cloud + et = St. Cloud sv = St. Cloud th = เซนต์ คลาวด์ tr = St. Cloud @@ -36182,6 +37268,7 @@ pt = Mississippi ro = Mississippi es = Misisipi + et = Mississippi sv = Mississippi th = รัฐมิสซิสซิปปี tr = Mississippi @@ -36214,6 +37301,7 @@ pt = Missouri — Leste ro = Missouri — Est es = Misuri — Este + et = Missouri — Ida sv = Missouri — Öst th = รัฐมิสซูรี — ตะวันออก tr = Missouri — Doğu @@ -36246,6 +37334,7 @@ pt = Missouri — Oeste ro = Missouri — Vest es = Misuri — Oeste + et = Missouri — Lääs sv = Missouri — Väst th = รัฐมิสซูรี — ตะวันตก tr = Missouri — Batı @@ -36278,6 +37367,7 @@ pt = Montana ro = Montana es = Montana + et = Montana sv = Montana th = รัฐมอนแทนา tr = Montana @@ -36310,6 +37400,7 @@ pt = Nebraska ro = Nebraska es = Nebraska + et = Nebraska sv = Nebraska th = รัฐเนแบรสกา tr = Nebraska @@ -36342,6 +37433,7 @@ pt = Nevada ro = Nevada es = Nevada + et = Nevada sv = Nevada th = รัฐเนวาดา tr = Nevada @@ -36374,6 +37466,7 @@ pt = Nova Hampshire ro = New Hampshire es = Nuevo Hampshire + et = New Hampshire sv = New Hampshire th = รัฐนิวแฮมป์เชียร์ tr = New Hampshire @@ -36406,6 +37499,7 @@ pt = Nova Jérsei — Norte ro = New Jersey — Nord es = Nueva Jersey — Norte + et = New Jersey — Põhi sv = New Jersey — Nord th = รัฐนิวเจอร์ซีย์ — เหนือ tr = New Jersey — Kuzey @@ -36438,6 +37532,7 @@ pt = Nova Jérsei — Sul ro = New Jersey — Sud es = Nueva Jersey — Sur + et = New Jersey — Lõuna sv = New Jersey — Syd th = รัฐนิวเจอร์ซีย์ — ใต้ tr = New Jersey — Güney @@ -36470,6 +37565,7 @@ pt = Novo México ro = New Mexico es = Nuevo México + et = New Mexico sv = New Mexico th = รัฐนิวเม็กซิโก tr = New Mexico @@ -36490,6 +37586,7 @@ da = New York — Long Island de = New York — Long Island es = Nueva York — Long Island + et = New York — Long Island fi = New York — Long Island fr = New York — Long Island hu = New York — Long Island @@ -36534,6 +37631,7 @@ pt = Nova Iorque — Nova Iorque ro = New York — New York es = Nueva York — Nueva York + et = New York — New York City sv = New York — New York th = รัฐนิวยอร์ก — นครนิวยอร์ก tr = New York — New York @@ -36566,6 +37664,7 @@ pt = Nova Iorque — Norte ro = New York — Nord es = Nueva York — Norte + et = New York — Põhi sv = New York — Nord th = รัฐนิวยอร์ก — เหนือ tr = New York — Kuzey @@ -36598,6 +37697,7 @@ pt = Nova Iorque — Oeste ro = New York — Vest es = Nueva York — Oeste + et = New York — Lääs sv = New York — Väst th = รัฐนิวยอร์ก — ตะวันตก tr = New York — Batı @@ -36630,6 +37730,7 @@ pt = Asheville ro = Asheville es = Asheville + et = Asheville sv = Asheville th = แอชวิลล์ tr = Asheville @@ -36662,6 +37763,7 @@ pt = Charlotte ro = Charlotte, Carolina de Nord es = Charlotte + et = Charlotte sv = Charlotte, North Carolina th = ชาร์ลอตต์ tr = Charlotte, Kuzey Karolina @@ -36694,6 +37796,7 @@ pt = Greensboro ro = Greensboro, Carolina de Nord es = Greensboro + et = Greensboro sv = Greensboro, North Carolina th = กรีนส์โบโร tr = Greensboro @@ -36726,6 +37829,7 @@ pt = Raleigh ro = Raleigh, Carolina de Nord es = Raleigh + et = Raleigh sv = Raleigh, North Carolina th = ราลี tr = Raleigh, Kuzey Karolina @@ -36758,6 +37862,7 @@ pt = Wilmington ro = Wilmington es = Wilmington + et = Wilmington sv = Wilmington, North Carolina th = วิลมิงตัน tr = Wilmington, Kuzey Karolina @@ -36790,6 +37895,7 @@ pt = Wilson ro = Wilson, North Carolina es = Wilson + et = Wilson sv = Wilson, North Carolina th = วิลสัน tr = Wilson @@ -36822,6 +37928,7 @@ pt = Bismarck ro = Bismarck, Dakota de Nord es = Bismarck + et = Bismarck sv = Bismarck, North Dakota th = บิสมาร์ก tr = Bismarck @@ -36854,6 +37961,7 @@ pt = Fargo ro = Fargo, Dakota de Nord es = Fargo + et = Fargo sv = Fargo, North Dakota th = ฟาร์โก tr = Fargo, Kuzey Dakota @@ -36886,6 +37994,7 @@ pt = Minot ro = Minot, Dakota de Nord es = Minot + et = Minot sv = Minot th = ไมนอต tr = Minot @@ -36918,6 +38027,7 @@ pt = Cleveland ro = Cleveland es = Cleveland + et = Cleveland sv = Cleveland th = คลีฟแลนด์ tr = Cleveland @@ -36950,6 +38060,7 @@ pt = Dayton ro = Dayton es = Dayton + et = Dayton sv = Dayton th = เดย์ทัน tr = Dayton @@ -36982,6 +38093,7 @@ pt = Oklahoma — Leste ro = Oklahoma — Est es = Oklahoma — Este + et = Oklahoma — Ida sv = Oklahoma — Öst th = รัฐโอคลาโฮมา — ตะวันออก tr = Oklahoma — Doğu @@ -37014,6 +38126,7 @@ pt = Oklahoma — Oeste ro = Oklahoma — Vest es = Oklahoma — Oeste + et = Oklahoma - Lääs sv = Oklahoma — Väst th = รัฐโอคลาโฮมา — ตะวันตก tr = Oklahoma — Batı @@ -37038,6 +38151,7 @@ de = Eugene el = Γιουτζίν es = Eugene + et = Eugene fa = یوجین، اورگن fi = Eugene fr = Eugene @@ -37089,6 +38203,7 @@ pt = Portland ro = Portland, Oregon es = Portland + et = Portland sv = Portland th = พอร์ตแลนด์ tr = Portland, Oregon @@ -37109,6 +38224,7 @@ da = Oregon — Øst de = Oregon — Osten es = Oregón — Este + et = Oregon - Ida fi = Oregon — Itä fr = Oregon — Est hu = Oregon — Kelet @@ -37153,6 +38269,7 @@ pt = Altoona (Pensilvânia) ro = Altoona es = Altoona (Pensilvania) + et = Altoona sv = Altoona, Pennsylvania th = อัลทูนา tr = Altoona @@ -37185,6 +38302,7 @@ pt = Pittsburgh ro = Pittsburgh, Pennsylvania es = Pittsburgh + et = Pittsburgh sv = Pittsburgh th = พิตต์สเบิร์ก tr = Pittsburgh @@ -37217,6 +38335,7 @@ pt = Reading ro = Reading es = Reading + et = Reading sv = Reading th = เรดดิง tr = Reading @@ -37249,6 +38368,7 @@ pt = Scranton ro = Scranton es = Scranton + et = Scranton sv = Scranton th = สกรันตัน tr = Scranton @@ -37281,6 +38401,7 @@ pt = Porto Rico ro = Puerto Rico es = Puerto Rico + et = Puerto Rico sv = Puerto Rico th = เปอร์โตริโก tr = Porto Riko @@ -37313,6 +38434,7 @@ pt = Rhode Island ro = Rhode Island es = Rhode Island + et = Rhode Island sv = Rhode Island th = รัฐโรดไอแลนด์ tr = Rhode Island @@ -37345,6 +38467,7 @@ pt = Colúmbia ro = Columbia, Carolina de Sud es = Columbia + et = Columbia sv = Columbia, South Carolina th = โคลัมเบีย tr = Columbia, Güney Karolina @@ -37377,6 +38500,7 @@ pt = Florence ro = Florence es = Florence + et = Florence sv = Florence, South Carolina th = ฟลอเรนซ์ tr = Florence @@ -37409,6 +38533,7 @@ pt = Dakota do Sul ro = Dakota de Sud es = Dakota del Sur + et = Lõuna-Dakota sv = South Dakota th = รัฐเซาท์ดาโคตา tr = Güney Dakota @@ -37441,6 +38566,7 @@ pt = Tennessee — Leste ro = Tennessee — Est es = Tennessee — Este + et = Tennessee — Ida sv = Tennessee — Öst th = รัฐเทนเนสซี — ตะวันออก tr = Tennessee — Doğu @@ -37473,6 +38599,7 @@ pt = Tennessee — Oeste ro = Tennessee — Vest es = Tennessee — Oeste + et = Tennessee — Lääs sv = Tennessee — Väst th = รัฐเทนเนสซี — ตะวันตก tr = Tennessee — Batı @@ -37505,6 +38632,7 @@ pt = Austin ro = Austin es = Austin + et = Austin sv = Austin th = ออสติน tr = Austin @@ -37537,6 +38665,7 @@ pt = Dallas ro = Dallas es = Dallas + et = Dallas sv = Dallas th = แดลลัส tr = Dallas @@ -37569,6 +38698,7 @@ pt = Houston ro = Houston es = Houston + et = Houston sv = Houston th = ฮิวสตัน tr = Houston @@ -37601,6 +38731,7 @@ pt = Amarillo ro = Amarillo, Texas es = Amarillo + et = Amarillo sv = Amarillo th = อะมาริลโล tr = Amarillo @@ -37633,6 +38764,7 @@ pt = San Antonio ro = San Antonio es = San Antonio + et = San Antonio sv = San Antonio th = แซนแอนโทนีโอ tr = San Antonio @@ -37665,6 +38797,7 @@ pt = Laredo ro = Laredo, Texas es = Laredo + et = Laredo sv = Laredo, Texas th = ลาเรโด tr = Laredo, Teksas @@ -37697,6 +38830,7 @@ pt = Tyler ro = Tyler es = Tyler + et = Tyler sv = Tyler th = ไทเลอร์ tr = Tyler @@ -37729,6 +38863,7 @@ pt = Waco ro = Waco, Texas es = Waco + et = Waco sv = Waco, Texas th = วาโค tr = Waco @@ -37761,6 +38896,7 @@ pt = Odessa ro = Odessa es = Odessa + et = Odessa sv = Odessa, Texas th = โอเดซซา tr = Odessa, Teksas @@ -37793,6 +38929,7 @@ pt = Ilhas Menores Distantes dos Estados Unidos ro = Insulele Minore Îndepărtate ale Statelor Unite es = Islas ultramarinas de Estados Unidos + et = USA väikesed kõrvalsaared sv = Förenta staternas mindre öar i Oceanien och Västindien th = เกาะเล็กรอบนอกของสหรัฐอเมริกา tr = United States Minor Outlying Islands @@ -37825,6 +38962,7 @@ pt = Utah ro = Utah es = Utah + et = Utah sv = Utah th = รัฐยูทาห์ tr = Utah @@ -37857,6 +38995,7 @@ pt = Vermont ro = Vermont es = Vermont + et = Vermont sv = Vermont th = รัฐเวอร์มอนต์ tr = Vermont @@ -37889,6 +39028,7 @@ pt = Chesapeake ro = Chesapeake, Virginia es = Chesapeake + et = Chesapeake sv = Chesapeake, Virginia th = เชซาพีค tr = Chesapeake @@ -37921,6 +39061,7 @@ pt = Lynchburg ro = Lynchburg es = Lynchburg + et = Lynchburg sv = Lynchburg th = ลินช์เบิร์ก tr = Lynchburg @@ -37953,6 +39094,7 @@ pt = Richmond ro = Richmond es = Richmond + et = Richmond sv = Richmond th = ริชมอนด์ tr = Richmond @@ -37985,6 +39127,7 @@ pt = Roanoke ro = Roanoke es = Roanoke + et = Roanoke sv = Roanoke th = โรอันโนค tr = Roanoke @@ -38017,6 +39160,7 @@ pt = Tacoma ro = Tacoma es = Tacoma + et = Tacoma sv = Tacoma th = ทาโคมา tr = Tacoma @@ -38049,6 +39193,7 @@ pt = Seattle ro = Seattle es = Seattle + et = Seattle sv = Seattle th = ซีแอตเทิล tr = Seattle @@ -38081,6 +39226,7 @@ pt = Yakima ro = Yakima es = Yakima + et = Yakima sv = Yakima th = ยาคิมา tr = Yakima @@ -38113,6 +39259,7 @@ pt = Virgínia Ocidental ro = Virginia de Vest es = Virginia Occidental + et = Lääne-Virginia sv = West Virginia th = รัฐเวสต์เวอร์จิเนีย tr = Batı Virginia @@ -38145,6 +39292,7 @@ pt = Milwaukee ro = Milwaukee es = Milwaukee + et = Milwaukee sv = Milwaukee th = มิลวอกี tr = Milwaukee @@ -38179,6 +39327,7 @@ ro = Wisconsinul de Nord es = Norte de Wisconsin es-MX = Norte de Wisconsin + et = Põhja-Wisconsin sv = Norra Wisconsin th = วิสคอนซินตอนเหนือ tr = Kuzey Wisconsin @@ -38213,6 +39362,7 @@ pt = Wyoming ro = Wyoming es = Wyoming + et = Wyoming sv = Wyoming th = รัฐไวโอมิง tr = Wyoming @@ -38245,6 +39395,7 @@ pt = Uganda ro = Uganda es = Uganda + et = Uganda eu = Uganda sv = Uganda th = ประเทศยูกันดา @@ -38279,6 +39430,7 @@ pt = Ucrânia ro = Ucraina es = Ucrania + et = Ukraina eu = Ukraina sv = Ukraina th = ประเทศยูเครน @@ -38313,6 +39465,7 @@ pt = Oblast de Tcherkássi ro = Regiunea Cerkasî es = Óblast de Cherkasy + et = Tšerkassi oblast sv = Tjerkasy oblast th = แคว้นปกครองตนเองเชอร์คาซี tr = Çerkası Oblastı @@ -38345,6 +39498,7 @@ pt = Oblast de Chernigov ro = Regiunea Cernigău es = Óblast de Chernihiv + et = Tšernihivi oblast sv = Tjernihiv oblast th = แคว้นปกครองตนเองเชอร์นิฮิฟ tr = Çernigov Oblastı @@ -38377,6 +39531,7 @@ pt = Oblast de Chernivtsi ro = Regiunea Cernăuți es = Óblast de Chernivtsi + et = Tšernivtsi oblast sv = Tjernivtsi oblast th = แคว้นปกครองตนเองเชอร์นิฟซี tr = Çernovtsi Oblastı @@ -38409,6 +39564,7 @@ pt = Oblast de Dnipropetrovsk ro = Regiunea Dniepropetrovsk es = Óblast de Dnipropetrovsk + et = Dnipropetrovski oblast sv = Dnipropetrovsk oblast th = แคว้นปกครองตนเองดนิพรอเพโทรวสก์ tr = Dnipropetrovsk Oblastı @@ -38441,6 +39597,7 @@ pt = Oblast de Donetsk ro = Regiunea Donețk es = Óblast de Donetsk + et = Donetski oblast sv = Donetsk oblast th = แคว้นปกครองตนเองโดเนตสก์ tr = Donetsk Oblastı @@ -38473,6 +39630,7 @@ pt = Oblast de Ivano-Frankivsk ro = Regiunea Ivano-Frankivsk es = Óblast de Ivano-Frankivsk + et = Ivano-Frankivski oblast sv = Ivano-Frankivsk oblast th = แคว้นปกครองตนเองอิวาโน-แฟรงกิฟสก์ tr = İvano-Frankivsk Oblastı @@ -38505,6 +39663,7 @@ pt = Oblast de Kharkiv ro = Regiunea Harkov es = Óblast de Járkov + et = Harkivi oblast sv = Charkiv oblast th = แคว้นปกครองตนเองคาร์คิฟ tr = Harkiv Oblastı @@ -38537,6 +39696,7 @@ pt = Oblast de Kherson ro = Regiunea Herson es = Óblast de Jersón + et = Hersoni oblast sv = Cherson oblast th = แคว้นปกครองตนเองเคอร์ซัน tr = Herson Oblastı @@ -38569,6 +39729,7 @@ pt = Oblast de Khmelnitski ro = Regiunea Hmelnițki es = Óblast de Jmelnitski + et = Hmelnõtski oblast sv = Chmelnytskyj oblast th = แคว้นปกครองตนเองคเมลนิตสกี tr = Hmelnitski Oblastı @@ -38601,6 +39762,7 @@ pt = Oblast de Kirovogrado ro = Regiunea Kirovohrad es = Óblast de Kirovogrado + et = Kirovohradi oblast sv = Kirovohrad oblast th = แคว้นปกครองตนเองคิโรโวราด tr = Kirovograd Oblastı @@ -38633,6 +39795,7 @@ pt = Oblast de Kiev ro = Regiunea Kiev es = Óblast de Kiev + et = Kiievi oblast sv = Kiev oblast th = แคว้นปกครองตนเองเคียฟ tr = Kiev Oblastı @@ -38665,6 +39828,7 @@ pt = Oblast de Lugansk ro = Regiunea Luhansk es = Óblast de Lugansk + et = Luhanski oblast sv = Luhansk oblast th = แคว้นปกครองตนเองลูฮันสก์ tr = Luhansk Oblastı @@ -38697,6 +39861,7 @@ pt = Oblast de Lviv ro = Regiunea Liov es = Óblast de Leópolis + et = Lvivi oblast sv = Lviv oblast th = แคว้นปกครองตนเองลวิฟ tr = Lviv Oblastı @@ -38729,6 +39894,7 @@ pt = Oblast de Mikolaiv ro = Regiunea Mîkolaiv es = Óblast de Mykolaiv + et = Mykolaivi oblast sv = Mykolajiv oblast th = แคว้นปกครองตนเองไมโคลาอิฟ tr = Mıkolayiv Oblastı @@ -38761,6 +39927,7 @@ pt = Oblast de Odessa ro = Regiunea Odesa es = Óblast de Odesa + et = Odessa oblast sv = Odessa oblast th = แคว้นปกครองตนเองโอเดสซา tr = Odessa Oblastı @@ -38793,6 +39960,7 @@ pt = oblast de Poltava ro = Regiunea Poltava es = Óblast de Poltava + et = Poltava oblast sv = Poltava oblast th = แคว้นปกครองตนเองโพลตาวา tr = Poltava Oblastı @@ -38825,6 +39993,7 @@ pt = Oblast de Rivne ro = Regiunea Rivne es = Óblast de Rivne + et = Rivne oblast sv = Rivne oblast th = แคว้นปกครองตนเองไรฟวน์ tr = Rivne Oblastı @@ -38857,6 +40026,7 @@ pt = Oblast de Sumi ro = Regiunea Sumî es = Óblast de Sumy + et = Sumy oblast sv = Sumy oblast th = แคว้นปกครองตนเองซูมี tr = Sumi Oblastı @@ -38889,6 +40059,7 @@ pt = Oblast de Ternopil ro = Regiunea Ternopil es = Óblast de Ternópil + et = Ternopili oblast sv = Ternopil oblast th = แคว้นปกครองตนเองเทอร์โนพิล tr = Ternopil Oblastı @@ -38921,6 +40092,7 @@ pt = Oblast de Vinnitsa ro = Regiunea Vinița es = Óblast de Vinnytsia + et = Vinnõtsja oblast sv = Vinnytsia oblast th = แคว้นปกครองตนเองวินนีเซีย tr = Vinnitsa Oblastı @@ -38953,6 +40125,7 @@ pt = Oblast de Volínia ro = Regiunea Volîn es = Óblast de Volyn + et = Volõni oblast sv = Volyn oblast th = แคว้นปกครองตนเองโวลิน tr = Volın Oblastı @@ -38985,6 +40158,7 @@ pt = Oblast da Transcarpátia ro = Regiunea Transcarpatia es = Óblast de Zakarpatia + et = Zakarpattia oblast sv = Zakarpattia oblast th = แคว้นปกครองตนเองซาคาร์พาเทีย tr = Zakarpatya Oblastı @@ -39017,6 +40191,7 @@ pt = Oblast de Zaporíjia ro = Regiunea Zaporoje es = Óblast de Zaporiyia + et = Zaporižžja oblast sv = Zaporizjzja oblast th = แคว้นปกครองตนเองซาพอริซาซา tr = Zaporijya Oblastı @@ -39049,6 +40224,7 @@ pt = Oblast de Jitomir ro = Regiunea Jîtomîr es = Óblast de Zhytomyr + et = Žõtomõri oblast sv = Zjytomyr oblast th = แคว้นปกครองตนเองไซโตไมร์ tr = Jitomir Oblastı @@ -39081,6 +40257,7 @@ pt = Emirados Árabes Unidos ro = Emiratele Arabe Unite es = Emiratos Árabes Unidos + et = Araabia Ühendemiraadid eu = Arabiar Emirerri Batuak sv = Förenade Arabemiraten th = สหรัฐอาหรับเอมิเรตส์ @@ -39115,6 +40292,7 @@ pt = Reino Unido ro = Regatul Unit al Marii Britanii și al Irlandei de Nord es = Reino Unido + et = Ühendkuningriik eu = Erresuma Batua sv = Storbritannien th = สหราชอาณาจักร @@ -39149,6 +40327,7 @@ pt = Ilhas Virgens Americanas ro = Insulele Virgine Americane es = Islas Vírgenes de los Estados Unidos + et = Ameerika Ühendriikide Neitsisaared eu = Estatu Batuetako Birjina Uharteak sv = Amerikanska Jungfruöarna th = หมู่เกาะเวอร์จินของสหรัฐอเมริกา @@ -39182,6 +40361,7 @@ pt = Estados Unidos ro = Statele Unite ale Americii es = Estados Unidos + et = Ameerika Ühendriigid eu = Ameriketako Estatu Batuak sv = USA th = สหรัฐอเมริกา @@ -39216,6 +40396,7 @@ pt = Uruguai ro = Uruguay es = Uruguay + et = Uruguay eu = Uruguai sv = Uruguay th = ประเทศอุรุกวัย @@ -39250,6 +40431,7 @@ pt = Uzbequistão ro = Uzbekistan es = Uzbekistán + et = Usbekistan eu = Uzbekistan sv = Uzbekistan th = ประเทศอุซเบกิสถาน @@ -39284,6 +40466,7 @@ pt = Vanuatu ro = Vanuatu es = Vanuatu + et = Vanuatu eu = Vanuatu sv = Vanuatu th = ประเทศวานูอาตู @@ -39317,6 +40500,7 @@ pt = Venezuela ro = Venezuela es = Venezuela + et = Venezuela eu = Venezuela sv = Venezuela th = ประเทศเวเนซุเอลา @@ -39351,6 +40535,7 @@ pt = Vietname ro = Vietnam es = Vietnam + et = Vietnam eu = Vietnam sv = Vietnam th = ประเทศเวียดนาม @@ -39385,6 +40570,7 @@ pt = Virgínia ro = Virginia es = Virginia + et = Virginia eu = Virginia sv = Virginia th = รัฐเวอร์จิเนีย @@ -39418,6 +40604,7 @@ pt = Wallis e Futuna ro = Wallis și Futuna es = Wallis y Futuna + et = Wallis ja Futuna eu = Wallis eta Futuna sv = Wallis- och Futunaöarna th = วาลลิสและฟุตูนา @@ -39451,6 +40638,7 @@ pt = Washington ro = Washington es = Washington + et = Washington eu = Washington sv = Washington th = รัฐวอชิงตัน @@ -39484,6 +40672,7 @@ pt = Ilha Willis ro = Insula Willis es = Isla Willis + et = Willise saar eu = Willis uhartea sv = Willis th = เกาะวิลลิส @@ -39517,6 +40706,7 @@ pt = Wisconsin ro = Wisconsin es = Wisconsin + et = Wisconsin eu = Wisconsin sv = Wisconsin th = รัฐวิสคอนซิน @@ -39550,6 +40740,7 @@ pt = Iémen ro = Yemen es = Yemen + et = Jeemen eu = Yemen sv = Jemen th = ประเทศเยเมน @@ -39584,6 +40775,7 @@ pt = Zâmbia ro = Zambia es = Zambia + et = Sambia eu = Zambia sv = Zambia th = ประเทศแซมเบีย @@ -39618,6 +40810,7 @@ pt = Zimbábue ro = Zimbabwe es = Zimbabue + et = Zimbabwe eu = Zimbabwe sv = Zimbabwe th = ประเทศซิมบับเว @@ -39652,6 +40845,7 @@ pt = Santa Fé ro = Provincia Santa Fe es = Santa Fe + et = Santa Fe maakond sv = Santa Fe th = รัฐซานตาเฟ tr = Santa Fe eyaleti @@ -39684,6 +40878,7 @@ pt = Brisbane ro = Brisbane es = Brisbane + et = Brisbane sv = Brisbane th = บริสเบน tr = Brisbane @@ -39716,6 +40911,7 @@ pt = Sydney ro = Sydney es = Sídney + et = Sydney sv = Sydney th = ซิดนีย์ tr = Sidney @@ -39748,6 +40944,7 @@ pt = Estíria — Graz ro = Stiria — Graz es = Estiria — Graz + et = Steiermark – Graz sv = Steiermark — Graz th = รัฐสติเรีย — กราซ tr = Steiermark — Graz @@ -39780,6 +40977,7 @@ pt = Estíria — Leoben ro = Stiria — Leoben es = Estiria — Leoben + et = Steiermark – Leoben sv = Steiermark — Leoben th = สตีเรีย — ลีโอเบน tr = Styria — Leoben @@ -39812,6 +41010,7 @@ pt = Alta Áustria — Linz ro = Austria Superioară — Linz es = Alta Austria — Linz + et = Ülem-Austria — Linz sv = Oberösterreich — Linz th = รัฐอัปเปอร์ออสเตรีย — ลินซ์ tr = Yukarı Avusturya — Linz @@ -39844,6 +41043,7 @@ pt = Alta Áustria — Wels ro = Austria Superioară — Wels es = Alta Austria — Wels + et = Ülem-Austria - Wels sv = Oberösterreich — Wels th = ออสเตรียรเหนือ — เวลส์ tr = Yukarı Avusturya — Wels @@ -39876,6 +41076,7 @@ pt = Goiás — Brasília ro = Goiás — Brasília es = Goiás — Brasilia + et = Goiás — Brasilia sv = Goiás — Brasília th = รัฐโกยาส — บราซีเลีย tr = Goiás — Brasília @@ -39908,6 +41109,7 @@ pt = Goiás — Norte ro = Goiás — Nord es = Goiás — Norte + et = Goiás - Põhi sv = Goiás — Nord th = รัฐโกยาส — เหนือ tr = Goiás — Kuzey @@ -39940,6 +41142,7 @@ pt = Região Norte do Brasil — Leste ro = Regiunea de Nord — partea estică es = Región Norte de Brasil — Este + et = Põhjapiirkond - Ida sv = Norra regionen — Öst th = ภูมิภาคเหนือ — ตะวันออก tr = Kuzey Bölgesi — Doğu @@ -39972,6 +41175,7 @@ pt = Região Norte do Brasil — Oeste ro = Regiunea de Nord — partea vestică es = Región Norte de Brasil — Oeste + et = Põhjapiirkond - Lääs sv = Norra regionen — Väst th = ภูมิภาคเหนือ — ตะวันตก tr = Kuzey Bölgesi — Batı @@ -40004,6 +41208,7 @@ pt = Região Nordeste do Brasil — Leste ro = Regiunea de Nord-Est - partea estică es = Región Nordeste de Brasil — Este + et = Kirdepiirkond - Ida sv = Nordöstra regionen — Öst th = ภูมิภาคตะวันออกเฉียงเหนือ — ตะวันออก tr = Kuzeydoğu Bölgesi — Doğu @@ -40036,6 +41241,7 @@ pt = Região Nordeste do Brasil — Oeste ro = Regiunea de Nord-Vest — partea vestică es = Región Nordeste de Brasil — Oeste + et = Kirdepiirkond - Lääs sv = Nordöstra regionen — Väst th = ภูมิภาคตะวันออกเฉียงเหนือ — ตะวันตก tr = Kuzeydoğu Bölgesi — Batı @@ -40068,6 +41274,7 @@ pt = Paraná — Leste ro = Paraná — Est es = Paraná — Este + et = Paraná - Ida sv = Paraná — Öst th = รัฐปารานา — ตะวันออก tr = Paraná — Doğu @@ -40100,6 +41307,7 @@ pt = Paraná — Oeste ro = Paraná — Vest es = Paraná — Oeste + et = Paraná - Lääs sv = Paraná — Väst th = รัฐปารานา — ตะวันตก tr = Paraná — Batı @@ -40132,6 +41340,7 @@ pt = Região Sul do Brasil — Leste ro = Regiunea de Sud — partea estică es = Región Sur de Brasil — Este + et = Lõunapiirkond - Ida sv = Södra regionen — Öst th = ภูมิภาคใต้ — ตะวันออก tr = Güneydoğu Bölgesi — Doğu @@ -40164,6 +41373,7 @@ pt = Região Sul do Brasil — Oeste ro = Regiunea de Sud — partea vestică es = Región Sur de Brasil — Oeste + et = Lõunapiirkond - Lääs sv = Södra regionen — Väst th = ภูมิภาคใต้ — ตะวันตก tr = Güneydoğu Bölgesi — Batı @@ -40196,6 +41406,7 @@ pt = Bulgária — Leste ro = Bulgaria — Est es = Bulgaria — Este + et = Bulgaaria - Ida sv = Bulgarien — Öst th = ประเทศบัลแกเรีย — ตะวันออก tr = Bulgaristan — Doğu @@ -40228,6 +41439,7 @@ pt = Bulgária — Oeste ro = Bulgaria — Vest es = Bulgaria — Oeste + et = Bulgaaria - Lääs sv = Bulgarien — Väst th = ประเทศบัลแกเรีย — ตะวันตก tr = Bulgaristan — Batı @@ -40260,6 +41472,7 @@ pt = Wawa ro = Wawa es = Wawa + et = Wawa sv = Wawa (ort i Kanada) th = วาวา tr = Wawa @@ -40292,6 +41505,7 @@ pt = Chile — Centro ro = Chile — Centru es = Chile — Centro + et = Tšiili - Keskosa sv = Chile — Central th = ประเทศชิลี — กลาง tr = Şili — Merkez @@ -40324,6 +41538,7 @@ pt = Kivu ro = Kivu es = Kivu + et = Kivu sv = Kivu th = กิวู tr = Kivu @@ -40356,6 +41571,7 @@ pt = República Democrática do Congo — Oeste ro = Republica Democrată Congo — Vest es = República Democrática del Congo — Oeste + et = Kongo - Lääs sv = Kongo-Kinshasa — Väst th = สาธารณรัฐประชาธิปไตยคองโก — ตะวันตก tr = Demokratik Kongo Cumhuriyeti — Batı @@ -40388,6 +41604,7 @@ pt = Croácia — Centro ro = Croația — Centru es = Croacia — Centro + et = Horvaatia - Keskosa sv = Kroatien — Central th = ประเทศโครเอเชีย — กลาง tr = Hırvatistan — Merkez @@ -40420,6 +41637,7 @@ pt = Croácia — Oeste ro = Croația — Vest es = Croacia — Oeste + et = Horvaatia - Lääs sv = Kroatien — Väst th = ประเทศโครเอเชีย — ตะวันตก tr = Hırvatistan — Batı @@ -40452,6 +41670,7 @@ pt = Equador — Leste ro = Ecuador — Est es = Ecuador — Este + et = Ecuador - Ida sv = Ecuador — Öst th = ประเทศเอกวาดอร์ — ตะวันออก tr = Ekvador — Doğu @@ -40484,6 +41703,7 @@ pt = Equador — Oeste ro = Ecuador — Vest es = Ecuador — Oeste + et = Ecuador - Lääs sv = Ecuador — Väst th = ประเทศเอกวาดอร์ — ตะวันตก tr = Ekvador — Batı @@ -40516,6 +41736,7 @@ pt = Finlândia Oriental — Norte ro = Finlanda de Est — Nord es = Finlandia Oriental — Norte + et = Ida-Soome — Põhi sv = Östra Finlands län — Nord th = ฟินแลนด์ตะวันออก — เหนือ tr = Doğu Finlandiya — Kuzey @@ -40548,6 +41769,7 @@ pt = Finlândia Oriental — Sul ro = Finlanda de Est — Sud es = Finlandia Oriental — Sur + et = Ida-Soome — Lõuna sv = Östra Finlands län — Syd th = ฟินแลนด์ตะวันออก — ใต้ tr = Doğu Finlandiya — Güney @@ -40580,6 +41802,7 @@ pt = Finlândia Ocidental — Jyväskylä ro = Finlanda de Vest — Jyväskylä es = Finlandia Occidental — Jyväskylä + et = Lääne-Soome - Jyväskylä sv = Västra Finlands län — Jyväskylä th = ฟินแลนด์ตะวันตก — วีแวสไคแล tr = Batı Finlandiya — Jyväskylä @@ -40612,6 +41835,7 @@ pt = Finlândia Ocidental — Tampere ro = Finlanda de Vest — Tampere es = Finlandia Occidental — Tampere + et = Lääne-Soome - Tampere sv = Västra Finlands län — Tammerfors th = ฟินแลนด์ตะวันตก — แทมเปเร tr = Batı Finlandiya — Tampere @@ -40644,6 +41868,7 @@ pt = Franco-Condado — Norte ro = Franche-Comté — Nord es = Franco Condado — Norte + et = Franche-Comté - Põhi sv = Franche-Comté — Nord th = แคว้นฟร็องช์-กงเต — เหนือ tr = Franche-Comté — Kuzey @@ -40676,6 +41901,7 @@ pt = Franco-Condado — Sul ro = Franche-Comté — Sud es = Franco Condado — Sur + et = Franche-Comté - Lõuna sv = Franche-Comté — Syd th = แคว้นฟร็องช์-กงเต — ใต้ tr = Franche-Comté — Güney @@ -40708,6 +41934,7 @@ pt = Loire-Atlantique — Nantes ro = Loire-Atlantique — Nantes es = Loira Atlántico — Nantes + et = Loire-Atlantique — Nantes sv = Loire-Atlantique — Nantes th = จังหวัดลัวรัตล็องติก — น็องต์ tr = Loire-Atlantique — Nantes @@ -40740,6 +41967,7 @@ pt = Loire-Atlantique — Saint-Nazaire ro = Loire-Atlantique — Saint-Nazaire es = Loira Atlántico — Saint-Nazaire + et = Loire-Atlantique — Saint-Nazaire sv = Loire-Atlantique — Saint-Nazaire th = จังหวัดลัวรัตล็องติก — แซ็ง-นาแซร์ tr = Loire-Atlantik — Saint-Nazaire @@ -40772,6 +42000,7 @@ pt = Alta Baviera — Sul ro = Oberbayern — Sud es = Alta Baviera — Sur + et = Ülem-Baieri - Lõuna sv = Oberbayern — Syd th = อัปเปอร์บาวาเรีย — ใต้ tr = Oberbayern — Güney @@ -40804,6 +42033,7 @@ pt = Karnataka — Norte ro = Karnataka — Nord es = Karnataka — Norte + et = Karnataka - Põhi sv = Karnataka — Nord th = รัฐกรณาฏกะ — เหนือ tr = Karnataka — Kuzey @@ -40837,6 +42067,7 @@ pt = Karnataka — Sul ro = Karnataka — Sud es = Karnataka — Sur + et = Karnataka - Lõuna sv = Karnataka — Syd th = รัฐกรณาฏกะ — ใต้ tr = Karnataka — Güney @@ -40870,6 +42101,7 @@ pt = Irão — Leste ro = Iran — Est es = Irán — Este + et = Iraan - Ida sv = Iran — Öst th = ประเทศอิหร่าน — ตะวันออก tr = İran — Doğu @@ -40902,6 +42134,7 @@ pt = Iraque — Norte ro = Irak — Nord es = Irak — Norte + et = Iraak - Põhi sv = Irak — Nord th = ประเทศอิรัก — เหนือ tr = Irak — Kuzey @@ -40934,6 +42167,7 @@ pt = Iraque — Sul ro = Irak — Sud es = Irak — Sur + et = Iraak - Lõuna sv = Irak — Syd th = ประเทศอิรัก — ใต้ tr = Irak — Güney @@ -40966,6 +42200,7 @@ pt = Aichi — Nagoia ro = Prefectura Aichi — Nagoya es = Prefectura de Aichi — Nagoya + et = Aichi — Nagoya sv = Aichi prefektur — Nagoya th = จังหวัดไอชิ — นะโงะยะ tr = Aichi — Nagoya @@ -40998,6 +42233,7 @@ pt = Aichi — Toyohashi ro = Prefectura Aichi — Toyohashi es = Prefectura de Aichi — Toyohashi + et = Aichi — Toyohashi sv = Aichi prefektur — Toyohashi th = จังหวัดไอชิ — โทะโยะฮะชิ tr = Aichi — Toyohashi @@ -41030,6 +42266,7 @@ pt = Sapporo ro = Sapporo es = Sapporo + et = Sapporo sv = Sapporo th = ซัปโปะโระ tr = Sapporo @@ -41062,6 +42299,7 @@ pt = Osaka ro = Osaka es = Osaka + et = Osaka sv = Osaka th = โอซะกะ tr = Osaka @@ -41094,6 +42332,7 @@ pt = Osaka — Oeste ro = Prefectura Osaka — Vest es = Prefectura de Osaka — Oeste + et = Osaka - Lääs sv = Osaka prefektur — Väst th = จังหวัดโอซะกะ — ตะวันตก tr = Osaka ili — Batı @@ -41126,6 +42365,7 @@ pt = Cazaquistão — Norte ro = Kazahstan — Nord es = Kazajistán — Norte + et = Kasahstan - Põhi sv = Kazakstan — Nord th = ประเทศคาซัคสถาน — เหนือ tr = Kazakistan — Kuzey @@ -41158,6 +42398,7 @@ pt = Cazaquistão — Sul ro = Kazahstan — Sud es = Kazajistán — Sur + et = Kasahstan - Lõuna sv = Kazakstan — Syd th = ประเทศคาซัคสถาน — ใต้ tr = Kazakistan — Güney @@ -41190,6 +42431,7 @@ pt = Lituânia — Leste ro = Lituania — Est es = Lituania — Este + et = Leedu - Ida sv = Litauen — Öst th = ประเทศลิทัวเนีย — ตะวันออก tr = Litvanya — Doğu @@ -41222,6 +42464,7 @@ pt = Lituânia — Oeste ro = Lituania — Vest es = Lituania — Oeste + et = Leedu - Lääs sv = Litauen — Väst th = ประเทศลิทัวเนีย — ตะวันตก tr = Litvanya — Batı @@ -41254,6 +42497,7 @@ pt = Chihuahua ro = Chihuahua es = Chihuahua + et = Chihuahua sv = Chihuahua th = รัฐชีวาวา tr = Chihuahua @@ -41286,6 +42530,7 @@ pt = Sonora ro = Sonora es = Sonora + et = Sonora sv = Sonora th = รัฐโซโนรา tr = Sonora @@ -41318,6 +42563,7 @@ pt = Catmandu ro = Kathmandu es = Katmandú + et = Kathmandu sv = Katmandu th = กาฐมาณฑุ tr = Katmandu @@ -41350,6 +42596,7 @@ pt = Centro ro = Regiunea centrală es = Región Central + et = Keskpiirkond sv = Centrala regionen th = ภูมิภาคกลาง tr = Merkez Bölgesi @@ -41382,6 +42629,7 @@ pt = Região Leste ro = Regiunea estică es = región de desarrollo Este + et = Idapiirkond sv = Östra regionen th = ภูมิภาคตะวันออก tr = Doğu Bölgesi @@ -41414,6 +42662,7 @@ pt = Nigéria — Norte ro = Nigeria — Nord es = Nigeria — Norte + et = Nigeeria - Põhi sv = Nigeria — Nord th = ประเทศไนจีเรีย — เหนือ tr = Nijerya — Kuzey @@ -41446,6 +42695,7 @@ pt = Nigéria — Sul ro = Nigeria — Sud es = Nigeria — Sur + et = Nigeeria - Lõuna sv = Nigeria — Syd th = ประเทศไนจีเรีย — ใต้ tr = Nijerya — Güney @@ -41478,6 +42728,7 @@ pt = Hordaland ro = Hordaland es = Hordaland + et = Hordaland sv = Hordaland fylke th = ฮอร์ดาแลนด์ tr = Hordaland @@ -41510,6 +42761,7 @@ pt = Nordland ro = Nordland es = Nordland + et = Nordland sv = Nordland fylke th = นอร์ดแลนด์ tr = Nordland @@ -41542,6 +42794,7 @@ pt = Nord-Trøndelag ro = Nord-Trøndelag es = Nord-Trøndelag + et = Põhja-Trøndelag sv = Nord-Trøndelag fylke th = นอร์ด-ทรอนเดอลาก tr = Nord-Trøndelag @@ -41574,6 +42827,7 @@ pt = Rogaland ro = Rogaland es = Rogaland + et = Rogaland sv = Rogaland fylke th = โรกาแลนด์ tr = Rogaland @@ -41606,6 +42860,7 @@ pt = Sør-Trøndelag ro = Sør-Trøndelag es = Sør-Trøndelag + et = Sør-Trøndelag sv = Sør-Trøndelag fylke th = โซร์-ทรอนเดอลาก tr = Sør-Trøndelag @@ -41638,6 +42893,7 @@ pt = Lima ro = Lima es = Lima + et = Lima sv = Lima th = ลิมา tr = Lima @@ -41670,6 +42926,7 @@ pt = Ilhas de Portugal ro = Insule portugheze es = Archipiélagos e islas de Portugal + et = Portugali saared sv = Portugals öar th = เกาะในประเทศโปรตุเกส tr = Portekiz'deki adalar @@ -41702,6 +42959,7 @@ pt = Viseu ro = Viseu es = Viseu + et = Viseu sv = Viseu th = วีเซว tr = Viseu @@ -41734,6 +42992,7 @@ pt = Krai de Krasnoiarsk — Norte ro = Ținutul Krasnoiarsk — Nord es = Krasnoyarsk — Norte + et = Krasnojarski krai - Põhi sv = Krasnojarsk kraj — Nord th = สาธารณรัฐคราสโนยาสก์ — เหนือ tr = Krasnoyarsk Krayı — Kuzey @@ -41766,6 +43025,7 @@ pt = Krai de Krasnoiarsk — Sul ro = Ținutul Krasnoiarsk — Sud es = Krasnoyarsk — Sur + et = Krasnojarski krai - Lõuna sv = Krasnojarsk kraj — Syd th = สาธารณรัฐคราสโนยาสก์ — ใต้ tr = Krasnoyarsk Krayı — Güney @@ -41798,6 +43058,7 @@ pt = Oblast de Moscou — Leste ro = Regiunea Moscova — Est es = Óblast de Moscú — Este + et = Moskva oblast - Ida sv = Moskva oblast — Öst th = แคว้นปกครองตนเองมอสโกว — ตะวันออก tr = Moskova Oblastı — Doğu @@ -41830,6 +43091,7 @@ pt = Oblast de Moscou — Oeste ro = Regiunea Moscova — Vest es = Óblast de Moscú — Oeste + et = Moskva oblast - Lääs sv = Moskva oblast — Väst th = แคว้นปกครองตนเองมอสโกว — ตะวันตก tr = Moskova Oblastı — Batı @@ -41862,6 +43124,7 @@ pt = Krai de Perm — Norte ro = Ținutul Perm — Nord es = Perm — Norte + et = Permi krai - Põhi sv = Perm kraj — Nord th = สาธารณรัฐเพิร์ม — เหนือ tr = Perm Krayı — Kuzey @@ -41894,6 +43157,7 @@ pt = Krai de Perm — Sul ro = Ținutul Perm — Sud es = Perm — Sur + et = Permi krai - Lõuna sv = Perm kraj — Syd th = สาธารณรัฐเพิร์ม — ใต้ tr = Perm Krayı — Güney @@ -41926,6 +43190,7 @@ pt = República da Carélia — Norte ro = Republica Carelia — Nord es = República de Carelia — Norte + et = Karjala Vabariik - Põhi sv = Karelska republiken — Nord th = สาธารณรัฐคาเรลียา — เหนือ tr = Karelya Cumhuriyeti — Kuzey @@ -41958,6 +43223,7 @@ pt = República da Carélia — Sul ro = Republica Carelia — Sud es = República de Carelia — Sur + et = Karjala Vabariik - Lõuna sv = Karelska republiken — Syd th = สาธารณรัฐคาเรลียา — ใต้ tr = Karelya Cumhuriyeti — Güney @@ -41990,6 +43256,7 @@ pt = Oblast de Sverdlovsk — Norte ro = Regiunea Sverdlovsk — Nord es = Sverdlovsk — Norte + et = Sverdlovski oblast - Põhi sv = Sverdlovsk oblast — Nord th = แคว้นปกครองตนเองสเวอร์ดอฟสก์ — เหนือ tr = Sverdlovsk Oblastı — Kuzey @@ -42022,6 +43289,7 @@ pt = Oblast de Sverdlovsk — Ecaterimburgo ro = Regiunea Sverdlovsk — Ekaterinburg es = Sverdlovsk — Ekaterimburgo + et = Sverdlovski oblast - Jekaterinburg sv = Sverdlovsk oblast — Jekaterinburg th = แคว้นปกครองตนเองสเวอร์ดอฟสก์ — เยไครตินเบิร์ก tr = Sverdlovsk Oblastı — Yekaterinburg @@ -42054,6 +43322,7 @@ pt = Khantia-Mansia — Khanty-Mansiysk ro = Districtul autonom Hantî-Mansi — Hantî-Mansiisk es = Janti-Mansi — Janti-Mansisk + et = Yugra - Hantõ-Mansiiski sv = Chantien-Mansien — Chanty-Mansijsk th = ยูกรา — คานตี-แมนสิสก์ tr = Hantı-Mansi Özerk Okrugu — Hantı-Mansiysk @@ -42086,6 +43355,7 @@ pt = Yugra - Surgut ro = Districtul autonom Hantî-Mansi — Surgut es = Janti-Mansi — Surgut + et = Yugra — Surgut sv = Chantien-Mansien — Surgut th = ยูกรา — เซอร์กุต tr = Hantı-Mansi Özerk Okrugu — Surgut @@ -42118,6 +43388,7 @@ pt = Arábia Saudita — Norte ro = Arabia Saudită — Nord es = Arabia Saudita — Norte + et = Saudi Araabia - Põhi sv = Saudiarabien — Nord th = ประเทศซาอุดีอาระเบีย — เหนือ tr = Suudi Arabistan — Kuzey @@ -42150,6 +43421,7 @@ pt = Arábia Saudita — Sul ro = Arabia Saudită — Sud es = Arabia Saudita — Sur + et = Saudi Araabia - Lõuna sv = Saudiarabien — Syd th = ประเทศซาอุดีอาระเบีย — ใต้ tr = Suudi Arabistan — Güney @@ -42182,6 +43454,7 @@ pt = Eslovénia — Leste ro = Slovenia — Est es = Eslovenia — Este + et = Sloveenia - Ida sv = Slovenien — Öst th = ประเทศสโลวีเนีย — ตะวันออก tr = Slovenya — Doğu @@ -42214,6 +43487,7 @@ pt = Eslovénia — Oeste ro = Slovenia — Vest es = Eslovenia — Oeste + et = Sloveenia - Lääs sv = Slovenien — Väst th = ประเทศสโลวีเนีย — ตะวันตก tr = Slovenya — Batı @@ -42246,6 +43520,7 @@ pt = Andaluzia — Granada ro = Andaluzia — Granada es = Andalucía — Granada + et = Andaluusia - Granada eu = Andaluzia — Granada sv = Andalusien — Granada th = แคว้นอันดาลูซีอา — กรานาดา @@ -42279,6 +43554,7 @@ pt = Andaluzia — Sevilha ro = Andaluzia — Sevilla es = Andalucía — Sevilla + et = Andaluusia - Sevilla eu = Andaluzia — Sevilla sv = Andalusien — Sevilla th = แคว้นอันดาลูซีอา — เซบียา @@ -42312,6 +43588,7 @@ pt = Castela e Leão — Leste ro = Castilia și León — Est es = Castilla y León — Este + et = Kastiilia ja León – Ida eu = Gaztela eta Leon — Ekialdea sv = Kastilien och León — Öst th = แคว้นคาสตีลและเลออน — ตะวันออก @@ -42345,6 +43622,7 @@ pt = Castela e Leão — Oeste ro = Castilia și León — Vest es = Castilla y León — Oeste + et = Kastiilia ja León – Lääs eu = Gaztela eta Leon — Mendebaldea sv = Kastilien och León — Väst th = แคว้นคาสตีลและเลออน — ตะวันตก @@ -42378,6 +43656,7 @@ pt = Galiza — Norte ro = Galicia — Nord es = Galicia — Norte + et = Galicia - Põhi eu = Galizia — Iparra sv = Galicien — Nord th = แคว้นกาลิเซีย — เหนือ @@ -42411,6 +43690,7 @@ pt = Galiza — Sul ro = Galicia — Sud es = Galicia — Sur + et = Galicia — Lõuna eu = Galizia — Hegoa sv = Galicien — Syd th = แคว้นกาลิเซีย — ใต้ @@ -42444,6 +43724,7 @@ pt = Sudão — Leste ro = Sudan — Est es = Sudán — Este + et = Sudaan - Ida sv = Sudan — Öst th = ประเทศซูดาน — ตะวันออก tr = Sudan — Doğu @@ -42476,6 +43757,7 @@ pt = Sudão — Oeste ro = Sudan — Vest es = Sudán — Oeste + et = Sudaan - Lääs sv = Sudan — Väst th = ประเทศซูดาน — ตะวันตก tr = Sudan — Batı @@ -42508,6 +43790,7 @@ pt = Estocolmo ro = Stockholm es = Estocolmo + et = Stockholm sv = Stockholm th = สตอกโฮล์ม tr = Stockholm @@ -42540,6 +43823,7 @@ pt = Espace Mittelland - Bern ro = Spațiul Mittelland - Bern es = Mittelland — Berna + et = Espace Mittelland — Bern sv = Espace Mittelland — Bern th = เอสเปส มิตเตลลัน — เบิร์น tr = Espace Mittelland @@ -42572,6 +43856,7 @@ pt = Espace Mittelland - East ro = Spațiul Mittelland - partea estică es = Mittelland — Este + et = Espace Mittelland — Ida sv = Espace Mittelland — Östra th = เอสเปส มิตเตลลัน — ตะวันออก tr = Espace Mittelland @@ -42604,6 +43889,7 @@ pt = República da China — Norte ro = Taiwan — Nord es = República de China — Norte + et = Taiwan - Põhi sv = Taiwan — Nord th = ประเทศไต้หวัน — เหนือ tr = Çin Cumhuriyeti — Kuzey @@ -42636,6 +43922,7 @@ pt = República da China — Sul ro = Taiwan — Sud es = República de China — Sur + et = Taiwan - Lõuna sv = Taiwan — Syd th = ประเทศไต้หวัน — ใต้ tr = Çin Cumhuriyeti — Güney @@ -42668,6 +43955,7 @@ pt = Tailândia — Centro ro = Thailanda — Centru es = Tailandia — Centro + et = Tai - Keskosa sv = Thailand — Central th = ประเทศไทย — กลาง tr = Tayland — Merkez @@ -42700,6 +43988,7 @@ pt = Região da Anatólia Central — Ancara ro = Regiunea Anatolia Centrală — Ankara es = Región de Anatolia Central — Ankara + et = Kesk-Anatoolia - Ankara sv = Centrala Anatolien — Ankara th = อนาโตเลียกลาง — แอนการา tr = İç Anadolu Bölgesi — Ankara @@ -42732,6 +44021,7 @@ pt = Região da Anatólia Central — Kayseri ro = Regiunea Anatolia Centrală — Kayseri es = Región de Anatolia Central — Kayseri + et = Kesk-Anatoolia - Kayseri sv = Centrala Anatolien — Kayseri th = อนาโตเลียกลาง — เคย์เซรี tr = İç Anadolu Bölgesi — Kayseri @@ -42764,6 +44054,7 @@ pt = Região de Mármara — Bursa ro = Regiunea Marmara — Bursa es = Región del Mármara — Bursa + et = Marmara piirkond - Bursa sv = Marmara-regionen – Bursa th = ภูมิภาคมาร์มารา — เบอร์ซา tr = Marmara Bölgesi — Bursa @@ -42796,6 +44087,7 @@ pt = Região de Mármara — Istambul ro = Regiunea Marmara — Istanbul es = Región del Mármara — Estambul + et = Marmara piirkond - Istanbul sv = Marmara-regionen — Istanbul th = ภูมิภาคมาร์มารา — อิสตันบูล tr = Marmara Bölgesi — İstanbul @@ -42828,6 +44120,7 @@ pt = Arkansas — Norte ro = Arkansas — Nord es = Arkansas — Norte + et = Arkansas - Põhi sv = Arkansas — Nord th = รัฐอาร์คันซอ — เหนือ tr = Arkansas — Kuzey @@ -42860,6 +44153,7 @@ pt = Arkansas — Sul ro = Arkansas — Sud es = Arkansas — Sur + et = Arkansas - Lõuna sv = Arkansas — Syd th = รัฐอาร์คันซอ — ใต้ tr = Arkansas — Güney @@ -42892,6 +44186,7 @@ pt = Gainesville ro = Gainesville es = Gainesville + et = Gainesville sv = Gainesville th = เกนสวิลล์ tr = Gainesville @@ -42924,6 +44219,7 @@ pt = Idaho — Norte ro = Idaho — Nord es = Idaho — Norte + et = Idaho - Põhi sv = Idaho — Nord th = รัฐไอดาโฮ — เหนือ tr = Idaho — Kuzey @@ -42956,6 +44252,7 @@ pt = Idaho — Sul ro = Idaho — Sud es = Idaho — Sur + et = Idaho - Lõuna sv = Idaho — Syd th = รัฐไอดาโฮ — ใต้ tr = Idaho — Güney @@ -42988,6 +44285,7 @@ pt = Evansville ro = Evansville es = Evansville + et = Evansville sv = Evansville th = เอวันส์วิลล์ tr = Evansville @@ -43020,6 +44318,7 @@ pt = Indianápolis ro = Indianapolis es = Indianápolis + et = Indianapolis sv = Indianapolis th = อินเดียแนโพลิส tr = Indianapolis @@ -43052,6 +44351,7 @@ pt = Wichita ro = Wichita, Kansas es = Wichita + et = Wichita sv = Wichita, Kansas th = วิชิทอ tr = Wichita, Kansas @@ -43084,6 +44384,7 @@ pt = Louisville ro = Louisville es = Louisville + et = Louisville sv = Louisville th = ลุยส์วิลล์ tr = Louisville @@ -43116,6 +44417,7 @@ pt = Grand Rapids ro = Grand Rapids es = Grand Rapids + et = Grand Rapids sv = Grand Rapids th = แกรนด์แรปิดส์ tr = Grand Rapids @@ -43148,6 +44450,7 @@ pt = Lansing ro = Lansing es = Lansing + et = Lansing sv = Lansing th = แลนซิง tr = Lansing @@ -43180,6 +44483,7 @@ pt = Gulfport ro = Gulfport es = Gulfport + et = Gulfport sv = Gulfport th = กัลฟ์พอร์ต tr = Gulfport @@ -43212,6 +44516,7 @@ pt = Mississippi — Norte ro = Mississippi — Nord es = Misisipi — Norte + et = Mississippi - Põhi sv = Mississippi — Nord th = รัฐมิสซิสซิปปี — เหนือ tr = Mississippi — Kuzey @@ -43244,6 +44549,7 @@ pt = Kansas City ro = Kansas City es = Kansas City + et = Kansas City sv = Kansas City th = แคนซัสซิตี tr = Kansas City @@ -43276,6 +44582,7 @@ pt = Springfield ro = Springfield es = Springfield + et = Springfield sv = Springfield th = สปริงฟิลด์ tr = Springfield @@ -43308,6 +44615,7 @@ pt = St. Louis ro = Saint Louis, Missouri es = San Luis + et = St. Louis sv = Saint Louis th = เซนต์หลุยส์ tr = St. Louis @@ -43340,6 +44648,7 @@ pt = Montana — Leste ro = Montana — Est es = Montana — Este + et = Montana - Ida sv = Montana — Öst th = รัฐมอนแทนา — ตะวันออก tr = Montana — Doğu @@ -43372,6 +44681,7 @@ pt = Montana — Oeste ro = Montana — Vest es = Montana — Oeste + et = Montana - Lääs sv = Montana — Väst th = รัฐมอนแทนา — ตะวันตก tr = Montana — Batı @@ -43404,6 +44714,7 @@ pt = Nebraska — Leste ro = Nebraska — Est es = Nebraska — Este + et = Nebraska - Ida sv = Nebraska — Öst th = รัฐเนแบรสกา — ตะวันออก tr = Nebraska — Doğu @@ -43436,6 +44747,7 @@ pt = Nebraska — Oeste ro = Nebraska — Vest es = Nebraska — Oeste + et = Nebraska - Lääs sv = Nebraska — Väst th = รัฐเนแบรสกา — ตะวันตก tr = Nebraska — Batı @@ -43468,6 +44780,7 @@ pt = Albuquerque ro = Albuquerque, New Mexico es = Albuquerque + et = Albuquerque sv = Albuquerque th = แอลบูเคอร์คี tr = Albuquerque @@ -43500,6 +44813,7 @@ pt = Roswell ro = Roswell, New Mexico es = Roswell + et = Roswell sv = Roswell, New Mexico th = รอสเวลล์ tr = Roswell @@ -43532,6 +44846,7 @@ pt = Cincinnati ro = Cincinnati es = Cincinnati + et = Cincinnati sv = Cincinnati th = ซินซินแนติ tr = Cincinnati @@ -43564,6 +44879,7 @@ pt = Columbus ro = Columbus es = Columbus + et = Columbus sv = Columbus th = โคลัมบัส tr = Columbus @@ -43596,6 +44912,7 @@ pt = Toledo ro = Toledo, Ohio es = Toledo + et = Toledo sv = Toledo, Ohio th = โทเลโด tr = Toledo, Ohio @@ -43628,6 +44945,7 @@ pt = Oklahoma City ro = Oklahoma City es = Oklahoma City + et = Oklahoma City sv = Oklahoma City th = โอคลาโฮมาซิตี tr = Oklahoma City @@ -43660,6 +44978,7 @@ pt = Tulsa ro = Tulsa es = Tulsa + et = Tulsa sv = Tulsa th = ทัลซา tr = Tulsa @@ -43692,6 +45011,7 @@ pt = Charleston ro = Charleston, Carolina de Sud es = Charleston + et = Charleston sv = Charleston, South Carolina th = ชาร์ลสตัน tr = Charleston, Güney Karolina @@ -43724,6 +45044,7 @@ pt = Amarillo ro = Amarillo, Texas es = Amarillo + et = Amarillo sv = Amarillo th = อะมาริลโล tr = Amarillo @@ -43756,6 +45077,7 @@ pt = Lubbock ro = Lubbock, Texas es = Lubbock + et = Lubbock sv = Lubbock th = ลับบอก tr = Lubbock, Teksas @@ -43788,6 +45110,7 @@ pt = Utah — Norte ro = Utah — Nord es = Utah — Norte + et = Utah — Põhi sv = Utah — Nord th = รัฐยูทาห์ — เหนือ tr = Utah — Kuzey @@ -43820,6 +45143,7 @@ pt = Utah — Sul ro = Utah — Sud es = Utah — Sur + et = Utah - Lõuna sv = Utah — Syd th = รัฐยูทาห์ — ใต้ tr = Utah — Güney @@ -43852,6 +45176,7 @@ pt = Alexandria (Virgínia) ro = Alexandria, Virginia es = Alexandria + et = Alexandria sv = Alexandria th = อเล็กซานเดรีย tr = Alexandria @@ -43884,6 +45209,7 @@ pt = Eau Claire ro = Eau Claire es = Eau Claire + et = Eau Claire sv = Eau Claire th = โอแคลร์ tr = Eau Claire @@ -43916,6 +45242,7 @@ pt = Madison ro = Madison es = Madison + et = Madison sv = Madison th = เมดิสัน tr = Madison @@ -43948,6 +45275,7 @@ pt = Venezuela — Norte ro = Venezuela — Nord es = Venezuela — Norte + et = Venezuela - Põhi sv = Venezuela — Nord th = ประเทศเวเนซุเอลา — เหนือ tr = Venezuela — Kuzey @@ -43980,6 +45308,7 @@ pt = Venezuela — Sul ro = Venezuela — Sud es = Venezuela — Sur + et = Venezuela - Lõuna sv = Venezuela — Syd th = ประเทศเวเนซุเอลา — ใต้ tr = Venezuela — Güney @@ -44012,6 +45341,7 @@ pt = Buenos Aires ro = Buenos Aires es = Buenos Aires + et = Buenos Aires sv = Buenos Aires th = บัวโนสไอเรส tr = Buenos Aires @@ -44044,6 +45374,7 @@ pt = Lachute ro = Lachute es = Lachute + et = Lachute sv = Lachute th = ลาชูต tr = Lachute @@ -44076,6 +45407,7 @@ pt = Regina ro = Regina, Saskatchewan es = Regina + et = Regina sv = Regina, Saskatchewan th = เรจินา tr = Regina @@ -44108,6 +45440,7 @@ pt = Saskatoon ro = Saskatoon es = Saskatoon + et = Saskatoon sv = Saskatoon th = ซาสคาตูน tr = Saskatoon @@ -44140,6 +45473,7 @@ pt = Brunsvique ro = Braunschweig es = Brunswick + et = Braunschweig sv = Braunschweig th = เบราน์ชไวก์ tr = Braunschweig @@ -44172,6 +45506,7 @@ pt = Saxônia-Anhalt — Halle an der Saale ro = Saxonia-Anhalt — Halle es = Sajonia-Anhalt — Halle + et = Saksimaa-Anhalt - Halle sv = Sachsen-Anhalt — Halle an der Saale th = แซกโซนี-แอนฮอลต์ — แฮล tr = Saksonya-Anhalt — Halle @@ -44204,6 +45539,7 @@ pt = Saxônia-Anhalt — Magdeburgo ro = Saxonia-Anhalt — Magdeburg es = Sajonia-Anhalt — Magdeburgo + et = Saksimaa-Anhalt - Magdeburg sv = Sachsen-Anhalt — Magdeburg th = รัฐแซกโซนี-อันฮัลต์ — มักเดบูร์ก tr = Saksonya-Anhalt — Magdeburg @@ -44236,6 +45572,7 @@ pt = Schleswig-Holstein — Flensburg ro = Schleswig-Holstein — Flensburg es = Schleswig-Holstein — Flensburgo + et = Schleswig-Holstein — Flensburg sv = Schleswig-Holstein — Flensburg th = รัฐชเลสวิก-โฮลชไตน์ — เฟลนส์บูร์ก tr = Schleswig-Holstein — Flensburg @@ -44268,6 +45605,7 @@ pt = Schleswig-Holstein — Kiel ro = Schleswig-Holstein — Kiel es = Schleswig-Holstein — Kiel + et = Schleswig-Holstein — Kiel sv = Schleswig-Holstein — Kiel th = รัฐชเลสวิก-โฮลชไตน์ — คีล tr = Schleswig-Holstein — Kiel @@ -44300,6 +45638,7 @@ pt = Porto ro = Porto es = Oporto + et = Porto sv = Porto th = โปร์ตู tr = Porto @@ -44332,6 +45671,7 @@ pt = Noroeste da Inglaterra — Lancaster ro = North West England — Lancaster es = Noroeste de Inglaterra — Lancaster + et = Loode-Inglismaa – Lancaster sv = Nordvästra England — Lancaster th = อังกฤษตะวันตกเฉียงเหนือ — แลงคาสเตอร์ tr = Kuzey-Batı İngiltere — Lancaster @@ -44364,6 +45704,7 @@ pt = Noroeste da Inglaterra — Manchester ro = North West England — Manchester es = Noroeste de Inglaterra — Mánchester + et = Loode-Inglismaa – Manchester sv = Nordvästra England — Manchester th = นอร์ทเวสต์อิงแลนด์ — แมนเชสเตอร์ tr = Kuzey-Batı İngiltere — Manchester @@ -44396,6 +45737,7 @@ pt = Gainesville ro = Gainesville es = Gainesville + et = Gainesville sv = Gainesville th = เกนสวิลล์ tr = Gainesville @@ -44428,6 +45770,7 @@ pt = Victoria ro = Victoria es = Victoria + et = Victoria sv = Victoria, Texas th = วิกตอเรีย tr = Victoria @@ -44460,6 +45803,7 @@ pt = Norfolk ro = Norfolk, Virginia es = Norfolk + et = Norfolk sv = Norfolk, Virginia th = นอร์โฟล์ก tr = Norfolk, Virginia @@ -44552,6 +45896,7 @@ pt = Argel, Orã ro = Alger es = Argel, Orán, Constantina + et = Alžiir, Oran, Constantine sv = Alger th = แอลเจียร์ tr = Cezayir, Konstantin @@ -44613,6 +45958,7 @@ en = McMurdo Station, Stația științifică chileeană „Villa Las Estrellas”, Rocky Cove ru = Мак-Мёрдо el = Σταθμός McMurdo, Στατία Στιντιφίκα χιλεάνα „Villa Las Estrellas”, Ρίκι κόουβ + et = McMurdo jaam, Stația științifică Tšiili "Villa Las Estrellas", Rocky Cove [Antigua and Barbuda Description] en = St. John's, English Harbour, Freetown @@ -44633,6 +45979,7 @@ el = Σαιντ Τζονς, Ίνγκλις Χάρμπορ, Φριτάουν he = סנט ג'ונס sk = Saint John’s + et = St. John's, Inglise sadam, Freetown [Argentina_Buenos Aires_Buenos Aires Description] en = Buenos Aires, José C. Paz, González Catán @@ -44728,6 +46075,7 @@ pt = Erevan ro = Erevan es = Ereván + et = Jerevan, Ashtarak, Gyumri sv = Jerevan th = เยเรวาน tr = Erivan @@ -44880,6 +46228,7 @@ pt = Viena ro = Viena es = Viena + et = Viin, Wiener Neustadt sv = Wien th = เวียนนา tr = Viyana @@ -44969,6 +46318,7 @@ uk = Баку el = Μπακού, Σουμκάγιτ, Γκιαντζά sk = Baku + et = Baku, Sumgayit, Ganja [Bahrain Description] en = Manama, Riffa, Muharraq @@ -45120,6 +46470,7 @@ el = Αμβέρσα, Ζβιντρέχτ, Μπέρχεμ he = אנטוורפן sk = Antverpy + et = Antwerpen, Zwijndrecht, Berchem [Belgium_East Flanders Description] en = Ghent, Deinze, Sint-Martens-Latem @@ -45158,6 +46509,7 @@ pt = Bruxelas ro = Bruxelles es = Bruselas + et = Brüssel, Schaerbeek – Schaarbeek, Anderlecht sv = Bryssel th = บรัสเซลส์ tr = Brüksel @@ -46393,6 +47745,7 @@ pt = Pequim ro = Beijing es = Pekín + et = Peking, Tianjin, Shijiazhuang sv = Beijing th = ปักกิ่ง tr = Pekin @@ -46788,6 +48141,7 @@ pt = Sebastopol ro = Sevastopol, Kerci es = Sebastopol, Simferópol, Kerch + et = Sevastopol, Simferopol, Kertš sv = Kertj tr = Sivastopol, Kerç uk = Севастополь, Сімферополь, Керч @@ -46964,6 +48318,7 @@ pt = Praga ro = Praga es = Praga + et = Praha, Netluky sv = Prag th = ปราก tr = Prag @@ -47050,6 +48405,7 @@ pt = Copenhaga ro = Copenhaga es = Copenhague + et = Kopenhaagen, Skovlunde, Virum sv = Köpenhamn th = โคเปนเฮเกน tr = Kopenhag @@ -47215,6 +48571,7 @@ pt = Cairo ro = Cairo es = El Cairo, Alejandría + et = Kairo, Alexandria, Giza sv = Kairo th = ไคโร tr = Kahire @@ -47336,6 +48693,7 @@ ja = スタンリー ko = 스탠리 es = Puerto Argentino + et = Stanley, Falklandi saared, Dunnose Head, Port Edgar uk = Порт-Стенлі el = Στάνλεϋ, Νήσοι Φάλκλαντ, Ντάνοζ Χεντ, Πορτ Έντγκαρ he = סטנלי @@ -47420,6 +48778,7 @@ el = Ελσίνκι, Έσποο, Βάνταα he = הלסינקי sk = Helsinki + et = Helsingi, Espoo, Vantaa [Finland_Southern Finland_Lappeenranta Description] en = Kouvola, Lappeenranta, Kotka @@ -47792,6 +49151,7 @@ ko = 파리 pl = Paryż es = París + et = Pariis, Campagne à Paris sv = Paris th = ปารีส uk = Париж @@ -48241,6 +49601,7 @@ pl = Nicea pt = Nice es = Niza + et = Nizza, Antibes, Cannes uk = Ніцца el = Νίκαια, Αντίμπ, Κάννες @@ -48512,6 +49873,7 @@ pt = Berlim ro = Berlin es = Berlín + et = Berliin, Falkenberg, Siedlung Grüneck sv = Berlin th = เบอร์ลิน tr = Berlin @@ -48588,6 +49950,7 @@ pl = Norymberga pt = Nuremberga es = Núremberg + et = Nürnberg, Fürth, Erlangen uk = Фюрт el = Νυρεμβέργη, Φιρτ, Ερλάνγκεν sk = Norimberg @@ -48645,6 +50008,7 @@ pl = Monachium pt = Munique es = Múnich + et = München, Dachau tr = Münih uk = Дахау vi = München @@ -48917,6 +50281,7 @@ pt = Colônia ro = Köln es = Colonia + et = Köln, Bonn, Leverkusen sv = Köln th = โคโลญ tr = Köln @@ -49095,6 +50460,7 @@ cs = Gibraltár el = Γιβραλτάρ, Καταλαν, Μπέι sk = Gibraltár + et = Gibraltar, Kataloonia laht [Greece_Decentralized Administration of Aegean Description] en = Kos, Parikia, Naoussa @@ -49126,6 +50492,7 @@ pt = Atenas ro = Atena es = Atenas + et = Ateena, Egaleo, Kamatero sv = Aten th = เอเธนส์ tr = Atina @@ -49809,6 +51176,7 @@ pt = Teerã ro = Teheran es = Teherán, Tabriz + et = Teheran, Karaj, Tabriz sv = Teheran th = เตหะราน tr = Tahran, Tebriz @@ -49866,6 +51234,7 @@ pt = Bagdade, Nassíria ro = Nassiriya es = Bagdad, Nasiriya + et = Bagdad, Karbala, Nasiriyah sv = Bagdad th = แบกแดด tr = Bağdat @@ -49992,6 +51361,7 @@ sv = Neapel uk = Неаполь, Салерно el = Νάπολη, Σαλέρνο, Τόρε ελ Γκρέκο + et = Napoli, Salerno, Torre del Greco he = נפולי sk = Neapol @@ -50124,6 +51494,7 @@ pt = Roma ro = Roma es = Roma + et = Rooma, Latina, Fiumicino sv = Rom th = โรม tr = Roma @@ -50226,6 +51597,7 @@ pl = Mediolan pt = Milão es = Milán + et = Milano, Sesto San Giovanni, Cinisello Balsamo uk = Мілан el = Μιλάνο, Σέστο Σαν Τζιοβάνι, Σινισέλο Μπάλσαμο he = מילנו @@ -50336,6 +51708,7 @@ pl = Turyn pt = Turim es = Turín + et = Torino, Moncalieri, Rivoli sv = Turin uk = Турин el = Τορίνο, Μονκαλιέρι, Ρίβολι @@ -50482,6 +51855,7 @@ pt = Veneza ro = Veneţia es = Venecia + et = Veneetsia, Mestre, Chioggia sv = Venedig uk = Венеція vi = Vơ-ni-dơ @@ -51047,6 +52421,7 @@ pt = Jerusalém ro = Ierusalim es = Jerusalén + et = Jerusalemm, 'Anata, Al-Walaja sv = Jerusalem th = เยรูซาเลม tr = Kudüs @@ -51111,6 +52486,7 @@ pt = Almaty ro = Almatî es = Almatý + et = Almatõ, Shymkent, Aktobe tr = Almatı, Çimkent uk = Алмати, Актобе el = Αλμάτι, Σιμκέντ, Ακτόμπε @@ -51248,6 +52624,7 @@ pt = Riga ro = Riga es = Riga + et = Riia, Daugavpils, Liepāja sv = Riga th = รีกา tr = Riga @@ -51394,6 +52771,7 @@ pt = Luxemburgo ro = Luxemburg es = Luxemburgo + et = Luksemburg, Mondorf-les-Bains, Esch-sur-Alzette sv = Luxemburg th = ลักเซมเบิร์ก tr = Lüksemburg @@ -52091,6 +53469,7 @@ pl = Haga pt = A Haia es = La Haya + et = Haag, Zoetermeer, Delft uk = Гаага, Зутермер vi = La Hay zh-Hant = 代尔夫特 @@ -52693,6 +54072,7 @@ pt = Varsóvia ro = Varșovia es = Varsovia + et = Varssavi, Radom, Płock sv = Warszawa th = วอร์ซอ tr = Varşova @@ -52837,6 +54217,7 @@ pt = Lisboa ro = Lisabona es = Lisboa + et = Lissabon, Odivelas, Setúbal sv = Lissabon th = ลิสบอน tr = Lizbon @@ -52939,6 +54320,7 @@ pt = Bucareste ro = București es = Bucarest + et = Bukarest, Ploiești, Pitești sv = Bukarest th = บูคาเรสต์ tr = Bukres @@ -53045,6 +54427,7 @@ uk = Архангельськ, Сєверодвінськ vi = Arkhangelsk el = Αρχάγγελσκ, Σεβεροντβίνσκ, Νοβοντβίνσκ + et = Arhangelsk, Severodvinsk, Novodvinsk [Russia_Arkhangelsk Oblast_North Description] en = Kotlas, Koryazhma, Vychegodskiy @@ -53072,6 +54455,7 @@ pt = Astracã ro = Astrahan es = Astracán + et = Astrahan, Gospitomnika, Akhtubinsk sv = Astrachan tr = Astrahan uk = Астрахань @@ -53146,6 +54530,7 @@ sv = Groznyj, Urus-Martan uk = Грозний, Урус-Мартан el = Γκρόζνι, Ούρους-Μαρτίν, Σάλη + et = Groznõi, Urus-Martan, Shali [Russia_Chelyabinsk Oblast Description] en = Chelyabinsk, Magnitogorsk, Zlatoust @@ -53166,6 +54551,7 @@ pt = Cheliabinsk ro = Celiabinsk es = Cheliábinsk, Zlatoust + et = Tšeljabinsk, Magnitogorsk, Zlatoust sv = Tjeljabinsk tr = Çelyabinsk uk = Челябінськ, Магнітогорськ, Златоуст @@ -53284,6 +54670,7 @@ pl = Królewiec, Sowieck, Czerniachowsk pt = Kaliningrado es = Kaliningrado + et = Kaliningrad, Sovetsk, Tšernjahhovski uk = Калінінград, Черняховськ el = Καλίνινγκραντ, Σοβέτσκ, Τσέρνιατσκοβ sk = Kaliningrad @@ -53339,6 +54726,7 @@ it = Čerkessk pl = Czerkiesk es = Pregradnaya + et = Tšerkessk, Pregradnaja, Ust-Džeguta uk = Черкеськ el = Τσερκέσκ, Πρέγκραντνια, Ουστ-Ντζέγκουντα he = צ'רקסק @@ -53370,6 +54758,7 @@ pl = Chabarowsk, Komsomolsk nad Amurem ro = Habarovsk es = Jabárovsk, Komsomolsk del Amur + et = Habarovsk, Komsomolsk Amuuri ääres, Amursk uk = Хабаровськ, Комсомольськ-на-Амурі el = Καμπαρόφκ, Κοσμομόλσκ-ον-Αμούρ, Αμούρσκ he = חברובסק @@ -53393,6 +54782,7 @@ pt = Abakan ro = Abakan es = Abakán + et = Abakan, Tšernogorsk, Sayanogorsk sv = Abakan tr = Abakan uk = Абакан, Чорногорськ @@ -53409,6 +54799,7 @@ pl = Kirow, Kirowo-Czepieck ro = Kirov es = Kírov + et = Kirov, Kirovo-Tšepetsk, Slobodskoi uk = Кіров, Кірово-Чепецьк el = Κίροφ, Κιρόβο Κεπέτσκ, Σλόμποντα sk = Kirov @@ -53475,6 +54866,7 @@ pt = Sóchi ro = Soci, Maykop, Gelendjik es = Sochi, Gelendzhik + et = Sotši, Maikop, Gelendžik sv = Sotji tr = Soçi, Maykop uk = Сочі, Майкоп, Геленджик @@ -53506,6 +54898,7 @@ uk = Красноярськ, Ачинськ, Канськ el = Κρασνογιάρσκ, Ατσίνσκ, Κάνσκ sk = Krasnojarsk + et = Krasnojarsk, Atšinsk, Kansk [Russia_Kurgan Oblast Description] en = Kurgan, Shadrinsk, Варгаши @@ -53544,6 +54937,7 @@ sv = Viborg uk = Виборг el = Βίμποργκ, Βσέβολοσκ, Σερτολόβο + et = Viiburi, Vsevoložski, Sertolovo [Russia_Leningradskaya Oblast_Southeast Description] en = Gatchina, Sosnoviy Bor, Tikhvin @@ -53551,6 +54945,7 @@ fi = Hatsina, Tihvinä de = Gattschina, Sosnowy Bor, Tichwin el = Γκάτσινα, Σοσνόβι Μπορ Τικβίν + et = Gatšina, Sosnovi Bor, Tihvin [Russia_Lipetsk Oblast Description] en = Lipetsk, Yelets, Gryazi @@ -53618,6 +55013,7 @@ pt = Moscou, Khimki ro = Moscova, Himki es = Moscú, Jimki + et = Moskva, Himki, Troitsk sv = Moskva, Chimki th = มอสโก tr = Moskova, Himki @@ -53646,6 +55042,7 @@ pt = Podolsk ro = Podolsk es = Podolsk + et = Balašiha, Podolsk, Koroljov sv = Podolsk tr = Podolsk uk = Балашиха, Подольськ, Корольов @@ -53892,6 +55289,7 @@ hu = Pszkov, Velikije Luki pl = Psków, Wielkie Łuki es = Pskov + et = Pihkva, Velikije Luki, Ostrov uk = Псков, Великі Луки el = Πσκοφ, Βελίκιε Λούκι, Οστρόβ @@ -54031,6 +55429,7 @@ pt = São Petersburgo ro = Sankt Petersburg es = San Petersburgo + et = Peterburi, Kolpino, Puškin sv = Sankt Petersburg uk = Санкт-Петербург vi = Xanh Pê-téc-bua @@ -54143,6 +55542,7 @@ pl = Jekaterynburg, Kamieńsk Uralski, Pierwouralsk ro = Ekaterinburg es = Ekaterimburgo + et = Jekaterinburg, Kamensk-Uralski, Pervouralsk uk = Єкатеринбург, Каменськ-Уральський, Первоуральськ el = Αικατερινούπολη, Καμένσκ-Ουράλσκι, Περβουράλσκ sk = Jekaterinburg @@ -54301,6 +55701,7 @@ pl = Uljanowsk, Dimitrowgrad ro = Ulianovsk es = Uliánovsk + et = Uljanovsk, Dimitrovgrad, Inza uk = Ульяновськ, Димитровград el = Ουλιάνοφσκ, Ντιμίτροβγκραντ, Ίνζα @@ -54378,6 +55779,7 @@ pl = Woroneż ro = Voronej es = Vorónezh + et = Voronež, Borisoglebsk, Rossosh sv = Voronezj tr = Voronej uk = Воронеж, Росош @@ -54412,6 +55814,7 @@ pt = Pereslavl-Zalessky ro = Iaroslavl, Rîbinsk es = Rýbinsk, Pereslavl-Zaleski + et = Jaroslavl, Rybinsk, Pereslavl-Zalessky uk = Ярославль, Рибінськ, Переславль-Залєський zh-Hant = 佩列斯拉夫尔-扎列斯基 el = Γιαροσλάβ, το Rybinsk, Περεσλάβλ-Ζαλέσκι @@ -54425,6 +55828,7 @@ ja = ハンティ・マンシースク, ニャーガニ, ウライ pl = Chanty-Mansyjsk es = Janti-Mansisk + et = Hantõ-Mansiysk, Nyagan, Uray uk = Ханти-Мансійськ el = Χάντι-Μανσίσκ, Νιάγκαν, Ουρέι @@ -54557,6 +55961,7 @@ pt = San Marino ro = Orașul San Marino es = San Marino + et = San Marino, Chita, Krasnokamensk, Borzya sv = San Marino tr = San Marino şehri uk = Сан-Марино @@ -54662,6 +56067,7 @@ pt = Belgrado, Nish ro = Belgrad, Niș es = Belgrado + et = Belgrad, Novi Sad, Nis sv = Belgrad th = เบลเกรด tr = Belgrad, Niş @@ -54721,6 +56127,7 @@ pt = Singapura ro = Singapore es = Singapur + et = Singapur, Ladang, Rocky Hill sv = Singapore th = ประเทศสิงคโปร์ tr = Singapur @@ -54959,6 +56366,7 @@ pl = Kapsztad pt = Cidade do Cabo es = Ciudad del Cabo + et = Kaplinn, Mitchells Plain, Khayelitsha sv = Kapstaden el = Κέιπ Τάουν, Μίτσελς Πλέιν, Καγιελίτσα he = קייפטאון @@ -55084,6 +56492,7 @@ ja = セビリア, コルドバ pl = Sewilla, Kordoba es = Málaga, Sevilla + et = Málaga, Sevilla, Córdoba eu = Malaga, Sevilla uk = Севілья, Кордова el = Μάλαγα, Σεβίλλη, Κόρδοβα @@ -55551,6 +56960,7 @@ pt = Lucerna ro = Lucerna es = Lucerna + et = Luzern, Oberarth, Emmen el = Λουκέρνη, Όμπερμπαθ, Έμμεν he = לוצרן @@ -55617,6 +57027,7 @@ ja = ジュネーヴ pl = Genewa es = Ginebra, Lausana + et = Genf, Lausanne, Vernier th = เจนีวา tr = Cenevre uk = Женева, Лозанна @@ -55663,6 +57074,7 @@ pt = Zurique ro = Zürich es = Zúrich + et = Zürich, Winterthur, Illnau sv = Zürich th = ซูริก tr = Zürih @@ -55690,6 +57102,7 @@ pt = Damasco ro = Damasc es = Damasco, Alepo, Homs + et = Damaskus, Aleppo, Homs sv = Damaskus, Aleppo, Homs th = ดามัสกัส tr = Şam, Halep, Humus @@ -55761,6 +57174,7 @@ pt = Duchambe, Khujand ro = Dușanbe, Hudjand es = Dusambé, Khodjent + et = Dušanbe, Hudžand, Šahrinav sv = Dusjanbe, Chudzjand th = ดูชานเบ tr = Duşanbe @@ -57151,6 +58565,7 @@ pt = Tcherkássi ro = Cerkasî es = Cherkasy + et = Tšerkasõ, Uman, Smila tr = Çerkassi uk = Черкаси, Умань, Сміла el = Τσερκάσι, Ουμάν, Γκριντ @@ -57165,6 +58580,7 @@ ro = Cernigău uk = Чернігів, Ніжин, Прилуки el = Τσερνιγιβ, Νεζίν, Πρύλουκυ + et = Tšernihiv, Nižõn, Pryluky [Ukraine_Chernivtsi Oblast Description] en = Chernivtsi, Storozhynets, Zastavna @@ -57177,6 +58593,7 @@ uk = Чернівці, Сторожинець, Заставна el = Τσερνίβτσι, Στοροζινέτς, Ζάσταβνα he = צרנוביץ + et = Tšernivtsi, Storožinets, Zastavna [Ukraine_Dnipropetrovsk Oblast Description] en = Dnipropetrovsk, Krivoy Rog, Dniprodzerzhynsk @@ -57260,6 +58677,7 @@ el = Κάρκοβ, Λοζόβα, Κουπιάνσκ he = קרקוב sk = Charkov + et = Harkiv, Lozova, Kupiansk [Ukraine_Kherson Oblast Description] en = Kherson, Nova Kakhovka, Наддніпрянське @@ -57269,6 +58687,7 @@ hu = Herszon, Nova Kakhovka pl = Chersoń es = Jersón + et = Herson, Nova Kahhovka, Наддніпрянське uk = Херсон, Нова Каховка el = Κέρσον, Νόβα Κακχόβκα, Νλαντιπρέσκνιε @@ -57284,6 +58703,7 @@ pl = Płoskirów, Kamieniec Podolski, Szepietówka ro = Hmelnîţkîi, Cameniţa, Şepetivka es = Jmelnitsky + et = Hmelnõtski, Kamianets-Podilski, Šepetivka sv = Chmelnytskyj tr = Kamaniçe uk = Хмельницький, Кам’янець-Подільський, Шепетівка @@ -57319,6 +58739,7 @@ pt = Kiev ro = Kiev, Bila Țerkva es = Kiev + et = Kiiev, Bila Tserkva, Brovary sv = Kiev th = เคียฟ tr = Kiev @@ -57369,6 +58790,7 @@ pt = Leópolis ro = Liov, Drohobîci es = Leópolis, Drogóbich + et = Lviv, Sambiri linnavolikogu, Drohobych uk = Львів, Самбірська міська рада, Дрогобич el = Λβιβ, Δημοτικό Συμβούλιο Σαμπίρ, Ντροχομπύτς he = לבוב, דרוהוביץ' @@ -57414,6 +58836,7 @@ pl = Połtawa, Krzemieńczuk ro = Kremenciuk es = Kremenchuk + et = Poltava, Krementšuk, Komsomolsk sv = Krementjuk uk = Полтава, Кременчук, Комсомольськ el = Πολτάβα, Κρεμένχυκ, Κομσομόλσκ @@ -57461,6 +58884,7 @@ pl = Winnica, Zmierzynka ro = Vinnița es = Vinnytsia + et = Vinnõtsja, Ворошиловка, Zhmerynka tr = Vinnitsya uk = Вінниця, Жмеринка el = Βίννιτσα, Βοροσίλοβκα, Ζμερίνκα @@ -57505,6 +58929,7 @@ pl = Zaporoże, Melitopol, Berdiańsk ro = Melitopol es = Melitopol + et = Zaporižži, Melitopol, Berdiansk uk = Запоріжжя, Мелітополь, Бердянськ el = Ζαπορίζια, Μελιτοπόλ, Μπερντιάνσκ sk = Záporožie, Melitopoľ, Berďansk @@ -57518,6 +58943,7 @@ hu = Zsitomir, Berdichiv, Korosten pl = Żytomierz, Berdyczów, Korosteń es = Zhytomyr + et = Žõtomõr, Berdõtšiv, Korosten uk = Житомир, Бердичів, Коростень el = Ζιτόμιρ, Μπερντιτσίβ, Κορόστεν sk = Žytomyr @@ -57589,6 +59015,7 @@ pt = Tashkent ro = Tașkent es = Taskent + et = Taškent, Kokand, Namangan sv = Tasjkent th = ทาชเคนต์ tr = Taşkent @@ -57787,6 +59214,7 @@ pt = Palestina ro = Palestina es = Palestina + et = Palestiina sv = Palestina th = รัฐปาเลสไตน์ tr = Filistin @@ -57848,6 +59276,7 @@ pt = Checa ro = Cehia es = Checa + et = Tšehhi sv = Tjeckien th = สาธารณรัฐเช็ก tr = Çek @@ -57941,6 +59370,7 @@ pl = Dolna Austria pt = Baixa Áustria ro = Austria Inferioară es = Baja Austria +et = Alam-Austria sv = Niederösterreich th = รัฐโลว์เออร์ออสเตรีย tr = Aşağı Avusturya @@ -58003,6 +59433,7 @@ pl = São Paulo pt = São Paulo ro = São Paulo es = São Paulo +et = São Paulo sv = São Paulo th = ซาวเปาโล tr = São Paulo @@ -58033,6 +59464,7 @@ pl = Kraj środkowoczeski pt = Boêmia Central ro = Regiunea Boemia Centrală es = Bohemia Central +et = Kesk-Böömimaa piirkond sv = Mellersta Böhmen th = ภูมิภาคโบฮีเมียนกลาง tr = Orta Çek Bölgesi @@ -58064,6 +59496,7 @@ pl = Kraj środkowoczeski pt = Boêmia Central ro = Regiunea Boemia Centrală es = Bohemia Central +et = Kesk-Böömimaa piirkond sv = Mellersta Böhmen th = ภูมิภาคโบฮีเมียนกลาง tr = Orta Çek Bölgesi @@ -58095,6 +59528,7 @@ pl = Varsinais-Suomi pt = Finlândia Própria ro = Finlanda Propriu-Zisă es = Finlandia Propia +et = Edela-Soome sv = Egentliga Finland th = ตะวันตกเฉียงใต้ของฟินแลนด์ tr = Güneybatı Finlandiya @@ -58125,6 +59559,7 @@ pl = Brandenburgia pt = Brandemburgo ro = Brandenburg es = Brandeburgo +et = Brandenburg sv = Brandenburg th = รัฐบรันเดนบูร์ก tr = Brandenburg @@ -58156,6 +59591,7 @@ pl = Brandenburgia pt = Brandemburgo ro = Brandenburg es = Brandeburgo +et = Brandenburg sv = Brandenburg th = รัฐบรันเดนบูร์ก tr = Brandenburg @@ -58187,6 +59623,7 @@ pl = Nadrenia-Palatynat pt = Renânia-Palatinado ro = Renania-Palatinat es = Renania-Palatinado +et = Rheinland-Pfalz sv = Rheinland-Pfalz th = รัฐไรน์ลันด์-พฟัลซ์ tr = Renanya-Palatina @@ -58218,6 +59655,7 @@ pl = Nuevo León pt = Nuevo León ro = Nuevo León es = Nuevo León +et = Nuevo León sv = Nuevo León th = รัฐนวยโวเลออง tr = Nuevo León @@ -58249,6 +59687,7 @@ pl = Nayarit pt = Nayarit ro = Nayarit es = Nayarit +et = Nayarit sv = Nayarit th = รัฐนายาริต tr = Nayarit @@ -58280,6 +59719,7 @@ pl = Geldria pt = Guéldria ro = Gelderland es = Güeldres +et = Gelderland sv = Gelderland th = จังหวัดเกลเดอร์ลันด์ tr = Gelderland @@ -58310,6 +59750,7 @@ pl = Oslo pt = Oslo ro = Oslo es = Oslo +et = Oslo sv = Oslo th = ออสโล tr = Oslo @@ -58341,6 +59782,7 @@ pl = Luzon pt = Luzon ro = Luzon es = Luzón +et = Luzon sv = Luzon th = เกาะลูซอน tr = Luzon @@ -58372,6 +59814,7 @@ pl = Luzon pt = Luzon ro = Luzon es = Luzón +et = Luzon sv = Luzon th = เกาะลูซอน tr = Luzon @@ -58403,6 +59846,7 @@ pl = Region Północno-wschodni pt = Nordeste ro = Nord-Est es = Nordeste +et = Kirde-Rumeenia sv = Nordost th = นอร์ดอีสต์ tr = Nord-Est @@ -58433,6 +59877,7 @@ pl = Region Północno-zachodni pt = Noroeste ro = Nord-Vest es = Nord-Vest +et = Loode-Rumeenia sv = Nordväst th = นอร์ดเวสต์ tr = Nord-Vest @@ -58463,6 +59908,7 @@ pl = Region Południowy pt = Sul ro = Sud es = Sur +et = Lõuna-Rumeenia sv = Syd th = เซาต์ tr = Sud @@ -58494,6 +59940,7 @@ pl = Region Południowo-wschodni pt = Sudeste ro = Sud-Est es = Sureste +et = Edela-Rumeenia sv = Sydost th = เซาต์อีสต์ tr = Sud-Est @@ -58524,6 +59971,7 @@ pl = Region Południowo-zachodni pt = Sudoeste ro = Sud-Vest es = Sud-Vest +et = Edel sv = Sydväst th = เซาต์เวสต์ tr = Sud-Vest @@ -58554,6 +60002,7 @@ pl = Region Zachodni pt = Oeste ro = Vest es = Vest +et = Lääs sv = Väst th = เวสต์ tr = Vest @@ -58584,6 +60033,7 @@ pl = Obwód archangielski pt = Oblast de Arkhangelsk ro = Regiunea Arhanghelsk es = Óblast de Arjánguelsk +et = Arhangelski oblast sv = Archangelsk oblast th = แคว้นปกครองตนเองอาฮันเจล tr = Arhangelsk Oblastı @@ -58615,6 +60065,7 @@ pl = Obwód archangielski pt = Oblast de Arkhangelsk ro = Regiunea Arhanghelsk es = Óblast de Arjánguelsk +et = Arhangelski oblast sv = Archangelsk oblast th = แคว้นปกครองตนเองอาฮันเจล— เหนือ tr = Arhangelsk Oblastı @@ -58646,6 +60097,7 @@ pl = Szwajcaria Środkowa pt = Suíça Central ro = Elveția Centrală es = Suiza Central +et = Kesk-Šveits sv = Centralschweiz th = สวิตเซอร์แลนด์กลาง tr = Orta İsviçre @@ -58677,6 +60129,7 @@ pl = Szkocja pt = Escócia ro = Scoția es = Escocia +et = Šotimaa sv = Skottland th = ประเทศสกอตแลนด์ tr = İskoçya @@ -58708,6 +60161,7 @@ pl = Szkocja pt = Escócia ro = Scoția es = Escocia +et = Šotimaa sv = Skottland th = ประเทศสกอตแลนด์ tr = İskoçya @@ -58739,6 +60193,7 @@ pl = Goiás pt = Goiás ro = Goiás es = Goiás +et = Goiás sv = Goiás th = รัฐโกยาส tr = Goiás @@ -58770,6 +60225,7 @@ pl = Region Północny pt = Região Norte do Brasil ro = Regiunea de Nord es = Región Norte de Brasil +et = Põhjapiirkond sv = Norra regionen th = ภูมิภาคเหนือ tr = Kuzey Bölgesi @@ -58801,6 +60257,7 @@ pl = Region Północny pt = Região Norte do Brasil ro = Regiunea de Nord es = Región Norte de Brasil +et = Põhjapiirkond sv = Norra regionen th = ภูมิภาคเหนือ tr = Kuzey Bölgesi @@ -58832,6 +60289,7 @@ pl = Region północno-wschodni pt = Região Nordeste do Brasil ro = Regiunea de Nord-Est es = Región Nordeste de Brasil +et = Kirdepiirkond sv = Nordöstra regionen th = ภูมิภาคตะวันออกเฉียงเหนือ tr = Kuzeydoğu Bölgesi @@ -58863,6 +60321,7 @@ pl = Region północno-wschodni pt = Região Nordeste do Brasil ro = Regiunea de Nord-Vest es = Región Nordeste de Brasil +et = Kirdepiirkond sv = Nordöstra regionen th = ภูมิภาคตะวันออกเฉียงเหนือ tr = Kuzeydoğu Bölgesi @@ -58894,6 +60353,7 @@ pl = Parana pt = Paraná ro = Paraná es = Paraná +et = Paraná sv = Paraná th = รัฐปารานา tr = Paraná @@ -58925,6 +60385,7 @@ pl = Parana pt = Paraná ro = Paraná es = Paraná +et = Paraná sv = Paraná th = รัฐปารานา tr = Paraná @@ -58956,6 +60417,7 @@ pl = Region południowy pt = Região Sul do Brasil ro = Regiunea de Sud es = Región Sur de Brasil +et = Lõunapiirkond sv = Södra regionen th = ภูมิภาคใต้ tr = Güneydoğu Bölgesi @@ -58987,6 +60449,7 @@ pl = Region południowy pt = Região Sul do Brasil ro = Regiunea de Sud es = Región Sur de Brasil +et = Lõunapiirkond sv = Södra regionen th = ภูมิภาคใต้ tr = Güneydoğu Bölgesi @@ -59018,6 +60481,7 @@ pl = Konga pt = Congo ro = Congo es = Congo +et = Kongo sv = Kongo-Kinshasa th = สาธารณรัฐประชาธิปไตยคองโก tr = Kongo @@ -59049,6 +60513,7 @@ pl = Finlandia Wschodnia pt = Finlândia Oriental ro = Finlanda de Est es = Finlandia Oriental +et = Ida-Soome sv = Östra Finlands län th = ฟินแลนด์ตะวันออก tr = Doğu Finlandiya @@ -59080,6 +60545,7 @@ pl = Finlandia Wschodnia pt = Finlândia Oriental ro = Finlanda de Est es = Finlandia Oriental +et = Ida-Soome sv = Östra Finlands län th = ฟินแลนด์ตะวันออก tr = Doğu Finlandiya @@ -59111,6 +60577,7 @@ pl = Franche-Comté pt = Franco-Condado ro = Franche-Comté es = Franco Condado +et = Franche-Comté sv = Franche-Comté th = แคว้นฟร็องช์-กงเต tr = Franche-Comté @@ -59142,6 +60609,7 @@ pl = Franche-Comté pt = Franco-Condado ro = Franche-Comté es = Franco Condado +et = Franche-Comté sv = Franche-Comté th = แคว้นฟร็องช์-กงเต tr = Franche-Comté @@ -59173,6 +60641,7 @@ pl = Karnataka pt = Karnataka ro = Karnataka es = Karnataka +et = Karnataka sv = Karnataka th = รัฐกรณาฏกะ tr = Karnataka @@ -59205,6 +60674,7 @@ pl = Karnataka pt = Karnataka ro = Karnataka es = Karnataka +et = Karnataka sv = Karnataka th = รัฐกรณาฏกะ tr = Karnataka @@ -59237,6 +60707,7 @@ pl = Kraj Krasnojarski pt = Krai de Krasnoiarsk ro = Ținutul Krasnoiarsk es = Krasnoyarsk +et = Krasnojarski krai sv = Krasnojarsk kraj th = สาธารณรัฐคราสโนยาสก์ tr = Krasnoyarsk Krayı @@ -59268,6 +60739,7 @@ pl = Kraj Krasnojarski pt = Krai de Krasnoiarsk ro = Ținutul Krasnoiarsk es = Krasnoyarsk +et = Krasnojarski krai sv = Krasnojarsk kraj th = สาธารณรัฐคราสโนยาสก์ tr = Krasnoyarsk Krayı @@ -59299,6 +60771,7 @@ pl = Obwód moskiewski pt = Oblast de Moscou ro = Regiunea Moscova es = Óblast de Moscú +et = Moskva oblast sv = Moskva oblast th = แคว้นปกครองตนเองมอสโกว tr = Moskova Oblastı @@ -59330,6 +60803,7 @@ pl = Obwód moskiewski pt = Oblast de Moscou ro = Regiunea Moscova es = Óblast de Moscú +et = Moskva oblast sv = Moskva oblast th = แคว้นปกครองตนเองมอสโกว tr = Moskova Oblastı @@ -59361,6 +60835,7 @@ pl = Kraj Permski pt = Krai de Perm ro = Ținutul Perm es = Perm +et = Permi krai sv = Perm kraj th = สาธารณรัฐเพิร์ม tr = Perm Krayı @@ -59392,6 +60867,7 @@ pl = Kraj Permski pt = Krai de Perm ro = Ținutul Perm es = Perm +et = Permi krai sv = Perm kraj th = สาธารณรัฐเพิร์ม tr = Perm Krayı @@ -59423,6 +60899,7 @@ pl = Karelia pt = República da Carélia ro = Republica Carelia es = República de Carelia +et = Karjala Vabariik sv = Karelska republiken th = สาธารณรัฐคาเรลียา tr = Karelya Cumhuriyeti @@ -59454,6 +60931,7 @@ pl = Karelia pt = República da Carélia ro = Republica Carelia es = República de Carelia +et = Karjala Vabariik sv = Karelska republiken th = สาธารณรัฐคาเรลียา tr = Karelya Cumhuriyeti @@ -59485,6 +60963,7 @@ pl = Obwód swierdłowski pt = Oblast de Sverdlovsk ro = Regiunea Sverdlovsk es = Sverdlovsk +et = Sverdlovski oblast sv = Sverdlovsk oblast th = แคว้นปกครองตนเองสเวอร์ดอฟสก์ tr = Sverdlovsk Oblastı @@ -59516,6 +60995,7 @@ pl = Kastylia i León pt = Castela e Leão ro = Castilia și León es = Castilla y León +et = Kastiilia ja León sv = Kastilien och León th = แคว้นคาสตีลและเลออน tr = Kastilya ve Leon @@ -59547,6 +61027,7 @@ pl = Kastylia i León pt = Castela e Leão ro = Castilia și León es = Castilla y León +et = Kastiilia ja León sv = Kastilien och León th = แคว้นคาสตีลและเลออน tr = Kastilya ve Leon @@ -59578,6 +61059,7 @@ pl = Galicja pt = Galiza ro = Galicia es = Galicia +et = Galicia sv = Galicien th = แคว้นกาลิเซีย tr = Galiçya @@ -59609,6 +61091,7 @@ pl = Galicja pt = Galiza ro = Galicia es = Galicia +et = Galicia sv = Galicien th = แคว้นกาลิเซีย tr = Galiçya @@ -59640,6 +61123,7 @@ pl = Espace Mittelland pt = Espace Mittelland ro = Spațiul Mittelland es = Mittelland +et = Espace Mittelland sv = Espace Mittelland th = เอสเปส มิตเตลลัน tr = Espace Mittelland diff --git a/data/strings/strings.txt b/data/strings/strings.txt index 2cb402c105..a311547d0d 100644 --- a/data/strings/strings.txt +++ b/data/strings/strings.txt @@ -13,6 +13,7 @@ de = Zurück el = Πίσω es = Atrás + et = Tagasi eu = Atzera fa = بازگشت fi = Takaisin @@ -53,6 +54,7 @@ de = Abbrechen el = Άκυρο es = Cancelar + et = Tühista eu = Utzi fa = لغو fi = Peruuta @@ -93,6 +95,7 @@ de = Herunterladen abbrechen el = Ακύρωση λήψης es = Cancelar descarga + et = Tühista allalaadimine eu = Utzi deskargatzea fa = لغو دانلود fi = Peruuta lataus @@ -133,6 +136,7 @@ de = Löschen el = Διαγραφή es = Eliminar + et = Kustuta eu = Kendu fa = حذف fi = Poista @@ -172,6 +176,7 @@ de = Karten herunterladen el = Λήψη χαρτών es = Descargar mapas + et = Lae kaarte eu = Deskargatu mapak fa = دانلود نقشه ها fi = Lataa karttoja @@ -212,6 +217,7 @@ de = Herunterladen fehlgeschlagen. Antippen für einen neuen Versuch. el = Η λήψη απέτυχε. Αγγίξτε για να προσπαθήσετε ξανά. es = Error durante la descarga, iniciar otra vez + et = Allalaadimine ebaõnnestus. Puuduta uuesti proovimiseks. eu = Errore bat gertatu da deskargatzean, hasi berriro fa = دانلود ناموفق بود . برای تلاش مجدد لمس کنید fi = Lataus epäonnistui, yritä uudelleen koskettamalla @@ -252,6 +258,7 @@ de = Wird heruntergeladen… el = Λήψη… es = Descargando… + et = Allalaadimine… eu = Deskargatzen… fa = درحال دانلود fi = Ladataan… @@ -293,6 +300,7 @@ de = Kilometer el = Χιλιόμετρα es = Kilómetros + et = Kilomeetrid eu = Kilometroak fa = کیلومتر fi = Kilometrit @@ -333,6 +341,7 @@ de = Bericht abgeben el = Αφήστε μια κριτική es = Escribir una opinión + et = Jäta arvamus eu = Idatzi iritzia fa = نظر خود را بیان کنید fi = Jätä arviointi @@ -401,6 +410,7 @@ de = Meilen el = Μίλια es = Milla + et = Miilid eu = Milia fa = مایل fi = Mailit @@ -441,6 +451,7 @@ de = Mein Standort el = Η θέση μου es = Mi posición + et = Minu asukoht eu = Nire posizioa fa = مکان من fi = Sijaintini @@ -481,6 +492,7 @@ de = Später el = Αργότερα es = Luego + et = Hiljem eu = Geroago fa = بعداً fi = Myöhemmin @@ -521,6 +533,7 @@ de = Suche el = Αναζήτηση es = Buscar + et = Otsi eu = Bilatu fa = جست‌وجو fi = Haku @@ -560,6 +573,7 @@ de = Auf der Karte suchen el = Αναζήτηση χάρτη es = Buscar en el mapa + et = Otsi kaardilt eu = Bilatu mapan fa = جست‌وجوی نقشه fi = Hae kartalta @@ -600,6 +614,7 @@ de = Ja el = Ναι es = Sí + et = Jah eu = Bai fa = بله fi = Kyllä @@ -640,6 +655,7 @@ de = Ortungsdienste sind für dieses Gerät oder die App deaktiviert. Bitte aktivieren Sie diese in den Einstellungen. el = Οι υπηρεσίες εντοπισμού τοποθεσίας είναι προς το παρόν απενεργοποιημένες σε αυτή τη συσκευή ή για αυτή την εφαρμογή. Ενεργοποιήστε τις από τις Ρυθμίσεις. es = No se puede acceder a los servicios de localización. Por favor, activelo en los ajustes. + et = Seadme või rakenduse kõik asukohateenused on praegu välja lülitatud. Luba need Seadetes. eu = Ezin da kokapen-zerbitzuetara sartu. Mesedez, aktibatu ezarpenetan. fa = سرویس موقعیت مکانی شما غیر فعال است .لطفا جهت کارکرد صحیح نرم افزار ان را فعال کنید. fi = Laitteen tai sovelluksen kaikki sijaintipalvelut ovat tällä hetkellä poissa käytöstä. Ota ne käyttöön Asetukset-valikossa. @@ -680,6 +696,7 @@ de = Auf der Karte anzeigen el = Εμφάνιση στο χάρτη es = Mostrar en el mapa + et = Kuva kaardil eu = Mapan erakutsi fa = بر روی نقشه نمایش بده fi = Näytä kartalla @@ -719,6 +736,7 @@ de = Karte herunterladen el = Λήψη χάρτη es = Descargar mapa + et = Lae kaart alla eu = Deskargatu mapa fa = دانلود نقشه fi = Lataa kartta @@ -759,6 +777,7 @@ de = Herunterladen fehlgeschlagen el = Η λήψη απέτυχε es = Error durante la descarga + et = Allalaadimine ebaõnnestus eu = Errore bat deskargatzean fa = دانلود با شکست مواجه شد fi = Lataus epäonnistui @@ -799,6 +818,7 @@ de = Erneut versuchen el = Δοκιμάστε ξανά es = Intentar otra vez + et = Proovi uuesti eu = Saiatu berriro fa = تلاش مجدد fi = Yritä uudelleen @@ -838,6 +858,7 @@ de = Über Organic Maps el = Σχετικά με το Organic Maps es = Sobre Organic Maps + et = Organic Maps kohta eu = Organic Maps buruz fa = Organic Maps درباره‌ی fi = Tietoa Organic Maps:stä @@ -877,6 +898,7 @@ de = Verbindungseinstellungen el = Ρυθμίσεις σύνδεσης es = Ajustes de conexión + et = Ühenduse seaded eu = Konexio ezarpenak fa = تنظیمات اتصال fi = Yhteysasetukset @@ -916,6 +938,7 @@ de = Schließen el = Κλείσιμο es = Cerrar + et = Sulge eu = Itxi fa = بستن fi = Sulje @@ -955,6 +978,7 @@ de = Das Programm benötigt OpenGL, um zu funktionieren. Leider wird Ihr Gerät nicht unterstützt. el = Η εφαρμογή απαιτεί OpenGL με επιτάχυνση υλικού. Δυστυχώς, η συσκευή σας δεν το υποστηρίζει. es = La aplicación requiere OpenGL acelerado por hardware. Lamentablemente, su dispositivo no es compatible. + et = Rakendus vajab riistvaralist OpenGL tuge. Kahjuks Sinu seade ei ole toetatud. eu = Aplikazioak hardware-azeleratutako OpenGL behar du. Zoritxarrez, zure gailua ez da onartzen. fa = نیازمند است. متاسفانه دستگاه شما از ان پشتیبانی نمی کندOpenGLبرنامه برای اجرا به fi = Laitteistokiihdytetty OpenGL vaaditaan. Valitettavasti laitteesi ei ole tuettu. @@ -994,6 +1018,7 @@ de = Herunterladen el = Λήψη es = Descargar + et = Lae alla eu = Deskargatu fa = دانلود fi = Lataa @@ -1034,6 +1059,7 @@ de = Bitte USB-Kabel entfernen oder Speicherkarte einsetzen, um Organic Maps zu verwenden el = Αποσυνδέστε το καλώδιο USB ή τοποθετήστε την κάρτα μνήμης για να χρησιμοποιήσετε το Organic Maps es = Por favor desconectar el cable USB o insertar la memoria SD para usar Organic Maps + et = Organic Maps kasutamiseks palun ühenda USB kaabel lahti või sisesta mälukaart eu = Mesedez, deskonektatu USB kablea edo sartu SD memoria Organic Maps erabiltzeko fi = Irrota USB-kaapeli tai syötä muistikortti käyttääksesi Organic Maps -sovellusta fr = Veuillez débrancher le câble USB ou insérer la carte SD pour utiliser Organic Maps @@ -1073,6 +1099,7 @@ de = Bitte zuerst Speicherplatz auf SD-Karte/USB-Speicher freigeben, um die Anwendung zu nutzen el = Ελευθερώσετε χώρο αποθήκευσης στην SD κάρτα/USB πρώτα προκειμένου να χρησιμοποιήσετε την εφαρμογή es = Por favor liberar espacio en la memoria SD/almacenamiento USB para usar la aplicación + et = Rakenduse kasutamiseks palun vabasta kõigepealt piisavalt ruumi mälukaardil/USB salvestusseadmel eu = Mesedez, egin lekua SD memorian/USB biltegian aplikazioa erabiltzeko fa = لطفا مقداری از فضای ذخیره سازی را آزاد نمایید fi = Vapauta ensin tilaa SD-kortilta/USB-massamuistilta käyttääksesi sovellusta @@ -1112,6 +1139,7 @@ de = Bevor Sie starten, laden Sie die allgemeine Weltkarte auf Ihr Gerät herunter.\nEs werden %@ Speicherplatz benötigt. el = Πριν ξεκινήσετε τη χρήση της εφαρμογής, επιτρέψτε μας να κατεβάσουμε το γενικό παγκόσμιο χάρτη στη συσκευή σας. \nIt θα χρησιμοποιήσει %@ αποθηκευτικού χώρου. es = Antes de comenzar, permite que descarguemos en tu dispositivo un mapamundi general.\nSe requieren %@ de datos. + et = Ennem rakenduse kasutamise alustamist luba meil laadida seadmesse alla maailma üldkaart.\nSee kasutab %@ mälumahtu. eu = Hasi baino lehen, utzi mundu-mapa orokor bat zure gailura deskargatzeko.\nDatuen %@ beharrezkoa da. fa = قبل از استفاده از اپلیکیشن, اجازه دهید تا ما نقشه جهانی را بر روی موبایل شما دانلود کنیم.\nمقدار %@ از حافظه شما اشغال می شود. fi = Ennen aloitusta laitteelle tulee ladata yleinen maailmankartta.\nSe tarvitsee yhteensä %@ dataa. @@ -1151,6 +1179,7 @@ de = Zur Karte el = Μετάβαση στο χάρτη es = Ir al mapa + et = Mine kaardile eu = Joan mapara fa = برو به نقشه fi = Siirry karttaan @@ -1190,6 +1219,7 @@ de = %@ wird heruntergeladen. Sie können jetzt\nzur Karte weitergehen. el = Λήψη %@. Μπορείτε τώρα να\nμεταβείτε στο χάρτη. es = Descargando %@. Puede ahora\nproceder al mapa + et = Allalaadimine %@. Võid nüüd\nkaardiga jätkata. eu = %@ deskargatzen. Orain mapara\n joan zaitezke. fa = درحال دانلود %@. شما اکنون می توانید\nبه نقشه بروید. fi = Ladataan %@. Voit nyt jatkaa kartalle. @@ -1229,6 +1259,7 @@ de = %@ herunterladen? el = Να γίνει λήψη %@; es = Descargar %@? + et = Laadida alla %@? eu = %@ deskargatu? fa = دانلود %@? fi = Ladataanko %@? @@ -1268,6 +1299,7 @@ de = %@ aktualisieren? el = Να γίνει ενημέρωση %@; es = Actualizar %@? + et = Värskendada %@? eu = %@ eguneratzeko? fa = اپدیت %@? fi = Päivitetäänkö %@? @@ -1308,6 +1340,7 @@ de = Pause el = Παύση es = Pausar + et = Peata eu = Pausa fa = مکث fi = Pysäytä @@ -1348,6 +1381,7 @@ de = Fortfahren el = Συνέχεια es = Continuar + et = Jätka eu = Jarraitu fa = ادامه fi = Jatka @@ -1388,6 +1422,7 @@ de = %@ Herunterladen fehlgeschlagen el = η λήψη %@ απέτυχε es = %@ la descarga ha fallado + et = %@ allalaadimine ebaõnnestus eu = %@ deskargatu huts egin du fa = %@ دانلود با شکست مواجه شد fi = %@ lataus epäonnistui @@ -1428,6 +1463,7 @@ de = Neue Gruppe hinzufügen el = Προσθέστε νέο σύνολο es = Agregar un grupo nuevo + et = Lisa uus loetelu eu = Gehitu talde berri bat fa = اضافه کردن مجموعه جدید fi = Lisää uusi valikoima @@ -1469,6 +1505,7 @@ de = Lesezeichenfarbe el = Χρώμα αγαπημένου es = Color del marcador + et = Järjehoidja värv eu = Markatzailearen kolorea fa = رنگ نشانه fi = Kirjanmerkin väri @@ -1509,6 +1546,7 @@ de = Name des Lesezeichens el = Όνομα συνόλου αγαπημένων es = Nombre del grupo de marcadores + et = Järjehoidjate loetelu nimi eu = Markatzaile taldearen izena fi = Kirjanmerkkivalikoiman nimi fr = Nom du groupe de signets @@ -1547,6 +1585,7 @@ de = Lesezeichenmappe el = Σύνολα αγαπημένων es = Grupos de marcadores + et = Järjehoidjate loetelud eu = Markagailu taldeak fi = Kirjanmerkkivalikoimat fr = Groupes de signets @@ -1586,6 +1625,7 @@ de = Lesezeichen el = Αγαπημένα es = Marcadores + et = Järjehoidjad eu = Markagailuak fa = نشانه ها fi = Kirjanmerkit @@ -1626,6 +1666,7 @@ de = Meine Orte el = Οι τοποθεσίες μου es = Mis lugares + et = Minu kohad eu = Nire tokiak fa = مکان من fi = Paikkani @@ -1666,6 +1707,7 @@ de = Name el = Όνομα es = Nombre + et = Nimi eu = Izena fa = نام fi = Nimi @@ -1706,6 +1748,7 @@ de = Adresse el = Διεύθυνση es = Dirección + et = Aadress eu = Norabidea fa = ادرس fi = Osoite @@ -1746,6 +1789,7 @@ de = Liste el = Λίστα es = Lista + et = Loetelu eu = Zerrenda fa = لیست fi = Luettelo @@ -1786,6 +1830,7 @@ de = Einstellungen el = Ρυθμίσεις es = Configuración + et = Seaded eu = Ezarpenak fa = تنظیمات fi = Asetukset @@ -1826,6 +1871,7 @@ de = Karten speichern auf el = Αποθήκευση χαρτών στο es = Guardar mapas en + et = Salvesta kaardid asukohta eu = Mapak gordetzeko fa = ذخیره نقشه ها در fi = Tallenna kartat kohteeseen @@ -1866,6 +1912,7 @@ de = Wählen Sie den Speicherort für die heruntergeladenen Karten el = Επιλέξτε από που θα γίνει λήψη χαρτών es = Seleccione el lugar donde deben descargarse los mapas + et = Vali asukoht, kuhu kaardid tuleks alla laadida eu = Hautatu mapak non deskargatu behar diren fa = مسیری را که نقشه ها باید در ان دانلود شود را انتخاب کنید fi = Valitse karttojen latauskohde @@ -1906,6 +1953,7 @@ de = Karten el = Χάρτες es = Mapas + et = Kaardid eu = Mapak fa = نقشه ها fi = Kartat @@ -1940,6 +1988,7 @@ be = Унутранае прыватнае сховішча ca = Emmagatzematge privat intern de = Interner persönlicher Speicher + et = Sisemine privaatne salvestusruum fr = Stockage interne privé nl = Intern persoonlijk geheugen pl = Wewnętrzna pamięć prywatna @@ -1956,6 +2005,7 @@ be = Унутранае абагуленае сховішча ca = Emmagatzematge compartit intern de = Interner gemeinsamer Speicher + et = Sisemine jagatud salvestusruum fr = Stockage interne partagé nl = Intern gedeeld geheugen pl = Wewnętrzna pamięć współdzielona @@ -1972,6 +2022,7 @@ be = SD-карта ca = Targeta SD de = SD-Karte + et = SD-kaart fr = Carte SD nl = SD-kaart pl = Karta SD @@ -1988,6 +2039,7 @@ be = Знешняе абагульнае сховішча ca = Emmagatzematge compartit extern de = Externer gemeinsamer Speicher + et = Väline jagatud salvestusruum fr = Stockage externe partagé nl = Extern gedeeld geheugen pl = Zewnętrzna pamięć współdzielona @@ -2004,6 +2056,7 @@ be = %1$@ вольна з %2$@ ca = %1$@ lliures de %2$@ de = %1$@ frei von %2$@ + et = %1$@ vaba ruumist %2$@ fr = %1$@ libres sur %2$@ nl = %1$@ beschikbaar van %2$@ pl = %1$@ wolne z %2$@ @@ -2025,6 +2078,7 @@ de = Karten verschieben? el = Να γίνει μετακίνηση χαρτών; es = ¿Mover mapas? + et = Teisaldada kaardid? eu = Mapak mugitu? fa = ایا نقشه ها جابه جا شود؟ fi = Siirrä karttoja? @@ -2059,6 +2113,7 @@ ar = فشلت عملية نقل ملفات الخرائط ca = S'ha produït un error en moure els fitxers de mapes de = Fehler beim Verschieben der Karten + et = Kaardipaanide teisaldamine ebaõnnestus fr = Erreur lors du déplacement des cartes nl = Fout bij het verplaatsen van kaartbestanden pl = Błąd przenoszenia plików map @@ -2079,6 +2134,7 @@ de = Dies kann einige Minuten in Anspruch nehmen.\nBitte warten… el = Αυτό μπορεί να διαρκέσει αρκετά λεπτά. \nΠαρακαλώ περιμένετε… es = Esto podría tardar varios minutos.\nPor favor, espere… + et = See võib võtta mitu minutit.\nPalun oota… eu = Honek minutu batzuk iraun ditzake.\n Itxaron mesedez… fa = ممکن است چند دقیقه طول بکشد.\nلطفا صبر کنید… fi = Tämä voi kestää useita minuutteja.\nOdota hetki… @@ -2119,6 +2175,7 @@ de = Maßeinheiten el = Μονάδες μέτρησης es = Unidades de medida + et = Mõõtühikud eu = Neurketa-unitateak fa = واحد اندازه گیری fi = Mittayksiköt @@ -2160,6 +2217,7 @@ de = Wählen Sie zwischen Kilometern und Meilen el = Επιλέξετε ανάμεσα σε μίλια και χιλιόμετρα es = Elija entre millas y kilómetros + et = Vali miilide ja kilomeetrite vahel eu = Aukeratu mila eta kilometroen artean fa = بین مایل و کیلومتر انتخاب کنید fi = Valitse mailit tai kilometrit @@ -2202,6 +2260,7 @@ de = Essmöglichkeiten el = Πού να φάμε es = Dónde comer + et = Kus süüa eu = Non jan fa = کجا غذا بخوریم fi = Missä syödä @@ -2242,6 +2301,7 @@ de = Lebensmittel el = Παντοπωλεία es = Alimentación + et = Toidukaubad eu = Janariak fa = عطاری fi = Elintarvikkeet @@ -2282,6 +2342,7 @@ de = Verkehr el = Συγκοινωνία es = Transporte + et = Transport eu = Garraioa fa = حمل و نقل fi = Liikenne @@ -2323,6 +2384,7 @@ de = Tankstelle el = Βενζίνη es = Gasolinera + et = Tanklad eu = Erregai-geltokia fa = سوخت fi = Huoltoasema @@ -2363,6 +2425,7 @@ de = Parkplatz el = Χώρος στάθμευσης es = Aparcamiento + et = Parkla eu = Aparkalekua fa = پارکینگ fi = Parkkipaikka @@ -2403,6 +2466,7 @@ de = Shopping el = Ψώνια es = Compras + et = Poed eu = Erosketak fa = خرید کردن fi = Ostokset @@ -2443,6 +2507,7 @@ de = Hotel el = Ξενοδοχείο es = Hotel + et = Hotell eu = Hotela fa = هتل fi = Hotelli @@ -2483,6 +2548,7 @@ de = Sehenswürdigkeit el = Αξιοθέατα es = Turismo + et = Vaatamisväärsused eu = Turismoa fa = منظره fi = Nähtävyydet @@ -2523,6 +2589,7 @@ de = Unterhaltung el = Ψυχαγωγία es = Entretenimiento + et = Meelelahutus eu = Entretenimendua fa = سرگرمی fi = Viihde @@ -2563,6 +2630,7 @@ de = Geldautomat el = ATM es = Cajero automático + et = Pangaautomaat eu = Kutxazain automatikoa fa = خود پرداز fi = Pankkiautomaatti @@ -2603,6 +2671,7 @@ de = Nachtleben el = Νυχτερινή Ζωή es = Vida nocturna + et = Ööelu eu = Gaueko bizitza fa = تفریحات شبانه fi = Yöelämä @@ -2643,6 +2712,7 @@ de = Freizeit mit Kindern el = Οικογενειακές Διακοπές es = Ocio en familia + et = Perepuhkus eu = Familiako jarduerak fa = تعطیلات خانوادگی fi = Vapaa-aikaa lasten kanssa @@ -2683,6 +2753,7 @@ de = Bank el = Τράπεζα es = Banco + et = Pank eu = Bankua fa = بانک fi = Pankki @@ -2723,6 +2794,7 @@ de = Apotheke el = Φαρμακείο es = Farmacia + et = Apteek eu = Farmazia fa = داروخانه fi = Apteekki @@ -2763,6 +2835,7 @@ de = Krankenhaus el = Νοσοκομείο es = Hospital + et = Haigla eu = Ospitalea fa = بیمارستان fi = Sairaala @@ -2804,6 +2877,7 @@ de = Toilette el = Τουαλέτα es = Baños + et = Tualett eu = Komunak fa = توالت fi = WC @@ -2844,6 +2918,7 @@ de = Post el = Ταχυδρομείο es = Oficina de correos + et = Post eu = Posta bulegoa fa = صندوق پست fi = Posti @@ -2884,6 +2959,7 @@ de = Polizeistation el = Αστυνομία es = Policía + et = Politsei eu = Polizia fa = پلیس fi = Poliisi @@ -2924,6 +3000,7 @@ de = WLAN el = WiFi es = WiFi + et = WiFi eu = WiFi fa = وای فای fi = WiFi @@ -2962,6 +3039,7 @@ de = Recycling el = Ανακύκλωση es = Reciclaje + et = Taaskasutus es-MX = Reciclaje eu = Birziklapena fa = بازیافت @@ -3002,6 +3080,7 @@ de = Wasser el = Νερό es = Agua + et = Vesi es-MX = Agua eu = Ura fa = اب @@ -3085,6 +3164,7 @@ de = Notizen el = Σημειώσεις es = Notas + et = Märkmed eu = Notak fa = یادداشت ها fi = Muistiinpanot @@ -3125,6 +3205,7 @@ de = Organic Maps-Lesezeichen mit Ihnen geteilt el = Κοινοποιήθηκαν αγαπημένα Organic Maps με σας es = Marcapáginas de Organic Maps compartidos contigo + et = Organic Maps järjehoidjaid jagati Sinuga eu = Organic Maps markatzaileak zurekin partekatu dira fi = Jaetut Organic Maps-kirjanmerkit fr = Signets Organic Maps partagés @@ -3159,6 +3240,7 @@ ca = Hola!\n\nAdjunto els meus marcadors de l'aplicació Organic Maps. Obriu-los si teniu l'Organic Maps instal·lat. O, si no teniu l'aplicació, baixeu-la per al vostre aparell iOS o Android seguint aquest enllaç: https://omaps.app/get?kmz\n\nGaudiu viatjant amb l'Organic Maps! de = Hallo!\n\nIm Anhang sind meine Lesezeichen der Organic Maps App. Sie können sie mit Organic Maps öffnen. Wenn Sie die App nicht installiert haben, können Sie sie von https://omaps.app/get?kmz für iOS oder Android herunterladen.\n\nViel Spaß beim Reisen mit Organic Maps! es = Hola!\n\Adjunto mis marcadores de la aplicación Organic Maps. Por favor, ábrelos si tienes instalado Organic Maps. O, si no lo tienes, descarga la aplicación para tu dispositivo iOS o Android siguiendo este link: https://omaps.app/get?kmz\n¡Disfruta viajando con Organic Maps! + et = Tere!\nManuses on minu järjehoidjad rakendusest Organic Maps. Palun ava need kui Sul on Organic Maps paigaldatud. Või kui ei ole, lae rakendus alla oma iOS või Android seadmesse, järgides seda linki: https:omaps.appget?kmz\n\nNaudi reisimist Organic Maps-iga! eu = Kaixo!\nNire markatzaileak Mapak organikoak aplikaziotik erantsi ditut. Mesedez, ireki itzazu Organic Maps instalatuta baduzu. Edo, ez baduzu, deskargatu aplikazioa zure iOS edo Android gailurako esteka hau jarraituz: https://omaps.app/get?kmz\n\nGozatu bidaiatzen Organic Maps-ekin! fr = Bonjour !\n\nVous trouverez ci-joint mes signets de l'appli Organic Maps. Veuillez les ouvrir si vous avez installé Organic Maps. Si vous ne l'avez pas, téléchargez l'application pour votre appareil iOS ou Android en suivant ce lien : https://omaps.app/get?kmz\n\nBon voyage avec Organic Maps! it = Ciao!\n\nIn allegato ci sono i miei luoghi preferiti. Aprili se hai installato Organic Maps. Oppure, se non ce l'hai, scarica l'app per iOS o Android seguendo questo link: https://omaps.app/\n\nDivertiti a viaggiare con Organic Maps! @@ -3185,6 +3267,7 @@ de = Lesezeichen werden geladen el = Φόρτωση αγαπημένων es = Cargando favoritos + et = Järjehoidjate laadimine eu = Markatzaileak kargatzen fa = در حال بارگیری نشانه ها fi = Ladataan kirjanmerkkejä @@ -3225,6 +3308,7 @@ de = Lesezeichen erfolgreich geladen! Sie können diese nun auf Ihrer Karte oder im Lesezeichen-Manager anzeigen. el = Τα αγαπημένα φορτώθηκαν με επιτυχία! Μπορείτε να τα βρείτε στο χάρτη ή στην οθόνη Διαχείριση αγαπημένων. es = ¡Los favoritos se han cargado con éxito! Puedes encontrarlos en el mapa o en la pantalla de Gestión de favoritos. + et = Järjehoidjad edukalt laetud! Leiad need kaardil või järjehoidjate halduri ekraanil. eu = Gogokoak behar bezala kargatu dira! Mapan edo kudeatu gogokoak pantailan aurki ditzakezu. fa = نشانه ها با موفقیت بارگذاری شد!شما می توانید ان ها را در نقشه یا بخش مدیریت نشانه ها بیابید fi = Kirjanmerkkien lataaminen onnistui! Löydät ne joko kartalta tai kirjanmerkkien hallinnasta. @@ -3265,6 +3349,7 @@ de = Laden der Lesezeichen fehlgeschlagen. Die Datei könnte beschädigt oder defekt sein. el = Η μεταφόρτωση των αγαπημένων απέτυχε. Το αρχείο μπορεί να είναι κατεστραμμένο ή ελαττωματικό. es = La carga de favoritos ha fallado. El archivo puede estar corrupto o ser defectuoso. + et = Järjehoidjate laadimine ebaõnnestus. Fail võib olla vigane. eu = Ezin izan da gogokoak kargatu. Fitxategia hondatuta edo akastuna izan daiteke. fa = بارگذاری نشانه ها با شکست مواجح شد.ممکن است فایل اسیب دیده یا معیوب باشد fi = Kirjanmerkkien lähetys epäonnistui. Tiedosto saattaa olla vioittunut. @@ -3305,6 +3390,7 @@ de = Bearbeiten el = Επεξεργασία es = Editar + et = Muuda eu = Editatu fa = ویرایش fi = Muokkaa @@ -3344,6 +3430,7 @@ de = Ihr Standort konnte noch nicht ermittelt werden el = Η τοποθεσία σας δεν έχει καθοριστεί ακόμη es = Tu ubicación aún no ha sido determinada + et = Sinu asukoht ei ole veel määratud eu = Zure kokapena ez da oraindik zehaztu fa = مکان شما هنوز مشخص نشده است fi = Sijaintiasi ei ole vielä määritetty @@ -3384,6 +3471,7 @@ de = Leider sind die Einstellungen für die Kartenspeicherung deaktiviert. el = Λυπούμαστε, η αποθήκευση του χάρτη είναι προς το παρόν απενεργοποιημένη. es = Lo sentimos, la configuración del almacenamiento de mapas está desactivada. + et = Vabandust, kaardi salvestuse seaded on hetkel keelatud. eu = Barkatu, mapa biltegiratzeko ezarpena desgaituta dago. fa = متاسفانه,تنظیمات ذخیره سازی نقشه در حال حاظر غیر فعال است fi = Valitettavasti karttatallennusasetukset ovat pois päältä. @@ -3424,6 +3512,7 @@ de = Die Karte wird heruntergeladen. el = Λήψη χάρτη σε εξέλιξη. es = La descarga del mapa está en curso ahora. + et = Kaardi allalaadimine on hetkel käimas. eu = Mapak deskargatzen ari dira. fa = دانلود نقشه اکنون در حال انجام است fi = Maata ladataan parhaillaan. @@ -3464,6 +3553,7 @@ de = Hey, sieh dir meinen aktuellen Standort auf Organic Maps an! %1$@ oder %2$@ Keine Offline-Karten installiert? Hier herunterladen: https://omaps.app/get el = Έλεγξε την τρέχουσα τοποθεσία μου στο Organic Maps! %1$@ ή %2$@ στην περίπτωση που δεν έχεις εγκαταστήσει χάρτες εκτός σύνδεσης, μπορείς να τους κατεβάσεις εδώ: https://omaps.app/get es = Mira mi ubicación actual en Organic Maps!. %1$@ o %2$@ ¿No tienes mapas offline? Descarga aquí: https://omaps.app/get + et = Hei, vaata minu hetkeasukohta Organic Maps kaardil! %1$@ või %2$@ Võrguühenduseta kaardid puuduvad? Lae siit: https://omaps.app/get eu = Ikusi nire uneko kokapena Organic Maps-en! %1$@ edo %2$@ Ez al duzu lineaz kanpoko maparik? Deskargatu hemen: https://omaps.app/get fi = Hei, katso sijaintini Organic Maps-sovelluksessa! %1$@ tai %2$@ Eikö sinulla ole vielä offline-karttoja? Lataa ne täältä: https://omaps.app/get fr = Hé, regarde ma position actuelle sur Organic Maps ! %1$@ ou %2$@. Les cartes hors ligne ne sont pas installées ? Les télécharger ici : https://omaps.app/get @@ -3503,6 +3593,7 @@ de = Hey, sieh dir meine Stecknadel auf der Organic Maps-Karte an! el = Έλεγξε τις τοποθεσίες που έχω καρφιτσώσει στο Organic Maps! es = Mira mi marcador en el mapa de Organic Maps! + et = Hei, vaata minu asukoha märget Organic Maps kaardil! eu = Begiratu nire markatzailea Map organikoak mapan! fi = Hei, katso merkintäni Organic Maps-kartalla fr = Hé, regarde mon signet sur la carte Organic Maps ! @@ -3542,6 +3633,7 @@ de = Hey, sieh dir meinen aktuellen Standort auf der Organic Maps-Karte an el = Έλεγξε την τρέχουσα τοποθεσία μου στο χάρτη Organic Maps! es = Mira mi ubicación actual en el mapa en Organic Maps! + et = Hei, vaata minu hetkeasukohta Organic Maps kaardil! eu = Ikusi nire uneko kokapena mapan Organic Maps-en! fi = Hei, kurkkaa tämänhetkinen sijaintini Organic Maps:n kartalla! fr = Hé, regarde ma position actuelle sur la carte Organic Maps ! @@ -3581,6 +3673,7 @@ de = Hi,\n\nich bin gerade hier: %1$@. Klicke den Link %2$@ oder %3$@, um den Ort auf der Karte anzuzeigen.\n\nVielen Dank. el = Γεια,\n\nείμαι εδώ τώρα: %1$@. Κάνε κλικ σε αυτό το σύνδεσμο %2$@ ή σε αυτόν %3$@ για να δεις την τοποθεσία στο χάρτη.\n\nΕυχαριστώ. es = Hola:\n\nAhora estoy aquí: %1$@. Haz clic en este enlace %2$@ o esta %3$@ para verlo en el mapa.\n\nGracias. + et = Tere,\n\nOlen praegu siin: %1$@. Ava see link %2$@ või see %3$@, et näha seda kohta kaardil.\n\nAitäh. eu = Kaixo:\n\nOrain hemen nago: %1$@. Egin klik esteka honetan %2$@ edo %3$@ honetan mapan ikusteko.\n\nEskerrik asko. fi = Hei,n\nOlen nyt täällä: %1$@. Klikkaa linkkiä %2$@ tai %3$@ nähdäksesi paikan kartalla. Kiitos. fr = Bonjour,\n\nJe suis actuellement ici : %1$@. Clique sur ce lien %2$@ ou sur celui-ci %3$@ pour voir l'endroit sur la carte.\n\nMerci. @@ -3620,6 +3713,7 @@ de = Teilen el = Κοινοποίηση es = Compartir + et = Jaga eu = Partekatu fa = اشتراک گذاری fi = Jaa @@ -3660,6 +3754,7 @@ de = Email el = Email es = Email + et = E-post eu = Email fa = ایمیل fi = Sähköposti @@ -3699,6 +3794,7 @@ de = In die Zwischenablage kopiert: %1$@ el = Αντιγράφηκε στο Πρόχειρο: %1$@ es = Copiado al portapapeles: %1$@ + et = Kopeeritud vahemällu: %1$@ eu = Arbelean kopiatu da: %1$@ fa = کپی در کلیپ برد :%1$@ fi = Kopioitu leikepöydälle: %1$@ @@ -3739,6 +3835,7 @@ de = Info el = Πληροφορίες es = Información + et = Teave eu = Informazioa fa = اطلاعات fi = Tietoa @@ -3779,6 +3876,7 @@ de = Fertig el = Ολοκληρώθηκε es = Hecho + et = Valmis eu = Eginda fa = انجام شد fi = Valmis @@ -3819,6 +3917,7 @@ de = Version: %@ el = Έκδοση: %@ es = Versión: %@ + et = Versioon: %@ eu = Bertsioa: %@ fa = ورژن: %@ fi = Versio: %@ @@ -3860,6 +3959,7 @@ de = OpenStreetMap-Daten: %@ el = Δεδομένα OpenStreetMap: %@ es = Datos de OpenStreetMap: %@ + et = OpenStreetMap andmed: %@ eu = OpenStreetMap datuak: %@ fa = OpenStreetMap: %@ ﯼﺎﻫ ﻩﺩﺍﺩ fi = OpenStreetMap-tiedot: %@ @@ -3901,6 +4001,7 @@ de = Möchten Sie wirklich fortfahren? el = Θέλετε σίγουρα να συνεχίσετε? es = ¿Seguro que desea continuar? + et = Oled kindel, et soovid jätkata? eu = Ziur jarraitu nahi duzula? fa = برای ادامه کار مطمئن اید؟ fi = Oletko varma että haluat jatkaa? @@ -3941,6 +4042,7 @@ de = Strecken el = Διαδρομές es = Rutas + et = Rajad eu = Ibilbideak fa = مسیر fi = Reitit @@ -3981,6 +4083,7 @@ de = Länge el = Μήκος es = Longitud + et = Pikkus eu = Luzera fa = طول fi = Pituus @@ -4020,6 +4123,7 @@ de = Meinen Standort teilen el = Κοινοποίηση της τοποθεσίας μου es = Compartir mi ubicación + et = Jaga minu asukohta eu = Partekatu nire kokapena fa = به اشتراک گذاری موقعیت مکانی من fi = Jaa sijaintini @@ -4057,6 +4161,7 @@ ca = Configuració general de = Allgemeine Einstellungen es = Ajustes generales + et = Üldseaded eu = Doikuntza orokorrak fa = تنظیمات عمومی fi = Yleiset asetukset @@ -4083,6 +4188,7 @@ ca = Informació de = Information es = Información + et = Teave eu = Informazioa fa = اطلاعات fi = Tietoja @@ -4111,6 +4217,7 @@ de = Navigation el = Πλοήγηση es = Navegación + et = Navigeerimine eu = Nabigazioa fa = مسیریابی fi = Navigaatio @@ -4149,6 +4256,7 @@ de = Zoom-Tasten el = Πλήκτρα μεγέθυνσης es = Botones de zoom + et = Zoomi nupud eu = Zoom botoiak fa = دکمه های درشت نمایی fi = Zoomauspainikkeet @@ -4188,6 +4296,7 @@ de = Auf dem Bildschirm anzeigen el = Εμφάνιση στο χάρτη es = Visualización en la pantalla + et = Kuva kaardil eu = Pantailan bistaratzea fa = نمایش بر روی نقشه fi = Näytä ruudulla @@ -4228,6 +4337,7 @@ de = Nachtmodus el = Νυχτερινή λειτουργία es = Modo nocturno + et = Öörežiim eu = Gaueko modua fa = حالت شب fi = Yötila @@ -4267,6 +4377,7 @@ de = Aus el = Απενεργ. es = Desactivado + et = Väljas eu = Desgaituta fa = خاموش fi = Pois päältä @@ -4306,6 +4417,7 @@ de = An el = Ενεργ. es = Activado + et = Sees eu = Aktibatuta fa = روشن fi = Päällä @@ -4345,6 +4457,7 @@ de = Auto el = Αυτόματα es = Automático + et = Automaatne eu = Automatikoa fa = خودکار fi = Automaattinen @@ -4384,6 +4497,7 @@ de = Perspektivische Ansicht el = Προβολή προοπτικής es = Vista en perspectiva + et = Perspektiivi vaade eu = Perspektiba ikuspegia fa = نمای چشم انداز fi = Perspektiivinäkymä @@ -4423,6 +4537,7 @@ de = 3D-Gebäude el = Τρισδιάστατα κτίρια es = Edificios en 3D + et = 3D hooned eu = 3D eraikinak fa = ساختمان های سه بعدی fi = 3D-rakennukset @@ -4462,6 +4577,7 @@ de = Sprachführung el = Φωνητικές οδηγίες es = Instrucciones de voz + et = Hääljuhised eu = Ahots argibideak fa = دستور العمل صوتی fi = Ääniohjeistukset @@ -4501,6 +4617,7 @@ de = Sprache für Sprachführung el = Γλώσσα φωνής es = Idioma de voz + et = Hääle keel eu = Ahots hizkuntza fa = زبان صوت fi = Äänen kieli @@ -4540,6 +4657,7 @@ de = Nicht verfügbar el = Δεν είναι διαθέσιμη es = No disponible + et = Ei ole saadaval eu = Ez dago erabilgarri fa = موجود نیست fi = Ei saatavilla @@ -4579,6 +4697,7 @@ de = Weitere el = Άλλα es = Otros + et = Muu eu = Beste batzuk fa = بیشتر fi = Muu @@ -4618,6 +4737,7 @@ de = Letzte Strecke el = Πρόσφατη διαδρομή es = Trayecto reciente + et = Hiljutine rada eu = Azken bidaia fa = مسیر اخیر fi = Viimeisin reitti @@ -4656,6 +4776,7 @@ de = Auto-Zoom el = Αυτόματη μεγέθυνση es = Zoom automático + et = Automaatne zoom eu = Zoom automatikoa fa = بزرگ نمایی خودکار fi = Automaattinen zoomaus @@ -4694,6 +4815,7 @@ de = Aus el = Απενεργ. es = Desactivada + et = Väljas eu = Desaktibatuta fa = خاموش fi = Pois päältä @@ -4732,6 +4854,7 @@ de = 1 Stunde el = 1 ώρα es = 1 hora + et = 1 tund eu = 1 ordu fa = 1 ساعت fi = 1 tunti @@ -4770,6 +4893,7 @@ de = 2 Stunden el = 2 ώρες es = 2 horas + et = 2 tundi eu = 2 ordu fa = 2 ساعت fi = 2 tuntia @@ -4808,6 +4932,7 @@ de = 6 Stunden el = 6 ώρες es = 6 horas + et = 6 tundi eu = 6 ordu fa = 6 ساعت fi = 6 tuntia @@ -4846,6 +4971,7 @@ de = 12 Stunden el = 12 ώρες es = 12 horas + et = 12 tundi eu = 12 ordu fa = 12 ساعت fi = 12 tuntia @@ -4884,6 +5010,7 @@ de = 1 Tag el = 1 ημέρα es = 1 día + et = 1 päev eu = 1 egun fa = 1 روز fi = 1 päivä @@ -4922,6 +5049,7 @@ de = So können Sie die zurückgelegte Strecke für einen bestimmten Zeitraum aufzeichnen und auf der Karte sehen. Hinweis: Die Aktivierung dieser Funktion führt zu erhöhtem Batterieverbrauch. Die Aufzeichnung wird nach Ablauf des Zeitintervalls automatisch von der Karte entfernt. el = Σας επιτρέπει να καταγράψετε τη διαδρομή που έχει διανυθεί για συγκεκριμένο χρονικό διάστημα και να την δείτε στο χάρτη. Λάβετε υπόψη: η ενεργοποίηση αυτής της λειτουργίας κάνει έντονη χρήση της μπαταρίας. Το τμήμα θα αφαιρεθεί αυτόματα από το χάρτη μετά τη λήξη του μεσοδιαστήματος. es = Permite registrar el recorrido realizado durante un determinado periodo de tiempo y verlo en el mapa. Tenga en cuenta que la activación de esta función aumenta el consumo de la batería. El registro del recorrido se eliminará automáticamente del mapa una vez vencido dicho periodo de tiempo. + et = See valik võimaldab salvestada läbitud tee teatud ajaks ja näha seda kaardil. Pange tähele: selle funktsiooni aktiveerimine suurendab aku kasutust. Rada eemaldatakse automaatselt kaardilt pärast ajaintervalli möödumist. eu = Denbora tarte jakin batean egindako ibilbidea erregistratu eta mapan ikusteko aukera ematen du. Kontuan izan funtzio hau aktibatzea bateriaren kontsumoa handitzen dela. Ibilbide-erregistroa automatikoki kenduko da mapatik denbora-tarte hori igaro ondoren. fa = با این قابلیت شما می توانید مسیری که می پیمایید را در یک دوره مشخص ضبط نماید و ان را بر روی نقشه ببینید.لطفا توجه نمایید:فعال سازی این قابلیت باعث افزایش مصرف باتری موبایل شما می شود.مسیر به طور خودکار بعد از مدت مشخص شده حذف خواهد شد fi = Toiminnon avulla voit tallentaa kuljetun reitin tietyltä ajalta ja nähdä sen kartalla: Huomautus: tämän toiminnon aktivoiminen lisää akun käyttöä. Reitti poistetaan kartalta automaattisesti ajanjakson päätyttyä. @@ -4959,6 +5087,7 @@ da = Afstand de = Entfernung es = Distancia + et = Kaugus eu = Distantzia fa = مسافت fi = Etäisyys @@ -4998,6 +5127,7 @@ de = Auf der Karte ansehen el = Προβολή στο χάρτη es = Ver en el mapa + et = Vaata kaardil eu = Ikusi mapan fa = مشاهده بر روی نقشه fi = Näytä kartalla @@ -5047,6 +5177,7 @@ de = Webseite el = Ιστότοπος es = Sitio web + et = Veebileht eu = Webgunea fa = وب سایت fi = Kotisivut @@ -5086,6 +5217,7 @@ de = News el = Νέα es = Noticias + et = Uudised fa = ﺭﺎﺒﺧﺍ fi = Uutiset fr = Nouvelles @@ -5176,6 +5308,7 @@ de = Feedback el = Σχόλια es = Comentarios + et = Tagasiside eu = Iruzkinak fa = بازخورد fi = Palaute @@ -5215,6 +5348,7 @@ de = Bewerten Sie die App el = Βαθμολογήστε την εφαρμογή es = Valora la aplicación + et = Hinda rakendust eu = Baloratu aplikazioa fa = امتیاز به این اپلیکیشن fi = Arvioi sovellus @@ -5255,6 +5389,7 @@ de = Hilfe el = Βοήθεια es = Ayuda + et = Abi eu = Laguntza fa = کمک fi = Ohje @@ -5295,6 +5430,7 @@ de = Fragen und Antworten el = Ερωτήσεις και απαντήσεις es = Preguntas frecuentes + et = Korduma kippuvad küsimused eu = Maiz galderak fa = ﺦﺳﺎﭘ ﻭ ﺶﺳﺮﭘ fi = Kysymykset ja vastaukset @@ -5336,6 +5472,7 @@ de = Spenden el = Προσφέρω es = Donar + et = Anneta eu = Dohaintza eman fa = ﺪﯿﻨﮐ ﺍﺪﻫﺍ fi = Lahjoittaa @@ -5376,6 +5513,7 @@ de = Wie unterstützen Sie uns? el = Πώς να μας υποστηρίξετε; es = ¿Cómo apoyarnos? + et = Kuidas meid toetada? eu = Nola lagundu diguzu? fa = چگونه از ما حمایت کنیم؟ fi = Kuinka tukea meitä? @@ -5416,6 +5554,7 @@ de = Copyright el = Πνευματικά δικαιώματα es = Derechos de autor + et = Autoriõigused eu = Copyright fa = حق نشر و کپی رایت fi = Tekijänoikeudet @@ -5456,6 +5595,7 @@ de = Fehler melden el = Αναφορά σφάλματος es = Hay un error + et = Teata veast eu = Errore bat dago fa = گزارش خطا fi = Ilmoita virheestä @@ -5496,6 +5636,7 @@ de = Der Email-Client ist noch nicht eingerichtet worden. Konfigurieren Sie ihn bitte oder nutzen Sie eine andere Möglichkeit, uns unter %@ zu erreichen. el = Το πρόγραμμα-client ηλεκτρονικού ταχυδρομείου έχει δεν έχει ρυθμιστεί. Ρυθμίστε το ή χρησιμοποιήστε άλλο τρόπο να επικοινωνήσετε μαζί μας στη διεύθυνση %@ es = No se ha configurado el cliente de correo electrónico. Por favor, configúralo o utiliza alguna otra forma de ponerte en contacto con nosotros en %@ + et = E-posti klienti ei ole seadistatud. Palun seadistage see või kasutage mõnda muud võimalust meiega ühenduse võtmiseks aadressil %@ eu = Posta elektronikoko bezeroa ez da konfiguratu. Mesedez, konfigura ezazu edo erabili beste moduren bat gurekin harremanetan jartzeko %@ helbidean fa = کلاینت ایمیل شما پیکربندی نشده است.لطفا ان را پیکربندی کنید یا از طریق دیگر با ما تماس بگیرید %@ fi = Sähköpostisovellusta ei ole asetettu. Ole hyvä ja määritä sähköpostiasetukset tai ota meihin yhteyttä toista kautta osoitteessa %@ @@ -5536,6 +5677,7 @@ de = Fehler beim Email-Versand el = Αποστολή σφάλματος αλληλογραφίας es = Error de envío de correo + et = Viga teate saatmisel eu = Errore bat mezua bidaltzean fa = خطا در ارسال ایمیل fi = Virhe lähetettäessä viestiä @@ -5576,6 +5718,7 @@ de = Kompass-Kalibrierung el = Βαθμονόμηση πυξίδας es = Calibración de la brújula + et = Kompassi kalibreerimine eu = Konpas kalibrazioa fa = تنظیم کردن قظب نما fi = Kompassin kalibrointi @@ -5616,6 +5759,7 @@ de = Alle aktualisieren el = Ενημέρωση όλων es = Actualizar todos + et = Värskenda kõik eu = Eguneratu guztiak fa = اپدیت همه fi = Päivitä kaikki @@ -5655,6 +5799,7 @@ de = Alle abbrechen el = Ακύρωση όλων es = Cancelar todo + et = Tühista kõik eu = Guztiak bertan behera utzi fa = لغو همه fi = Peruuta kaikki @@ -5695,6 +5840,7 @@ de = Heruntergeladen el = Έγινε λήψη es = Descargado + et = Alla laetud eu = Alta fa = دانلود شده fi = Ladatut @@ -5733,6 +5879,7 @@ de = Verfügbar el = Διαθέσιμη es = Disponible + et = Saadaval eu = Eskuragarri fa = موجود fi = Saatavilla @@ -5772,6 +5919,7 @@ de = In der Warteschlange el = στην ουρά es = En cola + et = Järjekorras eu = Ilaran fa = صف fi = Jonossa @@ -5811,6 +5959,7 @@ de = In meiner Nähe el = Κοντά μου es = Cerca de mí + et = Minu lähedal eu = Nigandik gertu fa = نزدیک من fi = Lähelläni @@ -5850,6 +5999,7 @@ de = Karten el = Χάρτες es = Mapas + et = Kaardid eu = Mapak fa = نقشه ها fi = Kartat @@ -5888,6 +6038,7 @@ de = Alle herunterladen el = Λήψη όλων es = Descargar todos + et = Lae kõik alla eu = Deskargatu guztiak fa = دانلود همه fi = Lataa kaikki @@ -5926,6 +6077,7 @@ de = Wird heruntergeladen: el = Λήψη: es = Descargando: + et = Allalaadimine: eu = Deskargatzen: fa = درحال دانلود: fi = Ladataan: @@ -5963,6 +6115,7 @@ de = Gefunden el = Βρέθηκαν es = Encontrado + et = Leitud eu = Aurkituta fa = یافت شد fi = Löytyi @@ -6002,6 +6155,7 @@ de = Aktualisieren el = Ενημέρωση es = Actualizar + et = Värskenda eu = Eguneratzeko fa = به روز رسانی fi = Päivitä @@ -6042,6 +6196,7 @@ de = Fehlgeschlagen el = Απέτυχε es = Fallo + et = Ebaõnnestus eu = Porrota fa = ناموفق fi = Epäonnistunut @@ -6082,6 +6237,7 @@ de = Zum Löschen der Karte bitte Navigation unterbrechen. el = Για να διαγράψετε το χάρτη, σταματήστε την πλοήγηση. es = Para eliminar el mapa, por favor, detén la navegación. + et = Kaardi kustutamiseks palun lõpeta navigeerimine. eu = Mapa kentzeko, utzi nabigazioa. fa = برای حذف نقشه لطفا مسیر یابی را متوقف کنید fi = Pysäytä navigointi poistaaksesi kartan. @@ -6121,6 +6277,7 @@ de = Es können nur Routen erstellt werden, die vollständig in einer einzigen Karte enthalten sind. el = Μπορούν να δημιουργηθούν μόνο διαδρομές που περιέχονται πλήρως μέσα σε ένα χάρτη σε μια ενιαία περιοχή. es = Sólo se pueden crear rutas que estén totalmente contenidas en un mapa de una sola región. + et = Luua saab ainult täielikult ühe regiooni kaardi piiridesse jäävaid marsruute. eu = Eskualde bakarreko mapa batean guztiz bilduta dauden ibilbideak soilik sor daitezke. fa = تنها مسیر هایی می توانند ایجاد شوند که به طور کامل در یک نقشه از یک منطقه واحد قرار داشته باشند. fi = Vain kokonaisuudessaan yhdelle kartalle mahtuvia reittejä voidaan luoda. @@ -6161,6 +6318,7 @@ de = Karte herunterladen el = Λήψη χάρτη es = Descargar el mapa + et = Lae kaart alla eu = Deskargatu mapa fa = دانلود نقشه fi = Lataa kartta @@ -6201,6 +6359,7 @@ de = Wiederholen el = Επανάληψη es = Reintentar + et = Proovi uuesti eu = Saiatu berriro fa = تلاش مجدد fi = Yritä uudelleen @@ -6240,6 +6399,7 @@ de = Karte löschen el = Διαγραφή χάρτη es = Eliminar mapa + et = Kustuta kaart eu = Mapa ezabatu fa = حذف نقشه fi = Poista kartta @@ -6280,6 +6440,7 @@ de = Karte aktualisieren el = Ενημέρωση χάρτη es = Actualizar mapa + et = Värskenda kaart eu = Eguneratu mapa fa = به روز رسانی نقشه fi = Päivitä kartta @@ -6361,6 +6522,7 @@ de = Nutzen Sie die Google Play-Dienste, um Ihren aktuellen Standort zu erhalten el = Χρησιμοποιήστε υπηρεσίες Google Play για να προσδιορίσετε την τρέχουσα τοποθεσία σας es = Usar los servicios de Google Play para obtener tu ubicación actual + et = Kasuta Google Play teenuseid oma hetkeasukoha määramiseks eu = Erabili Google Play zerbitzuak zure uneko kokapena lortzeko fa = استفاده از Google Play Services برای تعیین موقعیت کنونی شما fi = Käytä Google Play -palveluita sijaintisi selvittämiseksi @@ -6400,6 +6562,7 @@ de = Karten entlang der Route herunterladen el = Κατεβάστε όλους τους χάρτες για ολόκληρο το μήκος της διαδρομής σας es = Descargue todos los mapas de su ruta + et = Lae alla kõik kaardid oma marsruudil eu = Deskargatu zure ibilbidearen mapa guztiak fa = دانلود تمامی نقشه ها در طول مسیر تان fi = Lataa karttoja matkalla @@ -6439,6 +6602,7 @@ de = Zum Erstellen einer Route müssen alle Karten von Ihrem Standort bis zum Ziel heruntergeladen und aktualisiert worden sein. el = Για να δημιουργήσετε μια διαδρομή, πρέπει να κατεβάσετε και να ενημερώσετε όλους τους χάρτες από τη θέση σας στον προορισμό σας. es = Para crear una ruta es necesario descargar y actualizar todos los mapas de la ubicación de destino. + et = Marsruudi loomiseks on meil vaja alla laadida ja värskendada kõiki sinu lähte- ja sihtkoha vahele jäävaid kaarte. eu = Ibilbide bat sortzeko beharrezkoa da helmugako kokapenaren mapa guztiak deskargatu eta eguneratzea. fa = به منظور ایجاد مسیر ما نیاز داریم تا تمامی نقشه های شما از مبدا تا مقصد را به روز رسانی کنیم. fi = Reitin luominen vaatii karttojen lataamisen ja päivityksen oman sijaintisi ja kohteeen väliltä. @@ -6477,6 +6641,7 @@ de = Nicht genug Speicherplatz el = Δεν υπάρχει αρκετός χώρος es = No hay suficiente espacio + et = Ei ole piisavalt ruumi eu = Leku nahikoa ez fa = فضای کافی موجود نیست fi = Ei tarpeeksi tilaa @@ -6516,6 +6681,7 @@ de = Lesezeichen el = αγαπημένο es = marcador + et = järjehoidja eu = Markatzailea fa = نشانه ها fi = kirjanmerkki @@ -6556,6 +6722,7 @@ de = Aktivieren Sie bitte Ortungsdienste el = Ενεργοποιήστε τις υπηρεσίες εντοπισμού τοποθεσίας es = Por favor, active los servicios de localización + et = Palun luba asukohateenused eu = Mesedez, aktibatu kokapen zerbitzuak fa = لطفا موقعیت مکانی(GPS)خود را فعال کنید. fi = Ota sijaintipalvelut käyttöön @@ -6594,6 +6761,7 @@ de = Speichern el = Αποθήκευση es = Guardar + et = Salvesta eu = Gorde fa = ذخیره fi = Tallenna @@ -6632,6 +6800,7 @@ de = Ihre Beschreibungen (Text oder HTML) el = Οι περιγραφές σας (κείμενο ή html) es = Tus descripciones (texto o html) + et = Sinu kirjeldused (tekst või html) eu = Zure deskribapenak (testua edo html) fa = توضیحات شما (متن یا (html fi = Kuvauksesi (teksti tai html) @@ -6670,6 +6839,7 @@ de = erstellen el = δημιουργήστε es = crear + et = loo eu = sortu fa = ایجاد fi = luo @@ -6710,6 +6880,7 @@ el = Κόκκινο es = Rojo es-MX = Rojo + et = Punane eu = Gorria fa = قرمز fi = Punainen @@ -6750,6 +6921,7 @@ el = Κίτρινο es = Amarillo es-MX = Amarillo + et = Kollane eu = Horia fa = زرد fi = Keltainen @@ -6790,6 +6962,7 @@ el = Μπλε es = Azul es-MX = Azul + et = Sinine eu = Urdina fa = ابی fi = Sininen @@ -6830,6 +7003,7 @@ el = Πράσινο es = Verde es-MX = Verde + et = Roheline eu = Berdea fa = سبز fi = Vihreä @@ -6870,6 +7044,7 @@ el = Μωβ es = Morado es-MX = Morado + et = Lilla eu = Morea fa = بنفش fi = Violetti @@ -6910,6 +7085,7 @@ el = Πορτοκαλί es = Naranja es-MX = Naranja + et = Oranž eu = Laranja fa = نارنجی fi = Oranssi @@ -6950,6 +7126,7 @@ el = Καφέ es = Marrón es-MX = Marrón + et = Pruun eu = Marroia fa = قهوای fi = Ruskea @@ -6990,6 +7167,7 @@ el = Ροζ es = Rosa es-MX = Rosa + et = Roosa eu = Arrosa fa = صورتی fi = Pinkki @@ -7029,6 +7207,7 @@ el = Βαθύ πορφυρό es = Morado oscuro es-MX = Morado oscuro + et = Tumelilla eu = More iluna fa = ارغوانی سیر fi = Tumman purppuranpunainen @@ -7069,6 +7248,7 @@ el = Γαλάζιο es = Azul Claro es-MX = Celeste + et = Helesinine eu = Urdin argia fa = آبی کمرنگ fi = Vaaleansininen @@ -7109,6 +7289,7 @@ el = Κυανό es = Cian es-MX = Cian + et = Siniroheline eu = Zian fa = فیروزه ای fi = Sinivihreä @@ -7149,6 +7330,7 @@ el = Σμαραγδένιο es = Verde azulado es-MX = Verde azulado + et = Smaragdroheline eu = Berde urdinxka fa = آبی سیر fi = Smaragdinvihreä @@ -7189,6 +7371,7 @@ el = Κιτρινοπράσινο es = Lima es-MX = Lima + et = Laimiroheline eu = Karea fa = زرد لیویی fi = Limen värinen @@ -7229,6 +7412,7 @@ el = Βαθύ πορτοκαλί es = Naranja oscuro es-MX = Naranja oscuro + et = Tumeoranž eu = Laranja iluna fa = نارنجی سیر fi = Tumman oranssi @@ -7269,6 +7453,7 @@ el = Γκρι es = Gris es-MX = Gris + et = Hall eu = Grisa fa = خاکستری fi = Harmaa @@ -7309,6 +7494,7 @@ el = Γκρίζο μπλε es = Gris azulado es-MX = Gris azulado + et = Hallikas-sinine eu = Gris urdinxka fa = خاکستری کبود fi = Harmaan sininen @@ -7350,6 +7536,7 @@ de = Wenn Sie der Route folgen, beachten Sie bitte: el = Όταν ακολουθείτε την διαδρομή, να θυμάστε: es = Al seguir la ruta, tenga en cuenta: + et = Marsruuti järgides palun pea meeles: eu = Ibilbidea jarraitzean, kontuan izan: fa = زمانی که مسیری را دنبال می کنید لطفا به یاد داشته باشید: fi = Muista seuraavat asiat seuratessasi reittiä: @@ -7389,6 +7576,7 @@ de = – Straßenverhältnisse, die Verkehrsordnung und Straßenschilder haben stets Vorrang vor Navigationsanweisungen; el = — Οι οδικές συνθήκες, ο κώδικας οδικής κυκλοφορίας και οι σημάνσεις στο δρόμο έχουν πάντα μεγαλύτερη προτεραιότητα από τις συμβουλές πλοήγησης, es = — Las condiciones de la ruta, las reglas de tráfico y las señales de carretera siempre tienen prioridad sobre las sugerencias de navegación; + et = - Teeolud, liikluseeskirjad ja liiklusmärgid omavad alati prioriteeti navigeerimisjuhiste üle; eu = — Ibilbideen baldintzek, zirkulazio arauek eta bide seinaleek lehentasuna dute beti nabigazio-iradokizunen gainetik; fa = —شرایط جاده قوانین راهنمایی و رانندگی و علائم جاده همیشه بر نکات مسیریابی اولویت دارند; fi = — Tien kunto, liikennesäännöt ja tiekyltit ovat aina tärkeämpiä kuin navigointilaitteen ohjeet; @@ -7428,6 +7616,7 @@ de = – Die Karte kann ungenau sein, und die vorgeschlagene Route ist möglicherweise nicht der optimale Weg, um das Ziel zu erreichen; el = — Ο Χάρτης μπορεί να είναι ανακριβής, και η προτεινόμενη διαδρομή μπορεί να μην είναι πάντα ο βέλτιστος τρόπος να φτάσετε στον προορισμό, es = — El mapa puede ser impreciso y sugerir una ruta que no siempre puede ser el mejor camino para llegar al destino; + et = - Kaart võib olla ebatäpne ja soovitatud marsruut ei pruugi alati olla kõige optimaalsem viis sihtkohta jõudmiseks; eu = — Mapa zehaztugabea izan daiteke eta helmugara iristeko biderik onena ez den ibilbide bat iradoki dezake; fa = —نقشه ممکن است اشتباه باشد و مسیر پیشنهادی همیشه بهترین مسیر برای رسید به مقصد شما نباشد; fi = — Kartta saattaa olla epätarkka, joten ehdotettu reitti ei välttämättä ole paras mahdollinen tapa päästä määränpäähän; @@ -7467,6 +7656,7 @@ de = — Die vorgeschlagenen Routen sind als Empfehlungen zu verstehen; el = — Οι προτεινόμενες διαδρομές πρέπει να ερμηνεύονται μόνο ως συστάσεις· es = — Las rutas sugeridas deben entenderse solo como recomendaciones; + et = - Soovitatud marsruute tuleks võtta just sellistena; eu = — Iradokitako ibilbideak gomendio gisa soilik ulertu behar dira; fa = —مسیر پیشنهادی باید فقط به عنوان یک توصیه دانست fi = — Ehdotettuja reittejä tulee pitää vain suosituksina; @@ -7506,6 +7696,7 @@ de = — Bitte seien Sie vorsichtig bei Routen in Grenzgebieten: die Routen, die unsere App erstellt, können manchmal Landesgrenzen in gesperrten Gebieten überschreiten; el = — Προσέχετε τις διαδρομές στις παραμεθόριες ζώνες: οι διαδρομές που δημιουργούνται από την εφαρμογή μας μπορεί μερικές φορές να διαπερνούν τα εθνικά σύνορα σε απαγορευμένες περιοχές. es = — Actúe con cautela en las rutas con zonas fronterizas: las rutas creadas por nuestra aplicación en ocasiones pueden atravesar las fronteras de países en lugares no autorizados; + et = - Olge piiritsoonides marsruutidega ettevaatlik: meie rakenduse loodud marsruudid võivad mõnikord ületada riigipiire volitamata kohtades. eu = — Kontuz ibili muga-eremuak dituzten ibilbideetan: gure aplikazioak sortutako ibilbideek batzuetan herrialdeen mugak zeharkatu ditzakete baimendu gabeko tokietan; fa = —در مسیرهایی که از مناطق مرزی میگذرد احتیاط کنید:مسیر هایی که بوسیله اپلیکیشن ما ایجاد می شود گاهی اوقات ممکن است مرز های کشور ها را رد کند که این در بعضی مناطق غیر مجاز است. fi = — Ole varovainen reittien suhteen raja-alueilla: sovelluksemme luomat reitit voivat toisinaan ylittää maiden rajoja luvattomissa paikoissa; @@ -7544,6 +7735,7 @@ de = Bitte fahren Sie aufmerksam und sicher! el = Να είστε πάντα σε εγρήγορση και να οδηγείτε με ασφάλεια στους δρόμους! es = ¡Manténgase alerta y seguro en las rutas! + et = Ole teel tähelepanelik ja liigu turvaliselt! eu = Egon adi eta seguru errepideetan! fa = لطفا هوشیار و ایمن در جاده بمانید! fi = Pysy tarkkana ja aja turvallisesti! @@ -7583,6 +7775,7 @@ de = GPS-Signal prüfen el = Ελέγξτε το σήμα GPS es = Verificar la señal del GPS + et = Kontrolli GPS signaali eu = Egiaztatu GPS seinalea fa = سیگنال GPS را چک کنید fi = Tarkista GPS-signaali @@ -7622,6 +7815,7 @@ de = Route kann nicht erstellt werden. Aktuelle GPS-Koordinaten konnten nicht ermittelt werden. el = Δεν είναι δυνατή η δημιουργία διαδρομής. Οι τρέχουσες συντεταγμένες GPS δεν μπορούν να προσδιοριστούν. es = No se puede crear la ruta. No se pudieron identificar las coordenadas actuales del GPS. + et = Marsruuti ei saa luua. GPS koordinaate ei õnnestu tuvastada. eu = Ezin da ibilbidea sortu. Ezin izan dira uneko GPS koordenatuak identifikatu. fa = ناتوان از ایجاد مسیر.موقعیت مکانی شما شناسایی نشد fi = Reittiä ei voi luoda. Tämänhetkisiä GPS-koordinaatteja ei löydy. @@ -7661,6 +7855,7 @@ de = Bitte prüfen Sie Ihr GPS-Signal. WLAN verbessert Ihre Standortgenauigkeit. el = Ελέγξτε το σήμα GPS. Η ενεργοποίηση του Wi-Fi θα βελτιώσει την ακρίβεια της τοποθεσίας σας. es = Verifique la señal del GPS. Activar Wi-Fi mejorará la precisión de su ubicación. + et = Palun kontrolli GPS signaali. WiFi lubamine parandab asukoha täpsust. eu = Egiaztatu GPS seinalea. Wi-Fi konexioa aktibatuz gero, zure kokapenaren zehaztasuna hobetuko da. fa = لطفا سیگنال GPS موبایتان راچک کنید.و WiFi موبایلتان را جهت دقت بیشتر در موقعیت یابی فعال کنید. fi = Tarkista GPS-signaali. Wi-Fi-signaalin käyttöönotto parantaa sijainnin tarkkuutta. @@ -7700,6 +7895,7 @@ de = Ortungsdienste aktivieren el = Ενεργοποιήστε τις υπηρεσίες εντοπισμού τοποθεσίας es = Activar servicios de ubicación + et = Luba asukoha teenused eu = Aktibatu kokapen zerbitzuak fa = فعال کردن سرویس موقعیت مکانی (GPS) fi = Ota sijaintipalvelut käyttöön @@ -7739,6 +7935,7 @@ de = Aktuelle GPS-Koordinaten können nicht ermittelt werden. Aktivieren Sie Ortungsdienste, um die Route zu berechnen. el = Δεν είναι δυνατός ο εντοπισμός των τρεχουσών συντεταγμένων GPS. Ενεργοποιήστε τις υπηρεσίες εντοπισμού τοποθεσίας για τον υπολογισμό της διαδρομής. es = No se pueden encontrar las coordenadas del GPS. Active los servicios de ubicación para calcular la ruta. + et = Ei suuda praeguseid GPS koordinaate määrata. Marsruudi arvutamiseks luba asukoha teenused. eu = Ezin dira GPS koordenatuak aurkitu. Aktibatu kokapen zerbitzuak ibilbidea kalkulatzeko. fa = ناتوان از مشخص کردن موقعیت مکانی شما.لطفا سرویس موقعیت مکانی خود را فعال کنید. fi = Tämänhetkisiä GPS-koordinaatteja ei löydy. Ota sijaintipalvelut käyttöön reitin laskemista varten. @@ -7778,6 +7975,7 @@ de = Erforderliche Dateien herunterladen el = Κατεβάστε τα απαιτούμενα αρχεία es = Descargar archivos requeridos + et = Lae alla vajalikud failid eu = Deskargatu beharrezko fitxategiak fa = دانلود فایل های مورد نیاز fi = Lataa tarvittavat tiedostot @@ -7817,6 +8015,7 @@ de = Laden Sie alle Karten- und Routeninformationen für den geplanten Weg herunter und aktualisieren Sie sie, um die Route zu berechnen. el = Κατεβάσετε και να ενημερώσετε όλους τους χάρτες και τις πληροφορίες δρομολόγησης για όλη την απόσταση της προβαλλόμενης διαδρομής για τον υπολογισμό της. es = Descargue y actualice toda la información de mapas y rutas junto con el trayecto proyectado para calcular la ruta. + et = Marsruudi arvutamiseks lae alla ja värskenda kogu kavandatud teekonna kaart ja marsruuditeave. eu = Deskargatu eta eguneratu mapa eta ibilbideen informazio guztia aurreikusitako ibilbidearekin batera ibilbidea kalkulatzeko. fi = Lataa ja päivitä kaikki suunnitellun reitin kartta- ja reititystiedot, jotta reitin voi laskea. fr = Téléchargez et mettez à jour les informations de carte et d'itinéraire de votre trajet pour calculer l'itinéraire. @@ -7855,6 +8054,7 @@ de = Route kann nicht ermittelt werden el = Δε μπορεί να εντοπιστεί η διαδρομή es = Imposible de encontrar una ruta + et = Marsruuti ei õnnestu leida eu = Ezin da ibilbiderik aurkitu fa = ناتوان در تعیین مسیر fi = Reitin paikannus ei onnistu @@ -7894,6 +8094,7 @@ de = Route kann nicht erstellt werden. el = Δε μπορεί να δημιουργηθεί η διαδρομή. es = No se puede crear la ruta. + et = Marsruuti ei õnnestu luua. eu = Ezin da ibilbidea sortu. fa = ناتوان در ایجاد مسیر fi = Reitin luonti ei onnistu. @@ -7933,6 +8134,7 @@ de = Bitte passen Sie Ihren Startpunkt oder Ihr Ziel an. el = Ρυθμίστε το σημείο εκκίνησης ή τον προορισμό σας. es = Ajuste su punto de inicio o su destino. + et = Palun kohanda oma alguspunkti või sihtkohta. eu = Ezarri zure abiapuntua edo helmuga. fa = لطفا مبدا یا مقصد خود را تنظیم کنید. fi = Muuta aloituskohtaa tai määränpäätä. @@ -7972,6 +8174,7 @@ de = Startpunkt anpassen el = Ρυθμίστε το σημείο εκκίνησης es = Ajustar el punto de inicio + et = Kohanda alguspunkti eu = Ezarri abiapuntua fa = مبدا خود را تنظیم کنید fi = Muuta aloituskohtaa @@ -8011,6 +8214,7 @@ de = Route wurde nicht erstellt. Startpunkt kann nicht gefunden werden. el = Δεν δημιουργήθηκε διαδρομή. Δεν είναι δυνατός ο εντοπισμός του σημείου εκκίνησης. es = La ruta no se creó. No se pudo encontrar el punto de inicio. + et = Marsruuti ei loodud. Ei suuda määrata alguspunkti. eu = Ibilbidea ez da sortu. Abiapuntua ezin izan da aurkitu. fa = مسیر ایجاد نشد.ناتوان در تعیین نقطه شروع fi = Reittiä ei luotu. Aloituskohdan paikannus ei onnistu. @@ -8050,6 +8254,7 @@ de = Bitte wählen Sie einen Startpunkt in der Nähe einer Straße aus. el = Επιλέξτε σημείο εκκίνησης πιο κοντά σε ένα δρόμο. es = Seleccione un punto de inicio cercano a una carretera. + et = Palun vali alguspunkt teele lähemal. eu = Hautatu errepide batetik gertu abiapuntua. fa = لطفا نقطه شروع رانزدیک تر به جاده انتخاب کنید. fi = Valitse lähempänä tietä oleva aloituskohta. @@ -8089,6 +8294,7 @@ de = Ziel anpassen el = Ρύθμιση προορισμού es = Ajustar destino + et = Kohanda sihtkohta eu = Helmuga ezarri fa = تنظیم مقصد fi = Muuta määränpäätä @@ -8128,6 +8334,7 @@ de = Route wurde nicht erstellt. Ziel kann nicht gefunden werden. el = Δεν δημιουργήθηκε διαδρομή. Δεν είναι δυνατός ο εντοπισμός του προορισμού. es = La ruta no se creó. No se pudo encontrar el destino. + et = Marsruuti ei loodud. Ei suuda määrata sihtkohta. eu = Ibilbidea ez da sortu. Ezin izan da helmuga aurkitu. fa = مسیر ایجاد نشد.ناتوان در تعیین مقصد. fi = Reittiä ei luotu. Määränpään paikannus ei onnistu. @@ -8167,6 +8374,7 @@ de = Bitte wählen Sie einen Zielort in der Nähe einer Straße aus. el = Επιλέξτε ένα σημείο προορισμού πιο κοντά σε ένα δρόμο. es = Seleccione un punto de destino cercano a una carretera. + et = Palun vali sihtkoht teele lähemal. eu = Hautatu helmuga puntu bat errepide batetik gertu. fa = لطفا مقصد تعیین شده را نزدیک تر به جاده انتخاب نمایید. fi = Valitse lähempänä tietä oleva määränpää. @@ -8206,6 +8414,7 @@ de = Zwischenstopp kann nicht gefunden werden. el = Δεν είναι δυνατός ο εντοπισμός ενδιάμεσου σημείου. es = No se ha podido ubicar la parada intermedia. + et = Ei suuda määrata vahepunkti. eu = Ezin izan da tarteko geralekua kokatu. fa = ناتوان در تعیین نقطه میانی. fi = Välipisteen paikallistaminen ei onnistunut. @@ -8244,6 +8453,7 @@ de = Bitte passen Sie Ihren Zwischenstopp an. el = Ρυθμίστε το ενδιάμεσο σημείο. es = Por favor, ajuste la parada intermedia. + et = Palun kohanda vahepunkti. eu = Mesedez, egokitu tarteko geldialdia. fa = لطفا نقطه میانی را تنظیم کنید. fi = Siirrä välipistettä. @@ -8283,6 +8493,7 @@ de = Systemfehler el = Σφάλμα συστήματος es = Error del sistema + et = Süsteemi viga eu = Sistemaren errorea fa = خطای سیستم fi = Järjestelmävirhe @@ -8322,6 +8533,7 @@ de = Route kann wegen eines Anwendungsfehlers nicht erstellt werden. el = Δεν είναι δυνατή η δημιουργία διαδρομής εξαιτίας σφάλματος εφαρμογής. es = No se pudo crear la ruta debido a un error en la aplicación. + et = Marsruuti ei saa koostada rakenduse vea tõttu. eu = Ibilbidea ezin izan da sortu aplikazioaren errore baten ondorioz. fa = ناتوان در ایجاد مسیر به علت خطای برنامه. fi = Reittiä ei voi luoda sovellusvirheen vuoksi. @@ -8361,6 +8573,7 @@ de = Bitte versuchen Sie es erneut el = Προσπαθήστε ξανά es = Intentar nuevamente + et = Palun proovi uuesti eu = Saiatu berriro fa = لطفا دوباره تلاش کنید fi = Yritä uudelleen @@ -8400,6 +8613,7 @@ de = Nicht jetzt el = Όχι τώρα es = No ahora + et = Mitte praegu eu = Orain ez fa = اکنون خیر fi = Ei nyt @@ -8439,6 +8653,7 @@ de = Möchten Sie die Karte herunterladen und eine bessere Route erstellen, die mehr als eine Karte umfasst? el = Θέλετε να κατεβάσετε το χάρτη και να δημιουργήσετε μια πιο βέλτιστη διαδρομή που εκτείνονται σε περισσότερους από έναν χάρτη; es = ¿Desea descargar el mapa y crear una ruta mejor que abarque más de un mapa? + et = Kas sooviksid kaardi alla laadida ja luua optimaalsema rohkem kui ühte kaarti hõlmava marsruudi? eu = Mapa deskargatu eta mapa bat baino gehiago hartzen duen ibilbide hobe bat sortu nahi duzu? fa = ایا مایل به دانلود نقشه و ایجاد مسیر های بهینه بیشتری که نقشه های بیشتری را پوشش میدهد هستید؟ fi = Haluatko ladata kartan ja luoda paremman reitin, joka ylettyy usealle kartalle? @@ -8478,6 +8693,7 @@ de = Laden Sie die Karte herunter, um eine bessere Route zu erstellen, die den Rand dieser Karte überschreitet. el = Κατεβάσετε επιπλέον χάρτες για να δημιουργήσετε μια καλύτερη διαδρομή που διασχίζει τα όρια αυτού του χάρτη. es = Descargue mapas adicionales para crear una ruta mejor que cruce los límites de este mapa. + et = Lae alla täiendavad kaardid, et luua parem, selle kaardi piire ületav marsruut. eu = Deskargatu mapa osagarriak mapa honen mugak gainditzen dituen ibilbide hobea sortzeko. fa = دانلود نقشه های اضافی برای ایجاد مسیری بهتر که حاشیه های این نقشه را رد می کند. fi = Lataa kartta ja luo parempi reitti, joka ylittää tämän kartan reunan. @@ -8519,6 +8735,7 @@ de = Um mit der Suche und dem Erstellen von Routen zu beginnen, laden Sie bitte die Karte herunter. Sie benötigen danach keine Internetverbindung mehr. el = Για να ξεκινήσετε την αναζήτηση και τη δημιουργία διαδρομών, κατεβάστε το χάρτη. Μετά από αυτό δεν θα χρειάζεστε πλέον σύνδεση στο Internet. es = Para empezar a buscar y crear rutas, descargue el mapa. Después de eso ya no necesitarás una conexión a Internet. + et = Marsruutide otsimise ja loomise alustamiseks lae kaart alla. Pärast seda ei ole Interneti-ühendus enam vajalik. eu = Ibilbideak bilatzen eta sortzen hasteko, deskargatu mapa. Horren ondoren, ez duzu Interneterako konexiorik beharko. fa = برای شروع جستوجو و مسیر یابی لطفا نقشه رادانلود کنید بعد از ان دیگر نیازی به اتصال به اینترنت ندارید و برنامه کاملا افلاین اجرا می شود. fi = Lataa kartta jotta voit käyttää hakua ja luoda reittejä. Tämän jälkeen et tarvitse enää Internet-yhteyttä. @@ -8558,6 +8775,7 @@ de = Karte auswählen el = Επιλέξτε χάρτη es = Seleccionar el mapa + et = Vali kaart eu = Hautatu mapa fa = انتخاب نقشه fi = Valitse kartta @@ -8598,6 +8816,7 @@ de = Anzeigen el = Εμφάνιση es = Mostrar + et = Kuva eu = Erakutsi fa = نمایش fi = Näytä @@ -8637,6 +8856,7 @@ de = Ausblenden el = Απόκρυψη es = Ocultar + et = Peida eu = Ezkutatu fa = مخفی کردن fi = Piilota @@ -8676,6 +8896,7 @@ de = Routenplanung fehlgeschlagen el = Ο σχεδιασμός διαδρομής απέτυχε es = Error al planificar la ruta + et = Marsruudi planeerimine ebaõnnestus eu = Ibilbidea planifikatzeko errorea fa = برنامه ریزی مسیر ناموفق fi = Reitin suunnittelu epäonnistui @@ -8715,6 +8936,7 @@ de = Ankunft: %s el = Άφιξη στις %s es = Llegada: %s + et = Saabumine: %s eu = Iritsiera: %s fa = ورود به: %s fi = Saavut: %s @@ -8752,6 +8974,7 @@ da = For at oprette en rute skal du hente og opdatere alle kort langs ruten. de = Zum Erstellen einer Route müssen Sie alle Karten herunterladen und aktualisieren, auf denen die Route liegt. es = Descargue y actualice todos los mapas a lo largo del camino proyectado para calcular la ruta. + et = Marsruudi arvutamiseks lae alla ja värskenda kõik kavandatud teekonnale jäävad kaardid. eu = Deskargatu eta eguneratu proiektatutako bideko mapa guztiak ibilbidea kalkulatzeko. fi = Lataa ja päivitä kaikki kartat reitin varrella luodaksesi reitin. fr = Pour créer un trajet, veuillez télécharger et mettre à jour toutes les cartes concernant ce trajet. @@ -8789,6 +9012,7 @@ de = Kategorien el = Κατηγορίες es = Categorías + et = Kategooriad eu = Kategoriak fa = دسته بندی ها fi = Luokat @@ -8827,6 +9051,7 @@ de = Verlauf el = Ιστορικό es = Historial + et = Ajalugu eu = Grabatu fa = تاریخچه fi = Historia @@ -8865,6 +9090,7 @@ de = Leider wurde nichts gefunden. el = Ωχ, δεν βρέθηκαν αποτελέσματα. es = Lo siento, no he encontrado nada. + et = Vabandust, tulemusi ei leitud. eu = Barkatu, ez dut ezer aurkitu. fa = متاسفانه چیزی پیدا نشد fi = Pahoittelut, hakutuloksia ei ole. @@ -8903,6 +9129,7 @@ de = Versuchen Sie bitte eine andere Suchanfrage. el = Δοκιμάστε να αλλάξετε τα κριτήρια αναζήτησής σας. es = Por favor, prueba con otra consulta. + et = Proovi muuta otsingutingimusi. eu = Mesedez, saiatu beste kontsulta bat. fa = با تغییر در معیار های جست و جو دوباره امتحان کنید fi = Yritä jotain toista hakusanaa. @@ -8941,6 +9168,7 @@ de = Suchverlauf el = Ιστορικό αναζήτησης es = Historial de búsquedas + et = Otsinguajalugu eu = Bilaketa-historia fa = سوابق جست وجو fi = Hakuhistoria @@ -8979,6 +9207,7 @@ de = Hier werden Ihre letzten Suchanfragen angezeigt. el = Προβολή πρόσφατων αναζητήσεων. es = Ver búsquedas recientes. + et = Vaata hiljutisi otsinguid. eu = Ikusi azken bilaketak. fa = مشاهده جست وجو های اخیر fi = Siirry nopeasti aikaisempaan hakuun. @@ -9017,6 +9246,7 @@ de = Suchverlauf löschen el = Εκκαθάριση ιστορικού αναζήτησης es = Eliminar el historial de búsqueda + et = Tühjenda otsinguajalugu eu = Ezabatu bilaketa-historia fa = پاک کردن سابقه جست وجو ها fi = Poista hakuhistoria @@ -9052,6 +9282,7 @@ ca = Viquipèdia el = Wikipedia es = Wikipedia + et = Vikipeedia fa = ویکی پدیا fr = Wikipédia it = Wikipedia @@ -9083,6 +9314,7 @@ de = Ihr Standort el = Η τοποθεσία σας es = Tu ubicación + et = Sinu asukoht eu = Zure kokapena fa = موقعیت شما fi = Sijaintisi @@ -9121,6 +9353,7 @@ de = Start el = Έναρξη es = Empezar + et = Alusta eu = Hasi fa = شروع fi = Aloita @@ -9159,6 +9392,7 @@ de = Von el = Διαδρομή από es = Desde + et = Marsruut lähtekohast eu = Hemendik fa = مسیر از fi = Lähtöpaikka @@ -9197,6 +9431,7 @@ de = Nach el = Διαδρομή στο es = Ruta hacia + et = Marsruut sihtkohta eu = Bidea hona fa = مسیر به fi = Reitin loppupiste @@ -9235,6 +9470,7 @@ de = Die Navigation ist nur von Ihrem aktuellen Standort verfügbar. el = Η πλοήγηση είναι διαθέσιμη μόνο από την τρέχουσα τοποθεσία σας. es = La navegación solo está disponible desde tu ubicación actual. + et = Navigeerimine on saadaval ainult Sinu praegusest asukohast. eu = Nabigazioa zure uneko kokapenetik soilik dago erabilgarri. fa = مسیر یابی فقط از موقعیت کنونی شما قابل انجام است. fi = Navigointi onnistuu vain nykyisestä sijainnistasi. @@ -9273,6 +9509,7 @@ de = Soll eine Route von Ihrem aktuellen Standort aus berechnet werden? el = Θέλετε να σχεδιάσουμε μια διαδρομή από την τρέχουσα θέση σας; es = ¿Quieres que planeemos un ruta desde tu ubicación actual? + et = Kas soovid, et planeeriksime marsruudi Sinu praegusest asukohast? eu = Zure uneko kokapenetik ibilbide bat antolatzea nahi duzu? fa = ایا می خواهید یک مسیر را از موقعیت فعلیتان برنامه ریزی کنیم؟ fi = Haluatko valita vaihtoehtoisen reitin? @@ -9312,6 +9549,7 @@ de = Weiter el = Επόμενη es = Siguiente + et = Järgmine eu = Jarraian fa = بعدی fi = Seuraava @@ -9350,6 +9588,7 @@ de = Zeitplan hinzufügen el = Προσθέσετε χρονοδιάγραμμα es = Añadir horario + et = Lisa ajakava eu = Gehitu ordutegia fa = اضافه کردن برنامه ریزی fi = Lisää aikataulu @@ -9388,6 +9627,7 @@ de = Zeitplan löschen el = Διαγραφή χρονοδιαγράμματος es = Eliminar horario + et = Kustuta ajakava eu = Ezabatu ordutegia fa = حذف کردن برنامه ریزی fi = Poista aikataulu @@ -9427,6 +9667,7 @@ de = Ganztägig (24 Stunden) el = Όλη την ημέρα (24 ώρες) es = Todo el día (24 horas) + et = Kogu päev (24 tundi) eu = Egun osoa (24 ordu) fa = شبانه روزی (24 ساعته) fi = Kaikki päivät (24 tuntia) @@ -9465,6 +9706,7 @@ de = Geöffnet el = Άνοιγμα es = Abierto + et = Avatud eu = Ireki fa = باز fi = Avoinna @@ -9503,6 +9745,7 @@ de = Geschlossen el = Κλειστό es = Cerrado + et = Suletud eu = Itxita fa = بسته fi = Suljettu @@ -9541,6 +9784,7 @@ de = Schließzeiten hinzufügen el = Προσθήκη μη-εργάσιμων ωρών es = Añadir horas de cierre + et = Lisa suletud tunnid eu = Gehitu ixteko ordutegia fa = اضافه کردن ساعات غیر کاری fi = Lisää suljettuna tunnit @@ -9579,6 +9823,7 @@ de = Öffnungszeiten el = Εργάσιμες ώρες es = Horario de apertura + et = Tööaeg eu = Ordutegiak fa = ساعات کاری fi = Aukioloajat @@ -9617,6 +9862,7 @@ de = Erweiterter Modus el = Προηγμένη λειτουργία es = Modo avanzado + et = Täpsem režiim eu = Modu aurreratua fa = حالت پیشرفته fi = Edistynyt tila @@ -9655,6 +9901,7 @@ de = Einfachmodus el = Απλή λειτουργία es = Modo sencillo + et = Lihtne režiim eu = Modu erraza fa = حالت ساده fi = Yksinkertainen tila @@ -9693,6 +9940,7 @@ de = Schließzeiten el = Μη-εργάσιμες ώρες es = Horas de cierre + et = Suletud tunnid eu = Ixteko orduak fa = ساعات غیر کاری fi = Suljettuna tunnit @@ -9731,6 +9979,7 @@ de = Beispiele el = Παράδειγμα τιμών es = Valores de ejemplo + et = Näidisväärtused eu = Adibide-balioak fa = مقادیر پیش فرض fi = Esimerkkiarvot @@ -9769,6 +10018,7 @@ de = Fehler korrigieren el = Διόρθωση λάθους es = Corregir error + et = Paranda viga eu = Akats zuzena fa = تصحیح خطا fi = Korjaa virhe @@ -9807,6 +10057,7 @@ de = Position el = Τοποθεσία es = Ubicación + et = Asukoht eu = Kokapena fa = موقعیت fi = Sijainti @@ -9845,6 +10096,7 @@ de = Sie haben die Weltkarte geändert. Behalten Sie das nicht für sich! Erzählen Sie Ihren Freunden davon und bearbeiten Sie sie zusammen. el = Έχετε αλλάξει τον παγκόμιο χάρτη. Μην το κρατάτε για τον εαυτό σας! Πείτε το στους φίλους σας και κάντε τις αλλαγές μαζί. es = Has cambiado el mapa del mundo. No te lo guardes para ti. Díselo a tus amigos y edítenlo juntos. + et = Oled muutnud maailmakaarti. Ära hoia seda ainult enda teada! Rääki ka oma sõpradele ja muutke seda koos. eu = Munduko mapa aldatu duzu. Ez ezazu zeuretzat gorde. Esan zure lagunei eta editatu elkarrekin. fa = شما نقشه جهان را تغییر دادید.این افتخار را پیش خود نگه ندارید!به دوستانتان درموردش بگویید و با یکدیگر ویرایش کنید. fi = Olet muuttanut maailmankarttaa. Älä piilota tätä! Kerro ystävillesi ja muokatkaa sitä yhdessä. @@ -9883,6 +10135,7 @@ de = Mit Freunden teilen el = Μοιραστείτε με φίλους es = Compartir con amigos + et = Jaga oma sõpradega eu = Partekatu lagunekin fa = اشتراک گذاری با دوستان fi = Jaa kavereille @@ -9921,6 +10174,7 @@ de = Bitte beschreiben Sie das Problem detailliert, damit die OpenStreetMap-Gemeinschaft den Fehler beheben kann. el = Περιγράψτε το πρόβλημα αναλυτικά ώστε η Κοινότητα OpenStreetMap να διορθώσει το σφάλμα. es = Por favor, describe el problema en detalle para que la comunidad de OpenStreetMap pueda corregir el error. + et = Palun kirjelda probleemi üksikasjalikult, et OpenStreetMap kommuun saaks selle parandada. eu = Mesedez, deskribatu arazoa xehetasunez, OpenStreetMap komunitateak akatsa konpondu dezan. fa = لطفا مشکلتان را با جزئیات توضیح دهید بطوری که انجمن OSM بتوانند ان را برطرف کنند. fi = Kuvaile ongelmaa yksityiskohtaisesti, jotta OpenStreetMap-yhteisö voi korjata vian. @@ -9959,6 +10213,7 @@ de = Oder kümmern Sie sich selbst darum auf https://www.openstreetmap.org/ el = Ή κάντε το μόνοι σας στη διεύθυνση https://www.openstreetmap.org/ es = O hazlo tú mismo en https://www.openstreetmap.org/ + et = Või tee seda ise aadressil https://www.openstreetmap.org/ eu = Edo egin ezazu zeure burua https://www.openstreetmap.org/ helbidean fa = یا خودتان ان را انجام دهید در وبسایت https://www.openstreetmap.org/ fi = Tai tee se itse osoitteessa https://www.openstreetmap.org/ @@ -9997,6 +10252,7 @@ de = Senden el = Αποστολή es = Enviar + et = Saada eu = Bidali fa = ارسال fi = Lähetä @@ -10035,6 +10291,7 @@ de = Problem el = Πρόβλημα es = Problema + et = Probleem eu = Arazoa fa = مشکل fi = Ongelma @@ -10073,6 +10330,7 @@ de = Der Ort existiert nicht el = Η τοποθεσία δεν υπάρχει es = El lugar no existe + et = Kohta ei eksisteeri eu = Tokia ez da existitzen fa = مکان وجود ندارد fi = Paikkaa ei ole olemassa @@ -10111,6 +10369,7 @@ de = Wegen Wartung geschlossen el = Εκτός λειτουργίας για συντήρηση es = Сerrado por mantenimiento + et = Suletud hoolduseks eu = Mantentze-lanetarako itxita fa = به علت تعمییرات بسته است fi = Suljettu huoltoa varten @@ -10149,6 +10408,7 @@ de = Doppelter Ort el = Διπλότυπη τοποθεσία es = Lugar duplicado + et = Dubleeritud koht eu = Toki bikoiztua fa = مکان تکراری fi = Paikan kaksoiskappale @@ -10187,6 +10447,7 @@ de = Automatisch herunterladen el = Αυτόματη λήψη es = Descarga automática + et = Automaatne allalaadimine eu = Deskarga automatikoa fa = دانلود خودکار fi = Lataa automaattisesti @@ -10226,6 +10487,7 @@ de = Jetzt geschlossen el = Τώρα είναι κλειστό es = Cerrado ahora + et = Praegu suletud eu = Orain itxita fa = اکنون تعطیل است fi = Suljettu nyt @@ -10265,6 +10527,7 @@ de = Täglich el = Καθημερινά es = Diario + et = Iga päev eu = Egunero fa = روزانه fi = Päivittäin @@ -10303,6 +10566,7 @@ de = Tag und Nacht el = 24/7 es = 24/7 + et = 24/7 eu = 24/7 fa = شبانه روزی fi = Päivin ja öin @@ -10342,6 +10606,7 @@ de = Heute geschlossen el = Κλειστό σήμερα es = Día libre hoy + et = Täna suletud eu = Gaur atseden eguna fa = امروز تعطیل است fi = Suljettu tänään @@ -10380,6 +10645,7 @@ de = Geschlossen el = Κλειστό es = Día libre + et = Suletud eu = Egun librea fa = تعطیل است fi = Suljettu @@ -10418,6 +10684,7 @@ de = Heute el = Σήμερα es = Hoy + et = Täna eu = Gaur fa = امروز fi = Tänään @@ -10451,6 +10718,7 @@ ca = Obre demà a les %@ de = Öffnet morgen um %@ es = Abre mañana a las %@ + et = Avatakse homme kell %@ eu = Bihar %@ean irekiko da fr = Ouvre demain à %@ it = Apre domani alle %@ @@ -10468,6 +10736,7 @@ ca = Obre el %1$@ a les %2$@ de = Öffnet %1$@ um %2$@ es = Abre el %1$@ a las %2$@ + et = Avatakse %1$@ kell %2$@ eu = %1$@ean %2$@ean irekiko da fr = Ouvre le %1$@ à %2$@ it = Apre %1$@ alle %2$@ @@ -10485,6 +10754,7 @@ ca = Obre a les %@ de = Öffnet um %@ es = Abre a las %@ + et = Avatakse kell %@ eu = %@ean irekiko da fr = Ouvre à %@ it = Apre alle %@ @@ -10503,6 +10773,7 @@ ca = Obre en %@ de = Öffnet in %@ es = Abre en %@ + et = Avatakse %@ jooksul eu = %@ barru irekitzen da fr = Ouvert dans %@ it = Apre tra %@ @@ -10520,6 +10791,7 @@ ca = Tanca a les %@ de = Schließt um %@ es = Cierra a las %@ + et = Suletakse kell %@ eu = %@ean itxiko da fr = Ferme à %@ it = Chiude alle %@ @@ -10538,6 +10810,7 @@ ca = Tanca en %@ de = Schließt in %@ es = Cierra en %@ + et = Suletakse %@ jooksul eu = %@ barru ixten da fr = Fermé dans %@ it = Chiude tra %@ @@ -10560,6 +10833,7 @@ de = Geschlossen el = Κλειστό es = Cerrado + et = Suletud eu = Itxita fa = تعطیل fi = Suljettu @@ -10598,6 +10872,7 @@ de = Geschäftszeiten hinzufügen el = Προσθέστε ώρες λειτουργίας es = Añadir horarios de apertura + et = Lisa tööaeg eu = Gehitu ordutegia fa = اضافه کردن ساعت بازگشایی fi = Lisää aukioloajat @@ -10636,6 +10911,7 @@ de = Geschäftszeiten bearbeiten el = Επεξεργαστείτε τις ώρες λειτουργίας es = Editar los horarios de apertura + et = Muuda tööaega eu = Editatu ordutegia fa = ویرایش ساعت کاری fi = Muokkaa aukioloaikoja @@ -10674,6 +10950,7 @@ de = Kein Konto bei OpenStreetMap? el = Δεν έχετε λογαριασμό OpenStreetMap; es = ¿No tienes cuenta en OpenStreetMap? + et = Puudub OpenStreetMap konto? eu = Ez al duzu OpenStreetMap konturik? fa = ایا حساب OpenStreetMap ندارید؟ fi = Eikö sinulla ole OpenStreetMap tiliä? @@ -10712,6 +10989,7 @@ de = Registrieren el = Εγγραφείτε στο OpenStreetMap es = Registrarse en OpenStreetMap + et = Registreeru eu = Eman izena OpenStreetMap fa = ثبت نام در OpenStreetMap fi = Rekisteröidy @@ -10750,6 +11028,7 @@ de = Passwort (mindestens 8 Zeichen) el = Κωδικός πρόσβασης (8 χαρακτήρες ελάχιστο) es = Contraseña (mínimo 8 caracteres) + et = Salasõna (vähemalt 8 märki) eu = Pasahitza (gutxienez 8 karaktere) fa = رمز عبور (حداقل 8 عدد یا حرف) fi = Salasana (vähintään 8 merkkiä) @@ -10788,6 +11067,7 @@ de = Ungültiger Benutzername oder Passwort. el = Μη έγκυρο όνομα χρήστη ή κωδικός πρόσβασης. es = Usuario o contraseña incorrectos. + et = Vigane kasutajanimi või salasõna. eu = Erabiltzaile-izena edo pasahitza okerra. fa = نام کاربری یا رمز عبور نامعتبر است. fi = Virheellinen käyttäjätunnus tai salasana @@ -10826,6 +11106,7 @@ de = Anmelden el = Σύνδεση es = Iniciar sesión + et = Logi sisse eu = Saioa hasi fa = ورود fi = Kirjaudu sisään @@ -10863,6 +11144,7 @@ de = Melden Sie sich bei OpenStreetMap an el = Συνδεθείτε στο OpenStreetMap es = Iniciar sesión en OpenStreetMap + et = Logi sisse OpenStreetMap-i eu = Hasi saioa OpenStreetMap-en fa = ﺪﯾﻮﺷ OpenStreetMap ﺩﺭﺍﻭ fi = Kirjaudu OpenStreetMapiin @@ -10902,6 +11184,7 @@ de = Passwort el = Κωδικός πρόσβασης es = Contraseña + et = Salasõna eu = Pasahitza fa = رمز عبور fi = Salasana @@ -10940,6 +11223,7 @@ de = Passwort vergessen? el = Ξαχάσατε τον κωδικό πρόσβασης; es = ¿Has olvidado tu contraseña? + et = Unustasid oma salasõna? eu = Pasahitza ahaztu al duzu? fa = رمز عبور خود را فراموش کردید؟ fi = Unohtuiko salasana? @@ -10978,6 +11262,7 @@ de = OSM Konto el = `Λογαριασμός OSM ` es = Cuenta OSM + et = OSM konto eu = OSM kontua fa = حساب OSM fi = OSM-tili @@ -11016,6 +11301,7 @@ de = Abmelden el = Αποσύνδεση es = Cerrar sesión + et = Logi välja eu = Saioa itxi fa = خروج از حساب fi = Kirjaudu ulos @@ -11055,6 +11341,7 @@ de = Zuletzt hochgeladen el = Τελευταία μεταφόρτωση es = Última carga + et = Viimane üleslaadimine eu = Azken karga fa = اخرین بروزرسانی fi = Viimeisin lisäys @@ -11093,6 +11380,7 @@ de = Danke el = Σας ευχαριστούμε es = Gracias + et = Aitäh eu = Eskerrik asko fa = متشکریم fi = Kiitos @@ -11131,6 +11419,7 @@ de = Eintrag bearbeiten el = Επεξεργασία μέρους es = Editar el lugar + et = Muuda kohta eu = Editatu tokia fa = ویرایش مکان fi = Muokkaa kohdetta @@ -11169,6 +11458,7 @@ de = Name des Ortes el = Όνομα μέρους es = Nombre del lugar + et = Koha nimi eu = Tokiaren izena fa = نام مکان fi = Paikan nimi @@ -11207,6 +11497,7 @@ de = Eine Sprache hinzufügen el = Προσθήκη γλώσσας es = Añadir un idioma + et = Lisa keel eu = Gehitu hizkuntza bat fa = افزودن یک زبان fi = Lisää kieli @@ -11245,6 +11536,7 @@ de = Straße el = Οδός es = Calle + et = Tänav eu = Kalea fa = خیابان fi = Katu @@ -11284,6 +11576,7 @@ de = Hausnummer el = Αριθμός κτιρίου es = Número de casa + et = Majanumber eu = Etxe zenbakia fa = شماره ساختمان fi = Talon numero @@ -11322,6 +11615,7 @@ de = Einzelheiten el = Λεπτομέρειες es = Detalles + et = Üksikasjad eu = Xehetasunak fa = جزئیات fi = Lisätiedot @@ -11361,6 +11655,7 @@ de = Eine Straße hinzufügen el = Προσθέστε ένα δρόμο es = Añadir una calle + et = Lisa tänav eu = Gehitu kale bat fa = اضافه کردن خیابان fi = Lisää katu @@ -11400,6 +11695,7 @@ de = Geben Sie einen Straßennamen ein el = Εισαγάγετε ένα όνομα οδού es = Ingrese un nombre de calle + et = Palun sisesta tänava nimi eu = Sartu kale-izena fa = ﺪﯿﻨﮐ ﺩﺭﺍﻭ ﺍﺭ ﻥﺎﺑﺎﯿﺧ ﻡﺎﻧ it = Inserire il nome della via @@ -11424,6 +11720,7 @@ de = Eine Sprache wählen el = Επιλέξτε μια γλώσσα es = Elegir un idioma + et = Vali keel eu = Hizkuntza bat aukeratu fa = انتخاب یک زبان fi = Valitse kieli @@ -11462,6 +11759,7 @@ de = Eine Straße wählen el = Επιλέξτε μια οδό es = Elegir una calle + et = Vali tänav eu = Kale bat aukeratu fa = انتخاب یک خیابان fi = Valitse katu @@ -11499,6 +11797,7 @@ da = Postnummer de = Postleitzahl es = Código postal + et = Postiindeks eu = Posta kodea fa = کد پستی fi = Postinumero @@ -11537,6 +11836,7 @@ de = Küche el = Κουζίνα es = Cocina + et = Köök eu = Sukaldea fa = غذا خوری fi = Ruokalaji @@ -11575,6 +11875,7 @@ de = Küche auswählen el = Επιλέξτε κουζίνα es = Seleccionar cocina + et = Vali köök eu = Aukeratu sukaldea fa = انتخاب غذاخوری fi = Valitse ruokalaji @@ -11614,6 +11915,7 @@ de = Email oder Benutzername el = Email ή όνομα χρήστη es = Email ó usuario + et = E-post või kasutajanimi eu = Posta elektronikoa edo erabiltzailea fa = ایمیل یا نام کاربری fi = Sähköposti tai käyttäjätunnus @@ -11652,6 +11954,7 @@ de = Telefon el = Τηλέφωνο es = Teléfono + et = Telefon eu = Telefonoa fa = تلفن fi = Puhelinnumero @@ -11684,6 +11987,7 @@ ar = إضافة رقم هاتف ca = Afegeix un telèfon de = Telefon hinzufügen + et = Lisa telefon fr = Ajouter un numéro de téléphone it = Aggiungi numero mr = फोन जोडा @@ -11706,6 +12010,7 @@ de = Stockwerk el = Όροφος es = Piso + et = Korrus eu = Solairua fa = طبقه fi = Kerros @@ -11745,6 +12050,7 @@ de = Bitte beachten el = Λάβετε υπόψη es = Aviso + et = Tähelepanu eu = Abisua fa = لطفا توجه داشته باشد fi = Huomaathan, että @@ -11783,6 +12089,7 @@ de = Alle Kartenänderungen werden zusammen mit der Karte gelöscht. el = Όλες οι αλλαγές που έχετε κάνει στο χάρτη θα διαγραφούν μαζί με το χάρτη. es = Todos los cambios en los mapas se borrarán junto con el mapa. + et = Kõik Sinu kaardimuudatused kustutatakse koos kaardiga. eu = Maparen aldaketa guztiak maparekin batera ezabatuko dira. fa = تمام ویرایش های که بر روی نقشه انجام داده اید به همراه نقشه حذف شد. fi = Kaikki karttaan tehdyt muutokset poistetaan kartan mukana. @@ -11821,6 +12128,7 @@ de = Karten aktualisieren el = Ενημέρωση χαρτών es = Autodescarga de mapas + et = Värskenda kaarte eu = Mapak deskargatu automatikoki fa = بروزرسانی نقشه ها fi = Päivitä kartat @@ -11859,6 +12167,7 @@ de = Um eine Strecke zu erstellen, müssen Sie alle Karten aktualisieren und dann die Strecken erneut planen. el = Για να δημιουργήσετε μια διαδρομή, πρέπει να ενημερώσετε όλους τους χάρτες και στη συνέχεια να σχεδιάσετε τη διαδρομή ξανά. es = Para crear una ruta, es necesario actualizar todos los mapas y volver a planificar la ruta. + et = Marsruudi loomiseks tuleb värskendada kõiki kaarte ja seejärel planeerida marsruuti uuesti. eu = Ibilbide bat sortzeko, beharrezkoa da mapa guztiak eguneratzea eta ibilbidea berriro planifikatzea. fa = برای ایجاد مسیر شما نیازمند بروزرسانی تمامی نقشه ها هستید سپس می توانید دوباره مسیرتان را برنامه ریزی کنید fi = Sinun täytyy päivittää kaikki kartat ja suunnitella reitti uudelleen luodaksesi uuden reitin. @@ -11897,6 +12206,7 @@ de = Karte finden el = Ανεύρεση χάρτη es = Buscar en el mapa + et = Leia kaart eu = Bilatu mapan fa = یافتن نقشه fi = Etsi kartta @@ -11935,6 +12245,7 @@ de = Fehler beim Herunterladen el = Σφάλμα λήψης es = Error de descarga + et = Allalaadimise viga eu = Deskargatzeko errorea fa = خطا در دانلود fi = Latausvirhe @@ -11973,6 +12284,7 @@ de = Bitte überprüfen Sie Ihre Einstellungen und stellen Sie sicher, dass Ihr Gerät mit dem Internet verbunden ist. el = Ελέγξτε τις ρυθμίσεις σας και βεβαιωθείτε ότι η συσκευή σας είναι συνδεδεμένη στο Internet. es = Por favor, verifica la configuración y asegúrate de que tu dispositivo está conectado a Internet. + et = Palun kontrolli seadeid ning seadme Interneti-ühendust. eu = Mesedez, egiaztatu ezarpenak eta ziurtatu zure gailua Internetera konektatuta dagoela. fa = لطفا تنظیمات خود را بازبینی کنید و مطمئن شوید که ابزار شما به اینترنت متصل است. fi = Tarkista asetuksesi ja varmista, että laitteesi on yhteydessä Internetiin. @@ -12011,6 +12323,7 @@ de = Nicht genug Speicherplatz el = Δεν υπάρχει αρκετός χώρος es = Sin espacio suficiente + et = Ei ole piisavalt ruumi eu = Leku nahikoa ez fa = فظای کافی موجود نیست fi = Ei tarpeeksi tilaa @@ -12049,6 +12362,7 @@ de = Bitte entfernen Sie unnötige Daten el = Διαγράψτε τυχόν μη απαραίτητα δεδομένα es = Por favor, elimina los datos innecesarios + et = Palun kustuta ebavajalikud andmed eu = Ezabatu beharrezkoak ez diren datuak fa = لطفا داده های غیر ضروری را از دستگاه خود حذف کنید fi = Poista tarpeeton data @@ -12087,6 +12401,7 @@ de = Login-Fehler. el = Σφάλμα σύνδεσης. es = Error de inicio de sesión. + et = Sisse logimise viga. eu = Saioa hasteko errorea. fa = خطای ورود fi = Kirjautumisvirhe. @@ -12125,6 +12440,7 @@ de = Bestätigte Änderungen der Karte el = Επαληθευμένες αλλαγές es = Cambios verificados + et = Kinnitatud muudatused eu = Egiaztatutako aldaketak fa = تغییرات تایید شد fi = Vahvistetut karttamuutokset @@ -12163,6 +12479,7 @@ de = Ziehen Sie die Karte, um den Standort des Objektes zu korrigieren. el = Σύρετε τον χάρτη για να επιλέξετε τη σωστή θέση του αντικειμένου. es = Arrastra el mapa para seleccionar la ubicación correcta del objeto. + et = Objekti õige asukoha valimiseks lohista kaarti. eu = Arrastatu mapa objektuaren kokapen zuzena hautatzeko. fa = برای انتخاب مکان صحیح شئی نقشه را بکشید. fi = Vedä karttaa valitaksesi kohteelle oikean sijainnin. @@ -12201,6 +12518,7 @@ de = Kategorie auswählen el = Επιλέξτε κατηγορία es = Seleccionar categoría + et = Vali kategooria eu = Hautatu kategoria fa = انتخاب دسته بندی fi = Valitse kategoria @@ -12239,6 +12557,7 @@ de = Beliebt el = Δημοφιλή es = Popular + et = Populaarne eu = Herrikoia fa = پرطرفدار fi = Suositut @@ -12277,6 +12596,7 @@ de = Alle Kategorien el = Όλες οι κατηγορίες es = Todas las categorías + et = Kõik kategooriad eu = Kategoria guztiak fa = همه دسته بندی ها fi = Kaikki kategoriat @@ -12315,6 +12635,7 @@ de = Wird bearbeitet el = Επεξεργασία es = Editar + et = Muutmine eu = Editatu fa = درحال ویرایش fi = Muokkaus @@ -12353,6 +12674,7 @@ de = Wird hinzugefügt el = Προσθήκη es = Añadir + et = Lisamine eu = Gehitu fa = درحال افزودن fi = Lisääminen @@ -12391,6 +12713,7 @@ de = Name des Ortes el = Το όνομα του τόπου es = Nombre del lugar + et = Koha nimi eu = Tokiaren izena fa = نام مکان fi = Paikan nimi @@ -12429,6 +12752,7 @@ de = Kategorie el = Κατηγορία es = Categoría + et = Kategooria eu = Kategoria fa = دسته بندی fi = Kategoria @@ -12467,6 +12791,7 @@ de = Detaillierte Beschreibung eines Problems el = Λεπτομερή περιγραφή του θέματος es = Descripción detallada del problema + et = Probleemi üksikasjalik kirjeldus eu = Arazoaren deskribapen zehatza fa = توضیح مفصل در مورد مشکل fi = Ongelman tarkka kuvaus @@ -12505,6 +12830,7 @@ de = Ein anderes Problem el = Διαφορετικό πρόβλημα es = Un problema diferente + et = Erinev probleem eu = Beste arazo bat fa = مشکلی دیگر fi = Eri ongelma @@ -12543,6 +12869,7 @@ de = Organisation hinzufügen el = Προσθήκη επιχείρησης es = Añadir organización + et = Lisa ettevõte eu = Negozioa gehitu fa = اضافه کردن یک تجارت fi = Lisää organisaatio @@ -12581,6 +12908,7 @@ de = Fügen Sie auf der Karte einen neuen Ort hinzu und bearbeiten Sie existierende Orte direkt in der App. el = Προσθέστε νέες τοποθεσίες στο χάρτη, και επεξεργαστείτε τις υπάρχουσες απευθείας από την εφαρμογή. es = Añadir lugares nuevos al mapa y editar los lugares actuales directamente desde la aplicación. + et = Lisa kaardile uusi kohti ja muuda olemasolevaid otse rakenduses. eu = Gehitu toki berriak mapan eta editatu uneko tokiak zuzenean aplikaziotik. fa = اضافه کردن مکان به نقشه و ویرایش ان مستقیما از طریق این اپلیکیشن. fi = Lisää karttaan uusia paikkoja ja muokkaa sovelluksessa olevia karttoja suoraan sovelluksessa. @@ -12619,6 +12947,7 @@ de = Standort wechseln el = Αλλαγή τοποθεσίας es = Cambiar ubicación + et = Muuda asukohta eu = Aldatu kokapena fa = تغییر موقعیت fi = Vaihda sijaintia @@ -12657,6 +12986,7 @@ de = Ein Objekt kann hier nicht positioniert werden el = Δε μπορεί να εντοπιστεί αντικείμενο εδώ es = No se puede ubicar ningún objeto aquí + et = Ükski objekt ei saa siin asuda eu = Hemen ezin da objekturik jarri fa = نمی توان شی ای در این مکان باشد fi = Kohdetta ei voida asettaa tänne @@ -12695,6 +13025,7 @@ de = Alle Kartendaten stammen aus dem OpenStreetMap-Projekt. Es ist wie Wikipedia für Karten, wo Sie Orte hinzufügen oder bearbeiten können, und sie werden Millionen von Benutzern auf der ganzen Welt zur Verfügung gestellt. el = Όλα τα δεδομένα χάρτη προέρχονται από το έργο OpenStreetMap. Μοιάζει με τη Wikipedia για χάρτες όπου μπορείτε να προσθέσετε ή να επεξεργαστείτε μέρη και γίνονται διαθέσιμα σε εκατομμύρια χρήστες σε όλο τον κόσμο. es = Todos los datos del mapa provienen del proyecto OpenStreetMap. Es como Wikipedia para mapas donde puedes agregar o editar lugares, y están disponibles para millones de usuarios en todo el mundo. + et = Kõik kaardiandmed pärinevad OpenStreetMapi projektist. See on nagu Vikipeedia kaartide jaoks, kus saate kohti lisada või muuta ja need muutuvad kättesaadavaks miljonitele kasutajatele üle kogu maailma. eu = Maparen datu guztiak OpenStreetMap proiektutik datoz. Tokiak gehitu edo edita ditzakezun mapetarako Wikipedia bezalakoa da, eta mundu osoko milioika erabiltzaileren eskura jartzen dira. fa = .ﺪﻧﺮﯿﮔu200cﯽﻣ ﺭﺍﺮﻗ ﺱﺮﺘﺳﺩ ﺭﺩ ﻥﺎﻬﺟ ﺮﺳﺍﺮﺳ ﺭﺩ ﺮﺑﺭﺎﮐ ﺎﻫu200cﻥﻮﯿﻠﯿﻣ ﯼﺍﺮﺑ ﺎﻫu200cﻥﺁ ﻭ fi = Kaikki karttatiedot tulevat OpenStreetMap-projektista. Se on kuin karttojen Wikipedia, jossa voit lisätä tai muokata paikkoja, ja ne ovat miljoonien käyttäjien saatavilla kaikkialla maailmassa. @@ -12734,6 +13065,7 @@ de = Melden Sie sich an, damit andere Benutzer Ihre Änderungen sehen können. el = Συνδεθείτε ώστε άλλοι χρήστες να μπορούν να δουν τις αλλαγές που έχετε κάνει es = Inicia sesión para que otros usuarios puedan ver los cambios que has efectuado. + et = Logi sisse OpenStreetMap.org keskkonda, et teised kasutajad näeksid Sinu tehtud muudatusi. eu = Hasi saioa beste erabiltzaileek zuk egindako aldaketak ikus ditzaten. fa = وارد شوید تا دیگر کاربران نیز بتوانند تغییرات ایجاد شده توسط شما را ببینند fi = Kirjaudu sisään jotta muut käyttäjät voivat nähdä tekemäsi muokkaukset. @@ -12773,6 +13105,7 @@ de = Zum Herunterladen benötigen Sie mehr Platz. Bitte löschen Sie unnötige Daten. el = Για να το κατεβάσετε, χρειάζεστε περισσότερο χώρο. Διαγράψτε τυχόν μη απαραίτητα δεδομένα. es = Necesitas más espacio para descargar. Por favor, elimina los datos innecesarios. + et = Alla laadimiseks vajad rohkem ruumi. Palun kustuta ebavajalikke andmeid. eu = Leku gehiago behar duzu deskargatzeko. Ezabatu beharrezkoak ez diren datuak. fa = برای دانلود,شما نیازمند فضای ذخیره سازی بیشتری هستید.لطفا داده های غیر ضروری خود را حذف کنید. fi = Tarvitset lisää tilaa ladataksesi. Poista tarpeeton data. @@ -12811,6 +13144,7 @@ de = Ich habe die Organic Maps-Karten verbessert el = Βελτίωσα τους χάρτες Organic Maps es = He mejorado los mapas de Organic Maps + et = Parandasin Organic Maps kaarte eu = Organic Maps mapak hobetu ditut fa = من نقشه های Organic Maps را بهبود بخشیدم fi = Paransin Organic Maps-karttoja @@ -12850,6 +13184,7 @@ de = %1$d von %2$d el = %1$d από %2$d es = %1$d de %2$d + et = %1$d/%2$d eu = %1$d/%2$d fa = %1$d از %2$d fi = %1$d/%2$d @@ -12888,6 +13223,7 @@ de = Über eine Mobilfunknetzverbindung herunterladen? el = Να γίνει λήψη μέσω δικτύου κινητής τηλεφωνίας; es = ¿Descargar con conexión de red móvil? + et = Lae mobiilivõrgu kaudu? eu = Deskargatu sare mugikorreko konexioarekin? fa = دانلود بر روی یک شبکه دیتای موبایل؟ fi = Lataa käyttämällä puhelinverkkoyhteyttä? @@ -12925,6 +13261,7 @@ de = Das könnte mit einigen Tarifen oder beim Roaming sehr teuer werden. el = Αυτό μπορεί να είναι σημαντικά πιο ακριβό για μερικά πακέτα ή στην περίπτωση περιαγωγής es = Podría ser muy caro con ciertos planes o con itinerancia de datos. + et = See võib mõningate lepingute või roamingu korral olla märgatavalt kallim. eu = Oso garestia izan daiteke plan batzuekin edo datu-ibiltaritzarekin. fa = این کار می تواند برای شما در بعضی طرح ها و یا حالت رومینگ هزینه اضافی در بر داشته باشد. fi = Tämä vaihtoehto saattaa olla huomattavasti kalliimpi tietyillä sopimuksilla tai roaming-yhteydellä. @@ -12962,6 +13299,7 @@ de = Richtige Hausnummer eingeben el = Εισαγάγετε έναν έγκυρο αριθμό κτιρίου es = Introducir el número de domicilio correcto + et = Sisesta kehtiv majanumber eu = Sartu etxe-zenbaki zuzena fa = وارد کردن شماره ساختمان معتبر fi = Syötä oikea talon numero @@ -13000,6 +13338,7 @@ de = Anzahl der Etagen (maximal %d) el = Αριθμός ορόφων (μέγιστο %d) es = Número de plantas (máx. %d) + et = Korruste arv (maks. %d) eu = Solairu kopurua (gehienez %d) fa = تعداد طبقات ( حداکثر %d ) fi = Kerrosten määrä (maks. %d) @@ -13039,6 +13378,7 @@ de = Das Gebäude kann nicht mehr als 25 Etagen haben el = Ο αριθμός των ορόφων δεν πρέπει να υπερβαίνει τους 25 es = El número de plantas no debe superar 25 + et = Korruste arv ei või olla üle 25 eu = Landare kopurua ez da 25etik gorakoa izan behar fa = تعداد طبقات نباید بیش از 25 باشد fi = Muokkaa kerroksia, enintään 25 kerrosta @@ -13077,6 +13417,7 @@ de = Postleitzahl el = Ταχυδρομικός κώδικας es = Código postal + et = Postiindeks eu = Posta kodea fa = کدپستی fi = Postinumero @@ -13115,6 +13456,7 @@ de = Geben Sie die korrekte Postleitzahl ein el = Πληκτρολογήστε έναν έγκυρο ταχυδρομικό κώδικα es = Introduzca el código postal correcto + et = Sisesta korrektne postiindeks eu = Mesedez, idatzi posta-kode zuzena fa = یک کد پستی معتبر وارد کنید fi = Anna kelvollinen postinumero @@ -13154,6 +13496,7 @@ de = Unbekannter Ort el = Άγνωστο μέρος es = Lugar desconocido + et = Tundmatu koht eu = Toki ezezaguna fa = مکان ناشناس fi = Tuntematon paikka @@ -13192,6 +13535,7 @@ de = Notiz an OSM-Redakteure senden el = Σημείωμα στους συντάκτες του OSM es = Enviar nota a los editores de OSM + et = Saada märkus OSM muutjatele es-MX = Enviar nota a los editores de OSM eu = Bidali oharra OSM editoreei fa = ارسال یادداشت به ویرایشکنندگان OSM @@ -13232,6 +13576,7 @@ de = Ausführlicher Kommentar el = Αναλυτικό σχόλιο es = Comentario detallado + et = Üksikasjalik kommentaar eu = Iruzkin zehatza fa = اظهارنظر بیشتر fi = Yksityiskohtainen kommentti @@ -13270,6 +13615,7 @@ de = Ihre Änderungsvorschläge für die Karte werden an OpenStreetMap gesendet: Beschreiben Sie die Details der Objekte, die Sie in Organic Maps nicht bearbeiten können. el = Οι προτεινόμενες αλλαγές χάρτη θα σταλούν στην Κοινότητα του OpenStreetMap. Περιγράψτε τυχόν πρόσθετα στοιχεία που δεν μπορείτε να επεξεργαστείτε στο Organic Maps. es = Los cambios que ha sugerido se enviarán a la comunidad de OpenStreetMap. Describa los detalles que no pueden editarse en Organic Maps. + et = Teie soovitatud kaardimuudatused saadetakse OpenStreetMapi kogukonnale. Kirjeldage kõiki täiendavaid üksikasju, mida ei saa Organic Maps-is muuta. eu = Iradoki dituzun aldaketak OpenStreetMap komunitatean argitaratuko dira. Deskribatu mapa organikoetan editatu ezin diren xehetasunak. fa = شما یک سری تغییرات در نقشه را برای انجمن OpenStreetMap ارسال کردید.جزئیات اضافی را که نتوانستید در Organic Maps ویرایش کنید را برایشان بنویسید. fi = Ehdottamasi muutokset lähetetään OpenStreetMap-yhteisöön. Kuvaa tiedot, joita ei voi muokata Organic Maps:ssä. @@ -13308,6 +13654,7 @@ de = Mehr Informationen über OpenStreetMap el = Περισσότερα σχετικά με το OpenStreetMap es = Más acerca de OpenStreetMap + et = Rohkem OpenStreetMap kohta eu = OpenStreetMap-i buruzko informazio gehiago fa = در مورد OpenStreetMap بیشتر بدانید fi = Lisätietoja OpenStreetMap:ista @@ -13346,6 +13693,7 @@ de = Betreiber oder Eigentümer el = Ιδιοκτήτης es = Operador + et = Omanik eu = Eragilea fa = مالک fi = Operaattori @@ -13384,6 +13732,7 @@ de = Keine Karten geladen el = Δεν έχετε κατεβάσει χάρτες es = No ha descargado ningún mapa + et = Sa ei ole kaarte alla laadinud eu = Ez duzu maparik deskargatu fa = شما هیچ نقشه دانلود شده ای ندارید fi = Et ole ladannut yhtään karttaa @@ -13422,6 +13771,7 @@ de = Laden Sie die für die Suche nach Orten erforderlichen Karten und verwenden Sie die Navigation offline. el = Κατεβάστε χάρτες για να αναζητήσετε μια τοποθεσία και να χρησιμοποιήσετε την πλοήγησης χωρίς σύνδεση. es = Descargue mapas para encontrar la ubicación y navegar sin conexión. + et = Lae alla kaardid asukoha otsimiseks ja võrguühenduseta navigeerimise kasutamiseks. eu = Deskargatu mapak kokapena aurkitzeko eta lineaz kanpo nabigatzeko. fa = برای جست وجو یک مکان و استفاده از قابلیت ناوبری, نقشه ها را دانلود کنید. fi = Lataa kartattoja löytääksesi paikkoja ja navigoidaksesi offline-tilassa. @@ -13461,6 +13811,7 @@ de = Standortsuche fortsetzen? el = Να συνεχίσει να ανιχνεύεται η τρέχουσα θέση σας; es = ¿Continuar detectando su ubicación actual? + et = Jätka oma hetkeasukoha määramist? eu = Zure uneko kokapena detektatzen jarraitu nahi duzu? fa = ایا یافتن مکان تان را ادامه می دهید؟ fi = Jatketaanko nykyisen sijaintisi havaitsemista? @@ -13500,6 +13851,7 @@ de = Standort nicht gefunden. Möglicherweise befinden Sie sich in einem Gebäude oder einem Tunnel. el = Η τρέχουσα τοποθεσία είναι άγνωστη. Ίσως είστε σε ένα κτίριο ή σε μια σήραγγα. es = La ubicación actual es desconocida. Quizá esté en un edificio o en un túnel. + et = Hetkeasukoht on teadmata. Võib-olla oled hoones sees või tunnelis. eu = Uneko kokapena ezezaguna da. Eraikin batean edo tunel batean egon daiteke. fa = مکان شما ناشناس مانده است.ممکن است شما داخل یک ساختمان یا تونل باشید. fi = Nykyistä sijaintiasi ei voitu määrittää. Kenties olet rakennuksessa tai tunnelissa. @@ -13538,6 +13890,7 @@ de = Fortsetzen el = Συνέχεια es = Continuar + et = Jätka eu = Jarraitu fa = ادامه fi = Jatka @@ -13576,6 +13929,7 @@ de = Anhalten el = Στοπ es = Detener + et = Lõpeta eu = Gelditu fa = توقف fi = Seis @@ -13614,6 +13968,7 @@ de = Standort nicht gefunden. el = Η τρέχουσα τοποθεσία είναι άγνωστη. es = La ubicación actual es desconocida. + et = Hetkeasukoht on teadmata. eu = Uneko kokapena ezezaguna da. fa = مکان فعلیتان ناشناس است. fi = Nykyinen sijainti on tuntematon. @@ -13651,6 +14006,7 @@ de = Bei der Standortsuche ist ein unbekannter Fehler aufgetreten. Prüfen Sie die Funktionstüchtigkeit Ihres Geräts und versuchen Sie es etwas später erneut. el = Παρουσιάστηκε σφάλμα κατά την αναζήτηση της τοποθεσίας σας. Ελέγξτε αν η συσκευή σας λειτουργεί κανονικά και δοκιμάστε ξανά αργότερα. es = Se ha producido un error al buscar su ubicación. Compruebe que su dispositivo funciona correctamente e inténtelo más tarde. + et = Teie asukoha otsimisel ilmnes viga. Kontrollige, kas teie seade töötab korralikult ja proovige hiljem uuesti. eu = Errore bat gertatu da zure kokapena bilatzean. Egiaztatu gailua behar bezala dabilela eta saiatu berriro geroago. fa = خطایی در هنگام جست وجوی مکان شمارخ داده است.بررسی کنیید دستگاهتان به درستی کار می کند و دوباره تلاش کنید. fi = Tapahtui virhe määritettäessä sijaintiasi. Tarkista laitteesi ja yritä myöhemmin uudelleen. @@ -13689,6 +14045,7 @@ de = Standort-Identifizierung ist deaktiviert el = Οι υπηρεσίες εντοπισμού τοποθεσίας είναι απενεργοποιημένες es = La identificación de la ubicación está desactivada + et = Asukohateenused on keelatud eu = Kokapenaren identifikazioa desaktibatuta dago fa = سرویس موقعیت مکانی شما غیرفعال است fi = Sijaintipalvelut on poistettu käytöstä @@ -13728,6 +14085,7 @@ de = Aktivieren Sie den Zugang zur Positionsbestimmung in den Geräteeinstellungen el = Ενεργοποίηση πρόσβασης γεωγραφικού εντοπισμού τοποθεσίας στις ρυθμίσεις της συσκευής es = Activa el acceso a la geolocalización en los ajustes del dispositivo + et = Luba seadme seadetes juurdepääs geograafilisele asukohale eu = Aktibatu geokokapenerako sarbidea gailuaren ezarpenetan fa = سرویس موقعیت مکانی خود را در بخش تنظیمات فعال کنید. fi = Schakel de toegang tot geolocaties in in de instellingen van het apparaat @@ -13767,6 +14125,7 @@ de = 1. Einstellungen öffnen el = 1. Ανοίξτε τις ρυθμίσεις es = 1. Abre los ajustes + et = 1. Ava seaded eu = 1. Ireki ezarpenak fa = 1. بازکردن تنظیمات fi = 1. Avaa asetukset @@ -13806,6 +14165,7 @@ de = 2. Auf Standort tippen el = 2. Πατήστε τοποθεσία es = 2. Pulsa "Ubicación" + et = 2. Puuduta "Asukoht" eu = 2. Sakatu "Kokapena" fi = 2. Tik op locatie fr = 2. Appuyer sur Localisation @@ -13845,6 +14205,7 @@ de = 3. Wählen Sie „Beim Verwenden der App“ el = 3. Επιλέξτε ενώ χρησιμοποιείτε την εφαρμογή es = 3. Seleccionar al usar la aplicación + et = 3. Vali "Rakenduse kasutamise ajal" eu = 3. Hautatu aplikazioa erabiltzean fi = 3. Valitse sovellusta käytettäessä fr = 3. Sélectionner tout en utilisant l'app @@ -13881,6 +14242,7 @@ da = m de = m es = m + et = m eu = m fa = متر fi = m @@ -13918,6 +14280,7 @@ da = km de = km es = km + et = km eu = km fa = کیلومتر fi = km @@ -13954,6 +14317,7 @@ da = km/t de = km/h es = km/h + et = km/h eu = km/h fa = کیلومتربرساعت (km/h) fi = km/h @@ -13991,6 +14355,7 @@ da = mil de = mi es = mi + et = mi eu = ni fa = مایل fi = mi @@ -14029,6 +14394,7 @@ da = fod de = ft es = pie + et = jalga eu = oina fa = فوت fi = ft @@ -14062,6 +14428,7 @@ da = mph de = mph es = mph + et = mph eu = mph fa = مایل بر ساعت (mph) fi = mph @@ -14099,6 +14466,7 @@ da = time de = h es = h + et = h eu = h fa = ساعت fi = t @@ -14134,6 +14502,7 @@ da = min de = min es = min + et = min eu = min fa = دقیقه fi = min @@ -14171,6 +14540,7 @@ da = Beskrivelse de = Beschreibung es = Descripción + et = Kirjeldus eu = Deskribapena fa = توضیحات fi = Kuvaus @@ -14209,6 +14579,7 @@ de = Mehr el = Περισσότερα es = Más + et = Veel eu = Gainera fa = بیشتر fi = Lisää @@ -14246,6 +14617,7 @@ da = Book de = Buchen es = Reservar + et = Reserveeri eu = Erreserba fa = رزرو fi = Varaa @@ -14284,6 +14656,7 @@ de = Anruf el = Κλήση es = Llamar + et = Helista eu = Deitzeko fa = تماس fi = Soita @@ -14322,6 +14695,7 @@ de = Lesezeichen bearbeiten el = Επεξεργασία αγαπημένου es = Editar marcador + et = Muuda järjehoidjat eu = Editatu laster-marka fa = ویرایش نشانه ها fi = Muokkaa kirjanmerkkiä @@ -14360,6 +14734,7 @@ de = Name des Lesezeichens el = Όνομα αγαπημένου es = Nombre del marcador + et = Järjehoidja nimi eu = Laster-markaren izena fa = نام نشانه ها fi = Kirjanmerkin nimi @@ -14397,6 +14772,7 @@ de = Anmerkung el = Προσωπικές σημειώσεις es = Notas personales + et = Isiklikud märkmed eu = Ohar pertsonalak fa = یاداشت های شخصی fi = Henkilökohtaiset merkinnät @@ -14434,6 +14810,7 @@ de = Lesezeichen löschen el = Διαγραφή αγαπημένου es = Eliminar marcador + et = Kustuta järjehoidja eu = Ezabatu laster-marka fa = حذف نشانه fi = Poista kirjanmerkki @@ -14472,6 +14849,7 @@ de = Ihre Änderungsvorschläge wurden gesendet el = Οι προτεινόμενες αλλαγές σας έχουν σταλεί es = Se han enviado sus cambios sugeridos + et = Sinu soovitatud muudatused on saadetud eu = Iradokitako aldaketak bidali dira fa = تغییر پیشنهادی شما ارسال شد fi = Ehdottamasi muutokset on lähetetty @@ -14510,6 +14888,7 @@ de = Kommentar… el = Σχόλιο… es = Comentario… + et = Kommenteeri… eu = Iruzkina… fa = اظهار نظر fi = Kommentti… @@ -14548,6 +14927,7 @@ de = Alle lokalen Korrekturen verwerfen el = Απόρριψη όλων των τοπικών αλλαγών; es = ¿Restablecer todos los cambios locales? + et = Loobu kõigist kohalikest muudatustest? eu = Tokiko aldaketa guztiak berrezarri nahi dituzu? fa = ایا تغییرات محلی را نادیده می گیرید؟ fi = Nollataanko kaikki paikalliset muutokset? @@ -14586,6 +14966,7 @@ de = Verwerfen el = Απόρριψη es = Restablecer + et = Loobu eu = Berreskuratu fa = نادیده گرفتن fi = Nollaa @@ -14624,6 +15005,7 @@ de = Hinzugefügtes Objekt löschen? el = Διαγραφή της τοποθεσίας που προστέθηκε; es = ¿Eliminar el lugar añadido? + et = Kustuta lisatud koht? eu = Gehitutako tokia ezabatu? fa = ایا مکان ثبت شده حذف شود؟ fi = Poistetaanko lisätty paikka? @@ -14662,6 +15044,7 @@ de = Löschen el = Διαγραφή es = Eliminar + et = Kustuta eu = Kendu fa = حذف fi = Poista @@ -14700,6 +15083,7 @@ de = Dieser Ort existiert nicht el = Η τοποθεσία δεν υπάρχει es = El lugar no existe + et = Kohta ei eksisteeri eu = Tokia ez da existitzen fa = مکان وجود ندارد fi = Paikkaa ei ole olemassa @@ -14734,6 +15118,7 @@ be = Калі ласка, укажыце прычыну выдалення ca = Indiqueu per què esborreu el lloc de = Geben Sie bitte den Grund für die Löschung an + et = Palun märgi põhjus koha kustutamiseks it = Indicare il motivo dell' eliminazione del luogo mr = कृपया ठिकाण हटवण्याचे कारण सूचित करा nl = Graag de reden voor verwijdering aangeven @@ -14756,6 +15141,7 @@ de = …Mehr el = …περισσότερα es = …más + et = …veel eu = …gehi fa = بیشتر…. fi = …Näytä @@ -14795,6 +15181,7 @@ de = Geben Sie eine gültige Telefonnummer ein el = Εισάγετε έναν έγκυρο αριθμό τηλεφώνου es = Introduce un número de teléfono correcto + et = Sisesta kehtiv telefoninumber eu = Mesedez, idatzi telefono-zenbaki zuzena fa = شماره تلفن معتبری وارد نمایید fi = Syötä kelvollinen puhelinnumero @@ -14833,6 +15220,7 @@ de = Geben Sie eine gültige Internetadresse ein el = Εισάγετε μια έγκυρη διεύθυνση ιστοτόπου es = Introduce una dirección web válida + et = Sisesta kehtiv veebiaadress eu = Mesedez, sartu baliozko web-helbide bat fa = ادرس وب معتبری وارد نمایید fi = Syötä kelvollinen verkko-osoite @@ -14871,6 +15259,7 @@ de = Geben Sie eine gültige Email-Adresse ein el = Εισάγετε ένα έγκυρο email es = Introduce un email válido + et = Sisesta kehtiv e-posti aadress eu = Sartu baliozko posta elektroniko bat fa = ایمیل معتبری وارد نمایید fi = Syötä kelvollinen sähköpostiosoite @@ -14904,6 +15293,7 @@ ca = Introduïu una adreça web de Facebook, un compte o un nom de pàgina vàlids de = Geben Sie eine gültige Facebook-Webadresse, ein Konto oder einen Seitennamen ein es = Introduce una dirección web, una cuenta o un nombre de página de Facebook válidos + et = Sisesta kehtiv Facebooki veebiaadress, konto või lehekülje nimi eu = Mesedez, idatzi baliozko Facebook-eko web-helbide, kontu edo orri-izena fr = Saisissez une adresse web, un compte ou un nom de page Facebook valide it = Inserisci un indirizzo web, un account o un nome di pagina Facebook valido @@ -14923,6 +15313,7 @@ ca = Introduïu una adreça web d'Instagram o un nom de compte vàlids de = Geben Sie eine gültige Instagram-Webadresse oder einen Kontonamen ein es = Introduce una dirección web o un nombre de cuenta de Instagram válidos + et = Sisesta kehtiv Instagrami veebiaadress või konto nimi eu = Sartu baliozko Instagram kontuaren izena edo web helbidea fr = Saisissez une adresse web, un nom de compte Instagram valide it = Inserisci un indirizzo web o un nome di account Instagram valido @@ -14942,6 +15333,7 @@ ca = Introduïu una adreça web de Twitter o un nom d'usuari vàlids de = Geben Sie eine gültige Twitter-Webadresse oder einen Benutzernamen ein es = Introduzca una dirección web o un nombre de usuario válido de Twitter + et = Sisesta kehtiv Twitteri veebiaadress või kasutajanimi eu = Sartu baliozko Twitter erabiltzaile-izena edo web-helbide bat fr = Saisissez une adresse web, un nom de compte Twitter valide it = Inserisci un indirizzo web o un nome utente Twitter valido @@ -14961,6 +15353,7 @@ ca = Introduïu una adreça web de VK o un nom de compte vàlids de = Geben Sie eine gültige VK-Webadresse oder einen Kontonamen ein es = Introduce una dirección web o un nombre de cuenta de VK válidos + et = Sisesta kehtiv VK veebiaadress või konto nimi eu = Mesedez, idatzi baliozko web helbide bat edo VK kontuaren izena fr = Saisissez une adresse web, un nom de compte VK valide it = Inserisci un indirizzo web o un nome di account VK valido @@ -14979,6 +15372,7 @@ be = Упішыце вэб-адрас LINE старонкі або LINE ID ca = Introduïu una adreça web de LINE o un ID LINE vàlids de = Geben Sie eine gültige LINE-Webadresse oder LINE ID ein + et = Sisesta kehtiv LINE veebiaadress või LINE ID it = Inserisca un indirizzo web LINE valido o un ID LINE nl = Voer een geldig LINE-webadres of een LINE ID in pl = Wpisz prawidłowy url LINE lub LINE ID @@ -14999,6 +15393,7 @@ de = Aktualisieren el = Ενημέρωση es = Actualizar + et = Värskenda eu = Eguneratzeko fa = بروزرسانی fi = Päivitä @@ -15037,6 +15432,7 @@ de = Einen Ort zur Karte hinzufügen el = Να προστεθεί η τοποθεσία στο χάρτη es = Añadir un lugar al mapa + et = Lisa koht kaardile eu = Gehitu toki bat mapan fa = اضافه کردن یک مکان به نقشه fi = Lisää paikka kartalle @@ -15076,6 +15472,7 @@ de = An alle Benutzer senden? el = Θέλετε να το στείλετε σε όλους τους χρήστες; es = ¿Quieres enviarlo a todos los usuarios? + et = Kas soovid saata selle kõigile kasutajatele? eu = Erabiltzaile guztiei bidali nahi diezu? fa = ایا می خواهید ان را برای دیگر کاربران ارسال کنید؟ fi = Haluatko lähettää sen kaikille käyttäjille? @@ -15115,6 +15512,7 @@ de = Stellen Sie sicher, dass Sie keine persönlichen Daten eingegeben haben. el = Βεβαιωθείτε ότι δεν έχετε εισάγει προσωπικά δεδομένα. es = Asegúrate de que no has introducido ningún dato personal. + et = Palun kontrolli, et Sa ei sisestanud isiklikke andmeid. eu = Ziurtatu ez duzula datu pertsonalik sartu. fa = مطمئن شوید که هیچ اطلاعات شخصی وارد نکرده باشد. fi = Varmistat, ettet syöttänyt henkilökohtaisia tietojasi. @@ -15153,6 +15551,7 @@ de = OpenStreetMap-Redakteure werden die Änderungen prüfen und sich bei Fragen mit Ihnen in Verbindung setzen. el = Οι συντάκτες του OpenStreetMap θα ελέγξουν τις αλλαγές και θα επικοινωνήσουν μαζί σας εάν έχουν απορίες. es = Los editores de OpenStreetMap comprobarán los cambios y se pondrán en contacto contigo si tienen alguna pregunta. + et = OpenStreetMap muutjad kontrollivad muudatused üle ja võtavad küsimuste korral Sinuga ühendust. eu = OpenStreetMap editoreek aldaketak egiaztatuko dituzte eta zurekin harremanetan jarriko dira zalantzaren bat izanez gero. fa = .ﺖﻓﺮﮔ ﺪﻨﻫﺍﻮﺧ ﺱﺎﻤﺗ ﺎﻤﺷ ﺎﺑ ﻝﺍﻮﺳ ﻪﻧﻮﮔﺮﻫ ﻦﺘﺷﺍﺩ ﺕﺭﻮﺻ ﺭﺩ ﻭ ﻩﺩﺮﮐ ﯽﺳﺭﺮﺑ ﺍﺭ ﺕﺍﺮﯿﯿﻐﺗ Ope fi = OpenStreetMap-editorit tarkistavat muutokset ja ottavat sinuun yhteyttä, jos heillä on kysyttävää. @@ -15190,6 +15589,7 @@ da = stop de = Stopp es = parada + et = lõpeta eu = gelditu fa = توقف fi = lopeta @@ -15229,6 +15629,7 @@ de = Aufzeichnung Ihrer kürzlich gefahrenen Route deaktivieren? el = Θέλετε να απενεργοποιήσετε την καταγραφή της πρόσφατης διαδρομής σας; es = ¿Desactivar la grabación de su ruta recientemente recorrida? + et = Keela oma hiljuti läbitud marsruudi salvestamine? eu = Bidaiatutako azken ibilbidearen grabaketa desaktibatu nahi duzu? fa = غیرفعال سازی ذخیره مسیر اخیرا طی شده fi = Poistetaanko viimeisen matkareitin tallennus? @@ -15267,6 +15668,7 @@ de = Deaktivieren el = Απενεργοποίηση es = Deshabilitar + et = Keela eu = Desgaitzeko fa = غیرفعال fi = Poista @@ -15306,6 +15708,7 @@ de = Nachsehen el = Αναχώρηση es = Comprueba + et = Vaata järele eu = Egiaztatu fa = بررسی کنید fi = Tarkastele @@ -15344,6 +15747,7 @@ de = Organic Maps verwendet Ihre Geoposition im Hintergrund, um Ihre kürzlich gefahrene Route aufzunehmen. el = Το Organic Maps χρησιμοποιεί τη γεωγραφική σας τοποθεσία στο παρασκήνιο για την καταγραφή των πρόσφατων διαδρομών σας. es = Organic Maps usa tu geolocalización en segundo plano para registrar tu ruta recorrida recientemente. + et = Organic Maps kasutab Sinu geograafilist asukohta taustal Sinu hiljuti läbitud teekonna salvestamiseks. eu = Organic Maps-ek zure geokokapena erabiltzen du atzeko planoan egindako azken ibilbidea erregistratzeko. fa = Organic Maps از اطلاعات موقعیت مکانی شما در پس ضمینه برای ذخیره مسیر هایی که اخیرا سفر کرده اید استفاده می کند. fi = MAPS.SE käyttää taustalla geosijaintia sinun viimeisen matkareitin tallentamiseksi. @@ -15383,6 +15787,7 @@ de = Organic Maps ist eine schnelle und kostenlose Offline-Karten-App ohne Werbung und Tracking. Die Karten basieren auf den Daten von OpenStreetMap.org, so dass Sie selbst Kartenfehler beheben und Orte hinzufügen können. Organic Maps ist ein Open-Source-Projekt, das von Enthusiasten in ihrer Freizeit entwickelt wird. Ihr Feedback und Ihre Unterstützung sind sehr willkommen! el = Οι Organic Maps είναι μια δωρεάν και ανοιχτού κώδικα εφαρμογή χαρτών εκτός σύνδεσης. Χωρίς διαφημίσεις. Χωρίς εντοπισμό. Εάν δείτε κάποιο σφάλμα στον χάρτη, διορθώστε το στο OpenStreetMap. Το έργο δημιουργείται από λάτρεις στον ελεύθερο χρόνο μας, επομένως χρειαζόμαστε τα σχόλια και την υποστήριξή σας. es = Organic Maps es una aplicación de mapas sin conexión gratuita y de código abierto. Sin anuncios. Sin seguimiento. Si ve un error en el mapa, corríjalo en OpenStreetMap. El proyecto está creado por entusiastas en nuestro tiempo libre, por lo que necesitamos tus comentarios y tu apoyo. + et = Organic Maps on kiire ja tasuta võrguühenduseta kaartide rakendus ilma reklaamide ja jälgimiseta. Kaardid põhinevad vabatahtlike loodud OpenStreetMap.org-i andmetel, nii et saate kaardistamise vigu parandada ja ise funktsioone lisada. Organic Maps on avatud lähtekoodiga projekt, mille on loonud entusiastid oma vabast ajast. Teie tagasiside ja toetus on väga teretulnud! eu = Organic Maps lineaz kanpoko mapa aplikazio doako eta irekia da. Iragarkirik ez. Ez dago jarraipenik. Mapan errore bat ikusten baduzu, konpondu OpenStreetMap-en. Proiektua zaleek sortu dute gure aisialdian, beraz, zure iritzia eta laguntza behar dugu. fa = Organic Maps یک برنامه نقشه آفلاین رایگان و منبع باز است. بدون تبلیغات بدون ردیابی اگر خطایی روی نقشه مشاهده کردید، لطفاً آن را در OpenStreetMap برطرف کنید. این پروژه توسط علاقه مندان در اوقات فراغت ما ایجاد می شود، بنابراین ما به بازخورد و پشتیبانی شما نیاز داریم. fi = Organic Maps on ilmainen ja avoimen lähdekoodin offline-karttasovellus. Ei mainoksia. Ei seurantaa. Jos näet virheen kartalla, korjaa se OpenStreetMapissa. Hankkeen ovat luoneet harrastajat vapaa-ajallamme, joten tarvitsemme palautettasi ja tukeasi. @@ -15423,6 +15828,7 @@ de = Allgemeine Einstellungen el = Γενικές ρυθμίσεις es = Ajustes generales + et = Üldseaded eu = Doikuntza orokorrak fa = تنظیمات عمومی fi = Yleiset asetukset @@ -15462,6 +15868,7 @@ de = Annehmen el = Συμφωνώ es = Aceptar + et = Nõustu eu = Onartzeko fa = موافقم fi = Hyväksy @@ -15501,6 +15908,7 @@ de = Ablehnen el = Διαφωνώ es = Declinar + et = Keeldu eu = Gainbehera fa = کاهش fi = Hylkää @@ -15540,6 +15948,7 @@ de = Liste el = Λίστα es = Lista + et = Loetelu eu = Prest fa = لیست fi = Luettelo @@ -15578,6 +15987,7 @@ de = Mobiles Internet verwenden, um genauere Informationen anzuzeigen? el = Θέλετε να χρησιμοποιήσετε το δίκτυο κινητής τηλεφωνίας για να εμφανίσετε αναλυτικές πληροφορίες; es = ¿Usar Internet móvil para mostrar información detallada? + et = Kasuta mobiilset internetti detailse teabe kuvamiseks? eu = Internet mugikorra erabili informazio zehatza bistaratzeko? fa = از دیتای موبایل برای نمایش اطلاعات بیشتر استفاده شود؟ fi = Näytetäänkö lisätiedot mobiili-internetillä? @@ -15616,6 +16026,7 @@ de = Immer verwenden el = Να χρησιμοποιείται πάντα es = Usar siempre + et = Kasuta alati eu = Beti erabili fa = همیشه استفاده کن fi = Käytä aina @@ -15654,6 +16065,7 @@ de = Nur heute el = Μόνο σήμερα es = Solo hoy + et = Ainult täna eu = Gaur bakarrik fa = فقط امروز fi = Vain tänään @@ -15692,6 +16104,7 @@ de = Heute nicht verwenden el = Να μην χρησιμοποιηθεί σήμερα es = No usar hoy + et = Ära kasuta täna eu = Ez erabili gaur fa = امروز نه fi = Älä käytä tänään @@ -15730,6 +16143,7 @@ de = Mobiles Internet el = Ίντερνετ μέσω δικτύου κινητής es = Internet móvil + et = Mobiilne internet eu = Internet mugikorra fa = دیتای موبایل fi = Mobiili-internet @@ -15769,6 +16183,7 @@ de = Es wird mobiles Internet benötigt, um über Kartenaktualisierungen informiert zu werden und genauere Informationen über Orte anzuzeigen. el = Απαιτείται πρόσβαση στο Ίντερνετ μέσω δικτύου κινητής για την εμφάνιση αναλυτικών πληροφοριών για τις τοποθεσίες, όπως φωτογραφίες, τιμές και κριτικές. es = Se necesita Internet móvil para mostrar información detallada de los lugares, como fotografías, precios y reseñas. + et = Mobiilne internet on vajalik kaardi värskendamise märguannete jaoks ning kohtade ja järjehoidjate üksikasjaliku teabe kuvamiseks. eu = Internet mugikorra behar da tokiei buruzko informazio zehatza bistaratzeko, hala nola argazkiak, prezioak eta iritziak. fa = برای نمایش جزئیات مکان مانند تصاویر قیمت ها و بازخورد ها به اینترنت همراه نیاز است fi = Mobiili-internet vaaditaan paikkojen lisätietojen näyttämiseen, kuten valokuviin, hintoihin ja arvioihin. @@ -15807,6 +16222,7 @@ de = Nie verwenden el = Να μην χρησιμοποιείται ποτέ es = No usar nunca + et = Ära kasuta kunagi eu = Inoiz erabili fa = هرگز fi = Älä käytä koskaan @@ -15845,6 +16261,7 @@ de = Immer fragen el = Να γίνεται ερώτηση πάντα es = Preguntar siempre + et = Küsi alati eu = Beti galdetu fa = همیشه بپرس fi = Kysy aina @@ -15883,6 +16300,7 @@ de = Um Verkehrsdaten anzuzeigen, müssen die Karten aktualisiert werden. el = Για να εμφανίσετε πληροφορίες για την κίνηση, πρέπει να ενημερωθούν οι χάρτες. es = Para mostrar los datos de tráfico, deben actualizarse los mapas. + et = Liiklusinfo kuvamiseks tuleb kaardid värskendada. eu = Trafiko datuak bistaratzeko, mapak eguneratu behar dira. fa = برای نمایش ترافیک,نقشه می بایستی بروزرسانی شود. fi = Liikennetietojen näyttämiseksi kartat on päivitettävä. @@ -15921,6 +16339,7 @@ de = Schrift auf der Karte vergrößern el = Αύξηση μεγέθους γραμματοσειράς στο χάρτη es = Aumentar el tamaño de fuente en el mapa + et = Suurenda teksti suurust kaardil eu = Handitu letra-tamaina mapan fa = افزایش اندازه متن بر روی نقشه fi = Suurenna fonttikokoa kartalla @@ -15959,6 +16378,7 @@ de = Bitte aktualisieren Sie Organic Maps el = Κάντε ενημέρωση του Organic Maps es = Por favor, actualice Organic Maps + et = Palun uuenda Organic Maps eu = Mesedez, eguneratu Organic Maps fa = لطفا Organic Maps را بروزرسانی کنید fi = Päivitä Organic Maps @@ -15998,6 +16418,7 @@ de = Zum Anzeigen von Verkehrsdaten muss die Anwendung aktualisiert werden. el = Για να εμφανιστούν πληροφορίες για την κίνηση, πρέπει να γίνει ενημέρωση της εφαρμογής. es = Para mostrar los datos de tráfico, debe actualizar la aplicación. + et = Liiklusinfo kuvamiseks tuleb rakendust värskendada. eu = Trafiko datuak bistaratzeko, aplikazioa eguneratu behar duzu. fa = برای نمایش ترافیک باید اپلیکیشن را بروزرسانی کنید. fi = Liikennetietojen näyttämiseksi sovellus on päivitettävä. @@ -16037,6 +16458,7 @@ de = Verkehrsdaten sind nicht verfügbar el = Οι πληροφορίες για την κίνηση δεν είναι διαθέσιμες es = Los datos de tráfico no están disponibles + et = Liiklusinfo ei ole saadaval eu = Trafiko datuak ez daude eskuragarri fa = اطلاعات ترافیکی موجود نیست fi = Liikennetietoja ei ole saatavilla @@ -16075,6 +16497,7 @@ de = Protokollierung aktivieren el = Ενεργοποίηση δυνατότητας καταγραφής es = Habilitar historial + et = Luba logimine eu = Historia gaitu fa = ورود به سیستم را فعال کنید fi = Ota loki käyttöön @@ -16114,6 +16537,7 @@ de = Allgemeines Feedback el = Γενικό σχόλιο es = Opinión general + et = Üldine tagasiside eu = Iritzi orokorra fa = "تنظیمات: دکمه "ارسال بازخورد کلی fi = Yleinen palaute @@ -16153,6 +16577,7 @@ de = An el = Ενεργ. es = Act. + et = Sees eu = Ekin. fa = روشن fi = Käytössä @@ -16192,6 +16617,7 @@ de = Aus el = Απενεργ. es = Desact. + et = Väljas eu = Itzali fa = خاموش fi = Ei käytössä @@ -16231,6 +16657,7 @@ de = Wir verwenden Text-to-Speech-Systeme für Sprachanweisungen. Viele Android-Geräte nutzen Google-TTS, das Sie bei Google Play (https://play.google.com/store/apps/details?id=com.google.android.tts) herunterladen oder aktualisieren können. el = Χρησιμοποιούμε σύστημα TTS για τις φωνητικές οδηγίες. Αρκετές συσκευές Android χρησιμοποιούν Google TTS, μπορείτε να το κατεβάσετε ή να το ενημερώσετε από το Google Play (https://play.google.com/store/apps/details?id=com.google.android.tts) es = Utilizamos el sistema TTS para las instrucciones de voz. Muchos dispositivos de Android usan Google TTS. Puede descargar o actualizarlo desde Google Play (https://play.google.com/store/apps/details?id=com.google.android.tts) + et = Hääljuhiste jaoks kasutame TTS süsteemi. Paljud Android-seadmed kasutavad Google'i TTS-i, saate selle alla laadida või värskendada teenusest Google Play (https:play.google.comstoreappsdetails?id=com.google.android.tts) eu = TTS sistema erabiltzen dugu ahots-argibideetarako. Android gailu askok Google TTS erabiltzen dute. Google Play-tik deskargatu edo egunera dezakezu (https://play.google.com/store/apps/details?idu003dcom.google.android.tts) fa = ما از TTS سیستم برای دستورالعمل های صوتی استفاده می کنیم. بسیاری از دستگاه های Android از Google TTS استفاده می کنند، شما می توانید آن را از Google Play دانلود کنید (https://play.google.com/store/apps/details؟id=com.google.android.tts) fi = Käytämme ääniohjeisiin tekstistä puheeksi -järjestelmää. Monet Android-laitteet käyttävät Googlen tekstistä puheeksi -sovellusta, jonka voit ladata tai päivittää Google Playssä (https://play.google.com/store/apps/details?id=com.google.android.tts) @@ -16270,6 +16697,7 @@ de = Für einige Sprachen müssen Sie einen anderen Sprachgenerator oder ein zusätzliches Sprachpaket aus dem App Store installieren (Google Play, Galaxy Store, App Gallery, FDroid). \nÖffnen Sie die Einstellungen Ihres Gerätes → Sprache und Eingabe → Sprache → Text-to-Speech-Ausgabe. Hier können Sie die Einstellungen für Sprachsynthese verwalten (beispielsweise ein Sprachpaket für die Offline-Verwendung herunterladen) und ein anderes Sprachausgabeprogramm auswählen. el = Για μερικές γλώσσες θα χρειαστεί να εγκαταστήσετε συνθεσάιζερ ομιλίας ή συμπληρωματικό πακέτο γλώσσας από το app store (Google Play, Galaxy Store, App Gallery, FDroid).\nΑνοίξτε τις Ρυθμίσεις της συσκευής σας → Γλώσσα και εισαγωγή → Ομιλία → Μετατροπή κειμένου σε ομιλία.\nΕδώ μπορείτε να διαχειριστείτε τις ρυθμίσεις της σύνθεσης ομιλίας (για παράδειγμα, μπορείτε να κατεβάσετε πακέτο γλώσσας για χρήση εκτός σύνδεσης) και να επιλέξετε άλλη μηχανή μετατροπής κειμένου σε ομιλία. es = Para algunos idiomas, debe instalar otro sintetizador de voz o un paquete de idioma adicional desde la tienda de aplicaciones (Google Play, Galaxy Store, App Gallery, FDroid). Abra los Ajustes de su dispositivo → Idioma e introducción → Voz → Opciones texto a voz. Aquí puede administrar la configuración de síntesis de voz (por ejemplo, descargar un paquete de idioma para poder usarlo sin conexión) o seleccionar otro motor de texto a voz. + et = Mõne keele puhul peate paigaldama kõnesüntesaatori või täiendava keelepaketi rakenduste poest (Google Play, Galaxy Store, App Gallery, FDroid).\nAvage oma seadme seaded → Keel ja sisend → Kõne → Tekst kõneks väljund .\nSiin saate hallata kõnesünteesi seadeid (näiteks alla laadida keelepaketti võrguühenduseta kasutamiseks) ja valida mõne muu teksti kõneks muutmise mootori. eu = Zenbait hizkuntzatan, beste ahots-sintetizadore bat edo hizkuntza-pakete gehigarri bat instalatu behar duzu aplikazio-dendatik (Google Play, Galaxy Store, App Gallery, FDroid). Ireki gailua Ezarpenak > Hizkuntza eta sarrera > Hizkera > Hizketarako testurako aukerak. Hemen ahots-sintesiaren ezarpenak kudea ditzakezu (adibidez, hizkuntza pakete bat deskargatu, konexiorik gabe erabiltzeko) edo testu-hizketarako beste motor bat hauta dezakezu. fa = برای بعضی از زبان ها، شما باید speech synthesizer یا یک بسته زبان دیگر را از فروشگاه برنامه (بازار Google Play، Galaxy Store) نصب کنید. \n تنظیمات دستگاه خود را باز کنید. → زبان و ورودی → گفتار → خروجی متن به گفتار. می توانید تنظیمات برای ترکیب گفتار (به عنوان مثال، بسته های زبان را برای استفاده آفلاین دانلود کنید) را مدیریت کنید و یک موتور دیگر متن به گفتار را انتخاب کنید. fi = Joidenkin kielien osalta sinun täytyy asentaa toinen puhesyntetisaattori tai lisäkielipaketti sovelluskaupasta (Google Play, Galaxy Store, App Gallery, FDroid). Avaa laitteen asetukset → Kieli ja syöttötapa → Puhe → Teksistä puheeksi -toisto. Täällä voit hallita puhesynteesin asetuksia (esimerkiksi ladata offline-tilassa käytettävän kielipaketin) ja valita toisen tekstistä puheeksi -moottorin. @@ -16308,6 +16736,7 @@ de = Weitere Informationen finden Sie in dieser Anleitung. el = Για περισσότερες πληροφορίες δείτε αυτό τον οδηγό. es = Para obtener más información, consulte esta guía. + et = Lisainfo saamiseks palun vaadake seda juhist. eu = Informazio gehiago lortzeko, ikusi gida hau. fa = برای اطلاعات بیشتر لطفا این راهنما را بررسی کنید. fi = Lisätietoja saat tästä oppaasta. @@ -16348,6 +16777,7 @@ el = Μεταγραφή στα Λατινικά es = Transliteración al latín es-MX = Transliteración al alfabeto latino + et = Transliteratsioon ladina keelde eu = Latinezko transliterazioa fa = ترجمه به لاتین fi = Translitterointi latinaksi @@ -16390,6 +16820,7 @@ de = Weitere Informationen el = Μάθετε περισσότερα es = Leer más + et = Lisateave eu = Irakurri gehiago fa = بیشتر بدانید fi = Lisätietoja @@ -16430,6 +16861,7 @@ de = Ausgang el = Έξοδος es = Salida + et = Välju eu = Irteera fa = خروج fi = Poistu @@ -16469,6 +16901,7 @@ de = Fügen Sie einen Startpunkt hinzu, um eine Route zu planen el = Προσθέστε αφετηρία για να σχεδιάσετε μια διαδρομή es = Buscar un origen para el plan de ruta + et = Marsruudi planeerimiseks lisa lähtepunkt eu = Bilatu ibilbide-planaren iturria fa = یک نقطه شروع برای برنامه ریزی یک مسیر اضافه کنید fi = Lisää alkupiste reitin suunnittelua varten @@ -16508,6 +16941,7 @@ de = Fügen Sie ein Ziel hinzu, um eine Route zu planen el = Προσθέστε τελικό προορισμό, για να σχεδιάσετε μια διαδρομή es = Buscar un destino para el plan de ruta + et = Marsruudi planeerimiseks lisa sihtkoht eu = Bilatu ibilbide-planaren helmuga fa = یک مقصد برای برنامه ریزی یک مسیر اضافه کنید fi = Lisää määränpää reitin suunnittelua varten @@ -16547,6 +16981,7 @@ de = Beenden el = Έξοδος es = Salir + et = Välju eu = Utzi fa = خروج fi = Poistu @@ -16586,6 +17021,7 @@ de = Route verwalten el = Διαχείριση διαδρομής es = Administrar ruta + et = Halda marsruuti eu = Ibilbidea kudeatu fa = مدیریت مسیر fi = Hallitse reittiä @@ -16625,6 +17061,7 @@ de = Planen el = Σχέδιο es = Planificar + et = Planeeri eu = Planifikatzeko fa = برنامه fi = Suunnittele @@ -16664,6 +17101,7 @@ de = Entfernen el = Κατάργηση es = Eliminar + et = Eemalda eu = Kendu fa = حذف fi = Poista @@ -16703,6 +17141,7 @@ de = Hierher ziehen zum Entfernen el = Σύρετε εδώ για κατάργηση es = Arrastre aquí para eliminar + et = Eemaldamiseks lohista siia eu = Arrastatu hona kentzeko fa = برای حذف اینجا بکشید fi = Vedä tähän poistaaksesi @@ -16742,6 +17181,7 @@ de = Zwischenstopp hinzufügen el = Προσθήκη στάσης es = Añadir parada + et = Lisa peatus eu = Gehitu stop fa = اضافه کردن توقف fi = Lisää pysähdys @@ -16780,6 +17220,7 @@ de = Starten von el = Έναρξη από es = Empezar desde + et = Alusta kohast eu = Hasi fa = شروع از fi = Aloita kohdasta @@ -16819,6 +17260,7 @@ de = Hoppla, es ist ein Fehler aufgetreten. Versuchen Sie erneut, sich anzumelden. el = Ωχ, παρουσιάστηκε σφάλμα. Προσπαθήστε να συνδεθείτε ξανά. es = Vaya, se ha producido un error. Intente iniciar sesión de nuevo. + et = Vabandust, tekkis viga. Proovi uuesti sisse logida. eu = Errore bat gertatu da. Mesedez, saiatu berriro saioa hasten. fa = اوه، یک خطا وجود داشت سعی کنید دوباره وارد سیستم شوید fi = Tapahtui virhe. Yritä kirjautua sisään uudelleen. @@ -16859,6 +17301,7 @@ el = Πρόβλημα πρόσβασης στον αποθηκευτικό χώρο es = Problema de acceso al almacenamiento es-MX = Problema de acceso al almacenamiento + et = Salvestusruumi ligipääsu probleem eu = Biltegiratze sarbidearen arazoa fa = مشکل دسترسی به ذخیره سازی fi = Ongelma tallennustilan käyttämisessä @@ -16899,6 +17342,7 @@ el = Ο εξωτερικός απθηκευτικός χώρος δεν είναι διαθέσιμος, πιθανότατα έχει αφαιρεθεί η κάρτα SD, είναι κατεστραμμένη ή το σύστημα αρχείων είναι μόνο για ανάγνωση. Ελέγξτε το και επικοινωνήστε μαζί μας στη διεύθυνση support@organicmaps.app es = El almacenamiento externo no está disponible; puede que se haya quitado o dañado la tarjeta SD, o el sistema de archivos solo permite lectura. Por favor, compruébelo ó escríbanos a support@organicmaps.app es-MX = El almacenamiento externo no está disponible. Es posible que se haya quitado o dañado la tarjeta SD, o que el sistema de archivos solo permita la lectura. Revíselo y escríbanos a support@organicmaps.app + et = Välismälu pole juurdepääsetav. SD-kaart võib olla eemaldatud, kahjustatud või failisüsteem on kirjutuskaitstud. Palun kontrollige oma SD-kaarti või võtke meiega ühendust aadressil support@organicmaps.app eu = Kanpoko biltegiratzea ez dago erabilgarri; Baliteke SD txartela kendu edo hondatuta egotea, edo fitxategi-sistema irakurtzeko soilik izatea. Mesedez, begiratu edo idatzi iezaguzu support@organicmaps.app helbidera fa = ذخیره سازی خارجی در دسترس نیست کارت SD ممکن است برداشته شده باشد، آسیب دیده باشد یا سیستم فایل فقط خواندنی باشد. لطفا کارت SD خود را بررسی کنید یا با ما در support@organicmaps.app تماس بگیرید fi = Ulkoinen tallennustila ei ole käytettävissä, SD-kortti on luultavasti poistettu tai vahingoittunut tai tiedostojärjestelmä on vain luku -tilassa. Tarkista ja ota yhteyttä osoitteeseen support@organicmaps.app @@ -16939,6 +17383,7 @@ el = Εξομείωση κακού αποθηκευτικού χώρου es = Emular almacenamiento dañado es-MX = Emular el almacenamiento dañado + et = Jäljenda vigast salvestusruumi eu = Emulatu kaltetutako biltegiratzea fa = شبیه سازی ذخیره سازی بد fi = Jäljittele virheellistä tallennustilaa @@ -16979,6 +17424,7 @@ el = Είσοδος es = Entrada es-MX = Entrada + et = Sissepääs eu = Sarrera fa = ورودی fi = Sisäänkäynti @@ -17019,6 +17465,7 @@ el = Εισάγετε ένα σωστό όνομα es = Por favor, introduzca el nombre correcto es-MX = Introduzca el nombre correcto + et = Palun sisesta korrektne nimi eu = Mesedez, idatzi izen zuzena fa = لطفا نام صحیح را وارد کنید fi = Anna oikea nimi @@ -17059,6 +17506,7 @@ el = Τόπος αγώνων es = Listas es-MX = Listas + et = Loetelud eu = Zerrendak fa = لیست ها fi = Listat @@ -17100,6 +17548,7 @@ el = Απόκρυψη όλων es = Ocultar todo es-MX = Ocultar todo + et = Peida kõik eu = Ezkutatu guztiak fa = پنهان کردن همه fi = Piilota kaikki @@ -17140,6 +17589,7 @@ el = Εμφάνιση όλων es = Mostrar todo es-MX = Mostrar todo + et = Kuva kõik eu = Erakutsi dena fa = نمایش همه fi = Näytä kaikki @@ -17183,6 +17633,8 @@ el = %d αγαπημένα es = %d marcadores es-MX = %d marcadores + et:one = %d järjehoidja + et:other = %d järjehoidjat eu = %d laster-marka fa:one = %d نشانه fa:other = %d نشانه‌ها @@ -17233,6 +17685,7 @@ el = Δημιουργία νέας λίστας es = Crear nueva lista es-MX = Crear lista nueva + et = Loo uus loetelu eu = Sortu zerrenda berria fa = ایجاد لیست جدید fi = Luo uusi luettelo @@ -17270,6 +17723,7 @@ ca = Importa marcadors de = Lesezeichen importieren es = Importar marcadores + et = Impordi järjehoidjad eu = Inportatu laster-markak fi = Tuo kirjamerkit fr = Importer des signets @@ -17297,6 +17751,7 @@ el = Απόκρυψη οθόνης es = Ocultar pantalla es-MX = Ocultar pantalla + et = Peida vaade eu = Pantaila ezkutatu fa = پنهان کردن صفحه fi = Piilota näyttö @@ -17337,6 +17792,7 @@ el = %s (%s από %s) es = %s (%s de %s) es-MX = %s (%s de %s) + et = %s (%s / %s) eu = %s (%s/%s) fa = %s (%s از %s) fi = %s (%s / %s) @@ -17377,6 +17833,7 @@ el = Λήψη %s… es = Descargando %s… es-MX = Descargando %s… + et = Allalaadimine %s… eu = %s deskargatzen… fa = در حال دانلود %s… fi = Ladataan %s… @@ -17417,6 +17874,7 @@ el = Εφαρμογή %s… es = Aplicando %s… es-MX = Aplicando %s… + et = %s rakendamine eu = %s aplikatzen… fa = اعمال %s… fi = %s otetaan käyttöön… @@ -17457,6 +17915,7 @@ el = Αδυναμία κοινής χρήσης λόγω σφάλματος εφαρμογής es = No se puede compartir debido a un error de la aplicación es-MX = No se puede compartir debido a un error de la aplicación + et = Rakenduse vea tõttu ei saanud jagada eu = Ezin izan da partekatu aplikazioaren errore baten ondorioz fa = با توجه به خطای برنامه، امکان اشتراک گذاری وجود ندارد fi = Ei voitu jakaa sovellusvirheen vuoksi @@ -17497,6 +17956,7 @@ el = Σφάλμα κοινής χρήσης es = Error al compartir es-MX = Error al compartir + et = Jagamise viga eu = Partekatzeak huts egin du fa = خطای اشتراک fi = Jakamisvirhe @@ -17537,6 +17997,7 @@ el = Αδύνατη η κοινή χρήση κενής λίστας es = No se puede compartir una lista vacía es-MX = No se puede compartir una lista vacía + et = Tühja loetelu ei saa jagada eu = Ezin da partekatu zerrenda hutsik fa = یک لیست خالی را نمی توان به اشتراک گذاشت fi = Tyhjää listaa ei voi jakaa @@ -17577,6 +18038,7 @@ el = Το όνομα δεν θα μπορούσε να είναι άδειο es = El nombre no puede estar vacío es-MX = El nombre no puede quedar vacío + et = Nimi ei saa olla tühi eu = Izena ezin da hutsik egon fa = نام نمیتواند خالی باشد fi = Nimi ei voinut olla tyhjä @@ -17617,6 +18079,7 @@ el = Εισαγάγετε το όνομα της λίστας es = Por favor ingrese el nombre de la lista es-MX = Escriba el nombre + et = Palun sisesta loetelu nimi eu = Mesedez, idatzi zerrendaren izena fa = لطفا نام لیست را وارد کنید fi = Anna luettelon nimi @@ -17657,6 +18120,7 @@ el = Νέα λίστα es = Lista nueva es-MX = Lista nueva + et = Uus loetelu eu = Zerrenda berria fa = لیست جدید fi = Uusi lista @@ -17697,6 +18161,7 @@ el = Αυτό το όνομα έχει ήδη ληφθεί es = Este nombre ya ha sido tomado es-MX = Este nombre ya está en uso + et = See nimi on juba kasutusel eu = Izen hau dagoeneko hartua da fa = این اسم قبلا انتخاب شده است fi = Nimi on jo käytössä @@ -17737,6 +18202,7 @@ el = Επιλέξτε άλλο όνομα es = Por favor elige otro nombre es-MX = Por favor elige otro nombre + et = Palun vali teine nimi eu = Mesedez, aukeratu beste izen bat fa = لطفا نام دیگری را انتخاب کنید fi = Valitse toinen nimi @@ -17776,6 +18242,7 @@ el = Αυτό το όνομα είναι πολύ μεγάλο es = Este nombre es demasiado largo es-MX = Este nombre es demasiado largo + et = See nimi on liiga pikk eu = Izen hau luzeegia da fa = این نام خیلی طولانی است fi = Tämä nimi on liian pitkä @@ -17816,6 +18283,7 @@ el = Παρακαλώ περιμένετε… es = Por favor espera… es-MX = Por favor, espere… + et = Palun oota… eu = Itxaron mesedez… fa = لطفا صبر کنید… fi = Odota… @@ -17855,6 +18323,7 @@ el = Τηλεφωνικό νούμερο es = Número de teléfono es-MX = Número de teléfono + et = Telefoni number eu = Telefono zenbakia fa = شماره تلفن fi = Puhelinnumero @@ -17894,6 +18363,7 @@ de = OpenStreetMap-Profil el = Προφίλ OpenStreetMap es = Perfil de OpenStreetMap + et = OpenStreetMap profiil eu = OpenStreetMap profila fa = OpenStreetMap نمایه fi = OpenStreetMap-profiili @@ -17933,6 +18403,7 @@ el = Εντοπίστηκαν νέα αρχεία es = Nuevos archivos detectados es-MX = Se detectaron archivos nuevos + et = Leitud uusi faile eu = Fitxategi berriak detektatu dira fa = فایل‌های جدید پیدا شد fi = Uusia tiedostoja havaittiin @@ -17982,6 +18453,8 @@ es-MX:other = Se han encontrado %d archivos. Los verás después de la conversión. es:one = Se encontró %d archivo. Lo verás después de la conversión. es:other = Se han encontrado %d archivos. Los verás después de la conversión. + et:one = %d fail leiti. Näed seda peale teisendamist. + et:other = %d faili leiti. Näed neid peale teisendamist. fa:one = %d فایل پیدا شد. بعد از تبدیل آن را می‌بینید. fa:other = %d فایل پیدا شد. بعد از تبدیل آن‌ها را می‌بینید. fi:one = %d tiedosto löydettiin. Näet sen muunnoksen jälkeen. @@ -18045,6 +18518,7 @@ el = Μετατρέπω es = Convertir es-MX = Convertir + et = Teisenda eu = Bihurtu fa = تبدیل fi = Muuntaa @@ -18085,6 +18559,7 @@ el = Λάθος es = Error es-MX = Error + et = Viga eu = Errorea fa = خطا fi = Virhe @@ -18125,6 +18600,7 @@ el = Ορισμένα αρχεία δεν μετατράπηκαν. es = Algunos archivos no fueron convertidos. es-MX = Algunos archivos no se convirtieron. + et = Mõningaid faile ei teisendatud. eu = Fitxategi batzuk ez dira bihurtu. fa = بعضی از فایل‌ها تبدیل نشد. fi = Joitakin tiedostoja ei muutettu. @@ -18165,6 +18641,7 @@ el = Επαναφορά αυτής της έκδοσης; es = ¿Restaurar esta versión? es-MX = ¿Está seguro que desea restaurar esta versión? + et = Taasta see versioon? eu = Bertsio hau berreskuratu nahi duzu? fa = این نسخه برگردد؟ fi = Palauta tämä versio? @@ -18205,6 +18682,7 @@ el = Δεν υπάρχει σύνδεση στο διαδίκτυο es = Sin conexión a Internet es-MX = Sin conexión a Internet + et = Interneti ühendus puudub eu = Ez dago Interneteko konexiorik fa = اتصال اینترنتی برقرار نیست fi = Ei Internet-yhteyttä @@ -18245,6 +18723,7 @@ el = Συνέβη ένα άγνωστο σφάλμα es = Ocurrió un error desconocido es-MX = Ocurrió un error desconocido + et = Tekkis tundmatu viga eu = Errore ezezagun bat gertatu da fa = خطای ناشناخته‌ای رخ داد fi = Tuntematon virhe tapahtui @@ -18285,6 +18764,7 @@ el = Επαναφορά es = Restaurar es-MX = Restaurar + et = Taasta eu = Berreskuratu fa = بازیابی fi = Palauttaa @@ -18332,6 +18812,8 @@ es-MX = %d lugar es:one = %d objecto es:other = %d objectos + et:one = %d objekt + et:other = %d objekti fa:one = %d شیء fa:other = %d شیء fi = %d paikka @@ -18385,6 +18867,8 @@ es-MX = %d lugares es:one = %d lugar es:other = %d lugares + et:one = %d koht + et:other = %d kohta fa:one = %d مکان fa:other = %d مکان fi = %d paikat @@ -18440,6 +18924,7 @@ es-MX = %d rastreos es:one = %d ruta es:other = %d rutas + et = %d rada fa:one = %d رد fa:other = %d رد fi = %d radat @@ -18487,6 +18972,7 @@ el = Ρυθμίσεις διαδρομών es = Configuraciones de seguimiento es-MX = Configuraciones de rastreo + et = Asukoha määramise seaded eu = Jarraipen ezarpenak fa = تنظیمات ردیابی fi = Paikannusasetukset @@ -18527,6 +19013,7 @@ el = Αναφορά σφάλματος es = Informe de incidentes es-MX = Reporte de fallas + et = Krahhi raport eu = Gertakarien txostena fa = گزارش خرابی fi = Kaatumisraportti @@ -18567,6 +19054,7 @@ el = Μπορεί να χρησιμοποιήσουμε τα δεδομένα σας για να βελτιώσουμε την εμπειρία του Organic Maps. Οι αλλαγές θα ενεργοποιηθούν μετά την επανεκκίνηση της εφαρμογής. es = Puede que utilicemos vuestros datos para mejorar la experiencia de Organic Maps. Los cambios tendrán efecto después que reinicie la aplicación. es-MX = Puede que utilicemos sus datos para mejorar la experiencia de Organic Maps. Los cambios surtirán efecto después de que reinicie la aplicación. + et = õime kasutada teie andmeid Organic Maps kasutuskogemuse parandamiseks. Muudatused jõustuvad pärast rakenduse taaskäivitamist. eu = Zure datuak Organic Maps-en esperientzia hobetzeko erabil ditzakegu. Aldaketak aplikazioa berrabiarazi ondoren jarriko dira indarrean. fa = ما از داده‌های شما برای بهبود Organic Maps استفاده می‌کنیم. تغییرات پس از راه‌اندازی مجدد برنامه به‌کار می‌افتد. fi = Me saatamme käyttää tietojasi parantaaksemme Organic Maps kokemusta. Muutokset alkavat vaikuttamaan kun käynnistät sovelluksen uudestaan. @@ -18607,6 +19095,7 @@ el = Πολιτική απορρήτου es = Política de Privacidad es-MX = Política de Privacidad + et = Privaatsuspoliitika eu = Pribatutasun-politika fa = سیاست حریم خصوصی fi = Yksityisyyskäytäntö @@ -18647,6 +19136,7 @@ el = Όροι χρήσης es = Condiciones de uso es-MX = Términos de uso + et = Kasutustingimused eu = Erabilera baldintzak fa = شرایط استفاده fi = Käyttöehdot @@ -18687,6 +19177,7 @@ el = Κίνηση es = Tráfico es-MX = Tráfico + et = Liiklus eu = Trafikoa fa = ترافیک fi = Liikenne @@ -18728,6 +19219,7 @@ el = Μετρό es = Metro es-MX = Metro + et = Metroo eu = Metroa fa = مترو fi = Metro @@ -18768,6 +19260,7 @@ el = Επίπεδα του χάρτη es = Capas del mapa es-MX = Capas del mapa + et = Kaardikihid eu = Mapa geruzak fa = لایه های نقشه fi = Karttatasot @@ -18809,6 +19302,7 @@ el = Ο χάρτης μετρό δεν είναι διαθέσιμος es = El mapa del metro no está disponible es-MX = El mapa del metro no está disponible + et = Metroo kaart ei ole saadaval eu = Metroaren mapa ez dago erabilgarri fa = نقشه مترو موجود نیست fi = Metrokartta ei ole saatavilla @@ -18849,6 +19343,7 @@ el = Η λίστα είναι άδεια es = Esta lista está vacía es-MX = Esta lista está vacía + et = See loetelu on tühi eu = Zerrenda hau hutsik dago fa = این لیست خالی است fi = Lista on tyhjä @@ -18889,6 +19384,7 @@ el = Για να προσθέσετε σελιδοδείκτη, πατήστε ένα μέρος στο χάρτη και μετά πατήστε το αστεράκι es = Para agregar un marcador, toque un lugar en el mapa y después toque el ícono de estrella es-MX = Para añadir un marcador, toque un lugar en el mapa y después toque el ícono de estrella + et = Järjehoidja lisamiseks puuduta kohta kaardil ja seejärel puuduta tähekese ikooni eu = Pin bat gehitzeko, ukitu mapako toki bat eta, ondoren, ukitu izarraren ikonoa fa = برای افزودن یک نشانه، روی یک مکان روی نقشه ضربه بزنید و سپس روی نماد ستاره ضربه بزنید fi = Lisätäksesi kirjanmerkin, paina kartasta ja sitten paina tähden kuvaa @@ -18929,6 +19425,7 @@ el = …περισσότερα es = …más es-MX = …más + et = …veel eu = …gehi fa = بیشتر… fi = …lisää @@ -18969,6 +19466,7 @@ el = Συνέβη σφάλμα es = Se ha producido un error es-MX = Ocurrió un error + et = Tekkis viga eu = Akats bat gertatu da fa = خطایی رخ داد fi = Tapahtui virhe @@ -19004,6 +19502,7 @@ bg = Популярно ca = Popular de = Beliebt + et = Populaarne fa = مشهور fr = Populaire it = Popolare @@ -19030,6 +19529,7 @@ el = Αρχείο Εξαγωγής es = Exportar como archivo es-MX = Exportar archivo + et = Ekspordi fail eu = Esportatu fitxategi gisa fa = ارسال فایل fi = Viedä tiedosto @@ -19070,6 +19570,7 @@ el = Ρυθμίσεις Λίστας es = Configurar lista es-MX = Ajustes de lista + et = Loetelu seaded eu = Zerrenda konfiguratu fa = تنظیمات لیست fi = Listan asetukset @@ -19110,6 +19611,7 @@ el = Διαγραφή λίστας es = Eliminar lista es-MX = Eliminar lista + et = Kustuta loetelu eu = Zerrenda ezabatu fa = حذف لیست fi = Poista lista @@ -19149,6 +19651,7 @@ el = Κρύψε από τον χάρτη es = Ocultar en el mapa es-MX = Ocultar del mapa + et = Peida kaardil eu = Ezkutatu mapan fa = پنهان کردن از نقشه fi = Piilota kartalta @@ -19189,6 +19692,7 @@ el = Δημόσια πρόσβαση es = Acceso público es-MX = Acceso público + et = Avalik ligipääs eu = Sarbide publikoa fa = دسترسی عمومی fi = Julkinen pääsy @@ -19229,6 +19733,7 @@ el = Περιορισμένη πρόσβαση es = Acceso privado es-MX = Acceso limitado + et = Piiratud ligipääs eu = Sarbide pribatua fa = دسترسی محدود fi = Yksityinen pääsy @@ -19269,6 +19774,7 @@ el = Πληκτρολογήστε μια περιγραφή (κείμενο ή html) es = Agregue una descripción (texto o html) es-MX = Introduzca una descripción (texto o html) + et = Sisesta kirjeldus (tekst või html) eu = Gehitu deskribapen bat (testua edo html) fa = یک توضیح (متن یا html) تایپ نمایید fi = Lisää kuvaus (teksti tai html) @@ -19309,6 +19815,7 @@ el = Προσωπικός es = Privado es-MX = Privado + et = Privaatne eu = Pribatua fa = خصوصی fi = Henkilökohtainen @@ -19349,6 +19856,7 @@ el = Ένα σφάλμα συνέβη στο φόρτωμα των ετικετών, παρακαλώ ξαναπροσπαθήστε es = Durante la carga de las etiquetas, se produjo un error, por favor inténtelo de nuevo es-MX = Ocurrió un error al cargar las etiquetas, por favor intente de nuevo + et = Siltide laadimisel tekkis viga, palun proovi uuesti eu = Errore bat gertatu da etiketak kargatzean. Saiatu berriro fa = هنگام بارگذاری برچسب خطایی رخ داد، لطفا دوباره امتحان کنید fi = Tunnisteiden lataamisen aikana tapahtui virhe, yritä uudelleen @@ -19388,6 +19896,7 @@ el = Κατέβασμα es = Descargar es-MX = Descargar + et = Lae alla eu = Deskargatu fa = دانلود fi = Ladata @@ -19428,6 +19937,7 @@ el = Κάμερες Ταχύτητας es = Cámaras de velocidad es-MX = Cámaras de velocidad + et = Kiiruskaamerad eu = Abiadura kamerak fa = دوربین های سرعت fi = Nopeuskamerat @@ -19468,6 +19978,7 @@ el = Αυτόματο es = Auto es-MX = Automático + et = Automaatne eu = Kotxea fa = خودکار fi = Auto @@ -19508,6 +20019,7 @@ el = Πάντα es = Siempre es-MX = Siempre + et = Alati eu = Beti fa = همیشه fi = Aina @@ -19548,6 +20060,7 @@ el = Ποτέ es = Nunca es-MX = Nunca + et = Mitte kunagi eu = Inoiz ez fa = هرگز fi = Ei koskaan @@ -19588,6 +20101,7 @@ el = Περιγραφή μέρους es = Descripción del lugar es-MX = Descripción de lugares + et = Koha kirjeldus eu = Tokiaren deskribapena fa = توضیحات محل fi = Paikan kuvaus @@ -19629,6 +20143,7 @@ el = Κατέβασμα χαρτών es = Descargar mapas es-MX = Descargar mapas + et = Kaartide allalaadija eu = Deskargatu mapak fa = دانلود کننده نقشه fi = Karttojen lataaminen @@ -19669,6 +20184,7 @@ el = Αυτόματο- Να ειδοποιούμαι για κάμερες αν υπάρχει κίνδυνος να υπερβώ το όριο ταχύτητας\nΠάντα- Πάντα να ειδοποιούμαι για κάμερες\nΠοτέ- Ποτέ να μην ειδοποιούμαι για κάμερες es = Auto - advierte sobre las cámaras de velocidad si existe el riesgo de exceder el límite de velocidad\nSiempre - siempre alerta sobre las cámaras\nNunca - nunca advierte acerca de las cámaras es-MX = Automático - Aviso de las cámaras de velocidad si existe el riesgo de exceder el límite de velocidad\nSiempre - Siempre dar aviso de las cámaras de velocidad\nNunca - Nunca dar aviso de las cámaras de velocidad + et = Automaatne - kiiruskaamerate hoiatused, kui on oht ületada piirkiirust\nAlati - hoiata alati kiiruskaamerate eest\nMitte kunagi - ära kunagi hoiata kiiruskaamerate eest eu = Auto - abiadura-kamerei buruz ohartarazten du abiadura muga gainditzeko arriskua badago\nBeti - beti erne kamerei buruz\nInoiz - inoiz ez abisatu kamerari buruz fa = خودکار- در صورتی که خطر تجاوز از سرعت مجاز وجود داشت، نسبت به دوربین های کنترل سرعت هشدار دهد\nهمیشه-همیشه درباره دوربین های کنترل سرعت هشدار دهد\nهرگز-هرگز درباره دوربین های کنترل سرعت هشدار ندهد fi = Auto - Varoita nopeuskameroista, jos tuntuu siltä, että nopeusrajan ylitys on mahdollista\nAina - Varoita kameroista aina\nEi koskaan - älä koskaan varoita kameroista @@ -19709,6 +20225,7 @@ el = Λειτουργία εξοικονόμησης ενέργειας es = Modo de ahorro de energía es-MX = Modo de ahorro de energía + et = Energiasäästlik režiim eu = Energia aurrezteko modua fa = حالت ذخیره انرژی fi = Virransäästötila @@ -19749,6 +20266,7 @@ el = Εάν η λειτουργία εξοικονόμησης ενέργειας είναι ενεργοποιημένη, η εφαρμογή θα κλείνει τις λειτουργίες που καταναλώνουν ενέργεια ανάλογα με την τρέχουσα φόρτιση του τηλεφώνου es = Si el modo de ahorro de energía está activado, la aplicación desactivará las funciones que consumen energía, según la carga actual del teléfono es-MX = Si el modo de ahorro de energía está activado, la aplicación desactivará las funciones de ahorro de energía, en función de la carga actual del teléfono + et = Kui on valitud automaatrežiim, hakkab rakendus aku tühjendamise funktsioone olenevalt praegusest aku laetuse tasemest keelama eu = Energia aurrezteko modua aktibatuta badago, aplikazioak energia kontsumitzen duten funtzioak itzaliko ditu, telefonoaren uneko kargaren arabera. fa = هنگامی که حالت خودکار انتخاب شده‌باشد، برنامه با توجه میزان شارژ باتری شما، ویژگی‌های تخلیه کننده باتری را غیر فعال می‌کند fi = Kun olet valinnut automaattisen tilan, sovellus alkaa sammuttamaan virtaa vieviä ominaisuuksia riippuen kulloisestakin akun latauksesta @@ -19789,6 +20307,7 @@ el = Ποτέ es = Nunca es-MX = Nunca + et = Mitte kunagi eu = Inoiz ez fa = هرگز fi = Ei koskaan @@ -19829,6 +20348,7 @@ el = Αυτόματα es = Automático es-MX = Automático + et = Automaatne eu = Automatikoa fa = خودکار fi = Automaattinen @@ -19869,6 +20389,7 @@ el = Μέγιστη εξοικονόμηση ενέργειας es = Ahorro de energía máximo es-MX = Máximo ahorro de energía + et = Maksimaalne energiasääst eu = Energia-aurrezpen handiena fa = حداکثر ذخیره انرژی fi = Täysi virransäästö @@ -19909,6 +20430,7 @@ el = Αυτή η λειτουργία είναι ενεργοποιημένη για την καταγραφή ενεργειών για διαγνωστικούς σκοπούς. Αυτό βοηθά την ομάδα να εντοπίζει προβλήματα με την εφαρμογή. Να ενεργοποιείτε τη λειτουργία μόνο κατόπιν αιτήματος της υποστήριξης του Organic Maps. es = Esta opción está habilitada para las acciones de registro con fines de diagnóstico. Esto ayuda a nuestro equipo a identificar problemas con la aplicación. Habilite la opción solo a petición del apoyo de Organic Maps. es-MX = Esta opción está habilitada para las acciones de registro con fines de diagnóstico. Esto ayuda a nuestro equipo a identificar problemas con la aplicación. Habilite la opción solo a petición del apoyo de Organic Maps. + et = See valik lülitab sisse logimise diagnostilistel eesmärkidel. Meie meeskonnale võib olla abi rakendusega seotud probleemide tõrkeotsingul. Lubage see valik ajutiselt, et salvestada ja saata meile oma probleemi üksikasjalikud logid. eu = Aukera hau diagnostiko-helburuetarako erregistro-ekintzetarako gaituta dago. Honek gure taldeari aplikazioarekin arazoak identifikatzen laguntzen dio. Gaitu aukera Organic Maps laguntzari eskatuta soilik. fa = این گزینه ثبت گزارش را برای اهداف تشخیصی فعال می‌کند. برای کارکنان بخش پشتیبانی که مشکلات برنامه را عیب یابی می‌کنند، مفید باشد. این گزینه را تنها در صورت درخواست پشتیبانی Organic Maps فعال کنید. fi = Valinta ottaa käyttöön lokikirjaukset diagnostiikkaa varten. Se voi auttaa tukihenkilöstöämme, kun he korjaavat sovelluksen ongelmia. Ota tämä ominaisuus käyttöön vain, jos Organic Maps:n tuki pyytää. @@ -19949,6 +20471,7 @@ el = Επεξεργάζεται online es = Se edita en línea es-MX = Se edita en línea + et = Online muutmine eu = Sarean editatzen da fa = ویرایش آنلاین fi = Nettimuokkaus @@ -19989,6 +20512,7 @@ el = Ρυθμίσεις παράκαμψης es = Configuración de desvío es-MX = Ajustes de desvío + et = Marsruutimise valikud eu = Birbidali ezarpenak fa = گزینه های رانندگی fi = Kiertotien asetukset @@ -20029,6 +20553,7 @@ el = Αποφυγή σε κάθε διαδρομή es = Evitar en todas las rutas es-MX = Evitar en cada ruta + et = Väldi igal marsruudil eu = Ibilbide guztietan saihestu fa = اجتناب از تمامی مسیرها fi = Vältettävä kaikissa reiteissä @@ -20069,6 +20594,7 @@ el = Δρόμοι με διόδια es = Carreteras de pago es-MX = Carreteras de peaje + et = Tasulised teed eu = Ordainpeko errepideak fa = جاده های دارای عوارض fi = Maksulliset tiet @@ -20109,6 +20635,7 @@ el = Χωματόδρομοι es = Caminos sin pavimento es-MX = Caminos de tierra + et = Katteta teed eu = Asfaltatu gabeko errepideak fa = جاده های آسفالت نشده fi = Päällystämättömät tiet @@ -20149,6 +20676,7 @@ el = Πορθμεία es = Cruces de ferri es-MX = Cruces de ferri + et = Praamiületused eu = Ferry pasabideak fa = گذرگاه های جاده ای fi = Lauttaliikenne @@ -20189,6 +20717,7 @@ el = Αυτοκινητόδρομοι es = Autopistas es-MX = Autopistas + et = Kiirteed eu = Autobideak fa = بزرگراه ها fi = Valtatiet @@ -20229,6 +20758,7 @@ el = Δεν είναι δυνατή η δημιουργία διαδρομής es = No se puede construir una ruta es-MX = No se puede construir una ruta + et = Marsruudi arvutamine ei õnnestu eu = Ezin da ibilbiderik eraiki fa = امکان محاسبه مسیر نیست fi = Reittiä ei voi luoda @@ -20269,6 +20799,7 @@ el = Δυστυχώς, δεν μπορούσαμε να δημιουργήσουμε μια διαδρομή με τις καθορισμένες επιλογές. Αλλάξτε τις ρυθμίσεις και δοκιμάστε πάλι es = Desafortunadamente, no pudimos construir una ruta con las opciones seleccionadas. Cambia la configuración y vuelve a intentarlo es-MX = Desafortunadamente, no pudimos construir una ruta con las opciones seleccionadas. Cambie la configuración y vuelva a intentarlo + et = Kahjuks ei leidnud me marsruuti tõenäoliselt teie valitud võimaluste tõttu. Muutke seadeid ja proovige uuesti. eu = Zoritxarrez, ezin izan dugu aukeratutako aukerekin ibilbiderik egin. Aldatu ezarpenak eta saiatu berriro fa = متأسفانه، احتمالاً به دلیل گزینه های تعریف شده شما، مسیری پیدا نشد. لطفاً تنظیمات را تغییر داده و مجدد تلاش کنید fi = Valitettavasti emme voineet luoda reittiä valituilla vaihtoehdoilla. Vaihda asetuksia ja yritä uudelleen @@ -20309,6 +20840,7 @@ el = Ρύθμιση της διαδρομής παράκαμψης es = Personaliza la ruta de desvío es-MX = Configurar rutas de desvío + et = Määra välditavad teed eu = Pertsonalizatu saihesbidearen ibilbidea fa = جاده های لغو شده را تعریف نمایید fi = Muodosta kiertotietä @@ -20349,6 +20881,7 @@ el = Ρυθμίσεις δραστηριοποιούνται es = Configuración de desvío activada es-MX = Ajustes de desvío habilitados + et = Marsruutimise valikud lubatud eu = Birbidaltze ezarpena aktibatuta dago fa = گزینه های مسیریابی فعال شد fi = Kiertotien asetukset on päällä @@ -20388,6 +20921,7 @@ el = Δρόμος με διόδια es = Carretera con pago de peaje es-MX = Carretera de peaje + et = Tasuline tee eu = Bidesaria fa = جاده دارای عوارض fi = Maksullinen tie @@ -20427,6 +20961,7 @@ el = Χωματόδρομος es = Camino sin pavimento es-MX = Camino de tierra + et = Katteta tee eu = Asfaltatu gabeko errepidea fa = جاده آسفالت نشده fi = Päällystämätön tie @@ -20466,6 +21001,7 @@ el = Πορθμείο es = Cruce de ferri es-MX = Cruce de ferri + et = Praamiületus eu = Ferry zeharkaldia fa = گذرگاه جاده ای fi = Lauttaliikenne @@ -20506,6 +21042,7 @@ el = Αποφυγή των δρόμων με διόδια es = Evitar las carreteras con pago de peaje es-MX = Evitar las carreteras de peaje + et = Väldi tasulisi teid eu = Saihestu ordainpeko errepideak fa = اجتناب از جاده های دارای عوارض fi = Vältä maksullisia teitä @@ -20546,6 +21083,7 @@ el = Αποφυγή των χωματόδρομων es = Evitar los caminos sin pavimento es-MX = Evitar los caminos de tierra + et = Väldi katteta teid eu = Saihestu asfaltatu gabeko errepideak fa = اجتناب از جاده های آسفالت نشده fi = Vältä maanteitä @@ -20586,6 +21124,7 @@ el = Αποφυγή των πορθμείων es = Evitar ferries es-MX = Evitar los trasbordadores de ferri + et = Väldi praamiületusi eu = Ferryak saihestu fa = اجتناب از گذرگاه های کشتی fi = Vältä lautan käyttöä @@ -20625,6 +21164,7 @@ el = Πάμε es = Vamos es-MX = Vamos + et = Liigume eu = Zoaz fa = برویم fi = Mennään @@ -20664,6 +21204,7 @@ el = Προορισμός es = Objetivo es-MX = Objetivo + et = Sihtkoht eu = Helburua fa = مقصد fi = Kohde @@ -20703,6 +21244,7 @@ el = Επανατοποθέτηση es = Centrar es-MX = Centrar + et = Keskkoht eu = Zentroa fa = نشان دادن مجدد در مرکز fi = Kohdista @@ -20742,6 +21284,7 @@ el = Αποτελέσματα αναζήτησης es = Resultados de búsqueda es-MX = Resultados de la búsqueda + et = Otsingutulemused eu = Bilaketa-emaitzak fa = نتایج جستجو fi = Hakutulokset @@ -20781,6 +21324,7 @@ el = Μετά es = Después es-MX = Después + et = Seejärel eu = Gero fa = سپس fi = Sitten @@ -20820,6 +21364,7 @@ el = Θα θέλατε να τροποποιήσετε τη διαδρομή; es = ¿Quieres reconstruir la ruta? es-MX = ¿Quiere reconstruir la ruta? + et = Kas soovid marsruudi uuesti luua? eu = Ibilbidea berreraiki nahi duzu? fa = آیا می خواهید مسیر را دوباره ایجاد کنید? fi = Haluatko luoda reitin uudelleen? @@ -20861,6 +21406,7 @@ el = Ναι es = Sí es-MX = Sí + et = Jah eu = Bai fa = بله fi = Kyllä @@ -20902,6 +21448,7 @@ el = Όχι es = No es-MX = No + et = Ei eu = Ez fa = خیر fi = Ei @@ -20935,6 +21482,7 @@ ref = yes be = Ёсць ca = sí + et = jah fa = بلی he = כן nl = ja @@ -20947,6 +21495,7 @@ ref = no be = Няма ca = no + et = ei nl = nee tr = Yok @@ -20962,6 +21511,7 @@ el = Έχετε φτάσει! es = ¡Llegaste! es-MX = ¡Ya llegó! + et = Oled kohal! eu = Iritsi zara! fa = شما به مقصد رسیدید! fi = Olet saapunut! @@ -21001,6 +21551,7 @@ el = Το πληκτρολόγιο δεν είναι διαθέσιμο κατά τη διάρκεια οδήγησης es = Teclado no disponible durante el movimiento es-MX = El teclado no está disponible durante el movimiento + et = Klaviatuur ei ole sõidu ajal kasutatav eu = Teklatua ez dago erabilgarri mugimenduan zehar fa = صفحه کلید در هنگام رانندگی در دسترس نیست fi = Näppäimistö ei ole käytettävissä ajon aikana @@ -21040,6 +21591,7 @@ el = Δεν είναι δυνατή η δημιουργία διαδρομής από την τρέχουσα τοποθεσία σας es = No se puede construir la ruta desde la ubicación actual es-MX = No se puede construir una ruta desde la ubicación actual + et = Sinu praegusest asukohast ei õnnestu marsruuti luua eu = Ezin da ibilbidea eraiki uneko kokapenetik fa = امکان ایجاد مسیر از مکان فعلی شما نیست fi = Reittiä ei ole mahdollista luoda nykyisestä sijainnista @@ -21079,6 +21631,7 @@ el = Δεν είναι δυνατή η δημιουργία διαδρομής μέχρι τον προορισμό σας. Επιλέξτε ένα άλλο σημείο es = No se puede construir la ruta al punto final. Elige otra es-MX = No se puede construir una ruta hasta el punto final. Seleccione otra + et = Ei õnnestu luua marsruuti Sinu asukohta. Palun vali teine punkt eu = Ezin da sortu amaiera punturako ibilbidea. aukeratu beste bat fa = امکان ایجاد مسیر به مقصد شما نیست. لطفاً نقطه دیگری را انتخاب کنید fi = Reittiä ei ole mahdollista luoda loppupisteeseen. Valitse toinen @@ -21118,6 +21671,7 @@ el = Δεν υπάρχει σήμα GPS. Μετακινήστε σε μια ανοικτή τοποθεσία es = No hay señal GPS. Ve a una zona abierta es-MX = No hay señal de GPS. Vaya a una zona abierta + et = GPS signaal puudub. Palun liigu avaramasse kohta eu = Ez dago GPS seinalerik. Joan eremu ireki batera fa = سیگنال GPS وجود ندارد. لطفاً به فضای باز بروید fi = Ei ole GPS-signaalia. Siirry avaralle alueelle @@ -21157,6 +21711,7 @@ el = Δεν είναι δυνατή η δημιουργία διαδρομής. Επιλέξτε άλλα σημεία διαδρομής es = No se puede construir una ruta. Elige otros puntos de ruta es-MX = No se puede construir una ruta. Seleccione otros puntos de ruta + et = Marsruudi loomine ei õnnestu. Palun määra muud marsruudipunktid eu = Ezin da ibilbiderik eraiki. Aukeratu beste bide-puntu batzuk fa = امکان ایجاد مسیر نیست. لطفاً نقاط مسیر دیگری را مشخص کنید fi = Reittiä ei ole mahdollista luoda. Valitse muut reittipisteet @@ -21196,6 +21751,7 @@ el = Για να χτίσετε διαδρομή, κατεβάστε χάρτες που λείπουν στη συσκευή es = Para construir una ruta, descarga los mapas ausentes en tu dispositivo es-MX = Al construir ruta, descargue los mapas ausentes en su dispositivo + et = Marsruudi loomiseks lae puuduvad kaardid alla oma seadmesse eu = Ibilbide bat eraikitzeko, deskargatu falta diren mapak zure gailura fa = برای ایجاد مسیر، نقشه های ناقص را روی دستگاه خود را دانلود کنید fi = Luodaksesi reitin lataa puuttuvat kartat @@ -21235,6 +21791,7 @@ el = Παρουσιάστηκε σφάλμα. Κάντε επανεκκίνηση της εφαρμογής es = Ocurrió un error. Reinicia la aplicación es-MX = Ocurrió un error. Reinicie la aplicación + et = Tekkis viga. Palun taaskäivita rakendus eu = Akats bat gertatu da. Berrabiarazi aplikazioa fa = خطایی رخ داد. لطفاً برنامه را دوباره اجرا کنید fi = On tapahtunut virhe. Käynnistä sovellus uudelleen @@ -21274,6 +21831,7 @@ el = Η διαδρομή θα ξαναδημιουργηθεί από την τρέχουσα τοποθεσία σας es = La ruta se reconstruirá desde tu ubicación actual es-MX = La ruta se reconstruirá desde su ubicación actual + et = Marsruut luuakse uuesti sinu hetkeasukohast eu = Ibilbidea zure uneko kokapenetik berregin egingo da fa = مسیر از مکان فعلی شما بازسازی خواهد شد fi = Reitti luodaan nykyisestä sijainnista @@ -21313,6 +21871,7 @@ el = Η διαδρομή θα αντικατασταθεί με τη διαδρομή με αυτοκίνητο es = La ruta se cambiará a coche es-MX = La ruta se cambiará a en auto + et = See marsruut teisendatakse autoga läbitavaks eu = Ibilbidea autoz aldatuko da fa = مسیر به مسیر خودرویی تغییر خواهد کرد fi = Reitti muutetaan autoilijan reitiksi @@ -21353,6 +21912,7 @@ el = Καλώς es = Ok es-MX = Ok + et = Ok eu = Ok fa = موافقت کردن fi = Ok @@ -21392,6 +21952,7 @@ el = Χ/χωματόδρ. es = Sin carretera de tierra es-MX = Sin de grava + et = Väldi pinnasteid eu = Lurrezko biderik ez fa = بی جاده خاکی fi = Päällyste @@ -21431,6 +21992,7 @@ el = Χ/χωματόδρομους es = Evitar sin pavimentar es-MX = Sin de grava + et = Väldi katteta teid eu = Saihestu asfaltatu gabekoa fa = پرهیز از خاکی fi = Vain päällyste @@ -21470,6 +22032,7 @@ el = Χ/πορθμεία es = Sin ferri es-MX = Sin ferri + et = Väldi praame eu = Ferryrik ez fa = بدون بزرگراه fi = Ei lauttoja @@ -21509,6 +22072,7 @@ el = Χωρίς πορθμεία es = Sin ferri es-MX = Sin ferri + et = Väldi praame eu = Ferryrik ez fa = پرهیز از اتوبان fi = Ei lauttoja @@ -21548,6 +22112,7 @@ el = Χωρίς διόδια es = Sin peaje es-MX = Sin peaje + et = Väldi tasulisi teid eu = Bidesaria ez fa = بدون عوارضی fi = Ei maksua @@ -21587,6 +22152,7 @@ el = Χωρίς διόδια es = Sin peaje es-MX = Sin peaje + et = Väldi tasulisi teid eu = Bidesaria ez fa = اجتناب از عوارض fi = Ei maksua @@ -21626,6 +22192,7 @@ el = Κάμερες es = Cám.velocidad. es-MX = Cám.velocidad. + et = Kiiruskaamerad eu = Abiadura kamera. fa = دوربین سرعت fi = Nopeuskamera @@ -21665,6 +22232,7 @@ el = Πληροφ. γιαόρια es = Alerta velocidad. es-MX = Alerta velocidad. + et = Kiiruse hoiatused eu = Abiadura alerta. fa = هشدارهای سرعت fi = Nopeuskamerat @@ -21704,6 +22272,7 @@ el = Κάντε λήψη χαρτών στην εφαρμογή Organic Maps στη συσκευή σας es = Descargue los mapas en la aplicación Organic Maps en su dispositivo es-MX = Descargue mapas en la aplicación Organic Maps en su dispositivo + et = Palun lae alla kaardid oma seadme Organic Maps rakenduses eu = Deskargatu mapak zure gailuko Organic Maps aplikazioan fa = لطفا نقشه ها را در نرم افزار Organic Maps روی دستگاه خود دانلود کنید fi = Lataa kartat laitteesi Organic Maps-sovelluksessa @@ -21743,6 +22312,7 @@ el = %s έξοδος es = %s desviación es-MX = %s desviación + et = %s väljumine eu = %s desbideratzea fa = خروجی %s fi = Poistumisramppi %s @@ -21784,6 +22354,7 @@ el = Ταξινόμηση es = Ordenar… es-MX = Ordenar… + et = Sorteeri… eu = Agindu… fa = مرتب سازی… fi = Järjestä… @@ -21825,6 +22396,7 @@ el = Ταξινόμηση σελιδοδ/τών es = Ordenar marcadores es-MX = Ordenar marcadores + et = Sorteeri järjehoidjad eu = Ordenatu laster-markak fa = مرتب سازی نشانهها fi = Järjestä kirjanmerkit @@ -21865,6 +22437,7 @@ el = Ταξινόμηση κατά προεπιλογή es = Ordenar por defecto es-MX = Ordenar por defecto + et = Sorteeri vaikimisi eu = Ordenatu lehenespenez fa = مرتب سازی بر اساس پیش فرض fi = Järjestä: oletus @@ -21904,6 +22477,7 @@ el = Ταξινόμηση ανά τύπο es = Ordenar por tipo es-MX = Ordenar por tipo + et = Sorteeri liigiti eu = Motaren arabera ordenatu fa = مرتب سازی بر اساس نوع fi = Järjestä: tyyppi @@ -21943,6 +22517,7 @@ el = Ταξινόμηση κατά απόσταση es = Ordenar por distancia es-MX = Ordenar por distancia + et = Sorteeri kauguse järgi eu = Ordenatu distantziaren arabera fa = مرتب سازی بر اساس فاصله fi = Järjestä: etäisyys @@ -21982,6 +22557,7 @@ el = Ταξινόμηση κατά ημερομηνία es = Ordenar por fecha es-MX = Ordenar por fecha + et = Sorteeri kuupäeva järgi eu = Dataren arabera ordenatzeko fa = مرتب سازی بر اساس تاریخ fi = Järjestä: päivämäärä @@ -22023,6 +22599,7 @@ el = Προεπιλογή es = Por defecto es-MX = Por defecto + et = Vaikimisi eu = Lehenetsia fa = به صورت پیش فرض fi = Oletus @@ -22064,6 +22641,7 @@ el = Ανά τύπο es = Por tipo es-MX = Por tipo + et = Liigiti eu = Motaren arabera fa = بر اساس تاریخ fi = Tyyppi @@ -22105,6 +22683,7 @@ el = Κατά απόσταση es = Por distancia es-MX = Por distancia + et = Kauguse järgi eu = Distantziaz fa = بر اساس فاصله fi = Etäisyys @@ -22146,6 +22725,7 @@ el = Κατά ημερομηνία es = Por fecha es-MX = Por fecha + et = Kuupäeva järgi eu = Dataren arabera fa = بر اساس تاریخ fi = Päivämäärä @@ -22185,6 +22765,7 @@ el = Μια βδομάδα πριν es = Hace una semana es-MX = Hace una semana + et = Nädal tagasi eu = Duela aste bat fa = یک هفته قبل fi = Viikko sitten @@ -22224,6 +22805,7 @@ el = Ένας μήνας πριν es = Hace un mes es-MX = Hace un mes + et = Kuu tagasi eu = Duela hilabete bat fa = یک ماه قبل fi = Kuukausi sitten @@ -22263,6 +22845,7 @@ el = Περισσότερο από έναν μήνα πριν es = Hace más de un mes es-MX = Hace más de un mes + et = Üle kuu tagasi eu = Duela hilabete baino gehiago fa = بیش از یک ماه قبل fi = Yli kuukausi sitten @@ -22302,6 +22885,7 @@ el = Περισσότερο από ένα έτος πριν es = Hace más de un año es-MX = Hace más de un año + et = Üle aasta tagasi eu = Duela urtebete baino gehiago fa = بیش از یک سال قبل fi = Yli vuosi sitten @@ -22341,6 +22925,7 @@ el = Δίπλα μου es = Cerca de mí es-MX = Cerca a mí + et = Minu lähedal eu = Nigandik gertu fa = نزدیک من fi = Lähelläni @@ -22380,6 +22965,7 @@ el = Άλλα es = Otros es-MX = Otros + et = Muud eu = Beste batzuk fa = دیگران fi = Muut @@ -22421,6 +23007,7 @@ el = Εστίαση es = Comida es-MX = Comida + et = Toit eu = Janari fa = غذا fi = Ruoka @@ -22460,6 +23047,7 @@ el = Αξιοθέατα es = Sitios de interés es-MX = Sitios de interés + et = Vaatamisväärsused eu = Toki interesgarriak fa = مناظر fi = Nähtävyydet @@ -22499,6 +23087,7 @@ el = Μουσεία es = Museos es-MX = Museos + et = Muuseumid eu = Museoak fa = موزهها fi = Museot @@ -22538,6 +23127,7 @@ el = Πάρκα es = Parques es-MX = Parques + et = Pargid eu = Parkeak fa = پارکها fi = Puistot @@ -22577,6 +23167,7 @@ el = Κολύμβηση es = Natación es-MX = Natación + et = Ujumine eu = Igeriketa fa = شنا fi = Uiminen @@ -22616,6 +23207,7 @@ el = Βουνά es = Montañas es-MX = Montañas + et = Mäed eu = Mendiak fa = کوهها fi = Vuoret @@ -22655,6 +23247,7 @@ el = Ζώα es = Animales es-MX = Animales + et = Loomad eu = Animaliak fa = حیوانات fi = Eläimet @@ -22694,6 +23287,7 @@ el = Διαμονή es = Hoteles es-MX = Hoteles + et = Hotellid eu = Hotelak fa = هتلها fi = Hotellit @@ -22733,6 +23327,7 @@ el = Κτήρια es = Edificios es-MX = Edificios + et = Hooned eu = Eraikinak fa = ساختمانها fi = Rakennukset @@ -22772,6 +23367,7 @@ el = Χρήματα es = Dinero es-MX = Dinero + et = Raha eu = Dirua fa = پول fi = Raha @@ -22811,6 +23407,7 @@ el = Καταστήματα es = Tiendas es-MX = Comercio + et = Poed eu = Dendak fa = مراکز خرید fi = Kaupat @@ -22850,6 +23447,7 @@ el = Χώροι στάθμευσης es = Estacionamiento es-MX = Aparcamientos + et = Parkimine eu = Aparkaleku fa = پارکینگها fi = Pysäköinti @@ -22889,6 +23487,7 @@ el = Πρατήρια βενζίνης es = Gasolinera es-MX = Gasolinería + et = Tanklad eu = Erregai-geltokia fa = پمپ بنزین fi = Huoltoasemat @@ -22928,6 +23527,7 @@ el = Γιατρική βοήθεια es = Medicina es-MX = Medicina + et = Meditsiin eu = Medikuntza fa = پزشکی fi = Apteekki @@ -22968,6 +23568,7 @@ el = Αναζήτηση στη λίστα es = Buscar en la lista es-MX = Buscar en la lista + et = Otsi loetelus eu = Bilatu zerrendan fa = جستجو در لیست fi = Etsi listalta @@ -23007,6 +23608,7 @@ el = Άγιοι τόποι es = Lugares sagrados es-MX = Sitios religiosos + et = Religioossed kohad eu = Erlijio-guneak fa = اماکن مقدس fi = Pyhät paikat @@ -23047,6 +23649,7 @@ el = Επιλογή λίστας es = Seleccionar lista es-MX = Seleccionar lista + et = Vali loetelu eu = Hautatu zerrenda fa = انتخاب فهرست fi = Valitse luettelo @@ -23088,6 +23691,7 @@ el = Η πλοήγηση στο μετρό γι' αυτή την περιοχή δεν είναι ακόμα διαθέσιμη es = Navegación en Metro aún no disponible en esta región es-MX = Navegación por metro aún no disponible en esta región + et = Metroo navigeerimine selles piirkonnas pole veel saadaval eu = Metro-nabigazioa oraindik ez dago erabilgarri eskualde honetan fa = راهنمای مترو در این منطقه هنوز دردسترس نیست fi = Metron reittiohjeet eivät ole vielä saatavilla tällä alueella @@ -23129,6 +23733,7 @@ el = Η διαδρομή του μετρό δεν βρέθηκε es = Ruta de metro no encontrada es-MX = Ruta de metro no encontrada + et = Metroo marsruuti ei leidu eu = Ez da aurkitu metroko ibilbidea fa = مسیر مترو یافت نشد fi = Metroreittiä ei löytynyt @@ -23170,6 +23775,7 @@ el = Επιλέξτε το σημείο έναρξης ή τέλους διαδρομής πιο κοντά στο σταθμό του μετρό es = Elige el punto de inicio o fin de ruta más cercano al metro es-MX = Elija el punto de inicio o fin de ruta más cercano al metro + et = Palun vali metroojaamale lähemal asuv algus- või lõpp-punkt eu = Aukeratu metrotik hurbilen dagoen ibilbidearen hasiera edo amaiera puntua fa = لطفا نقطه آغاز و پایان نزدیک تری به ایستگاه مترو انتخاب کنید fi = Valitse reitin aloitus- tai loppupiste lähemmäksi metroasemaa @@ -23210,6 +23816,7 @@ el = Υψόμετρα es = Alturas es-MX = Alturas + et = Maastik eu = Altuerak fa = ایزومپ fi = Maasto @@ -23250,6 +23857,7 @@ el = Για να χρησιμοποιήσετε τοπογραφικά στρώματα, ενημερώστε ή κατεβάστε τον χάρτη της επιθυμητής περιοχής es = Para usar la altitud de relieve, actualiza o descarga el mapa del área deseada es-MX = Para usar la altitud de relieve, actualice o descargue el mapa del área deseada + et = Topograafilise kihi aktiveerimiseks ja kasutamiseks värskenda või lae alla piirkonna kaart eu = Erliebe-altuera erabiltzeko, eguneratu edo deskargatu nahi duzun eremuko mapa fa = برای فعال سازی و استفاده از لایه توپوگرافی نقشه منطقه را به روزرسانی یا دانلود کنید fi = Päivitä tai lataa haluamasi alueen kartta, voidaksesi käyttää korkeuskäyriä @@ -23290,6 +23898,7 @@ el = Τα τοπογραφικά στρώματα δεν είναι ακόμα διαθέσιμα σε αυτή την περιοχή es = La altitud de relieve aún no está disponible en esta región es-MX = La altitud de relieve no está aún disponible en esta región + et = Topograafiline kiht ei ole selles piirkonnas veel saadaval eu = Erliebearen altitudea oraindik ez dago eskuragarri eskualde honetan fa = لایه توپوگرافی هنوز برای این منطقه در دسترس نیست fi = Korkeuskäyrät eivät ole vielä saatavilla tällä alueella @@ -23330,6 +23939,7 @@ el = Επίπεδο δυσκολίας es = Nivel de dificultad es-MX = Nivel de dificultad + et = Raskusaste eu = Zailtasun maila fa = سطح دشواری fi = Vaikeustaso @@ -23369,6 +23979,7 @@ el = Εύκολο es = Fácil es-MX = Fácil + et = Lihtne eu = Erraza fa = آسان fi = Helppo @@ -23408,6 +24019,7 @@ el = Μέτριο es = Moderado es-MX = Moderado + et = Keskmine eu = Moderatua fa = متوسط fi = Kohtuullinen @@ -23447,6 +24059,7 @@ el = Δύσκολο es = Difícil es-MX = Difícil + et = Raske eu = Gogorra fa = دشوار fi = Vaikea @@ -23487,6 +24100,7 @@ el = Άνοδος es = Ascenso es-MX = Ascenso + et = Tõus eu = Igoera fa = بالا رفتن fi = Nousua @@ -23527,6 +24141,7 @@ el = Κάθοδος es = Descenso es-MX = Descenso + et = Langus eu = Gainbehera fa = پایین آمدن fi = Laskua @@ -23567,6 +24182,7 @@ el = Ελ. υψόμετρο es = Altura mínima es-MX = Altura mínima + et = Min. kõrgus eu = Gutxieneko altuera fa = کمینه ارتفاع fi = Min. korkeus @@ -23607,6 +24223,7 @@ el = Μέγ. υψόμετρο es = Altura máxima es-MX = Altura máxima + et = Maks. kõrgus eu = Gehieneko altuera fa = بیشینه ارتفاع fi = Maks. korkeus @@ -23647,6 +24264,7 @@ el = Δυσκολία es = Dificultad es-MX = Dificultad + et = Raskusaste eu = Zailtasuna fa = دشواری fi = Vaikeus @@ -23687,6 +24305,7 @@ el = Απόστ.: es = Distancia: es-MX = Distancia: + et = Kaugus: eu = Distantzia: fa = مسافت fi = Etäisyys: @@ -23727,6 +24346,7 @@ el = Διαρκ: es = Lapso: es-MX = Lapso: + et = Aeg: eu = Hutsunea: fa = زمان: fi = Aika: @@ -23767,6 +24387,7 @@ el = Μεγεθύνετε για να δείτε περιγράμματα es = Amplía el mapa para ver las isolíneas es-MX = Amplíe el mapa para ver las isolíneas + et = Isojoonte sirvimiseks suurenda kaarti eu = Handitu mapa isolineak ikusteko fa = برای بررسی خطوط تراز زوم کنید fi = Suurenna kartta nähdäksesi korkeuskäyrät @@ -23806,6 +24427,7 @@ el = Ενημέρωση es = Actualización es-MX = Actualización + et = Värskendamine eu = Eguneratu fa = در حال بروزرسانی fi = Päivitys @@ -23845,6 +24467,7 @@ el = Φόρτωση es = Cargando es-MX = Cargando + et = Allalaadimine eu = Kargatzen fa = در حال دانلود fi = Lataus @@ -23881,6 +24504,7 @@ ca = Baixa el mapa mundial de = Herunterladen der Weltkarte es = Descarga mapa mundial + et = Maailma kaardi allalaadimine eu = Deskargatu munduko mapa fi = Lataa maailmankartta fr = Télécharger la carte du monde @@ -23901,6 +24525,7 @@ ar = تعذر إنشاء المجلد ونقل الملفات على الذاكرة الداخلية للجهاز أو على بطاقة SD ca = No s'ha pogut crear la carpeta ni moure els fitxers a la memòria interna de l'aparell o targeta SD de = Ordner kann nicht erstellt und Dateien können nicht auf den Gerätespeicher oder die SD-Karte verschoben werden + et = Seadme sisemällu või mälukaardile ei saa kausta luua ja faile teisaldada fr = Impossible de créer un dossier et de déplacer des fichiers sur la mémoire interne de l'appareil ou sur la carte SD mr = उपकरणाच्या अंतर्गत मेमरी किंवा SD-card वर फोल्डर तयार करण्यात आणि फायली हलविण्यात अक्षम nl = Het lukt niet om een map aan te maken en bestanden naar het interne geheugen of een SD-kaart te verplaatsen @@ -23916,6 +24541,7 @@ ar = حدث خطأ في التخزين ca = Error de disc de = Speicherfehler + et = Salvestusseadme viga mr = डिस्क त्रुटी nl = Schijffout pl = Błąd pamięci @@ -23933,6 +24559,7 @@ ca = Error de connexió de = Verbindungsfehler es = Problema de conexión + et = Ühenduse viga eu = Konexio arazoa fi = Yhteysvirhe fr = Erreur de connexion @@ -23955,6 +24582,7 @@ ca = Desconnecteu el cable USB de = USB-Kabel trennen es = Desconecte el cable USB + et = Ühenda USB kaabel lahti eu = Deskonektatu USB kablea fi = Irrota USB-kaapeli fr = Déconnectez le câble USB @@ -23980,6 +24608,7 @@ de = Bildschirm schlafen lassen el = Αφήστε την οθόνη να κοιμηθεί es = Permitir que la pantalla duerma + et = Luba ekraanisäästja eu = Utzi pantailari lo egiten fa = اجازه دهید صفحه نمایش بخوابد fi = Salli näytön lepotila @@ -24020,6 +24649,7 @@ de = Wenn diese Option aktiviert ist, kann der Bildschirm nach einer gewissen Zeit der Inaktivität in den Ruhezustand versetzt werden. el = Όταν είναι ενεργοποιημένη, η οθόνη θα αφεθεί να κοιμηθεί μετά από περίοδο αδράνειας. es = Cuando está habilitado, la pantalla podrá dormir después de un período de inactividad. + et = Kui see on lubatud, lülitub ekraan pärast teatud tegevusetusperioodi magama. eu = Gaituta dagoenean, pantailak lo egin ahal izango du jarduerarik gabe egon ondoren. fa = درصورت فعال بودن ، بعد از یک دوره عدم فعالیت به صفحه اجازه خواب داده می شود. fi = Kun tämä asetus on käytössä, näyttö menee lepotilaan käyttämättömyyden jälkeen. @@ -24055,6 +24685,7 @@ be = Паказваць на экране блакіроўкі ca = Mostra en la pantalla de bloqueig de = Auf dem Sperrbildschirm anzeigen + et = Kuva lukustusekraanil fr = Afficher sur l'écran de verrouillage hu = Megjelenítés a zárolt képernyőn it = Mostra sulla schermata di blocco @@ -24075,6 +24706,7 @@ be = Калі ўключана, вам не трэба разблакіраваць прыладу кожны раз падчас працы дадатку. ca = Si està activa, no cal desblocar l'aparell cada vegada mentre l'aplicació està funcionant. de = Wenn aktiviert, muss das Gerät nicht jedes Mal entsperrt werden, wenn die App ausgeführt wird. + et = Kui lubatud, ei pea te seadet iga kord avama, kui rakendus töötab. fr = Lorsqu'il est activé, vous n'avez pas besoin de déverrouiller votre appareil à chaque fois quand l'application fonctionne. hu = Ha engedélyezve van, nem kell minden alkalommal feloldanod a telefonod, amíg az alkalmazás fut. it = Quando è abilitata, non è necessario sbloccare il dispositivo ogni volta mentre l'app è in esecuzione. @@ -24101,6 +24733,7 @@ el = Θα πρέπει να ενημερώστε τους χάρτες που έχετε κατεβάσει es = Actualice sus mapas descargados es-MX = Debe actualizar sus mapas descargados + et = Värskenda oma alla laetud kaarte eu = Eguneratu deskargatutako mapak fa = نقشه های دانلود شده خود را به روز کنید fi = Päivitä ladatut kartat @@ -24145,6 +24778,7 @@ el = Η ενημέρωση των χαρτών διατηρεί τις πληροφορίες των στοιχείων επικαιροποιημένες es = La actualización de mapas mantiene actualizada la información sobre objetos es-MX = Actualizar los mapas mantiene actualizada también la información acerca de los objetos + et = Kaartide värskendamine hoiab objektide info ajakohasena eu = Maparen freskatzeak objektuen informazioa eguneratuta mantentzen du fa = به روز رسانی نقشه ها اطلاعات مربوط به اشیا را به روز نگه می دارد fi = Karttojen päivittäminen pitää kohteita koskevat tiedot ajan tasalla @@ -24189,6 +24823,7 @@ el = Ενημέρωση (%s) es = Actualizar (%s) es-MX = Actualizar (%s) + et = Värskenda (%s) eu = Eguneratu (%s) fa = بروزرسانی (%s) fi = Päivitä (%s) @@ -24233,6 +24868,7 @@ el = Χειροκίνητη ενημέρωση αργότερα es = Actualizar más tarde de forma manual es-MX = Actualizar después manualmente + et = Värskenda hiljem käsitsi eu = Eguneratu geroago eskuz fa = بعدا به صورت دستی به روزرسانی کنید fi = Päivitä manuaalisesti myöhemmin @@ -24272,6 +24908,7 @@ ca = Esborra la traça de = Strecke löschen es = Borrar ruta + et = Kustuta rada eu = Ibilbide garbia fi = Poista reitti fr = Supprimer la route @@ -24295,6 +24932,7 @@ de = Name der Strecke es = Nombre de la ruta eu = Bide-izena + et = Raja nimi fi = Reitin nimi fr = Nom de la route it = Nome percorso @@ -24316,6 +24954,7 @@ ca = Mou de = verschieben es = Mover + et = Teisalda eu = Mugitu fi = Siirrä fr = Déplacer @@ -24342,6 +24981,7 @@ de = Strecke el = Τροχιά es = Ruta + et = Rada eu = Ibilbidea fa = مسیر fi = Reitti @@ -24382,6 +25022,7 @@ de = Kartendaten von OpenStreetMap el = Δεδομένα χάρτη από το OpenStreetMap es = Datos de mapas de OpenStreetMap + et = OpenStreetMap kaardiandmed eu = Maparen datuak OpenStreetMap-en fa = OpenStreetMap ﺯﺍ ﻪﺸﻘﻧ ﯼﺎﻫ ﻩﺩﺍﺩ fi = OpenStreetMapin karttatiedot diff --git a/data/strings/types_strings.txt b/data/strings/types_strings.txt index b57ffe1d36..c5816232b6 100644 --- a/data/strings/types_strings.txt +++ b/data/strings/types_strings.txt @@ -5,6 +5,7 @@ de = Seilbahn el = Τελεφερίκ es = Transporte aéreo + et = Õhutee eu = Aire Garraioa fi = Köysirata fr = Transport par câble aérien @@ -27,6 +28,7 @@ de = Pendelbahn el = Τελεφερίκ es = Teleférico + et = Tramm eu = Teleferikoa fi = Kabiinihissi fr = Téléphérique @@ -49,6 +51,7 @@ de = Sessellift el = Τελεφερίκ es = Telesilla + et = Tooltõstuk eu = Teleaulkia fi = Tuolihissi fr = Télésiège @@ -70,6 +73,7 @@ de = Schlepplift el = Τελεφερίκ es = Telesquí + et = Lohistitõstuk eu = Eski-igogailua fi = Kapulahissi fr = Téléski @@ -92,6 +96,7 @@ de = Gondelbahn el = Τελεφερίκ es = Telecabina + et = Gondel eu = Telekondola fi = Gondolihissi fr = Télécabine @@ -114,6 +119,7 @@ de = Kombibahn el = Τελεφερίκ es = Telecabina/telesilla + et = Segatõstuk eu = Telekondola/teleaulkia fi = Köysirata it = Impianto misto @@ -138,6 +144,7 @@ de = Liftstation el = Σταθμός τελεφερίκ es = Estación de teleférico + et = Õhutee jaam eu = Teleferiko geltokia fi = Köysirata-asema fr = Remontées mécaniques @@ -167,6 +174,7 @@ en = Airspace Infrastructure de = Luftverkehr es = Infraestructura aérea + et = Õhuruumi infrastruktuur eu = Aire azpiegitura ja = 空路 mr = हवाई आधार संरचना @@ -187,6 +195,7 @@ de = Flugplatz el = Αεροδρόμιο es = Aeropuerto + et = Lennujaam eu = Aireportua fa = فرودگاه fi = Lentokenttä @@ -221,6 +230,7 @@ de = Flughafen el = Αεροδρόμιο es = Aeropuerto + et = Rahvusvaheline lennujaam eu = Aireportua fa = فرودگاه fi = Lentokenttä @@ -251,6 +261,7 @@ en = Apron de = Vorfeld es = Plataforma + et = Platvorm eu = Plataforma fr = Aire de stationnement pour aéronefs ja = エプロン @@ -267,6 +278,7 @@ [type.aeroway.gate] en = Gate es = Puerta de embarque + et = Värav eu = Ontziratzeko atea fi = Portti fr = Porte d'embarquement @@ -288,6 +300,7 @@ de = Hubschrauberlandeplatz el = Ελικοδρόμιο es = Helipuerto + et = Heliväljak eu = Heliportua fa = پد فرود بالگرد fi = Helikopterialusta @@ -317,6 +330,7 @@ en = Runway de = Start-/Landebahn es = Pista de despegue + et = Lennurada eu = Pista fi = Kiitorata fr = Piste d'aviation @@ -337,6 +351,7 @@ en = Taxiway de = Rollweg es = Pista de rodaje + et = Ruleerimistee eu = Taxiway fr = Taxiway it = Pista di rullaggio @@ -355,6 +370,7 @@ en = Terminal de = Terminal es = Terminal + et = Terminal eu = Terminala fi = Terminaali it = Terminal @@ -377,6 +393,7 @@ de = Infrastrukturobjekte el = Εγκαταστάσεις υποδομής es = Infraestructura + et = Infrastruktuur es-MX = Infraestructura eu = Azpiegiturak fa = زیر ساخت @@ -414,6 +431,7 @@ el = Κέντρο καλών τεχνών es = Centro de arte es-MX = Centro de artes + et = Kunstikeskus eu = Arte galeria fa = مرکز هنری fi = Taidekeskus @@ -448,6 +466,7 @@ da = Hæveautomat de = Geldautomat es = Cajero + et = Pangaautomaat eu = Kutxazain automatikoa fa = خودپرداز fi = Pankkiautomaatti @@ -475,6 +494,7 @@ cs = Banka el = Τράπεζα es = Banco + et = Pank eu = Bankua fa = بانک fi = Pankki @@ -501,6 +521,7 @@ ar = حانة el = Μπαρ es = Bar + et = Baar eu = Taberna fa = میکده fi = Baari @@ -528,6 +549,7 @@ de = Picknickplatz el = Χώρος εκδρομής es = Picnic + et = Piknikuala eu = Piknika fa = مکان پیک نیک fi = Piknikpaikat @@ -562,6 +584,7 @@ de = Parkbank el = Παγκάκι es = Banco + et = Pink eu = Bankua fa = سَکو fi = Penkki @@ -597,6 +620,7 @@ de = Fahrradständer el = Χώρος στάθμευσης ποδηλάτων es = Aparcamiento de bicis + et = Jalgrattaparkla eu = Bizikleta aparkalekua fa = پارکینگ دوچرخه fi = Polkupyöräpysäköinti @@ -631,6 +655,7 @@ de = Fahrradverleih el = Ενοικιάσεις ποδηλάτων es = Alquiler de bicicletas + et = Jalgrattarent eu = Bizikleta alokairua fa = مکان اجاره دوچرخه fi = Polkupyöränvuokraus @@ -664,6 +689,7 @@ da = Cykelreparationsstation de = Fahrrad-Reparaturstation es = Estación de reparación de bicicletas + et = Jalgrattaparandusjaam fa = ایستگاه تعمیر دوچرخه fi = Polkupyörän korjausasema fr = Station de réparation de vélos @@ -691,6 +717,7 @@ cs = Hospoda se zahrádkou el = Μπυραρία es = Biergarten + et = Õlleaed fa = غذا hu = Sörkert ja = ビアガーデン @@ -719,6 +746,7 @@ de = Bordell el = Πορνείο es = Burdel + et = Bordell eu = Bordela fa = فاحشه خانه fi = Bordelli @@ -753,6 +781,7 @@ de = Geldwechselstelle el = Συνάλλαγμα es = Cambio de divisas + et = Valuutavahetus eu = Moneta-trukea fa = صرافی fi = Rahanvaihto @@ -787,6 +816,7 @@ de = Busbahnhof el = Σταθμός λεωφορείων es = Estación de autobuses + et = Bussijaam eu = Autobus geltokia fa = حمل و نقل fi = Linja-autoasema @@ -821,6 +851,7 @@ de = Café el = Καφετέρια es = Café + et = Kohvik eu = Kafea fa = کافه fi = Kahvila @@ -855,6 +886,7 @@ de = Autoverleih el = Ενοικίαση αυτοκινήτου es = Coche de alquiler + et = Autorent eu = Alokairuko autoa fa = مکان اجاره ماشین fi = Autovuokraamo @@ -888,6 +920,7 @@ da = Delebiler de = Carsharing el = Παραχώρηση αυτοκινήτου + et = Autojagamine es = Compartir coche eu = Partekatu autoa fi = Autojen yhteiskäyttö @@ -920,6 +953,7 @@ de = Autowäsche el = Καθαρισμός αυτοκινήτων es = Lavado de coches + et = Autopesula eu = Kotxe garbiketa fa = کارواش fi = Autopesula @@ -953,6 +987,7 @@ de = Kasino el = Καζίνο es = Casino + et = Kasiino eu = Kasinoa fa = قمارخانه fi = Kasino @@ -987,6 +1022,7 @@ de = Ladestation el = Σταθμός φόρτισης es = Estación de carga + et = Laadimisjaam eu = Kargatzeko geltokia fa = ایستگاه شارژ fi = Latausasema @@ -1021,6 +1057,7 @@ de = Kindertagesstätte el = Βρεφικός σταθμός es = Guardería + et = Lasteaed eu = Haurtzaindegia fa = شیرخوارگاه fi = Päivähoito @@ -1055,6 +1092,7 @@ de = Kino el = Κινηματογράφος es = Cine + et = Kino eu = Filmak fa = سرگرمی fi = Elokuvateatteri @@ -1088,6 +1126,7 @@ de = Klinik el = Κλινική es = Clínica + et = Kliinik eu = Klinika fa = کلینیک fi = Klinikka @@ -1122,6 +1161,7 @@ de = Hochschule el = Κολέγιο es = Colegio + et = Kolledž eu = Unibertsitatea fa = دانشگاه fi = Korkeakoulu @@ -1156,6 +1196,7 @@ de = Bürgerhaus el = Κέντρο κοινότητας es = Centro comunitario + et = Kogukonnakeskus eu = Komunitate Zentroa fa = مرکزاجتماعی fi = Monitoimitalo @@ -1190,6 +1231,7 @@ de = Justizgebäude el = Δικαστικό μέγαρο es = Juzgado + et = Kohtumaja eu = Auzitegia fa = دادگاه fi = Oikeustalo @@ -1224,6 +1266,7 @@ de = Zahnarzt el = Οδοντίατρος es = Dentista + et = Hambaarst eu = Dentista fa = دندان پزشکی fi = Hammaslääkäri @@ -1257,6 +1300,7 @@ de = Arztpraxis el = Γιατροί es = Consulta del médico + et = Arst eu = Kontsulta medikoa fa = کلینیک fi = Lääkärin vastaanotto @@ -1290,6 +1334,7 @@ de = Trinkwasser el = Πόσιμο νερό es = Agua potable + et = Joogivesi eu = Ur edangarria fa = اب اشامیدنی fi = Juomavesi @@ -1326,6 +1371,7 @@ de = Fahrschule el = Σχολή οδήγησης es = Autoescuela + et = Autokool eu = Autoeskola fa = اموزشگاه رانندگی fi = Autokoulu @@ -1362,6 +1408,7 @@ de = Musikschule el = Μουσική Σχολή es = Escuela de música + et = Muusikakool eu = Musika Eskola fa = ﯽﻘﯿﺳﻮﻣ ﻩﺎﮕﺷﺯﻮﻣﺁ fi = Musiikkikoulu @@ -1398,6 +1445,7 @@ de = Sprachschule el = Σχολή Γλωσσών es = Escuela de idiomas + et = Keeltekool eu = Hizkuntza Eskola fa = ﻥﺎﺑﺯ ﻪﺳﺭﺪﻣ fi = Kielikoulu @@ -1432,6 +1480,7 @@ de = Botschaft el = Πρεσβεία es = Embajada + et = Saatkond eu = Enbaxada fa = سفارت fi = Suurlähetystö @@ -1466,6 +1515,7 @@ de = Fast-Food el = Ταχυφαγίο es = Comida rápida + et = Kiirtoit eu = Janari azkarra fa = فست فود fi = Pikaruokala @@ -1500,6 +1550,7 @@ de = Fähre el = Πορθμείο es = Transbordador + et = Praam eu = Espazio-ontzia fa = حمل و نقل fi = Lautta @@ -1535,6 +1586,7 @@ de = Feuerwehr el = Σταθμός πυρόσβεσης es = Parque de bomberos + et = Tuletõrjejaam eu = Suhiltzaileen parkea fa = ایستگاه اتش نشانی fi = Paloasema @@ -1564,6 +1616,7 @@ [type.amenity.food_court] en = Food Court es = Zona de comidas + et = Toiduväljak eu = Jantokia fr = Aire de restauration it = Area ristorazione @@ -1585,6 +1638,7 @@ de = Springbrunnen el = Συντριβάνι es = Fuente + et = Purskkaev eu = Iturria fa = فواره fi = Suihkulähde @@ -1621,6 +1675,7 @@ de = Tankstelle el = Βενζινάδικο es = Gasolinera + et = Tankla eu = Erregai-geltokia fa = سوخت fi = Huoltoasema @@ -1657,6 +1712,7 @@ de = Friedhof el = Νεκροταφείο es = Cementerio + et = Surnuaed eu = Hilerria fa = قبرستان fi = Hautausmaa @@ -1686,6 +1742,7 @@ [type.amenity.grave_yard.christian] ref = type.amenity.grave_yard en = Christian Graveyard + et = Kristlik surnuaed be = Хрысціянскія могілкі it = Cimitero cristiano ja = キリスト教墓地 @@ -1707,6 +1764,7 @@ de = Krankenhaus el = Νοσοκομείο es = Hospital + et = Haigla eu = Ospitalea fa = بیمارستان fi = Sairaala @@ -1741,6 +1799,7 @@ de = Hochsitz el = Βάση σκόπευσης es = Galería de caza + et = Jahipidamise koht eu = Ehiza galeria fa = شکارگاه fi = Metsästyspaikka @@ -1775,6 +1834,7 @@ de = Eisstand el = Παγωτατζίδικο es = Heladería + et = Jäätis eu = Izozki-denda fa = غذا fi = Jäätelökioski @@ -1809,6 +1869,7 @@ de = Internetcafé el = Καφετέρια με Ίντερνετ es = Cibercafé + et = Internetikohvik eu = Cyberkafea fa = کافی نت fi = Internetkahvila @@ -1841,6 +1902,7 @@ da = Børnehave el = Νηπιαγωγείο es = Guardería + et = Lasteaed eu = Haurtzaindegia fa = مهدکودک fi = Päiväkoti @@ -1875,6 +1937,7 @@ de = Bibliothek el = Βιβλιοθήκη es = Biblioteca + et = Raamatukogu eu = Liburutegia fa = کتابخانه fi = Kirjasto @@ -1909,6 +1972,7 @@ de = Marktplatz el = Αγορά es = Mercado + et = Turg eu = Merkatua fa = فروشگاه fi = Kauppatori @@ -1943,6 +2007,7 @@ de = Motorrad-Parkplatz el = Χώρος στάθμευσης μοτοσικλετών es = Aparcamiento de motos + et = Mootorrataste parkimine eu = Motoentzako aparkalekua fa = پارکینگ موتورسیکلت fi = Moottoripyörien pysäköinti @@ -1977,6 +2042,7 @@ de = Nachtclub el = Νυχτερινό κέντρο διασκέδασης es = Discoteca + et = Ööklubi eu = Diskoteka fa = کلوپ شبانه fi = Yökerho @@ -2011,6 +2077,7 @@ de = Pflegeheim el = Γηροκομείο es = Residencia de ancianos + et = Hooldekodu eu = Zaharren egoitza fa = خانه سالمندان fi = Hoitokoti @@ -2047,6 +2114,7 @@ de = Parkplatz el = Χώρος στάθμευσης es = Aparcamiento + et = Parkimine eu = Aparkalekua fa = پارکینگ fi = Parkkipaikka @@ -2084,6 +2152,7 @@ de = Kostenpflichtiger Parkplatz el = Χώρος στάθμευσης επί πληρωμή es = Aparcamiento de pago + et = Tasuline parkimine eu = Ordaindutako aparkalekua fa = ﯽﻟﻮﭘ ﮓﻨﯿﮐﺭﺎﭘ fi = Maksullinen pysäköinti @@ -2120,6 +2189,7 @@ de = Parkhaus el = Πολυώροφος χώρος στάθμευσης es = Aparcamiento de varios pisos + et = Parkimine mitmel korrusel eu = Solairu anitzeko aparkalekua fa = ﻪﻘﺒﻃ ﺪﻨﭼ ﮓﻨﯿﮐﺭﺎﭘ fi = Monikerroksinen pysäköinti @@ -2164,6 +2234,7 @@ el = Ιδιωτικός χώρος στάθμευσης es = Aparcamiento privado es-MX = Aparcamiento privado + et = Privaatne parkimine eu = Aparkaleku pribatua fa = ﯽﺻﺎﺼﺘﺧﺍ ﮓﻨﯿﮐﺭﺎﭘ fi = Yksityinen pysäköinti @@ -2199,6 +2270,7 @@ de = P+R-Parkplatz el = Χώρος στάθμευσης es = Aparcamiento + et = Parkimine eu = Aparkalekua fa = پارکینگ fi = Liityntäpysäköinti @@ -2235,6 +2307,7 @@ de = Tiefgarage el = Υπόγειος χώρος στάθμευσης es = Aparcamiento subterráneo + et = Maa-alune parkimine eu = Lurpeko Aparkalekua fa = ﯽﻨﯿﻣﺯ ﺮﯾﺯ ﮓﻨﯿﮐﺭﺎﭘ fi = Maanalainen pysäköinti @@ -2278,6 +2351,7 @@ el = Είσοδος στάθμευσης es = Entrada al aparcamiento es-MX = Entrada al aparcamiento + et = Parkla sissepääs eu = Aparkalekuaren sarrera fa = ﮓﻨﯿﮐﺭﺎﭘ ﯼﺩﻭﺭﻭ fi = Pysäköinnin sisäänkäynti @@ -2313,6 +2387,7 @@ el = Χώρος στάθμευσης es = Plaza de aparcamiento es-MX = Plaza de aparcamiento + et = Parkimiskoht eu = Aparkaleku fa = جای پارک fi = Parkkipaikka @@ -2348,6 +2423,7 @@ el = Χώρος στάθμευσης es = Plaza de aparcamiento es-MX = Plaza de aparcamiento + et = Parkimiskoht eu = Aparkaleku fa = جای پارک fi = Parkkipaikka @@ -2383,6 +2459,7 @@ el = Χώρος στάθμευσης es = Plaza de aparcamiento es-MX = Plaza de aparcamiento + et = Parkimiskoht eu = Aparkaleku fa = جای پارک fi = Parkkipaikka @@ -2418,6 +2495,7 @@ el = Χώρος στάθμευσης es = Plaza de aparcamiento es-MX = Plaza de aparcamiento + et = Parkimiskoht eu = Aparkaleku fa = جای پارک fi = Parkkipaikka @@ -2454,6 +2532,7 @@ de = Behindertenparkplatz el = Χώρος στάθμευσης για ΑΜΕΑ es = Plaza de aparcamiento para discapacitados + et = Invaparkimiskoht eu = Ezinduentzako aparkalekua fa = ﻦﯿﻟﻮﻠﻌﻣ ﮎﺭﺎﭘ ﯼﺎﺟ fi = Vammaispysäköinti @@ -2488,6 +2567,7 @@ de = Bezahlterminal el = Τερματικό πληρωμών es = Terminal de pago + et = Makseterminal eu = Ordainketa terminala fa = دستگاه کارتخوان fi = Maksupääte @@ -2522,6 +2602,7 @@ de = Apotheke el = Φαρμακείο es = Farmacia + et = Apteek eu = Farmazia fa = داروخانه fi = Apteekki @@ -2556,6 +2637,7 @@ de = Anbetungsstätte el = Χώρος λατρείας es = Lugar de culto + et = Jumalateenistuse koht eu = Kultu lekua fa = گردشگری fi = Uskonnollinen kohde @@ -2590,6 +2672,7 @@ de = Tempel el = Ναός es = Templo + et = Tempel eu = Tenplua fa = گردشگری fi = Temppeli @@ -2623,6 +2706,7 @@ de = Kirche el = Εκκλησία es = Iglesia + et = Kirik eu = Eliza fa = گردشگری fi = Kirkko @@ -2657,6 +2741,7 @@ de = Tempel el = Ναός es = Templo + et = Tempel eu = Tenplua fa = گردشگری fi = Temppeli @@ -2690,6 +2775,7 @@ de = Synagoge el = Συναγωγή es = Sinagoga + et = Sünagoog eu = Sinagoga fa = گردشگری fi = Synagoga @@ -2723,6 +2809,7 @@ de = Moschee el = Τζαμί es = Mezquita + et = Mošee eu = Meskita fa = گردشگری fi = Moskeija @@ -2757,6 +2844,7 @@ de = Schrein el = Ιερό es = Ermita + et = Pühamu eu = Ermita fa = گردشگری fi = Pyhäkkö @@ -2791,6 +2879,7 @@ de = Tempel el = Ναός es = Templo + et = Tempel eu = Tenplua fa = گردشگری fi = Temppeli @@ -2824,6 +2913,7 @@ de = Polizeistation el = Αστυνομία es = Policía + et = Politsei eu = Polizia fa = کلانتری fi = Poliisi @@ -2858,6 +2948,7 @@ de = Briefkasten el = Ταχυδρομική θυρίδα es = Buzón + et = Postkast eu = Postontzia fa = صندوق پست fi = Postilaatikko @@ -2893,6 +2984,7 @@ el = Ταχυδρομείο es = Oficina de correos es-MX = Oficina de correos + et = Postkontor eu = Posta bulegoa fa = دفتر پست fi = Postitoimisto @@ -2924,6 +3016,7 @@ en = Prison de = Gefängnis es = Prisión + et = Vangla eu = Kartzela fi = Vankila it = Prigione @@ -2947,6 +3040,7 @@ de = Kneipe el = Παμπ es = Pub + et = Pubi eu = Taberna fa = میکده fi = Pubi @@ -2976,6 +3070,7 @@ de = Bücherschrank el = Ανταλλαγή βιβλίων es = Intercambio de libros + et = Raamatuvahetus eu = Liburu trukea fi = Kirjahylly fr = Microbibliothèque @@ -3011,6 +3106,7 @@ de = Recyclinghof el = Κέντρο ανακύκλωσης es = Centro de reciclaje + et = Taaskasutuskeskus eu = Birziklapen zentroa fa = مرکز بازیافت fi = Kierrätyskeskus @@ -3046,6 +3142,7 @@ de = Wertstoffcontainer el = Κάδος ανακύκλωσης es = Contenedor de reciclaje + et = Taaskasutuskonteiner eu = Birziklatzeko edukiontzia fa = ظرف بازیافت fi = Kierrätysjäteastia @@ -3085,6 +3182,7 @@ de = Batterien el = Μπαταρίες es = Baterías + et = Patareid eu = Bateriak fa = ﺎﻫ ﯼﺮﺗﺎﺑ fi = Paristot @@ -3122,6 +3220,7 @@ de = Altkleider el = Παλιά ρούχα es = Ropa + et = Rõivad eu = Arropa fa = لباسهای قدیمی fi = Vanhat vaatteet @@ -3157,6 +3256,7 @@ de = Glas el = Γυάλινα μπουκάλια es = Envases de vidrio + et = Klaaspudelid eu = Beirazko ontziak fa = بطریهای شیشهای fi = Lasipullot @@ -3192,6 +3292,7 @@ de = Papier el = Απορρίμματα χαρτιού es = Papel + et = Paber eu = Papera fa = پسماند کاغذ fi = Paperi- ja kartonkijäte @@ -3227,6 +3328,7 @@ de = Kunststoff el = Πλαστικά απορρίμματα es = Plástico + et = Plastik eu = Plastikoa fa = پسماند پلاستیک fi = Muovijäte @@ -3262,6 +3364,7 @@ de = Plastikflaschen el = Πλαστικά μπουκάλια es = Botellas de plástico + et = Plastpudelid eu = Plastikozko botilak fa = بطریهای پلاستیک fi = Muovipullot @@ -3298,6 +3401,7 @@ el = Παλιοσίδερα es = Residuos de metal es-MX = Desechos de metal + et = Vanametall eu = Metal hondakinak fa = ضایعات فلزی fi = Metalliromu @@ -3333,6 +3437,7 @@ el = Ηλεκτρονικά απορρίμματα es = Residuos electrónicos es-MX = Desechos electrónicos + et = Elektroonikajäätmed eu = Hondakin elektronikoak fa = پسماند الکترونیکی fi = Kodinkonejäte @@ -3364,6 +3469,7 @@ be = Кардон de = Karton es = Cartón + et = Papp eu = Kartoia fr = Carton it = Cartone @@ -3379,6 +3485,7 @@ be = Бляшаныя і алюмініевыя слоікі de = Dosen es = Latas + et = Purgid eu = Latak fr = Emballages métalliques it = Lattine @@ -3394,6 +3501,7 @@ be = Абутак de = Schuhe es = Calzado + et = Jalanõud eu = Oinetakoak fr = Chaussures it = Scarpe @@ -3409,6 +3517,7 @@ be = Арганіка / Харчовыя адходы de = Bio-Müll es = Orgánico + et = Roheline/Orgaaniline jääde eu = Organikoa fr = Déchets organiques it = Umido @@ -3423,6 +3532,7 @@ be = Тэтрапак і аналагі de = Getränkekarton es = Cartones de bebida + et = Joogipakendid eu = Edateko kartoiak fr = Briques alimentaires mr = पेय कार्टन @@ -3438,6 +3548,7 @@ cs = Restaurace el = Εστιατόριο es = Restaurante + et = Restoran eu = Jatetxea fa = غذا fi = Ravintola @@ -3466,6 +3577,7 @@ be = Зліў для прыбіральняў транспартных сродкаў de = VE-Station es = Estación de vaciado para caravanas + et = Hoidmispaagi prügila fr = Station de vidange it = Area servizi camper nl = Caravantoilet cassette-leegpunt @@ -3483,6 +3595,7 @@ de = Schule el = Σχολείο es = Escuela + et = Kool eu = Eskola fa = مدرسه fi = Koulu @@ -3516,6 +3629,7 @@ de = Unterstand el = Καταφύγιο es = Refugio + et = Varjupaik eu = Aterpea fa = پناهگاه fi = Katos @@ -3550,6 +3664,7 @@ de = Dusche el = Ντους es = Ducha + et = Dušš eu = Dutxa fa = حمام fi = Suihku @@ -3581,6 +3696,7 @@ ar = سيارة أجرة el = Ταξί es = Taxi + et = Takso eu = Taxia fa = تاکسی fi = Taksi @@ -3609,6 +3725,7 @@ de = Telefon el = Τηλέφωνο es = Teléfono + et = Telefon eu = Telefonoa fa = تلفن خانه fi = Puhelin @@ -3643,6 +3760,7 @@ de = Theater el = Θέατρο es = Teatro + et = Teater eu = Antzerkia fa = سرگرمی fi = Teatteri @@ -3676,6 +3794,7 @@ de = Toilette el = Τουαλέτα es = WC + et = Tualett eu = Komuna fa = دستشویی fi = WC @@ -3710,6 +3829,7 @@ de = Rathaus el = Δημαρχείο es = Ayuntamiento + et = Raekoda eu = Udaletxea fa = گردشگری fi = Kaupungintalo @@ -3744,6 +3864,7 @@ de = Universität el = Πανεπιστήμιο es = Universidad + et = Ülikool eu = Unibertsitatea fa = دانشگاه fi = Yliopisto @@ -3775,6 +3896,7 @@ be = Гандлёвы аўтамат de = Verkaufsautomat es = Máquina expendedora + et = Müügiautomaat eu = Makina saltzailea fi = Myyntiautomaatti fr = Distributeur automatique @@ -3799,6 +3921,7 @@ de = Zigarettenautomat el = Αυτόματος πωλητής τσιγάρων es = Máquina expendedora de tabaco + et = Sigaretiautomaat eu = Tabakoa saltzeko makina fa = ماشین سیگار فروشی fi = Savukeautomaatti @@ -3830,6 +3953,7 @@ be = Кававы аўтамат de = Kaffeeautomat es = Máquina expendedora de café + et = Kohviautomaat eu = Kafea saltzeko makina fi = Kahviautomaatti fr = Distributeur de café @@ -3845,6 +3969,7 @@ be = Аўтамат з прэзерватывамі de = Kondomautomat es = Máquina expendedora de condones + et = Kondoomiautomaat eu = Kondoiak saltzeko makina fi = Kondomiautomaatti fr = Distributeur de préservatifs @@ -3864,6 +3989,7 @@ de = Getränkeautomat el = Αυτόματος πωλητής ποτών es = Máquina expendedora de bebidas + et = Joogiautomaat eu = Edari saltzeko makina fa = ماشین فروش نوشیدنی fi = Juoma-automaatti @@ -3895,6 +4021,7 @@ be = Аўтамат з ежай de = Essensautomat es = Máquina expendedora de comida + et = Toiduautomaat eu = Janaria saltzeko makina fi = Ruoka-automaatti fr = Distributeur d'aliments @@ -3910,6 +4037,7 @@ be = Газетны аўтамат de = Zeitungsautomat es = Máquina expendedora de periódicos + et = Ajalehtede automaat eu = Egunkariak saltzeko makina fi = Sanomalehtiautomaatti fr = Distributeur de journaux @@ -3929,6 +4057,7 @@ de = Parkautomat el = Εισιτήρια στάθμευσης es = Máquina de pago de tique de aparcamiento + et = Parkimispiletid eu = Aparkatzeko txartelak ordaintzeko makina fa = پارکو متر fi = Pysäköintimaksuautomaatti @@ -3965,6 +4094,7 @@ el = Μηχάνημα αυτόματης πώλησης εισιτηρίων για τα μέσα μαζικής μεταφοράς es = Máquina expendedora de boletos para el transporte público es-MX = Máquina expendedora de billetes de transporte público + et = Piletiautomaat eu = Garraio publikorako txartelak saltzeko makina fa = دستگاه فروش خودکار بلیط های حمل و نقل عمومی fi = Julkisen liikenteen lippuautomaatti @@ -3997,6 +4127,7 @@ be = Аўтамат з прысмакамі de = Süßigkeitenautomat es = Máquina expendedora de dulces + et = Maiustuste automaat eu = Gozokiak saltzeko makina fi = Karkkiautomaatti fr = Distributeur de bonbons @@ -4012,6 +4143,7 @@ be = Мяшкі дзеля экскрыментаў de = Hundekotbeutelspender es = Maquina expendedora de bolsas para excrementos + et = Ekskremendikottide automaat eu = Kaka poltsak saltzeko makina fr = Distributeur de sacs à excréments mr = मलमूत्र पिशव्या विक्रीयंत्र @@ -4026,6 +4158,7 @@ be = Паштамат de = Paketstation es = Taquilla de paquetes + et = Pakiautomaat eu = Paketeen aldagela fr = Consigne automatique pour colis it = Punto di ritiro @@ -4042,6 +4175,7 @@ be = Паліўная калонка de = Tankautomat es = Maquina expendedora de combustible + et = Tankimisautomaat fi = Bensa-automaatti mr = इंधन विक्रीयंत्र nl = Tankautomaat @@ -4058,6 +4192,7 @@ de = Tierarzt el = Κτηνίατρος es = Clínica veterinaria + et = Loomaarst eu = Albaitaritzako klinika fa = دامپزشکی fi = Eläinlääkäri @@ -4092,6 +4227,7 @@ de = Abfalleimer el = Κάδος απορριμμάτων es = Papelera + et = Prügikast eu = Paper-ontzia fa = سطل زباله fi = Roska-astia @@ -4126,6 +4262,7 @@ de = Müllcontainer el = Διαχείριση απορριμμάτων es = Basura + et = Prügikast eu = Zaborrontzia fa = زباله دانی fi = Roska @@ -4157,6 +4294,7 @@ be = Станцыя перавалкі адходаў de = Müllumladestation es = Estación de transferencia de residuos + et = Jäätmete üleandmise jaam it = Centro trasferimento rifiuti mr = कचरा हस्तांतरण केंद्र nl = Overslagstation voor afval @@ -4175,6 +4313,7 @@ de = Wasseranschluss el = Παροχή νερού es = Fuente de agua + et = Haagiselamu veepunkt eu = Ur iturria fa = شیر آب قابل شرب fi = Vesipiste @@ -4204,6 +4343,7 @@ en = Barrier de = Barriere es = Barrera + et = Barjäär eu = Hesia fr = Barrière it = Barriera @@ -4227,6 +4367,7 @@ de = Block el = Εμπόδιο es = Bloque + et = Takistus eu = Blokea fa = بلوک fi = Este @@ -4261,6 +4402,7 @@ de = Poller el = Πυλώνας es = Bolardo + et = Post eu = Bolardoa fa = ستون fi = Tolppa @@ -4295,6 +4437,7 @@ de = Grenzkontrolle el = Έλεγχος συνόρων es = Control de fronteras + et = Piirikontroll eu = Muga kontrola fa = کنترل مرزی fi = Rajavalvonta @@ -4326,6 +4469,7 @@ be = Ланцуг de = Kette es = Cadena + et = Kett eu = Katea fi = Ketju fr = Chaîne @@ -4343,6 +4487,7 @@ en = Cycle Barrier de = Umlaufschranke es = Barrera para bicicletas + et = Jalgrattabarjäär eu = Bizikleta-hesia fi = Polkupyöräeste it = Barriera per biciclette @@ -4366,6 +4511,7 @@ de = Graben el = Τάφρος es = Foso + et = Vallikraav eu = Lubanarroa fa = ﻕﺪﻨﺧ fi = Vallihauta @@ -4400,6 +4546,7 @@ de = Durchgang el = Είσοδος es = Entrada + et = Sissepääs eu = Sarrera fa = ورودی fi = Sisäänkäynti @@ -4430,6 +4577,7 @@ en = Fence de = Zaun es = Valla + et = Tara eu = Hesia fi = Aita fr = Clôture @@ -4454,6 +4602,7 @@ de = Tor el = Πύλη es = Puerta + et = Värav eu = Ate fa = ورودی fi = Portti @@ -4484,6 +4633,7 @@ en = Hedge de = Hecke es = Seto + et = Hekk eu = Estaldura fi = Pensasaita fr = Haie @@ -4501,6 +4651,7 @@ [type.barrier.kissing_gate] ref = type.barrier.gate en = Kissing Gate + et = Suudlemisvärav nl = Voetgangershek pt = Quebra-corpo pt-BR = Quebra-corpo @@ -4514,6 +4665,7 @@ de = Schranke el = Ανυψούμενη μπάρα es = Barrera + et = Tõstevärav eu = Hesia fa = اسانسور fi = Nostopuomi @@ -4544,6 +4696,7 @@ en = Retaining Wall de = Stützmauer es = Muro de contención + et = Tugisein eu = Euste-horma fr = Mur de soutènement ja = 擁壁 @@ -4564,6 +4717,7 @@ de = Zaunübertritt el = Τουρνικέ es = Escalón + et = Trepp eu = Urratsa fa = پلکان fi = Portaat @@ -4598,6 +4752,7 @@ de = Schranke el = Ανυψούμενη μπάρα es = Barrera + et = Tiibvärav eu = Hesia fa = اسانسور fi = Kääntöpuomi @@ -4632,6 +4787,7 @@ de = Mautstelle el = Σταθμός διοδίων es = Peaje + et = Tolliputka eu = Bidesaria fa = گیشه عوارضی fi = Tietulliasema @@ -4662,6 +4818,7 @@ en = Wall de = Mauer es = Muro + et = Müür eu = Horma fi = Muuri fr = Mur @@ -4681,6 +4838,7 @@ en = Boundary de = Grenze es = Frontera + et = Piir eu = Muga fi = Raja fr = Frontière @@ -4700,6 +4858,7 @@ en = Administrative Boundary de = Verwaltungsgrenze es = Frontera administrativa + et = Halduspiir eu = Muga administratiboa fi = Hallinnollinen raja fr = Frontière administrative @@ -4757,6 +4916,7 @@ [type.boundary.administrative.city] en = City Boundary es = Frontera de ciudad + et = Linna piir eu = Hiriko muga fi = Kaupunginraja fr = Frontière de la ville @@ -4775,6 +4935,7 @@ en = National Border es = Frontera de país es-MX = Frontera de país + et = Riigipiir eu = Herrialdeko muga fi = Valtakunnanraja fr = Frontière nationale @@ -4792,6 +4953,7 @@ [type.boundary.administrative.county] en = County Boundary es = Frontera de condado + et = Maakonna piir eu = Eskualdeko muga fi = Maakunnanraja fr = Frontière du comté @@ -4808,6 +4970,7 @@ [type.boundary.administrative.municipality] en = Municipality Boundary es = Frontera de municipio + et = Valla piir eu = Udalerriko muga fi = Kunnanraja fr = Frontière de la municipalité @@ -4832,6 +4995,7 @@ [type.boundary.administrative.region] en = Regional Boundary es = Frontera de región + et = Piirkondlik piir eu = Eskualdeko muga fr = Frontière régionale it = Confine regionale @@ -4848,6 +5012,7 @@ [type.boundary.administrative.state] en = State Boundary es = Frontera de estado + et = Osariigi piir eu = Estatuko muga fi = Osavaltion raja it = Confine statale @@ -4863,6 +5028,7 @@ [type.boundary.administrative.suburb] en = Suburb Boundary es = Frontera de suburbio + et = Eeslinna piir eu = Auzoko muga fr = Frontière de quartier mr = उपनगर सीमा @@ -4884,6 +5050,7 @@ el = Εθνικό πάρκο es = Parque nacional es-MX = Parque nacional + et = Rahvuspark eu = Parke Nazionala fa = پارک ملی fi = Kansallispuisto @@ -4919,6 +5086,7 @@ de = Gebäude el = Κτίριο es = Edificio + et = Hoone eu = Eraikin fa = ساختمان fi = Rakennus @@ -4953,6 +5121,7 @@ de = Gebäude el = Κτίριο es = Edificio + et = Hoone eu = Eraikin fa = ساختمان fi = Rakennus @@ -4985,6 +5154,7 @@ cs = Garáž el = Γκαράζ es = Garaje + et = Garaaž eu = Garajea fa = گاراژ fi = Autotalli @@ -5017,6 +5187,7 @@ de = Gebäude el = Κτίριο es = Edificio + et = Hoone eu = Eraikin fa = ساختمان fi = Rakennus @@ -5051,6 +5222,7 @@ de = Bahnhof el = Σιδηροδρομικός σταθμός es = Estación de tren + et = Rongijaam eu = Tren geltokian fa = ایستگاه قطار fi = Rautatieasema @@ -5080,6 +5252,7 @@ [type.building.warehouse] en = Warehouse es = Almacén + et = Ladu eu = Denda fi = Varasto fr = Entrepôt @@ -5103,6 +5276,7 @@ de = Grab el = Τάφος es = Tumba + et = Haud eu = Hilobia fa = ﺮﺒﻗ fi = Hauta @@ -5140,6 +5314,7 @@ de = Handwerk el = Τεχνική es = Gremios + et = Käsitöö eu = Artisautza fa = صنعت‌گری fi = Käsityö @@ -5177,6 +5352,7 @@ de = Imker el = Μελισσοκόμος es = Apicultor + et = Mesinik eu = Erlezaina fa = زنبوردار fi = Mehiläishoitaja @@ -5214,6 +5390,7 @@ de = Schmied el = Σιδηρουργός es = Herrero + et = Sepp eu = Errementari fa = آهنگر fi = Seppä @@ -5251,6 +5428,7 @@ de = Brauerei el = Ζυθοποιείο es = Fábrica de cerveza + et = Käsitööpruulikoda eu = Garagardo fabrika fa = کارخانه ابجوسازی fi = Panimo @@ -5288,6 +5466,7 @@ de = Zimmermann el = Ξυλουργός es = Carpintero + et = Puusepp eu = Arotza fa = نجار fi = Puuseppä @@ -5325,6 +5504,7 @@ de = Konditor el = Ζαχαροπλάστης es = Confitería + et = Maiustused eu = Gozogilea fa = قنادی fi = Kondiittori @@ -5362,6 +5542,7 @@ de = Elektriker el = Ηλεκτρολόγος es = Electricista + et = Elektrik eu = Elektrizista teknikaria fa = برق کار fi = Sähkömies @@ -5399,6 +5580,7 @@ de = Elektrogerätereparatur el = Επισκευή ηλεκτρονικών es = Reparación de aparatos electrónicos + et = Elektroonika remont eu = Elektronika Konponketa fa = تعمیرات الکترونیک fi = Elektroniikan korjaus @@ -5437,6 +5619,7 @@ de = Landschaftsgärtner el = Κηπουρός es = Paisajista + et = Aednik eu = Paisaia fa = باغبان fi = Puutarhuri @@ -5474,6 +5657,7 @@ de = Kunsthandwerk el = Χειροτεχνία es = Artesanía + et = Käsitöö eu = Eskulangintza fa = صنایع دستی fi = Käsityö @@ -5512,6 +5696,7 @@ de = Heizung, Lüftung und Klimatisierung el = Ψυκτικός es = Aire acondicionado + et = Õhkkonditsioneer eu = Aire girotua fa = گرمایش و تهویه‌هوا fi = Ilmastointilaite @@ -5549,6 +5734,7 @@ de = Schlosser el = Μεταλλουργός es = Trabajador del metal + et = Metallitööline eu = Metalgintzako langilea fa = اهن کار fi = Metallimies @@ -5586,6 +5772,7 @@ de = Maler el = Μπογιατζής es = Pintor + et = Maaler eu = Margolaria fa = نقاش fi = Maalari @@ -5623,6 +5810,7 @@ de = Fotograf el = Φωτογράφος es = Fotógrafo + et = Fotograaf eu = Argazkilaria fa = عکاس fi = Valokuvaaja @@ -5660,6 +5848,7 @@ de = Installateur el = Υδραυλικός es = Fontanero + et = Santehnik eu = Iturgina fa = لوله کش fi = Putkimies @@ -5698,6 +5887,7 @@ de = Sägewerk el = Πριστήριο es = Serrería + et = Saeveski eu = Zerrategi fa = کارخانه چوب‌بری fi = Saha @@ -5735,6 +5925,7 @@ de = Schuhmacher el = Υποδηματοποιός es = Zapatero + et = Kingsepp eu = Zapataria fa = کفاش fi = Suutari @@ -5772,6 +5963,7 @@ de = Weingut el = Οινοποιείο es = Bodega + et = Veinikelder eu = Upategi fa = شراب‌خانه fi = Viinitila @@ -5810,6 +6002,7 @@ de = Schneider el = Ράφτης es = Sastre + et = Rätsep eu = Jostun fa = خیاطی fi = Räätäli @@ -5845,6 +6038,7 @@ de = Afrikanisch el = Αφρικανική es = Cocina africana + et = Aafrika eu = Afrikako sukaldaritza fi = Afrikkalainen keittiö fr = Cuisine africaine @@ -5878,6 +6072,7 @@ de = Amerikanisch el = Αμερικάνικη es = Cocina americana + et = Ameerika eu = Sukalde amerikarra fi = Amerikkalainen keittiö fr = Cuisine américaine @@ -5911,6 +6106,7 @@ de = Arabisch el = Αραβική es = Cocina árabe + et = Araabia eu = Sukaldaritza arabiarra fi = Arabialainen keittiö fr = Cuisine arabe @@ -5944,6 +6140,7 @@ de = Argentinisch el = Αργεντίνικη es = Cocina argentina + et = Argentiina eu = Argentinako sukaldaritza fi = Argentiinalainen keittiö fr = Cuisine argentine @@ -5977,6 +6174,7 @@ de = Asiatisch el = Ασιάτικη es = Cocina asiática + et = Aasia eu = Asiar sukaldaritza fi = Aasialainen keittiö fr = Cuisine asiatique @@ -6010,6 +6208,7 @@ de = Österreichisch el = Αυστριακή es = Cocina austriaca + et = Austria eu = Austriako sukaldaritza fi = Itävaltalainen keittiö fr = Cuisine autrichienne @@ -6043,6 +6242,7 @@ de = Bagel el = Κουλούρι es = Bágel + et = Bagel eu = Bagel fi = Bagel fr = Bagel @@ -6076,6 +6276,7 @@ de = Balkanisch el = Βαλκανίων es = Cocina balcánica + et = Balkani eu = Balkanetako sukaldaritza fi = Balkanilainen keittiö fr = Cuisine des Balkans @@ -6109,6 +6310,7 @@ de = Grill el = Μπάρμπεκιου es = Barbacoa + et = Grill eu = Barbakoa fi = Grilli fr = Barbecue @@ -6143,6 +6345,7 @@ de = Bayerisch el = Βαυαρική es = Cocina bávara + et = Baieri eu = Bavariako sukaldaritza fi = Baijerilainen keittiö fr = Cuisine bavaroise @@ -6176,6 +6379,7 @@ de = Gyūdon el = Σούπα με βοδινό es = Gyūdon + et = Veiseliha kauss eu = Gyudon fi = Naudanlihakulho fr = Donburi de bœuf @@ -6209,6 +6413,7 @@ de = Brasilianisch el = Βραζιλιάνικη es = Cocina brasileña + et = Brasiilia eu = Brasilgo sukaldaritza fi = Brasilialainen keittiö fr = Cuisine brésilienne @@ -6242,6 +6447,7 @@ de = Frühstück el = Πρωινό es = Desayunos + et = Hommikusöök eu = Gosariak fi = Aamiainen fr = Petit déjeuner @@ -6273,6 +6479,7 @@ ar = شاي الفقاعات be = Чай з бурбалкамі es = Té de burbujas + et = Mullitee eu = Burbuila tea ru = Чай с шариками uk = Бульбашковий чай @@ -6285,6 +6492,7 @@ de = Burger el = Μπιφτέκι es = Hamburguesas + et = Burger eu = Hanburgesak fi = Hampurilainen fr = Hamburger @@ -6319,6 +6527,7 @@ de = Buschenschank el = Μπούσενσανκ (αυστριακή ταβέρνα) es = Buschenschank + et = Buschenschank eu = Buschenschank fi = Viinitaverna fr = Buschenschank @@ -6352,6 +6561,7 @@ de = Kuchen el = Κέικ es = Tartas + et = Kook eu = Pastelak fi = Kakku fr = Gâteau @@ -6386,6 +6596,7 @@ de = Karibisch el = Καραϊβική es = Cocina caribeña + et = Kariibi eu = Karibeko sukaldaritza fi = Karibialainen keittiö fr = Cuisine des Caraïbes @@ -6419,6 +6630,7 @@ de = Hühnchen el = Κοτόπουλο es = Pollos + et = Kana eu = Oiloak fi = Kana fr = Poulet @@ -6453,6 +6665,7 @@ de = Chinesisch el = Κινέζικη es = Cocina china + et = Hiina eu = Txinako sukaldaritza fi = Kiinalainen keittiö fr = Cuisine chinoise @@ -6487,6 +6700,7 @@ de = Kaffee el = Καφές es = Café + et = Kohvi eu = Kafea fi = Kahvi fr = Café @@ -6522,6 +6736,7 @@ de = Crêpe el = Κρέπα es = Crepes + et = Krepp eu = Krepeak fi = Kreppi fr = Crêperie @@ -6555,6 +6770,7 @@ de = Kroatisch el = Κροατική es = Cocina croata + et = Horvaatia eu = Sukaldaritza croata fi = Kroatialainen keittiö fr = Cuisine croate @@ -6588,6 +6804,7 @@ de = Curry el = Κάρι es = Curri + et = Karri eu = Curry fi = Curry fr = Curry @@ -6624,6 +6841,7 @@ de = Delikatessen el = Εκλεκτά τρόφιμα es = Delicatesen + et = Deli eu = Delitua fi = Herkkukauppa fr = Charcuterie @@ -6657,6 +6875,7 @@ de = Diner el = Μικροεστιατόριο es = Cena + et = Söögikoht eu = Afaria fi = Lounaskahvila fr = Diner américain @@ -6690,6 +6909,7 @@ de = Donuts el = Ντόνατ es = Rosquillas + et = Sõõrik eu = Donutsak fi = Donitsi fr = Donuts @@ -6723,6 +6943,7 @@ de = Äthiopisch el = Αιθιοπίας es = Cocina etíope + et = Etioopia eu = Etiopiako sukaldaritza fi = Etiopialainen keittiö fr = Cuisine éthiopienne @@ -6756,6 +6977,7 @@ de = Philippinisch el = Φιλιππινέζικη es = Cocina filipina + et = Filipiinide eu = Filipinetako sukaldaritza fi = Filippiiniläinen keittiö fr = Cuisine philippine @@ -6789,6 +7011,7 @@ de = Gehoben el = Εκλεκτά εστιατόρια es = Restaurante elegante + et = Peen restoran eu = Jatetxe dotorea fi = Hieno ravintola fr = Restaurant gastronomique @@ -6822,6 +7045,7 @@ de = Fisch el = Ψάρια es = Pescados + et = Kala eu = Arraina fi = Kala fr = Poisson @@ -6856,6 +7080,7 @@ de = Fish and Chips el = Ψάρια και πατάτες es = Pescado rebozado con patatas + et = Kala ja krõpsud eu = Arrain arrautza patatekin fi = Fish & chips fr = Fish and chips @@ -6889,6 +7114,7 @@ de = Französisch el = Γαλλική es = Cocina francesa + et = Prantsuse eu = Frantziako sukaldaritza fi = Ranskalainen keittiö fr = Cuisine française @@ -6922,6 +7148,7 @@ de = Pommes el = Τηγανητά es = Frituras + et = Fritüür eu = Frijituak fi = Uppopaistettu fr = Friterie @@ -6955,6 +7182,7 @@ de = Georgisch el = Γεωργιανή es = Cocina georgiana + et = Gruusia eu = Georgiako sukaldaritza fi = Georgialainen keittiö fr = Cuisine géorgienne @@ -6988,6 +7216,7 @@ de = Deutsch el = Γερμανική es = Cocina alemana + et = Saksa eu = Alemaniar sukaldaritza fi = Saksalainen keittiö fr = Cuisine allemande @@ -7021,6 +7250,7 @@ de = Griechisch el = Ελληνική es = Cocina griega + et = Kreeka eu = Greziar sukaldaritza fi = Kreikkalainen keittiö fr = Cuisine grecque @@ -7054,6 +7284,7 @@ de = Grill el = Ψησταριά es = Parrilla + et = Grill eu = Erretegia fi = Grilli fr = Grill @@ -7086,6 +7317,7 @@ de = Heuriger el = Χόιριγκερ es = Heuriger + et = Heuriger eu = Heuriger fi = Viinitaverna fr = Heuriger @@ -7119,6 +7351,7 @@ de = Hotdog el = Χοτ Ντογκ es = Perritos calientes + et = Hotdog eu = Txakur beroak fi = Hotdog fr = Hot-dog @@ -7152,6 +7385,7 @@ de = Ungarisch el = Ουγγρική es = Cocina húngara + et = Ungari eu = Hungariako sukaldaritza fi = Unkarilainen keittiö fr = Cuisine hongroise @@ -7185,6 +7419,7 @@ de = Eis el = Παγωτό es = Helados + et = Jäätis eu = Izozkiak fi = Jäätelö fr = Crème glacée @@ -7219,6 +7454,7 @@ de = Indisch el = Ινδική es = Cocina hindú + et = India eu = Indiako sukaldaritza fi = Intialainen keittiö fr = Cuisine indienne @@ -7253,6 +7489,7 @@ de = Indonesisch el = Ινδονησιακή es = Cocina indonesia + et = Indoneesia eu = Indonesiako sukaldaritza fi = Indonesialainen keittiö fr = Cuisine indonésienne @@ -7286,6 +7523,7 @@ de = International el = Διεθνής es = Cocina internacional + et = Rahvusvaheline eu = Nazioarteko sukaldea fi = Kansainvälinen keittiö fr = Cuisine internationale @@ -7320,6 +7558,7 @@ de = Irisch el = Ιρλανδέζικη es = Cocina irlandesa + et = Iiri eu = Irlandar sukaldaritza fi = Irlantilainen keittiö fr = Cuisine irlandaise @@ -7353,6 +7592,7 @@ de = Italienisch el = Ιταλική es = Cocina italiana + et = Itaalia eu = Italiako sukaldaritza fi = Italialainen keittiö fr = Cuisine italienne @@ -7387,6 +7627,7 @@ de = Italienisch; Pizza el = Ιταλική, Πίτσα es = Cocina italiana, pizzas + et = Itaalia, pizza eu = Italiako sukaldaritza, pizza fi = Italialainen, pizza fr = Italien, pizza @@ -7421,6 +7662,7 @@ de = Japanisch el = Ιαπωνική es = Cocina japonesa + et = Jaapani eu = Japoniako sukaldaritza fi = Japanilainen keittiö fr = Cuisine japonaise @@ -7455,6 +7697,7 @@ de = Kebap el = Κεμπάπ es = Kebabs + et = Kebab eu = Kebabak fi = Kebab fr = Kebab @@ -7488,6 +7731,7 @@ de = Koreanisch el = Κορεάτικη es = Cocina coreana + et = Korea eu = Koreako sukaldaritza fi = Korealainen fr = Cuisine coréenne @@ -7521,6 +7765,7 @@ de = Laotisch el = Λάος es = Cocina laosiana + et = Lao eu = Laosko sukaldaritza fi = Laosilainen keittiö fr = Cuisine laotienne @@ -7554,6 +7799,7 @@ de = Libanesisch el = Λιβανέζικη es = Cocina libanesa + et = Liibanoni eu = Libanoko sukaldaritza fi = Libanonilainen keittiö fr = Cuisine libanaise @@ -7587,6 +7833,7 @@ de = Regional el = Τοπική es = Cocina local + et = Kohalik eu = Bertako sukaldaritza fi = Paikallinen keittiö fr = Cuisine locale @@ -7621,6 +7868,7 @@ de = Madegassisch el = Μαδαγασκάρης es = Cocina malgache + et = Madagaskari eu = Malgaxeko sukaldaritza fi = Madagaskarilainen keittiö fr = Cuisine malgache @@ -7654,6 +7902,7 @@ de = Malaysisch el = Μαλαισιανή es = Cocina malaya + et = Malaisia eu = Malay sukaldaritza fi = Malesialainen keittiö fr = Cuisine malaisienne @@ -7687,6 +7936,7 @@ de = Mediterran el = Μεσογειακή es = Cocina mediterránea + et = Vahemere eu = Sukaldaritza mediterraneoa fi = Välimeren keittiö keittiö fr = Cuisine méditerranéenne @@ -7720,6 +7970,7 @@ de = Mexikanisch el = Μεξικάνικη es = Cocina mexicana + et = Mehhiko eu = Mexikoko sukaldea fi = Meksikolainen keittiö fr = Cuisine mexicaine @@ -7753,6 +8004,7 @@ de = Marokkanisch el = Μαροκινή es = Cocina marroquí + et = Maroko eu = Marokoko sukaldaritza fi = Marokkolainen keittiö fr = Cuisine marocaine @@ -7786,6 +8038,7 @@ de = Nudeln el = Χυλοπίτες es = Tallarines + et = Nuudlid eu = Fideoak fi = Nuudeli fr = Nouilles @@ -7820,6 +8073,7 @@ de = Orientalisch el = Άπω Ανατολής es = Cocina oriental + et = Kaug-Ida eu = Ekialdeko sukaldaritza fi = Itämainen keittiö fr = Cuisine orientale @@ -7853,6 +8107,7 @@ de = Pfannkuchen el = Τηγανίτα es = Tortitas + et = Pannkook eu = Krepeak fi = Lettu fr = Crêpe @@ -7886,6 +8141,7 @@ de = Pasta el = Ζυμαρικά es = Pastas + et = Pasta eu = Pasta fi = Pasta fr = Pâtes @@ -7920,6 +8176,7 @@ de = Persisch el = Περσική es = Cocina persa + et = Pärsia eu = Persiar sukaldaritza fi = Persialainen keittiö fr = Cuisine persane @@ -7953,6 +8210,7 @@ de = Peruanisch el = Περουβιανή es = Cocina peruana + et = Peruuvia eu = Peruko sukaldaritza fi = Perulainen keittiö fr = Cuisine péruvienne @@ -7986,6 +8244,7 @@ de = Pizza el = Πίτσα es = Pizzas + et = Pizza eu = Pizza fi = Pitsa fr = Pizza @@ -8020,6 +8279,7 @@ de = Polnisch el = Πολωνέζικη es = Cocina polaca + et = Poola eu = Poloniar sukaldaritza fi = Puolalainen keittiö fr = Cuisine polonaise @@ -8053,6 +8313,7 @@ de = Portugiesisch el = Πορτογαλική es = Cocina portuguesa + et = Portugali eu = Portugalgo sukaldaritza fi = Portugalilainen keittiö fr = Cuisine portugaise @@ -8086,6 +8347,7 @@ de = Ramen el = Ράμεν es = Ramen + et = Ramen eu = Ramen fi = Ramen fr = Râmen @@ -8119,6 +8381,7 @@ de = Regional el = Περιφερειακή es = Cocina regional + et = Piirkondlik eu = Eskualdeko sukaldaritza fi = Alueellinen keittiö fr = Cuisine régionale @@ -8153,6 +8416,7 @@ de = Russisch el = Ρώσσικη es = Cocina rusa + et = Vene eu = Errusiar sukaldaritza fi = Venäläinen keittiö fr = Cuisine russe @@ -8186,6 +8450,7 @@ de = Sandwich el = Σάντουιτς es = Sándwiches + et = Võileib eu = Ogitartekoak fi = Voileipä fr = Sandwich @@ -8220,6 +8485,7 @@ de = Wurst el = Λουκάνικο es = Salchichas + et = Vorst eu = Saltxitxak fi = Makkara fr = Saucisse @@ -8253,6 +8519,7 @@ de = Herzhafte Pfannkuchen el = Αλμυρές τηγανίτες es = Tortitas saladas + et = Soolased pannkoogid eu = Krepe gaziak fi = Suolaiset letut fr = Crêpes salées @@ -8286,6 +8553,7 @@ de = Meeresfrüchte el = Θαλασσινά es = Mariscos + et = Mereannid eu = Itsaskiak fi = Meren elävät fr = Fruits de mer @@ -8320,6 +8588,7 @@ de = Soba el = Σόμπα (λεπτά μακαρόνια) es = Soba + et = Soba eu = Soba fi = Sobanuudeli fr = Soba @@ -8353,6 +8622,7 @@ de = Spanisch el = Ισπανική es = Cocina española + et = Hispaania eu = Espainiako Sukaldaritza fi = Espanjalainen keittiö fr = Cuisine espagnole @@ -8386,6 +8656,7 @@ de = Steakhaus el = Μπριζολάδικο es = Asador + et = Liharestoran eu = Txu fi = Pihviravintola fr = Grillades @@ -8419,6 +8690,7 @@ de = Sushi el = Σούσι es = Sushi + et = Sushi eu = Sushia fi = Sushi fr = Sushi @@ -8452,6 +8724,7 @@ de = Tapas el = Τάπας es = Tapas + et = Tapas eu = Txapelak fi = Tapas fr = Tapas @@ -8485,6 +8758,7 @@ de = Tee el = Τσάι es = Té + et = Tee eu = Tea fi = Tee fr = Thé @@ -8519,6 +8793,7 @@ de = Thailändisch el = Ταϊλανδική es = Cocina tailandesa + et = Tai eu = Thai sukaldaritza fi = Thaimaalainen keittiö fr = Cuisine thaï @@ -8552,6 +8827,7 @@ de = Türkisch el = Τουρκική es = Cocina turca + et = Türgi eu = Turkiar sukaldaritza fi = Turkkilainen keittiö fr = Cuisine turque @@ -8585,6 +8861,7 @@ de = Vegan el = Για χορτοφάγους es = Cocina vegana + et = Vegan eu = Sukaldaritza beganoa fi = Vegaani keittiö fr = Cuisine végétalienne @@ -8618,6 +8895,7 @@ de = Vegetarisch el = Χορτοφαγική es = Cocina vegetariana + et = Taimetoit eu = Sukaldaritza begetarianoa fi = Kasvis keittiö fr = Cuisine végétarienne @@ -8652,6 +8930,7 @@ de = Vietnamesisch el = Βιετναμέζικη es = Cocina vietnamita + et = Vietnami eu = Vietnamgo sukaldaritza fi = Vietnamilainen keittiö fr = Cuisine vietnamienne @@ -8681,6 +8960,7 @@ en = Emergency ar = طوارئ de = Notfall + et = Hädaabi fr = Urgence it = Emergenza mr = आणीबाणी @@ -8701,6 +8981,7 @@ de = Defibrillator el = Πρώτες βοήθειες es = Desfibrilador + et = Defibrillaator eu = Desfibriladorea fa = دستگاه شوک fi = Defibrillaattori @@ -8735,6 +9016,7 @@ de = Hydrant el = Πυροσβεστικός κρουνός es = Boca de incendio + et = Tuletõrjehüdrant eu = Suteen hidrantea fa = شیر آتش‌نشانی fi = Paloposti @@ -8769,6 +9051,7 @@ de = Notruftelefon el = Τηλέφωνο έκτακτης ανάγκης es = Teléfono de emergencia + et = Hädaabi telefon eu = Larrialdi zenbakia fa = تلفن اضطراری fi = Hätäpuhelin @@ -8803,6 +9086,7 @@ de = Eingang el = Είσοδος es = Entrada + et = Sissepääs eu = Sarrera fa = ورودی fi = Sisäänkäynti @@ -8839,6 +9123,7 @@ de = Medizinisches Labor el = Ιατρικό Εργαστήριο es = Laboratorio médico + et = Meditsiinilabor eu = Medikuntza laborategia fa = ﯽﮑﺷﺰﭘ ﻩﺎﮕﺸﯾﺎﻣﺯﺁ fi = Lääketieteellinen laboratorio @@ -8912,6 +9197,7 @@ en = Highway ar = طريق السريع de = Straße + et = Maantee it = Via ja = 道路 mr = महामार्ग @@ -8927,6 +9213,7 @@ [type.highway.bridleway] en = Bridle Path de = Reitweg + et = Valjarada fr = Chemin pour cavalier it = sentiero per cavalli ja = 馬道 @@ -8965,6 +9252,7 @@ de = Bushaltestelle el = Στάση λεωφορείου es = Parada de autobús + et = Bussipeatus eu = Autobus geltokia fa = حمل و نقل fi = Bussipysäkki @@ -9000,6 +9288,7 @@ el = Οδός υπό κατασκευή es = Carretera en construcción es-MX = Carretera en construcción + et = Ehitusjärgus tee eu = Eraikitzen ari diren errepidea fa = جاده در دست ساخت است fi = Rakenteilla oleva tie @@ -9032,6 +9321,7 @@ ar = مسار للدراجات de = Radweg es = Ciclovía + et = Jalgrattatee eu = Bizikletabidea fr = Piste cyclable it = Pista ciclabile @@ -9049,6 +9339,7 @@ [type.highway.cycleway.bridge] ref = type.highway.road.bridge + et = Jalgrattasild ja = 自転車道(橋) nl = Fietsbrug pl = Most drogowy dla rowerów @@ -9056,11 +9347,13 @@ [type.highway.cycleway.permissive] ref = type.highway.cycleway + et = Piiratud jalgrattatee pl = Droga rowerowa ograniczona pt-BR = Caminho para ciclistas permissivo [type.highway.cycleway.tunnel] ref = type.highway.road.tunnel + et = Jalgratta tunnel ja = 自転車道(トンネル) nl = Fietstunnel pl = Tunel drogowy dla rowerów @@ -9072,6 +9365,7 @@ ar = مِصعَد de = Aufzug es = Ascensor + et = Lift eu = Igogailua fr = Ascenseur it = Ascensore @@ -9091,6 +9385,7 @@ el = Διαδρομή es = Camino es-MX = Camino + et = Jalgrada eu = Bidea fa = مسیر fi = Polku @@ -9120,6 +9415,7 @@ [type.highway.footway.alpine_hiking] ref = type.highway.path de = Alpinwanderweg + et = Alpi matkarada nl = Alpine wandelpad pl = Ścieżka wspinaczkowa pt = Caminho pedonal @@ -9130,6 +9426,7 @@ ref = type.highway.footway en = Pedestrian Zone ar = منطقة مشاة + et = Jalakäijate ala mr = पादचारी झोन nl = Voetgangerszone pl = Obszar chodnika @@ -9141,6 +9438,7 @@ [type.highway.footway.bridge] ref = type.highway.road.bridge en = Pedestrian Bridge + et = Jalakäijate sild ar = جسر للمشاة mr = पादचारी पूल nl = Voetgangersbrug @@ -9151,6 +9449,7 @@ [type.highway.footway.demanding_alpine_hiking] ref = type.highway.path de = Anspruchsvoller Alpinwanderweg + et = Nõudlik alpi matkarada nl = Uitdagend alpine bergklimpad pt = Caminho pedonal pt-BR = Caminho pedonal difícil @@ -9167,6 +9466,7 @@ [type.highway.footway.difficult_alpine_hiking] ref = type.highway.path de = Schwieriger Alpinwanderweg + et = Nõudlik mägimatkarada nl = Moeilijk alpine bergklimpad pt = Caminho pedonal pt-BR = Caminho pedonal difícil @@ -9175,6 +9475,7 @@ [type.highway.footway.hiking] ref = type.highway.path de = Wanderweg + et = Rada nl = Wandelpad pt = Caminho pedonal pt-BR = Caminho pedonal @@ -9183,6 +9484,7 @@ [type.highway.footway.mountain_hiking] ref = type.highway.path de = Bergwanderweg + et = Mägirada nl = Bergpad pt = Caminho pedonal pt-BR = Caminho pedonal @@ -9194,6 +9496,7 @@ [type.highway.footway.tunnel] ref = type.highway.road.tunnel en = Pedestrian Tunnel + et = Jalakäijate tunnel ar = نفق للمشاة de = Fußgängertunnel mr = पादचारी बोगदा @@ -9211,6 +9514,7 @@ el = Πέρασμα es = Vado (de lugar) es-MX = Vado (de lugar) + et = Koolmekoht eu = Ford (lekukoa) fa = گدار fi = Kahluupaikka @@ -9244,6 +9548,7 @@ de = Spielstraße el = Οδός es = Calle + et = Elamupiirkonna tänav eu = Kalea fa = جاده fi = Katu @@ -9276,6 +9581,7 @@ [type.highway.living_street.tunnel] ref = type.highway.road.tunnel de = Spielstraßentunnel + et = Tänavatunnel pl = Tunel ulicy pt-BR = Túnel rodoviário @@ -9287,6 +9593,7 @@ de = Autobahn el = Οδός es = Calle + et = Kiirtee eu = Kalea fa = جاده fi = Katu @@ -9317,6 +9624,7 @@ ref = type.highway.road.bridge en = Motorway Bridge de = Autobahnbrücke + et = Mootorrataste sild mr = महामार्ग पूल nl = Snelwegbrug pl = Most drogowy @@ -9327,6 +9635,7 @@ ref = type.highway.road.tunnel en = Motorway Tunnel de = Autobahntunnel + et = Kiirtee tunnel mr = महामार्ग बोगदा nl = Snelwegtunnel pl = Tunel drogowy @@ -9341,6 +9650,7 @@ de = Autobahnausfahrt el = Έξοδος es = Salida + et = Väljumistee eu = Irteera fa = تقاطع fi = Poistumistie @@ -9369,6 +9679,7 @@ ref = type.highway.motorway en = Motorway Ramp de = Autobahnauffahrt + et = Kiirtee kaldtee it = Svincolo autostradale mr = महामार्ग उतार nl = Snelwegoprit @@ -9394,6 +9705,7 @@ de = Weg el = Διαδρομή es = Camino + et = Rada eu = Bidea fa = مسیر fi = Polku @@ -9423,6 +9735,7 @@ [type.highway.path.alpine_hiking] ref = type.highway.path de = Alpinwanderweg + et = Alpi matkarada nl = Alpine wandelpad pl = Ścieżka wspinaczkowa pt-BR = Caminho pedonal @@ -9432,6 +9745,7 @@ en = Cycle & Foot Path ar = مسار للمشاة والدراجات معاً de = Radweg + et = Jalgratta- ja jalgtee mr = सायकल आणि पाऊलवाट nl = Fietspad pl = Ścieżka dla rowerów @@ -9446,21 +9760,25 @@ [type.highway.path.demanding_alpine_hiking] ref = type.highway.path de = Anspruchsvoller Alpinwanderweg + et = Nõudlik alpi matkarada pt-BR = Caminho pedonal difícil [type.highway.path.demanding_mountain_hiking] ref = type.highway.path de = Anspruchsvoller Bergwanderweg + et = Nõudlik mägimatkarada pt-BR = Caminho pedonal difícil [type.highway.path.difficult_alpine_hiking] ref = type.highway.path de = Schwieriger Alpinwanderweg + et = Raske alpi matkarada pt-BR = Caminho pedonal difícil [type.highway.path.hiking] ref = type.highway.path de = Wanderweg + et = Rada nl = Wandelpad pt-BR = Caminho pedonal @@ -9468,6 +9786,7 @@ ref = type.highway.path en = Bridle Path de = Reitweg + et = Valjarada nl = Ruiterpad pt-BR = Caminho para cavaleiros ru = Конная тропа @@ -9477,6 +9796,7 @@ [type.highway.path.mountain_hiking] ref = type.highway.path de = Bergwanderweg + et = Mägitee nl = Bergpad pt-BR = Caminho pedonal @@ -9494,6 +9814,7 @@ de = Fußgängerzone el = Οδός es = Calle + et = Jalakäijate tänav eu = Kalea fa = جاده fi = Katu @@ -9523,6 +9844,7 @@ [type.highway.pedestrian.area] ref = type.highway.pedestrian en = Pedestrian Zone + et = Jalakäijate ala it = Area pedonale mr = पादचारी झोन ru = Пешеходная зона @@ -9533,6 +9855,7 @@ [type.highway.pedestrian.bridge] ref = type.highway.road.bridge en = Pedestrian Bridge + et = Jalakäijate sild mr = पादचारी पूल nl = Voetgangersbrug pl = Most pasażu pieszego @@ -9542,6 +9865,7 @@ [type.highway.pedestrian.tunnel] ref = type.highway.road.tunnel en = Pedestrian Tunnel + et = Jalakäijate tunnel de = Fußgängertunnel mr = पादचारी बोगदा nl = Voetgangerstunnel @@ -9557,6 +9881,7 @@ de = Hauptstraße el = Οδός es = Calle + et = Esmane tee eu = Kalea fa = جاده fi = Katu @@ -9589,12 +9914,14 @@ [type.highway.primary.tunnel] ref = type.highway.road.tunnel de = Hauptstraßentunnel + et = Peatee tunnel pl = Tunel drogowy pt-BR = Túnel rodoviário [type.highway.primary_link] ref = type.highway.primary en = Primary Road Ramp + et = Esmase tee kaldtee mr = प्राथमिक मार्ग उतार pt-BR = Saída de rodovia ru = Съезд с шоссе @@ -9616,6 +9943,7 @@ de = Rennbahn el = Πίστα αγώνων es = Circuito + et = Võistlusrada eu = Zirkuitua fa = کانال fi = Kilparata @@ -9650,6 +9978,7 @@ de = Wohnstraße el = Οδός es = Calle + et = Tänav eu = Kalea fa = جاده fi = Katu @@ -9685,6 +10014,7 @@ [type.highway.residential.tunnel] ref = type.highway.road.tunnel de = Wohnstraßentunnel + et = Elamupirkonna tänava tunnel pt-BR = Túnel residencial [type.highway.rest_area] @@ -9695,6 +10025,7 @@ de = Rastplatz el = Χώρος ανάπαυσης αυτοκινητιστών es = Área de descanso + et = Puhkeala eu = Atseden gunea fi = Levähdyspaikka fr = Aire de repos @@ -9728,6 +10059,7 @@ de = Straße el = Οδός es = Calle + et = Maantee eu = Kalea fa = جاده fi = Katu @@ -9765,6 +10097,7 @@ de = Brücke el = Γέφυρα es = Puente + et = Sild es-MX = Puente eu = Zubia fa = پل @@ -9806,6 +10139,7 @@ el = Σήραγγα es = Túnel es-MX = Túnel + et = Tunnel eu = Tunel fa = تونل fi = Tunneli @@ -9842,6 +10176,7 @@ de = Straße el = Οδός es = Calle + et = Teisene tee eu = Kalea fa = جاده fi = Katu @@ -9874,12 +10209,14 @@ [type.highway.secondary.tunnel] ref = type.highway.road.tunnel de = Straßentunnel + et = Tänava tunnel pl = Tunel drogowy pt-BR = Túnel rodoviário [type.highway.secondary_link] ref = type.highway.secondary en = Secondary Road Ramp + et = Teisese tee kaldtee mr = दुय्यम मार्ग उतार pt-BR = Saída de rodovia ru = Съезд с автодороги @@ -9893,6 +10230,7 @@ [type.highway.secondary_link.tunnel] ref = type.highway.road.tunnel de = Straßentunnel + et = Tänava tunnel pl = Tunel drogowy pt-BR = Túnel rodoviário @@ -9904,6 +10242,7 @@ de = Straße el = Οδός es = Calle + et = Hooldustee eu = Kalea fa = جاده fi = Katu @@ -9935,12 +10274,14 @@ [type.highway.service.bridge] ref = type.highway.road.bridge + et = Maanteesild pl = Most drogowy [type.highway.service.driveway] ref = type.highway.service en = Driveway de = Zufahrt + et = Sissesõidutee mr = चालकमार्ग pt-BR = Via de acesso ru = Подъезд @@ -9951,6 +10292,7 @@ [type.highway.service.parking_aisle] ref = type.highway.service en = Parking Aisle + et = Parkla vahetee fr = Allée mr = पार्किंग गल्ली pl = Miejsca parkingowe @@ -9965,12 +10307,14 @@ [type.highway.service.tunnel] ref = type.highway.road.tunnel de = Straßentunnel + et = Tänava tunnel pl = Tunel drogowy pt-BR = Túnel rodoviário [type.highway.services] en = Service Area de = Raststätte + et = Teenindusala fr = Aire de service ja = サービスエリア mr = सेवा क्षेत्र @@ -9992,6 +10336,7 @@ de = Blitzer el = Κάμερα ταχύτητας es = Radar de velocidad + et = Kiiruskaamera eu = Abiadura kamera fa = دوربین سرعت سنج fi = Nopeusvalvontakamera @@ -10026,6 +10371,7 @@ de = Stufen el = Διαδρομή es = Camino + et = Trepp eu = Bidea fa = مسیر fi = Polku @@ -10066,6 +10412,7 @@ de = Straße el = Οδός es = Calle + et = Tänav eu = Kalea fa = جاده fi = Katu @@ -10129,6 +10476,7 @@ de = Straße el = Οδός es = Calle + et = Rada eu = Kalea fa = جاده fi = Katu @@ -10196,6 +10544,7 @@ de = Verkehrsampel el = Φανάρια κυκλοφορίας es = Semáforos + et = Valgusfoor eu = Semaforoak fa = چراغ راهنما fi = Liikennevalot @@ -10230,6 +10579,7 @@ de = Schnellstraße el = Οδός es = Calle + et = Magistraaltee eu = Kalea fa = جاده fi = Katu @@ -10290,6 +10640,7 @@ de = Straße el = Οδός es = Calle + et = Vähetähtis tee eu = Kalea fa = جاده fi = Katu @@ -10330,12 +10681,14 @@ [type.area_highway.cycleway] ref = type.highway.cycleway + et = Jalgrattatee fi = Pyörätie pt-BR = Caminho para ciclistas [type.area_highway.footway] ref = type.highway.footway de = Weg + et = Käigutee fi = Kävelytie [type.area_highway.living_street] @@ -10352,6 +10705,7 @@ [type.area_highway.pedestrian] ref = type.highway.pedestrian + et = Jalakäigutee fi = Kävelykatu pt-BR = Caminho pedonal @@ -10372,6 +10726,7 @@ [type.area_highway.steps] ref = type.highway.steps + et = Trepp fi = Portaat nl = Trappen pt-BR = Travessia @@ -10405,6 +10760,7 @@ de = Historisches Objekt el = Ιστορικό αντικείμενο es = Objeto histórico + et = Ajalooline objekt eu = Objektu historikoa fa = شیء تاریخی fi = Historiallinen esine @@ -10442,6 +10798,7 @@ de = Ausgrabungsstätte el = Αρχαιολογικός χώρος es = Yacimiento arqueológico + et = Arheoloogiline koht eu = Aztarnategi arkeologikoa fa = گردشگری fi = Arkeologinen kohde @@ -10479,6 +10836,7 @@ de = Schlachtfeld el = Πεδίο μάχης es = Campo de batalla + et = Lahinguväli eu = Gudu zelai fa = میدان جنگ fi = Taistelukenttä @@ -10516,6 +10874,7 @@ de = Grenzstein el = Οριακή πέτρα es = Hito fronterizo + et = Piirikivi eu = Zedarri fa = نشانگر مرز fi = Rajamerkki @@ -10553,6 +10912,7 @@ de = Burg el = Κάστρο es = Castillo + et = Loss eu = Gaztelu fa = قلعه fi = Linna @@ -10590,6 +10950,7 @@ de = Römisches Militärlager el = Ρωμαϊκό κάστρο es = Castrum + et = Rooma kindlus eu = Castrum fa = قلعه رومی fi = Castra @@ -10627,6 +10988,7 @@ de = Burg el = Κάστρο es = Castillo + et = Kindlus eu = Gaztelu fa = قلعه fi = Linna @@ -10664,6 +11026,7 @@ de = Wehrkirche el = Οχυρωμένη εκκλησία es = Iglesia fortificada + et = Kindlustatud kirik eu = Eliza-gotorleku fa = کلیسای مستحکم fi = Linnoitettu kirkko @@ -10701,6 +11064,7 @@ de = Festung el = Φρούριο es = Fortaleza + et = Kindlus eu = Gotorlekua fa = قلعه fi = Linnoitus @@ -10738,6 +11102,7 @@ de = Wallburg el = Φρούριο es = Castro + et = Linnus eu = Kastro fa = تپه‌قلعه fi = Linnavuori @@ -10775,6 +11140,7 @@ de = Kreml el = Κρεμλίνο es = Kremlin + et = Kreml eu = Kremlina fa = کرملین fi = Kreml @@ -10812,6 +11178,7 @@ de = Herrenhaus el = Αρχοντικό es = Casa solariega + et = Mõisahoone eu = Jauregitxo fa = خانه ارباب یا صاحب تیول fi = Kartano @@ -10849,6 +11216,7 @@ de = Palais el = Παλάτι es = Palacio + et = Palee eu = Jauregi fa = کاخ fi = Palatsi @@ -10886,6 +11254,7 @@ de = Japanische Burg el = Ιαπωνικό κάστρο es = Castillo japonés + et = Jaapani loss eu = Japoniar gaztelu fa = قلعه ژاپنی fi = Japanilainen linna @@ -10923,6 +11292,7 @@ de = Schloss el = Κάστρο es = Castillo + et = Loss eu = Gaztelua fa = گردشگری fi = Linna @@ -10960,6 +11330,7 @@ de = Stadttor el = Πύλη της πόλης es = Puerta de la ciudad + et = Linnavärav eu = Portale fa = دروازه شهر fi = Kaupungin portti @@ -10997,6 +11368,7 @@ de = Stadtmauer el = Τείχος της πόλης es = Muro de la ciudad + et = Linnamüür eu = Hiri harresia fa = دیوار شهر fi = Kaupungin muuri @@ -11034,6 +11406,7 @@ de = Fort el = Φορτ es = Fuerte + et = Kindlus eu = Gotorlekua fa = دژ fi = Fort @@ -11071,6 +11444,7 @@ de = Galgen el = Αγχόνη es = Horca + et = Võllas eu = Urkamendi fa = چوبه دار fi = Sappeja @@ -11108,6 +11482,7 @@ de = Denkmal el = Μνημείο es = Monumento conmemorativo + et = Memoriaal eu = Memorial fa = گردشگری fi = Muistomerkki @@ -11145,6 +11520,7 @@ de = Gedenkkreuz el = Σταυρός μνήμης es = Cruz conmemorativa + et = Mälestusrist eu = Oroimenezko gurutzea fa = صلیب یادبود fi = Muistoristi @@ -11183,6 +11559,7 @@ de = Gedenktafel el = Μνημείο es = Placa conmemorativa + et = Mälestusmärk eu = Oroitzapenezko plaka fa = گردشگری fi = Muistomerkki @@ -11220,6 +11597,7 @@ de = Skulptur el = Μνημείο es = Escultura + et = Skulptuur eu = Eskultura fa = گردشگری fi = Muistomerkki @@ -11257,6 +11635,7 @@ de = Statue el = Μνημείο es = Estatua + et = Kuju eu = Estatua fa = گردشگری fi = Muistomerkki @@ -11294,6 +11673,7 @@ de = Stolperstein el = Λίθοι Μνήμης es = Stolperstein + et = Komistuskivi eu = Stolperstein fa = سنگ مانع fi = Kompastuskivet @@ -11331,6 +11711,7 @@ de = Kriegerdenkmal el = Μνημείο του Αγνώστου Στρατιώτη es = Monumento a la guerra + et = Sõjamemoriaal eu = Gerra memoriala fa = رزم‌یاد fi = Sotamuistomerkki @@ -11368,6 +11749,7 @@ de = Monument el = Μνημείο es = Monumento + et = Monument eu = Monumentua fa = گردشگری fi = Monumentti @@ -11404,6 +11786,7 @@ de = Pranger el = Κύφωνας es = Picota + et = Häbipost eu = Urkabe fa = تخته‌بند fi = Häpeäpaalu @@ -11441,6 +11824,7 @@ de = Ruine el = Ερείπια es = Ruinas + et = Varemed eu = Hondakinak fa = گردشگری fi = Rauniot @@ -11478,6 +11862,7 @@ de = Schiff el = Αξιοθέατο es = Turismo + et = Laev eu = Turismoa fa = گردشگری fi = Nähtävyydet @@ -11515,6 +11900,7 @@ de = Grabstätte el = Αξιοθέατο es = Tumba + et = Haud eu = Ehorztoki fa = گردشگری fi = Nähtävyydet @@ -11552,6 +11938,7 @@ de = Wegkreuz el = Σταυρός στην άκρη του δρόμου es = Cruz de término + et = Teeäärne rist eu = Bideko gurutze fa = صلیب کنار راه fi = Tienvarren risti @@ -11589,6 +11976,7 @@ de = Bildstock el = Εικονοστάσιο στην άκρη του δρόμου es = Peto de ánimas + et = Teeäärne pühamu eu = Bide bazterreko baseliza fa = حرم کنار راه fi = Tienvarren pyhäkkö @@ -11659,6 +12047,7 @@ en = Internet ar = إنترنت el = Ίντερνετ + et = Internet fa = وای فای ja = インターネット ko = 인터넷 @@ -11677,6 +12066,7 @@ en = Internet ar = إنترنت لا سلكي el = Ίντερνετ + et = Internet fa = وای فای ja = インターネット ko = 인터넷 @@ -11694,6 +12084,7 @@ [type.junction] en = Junction ar = تقاطع + et = Ristmik it = Incrocio ja = 交差点 mr = जंक्शन @@ -11711,6 +12102,7 @@ ar = دوّار de = Kreisverkehr es = Rotonda + et = Ringtee eu = Biribilgunea fr = Rond-point it = Rotonda @@ -11728,6 +12120,7 @@ [type.landuse] en = Landuse de = Landnutzung + et = Maakasutus ja = 土地利用 mr = भूमी उपयोग nl = Landgebruik @@ -11742,6 +12135,7 @@ [type.landuse.allotments] en = Allotments de = Kleingarten + et = Peenrad fr = Jardins familiaux ja = 市民農園 mr = वाटप @@ -11764,6 +12158,7 @@ de = Wasserbecken el = Μια λεκάνη νερού es = Cuenca + et = Bassein eu = Arroa fa = حوضه آب fi = Vesisäiliö @@ -11795,6 +12190,7 @@ [type.landuse.brownfield] en = Brownfield de = Brachfläche + et = Ehitusmaa fr = Friche industrielle ja = 再開発用地 pl = Teren do zabudowy @@ -11809,11 +12205,13 @@ comment = In most (European) countries, сemeteries are usually independent of places of worship (e.g. military cemeteries), while grave yards are usually the yard of a place of worship. ref = type.amenity.grave_yard en = Cemetery + et = Surnuaed nl = Begraafplaats [type.landuse.cemetery.christian] ref = type.amenity.grave_yard.christian en = Christian Cemetery + et = Kristlik surnuaed nl = Christelijke begraafplaats [type.landuse.churchyard] @@ -11825,6 +12223,7 @@ el = Αυλόγυρος εκκλησίας es = Camposanto es-MX = Camposanto + et = Kirikuõu eu = Hilerria fa = حیاط کلیسا fi = Kirkon piha @@ -11855,6 +12254,7 @@ en = Commercial Area ar = منطقة تجارية de = Gewerbegebiet + et = Kommertspiirkond fr = Zone commerciale it = Area commerciale ja = 商業用地 @@ -11872,6 +12272,7 @@ en = Construction ar = منطقة بناء de = Baustelle + et = Ehitus fr = Chantier de construction it = Cantiere ja = 建設工事中 @@ -11890,6 +12291,7 @@ ar = مؤسسات تعليمية be = Адукацыйныя ўстановы es = Instalaciones educativas + et = Haridusrajatised fr = Établissements éducatifs it = Strutture didattiche mr = शैक्षणिक सुविधा @@ -11903,6 +12305,7 @@ en = Farm ar = مزرعة de = Bauernhof + et = Talu ja = 農地 mr = शेत nl = Boerderij @@ -11923,6 +12326,7 @@ el = Αγροτική γη es = Tierras agrícolas es-MX = Terreno agrícola + et = Talumaa eu = Nekazaritza-lurra fa = زمین کشاورزی fi = Maatalousmaa @@ -11953,6 +12357,7 @@ [type.landuse.farmyard] en = Farmyard de = Landwirtschaftlich genutzte Fläche + et = Taluõu fr = Ferme it = Fattoria ja = 農地 @@ -11969,6 +12374,7 @@ en = Field ar = حقل de = Feld + et = Põld fr = Champ mr = क्षेत्र nl = Veld @@ -11987,6 +12393,7 @@ de = Wald el = Δάσος es = Bosque + et = Mets eu = Basoa fa = جنگل fi = Metsä @@ -12021,6 +12428,7 @@ de = Nadelwald el = Δάσος es = Bosque + et = Okaspuumets eu = Basoa fa = جنگل fi = Metsä @@ -12055,6 +12463,7 @@ de = Laubwald el = Δάσος es = Bosque + et = Heitlehine mets eu = Basoa fa = جنگل fi = Metsä @@ -12089,6 +12498,7 @@ de = Mischwald el = Δάσος es = Bosque + et = Segamets eu = Basoa fa = جنگل fi = Metsä @@ -12118,6 +12528,7 @@ [type.landuse.garages] en = Garages de = Garagen + et = Garaažid it = Garage ja = ガレージ mr = गराज @@ -12139,6 +12550,7 @@ el = Γκαζόν es = Césped es-MX = Césped + et = Muru eu = Belarra fa = چمن زار fi = Ruohikko @@ -12170,6 +12582,7 @@ en = Greenfield ar = مساحة خضراء de = Rohbauland + et = Ehituskrunt fr = Terrain vierge ja = 建設予定地 mr = हरितक्षेत्र @@ -12184,6 +12597,7 @@ [type.landuse.greenhouse_horticulture] en = Greenhouse de = Gewächshaus-Fläche + et = Kasvuhoone fr = Culture sous serre ja = 温室栽培 mr = हरितगृह @@ -12199,6 +12613,7 @@ en = Industrial Land ar = منطقة صناعية de = Industriegebiet + et = Tööstusmaa fr = Zone industrielle it = Zona industriale ja = 工業用地 @@ -12221,6 +12636,7 @@ el = Σκουπιδότοπος es = Vertedero es-MX = Vertedero + et = Prügila eu = Iraulketa fa = دفن گاه زباله fi = Kaatopaikka @@ -12251,6 +12667,7 @@ [type.landuse.meadow] en = Meadow de = Wiese + et = Heinamaa fr = Prairie it = Radura ja = 牧草地 @@ -12268,6 +12685,7 @@ en = Military Area ar = منطقة عسكرية de = Militärgebiet + et = Militaarala fr = Terrain militaire it = Area militare ja = 軍用地 @@ -12285,6 +12703,7 @@ en = Orchard ar = بستان de = Obstplantage + et = Viljapuuaed fr = Vergers it = Frutteto ja = 果樹園 @@ -12301,6 +12720,7 @@ [type.landuse.quarry] en = Quarry de = Steinbruch + et = Karjäär fr = Carrières it = Cava ja = 採石場 @@ -12323,6 +12743,7 @@ el = Σιδηροδρομικές εγκαταστάσεις es = Instalaciones ferroviarias es-MX = Estructuras ferroviarias + et = Raudtee ruumid eu = Trenbide instalazioak fa = محدوده راه آهن fi = Rautatierakennukset @@ -12353,6 +12774,7 @@ [type.landuse.recreation_ground] en = Recreation Ground de = Erholungsgebiet + et = Puhkeväljak it = Area divertimento ja = レクリエーション mr = मनोरंजन मैदान @@ -12373,6 +12795,7 @@ de = Wasserfläche el = Νερό es = Cuenca + et = Vesi eu = Arroa fa = اب fi = Vesi @@ -12402,6 +12825,7 @@ en = Residential Land ar = منطقة سكنية de = Wohngebiet + et = Elamumaa fr = Zone résidentielle it = Area residentiale ja = 住宅地 @@ -12419,6 +12843,7 @@ en = Retail Land ar = منطقة متاجر de = Einzelhandelsgebiet + et = Jaekaubandusmaa fr = Zone commerciale it = Area commerciale ja = 小売店エリア @@ -12436,6 +12861,7 @@ en = Pond ar = مستنقع de = Saline + et = Tiik fr = Marais salant it = Salina ja = 塩田 @@ -12451,6 +12877,7 @@ [type.landuse.village_green] en = Land de = Dorfplatz + et = Maa ja = 村の中心 mr = जमीन nl = Dorpspark @@ -12465,6 +12892,7 @@ en = Vineyard ar = حقل عنب de = Weinberg + et = Viinamarjaistandus fr = Vignes it = Vigne ja = ブドウ園 @@ -12481,6 +12909,7 @@ [type.leisure] en = Leisure de = Freizeit + et = Lõõgastus it = Tempo libero ja = レジャー mr = अवकाश @@ -12497,6 +12926,7 @@ en = Public Land en-GB = Common Land de = öffentliche Grünfläche + et = Avalik maa ja = レジャー(共有地) mr = सार्वजनिक जमीन nl = Openbare grond @@ -12516,6 +12946,7 @@ el = Περιοχή για βόλτα σκύλων es = Parque para perros es-MX = Lugar para pasear al perro + et = Koerte ala eu = Txakur parkea fa = محدوده مخصوص سگ fi = Koirien ulkoilupaikka @@ -12551,6 +12982,7 @@ de = Fitnessstudio el = Κέντρο γυμναστικής es = Centro de fitness + et = Spordikeskus eu = Fitness zentroa fa = باشگاه بدنسازی fi = Kuntosali @@ -12585,6 +13017,7 @@ de = Fitnessstation el = Γυμναστήριο es = Gimnasio + et = Välivõimla eu = Gimnasioa fa = پارک سلامت fi = Kuntokeskus @@ -12620,6 +13053,7 @@ de = Tanzsaal el = Αίθουσα χορού es = Salón de baile + et = Tantsusaal eu = Dantza Aretoa fa = ﺺﻗﺭ ﻦﻟﺎﺳ fi = Tanssisali @@ -12655,6 +13089,7 @@ de = Garten el = Κήπος αναψυχής es = Jardín + et = Aed eu = Lorategi fa = گردشگری fi = Puutarha @@ -12685,6 +13120,7 @@ ref = type.leisure.garden en = Residential Garden be = Частный сад + et = Elamu aed pl = Ogród przydomowy pt = Jardim residencial pt-BR = Jardim residencial @@ -12701,6 +13137,7 @@ de = Golfplatz el = Γήπεδο γκολφ es = Campo de golf + et = Golfirada eu = Golf kurtsoa fa = زمین گلف fi = Golf-rata @@ -12730,6 +13167,7 @@ [type.leisure.ice_rink] en = Ice Rink de = Eislaufplatz + et = Liuväli fr = Patinoire it = Pista di pattinaggio ja = アイスリンク @@ -12745,6 +13183,7 @@ [type.leisure.landscape_reserve] en = Landscape Reserve + et = Maastikukaitseala ja = 自然保護区 nl = Landschapsreservaat pl = Rezerwat krajobrazu @@ -12758,6 +13197,7 @@ en = Marina be = Прычал de = Jachthafen + et = Marina it = Porto turistico ja = マリーナ nl = Jachthaven @@ -12777,6 +13217,7 @@ el = Φυσικό απόθεμα es = Territorio reservado es-MX = Reserva + et = Looduskaitseala eu = Erreserbatutako lurraldea fi = Luonnonsuojelualue fr = Réserve naturelle @@ -12812,6 +13253,7 @@ el = Πάρκο es = Parque es-MX = Parque + et = Park eu = Parkea fa = پارک fi = Puisto @@ -12848,6 +13290,7 @@ el = Πάρκο es = Parque es-MX = Parque + et = Park eu = Parkea fa = پارک fi = Puisto @@ -12884,6 +13327,7 @@ el = Πάρκο es = Parque es-MX = Parque + et = Park eu = Parkea fa = پارک fi = Puisto @@ -12920,6 +13364,7 @@ el = Πάρκο es = Parque es-MX = Parque + et = Park eu = Parkea fa = پارک fi = Puisto @@ -12957,6 +13402,7 @@ de = Picknicktisch el = Τραπέζι πικ-νικ es = Mesa de picnic + et = Piknikulaud eu = Piknik mahaia fa = ﮏﯿﻨﮑﯿﭘ ﺰﯿﻣ fi = Piknik-pöytä @@ -12993,6 +13439,7 @@ de = Sportplatz el = Γήπεδο αθλοπαιδιών es = Complejo deportivo + et = Spordiväljak eu = Kiroldegia fa = زمین ورزشی fi = Urheilukenttä @@ -13027,6 +13474,7 @@ de = Spielplatz el = Παιδική χαρά es = Patio de recreo + et = Mänguväljak eu = Jolastokia fa = زمین بازی fi = Leikkikenttä @@ -13056,6 +13504,7 @@ [type.leisure.recreation_ground] en = Recreation Ground de = Freizeitgelände + et = Puhkeväljak mr = मनोरंजन मैदान nl = Recreatieterrein pl = Teren rekreacji @@ -13074,6 +13523,7 @@ el = Σάουνα es = Sauna es-MX = Sauna + et = Saun eu = Sauna fa = سونا fi = Sauna @@ -13103,6 +13553,7 @@ [type.leisure.slipway] en = Slipway de = Bootsrampe + et = Elling fr = Cale de lancement it = Scivolo per navi ja = スリップウェイ @@ -13123,6 +13574,7 @@ de = Sportzentrum el = Αθλητικό κέντρο es = Polideportivo + et = Spordikeskus eu = Kiroldegia fa = مرکزورزشی fi = Urheilukeskus @@ -13159,6 +13611,7 @@ de = Kletterhalle el = Κέντρο αναρρίχησης es = Centro de escalada + et = Ronimiskeskus eu = Eskalada zentroa fa = مرکز صعود fi = Kiipeilykeskus @@ -13194,6 +13647,7 @@ da = Yoga center el = Στούντιο γιόγκα es = Centro de yoga + et = Joogastuudio eu = Yoga zentroa fa = سالن یوگا fi = Joogastudio @@ -13227,6 +13681,7 @@ de = Stadion el = Γήπεδο es = Estadio + et = Staadion eu = Estadioa fa = استادیوم fi = Stadion @@ -13263,6 +13718,7 @@ de = Schwimmbecken el = Πισίνα es = Piscina + et = Ujumisbassein eu = Igerilekua fa = استخرشنا fi = Uima-allas @@ -13292,12 +13748,14 @@ [type.leisure.swimming_pool.private] ref = type.leisure.swimming_pool ar = مسبح خاص + et = Privaatne bassein it = Piscina privata nl = Privé zwembad [type.leisure.track] en = Track de = Laufbahn + et = Jooksurada fr = Piste de course it = Pista da corsa ja = トラック @@ -13318,6 +13776,7 @@ de = Aquapark el = Υδάτινο πάρκο es = Parque acuático + et = Veepark eu = Ur-parkea fa = گردشگری fi = Vesipuisto @@ -13347,6 +13806,7 @@ [type.leisure.beach_resort] en = Beach Resort ar = منتجع شاطئي + et = Rannakuurort mr = समुद्री रिसॉर्ट nl = Strandresort ru = Пляжный курорт @@ -13356,6 +13816,7 @@ [type.man_made] en = Man Made de = künstliche Anlage + et = Inimese loodud it = Stabilimento balneare ja = 構造物 mr = मानवनिर्मित @@ -13370,6 +13831,7 @@ [type.man_made.breakwater] en = Breakwater de = Wellenbrecher + et = Lainemurdja fr = Brise-lames it = Frangiflutti ja = 防波堤 @@ -13385,6 +13847,7 @@ [type.man_made.cairn] en = Cairn de = Steinhaufen + et = Karjäär ja = ケルン nl = Steengroeve pl = Kopiec @@ -13402,6 +13865,7 @@ de = Fabrikschornstein el = Καμινάδα εργοστασίου es = Chimenea de fábrica + et = Tehase korsten eu = Fabrikako tximinia fi = Tehtaan piippu fr = Cheminée d'usine @@ -13430,6 +13894,7 @@ [type.man_made.cutline] en = Cutline de = Schneise + et = Metsasiht fr = Layon ja = 森林の切れ目 nl = Bospad @@ -13446,6 +13911,7 @@ be = Геадэзічны пункт de = Vermessungspunkt el = Γεωδαιτικό σημείο + et = Uuringupunkt fr = Borne géodésique it = Punto geodetico ja = 測量標 @@ -13459,6 +13925,7 @@ en = Flagpole ar = سارية علم be = Флагшток + et = Lipumast fr = Mât de drapeau it = Alza bandiera mr = ध्वजस्तंभ @@ -13475,6 +13942,7 @@ de = Leuchtturm el = Φάρος es = Faro + et = Majakas eu = Itsasargia fa = گردشگری fi = Majakka @@ -13504,6 +13972,7 @@ [type.man_made.mast] en = Mast be = Мачта/вышка + et = Mast fr = Mât mr = डोलकाठी nl = Mast @@ -13515,6 +13984,7 @@ en = Pier ar = رصيف بحري de = Anlegestelle + et = Kai fr = Jetée it = Molo ja = 桟橋 @@ -13530,6 +14000,7 @@ [type.man_made.pipeline] en = Pipeline + et = Torujuhe it = Condotto ja = パイプライン mr = नळमार्ग @@ -13544,6 +14015,7 @@ [type.man_made.pipeline.overground] en = Overground Pipeline + et = Maapealne torujuhe ja = 地表のパイプライン mr = जमिनीवरील नळमार्ग nl = Bovengrondse pijpleiding @@ -13559,6 +14031,7 @@ ar = صومعة be = Сілас de = Silo + et = Elevaator it = Silo mr = पेव(धान्यसाठा) nl = Silo @@ -13571,6 +14044,7 @@ en = Storage Tank be = Рэзервуар de = Speichertank + et = Mahuti fr = Réservoir it = Cisterna mr = साठवण टाकी @@ -13588,6 +14062,7 @@ de = Überwachungskamera el = Κάμερα παρακολούθησης es = Cámara de vigilancia + et = Jälgimiskaamera eu = Zaintza Kamera fa = دوربین نظارتی fi = Valvontakamera @@ -13622,6 +14097,7 @@ de = Turm el = Πύργος es = Torre + et = Torn eu = Dorrea fa = برج fi = Torni @@ -13651,6 +14127,7 @@ [type.man_made.wastewater_plant] en = Wastewater treatment plant de = Kläranlage + et = Reoveepuhasti fr = Station d'épuration it = Impianto di trattamento delle acque reflue ja = 下水処理場 @@ -13672,6 +14149,7 @@ de = Wasserhahn el = Βρύση νερού es = Toma de agua + et = Veekraan eu = Ura hartzea fa = شیراب fi = Vesihana @@ -13706,6 +14184,7 @@ de = Wasserturm el = Υδατόπυργος es = Depósito de agua + et = Veetorn eu = Ur depositua fa = منبع اب fi = Vesitorni @@ -13740,6 +14219,7 @@ de = Brunnen el = Πηγάδι νερού es = Pozo + et = Vesiveski eu = Ur putzua fa = چاه اب fi = Kaivo @@ -13774,6 +14254,7 @@ de = Windmühle el = Ανεμόμυλος es = Molino + et = Tuuleveski eu = Haize-errota fa = توربین بادی fi = Tuulimylly @@ -13803,6 +14284,7 @@ [type.man_made.works] en = Industrial Works de = Fabrik + et = Vabrik it = Fabbrica ja = 工場 mr = औद्योगिक कामे @@ -13824,6 +14306,7 @@ en = Military ar = جيش de = Militärisches Objekt + et = Militaarobjekt it = Forze armate ja = 軍事 mr = लष्करी @@ -13842,6 +14325,7 @@ de = Bunker el = Στρατιωτική αποθήκη es = Búnker + et = Punker eu = Bunkerra fa = پناهگاه fi = Bunkkeri @@ -13866,6 +14350,7 @@ en = Mountain Pass be = Перавал de = Gebirgspass + et = Mäekuru fr = Col de montagne it = Passo mr = डोंगरवाट @@ -13884,6 +14369,7 @@ de = Natur el = Φύση es = Naturaleza + et = Loodus eu = Natura fa = طبیعت fi = Luonto @@ -13921,6 +14407,7 @@ de = Kahler Fels el = Γυμνός βράχος es = Roca desnuda + et = Paljas kivi eu = Harkaitz biluzi fa = سنگ برهنه fi = Paljas kallio @@ -13958,6 +14445,7 @@ de = Bucht el = Κόλπος es = Bahía + et = Laht eu = Badia fa = خلیج fi = Lahti @@ -13995,6 +14483,7 @@ de = Strand el = Παραλία es = Playa + et = Rand eu = Hondartza fa = ساحل fi = Ranta @@ -14032,6 +14521,7 @@ de = Sandstrand el = Αμμουδιά es = Playa de arena + et = Liivarand eu = Hondartza hondartza fa = ساحل شنی fi = Hiekkainen ranta @@ -14069,6 +14559,7 @@ de = Kiesstrand el = Παραλία Χαλίκι es = Playa de grava + et = Kruusarand eu = Legar Hondartza fa = ساحل شن fi = Soraranta @@ -14106,6 +14597,7 @@ de = Kap el = Ακρωτήρι es = Cabo + et = Neem eu = Lurmuturra fa = دماغه fi = Niemeke @@ -14143,6 +14635,7 @@ de = Höhle el = Σπήλαιο es = Cueva + et = Koobas eu = Haitzuloa fa = غار fi = Luola @@ -14180,6 +14673,7 @@ de = Klippe el = Γκρεμός es = Acantilado + et = Kalju eu = Labar fa = پرتگاه fi = Jyrkänne @@ -14217,6 +14711,7 @@ de = Steilabhang el = Γκρεμός es = Acantilado + et = Maa pank eu = Labarra fa = صخره fi = Kallio @@ -14254,6 +14749,7 @@ de = Damm el = Ανάχωμα es = Terraplén + et = Muldkeha eu = Lubeta fa = خاک‌ریز fi = Pengerrys @@ -14291,6 +14787,7 @@ de = Küste el = Ακτή es = Costa + et = Rannajoon eu = Itsasertz fa = کناره fi = Rannikko @@ -14328,6 +14825,7 @@ de = Wüste el = Ερημος es = Desierto + et = Kõrb eu = Basamortua fa = ﺮﯾﻮﮐ fi = Aavikko @@ -14356,6 +14854,7 @@ el = Θερμοπίδακας es = Geiser es-MX = Géiser + et = Geiser eu = Geyser fa = چشمه آب گرم fi = Geysir @@ -14395,6 +14894,7 @@ el = Παγετώνας es = Glaciar es-MX = Glaciar + et = Liustik eu = Glaziarra fa = یخچال طبیعی fi = Jäätikkö @@ -14433,6 +14933,7 @@ de = Grasland el = Βοσκότοποι es = Herbazal + et = Rohumaa eu = Belartza fa = علفزار fi = Nurmi @@ -14470,6 +14971,7 @@ de = Heide el = Ρείκι es = Brezal + et = Nurm eu = Zakardi fa = خلنگزار fi = Nummi @@ -14507,6 +15009,7 @@ de = Thermalquelle el = Ιαματικές πηγές es = Aguas termales + et = Kuumaveeallikas eu = Ur termal fa = چشمه آب‌گرم fi = Kuuma lähde @@ -14544,6 +15047,7 @@ de = See el = Λίμνη es = Lago + et = Järv eu = Lakua fa = دریاچه fi = Järvi @@ -14581,6 +15085,7 @@ de = Schleusenkammer el = Θάλαμος κλειδαριάς es = Cámara de bloqueo + et = Luku kamber eu = Sarraila Ganbera fa = ﻞﻔﻗ ﻕﺎﺗﺍ fi = Lukko kammio @@ -14618,6 +15123,7 @@ de = Teich el = Δεξαμενή es = Estanque + et = Tiik eu = Urmaela fa = تالاب fi = Lampi @@ -14655,6 +15161,7 @@ de = Reservoir el = Δεξαμενή es = Embalse + et = Veehoidla eu = Urtegia fa = مخزن fi = Säiliö @@ -14692,6 +15199,7 @@ de = Wasserbecken el = Μια λεκάνη νερού es = Cuenca + et = Bassein eu = Arroa fa = حوضه آب fi = Vesisäiliö @@ -14729,6 +15237,7 @@ de = Fluss el = Ποταμός es = Río + et = Jõgi eu = Ibai fa = رودخانه fi = Joki @@ -14766,6 +15275,7 @@ de = Land el = Στεριά es = Tierra + et = Maa eu = Lur lehor fa = خشکی fi = Maa @@ -14803,6 +15313,7 @@ de = Wiese el = Λιβάδι es = Prado + et = Heinamaa eu = Belardi fa = چمنزار fi = Niitty @@ -14840,6 +15351,7 @@ de = Garten el = Οπωρώνας es = Huerto frutal + et = Viljapuuaed eu = Baratzea fa = باغ میوه fi = Hedelmänviljely @@ -14877,6 +15389,7 @@ de = Gipfel el = Κορυφή es = Cima + et = Tipp eu = Goiena fa = قله fi = Huippu @@ -14914,6 +15427,7 @@ de = Bergsattel el = Σέλα Βουνού es = Silla de montaña + et = Mäesadul eu = Mendiko jarlekua fa = زین کوه fi = Vuoristo satula @@ -14951,6 +15465,7 @@ de = Fels el = Πέτρωμα es = Roca + et = Kivi eu = Arroka fa = سنگ fi = Kivi @@ -14989,6 +15504,7 @@ el = Θαμνώδες περιοχή es = Matorrales es-MX = Maleza + et = Võsa eu = Sastrakak fa = بوته زار fi = Tiheiköt @@ -15026,6 +15542,7 @@ de = Quelle el = Πηγή νερού es = Manantial + et = Allikas eu = Udaberria fa = چشمه fi = Lähde @@ -15064,6 +15581,7 @@ el = Πορθμός es = Estrecho es-MX = Estrecho + et = Väin eu = Estua fa = تنگه fi = Salmi @@ -15101,6 +15619,7 @@ de = Baum el = Δέντρο es = Árbol + et = Puu eu = Zuhaitza fa = درخت fi = Puu @@ -15138,6 +15657,7 @@ de = Allee el = Σειρά δέντρων es = Fila de árboles + et = Puude rida eu = Zuhaitz ilara fa = ردیف درخت fi = Puurivi @@ -15175,6 +15695,7 @@ de = Weinberg el = Αμπελώνας es = Viña + et = Viinamarjaistandus eu = Mahasti fa = تاکستان fi = Viinitila @@ -15212,6 +15733,7 @@ de = Vulkan el = Ηφαίστειο es = Volcán + et = Vulkaan eu = Sumendi fa = اتشفشان fi = Tulivuori @@ -15249,6 +15771,7 @@ de = Wasserfläche el = Σώμα νερού es = Cuerpo de agua + et = Veekogu eu = Ur-masa fa = پهنه آبی fi = Vesimuodostuma @@ -15287,6 +15810,7 @@ el = Υγρότοπος es = Terreno pantanoso es-MX = Tierra pantanosa + et = Märgala eu = Lur paduratsua fa = ناحیه تالابی fi = Suoperäinen seutu @@ -15324,6 +15848,7 @@ de = Moor el = Βάλτος es = Turbera + et = Raba eu = Zohikaztegi fa = خلاش fi = Suo @@ -15361,6 +15886,7 @@ de = Sumpf el = Έλος es = Ciénaga + et = Soo eu = Padura fa = مرداب fi = Marsh @@ -15390,6 +15916,7 @@ [type.noexit] en = Dead End + et = Tupiktee it = Strada senza uscita ja = 行き止まり mr = रस्ता बंद @@ -15409,6 +15936,7 @@ de = Büro el = Γραφείο es = Oficina + et = Kontor eu = Bulegoa fa = اداره fi = Toimisto @@ -15443,6 +15971,7 @@ de = Niederlassung el = Γραφείο επιχείρησης es = Oficina + et = Ettevõtte kontor eu = Bulegoa fa = دفتر شرکت fi = Yhtiön toimisto @@ -15477,6 +16006,7 @@ de = Immobilienmakler el = Κτηματομεσίτης es = Agente inmobiliario + et = Kinnisvara vahendaja eu = Higiezinen agentea fa = بنگاه معاملات ملکی fi = Kiinteistönvälittäjä @@ -15511,6 +16041,7 @@ de = Regierungsstelle el = Κυβερνητικό γραφείο es = Oficina gubernamental + et = Riigikantselei eu = Gobernu bulegoa fa = اداره دولتی fi = Viranomaistoimito @@ -15545,6 +16076,7 @@ de = Versicherungsbüro el = Ασφαλιστικό γραφείο es = Oficina de seguros + et = Kindlustusbüroo eu = Aseguru bulegoa fa = دفتر بیمه fi = Vakuutuslaitos @@ -15579,6 +16111,7 @@ de = Anwaltsbüro el = Δικηγόρος es = Despacho de abogados + et = Advokaat eu = Abokatu Bulegoa fa = دفتر وکالت fi = Lakitoimisto @@ -15613,6 +16146,7 @@ de = Nichtregierungsorganisation el = Γραφείο ΜΚΟ es = Sede de ONG + et = Valitsusväline organisatsioon eu = GKEen egoitza fa = دفتر سازمان خیریه fi = Valtioista riippumattoman järjestön toimisto @@ -15649,6 +16183,7 @@ de = Mobilfunkbetreiber el = Εταιρεία κινητής τηλεφωνίας es = Operadora de telefonía móvil + et = Telekommunikatsiooni ettevõte eu = Telefono mugikorren operadorea fa = اپراتور تلفن همراه fi = Matkapuhelinoperaattori @@ -15680,6 +16215,7 @@ be = Эка de = Bio es = Orgánico + et = Orgaaniline eu = Organikoa fr = Biologique it = Biologico @@ -15703,6 +16239,7 @@ de = Großstadt el = Πόλη es = Ciudad + et = Linn eu = Herria fa = شهر fi = Kaupunki @@ -15740,6 +16277,7 @@ de = Hauptstadt el = Πρωτεύουσα es = Capital + et = Pealinn eu = Hiriburu fa = پایتخت fi = Pääkaupunki @@ -15807,6 +16345,7 @@ de = Kontinent el = Ήπειρος es = Continente + et = Kontinent eu = Kontinentea fa = قاره fi = Maanosa @@ -15844,6 +16383,7 @@ de = Staat el = Χώρα es = País + et = Riik eu = Herrialdea fa = کشور fi = Maa @@ -15881,6 +16421,7 @@ de = Kreis el = Δήμος es = Municipio + et = Maakond eu = Udalerria fa = بخش fi = Lääni @@ -15918,6 +16459,7 @@ de = Bauernhof el = Αγρόκτημα es = Granja + et = Talu eu = Baserria fa = مزرعه fi = Maatila @@ -15956,6 +16498,7 @@ de = Weiler el = Χωριουδάκι es = Aldea + et = Külake eu = Herria fa = روستا fi = Pieni kylä @@ -15994,6 +16537,7 @@ de = Insel el = Νησί es = Isla + et = Saar eu = Uhartea fa = جزیره fi = Saari @@ -16031,6 +16575,7 @@ de = Kleine Insel el = Νησί es = Isla + et = Laid eu = Uhartea fa = جزیره fi = Saari @@ -16068,6 +16613,7 @@ de = Kleinstsiedlung el = Απομονωμένη κατοικία es = Vivienda aislada + et = Isoleeritud eluruum eu = Etxebizitza Isolatua fa = مسکن منزوی fi = Erillinen asunto @@ -16105,6 +16651,7 @@ de = Örtlichkeit el = Τοποθεσία es = Localidad + et = Paikkond eu = Kokapena fa = محله fi = Paikkakunta @@ -16142,6 +16689,7 @@ de = Stadtviertel el = Γειτονιά es = Vecindario + et = Naabruskond eu = Auzo fa = محله fi = Naapurusto @@ -16180,6 +16728,7 @@ de = Ozean el = Ωκεανός es = Océano + et = Ookean eu = Ozeanoa fa = اقیانوس fi = Valtameri @@ -16217,6 +16766,7 @@ de = Region el = Περιοχή es = Región + et = Piirkond eu = Eskualdea fa = منطقه fi = Alue @@ -16254,6 +16804,7 @@ de = Meer el = Θάλασσα es = Mar + et = Meri eu = Itsasoa fa = دریا fi = Meri @@ -16291,6 +16842,7 @@ de = Platz el = Πλατεία es = Plaza + et = Väljak eu = Plaza fa = میدان fi = Tori @@ -16328,6 +16880,7 @@ de = Bundesland el = Πολιτεία es = Estado + et = Provints eu = Baldintza fa = ایالت fi = Lääni @@ -16365,6 +16918,7 @@ de = Bundesstaat el = Πολιτεία es = Estado + et = Osariik eu = Baldintza fa = ایالت fi = Lääni @@ -16402,6 +16956,7 @@ de = Vorort el = Προάστιο es = Barrio + et = Äärelinn eu = Auzoa fa = حومه fi = Esikaupunki @@ -16439,6 +16994,7 @@ de = Kleinstadt el = Κωμόπολη es = Pueblo + et = Linn eu = Herria fa = شهر fi = Kaupunki @@ -16476,6 +17032,7 @@ de = Dorf el = Χωριό es = Pueblo + et = Küla eu = Herria fa = روستا fi = Kylä @@ -16507,6 +17064,7 @@ [type.power] en = Power de = Energie + et = Energia it = Elettricità ja = 電力 mr = शक्ती @@ -16521,6 +17079,7 @@ [type.power.generator] en = Generator de = Generator + et = Generaator it = Generatore ja = 発電機 mr = जनित्र(जनरेटर) @@ -16534,6 +17093,7 @@ [type.power.line] en = Power Line de = Hochspannungs-Freileitung + et = Elektriliin it = Cavo elettrico ja = 電力線 mr = विद्युत तार @@ -16549,6 +17109,7 @@ [type.power.line.underground] en = Underground Power Line de = Unterirdische Hochpannungsleitung + et = Maa-alune elektriliin ja = 地下電力線 mr = भूमिगत विद्युत तार nl = Ondergrondse hoogspanningsleiding @@ -16563,6 +17124,7 @@ [type.power.minor_line] en = Minor Power Line de = Nieder-/Mittelspannungsfreileitung + et = Madal-/Keskpinge elektriliin it = Cavo elettrico ja = 低圧電力線 mr = किरकोळ विद्युत तार @@ -16583,6 +17145,7 @@ de = Nieder-/Mittelspannungsmast el = Πυλώνες μεταφοράς ρεύματος es = Poste eléctrico + et = Elektripost eu = Zutabe elektrikoa fa = برج قدرت fi = Sähköpylväs @@ -16612,6 +17175,7 @@ [type.power.station] en = Power Station de = Umspannwerk + et = Elektrijaam ja = 変電所 mr = विद्युत घर nl = Transformatorstation @@ -16630,6 +17194,7 @@ de = Umspannwerk el = Υποσταθμός es = Subestación + et = Alajaam eu = Azpiestazioa fi = Muuntoasema fr = Poste électrique @@ -16663,6 +17228,7 @@ de = Hochspannungsmast el = Πυλώνες μεταφοράς ρεύματος es = Poste eléctrico + et = Elektripost eu = Zutabe elektrikoa fa = برج قدرت fi = Sähköpylväs @@ -16691,6 +17257,7 @@ [type.psurface] en = psurface + et = Pind it = Superficie nl = Wegdek ru = Поверхность @@ -16719,6 +17286,7 @@ en = Public Transport de = Öffentlicher Verkehr es = Transporte público + et = Ühistransport eu = Garraio publikoa it = Trasporto pubblico ja = 公共交通機関 @@ -16735,6 +17303,7 @@ [type.public_transport.platform] en = Platform + et = Platvorm ja = 公共交通機関のプラットホーム mr = फलाट nl = Platform @@ -16748,6 +17317,7 @@ [type.railway] en = Railway de = Eisenbahn + et = Raudtee fr = Chemin de fer it = Ferrovia ja = 鉄道 @@ -16765,6 +17335,7 @@ [type.railway.abandoned] en = Abandoned Railway de = Ehemalige Eisenbahnstrecke + et = Mahajäetud raudtee fr = Chemin de fer abandonné ja = 廃線 nl = Voormalig treinspoor @@ -16778,6 +17349,7 @@ [type.railway.abandoned.bridge] en = Abandoned Railway Bridge de = Ehemalige Eisenbahnbrücke + et = Mahajäetud sild fr = Chemin de fer abandonné ja = 廃線(橋) nl = Voormalige spoorbrug @@ -16791,6 +17363,7 @@ [type.railway.abandoned.tunnel] en = Abandoned Railway Tunnel de = Ehemaliger Eisenbahntunnel + et = Mahajäetud tunnel fr = Chemin de fer abandonné ja = 廃線(トンネル) nl = Voormalige spoortunnel @@ -16804,6 +17377,7 @@ [type.railway.construction] en = Railway Construction de = Eisenbahnstrecke im Bau + et = Raudtee ehitus fr = Chemin de fer en construction it = Binari in costruzione ja = 建設中の鉄道 @@ -16819,6 +17393,7 @@ [type.railway.crossing] en = Railway Crossing de = Bahnübergang + et = Raudtee ülesõit fr = Traversée de voie ferrée ja = 歩行者用踏切 mr = रेल्वे ओलांडणी @@ -16832,6 +17407,7 @@ [type.railway.disused] en = Disused railway de = Stillgelegte Bahnstrecke + et = Kasutamata raudtee fr = Chemin de fer désaffecté ja = 休止線 nl = Ongebruikt spoor @@ -16845,6 +17421,7 @@ [type.railway.funicular] en = Funicular de = Standseilbahn + et = Funikulöör fr = Funiculaire ja = ケーブルカー mr = हवाई रज्जुमार्ग @@ -16859,6 +17436,7 @@ [type.railway.funicular.bridge] en = Funicular Bridge de = Standseilbahnbrücke + et = Funikulöör fr = Funiculaire ja = ケーブルカー(橋) mr = हवाई रज्जुमार्ग @@ -16873,6 +17451,7 @@ [type.railway.funicular.tunnel] en = Funicular Tunnel de = Standseilbahntunnel + et = Funikulöör fr = Funiculaire ja = ケーブルカー(トンネル) mr = हवाई रज्जुमार्ग @@ -16887,6 +17466,7 @@ [type.railway.halt] ref = type.railway.station de = Haltepunkt + et = Murdepunkt pl = Przystanek kolejowy pt = Apeadeiro pt-BR = Ponto de parada @@ -16902,6 +17482,7 @@ el = Σιδηροδρομική διέλευση es = Cruce de ferrocarril es-MX = Cruce de ferrocarril + et = Raudteeületuskoht eu = Trenbide-pasagunea fa = تقاطع راه آهن fi = Rautatien tasoristeys @@ -16932,6 +17513,7 @@ [type.railway.light_rail] en = Light Rail de = Stadtbahn + et = Kergrööbas it = Metropolitana ja = ライトレール nl = Lightrail @@ -16945,6 +17527,7 @@ [type.railway.light_rail.bridge] en = Light Rail Bridge de = Stadtbahnbrücke + et = Kergrööbas - sild ja = ライトレール(橋) nl = Lightrail-brug pt = Metropolitano de superfície @@ -16957,6 +17540,7 @@ [type.railway.light_rail.tunnel] en = Light Rail Tunnel de = Stadtbahntunnel + et = Kergrööbas - tunnel ja = ライトレール(トンネル) nl = Lightrail-tunnel pt = Metropolitano de superfície @@ -16975,6 +17559,7 @@ el = Μονοαξονικός σιδηρόδρομος es = Tren de monorraíl es-MX = Monorraíl + et = Monorelss eu = Tren monoraila fa = مونوریل fi = Monorail (kohorata) @@ -17005,6 +17590,7 @@ [type.railway.monorail.bridge] en = Monorail Bridge de = Einschienenbahnbrücke + et = Monorelss - sild fr = Monorail ja = モノレール(橋) mr = एकरूळी @@ -17020,6 +17606,7 @@ [type.railway.monorail.tunnel] en = Monorail Tunnel de = Einschienenbahntunnel + et = Monorelss - tunnel fr = Monorail ja = モノレール(トンネル) mr = एकरूळी @@ -17035,6 +17622,7 @@ [type.railway.narrow_gauge] en = Narrow Gauge Rail de = Schmalspurbahn + et = Kitsarööpmeline raudtee ja = 狭軌鉄道 mr = अरुंदमापी रेल्वे nb = Smalsporet jernbane @@ -17049,6 +17637,7 @@ [type.railway.narrow_gauge.bridge] en = Narrow Gauge Rail Bridge de = Schmalspurbahnbrücke + et = Kitsarööpmelise raudtee sild ja = 狭軌鉄道(橋) mr = अरुंदमापी रेल्वे nl = Smalspoorbrug @@ -17062,6 +17651,7 @@ [type.railway.narrow_gauge.tunnel] en = Narrow Gauge Rail Tunnel de = Schmalspurbahntunnel + et = Kitsarööpmelise raudtee tunnel ja = ja = 狭軌鉄道(トンネル) mr = अरुंदमापी रेल्वे nl = Smalspoortunnel @@ -17076,6 +17666,7 @@ en = Railway Platform be = Чыгуначная платформа de = Bahnsteig + et = Raudteeplatvorm fr = Quai de gare ja = プラットホーム mr = रेल्वे फलाट @@ -17091,6 +17682,7 @@ [type.railway.preserved] en = Preserved Rail de = Museumsbahn + et = Muuseumiraudtee fr = Chemin de fer touristique ja = 保存鉄道 nb = Museumsjernbane @@ -17104,6 +17696,7 @@ [type.railway.preserved.bridge] en = Preserved Rail Bridge de = Museumsbahnbrücke + et = Muuseumiraudtee sild ja = 保存鉄道(橋) nl = Museumspoorbaanbrug pt = Ferrovia preservada @@ -17115,6 +17708,7 @@ [type.railway.preserved.tunnel] en = Preserved Rail Tunnel de = Museumsbahntunnel + et = Muuseumiraudtee tunnel ja = 保存鉄道(トンネル) nl = Museumspoorbaantunnel pt = Ferrovia preservada @@ -17132,6 +17726,7 @@ el = Σιδηρόδρομος es = Ferrocarril es-MX = Línea de ferrocarril + et = Raudtee eu = Trenbidea fa = راه آهن fi = Rautatie @@ -17162,6 +17757,7 @@ [type.railway.rail.bridge] en = Railway Bridge de = S-Bahn-Brücke + et = Raudtee sild fr = Chemin de fer ja = 鉄道(橋) mr = रेल्वे @@ -17177,6 +17773,7 @@ [type.railway.rail.motor_vehicle] en = Railway de = S-Bahn + et = Raudtee ja = 鉄道 mr = रेल्वे nl = Spoorweg @@ -17191,6 +17788,7 @@ [type.railway.rail.tunnel] en = Railway Tunnel de = S-Bahn-Tunnel + et = Raudtee tunnel fr = Chemin de fer ja = 鉄道(鉄道) mr = रेल्वे @@ -17206,6 +17804,7 @@ [type.railway.razed] en = Razed Rail de = Stillgelegte Eisenbahnstrecke + et = Eemaldatud raudtee ja = 撤去済の鉄道 nl = Verwijderde spoorbaan pt = Ferrovia removida @@ -17217,6 +17816,7 @@ [type.railway.siding] en = Siding Rail de = Ausweich-/Überholgleis + et = Raudtee haru ja = 側線 nl = Nevenspoor pt = Desvio de ferrovia @@ -17228,6 +17828,7 @@ [type.railway.siding.bridge] en = Siding Rail Bridge de = Ausweich-/Überholgleis + et = Raudtee haru sild ja = 側線(橋) nl = Nevenspoor-brug pt = Desvio de ferrovia @@ -17239,6 +17840,7 @@ [type.railway.siding.tunnel] en = Siding Rail Tunnel de = Ausweich-/Überholgleis + et = Raudtee haru tunnel ja = 側線(トンネル) nl = Nevenspoor-tunnel pt = Desvio de ferrovia @@ -17250,6 +17852,7 @@ [type.railway.spur] en = Spur Rail de = Anschlussgleis + et = Rööbastee ja = 引き込み線 nl = Zijspoor pt = Ramal de ferrovia @@ -17261,6 +17864,7 @@ [type.railway.spur.bridge] en = Spur Rail Bridge de = Anschlussgleis + et = Rööbastee sild ja = 引き込み線(橋) nl = Zijspoor-brug pt = Ramal de ferrovia @@ -17272,6 +17876,7 @@ [type.railway.spur.tunnel] en = Spur Rail Tunnel de = Anschlussgleis + et = Rööbastee tunnel ja = 引き込み線(トンネル) nl = Zijspoor-tunnel pt = Ramal de ferrovia @@ -17289,6 +17894,7 @@ el = Σιδηροδρομικός σταθμός es = Estación de tren es-MX = Estación de tren + et = Raudtee jaam eu = Tren geltokian fa = ایستگاه قطار fi = Rautatieasema @@ -17335,6 +17941,7 @@ de = U-Bahnstation el = Μετρό es = Metro + et = Metroo eu = Metroa fa = حمل و نقل fi = Metro @@ -17691,6 +18298,7 @@ en = Subway Line en-GB = Metro Line de = U-Bahn + et = Metrooliin fr = Ligne de métro it = Binari della metrò mr = भुयारी मार्गिका @@ -17705,6 +18313,7 @@ en = Subway Line Bridge en-GB = Metro Line Bridge de = U-Bahn-Brücke + et = Metrooliin - sild fr = Voie de métro mr = भुयारी मार्गिका nl = Metrobrug @@ -17718,6 +18327,7 @@ en = Subway Line Tunnel en-GB = Metro Line Tunnel de = U-Bahn-Tunnel + et = Metrooliin - tunnel fr = Voie de métro mr = भुयारी मार्गिका nl = Metrotunnel @@ -17737,6 +18347,7 @@ el = Είσοδος μετρό es = Entrada al metro es-MX = Entrada de metro + et = Metroo sissepääs eu = Metroko sarrera fa = ورودی مترو fi = Metron sisäänkäynti @@ -18093,6 +18704,7 @@ [type.railway.tram] en = Tram Line de = Straßenbahn + et = Trammiliin fr = Voie de tramway it = Binari del tram ja = トラム @@ -18109,6 +18721,7 @@ [type.railway.tram.bridge] en = Tram Line Bridge de = Straßenbahnbrücke + et = Trammiliini sild fr = Voie de tramway ja = トラム(橋) mr = ट्राम मार्गिका @@ -18124,6 +18737,7 @@ [type.railway.tram.tunnel] en = Tram Line Tunnel de = Straßenbahntunnel + et = Trammiliini tunnel fr = Voie de tramway ja = トラム(トンネル) mr = ट्राम मार्गिका @@ -18144,6 +18758,7 @@ de = Straßenbahnhaltestelle el = Στάση τραμ es = Parada de tranvía + et = Trammipeatus eu = Tranbiaren geltokia fa = ایستگاه قطار fi = Raitiovaunupysäkki @@ -18173,6 +18788,7 @@ [type.railway.yard] en = Railway Yard de = Abstellgleis + et = Raudtee hoov ja = ヤード mr = रेल्वे आवार nl = Rangeerterrein @@ -18186,6 +18802,7 @@ [type.railway.yard.bridge] en = Railway Yard Bridge de = Abstellgleis + et = Raudtee hoovi sild ja = ヤード(橋) mr = रेल्वे आवार nl = Rangeerterrein brug @@ -18199,6 +18816,7 @@ [type.railway.yard.tunnel] en = Railway Yard Tunnel de = Abstellgleis + et = Raudtee hoovi tunnel ja = ヤード(トンネル) mr = रेल्वे आवार nl = Rangeerterrein tunnel @@ -18212,6 +18830,7 @@ [type.route] en = route de = Route + et = Tee it = Percorso ja = ルート mr = मार्ग @@ -18225,6 +18844,7 @@ [type.route.ferry] en = Ferry de = Fähre + et = Praam fr = Trajet de ferry it = Traghetto ja = フェリー航路 @@ -18240,6 +18860,7 @@ [type.route.shuttle_train] en = Shuttle Train de = Shuttlezug + et = Kiirrong nl = Shuttle-trein pt = Rota de comboio vaivem pt-BR = Rota de trem vaivém @@ -18254,6 +18875,7 @@ de = Geschäft el = Κατάστημα es = Tienda + et = Pood eu = Denda fa = فروشگاه fi = Kauppa @@ -18288,6 +18910,7 @@ de = Spirituosengeschäft el = Κάβα es = Licorería + et = Alkoholipood eu = Likore-denda fa = فروشگاه fi = Alkoholikauppa @@ -18322,6 +18945,7 @@ de = Bäckerei el = Αρτοποιείο es = Panadería + et = Pagar eu = Okindegia fa = فروشگاه fi = Leipomo @@ -18356,6 +18980,7 @@ de = Schönheitssalon el = Σαλόνι αισθητικής es = Centro de belleza + et = Ilupood eu = Apaindegia fa = سالن زیبایی fi = Kauneushoitola @@ -18391,6 +19016,7 @@ de = Getränke el = Οινοπνευματώδη es = Bebidas + et = Joogid eu = Edariak fa = فروشگاه fi = Juomat @@ -18425,6 +19051,7 @@ de = Fahrradladen el = Κατάστημα ποδηλάτων es = Tienda de bicicletas + et = Jalgrattapood eu = Bizikleta denda fa = فروشگاه fi = Polkupyöräliike @@ -18458,6 +19085,7 @@ de = Wettbüro el = Πράκτορας στοιχημάτων es = Casa de apuestas + et = Kihlveokontor eu = Apustu etxea fa = صحافی fi = Kustantaja @@ -18488,6 +19116,7 @@ de = Büchergeschäft el = Βιβλιοπωλείο es = Librería + et = Raamatupood eu = Liburudenda fa = فروشگاه fi = Kirjakauppa @@ -18522,6 +19151,7 @@ de = Metzgerei el = Κρεοπωλείο es = Carnicería + et = Lihunik eu = Harategia fa = فروشگاه fi = Lihakauppias @@ -18556,6 +19186,7 @@ de = Autohaus el = Αντιπροσωπεία αυτοκινήτων es = Venta de coches + et = Autopood eu = Autoen salmenta fa = فروشگاه fi = Autokauppa @@ -18590,6 +19221,7 @@ de = Autoteile el = Εξαρτήματα αυτοκινήτου es = Piezas de automóvil + et = Autovaruosad eu = Autoen piezak fa = فروشگاه fi = Auton osat @@ -18624,6 +19256,7 @@ de = Autowerkstatt el = Συνεργείο αυτοκινήτων es = Taller + et = Autoremonditöökoda eu = Tailerra fa = تعمیرگاه ماشین fi = Autokorjaamo @@ -18658,6 +19291,7 @@ de = Reifenservice el = Βουλκανιζατέρ es = Reparación de neumáticos + et = Rehviparandus eu = Pneumatikoen konponketa fa = اپاراتی fi = Rengashuolto @@ -18687,6 +19321,7 @@ [type.shop.caravan] en = RV Dealership be = Продаж аўтадамоў + et = Haagiselamute müük fr = Concessionnaire de caravanes et camping-cars nl = Caravan en camper verkoper ru = Продажа автодомов @@ -18701,6 +19336,7 @@ de = Drogerie el = Χημικά προϊόντα es = Droguería + et = Apteegipood eu = Botika fa = فروشگاه fi = Kosmetiikkamyymälä @@ -18736,6 +19372,7 @@ de = Schokoladengeschäft el = Κατάστημα es = Tienda + et = Šokolaadipood eu = Denda fa = فروشگاه fi = Kauppa @@ -18770,6 +19407,7 @@ de = Bekleidungsgeschäft el = Κατάστημα ρούχων es = Tienda de ropa + et = Rõivapood eu = Arropa denda fa = لباس فروشی fi = Vaatekauppa @@ -18805,6 +19443,7 @@ de = Kaffeegeschäft el = Κατάστημα es = Tienda + et = Kohvipood eu = Denda fa = فروشگاه fi = Kauppa @@ -18839,6 +19478,7 @@ de = Computergeschäft el = Κατάστημα πληροφορικής es = Tienda de informática + et = Arvutipood eu = Denda informatikoa fa = فروشگاه fi = Tietokonekauppa @@ -18873,6 +19513,7 @@ de = Süßwarengeschäft el = Γλυκά es = Confitería + et = Maiustused eu = Gozogintza fa = فروشگاه fi = Makeiskauppa @@ -18907,6 +19548,7 @@ de = Gemischtwarenladen el = Ψιλικατζίδικο es = Tienda de barrio + et = Lähikauplus eu = Auzoko denda fa = فروشگاه fi = Lähikauppa @@ -18941,6 +19583,7 @@ de = Kopierladen el = Φωτοτυπείο es = Centro de copiado + et = Koopiapood eu = Kopiatu zentroa fa = فروشگاه چاپ و تکثیر fi = Painotalo @@ -18975,6 +19618,7 @@ de = Kosmetikgeschäft el = Καλλυντικά es = Productos cosméticos + et = Kosmeetika eu = Produktu kosmetikoak fa = فروشگاه fi = Kosmetiikka @@ -19011,6 +19655,7 @@ de = Feinkostgeschäft el = Κατάστημα Delicatessen es = Tienda de delicatessen + et = Delikatessipood eu = Delicatesen Denda fa = ﯽﺷﻭﺮﻓ ﻪﯾﺬﻏﺍ ﻩﺎﮕﺷﻭﺮﻓ fi = Herkkukauppa @@ -19046,6 +19691,7 @@ de = Kaufhaus el = Πολυκατάστημα es = Grandes almacenes + et = Kaubamaja eu = Denda handiak fa = مرکز خرید fi = Tavaratalo @@ -19080,6 +19726,7 @@ de = Baumarkt el = Είδη κιγκαλερίας es = Ferretería + et = Tööriistapood eu = Burdindegia fa = فروشگاه fi = Rautakauppa @@ -19114,6 +19761,7 @@ de = Chemische Reinigung el = Στεγνό καθάρισμα es = Tintorería + et = Keemiline pesu eu = Garbigailua fa = خشک شویی fi = Kuivapesula @@ -19148,6 +19796,7 @@ de = Elektronik el = Ηλεκτρονικά es = Electrónica + et = Elektroonika eu = Elektronika fa = فروشگاه fi = Elektroniikka @@ -19182,6 +19831,7 @@ de = Erotikladen el = Κατάστημα ερωτικών ειδών es = Sex Shop + et = Erootikapood eu = Sexu denda fa = فروشگاه fi = Erotiikkaliike @@ -19215,6 +19865,7 @@ de = Textilgeschäft el = Κατάστημα es = Tienda + et = Vabrikupood eu = Denda fa = فروشگاه fi = Kauppa @@ -19251,6 +19902,7 @@ de = Hoflebensmittelladen el = Κατάστημα Αγροτικών Τροφίμων es = Tienda de alimentos de granja + et = Talutoitude pood eu = Baserriko Janari Denda fa = ﻪﻋﺭﺰﻣ ﯽﯾﺍﺬﻏ ﺩﺍﻮﻣ ﻩﺎﮕﺷﻭﺮﻓ fi = Maatilaruokakauppa @@ -19286,6 +19938,7 @@ de = Florist el = Ανθοπωλείο es = Floristería + et = Lillepood eu = Loradenda fa = فروشگاه fi = Floristi @@ -19321,6 +19974,7 @@ de = Bestattungsinstitut el = Γραφεία τελετών es = Funeraria + et = Matusekorraldajad eu = Tanatorioa fa = مسئول تشییع جنازه fi = Hautaustoimisto @@ -19355,6 +20009,7 @@ de = Möbelgeschäft el = Κατάστημα επίπλων es = Tienda de muebles + et = Mööblipood eu = Altzari denda fa = فروشگاه fi = Huonekalukauppa @@ -19389,6 +20044,7 @@ de = Gärtnerei el = Κατάστημα ειδών κήπου es = Vivero + et = Aianduspood eu = Haurtzaindegia fa = فروشگاه fi = Taimitarha @@ -19423,6 +20079,7 @@ de = Geschenkladen el = Είδη δώρου es = Tienda de regalos + et = Kingipood eu = Denda fa = فروشگاه fi = Lahjatavaraliike @@ -19457,6 +20114,7 @@ de = Gemüseladen el = Μανάβικο es = Frutería + et = Köögiviljapood eu = Fruta denda fa = فروشگاه fi = Vihanneskauppias @@ -19493,6 +20151,7 @@ de = Lebensmittelgeschäft el = Παντοπωλείο es = Tienda de comestibles + et = Toidukaubad eu = Janariak fa = ﺭﺎﺑﺭﺍﻮﺧ fi = Päivittäistavarakauppa @@ -19528,6 +20187,7 @@ de = Friseur el = Κομμωτής es = Peluquería + et = Juuksur eu = Barber-denda fa = ارایشگاه fi = Kampaamo @@ -19561,6 +20221,7 @@ bg = Магазин за хардуер el = Κατάστημα υλικού eu = Hardware denda + et = Isetegemise tööriistad fa = ﺭﺍﺰﻓﺍ ﺖﺨﺳ ﻩﺎﮕﺷﻭﺮﻓ fr = Quincaillerie he = ןיינב ירמוחל תונח @@ -19590,6 +20251,7 @@ de = Reformhaus el = Κατάστημα υγιεινής διατροφής es = Tienda de comida saludable + et = Tervisetoitude pood eu = Osasuneko Elikagaien Denda fa = ﯽﺘﺷﺍﺪﻬﺑ ﯽﯾﺍﺬﻏ ﺩﺍﻮﻣ ﻩﺎﮕﺷﻭﺮﻓ fi = Terveysruokakauppa @@ -19628,6 +20290,7 @@ de = Haushaltswarengeschäft el = Κατάστημα οικιακών ειδών es = Tienda de artículos para el hogar + et = Majatarbed eu = Etxeko tresneria denda fa = ﯽﮕﻧﺎﺧ ﻡﺯﺍﻮﻟ ﻩﺎﮕﺷﻭﺮﻓ fi = Taloustavarakauppa @@ -19662,6 +20325,7 @@ de = Juweliergeschäft el = Κοσμηματοπωλείο es = Joyería + et = Ehted eu = Bitxiak fa = طلا فروشی fi = Korukauppa @@ -19693,6 +20357,7 @@ ar = كشك el = Περίπτερο es = Quiosco + et = Kiosk eu = Kioskoa fa = دَکهِ fi = Kioski @@ -19725,6 +20390,7 @@ de = Küchengeschäft el = Κατάστημα κουζίνας es = Tienda de cocina + et = Köögipood eu = Sukalde-denda fa = ﻪﻧﺎﺧﺰﭙﺷﺁ ﻩﺎﮕﺷﻭﺮﻓ fi = Keittiökauppa @@ -19760,6 +20426,7 @@ de = Wäscherei el = Άπλυτα es = Lavandería + et = Pesu eu = Garbitegia fa = لباس شویی fi = Pesula @@ -19794,6 +20461,7 @@ de = Einkaufszentrum el = Εμπορικό κέντρο es = Centro comercial + et = Kaubanduskeskus eu = Merkataritza-gune fa = فروشگاه fi = Ostoskeskus @@ -19827,6 +20495,7 @@ de = Massagesalon el = Αίθουσα μασάζ es = Salón de masajes + et = Massaažisalong eu = Masaje gela fa = سالن ماساژ fi = Hierontahuone @@ -19862,6 +20531,7 @@ de = Handyladen el = Κινητή Τηλεφωνία es = Móviles + et = Mobiiltelefonid eu = Mugikorra fa = فروشگاه fi = Elektroniikkakauppa @@ -19897,6 +20567,7 @@ de = Geldverleiher el = Κατάστημα es = Tienda + et = Rahalaenutaja eu = Denda fa = فروشگاه fi = Kauppa @@ -19931,6 +20602,7 @@ de = Motorradladen el = Κατάστημα μοτοσυκλετών es = Tienda de motos + et = Mootorrattapood eu = Moto denda fa = فروشگاه fi = Moottoripyöräliike @@ -19966,6 +20638,7 @@ de = Musikgeschäft el = Κατάστημα es = Disquería + et = Plaadipood eu = Denda fa = فروشگاه fi = Kauppa @@ -20001,6 +20674,7 @@ de = Musikinstrumenteladen el = Κατάστημα es = Tienda + et = Muusikariistad eu = Denda fa = فروشگاه fi = Kauppa @@ -20035,6 +20709,7 @@ de = Zeitungsstand el = Εφημεριδοπώλης es = Puesto de venta de periódicos + et = Ajalehe stend eu = Kioskoa fa = فروشگاه fi = Lehtikioski @@ -20069,6 +20744,7 @@ de = Optiker el = Κατάστημα οπτικών es = Óptica + et = Optik eu = Optika fa = فروشگاه fi = Optikko @@ -20103,6 +20779,7 @@ de = Outdoor-Ausrüstung el = Εξοπλισμός υπαίθρου es = Equipamiento + et = Välisvarustus eu = Ekipamendua fa = فروشگاه fi = Ulkoiluvarusteet @@ -20140,6 +20817,7 @@ de = Gebäck el = Ζύμη es = Pastelería + et = Pagar eu = Gozogintza fa = ﯽﻨﯾﺮﯿﺷ fi = Leivonnainen @@ -20175,6 +20853,7 @@ de = Pfandleihe el = Ενεχυροδανειστήριο es = Casa de empeños + et = Pandimaja eu = Peoia fa = عتیقه فروشی fi = Panttilainaamo @@ -20208,6 +20887,7 @@ de = Tierhandlung el = Κατάστημα για κατοικίδια es = Tienda de mascotas + et = Lemmikloomapood eu = Animali denda fa = فروشگاه fi = Eläinkauppa @@ -20242,6 +20922,7 @@ de = Fotofachgeschäft el = Φωτογραφείο es = Artículos de fotografía + et = Fotopood eu = Argazkilaritza artikuluak fa = فروشگاه fi = Valokuvakauppa @@ -20276,6 +20957,7 @@ de = Fischhändler el = Κατάστημα με θαλασσινά es = Pescadería + et = Mereandide pood eu = Arrain-denda fa = فروشگاه fi = Kalakauppias @@ -20312,6 +20994,7 @@ de = Second-Hand-Laden el = Κατάστημα μεταχειρισμένων es = Tienda de segunda mano + et = Taaskasutus eu = Bigarren eskuko denda fa = ﻡﻭﺩ ﺖﺳﺩ ﻩﺎﮕﺷﻭﺮﻓ fi = Second Hand Store @@ -20347,6 +21030,7 @@ de = Schuhgeschäft el = Υποδηματοπωλείο es = Zapatería + et = Kingapood eu = Zapata-denda fa = فروشگاه fi = Kenkäkauppa @@ -20381,6 +21065,7 @@ de = Sportartikel el = Αθλητικά είδη es = Artículos de deporte + et = Sporditarbed eu = Kirol artikuluak fa = فروشگاه fi = Urheilukauppa @@ -20415,6 +21100,7 @@ de = Schreibwarenladen el = Κατάστημα γραφικής ύλης es = Papelería + et = Kontoritarbed eu = Papergintza fa = لوازم التحریر fi = Kirjoitustarvikekauppa @@ -20448,6 +21134,7 @@ de = Supermarkt el = Σούπερ μάρκετ es = Supermercado + et = Supermarket eu = Supermerkatua fa = فروشگاه fi = Supermarketti @@ -20478,6 +21165,7 @@ de = Tattoo-Studio el = Τατουάζ es = Tatuajes + et = Tätoveerimissalong eu = Tatuajeak fa = سالن خالکوبی fi = Tatuointiliike @@ -20513,6 +21201,7 @@ de = Teegeschäft el = Κατάστημα es = Tienda + et = Teepood eu = Denda fa = فروشگاه fi = Kauppa @@ -20547,6 +21236,7 @@ de = Fahrkartenschalter el = Κατάστημα πώλησης εισιτηρίων es = Venta de entradas + et = Piletipood eu = Sarreren salmenta fa = فروشگاه fi = Lippumyymälä @@ -20581,6 +21271,7 @@ de = Spielzeuggeschäft el = Κατάστημα παιχνιδιών es = Tienda de juguetes + et = Mänguasjapood eu = Jostailu denda fa = فروشگاه fi = Lelukauppa @@ -20615,6 +21306,7 @@ de = Reisebüro el = Ταξιδιωτικό γραφείο es = Agencia de viajes + et = Reisibüroo eu = Bidai agentzia fa = اژانس مسافرتی fi = Matkatoimisto @@ -20649,6 +21341,7 @@ de = Reifen-Shop el = Βουλκανιζατέρ es = Tienda de neumáticos + et = Rehvipood eu = Pneumatikoen denda fa = فروشگاه fi = Rengasliike @@ -20683,6 +21376,7 @@ de = Billigladen el = Παντοπωλείο es = Tienda de Variedades + et = Odavpood eu = Barietate Denda fa = فروشگاه fi = Halpakauppa @@ -20718,6 +21412,7 @@ el = Βίντεο Κλαμπ es = Tienda de vídeo es-MX = Tienda de vídeo + et = Videopood eu = Bideo-denda fa = فروشگاه رسانه‌های تصویری fi = Videokauppa @@ -20754,6 +21449,7 @@ el = Κατάστημα βιντεοπαιχνιδιών es = Tienda de videojuegos es-MX = Tienda de videojuegos + et = Videomängude pood eu = Bideo-jokoen denda fa = فروشگاه بازی‌های رایانه‌ای fi = Videopelikauppa @@ -20789,6 +21485,7 @@ de = Wein- und Spirituosengeschäft el = Οινοπωλείο es = Tienda de vinos + et = Veinipood eu = Ardo-denda fa = فروشگاه fi = Alkoholimyymälä @@ -20825,6 +21522,7 @@ de = Antiquitäten el = Αντίκες es = Antigüedades + et = Antikvariaat eu = Antigoalekoak fa = ﺕﺎﺟ ﻪﻘﯿﺘﻋ fi = Antiikkia @@ -20862,6 +21560,7 @@ de = Kunstgeschäft el = Κατάστημα Τεχνών es = Tienda de artes + et = Kunstipood eu = Arte Denda fa = ﺮﻨﻫ ﻩﺎﮕﺷﻭﺮﻓ fi = Taidekauppa @@ -20899,6 +21598,7 @@ de = Babybedarf el = Παιδικό κατάστημα es = Tienda de niños + et = Lastekaubad eu = Haurrentzako denda fa = ﻥﺎﮐﺩﻮﮐ ﻩﺎﮕﺷﻭﺮﻓ fi = Lasten kauppa @@ -20936,6 +21636,7 @@ de = Taschen Shop el = Κατάστημα τσαντών es = Tienda de bolsos + et = Kotipood eu = Poltsen Denda fa = ﻒﯿﮐ ﻩﺎﮕﺷﻭﺮﻓ fi = Laukkukauppa @@ -20973,6 +21674,7 @@ de = Boutique el = Μπουτίκ es = Boutique + et = Butiik eu = Boutique fa = ﮏﯿﺗﻮﺑ fi = Boutique @@ -21010,6 +21712,7 @@ de = Wohltätigkeitsladen el = Φιλανθρωπικό κατάστημα es = Tienda de caridad + et = Heategevuspood eu = Ongintzazko Denda fa = ﻪﯾﺮﯿﺧ ﻩﺎﮕﺷﻭﺮﻓ fi = Hyväntekeväisyysmyymälä @@ -21047,6 +21750,7 @@ de = Käseladen el = Τυροκομείο es = Tienda de queso + et = Juustupood eu = Gazta Denda fa = ﺮﯿﻨﭘ ﻩﺎﮕﺷﻭﺮﻓ fi = Juustokauppa @@ -21084,6 +21788,7 @@ de = Kunst und Handwerk el = Τέχνες και χειροτεχνήματα es = Artes y manualidades + et = Kunst ja käsitöö eu = Arteak eta Eskulanak fa = ﯽﺘﺳﺩ ﻊﯾﺎﻨﺻ ﻭ ﺮﻨﻫ fi = Käsityöt @@ -21121,6 +21826,7 @@ de = Milchprodukte el = Γαλακτοκομικά προϊόντα es = Productos lácteos + et = Piimatooted eu = Esnekiak fa = ﯽﻨﺒﻟ ﺕﻻﻮﺼﺤﻣ fi = Maitotuotteet @@ -21158,6 +21864,7 @@ de = Elektrogeschäft el = Μαγαζί ηλεκτρικών ειδών es = Tienda de electricidad + et = Elektritarvete pood eu = Elektrizitate Denda fa = ﯽﮑﯾﺮﺘﮑﻟﺍ ﻡﺯﺍﻮﻟ ﻩﺯﺎﻐﻣ fi = Sähköliike @@ -21195,6 +21902,7 @@ de = Angelgeschäft el = Κατάστημα ψαρέματος es = Tienda de pesca + et = Kalanduspood eu = Arrantza Denda fa = ﯼﺮﯿﮕﯿﻫﺎﻣ ﻩﺎﮕﺷﻭﺮﻓ fi = Kalastuskauppa @@ -21232,6 +21940,7 @@ de = Innendekorationen el = Διακοσμήσεις εσωτερικών χώρων es = Decoraciones interiores + et = Sisekujunduse kaunistused eu = Barruko Apaingarriak fa = ﯽﻠﺧﺍﺩ ﻥﻮﯿﺳﺍﺭﻮﮐﺩ fi = Sisustuskoristeet @@ -21269,6 +21978,7 @@ de = Lotteriescheine el = Λαχεία es = Boletos de lotería + et = Loteriipiletid eu = Loteria Sarrerak fa = ﯽﯾﺎﻣﺯﺁ ﺖﺨﺑ ﻂﯿﻠﺑ fi = Lottoliput @@ -21306,6 +22016,7 @@ de = Medizinische Versorgung el = Ιατρικά Είδη es = Suministros médicos + et = Meditsiinitarbed eu = Medikuntza-hornidura fa = ﯽﮑﺷﺰﭘ ﻡﺯﺍﻮﻟ fi = Lääketieteellisiä tarvikkeita @@ -21343,6 +22054,7 @@ de = Nahrungsergänzungsmittel el = Συμπληρώματα Διατροφής es = Suplementos Nutricionales + et = Toidulisandid eu = Nutrizio osagarriak fa = ﯽﯾﺍﺬﻏ ﯼﺎﻫ ﻞﻤﮑﻣ fi = Ravintolisät @@ -21380,6 +22092,7 @@ de = Farben el = Βαφές es = Pinturas + et = Värvid eu = Margoak fa = ﺪﻨﮐ ﯽﻣ ﮓﻧﺭ fi = Maalit @@ -21417,6 +22130,7 @@ de = Parfümerie el = Αρωματοποιία es = Perfumería + et = Parfümeeria eu = Lurringintza fa = ﯼﺯﺎﺳﺮﻄﻋ fi = Hajuvedet @@ -21454,6 +22168,7 @@ de = Nähzubehör el = Είδη Ραπτικής es = Materiales de costura + et = Õmblustarbed eu = Josteko hornigaiak fa = ﯽﻃﺎﯿﺧ ﻡﺯﺍﻮﻟ fi = Ompelutarvikkeet @@ -21491,6 +22206,7 @@ de = Speichermiete el = Ενοικίαση αποθηκευτικού χώρου es = Alquiler de almacenamiento + et = Ladustuse rent eu = Biltegiratzeko alokairua fa = ﺭﺎﺒﻧﺍ ﻩﺭﺎﺟﺍ fi = Varastoinnin vuokraus @@ -21528,6 +22244,7 @@ de = Tabak el = Καπνός es = Tabaco + et = Tubakas eu = Tabakoa fa = ﻮﮐﺎﺒﻨﺗ fi = Tupakka @@ -21565,6 +22282,7 @@ de = Handelsbedarf el = Εμπόριο Προμήθειες es = Suministros comerciales + et = Kaubandustarvikud eu = Lanbideen hornidurak fa = ﻡﺯﺍﻮﻟ ﺕﺭﺎﺠﺗ fi = Kauppa tarvikkeita @@ -21602,6 +22320,7 @@ de = Uhren el = Ρολόγια es = Relojes + et = Kellad eu = Erlojuak fa = ﺖﻋﺎﺳ fi = Kellot @@ -21639,6 +22358,7 @@ de = Großhandelsgeschäft el = Κατάστημα χονδρικής es = Almacén al por mayor + et = Hulgimüügi pood eu = Handizkako denda fa = ﯽﺷﻭﺮﻓ ﻩﺪﻤﻋ ﻩﺎﮕﺷﻭﺮﻓ fi = Tukkukauppa @@ -21676,6 +22396,7 @@ de = Sport el = Αθλητισμός es = Deporte + et = Sport eu = Kirola fa = ورزش fi = Urheilu @@ -21714,6 +22435,7 @@ de = American Football el = αμερικάνικο ποδόσφαιρο es = Fútbol americano + et = Ameerika jalgpall eu = Futbola fa = فوتبال آمریکایی fi = Amerikkalainen jalkapallo @@ -21753,6 +22475,7 @@ el = Τοξοβολία es = Tiro al arco es-MX = Tiro al arco + et = Vibulaskmine eu = Arku-tiroa fa = تیراندازی با کمان fi = Jousiammunta @@ -21790,6 +22513,7 @@ el = Στίβος es = Atletismo es-MX = Atletismo + et = Kergejõustik eu = Atletismoa fa = ورزش fi = Yleisurheilu @@ -21827,6 +22551,7 @@ de = Australian Football el = Αυστραλιανό ποδόσφαιρο es = Fútbol australiano + et = Austraalia jalgpall eu = Australiako futbol araua fa = فوتبال استرالیایی fi = Australialainen jalkapallo @@ -21860,6 +22585,7 @@ de = Baseball el = Μπέιζμπολ es = Béisbol + et = Pesapall eu = Beisbol fa = بیسبال fi = Baseball @@ -21897,6 +22623,7 @@ el = Μπάσκετ es = Baloncesto es-MX = Baloncesto + et = Korvpall eu = Saskibaloia fa = بسکتبال fi = Koripallo @@ -21934,6 +22661,7 @@ de = Beachvolleyball el = Μπιτς βόλεϊ es = Voleibol de playa + et = Rannavõrkpall eu = Hondartza-bolei fa = والیبال ساحلی fi = Rantalentopallo @@ -21967,6 +22695,7 @@ be = Боўлз de = Bowls es = Bolos sobre hierba + et = Murukeegel fa = لعبة البولينج fi = Nurmikeilailu fr = Boulingrin @@ -21997,6 +22726,7 @@ de = Schach el = Σκάκι es = Ajedrez + et = Male eu = Xake fa = شطرنج fi = Shakki @@ -22031,6 +22761,7 @@ cs = Kriket de = Cricket es = Críquet + et = Kriket eu = Kilkerra fa = کریکت fi = Kriketti @@ -22063,6 +22794,7 @@ el = Κέρλινγκ es = Curling es-MX = Curling + et = Kurling eu = Curling fa = کرلینگ fi = Curling @@ -22101,6 +22833,7 @@ el = Ιππασία es = Equitación es-MX = Deporte hípico + et = Ratsasport eu = Zaldi-lasterketa fa = ورزش های سوارکاری fi = Hevosurheilu @@ -22139,6 +22872,7 @@ el = Γκολφ es = Golf es-MX = Golf + et = Golf eu = Golfa fa = گلف fi = Golf @@ -22175,6 +22909,7 @@ de = Gymnastik el = Γυμναστική es = Gimnasia + et = Võimlemine eu = Gimnasia fa = ژیمناستیک fi = Voimistelu @@ -22212,6 +22947,7 @@ el = Τόπι es = Balonmano es-MX = Balonmano + et = Käsipall eu = Eskubaloia fa = هندبال fi = Käsipallo @@ -22251,6 +22987,7 @@ el = Διάφορα αθλήματα es = Varios deportes es-MX = Varios deportes + et = Erinevad spordialad eu = Hainbat kirol fa = ورزش های مختلف fi = Erilaisia urheilulajeja @@ -22290,6 +23027,7 @@ el = Κατάδυση es = Submarinismo es-MX = Submarinismo + et = Sukeldusmiskoht eu = Urpekaritza fa = غواصی fi = Sukellus @@ -22327,6 +23065,7 @@ el = Κυνήγι es = Tiroteo es-MX = Tiroteo + et = Laskmine eu = Tiroketa fa = ورزش تیراندازی fi = Ammunta @@ -22364,6 +23103,7 @@ de = Skateboarding el = Σκέιτμπορντινγκ es = Monopatinaje + et = Rulasõit eu = Skateboarding fa = اسکیت‌بردینگ fi = Rullalautailu @@ -22401,6 +23141,7 @@ el = Χιονοδρόμια es = Esquí es-MX = Esquí + et = Suusatamine eu = Eskia fa = اسکی fi = Hiihto @@ -22438,6 +23179,7 @@ el = Ποδόσφαιρο es = Fútbol es-MX = Fútbol + et = Jalgpall eu = Futbola fa = فوتبال fi = Jalkapallo @@ -22475,6 +23217,7 @@ de = Schwimmen el = Κολύμβηση es = Natación + et = Ujumine eu = Igeriketa fa = شنا fi = Uinti @@ -22513,6 +23256,7 @@ de = Tischtennis el = Επιτραπέζια αντισφαίριση es = Tenis de mesa + et = Lauatennis eu = Mahai-tenis fa = تنیس روی میز fi = Pöytätennis @@ -22552,6 +23296,7 @@ el = Γήπεδο τένις es = Cancha de tenis es-MX = Cancha de tenis + et = Tenniseväljak eu = Tenis kantxa fa = زمین تنیس fi = Tenniskenttä @@ -22590,6 +23335,7 @@ de = Volleyball el = Πετοσφαίριση es = Voleibol + et = Võrkpall eu = Boleibol fa = والیبال fi = Lentopallo @@ -22627,6 +23373,7 @@ de = Bowling el = Μπόουλινγκ es = Bowling + et = Bowling eu = Bowling fa = بولینگ fi = Keilailu @@ -22667,6 +23414,7 @@ de = Padel el = Padel es = Pádel + et = Padel eu = Padel fa = ﻝﺩﺎﭘ fi = Padel @@ -22703,6 +23451,7 @@ de = Futsal el = Futsal es = Futsal + et = Futsal eu = Areto-futbola fa = ﻝﺎﺴﺗﻮﻓ fi = Futsal @@ -22739,6 +23488,7 @@ de = Eishockey el = Χόκεϊ στον παγο es = Hockey sobre hielo + et = Jäähoki eu = Izotz hockey fa = ﺦﯾ ﯼﻭﺭ ﯽﮐﺎﻫ fi = Jääkiekko @@ -22775,6 +23525,7 @@ de = Feldhockey el = Χόκεϊ επί χόρτου es = Hockey sobre césped + et = Maahoki eu = Belar hockey fa = ﻦﻤﭼ ﯼﻭﺭ ﯽﮐﺎﻫ fi = Maahockey @@ -22811,6 +23562,7 @@ de = Badminton el = Αντιπτέριση es = Bádminton + et = Badminton eu = Badminton fa = ﻥﻮﺘﻨﯿﻣﺪﺑ fi = Sulkapallo @@ -22847,6 +23599,7 @@ de = Pelota Vasca el = Βασκική πελότα es = Pelota vasca + et = Baski pelota eu = Eusko pilota fa = ﯽﮑﺳﺎﺑ ﯼﺎﺗﻮﻠﭘ fi = Baskimaan pelota @@ -22877,6 +23630,7 @@ en = Tourism de = Tourismus es = Turismo + et = Turism eu = Turismoa fi = Turismi it = Turismo @@ -22900,6 +23654,7 @@ de = Berghütte el = Ορεινό καταφύγιο es = Cabaña + et = Mägimajutus eu = Kabina fi = Vuorimajoitus fr = Refuge de montagne @@ -22932,6 +23687,7 @@ de = Ferienwohnung el = Διαμερίσματα es = Apartamentos + et = Korterid eu = Apartamentuak fa = اپارتمان fi = Loma-asunnot @@ -22966,6 +23722,7 @@ de = Kunstwerk el = Έργα τέχνης es = Obras de arte + et = Kunstiteos eu = Artelanak fa = گردشگری fi = Taideteos @@ -23000,6 +23757,7 @@ de = Kunstwerk el = Έργα τέχνης es = Obras de arte + et = Kunstiteos - arhitektuur eu = Artelanak fa = گردشگری fi = Taideteos @@ -23034,6 +23792,7 @@ de = Gemälde el = Έργα τέχνης es = Obras de arte + et = Kunstiteos - maal eu = Artelanak fa = گردشگری fi = Taideteos @@ -23068,6 +23827,7 @@ de = Skulptur el = Έργα τέχνης es = Obras de arte + et = Kunstiteos - skulptuur eu = Artelanak fa = گردشگری fi = Taideteos @@ -23102,6 +23862,7 @@ de = Statue el = Έργα τέχνης es = Obras de arte + et = Kunstiteos - kuju eu = Artelanak fa = گردشگری fi = Taideteos @@ -23136,6 +23897,7 @@ de = Sehenswürdigkeit el = Αξιοθέατα es = Atracción turística + et = Turismiatraktsioon eu = Erakarpen turistikoa fa = گردشگری fi = Nähtävyys @@ -23164,6 +23926,7 @@ [type.tourism.attraction.animal] ref = type.tourism.attraction en = Animal enclosure + et = Loomade aedik it = Recinto ja = 動物 nl = Dierenverblijf @@ -23179,6 +23942,7 @@ de = Zeltplatz el = Κάμπινγκ es = Campamento + et = Telkimine eu = Kanpalekua fa = محل چادر زنی fi = Retkeily @@ -23210,6 +23974,7 @@ de = Wohnwagenstellplatz el = Χώρος για τροχόσπιτα es = Zona de caravanas + et = Haagiselamute park eu = Karabana gunea fi = Asuntovaunupaikka fr = Aire de camping-car @@ -23241,6 +24006,7 @@ de = Ferienhaus el = Σαλέ es = Chalé + et = Suvila eu = Txaleta fa = هتل fi = Alppimaja @@ -23272,6 +24038,7 @@ de = Galerie el = Αξιοθέατο es = Turismo + et = Galerii eu = Turismoa fa = گالری fi = Nähtävyydet @@ -23306,6 +24073,7 @@ de = Gästehaus el = Ξενώνας es = Casa de huéspedes + et = Külalistemaja eu = Ostatua fa = هتل fi = Majatalo @@ -23338,6 +24106,7 @@ de = Herberge el = Πανδοχείο es = Albergue juvenil + et = Hostel eu = Gazteen aterpetxea fa = هتل fi = Hostelli @@ -23364,6 +24133,7 @@ ar = فندق de = Hotel el = Ξενοδοχείο + et = Hotell fa = هتل fi = Hotelli fr = Hôtel @@ -23395,6 +24165,7 @@ de = Touristeninformation el = Τουριστικές πληροφορίες es = Información + et = Turistiinfo eu = Informazioa fa = گردشگری fi = Turisti-informaatio @@ -23433,6 +24204,7 @@ de = Informationstafel el = Πίνακας πληροφοριών es = Tablón de información + et = Infotahvel eu = Informazio taula fa = گردشگری fi = Informaatio @@ -23470,6 +24242,7 @@ de = Wegweiser el = Οδηγός es = Poste indicador + et = Juhtpost eu = Gida postua fa = تابلو راهنما fi = Tienviitta @@ -23508,6 +24281,7 @@ de = Touristenkarte el = Τουριστικός χάρτης es = Mapa turístico + et = Turistikaart eu = Mapa turistikoa fa = گردشگری fi = Turistikartta @@ -23545,6 +24319,7 @@ de = Fremdenverkehrsamt el = Ενημέρωση τουριστών es = Oficina de turismo + et = Turismiinfo eu = Turismo bulegoa fa = گردشگری fi = Turistitoimisto @@ -23578,6 +24353,7 @@ ar = فندق رخيص de = Motel el = Μοτέλ + et = Motell fa = هتل fi = Motelli it = Motel @@ -23602,6 +24378,7 @@ de = Museum el = Μουσείο es = Museo + et = Muuseum eu = Museoa fa = گردشگری fi = Museo @@ -23633,6 +24410,7 @@ de = Picknickplatz el = Χώρος εκδρομής es = Picnic + et = Piknikukoht eu = Piknika fa = مکان پیک نیک fi = Piknikpaikat @@ -23665,6 +24443,7 @@ cs = Letovisko de = Resort el = Θέρετρο + et = Kuurort fa = هتل fi = Lomakohteet fr = Complexe touristique @@ -23698,6 +24477,7 @@ de = Freizeitpark el = Αξιοθέατο es = Parque de atracciones + et = Teemapark eu = Parke tematiko fa = گردشگری fi = Huvipuisto @@ -23732,6 +24512,7 @@ de = Aussichtspunkt el = Θέα es = Vista panorámica + et = Vaatluskoht eu = Bista panoramikoa fa = گردشگری fi = Näköalatasanne @@ -23766,6 +24547,7 @@ de = Waldhütte el = Καλύβα es = Cabaña + et = Loodusonn eu = Kabina fa = کلبه‌ی صحرایی fi = Autiotupa @@ -23797,6 +24579,7 @@ cs = zoologická zahrada de = Zoo el = Ζωολογικός κήπος + et = Loomaaed fa = گردشگری fi = Eläintarha hu = Állatkert @@ -23823,6 +24606,7 @@ [type.traffic_calming] en = Traffic Calming de = Verkehrsberuhigung + et = Liikluse rahustamine it = Rallentatore della velocità ja = 交通静穏化 nl = Snelheidsmatigende maatregel @@ -23836,6 +24620,7 @@ [type.traffic_calming.bump] en = Traffic Bump de = kurze Bodenwelle + et = Liiklusee aeglustusmühk fi = Hidastetöyssy fr = Ralentisseur it = Dosso @@ -23852,6 +24637,7 @@ [type.traffic_calming.hump] en = Traffic Hump de = lange Bodenwelle + et = Liikluse aeglustussaar fr = Ralentisseur it = Dosso ja = スピードハンプ @@ -23866,6 +24652,7 @@ [type.waterway] en = Waterway de = Wasserweg + et = Veetee fi = Vesiväylä ja = 水域 mr = जलमार्ग @@ -23884,6 +24671,7 @@ da = Kanal de = Kanal el = Κανάλι + et = Kanal fa = کانال اب fi = Kanaali hu = Csatorna @@ -23914,6 +24702,7 @@ da = Kanal de = Kanal el = Κανάλι + et = Kanal fa = کانال اب fi = Kanaali hu = Csatorna @@ -23940,6 +24729,7 @@ [type.waterway.dam] en = Dam de = Staudamm + et = Tamm fi = Pato fr = Barrage it = Diga @@ -23956,6 +24746,7 @@ [type.waterway.ditch] en = Ditch de = Graben + et = Kraav fi = Oja fr = Fossé it = Fosso @@ -23976,6 +24767,7 @@ en = Waterway Dock de = Dock fi = Telakka + et = Veetee dokk fr = Cale it = Darsena ja = ドック @@ -23991,6 +24783,7 @@ [type.waterway.drain] en = Drain de = Abfluss + et = Kuivenduskraav it = Canale di scolo ja = 用水路 mr = नाला @@ -24013,6 +24806,7 @@ de = Schleusentor el = Φράγμα es = Compuerta + et = Lüüsi värav eu = Atea fi = Kanavasulku fr = Porte d'écluse @@ -24047,6 +24841,7 @@ de = Fluss el = Ποταμός es = Río + et = Jõgi eu = Ibai fa = رودخانه fi = Joki @@ -24085,6 +24880,7 @@ de = Flussufer el = Ποταμός es = Río + et = Jõgi eu = Ibai fa = رودخانه fi = Joki @@ -24120,6 +24916,7 @@ de = Bach el = Ποταμός es = Río + et = Oja eu = Ibai fa = رودخانه fi = Joki @@ -24155,6 +24952,7 @@ de = Bach el = Ποταμός es = Río + et = Jõgi eu = Ibai fa = رودخانه fi = Joki @@ -24190,6 +24988,7 @@ de = Bach el = Ποταμός es = Río + et = Jõgi eu = Ibai fa = رودخانه fi = Joki @@ -24227,6 +25026,7 @@ de = Wasserfall el = Καταρράκτης es = Cascada + et = Kosk eu = Ur-jauzia fa = گردشگری fi = Vesiputous @@ -24256,6 +25056,7 @@ [type.waterway.weir] en = Weir de = Wehr + et = Pais fr = Seuil ja = 堰 mr = अल्प धरण @@ -24271,6 +25072,7 @@ en = Wheelchair de = Rollstuhl es = Silla de ruedas + et = Ratastool eu = Gurpil-aulkia fi = Rullatuoli it = Sedia a rotelle @@ -24293,6 +25095,7 @@ el = Μερικώς εξοπλισμένο για άτομα με ειδικές ανάγκες es = Parcialmente equipado para discapacitados es-MX = Parcialmente equipado para discapacitados + et = Piiratud ratastooliga ligipääs eu = Ezinduentzako partzialki hornitua fa = دسترسی محدود با صندلی چرخ دار fi = Osittain varustettu vammaisille @@ -24329,6 +25132,7 @@ el = Δεν υπάρχει πρόβλεψη για άτομα με ειδικές ανάγκες es = No equipado para discapacitados es-MX = No equipado para discapacitados + et = Puudub ratastooliga ligipääs eu = Ezinduentzako ekipatuta ez dago fa = بدون دسترسی با صندلی چرخ دار fi = Ei varustettu vammaisille @@ -24365,6 +25169,7 @@ el = Εξοπλισμένο για άτομα με ειδικές ανάγκες es = Equipado para discapacitados es-MX = Equipado para discapacitados + et = Täielik ratastooli ligipääs eu = Ezinduentzako hornitua fa = دسترسی کامل با صندلی چرخ دار fi = Varustettu vammaisille @@ -24395,6 +25200,7 @@ [type.aerialway.j.bar] en = J-bar Lift de = Schlepplift + et = Slepplift fr = Téléski nl = Sleeplift (J) pt = Telesqui de barra em J @@ -24406,6 +25212,7 @@ [type.aerialway.magic_carpet] en = Magic Carpet de = Laufband + et = Võluvaip fr = Tapis roulant nl = Loopband pt = Tapete deslizante @@ -24417,6 +25224,7 @@ [type.aerialway.platter] en = Platter Lift de = Tellerlift + et = Plaatlift fi = Sompahissi nl = Sleeplift pt = Telesqui de disco @@ -24428,6 +25236,7 @@ [type.aerialway.rope_tow] en = Rope Tow de = Seillift + et = Köislift fi = Naruhissi nl = Touwlift pt = Telesqui de corda @@ -24439,6 +25248,7 @@ [type.aerialway.t.bar] en = T-bar Lift de = T-Bügel-Lift + et = Ankurlift fi = Ankkurihissi nl = Sleeplift (T-beugel) pt = Telesqui de barra em T @@ -24449,6 +25259,7 @@ [type.piste_type] en = Piste Type de = Pistentyp + et = Punkti liik nl = Pistesoort pt = Tipo de pista pt-BR = Tipo de pista @@ -24460,6 +25271,7 @@ en = Downhill Ski Run de = Abfahrt fi = Laskettelurinne + et = Mäesuusarada fr = Piste de ski alpin nl = Ski-afdaling pt = Esqui alpino @@ -24471,6 +25283,7 @@ [type.piste_type.downhill.advanced] ref = type.piste_type.downhill de = Schwierige Abfahrt + et = Raske laskumine nl = Moeilijke afdaling pt = Esqui alpino avançado pt-BR = Esqui alpino avançado @@ -24481,6 +25294,7 @@ [type.piste_type.downhill.easy] ref = type.piste_type.downhill de = Leichte Abfahrt + et = Kerge laskumine nl = Makkelijke afdaling pt = Esqui alpino fácil pt-BR = Esqui alpino fácil @@ -24491,6 +25305,7 @@ [type.piste_type.downhill.expert] ref = type.piste_type.downhill de = Profi Abfahrt + et = Professionaalne laskumine nl = Afdaling voor experts pt = Esqui alpino avançado pt-BR = Esqui alpino avançado @@ -24500,6 +25315,7 @@ [type.piste_type.downhill.freeride] ref = type.piste_type.downhill + et = Tasuta mäesuusatamine pt = Esqui alpino livre pt-BR = Esqui alpino livre ru = Горнолыжная трасса для фрирайда @@ -24509,6 +25325,7 @@ [type.piste_type.downhill.intermediate] ref = type.piste_type.downhill de = Mittelschwere Abfahrt + et = Keskmise raskusastmega laskumine nl = Gemiddelde afdaling pt = Esqui alpino intermédio pt-BR = Esqui alpino intermédio @@ -24519,6 +25336,7 @@ [type.piste_type.downhill.novice] ref = type.piste_type.downhill de = Anfängerfreundliche Abfahrt + et = Algajasõbralik laskumine nl = Beginnersafdaling pt = Esqui alpino iniciante pt-BR = Esqui alpino iniciante @@ -24529,6 +25347,7 @@ [type.piste_type.nordic] en = Nordic Ski Trail de = Langlaufloipe + et = Murdmaa suusarada fi = Latu fr = Piste de ski de fond nl = Langlaufroute @@ -24541,6 +25360,7 @@ [type.piste_type.sled] en = Sledding Piste de = Rodelbahn + et = Kelgurada fi = Kelkkarata fr = Piste de luge it = Pista per slitte @@ -24559,6 +25379,7 @@ de = Gebäude el = Κτίριο es = Edificio + et = Hoone eu = Eraikin fa = ساختما fi = Rakennus @@ -24595,6 +25416,7 @@ de = Veranstaltungszentrum el = Κέντρο εκδηλώσεων es = Lugar de los eventos + et = Ürituste toimumiskoht eu = Ekitaldien Lekua fa = محل برگزاری رویدادها fi = Tapahtumapaikka -- 2.45.3 From 2a3a46b32dc9f02483040702aa22e57780c964dc Mon Sep 17 00:00:00 2001 From: Andrew Shkrob Date: Tue, 15 Nov 2022 18:58:17 +0100 Subject: [PATCH 2/5] [android-auto] Add gradle support Signed-off-by: Andrew Shkrob --- .github/workflows/android-check.yaml | 2 +- .github/workflows/android-monkey.yaml | 2 +- .../workflows/android-release-metadata.yaml | 2 +- .github/workflows/android-release.yaml | 8 ++--- android/build.gradle | 25 ++++++++++++++-- android/flavors/car/AndroidManifest.xml | 30 +++++++++++++++++++ .../car/res/xml/automotive_app_desc.xml | 4 +++ .../src/app/organicmaps/car/OMCarService.java | 15 ++++++++++ android/gradle.properties | 1 + 9 files changed, 80 insertions(+), 9 deletions(-) create mode 100644 android/flavors/car/AndroidManifest.xml create mode 100644 android/flavors/car/res/xml/automotive_app_desc.xml create mode 100644 android/flavors/car/src/app/organicmaps/car/OMCarService.java diff --git a/.github/workflows/android-check.yaml b/.github/workflows/android-check.yaml index 58ed9200de..aa8e2a9a35 100644 --- a/.github/workflows/android-check.yaml +++ b/.github/workflows/android-check.yaml @@ -54,7 +54,7 @@ jobs: strategy: fail-fast: false matrix: - flavor: [WebDebug, FdroidBeta] + flavor: [WebNoCarDebug, WebCarDebug, FdroidNoCarBeta, FdroidCarBeta] steps: - name: Install build tools and dependencies diff --git a/.github/workflows/android-monkey.yaml b/.github/workflows/android-monkey.yaml index 79b22a331d..3328b2bba6 100644 --- a/.github/workflows/android-monkey.yaml +++ b/.github/workflows/android-monkey.yaml @@ -73,7 +73,7 @@ jobs: run: | cmake --version ninja --version - gradle -Parm64 -Parm32 -Pfirebase assembleGoogleDebug + gradle -Parm64 -Parm32 -Pfirebase assembleGoogleNoCarDebug - name: Run monkey run: | diff --git a/.github/workflows/android-release-metadata.yaml b/.github/workflows/android-release-metadata.yaml index d72a010921..bb1aa579f6 100644 --- a/.github/workflows/android-release-metadata.yaml +++ b/.github/workflows/android-release-metadata.yaml @@ -48,6 +48,6 @@ jobs: - name: Upload shell: bash - run: ./gradlew publishGoogleReleaseListing + run: ./gradlew publishGoogleNoCarReleaseListing working-directory: android timeout-minutes: 5 diff --git a/.github/workflows/android-release.yaml b/.github/workflows/android-release.yaml index 821417d962..d3ce0414e7 100644 --- a/.github/workflows/android-release.yaml +++ b/.github/workflows/android-release.yaml @@ -121,22 +121,22 @@ jobs: shell: bash working-directory: android run: | - gradle bundleGoogleRelease publishGoogleReleaseBundle + gradle bundleGoogleNoCarRelease publishGoogleNoCarReleaseBundle if: ${{ matrix.flavor == 'google' }} - name: Compile and upload to Huawei AppGallery shell: bash working-directory: android run: | - gradle bundleHuaweiRelease - gradle publishHuaweiAppGalleryHuaweiRelease + gradle bundleHuaweiNoCarRelease + gradle publishHuaweiAppGalleryHuaweiNoCarRelease if: ${{ matrix.flavor == 'huawei' }} - name: Compile universal APK shell: bash working-directory: android run: | - gradle assembleWebRelease + gradle assembleWebNoCarRelease if: ${{ matrix.flavor == 'web' }} - name: Prepare release notes diff --git a/android/build.gradle b/android/build.gradle index 66d2d68364..8b9e0174fb 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -232,7 +232,7 @@ android { res.srcDirs = ['tests/resources'] } - flavorDimensions 'default' + flavorDimensions 'default', 'car' productFlavors { // 01 is a historical artefact, sorry. @@ -268,10 +268,31 @@ android { buildConfigField 'String', 'REVIEW_URL', '"appmarket://details?id=app.organicmaps"' android.sourceSets.huawei.assets.srcDirs = ['flavors/world-enabled'] } + + car { + dimension 'car' + minSdkVersion propAndroidAutoMinSdkVersion.toInteger() + + android.sourceSets.car { + manifest.srcFile 'flavors/car/AndroidManifest.xml' + java.srcDirs = ['flavors/car/src'] + res.srcDirs = ['flavors/car/res'] + } + + dependencies { + implementation 'androidx.car.app:app:1.3.0-beta01' + // Fix for app/organicmaps/util/FileUploadWorker.java:14: error: cannot access ListenableFuture + implementation 'com.google.guava:guava:29.0-android' + } + } + + noCar { + dimension 'car' + } } playConfigs { - googleRelease { + googleNoCarRelease { enabled.set(true) } } diff --git a/android/flavors/car/AndroidManifest.xml b/android/flavors/car/AndroidManifest.xml new file mode 100644 index 0000000000..51db07e742 --- /dev/null +++ b/android/flavors/car/AndroidManifest.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/android/flavors/car/res/xml/automotive_app_desc.xml b/android/flavors/car/res/xml/automotive_app_desc.xml new file mode 100644 index 0000000000..83b683397c --- /dev/null +++ b/android/flavors/car/res/xml/automotive_app_desc.xml @@ -0,0 +1,4 @@ + + + + diff --git a/android/flavors/car/src/app/organicmaps/car/OMCarService.java b/android/flavors/car/src/app/organicmaps/car/OMCarService.java new file mode 100644 index 0000000000..f25e460122 --- /dev/null +++ b/android/flavors/car/src/app/organicmaps/car/OMCarService.java @@ -0,0 +1,15 @@ +package app.organicmaps.car; + +import androidx.annotation.NonNull; +import androidx.car.app.CarAppService; +import androidx.car.app.validation.HostValidator; + +public final class OMCarService extends CarAppService +{ + @NonNull + @Override + public HostValidator createHostValidator() + { + throw new UnsupportedOperationException("Not implemented, yet"); + } +} diff --git a/android/gradle.properties b/android/gradle.properties index 874ad2663f..a94d92ba1b 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,4 +1,5 @@ propMinSdkVersion=21 +propAndroidAutoMinSdkVersion=23 propTargetSdkVersion=33 propCompileSdkVersion=33 propBuildToolsVersion=33.0.0 -- 2.45.3 From ac5eeded6ab231045b95d3bd02ef90ec8702cccd Mon Sep 17 00:00:00 2001 From: Alexander Borsuk Date: Sun, 13 Nov 2022 15:09:27 +0100 Subject: [PATCH 3/5] [3party] Upgraded Jansson to 2.14 and made it a submodule Signed-off-by: Alexander Borsuk --- .gitmodules | 3 + 3party/jansson/.travis.yml | 22 - 3party/jansson/Android.mk | 30 - 3party/jansson/CHANGES | 903 -------- 3party/jansson/CMakeLists.txt | 41 +- 3party/jansson/CleanSpec.mk | 49 - 3party/jansson/LICENSE | 19 - 3party/jansson/Makefile.am | 10 - 3party/jansson/README.rst | 69 - 3party/jansson/android/jansson_config.h | 43 - 3party/jansson/appveyor.yml | 16 - .../jansson/cmake/CheckFunctionKeywords.cmake | 15 - 3party/jansson/cmake/CodeCoverage.cmake | 163 -- 3party/jansson/cmake/Coveralls.cmake | 111 - 3party/jansson/cmake/CoverallsClear.cmake | 24 - .../jansson/cmake/CoverallsGenerateGcov.cmake | 380 ---- 3party/jansson/cmake/FindSphinx.cmake | 301 --- 3party/jansson/cmake/Vendor.cmake | 684 ------ 3party/jansson/cmake/janssonConfig.cmake.in | 4 - 3party/jansson/cmake/jansson_config.h.cmake | 74 - .../cmake/jansson_private_config.h.cmake | 53 - 3party/jansson/configure.ac | 162 -- 3party/jansson/doc/.gitignore | 1 - 3party/jansson/doc/Makefile.am | 20 - 3party/jansson/doc/README | 5 - 3party/jansson/doc/apiref.rst | 1862 ----------------- 3party/jansson/doc/changes.rst | 5 - 3party/jansson/doc/conf.py | 217 -- 3party/jansson/doc/conformance.rst | 120 -- 3party/jansson/doc/ext/refcounting.py | 60 - 3party/jansson/doc/gettingstarted.rst | 243 --- 3party/jansson/doc/github_commits.c | 201 -- 3party/jansson/doc/index.rst | 53 - 3party/jansson/doc/portability.rst | 85 - 3party/jansson/doc/tutorial.rst | 288 --- 3party/jansson/doc/upgrading.rst | 76 - 3party/jansson/examples/README.rst | 4 - 3party/jansson/examples/simple_parse.c | 203 -- 3party/jansson/jansson | 1 + 3party/jansson/jansson.pc.in | 10 - 3party/jansson/{ios => }/jansson_config.h | 2 +- 3party/jansson/jansson_handle.cpp | 2 +- 3party/jansson/jansson_handle.hpp | 12 +- .../{ios => }/jansson_private_config.h | 0 3party/jansson/myjansson.cpp | 13 +- 3party/jansson/myjansson.hpp | 2 +- 3party/jansson/release.sh | 70 - 3party/jansson/src/Makefile.am | 28 - 3party/jansson/src/dump.c | 504 ----- 3party/jansson/src/error.c | 66 - 3party/jansson/src/hashtable.c | 356 ---- 3party/jansson/src/hashtable.h | 176 -- 3party/jansson/src/hashtable_seed.c | 277 --- 3party/jansson/src/jansson.def | 75 - 3party/jansson/src/jansson.h | 367 ---- 3party/jansson/src/jansson_config.h | 74 - 3party/jansson/src/jansson_config.h.in | 51 - 3party/jansson/src/jansson_private.h | 109 - 3party/jansson/src/jansson_private_config.h | 53 - 3party/jansson/src/load.c | 1153 ---------- 3party/jansson/src/lookup3.h | 381 ---- 3party/jansson/src/memory.c | 69 - 3party/jansson/src/pack_unpack.c | 952 --------- 3party/jansson/src/strbuffer.c | 111 - 3party/jansson/src/strbuffer.h | 34 - 3party/jansson/src/strconv.c | 145 -- 3party/jansson/src/utf.c | 187 -- 3party/jansson/src/utf.h | 36 - 3party/jansson/src/value.c | 1074 ---------- 3party/jansson/test/.gitignore | 23 - 3party/jansson/test/Makefile.am | 10 - 3party/jansson/test/bin/Makefile.am | 5 - 3party/jansson/test/bin/json_process.c | 385 ---- 3party/jansson/test/run-suites | 50 - 3party/jansson/test/scripts/run-tests.sh | 100 - 3party/jansson/test/scripts/valgrind.sh | 35 - 3party/jansson/test/suites/.gitattributes | 2 - 3party/jansson/test/suites/Makefile.am | 2 - 3party/jansson/test/suites/api/Makefile.am | 38 - 3party/jansson/test/suites/api/check-exports | 23 - 3party/jansson/test/suites/api/run | 36 - 3party/jansson/test/suites/api/test_array.c | 505 ----- 3party/jansson/test/suites/api/test_chaos.c | 177 -- 3party/jansson/test/suites/api/test_copy.c | 334 --- 3party/jansson/test/suites/api/test_dump.c | 326 --- .../test/suites/api/test_dump_callback.c | 81 - 3party/jansson/test/suites/api/test_equal.c | 196 -- 3party/jansson/test/suites/api/test_load.c | 246 --- .../test/suites/api/test_load_callback.c | 75 - 3party/jansson/test/suites/api/test_loadb.c | 36 - .../test/suites/api/test_memory_funcs.c | 137 -- 3party/jansson/test/suites/api/test_number.c | 126 -- 3party/jansson/test/suites/api/test_object.c | 677 ------ 3party/jansson/test/suites/api/test_pack.c | 518 ----- 3party/jansson/test/suites/api/test_simple.c | 292 --- 3party/jansson/test/suites/api/test_sprintf.c | 34 - 3party/jansson/test/suites/api/test_unpack.c | 406 ---- 3party/jansson/test/suites/api/util.h | 97 - .../test/suites/encoding-flags/array/input | 1 - .../test/suites/encoding-flags/array/output | 1 - .../suites/encoding-flags/compact-array/env | 2 - .../suites/encoding-flags/compact-array/input | 1 - .../encoding-flags/compact-array/output | 1 - .../suites/encoding-flags/compact-object/env | 3 - .../encoding-flags/compact-object/input | 1 - .../encoding-flags/compact-object/output | 1 - .../suites/encoding-flags/ensure-ascii/env | 2 - .../suites/encoding-flags/ensure-ascii/input | 8 - .../suites/encoding-flags/ensure-ascii/output | 1 - .../suites/encoding-flags/indent-array/env | 2 - .../suites/encoding-flags/indent-array/input | 1 - .../suites/encoding-flags/indent-array/output | 4 - .../encoding-flags/indent-compact-array/env | 3 - .../encoding-flags/indent-compact-array/input | 1 - .../indent-compact-array/output | 4 - .../encoding-flags/indent-compact-object/env | 4 - .../indent-compact-object/input | 1 - .../indent-compact-object/output | 4 - .../suites/encoding-flags/indent-object/env | 3 - .../suites/encoding-flags/indent-object/input | 1 - .../encoding-flags/indent-object/output | 4 - .../test/suites/encoding-flags/object/env | 2 - .../test/suites/encoding-flags/object/input | 1 - .../test/suites/encoding-flags/object/output | 1 - .../suites/encoding-flags/preserve-order/env | 2 - .../encoding-flags/preserve-order/input | 1 - .../encoding-flags/preserve-order/output | 1 - .../suites/encoding-flags/real-precision/env | 2 - .../encoding-flags/real-precision/input | 1 - .../encoding-flags/real-precision/output | 1 - 3party/jansson/test/suites/encoding-flags/run | 32 - .../test/suites/encoding-flags/sort-keys/env | 2 - .../suites/encoding-flags/sort-keys/input | 1 - .../suites/encoding-flags/sort-keys/output | 1 - .../encoded-surrogate-half/error | 2 - .../encoded-surrogate-half/input | 1 - .../invalid-utf-8-after-backslash/error | 2 - .../invalid-utf-8-after-backslash/input | 1 - .../invalid-utf-8-in-array/error | 2 - .../invalid-utf-8-in-array/input | 1 - .../invalid-utf-8-in-bigger-int/error | 2 - .../invalid-utf-8-in-bigger-int/input | 1 - .../invalid-utf-8-in-escape/error | 2 - .../invalid-utf-8-in-escape/input | 1 - .../invalid-utf-8-in-exponent/error | 2 - .../invalid-utf-8-in-exponent/input | 1 - .../invalid-utf-8-in-identifier/error | 2 - .../invalid-utf-8-in-identifier/input | 1 - .../invalid-utf-8-in-int/error | 2 - .../invalid-utf-8-in-int/input | 1 - .../invalid-utf-8-in-real-after-e/error | 2 - .../invalid-utf-8-in-real-after-e/input | 1 - .../invalid-utf-8-in-string/error | 2 - .../invalid-utf-8-in-string/input | 1 - .../invalid-unicode/lone-invalid-utf-8/error | 2 - .../invalid-unicode/lone-invalid-utf-8/input | 1 - .../lone-utf-8-continuation-byte/error | 2 - .../lone-utf-8-continuation-byte/input | 1 - .../not-in-unicode-range/error | 2 - .../not-in-unicode-range/input | 1 - .../overlong-3-byte-encoding/error | 2 - .../overlong-3-byte-encoding/input | 1 - .../overlong-4-byte-encoding/error | 2 - .../overlong-4-byte-encoding/input | 1 - .../overlong-ascii-encoding/error | 2 - .../overlong-ascii-encoding/input | 1 - .../invalid-unicode/restricted-utf-8/error | 2 - .../invalid-unicode/restricted-utf-8/input | 1 - .../jansson/test/suites/invalid-unicode/run | 27 - .../invalid-unicode/truncated-utf-8/error | 2 - .../invalid-unicode/truncated-utf-8/input | 1 - .../test/suites/invalid/apostrophe/error | 2 - .../test/suites/invalid/apostrophe/input | 1 - .../invalid/ascii-unicode-identifier/error | 2 - .../invalid/ascii-unicode-identifier/input | 1 - .../test/suites/invalid/brace-comma/error | 2 - .../test/suites/invalid/brace-comma/input | 1 - .../test/suites/invalid/bracket-comma/error | 2 - .../test/suites/invalid/bracket-comma/input | 1 - .../invalid/bracket-one-comma/error.normal | 2 - .../invalid/bracket-one-comma/error.strip | 2 - .../suites/invalid/bracket-one-comma/input | 1 - .../jansson/test/suites/invalid/empty/error | 2 - .../jansson/test/suites/invalid/empty/input | 0 .../suites/invalid/extra-comma-in-array/error | 2 - .../suites/invalid/extra-comma-in-array/input | 1 - .../extra-comma-in-multiline-array/error | 2 - .../extra-comma-in-multiline-array/input | 6 - .../invalid/garbage-after-newline/error | 2 - .../invalid/garbage-after-newline/input | 2 - .../suites/invalid/garbage-at-the-end/error | 2 - .../suites/invalid/garbage-at-the-end/input | 1 - .../invalid/integer-starting-with-zero/error | 2 - .../invalid/integer-starting-with-zero/input | 1 - .../test/suites/invalid/invalid-escape/error | 2 - .../test/suites/invalid/invalid-escape/input | 1 - .../suites/invalid/invalid-identifier/error | 2 - .../suites/invalid/invalid-identifier/input | 1 - .../invalid/invalid-negative-integer/error | 2 - .../invalid/invalid-negative-integer/input | 1 - .../invalid/invalid-negative-real/error | 2 - .../invalid/invalid-negative-real/input | 1 - .../invalid/invalid-second-surrogate/error | 2 - .../invalid/invalid-second-surrogate/input | 1 - .../invalid/invalid-unicode-escape/error | 2 - .../invalid/invalid-unicode-escape/input | 1 - .../invalid/lone-open-brace/error.normal | 2 - .../invalid/lone-open-brace/error.strip | 2 - .../test/suites/invalid/lone-open-brace/input | 1 - .../invalid/lone-open-bracket/error.normal | 2 - .../invalid/lone-open-bracket/error.strip | 2 - .../suites/invalid/lone-open-bracket/input | 1 - .../invalid/lone-second-surrogate/error | 2 - .../invalid/lone-second-surrogate/input | 1 - .../invalid/minus-sign-without-number/error | 2 - .../invalid/minus-sign-without-number/input | 1 - .../negative-integer-starting-with-zero/error | 2 - .../negative-integer-starting-with-zero/input | 1 - .../invalid/null-byte-in-object-key/error | 2 - .../invalid/null-byte-in-object-key/input | 1 - .../suites/invalid/null-byte-in-string/error | 2 - .../suites/invalid/null-byte-in-string/input | Bin 28 -> 0 bytes .../invalid/null-byte-in-string/nostrip | 2 - .../invalid/null-byte-outside-string/error | 2 - .../invalid/null-byte-outside-string/input | Bin 3 -> 0 bytes .../invalid/null-byte-outside-string/nostrip | 2 - .../invalid/null-escape-in-string/error | 2 - .../invalid/null-escape-in-string/input | 1 - 3party/jansson/test/suites/invalid/null/error | 2 - 3party/jansson/test/suites/invalid/null/input | 1 - .../suites/invalid/object-apostrophes/error | 2 - .../suites/invalid/object-apostrophes/input | 1 - .../invalid/object-garbage-at-end/error | 2 - .../invalid/object-garbage-at-end/input | 1 - .../object-in-unterminated-array/error.normal | 2 - .../object-in-unterminated-array/error.strip | 2 - .../object-in-unterminated-array/input | 1 - .../invalid/object-no-colon/error.normal | 2 - .../invalid/object-no-colon/error.strip | 2 - .../test/suites/invalid/object-no-colon/input | 1 - .../invalid/object-no-value/error.normal | 2 - .../invalid/object-no-value/error.strip | 2 - .../test/suites/invalid/object-no-value/input | 1 - .../object-unterminated-value/error.normal | 2 - .../object-unterminated-value/error.strip | 2 - .../invalid/object-unterminated-value/input | 1 - .../suites/invalid/real-garbage-after-e/error | 2 - .../suites/invalid/real-garbage-after-e/input | 1 - .../invalid/real-negative-overflow/error | 2 - .../invalid/real-negative-overflow/input | 1 - .../invalid/real-positive-overflow/error | 2 - .../invalid/real-positive-overflow/input | 1 - .../suites/invalid/real-truncated-at-e/error | 2 - .../suites/invalid/real-truncated-at-e/input | 1 - .../invalid/real-truncated-at-point/error | 2 - .../invalid/real-truncated-at-point/input | 1 - .../test/suites/invalid/recursion-depth/error | 2 - .../test/suites/invalid/recursion-depth/input | 1 - 3party/jansson/test/suites/invalid/run | 57 - .../invalid/tab-character-in-string/error | 2 - .../invalid/tab-character-in-string/input | 1 - .../invalid/too-big-negative-integer/error | 2 - .../invalid/too-big-negative-integer/input | 1 - .../invalid/too-big-positive-integer/error | 2 - .../invalid/too-big-positive-integer/input | 1 - .../invalid/truncated-unicode-surrogate/error | 2 - .../invalid/truncated-unicode-surrogate/input | 1 - .../suites/invalid/unicode-identifier/error | 2 - .../suites/invalid/unicode-identifier/input | 1 - .../error.normal | 2 - .../unterminated-array-and-object/error.strip | 2 - .../unterminated-array-and-object/input | 1 - .../invalid/unterminated-array/error.normal | 2 - .../invalid/unterminated-array/error.strip | 2 - .../suites/invalid/unterminated-array/input | 1 - .../unterminated-empty-key/error.normal | 2 - .../unterminated-empty-key/error.strip | 2 - .../invalid/unterminated-empty-key/input | 1 - .../invalid/unterminated-key/error.normal | 2 - .../invalid/unterminated-key/error.strip | 2 - .../suites/invalid/unterminated-key/input | 1 - .../unterminated-object-and-array/error | 2 - .../unterminated-object-and-array/input | 1 - .../invalid/unterminated-string/error.normal | 2 - .../invalid/unterminated-string/error.strip | 2 - .../suites/invalid/unterminated-string/input | 1 - .../test/suites/valid/complex-array/env | 1 - .../test/suites/valid/complex-array/input | 5 - .../test/suites/valid/complex-array/output | 1 - .../test/suites/valid/empty-array/input | 1 - .../test/suites/valid/empty-array/output | 1 - .../suites/valid/empty-object-in-array/input | 1 - .../suites/valid/empty-object-in-array/output | 1 - .../test/suites/valid/empty-object/input | 1 - .../test/suites/valid/empty-object/output | 1 - .../test/suites/valid/empty-string/input | 1 - .../test/suites/valid/empty-string/output | 1 - .../valid/escaped-utf-control-char/input | 1 - .../valid/escaped-utf-control-char/output | 1 - 3party/jansson/test/suites/valid/false/input | 1 - 3party/jansson/test/suites/valid/false/output | 1 - .../test/suites/valid/negative-int/input | 1 - .../test/suites/valid/negative-int/output | 1 - .../test/suites/valid/negative-one/input | 1 - .../test/suites/valid/negative-one/output | 1 - .../test/suites/valid/negative-zero/input | 1 - .../test/suites/valid/negative-zero/output | 1 - 3party/jansson/test/suites/valid/null/input | 1 - 3party/jansson/test/suites/valid/null/output | 1 - .../test/suites/valid/one-byte-utf-8/input | 1 - .../test/suites/valid/one-byte-utf-8/output | 1 - .../real-capital-e-negative-exponent/input | 1 - .../real-capital-e-negative-exponent/output | 1 - .../real-capital-e-positive-exponent/input | 1 - .../real-capital-e-positive-exponent/output | 1 - .../test/suites/valid/real-capital-e/input | 1 - .../test/suites/valid/real-capital-e/output | 1 - .../test/suites/valid/real-exponent/input | 1 - .../test/suites/valid/real-exponent/output | 1 - .../suites/valid/real-fraction-exponent/input | 1 - .../valid/real-fraction-exponent/output | 1 - .../suites/valid/real-negative-exponent/input | 1 - .../valid/real-negative-exponent/output | 1 - .../suites/valid/real-positive-exponent/input | 1 - .../valid/real-positive-exponent/output | 1 - .../suites/valid/real-subnormal-number/input | 1 - .../suites/valid/real-subnormal-number/output | 1 - .../test/suites/valid/real-underflow/input | 1 - .../test/suites/valid/real-underflow/output | 1 - 3party/jansson/test/suites/valid/run | 56 - .../test/suites/valid/short-string/input | 1 - .../test/suites/valid/short-string/output | 1 - .../suites/valid/simple-ascii-string/input | 1 - .../suites/valid/simple-ascii-string/output | 1 - .../test/suites/valid/simple-int-0/input | 1 - .../test/suites/valid/simple-int-0/output | 1 - .../test/suites/valid/simple-int-1/input | 1 - .../test/suites/valid/simple-int-1/output | 1 - .../test/suites/valid/simple-int-123/input | 1 - .../test/suites/valid/simple-int-123/output | 1 - .../test/suites/valid/simple-object/input | 1 - .../test/suites/valid/simple-object/output | 1 - .../test/suites/valid/simple-real/input | 1 - .../test/suites/valid/simple-real/output | 1 - .../test/suites/valid/string-escapes/input | 1 - .../test/suites/valid/string-escapes/output | 1 - .../test/suites/valid/three-byte-utf-8/input | 1 - .../test/suites/valid/three-byte-utf-8/output | 1 - 3party/jansson/test/suites/valid/true/input | 1 - 3party/jansson/test/suites/valid/true/output | 1 - .../test/suites/valid/two-byte-utf-8/input | 1 - .../test/suites/valid/two-byte-utf-8/output | 1 - .../test/suites/valid/utf-8-string/input | 1 - .../test/suites/valid/utf-8-string/output | 1 - .../utf-surrogate-four-byte-encoding/input | 1 - .../utf-surrogate-four-byte-encoding/output | 1 - iphone/Chart/Chart.xcodeproj/project.pbxproj | 2 +- .../CoreApi/CoreApi.xcodeproj/project.pbxproj | 24 +- .../DatePicker.xcodeproj/project.pbxproj | 2 +- iphone/Maps/Maps.xcodeproj/project.pbxproj | 8 +- .../xcshareddata/xcschemes/OMaps.xcscheme | 2 +- routing/routing_quality/api/CMakeLists.txt | 1 + transit/CMakeLists.txt | 2 + transit/transit_graph_data.cpp | 2 +- transit/transit_graph_data.hpp | 6 +- xcode/agg/agg.xcodeproj/project.pbxproj | 2 +- xcode/base/base.xcodeproj/project.pbxproj | 2 +- xcode/bsdiff/bsdiff.xcodeproj/project.pbxproj | 2 +- xcode/coding/coding.xcodeproj/project.pbxproj | 6 +- xcode/common.xcconfig | 3 +- .../descriptions.xcodeproj/project.pbxproj | 2 +- xcode/drape/drape.xcodeproj/project.pbxproj | 2 +- .../drape_frontend.xcodeproj/project.pbxproj | 10 +- xcode/editor/editor.xcodeproj/project.pbxproj | 2 +- xcode/expat/expat.xcodeproj/project.pbxproj | 2 +- .../freetype.xcodeproj/project.pbxproj | 2 +- xcode/ge0/ge0.xcodeproj/project.pbxproj | 2 +- .../generator.xcodeproj/project.pbxproj | 4 +- .../geometry.xcodeproj/project.pbxproj | 2 +- xcode/gflags/gflags.xcodeproj/project.pbxproj | 2 +- xcode/icu/icu.xcodeproj/project.pbxproj | 6 +- .../indexer/indexer.xcodeproj/project.pbxproj | 2 +- .../jansson/jansson.xcodeproj/project.pbxproj | 189 +- xcode/kml/kml.xcodeproj/project.pbxproj | 2 +- xcode/map/map.xcodeproj/project.pbxproj | 4 +- .../mapshot/mapshot.xcodeproj/project.pbxproj | 2 +- .../minizip/minizip.xcodeproj/project.pbxproj | 2 +- .../mwm_diff.xcodeproj/project.pbxproj | 2 +- .../oauthcpp.xcodeproj/project.pbxproj | 2 +- .../project.pbxproj | 2 +- .../opening_hours.xcodeproj/project.pbxproj | 2 +- xcode/openlr/openlr.xcodeproj/project.pbxproj | 14 +- xcode/osrm/osrm.xcodeproj/project.pbxproj | 2 +- .../platform.xcodeproj/project.pbxproj | 20 +- .../protobuf.xcodeproj/project.pbxproj | 2 +- .../pugixml/pugixml.xcodeproj/project.pbxproj | 2 +- xcode/qt/qt.xcodeproj/project.pbxproj | 4 +- .../routing/routing.xcodeproj/project.pbxproj | 10 +- .../routing_common.xcodeproj/project.pbxproj | 14 +- .../sdf_image.xcodeproj/project.pbxproj | 2 +- xcode/search/search.xcodeproj/project.pbxproj | 2 +- .../shaders/shaders.xcodeproj/project.pbxproj | 12 +- .../project.pbxproj | 2 +- .../stb_image.xcodeproj/project.pbxproj | 2 +- .../storage/storage.xcodeproj/project.pbxproj | 4 +- .../succinct.xcodeproj/project.pbxproj | 2 +- xcode/tess2/tess2.xcodeproj/project.pbxproj | 6 +- .../tracking.xcodeproj/project.pbxproj | 2 +- .../traffic/traffic.xcodeproj/project.pbxproj | 2 +- .../transit/transit.xcodeproj/project.pbxproj | 14 +- .../vulkan_wrapper.xcodeproj/project.pbxproj | 6 +- 411 files changed, 207 insertions(+), 18757 deletions(-) delete mode 100644 3party/jansson/.travis.yml delete mode 100644 3party/jansson/Android.mk delete mode 100644 3party/jansson/CHANGES delete mode 100644 3party/jansson/CleanSpec.mk delete mode 100644 3party/jansson/LICENSE delete mode 100644 3party/jansson/Makefile.am delete mode 100644 3party/jansson/README.rst delete mode 100644 3party/jansson/android/jansson_config.h delete mode 100644 3party/jansson/appveyor.yml delete mode 100644 3party/jansson/cmake/CheckFunctionKeywords.cmake delete mode 100644 3party/jansson/cmake/CodeCoverage.cmake delete mode 100644 3party/jansson/cmake/Coveralls.cmake delete mode 100644 3party/jansson/cmake/CoverallsClear.cmake delete mode 100644 3party/jansson/cmake/CoverallsGenerateGcov.cmake delete mode 100644 3party/jansson/cmake/FindSphinx.cmake delete mode 100644 3party/jansson/cmake/Vendor.cmake delete mode 100644 3party/jansson/cmake/janssonConfig.cmake.in delete mode 100644 3party/jansson/cmake/jansson_config.h.cmake delete mode 100644 3party/jansson/cmake/jansson_private_config.h.cmake delete mode 100644 3party/jansson/configure.ac delete mode 100644 3party/jansson/doc/.gitignore delete mode 100644 3party/jansson/doc/Makefile.am delete mode 100644 3party/jansson/doc/README delete mode 100644 3party/jansson/doc/apiref.rst delete mode 100644 3party/jansson/doc/changes.rst delete mode 100644 3party/jansson/doc/conf.py delete mode 100644 3party/jansson/doc/conformance.rst delete mode 100644 3party/jansson/doc/ext/refcounting.py delete mode 100644 3party/jansson/doc/gettingstarted.rst delete mode 100644 3party/jansson/doc/github_commits.c delete mode 100644 3party/jansson/doc/index.rst delete mode 100644 3party/jansson/doc/portability.rst delete mode 100644 3party/jansson/doc/tutorial.rst delete mode 100644 3party/jansson/doc/upgrading.rst delete mode 100644 3party/jansson/examples/README.rst delete mode 100644 3party/jansson/examples/simple_parse.c create mode 160000 3party/jansson/jansson delete mode 100644 3party/jansson/jansson.pc.in rename 3party/jansson/{ios => }/jansson_config.h (98%) rename 3party/jansson/{ios => }/jansson_private_config.h (100%) delete mode 100755 3party/jansson/release.sh delete mode 100644 3party/jansson/src/Makefile.am delete mode 100644 3party/jansson/src/dump.c delete mode 100644 3party/jansson/src/error.c delete mode 100644 3party/jansson/src/hashtable.c delete mode 100644 3party/jansson/src/hashtable.h delete mode 100644 3party/jansson/src/hashtable_seed.c delete mode 100644 3party/jansson/src/jansson.def delete mode 100644 3party/jansson/src/jansson.h delete mode 100644 3party/jansson/src/jansson_config.h delete mode 100644 3party/jansson/src/jansson_config.h.in delete mode 100644 3party/jansson/src/jansson_private.h delete mode 100644 3party/jansson/src/jansson_private_config.h delete mode 100644 3party/jansson/src/load.c delete mode 100644 3party/jansson/src/lookup3.h delete mode 100644 3party/jansson/src/memory.c delete mode 100644 3party/jansson/src/pack_unpack.c delete mode 100644 3party/jansson/src/strbuffer.c delete mode 100644 3party/jansson/src/strbuffer.h delete mode 100644 3party/jansson/src/strconv.c delete mode 100644 3party/jansson/src/utf.c delete mode 100644 3party/jansson/src/utf.h delete mode 100644 3party/jansson/src/value.c delete mode 100644 3party/jansson/test/.gitignore delete mode 100644 3party/jansson/test/Makefile.am delete mode 100644 3party/jansson/test/bin/Makefile.am delete mode 100644 3party/jansson/test/bin/json_process.c delete mode 100755 3party/jansson/test/run-suites delete mode 100644 3party/jansson/test/scripts/run-tests.sh delete mode 100644 3party/jansson/test/scripts/valgrind.sh delete mode 100644 3party/jansson/test/suites/.gitattributes delete mode 100644 3party/jansson/test/suites/Makefile.am delete mode 100644 3party/jansson/test/suites/api/Makefile.am delete mode 100755 3party/jansson/test/suites/api/check-exports delete mode 100755 3party/jansson/test/suites/api/run delete mode 100644 3party/jansson/test/suites/api/test_array.c delete mode 100644 3party/jansson/test/suites/api/test_chaos.c delete mode 100644 3party/jansson/test/suites/api/test_copy.c delete mode 100644 3party/jansson/test/suites/api/test_dump.c delete mode 100644 3party/jansson/test/suites/api/test_dump_callback.c delete mode 100644 3party/jansson/test/suites/api/test_equal.c delete mode 100644 3party/jansson/test/suites/api/test_load.c delete mode 100644 3party/jansson/test/suites/api/test_load_callback.c delete mode 100644 3party/jansson/test/suites/api/test_loadb.c delete mode 100644 3party/jansson/test/suites/api/test_memory_funcs.c delete mode 100644 3party/jansson/test/suites/api/test_number.c delete mode 100644 3party/jansson/test/suites/api/test_object.c delete mode 100644 3party/jansson/test/suites/api/test_pack.c delete mode 100644 3party/jansson/test/suites/api/test_simple.c delete mode 100644 3party/jansson/test/suites/api/test_sprintf.c delete mode 100644 3party/jansson/test/suites/api/test_unpack.c delete mode 100644 3party/jansson/test/suites/api/util.h delete mode 100644 3party/jansson/test/suites/encoding-flags/array/input delete mode 100644 3party/jansson/test/suites/encoding-flags/array/output delete mode 100644 3party/jansson/test/suites/encoding-flags/compact-array/env delete mode 100644 3party/jansson/test/suites/encoding-flags/compact-array/input delete mode 100644 3party/jansson/test/suites/encoding-flags/compact-array/output delete mode 100644 3party/jansson/test/suites/encoding-flags/compact-object/env delete mode 100644 3party/jansson/test/suites/encoding-flags/compact-object/input delete mode 100644 3party/jansson/test/suites/encoding-flags/compact-object/output delete mode 100644 3party/jansson/test/suites/encoding-flags/ensure-ascii/env delete mode 100644 3party/jansson/test/suites/encoding-flags/ensure-ascii/input delete mode 100644 3party/jansson/test/suites/encoding-flags/ensure-ascii/output delete mode 100644 3party/jansson/test/suites/encoding-flags/indent-array/env delete mode 100644 3party/jansson/test/suites/encoding-flags/indent-array/input delete mode 100644 3party/jansson/test/suites/encoding-flags/indent-array/output delete mode 100644 3party/jansson/test/suites/encoding-flags/indent-compact-array/env delete mode 100644 3party/jansson/test/suites/encoding-flags/indent-compact-array/input delete mode 100644 3party/jansson/test/suites/encoding-flags/indent-compact-array/output delete mode 100644 3party/jansson/test/suites/encoding-flags/indent-compact-object/env delete mode 100644 3party/jansson/test/suites/encoding-flags/indent-compact-object/input delete mode 100644 3party/jansson/test/suites/encoding-flags/indent-compact-object/output delete mode 100644 3party/jansson/test/suites/encoding-flags/indent-object/env delete mode 100644 3party/jansson/test/suites/encoding-flags/indent-object/input delete mode 100644 3party/jansson/test/suites/encoding-flags/indent-object/output delete mode 100644 3party/jansson/test/suites/encoding-flags/object/env delete mode 100644 3party/jansson/test/suites/encoding-flags/object/input delete mode 100644 3party/jansson/test/suites/encoding-flags/object/output delete mode 100644 3party/jansson/test/suites/encoding-flags/preserve-order/env delete mode 100644 3party/jansson/test/suites/encoding-flags/preserve-order/input delete mode 100644 3party/jansson/test/suites/encoding-flags/preserve-order/output delete mode 100644 3party/jansson/test/suites/encoding-flags/real-precision/env delete mode 100644 3party/jansson/test/suites/encoding-flags/real-precision/input delete mode 100644 3party/jansson/test/suites/encoding-flags/real-precision/output delete mode 100755 3party/jansson/test/suites/encoding-flags/run delete mode 100644 3party/jansson/test/suites/encoding-flags/sort-keys/env delete mode 100644 3party/jansson/test/suites/encoding-flags/sort-keys/input delete mode 100644 3party/jansson/test/suites/encoding-flags/sort-keys/output delete mode 100644 3party/jansson/test/suites/invalid-unicode/encoded-surrogate-half/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/encoded-surrogate-half/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-after-backslash/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-after-backslash/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-array/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-array/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-bigger-int/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-bigger-int/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-escape/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-escape/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-exponent/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-exponent/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-identifier/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-identifier/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-int/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-int/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-real-after-e/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-real-after-e/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-string/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-string/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/lone-invalid-utf-8/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/lone-invalid-utf-8/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/lone-utf-8-continuation-byte/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/lone-utf-8-continuation-byte/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/not-in-unicode-range/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/not-in-unicode-range/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/overlong-3-byte-encoding/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/overlong-3-byte-encoding/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/overlong-4-byte-encoding/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/overlong-4-byte-encoding/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/overlong-ascii-encoding/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/overlong-ascii-encoding/input delete mode 100644 3party/jansson/test/suites/invalid-unicode/restricted-utf-8/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/restricted-utf-8/input delete mode 100755 3party/jansson/test/suites/invalid-unicode/run delete mode 100644 3party/jansson/test/suites/invalid-unicode/truncated-utf-8/error delete mode 100644 3party/jansson/test/suites/invalid-unicode/truncated-utf-8/input delete mode 100644 3party/jansson/test/suites/invalid/apostrophe/error delete mode 100644 3party/jansson/test/suites/invalid/apostrophe/input delete mode 100644 3party/jansson/test/suites/invalid/ascii-unicode-identifier/error delete mode 100644 3party/jansson/test/suites/invalid/ascii-unicode-identifier/input delete mode 100644 3party/jansson/test/suites/invalid/brace-comma/error delete mode 100644 3party/jansson/test/suites/invalid/brace-comma/input delete mode 100644 3party/jansson/test/suites/invalid/bracket-comma/error delete mode 100644 3party/jansson/test/suites/invalid/bracket-comma/input delete mode 100644 3party/jansson/test/suites/invalid/bracket-one-comma/error.normal delete mode 100644 3party/jansson/test/suites/invalid/bracket-one-comma/error.strip delete mode 100644 3party/jansson/test/suites/invalid/bracket-one-comma/input delete mode 100644 3party/jansson/test/suites/invalid/empty/error delete mode 100644 3party/jansson/test/suites/invalid/empty/input delete mode 100644 3party/jansson/test/suites/invalid/extra-comma-in-array/error delete mode 100644 3party/jansson/test/suites/invalid/extra-comma-in-array/input delete mode 100644 3party/jansson/test/suites/invalid/extra-comma-in-multiline-array/error delete mode 100644 3party/jansson/test/suites/invalid/extra-comma-in-multiline-array/input delete mode 100644 3party/jansson/test/suites/invalid/garbage-after-newline/error delete mode 100644 3party/jansson/test/suites/invalid/garbage-after-newline/input delete mode 100644 3party/jansson/test/suites/invalid/garbage-at-the-end/error delete mode 100644 3party/jansson/test/suites/invalid/garbage-at-the-end/input delete mode 100644 3party/jansson/test/suites/invalid/integer-starting-with-zero/error delete mode 100644 3party/jansson/test/suites/invalid/integer-starting-with-zero/input delete mode 100644 3party/jansson/test/suites/invalid/invalid-escape/error delete mode 100644 3party/jansson/test/suites/invalid/invalid-escape/input delete mode 100644 3party/jansson/test/suites/invalid/invalid-identifier/error delete mode 100644 3party/jansson/test/suites/invalid/invalid-identifier/input delete mode 100644 3party/jansson/test/suites/invalid/invalid-negative-integer/error delete mode 100644 3party/jansson/test/suites/invalid/invalid-negative-integer/input delete mode 100644 3party/jansson/test/suites/invalid/invalid-negative-real/error delete mode 100644 3party/jansson/test/suites/invalid/invalid-negative-real/input delete mode 100644 3party/jansson/test/suites/invalid/invalid-second-surrogate/error delete mode 100644 3party/jansson/test/suites/invalid/invalid-second-surrogate/input delete mode 100644 3party/jansson/test/suites/invalid/invalid-unicode-escape/error delete mode 100644 3party/jansson/test/suites/invalid/invalid-unicode-escape/input delete mode 100644 3party/jansson/test/suites/invalid/lone-open-brace/error.normal delete mode 100644 3party/jansson/test/suites/invalid/lone-open-brace/error.strip delete mode 100644 3party/jansson/test/suites/invalid/lone-open-brace/input delete mode 100644 3party/jansson/test/suites/invalid/lone-open-bracket/error.normal delete mode 100644 3party/jansson/test/suites/invalid/lone-open-bracket/error.strip delete mode 100644 3party/jansson/test/suites/invalid/lone-open-bracket/input delete mode 100644 3party/jansson/test/suites/invalid/lone-second-surrogate/error delete mode 100644 3party/jansson/test/suites/invalid/lone-second-surrogate/input delete mode 100644 3party/jansson/test/suites/invalid/minus-sign-without-number/error delete mode 100644 3party/jansson/test/suites/invalid/minus-sign-without-number/input delete mode 100644 3party/jansson/test/suites/invalid/negative-integer-starting-with-zero/error delete mode 100644 3party/jansson/test/suites/invalid/negative-integer-starting-with-zero/input delete mode 100644 3party/jansson/test/suites/invalid/null-byte-in-object-key/error delete mode 100644 3party/jansson/test/suites/invalid/null-byte-in-object-key/input delete mode 100644 3party/jansson/test/suites/invalid/null-byte-in-string/error delete mode 100644 3party/jansson/test/suites/invalid/null-byte-in-string/input delete mode 100644 3party/jansson/test/suites/invalid/null-byte-in-string/nostrip delete mode 100644 3party/jansson/test/suites/invalid/null-byte-outside-string/error delete mode 100644 3party/jansson/test/suites/invalid/null-byte-outside-string/input delete mode 100644 3party/jansson/test/suites/invalid/null-byte-outside-string/nostrip delete mode 100644 3party/jansson/test/suites/invalid/null-escape-in-string/error delete mode 100644 3party/jansson/test/suites/invalid/null-escape-in-string/input delete mode 100644 3party/jansson/test/suites/invalid/null/error delete mode 100644 3party/jansson/test/suites/invalid/null/input delete mode 100644 3party/jansson/test/suites/invalid/object-apostrophes/error delete mode 100644 3party/jansson/test/suites/invalid/object-apostrophes/input delete mode 100644 3party/jansson/test/suites/invalid/object-garbage-at-end/error delete mode 100644 3party/jansson/test/suites/invalid/object-garbage-at-end/input delete mode 100644 3party/jansson/test/suites/invalid/object-in-unterminated-array/error.normal delete mode 100644 3party/jansson/test/suites/invalid/object-in-unterminated-array/error.strip delete mode 100644 3party/jansson/test/suites/invalid/object-in-unterminated-array/input delete mode 100644 3party/jansson/test/suites/invalid/object-no-colon/error.normal delete mode 100644 3party/jansson/test/suites/invalid/object-no-colon/error.strip delete mode 100644 3party/jansson/test/suites/invalid/object-no-colon/input delete mode 100644 3party/jansson/test/suites/invalid/object-no-value/error.normal delete mode 100644 3party/jansson/test/suites/invalid/object-no-value/error.strip delete mode 100644 3party/jansson/test/suites/invalid/object-no-value/input delete mode 100644 3party/jansson/test/suites/invalid/object-unterminated-value/error.normal delete mode 100644 3party/jansson/test/suites/invalid/object-unterminated-value/error.strip delete mode 100644 3party/jansson/test/suites/invalid/object-unterminated-value/input delete mode 100644 3party/jansson/test/suites/invalid/real-garbage-after-e/error delete mode 100644 3party/jansson/test/suites/invalid/real-garbage-after-e/input delete mode 100644 3party/jansson/test/suites/invalid/real-negative-overflow/error delete mode 100644 3party/jansson/test/suites/invalid/real-negative-overflow/input delete mode 100644 3party/jansson/test/suites/invalid/real-positive-overflow/error delete mode 100644 3party/jansson/test/suites/invalid/real-positive-overflow/input delete mode 100644 3party/jansson/test/suites/invalid/real-truncated-at-e/error delete mode 100644 3party/jansson/test/suites/invalid/real-truncated-at-e/input delete mode 100644 3party/jansson/test/suites/invalid/real-truncated-at-point/error delete mode 100644 3party/jansson/test/suites/invalid/real-truncated-at-point/input delete mode 100644 3party/jansson/test/suites/invalid/recursion-depth/error delete mode 100644 3party/jansson/test/suites/invalid/recursion-depth/input delete mode 100755 3party/jansson/test/suites/invalid/run delete mode 100644 3party/jansson/test/suites/invalid/tab-character-in-string/error delete mode 100644 3party/jansson/test/suites/invalid/tab-character-in-string/input delete mode 100644 3party/jansson/test/suites/invalid/too-big-negative-integer/error delete mode 100644 3party/jansson/test/suites/invalid/too-big-negative-integer/input delete mode 100644 3party/jansson/test/suites/invalid/too-big-positive-integer/error delete mode 100644 3party/jansson/test/suites/invalid/too-big-positive-integer/input delete mode 100644 3party/jansson/test/suites/invalid/truncated-unicode-surrogate/error delete mode 100644 3party/jansson/test/suites/invalid/truncated-unicode-surrogate/input delete mode 100644 3party/jansson/test/suites/invalid/unicode-identifier/error delete mode 100644 3party/jansson/test/suites/invalid/unicode-identifier/input delete mode 100644 3party/jansson/test/suites/invalid/unterminated-array-and-object/error.normal delete mode 100644 3party/jansson/test/suites/invalid/unterminated-array-and-object/error.strip delete mode 100644 3party/jansson/test/suites/invalid/unterminated-array-and-object/input delete mode 100644 3party/jansson/test/suites/invalid/unterminated-array/error.normal delete mode 100644 3party/jansson/test/suites/invalid/unterminated-array/error.strip delete mode 100644 3party/jansson/test/suites/invalid/unterminated-array/input delete mode 100644 3party/jansson/test/suites/invalid/unterminated-empty-key/error.normal delete mode 100644 3party/jansson/test/suites/invalid/unterminated-empty-key/error.strip delete mode 100644 3party/jansson/test/suites/invalid/unterminated-empty-key/input delete mode 100644 3party/jansson/test/suites/invalid/unterminated-key/error.normal delete mode 100644 3party/jansson/test/suites/invalid/unterminated-key/error.strip delete mode 100644 3party/jansson/test/suites/invalid/unterminated-key/input delete mode 100644 3party/jansson/test/suites/invalid/unterminated-object-and-array/error delete mode 100644 3party/jansson/test/suites/invalid/unterminated-object-and-array/input delete mode 100644 3party/jansson/test/suites/invalid/unterminated-string/error.normal delete mode 100644 3party/jansson/test/suites/invalid/unterminated-string/error.strip delete mode 100644 3party/jansson/test/suites/invalid/unterminated-string/input delete mode 100644 3party/jansson/test/suites/valid/complex-array/env delete mode 100644 3party/jansson/test/suites/valid/complex-array/input delete mode 100644 3party/jansson/test/suites/valid/complex-array/output delete mode 100644 3party/jansson/test/suites/valid/empty-array/input delete mode 100644 3party/jansson/test/suites/valid/empty-array/output delete mode 100644 3party/jansson/test/suites/valid/empty-object-in-array/input delete mode 100644 3party/jansson/test/suites/valid/empty-object-in-array/output delete mode 100644 3party/jansson/test/suites/valid/empty-object/input delete mode 100644 3party/jansson/test/suites/valid/empty-object/output delete mode 100644 3party/jansson/test/suites/valid/empty-string/input delete mode 100644 3party/jansson/test/suites/valid/empty-string/output delete mode 100644 3party/jansson/test/suites/valid/escaped-utf-control-char/input delete mode 100644 3party/jansson/test/suites/valid/escaped-utf-control-char/output delete mode 100644 3party/jansson/test/suites/valid/false/input delete mode 100644 3party/jansson/test/suites/valid/false/output delete mode 100644 3party/jansson/test/suites/valid/negative-int/input delete mode 100644 3party/jansson/test/suites/valid/negative-int/output delete mode 100644 3party/jansson/test/suites/valid/negative-one/input delete mode 100644 3party/jansson/test/suites/valid/negative-one/output delete mode 100644 3party/jansson/test/suites/valid/negative-zero/input delete mode 100644 3party/jansson/test/suites/valid/negative-zero/output delete mode 100644 3party/jansson/test/suites/valid/null/input delete mode 100644 3party/jansson/test/suites/valid/null/output delete mode 100644 3party/jansson/test/suites/valid/one-byte-utf-8/input delete mode 100644 3party/jansson/test/suites/valid/one-byte-utf-8/output delete mode 100644 3party/jansson/test/suites/valid/real-capital-e-negative-exponent/input delete mode 100644 3party/jansson/test/suites/valid/real-capital-e-negative-exponent/output delete mode 100644 3party/jansson/test/suites/valid/real-capital-e-positive-exponent/input delete mode 100644 3party/jansson/test/suites/valid/real-capital-e-positive-exponent/output delete mode 100644 3party/jansson/test/suites/valid/real-capital-e/input delete mode 100644 3party/jansson/test/suites/valid/real-capital-e/output delete mode 100644 3party/jansson/test/suites/valid/real-exponent/input delete mode 100644 3party/jansson/test/suites/valid/real-exponent/output delete mode 100644 3party/jansson/test/suites/valid/real-fraction-exponent/input delete mode 100644 3party/jansson/test/suites/valid/real-fraction-exponent/output delete mode 100644 3party/jansson/test/suites/valid/real-negative-exponent/input delete mode 100644 3party/jansson/test/suites/valid/real-negative-exponent/output delete mode 100644 3party/jansson/test/suites/valid/real-positive-exponent/input delete mode 100644 3party/jansson/test/suites/valid/real-positive-exponent/output delete mode 100644 3party/jansson/test/suites/valid/real-subnormal-number/input delete mode 100644 3party/jansson/test/suites/valid/real-subnormal-number/output delete mode 100644 3party/jansson/test/suites/valid/real-underflow/input delete mode 100644 3party/jansson/test/suites/valid/real-underflow/output delete mode 100755 3party/jansson/test/suites/valid/run delete mode 100644 3party/jansson/test/suites/valid/short-string/input delete mode 100644 3party/jansson/test/suites/valid/short-string/output delete mode 100644 3party/jansson/test/suites/valid/simple-ascii-string/input delete mode 100644 3party/jansson/test/suites/valid/simple-ascii-string/output delete mode 100644 3party/jansson/test/suites/valid/simple-int-0/input delete mode 100644 3party/jansson/test/suites/valid/simple-int-0/output delete mode 100644 3party/jansson/test/suites/valid/simple-int-1/input delete mode 100644 3party/jansson/test/suites/valid/simple-int-1/output delete mode 100644 3party/jansson/test/suites/valid/simple-int-123/input delete mode 100644 3party/jansson/test/suites/valid/simple-int-123/output delete mode 100644 3party/jansson/test/suites/valid/simple-object/input delete mode 100644 3party/jansson/test/suites/valid/simple-object/output delete mode 100644 3party/jansson/test/suites/valid/simple-real/input delete mode 100644 3party/jansson/test/suites/valid/simple-real/output delete mode 100644 3party/jansson/test/suites/valid/string-escapes/input delete mode 100644 3party/jansson/test/suites/valid/string-escapes/output delete mode 100644 3party/jansson/test/suites/valid/three-byte-utf-8/input delete mode 100644 3party/jansson/test/suites/valid/three-byte-utf-8/output delete mode 100644 3party/jansson/test/suites/valid/true/input delete mode 100644 3party/jansson/test/suites/valid/true/output delete mode 100644 3party/jansson/test/suites/valid/two-byte-utf-8/input delete mode 100644 3party/jansson/test/suites/valid/two-byte-utf-8/output delete mode 100644 3party/jansson/test/suites/valid/utf-8-string/input delete mode 100644 3party/jansson/test/suites/valid/utf-8-string/output delete mode 100644 3party/jansson/test/suites/valid/utf-surrogate-four-byte-encoding/input delete mode 100644 3party/jansson/test/suites/valid/utf-surrogate-four-byte-encoding/output diff --git a/.gitmodules b/.gitmodules index 99c2161d03..113383eba8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -47,3 +47,6 @@ [submodule "3party/pugixml/pugixml"] path = 3party/pugixml/pugixml url = https://github.com/zeux/pugixml.git +[submodule "3party/jansson/jansson"] + path = 3party/jansson/jansson + url = https://github.com/akheron/jansson.git diff --git a/3party/jansson/.travis.yml b/3party/jansson/.travis.yml deleted file mode 100644 index 5b23c9484c..0000000000 --- a/3party/jansson/.travis.yml +++ /dev/null @@ -1,22 +0,0 @@ -env: - matrix: - - JANSSON_BUILD_METHOD=cmake JANSSON_CMAKE_OPTIONS="-DJANSSON_TEST_WITH_VALGRIND=ON" JANSSON_EXTRA_INSTALL="valgrind" - - JANSSON_BUILD_METHOD=autotools - - JANSSON_BUILD_METHOD=coverage JANSSON_CMAKE_OPTIONS="-DJANSSON_COVERAGE=ON -DJANSSON_COVERALLS=ON -DCMAKE_BUILD_TYPE=Debug" JANSSON_EXTRA_INSTALL="lcov curl" -language: c -compiler: - - gcc - - clang -matrix: - exclude: - - compiler: clang - env: JANSSON_BUILD_METHOD=coverage JANSSON_CMAKE_OPTIONS="-DJANSSON_COVERAGE=ON -DJANSSON_COVERALLS=ON -DCMAKE_BUILD_TYPE=Debug" JANSSON_EXTRA_INSTALL="lcov curl" - allow_failures: - - env: JANSSON_BUILD_METHOD=coverage JANSSON_CMAKE_OPTIONS="-DJANSSON_COVERAGE=ON -DJANSSON_COVERALLS=ON -DCMAKE_BUILD_TYPE=Debug" JANSSON_EXTRA_INSTALL="lcov curl" -install: - - sudo apt-get update -qq - - sudo apt-get install -y -qq cmake $JANSSON_EXTRA_INSTALL -script: - - if [ "$JANSSON_BUILD_METHOD" = "autotools" ]; then autoreconf -f -i && CFLAGS=-Werror ./configure && make check; fi - - if [ "$JANSSON_BUILD_METHOD" = "cmake" ]; then mkdir build && cd build && cmake $JANSSON_CMAKE_OPTIONS .. && cmake --build . && ctest --output-on-failure; fi - - if [ "$JANSSON_BUILD_METHOD" = "coverage" ]; then mkdir build && cd build && cmake $JANSSON_CMAKE_OPTIONS .. && cmake --build . && cmake --build . --target coveralls; fi diff --git a/3party/jansson/Android.mk b/3party/jansson/Android.mk deleted file mode 100644 index e3b09e72cc..0000000000 --- a/3party/jansson/Android.mk +++ /dev/null @@ -1,30 +0,0 @@ -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_ARM_MODE := arm - -LOCAL_SRC_FILES := \ - src/dump.c \ - src/error.c \ - src/hashtable.c \ - src/hashtable_seed.c \ - src/load.c \ - src/memory.c \ - src/pack_unpack.c \ - src/strbuffer.c \ - src/strconv.c \ - src/utf.c \ - src/value.c - -LOCAL_C_INCLUDES += \ - $(LOCAL_PATH) \ - $(LOCAL_PATH)/android \ - $(LOCAL_PATH)/src - -LOCAL_MODULE_TAGS := optional -LOCAL_SHARED_LIBRARIES := libc -LOCAL_CFLAGS += -O3 -DHAVE_STDINT_H=1 - -LOCAL_MODULE:= libjansson - -include $(BUILD_SHARED_LIBRARY) diff --git a/3party/jansson/CHANGES b/3party/jansson/CHANGES deleted file mode 100644 index 211cb5749a..0000000000 --- a/3party/jansson/CHANGES +++ /dev/null @@ -1,903 +0,0 @@ -Version 2.12 - -Released 2018-11-25 - -* Bug fixes: - - - Fix error message in `json_pack()` for NULL object (#409). - - - Avoid invalid memory read in `json_pack()` (#421). - - - Call va_end after va_copy in `json_vsprintf()` (#427). - - - Improve handling of formats with '?' and '*' in `json_pack()` (#438). - - - Remove inappropriate `jsonp_free()` which caused segmentation fault in - error handling (#444). - -* Build: - - - Add function attributes for GCC and CLANG to provide warnings on improper - use of jansson routines (#404). - - - Many CMake fixes (#408, #412, #415). - - - Enable -Bsymbolic-functions linker flag whenever possible. - - - Resolve various compiler warnings (#423, #430, #435, #436). - - - Fix code coverage ignored paths (#439). - -* Other: - - - Test coverage improvements (#398, #400). - - - Add VS 2017 to appveyor, update Visual Studio documentation (#417). - - - Update copyright for 2018 (#424). - - - Update install instructions in README (#401). - -Version 2.11 -============ - -Released 2018-02-09 - -* New features: - - - Add `json_pack()` format specifiers s*, o* and O* for values that - can be omitted if null (#339). - - - Add `json_error_code()` to retrieve numeric error codes (#365, #380, - #381). - - - Enable thread safety for `json_dump()` on all systems. Enable thread - safe `json_decref()` and `json_incref()` for modern compilers (#389). - - - Add `json_sprintf()` and `json_vsprintf()` (#393). - -* Bug Fixes: - - - Fix incorrect report of success from `json_dump_file()` when an error - is returned by `fclose()` (#359). - - - Make json_equal() const-correct (#344). - - - Fix incomplete stealing of references by `json_pack()` (#374). - -* Build: - - - Work around gcc's -Wimplicit-fallthrough. - - - Fix CMake detection of `sys/types.h` header (#375). - - - Fix `jansson.pc` generated by CMake to be more consistent with the one - generated using GNU Autotools (#368). - -* Other: - - - Miscellaneous documentation fixes (#356, #378, #395). - - - Remove unnecessary reference actions from parsers (#377). - -Version 2.10 -============ - -Released 2017-03-02 - -* New features: - - - Add JSON_EMBED encoding flag allowing arrays and objects to be encoded - into existing streams (#329). - - - Add `json_dumpb()` function for dumping to a pre-allocated buffer (#328). - - - Add `json_dumpfd()` and `json_loadfd()` functions for dumping to streaming - file descriptors (#328). - - - Add support for parsing buffers larger than 2GB (#309). - -* Build: - - - Fix CMake build when LONG_LONG_INT is defined as "" (#321) - -* Other: - - - Internal code cleanup (#311, #314) - -Version 2.9 -=========== - -Released 2016-09-18 - -* New features: - - - Add ``json_auto_t`` to automatically decref a value that goes out - of scope. Available only on GCC and Clang. (#301) - -* Build: - - - Fix CMake build (at least on Linux) by removing conflicting - jansson_config.h from the distribution (#306) - - - Change CMake install target generation to be optional (#305) - -* Documentation: - - - Small documentation fixes. - - -Version 2.8 -=========== - -Released 2016-08-30 - -* New features: - - - Always preserve insertion order of object items. - `json_object_iter()` and friends, `json_object_foreach()` and - `json_dumps()` and friends now always work in the insertion order of - object items (#293). - - - Add `json_object_foreach_safe()` macro that allows - `json_object_del()` calls during iteration (#230). - - - Add `json_get_alloc_funcs()` to allow reading the allocation - functions set by `json_set_alloc_funcs()` (#262, #264). - - - Add `json_pack()` format specifiers s?, o? and O? for values that - can be null (#261, #270). - -* Bug fixes: - - - Fix a crash when parsing inputs consisting of very deeply nested - arrays or objects (#282, #284). - - - Never convert numbers to integers in the parser when - JSON_DECODE_INT_AS_REAL is set. This fixes error messages for - overflowing numbers when JSON_DECODE_INT_AS_REAL is set (#212). - - - Fix a use-after-free in `json_pack()` error handling. - - - Fix subnormal number parsing on mingw32. - - - Handle out-of-memory situations gracefully in the hashtable - implementation (#298). - -* Build: - - - Fix build with CMake on all versions of Visual Studio up to 2015 - (#262, #289). - - - Fix pkgconfig libdir when using CMake (#268). - - - Fix CMake config for static CRT builds on Windows (#206). - - - Fix warnings on LLVM 6.0 targeting iOS arm64 (#208). - - - Add coverlls.io support via Travis for a nice test coverage badge - (#211). - - - Don't expect ``jansson_config.h`` to be in the compiler's include - path (#209). - - - Add a build-time option to set initial hashtable size (#213). - - - Use snprintf and strncpy in place of sprintf and strcpy to silence - linker warnings on OpenBSD (#233). - -* Documentation: - - - Fix various typos in documentation, and a broken link (#258). - - - Add an example program in ``examples/`` (#214, #217). - - - Fix building of documentation man pages (#207). - - - Document the fact that copying objects doesn't preserve the - insertion order of keys (#237). - -* Tests: - - - Don't use the nonstandard __FUNCTION__ macro in tests. - - - Use expr instead of $((...)) in shell scripts for Solaris 10 - compatibility. - - - Disable Visual Studio warning C4756 when triggered deliberately in - tests (#216). - - - Other minor fixes (#221, #248). - -* Other changes: - - - List all unrecognized object keys when strict unpacking fails - (#263). - - - Alter the order of the members of the hashtable_pair struct for - easier debugging. - - - Minor performance improvement to `json_dump()` and friends (#234). - - - Minor style fixes (#255, #257). - - -Version 2.7 -=========== - -Released 2014-10-02 - -* New features: - - - `json_pack()` and friends: Add format specifiers ``s%`` and ``+%`` - for a size_t string length (#141). - - - `json_unpack()` and friends: Add format specifier ``s%`` for - unpacking the string length along with the string itself (#141). - - - Add length-aware string constructors `json_stringn()` and - `json_stringn_nocheck()`, length-aware string mutators - `json_string_setn()` and `json_string_setn_nocheck()`, and a - function for getting string's length `json_string_length()` (#141, - #143). - - - Support ``\u0000`` escapes in the decoder. The support can be - enabled by using the ``JSON_ALLOW_NUL`` decoding flag (#141). - - - Add `json_boolean_value()` as an alias for `json_is_true()` - (#146). - - - Add JSON_REAL_PRECISION encoding flag/macro for controlling real - number precision (#178). - - - Define the maximum indentation as JSON_MAX_INDENT (#191). - -* Bug fixes: - - - Some malformed ``\uNNNN`` escapes could crash the decoder with an - assertion failure. - - - Avoid integer overflows with very long strings in UTF-8 decoder and - hashtable. - - - Check for *NULL* key in `json_object_get()` and - `json_object_del()` (#151). - - - Enhance hashtable seeding on Windows (#162). - - - `json_unpack()`: Allow mixing JSON_STRICT with optional keys - (#162, #163). - - - Fix int/int32 mismatch (#142). - - - Parse subnormal numbers correctly (#202). - -* Build: - - - Remove VS2010 build files. CMake should be used on Windows instead - (#165). - - - Fix CMake build flags for MinGW (#193). - - - Add CMake config files for find_package. Rename config.h to - jansson_private_config.h (#157, #159). - - - Make Valgrind checks work with CMake (#160). - - - Fix feature checks to use correct __ATOMIC flags. - - - Fix CMake checks for uint16_t and uint8_t support (#177). - - - Make Jansson build on SmartOS/Solaris (#171). - - - Work around a GCC bug on Solaris (#175). - - - Fix autoreconf on Debian (#182). - - - Don't use GNU make specific export for global AM_CFLAGS (#203, - #204). - - - Fix building on Android using the supplied Android.mk (#166, - #174). - - - Android.mk: Add -DHAVE_STDINT_H to LOCAL_CFLAGS (#200). - -* Documentation: - - - Document JANSSON_BUILD_SHARED_LIBS CMake option (#187). - -* Tests: - - - Close file handles correctly (#198). - -* Other changes: - - - ``\uNNNN`` escapes are now encoded in upper case for better - readability. - - - Enable usage of AddressSanitizer (#180). - - -Version 2.6 -=========== - -Released 2014-02-11 - -* Security: - - - CVE-2013-6401: The hash function used by the hashtable - implementation has been changed, and is automatically seeded with - random data when the first JSON object is created. This prevents - an attacker from causing large JSON objects with specially crafted - keys perform poorly. - -* New features: - - - `json_object_seed()`: Set the seed value of the hash function. - -* Bug fixes: - - - Include CMake specific files in the release tarball. - -* Documentation: - - - Fix tutorial source to send a User-Agent header, which is now - required by the GitHub API. - - - Set all memory to zero in secure_free() example. - - -Version 2.5 -=========== - -Released 2013-09-19 - -* New features: - - - `json_pack()` and friends: Add format specifiers ``s#``, ``+`` and - ``+#``. - - - Add ``JSON_DECODE_INT_AS_REAL`` decoding flag to treat all numbers - as real in the decoder (#123). - - - Add `json_array_foreach()`, paralleling `json_object_foreach()` - (#118). - -* Bug fixes: - - - `json_dumps()` and friends: Don't crash if json is *NULL* and - ``JSON_ENCODE_ANY`` is set. - - - Fix a theoretical integer overflow in `jsonp_strdup()`. - - - Fix `l_isxdigit()` macro (#97). - - - Fix an off-by-one error in `json_array_remove()`. - -* Build: - - - Support CMake in addition to GNU Autotools (#106, #107, #112, - #115, #120, #127). - - - Support building for Android (#109). - - - Don't use ``-Werror`` by default. - - - Support building and testing with VPATH (#93). - - - Fix compilation when ``NDEBUG`` is defined (#128) - -* Tests: - - - Fix a refleak in ``test/bin/json_process.c``. - -* Documentation: - - - Clarify the return value of `json_load_callback_t`. - - - Document how to circumvent problems with separate heaps on Windows. - - - Fix memory leaks and warnings in ``github_commits.c``. - - - Use `json_decref()` properly in tutorial. - -* Other: - - - Make it possible to forward declare ``struct json_t``. - - -Version 2.4 -=========== - -Released 2012-09-23 - -* New features: - - - Add `json_boolean()` macro that returns the JSON true or false - value based on its argument (#86). - - - Add `json_load_callback()` that calls a callback function - repeatedly to read the JSON input (#57). - - - Add JSON_ESCAPE_SLASH encoding flag to escape all occurences of - ``/`` with ``\/``. - -* Bug fixes: - - - Check for and reject NaN and Inf values for reals. Encoding these - values resulted in invalid JSON. - - - Fix `json_real_set()` to return -1 on error. - -* Build: - - - Jansson now builds on Windows with Visual Studio 2010, and - includes solution and project files in ``win32/vs2010/`` - directory. - - - Fix build warnings (#77, #78). - - - Add ``-no-undefined`` to LDFLAGS (#90). - -* Tests: - - - Fix the symbol exports test on Linux/PPC64 (#88). - -* Documentation: - - - Fix typos (#73, #84). - - -Version 2.3.1 -============= - -Released 2012-04-20 - -* Build issues: - - - Only use ``long long`` if ``strtoll()`` is also available. - -* Documentation: - - - Fix the names of library version constants in documentation. (#52) - - - Change the tutorial to use GitHub API v3. (#65) - -* Tests: - - - Make some tests locale independent. (#51) - - - Distribute the library exports test in the tarball. - - - Make test run on shells that don't support the ``export FOO=bar`` - syntax. - - -Version 2.3 -=========== - -Released 2012-01-27 - -* New features: - - - `json_unpack()` and friends: Add support for optional object keys - with the ``{s?o}`` syntax. - - - Add `json_object_update_existing()` and - `json_object_update_missing()`, for updating only existing keys or - only adding missing keys to an object. (#37) - - - Add `json_object_foreach()` for more convenient iteration over - objects. (#45, #46) - - - When decoding JSON, write the number of bytes that were read from - input to ``error.position`` also on success. This is handy with - ``JSON_DISABLE_EOF_CHECK``. - - - Add support for decoding any JSON value, not just arrays or - objects. The support is enabled with the new ``JSON_DECODE_ANY`` - flag. Patch by Andrea Marchesini. (#4) - -* Bug fixes - - - Avoid problems with object's serial number growing too big. (#40, - #41) - - - Decoding functions now return NULL if the first argument is NULL. - Patch by Andrea Marchesini. - - - Include ``jansson_config.h.win32`` in the distribution tarball. - - - Remove ``+`` and leading zeros from exponents in the encoder. - (#39) - - - Make Jansson build and work on MinGW. (#39, #38) - -* Documentation - - - Note that the same JSON values must not be encoded in parallel by - separate threads. (#42) - - - Document MinGW support. - - -Version 2.2.1 -============= - -Released 2011-10-06 - -* Bug fixes: - - - Fix real number encoding and decoding under non-C locales. (#32) - - - Fix identifier decoding under non-UTF-8 locales. (#35) - - - `json_load_file()`: Open the input file in binary mode for maximum - compatiblity. - -* Documentation: - - - Clarify the lifecycle of the result of the ``s`` fromat of - `json_unpack()`. (#31) - - - Add some portability info. (#36) - - - Little clarifications here and there. - -* Other: - - - Some style fixes, issues detected by static analyzers. - - -Version 2.2 -=========== - -Released 2011-09-03 - -* New features: - - - `json_dump_callback()`: Pass the encoder output to a callback - function in chunks. - -* Bug fixes: - - - `json_string_set()`: Check that target is a string and value is - not NULL. - -* Other: - - - Documentation typo fixes and clarifications. - - -Version 2.1 -=========== - -Released 2011-06-10 - -* New features: - - - `json_loadb()`: Decode a string with a given size, useful if the - string is not null terminated. - - - Add ``JSON_ENCODE_ANY`` encoding flag to allow encoding any JSON - value. By default, only arrays and objects can be encoded. (#19) - - - Add ``JSON_REJECT_DUPLICATES`` decoding flag to issue a decoding - error if any JSON object in the input contins duplicate keys. (#3) - - - Add ``JSON_DISABLE_EOF_CHECK`` decoding flag to stop decoding after a - valid JSON input. This allows other data after the JSON data. - -* Bug fixes: - - - Fix an additional memory leak when memory allocation fails in - `json_object_set()` and friends. - - - Clear errno before calling `strtod()` for better portability. (#27) - -* Building: - - - Avoid set-but-not-used warning/error in a test. (#20) - -* Other: - - - Minor clarifications to documentation. - - -Version 2.0.1 -============= - -Released 2011-03-31 - -* Bug fixes: - - - Replace a few `malloc()` and `free()` calls with their - counterparts that support custom memory management. - - - Fix object key hashing in json_unpack() strict checking mode. - - - Fix the parentheses in ``JANSSON_VERSION_HEX`` macro. - - - Fix `json_object_size()` return value. - - - Fix a few compilation issues. - -* Portability: - - - Enhance portability of `va_copy()`. - - - Test framework portability enhancements. - -* Documentation: - - - Distribute ``doc/upgrading.rst`` with the source tarball. - - - Build documentation in strict mode in ``make distcheck``. - - -Version 2.0 -=========== - -Released 2011-02-28 - -This release is backwards incompatible with the 1.x release series. -See the chapter "Upgrading from older versions" in documentation for -details. - -* Backwards incompatible changes: - - - Unify unsigned integer usage in the API: All occurences of - unsigned int and unsigned long have been replaced with size_t. - - - Change JSON integer's underlying type to the widest signed integer - type available, i.e. long long if it's supported, otherwise long. - Add a typedef json_int_t that defines the type. - - - Change the maximum indentation depth to 31 spaces in encoder. This - frees up bits from the flags parameter of encoding functions - `json_dumpf()`, `json_dumps()` and `json_dump_file()`. - - - For future needs, add a flags parameter to all decoding functions - `json_loadf()`, `json_loads()` and `json_load_file()`. - -* New features - - - `json_pack()`, `json_pack_ex()`, `json_vpack_ex()`: Create JSON - values based on a format string. - - - `json_unpack()`, `json_unpack_ex()`, `json_vunpack_ex()`: Simple - value extraction and validation functionality based on a format - string. - - - Add column, position and source fields to the ``json_error_t`` - struct. - - - Enhance error reporting in the decoder. - - - ``JANSSON_VERSION`` et al.: Preprocessor constants that define the - library version. - - - `json_set_alloc_funcs()`: Set custom memory allocation functions. - -* Fix many portability issues, especially on Windows. - -* Configuration - - - Add file ``jansson_config.h`` that contains site specific - configuration. It's created automatically by the configure script, - or can be created by hand if the configure script cannot be used. - The file ``jansson_config.h.win32`` can be used without - modifications on Windows systems. - - - Add a section to documentation describing how to build Jansson on - Windows. - - - Documentation now requires Sphinx 1.0 or newer. - - -Version 1.3 -=========== - -Released 2010-06-13 - -* New functions: - - - `json_object_iter_set()`, `json_object_iter_set_new()`: Change - object contents while iterating over it. - - - `json_object_iter_at()`: Return an iterator that points to a - specific object item. - -* New encoding flags: - - - ``JSON_PRESERVE_ORDER``: Preserve the insertion order of object - keys. - -* Bug fixes: - - - Fix an error that occured when an array or object was first - encoded as empty, then populated with some data, and then - re-encoded - - - Fix the situation like above, but when the first encoding resulted - in an error - -* Documentation: - - - Clarify the documentation on reference stealing, providing an - example usage pattern - - -Version 1.2.1 -============= - -Released 2010-04-03 - -* Bug fixes: - - - Fix reference counting on ``true``, ``false`` and ``null`` - - Estimate real number underflows in decoder with 0.0 instead of - issuing an error - -* Portability: - - - Make ``int32_t`` available on all systems - - Support compilers that don't have the ``inline`` keyword - - Require Autoconf 2.60 (for ``int32_t``) - -* Tests: - - - Print test names correctly when ``VERBOSE=1`` - - ``test/suites/api``: Fail when a test fails - - Enhance tests for iterators - - Enhance tests for decoding texts that contain null bytes - -* Documentation: - - - Don't remove ``changes.rst`` in ``make clean`` - - Add a chapter on RFC conformance - - -Version 1.2 -=========== - -Released 2010-01-21 - -* New functions: - - - `json_equal()`: Test whether two JSON values are equal - - `json_copy()` and `json_deep_copy()`: Make shallow and deep copies - of JSON values - - Add a version of all functions taking a string argument that - doesn't check for valid UTF-8: `json_string_nocheck()`, - `json_string_set_nocheck()`, `json_object_set_nocheck()`, - `json_object_set_new_nocheck()` - -* New encoding flags: - - - ``JSON_SORT_KEYS``: Sort objects by key - - ``JSON_ENSURE_ASCII``: Escape all non-ASCII Unicode characters - - ``JSON_COMPACT``: Use a compact representation with all unneeded - whitespace stripped - -* Bug fixes: - - - Revise and unify whitespace usage in encoder: Add spaces between - array and object items, never append newline to output. - - Remove const qualifier from the ``json_t`` parameter in - `json_string_set()`, `json_integer_set()` and `json_real_set`. - - Use ``int32_t`` internally for representing Unicode code points - (int is not enough on all platforms) - -* Other changes: - - - Convert ``CHANGES`` (this file) to reStructured text and add it to - HTML documentation - - The test system has been refactored. Python is no longer required - to run the tests. - - Documentation can now be built by invoking ``make html`` - - Support for pkg-config - - -Version 1.1.3 -============= - -Released 2009-12-18 - -* Encode reals correctly, so that first encoding and then decoding a - real always produces the same value -* Don't export private symbols in ``libjansson.so`` - - -Version 1.1.2 -============= - -Released 2009-11-08 - -* Fix a bug where an error message was not produced if the input file - could not be opened in `json_load_file()` -* Fix an assertion failure in decoder caused by a minus sign without a - digit after it -* Remove an unneeded include of ``stdint.h`` in ``jansson.h`` - - -Version 1.1.1 -============= - -Released 2009-10-26 - -* All documentation files were not distributed with v1.1; build - documentation in make distcheck to prevent this in the future -* Fix v1.1 release date in ``CHANGES`` - - -Version 1.1 -=========== - -Released 2009-10-20 - -* API additions and improvements: - - - Extend array and object APIs - - Add functions to modify integer, real and string values - - Improve argument validation - - Use unsigned int instead of ``uint32_t`` for encoding flags - -* Enhance documentation - - - Add getting started guide and tutorial - - Fix some typos - - General clarifications and cleanup - -* Check for integer and real overflows and underflows in decoder -* Make singleton values thread-safe (``true``, ``false`` and ``null``) -* Enhance circular reference handling -* Don't define ``-std=c99`` in ``AM_CFLAGS`` -* Add C++ guards to ``jansson.h`` -* Minor performance and portability improvements -* Expand test coverage - - -Version 1.0.4 -============= - -Released 2009-10-11 - -* Relax Autoconf version requirement to 2.59 -* Make Jansson compile on platforms where plain ``char`` is unsigned -* Fix API tests for object - - -Version 1.0.3 -============= - -Released 2009-09-14 - -* Check for integer and real overflows and underflows in decoder -* Use the Python json module for tests, or simplejson if the json - module is not found -* Distribute changelog (this file) - - -Version 1.0.2 -============= - -Released 2009-09-08 - -* Handle EOF correctly in decoder - - -Version 1.0.1 -============= - -Released 2009-09-04 - -* Fixed broken `json_is_boolean()` - - -Version 1.0 -=========== - -Released 2009-08-25 - -* Initial release diff --git a/3party/jansson/CMakeLists.txt b/3party/jansson/CMakeLists.txt index 7c0b95a734..c5fb507275 100644 --- a/3party/jansson/CMakeLists.txt +++ b/3party/jansson/CMakeLists.txt @@ -1,32 +1,17 @@ -project(jansson) +set(JANSSON_EXAMPLES OFF) +set(JANSSON_BUILD_DOCS OFF) +set(JANSSON_WITHOUT_TESTS OFF) +set(JANSSON_INSTALL OFF) -include_directories(src ../../) +add_subdirectory(jansson) -set( - SRC - jansson_handle.cpp - jansson_handle.hpp - myjansson.cpp - myjansson.hpp - src/dump.c - src/error.c - src/hashtable.c - src/hashtable.h - src/hashtable_seed.c - src/jansson_config.h - src/jansson.h - src/jansson_private_config.h - src/jansson_private.h - src/load.c - src/lookup3.h - src/memory.c - src/pack_unpack.c - src/strbuffer.c - src/strbuffer.h - src/strconv.c - src/utf.c - src/utf.h - src/value.c +target_sources(jansson + PRIVATE + jansson_handle.cpp + myjansson.cpp + PUBLIC + jansson_handle.hpp + myjansson.hpp ) -add_library(${PROJECT_NAME} ${SRC}) +target_include_directories(jansson PUBLIC jansson/src .) diff --git a/3party/jansson/CleanSpec.mk b/3party/jansson/CleanSpec.mk deleted file mode 100644 index b84e1b65e7..0000000000 --- a/3party/jansson/CleanSpec.mk +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright (C) 2007 The Android Open Source Project -# -# 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. -# - -# If you don't need to do a full clean build but would like to touch -# a file or delete some intermediate files, add a clean step to the end -# of the list. These steps will only be run once, if they haven't been -# run before. -# -# E.g.: -# $(call add-clean-step, touch -c external/sqlite/sqlite3.h) -# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates) -# -# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with -# files that are missing or have been moved. -# -# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory. -# Use $(OUT_DIR) to refer to the "out" directory. -# -# If you need to re-do something that's already mentioned, just copy -# the command and add it to the bottom of the list. E.g., if a change -# that you made last week required touching a file and a change you -# made today requires touching the same file, just copy the old -# touch step and add it to the end of the list. -# -# ************************************************ -# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST -# ************************************************ - -# For example: -#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates) -#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates) -#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f) -#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*) - -# ************************************************ -# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST -# ************************************************ diff --git a/3party/jansson/LICENSE b/3party/jansson/LICENSE deleted file mode 100644 index ca2218c033..0000000000 --- a/3party/jansson/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2009-2018 Petri Lehtinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/3party/jansson/Makefile.am b/3party/jansson/Makefile.am deleted file mode 100644 index 0de2ac16d9..0000000000 --- a/3party/jansson/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -EXTRA_DIST = CHANGES LICENSE README.rst CMakeLists.txt cmake android examples -SUBDIRS = doc src test - -# "make distcheck" builds the dvi target, so use it to check that the -# documentation is built correctly. -dvi: - $(MAKE) SPHINXOPTS_EXTRA=-W html - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = jansson.pc diff --git a/3party/jansson/README.rst b/3party/jansson/README.rst deleted file mode 100644 index 371e913671..0000000000 --- a/3party/jansson/README.rst +++ /dev/null @@ -1,69 +0,0 @@ -Jansson README -============== - -.. image:: https://travis-ci.org/akheron/jansson.png - :target: https://travis-ci.org/akheron/jansson - -.. image:: https://ci.appveyor.com/api/projects/status/lmhkkc4q8cwc65ko - :target: https://ci.appveyor.com/project/akheron/jansson - -.. image:: https://coveralls.io/repos/akheron/jansson/badge.png?branch=master - :target: https://coveralls.io/r/akheron/jansson?branch=master - -Jansson_ is a C library for encoding, decoding and manipulating JSON -data. Its main features and design principles are: - -- Simple and intuitive API and data model - -- `Comprehensive documentation`_ - -- No dependencies on other libraries - -- Full Unicode support (UTF-8) - -- Extensive test suite - -Jansson is licensed under the `MIT license`_; see LICENSE in the -source distribution for details. - - -Compilation and Installation ----------------------------- - -If you obtained a `source tarball`_ from the "Releases" section of the main -site just use the standard autotools commands:: - - $ ./configure - $ make - $ make install - -To run the test suite, invoke:: - - $ make check - -If the source has been checked out from a Git repository, the -./configure script has to be generated first. The easiest way is to -use autoreconf:: - - $ autoreconf -i - - -Documentation -------------- - -Documentation is available at http://jansson.readthedocs.io/en/latest/. - -The documentation source is in the ``doc/`` subdirectory. To generate -HTML documentation, invoke:: - - $ make html - -Then, point your browser to ``doc/_build/html/index.html``. Sphinx_ -1.0 or newer is required to generate the documentation. - - -.. _Jansson: http://www.digip.org/jansson/ -.. _`Comprehensive documentation`: http://jansson.readthedocs.io/en/latest/ -.. _`MIT license`: http://www.opensource.org/licenses/mit-license.php -.. _`source tarball`: http://www.digip.org/jansson#releases -.. _Sphinx: http://sphinx.pocoo.org/ diff --git a/3party/jansson/android/jansson_config.h b/3party/jansson/android/jansson_config.h deleted file mode 100644 index 618a0da73c..0000000000 --- a/3party/jansson/android/jansson_config.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2010-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - * - * - * This file specifies a part of the site-specific configuration for - * Jansson, namely those things that affect the public API in - * jansson.h. - * - * The configure script copies this file to jansson_config.h and - * replaces @var@ substitutions by values that fit your system. If you - * cannot run the configure script, you can do the value substitution - * by hand. - */ - -#ifndef JANSSON_CONFIG_H -#define JANSSON_CONFIG_H - -/* If your compiler supports the inline keyword in C, JSON_INLINE is - defined to `inline', otherwise empty. In C++, the inline is always - supported. */ -#ifdef __cplusplus -#define JSON_INLINE inline -#else -#define JSON_INLINE inline -#endif - -/* If your compiler supports the `long long` type and the strtoll() - library function, JSON_INTEGER_IS_LONG_LONG is defined to 1, - otherwise to 0. */ -#define JSON_INTEGER_IS_LONG_LONG 1 - -/* If locale.h and localeconv() are available, define to 1, - otherwise to 0. */ -#define JSON_HAVE_LOCALECONV 0 - -/* Maximum recursion depth for parsing JSON input. - This limits the depth of e.g. array-within-array constructions. */ -#define JSON_PARSER_MAX_DEPTH 2048 - -#endif diff --git a/3party/jansson/appveyor.yml b/3party/jansson/appveyor.yml deleted file mode 100644 index 796fa0ba55..0000000000 --- a/3party/jansson/appveyor.yml +++ /dev/null @@ -1,16 +0,0 @@ -environment: - matrix: - - VS: Visual Studio 9 2008 - - VS: Visual Studio 10 2010 - - VS: Visual Studio 11 2012 - - VS: Visual Studio 12 2013 - - VS: Visual Studio 14 2015 - - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - VS: Visual Studio 15 2017 - -build_script: - - md build - - cd build - - cmake -G "%VS%" .. - - cmake --build . --config Release - - ctest --output-on-failure diff --git a/3party/jansson/cmake/CheckFunctionKeywords.cmake b/3party/jansson/cmake/CheckFunctionKeywords.cmake deleted file mode 100644 index 44601fd4e9..0000000000 --- a/3party/jansson/cmake/CheckFunctionKeywords.cmake +++ /dev/null @@ -1,15 +0,0 @@ -include(CheckCSourceCompiles) - -macro(check_function_keywords _wordlist) - set(${_result} "") - foreach(flag ${_wordlist}) - string(REGEX REPLACE "[-+/ ()]" "_" flagname "${flag}") - string(TOUPPER "${flagname}" flagname) - set(have_flag "HAVE_${flagname}") - check_c_source_compiles("${flag} void func(); void func() { } int main() { func(); return 0; }" ${have_flag}) - if(${have_flag} AND NOT ${_result}) - set(${_result} "${flag}") -# break() - endif(${have_flag} AND NOT ${_result}) - endforeach(flag) -endmacro(check_function_keywords) diff --git a/3party/jansson/cmake/CodeCoverage.cmake b/3party/jansson/cmake/CodeCoverage.cmake deleted file mode 100644 index 79ec8ac080..0000000000 --- a/3party/jansson/cmake/CodeCoverage.cmake +++ /dev/null @@ -1,163 +0,0 @@ -# -# Boost Software License - Version 1.0 - August 17th, 2003 -# -# Permission is hereby granted, free of charge, to any person or organization -# obtaining a copy of the software and accompanying documentation covered by -# this license (the "Software") to use, reproduce, display, distribute, -# execute, and transmit the Software, and to prepare derivative works of the -# Software, and to permit third-parties to whom the Software is furnished to -# do so, all subject to the following: -# -# The copyright notices in the Software and this entire statement, including -# the above license grant, this restriction and the following disclaimer, -# must be included in all copies of the Software, in whole or in part, and -# all derivative works of the Software, unless such copies or derivative -# works are solely in the form of machine-executable object code generated by -# a source language processor. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -# SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -# FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -# DEALINGS IN THE SOFTWARE. -# -# 2012-01-31, Lars Bilke -# - Enable Code Coverage -# -# 2013-09-17, Joakim Söderberg -# - Added support for Clang. -# - Some additional usage instructions. -# -# USAGE: -# 1. Copy this file into your cmake modules path. -# -# 2. Add the following line to your CMakeLists.txt: -# INCLUDE(CodeCoverage) -# -# 3. Set compiler flags to turn off optimization and enable coverage: -# SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") -# SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") -# -# 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target -# which runs your test executable and produces a lcov code coverage report: -# Example: -# SETUP_TARGET_FOR_COVERAGE( -# my_coverage_target # Name for custom target. -# test_driver # Name of the test driver executable that runs the tests. -# # NOTE! This should always have a ZERO as exit code -# # otherwise the coverage generation will not complete. -# coverage # Name of output directory. -# ) -# -# 4. Build a Debug build: -# cmake -DCMAKE_BUILD_TYPE=Debug .. -# make -# make my_coverage_target -# -# - -# Check prereqs -FIND_PROGRAM( GCOV_PATH gcov ) -FIND_PROGRAM( LCOV_PATH lcov ) -FIND_PROGRAM( GENHTML_PATH genhtml ) -FIND_PROGRAM( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests) - -IF(NOT GCOV_PATH) - MESSAGE(FATAL_ERROR "gcov not found! Aborting...") -ENDIF() # NOT GCOV_PATH - -IF(NOT (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC)) - # Clang version 3.0.0 and greater now supports gcov as well. - MESSAGE(WARNING "Compiler is not GNU gcc! Clang Version 3.0.0 and greater supports gcov as well, but older versions don't.") - - IF(NOT ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")) - MESSAGE(FATAL_ERROR "Compiler is not GNU gcc or Clang! Aborting...") - ENDIF() -ENDIF() # NOT CMAKE_COMPILER_IS_GNUCXX - -IF ( NOT CMAKE_BUILD_TYPE STREQUAL "Debug" ) - MESSAGE( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) -ENDIF() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" - - -# Param _targetname The name of new the custom make target -# Param _outputname lcov output is generated as _outputname.info -# HTML report is generated in _outputname/index.html -# Param _testrunner The name of the target which runs the tests. -# MUST return ZERO always, even on errors. -# If not, no coverage report will be created! -# Optional fourth parameter is passed as arguments to _testrunner -# Pass them in list form, e.g.: "-j;2" for -j 2 -FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _outputname _testrunner) - - IF(NOT LCOV_PATH) - MESSAGE(FATAL_ERROR "lcov not found! Aborting...") - ENDIF() # NOT LCOV_PATH - - IF(NOT GENHTML_PATH) - MESSAGE(FATAL_ERROR "genhtml not found! Aborting...") - ENDIF() # NOT GENHTML_PATH - - # Setup target - ADD_CUSTOM_TARGET(${_targetname} - - # Cleanup lcov - ${LCOV_PATH} --directory . --zerocounters - - # Run tests - COMMAND ${_testrunner} ${ARGV3} - - # Capturing lcov counters and generating report - COMMAND ${LCOV_PATH} --directory . --capture --output-file ${_outputname}.info --rc lcov_branch_coverage=1 - COMMAND ${LCOV_PATH} --remove ${_outputname}.info '*/build/include/*' '*/test/*' '/usr/include/*' --output-file ${_outputname}.info.cleaned --rc lcov_branch_coverage=1 - COMMAND ${GENHTML_PATH} --branch-coverage -o ${_outputname} ${_outputname}.info.cleaned - COMMAND ${CMAKE_COMMAND} -E remove ${_outputname}.info ${_outputname}.info.cleaned - - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." - ) - - # Show info where to find the report - ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD - COMMAND ; - COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report." - ) - -ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE - -# Param _targetname The name of new the custom make target -# Param _testrunner The name of the target which runs the tests -# Param _outputname cobertura output is generated as _outputname.xml -# Optional fourth parameter is passed as arguments to _testrunner -# Pass them in list form, e.g.: "-j;2" for -j 2 -FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname) - - IF(NOT PYTHON_EXECUTABLE) - MESSAGE(FATAL_ERROR "Python not found! Aborting...") - ENDIF() # NOT PYTHON_EXECUTABLE - - IF(NOT GCOVR_PATH) - MESSAGE(FATAL_ERROR "gcovr not found! Aborting...") - ENDIF() # NOT GCOVR_PATH - - ADD_CUSTOM_TARGET(${_targetname} - - # Run tests - ${_testrunner} ${ARGV3} - - # Running gcovr - COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} -e '${CMAKE_SOURCE_DIR}/tests/' -o ${_outputname}.xml - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Running gcovr to produce Cobertura code coverage report." - ) - - # Show info where to find the report - ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD - COMMAND ; - COMMENT "Cobertura code coverage report saved in ${_outputname}.xml." - ) - -ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA - diff --git a/3party/jansson/cmake/Coveralls.cmake b/3party/jansson/cmake/Coveralls.cmake deleted file mode 100644 index 29221c9173..0000000000 --- a/3party/jansson/cmake/Coveralls.cmake +++ /dev/null @@ -1,111 +0,0 @@ -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -# -# Copyright (C) 2014 Joakim Söderberg -# - - -# -# Param _COVERAGE_SRCS A list of source files that coverage should be collected for. -# Param _COVERALLS_UPLOAD Upload the result to coveralls? -# -function(coveralls_setup _COVERAGE_SRCS _COVERALLS_UPLOAD) - # When passing a CMake list to an external process, the list - # will be converted from the format "1;2;3" to "1 2 3". - # This means the script we're calling won't see it as a list - # of sources, but rather just one long path. We remedy this - # by replacing ";" with "*" and then reversing that in the script - # that we're calling. - # http://cmake.3232098.n2.nabble.com/Passing-a-CMake-list-quot-as-is-quot-to-a-custom-target-td6505681.html - set(COVERAGE_SRCS_TMP ${_COVERAGE_SRCS}) - set(COVERAGE_SRCS "") - foreach (COVERAGE_SRC ${COVERAGE_SRCS_TMP}) - set(COVERAGE_SRCS "${COVERAGE_SRCS}*${COVERAGE_SRC}") - endforeach() - - #message("Coverage sources: ${COVERAGE_SRCS}") - set(COVERALLS_FILE ${PROJECT_BINARY_DIR}/coveralls.json) - - add_custom_target(coveralls_generate - - # Zero the coverage counters. - COMMAND ${CMAKE_COMMAND} - -P "${PROJECT_SOURCE_DIR}/cmake/CoverallsClear.cmake" - - # Run regress tests. - COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure - - # Generate Gcov and translate it into coveralls JSON. - # We do this by executing an external CMake script. - # (We don't want this to run at CMake generation time, but after compilation and everything has run). - COMMAND ${CMAKE_COMMAND} - -DCOVERAGE_SRCS="${COVERAGE_SRCS}" # TODO: This is passed like: "a b c", not "a;b;c" - -DCOVERALLS_OUTPUT_FILE="${COVERALLS_FILE}" - -DCOV_PATH="${PROJECT_BINARY_DIR}" - -DPROJECT_ROOT="${PROJECT_SOURCE_DIR}" - -P "${PROJECT_SOURCE_DIR}/cmake/CoverallsGenerateGcov.cmake" - - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - COMMENT "Generating coveralls output..." - ) - - if (_COVERALLS_UPLOAD) - message("COVERALLS UPLOAD: ON") - - find_program(CURL_EXECUTABLE curl) - - if (NOT CURL_EXECUTABLE) - message(FATAL_ERROR "Coveralls: curl not found! Aborting") - endif() - - add_custom_target(coveralls_upload - # Upload the JSON to coveralls. - COMMAND ${CURL_EXECUTABLE} - -S -F json_file=@${COVERALLS_FILE} - https://coveralls.io/api/v1/jobs - - DEPENDS coveralls_generate - - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - COMMENT "Uploading coveralls output...") - - add_custom_target(coveralls DEPENDS coveralls_upload) - else() - message("COVERALLS UPLOAD: OFF") - add_custom_target(coveralls DEPENDS coveralls_generate) - endif() - -endfunction() - -macro(coveralls_turn_on_coverage) - if(NOT (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - AND (NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")) - message(FATAL_ERROR "Coveralls: Compiler ${CMAKE_C_COMPILER_ID} is not GNU gcc! Aborting... You can set this on the command line using CC=/usr/bin/gcc CXX=/usr/bin/g++ cmake ..") - endif() - - if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") - message(FATAL_ERROR "Coveralls: Code coverage results with an optimised (non-Debug) build may be misleading! Add -DCMAKE_BUILD_TYPE=Debug") - endif() - - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") -endmacro() - - - diff --git a/3party/jansson/cmake/CoverallsClear.cmake b/3party/jansson/cmake/CoverallsClear.cmake deleted file mode 100644 index eb68695a2b..0000000000 --- a/3party/jansson/cmake/CoverallsClear.cmake +++ /dev/null @@ -1,24 +0,0 @@ -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -# -# Copyright (C) 2014 Joakim Söderberg -# - -file(REMOVE_RECURSE ${PROJECT_BINARY_DIR}/*.gcda) - diff --git a/3party/jansson/cmake/CoverallsGenerateGcov.cmake b/3party/jansson/cmake/CoverallsGenerateGcov.cmake deleted file mode 100644 index 0c4c2b0c15..0000000000 --- a/3party/jansson/cmake/CoverallsGenerateGcov.cmake +++ /dev/null @@ -1,380 +0,0 @@ -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -# -# Copyright (C) 2014 Joakim Söderberg -# -# This is intended to be run by a custom target in a CMake project like this. -# 0. Compile program with coverage support. -# 1. Clear coverage data. (Recursively delete *.gcda in build dir) -# 2. Run the unit tests. -# 3. Run this script specifying which source files the coverage should be performed on. -# -# This script will then use gcov to generate .gcov files in the directory specified -# via the COV_PATH var. This should probably be the same as your cmake build dir. -# -# It then parses the .gcov files to convert them into the Coveralls JSON format: -# https://coveralls.io/docs/api -# -# Example for running as standalone CMake script from the command line: -# (Note it is important the -P is at the end...) -# $ cmake -DCOV_PATH=$(pwd) -# -DCOVERAGE_SRCS="catcierge_rfid.c;catcierge_timer.c" -# -P ../cmake/CoverallsGcovUpload.cmake -# -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - - -# -# Make sure we have the needed arguments. -# -if (NOT COVERALLS_OUTPUT_FILE) - message(FATAL_ERROR "Coveralls: No coveralls output file specified. Please set COVERALLS_OUTPUT_FILE") -endif() - -if (NOT COV_PATH) - message(FATAL_ERROR "Coveralls: Missing coverage directory path where gcov files will be generated. Please set COV_PATH") -endif() - -if (NOT COVERAGE_SRCS) - message(FATAL_ERROR "Coveralls: Missing the list of source files that we should get the coverage data for COVERAGE_SRCS") -endif() - -if (NOT PROJECT_ROOT) - message(FATAL_ERROR "Coveralls: Missing PROJECT_ROOT.") -endif() - -# Since it's not possible to pass a CMake list properly in the -# "1;2;3" format to an external process, we have replaced the -# ";" with "*", so reverse that here so we get it back into the -# CMake list format. -string(REGEX REPLACE "\\*" ";" COVERAGE_SRCS ${COVERAGE_SRCS}) - -find_program(GCOV_EXECUTABLE gcov) - -if (NOT GCOV_EXECUTABLE) - message(FATAL_ERROR "gcov not found! Aborting...") -endif() - -find_package(Git) - -# TODO: Add these git things to the coveralls json. -if (GIT_FOUND) - # Branch. - execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_BRANCH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - macro (git_log_format FORMAT_CHARS VAR_NAME) - execute_process( - COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:%${FORMAT_CHARS} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE ${VAR_NAME} - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - endmacro() - - git_log_format(an GIT_AUTHOR_EMAIL) - git_log_format(ae GIT_AUTHOR_EMAIL) - git_log_format(cn GIT_COMMITTER_NAME) - git_log_format(ce GIT_COMMITTER_EMAIL) - git_log_format(B GIT_COMMIT_MESSAGE) - - message("Git exe: ${GIT_EXECUTABLE}") - message("Git branch: ${GIT_BRANCH}") - message("Git author: ${GIT_AUTHOR_NAME}") - message("Git e-mail: ${GIT_AUTHOR_EMAIL}") - message("Git commiter name: ${GIT_COMMITTER_NAME}") - message("Git commiter e-mail: ${GIT_COMMITTER_EMAIL}") - message("Git commit message: ${GIT_COMMIT_MESSAGE}") - -endif() - -############################# Macros ######################################### - -# -# This macro converts from the full path format gcov outputs: -# -# /path/to/project/root/build/#path#to#project#root#subdir#the_file.c.gcov -# -# to the original source file path the .gcov is for: -# -# /path/to/project/root/subdir/the_file.c -# -macro(get_source_path_from_gcov_filename _SRC_FILENAME _GCOV_FILENAME) - - # /path/to/project/root/build/#path#to#project#root#subdir#the_file.c.gcov - # -> - # #path#to#project#root#subdir#the_file.c.gcov - get_filename_component(_GCOV_FILENAME_WEXT ${_GCOV_FILENAME} NAME) - - # #path#to#project#root#subdir#the_file.c.gcov -> /path/to/project/root/subdir/the_file.c - string(REGEX REPLACE "\\.gcov$" "" SRC_FILENAME_TMP ${_GCOV_FILENAME_WEXT}) - string(REGEX REPLACE "\#" "/" SRC_FILENAME_TMP ${SRC_FILENAME_TMP}) - set(${_SRC_FILENAME} "${SRC_FILENAME_TMP}") -endmacro() - -############################################################################## - -# Get the coverage data. -file(GLOB_RECURSE GCDA_FILES "${COV_PATH}/*.gcda") -message("GCDA files:") - -# Get a list of all the object directories needed by gcov -# (The directories the .gcda files and .o files are found in) -# and run gcov on those. -foreach(GCDA ${GCDA_FILES}) - message("Process: ${GCDA}") - message("------------------------------------------------------------------------------") - get_filename_component(GCDA_DIR ${GCDA} PATH) - - # - # The -p below refers to "Preserve path components", - # This means that the generated gcov filename of a source file will - # keep the original files entire filepath, but / is replaced with #. - # Example: - # - # /path/to/project/root/build/CMakeFiles/the_file.dir/subdir/the_file.c.gcda - # ------------------------------------------------------------------------------ - # File '/path/to/project/root/subdir/the_file.c' - # Lines executed:68.34% of 199 - # /path/to/project/root/subdir/the_file.c:creating '#path#to#project#root#subdir#the_file.c.gcov' - # - # If -p is not specified then the file is named only "the_file.c.gcov" - # - execute_process( - COMMAND ${GCOV_EXECUTABLE} -p -o ${GCDA_DIR} ${GCDA} - WORKING_DIRECTORY ${COV_PATH} - ) -endforeach() - -# TODO: Make these be absolute path -file(GLOB ALL_GCOV_FILES ${COV_PATH}/*.gcov) - -# Get only the filenames to use for filtering. -#set(COVERAGE_SRCS_NAMES "") -#foreach (COVSRC ${COVERAGE_SRCS}) -# get_filename_component(COVSRC_NAME ${COVSRC} NAME) -# message("${COVSRC} -> ${COVSRC_NAME}") -# list(APPEND COVERAGE_SRCS_NAMES "${COVSRC_NAME}") -#endforeach() - -# -# Filter out all but the gcov files we want. -# -# We do this by comparing the list of COVERAGE_SRCS filepaths that the -# user wants the coverage data for with the paths of the generated .gcov files, -# so that we only keep the relevant gcov files. -# -# Example: -# COVERAGE_SRCS = -# /path/to/project/root/subdir/the_file.c -# -# ALL_GCOV_FILES = -# /path/to/project/root/build/#path#to#project#root#subdir#the_file.c.gcov -# /path/to/project/root/build/#path#to#project#root#subdir#other_file.c.gcov -# -# Result should be: -# GCOV_FILES = -# /path/to/project/root/build/#path#to#project#root#subdir#the_file.c.gcov -# -set(GCOV_FILES "") -#message("Look in coverage sources: ${COVERAGE_SRCS}") -message("\nFilter out unwanted GCOV files:") -message("===============================") - -set(COVERAGE_SRCS_REMAINING ${COVERAGE_SRCS}) - -foreach (GCOV_FILE ${ALL_GCOV_FILES}) - - # - # /path/to/project/root/build/#path#to#project#root#subdir#the_file.c.gcov - # -> - # /path/to/project/root/subdir/the_file.c - get_source_path_from_gcov_filename(GCOV_SRC_PATH ${GCOV_FILE}) - - # Is this in the list of source files? - # TODO: We want to match against relative path filenames from the source file root... - list(FIND COVERAGE_SRCS ${GCOV_SRC_PATH} WAS_FOUND) - - if (NOT WAS_FOUND EQUAL -1) - message("YES: ${GCOV_FILE}") - list(APPEND GCOV_FILES ${GCOV_FILE}) - - # We remove it from the list, so we don't bother searching for it again. - # Also files left in COVERAGE_SRCS_REMAINING after this loop ends should - # have coverage data generated from them (no lines are covered). - list(REMOVE_ITEM COVERAGE_SRCS_REMAINING ${GCOV_SRC_PATH}) - else() - message("NO: ${GCOV_FILE}") - endif() -endforeach() - -# TODO: Enable setting these -set(JSON_SERVICE_NAME "travis-ci") -set(JSON_SERVICE_JOB_ID $ENV{TRAVIS_JOB_ID}) - -set(JSON_TEMPLATE -"{ - \"service_name\": \"\@JSON_SERVICE_NAME\@\", - \"service_job_id\": \"\@JSON_SERVICE_JOB_ID\@\", - \"source_files\": \@JSON_GCOV_FILES\@ -}" -) - -set(SRC_FILE_TEMPLATE -"{ - \"name\": \"\@GCOV_SRC_REL_PATH\@\", - \"source\": \"\@GCOV_FILE_SOURCE\@\", - \"coverage\": \@GCOV_FILE_COVERAGE\@ -}" -) - -message("\nGenerate JSON for files:") -message("=========================") - -set(JSON_GCOV_FILES "[") - -# Read the GCOV files line by line and get the coverage data. -foreach (GCOV_FILE ${GCOV_FILES}) - - get_source_path_from_gcov_filename(GCOV_SRC_PATH ${GCOV_FILE}) - file(RELATIVE_PATH GCOV_SRC_REL_PATH "${PROJECT_ROOT}" "${GCOV_SRC_PATH}") - - # Loads the gcov file as a list of lines. - file(STRINGS ${GCOV_FILE} GCOV_LINES) - - # Instead of trying to parse the source from the - # gcov file, simply read the file contents from the source file. - # (Parsing it from the gcov is hard because C-code uses ; in many places - # which also happens to be the same as the CMake list delimeter). - file(READ ${GCOV_SRC_PATH} GCOV_FILE_SOURCE) - - string(REPLACE "\\" "\\\\" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") - string(REGEX REPLACE "\"" "\\\\\"" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") - string(REPLACE "\t" "\\\\t" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") - string(REPLACE "\r" "\\\\r" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") - string(REPLACE "\n" "\\\\n" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") - # According to http://json.org/ these should be escaped as well. - # Don't know how to do that in CMake however... - #string(REPLACE "\b" "\\\\b" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") - #string(REPLACE "\f" "\\\\f" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") - #string(REGEX REPLACE "\u([a-fA-F0-9]{4})" "\\\\u\\1" GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}") - - # We want a json array of coverage data as a single string - # start building them from the contents of the .gcov - set(GCOV_FILE_COVERAGE "[") - - foreach (GCOV_LINE ${GCOV_LINES}) - # Example of what we're parsing: - # Hitcount |Line | Source - # " 8: 26: if (!allowed || (strlen(allowed) == 0))" - string(REGEX REPLACE - "^([^:]*):([^:]*):(.*)$" - "\\1;\\2;\\3" - RES - "${GCOV_LINE}") - - list(LENGTH RES RES_COUNT) - if (RES_COUNT GREATER 2) - list(GET RES 0 HITCOUNT) - list(GET RES 1 LINE) - list(GET RES 2 SOURCE) - - string(STRIP ${HITCOUNT} HITCOUNT) - string(STRIP ${LINE} LINE) - - # Lines with 0 line numbers are metadata and can be ignored. - if (NOT ${LINE} EQUAL 0) - - # Translate the hitcount into valid JSON values. - if (${HITCOUNT} STREQUAL "#####") - set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}0, ") - elseif (${HITCOUNT} STREQUAL "-") - set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}null, ") - else() - set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}${HITCOUNT}, ") - endif() - # TODO: Look for LCOV_EXCL_LINE in SOURCE to get rid of false positives. - endif() - else() - message(WARNING "Failed to properly parse line --> ${GCOV_LINE}") - endif() - endforeach() - - # Advanced way of removing the trailing comma in the JSON array. - # "[1, 2, 3, " -> "[1, 2, 3" - string(REGEX REPLACE ",[ ]*$" "" GCOV_FILE_COVERAGE ${GCOV_FILE_COVERAGE}) - - # Append the trailing ] to complete the JSON array. - set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}]") - - # Generate the final JSON for this file. - message("Generate JSON for file: ${GCOV_SRC_REL_PATH}...") - string(CONFIGURE ${SRC_FILE_TEMPLATE} FILE_JSON) - - set(JSON_GCOV_FILES "${JSON_GCOV_FILES}${FILE_JSON}, ") -endforeach() - -# Loop through all files we couldn't find any coverage for -# as well, and generate JSON for those as well with 0% coverage. -foreach(NOT_COVERED_SRC ${COVERAGE_SRCS_REMAINING}) - - # Loads the source file as a list of lines. - file(STRINGS ${NOT_COVERED_SRC} SRC_LINES) - - set(GCOV_FILE_COVERAGE "[") - set(GCOV_FILE_SOURCE "") - - foreach (SOURCE ${SRC_LINES}) - set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}0, ") - - string(REPLACE "\\" "\\\\" SOURCE "${SOURCE}") - string(REGEX REPLACE "\"" "\\\\\"" SOURCE "${SOURCE}") - string(REPLACE "\t" "\\\\t" SOURCE "${SOURCE}") - string(REPLACE "\r" "\\\\r" SOURCE "${SOURCE}") - set(GCOV_FILE_SOURCE "${GCOV_FILE_SOURCE}${SOURCE}\\n") - endforeach() - - # Remove trailing comma, and complete JSON array with ] - string(REGEX REPLACE ",[ ]*$" "" GCOV_FILE_COVERAGE ${GCOV_FILE_COVERAGE}) - set(GCOV_FILE_COVERAGE "${GCOV_FILE_COVERAGE}]") - - # Generate the final JSON for this file. - message("Generate JSON for non-gcov file: ${NOT_COVERED_SRC}...") - string(CONFIGURE ${SRC_FILE_TEMPLATE} FILE_JSON) - set(JSON_GCOV_FILES "${JSON_GCOV_FILES}${FILE_JSON}, ") -endforeach() - -# Get rid of trailing comma. -string(REGEX REPLACE ",[ ]*$" "" JSON_GCOV_FILES ${JSON_GCOV_FILES}) -set(JSON_GCOV_FILES "${JSON_GCOV_FILES}]") - -# Generate the final complete JSON! -message("Generate final JSON...") -string(CONFIGURE ${JSON_TEMPLATE} JSON) - -file(WRITE "${COVERALLS_OUTPUT_FILE}" "${JSON}") -message("###########################################################################") -message("Generated coveralls JSON containing coverage data:") -message("${COVERALLS_OUTPUT_FILE}") -message("###########################################################################") - diff --git a/3party/jansson/cmake/FindSphinx.cmake b/3party/jansson/cmake/FindSphinx.cmake deleted file mode 100644 index 55539d42c6..0000000000 --- a/3party/jansson/cmake/FindSphinx.cmake +++ /dev/null @@ -1,301 +0,0 @@ -# -# PART B. DOWNLOADING AGREEMENT - LICENSE FROM SBIA WITH RIGHT TO SUBLICENSE ("SOFTWARE LICENSE"). -# ------------------------------------------------------------------------------------------------ -# -# 1. As used in this Software License, "you" means the individual downloading and/or -# using, reproducing, modifying, displaying and/or distributing the Software and -# the institution or entity which employs or is otherwise affiliated with such -# individual in connection therewith. The Section of Biomedical Image Analysis, -# Department of Radiology at the Universiy of Pennsylvania ("SBIA") hereby grants -# you, with right to sublicense, with respect to SBIA's rights in the software, -# and data, if any, which is the subject of this Software License (collectively, -# the "Software"), a royalty-free, non-exclusive license to use, reproduce, make -# derivative works of, display and distribute the Software, provided that: -# (a) you accept and adhere to all of the terms and conditions of this Software -# License; (b) in connection with any copy of or sublicense of all or any portion -# of the Software, all of the terms and conditions in this Software License shall -# appear in and shall apply to such copy and such sublicense, including without -# limitation all source and executable forms and on any user documentation, -# prefaced with the following words: "All or portions of this licensed product -# (such portions are the "Software") have been obtained under license from the -# Section of Biomedical Image Analysis, Department of Radiology at the University -# of Pennsylvania and are subject to the following terms and conditions:" -# (c) you preserve and maintain all applicable attributions, copyright notices -# and licenses included in or applicable to the Software; (d) modified versions -# of the Software must be clearly identified and marked as such, and must not -# be misrepresented as being the original Software; and (e) you consider making, -# but are under no obligation to make, the source code of any of your modifications -# to the Software freely available to others on an open source basis. -# -# 2. The license granted in this Software License includes without limitation the -# right to (i) incorporate the Software into proprietary programs (subject to -# any restrictions applicable to such programs), (ii) add your own copyright -# statement to your modifications of the Software, and (iii) provide additional -# or different license terms and conditions in your sublicenses of modifications -# of the Software; provided that in each case your use, reproduction or -# distribution of such modifications otherwise complies with the conditions -# stated in this Software License. -# -# 3. This Software License does not grant any rights with respect to third party -# software, except those rights that SBIA has been authorized by a third -# party to grant to you, and accordingly you are solely responsible for -# (i) obtaining any permissions from third parties that you need to use, -# reproduce, make derivative works of, display and distribute the Software, -# and (ii) informing your sublicensees, including without limitation your -# end-users, of their obligations to secure any such required permissions. -# -# 4. The Software has been designed for research purposes only and has not been -# reviewed or approved by the Food and Drug Administration or by any other -# agency. YOU ACKNOWLEDGE AND AGREE THAT CLINICAL APPLICATIONS ARE NEITHER -# RECOMMENDED NOR ADVISED. Any commercialization of the Software is at the -# sole risk of the party or parties engaged in such commercialization. -# You further agree to use, reproduce, make derivative works of, display -# and distribute the Software in compliance with all applicable governmental -# laws, regulations and orders, including without limitation those relating -# to export and import control. -# -# 5. The Software is provided "AS IS" and neither SBIA nor any contributor to -# the software (each a "Contributor") shall have any obligation to provide -# maintenance, support, updates, enhancements or modifications thereto. -# SBIA AND ALL CONTRIBUTORS SPECIFICALLY DISCLAIM ALL EXPRESS AND IMPLIED -# WARRANTIES OF ANY KIND INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. -# IN NO EVENT SHALL SBIA OR ANY CONTRIBUTOR BE LIABLE TO ANY PARTY FOR -# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY ARISING IN ANY WAY RELATED -# TO THE SOFTWARE, EVEN IF SBIA OR ANY CONTRIBUTOR HAS BEEN ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGES. TO THE MAXIMUM EXTENT NOT PROHIBITED BY LAW OR -# REGULATION, YOU FURTHER ASSUME ALL LIABILITY FOR YOUR USE, REPRODUCTION, -# MAKING OF DERIVATIVE WORKS, DISPLAY, LICENSE OR DISTRIBUTION OF THE SOFTWARE -# AND AGREE TO INDEMNIFY AND HOLD HARMLESS SBIA AND ALL CONTRIBUTORS FROM -# AND AGAINST ANY AND ALL CLAIMS, SUITS, ACTIONS, DEMANDS AND JUDGMENTS ARISING -# THEREFROM. -# -# 6. None of the names, logos or trademarks of SBIA or any of SBIA's affiliates -# or any of the Contributors, or any funding agency, may be used to endorse -# or promote products produced in whole or in part by operation of the Software -# or derived from or based on the Software without specific prior written -# permission from the applicable party. -# -# 7. Any use, reproduction or distribution of the Software which is not in accordance -# with this Software License shall automatically revoke all rights granted to you -# under this Software License and render Paragraphs 1 and 2 of this Software -# License null and void. -# -# 8. This Software License does not grant any rights in or to any intellectual -# property owned by SBIA or any Contributor except those rights expressly -# granted hereunder. -# -# -# PART C. MISCELLANEOUS -# --------------------- -# -# This Agreement shall be governed by and construed in accordance with the laws -# of The Commonwealth of Pennsylvania without regard to principles of conflicts -# of law. This Agreement shall supercede and replace any license terms that you -# may have agreed to previously with respect to Software from SBIA. -# -############################################################################## -# @file FindSphinx.cmake -# @brief Find Sphinx documentation build tools. -# -# @par Input variables: -# -# -# @tp @b Sphinx_DIR @endtp -# -# -# -# @tp @b SPHINX_DIR @endtp -# -# -# -# @tp @b Sphinx_FIND_COMPONENTS @endtp -# -# -#
Installation directory of Sphinx tools. Can also be set as environment variable.
Alternative environment variable for @c Sphinx_DIR.
Sphinx build tools to look for, i.e., 'apidoc' and/or 'build'.
-# -# @par Output variables: -# -# -# @tp @b Sphinx_FOUND @endtp -# -# -# -# @tp @b SPHINX_FOUND @endtp -# -# -# @tp @b SPHINX_EXECUTABLE @endtp -# -# -# -# @tp @b Sphinx_PYTHON_EXECUTABLE @endtp -# -# -# -# @tp @b Sphinx_PYTHON_OPTIONS @endtp -# -# -# -# @tp @b Sphinx-build_EXECUTABLE @endtp -# -# -# -# @tp @b Sphinx-apidoc_EXECUTABLE @endtp -# -# -# -# @tp @b Sphinx_VERSION_STRING @endtp -# -# -# -# @tp @b Sphinx_VERSION_MAJOR @endtp -# -# -# -# @tp @b Sphinx_VERSION_MINOR @endtp -# -# -# -# @tp @b Sphinx_VERSION_PATCH @endtp -# -# -#
Whether all or only the requested Sphinx build tools were found.
Alias for @c Sphinx_FOUND. -#
Non-cached alias for @c Sphinx-build_EXECUTABLE.
Python executable used to run sphinx-build. This is either the -# by default found Python interpreter or a specific version as -# specified by the shebang (#!) of the sphinx-build script.
A list of Python options extracted from the shebang (#!) of the -# sphinx-build script. The -E option is added by this module -# if the Python executable is not the system default to avoid -# problems with a differing setting of the @c PYTHONHOME.
Absolute path of the found sphinx-build tool.
Absolute path of the found sphinx-apidoc tool.
Sphinx version found e.g. 1.1.2.
Sphinx major version found e.g. 1.
Sphinx minor version found e.g. 1.
Sphinx patch version found e.g. 2.
-# -# @ingroup CMakeFindModules -############################################################################## - -set (_Sphinx_REQUIRED_VARS) - -# ---------------------------------------------------------------------------- -# initialize search -if (NOT Sphinx_DIR) - if (NOT $ENV{Sphinx_DIR} STREQUAL "") - set (Sphinx_DIR "$ENV{Sphinx_DIR}" CACHE PATH "Installation prefix of Sphinx (docutils)." FORCE) - else () - set (Sphinx_DIR "$ENV{SPHINX_DIR}" CACHE PATH "Installation prefix of Sphinx (docutils)." FORCE) - endif () -endif () - -# ---------------------------------------------------------------------------- -# default components to look for -if (NOT Sphinx_FIND_COMPONENTS) - set (Sphinx_FIND_COMPONENTS "build") -elseif (NOT Sphinx_FIND_COMPONENTS MATCHES "^(build|apidoc)$") - message (FATAL_ERROR "Invalid Sphinx component in: ${Sphinx_FIND_COMPONENTS}") -endif () - -# ---------------------------------------------------------------------------- -# find components, i.e., build tools -foreach (_Sphinx_TOOL IN LISTS Sphinx_FIND_COMPONENTS) - if (Sphinx_DIR) - find_program ( - Sphinx-${_Sphinx_TOOL}_EXECUTABLE - NAMES sphinx-${_Sphinx_TOOL} sphinx-${_Sphinx_TOOL}.py - HINTS "${Sphinx_DIR}" - PATH_SUFFIXES bin - DOC "The sphinx-${_Sphinx_TOOL} Python script." - NO_DEFAULT_PATH - ) - else () - find_program ( - Sphinx-${_Sphinx_TOOL}_EXECUTABLE - NAMES sphinx-${_Sphinx_TOOL} sphinx-${_Sphinx_TOOL}.py - DOC "The sphinx-${_Sphinx_TOOL} Python script." - ) - endif () - mark_as_advanced (Sphinx-${_Sphinx_TOOL}_EXECUTABLE) - list (APPEND _Sphinx_REQUIRED_VARS Sphinx-${_Sphinx_TOOL}_EXECUTABLE) -endforeach () - -# ---------------------------------------------------------------------------- -# determine Python executable used by Sphinx -if (Sphinx-build_EXECUTABLE) - # extract python executable from shebang of sphinx-build - find_package (PythonInterp QUIET) - set (Sphinx_PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE}") - set (Sphinx_PYTHON_OPTIONS) - file (STRINGS "${Sphinx-build_EXECUTABLE}" FIRST_LINE LIMIT_COUNT 1) - if (FIRST_LINE MATCHES "^#!(.*/python.*)") # does not match "#!/usr/bin/env python" ! - string (REGEX REPLACE "^ +| +$" "" Sphinx_PYTHON_EXECUTABLE "${CMAKE_MATCH_1}") - if (Sphinx_PYTHON_EXECUTABLE MATCHES "([^ ]+) (.*)") - set (Sphinx_PYTHON_EXECUTABLE "${CMAKE_MATCH_1}") - string (REGEX REPLACE " +" ";" Sphinx_PYTHON_OPTIONS "${CMAKE_MATCH_2}") - endif () - endif () - # this is done to avoid problems with multiple Python versions being installed - # remember: CMake command if(STR EQUAL STR) is bad and may cause many troubles ! - string (REGEX REPLACE "([.+*?^$])" "\\\\\\1" _Sphinx_PYTHON_EXECUTABLE_RE "${PYTHON_EXECUTABLE}") - list (FIND Sphinx_PYTHON_OPTIONS -E IDX) - if (IDX EQUAL -1 AND NOT Sphinx_PYTHON_EXECUTABLE MATCHES "^${_Sphinx_PYTHON_EXECUTABLE_RE}$") - list (INSERT Sphinx_PYTHON_OPTIONS 0 -E) - endif () - unset (_Sphinx_PYTHON_EXECUTABLE_RE) -endif () - -# ---------------------------------------------------------------------------- -# determine Sphinx version -if (Sphinx-build_EXECUTABLE) - # intentionally use invalid -h option here as the help that is shown then - # will include the Sphinx version information - if (Sphinx_PYTHON_EXECUTABLE) - execute_process ( - COMMAND "${Sphinx_PYTHON_EXECUTABLE}" ${Sphinx_PYTHON_OPTIONS} "${Sphinx-build_EXECUTABLE}" -h - OUTPUT_VARIABLE _Sphinx_VERSION - ERROR_VARIABLE _Sphinx_VERSION - ) - elseif (UNIX) - execute_process ( - COMMAND "${Sphinx-build_EXECUTABLE}" -h - OUTPUT_VARIABLE _Sphinx_VERSION - ERROR_VARIABLE _Sphinx_VERSION - ) - endif () - - # The sphinx version can also contain a "b" instead of the last dot. - # For example "Sphinx v1.2b1" so we cannot just split on "." - if (_Sphinx_VERSION MATCHES "Sphinx v([0-9]+\\.[0-9]+(\\.|b)[0-9]+)") - set (Sphinx_VERSION_STRING "${CMAKE_MATCH_1}") - string(REGEX REPLACE "([0-9]+)\\.[0-9]+(\\.|b)[0-9]+" "\\1" Sphinx_VERSION_MAJOR ${Sphinx_VERSION_STRING}) - string(REGEX REPLACE "[0-9]+\\.([0-9]+)(\\.|b)[0-9]+" "\\1" Sphinx_VERSION_MINOR ${Sphinx_VERSION_STRING}) - string(REGEX REPLACE "[0-9]+\\.[0-9]+(\\.|b)([0-9]+)" "\\1" Sphinx_VERSION_PATCH ${Sphinx_VERSION_STRING}) - - # v1.2.0 -> v1.2 - if (Sphinx_VERSION_PATCH EQUAL 0) - string (REGEX REPLACE "\\.0$" "" Sphinx_VERSION_STRING "${Sphinx_VERSION_STRING}") - endif () - endif() -endif () - -# ---------------------------------------------------------------------------- -# compatibility with FindPythonInterp.cmake and FindPerl.cmake -set (SPHINX_EXECUTABLE "${Sphinx-build_EXECUTABLE}") - -# ---------------------------------------------------------------------------- -# handle the QUIETLY and REQUIRED arguments and set SPHINX_FOUND to TRUE if -# all listed variables are TRUE -include (FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS ( - Sphinx - REQUIRED_VARS - ${_Sphinx_REQUIRED_VARS} -# VERSION_VAR # This isn't available until CMake 2.8.8 so don't use it. - Sphinx_VERSION_STRING -) - -# ---------------------------------------------------------------------------- -# set Sphinx_DIR -if (NOT Sphinx_DIR AND Sphinx-build_EXECUTABLE) - get_filename_component (Sphinx_DIR "${Sphinx-build_EXECUTABLE}" PATH) - string (REGEX REPLACE "/bin/?" "" Sphinx_DIR "${Sphinx_DIR}") - set (Sphinx_DIR "${Sphinx_DIR}" CACHE PATH "Installation directory of Sphinx tools." FORCE) -endif () - -unset (_Sphinx_VERSION) -unset (_Sphinx_REQUIRED_VARS) \ No newline at end of file diff --git a/3party/jansson/cmake/Vendor.cmake b/3party/jansson/cmake/Vendor.cmake deleted file mode 100644 index 33ebd5205b..0000000000 --- a/3party/jansson/cmake/Vendor.cmake +++ /dev/null @@ -1,684 +0,0 @@ -# Notes: -# -# Author: Paul Harris, June 2012 -# Additions: Joakim Soderberg, Febuary 2013 -# -# Supports: building static/shared, release/debug/etc, can also build html docs -# and some of the tests. -# Note that its designed for out-of-tree builds, so it will not pollute your -# source tree. -# -# TODO 1: Finish implementing tests. api tests are working, but the valgrind -# variants are not flagging problems. -# -# TODO 2: There is a check_exports script that would try and incorporate. -# -# TODO 3: Consolidate version numbers, currently the version number is written -# into: * cmake (here) * autotools (the configure) * source code header files. -# Should not be written directly into header files, autotools/cmake can do -# that job. -# -# Brief intro on how to use cmake: -# > mkdir build (somewhere - we do out-of-tree builds) -# > use cmake, ccmake, or cmake-gui to configure the project. for linux, you -# can only choose one variant: release,debug,etc... and static or shared. -# >> example: -# >> cd build -# >> ccmake -i ../path_to_jansson_dir -# >> inside, configure your options. press C until there are no lines -# with * next to them. -# >> note, I like to configure the 'install' path to ../install, so I get -# self-contained clean installs I can point other projects to. -# >> press G to 'generate' the project files. -# >> make (to build the project) -# >> make install -# >> make test (to run the tests, if you enabled them) -# -# Brief description on how it works: -# There is a small heirachy of CMakeLists.txt files which define how the -# project is built. -# Header file detection etc is done, and the results are written into config.h -# and jansson_config.h, which are generated from the corresponding -# config.h.cmake and jansson_config.h.cmake template files. -# The generated header files end up in the build directory - not in -# the source directory. -# The rest is down to the usual make process. - - - -cmake_minimum_required (VERSION 3.1) -project(jansson C) - -# Options -option(JANSSON_BUILD_DOCS "Build Documentattion" OFF) -option(JANSSON_BUILD_SHARED_LIBS "Build shared libraries." OFF) -option(USE_URANDOM "Use /dev/urandom to seed the hash function." ON) -option(USE_WINDOWS_CRYPTOAPI "Use CryptGenRandom to seed the hash function." ON) - -if (MSVC) - # This option must match the settings used in your program, in particular if you - # are linking statically - option(JANSSON_STATIC_CRT "Link the static CRT libraries" OFF ) -endif () - -option(JANSSON_EXAMPLES "Compile example applications" ON) - -if (UNIX) - option(JANSSON_COVERAGE "(GCC Only! Requires gcov/lcov to be installed). Include target for doing coverage analysis for the test suite. Note that -DCMAKE_BUILD_TYPE=Debug must be set" OFF) - option(JANSSON_COVERALLS "Generate coverage info for Coveralls" OFF) - option(JANSSON_COVERALLS_UPLOAD "Upload coverage info to Coveralls (Only works via Travis)" ON) -endif () - -# Set some nicer output dirs. -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) -set(JANSSON_TEMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/tmp) - -# Give the debug version a different postfix for windows, -# so both the debug and release version can be built in the -# same build-tree on Windows (MSVC). -if (WIN32 AND NOT CMAKE_DEBUG_POSTFIX) - set(CMAKE_DEBUG_POSTFIX "_d") -endif() - -# This is how I thought it should go -# set (JANSSON_VERSION "2.3.1") -# set (JANSSON_SOVERSION 2) - -set(JANSSON_DISPLAY_VERSION "2.12") - -# This is what is required to match the same numbers as automake's -set(JANSSON_VERSION "4.11.1") -set(JANSSON_SOVERSION 4) - -# for CheckFunctionKeywords -set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") - -include (CheckCSourceCompiles) -include (CheckFunctionExists) -include (CheckFunctionKeywords) -include (CheckIncludeFiles) -include (CheckTypeSize) - -if (MSVC) - # Turn off Microsofts "security" warnings. - add_definitions( "/W3 /D_CRT_SECURE_NO_WARNINGS /wd4005 /wd4996 /nologo" ) - - if (JANSSON_STATIC_CRT) - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd") - endif() -endif() - -message("C compiler: ${CMAKE_C_COMPILER_ID}") - -# Coverage only works with GCC for a debug build. -if (JANSSON_COVERALLS) - set(JANSSON_COVERAGE ON) -endif() - -if (JANSSON_COVERAGE) - include(CodeCoverage) - include(Coveralls) - - # This adds coverage arguments to gcc/clang. - coveralls_turn_on_coverage() -endif() - -check_include_files (endian.h HAVE_ENDIAN_H) -check_include_files (fcntl.h HAVE_FCNTL_H) -check_include_files (sched.h HAVE_SCHED_H) -check_include_files (unistd.h HAVE_UNISTD_H) -check_include_files (sys/param.h HAVE_SYS_PARAM_H) -check_include_files (sys/stat.h HAVE_SYS_STAT_H) -check_include_files (sys/time.h HAVE_SYS_TIME_H) -check_include_files (sys/types.h HAVE_SYS_TYPES_H) - -check_function_exists (close HAVE_CLOSE) -check_function_exists (getpid HAVE_GETPID) -check_function_exists (gettimeofday HAVE_GETTIMEOFDAY) -check_function_exists (open HAVE_OPEN) -check_function_exists (read HAVE_READ) -check_function_exists (sched_yield HAVE_SCHED_YIELD) - -# Check for the int-type includes -check_include_files (stdint.h HAVE_STDINT_H) - -# Check our 64 bit integer sizes -check_type_size (__int64 __INT64) -check_type_size (int64_t INT64_T) -check_type_size ("long long" LONG_LONG_INT) - -# Check our 32 bit integer sizes -check_type_size (int32_t INT32_T) -check_type_size (__int32 __INT32) -check_type_size ("long" LONG_INT) -check_type_size ("int" INT) -if (HAVE_INT32_T) - set (JSON_INT32 int32_t) -elseif (HAVE___INT32) - set (JSON_INT32 __int32) -elseif (HAVE_LONG_INT AND (LONG_INT EQUAL 4)) - set (JSON_INT32 long) -elseif (HAVE_INT AND (INT EQUAL 4)) - set (JSON_INT32 int) -else () - message (FATAL_ERROR "Could not detect a valid 32-bit integer type") -endif () - -check_type_size ("unsigned long" UNSIGNED_LONG_INT) -check_type_size ("unsigned int" UNSIGNED_INT) -check_type_size ("unsigned short" UNSIGNED_SHORT) - -check_type_size (uint32_t UINT32_T) -check_type_size (__uint32 __UINT32) -if (HAVE_UINT32_T) - set (JSON_UINT32 uint32_t) -elseif (HAVE___UINT32) - set (JSON_UINT32 __uint32) -elseif (HAVE_UNSIGNED_LONG_INT AND (UNSIGNED_LONG_INT EQUAL 4)) - set (JSON_UINT32 "unsigned long") -elseif (HAVE_UNSIGNED_INT AND (UNSIGNED_INT EQUAL 4)) - set (JSON_UINT32 "unsigned int") -else () - message (FATAL_ERROR "Could not detect a valid unsigned 32-bit integer type") -endif () - -check_type_size (uint16_t UINT16_T) -check_type_size (__uint16 __UINT16) -if (HAVE_UINT16_T) - set (JSON_UINT16 uint16_t) -elseif (HAVE___UINT16) - set (JSON_UINT16 __uint16) -elseif (HAVE_UNSIGNED_INT AND (UNSIGNED_INT EQUAL 2)) - set (JSON_UINT16 "unsigned int") -elseif (HAVE_UNSIGNED_SHORT AND (UNSIGNED_SHORT EQUAL 2)) - set (JSON_UINT16 "unsigned short") -else () - message (FATAL_ERROR "Could not detect a valid unsigned 16-bit integer type") -endif () - -check_type_size (uint8_t UINT8_T) -check_type_size (__uint8 __UINT8) -if (HAVE_UINT8_T) - set (JSON_UINT8 uint8_t) -elseif (HAVE___UINT8) - set (JSON_UINT8 __uint8) -else () - set (JSON_UINT8 "unsigned char") -endif () - -# Check for ssize_t and SSIZE_T existance. -check_type_size(ssize_t SSIZE_T) -check_type_size(SSIZE_T UPPERCASE_SSIZE_T) -if(NOT HAVE_SSIZE_T) - if(HAVE_UPPERCASE_SSIZE_T) - set(JSON_SSIZE SSIZE_T) - else() - set(JSON_SSIZE int) - endif() -endif() -set(CMAKE_EXTRA_INCLUDE_FILES "") - -# Check for all the variants of strtoll -check_function_exists (strtoll HAVE_STRTOLL) -check_function_exists (strtoq HAVE_STRTOQ) -check_function_exists (_strtoi64 HAVE__STRTOI64) - -# Figure out what variant we should use -if (HAVE_STRTOLL) - set (JSON_STRTOINT strtoll) -elseif (HAVE_STRTOQ) - set (JSON_STRTOINT strtoq) -elseif (HAVE__STRTOI64) - set (JSON_STRTOINT _strtoi64) -else () - # fallback to strtol (32 bit) - # this will set all the required variables - set (JSON_STRTOINT strtol) - set (JSON_INT_T long) - set (JSON_INTEGER_FORMAT "\"ld\"") -endif () - -# if we haven't defined JSON_INT_T, then we have a 64 bit conversion function. -# detect what to use for the 64 bit type. -# Note: I will prefer long long if I can get it, as that is what the automake system aimed for. -if (NOT DEFINED JSON_INT_T) - if (HAVE_LONG_LONG_INT AND (LONG_LONG_INT EQUAL 8)) - set (JSON_INT_T "long long") - elseif (HAVE_INT64_T) - set (JSON_INT_T int64_t) - elseif (HAVE___INT64) - set (JSON_INT_T __int64) - else () - message (FATAL_ERROR "Could not detect 64 bit type, although I detected the strtoll equivalent") - endif () - - # Apparently, Borland BCC and MSVC wants I64d, - # Borland BCC could also accept LD - # and gcc wants ldd, - # I am not sure what cygwin will want, so I will assume I64d - - if (WIN32) # matches both msvc and cygwin - set (JSON_INTEGER_FORMAT "\"I64d\"") - else () - set (JSON_INTEGER_FORMAT "\"lld\"") - endif () -endif () - - -# If locale.h and localeconv() are available, define to 1, otherwise to 0. -check_include_files (locale.h HAVE_LOCALE_H) -check_function_exists (localeconv HAVE_LOCALECONV) - -if (HAVE_LOCALECONV AND HAVE_LOCALE_H) - set (JSON_HAVE_LOCALECONV 1) -else () - set (JSON_HAVE_LOCALECONV 0) -endif() - -# check if we have setlocale -check_function_exists(setlocale HAVE_SETLOCALE) - -# Check what the inline keyword is. -# Note that the original JSON_INLINE was always set to just 'inline', so this goes further. -check_function_keywords("inline") -check_function_keywords("__inline") -check_function_keywords("__inline__") - -if (HAVE_INLINE) - set(JSON_INLINE inline) -elseif (HAVE___INLINE) - set(JSON_INLINE __inline) -elseif (HAVE___INLINE__) - set(JSON_INLINE __inline__) -else() - # no inline on this platform - set (JSON_INLINE) -endif() - -check_c_source_compiles ("int main() { unsigned long val; __sync_bool_compare_and_swap(&val, 0, 1); __sync_add_and_fetch(&val, 1); __sync_sub_and_fetch(&val, 1); return 0; } " HAVE_SYNC_BUILTINS) -check_c_source_compiles ("int main() { char l; unsigned long v; __atomic_test_and_set(&l, __ATOMIC_RELAXED); __atomic_store_n(&v, 1, __ATOMIC_RELEASE); __atomic_load_n(&v, __ATOMIC_ACQUIRE); __atomic_add_fetch(&v, 1, __ATOMIC_ACQUIRE); __atomic_sub_fetch(&v, 1, __ATOMIC_RELEASE); return 0; }" HAVE_ATOMIC_BUILTINS) - -if (HAVE_SYNC_BUILTINS) - set(JSON_HAVE_SYNC_BUILTINS 1) -else() - set(JSON_HAVE_SYNC_BUILTINS 0) -endif() - -if (HAVE_ATOMIC_BUILTINS) - set(JSON_HAVE_ATOMIC_BUILTINS 1) -else() - set(JSON_HAVE_ATOMIC_BUILTINS 0) -endif() - -set (JANSSON_INITIAL_HASHTABLE_ORDER 3 CACHE STRING "Number of buckets new object hashtables contain is 2 raised to this power. The default is 3, so empty hashtables contain 2^3 = 8 buckets.") - -# configure the public config file -configure_file (${CMAKE_CURRENT_SOURCE_DIR}/cmake/jansson_config.h.cmake - ${CMAKE_CURRENT_BINARY_DIR}/include/jansson_config.h) - -# Copy the jansson.h file to the public include folder -file (COPY ${CMAKE_CURRENT_SOURCE_DIR}/src/jansson.h - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include/) - -add_definitions(-DJANSSON_USING_CMAKE) - -# configure the private config file -configure_file (${CMAKE_CURRENT_SOURCE_DIR}/cmake/jansson_private_config.h.cmake - ${CMAKE_CURRENT_BINARY_DIR}/private_include/jansson_private_config.h) - -# and tell the source code to include it -add_definitions(-DHAVE_CONFIG_H) - -include_directories (${CMAKE_CURRENT_BINARY_DIR}/include) -include_directories (${CMAKE_CURRENT_BINARY_DIR}/private_include) - -# Add the lib sources. -file(GLOB JANSSON_SRC src/*.c) - -set(JANSSON_HDR_PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/src/hashtable.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/jansson_private.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/strbuffer.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/utf.h - ${CMAKE_CURRENT_BINARY_DIR}/private_include/jansson_private_config.h) - -set(JANSSON_HDR_PUBLIC - ${CMAKE_CURRENT_BINARY_DIR}/include/jansson_config.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/jansson.h) - -source_group("Library Sources" FILES ${JANSSON_SRC}) -source_group("Library Private Headers" FILES ${JANSSON_HDR_PRIVATE}) -source_group("Library Public Headers" FILES ${JANSSON_HDR_PUBLIC}) - -if(JANSSON_BUILD_SHARED_LIBS) - add_library(jansson_vendor SHARED - ${JANSSON_SRC} - ${JANSSON_HDR_PRIVATE} - ${JANSSON_HDR_PUBLIC} - src/jansson.def) - - set_target_properties(jansson_vendor PROPERTIES - VERSION ${JANSSON_VERSION} - SOVERSION ${JANSSON_SOVERSION}) -else() - add_library(jansson_vendor STATIC - ${JANSSON_SRC} - ${JANSSON_HDR_PRIVATE} - ${JANSSON_HDR_PUBLIC}) - set_target_properties(jansson_vendor PROPERTIES - POSITION_INDEPENDENT_CODE true) -endif() - -if (JANSSON_EXAMPLES) - add_executable(simple_parse "${CMAKE_CURRENT_SOURCE_DIR}/examples/simple_parse.c") - target_link_libraries(simple_parse jansson_vendor) -endif() - -# For building Documentation (uses Sphinx) -option(JANSSON_BUILD_DOCS "Build documentation (uses python-sphinx)." ON) -if (JANSSON_BUILD_DOCS) - find_package(Sphinx) - - if (NOT SPHINX_FOUND) - message(WARNING "Sphinx not found. Cannot generate documentation! - Set -DJANSSON_BUILD_DOCS=OFF to get rid of this message.") - else() - if (Sphinx_VERSION_STRING VERSION_LESS 1.0) - message(WARNING "Your Sphinx version is too old! - This project requires Sphinx v1.0 or above to produce - proper documentation (you have v${Sphinx_VERSION_STRING}). - You will get output but it will have errors.") - endif() - - # configured documentation tools and intermediate build results - set(BINARY_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/_build") - - # Sphinx cache with pickled ReST documents - set(SPHINX_CACHE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_doctrees") - - # CMake could be used to build the conf.py file too, - # eg it could automatically write the version of the program or change the theme. - # if(NOT DEFINED SPHINX_THEME) - # set(SPHINX_THEME default) - # endif() - # - # if(NOT DEFINED SPHINX_THEME_DIR) - # set(SPHINX_THEME_DIR) - # endif() - # - # configure_file( - # "${CMAKE_CURRENT_SOURCE_DIR}/conf.py.in" - # "${BINARY_BUILD_DIR}/conf.py" - # @ONLY) - - # TODO: Add support for all sphinx builders: http://sphinx-doc.org/builders.html - - # Add documentation targets. - set(DOC_TARGETS html) - - option(JANSSON_BUILD_MAN "Create a target for building man pages." ON) - - if (JANSSON_BUILD_MAN) - if (Sphinx_VERSION_STRING VERSION_LESS 1.0) - message(WARNING "Sphinx version 1.0 > is required to build man pages. You have v${Sphinx_VERSION_STRING}.") - else() - list(APPEND DOC_TARGETS man) - endif() - endif() - - option(JANSSON_BUILD_LATEX "Create a target for building latex docs (to create PDF)." OFF) - - if (JANSSON_BUILD_LATEX) - find_package(LATEX) - - if (NOT LATEX_COMPILER) - message("Couldn't find Latex, can't build latex docs using Sphinx") - else() - message("Latex found! If you have problems building, see Sphinx documentation for required Latex packages.") - list(APPEND DOC_TARGETS latex) - endif() - endif() - - # The doc target will build all documentation targets. - add_custom_target(doc) - - foreach (DOC_TARGET ${DOC_TARGETS}) - add_custom_target(${DOC_TARGET} - ${SPHINX_EXECUTABLE} - # -q # Enable for quiet mode - -b ${DOC_TARGET} - -d "${SPHINX_CACHE_DIR}" - # -c "${BINARY_BUILD_DIR}" # enable if using cmake-generated conf.py - "${CMAKE_CURRENT_SOURCE_DIR}/doc" - "${CMAKE_CURRENT_BINARY_DIR}/doc/${DOC_TARGET}" - COMMENT "Building ${DOC_TARGET} documentation with Sphinx") - - add_dependencies(doc ${DOC_TARGET}) - endforeach() - - message("Building documentation enabled for: ${DOC_TARGETS}") - endif() -endif () - - -option(JANSSON_WITHOUT_TESTS "Don't build tests ('make test' to execute tests)" OFF) - -if (NOT JANSSON_WITHOUT_TESTS) - option(JANSSON_TEST_WITH_VALGRIND "Enable valgrind tests." OFF) - - ENABLE_TESTING() - - if (JANSSON_TEST_WITH_VALGRIND) - # TODO: Add FindValgrind.cmake instead of having a hardcoded path. - - add_definitions(-DVALGRIND) - - # enable valgrind - set(CMAKE_MEMORYCHECK_COMMAND valgrind) - set(CMAKE_MEMORYCHECK_COMMAND_OPTIONS - "--error-exitcode=1 --leak-check=full --show-reachable=yes --track-origins=yes -q") - - set(MEMCHECK_COMMAND - "${CMAKE_MEMORYCHECK_COMMAND} ${CMAKE_MEMORYCHECK_COMMAND_OPTIONS}") - separate_arguments(MEMCHECK_COMMAND) - endif () - - # - # Test suites. - # - if (CMAKE_COMPILER_IS_GNUCC) - add_definitions(-Wall -Wextra -Wdeclaration-after-statement) - endif () - - set(api_tests - test_array - test_copy - test_chaos - test_dump - test_dump_callback - test_equal - test_load - test_loadb - test_load_callback - test_number - test_object - test_pack - test_simple - test_sprintf - test_unpack) - - # Doing arithmetic on void pointers is not allowed by Microsofts compiler - # such as secure_malloc and secure_free is doing, so exclude it for now. - if (NOT MSVC) - list(APPEND api_tests test_memory_funcs) - endif() - - # Helper macro for building and linking a test program. - macro(build_testprog name dir) - add_executable(${name} ${dir}/${name}.c) - add_dependencies(${name} jansson_vendor) - target_link_libraries(${name} jansson_vendor) - endmacro(build_testprog) - - # Create executables and tests/valgrind tests for API tests. - foreach (test ${api_tests}) - build_testprog(${test} ${CMAKE_CURRENT_SOURCE_DIR}/test/suites/api) - - if (JANSSON_TEST_WITH_VALGRIND) - add_test(memcheck__${test} - ${MEMCHECK_COMMAND} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test} - WORKING_DIRECTORY ${JANSSON_TEMP_DIR}) - else() - add_test(${test} - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test} - WORKING_DIRECTORY ${JANSSON_TEMP_DIR}) - endif () - endforeach () - - # Test harness for the suites tests. - build_testprog(json_process ${CMAKE_CURRENT_SOURCE_DIR}/test/bin) - - set(SUITE_TEST_CMD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/json_process) - set(SUITES encoding-flags valid invalid invalid-unicode) - foreach (SUITE ${SUITES}) - file(GLOB TESTDIRS test/suites/${SUITE}/*) - - foreach (TESTDIR ${TESTDIRS}) - if (IS_DIRECTORY ${TESTDIR}) - get_filename_component(TNAME ${TESTDIR} NAME) - - if (JANSSON_TEST_WITH_VALGRIND) - add_test(memcheck__${SUITE}__${TNAME} - ${MEMCHECK_COMMAND} ${SUITE_TEST_CMD} ${TESTDIR}) - else() - add_test(${SUITE}__${TNAME} - ${SUITE_TEST_CMD} ${TESTDIR}) - endif() - - if ((${SUITE} STREQUAL "valid" OR ${SUITE} STREQUAL "invalid") AND NOT EXISTS ${TESTDIR}/nostrip) - if (JANSSON_TEST_WITH_VALGRIND) - add_test(memcheck__${SUITE}__${TNAME}__strip - ${MEMCHECK_COMMAND} ${SUITE_TEST_CMD} --strip ${TESTDIR}) - else() - add_test(${SUITE}__${TNAME}__strip - ${SUITE_TEST_CMD} --strip ${TESTDIR}) - endif() - endif () - endif () - endforeach () - endforeach () - - if (JANSSON_COVERAGE) - setup_target_for_coverage( - coverage # Coverage make target "make coverage". - coverage # Name of output directory. - make # Name of test runner executable. - test) # Arguments to the test runner above (make test). - - if (JANSSON_COVERALLS) - set(COVERAGE_SRCS ${JANSSON_SRC}) - coveralls_setup("${COVERAGE_SRCS}" ${JANSSON_COVERALLS_UPLOAD}) - endif () - endif () - - # Enable using "make check" just like the autotools project. - # By default cmake creates a target "make test" - add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} - DEPENDS json_process ${api_tests}) -endif () - -# -# Installation preparation. -# - -# Allow the user to override installation directories. -set(JANSSON_INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries") -set(JANSSON_INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables") -set(JANSSON_INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files") - -if(WIN32 AND NOT CYGWIN) - set(DEF_INSTALL_CMAKE_DIR cmake) -else() - set(DEF_INSTALL_CMAKE_DIR lib/cmake/jansson) -endif() - -set(JANSSON_INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files") - -# Create pkg-conf file. -# (We use the same files as ./configure does, so we -# have to defined the same variables used there). -set(prefix ${CMAKE_INSTALL_PREFIX}) -set(exec_prefix "\${prefix}") -set(libdir "\${exec_prefix}/${JANSSON_INSTALL_LIB_DIR}") -set(includedir "\${prefix}/${JANSSON_INSTALL_INCLUDE_DIR}") -set(VERSION ${JANSSON_DISPLAY_VERSION}) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/jansson.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/jansson.pc @ONLY) - -# Make sure the paths are relative. -foreach(p LIB BIN INCLUDE CMAKE) - set(var JANSSON_INSTALL_${p}_DIR) -endforeach() - -# Generate the config file for the build-tree. -set(JANSSON__INCLUDE_DIRS - "${CMAKE_CURRENT_SOURCE_DIR}/include" - "${CMAKE_CURRENT_BINARY_DIR}/include") -set(JANSSON_INCLUDE_DIRS ${JANSSON__INCLUDE_DIRS} CACHE PATH "Jansson include directories") -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/janssonConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/janssonConfig.cmake - @ONLY) - - -# Generate the config file for the installation tree. -include(CMakePackageConfigHelpers) - -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/cmake/janssonConfigVersion.cmake" - VERSION ${JANSSON_VERSION} - COMPATIBILITY ExactVersion -) - -configure_package_config_file( - "cmake/janssonConfig.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/cmake/janssonConfig.cmake" - INSTALL_DESTINATION "${JANSSON_INSTALL_CMAKE_DIR}" -) - -# -# Install targets. -# -option(JANSSON_INSTALL "Generate installation target" ON) -if (JANSSON_INSTALL) - install(TARGETS jansson_vendor - EXPORT janssonTargets - LIBRARY DESTINATION "lib" - ARCHIVE DESTINATION "lib" - RUNTIME DESTINATION "bin" - INCLUDES DESTINATION "include") - - install(FILES ${JANSSON_HDR_PUBLIC} - DESTINATION "include") - - # Install the pkg-config. - install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/jansson.pc - DESTINATION lib/pkgconfig) - - # Install the configs. - install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/cmake/janssonConfig.cmake - ${CMAKE_CURRENT_BINARY_DIR}/cmake/janssonConfigVersion.cmake - DESTINATION "${JANSSON_INSTALL_CMAKE_DIR}") - - # Install exports for the install-tree. - install(EXPORT janssonTargets - NAMESPACE jansson:: - DESTINATION "${JANSSON_INSTALL_CMAKE_DIR}") -endif() - -# For use when simply using add_library from a parent project to build jansson. -set(JANSSON_LIBRARIES jansson_vendor CACHE STRING "jansson libraries") diff --git a/3party/jansson/cmake/janssonConfig.cmake.in b/3party/jansson/cmake/janssonConfig.cmake.in deleted file mode 100644 index abd6793c59..0000000000 --- a/3party/jansson/cmake/janssonConfig.cmake.in +++ /dev/null @@ -1,4 +0,0 @@ -@PACKAGE_INIT@ - -include("${CMAKE_CURRENT_LIST_DIR}/janssonTargets.cmake") -check_required_components("@PROJECT_NAME@") diff --git a/3party/jansson/cmake/jansson_config.h.cmake b/3party/jansson/cmake/jansson_config.h.cmake deleted file mode 100644 index 2f248cbcb9..0000000000 --- a/3party/jansson/cmake/jansson_config.h.cmake +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2010-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - * - * - * This file specifies a part of the site-specific configuration for - * Jansson, namely those things that affect the public API in - * jansson.h. - * - * The CMake system will generate the jansson_config.h file and - * copy it to the build and install directories. - */ - -#ifndef JANSSON_CONFIG_H -#define JANSSON_CONFIG_H - -/* Define this so that we can disable scattered automake configuration in source files */ -#ifndef JANSSON_USING_CMAKE -#define JANSSON_USING_CMAKE -#endif - -/* Note: when using cmake, JSON_INTEGER_IS_LONG_LONG is not defined nor used, - * as we will also check for __int64 etc types. - * (the definition was used in the automake system) */ - -/* Bring in the cmake-detected defines */ -#cmakedefine HAVE_STDINT_H 1 -#cmakedefine HAVE_INTTYPES_H 1 -#cmakedefine HAVE_SYS_TYPES_H 1 - -/* Include our standard type header for the integer typedef */ - -#if defined(HAVE_STDINT_H) -# include -#elif defined(HAVE_INTTYPES_H) -# include -#elif defined(HAVE_SYS_TYPES_H) -# include -#endif - - -/* If your compiler supports the inline keyword in C, JSON_INLINE is - defined to `inline', otherwise empty. In C++, the inline is always - supported. */ -#ifdef __cplusplus -#define JSON_INLINE inline -#else -#define JSON_INLINE @JSON_INLINE@ -#endif - - -#define json_int_t @JSON_INT_T@ -#define json_strtoint @JSON_STRTOINT@ -#define JSON_INTEGER_FORMAT @JSON_INTEGER_FORMAT@ - - -/* If locale.h and localeconv() are available, define to 1, otherwise to 0. */ -#define JSON_HAVE_LOCALECONV @JSON_HAVE_LOCALECONV@ - -/* If __atomic builtins are available they will be used to manage - reference counts of json_t. */ -#define JSON_HAVE_ATOMIC_BUILTINS @JSON_HAVE_ATOMIC_BUILTINS@ - -/* If __atomic builtins are not available we try using __sync builtins - to manage reference counts of json_t. */ -#define JSON_HAVE_SYNC_BUILTINS @JSON_HAVE_SYNC_BUILTINS@ - -/* Maximum recursion depth for parsing JSON input. - This limits the depth of e.g. array-within-array constructions. */ -#define JSON_PARSER_MAX_DEPTH 2048 - -#endif diff --git a/3party/jansson/cmake/jansson_private_config.h.cmake b/3party/jansson/cmake/jansson_private_config.h.cmake deleted file mode 100644 index b7c4514974..0000000000 --- a/3party/jansson/cmake/jansson_private_config.h.cmake +++ /dev/null @@ -1,53 +0,0 @@ -#cmakedefine HAVE_ENDIAN_H 1 -#cmakedefine HAVE_FCNTL_H 1 -#cmakedefine HAVE_SCHED_H 1 -#cmakedefine HAVE_UNISTD_H 1 -#cmakedefine HAVE_SYS_PARAM_H 1 -#cmakedefine HAVE_SYS_STAT_H 1 -#cmakedefine HAVE_SYS_TIME_H 1 -#cmakedefine HAVE_SYS_TYPES_H 1 -#cmakedefine HAVE_STDINT_H 1 - -#cmakedefine HAVE_CLOSE 1 -#cmakedefine HAVE_GETPID 1 -#cmakedefine HAVE_GETTIMEOFDAY 1 -#cmakedefine HAVE_OPEN 1 -#cmakedefine HAVE_READ 1 -#cmakedefine HAVE_SCHED_YIELD 1 - -#cmakedefine HAVE_SYNC_BUILTINS 1 -#cmakedefine HAVE_ATOMIC_BUILTINS 1 - -#cmakedefine HAVE_LOCALE_H 1 -#cmakedefine HAVE_SETLOCALE 1 - -#cmakedefine HAVE_INT32_T 1 -#ifndef HAVE_INT32_T -# define int32_t @JSON_INT32@ -#endif - -#cmakedefine HAVE_UINT32_T 1 -#ifndef HAVE_UINT32_T -# define uint32_t @JSON_UINT32@ -#endif - -#cmakedefine HAVE_UINT16_T 1 -#ifndef HAVE_UINT16_T -# define uint16_t @JSON_UINT16@ -#endif - -#cmakedefine HAVE_UINT8_T 1 -#ifndef HAVE_UINT8_T -# define uint8_t @JSON_UINT8@ -#endif - -#cmakedefine HAVE_SSIZE_T 1 - -#ifndef HAVE_SSIZE_T -# define ssize_t @JSON_SSIZE@ -#endif - -#cmakedefine USE_URANDOM 1 -#cmakedefine USE_WINDOWS_CRYPTOAPI 1 - -#define INITIAL_HASHTABLE_ORDER @JANSSON_INITIAL_HASHTABLE_ORDER@ diff --git a/3party/jansson/configure.ac b/3party/jansson/configure.ac deleted file mode 100644 index cf9ac33498..0000000000 --- a/3party/jansson/configure.ac +++ /dev/null @@ -1,162 +0,0 @@ -AC_PREREQ([2.60]) -AC_INIT([jansson], [2.12], [petri@digip.org]) - -AC_CONFIG_AUX_DIR([.]) -AM_INIT_AUTOMAKE([1.10 foreign]) - -AC_CONFIG_SRCDIR([src/value.c]) -AC_CONFIG_HEADERS([jansson_private_config.h]) - -# Checks for programs. -AC_PROG_CC -AC_PROG_LIBTOOL -AM_CONDITIONAL([GCC], [test x$GCC = xyes]) - -# Checks for libraries. - -# Checks for header files. -AC_CHECK_HEADERS([endian.h fcntl.h locale.h sched.h unistd.h sys/param.h sys/stat.h sys/time.h sys/types.h]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_TYPE_INT32_T -AC_TYPE_UINT32_T -AC_TYPE_UINT16_T -AC_TYPE_UINT8_T -AC_TYPE_LONG_LONG_INT - -AC_C_INLINE -case $ac_cv_c_inline in - yes) json_inline=inline;; - no) json_inline=;; - *) json_inline=$ac_cv_c_inline;; -esac -AC_SUBST([json_inline]) - -# Checks for library functions. -AC_CHECK_FUNCS([close getpid gettimeofday localeconv open read sched_yield strtoll]) - -AC_MSG_CHECKING([for gcc __sync builtins]) -have_sync_builtins=no -AC_TRY_LINK( - [], [unsigned long val; __sync_bool_compare_and_swap(&val, 0, 1); __sync_add_and_fetch(&val, 1); __sync_sub_and_fetch(&val, 1);], - [have_sync_builtins=yes], -) -if test "x$have_sync_builtins" = "xyes"; then - AC_DEFINE([HAVE_SYNC_BUILTINS], [1], - [Define to 1 if gcc's __sync builtins are available]) - json_have_sync_builtins=1 -else - json_have_sync_builtins=0 -fi -AC_SUBST([json_have_sync_builtins]) -AC_MSG_RESULT([$have_sync_builtins]) - -AC_MSG_CHECKING([for gcc __atomic builtins]) -have_atomic_builtins=no -AC_TRY_LINK( - [], [char l; unsigned long v; __atomic_test_and_set(&l, __ATOMIC_RELAXED); __atomic_store_n(&v, 1, __ATOMIC_RELEASE); __atomic_load_n(&v, __ATOMIC_ACQUIRE); __atomic_add_fetch(&v, 1, __ATOMIC_ACQUIRE); __atomic_sub_fetch(&v, 1, __ATOMIC_RELEASE);], - [have_atomic_builtins=yes], -) -if test "x$have_atomic_builtins" = "xyes"; then - AC_DEFINE([HAVE_ATOMIC_BUILTINS], [1], - [Define to 1 if gcc's __atomic builtins are available]) - json_have_atomic_builtins=1 -else - json_have_atomic_builtins=0 -fi -AC_SUBST([json_have_atomic_builtins]) -AC_MSG_RESULT([$have_atomic_builtins]) - -case "$ac_cv_type_long_long_int$ac_cv_func_strtoll" in - yesyes) json_have_long_long=1;; - *) json_have_long_long=0;; -esac -AC_SUBST([json_have_long_long]) - -case "$ac_cv_header_locale_h$ac_cv_func_localeconv" in - yesyes) json_have_localeconv=1;; - *) json_have_localeconv=0;; -esac -AC_SUBST([json_have_localeconv]) - -# Features -AC_ARG_ENABLE([urandom], - [AS_HELP_STRING([--disable-urandom], - [Don't use /dev/urandom to seed the hash function])], - [use_urandom=$enableval], [use_urandom=yes]) - -if test "x$use_urandom" = xyes; then -AC_DEFINE([USE_URANDOM], [1], - [Define to 1 if /dev/urandom should be used for seeding the hash function]) -fi - -AC_ARG_ENABLE([windows-cryptoapi], - [AS_HELP_STRING([--disable-windows-cryptoapi], - [Don't use CryptGenRandom to seed the hash function])], - [use_windows_cryptoapi=$enableval], [use_windows_cryptoapi=yes]) - -if test "x$use_windows_cryptoapi" = xyes; then -AC_DEFINE([USE_WINDOWS_CRYPTOAPI], [1], - [Define to 1 if CryptGenRandom should be used for seeding the hash function]) -fi - -AC_ARG_ENABLE([initial-hashtable-order], - [AS_HELP_STRING([--enable-initial-hashtable-order=VAL], - [Number of buckets new object hashtables contain is 2 raised to this power. The default is 3, so empty hashtables contain 2^3 = 8 buckets.])], - [initial_hashtable_order=$enableval], [initial_hashtable_order=3]) -AC_DEFINE_UNQUOTED([INITIAL_HASHTABLE_ORDER], [$initial_hashtable_order], - [Number of buckets new object hashtables contain is 2 raised to this power. E.g. 3 -> 2^3 = 8.]) - -AC_ARG_ENABLE([Bsymbolic], - [AS_HELP_STRING([--disable-Bsymbolic], - [Avoid linking with -Bsymbolic-function])], - [], [with_Bsymbolic=check]) - -if test "x$with_Bsymbolic" != "xno" ; then - AC_MSG_CHECKING([for -Bsymbolic-functions linker flag]) - saved_LDFLAGS="${LDFLAGS}" - LDFLAGS=-Wl,-Bsymbolic-functions - AC_TRY_LINK( - [], [int main (void) { return 0; }], - [AC_MSG_RESULT([yes]) - have_Bsymbolic=yes], - [AC_MSG_RESULT([no]) - have_Bsymbolic=no] - ) - LDFLAGS="${saved_LDFLAGS}" - - if test "x$with_Bsymbolic" = "xcheck" ; then - with_Bsymbolic=$have_Bsymbolic; - fi - if test "x$with_Bsymbolic:x$have_Bsymbolic" = "xyes:xno" ; then - AC_MSG_ERROR([linker support is required for -Bsymbolic]) - fi -fi - -AS_IF([test "x$with_Bsymbolic" = "xyes"], [JSON_BSYMBOLIC_LDFLAGS=-Wl[,]-Bsymbolic-functions]) -AC_SUBST(JSON_BSYMBOLIC_LDFLAGS) - -if test x$GCC = xyes; then - AC_MSG_CHECKING(for -Wno-format-truncation) - wnoformat_truncation="-Wno-format-truncation" - AS_IF([${CC} -Wno-format-truncation -Werror -S -o /dev/null -xc /dev/null > /dev/null 2>&1], - [AC_MSG_RESULT(yes)], - [AC_MSG_RESULT(no) - wnoformat_truncation=""]) - - AM_CFLAGS="-Wall -Wextra -Wdeclaration-after-statement -Wshadow ${wnoformat_truncation}" -fi -AC_SUBST([AM_CFLAGS]) - -AC_CONFIG_FILES([ - jansson.pc - Makefile - doc/Makefile - src/Makefile - src/jansson_config.h - test/Makefile - test/bin/Makefile - test/suites/Makefile - test/suites/api/Makefile -]) -AC_OUTPUT diff --git a/3party/jansson/doc/.gitignore b/3party/jansson/doc/.gitignore deleted file mode 100644 index 69fa449dd9..0000000000 --- a/3party/jansson/doc/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_build/ diff --git a/3party/jansson/doc/Makefile.am b/3party/jansson/doc/Makefile.am deleted file mode 100644 index 5069623fa3..0000000000 --- a/3party/jansson/doc/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -EXTRA_DIST = conf.py apiref.rst changes.rst conformance.rst \ - gettingstarted.rst github_commits.c index.rst portability.rst \ - tutorial.rst upgrading.rst ext/refcounting.py - -SPHINXBUILD = sphinx-build -SPHINXOPTS = -d _build/doctrees $(SPHINXOPTS_EXTRA) - -html-local: - $(SPHINXBUILD) -b html $(SPHINXOPTS) $(srcdir) _build/html - -install-html-local: html - mkdir -p $(DESTDIR)$(htmldir) - cp -r _build/html $(DESTDIR)$(htmldir) - -uninstall-local: - rm -rf $(DESTDIR)$(htmldir) - -clean-local: - rm -rf _build - rm -f ext/refcounting.pyc diff --git a/3party/jansson/doc/README b/3party/jansson/doc/README deleted file mode 100644 index 930b3bf0c3..0000000000 --- a/3party/jansson/doc/README +++ /dev/null @@ -1,5 +0,0 @@ -To build the documentation, invoke - - make html - -Then point your browser to _build/html/index.html. diff --git a/3party/jansson/doc/apiref.rst b/3party/jansson/doc/apiref.rst deleted file mode 100644 index 3945c113ed..0000000000 --- a/3party/jansson/doc/apiref.rst +++ /dev/null @@ -1,1862 +0,0 @@ -.. _apiref: - -************* -API Reference -************* - -.. highlight:: c - -Preliminaries -============= - -All declarations are in :file:`jansson.h`, so it's enough to - -:: - - #include - -in each source file. - -All constants are prefixed with ``JSON_`` (except for those describing -the library version, prefixed with ``JANSSON_``). Other identifiers -are prefixed with ``json_``. Type names are suffixed with ``_t`` and -``typedef``\ 'd so that the ``struct`` keyword need not be used. - - -Library Version -=============== - -The Jansson version is of the form *A.B.C*, where *A* is the major -version, *B* is the minor version and *C* is the micro version. If the -micro version is zero, it's omitted from the version string, i.e. the -version string is just *A.B*. - -When a new release only fixes bugs and doesn't add new features or -functionality, the micro version is incremented. When new features are -added in a backwards compatible way, the minor version is incremented -and the micro version is set to zero. When there are backwards -incompatible changes, the major version is incremented and others are -set to zero. - -The following preprocessor constants specify the current version of -the library: - -``JANSSON_MAJOR_VERSION``, ``JANSSON_MINOR_VERSION``, ``JANSSON_MICRO_VERSION`` - Integers specifying the major, minor and micro versions, - respectively. - -``JANSSON_VERSION`` - A string representation of the current version, e.g. ``"1.2.1"`` or - ``"1.3"``. - -``JANSSON_VERSION_HEX`` - A 3-byte hexadecimal representation of the version, e.g. - ``0x010201`` for version 1.2.1 and ``0x010300`` for version 1.3. - This is useful in numeric comparisons, e.g.:: - - #if JANSSON_VERSION_HEX >= 0x010300 - /* Code specific to version 1.3 and above */ - #endif - -``JANSSON_THREAD_SAFE_REFCOUNT`` - If this value is defined all read-only operations and reference counting in - Jansson are thread safe. This value is not defined for versions older than - ``2.11`` or when the compiler does not provide built-in atomic functions. - - -Value Representation -==================== - -The JSON specification (:rfc:`4627`) defines the following data types: -*object*, *array*, *string*, *number*, *boolean*, and *null*. JSON -types are used dynamically; arrays and objects can hold any other data -type, including themselves. For this reason, Jansson's type system is -also dynamic in nature. There's one C type to represent all JSON -values, and this structure knows the type of the JSON value it holds. - -.. type:: json_t - - This data structure is used throughout the library to represent all - JSON values. It always contains the type of the JSON value it holds - and the value's reference count. The rest depends on the type of the - value. - -Objects of :type:`json_t` are always used through a pointer. There -are APIs for querying the type, manipulating the reference count, and -for constructing and manipulating values of different types. - -Unless noted otherwise, all API functions return an error value if an -error occurs. Depending on the function's signature, the error value -is either *NULL* or -1. Invalid arguments or invalid input are -apparent sources for errors. Memory allocation and I/O operations may -also cause errors. - - -Type ----- - -.. type:: enum json_type - - The type of a JSON value. The following members are defined: - - +--------------------+ - | ``JSON_OBJECT`` | - +--------------------+ - | ``JSON_ARRAY`` | - +--------------------+ - | ``JSON_STRING`` | - +--------------------+ - | ``JSON_INTEGER`` | - +--------------------+ - | ``JSON_REAL`` | - +--------------------+ - | ``JSON_TRUE`` | - +--------------------+ - | ``JSON_FALSE`` | - +--------------------+ - | ``JSON_NULL`` | - +--------------------+ - - These correspond to JSON object, array, string, number, boolean and - null. A number is represented by either a value of the type - ``JSON_INTEGER`` or of the type ``JSON_REAL``. A true boolean value - is represented by a value of the type ``JSON_TRUE`` and false by a - value of the type ``JSON_FALSE``. - -.. function:: int json_typeof(const json_t *json) - - Return the type of the JSON value (a :type:`json_type` cast to - :type:`int`). *json* MUST NOT be *NULL*. This function is actually - implemented as a macro for speed. - -.. function:: json_is_object(const json_t *json) - json_is_array(const json_t *json) - json_is_string(const json_t *json) - json_is_integer(const json_t *json) - json_is_real(const json_t *json) - json_is_true(const json_t *json) - json_is_false(const json_t *json) - json_is_null(const json_t *json) - - These functions (actually macros) return true (non-zero) for values - of the given type, and false (zero) for values of other types and - for *NULL*. - -.. function:: json_is_number(const json_t *json) - - Returns true for values of types ``JSON_INTEGER`` and - ``JSON_REAL``, and false for other types and for *NULL*. - -.. function:: json_is_boolean(const json_t *json) - - Returns true for types ``JSON_TRUE`` and ``JSON_FALSE``, and false - for values of other types and for *NULL*. - -.. function:: json_boolean_value(const json_t *json) - - Alias of :func:`json_is_true()`, i.e. returns 1 for ``JSON_TRUE`` - and 0 otherwise. - - .. versionadded:: 2.7 - - -.. _apiref-reference-count: - -Reference Count ---------------- - -The reference count is used to track whether a value is still in use -or not. When a value is created, it's reference count is set to 1. If -a reference to a value is kept (e.g. a value is stored somewhere for -later use), its reference count is incremented, and when the value is -no longer needed, the reference count is decremented. When the -reference count drops to zero, there are no references left, and the -value can be destroyed. - -.. function:: json_t *json_incref(json_t *json) - - Increment the reference count of *json* if it's not *NULL*. - Returns *json*. - -.. function:: void json_decref(json_t *json) - - Decrement the reference count of *json*. As soon as a call to - :func:`json_decref()` drops the reference count to zero, the value - is destroyed and it can no longer be used. - -Functions creating new JSON values set the reference count to 1. These -functions are said to return a **new reference**. Other functions -returning (existing) JSON values do not normally increase the -reference count. These functions are said to return a **borrowed -reference**. So, if the user will hold a reference to a value returned -as a borrowed reference, he must call :func:`json_incref`. As soon as -the value is no longer needed, :func:`json_decref` should be called -to release the reference. - -Normally, all functions accepting a JSON value as an argument will -manage the reference, i.e. increase and decrease the reference count -as needed. However, some functions **steal** the reference, i.e. they -have the same result as if the user called :func:`json_decref()` on -the argument right after calling the function. These functions are -suffixed with ``_new`` or have ``_new_`` somewhere in their name. - -For example, the following code creates a new JSON array and appends -an integer to it:: - - json_t *array, *integer; - - array = json_array(); - integer = json_integer(42); - - json_array_append(array, integer); - json_decref(integer); - -Note how the caller has to release the reference to the integer value -by calling :func:`json_decref()`. By using a reference stealing -function :func:`json_array_append_new()` instead of -:func:`json_array_append()`, the code becomes much simpler:: - - json_t *array = json_array(); - json_array_append_new(array, json_integer(42)); - -In this case, the user doesn't have to explicitly release the -reference to the integer value, as :func:`json_array_append_new()` -steals the reference when appending the value to the array. - -In the following sections it is clearly documented whether a function -will return a new or borrowed reference or steal a reference to its -argument. - - -Circular References -------------------- - -A circular reference is created when an object or an array is, -directly or indirectly, inserted inside itself. The direct case is -simple:: - - json_t *obj = json_object(); - json_object_set(obj, "foo", obj); - -Jansson will refuse to do this, and :func:`json_object_set()` (and -all the other such functions for objects and arrays) will return with -an error status. The indirect case is the dangerous one:: - - json_t *arr1 = json_array(), *arr2 = json_array(); - json_array_append(arr1, arr2); - json_array_append(arr2, arr1); - -In this example, the array ``arr2`` is contained in the array -``arr1``, and vice versa. Jansson cannot check for this kind of -indirect circular references without a performance hit, so it's up to -the user to avoid them. - -If a circular reference is created, the memory consumed by the values -cannot be freed by :func:`json_decref()`. The reference counts never -drops to zero because the values are keeping the references to each -other. Moreover, trying to encode the values with any of the encoding -functions will fail. The encoder detects circular references and -returns an error status. - -Scope Dereferencing -------------------- - -.. versionadded:: 2.9 - -It is possible to use the ``json_auto_t`` type to automatically -dereference a value at the end of a scope. For example:: - - void function(void) { - json_auto_t *value = NULL; - value = json_string("foo"); - /* json_decref(value) is automatically called. */ - } - -This feature is only available on GCC and Clang. So if your project -has a portability requirement for other compilers, you should avoid -this feature. - -Additionally, as always, care should be taken when passing values to -functions that steal references. - -True, False and Null -==================== - -These three values are implemented as singletons, so the returned -pointers won't change between invocations of these functions. - -.. function:: json_t *json_true(void) - - .. refcounting:: new - - Returns the JSON true value. - -.. function:: json_t *json_false(void) - - .. refcounting:: new - - Returns the JSON false value. - -.. function:: json_t *json_boolean(val) - - .. refcounting:: new - - Returns JSON false if ``val`` is zero, and JSON true otherwise. - This is a macro, and equivalent to ``val ? json_true() : - json_false()``. - - .. versionadded:: 2.4 - - -.. function:: json_t *json_null(void) - - .. refcounting:: new - - Returns the JSON null value. - - -String -====== - -Jansson uses UTF-8 as the character encoding. All JSON strings must be -valid UTF-8 (or ASCII, as it's a subset of UTF-8). All Unicode -codepoints U+0000 through U+10FFFF are allowed, but you must use -length-aware functions if you wish to embed null bytes in strings. - -.. function:: json_t *json_string(const char *value) - - .. refcounting:: new - - Returns a new JSON string, or *NULL* on error. *value* must be a - valid null terminated UTF-8 encoded Unicode string. - -.. function:: json_t *json_stringn(const char *value, size_t len) - - .. refcounting:: new - - Like :func:`json_string`, but with explicit length, so *value* may - contain null characters or not be null terminated. - - .. versionadded:: 2.7 - -.. function:: json_t *json_string_nocheck(const char *value) - - .. refcounting:: new - - Like :func:`json_string`, but doesn't check that *value* is valid - UTF-8. Use this function only if you are certain that this really - is the case (e.g. you have already checked it by other means). - -.. function:: json_t *json_stringn_nocheck(const char *value, size_t len) - - .. refcounting:: new - - Like :func:`json_string_nocheck`, but with explicit length, so - *value* may contain null characters or not be null terminated. - - .. versionadded:: 2.7 - -.. function:: const char *json_string_value(const json_t *string) - - Returns the associated value of *string* as a null terminated UTF-8 - encoded string, or *NULL* if *string* is not a JSON string. - - The returned value is read-only and must not be modified or freed by - the user. It is valid as long as *string* exists, i.e. as long as - its reference count has not dropped to zero. - -.. function:: size_t json_string_length(const json_t *string) - - Returns the length of *string* in its UTF-8 presentation, or zero - if *string* is not a JSON string. - - .. versionadded:: 2.7 - -.. function:: int json_string_set(json_t *string, const char *value) - - Sets the associated value of *string* to *value*. *value* must be a - valid UTF-8 encoded Unicode string. Returns 0 on success and -1 on - error. - -.. function:: int json_string_setn(json_t *string, const char *value, size_t len) - - Like :func:`json_string_set`, but with explicit length, so *value* - may contain null characters or not be null terminated. - - .. versionadded:: 2.7 - -.. function:: int json_string_set_nocheck(json_t *string, const char *value) - - Like :func:`json_string_set`, but doesn't check that *value* is - valid UTF-8. Use this function only if you are certain that this - really is the case (e.g. you have already checked it by other - means). - -.. function:: int json_string_setn_nocheck(json_t *string, const char *value, size_t len) - - Like :func:`json_string_set_nocheck`, but with explicit length, - so *value* may contain null characters or not be null terminated. - - .. versionadded:: 2.7 - -.. function:: json_t *json_sprintf(const char *format, ...) - json_t *json_vsprintf(const char *format, va_list ap) - - .. refcounting:: new - - Construct a JSON string from a format string and varargs, just like - :func:`printf()`. - - .. versionadded:: 2.11 - - -Number -====== - -The JSON specification only contains one numeric type, "number". The C -programming language has distinct types for integer and floating-point -numbers, so for practical reasons Jansson also has distinct types for -the two. They are called "integer" and "real", respectively. For more -information, see :ref:`rfc-conformance`. - -.. type:: json_int_t - - This is the C type that is used to store JSON integer values. It - represents the widest integer type available on your system. In - practice it's just a typedef of ``long long`` if your compiler - supports it, otherwise ``long``. - - Usually, you can safely use plain ``int`` in place of - ``json_int_t``, and the implicit C integer conversion handles the - rest. Only when you know that you need the full 64-bit range, you - should use ``json_int_t`` explicitly. - -``JSON_INTEGER_IS_LONG_LONG`` - This is a preprocessor variable that holds the value 1 if - :type:`json_int_t` is ``long long``, and 0 if it's ``long``. It - can be used as follows:: - - #if JSON_INTEGER_IS_LONG_LONG - /* Code specific for long long */ - #else - /* Code specific for long */ - #endif - -``JSON_INTEGER_FORMAT`` - This is a macro that expands to a :func:`printf()` conversion - specifier that corresponds to :type:`json_int_t`, without the - leading ``%`` sign, i.e. either ``"lld"`` or ``"ld"``. This macro - is required because the actual type of :type:`json_int_t` can be - either ``long`` or ``long long``, and :func:`printf()` requires - different length modifiers for the two. - - Example:: - - json_int_t x = 123123123; - printf("x is %" JSON_INTEGER_FORMAT "\n", x); - - -.. function:: json_t *json_integer(json_int_t value) - - .. refcounting:: new - - Returns a new JSON integer, or *NULL* on error. - -.. function:: json_int_t json_integer_value(const json_t *integer) - - Returns the associated value of *integer*, or 0 if *json* is not a - JSON integer. - -.. function:: int json_integer_set(const json_t *integer, json_int_t value) - - Sets the associated value of *integer* to *value*. Returns 0 on - success and -1 if *integer* is not a JSON integer. - -.. function:: json_t *json_real(double value) - - .. refcounting:: new - - Returns a new JSON real, or *NULL* on error. - -.. function:: double json_real_value(const json_t *real) - - Returns the associated value of *real*, or 0.0 if *real* is not a - JSON real. - -.. function:: int json_real_set(const json_t *real, double value) - - Sets the associated value of *real* to *value*. Returns 0 on - success and -1 if *real* is not a JSON real. - -.. function:: double json_number_value(const json_t *json) - - Returns the associated value of the JSON integer or JSON real - *json*, cast to double regardless of the actual type. If *json* is - neither JSON real nor JSON integer, 0.0 is returned. - - -Array -===== - -A JSON array is an ordered collection of other JSON values. - -.. function:: json_t *json_array(void) - - .. refcounting:: new - - Returns a new JSON array, or *NULL* on error. Initially, the array - is empty. - -.. function:: size_t json_array_size(const json_t *array) - - Returns the number of elements in *array*, or 0 if *array* is NULL - or not a JSON array. - -.. function:: json_t *json_array_get(const json_t *array, size_t index) - - .. refcounting:: borrow - - Returns the element in *array* at position *index*. The valid range - for *index* is from 0 to the return value of - :func:`json_array_size()` minus 1. If *array* is not a JSON array, - if *array* is *NULL*, or if *index* is out of range, *NULL* is - returned. - -.. function:: int json_array_set(json_t *array, size_t index, json_t *value) - - Replaces the element in *array* at position *index* with *value*. - The valid range for *index* is from 0 to the return value of - :func:`json_array_size()` minus 1. Returns 0 on success and -1 on - error. - -.. function:: int json_array_set_new(json_t *array, size_t index, json_t *value) - - Like :func:`json_array_set()` but steals the reference to *value*. - This is useful when *value* is newly created and not used after - the call. - -.. function:: int json_array_append(json_t *array, json_t *value) - - Appends *value* to the end of *array*, growing the size of *array* - by 1. Returns 0 on success and -1 on error. - -.. function:: int json_array_append_new(json_t *array, json_t *value) - - Like :func:`json_array_append()` but steals the reference to - *value*. This is useful when *value* is newly created and not used - after the call. - -.. function:: int json_array_insert(json_t *array, size_t index, json_t *value) - - Inserts *value* to *array* at position *index*, shifting the - elements at *index* and after it one position towards the end of - the array. Returns 0 on success and -1 on error. - -.. function:: int json_array_insert_new(json_t *array, size_t index, json_t *value) - - Like :func:`json_array_insert()` but steals the reference to - *value*. This is useful when *value* is newly created and not used - after the call. - -.. function:: int json_array_remove(json_t *array, size_t index) - - Removes the element in *array* at position *index*, shifting the - elements after *index* one position towards the start of the array. - Returns 0 on success and -1 on error. The reference count of the - removed value is decremented. - -.. function:: int json_array_clear(json_t *array) - - Removes all elements from *array*. Returns 0 on success and -1 on - error. The reference count of all removed values are decremented. - -.. function:: int json_array_extend(json_t *array, json_t *other_array) - - Appends all elements in *other_array* to the end of *array*. - Returns 0 on success and -1 on error. - -.. function:: json_array_foreach(array, index, value) - - Iterate over every element of ``array``, running the block - of code that follows each time with the proper values set to - variables ``index`` and ``value``, of types :type:`size_t` and - :type:`json_t *` respectively. Example:: - - /* array is a JSON array */ - size_t index; - json_t *value; - - json_array_foreach(array, index, value) { - /* block of code that uses index and value */ - } - - The items are returned in increasing index order. - - This macro expands to an ordinary ``for`` statement upon - preprocessing, so its performance is equivalent to that of - hand-written code using the array access functions. - The main advantage of this macro is that it abstracts - away the complexity, and makes for more concise and readable code. - - .. versionadded:: 2.5 - - -Object -====== - -A JSON object is a dictionary of key-value pairs, where the key is a -Unicode string and the value is any JSON value. - -Even though null bytes are allowed in string values, they are not -allowed in object keys. - -.. function:: json_t *json_object(void) - - .. refcounting:: new - - Returns a new JSON object, or *NULL* on error. Initially, the - object is empty. - -.. function:: size_t json_object_size(const json_t *object) - - Returns the number of elements in *object*, or 0 if *object* is not - a JSON object. - -.. function:: json_t *json_object_get(const json_t *object, const char *key) - - .. refcounting:: borrow - - Get a value corresponding to *key* from *object*. Returns *NULL* if - *key* is not found and on error. - -.. function:: int json_object_set(json_t *object, const char *key, json_t *value) - - Set the value of *key* to *value* in *object*. *key* must be a - valid null terminated UTF-8 encoded Unicode string. If there - already is a value for *key*, it is replaced by the new value. - Returns 0 on success and -1 on error. - -.. function:: int json_object_set_nocheck(json_t *object, const char *key, json_t *value) - - Like :func:`json_object_set`, but doesn't check that *key* is - valid UTF-8. Use this function only if you are certain that this - really is the case (e.g. you have already checked it by other - means). - -.. function:: int json_object_set_new(json_t *object, const char *key, json_t *value) - - Like :func:`json_object_set()` but steals the reference to - *value*. This is useful when *value* is newly created and not used - after the call. - -.. function:: int json_object_set_new_nocheck(json_t *object, const char *key, json_t *value) - - Like :func:`json_object_set_new`, but doesn't check that *key* is - valid UTF-8. Use this function only if you are certain that this - really is the case (e.g. you have already checked it by other - means). - -.. function:: int json_object_del(json_t *object, const char *key) - - Delete *key* from *object* if it exists. Returns 0 on success, or - -1 if *key* was not found. The reference count of the removed value - is decremented. - -.. function:: int json_object_clear(json_t *object) - - Remove all elements from *object*. Returns 0 on success and -1 if - *object* is not a JSON object. The reference count of all removed - values are decremented. - -.. function:: int json_object_update(json_t *object, json_t *other) - - Update *object* with the key-value pairs from *other*, overwriting - existing keys. Returns 0 on success or -1 on error. - -.. function:: int json_object_update_existing(json_t *object, json_t *other) - - Like :func:`json_object_update()`, but only the values of existing - keys are updated. No new keys are created. Returns 0 on success or - -1 on error. - - .. versionadded:: 2.3 - -.. function:: int json_object_update_missing(json_t *object, json_t *other) - - Like :func:`json_object_update()`, but only new keys are created. - The value of any existing key is not changed. Returns 0 on success - or -1 on error. - - .. versionadded:: 2.3 - -.. function:: json_object_foreach(object, key, value) - - Iterate over every key-value pair of ``object``, running the block - of code that follows each time with the proper values set to - variables ``key`` and ``value``, of types :type:`const char *` and - :type:`json_t *` respectively. Example:: - - /* obj is a JSON object */ - const char *key; - json_t *value; - - json_object_foreach(obj, key, value) { - /* block of code that uses key and value */ - } - - The items are returned in the order they were inserted to the - object. - - **Note:** It's not safe to call ``json_object_del(object, key)`` - during iteration. If you need to, use - :func:`json_object_foreach_safe` instead. - - This macro expands to an ordinary ``for`` statement upon - preprocessing, so its performance is equivalent to that of - hand-written iteration code using the object iteration protocol - (see below). The main advantage of this macro is that it abstracts - away the complexity behind iteration, and makes for more concise and - readable code. - - .. versionadded:: 2.3 - - -.. function:: json_object_foreach_safe(object, tmp, key, value) - - Like :func:`json_object_foreach()`, but it's safe to call - ``json_object_del(object, key)`` during iteration. You need to pass - an extra ``void *`` parameter ``tmp`` that is used for temporary storage. - - .. versionadded:: 2.8 - - -The following functions can be used to iterate through all key-value -pairs in an object. The items are returned in the order they were -inserted to the object. - -.. function:: void *json_object_iter(json_t *object) - - Returns an opaque iterator which can be used to iterate over all - key-value pairs in *object*, or *NULL* if *object* is empty. - -.. function:: void *json_object_iter_at(json_t *object, const char *key) - - Like :func:`json_object_iter()`, but returns an iterator to the - key-value pair in *object* whose key is equal to *key*, or NULL if - *key* is not found in *object*. Iterating forward to the end of - *object* only yields all key-value pairs of the object if *key* - happens to be the first key in the underlying hash table. - -.. function:: void *json_object_iter_next(json_t *object, void *iter) - - Returns an iterator pointing to the next key-value pair in *object* - after *iter*, or *NULL* if the whole object has been iterated - through. - -.. function:: const char *json_object_iter_key(void *iter) - - Extract the associated key from *iter*. - -.. function:: json_t *json_object_iter_value(void *iter) - - .. refcounting:: borrow - - Extract the associated value from *iter*. - -.. function:: int json_object_iter_set(json_t *object, void *iter, json_t *value) - - Set the value of the key-value pair in *object*, that is pointed to - by *iter*, to *value*. - -.. function:: int json_object_iter_set_new(json_t *object, void *iter, json_t *value) - - Like :func:`json_object_iter_set()`, but steals the reference to - *value*. This is useful when *value* is newly created and not used - after the call. - -.. function:: void *json_object_key_to_iter(const char *key) - - Like :func:`json_object_iter_at()`, but much faster. Only works for - values returned by :func:`json_object_iter_key()`. Using other keys - will lead to segfaults. This function is used internally to - implement :func:`json_object_foreach`. Example:: - - /* obj is a JSON object */ - const char *key; - json_t *value; - - void *iter = json_object_iter(obj); - while(iter) - { - key = json_object_iter_key(iter); - value = json_object_iter_value(iter); - /* use key and value ... */ - iter = json_object_iter_next(obj, iter); - } - - .. versionadded:: 2.3 - -.. function:: void json_object_seed(size_t seed) - - Seed the hash function used in Jansson's hashtable implementation. - The seed is used to randomize the hash function so that an - attacker cannot control its output. - - If *seed* is 0, Jansson generates the seed itself by reading - random data from the operating system's entropy sources. If no - entropy sources are available, falls back to using a combination - of the current timestamp (with microsecond precision if possible) - and the process ID. - - If called at all, this function must be called before any calls to - :func:`json_object()`, either explicit or implicit. If this - function is not called by the user, the first call to - :func:`json_object()` (either explicit or implicit) seeds the hash - function. See :ref:`portability-thread-safety` for notes on thread - safety. - - If repeatable results are required, for e.g. unit tests, the hash - function can be "unrandomized" by calling :func:`json_object_seed` - with a constant value on program startup, e.g. - ``json_object_seed(1)``. - - .. versionadded:: 2.6 - - -Error reporting -=============== - -Jansson uses a single struct type to pass error information to the -user. See sections :ref:`apiref-decoding`, :ref:`apiref-pack` and -:ref:`apiref-unpack` for functions that pass error information using -this struct. - -.. type:: json_error_t - - .. member:: char text[] - - The error message (in UTF-8), or an empty string if a message is - not available. - - The last byte of this array contains a numeric error code. Use - :func:`json_error_code()` to extract this code. - - .. member:: char source[] - - Source of the error. This can be (a part of) the file name or a - special identifier in angle brackets (e.g. ````). - - .. member:: int line - - The line number on which the error occurred. - - .. member:: int column - - The column on which the error occurred. Note that this is the - *character column*, not the byte column, i.e. a multibyte UTF-8 - character counts as one column. - - .. member:: int position - - The position in bytes from the start of the input. This is - useful for debugging Unicode encoding problems. - -The normal use of :type:`json_error_t` is to allocate it on the stack, -and pass a pointer to a function. Example:: - - int main() { - json_t *json; - json_error_t error; - - json = json_load_file("/path/to/file.json", 0, &error); - if(!json) { - /* the error variable contains error information */ - } - ... - } - -Also note that if the call succeeded (``json != NULL`` in the above -example), the contents of ``error`` are generally left unspecified. -The decoding functions write to the ``position`` member also on -success. See :ref:`apiref-decoding` for more info. - -All functions also accept *NULL* as the :type:`json_error_t` pointer, -in which case no error information is returned to the caller. - -.. type:: enum json_error_code - - An enumeration containing numeric error codes. The following errors are - currently defined: - - ``json_error_unknown`` - - Unknown error. This should only be returned for non-errorneous - :type:`json_error_t` structures. - - ``json_error_out_of_memory`` - - The library couldn’t allocate any heap memory. - - ``json_error_stack_overflow`` - - Nesting too deep. - - ``json_error_cannot_open_file`` - - Couldn’t open input file. - - ``json_error_invalid_argument`` - - A function argument was invalid. - - ``json_error_invalid_utf8`` - - The input string isn’t valid UTF-8. - - ``json_error_premature_end_of_input`` - - The input ended in the middle of a JSON value. - - ``json_error_end_of_input_expected`` - - There was some text after the end of a JSON value. See the - ``JSON_DISABLE_EOF_CHECK`` flag. - - ``json_error_invalid_syntax`` - - JSON syntax error. - - ``json_error_invalid_format`` - - Invalid format string for packing or unpacking. - - ``json_error_wrong_type`` - - When packing or unpacking, the actual type of a value differed from the - one specified in the format string. - - ``json_error_null_character`` - - A null character was detected in a JSON string. See the - ``JSON_ALLOW_NUL`` flag. - - ``json_error_null_value`` - - When packing or unpacking, some key or value was ``NULL``. - - ``json_error_null_byte_in_key`` - - An object key would contain a null byte. Jansson can’t represent such - keys; see :ref:`rfc-conformance`. - - ``json_error_duplicate_key`` - - Duplicate key in object. See the ``JSON_REJECT_DUPLICATES`` flag. - - ``json_error_numeric_overflow`` - - When converting a JSON number to a C numeric type, a numeric overflow - was detected. - - ``json_error_item_not_found`` - - Key in object not found. - - ``json_error_index_out_of_range`` - - Array index is out of range. - - .. versionadded:: 2.11 - -.. function:: enum json_error_code json_error_code(const json_error_t *error) - - Returns the error code embedded in ``error->text``. - - .. versionadded:: 2.11 - - -Encoding -======== - -This sections describes the functions that can be used to encode -values to JSON. By default, only objects and arrays can be encoded -directly, since they are the only valid *root* values of a JSON text. -To encode any JSON value, use the ``JSON_ENCODE_ANY`` flag (see -below). - -By default, the output has no newlines, and spaces are used between -array and object elements for a readable output. This behavior can be -altered by using the ``JSON_INDENT`` and ``JSON_COMPACT`` flags -described below. A newline is never appended to the end of the encoded -JSON data. - -Each function takes a *flags* parameter that controls some aspects of -how the data is encoded. Its default value is 0. The following macros -can be ORed together to obtain *flags*. - -``JSON_INDENT(n)`` - Pretty-print the result, using newlines between array and object - items, and indenting with *n* spaces. The valid range for *n* is - between 0 and 31 (inclusive), other values result in an undefined - output. If ``JSON_INDENT`` is not used or *n* is 0, no newlines are - inserted between array and object items. - - The ``JSON_MAX_INDENT`` constant defines the maximum indentation - that can be used, and its value is 31. - - .. versionchanged:: 2.7 - Added ``JSON_MAX_INDENT``. - -``JSON_COMPACT`` - This flag enables a compact representation, i.e. sets the separator - between array and object items to ``","`` and between object keys - and values to ``":"``. Without this flag, the corresponding - separators are ``", "`` and ``": "`` for more readable output. - -``JSON_ENSURE_ASCII`` - If this flag is used, the output is guaranteed to consist only of - ASCII characters. This is achieved by escaping all Unicode - characters outside the ASCII range. - -``JSON_SORT_KEYS`` - If this flag is used, all the objects in output are sorted by key. - This is useful e.g. if two JSON texts are diffed or visually - compared. - -``JSON_PRESERVE_ORDER`` - **Deprecated since version 2.8:** Order of object keys - is always preserved. - - Prior to version 2.8: If this flag is used, object keys in the - output are sorted into the same order in which they were first - inserted to the object. For example, decoding a JSON text and then - encoding with this flag preserves the order of object keys. - -``JSON_ENCODE_ANY`` - Specifying this flag makes it possible to encode any JSON value on - its own. Without it, only objects and arrays can be passed as the - *json* value to the encoding functions. - - **Note:** Encoding any value may be useful in some scenarios, but - it's generally discouraged as it violates strict compatibility with - :rfc:`4627`. If you use this flag, don't expect interoperability - with other JSON systems. - - .. versionadded:: 2.1 - -``JSON_ESCAPE_SLASH`` - Escape the ``/`` characters in strings with ``\/``. - - .. versionadded:: 2.4 - -``JSON_REAL_PRECISION(n)`` - Output all real numbers with at most *n* digits of precision. The - valid range for *n* is between 0 and 31 (inclusive), and other - values result in an undefined behavior. - - By default, the precision is 17, to correctly and losslessly encode - all IEEE 754 double precision floating point numbers. - - .. versionadded:: 2.7 - -``JSON_EMBED`` - If this flag is used, the opening and closing characters of the top-level - array ('[', ']') or object ('{', '}') are omitted during encoding. This - flag is useful when concatenating multiple arrays or objects into a stream. - - .. versionadded:: 2.10 - -These functions output UTF-8: - -.. function:: char *json_dumps(const json_t *json, size_t flags) - - Returns the JSON representation of *json* as a string, or *NULL* on - error. *flags* is described above. The return value must be freed - by the caller using :func:`free()`. - -.. function:: size_t json_dumpb(const json_t *json, char *buffer, size_t size, size_t flags) - - Writes the JSON representation of *json* to the *buffer* of - *size* bytes. Returns the number of bytes that would be written - or 0 on error. *flags* is described above. *buffer* is not - null-terminated. - - This function never writes more than *size* bytes. If the return - value is greater than *size*, the contents of the *buffer* are - undefined. This behavior enables you to specify a NULL *buffer* - to determine the length of the encoding. For example:: - - size_t size = json_dumpb(json, NULL, 0, 0); - if (size == 0) - return -1; - - char *buf = alloca(size); - - size = json_dumpb(json, buf, size, 0); - - .. versionadded:: 2.10 - -.. function:: int json_dumpf(const json_t *json, FILE *output, size_t flags) - - Write the JSON representation of *json* to the stream *output*. - *flags* is described above. Returns 0 on success and -1 on error. - If an error occurs, something may have already been written to - *output*. In this case, the output is undefined and most likely not - valid JSON. - -.. function:: int json_dumpfd(const json_t *json, int output, size_t flags) - - Write the JSON representation of *json* to the stream *output*. - *flags* is described above. Returns 0 on success and -1 on error. - If an error occurs, something may have already been written to - *output*. In this case, the output is undefined and most likely not - valid JSON. - - It is important to note that this function can only succeed on stream - file descriptors (such as SOCK_STREAM). Using this function on a - non-stream file descriptor will result in undefined behavior. For - non-stream file descriptors, see instead :func:`json_dumpb()`. - - This function requires POSIX and fails on all non-POSIX systems. - - .. versionadded:: 2.10 - -.. function:: int json_dump_file(const json_t *json, const char *path, size_t flags) - - Write the JSON representation of *json* to the file *path*. If - *path* already exists, it is overwritten. *flags* is described - above. Returns 0 on success and -1 on error. - -.. type:: json_dump_callback_t - - A typedef for a function that's called by - :func:`json_dump_callback()`:: - - typedef int (*json_dump_callback_t)(const char *buffer, size_t size, void *data); - - *buffer* points to a buffer containing a chunk of output, *size* is - the length of the buffer, and *data* is the corresponding - :func:`json_dump_callback()` argument passed through. - - *buffer* is guaranteed to be a valid UTF-8 string (i.e. multi-byte - code unit sequences are preserved). *buffer* never contains - embedded null bytes. - - On error, the function should return -1 to stop the encoding - process. On success, it should return 0. - - .. versionadded:: 2.2 - -.. function:: int json_dump_callback(const json_t *json, json_dump_callback_t callback, void *data, size_t flags) - - Call *callback* repeatedly, passing a chunk of the JSON - representation of *json* each time. *flags* is described above. - Returns 0 on success and -1 on error. - - .. versionadded:: 2.2 - - -.. _apiref-decoding: - -Decoding -======== - -This sections describes the functions that can be used to decode JSON -text to the Jansson representation of JSON data. The JSON -specification requires that a JSON text is either a serialized array -or object, and this requirement is also enforced with the following -functions. In other words, the top level value in the JSON text being -decoded must be either array or object. To decode any JSON value, use -the ``JSON_DECODE_ANY`` flag (see below). - -See :ref:`rfc-conformance` for a discussion on Jansson's conformance -to the JSON specification. It explains many design decisions that -affect especially the behavior of the decoder. - -Each function takes a *flags* parameter that can be used to control -the behavior of the decoder. Its default value is 0. The following -macros can be ORed together to obtain *flags*. - -``JSON_REJECT_DUPLICATES`` - Issue a decoding error if any JSON object in the input text - contains duplicate keys. Without this flag, the value of the last - occurrence of each key ends up in the result. Key equivalence is - checked byte-by-byte, without special Unicode comparison - algorithms. - - .. versionadded:: 2.1 - -``JSON_DECODE_ANY`` - By default, the decoder expects an array or object as the input. - With this flag enabled, the decoder accepts any valid JSON value. - - **Note:** Decoding any value may be useful in some scenarios, but - it's generally discouraged as it violates strict compatibility with - :rfc:`4627`. If you use this flag, don't expect interoperability - with other JSON systems. - - .. versionadded:: 2.3 - -``JSON_DISABLE_EOF_CHECK`` - By default, the decoder expects that its whole input constitutes a - valid JSON text, and issues an error if there's extra data after - the otherwise valid JSON input. With this flag enabled, the decoder - stops after decoding a valid JSON array or object, and thus allows - extra data after the JSON text. - - Normally, reading will stop when the last ``]`` or ``}`` in the - JSON input is encountered. If both ``JSON_DISABLE_EOF_CHECK`` and - ``JSON_DECODE_ANY`` flags are used, the decoder may read one extra - UTF-8 code unit (up to 4 bytes of input). For example, decoding - ``4true`` correctly decodes the integer 4, but also reads the - ``t``. For this reason, if reading multiple consecutive values that - are not arrays or objects, they should be separated by at least one - whitespace character. - - .. versionadded:: 2.1 - -``JSON_DECODE_INT_AS_REAL`` - JSON defines only one number type. Jansson distinguishes between - ints and reals. For more information see :ref:`real-vs-integer`. - With this flag enabled the decoder interprets all numbers as real - values. Integers that do not have an exact double representation - will silently result in a loss of precision. Integers that cause - a double overflow will cause an error. - - .. versionadded:: 2.5 - -``JSON_ALLOW_NUL`` - Allow ``\u0000`` escape inside string values. This is a safety - measure; If you know your input can contain null bytes, use this - flag. If you don't use this flag, you don't have to worry about null - bytes inside strings unless you explicitly create themselves by - using e.g. :func:`json_stringn()` or ``s#`` format specifier for - :func:`json_pack()`. - - Object keys cannot have embedded null bytes even if this flag is - used. - - .. versionadded:: 2.6 - -Each function also takes an optional :type:`json_error_t` parameter -that is filled with error information if decoding fails. It's also -updated on success; the number of bytes of input read is written to -its ``position`` field. This is especially useful when using -``JSON_DISABLE_EOF_CHECK`` to read multiple consecutive JSON texts. - -.. versionadded:: 2.3 - Number of bytes of input read is written to the ``position`` field - of the :type:`json_error_t` structure. - -If no error or position information is needed, you can pass *NULL*. - -.. function:: json_t *json_loads(const char *input, size_t flags, json_error_t *error) - - .. refcounting:: new - - Decodes the JSON string *input* and returns the array or object it - contains, or *NULL* on error, in which case *error* is filled with - information about the error. *flags* is described above. - -.. function:: json_t *json_loadb(const char *buffer, size_t buflen, size_t flags, json_error_t *error) - - .. refcounting:: new - - Decodes the JSON string *buffer*, whose length is *buflen*, and - returns the array or object it contains, or *NULL* on error, in - which case *error* is filled with information about the error. This - is similar to :func:`json_loads()` except that the string doesn't - need to be null-terminated. *flags* is described above. - - .. versionadded:: 2.1 - -.. function:: json_t *json_loadf(FILE *input, size_t flags, json_error_t *error) - - .. refcounting:: new - - Decodes the JSON text in stream *input* and returns the array or - object it contains, or *NULL* on error, in which case *error* is - filled with information about the error. *flags* is described - above. - - This function will start reading the input from whatever position - the input file was in, without attempting to seek first. If an error - occurs, the file position will be left indeterminate. On success, - the file position will be at EOF, unless ``JSON_DISABLE_EOF_CHECK`` - flag was used. In this case, the file position will be at the first - character after the last ``]`` or ``}`` in the JSON input. This - allows calling :func:`json_loadf()` on the same ``FILE`` object - multiple times, if the input consists of consecutive JSON texts, - possibly separated by whitespace. - -.. function:: json_t *json_loadfd(int input, size_t flags, json_error_t *error) - - .. refcounting:: new - - Decodes the JSON text in stream *input* and returns the array or - object it contains, or *NULL* on error, in which case *error* is - filled with information about the error. *flags* is described - above. - - This function will start reading the input from whatever position - the input file descriptor was in, without attempting to seek first. - If an error occurs, the file position will be left indeterminate. - On success, the file position will be at EOF, unless - ``JSON_DISABLE_EOF_CHECK`` flag was used. In this case, the file - descriptor's position will be at the first character after the last - ``]`` or ``}`` in the JSON input. This allows calling - :func:`json_loadfd()` on the same file descriptor multiple times, - if the input consists of consecutive JSON texts, possibly separated - by whitespace. - - It is important to note that this function can only succeed on stream - file descriptors (such as SOCK_STREAM). Using this function on a - non-stream file descriptor will result in undefined behavior. For - non-stream file descriptors, see instead :func:`json_loadb()`. - - This function requires POSIX and fails on all non-POSIX systems. - - .. versionadded:: 2.10 - -.. function:: json_t *json_load_file(const char *path, size_t flags, json_error_t *error) - - .. refcounting:: new - - Decodes the JSON text in file *path* and returns the array or - object it contains, or *NULL* on error, in which case *error* is - filled with information about the error. *flags* is described - above. - -.. type:: json_load_callback_t - - A typedef for a function that's called by - :func:`json_load_callback()` to read a chunk of input data:: - - typedef size_t (*json_load_callback_t)(void *buffer, size_t buflen, void *data); - - *buffer* points to a buffer of *buflen* bytes, and *data* is the - corresponding :func:`json_load_callback()` argument passed through. - - On success, the function should write at most *buflen* bytes to - *buffer*, and return the number of bytes written; a returned value - of 0 indicates that no data was produced and that the end of file - has been reached. On error, the function should return - ``(size_t)-1`` to abort the decoding process. - - In UTF-8, some code points are encoded as multi-byte sequences. The - callback function doesn't need to worry about this, as Jansson - handles it at a higher level. For example, you can safely read a - fixed number of bytes from a network connection without having to - care about code unit sequences broken apart by the chunk - boundaries. - - .. versionadded:: 2.4 - -.. function:: json_t *json_load_callback(json_load_callback_t callback, void *data, size_t flags, json_error_t *error) - - .. refcounting:: new - - Decodes the JSON text produced by repeated calls to *callback*, and - returns the array or object it contains, or *NULL* on error, in - which case *error* is filled with information about the error. - *data* is passed through to *callback* on each call. *flags* is - described above. - - .. versionadded:: 2.4 - - -.. _apiref-pack: - -Building Values -=============== - -This section describes functions that help to create, or *pack*, -complex JSON values, especially nested objects and arrays. Value -building is based on a *format string* that is used to tell the -functions about the expected arguments. - -For example, the format string ``"i"`` specifies a single integer -value, while the format string ``"[ssb]"`` or the equivalent ``"[s, s, -b]"`` specifies an array value with two strings and a boolean as its -items:: - - /* Create the JSON integer 42 */ - json_pack("i", 42); - - /* Create the JSON array ["foo", "bar", true] */ - json_pack("[ssb]", "foo", "bar", 1); - -Here's the full list of format specifiers. The type in parentheses -denotes the resulting JSON type, and the type in brackets (if any) -denotes the C type that is expected as the corresponding argument or -arguments. - -``s`` (string) [const char \*] - Convert a null terminated UTF-8 string to a JSON string. - -``s?`` (string) [const char \*] - Like ``s``, but if the argument is *NULL*, output a JSON null - value. - - .. versionadded:: 2.8 - -``s*`` (string) [const char \*] - Like ``s``, but if the argument is *NULL*, do not output any value. - This format can only be used inside an object or an array. If used - inside an object, the corresponding key is additionally suppressed - when the value is omitted. See below for an example. - - .. versionadded:: 2.11 - -``s#`` (string) [const char \*, int] - Convert a UTF-8 buffer of a given length to a JSON string. - - .. versionadded:: 2.5 - -``s%`` (string) [const char \*, size_t] - Like ``s#`` but the length argument is of type :type:`size_t`. - - .. versionadded:: 2.6 - -``+`` [const char \*] - Like ``s``, but concatenate to the previous string. Only valid - after ``s``, ``s#``, ``+`` or ``+#``. - - .. versionadded:: 2.5 - -``+#`` [const char \*, int] - Like ``s#``, but concatenate to the previous string. Only valid - after ``s``, ``s#``, ``+`` or ``+#``. - - .. versionadded:: 2.5 - -``+%`` (string) [const char \*, size_t] - Like ``+#`` but the length argument is of type :type:`size_t`. - - .. versionadded:: 2.6 - -``n`` (null) - Output a JSON null value. No argument is consumed. - -``b`` (boolean) [int] - Convert a C :type:`int` to JSON boolean value. Zero is converted - to ``false`` and non-zero to ``true``. - -``i`` (integer) [int] - Convert a C :type:`int` to JSON integer. - -``I`` (integer) [json_int_t] - Convert a C :type:`json_int_t` to JSON integer. - -``f`` (real) [double] - Convert a C :type:`double` to JSON real. - -``o`` (any value) [json_t \*] - Output any given JSON value as-is. If the value is added to an - array or object, the reference to the value passed to ``o`` is - stolen by the container. - -``O`` (any value) [json_t \*] - Like ``o``, but the argument's reference count is incremented. - This is useful if you pack into an array or object and want to - keep the reference for the JSON value consumed by ``O`` to - yourself. - -``o?``, ``O?`` (any value) [json_t \*] - Like ``o`` and ``O``, respectively, but if the argument is - *NULL*, output a JSON null value. - - .. versionadded:: 2.8 - -``o*``, ``O*`` (any value) [json_t \*] - Like ``o`` and ``O``, respectively, but if the argument is - *NULL*, do not output any value. This format can only be used - inside an object or an array. If used inside an object, the - corresponding key is additionally suppressed. See below for an - example. - - .. versionadded:: 2.11 - -``[fmt]`` (array) - Build an array with contents from the inner format string. ``fmt`` - may contain objects and arrays, i.e. recursive value building is - supported. - -``{fmt}`` (object) - Build an object with contents from the inner format string - ``fmt``. The first, third, etc. format specifier represent a key, - and must be a string (see ``s``, ``s#``, ``+`` and ``+#`` above), - as object keys are always strings. The second, fourth, etc. format - specifier represent a value. Any value may be an object or array, - i.e. recursive value building is supported. - -Whitespace, ``:`` and ``,`` are ignored. - -.. function:: json_t *json_pack(const char *fmt, ...) - - .. refcounting:: new - - Build a new JSON value according to the format string *fmt*. For - each format specifier (except for ``{}[]n``), one or more arguments - are consumed and used to build the corresponding value. Returns - *NULL* on error. - -.. function:: json_t *json_pack_ex(json_error_t *error, size_t flags, const char *fmt, ...) - json_t *json_vpack_ex(json_error_t *error, size_t flags, const char *fmt, va_list ap) - - .. refcounting:: new - - Like :func:`json_pack()`, but an in the case of an error, an error - message is written to *error*, if it's not *NULL*. The *flags* - parameter is currently unused and should be set to 0. - - As only the errors in format string (and out-of-memory errors) can - be caught by the packer, these two functions are most likely only - useful for debugging format strings. - -More examples:: - - /* Build an empty JSON object */ - json_pack("{}"); - - /* Build the JSON object {"foo": 42, "bar": 7} */ - json_pack("{sisi}", "foo", 42, "bar", 7); - - /* Like above, ':', ',' and whitespace are ignored */ - json_pack("{s:i, s:i}", "foo", 42, "bar", 7); - - /* Build the JSON array [[1, 2], {"cool": true}] */ - json_pack("[[i,i],{s:b}]", 1, 2, "cool", 1); - - /* Build a string from a non-null terminated buffer */ - char buffer[4] = {'t', 'e', 's', 't'}; - json_pack("s#", buffer, 4); - - /* Concatenate strings together to build the JSON string "foobarbaz" */ - json_pack("s++", "foo", "bar", "baz"); - - /* Create an empty object or array when optional members are missing */ - json_pack("{s:s*,s:o*,s:O*}", "foo", NULL, "bar", NULL, "baz", NULL); - json_pack("[s*,o*,O*]", NULL, NULL, NULL); - - -.. _apiref-unpack: - -Parsing and Validating Values -============================= - -This section describes functions that help to validate complex values -and extract, or *unpack*, data from them. Like :ref:`building values -`, this is also based on format strings. - -While a JSON value is unpacked, the type specified in the format -string is checked to match that of the JSON value. This is the -validation part of the process. In addition to this, the unpacking -functions can also check that all items of arrays and objects are -unpacked. This check be enabled with the format specifier ``!`` or by -using the flag ``JSON_STRICT``. See below for details. - -Here's the full list of format specifiers. The type in parentheses -denotes the JSON type, and the type in brackets (if any) denotes the C -type whose address should be passed. - -``s`` (string) [const char \*] - Convert a JSON string to a pointer to a null terminated UTF-8 - string. The resulting string is extracted by using - :func:`json_string_value()` internally, so it exists as long as - there are still references to the corresponding JSON string. - -``s%`` (string) [const char \*, size_t \*] - Convert a JSON string to a pointer to a null terminated UTF-8 - string and its length. - - .. versionadded:: 2.6 - -``n`` (null) - Expect a JSON null value. Nothing is extracted. - -``b`` (boolean) [int] - Convert a JSON boolean value to a C :type:`int`, so that ``true`` - is converted to 1 and ``false`` to 0. - -``i`` (integer) [int] - Convert a JSON integer to C :type:`int`. - -``I`` (integer) [json_int_t] - Convert a JSON integer to C :type:`json_int_t`. - -``f`` (real) [double] - Convert a JSON real to C :type:`double`. - -``F`` (integer or real) [double] - Convert a JSON number (integer or real) to C :type:`double`. - -``o`` (any value) [json_t \*] - Store a JSON value with no conversion to a :type:`json_t` pointer. - -``O`` (any value) [json_t \*] - Like ``o``, but the JSON value's reference count is incremented. - Storage pointers should be initialized NULL before using unpack. - The caller is responsible for releasing all references incremented - by unpack, even when an error occurs. - -``[fmt]`` (array) - Convert each item in the JSON array according to the inner format - string. ``fmt`` may contain objects and arrays, i.e. recursive - value extraction is supported. - -``{fmt}`` (object) - Convert each item in the JSON object according to the inner format - string ``fmt``. The first, third, etc. format specifier represent - a key, and must be ``s``. The corresponding argument to unpack - functions is read as the object key. The second fourth, etc. - format specifier represent a value and is written to the address - given as the corresponding argument. **Note** that every other - argument is read from and every other is written to. - - ``fmt`` may contain objects and arrays as values, i.e. recursive - value extraction is supported. - - .. versionadded:: 2.3 - Any ``s`` representing a key may be suffixed with a ``?`` to - make the key optional. If the key is not found, nothing is - extracted. See below for an example. - -``!`` - This special format specifier is used to enable the check that - all object and array items are accessed, on a per-value basis. It - must appear inside an array or object as the last format specifier - before the closing bracket or brace. To enable the check globally, - use the ``JSON_STRICT`` unpacking flag. - -``*`` - This special format specifier is the opposite of ``!``. If the - ``JSON_STRICT`` flag is used, ``*`` can be used to disable the - strict check on a per-value basis. It must appear inside an array - or object as the last format specifier before the closing bracket - or brace. - -Whitespace, ``:`` and ``,`` are ignored. - -.. function:: int json_unpack(json_t *root, const char *fmt, ...) - - Validate and unpack the JSON value *root* according to the format - string *fmt*. Returns 0 on success and -1 on failure. - -.. function:: int json_unpack_ex(json_t *root, json_error_t *error, size_t flags, const char *fmt, ...) - int json_vunpack_ex(json_t *root, json_error_t *error, size_t flags, const char *fmt, va_list ap) - - Validate and unpack the JSON value *root* according to the format - string *fmt*. If an error occurs and *error* is not *NULL*, write - error information to *error*. *flags* can be used to control the - behaviour of the unpacker, see below for the flags. Returns 0 on - success and -1 on failure. - -.. note:: - - The first argument of all unpack functions is ``json_t *root`` - instead of ``const json_t *root``, because the use of ``O`` format - specifier causes the reference count of ``root``, or some value - reachable from ``root``, to be increased. Furthermore, the ``o`` - format specifier may be used to extract a value as-is, which allows - modifying the structure or contents of a value reachable from - ``root``. - - If the ``O`` and ``o`` format specifiers are not used, it's - perfectly safe to cast a ``const json_t *`` variable to plain - ``json_t *`` when used with these functions. - -The following unpacking flags are available: - -``JSON_STRICT`` - Enable the extra validation step checking that all object and - array items are unpacked. This is equivalent to appending the - format specifier ``!`` to the end of every array and object in the - format string. - -``JSON_VALIDATE_ONLY`` - Don't extract any data, just validate the JSON value against the - given format string. Note that object keys must still be specified - after the format string. - -Examples:: - - /* root is the JSON integer 42 */ - int myint; - json_unpack(root, "i", &myint); - assert(myint == 42); - - /* root is the JSON object {"foo": "bar", "quux": true} */ - const char *str; - int boolean; - json_unpack(root, "{s:s, s:b}", "foo", &str, "quux", &boolean); - assert(strcmp(str, "bar") == 0 && boolean == 1); - - /* root is the JSON array [[1, 2], {"baz": null} */ - json_error_t error; - json_unpack_ex(root, &error, JSON_VALIDATE_ONLY, "[[i,i], {s:n}]", "baz"); - /* returns 0 for validation success, nothing is extracted */ - - /* root is the JSON array [1, 2, 3, 4, 5] */ - int myint1, myint2; - json_unpack(root, "[ii!]", &myint1, &myint2); - /* returns -1 for failed validation */ - - /* root is an empty JSON object */ - int myint = 0, myint2 = 0, myint3 = 0; - json_unpack(root, "{s?i, s?[ii]}", - "foo", &myint1, - "bar", &myint2, &myint3); - /* myint1, myint2 or myint3 is no touched as "foo" and "bar" don't exist */ - - -Equality -======== - -Testing for equality of two JSON values cannot, in general, be -achieved using the ``==`` operator. Equality in the terms of the -``==`` operator states that the two :type:`json_t` pointers point to -exactly the same JSON value. However, two JSON values can be equal not -only if they are exactly the same value, but also if they have equal -"contents": - -* Two integer or real values are equal if their contained numeric - values are equal. An integer value is never equal to a real value, - though. - -* Two strings are equal if their contained UTF-8 strings are equal, - byte by byte. Unicode comparison algorithms are not implemented. - -* Two arrays are equal if they have the same number of elements and - each element in the first array is equal to the corresponding - element in the second array. - -* Two objects are equal if they have exactly the same keys and the - value for each key in the first object is equal to the value of the - corresponding key in the second object. - -* Two true, false or null values have no "contents", so they are equal - if their types are equal. (Because these values are singletons, - their equality can actually be tested with ``==``.) - -.. function:: int json_equal(json_t *value1, json_t *value2) - - Returns 1 if *value1* and *value2* are equal, as defined above. - Returns 0 if they are unequal or one or both of the pointers are - *NULL*. - - -Copying -======= - -Because of reference counting, passing JSON values around doesn't -require copying them. But sometimes a fresh copy of a JSON value is -needed. For example, if you need to modify an array, but still want to -use the original afterwards, you should take a copy of it first. - -Jansson supports two kinds of copying: shallow and deep. There is a -difference between these methods only for arrays and objects. Shallow -copying only copies the first level value (array or object) and uses -the same child values in the copied value. Deep copying makes a fresh -copy of the child values, too. Moreover, all the child values are deep -copied in a recursive fashion. - -Copying objects preserves the insertion order of keys. - -.. function:: json_t *json_copy(json_t *value) - - .. refcounting:: new - - Returns a shallow copy of *value*, or *NULL* on error. - -.. function:: json_t *json_deep_copy(const json_t *value) - - .. refcounting:: new - - Returns a deep copy of *value*, or *NULL* on error. - - -.. _apiref-custom-memory-allocation: - -Custom Memory Allocation -======================== - -By default, Jansson uses :func:`malloc()` and :func:`free()` for -memory allocation. These functions can be overridden if custom -behavior is needed. - -.. type:: json_malloc_t - - A typedef for a function pointer with :func:`malloc()`'s - signature:: - - typedef void *(*json_malloc_t)(size_t); - -.. type:: json_free_t - - A typedef for a function pointer with :func:`free()`'s - signature:: - - typedef void (*json_free_t)(void *); - -.. function:: void json_set_alloc_funcs(json_malloc_t malloc_fn, json_free_t free_fn) - - Use *malloc_fn* instead of :func:`malloc()` and *free_fn* instead - of :func:`free()`. This function has to be called before any other - Jansson's API functions to ensure that all memory operations use - the same functions. - -.. function:: void json_get_alloc_funcs(json_malloc_t *malloc_fn, json_free_t *free_fn) - - Fetch the current malloc_fn and free_fn used. Either parameter - may be NULL. - - .. versionadded:: 2.8 - -**Examples:** - -Circumvent problems with different CRT heaps on Windows by using -application's :func:`malloc()` and :func:`free()`:: - - json_set_alloc_funcs(malloc, free); - -Use the `Boehm's conservative garbage collector`_ for memory -operations:: - - json_set_alloc_funcs(GC_malloc, GC_free); - -.. _Boehm's conservative garbage collector: http://www.hboehm.info/gc/ - -Allow storing sensitive data (e.g. passwords or encryption keys) in -JSON structures by zeroing all memory when freed:: - - static void *secure_malloc(size_t size) - { - /* Store the memory area size in the beginning of the block */ - void *ptr = malloc(size + 8); - *((size_t *)ptr) = size; - return ptr + 8; - } - - static void secure_free(void *ptr) - { - size_t size; - - ptr -= 8; - size = *((size_t *)ptr); - - guaranteed_memset(ptr, 0, size + 8); - free(ptr); - } - - int main() - { - json_set_alloc_funcs(secure_malloc, secure_free); - /* ... */ - } - -For more information about the issues of storing sensitive data in -memory, see -http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/protect-secrets.html. -The page also explains the :func:`guaranteed_memset()` function used -in the example and gives a sample implementation for it. diff --git a/3party/jansson/doc/changes.rst b/3party/jansson/doc/changes.rst deleted file mode 100644 index ea56843774..0000000000 --- a/3party/jansson/doc/changes.rst +++ /dev/null @@ -1,5 +0,0 @@ -****************** -Changes in Jansson -****************** - -.. include:: ../CHANGES diff --git a/3party/jansson/doc/conf.py b/3party/jansson/doc/conf.py deleted file mode 100644 index 6b7f4c33a7..0000000000 --- a/3party/jansson/doc/conf.py +++ /dev/null @@ -1,217 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Jansson documentation build configuration file, created by -# sphinx-quickstart on Sun Sep 5 21:47:20 2010. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys, os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('ext')) - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['refcounting'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Jansson' -copyright = u'2009-2016, Petri Lehtinen' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '2.12' -# The full version, including alpha/beta/rc tags. -release = version - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all documents. -default_role = 'c:func' -primary_domain = 'c' - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -#html_theme = 'default' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -#html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'Janssondoc' - - -# -- Options for LaTeX output -------------------------------------------------- - -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'Jansson.tex', u'Jansson Documentation', - u'Petri Lehtinen', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'jansson', u'Jansson Documentation', - [u'Petri Lehtinen'], 1) -] diff --git a/3party/jansson/doc/conformance.rst b/3party/jansson/doc/conformance.rst deleted file mode 100644 index ea41d5cf8a..0000000000 --- a/3party/jansson/doc/conformance.rst +++ /dev/null @@ -1,120 +0,0 @@ -.. _rfc-conformance: - -*************** -RFC Conformance -*************** - -JSON is specified in :rfc:`4627`, *"The application/json Media Type -for JavaScript Object Notation (JSON)"*. - -Character Encoding -================== - -Jansson only supports UTF-8 encoded JSON texts. It does not support or -auto-detect any of the other encodings mentioned in the RFC, namely -UTF-16LE, UTF-16BE, UTF-32LE or UTF-32BE. Pure ASCII is supported, as -it's a subset of UTF-8. - -Strings -======= - -JSON strings are mapped to C-style null-terminated character arrays, -and UTF-8 encoding is used internally. - -All Unicode codepoints U+0000 through U+10FFFF are allowed in string -values. However, U+0000 is not allowed in object keys because of API -restrictions. - -Unicode normalization or any other transformation is never performed -on any strings (string values or object keys). When checking for -equivalence of strings or object keys, the comparison is performed -byte by byte between the original UTF-8 representations of the -strings. - -Numbers -======= - -.. _real-vs-integer: - -Real vs. Integer ----------------- - -JSON makes no distinction between real and integer numbers; Jansson -does. Real numbers are mapped to the ``double`` type and integers to -the ``json_int_t`` type, which is a typedef of ``long long`` or -``long``, depending on whether ``long long`` is supported by your -compiler or not. - -A JSON number is considered to be a real number if its lexical -representation includes one of ``e``, ``E``, or ``.``; regardless if -its actual numeric value is a true integer (e.g., all of ``1E6``, -``3.0``, ``400E-2``, and ``3.14E3`` are mathematical integers, but -will be treated as real values). With the ``JSON_DECODE_INT_AS_REAL`` -decoder flag set all numbers are interpreted as real. - -All other JSON numbers are considered integers. - -When encoding to JSON, real values are always represented -with a fractional part; e.g., the ``double`` value 3.0 will be -represented in JSON as ``3.0``, not ``3``. - -Overflow, Underflow & Precision -------------------------------- - -Real numbers whose absolute values are too small to be represented in -a C ``double`` will be silently estimated with 0.0. Thus, depending on -platform, JSON numbers very close to zero such as 1E-999 may result in -0.0. - -Real numbers whose absolute values are too large to be represented in -a C ``double`` will result in an overflow error (a JSON decoding -error). Thus, depending on platform, JSON numbers like 1E+999 or --1E+999 may result in a parsing error. - -Likewise, integer numbers whose absolute values are too large to be -represented in the ``json_int_t`` type (see above) will result in an -overflow error (a JSON decoding error). Thus, depending on platform, -JSON numbers like 1000000000000000 may result in parsing error. - -Parsing JSON real numbers may result in a loss of precision. As long -as overflow does not occur (i.e. a total loss of precision), the -rounded approximate value is silently used. Thus the JSON number -1.000000000000000005 may, depending on platform, result in the -``double`` value 1.0. - -Signed zeros ------------- - -JSON makes no statement about what a number means; however Javascript -(ECMAscript) does state that +0.0 and -0.0 must be treated as being -distinct values, i.e. -0.0 |not-equal| 0.0. Jansson relies on the -underlying floating point library in the C environment in which it is -compiled. Therefore it is platform-dependent whether 0.0 and -0.0 will -be distinct values. Most platforms that use the IEEE 754 -floating-point standard will support signed zeros. - -Note that this only applies to floating-point; neither JSON, C, or -IEEE support the concept of signed integer zeros. - -.. |not-equal| unicode:: U+2260 - -Types ------ - -No support is provided in Jansson for any C numeric types other than -``json_int_t`` and ``double``. This excludes things such as unsigned -types, ``long double``, etc. Obviously, shorter types like ``short``, -``int``, ``long`` (if ``json_int_t`` is ``long long``) and ``float`` -are implicitly handled via the ordinary C type coercion rules (subject -to overflow semantics). Also, no support or hooks are provided for any -supplemental "bignum" type add-on packages. - -Depth of nested values ----------------------- - -To avoid stack exhaustion, Jansson currently limits the nesting depth -for arrays and objects to a certain value (default: 2048), defined as -a macro ``JSON_PARSER_MAX_DEPTH`` within ``jansson_config.h``. - -The limit is allowed to be set by the RFC; there is no recommended value -or required minimum depth to be supported. diff --git a/3party/jansson/doc/ext/refcounting.py b/3party/jansson/doc/ext/refcounting.py deleted file mode 100644 index bba2684999..0000000000 --- a/3party/jansson/doc/ext/refcounting.py +++ /dev/null @@ -1,60 +0,0 @@ -""" - refcounting - ~~~~~~~~~~~ - - Reference count annotations for C API functions. Has the same - result as the sphinx.ext.refcounting extension but works for all - functions regardless of the signature, and the reference counting - information is written inline with the documentation instead of a - separate file. - - Adds a new directive "refcounting". The directive has no content - and one required positional parameter:: "new" or "borrow". - - Example: - - .. cfunction:: json_t *json_object(void) - - .. refcounting:: new - - - - :copyright: Copyright (c) 2009-2016 Petri Lehtinen - :license: MIT, see LICENSE for details. -""" - -from docutils import nodes - -class refcounting(nodes.emphasis): pass - -def visit(self, node): - self.visit_emphasis(node) - -def depart(self, node): - self.depart_emphasis(node) - -def html_visit(self, node): - self.body.append(self.starttag(node, 'em', '', CLASS='refcount')) - -def html_depart(self, node): - self.body.append('') - - -def refcounting_directive(name, arguments, options, content, lineno, - content_offset, block_text, state, state_machine): - if arguments[0] == 'borrow': - text = 'Return value: Borrowed reference.' - elif arguments[0] == 'new': - text = 'Return value: New reference.' - else: - raise Error('Valid arguments: new, borrow') - - return [refcounting(text, text)] - -def setup(app): - app.add_node(refcounting, - html=(html_visit, html_depart), - latex=(visit, depart), - text=(visit, depart), - man=(visit, depart)) - app.add_directive('refcounting', refcounting_directive, 0, (1, 0, 0)) diff --git a/3party/jansson/doc/gettingstarted.rst b/3party/jansson/doc/gettingstarted.rst deleted file mode 100644 index 64bec43ef0..0000000000 --- a/3party/jansson/doc/gettingstarted.rst +++ /dev/null @@ -1,243 +0,0 @@ -*************** -Getting Started -*************** - -.. highlight:: c - -Compiling and Installing Jansson -================================ - -The Jansson source is available at -http://www.digip.org/jansson/releases/. - -Unix-like systems (including MinGW) ------------------------------------ - -Unpack the source tarball and change to the source directory: - -.. parsed-literal:: - - bunzip2 -c jansson-|release|.tar.bz2 | tar xf - - cd jansson-|release| - -The source uses GNU Autotools (autoconf_, automake_, libtool_), so -compiling and installing is extremely simple:: - - ./configure - make - make check - make install - -To change the destination directory (``/usr/local`` by default), use -the ``--prefix=DIR`` argument to ``./configure``. See ``./configure ---help`` for the list of all possible configuration options. - -The command ``make check`` runs the test suite distributed with -Jansson. This step is not strictly necessary, but it may find possible -problems that Jansson has on your platform. If any problems are found, -please report them. - -If you obtained the source from a Git repository (or any other source -control system), there's no ``./configure`` script as it's not kept in -version control. To create the script, the build system needs to be -bootstrapped. There are many ways to do this, but the easiest one is -to use ``autoreconf``:: - - autoreconf -fi - -This command creates the ``./configure`` script, which can then be -used as described above. - -.. _autoconf: http://www.gnu.org/software/autoconf/ -.. _automake: http://www.gnu.org/software/automake/ -.. _libtool: http://www.gnu.org/software/libtool/ - - -.. _build-cmake: - -CMake (various platforms, including Windows) --------------------------------------------- - -Jansson can be built using CMake_. Create a build directory for an -out-of-tree build, change to that directory, and run ``cmake`` (or ``ccmake``, -``cmake-gui``, or similar) to configure the project. - -See the examples below for more detailed information. - -.. note:: In the below examples ``..`` is used as an argument for ``cmake``. - This is simply the path to the jansson project root directory. - In the example it is assumed you've created a sub-directory ``build`` - and are using that. You could use any path you want. - -.. _build-cmake-unix: - -Unix (Make files) -^^^^^^^^^^^^^^^^^ -Generating make files on unix: - -.. parsed-literal:: - - bunzip2 -c jansson-|release|.tar.bz2 | tar xf - - cd jansson-|release| - - mkdir build - cd build - cmake .. # or ccmake .. for a GUI. - -Then to build:: - - make - make check - make install - -Windows (Visual Studio) -^^^^^^^^^^^^^^^^^^^^^^^ -Creating Visual Studio project files from the command line: - -.. parsed-literal:: - - - cd jansson-|release| - - md build - cd build - cmake -G "Visual Studio 15 2017" .. - -.. note:: - - You should replace the name of the generator (``-G`` flag) matching - the Visual Studio version installed on your system. Currently, the - following versions are supported: - - - ``Visual Studio 9 2008`` - - ``Visual Studio 10 2010`` - - ``Visual Studio 11 2012`` - - ``Visual Studio 12 2013`` - - ``Visual Studio 14 2015`` - - ``Visual Studio 15 2017`` - - Any later version should also work. - -You will now have a *Visual Studio Solution* in your build directory. -To run the unit tests build the ``RUN_TESTS`` project. - -If you prefer a GUI the ``cmake`` line in the above example can -be replaced with:: - - cmake-gui .. - -For command line help (including a list of available generators) -for CMake_ simply run:: - - cmake - -To list available CMake_ settings (and what they are currently set to) -for the project, run:: - - cmake -LH .. - -Mac OSX (Xcode) -^^^^^^^^^^^^^^^ -If you prefer using Xcode instead of make files on OSX, -do the following. (Use the same steps as -for :ref:`Unix `):: - - ... - cmake -G "Xcode" .. - -Additional CMake settings -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Shared library -"""""""""""""" -By default the CMake_ project will generate build files for building the -static library. To build the shared version use:: - - ... - cmake -DJANSSON_BUILD_SHARED_LIBS=1 .. - -Changing install directory (same as autoconf --prefix) -"""""""""""""""""""""""""""""""""""""""""""""""""""""" -Just as with the autoconf_ project you can change the destination directory -for ``make install``. The equivalent for autoconfs ``./configure --prefix`` -in CMake_ is:: - - ... - cmake -DCMAKE_INSTALL_PREFIX:PATH=/some/other/path .. - make install - -.. _CMake: http://www.cmake.org - - -Android -------- - -Jansson can be built for Android platforms. Android.mk is in the -source root directory. The configuration header file is located in the -``android`` directory in the source distribution. - - -Other Systems -------------- - -On non Unix-like systems, you may be unable to run the ``./configure`` -script. In this case, follow these steps. All the files mentioned can -be found in the ``src/`` directory. - -1. Create ``jansson_config.h`` (which has some platform-specific - parameters that are normally filled in by the ``./configure`` - script). Edit ``jansson_config.h.in``, replacing all ``@variable@`` - placeholders, and rename the file to ``jansson_config.h``. - -2. Make ``jansson.h`` and ``jansson_config.h`` available to the - compiler, so that they can be found when compiling programs that - use Jansson. - -3. Compile all the ``.c`` files (in the ``src/`` directory) into a - library file. Make the library available to the compiler, as in - step 2. - - -Building the Documentation --------------------------- - -(This subsection describes how to build the HTML documentation you are -currently reading, so it can be safely skipped.) - -Documentation is in the ``doc/`` subdirectory. It's written in -reStructuredText_ with Sphinx_ annotations. To generate the HTML -documentation, invoke:: - - make html - -and point your browser to ``doc/_build/html/index.html``. Sphinx_ 1.0 -or newer is required to generate the documentation. - -.. _reStructuredText: http://docutils.sourceforge.net/rst.html -.. _Sphinx: http://sphinx.pocoo.org/ - - -Compiling Programs that Use Jansson -=================================== - -Jansson involves one C header file, :file:`jansson.h`, so it's enough -to put the line - -:: - - #include - -in the beginning of every source file that uses Jansson. - -There's also just one library to link with, ``libjansson``. Compile and -link the program as follows:: - - cc -o prog prog.c -ljansson - -Starting from version 1.2, there's also support for pkg-config_: - -.. code-block:: shell - - cc -o prog prog.c `pkg-config --cflags --libs jansson` - -.. _pkg-config: http://pkg-config.freedesktop.org/ diff --git a/3party/jansson/doc/github_commits.c b/3party/jansson/doc/github_commits.c deleted file mode 100644 index a9a84d8fea..0000000000 --- a/3party/jansson/doc/github_commits.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include - -#include -#include - -#define BUFFER_SIZE (256 * 1024) /* 256 KB */ - -#define URL_FORMAT "https://api.github.com/repos/%s/%s/commits" -#define URL_SIZE 256 - -/* Return the offset of the first newline in text or the length of - text if there's no newline */ -static int newline_offset(const char *text) -{ - const char *newline = strchr(text, '\n'); - if(!newline) - return strlen(text); - else - return (int)(newline - text); -} - -struct write_result -{ - char *data; - int pos; -}; - -static size_t write_response(void *ptr, size_t size, size_t nmemb, void *stream) -{ - struct write_result *result = (struct write_result *)stream; - - if(result->pos + size * nmemb >= BUFFER_SIZE - 1) - { - fprintf(stderr, "error: too small buffer\n"); - return 0; - } - - memcpy(result->data + result->pos, ptr, size * nmemb); - result->pos += size * nmemb; - - return size * nmemb; -} - -static char *request(const char *url) -{ - CURL *curl = NULL; - CURLcode status; - struct curl_slist *headers = NULL; - char *data = NULL; - long code; - - curl_global_init(CURL_GLOBAL_ALL); - curl = curl_easy_init(); - if(!curl) - goto error; - - data = malloc(BUFFER_SIZE); - if(!data) - goto error; - - struct write_result write_result = { - .data = data, - .pos = 0 - }; - - curl_easy_setopt(curl, CURLOPT_URL, url); - - /* GitHub commits API v3 requires a User-Agent header */ - headers = curl_slist_append(headers, "User-Agent: Jansson-Tutorial"); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); - - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_response); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &write_result); - - status = curl_easy_perform(curl); - if(status != 0) - { - fprintf(stderr, "error: unable to request data from %s:\n", url); - fprintf(stderr, "%s\n", curl_easy_strerror(status)); - goto error; - } - - curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code); - if(code != 200) - { - fprintf(stderr, "error: server responded with code %ld\n", code); - goto error; - } - - curl_easy_cleanup(curl); - curl_slist_free_all(headers); - curl_global_cleanup(); - - /* zero-terminate the result */ - data[write_result.pos] = '\0'; - - return data; - -error: - if(data) - free(data); - if(curl) - curl_easy_cleanup(curl); - if(headers) - curl_slist_free_all(headers); - curl_global_cleanup(); - return NULL; -} - -int main(int argc, char *argv[]) -{ - size_t i; - char *text; - char url[URL_SIZE]; - - json_t *root; - json_error_t error; - - if(argc != 3) - { - fprintf(stderr, "usage: %s USER REPOSITORY\n\n", argv[0]); - fprintf(stderr, "List commits at USER's REPOSITORY.\n\n"); - return 2; - } - - snprintf(url, URL_SIZE, URL_FORMAT, argv[1], argv[2]); - - text = request(url); - if(!text) - return 1; - - root = json_loads(text, 0, &error); - free(text); - - if(!root) - { - fprintf(stderr, "error: on line %d: %s\n", error.line, error.text); - return 1; - } - - if(!json_is_array(root)) - { - fprintf(stderr, "error: root is not an array\n"); - json_decref(root); - return 1; - } - - for(i = 0; i < json_array_size(root); i++) - { - json_t *data, *sha, *commit, *message; - const char *message_text; - - data = json_array_get(root, i); - if(!json_is_object(data)) - { - fprintf(stderr, "error: commit data %d is not an object\n", (int)(i + 1)); - json_decref(root); - return 1; - } - - sha = json_object_get(data, "sha"); - if(!json_is_string(sha)) - { - fprintf(stderr, "error: commit %d: sha is not a string\n", (int)(i + 1)); - return 1; - } - - commit = json_object_get(data, "commit"); - if(!json_is_object(commit)) - { - fprintf(stderr, "error: commit %d: commit is not an object\n", (int)(i + 1)); - json_decref(root); - return 1; - } - - message = json_object_get(commit, "message"); - if(!json_is_string(message)) - { - fprintf(stderr, "error: commit %d: message is not a string\n", (int)(i + 1)); - json_decref(root); - return 1; - } - - message_text = json_string_value(message); - printf("%.8s %.*s\n", - json_string_value(sha), - newline_offset(message_text), - message_text); - } - - json_decref(root); - return 0; -} diff --git a/3party/jansson/doc/index.rst b/3party/jansson/doc/index.rst deleted file mode 100644 index 1f3f8ef70a..0000000000 --- a/3party/jansson/doc/index.rst +++ /dev/null @@ -1,53 +0,0 @@ -Jansson Documentation -===================== - -This is the documentation for Jansson_ |release|, last updated |today|. - -Introduction ------------- - -Jansson_ is a C library for encoding, decoding and manipulating JSON -data. Its main features and design principles are: - -- Simple and intuitive API and data model - -- Comprehensive documentation - -- No dependencies on other libraries - -- Full Unicode support (UTF-8) - -- Extensive test suite - -Jansson is licensed under the `MIT license`_; see LICENSE in the -source distribution for details. - -Jansson is used in production and its API is stable. It works on -numerous platforms, including numerous Unix like systems and Windows. -It's suitable for use on any system, including desktop, server, and -small embedded systems. - - -.. _`MIT license`: http://www.opensource.org/licenses/mit-license.php -.. _Jansson: http://www.digip.org/jansson/ - -Contents --------- - -.. toctree:: - :maxdepth: 2 - - gettingstarted - upgrading - tutorial - conformance - portability - apiref - changes - - -Indices and Tables -================== - -* :ref:`genindex` -* :ref:`search` diff --git a/3party/jansson/doc/portability.rst b/3party/jansson/doc/portability.rst deleted file mode 100644 index f8d81cde52..0000000000 --- a/3party/jansson/doc/portability.rst +++ /dev/null @@ -1,85 +0,0 @@ -*********** -Portability -*********** - -.. _portability-thread-safety: - -Thread safety -------------- - -Jansson as a library is thread safe and has no mutable global state. -The only exceptions are the hash function seed and memory allocation -functions, see below. - -There's no locking performed inside Jansson's code. **Read-only** -access to JSON values shared by multiple threads is safe, but -**mutating** a JSON value that's shared by multiple threads is not. A -multithreaded program must perform its own locking if JSON values -shared by multiple threads are mutated. - -However, **reference count manipulation** (:func:`json_incref()`, -:func:`json_decref()`) is usually thread-safe, and can be performed on -JSON values that are shared among threads. The thread-safety of -reference counting can be checked with the -``JANSSON_THREAD_SAFE_REFCOUNT`` preprocessor constant. Thread-safe -reference count manipulation is achieved using compiler built-in -atomic functions, which are available in most modern compilers. - -If compiler support is not available (``JANSSON_THREAD_SAFE_REFCOUNT`` -is not defined), it may be very difficult to ensure thread safety of -reference counting. It's possible to have a reference to a value -that's also stored inside an array or object in another thread. -Modifying the container (adding or removing values) may trigger -concurrent access to such values, as containers manage the reference -count of their contained values. - - -Hash function seed -================== - -To prevent an attacker from intentionally causing large JSON objects -with specially crafted keys to perform very slow, the hash function -used by Jansson is randomized using a seed value. The seed is -automatically generated on the first explicit or implicit call to -:func:`json_object()`, if :func:`json_object_seed()` has not been -called beforehand. - -The seed is generated by using operating system's entropy sources if -they are available (``/dev/urandom``, ``CryptGenRandom()``). The -initialization is done in as thread safe manner as possible, by using -architecture specific lockless operations if provided by the platform -or the compiler. - -If you're using threads, it's recommended to autoseed the hashtable -explicitly before spawning any threads by calling -``json_object_seed(0)`` , especially if you're unsure whether the -initialization is thread safe on your platform. - - -Memory allocation functions -=========================== - -Memory allocation functions should be set at most once, and only on -program startup. See :ref:`apiref-custom-memory-allocation`. - - -Locale ------- - -Jansson works fine under any locale. - -However, if the host program is multithreaded and uses ``setlocale()`` -to switch the locale in one thread while Jansson is currently encoding -or decoding JSON data in another thread, the result may be wrong or -the program may even crash. - -Jansson uses locale specific functions for certain string conversions -in the encoder and decoder, and then converts the locale specific -values to/from the JSON representation. This fails if the locale -changes between the string conversion and the locale-to-JSON -conversion. This can only happen in multithreaded programs that use -``setlocale()``, because ``setlocale()`` switches the locale for all -running threads, not only the thread that calls ``setlocale()``. - -If your program uses ``setlocale()`` as described above, consider -using the thread-safe ``uselocale()`` instead. diff --git a/3party/jansson/doc/tutorial.rst b/3party/jansson/doc/tutorial.rst deleted file mode 100644 index 56861c2de5..0000000000 --- a/3party/jansson/doc/tutorial.rst +++ /dev/null @@ -1,288 +0,0 @@ -.. _tutorial: - -******** -Tutorial -******** - -.. highlight:: c - -In this tutorial, we create a program that fetches the latest commits -of a repository in GitHub_ over the web. `GitHub API`_ uses JSON, so -the result can be parsed using Jansson. - -To stick to the scope of this tutorial, we will only cover the -parts of the program related to handling JSON data. For the best user -experience, the full source code is available: -:download:`github_commits.c`. To compile it (on Unix-like systems with -gcc), use the following command:: - - gcc -o github_commits github_commits.c -ljansson -lcurl - -libcurl_ is used to communicate over the web, so it is required to -compile the program. - -The command line syntax is:: - - github_commits USER REPOSITORY - -``USER`` is a GitHub user ID and ``REPOSITORY`` is the repository -name. Please note that the GitHub API is rate limited, so if you run -the program too many times within a short period of time, the sever -starts to respond with an error. - -.. _GitHub: https://github.com/ -.. _GitHub API: http://developer.github.com/ -.. _libcurl: http://curl.haxx.se/ - - -.. _tutorial-github-commits-api: - -The GitHub Repo Commits API -=========================== - -The `GitHub Repo Commits API`_ is used by sending HTTP requests to -URLs like ``https://api.github.com/repos/USER/REPOSITORY/commits``, -where ``USER`` and ``REPOSITORY`` are the GitHub user ID and the name -of the repository whose commits are to be listed, respectively. - -GitHub responds with a JSON array of the following form: - -.. code-block:: none - - [ - { - "sha": "", - "commit": { - "message": "", - - }, - - }, - { - "sha": "", - "commit": { - "message": "", - - }, - - }, - - ] - -In our program, the HTTP request is sent using the following -function:: - - static char *request(const char *url); - -It takes the URL as a parameter, preforms a HTTP GET request, and -returns a newly allocated string that contains the response body. If -the request fails, an error message is printed to stderr and the -return value is *NULL*. For full details, refer to :download:`the code -`, as the actual implementation is not important -here. - -.. _GitHub Repo Commits API: http://developer.github.com/v3/repos/commits/ - -.. _tutorial-the-program: - -The Program -=========== - -First the includes:: - - #include - #include - -Like all the programs using Jansson, we need to include -:file:`jansson.h`. - -The following definitions are used to build the GitHub API request -URL:: - - #define URL_FORMAT "https://api.github.com/repos/%s/%s/commits" - #define URL_SIZE 256 - -The following function is used when formatting the result to find the -first newline in the commit message:: - - /* Return the offset of the first newline in text or the length of - text if there's no newline */ - static int newline_offset(const char *text) - { - const char *newline = strchr(text, '\n'); - if(!newline) - return strlen(text); - else - return (int)(newline - text); - } - -The main function follows. In the beginning, we first declare a bunch -of variables and check the command line parameters:: - - int main(int argc, char *argv[]) - { - size_t i; - char *text; - char url[URL_SIZE]; - - json_t *root; - json_error_t error; - - if(argc != 3) - { - fprintf(stderr, "usage: %s USER REPOSITORY\n\n", argv[0]); - fprintf(stderr, "List commits at USER's REPOSITORY.\n\n"); - return 2; - } - -Then we build the request URL using the user and repository names -given as command line parameters:: - - snprintf(url, URL_SIZE, URL_FORMAT, argv[1], argv[2]); - -This uses the ``URL_SIZE`` and ``URL_FORMAT`` constants defined above. -Now we're ready to actually request the JSON data over the web:: - - text = request(url); - if(!text) - return 1; - -If an error occurs, our function ``request`` prints the error and -returns *NULL*, so it's enough to just return 1 from the main -function. - -Next we'll call :func:`json_loads()` to decode the JSON text we got -as a response:: - - root = json_loads(text, 0, &error); - free(text); - - if(!root) - { - fprintf(stderr, "error: on line %d: %s\n", error.line, error.text); - return 1; - } - -We don't need the JSON text anymore, so we can free the ``text`` -variable right after decoding it. If :func:`json_loads()` fails, it -returns *NULL* and sets error information to the :type:`json_error_t` -structure given as the second parameter. In this case, our program -prints the error information out and returns 1 from the main function. - -Now we're ready to extract the data out of the decoded JSON response. -The structure of the response JSON was explained in section -:ref:`tutorial-github-commits-api`. - -We check that the returned value really is an array:: - - if(!json_is_array(root)) - { - fprintf(stderr, "error: root is not an array\n"); - json_decref(root); - return 1; - } - -Then we proceed to loop over all the commits in the array:: - - for(i = 0; i < json_array_size(root); i++) - { - json_t *data, *sha, *commit, *message; - const char *message_text; - - data = json_array_get(root, i); - if(!json_is_object(data)) - { - fprintf(stderr, "error: commit data %d is not an object\n", i + 1); - json_decref(root); - return 1; - } - ... - -The function :func:`json_array_size()` returns the size of a JSON -array. First, we again declare some variables and then extract the -i'th element of the ``root`` array using :func:`json_array_get()`. -We also check that the resulting value is a JSON object. - -Next we'll extract the commit ID (a hexadecimal SHA-1 sum), -intermediate commit info object, and the commit message from that -object. We also do proper type checks:: - - sha = json_object_get(data, "sha"); - if(!json_is_string(sha)) - { - fprintf(stderr, "error: commit %d: sha is not a string\n", i + 1); - json_decref(root); - return 1; - } - - commit = json_object_get(data, "commit"); - if(!json_is_object(commit)) - { - fprintf(stderr, "error: commit %d: commit is not an object\n", i + 1); - json_decref(root); - return 1; - } - - message = json_object_get(commit, "message"); - if(!json_is_string(message)) - { - fprintf(stderr, "error: commit %d: message is not a string\n", i + 1); - json_decref(root); - return 1; - } - ... - -And finally, we'll print the first 8 characters of the commit ID and -the first line of the commit message. A C-style string is extracted -from a JSON string using :func:`json_string_value()`:: - - message_text = json_string_value(message); - printf("%.8s %.*s\n", - json_string_value(sha), - newline_offset(message_text), - message_text); - } - -After sending the HTTP request, we decoded the JSON text using -:func:`json_loads()`, remember? It returns a *new reference* to the -JSON value it decodes. When we're finished with the value, we'll need -to decrease the reference count using :func:`json_decref()`. This way -Jansson can release the resources:: - - json_decref(root); - return 0; - -For a detailed explanation of reference counting in Jansson, see -:ref:`apiref-reference-count` in :ref:`apiref`. - -The program's ready, let's test it and view the latest commits in -Jansson's repository: - -.. code-block:: shell - - $ ./github_commits akheron jansson - 1581f26a Merge branch '2.3' - aabfd493 load: Change buffer_pos to be a size_t - bd72efbd load: Avoid unexpected behaviour in macro expansion - e8fd3e30 Document and tweak json_load_callback() - 873eddaf Merge pull request #60 from rogerz/contrib - bd2c0c73 Ignore the binary test_load_callback - 17a51a4b Merge branch '2.3' - 09c39adc Add json_load_callback to the list of exported symbols - cbb80baf Merge pull request #57 from rogerz/contrib - 040bd7b0 Add json_load_callback() - 2637faa4 Make test stripping locale independent - <...> - - -Conclusion -========== - -In this tutorial, we implemented a program that fetches the latest -commits of a GitHub repository using the GitHub Repo Commits API. -Jansson was used to decode the JSON response and to extract the commit -data. - -This tutorial only covered a small part of Jansson. For example, we -did not create or manipulate JSON values at all. Proceed to -:ref:`apiref` to explore all features of Jansson. diff --git a/3party/jansson/doc/upgrading.rst b/3party/jansson/doc/upgrading.rst deleted file mode 100644 index 9b4904610e..0000000000 --- a/3party/jansson/doc/upgrading.rst +++ /dev/null @@ -1,76 +0,0 @@ -.. highlight:: c - -****************** -Upgrading from 1.x -****************** - -This chapter lists the backwards incompatible changes introduced in -Jansson 2.0, and the steps that are needed for upgrading your code. - -**The incompatibilities are not dramatic.** The biggest change is that -all decoding functions now require and extra parameter. Most programs -can be modified to work with 2.0 by adding a ``0`` as the second -parameter to all calls of :func:`json_loads()`, :func:`json_loadf()` -and :func:`json_load_file()`. - - -Compatibility -============= - -Jansson 2.0 is backwards incompatible with the Jansson 1.x releases. -It is ABI incompatible, i.e. all programs dynamically linking to the -Jansson library need to be recompiled. It's also API incompatible, -i.e. the source code of programs using Jansson 1.x may need -modifications to make them compile against Jansson 2.0. - -All the 2.x releases are guaranteed to be backwards compatible for -both ABI and API, so no recompilation or source changes are needed -when upgrading from 2.x to 2.y. - - -List of Incompatible Changes -============================ - -**Decoding flags** - For future needs, a ``flags`` parameter was added as the second - parameter to all decoding functions, i.e. :func:`json_loads()`, - :func:`json_loadf()` and :func:`json_load_file()`. All calls to - these functions need to be changed by adding a ``0`` as the second - argument. For example:: - - /* old code */ - json_loads(input, &error); - - /* new code */ - json_loads(input, 0, &error); - - -**Underlying type of JSON integers** - The underlying C type of JSON integers has been changed from - :type:`int` to the widest available signed integer type, i.e. - :type:`long long` or :type:`long`, depending on whether - :type:`long long` is supported on your system or not. This makes - the whole 64-bit integer range available on most modern systems. - - ``jansson.h`` has a typedef :type:`json_int_t` to the underlying - integer type. :type:`int` should still be used in most cases when - dealing with smallish JSON integers, as the compiler handles - implicit type coercion. Only when the full 64-bit range is needed, - :type:`json_int_t` should be explicitly used. - - -**Maximum encoder indentation depth** - The maximum argument of the ``JSON_INDENT()`` macro has been - changed from 255 to 31, to free up bits from the ``flags`` - parameter of :func:`json_dumps()`, :func:`json_dumpf()` and - :func:`json_dump_file()`. If your code uses a bigger indentation - than 31, it needs to be changed. - - -**Unsigned integers in API functions** - Version 2.0 unifies unsigned integer usage in the API. All uses of - :type:`unsigned int` and :type:`unsigned long` have been replaced - with :type:`size_t`. This includes flags, container sizes, etc. - This should not require source code changes, as both - :type:`unsigned int` and :type:`unsigned long` are usually - compatible with :type:`size_t`. diff --git a/3party/jansson/examples/README.rst b/3party/jansson/examples/README.rst deleted file mode 100644 index a7c5274dbc..0000000000 --- a/3party/jansson/examples/README.rst +++ /dev/null @@ -1,4 +0,0 @@ -Jansson examples -================ - -This directory contains simple example programs that use Jansson. diff --git a/3party/jansson/examples/simple_parse.c b/3party/jansson/examples/simple_parse.c deleted file mode 100644 index 044337b856..0000000000 --- a/3party/jansson/examples/simple_parse.c +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Simple example of parsing and printing JSON using jansson. - * - * SYNOPSIS: - * $ examples/simple_parse - * Type some JSON > [true, false, null, 1, 0.0, -0.0, "", {"name": "barney"}] - * JSON Array of 8 elements: - * JSON True - * JSON False - * JSON Null - * JSON Integer: "1" - * JSON Real: 0.000000 - * JSON Real: -0.000000 - * JSON String: "" - * JSON Object of 1 pair: - * JSON Key: "name" - * JSON String: "barney" - * - * Copyright (c) 2014 Robert Poor - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include -#include - -/* forward refs */ -void print_json(json_t *root); -void print_json_aux(json_t *element, int indent); -void print_json_indent(int indent); -const char *json_plural(int count); -void print_json_object(json_t *element, int indent); -void print_json_array(json_t *element, int indent); -void print_json_string(json_t *element, int indent); -void print_json_integer(json_t *element, int indent); -void print_json_real(json_t *element, int indent); -void print_json_true(json_t *element, int indent); -void print_json_false(json_t *element, int indent); -void print_json_null(json_t *element, int indent); - -void print_json(json_t *root) { - print_json_aux(root, 0); -} - -void print_json_aux(json_t *element, int indent) { - switch (json_typeof(element)) { - case JSON_OBJECT: - print_json_object(element, indent); - break; - case JSON_ARRAY: - print_json_array(element, indent); - break; - case JSON_STRING: - print_json_string(element, indent); - break; - case JSON_INTEGER: - print_json_integer(element, indent); - break; - case JSON_REAL: - print_json_real(element, indent); - break; - case JSON_TRUE: - print_json_true(element, indent); - break; - case JSON_FALSE: - print_json_false(element, indent); - break; - case JSON_NULL: - print_json_null(element, indent); - break; - default: - fprintf(stderr, "unrecognized JSON type %d\n", json_typeof(element)); - } -} - -void print_json_indent(int indent) { - int i; - for (i = 0; i < indent; i++) { putchar(' '); } -} - -const char *json_plural(int count) { - return count == 1 ? "" : "s"; -} - -void print_json_object(json_t *element, int indent) { - size_t size; - const char *key; - json_t *value; - - print_json_indent(indent); - size = json_object_size(element); - - printf("JSON Object of %ld pair%s:\n", size, json_plural(size)); - json_object_foreach(element, key, value) { - print_json_indent(indent + 2); - printf("JSON Key: \"%s\"\n", key); - print_json_aux(value, indent + 2); - } - -} - -void print_json_array(json_t *element, int indent) { - size_t i; - size_t size = json_array_size(element); - print_json_indent(indent); - - printf("JSON Array of %ld element%s:\n", size, json_plural(size)); - for (i = 0; i < size; i++) { - print_json_aux(json_array_get(element, i), indent + 2); - } -} - -void print_json_string(json_t *element, int indent) { - print_json_indent(indent); - printf("JSON String: \"%s\"\n", json_string_value(element)); -} - -void print_json_integer(json_t *element, int indent) { - print_json_indent(indent); - printf("JSON Integer: \"%" JSON_INTEGER_FORMAT "\"\n", json_integer_value(element)); -} - -void print_json_real(json_t *element, int indent) { - print_json_indent(indent); - printf("JSON Real: %f\n", json_real_value(element)); -} - -void print_json_true(json_t *element, int indent) { - (void)element; - print_json_indent(indent); - printf("JSON True\n"); -} - -void print_json_false(json_t *element, int indent) { - (void)element; - print_json_indent(indent); - printf("JSON False\n"); -} - -void print_json_null(json_t *element, int indent) { - (void)element; - print_json_indent(indent); - printf("JSON Null\n"); -} - -/* - * Parse text into a JSON object. If text is valid JSON, returns a - * json_t structure, otherwise prints and error and returns null. - */ -json_t *load_json(const char *text) { - json_t *root; - json_error_t error; - - root = json_loads(text, 0, &error); - - if (root) { - return root; - } else { - fprintf(stderr, "json error on line %d: %s\n", error.line, error.text); - return (json_t *)0; - } -} - -/* - * Print a prompt and return (by reference) a null-terminated line of - * text. Returns NULL on eof or some error. - */ -char *read_line(char *line, int max_chars) { - printf("Type some JSON > "); - fflush(stdout); - return fgets(line, max_chars, stdin); -} - -/* ================================================================ - * main - */ - -#define MAX_CHARS 4096 - -int main(int argc, char *argv[]) { - char line[MAX_CHARS]; - - if (argc != 1) { - fprintf(stderr, "Usage: %s\n", argv[0]); - exit(-1); - } - - while (read_line(line, MAX_CHARS) != (char *)NULL) { - - /* parse text into JSON structure */ - json_t *root = load_json(line); - - if (root) { - /* print and release the JSON structure */ - print_json(root); - json_decref(root); - } - } - - return 0; -} diff --git a/3party/jansson/jansson b/3party/jansson/jansson new file mode 160000 index 0000000000..e23f558007 --- /dev/null +++ b/3party/jansson/jansson @@ -0,0 +1 @@ +Subproject commit e23f5580072cb64ce3ab27de2b5110d7ac252424 diff --git a/3party/jansson/jansson.pc.in b/3party/jansson/jansson.pc.in deleted file mode 100644 index 69c9a43aeb..0000000000 --- a/3party/jansson/jansson.pc.in +++ /dev/null @@ -1,10 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: Jansson -Description: Library for encoding, decoding and manipulating JSON data -Version: @VERSION@ -Libs: -L${libdir} -ljansson -Cflags: -I${includedir} diff --git a/3party/jansson/ios/jansson_config.h b/3party/jansson/jansson_config.h similarity index 98% rename from 3party/jansson/ios/jansson_config.h rename to 3party/jansson/jansson_config.h index a5502fc0ef..bf3b15b2f4 100644 --- a/3party/jansson/ios/jansson_config.h +++ b/3party/jansson/jansson_config.h @@ -27,7 +27,7 @@ /* Bring in the cmake-detected defines */ #define HAVE_STDINT_H 1 -/* #undef HAVE_INTTYPES_H */ +#define HAVE_INTTYPES_H 1 #define HAVE_SYS_TYPES_H 1 /* Include our standard type header for the integer typedef */ diff --git a/3party/jansson/jansson_handle.cpp b/3party/jansson/jansson_handle.cpp index afe0c6733c..32112c6105 100644 --- a/3party/jansson/jansson_handle.cpp +++ b/3party/jansson/jansson_handle.cpp @@ -1,4 +1,4 @@ -#include "3party/jansson/jansson_handle.hpp" +#include "jansson_handle.hpp" #include diff --git a/3party/jansson/jansson_handle.hpp b/3party/jansson/jansson_handle.hpp index b6ba745b10..229a5b2221 100644 --- a/3party/jansson/jansson_handle.hpp +++ b/3party/jansson/jansson_handle.hpp @@ -2,7 +2,7 @@ #include -struct json_struct_t; +struct json_t; namespace base { @@ -12,7 +12,7 @@ class JsonHandle void DecRef(); public: - JsonHandle(json_struct_t * pJson = 0) : m_pJson(pJson) + JsonHandle(json_t * pJson = 0) : m_pJson(pJson) { IncRef(); } @@ -39,12 +39,12 @@ public: std::swap(m_pJson, json.m_pJson); } - json_struct_t * get() const + json_t * get() const { return m_pJson; } - json_struct_t * operator -> () const + json_t * operator -> () const { return m_pJson; } @@ -55,7 +55,7 @@ public: } /// Attach newly created object without incrementing ref count (it's already == 1). - void AttachNew(json_struct_t * pJson) + void AttachNew(json_t * pJson) { DecRef(); @@ -63,6 +63,6 @@ public: } private: - json_struct_t * m_pJson; + json_t * m_pJson; }; } // namespace base diff --git a/3party/jansson/ios/jansson_private_config.h b/3party/jansson/jansson_private_config.h similarity index 100% rename from 3party/jansson/ios/jansson_private_config.h rename to 3party/jansson/jansson_private_config.h diff --git a/3party/jansson/myjansson.cpp b/3party/jansson/myjansson.cpp index 0b70b89ce7..5798ee7bd0 100644 --- a/3party/jansson/myjansson.cpp +++ b/3party/jansson/myjansson.cpp @@ -2,15 +2,14 @@ #include -using namespace std; - namespace { template -string FromJSONToString(json_t const * root) +std::string FromJSONToString(json_t const * root) { T result; FromJSON(root, result); + // TODO(AB): Is std::to_string faster? return strings::to_string(result); } } // namespace @@ -103,10 +102,10 @@ void FromJSON(json_t const * root, bool & result) result = json_is_true(root); } -string FromJSONToString(json_t const * root) +std::string FromJSONToString(json_t const * root) { if (json_is_string(root)) - return FromJSONToString(root); + return FromJSONToString(root); if (json_is_integer(root)) return FromJSONToString(root); @@ -122,7 +121,7 @@ string FromJSONToString(json_t const * root) namespace std { -void FromJSON(json_t const * root, string & result) +void FromJSON(json_t const * root, std::string & result) { if (!json_is_string(root)) MYTHROW(base::Json::Exception, ("The field must contain a json string.")); @@ -134,7 +133,7 @@ namespace strings { void FromJSON(json_t const * root, UniString & result) { - string s; + std::string s; FromJSON(root, s); result = MakeUniString(s); } diff --git a/3party/jansson/myjansson.hpp b/3party/jansson/myjansson.hpp index 8703dd5ad1..c5f286d193 100644 --- a/3party/jansson/myjansson.hpp +++ b/3party/jansson/myjansson.hpp @@ -11,7 +11,7 @@ #include #include -#include "3party/jansson/src/jansson.h" +#include namespace base { diff --git a/3party/jansson/release.sh b/3party/jansson/release.sh deleted file mode 100755 index c2551f8281..0000000000 --- a/3party/jansson/release.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh -# -# Use this script to easily make releases of Jansson. It configures -# the source tree, and builds and signs all tarballs. - -die() { - echo $1 >&2 - exit 1 -} - -confirm() { - local answer - read -p "$1 [yN]: " answer - [ "$answer" = "Y" -o "$answer" = "y" ] || exit 0 -} - -set -e -[ -f configure.ac ] || die "Must be run at project root directory" - -# Determine version -v=$(grep AC_INIT configure.ac | sed -r 's/.*, \[(.+?)\],.*/\1/') -[ -n "$v" ] || die "Unable to determine version" -confirm "Version is $v, proceed?" - -# Sanity checks -vi=$(grep version-info src/Makefile.am | sed 's/^[ \t]*//g' | cut -d" " -f2) -confirm "Libtool version-info is $vi, proceed?" - -r=$(grep 'Released ' CHANGES | head -n 1) -confirm "Last CHANGES entry says \"$r\", proceed??" - -dv=$(grep ^version doc/conf.py | sed -r "s/.*'(.*)'.*/\1/") -if [ "$dv" != "$v" ]; then - die "Documentation version ($dv) doesn't match library version" -fi - -[ -f Makefile ] && make distclean || true -rm -f jansson-$v.tar.* -rm -rf jansson-$v-doc -rm -f jansson-$v-doc.tar.* - -autoreconf -fi -./configure - -# Run tests and make gz source tarball -: ${VALGRIND:=1} -export VALGRIND -make distcheck - -# Make bzip2 source tarball -make dist-bzip2 - -# Sign source tarballs -for s in gz bz2; do - gpg --detach-sign --armor jansson-$v.tar.$s -done - -# Build documentation -make html -mv doc/_build/html jansson-$v-doc - -# Make and sign documentation tarballs -for s in gz bz2; do - [ $s = gz ] && compress=gzip - [ $s = bz2 ] && compress=bzip2 - tar cf - jansson-$v-doc | $compress -9 -c > jansson-$v-doc.tar.$s - gpg --detach-sign --armor jansson-$v-doc.tar.$s -done - -echo "All done" diff --git a/3party/jansson/src/Makefile.am b/3party/jansson/src/Makefile.am deleted file mode 100644 index 37cfaac4eb..0000000000 --- a/3party/jansson/src/Makefile.am +++ /dev/null @@ -1,28 +0,0 @@ -EXTRA_DIST = jansson.def - -include_HEADERS = jansson.h -nodist_include_HEADERS = jansson_config.h - -lib_LTLIBRARIES = libjansson.la -libjansson_la_SOURCES = \ - dump.c \ - error.c \ - hashtable.c \ - hashtable.h \ - hashtable_seed.c \ - jansson_private.h \ - load.c \ - lookup3.h \ - memory.c \ - pack_unpack.c \ - strbuffer.c \ - strbuffer.h \ - strconv.c \ - utf.c \ - utf.h \ - value.c -libjansson_la_LDFLAGS = \ - -no-undefined \ - -export-symbols-regex '^json_' \ - -version-info 15:1:11 \ - @JSON_BSYMBOLIC_LDFLAGS@ diff --git a/3party/jansson/src/dump.c b/3party/jansson/src/dump.c deleted file mode 100644 index 89802c65dc..0000000000 --- a/3party/jansson/src/dump.c +++ /dev/null @@ -1,504 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -#include "jansson_private.h" - -#include -#include -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif - -#include "jansson.h" -#include "strbuffer.h" -#include "utf.h" - -#define MAX_INTEGER_STR_LENGTH 100 -#define MAX_REAL_STR_LENGTH 100 - -#define FLAGS_TO_INDENT(f) ((f) & 0x1F) -#define FLAGS_TO_PRECISION(f) (((f) >> 11) & 0x1F) - -struct buffer { - const size_t size; - size_t used; - char *data; -}; - -static int dump_to_strbuffer(const char *buffer, size_t size, void *data) -{ - return strbuffer_append_bytes((strbuffer_t *)data, buffer, size); -} - -static int dump_to_buffer(const char *buffer, size_t size, void *data) -{ - struct buffer *buf = (struct buffer *)data; - - if(buf->used + size <= buf->size) - memcpy(&buf->data[buf->used], buffer, size); - - buf->used += size; - return 0; -} - -static int dump_to_file(const char *buffer, size_t size, void *data) -{ - FILE *dest = (FILE *)data; - if(fwrite(buffer, size, 1, dest) != 1) - return -1; - return 0; -} - -static int dump_to_fd(const char *buffer, size_t size, void *data) -{ -#ifdef HAVE_UNISTD_H - int *dest = (int *)data; - if(write(*dest, buffer, size) == (ssize_t)size) - return 0; -#endif - return -1; -} - -/* 32 spaces (the maximum indentation size) */ -static const char whitespace[] = " "; - -static int dump_indent(size_t flags, int depth, int space, json_dump_callback_t dump, void *data) -{ - if(FLAGS_TO_INDENT(flags) > 0) - { - unsigned int ws_count = FLAGS_TO_INDENT(flags), n_spaces = depth * ws_count; - - if(dump("\n", 1, data)) - return -1; - - while(n_spaces > 0) - { - int cur_n = n_spaces < sizeof whitespace - 1 ? n_spaces : sizeof whitespace - 1; - - if(dump(whitespace, cur_n, data)) - return -1; - - n_spaces -= cur_n; - } - } - else if(space && !(flags & JSON_COMPACT)) - { - return dump(" ", 1, data); - } - return 0; -} - -static int dump_string(const char *str, size_t len, json_dump_callback_t dump, void *data, size_t flags) -{ - const char *pos, *end, *lim; - int32_t codepoint = 0; - - if(dump("\"", 1, data)) - return -1; - - end = pos = str; - lim = str + len; - while(1) - { - const char *text; - char seq[13]; - int length; - - while(end < lim) - { - end = utf8_iterate(pos, lim - pos, &codepoint); - if(!end) - return -1; - - /* mandatory escape or control char */ - if(codepoint == '\\' || codepoint == '"' || codepoint < 0x20) - break; - - /* slash */ - if((flags & JSON_ESCAPE_SLASH) && codepoint == '/') - break; - - /* non-ASCII */ - if((flags & JSON_ENSURE_ASCII) && codepoint > 0x7F) - break; - - pos = end; - } - - if(pos != str) { - if(dump(str, pos - str, data)) - return -1; - } - - if(end == pos) - break; - - /* handle \, /, ", and control codes */ - length = 2; - switch(codepoint) - { - case '\\': text = "\\\\"; break; - case '\"': text = "\\\""; break; - case '\b': text = "\\b"; break; - case '\f': text = "\\f"; break; - case '\n': text = "\\n"; break; - case '\r': text = "\\r"; break; - case '\t': text = "\\t"; break; - case '/': text = "\\/"; break; - default: - { - /* codepoint is in BMP */ - if(codepoint < 0x10000) - { - snprintf(seq, sizeof(seq), "\\u%04X", (unsigned int)codepoint); - length = 6; - } - - /* not in BMP -> construct a UTF-16 surrogate pair */ - else - { - int32_t first, last; - - codepoint -= 0x10000; - first = 0xD800 | ((codepoint & 0xffc00) >> 10); - last = 0xDC00 | (codepoint & 0x003ff); - - snprintf(seq, sizeof(seq), "\\u%04X\\u%04X", (unsigned int)first, (unsigned int)last); - length = 12; - } - - text = seq; - break; - } - } - - if(dump(text, length, data)) - return -1; - - str = pos = end; - } - - return dump("\"", 1, data); -} - -static int compare_keys(const void *key1, const void *key2) -{ - return strcmp(*(const char **)key1, *(const char **)key2); -} - -static int loop_check(hashtable_t *parents, const json_t *json, char *key, size_t key_size) -{ - snprintf(key, key_size, "%p", json); - if (hashtable_get(parents, key)) - return -1; - - return hashtable_set(parents, key, json_null()); -} - -static int do_dump(const json_t *json, size_t flags, int depth, - hashtable_t *parents, json_dump_callback_t dump, void *data) -{ - int embed = flags & JSON_EMBED; - - flags &= ~JSON_EMBED; - - if(!json) - return -1; - - switch(json_typeof(json)) { - case JSON_NULL: - return dump("null", 4, data); - - case JSON_TRUE: - return dump("true", 4, data); - - case JSON_FALSE: - return dump("false", 5, data); - - case JSON_INTEGER: - { - char buffer[MAX_INTEGER_STR_LENGTH]; - int size; - - size = snprintf(buffer, MAX_INTEGER_STR_LENGTH, - "%" JSON_INTEGER_FORMAT, - json_integer_value(json)); - if(size < 0 || size >= MAX_INTEGER_STR_LENGTH) - return -1; - - return dump(buffer, size, data); - } - - case JSON_REAL: - { - char buffer[MAX_REAL_STR_LENGTH]; - int size; - double value = json_real_value(json); - - size = jsonp_dtostr(buffer, MAX_REAL_STR_LENGTH, value, - FLAGS_TO_PRECISION(flags)); - if(size < 0) - return -1; - - return dump(buffer, size, data); - } - - case JSON_STRING: - return dump_string(json_string_value(json), json_string_length(json), dump, data, flags); - - case JSON_ARRAY: - { - size_t n; - size_t i; - /* Space for "0x", double the sizeof a pointer for the hex and a terminator. */ - char key[2 + (sizeof(json) * 2) + 1]; - - /* detect circular references */ - if (loop_check(parents, json, key, sizeof(key))) - return -1; - - n = json_array_size(json); - - if(!embed && dump("[", 1, data)) - return -1; - if(n == 0) { - hashtable_del(parents, key); - return embed ? 0 : dump("]", 1, data); - } - if(dump_indent(flags, depth + 1, 0, dump, data)) - return -1; - - for(i = 0; i < n; ++i) { - if(do_dump(json_array_get(json, i), flags, depth + 1, - parents, dump, data)) - return -1; - - if(i < n - 1) - { - if(dump(",", 1, data) || - dump_indent(flags, depth + 1, 1, dump, data)) - return -1; - } - else - { - if(dump_indent(flags, depth, 0, dump, data)) - return -1; - } - } - - hashtable_del(parents, key); - return embed ? 0 : dump("]", 1, data); - } - - case JSON_OBJECT: - { - void *iter; - const char *separator; - int separator_length; - /* Space for "0x", double the sizeof a pointer for the hex and a terminator. */ - char loop_key[2 + (sizeof(json) * 2) + 1]; - - if(flags & JSON_COMPACT) { - separator = ":"; - separator_length = 1; - } - else { - separator = ": "; - separator_length = 2; - } - - /* detect circular references */ - if (loop_check(parents, json, loop_key, sizeof(loop_key))) - return -1; - - iter = json_object_iter((json_t *)json); - - if(!embed && dump("{", 1, data)) - return -1; - if(!iter) { - hashtable_del(parents, loop_key); - return embed ? 0 : dump("}", 1, data); - } - if(dump_indent(flags, depth + 1, 0, dump, data)) - return -1; - - if(flags & JSON_SORT_KEYS) - { - const char **keys; - size_t size, i; - - size = json_object_size(json); - keys = jsonp_malloc(size * sizeof(const char *)); - if(!keys) - return -1; - - i = 0; - while(iter) - { - keys[i] = json_object_iter_key(iter); - iter = json_object_iter_next((json_t *)json, iter); - i++; - } - assert(i == size); - - qsort(keys, size, sizeof(const char *), compare_keys); - - for(i = 0; i < size; i++) - { - const char *key; - json_t *value; - - key = keys[i]; - value = json_object_get(json, key); - assert(value); - - dump_string(key, strlen(key), dump, data, flags); - if(dump(separator, separator_length, data) || - do_dump(value, flags, depth + 1, parents, dump, data)) - { - jsonp_free(keys); - return -1; - } - - if(i < size - 1) - { - if(dump(",", 1, data) || - dump_indent(flags, depth + 1, 1, dump, data)) - { - jsonp_free(keys); - return -1; - } - } - else - { - if(dump_indent(flags, depth, 0, dump, data)) - { - jsonp_free(keys); - return -1; - } - } - } - - jsonp_free(keys); - } - else - { - /* Don't sort keys */ - - while(iter) - { - void *next = json_object_iter_next((json_t *)json, iter); - const char *key = json_object_iter_key(iter); - - dump_string(key, strlen(key), dump, data, flags); - if(dump(separator, separator_length, data) || - do_dump(json_object_iter_value(iter), flags, depth + 1, - parents, dump, data)) - return -1; - - if(next) - { - if(dump(",", 1, data) || - dump_indent(flags, depth + 1, 1, dump, data)) - return -1; - } - else - { - if(dump_indent(flags, depth, 0, dump, data)) - return -1; - } - - iter = next; - } - } - - hashtable_del(parents, loop_key); - return embed ? 0 : dump("}", 1, data); - } - - default: - /* not reached */ - return -1; - } -} - -char *json_dumps(const json_t *json, size_t flags) -{ - strbuffer_t strbuff; - char *result; - - if(strbuffer_init(&strbuff)) - return NULL; - - if(json_dump_callback(json, dump_to_strbuffer, (void *)&strbuff, flags)) - result = NULL; - else - result = jsonp_strdup(strbuffer_value(&strbuff)); - - strbuffer_close(&strbuff); - return result; -} - -size_t json_dumpb(const json_t *json, char *buffer, size_t size, size_t flags) -{ - struct buffer buf = { size, 0, buffer }; - - if(json_dump_callback(json, dump_to_buffer, (void *)&buf, flags)) - return 0; - - return buf.used; -} - -int json_dumpf(const json_t *json, FILE *output, size_t flags) -{ - return json_dump_callback(json, dump_to_file, (void *)output, flags); -} - -int json_dumpfd(const json_t *json, int output, size_t flags) -{ - return json_dump_callback(json, dump_to_fd, (void *)&output, flags); -} - -int json_dump_file(const json_t *json, const char *path, size_t flags) -{ - int result; - - FILE *output = fopen(path, "w"); - if(!output) - return -1; - - result = json_dumpf(json, output, flags); - - if(fclose(output) != 0) - return -1; - - return result; -} - -int json_dump_callback(const json_t *json, json_dump_callback_t callback, void *data, size_t flags) -{ - int res; - hashtable_t parents_set; - - if(!(flags & JSON_ENCODE_ANY)) { - if(!json_is_array(json) && !json_is_object(json)) - return -1; - } - - if (hashtable_init(&parents_set)) - return -1; - res = do_dump(json, flags, 0, &parents_set, callback, data); - hashtable_close(&parents_set); - - return res; -} diff --git a/3party/jansson/src/error.c b/3party/jansson/src/error.c deleted file mode 100644 index f5da6b9b0a..0000000000 --- a/3party/jansson/src/error.c +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include "jansson_private.h" - -void jsonp_error_init(json_error_t *error, const char *source) -{ - if(error) - { - error->text[0] = '\0'; - error->line = -1; - error->column = -1; - error->position = 0; - if(source) - jsonp_error_set_source(error, source); - else - error->source[0] = '\0'; - } -} - -void jsonp_error_set_source(json_error_t *error, const char *source) -{ - size_t length; - - if(!error || !source) - return; - - length = strlen(source); - if(length < JSON_ERROR_SOURCE_LENGTH) - strncpy(error->source, source, length + 1); - else { - size_t extra = length - JSON_ERROR_SOURCE_LENGTH + 4; - memcpy(error->source, "...", 3); - strncpy(error->source + 3, source + extra, length - extra + 1); - } -} - -void jsonp_error_set(json_error_t *error, int line, int column, - size_t position, enum json_error_code code, - const char *msg, ...) -{ - va_list ap; - - va_start(ap, msg); - jsonp_error_vset(error, line, column, position, code, msg, ap); - va_end(ap); -} - -void jsonp_error_vset(json_error_t *error, int line, int column, - size_t position, enum json_error_code code, - const char *msg, va_list ap) -{ - if(!error) - return; - - if(error->text[0] != '\0') { - /* error already set */ - return; - } - - error->line = line; - error->column = column; - error->position = (int)position; - - vsnprintf(error->text, JSON_ERROR_TEXT_LENGTH - 1, msg, ap); - error->text[JSON_ERROR_TEXT_LENGTH - 2] = '\0'; - error->text[JSON_ERROR_TEXT_LENGTH - 1] = code; -} diff --git a/3party/jansson/src/hashtable.c b/3party/jansson/src/hashtable.c deleted file mode 100644 index c819319a76..0000000000 --- a/3party/jansson/src/hashtable.c +++ /dev/null @@ -1,356 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#if HAVE_CONFIG_H -#include -#endif - -#include -#include - -#if HAVE_STDINT_H -#include -#endif - -#include /* for JSON_INLINE */ -#include "jansson_private.h" /* for container_of() */ -#include "hashtable.h" - -#ifndef INITIAL_HASHTABLE_ORDER -#define INITIAL_HASHTABLE_ORDER 3 -#endif - -typedef struct hashtable_list list_t; -typedef struct hashtable_pair pair_t; -typedef struct hashtable_bucket bucket_t; - -extern volatile uint32_t hashtable_seed; - -/* Implementation of the hash function */ -#include "lookup3.h" - -#define list_to_pair(list_) container_of(list_, pair_t, list) -#define ordered_list_to_pair(list_) container_of(list_, pair_t, ordered_list) -#define hash_str(key) ((size_t)hashlittle((key), strlen(key), hashtable_seed)) - -static JSON_INLINE void list_init(list_t *list) -{ - list->next = list; - list->prev = list; -} - -static JSON_INLINE void list_insert(list_t *list, list_t *node) -{ - node->next = list; - node->prev = list->prev; - list->prev->next = node; - list->prev = node; -} - -static JSON_INLINE void list_remove(list_t *list) -{ - list->prev->next = list->next; - list->next->prev = list->prev; -} - -static JSON_INLINE int bucket_is_empty(hashtable_t *hashtable, bucket_t *bucket) -{ - return bucket->first == &hashtable->list && bucket->first == bucket->last; -} - -static void insert_to_bucket(hashtable_t *hashtable, bucket_t *bucket, - list_t *list) -{ - if(bucket_is_empty(hashtable, bucket)) - { - list_insert(&hashtable->list, list); - bucket->first = bucket->last = list; - } - else - { - list_insert(bucket->first, list); - bucket->first = list; - } -} - -static pair_t *hashtable_find_pair(hashtable_t *hashtable, bucket_t *bucket, - const char *key, size_t hash) -{ - list_t *list; - pair_t *pair; - - if(bucket_is_empty(hashtable, bucket)) - return NULL; - - list = bucket->first; - while(1) - { - pair = list_to_pair(list); - if(pair->hash == hash && strcmp(pair->key, key) == 0) - return pair; - - if(list == bucket->last) - break; - - list = list->next; - } - - return NULL; -} - -/* returns 0 on success, -1 if key was not found */ -static int hashtable_do_del(hashtable_t *hashtable, - const char *key, size_t hash) -{ - pair_t *pair; - bucket_t *bucket; - size_t index; - - index = hash & hashmask(hashtable->order); - bucket = &hashtable->buckets[index]; - - pair = hashtable_find_pair(hashtable, bucket, key, hash); - if(!pair) - return -1; - - if(&pair->list == bucket->first && &pair->list == bucket->last) - bucket->first = bucket->last = &hashtable->list; - - else if(&pair->list == bucket->first) - bucket->first = pair->list.next; - - else if(&pair->list == bucket->last) - bucket->last = pair->list.prev; - - list_remove(&pair->list); - list_remove(&pair->ordered_list); - json_decref(pair->value); - - jsonp_free(pair); - hashtable->size--; - - return 0; -} - -static void hashtable_do_clear(hashtable_t *hashtable) -{ - list_t *list, *next; - pair_t *pair; - - for(list = hashtable->list.next; list != &hashtable->list; list = next) - { - next = list->next; - pair = list_to_pair(list); - json_decref(pair->value); - jsonp_free(pair); - } -} - -static int hashtable_do_rehash(hashtable_t *hashtable) -{ - list_t *list, *next; - pair_t *pair; - size_t i, index, new_size, new_order; - struct hashtable_bucket *new_buckets; - - new_order = hashtable->order + 1; - new_size = hashsize(new_order); - - new_buckets = jsonp_malloc(new_size * sizeof(bucket_t)); - if(!new_buckets) - return -1; - - jsonp_free(hashtable->buckets); - hashtable->buckets = new_buckets; - hashtable->order = new_order; - - for(i = 0; i < hashsize(hashtable->order); i++) - { - hashtable->buckets[i].first = hashtable->buckets[i].last = - &hashtable->list; - } - - list = hashtable->list.next; - list_init(&hashtable->list); - - for(; list != &hashtable->list; list = next) { - next = list->next; - pair = list_to_pair(list); - index = pair->hash % new_size; - insert_to_bucket(hashtable, &hashtable->buckets[index], &pair->list); - } - - return 0; -} - - -int hashtable_init(hashtable_t *hashtable) -{ - size_t i; - - hashtable->size = 0; - hashtable->order = INITIAL_HASHTABLE_ORDER; - hashtable->buckets = jsonp_malloc(hashsize(hashtable->order) * sizeof(bucket_t)); - if(!hashtable->buckets) - return -1; - - list_init(&hashtable->list); - list_init(&hashtable->ordered_list); - - for(i = 0; i < hashsize(hashtable->order); i++) - { - hashtable->buckets[i].first = hashtable->buckets[i].last = - &hashtable->list; - } - - return 0; -} - -void hashtable_close(hashtable_t *hashtable) -{ - hashtable_do_clear(hashtable); - jsonp_free(hashtable->buckets); -} - -int hashtable_set(hashtable_t *hashtable, const char *key, json_t *value) -{ - pair_t *pair; - bucket_t *bucket; - size_t hash, index; - - /* rehash if the load ratio exceeds 1 */ - if(hashtable->size >= hashsize(hashtable->order)) - if(hashtable_do_rehash(hashtable)) - return -1; - - hash = hash_str(key); - index = hash & hashmask(hashtable->order); - bucket = &hashtable->buckets[index]; - pair = hashtable_find_pair(hashtable, bucket, key, hash); - - if(pair) - { - json_decref(pair->value); - pair->value = value; - } - else - { - /* offsetof(...) returns the size of pair_t without the last, - flexible member. This way, the correct amount is - allocated. */ - - size_t len = strlen(key); - if(len >= (size_t)-1 - offsetof(pair_t, key)) { - /* Avoid an overflow if the key is very long */ - return -1; - } - - pair = jsonp_malloc(offsetof(pair_t, key) + len + 1); - if(!pair) - return -1; - - pair->hash = hash; - strncpy(pair->key, key, len + 1); - pair->value = value; - list_init(&pair->list); - list_init(&pair->ordered_list); - - insert_to_bucket(hashtable, bucket, &pair->list); - list_insert(&hashtable->ordered_list, &pair->ordered_list); - - hashtable->size++; - } - return 0; -} - -void *hashtable_get(hashtable_t *hashtable, const char *key) -{ - pair_t *pair; - size_t hash; - bucket_t *bucket; - - hash = hash_str(key); - bucket = &hashtable->buckets[hash & hashmask(hashtable->order)]; - - pair = hashtable_find_pair(hashtable, bucket, key, hash); - if(!pair) - return NULL; - - return pair->value; -} - -int hashtable_del(hashtable_t *hashtable, const char *key) -{ - size_t hash = hash_str(key); - return hashtable_do_del(hashtable, key, hash); -} - -void hashtable_clear(hashtable_t *hashtable) -{ - size_t i; - - hashtable_do_clear(hashtable); - - for(i = 0; i < hashsize(hashtable->order); i++) - { - hashtable->buckets[i].first = hashtable->buckets[i].last = - &hashtable->list; - } - - list_init(&hashtable->list); - list_init(&hashtable->ordered_list); - hashtable->size = 0; -} - -void *hashtable_iter(hashtable_t *hashtable) -{ - return hashtable_iter_next(hashtable, &hashtable->ordered_list); -} - -void *hashtable_iter_at(hashtable_t *hashtable, const char *key) -{ - pair_t *pair; - size_t hash; - bucket_t *bucket; - - hash = hash_str(key); - bucket = &hashtable->buckets[hash & hashmask(hashtable->order)]; - - pair = hashtable_find_pair(hashtable, bucket, key, hash); - if(!pair) - return NULL; - - return &pair->ordered_list; -} - -void *hashtable_iter_next(hashtable_t *hashtable, void *iter) -{ - list_t *list = (list_t *)iter; - if(list->next == &hashtable->ordered_list) - return NULL; - return list->next; -} - -void *hashtable_iter_key(void *iter) -{ - pair_t *pair = ordered_list_to_pair((list_t *)iter); - return pair->key; -} - -void *hashtable_iter_value(void *iter) -{ - pair_t *pair = ordered_list_to_pair((list_t *)iter); - return pair->value; -} - -void hashtable_iter_set(void *iter, json_t *value) -{ - pair_t *pair = ordered_list_to_pair((list_t *)iter); - - json_decref(pair->value); - pair->value = value; -} diff --git a/3party/jansson/src/hashtable.h b/3party/jansson/src/hashtable.h deleted file mode 100644 index c112834085..0000000000 --- a/3party/jansson/src/hashtable.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifndef HASHTABLE_H -#define HASHTABLE_H - -#include -#include "jansson.h" - -struct hashtable_list { - struct hashtable_list *prev; - struct hashtable_list *next; -}; - -/* "pair" may be a bit confusing a name, but think of it as a - key-value pair. In this case, it just encodes some extra data, - too */ -struct hashtable_pair { - struct hashtable_list list; - struct hashtable_list ordered_list; - size_t hash; - json_t *value; - char key[1]; -}; - -struct hashtable_bucket { - struct hashtable_list *first; - struct hashtable_list *last; -}; - -typedef struct hashtable { - size_t size; - struct hashtable_bucket *buckets; - size_t order; /* hashtable has pow(2, order) buckets */ - struct hashtable_list list; - struct hashtable_list ordered_list; -} hashtable_t; - - -#define hashtable_key_to_iter(key_) \ - (&(container_of(key_, struct hashtable_pair, key)->ordered_list)) - - -/** - * hashtable_init - Initialize a hashtable object - * - * @hashtable: The (statically allocated) hashtable object - * - * Initializes a statically allocated hashtable object. The object - * should be cleared with hashtable_close when it's no longer used. - * - * Returns 0 on success, -1 on error (out of memory). - */ -int hashtable_init(hashtable_t *hashtable) JANSSON_ATTRS(warn_unused_result); - -/** - * hashtable_close - Release all resources used by a hashtable object - * - * @hashtable: The hashtable - * - * Destroys a statically allocated hashtable object. - */ -void hashtable_close(hashtable_t *hashtable); - -/** - * hashtable_set - Add/modify value in hashtable - * - * @hashtable: The hashtable object - * @key: The key - * @serial: For addition order of keys - * @value: The value - * - * If a value with the given key already exists, its value is replaced - * with the new value. Value is "stealed" in the sense that hashtable - * doesn't increment its refcount but decreases the refcount when the - * value is no longer needed. - * - * Returns 0 on success, -1 on failure (out of memory). - */ -int hashtable_set(hashtable_t *hashtable, const char *key, json_t *value); - -/** - * hashtable_get - Get a value associated with a key - * - * @hashtable: The hashtable object - * @key: The key - * - * Returns value if it is found, or NULL otherwise. - */ -void *hashtable_get(hashtable_t *hashtable, const char *key); - -/** - * hashtable_del - Remove a value from the hashtable - * - * @hashtable: The hashtable object - * @key: The key - * - * Returns 0 on success, or -1 if the key was not found. - */ -int hashtable_del(hashtable_t *hashtable, const char *key); - -/** - * hashtable_clear - Clear hashtable - * - * @hashtable: The hashtable object - * - * Removes all items from the hashtable. - */ -void hashtable_clear(hashtable_t *hashtable); - -/** - * hashtable_iter - Iterate over hashtable - * - * @hashtable: The hashtable object - * - * Returns an opaque iterator to the first element in the hashtable. - * The iterator should be passed to hashtable_iter_* functions. - * The hashtable items are not iterated over in any particular order. - * - * There's no need to free the iterator in any way. The iterator is - * valid as long as the item that is referenced by the iterator is not - * deleted. Other values may be added or deleted. In particular, - * hashtable_iter_next() may be called on an iterator, and after that - * the key/value pair pointed by the old iterator may be deleted. - */ -void *hashtable_iter(hashtable_t *hashtable); - -/** - * hashtable_iter_at - Return an iterator at a specific key - * - * @hashtable: The hashtable object - * @key: The key that the iterator should point to - * - * Like hashtable_iter() but returns an iterator pointing to a - * specific key. - */ -void *hashtable_iter_at(hashtable_t *hashtable, const char *key); - -/** - * hashtable_iter_next - Advance an iterator - * - * @hashtable: The hashtable object - * @iter: The iterator - * - * Returns a new iterator pointing to the next element in the - * hashtable or NULL if the whole hastable has been iterated over. - */ -void *hashtable_iter_next(hashtable_t *hashtable, void *iter); - -/** - * hashtable_iter_key - Retrieve the key pointed by an iterator - * - * @iter: The iterator - */ -void *hashtable_iter_key(void *iter); - -/** - * hashtable_iter_value - Retrieve the value pointed by an iterator - * - * @iter: The iterator - */ -void *hashtable_iter_value(void *iter); - -/** - * hashtable_iter_set - Set the value pointed by an iterator - * - * @iter: The iterator - * @value: The value to set - */ -void hashtable_iter_set(void *iter, json_t *value); - -#endif diff --git a/3party/jansson/src/hashtable_seed.c b/3party/jansson/src/hashtable_seed.c deleted file mode 100644 index 540358ada7..0000000000 --- a/3party/jansson/src/hashtable_seed.c +++ /dev/null @@ -1,277 +0,0 @@ -/* Generate sizeof(uint32_t) bytes of as random data as possible to seed - the hash function. -*/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#ifdef HAVE_STDINT_H -#include -#endif - -#ifdef HAVE_FCNTL_H -#include -#endif - -#ifdef HAVE_SCHED_H -#include -#endif - -#ifdef HAVE_UNISTD_H -#include -#endif - -#ifdef HAVE_SYS_STAT_H -#include -#endif - -#ifdef HAVE_SYS_TIME_H -#include -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#if defined(_WIN32) -/* For GetModuleHandle(), GetProcAddress() and GetCurrentProcessId() */ -#include -#endif - -#include "jansson.h" - - -static uint32_t buf_to_uint32(char *data) { - size_t i; - uint32_t result = 0; - - for (i = 0; i < sizeof(uint32_t); i++) - result = (result << 8) | (unsigned char)data[i]; - - return result; -} - - - -/* /dev/urandom */ -#if !defined(_WIN32) && defined(USE_URANDOM) -static int seed_from_urandom(uint32_t *seed) { - /* Use unbuffered I/O if we have open(), close() and read(). Otherwise - fall back to fopen() */ - - char data[sizeof(uint32_t)]; - int ok; - -#if defined(HAVE_OPEN) && defined(HAVE_CLOSE) && defined(HAVE_READ) - int urandom; - urandom = open("/dev/urandom", O_RDONLY); - if (urandom == -1) - return 1; - - ok = read(urandom, data, sizeof(uint32_t)) == sizeof(uint32_t); - close(urandom); -#else - FILE *urandom; - - urandom = fopen("/dev/urandom", "rb"); - if (!urandom) - return 1; - - ok = fread(data, 1, sizeof(uint32_t), urandom) == sizeof(uint32_t); - fclose(urandom); -#endif - - if (!ok) - return 1; - - *seed = buf_to_uint32(data); - return 0; -} -#endif - -/* Windows Crypto API */ -#if defined(_WIN32) && defined(USE_WINDOWS_CRYPTOAPI) -#include - -typedef BOOL (WINAPI *CRYPTACQUIRECONTEXTA)(HCRYPTPROV *phProv, LPCSTR pszContainer, LPCSTR pszProvider, DWORD dwProvType, DWORD dwFlags); -typedef BOOL (WINAPI *CRYPTGENRANDOM)(HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer); -typedef BOOL (WINAPI *CRYPTRELEASECONTEXT)(HCRYPTPROV hProv, DWORD dwFlags); - -static int seed_from_windows_cryptoapi(uint32_t *seed) -{ - HINSTANCE hAdvAPI32 = NULL; - CRYPTACQUIRECONTEXTA pCryptAcquireContext = NULL; - CRYPTGENRANDOM pCryptGenRandom = NULL; - CRYPTRELEASECONTEXT pCryptReleaseContext = NULL; - HCRYPTPROV hCryptProv = 0; - BYTE data[sizeof(uint32_t)]; - int ok; - - hAdvAPI32 = GetModuleHandle(TEXT("advapi32.dll")); - if(hAdvAPI32 == NULL) - return 1; - - pCryptAcquireContext = (CRYPTACQUIRECONTEXTA)GetProcAddress(hAdvAPI32, "CryptAcquireContextA"); - if (!pCryptAcquireContext) - return 1; - - pCryptGenRandom = (CRYPTGENRANDOM)GetProcAddress(hAdvAPI32, "CryptGenRandom"); - if (!pCryptGenRandom) - return 1; - - pCryptReleaseContext = (CRYPTRELEASECONTEXT)GetProcAddress(hAdvAPI32, "CryptReleaseContext"); - if (!pCryptReleaseContext) - return 1; - - if (!pCryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) - return 1; - - ok = pCryptGenRandom(hCryptProv, sizeof(uint32_t), data); - pCryptReleaseContext(hCryptProv, 0); - - if (!ok) - return 1; - - *seed = buf_to_uint32((char *)data); - return 0; -} -#endif - -/* gettimeofday() and getpid() */ -static int seed_from_timestamp_and_pid(uint32_t *seed) { -#ifdef HAVE_GETTIMEOFDAY - /* XOR of seconds and microseconds */ - struct timeval tv; - gettimeofday(&tv, NULL); - *seed = (uint32_t)tv.tv_sec ^ (uint32_t)tv.tv_usec; -#else - /* Seconds only */ - *seed = (uint32_t)time(NULL); -#endif - - /* XOR with PID for more randomness */ -#if defined(_WIN32) - *seed ^= (uint32_t)GetCurrentProcessId(); -#elif defined(HAVE_GETPID) - *seed ^= (uint32_t)getpid(); -#endif - - return 0; -} - -static uint32_t generate_seed() { - uint32_t seed = 0; - int done = 0; - -#if !defined(_WIN32) && defined(USE_URANDOM) - if (seed_from_urandom(&seed) == 0) - done = 1; -#endif - -#if defined(_WIN32) && defined(USE_WINDOWS_CRYPTOAPI) - if (seed_from_windows_cryptoapi(&seed) == 0) - done = 1; -#endif - - if (!done) { - /* Fall back to timestamp and PID if no better randomness is - available */ - seed_from_timestamp_and_pid(&seed); - } - - /* Make sure the seed is never zero */ - if (seed == 0) - seed = 1; - - return seed; -} - - -volatile uint32_t hashtable_seed = 0; - -#if defined(HAVE_ATOMIC_BUILTINS) && (defined(HAVE_SCHED_YIELD) || !defined(_WIN32)) -static volatile char seed_initialized = 0; - -void json_object_seed(size_t seed) { - uint32_t new_seed = (uint32_t)seed; - - if (hashtable_seed == 0) { - if (__atomic_test_and_set(&seed_initialized, __ATOMIC_RELAXED) == 0) { - /* Do the seeding ourselves */ - if (new_seed == 0) - new_seed = generate_seed(); - - __atomic_store_n(&hashtable_seed, new_seed, __ATOMIC_RELEASE); - } else { - /* Wait for another thread to do the seeding */ - do { -#ifdef HAVE_SCHED_YIELD - sched_yield(); -#endif - } while(__atomic_load_n(&hashtable_seed, __ATOMIC_ACQUIRE) == 0); - } - } -} -#elif defined(HAVE_SYNC_BUILTINS) && (defined(HAVE_SCHED_YIELD) || !defined(_WIN32)) -void json_object_seed(size_t seed) { - uint32_t new_seed = (uint32_t)seed; - - if (hashtable_seed == 0) { - if (new_seed == 0) { - /* Explicit synchronization fences are not supported by the - __sync builtins, so every thread getting here has to - generate the seed value. - */ - new_seed = generate_seed(); - } - - do { - if (__sync_bool_compare_and_swap(&hashtable_seed, 0, new_seed)) { - /* We were the first to seed */ - break; - } else { - /* Wait for another thread to do the seeding */ -#ifdef HAVE_SCHED_YIELD - sched_yield(); -#endif - } - } while(hashtable_seed == 0); - } -} -#elif defined(_WIN32) -static long seed_initialized = 0; -void json_object_seed(size_t seed) { - uint32_t new_seed = (uint32_t)seed; - - if (hashtable_seed == 0) { - if (InterlockedIncrement(&seed_initialized) == 1) { - /* Do the seeding ourselves */ - if (new_seed == 0) - new_seed = generate_seed(); - - hashtable_seed = new_seed; - } else { - /* Wait for another thread to do the seeding */ - do { - SwitchToThread(); - } while (hashtable_seed == 0); - } - } -} -#else -/* Fall back to a thread-unsafe version */ -void json_object_seed(size_t seed) { - uint32_t new_seed = (uint32_t)seed; - - if (hashtable_seed == 0) { - if (new_seed == 0) - new_seed = generate_seed(); - - hashtable_seed = new_seed; - } -} -#endif diff --git a/3party/jansson/src/jansson.def b/3party/jansson/src/jansson.def deleted file mode 100644 index 15f35c95e5..0000000000 --- a/3party/jansson/src/jansson.def +++ /dev/null @@ -1,75 +0,0 @@ -EXPORTS - json_delete - json_true - json_false - json_null - json_sprintf - json_vsprintf - json_string - json_stringn - json_string_nocheck - json_stringn_nocheck - json_string_value - json_string_length - json_string_set - json_string_setn - json_string_set_nocheck - json_string_setn_nocheck - json_integer - json_integer_value - json_integer_set - json_real - json_real_value - json_real_set - json_number_value - json_array - json_array_size - json_array_get - json_array_set_new - json_array_append_new - json_array_insert_new - json_array_remove - json_array_clear - json_array_extend - json_object - json_object_size - json_object_get - json_object_set_new - json_object_set_new_nocheck - json_object_del - json_object_clear - json_object_update - json_object_update_existing - json_object_update_missing - json_object_iter - json_object_iter_at - json_object_iter_next - json_object_iter_key - json_object_iter_value - json_object_iter_set_new - json_object_key_to_iter - json_object_seed - json_dumps - json_dumpb - json_dumpf - json_dumpfd - json_dump_file - json_dump_callback - json_loads - json_loadb - json_loadf - json_loadfd - json_load_file - json_load_callback - json_equal - json_copy - json_deep_copy - json_pack - json_pack_ex - json_vpack_ex - json_unpack - json_unpack_ex - json_vunpack_ex - json_set_alloc_funcs - json_get_alloc_funcs - diff --git a/3party/jansson/src/jansson.h b/3party/jansson/src/jansson.h deleted file mode 100644 index a7b8a9c584..0000000000 --- a/3party/jansson/src/jansson.h +++ /dev/null @@ -1,367 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifndef JANSSON_H -#define JANSSON_H - -#include -#include /* for size_t */ -#include - -#include "jansson_config.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* version */ - -#define JANSSON_MAJOR_VERSION 2 -#define JANSSON_MINOR_VERSION 12 -#define JANSSON_MICRO_VERSION 0 - -/* Micro version is omitted if it's 0 */ -#define JANSSON_VERSION "2.12" - -/* Version as a 3-byte hex number, e.g. 0x010201 == 1.2.1. Use this - for numeric comparisons, e.g. #if JANSSON_VERSION_HEX >= ... */ -#define JANSSON_VERSION_HEX ((JANSSON_MAJOR_VERSION << 16) | \ - (JANSSON_MINOR_VERSION << 8) | \ - (JANSSON_MICRO_VERSION << 0)) - -/* If __atomic or __sync builtins are available the library is thread - * safe for all read-only functions plus reference counting. */ -#if JSON_HAVE_ATOMIC_BUILTINS || JSON_HAVE_SYNC_BUILTINS -#define JANSSON_THREAD_SAFE_REFCOUNT 1 -#endif - -#if defined(__GNUC__) || defined(__clang__) -#define JANSSON_ATTRS(...) __attribute__((__VA_ARGS__)) -#else -#define JANSSON_ATTRS(...) -#endif - -/* types */ - -typedef enum { - JSON_OBJECT, - JSON_ARRAY, - JSON_STRING, - JSON_INTEGER, - JSON_REAL, - JSON_TRUE, - JSON_FALSE, - JSON_NULL -} json_type; - -typedef struct json_struct_t { - json_type type; - volatile size_t refcount; -} json_t; - -#ifndef JANSSON_USING_CMAKE /* disabled if using cmake */ -#if JSON_INTEGER_IS_LONG_LONG -#ifdef _WIN32 -#define JSON_INTEGER_FORMAT "I64d" -#else -#define JSON_INTEGER_FORMAT "lld" -#endif -typedef long long json_int_t; -#else -#define JSON_INTEGER_FORMAT "ld" -typedef long json_int_t; -#endif /* JSON_INTEGER_IS_LONG_LONG */ -#endif - -#define json_typeof(json) ((json)->type) -#define json_is_object(json) ((json) && json_typeof(json) == JSON_OBJECT) -#define json_is_array(json) ((json) && json_typeof(json) == JSON_ARRAY) -#define json_is_string(json) ((json) && json_typeof(json) == JSON_STRING) -#define json_is_integer(json) ((json) && json_typeof(json) == JSON_INTEGER) -#define json_is_real(json) ((json) && json_typeof(json) == JSON_REAL) -#define json_is_number(json) (json_is_integer(json) || json_is_real(json)) -#define json_is_true(json) ((json) && json_typeof(json) == JSON_TRUE) -#define json_is_false(json) ((json) && json_typeof(json) == JSON_FALSE) -#define json_boolean_value json_is_true -#define json_is_boolean(json) (json_is_true(json) || json_is_false(json)) -#define json_is_null(json) ((json) && json_typeof(json) == JSON_NULL) - -/* construction, destruction, reference counting */ - -json_t *json_object(void); -json_t *json_array(void); -json_t *json_string(const char *value); -json_t *json_stringn(const char *value, size_t len); -json_t *json_string_nocheck(const char *value); -json_t *json_stringn_nocheck(const char *value, size_t len); -json_t *json_integer(json_int_t value); -json_t *json_real(double value); -json_t *json_true(void); -json_t *json_false(void); -#define json_boolean(val) ((val) ? json_true() : json_false()) -json_t *json_null(void); - -/* do not call JSON_INTERNAL_INCREF or JSON_INTERNAL_DECREF directly */ -#if JSON_HAVE_ATOMIC_BUILTINS -#define JSON_INTERNAL_INCREF(json) __atomic_add_fetch(&json->refcount, 1, __ATOMIC_ACQUIRE) -#define JSON_INTERNAL_DECREF(json) __atomic_sub_fetch(&json->refcount, 1, __ATOMIC_RELEASE) -#elif JSON_HAVE_SYNC_BUILTINS -#define JSON_INTERNAL_INCREF(json) __sync_add_and_fetch(&json->refcount, 1) -#define JSON_INTERNAL_DECREF(json) __sync_sub_and_fetch(&json->refcount, 1) -#else -#define JSON_INTERNAL_INCREF(json) (++json->refcount) -#define JSON_INTERNAL_DECREF(json) (--json->refcount) -#endif - -static JSON_INLINE -json_t *json_incref(json_t *json) -{ - if(json && json->refcount != (size_t)-1) - JSON_INTERNAL_INCREF(json); - return json; -} - -/* do not call json_delete directly */ -void json_delete(json_t *json); - -static JSON_INLINE -void json_decref(json_t *json) -{ - if(json && json->refcount != (size_t)-1 && JSON_INTERNAL_DECREF(json) == 0) - json_delete(json); -} - -#if defined(__GNUC__) || defined(__clang__) -static JSON_INLINE -void json_decrefp(json_t **json) -{ - if(json) { - json_decref(*json); - *json = NULL; - } -} - -#define json_auto_t json_t __attribute__((cleanup(json_decrefp))) -#endif - - -/* error reporting */ - -#define JSON_ERROR_TEXT_LENGTH 160 -#define JSON_ERROR_SOURCE_LENGTH 80 - -typedef struct json_error_t { - int line; - int column; - int position; - char source[JSON_ERROR_SOURCE_LENGTH]; - char text[JSON_ERROR_TEXT_LENGTH]; -} json_error_t; - -enum json_error_code { - json_error_unknown, - json_error_out_of_memory, - json_error_stack_overflow, - json_error_cannot_open_file, - json_error_invalid_argument, - json_error_invalid_utf8, - json_error_premature_end_of_input, - json_error_end_of_input_expected, - json_error_invalid_syntax, - json_error_invalid_format, - json_error_wrong_type, - json_error_null_character, - json_error_null_value, - json_error_null_byte_in_key, - json_error_duplicate_key, - json_error_numeric_overflow, - json_error_item_not_found, - json_error_index_out_of_range -}; - -static JSON_INLINE enum json_error_code json_error_code(const json_error_t *e) { - return (enum json_error_code)e->text[JSON_ERROR_TEXT_LENGTH - 1]; -} - -/* getters, setters, manipulation */ - -void json_object_seed(size_t seed); -size_t json_object_size(const json_t *object); -json_t *json_object_get(const json_t *object, const char *key) JANSSON_ATTRS(warn_unused_result); -int json_object_set_new(json_t *object, const char *key, json_t *value); -int json_object_set_new_nocheck(json_t *object, const char *key, json_t *value); -int json_object_del(json_t *object, const char *key); -int json_object_clear(json_t *object); -int json_object_update(json_t *object, json_t *other); -int json_object_update_existing(json_t *object, json_t *other); -int json_object_update_missing(json_t *object, json_t *other); -void *json_object_iter(json_t *object); -void *json_object_iter_at(json_t *object, const char *key); -void *json_object_key_to_iter(const char *key); -void *json_object_iter_next(json_t *object, void *iter); -const char *json_object_iter_key(void *iter); -json_t *json_object_iter_value(void *iter); -int json_object_iter_set_new(json_t *object, void *iter, json_t *value); - -#define json_object_foreach(object, key, value) \ - for(key = json_object_iter_key(json_object_iter(object)); \ - key && (value = json_object_iter_value(json_object_key_to_iter(key))); \ - key = json_object_iter_key(json_object_iter_next(object, json_object_key_to_iter(key)))) - -#define json_object_foreach_safe(object, n, key, value) \ - for(key = json_object_iter_key(json_object_iter(object)), \ - n = json_object_iter_next(object, json_object_key_to_iter(key)); \ - key && (value = json_object_iter_value(json_object_key_to_iter(key))); \ - key = json_object_iter_key(n), \ - n = json_object_iter_next(object, json_object_key_to_iter(key))) - -#define json_array_foreach(array, index, value) \ - for(index = 0; \ - index < json_array_size(array) && (value = json_array_get(array, index)); \ - index++) - -static JSON_INLINE -int json_object_set(json_t *object, const char *key, json_t *value) -{ - return json_object_set_new(object, key, json_incref(value)); -} - -static JSON_INLINE -int json_object_set_nocheck(json_t *object, const char *key, json_t *value) -{ - return json_object_set_new_nocheck(object, key, json_incref(value)); -} - -static JSON_INLINE -int json_object_iter_set(json_t *object, void *iter, json_t *value) -{ - return json_object_iter_set_new(object, iter, json_incref(value)); -} - -size_t json_array_size(const json_t *array); -json_t *json_array_get(const json_t *array, size_t index) JANSSON_ATTRS(warn_unused_result); -int json_array_set_new(json_t *array, size_t index, json_t *value); -int json_array_append_new(json_t *array, json_t *value); -int json_array_insert_new(json_t *array, size_t index, json_t *value); -int json_array_remove(json_t *array, size_t index); -int json_array_clear(json_t *array); -int json_array_extend(json_t *array, json_t *other); - -static JSON_INLINE -int json_array_set(json_t *array, size_t ind, json_t *value) -{ - return json_array_set_new(array, ind, json_incref(value)); -} - -static JSON_INLINE -int json_array_append(json_t *array, json_t *value) -{ - return json_array_append_new(array, json_incref(value)); -} - -static JSON_INLINE -int json_array_insert(json_t *array, size_t ind, json_t *value) -{ - return json_array_insert_new(array, ind, json_incref(value)); -} - -const char *json_string_value(const json_t *string); -size_t json_string_length(const json_t *string); -json_int_t json_integer_value(const json_t *integer); -double json_real_value(const json_t *real); -double json_number_value(const json_t *json); - -int json_string_set(json_t *string, const char *value); -int json_string_setn(json_t *string, const char *value, size_t len); -int json_string_set_nocheck(json_t *string, const char *value); -int json_string_setn_nocheck(json_t *string, const char *value, size_t len); -int json_integer_set(json_t *integer, json_int_t value); -int json_real_set(json_t *real, double value); - -/* pack, unpack */ - -json_t *json_pack(const char *fmt, ...) JANSSON_ATTRS(warn_unused_result); -json_t *json_pack_ex(json_error_t *error, size_t flags, const char *fmt, ...) JANSSON_ATTRS(warn_unused_result); -json_t *json_vpack_ex(json_error_t *error, size_t flags, const char *fmt, va_list ap) JANSSON_ATTRS(warn_unused_result); - -#define JSON_VALIDATE_ONLY 0x1 -#define JSON_STRICT 0x2 - -int json_unpack(json_t *root, const char *fmt, ...); -int json_unpack_ex(json_t *root, json_error_t *error, size_t flags, const char *fmt, ...); -int json_vunpack_ex(json_t *root, json_error_t *error, size_t flags, const char *fmt, va_list ap); - -/* sprintf */ - -json_t *json_sprintf(const char *fmt, ...) JANSSON_ATTRS(warn_unused_result, format(printf, 1, 2)); -json_t *json_vsprintf(const char *fmt, va_list ap) JANSSON_ATTRS(warn_unused_result, format(printf, 1, 0)); - - -/* equality */ - -int json_equal(const json_t *value1, const json_t *value2); - - -/* copying */ - -json_t *json_copy(json_t *value) JANSSON_ATTRS(warn_unused_result); -json_t *json_deep_copy(const json_t *value) JANSSON_ATTRS(warn_unused_result); - - -/* decoding */ - -#define JSON_REJECT_DUPLICATES 0x1 -#define JSON_DISABLE_EOF_CHECK 0x2 -#define JSON_DECODE_ANY 0x4 -#define JSON_DECODE_INT_AS_REAL 0x8 -#define JSON_ALLOW_NUL 0x10 - -typedef size_t (*json_load_callback_t)(void *buffer, size_t buflen, void *data); - -json_t *json_loads(const char *input, size_t flags, json_error_t *error) JANSSON_ATTRS(warn_unused_result); -json_t *json_loadb(const char *buffer, size_t buflen, size_t flags, json_error_t *error) JANSSON_ATTRS(warn_unused_result); -json_t *json_loadf(FILE *input, size_t flags, json_error_t *error) JANSSON_ATTRS(warn_unused_result); -json_t *json_loadfd(int input, size_t flags, json_error_t *error) JANSSON_ATTRS(warn_unused_result); -json_t *json_load_file(const char *path, size_t flags, json_error_t *error) JANSSON_ATTRS(warn_unused_result); -json_t *json_load_callback(json_load_callback_t callback, void *data, size_t flags, json_error_t *error) JANSSON_ATTRS(warn_unused_result); - - -/* encoding */ - -#define JSON_MAX_INDENT 0x1F -#define JSON_INDENT(n) ((n) & JSON_MAX_INDENT) -#define JSON_COMPACT 0x20 -#define JSON_ENSURE_ASCII 0x40 -#define JSON_SORT_KEYS 0x80 -#define JSON_PRESERVE_ORDER 0x100 -#define JSON_ENCODE_ANY 0x200 -#define JSON_ESCAPE_SLASH 0x400 -#define JSON_REAL_PRECISION(n) (((n) & 0x1F) << 11) -#define JSON_EMBED 0x10000 - -typedef int (*json_dump_callback_t)(const char *buffer, size_t size, void *data); - -char *json_dumps(const json_t *json, size_t flags) JANSSON_ATTRS(warn_unused_result); -size_t json_dumpb(const json_t *json, char *buffer, size_t size, size_t flags); -int json_dumpf(const json_t *json, FILE *output, size_t flags); -int json_dumpfd(const json_t *json, int output, size_t flags); -int json_dump_file(const json_t *json, const char *path, size_t flags); -int json_dump_callback(const json_t *json, json_dump_callback_t callback, void *data, size_t flags); - -/* custom memory allocation */ - -typedef void *(*json_malloc_t)(size_t); -typedef void (*json_free_t)(void *); - -void json_set_alloc_funcs(json_malloc_t malloc_fn, json_free_t free_fn); -void json_get_alloc_funcs(json_malloc_t *malloc_fn, json_free_t *free_fn); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/3party/jansson/src/jansson_config.h b/3party/jansson/src/jansson_config.h deleted file mode 100644 index a5502fc0ef..0000000000 --- a/3party/jansson/src/jansson_config.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2010-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - * - * - * This file specifies a part of the site-specific configuration for - * Jansson, namely those things that affect the public API in - * jansson.h. - * - * The CMake system will generate the jansson_config.h file and - * copy it to the build and install directories. - */ - -#ifndef JANSSON_CONFIG_H -#define JANSSON_CONFIG_H - -/* Define this so that we can disable scattered automake configuration in source files */ -#ifndef JANSSON_USING_CMAKE -#define JANSSON_USING_CMAKE -#endif - -/* Note: when using cmake, JSON_INTEGER_IS_LONG_LONG is not defined nor used, - * as we will also check for __int64 etc types. - * (the definition was used in the automake system) */ - -/* Bring in the cmake-detected defines */ -#define HAVE_STDINT_H 1 -/* #undef HAVE_INTTYPES_H */ -#define HAVE_SYS_TYPES_H 1 - -/* Include our standard type header for the integer typedef */ - -#if defined(HAVE_STDINT_H) -# include -#elif defined(HAVE_INTTYPES_H) -# include -#elif defined(HAVE_SYS_TYPES_H) -# include -#endif - - -/* If your compiler supports the inline keyword in C, JSON_INLINE is - defined to `inline', otherwise empty. In C++, the inline is always - supported. */ -#ifdef __cplusplus -#define JSON_INLINE inline -#else -#define JSON_INLINE inline -#endif - - -#define json_int_t long long -#define json_strtoint strtoll -#define JSON_INTEGER_FORMAT "lld" - - -/* If locale.h and localeconv() are available, define to 1, otherwise to 0. */ -#define JSON_HAVE_LOCALECONV 1 - -/* If __atomic builtins are available they will be used to manage - reference counts of json_t. */ -#define JSON_HAVE_ATOMIC_BUILTINS 1 - -/* If __atomic builtins are not available we try using __sync builtins - to manage reference counts of json_t. */ -#define JSON_HAVE_SYNC_BUILTINS 1 - -/* Maximum recursion depth for parsing JSON input. - This limits the depth of e.g. array-within-array constructions. */ -#define JSON_PARSER_MAX_DEPTH 2048 - -#endif diff --git a/3party/jansson/src/jansson_config.h.in b/3party/jansson/src/jansson_config.h.in deleted file mode 100644 index fe692ab4fc..0000000000 --- a/3party/jansson/src/jansson_config.h.in +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2010-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - * - * - * This file specifies a part of the site-specific configuration for - * Jansson, namely those things that affect the public API in - * jansson.h. - * - * The configure script copies this file to jansson_config.h and - * replaces @var@ substitutions by values that fit your system. If you - * cannot run the configure script, you can do the value substitution - * by hand. - */ - -#ifndef JANSSON_CONFIG_H -#define JANSSON_CONFIG_H - -/* If your compiler supports the inline keyword in C, JSON_INLINE is - defined to `inline', otherwise empty. In C++, the inline is always - supported. */ -#ifdef __cplusplus -#define JSON_INLINE inline -#else -#define JSON_INLINE @json_inline@ -#endif - -/* If your compiler supports the `long long` type and the strtoll() - library function, JSON_INTEGER_IS_LONG_LONG is defined to 1, - otherwise to 0. */ -#define JSON_INTEGER_IS_LONG_LONG @json_have_long_long@ - -/* If locale.h and localeconv() are available, define to 1, - otherwise to 0. */ -#define JSON_HAVE_LOCALECONV @json_have_localeconv@ - -/* If __atomic builtins are available they will be used to manage - reference counts of json_t. */ -#define JSON_HAVE_ATOMIC_BUILTINS @json_have_atomic_builtins@ - -/* If __atomic builtins are not available we try using __sync builtins - to manage reference counts of json_t. */ -#define JSON_HAVE_SYNC_BUILTINS @json_have_sync_builtins@ - -/* Maximum recursion depth for parsing JSON input. - This limits the depth of e.g. array-within-array constructions. */ -#define JSON_PARSER_MAX_DEPTH 2048 - -#endif diff --git a/3party/jansson/src/jansson_private.h b/3party/jansson/src/jansson_private.h deleted file mode 100644 index bf86c57468..0000000000 --- a/3party/jansson/src/jansson_private.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifndef JANSSON_PRIVATE_H -#define JANSSON_PRIVATE_H - -#include "jansson_private_config.h" -#include -#include "jansson.h" -#include "hashtable.h" -#include "strbuffer.h" - -#define container_of(ptr_, type_, member_) \ - ((type_ *)((char *)ptr_ - offsetof(type_, member_))) - -/* On some platforms, max() may already be defined */ -#ifndef max -#define max(a, b) ((a) > (b) ? (a) : (b)) -#endif - -/* va_copy is a C99 feature. In C89 implementations, it's sometimes - available as __va_copy. If not, memcpy() should do the trick. */ -#ifndef va_copy -#ifdef __va_copy -#define va_copy __va_copy -#else -#define va_copy(a, b) memcpy(&(a), &(b), sizeof(va_list)) -#endif -#endif - -typedef struct { - json_t json; - hashtable_t hashtable; -} json_object_t; - -typedef struct { - json_t json; - size_t size; - size_t entries; - json_t **table; -} json_array_t; - -typedef struct { - json_t json; - char *value; - size_t length; -} json_string_t; - -typedef struct { - json_t json; - double value; -} json_real_t; - -typedef struct { - json_t json; - json_int_t value; -} json_integer_t; - -#define json_to_object(json_) container_of(json_, json_object_t, json) -#define json_to_array(json_) container_of(json_, json_array_t, json) -#define json_to_string(json_) container_of(json_, json_string_t, json) -#define json_to_real(json_) container_of(json_, json_real_t, json) -#define json_to_integer(json_) container_of(json_, json_integer_t, json) - -/* Create a string by taking ownership of an existing buffer */ -json_t *jsonp_stringn_nocheck_own(const char *value, size_t len); - -/* Error message formatting */ -void jsonp_error_init(json_error_t *error, const char *source); -void jsonp_error_set_source(json_error_t *error, const char *source); -void jsonp_error_set(json_error_t *error, int line, int column, - size_t position, enum json_error_code code, - const char *msg, ...); -void jsonp_error_vset(json_error_t *error, int line, int column, - size_t position, enum json_error_code code, - const char *msg, va_list ap); - -/* Locale independent string<->double conversions */ -int jsonp_strtod(strbuffer_t *strbuffer, double *out); -int jsonp_dtostr(char *buffer, size_t size, double value, int prec); - -/* Wrappers for custom memory functions */ -void* jsonp_malloc(size_t size) JANSSON_ATTRS(warn_unused_result); -void jsonp_free(void *ptr); -char *jsonp_strndup(const char *str, size_t length) JANSSON_ATTRS(warn_unused_result); -char *jsonp_strdup(const char *str) JANSSON_ATTRS(warn_unused_result); -char *jsonp_strndup(const char *str, size_t len) JANSSON_ATTRS(warn_unused_result); - - -/* Windows compatibility */ -#if defined(_WIN32) || defined(WIN32) -# if defined(_MSC_VER) /* MS compiller */ -# if (_MSC_VER < 1900) && !defined(snprintf) /* snprintf not defined yet & not introduced */ -# define snprintf _snprintf -# endif -# if (_MSC_VER < 1500) && !defined(vsnprintf) /* vsnprintf not defined yet & not introduced */ -# define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a) -# endif -# else /* Other Windows compiller, old definition */ -# define snprintf _snprintf -# define vsnprintf _vsnprintf -# endif -#endif - -#endif diff --git a/3party/jansson/src/jansson_private_config.h b/3party/jansson/src/jansson_private_config.h deleted file mode 100644 index bb0c8cde3c..0000000000 --- a/3party/jansson/src/jansson_private_config.h +++ /dev/null @@ -1,53 +0,0 @@ -/* #undef HAVE_ENDIAN_H */ -#define HAVE_FCNTL_H 1 -#define HAVE_SCHED_H 1 -#define HAVE_UNISTD_H 1 -#define HAVE_SYS_PARAM_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_SYS_TIME_H 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_STDINT_H 1 - -#define HAVE_CLOSE 1 -#define HAVE_GETPID 1 -#define HAVE_GETTIMEOFDAY 1 -#define HAVE_OPEN 1 -#define HAVE_READ 1 -#define HAVE_SCHED_YIELD 1 - -#define HAVE_SYNC_BUILTINS 1 -#define HAVE_ATOMIC_BUILTINS 1 - -#define HAVE_LOCALE_H 1 -#define HAVE_SETLOCALE 1 - -#define HAVE_INT32_T 1 -#ifndef HAVE_INT32_T -# define int32_t int32_t -#endif - -#define HAVE_UINT32_T 1 -#ifndef HAVE_UINT32_T -# define uint32_t uint32_t -#endif - -#define HAVE_UINT16_T 1 -#ifndef HAVE_UINT16_T -# define uint16_t uint16_t -#endif - -#define HAVE_UINT8_T 1 -#ifndef HAVE_UINT8_T -# define uint8_t uint8_t -#endif - -#define HAVE_SSIZE_T 1 - -#ifndef HAVE_SSIZE_T -# define ssize_t -#endif - -#define USE_URANDOM 1 -#define USE_WINDOWS_CRYPTOAPI 1 - -#define INITIAL_HASHTABLE_ORDER 3 diff --git a/3party/jansson/src/load.c b/3party/jansson/src/load.c deleted file mode 100644 index 8700919fd7..0000000000 --- a/3party/jansson/src/load.c +++ /dev/null @@ -1,1153 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -#include "jansson_private.h" - -#include -#include -#include -#include -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif - -#include "jansson.h" -#include "strbuffer.h" -#include "utf.h" - -#define STREAM_STATE_OK 0 -#define STREAM_STATE_EOF -1 -#define STREAM_STATE_ERROR -2 - -#define TOKEN_INVALID -1 -#define TOKEN_EOF 0 -#define TOKEN_STRING 256 -#define TOKEN_INTEGER 257 -#define TOKEN_REAL 258 -#define TOKEN_TRUE 259 -#define TOKEN_FALSE 260 -#define TOKEN_NULL 261 - -/* Locale independent versions of isxxx() functions */ -#define l_isupper(c) ('A' <= (c) && (c) <= 'Z') -#define l_islower(c) ('a' <= (c) && (c) <= 'z') -#define l_isalpha(c) (l_isupper(c) || l_islower(c)) -#define l_isdigit(c) ('0' <= (c) && (c) <= '9') -#define l_isxdigit(c) \ - (l_isdigit(c) || ('A' <= (c) && (c) <= 'F') || ('a' <= (c) && (c) <= 'f')) - -/* Read one byte from stream, convert to unsigned char, then int, and - return. return EOF on end of file. This corresponds to the - behaviour of fgetc(). */ -typedef int (*get_func)(void *data); - -typedef struct { - get_func get; - void *data; - char buffer[5]; - size_t buffer_pos; - int state; - int line; - int column, last_column; - size_t position; -} stream_t; - -typedef struct { - stream_t stream; - strbuffer_t saved_text; - size_t flags; - size_t depth; - int token; - union { - struct { - char *val; - size_t len; - } string; - json_int_t integer; - double real; - } value; -} lex_t; - -#define stream_to_lex(stream) container_of(stream, lex_t, stream) - - -/*** error reporting ***/ - -static void error_set(json_error_t *error, const lex_t *lex, - enum json_error_code code, - const char *msg, ...) -{ - va_list ap; - char msg_text[JSON_ERROR_TEXT_LENGTH]; - char msg_with_context[JSON_ERROR_TEXT_LENGTH]; - - int line = -1, col = -1; - size_t pos = 0; - const char *result = msg_text; - - if(!error) - return; - - va_start(ap, msg); - vsnprintf(msg_text, JSON_ERROR_TEXT_LENGTH, msg, ap); - msg_text[JSON_ERROR_TEXT_LENGTH - 1] = '\0'; - va_end(ap); - - if(lex) - { - const char *saved_text = strbuffer_value(&lex->saved_text); - - line = lex->stream.line; - col = lex->stream.column; - pos = lex->stream.position; - - if(saved_text && saved_text[0]) - { - if(lex->saved_text.length <= 20) { - snprintf(msg_with_context, JSON_ERROR_TEXT_LENGTH, - "%s near '%s'", msg_text, saved_text); - msg_with_context[JSON_ERROR_TEXT_LENGTH - 1] = '\0'; - result = msg_with_context; - } - } - else - { - if(code == json_error_invalid_syntax) { - /* More specific error code for premature end of file. */ - code = json_error_premature_end_of_input; - } - if(lex->stream.state == STREAM_STATE_ERROR) { - /* No context for UTF-8 decoding errors */ - result = msg_text; - } - else { - snprintf(msg_with_context, JSON_ERROR_TEXT_LENGTH, - "%s near end of file", msg_text); - msg_with_context[JSON_ERROR_TEXT_LENGTH - 1] = '\0'; - result = msg_with_context; - } - } - } - - jsonp_error_set(error, line, col, pos, code, "%s", result); -} - - -/*** lexical analyzer ***/ - -static void -stream_init(stream_t *stream, get_func get, void *data) -{ - stream->get = get; - stream->data = data; - stream->buffer[0] = '\0'; - stream->buffer_pos = 0; - - stream->state = STREAM_STATE_OK; - stream->line = 1; - stream->column = 0; - stream->position = 0; -} - -static int stream_get(stream_t *stream, json_error_t *error) -{ - int c; - - if(stream->state != STREAM_STATE_OK) - return stream->state; - - if(!stream->buffer[stream->buffer_pos]) - { - c = stream->get(stream->data); - if(c == EOF) { - stream->state = STREAM_STATE_EOF; - return STREAM_STATE_EOF; - } - - stream->buffer[0] = c; - stream->buffer_pos = 0; - - if(0x80 <= c && c <= 0xFF) - { - /* multi-byte UTF-8 sequence */ - size_t i, count; - - count = utf8_check_first(c); - if(!count) - goto out; - - assert(count >= 2); - - for(i = 1; i < count; i++) - stream->buffer[i] = stream->get(stream->data); - - if(!utf8_check_full(stream->buffer, count, NULL)) - goto out; - - stream->buffer[count] = '\0'; - } - else - stream->buffer[1] = '\0'; - } - - c = stream->buffer[stream->buffer_pos++]; - - stream->position++; - if(c == '\n') { - stream->line++; - stream->last_column = stream->column; - stream->column = 0; - } - else if(utf8_check_first(c)) { - /* track the Unicode character column, so increment only if - this is the first character of a UTF-8 sequence */ - stream->column++; - } - - return c; - -out: - stream->state = STREAM_STATE_ERROR; - error_set(error, stream_to_lex(stream), json_error_invalid_utf8, "unable to decode byte 0x%x", c); - return STREAM_STATE_ERROR; -} - -static void stream_unget(stream_t *stream, int c) -{ - if(c == STREAM_STATE_EOF || c == STREAM_STATE_ERROR) - return; - - stream->position--; - if(c == '\n') { - stream->line--; - stream->column = stream->last_column; - } - else if(utf8_check_first(c)) - stream->column--; - - assert(stream->buffer_pos > 0); - stream->buffer_pos--; - assert(stream->buffer[stream->buffer_pos] == c); -} - - -static int lex_get(lex_t *lex, json_error_t *error) -{ - return stream_get(&lex->stream, error); -} - -static void lex_save(lex_t *lex, int c) -{ - strbuffer_append_byte(&lex->saved_text, c); -} - -static int lex_get_save(lex_t *lex, json_error_t *error) -{ - int c = stream_get(&lex->stream, error); - if(c != STREAM_STATE_EOF && c != STREAM_STATE_ERROR) - lex_save(lex, c); - return c; -} - -static void lex_unget(lex_t *lex, int c) -{ - stream_unget(&lex->stream, c); -} - -static void lex_unget_unsave(lex_t *lex, int c) -{ - if(c != STREAM_STATE_EOF && c != STREAM_STATE_ERROR) { - /* Since we treat warnings as errors, when assertions are turned - * off the "d" variable would be set but never used. Which is - * treated as an error by GCC. - */ - #ifndef NDEBUG - char d; - #endif - stream_unget(&lex->stream, c); - #ifndef NDEBUG - d = - #endif - strbuffer_pop(&lex->saved_text); - assert(c == d); - } -} - -static void lex_save_cached(lex_t *lex) -{ - while(lex->stream.buffer[lex->stream.buffer_pos] != '\0') - { - lex_save(lex, lex->stream.buffer[lex->stream.buffer_pos]); - lex->stream.buffer_pos++; - lex->stream.position++; - } -} - -static void lex_free_string(lex_t *lex) -{ - jsonp_free(lex->value.string.val); - lex->value.string.val = NULL; - lex->value.string.len = 0; -} - -/* assumes that str points to 'u' plus at least 4 valid hex digits */ -static int32_t decode_unicode_escape(const char *str) -{ - int i; - int32_t value = 0; - - assert(str[0] == 'u'); - - for(i = 1; i <= 4; i++) { - char c = str[i]; - value <<= 4; - if(l_isdigit(c)) - value += c - '0'; - else if(l_islower(c)) - value += c - 'a' + 10; - else if(l_isupper(c)) - value += c - 'A' + 10; - else - return -1; - } - - return value; -} - -static void lex_scan_string(lex_t *lex, json_error_t *error) -{ - int c; - const char *p; - char *t; - int i; - - lex->value.string.val = NULL; - lex->token = TOKEN_INVALID; - - c = lex_get_save(lex, error); - - while(c != '"') { - if(c == STREAM_STATE_ERROR) - goto out; - - else if(c == STREAM_STATE_EOF) { - error_set(error, lex, json_error_premature_end_of_input, "premature end of input"); - goto out; - } - - else if(0 <= c && c <= 0x1F) { - /* control character */ - lex_unget_unsave(lex, c); - if(c == '\n') - error_set(error, lex, json_error_invalid_syntax, "unexpected newline"); - else - error_set(error, lex, json_error_invalid_syntax, "control character 0x%x", c); - goto out; - } - - else if(c == '\\') { - c = lex_get_save(lex, error); - if(c == 'u') { - c = lex_get_save(lex, error); - for(i = 0; i < 4; i++) { - if(!l_isxdigit(c)) { - error_set(error, lex, json_error_invalid_syntax, "invalid escape"); - goto out; - } - c = lex_get_save(lex, error); - } - } - else if(c == '"' || c == '\\' || c == '/' || c == 'b' || - c == 'f' || c == 'n' || c == 'r' || c == 't') - c = lex_get_save(lex, error); - else { - error_set(error, lex, json_error_invalid_syntax, "invalid escape"); - goto out; - } - } - else - c = lex_get_save(lex, error); - } - - /* the actual value is at most of the same length as the source - string, because: - - shortcut escapes (e.g. "\t") (length 2) are converted to 1 byte - - a single \uXXXX escape (length 6) is converted to at most 3 bytes - - two \uXXXX escapes (length 12) forming an UTF-16 surrogate pair - are converted to 4 bytes - */ - t = jsonp_malloc(lex->saved_text.length + 1); - if(!t) { - /* this is not very nice, since TOKEN_INVALID is returned */ - goto out; - } - lex->value.string.val = t; - - /* + 1 to skip the " */ - p = strbuffer_value(&lex->saved_text) + 1; - - while(*p != '"') { - if(*p == '\\') { - p++; - if(*p == 'u') { - size_t length; - int32_t value; - - value = decode_unicode_escape(p); - if(value < 0) { - error_set(error, lex, json_error_invalid_syntax, "invalid Unicode escape '%.6s'", p - 1); - goto out; - } - p += 5; - - if(0xD800 <= value && value <= 0xDBFF) { - /* surrogate pair */ - if(*p == '\\' && *(p + 1) == 'u') { - int32_t value2 = decode_unicode_escape(++p); - if(value2 < 0) { - error_set(error, lex, json_error_invalid_syntax, "invalid Unicode escape '%.6s'", p - 1); - goto out; - } - p += 5; - - if(0xDC00 <= value2 && value2 <= 0xDFFF) { - /* valid second surrogate */ - value = - ((value - 0xD800) << 10) + - (value2 - 0xDC00) + - 0x10000; - } - else { - /* invalid second surrogate */ - error_set(error, lex, - json_error_invalid_syntax, - "invalid Unicode '\\u%04X\\u%04X'", - value, value2); - goto out; - } - } - else { - /* no second surrogate */ - error_set(error, lex, json_error_invalid_syntax, "invalid Unicode '\\u%04X'", - value); - goto out; - } - } - else if(0xDC00 <= value && value <= 0xDFFF) { - error_set(error, lex, json_error_invalid_syntax, "invalid Unicode '\\u%04X'", value); - goto out; - } - - if(utf8_encode(value, t, &length)) - assert(0); - t += length; - } - else { - switch(*p) { - case '"': case '\\': case '/': - *t = *p; break; - case 'b': *t = '\b'; break; - case 'f': *t = '\f'; break; - case 'n': *t = '\n'; break; - case 'r': *t = '\r'; break; - case 't': *t = '\t'; break; - default: assert(0); - } - t++; - p++; - } - } - else - *(t++) = *(p++); - } - *t = '\0'; - lex->value.string.len = t - lex->value.string.val; - lex->token = TOKEN_STRING; - return; - -out: - lex_free_string(lex); -} - -#ifndef JANSSON_USING_CMAKE /* disabled if using cmake */ -#if JSON_INTEGER_IS_LONG_LONG -#ifdef _MSC_VER /* Microsoft Visual Studio */ -#define json_strtoint _strtoi64 -#else -#define json_strtoint strtoll -#endif -#else -#define json_strtoint strtol -#endif -#endif - -static int lex_scan_number(lex_t *lex, int c, json_error_t *error) -{ - const char *saved_text; - char *end; - double doubleval; - - lex->token = TOKEN_INVALID; - - if(c == '-') - c = lex_get_save(lex, error); - - if(c == '0') { - c = lex_get_save(lex, error); - if(l_isdigit(c)) { - lex_unget_unsave(lex, c); - goto out; - } - } - else if(l_isdigit(c)) { - do - c = lex_get_save(lex, error); - while(l_isdigit(c)); - } - else { - lex_unget_unsave(lex, c); - goto out; - } - - if(!(lex->flags & JSON_DECODE_INT_AS_REAL) && - c != '.' && c != 'E' && c != 'e') - { - json_int_t intval; - - lex_unget_unsave(lex, c); - - saved_text = strbuffer_value(&lex->saved_text); - - errno = 0; - intval = json_strtoint(saved_text, &end, 10); - if(errno == ERANGE) { - if(intval < 0) - error_set(error, lex, json_error_numeric_overflow, "too big negative integer"); - else - error_set(error, lex, json_error_numeric_overflow, "too big integer"); - goto out; - } - - assert(end == saved_text + lex->saved_text.length); - - lex->token = TOKEN_INTEGER; - lex->value.integer = intval; - return 0; - } - - if(c == '.') { - c = lex_get(lex, error); - if(!l_isdigit(c)) { - lex_unget(lex, c); - goto out; - } - lex_save(lex, c); - - do - c = lex_get_save(lex, error); - while(l_isdigit(c)); - } - - if(c == 'E' || c == 'e') { - c = lex_get_save(lex, error); - if(c == '+' || c == '-') - c = lex_get_save(lex, error); - - if(!l_isdigit(c)) { - lex_unget_unsave(lex, c); - goto out; - } - - do - c = lex_get_save(lex, error); - while(l_isdigit(c)); - } - - lex_unget_unsave(lex, c); - - if(jsonp_strtod(&lex->saved_text, &doubleval)) { - error_set(error, lex, json_error_numeric_overflow, "real number overflow"); - goto out; - } - - lex->token = TOKEN_REAL; - lex->value.real = doubleval; - return 0; - -out: - return -1; -} - -static int lex_scan(lex_t *lex, json_error_t *error) -{ - int c; - - strbuffer_clear(&lex->saved_text); - - if(lex->token == TOKEN_STRING) - lex_free_string(lex); - - do - c = lex_get(lex, error); - while(c == ' ' || c == '\t' || c == '\n' || c == '\r'); - - if(c == STREAM_STATE_EOF) { - lex->token = TOKEN_EOF; - goto out; - } - - if(c == STREAM_STATE_ERROR) { - lex->token = TOKEN_INVALID; - goto out; - } - - lex_save(lex, c); - - if(c == '{' || c == '}' || c == '[' || c == ']' || c == ':' || c == ',') - lex->token = c; - - else if(c == '"') - lex_scan_string(lex, error); - - else if(l_isdigit(c) || c == '-') { - if(lex_scan_number(lex, c, error)) - goto out; - } - - else if(l_isalpha(c)) { - /* eat up the whole identifier for clearer error messages */ - const char *saved_text; - - do - c = lex_get_save(lex, error); - while(l_isalpha(c)); - lex_unget_unsave(lex, c); - - saved_text = strbuffer_value(&lex->saved_text); - - if(strcmp(saved_text, "true") == 0) - lex->token = TOKEN_TRUE; - else if(strcmp(saved_text, "false") == 0) - lex->token = TOKEN_FALSE; - else if(strcmp(saved_text, "null") == 0) - lex->token = TOKEN_NULL; - else - lex->token = TOKEN_INVALID; - } - - else { - /* save the rest of the input UTF-8 sequence to get an error - message of valid UTF-8 */ - lex_save_cached(lex); - lex->token = TOKEN_INVALID; - } - -out: - return lex->token; -} - -static char *lex_steal_string(lex_t *lex, size_t *out_len) -{ - char *result = NULL; - if(lex->token == TOKEN_STRING) { - result = lex->value.string.val; - *out_len = lex->value.string.len; - lex->value.string.val = NULL; - lex->value.string.len = 0; - } - return result; -} - -static int lex_init(lex_t *lex, get_func get, size_t flags, void *data) -{ - stream_init(&lex->stream, get, data); - if(strbuffer_init(&lex->saved_text)) - return -1; - - lex->flags = flags; - lex->token = TOKEN_INVALID; - return 0; -} - -static void lex_close(lex_t *lex) -{ - if(lex->token == TOKEN_STRING) - lex_free_string(lex); - strbuffer_close(&lex->saved_text); -} - - -/*** parser ***/ - -static json_t *parse_value(lex_t *lex, size_t flags, json_error_t *error); - -static json_t *parse_object(lex_t *lex, size_t flags, json_error_t *error) -{ - json_t *object = json_object(); - if(!object) - return NULL; - - lex_scan(lex, error); - if(lex->token == '}') - return object; - - while(1) { - char *key; - size_t len; - json_t *value; - - if(lex->token != TOKEN_STRING) { - error_set(error, lex, json_error_invalid_syntax, "string or '}' expected"); - goto error; - } - - key = lex_steal_string(lex, &len); - if(!key) - return NULL; - if (memchr(key, '\0', len)) { - jsonp_free(key); - error_set(error, lex, json_error_null_byte_in_key, "NUL byte in object key not supported"); - goto error; - } - - if(flags & JSON_REJECT_DUPLICATES) { - if(json_object_get(object, key)) { - jsonp_free(key); - error_set(error, lex, json_error_duplicate_key, "duplicate object key"); - goto error; - } - } - - lex_scan(lex, error); - if(lex->token != ':') { - jsonp_free(key); - error_set(error, lex, json_error_invalid_syntax, "':' expected"); - goto error; - } - - lex_scan(lex, error); - value = parse_value(lex, flags, error); - if(!value) { - jsonp_free(key); - goto error; - } - - if(json_object_set_new_nocheck(object, key, value)) { - jsonp_free(key); - goto error; - } - - jsonp_free(key); - - lex_scan(lex, error); - if(lex->token != ',') - break; - - lex_scan(lex, error); - } - - if(lex->token != '}') { - error_set(error, lex, json_error_invalid_syntax, "'}' expected"); - goto error; - } - - return object; - -error: - json_decref(object); - return NULL; -} - -static json_t *parse_array(lex_t *lex, size_t flags, json_error_t *error) -{ - json_t *array = json_array(); - if(!array) - return NULL; - - lex_scan(lex, error); - if(lex->token == ']') - return array; - - while(lex->token) { - json_t *elem = parse_value(lex, flags, error); - if(!elem) - goto error; - - if(json_array_append_new(array, elem)) { - goto error; - } - - lex_scan(lex, error); - if(lex->token != ',') - break; - - lex_scan(lex, error); - } - - if(lex->token != ']') { - error_set(error, lex, json_error_invalid_syntax, "']' expected"); - goto error; - } - - return array; - -error: - json_decref(array); - return NULL; -} - -static json_t *parse_value(lex_t *lex, size_t flags, json_error_t *error) -{ - json_t *json; - - lex->depth++; - if(lex->depth > JSON_PARSER_MAX_DEPTH) { - error_set(error, lex, json_error_stack_overflow, "maximum parsing depth reached"); - return NULL; - } - - switch(lex->token) { - case TOKEN_STRING: { - const char *value = lex->value.string.val; - size_t len = lex->value.string.len; - - if(!(flags & JSON_ALLOW_NUL)) { - if(memchr(value, '\0', len)) { - error_set(error, lex, json_error_null_character, "\\u0000 is not allowed without JSON_ALLOW_NUL"); - return NULL; - } - } - - json = jsonp_stringn_nocheck_own(value, len); - lex->value.string.val = NULL; - lex->value.string.len = 0; - break; - } - - case TOKEN_INTEGER: { - json = json_integer(lex->value.integer); - break; - } - - case TOKEN_REAL: { - json = json_real(lex->value.real); - break; - } - - case TOKEN_TRUE: - json = json_true(); - break; - - case TOKEN_FALSE: - json = json_false(); - break; - - case TOKEN_NULL: - json = json_null(); - break; - - case '{': - json = parse_object(lex, flags, error); - break; - - case '[': - json = parse_array(lex, flags, error); - break; - - case TOKEN_INVALID: - error_set(error, lex, json_error_invalid_syntax, "invalid token"); - return NULL; - - default: - error_set(error, lex, json_error_invalid_syntax, "unexpected token"); - return NULL; - } - - if(!json) - return NULL; - - lex->depth--; - return json; -} - -static json_t *parse_json(lex_t *lex, size_t flags, json_error_t *error) -{ - json_t *result; - - lex->depth = 0; - - lex_scan(lex, error); - if(!(flags & JSON_DECODE_ANY)) { - if(lex->token != '[' && lex->token != '{') { - error_set(error, lex, json_error_invalid_syntax, "'[' or '{' expected"); - return NULL; - } - } - - result = parse_value(lex, flags, error); - if(!result) - return NULL; - - if(!(flags & JSON_DISABLE_EOF_CHECK)) { - lex_scan(lex, error); - if(lex->token != TOKEN_EOF) { - error_set(error, lex, json_error_end_of_input_expected, "end of file expected"); - json_decref(result); - return NULL; - } - } - - if(error) { - /* Save the position even though there was no error */ - error->position = (int)lex->stream.position; - } - - return result; -} - -typedef struct -{ - const char *data; - size_t pos; -} string_data_t; - -static int string_get(void *data) -{ - char c; - string_data_t *stream = (string_data_t *)data; - c = stream->data[stream->pos]; - if(c == '\0') - return EOF; - else - { - stream->pos++; - return (unsigned char)c; - } -} - -json_t *json_loads(const char *string, size_t flags, json_error_t *error) -{ - lex_t lex; - json_t *result; - string_data_t stream_data; - - jsonp_error_init(error, ""); - - if (string == NULL) { - error_set(error, NULL, json_error_invalid_argument, "wrong arguments"); - return NULL; - } - - stream_data.data = string; - stream_data.pos = 0; - - if(lex_init(&lex, string_get, flags, (void *)&stream_data)) - return NULL; - - result = parse_json(&lex, flags, error); - - lex_close(&lex); - return result; -} - -typedef struct -{ - const char *data; - size_t len; - size_t pos; -} buffer_data_t; - -static int buffer_get(void *data) -{ - char c; - buffer_data_t *stream = data; - if(stream->pos >= stream->len) - return EOF; - - c = stream->data[stream->pos]; - stream->pos++; - return (unsigned char)c; -} - -json_t *json_loadb(const char *buffer, size_t buflen, size_t flags, json_error_t *error) -{ - lex_t lex; - json_t *result; - buffer_data_t stream_data; - - jsonp_error_init(error, ""); - - if (buffer == NULL) { - error_set(error, NULL, json_error_invalid_argument, "wrong arguments"); - return NULL; - } - - stream_data.data = buffer; - stream_data.pos = 0; - stream_data.len = buflen; - - if(lex_init(&lex, buffer_get, flags, (void *)&stream_data)) - return NULL; - - result = parse_json(&lex, flags, error); - - lex_close(&lex); - return result; -} - -json_t *json_loadf(FILE *input, size_t flags, json_error_t *error) -{ - lex_t lex; - const char *source; - json_t *result; - - if(input == stdin) - source = ""; - else - source = ""; - - jsonp_error_init(error, source); - - if (input == NULL) { - error_set(error, NULL, json_error_invalid_argument, "wrong arguments"); - return NULL; - } - - if(lex_init(&lex, (get_func)fgetc, flags, input)) - return NULL; - - result = parse_json(&lex, flags, error); - - lex_close(&lex); - return result; -} - -static int fd_get_func(int *fd) -{ -#ifdef HAVE_UNISTD_H - uint8_t c; - if (read(*fd, &c, 1) == 1) - return c; -#endif - return EOF; -} - -json_t *json_loadfd(int input, size_t flags, json_error_t *error) -{ - lex_t lex; - const char *source; - json_t *result; - -#ifdef HAVE_UNISTD_H - if(input == STDIN_FILENO) - source = ""; - else -#endif - source = ""; - - jsonp_error_init(error, source); - - if (input < 0) { - error_set(error, NULL, json_error_invalid_argument, "wrong arguments"); - return NULL; - } - - if(lex_init(&lex, (get_func)fd_get_func, flags, &input)) - return NULL; - - result = parse_json(&lex, flags, error); - - lex_close(&lex); - return result; -} - -json_t *json_load_file(const char *path, size_t flags, json_error_t *error) -{ - json_t *result; - FILE *fp; - - jsonp_error_init(error, path); - - if (path == NULL) { - error_set(error, NULL, json_error_invalid_argument, "wrong arguments"); - return NULL; - } - - fp = fopen(path, "rb"); - if(!fp) - { - error_set(error, NULL, json_error_cannot_open_file, "unable to open %s: %s", - path, strerror(errno)); - return NULL; - } - - result = json_loadf(fp, flags, error); - - fclose(fp); - return result; -} - -#define MAX_BUF_LEN 1024 - -typedef struct -{ - char data[MAX_BUF_LEN]; - size_t len; - size_t pos; - json_load_callback_t callback; - void *arg; -} callback_data_t; - -static int callback_get(void *data) -{ - char c; - callback_data_t *stream = data; - - if(stream->pos >= stream->len) { - stream->pos = 0; - stream->len = stream->callback(stream->data, MAX_BUF_LEN, stream->arg); - if(stream->len == 0 || stream->len == (size_t)-1) - return EOF; - } - - c = stream->data[stream->pos]; - stream->pos++; - return (unsigned char)c; -} - -json_t *json_load_callback(json_load_callback_t callback, void *arg, size_t flags, json_error_t *error) -{ - lex_t lex; - json_t *result; - - callback_data_t stream_data; - - memset(&stream_data, 0, sizeof(stream_data)); - stream_data.callback = callback; - stream_data.arg = arg; - - jsonp_error_init(error, ""); - - if (callback == NULL) { - error_set(error, NULL, json_error_invalid_argument, "wrong arguments"); - return NULL; - } - - if(lex_init(&lex, (get_func)callback_get, flags, &stream_data)) - return NULL; - - result = parse_json(&lex, flags, error); - - lex_close(&lex); - return result; -} diff --git a/3party/jansson/src/lookup3.h b/3party/jansson/src/lookup3.h deleted file mode 100644 index 2fe4c258f2..0000000000 --- a/3party/jansson/src/lookup3.h +++ /dev/null @@ -1,381 +0,0 @@ -/* -------------------------------------------------------------------------------- -lookup3.c, by Bob Jenkins, May 2006, Public Domain. - -These are functions for producing 32-bit hashes for hash table lookup. -hashword(), hashlittle(), hashlittle2(), hashbig(), mix(), and final() -are externally useful functions. Routines to test the hash are included -if SELF_TEST is defined. You can use this free for any purpose. It's in -the public domain. It has no warranty. - -You probably want to use hashlittle(). hashlittle() and hashbig() -hash byte arrays. hashlittle() is is faster than hashbig() on -little-endian machines. Intel and AMD are little-endian machines. -On second thought, you probably want hashlittle2(), which is identical to -hashlittle() except it returns two 32-bit hashes for the price of one. -You could implement hashbig2() if you wanted but I haven't bothered here. - -If you want to find a hash of, say, exactly 7 integers, do - a = i1; b = i2; c = i3; - mix(a,b,c); - a += i4; b += i5; c += i6; - mix(a,b,c); - a += i7; - final(a,b,c); -then use c as the hash value. If you have a variable length array of -4-byte integers to hash, use hashword(). If you have a byte array (like -a character string), use hashlittle(). If you have several byte arrays, or -a mix of things, see the comments above hashlittle(). - -Why is this so big? I read 12 bytes at a time into 3 4-byte integers, -then mix those integers. This is fast (you can do a lot more thorough -mixing with 12*3 instructions on 3 integers than you can with 3 instructions -on 1 byte), but shoehorning those bytes into integers efficiently is messy. -------------------------------------------------------------------------------- -*/ - -#include - -#ifdef HAVE_CONFIG_H -#include -#endif - -#ifdef HAVE_STDINT_H -#include /* defines uint32_t etc */ -#endif - -#ifdef HAVE_SYS_PARAM_H -#include /* attempt to define endianness */ -#endif - -#ifdef HAVE_ENDIAN_H -# include /* attempt to define endianness */ -#endif - -/* - * My best guess at if you are big-endian or little-endian. This may - * need adjustment. - */ -#if (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && \ - __BYTE_ORDER == __LITTLE_ENDIAN) || \ - (defined(i386) || defined(__i386__) || defined(__i486__) || \ - defined(__i586__) || defined(__i686__) || defined(vax) || defined(MIPSEL)) -# define HASH_LITTLE_ENDIAN 1 -# define HASH_BIG_ENDIAN 0 -#elif (defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && \ - __BYTE_ORDER == __BIG_ENDIAN) || \ - (defined(sparc) || defined(POWERPC) || defined(mc68000) || defined(sel)) -# define HASH_LITTLE_ENDIAN 0 -# define HASH_BIG_ENDIAN 1 -#else -# define HASH_LITTLE_ENDIAN 0 -# define HASH_BIG_ENDIAN 0 -#endif - -#define hashsize(n) ((uint32_t)1<<(n)) -#define hashmask(n) (hashsize(n)-1) -#define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k)))) - -/* -------------------------------------------------------------------------------- -mix -- mix 3 32-bit values reversibly. - -This is reversible, so any information in (a,b,c) before mix() is -still in (a,b,c) after mix(). - -If four pairs of (a,b,c) inputs are run through mix(), or through -mix() in reverse, there are at least 32 bits of the output that -are sometimes the same for one pair and different for another pair. -This was tested for: -* pairs that differed by one bit, by two bits, in any combination - of top bits of (a,b,c), or in any combination of bottom bits of - (a,b,c). -* "differ" is defined as +, -, ^, or ~^. For + and -, I transformed - the output delta to a Gray code (a^(a>>1)) so a string of 1's (as - is commonly produced by subtraction) look like a single 1-bit - difference. -* the base values were pseudorandom, all zero but one bit set, or - all zero plus a counter that starts at zero. - -Some k values for my "a-=c; a^=rot(c,k); c+=b;" arrangement that -satisfy this are - 4 6 8 16 19 4 - 9 15 3 18 27 15 - 14 9 3 7 17 3 -Well, "9 15 3 18 27 15" didn't quite get 32 bits diffing -for "differ" defined as + with a one-bit base and a two-bit delta. I -used http://burtleburtle.net/bob/hash/avalanche.html to choose -the operations, constants, and arrangements of the variables. - -This does not achieve avalanche. There are input bits of (a,b,c) -that fail to affect some output bits of (a,b,c), especially of a. The -most thoroughly mixed value is c, but it doesn't really even achieve -avalanche in c. - -This allows some parallelism. Read-after-writes are good at doubling -the number of bits affected, so the goal of mixing pulls in the opposite -direction as the goal of parallelism. I did what I could. Rotates -seem to cost as much as shifts on every machine I could lay my hands -on, and rotates are much kinder to the top and bottom bits, so I used -rotates. -------------------------------------------------------------------------------- -*/ -#define mix(a,b,c) \ -{ \ - a -= c; a ^= rot(c, 4); c += b; \ - b -= a; b ^= rot(a, 6); a += c; \ - c -= b; c ^= rot(b, 8); b += a; \ - a -= c; a ^= rot(c,16); c += b; \ - b -= a; b ^= rot(a,19); a += c; \ - c -= b; c ^= rot(b, 4); b += a; \ -} - -/* -------------------------------------------------------------------------------- -final -- final mixing of 3 32-bit values (a,b,c) into c - -Pairs of (a,b,c) values differing in only a few bits will usually -produce values of c that look totally different. This was tested for -* pairs that differed by one bit, by two bits, in any combination - of top bits of (a,b,c), or in any combination of bottom bits of - (a,b,c). -* "differ" is defined as +, -, ^, or ~^. For + and -, I transformed - the output delta to a Gray code (a^(a>>1)) so a string of 1's (as - is commonly produced by subtraction) look like a single 1-bit - difference. -* the base values were pseudorandom, all zero but one bit set, or - all zero plus a counter that starts at zero. - -These constants passed: - 14 11 25 16 4 14 24 - 12 14 25 16 4 14 24 -and these came close: - 4 8 15 26 3 22 24 - 10 8 15 26 3 22 24 - 11 8 15 26 3 22 24 -------------------------------------------------------------------------------- -*/ -#define final(a,b,c) \ -{ \ - c ^= b; c -= rot(b,14); \ - a ^= c; a -= rot(c,11); \ - b ^= a; b -= rot(a,25); \ - c ^= b; c -= rot(b,16); \ - a ^= c; a -= rot(c,4); \ - b ^= a; b -= rot(a,14); \ - c ^= b; c -= rot(b,24); \ -} - -/* -------------------------------------------------------------------------------- -hashlittle() -- hash a variable-length key into a 32-bit value - k : the key (the unaligned variable-length array of bytes) - length : the length of the key, counting by bytes - initval : can be any 4-byte value -Returns a 32-bit value. Every bit of the key affects every bit of -the return value. Two keys differing by one or two bits will have -totally different hash values. - -The best hash table sizes are powers of 2. There is no need to do -mod a prime (mod is sooo slow!). If you need less than 32 bits, -use a bitmask. For example, if you need only 10 bits, do - h = (h & hashmask(10)); -In which case, the hash table should have hashsize(10) elements. - -If you are hashing n strings (uint8_t **)k, do it like this: - for (i=0, h=0; i 12) - { - a += k[0]; - b += k[1]; - c += k[2]; - mix(a,b,c); - length -= 12; - k += 3; - } - - /*----------------------------- handle the last (probably partial) block */ - /* - * "k[2]&0xffffff" actually reads beyond the end of the string, but - * then masks off the part it's not allowed to read. Because the - * string is aligned, the masked-off tail is in the same word as the - * rest of the string. Every machine with memory protection I've seen - * does it on word boundaries, so is OK with this. But VALGRIND will - * still catch it and complain. The masking trick does make the hash - * noticably faster for short strings (like English words). - */ -#ifndef NO_MASKING_TRICK - - switch(length) - { - case 12: c+=k[2]; b+=k[1]; a+=k[0]; break; - case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0]; break; - case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0]; break; - case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0]; break; - case 8 : b+=k[1]; a+=k[0]; break; - case 7 : b+=k[1]&0xffffff; a+=k[0]; break; - case 6 : b+=k[1]&0xffff; a+=k[0]; break; - case 5 : b+=k[1]&0xff; a+=k[0]; break; - case 4 : a+=k[0]; break; - case 3 : a+=k[0]&0xffffff; break; - case 2 : a+=k[0]&0xffff; break; - case 1 : a+=k[0]&0xff; break; - case 0 : return c; /* zero length strings require no mixing */ - } - -#else /* make valgrind happy */ - - k8 = (const uint8_t *)k; - switch(length) - { - case 12: c+=k[2]; b+=k[1]; a+=k[0]; break; - case 11: c+=((uint32_t)k8[10])<<16; /* fall through */ - case 10: c+=((uint32_t)k8[9])<<8; /* fall through */ - case 9 : c+=k8[8]; /* fall through */ - case 8 : b+=k[1]; a+=k[0]; break; - case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */ - case 6 : b+=((uint32_t)k8[5])<<8; /* fall through */ - case 5 : b+=k8[4]; /* fall through */ - case 4 : a+=k[0]; break; - case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */ - case 2 : a+=((uint32_t)k8[1])<<8; /* fall through */ - case 1 : a+=k8[0]; break; - case 0 : return c; - } - -#endif /* !valgrind */ - - } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) { - const uint16_t *k = (const uint16_t *)key; /* read 16-bit chunks */ - const uint8_t *k8; - - /*--------------- all but last block: aligned reads and different mixing */ - while (length > 12) - { - a += k[0] + (((uint32_t)k[1])<<16); - b += k[2] + (((uint32_t)k[3])<<16); - c += k[4] + (((uint32_t)k[5])<<16); - mix(a,b,c); - length -= 12; - k += 6; - } - - /*----------------------------- handle the last (probably partial) block */ - k8 = (const uint8_t *)k; - switch(length) - { - case 12: c+=k[4]+(((uint32_t)k[5])<<16); - b+=k[2]+(((uint32_t)k[3])<<16); - a+=k[0]+(((uint32_t)k[1])<<16); - break; - case 11: c+=((uint32_t)k8[10])<<16; /* fall through */ - case 10: c+=k[4]; - b+=k[2]+(((uint32_t)k[3])<<16); - a+=k[0]+(((uint32_t)k[1])<<16); - break; - case 9 : c+=k8[8]; /* fall through */ - case 8 : b+=k[2]+(((uint32_t)k[3])<<16); - a+=k[0]+(((uint32_t)k[1])<<16); - break; - case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */ - case 6 : b+=k[2]; - a+=k[0]+(((uint32_t)k[1])<<16); - break; - case 5 : b+=k8[4]; /* fall through */ - case 4 : a+=k[0]+(((uint32_t)k[1])<<16); - break; - case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */ - case 2 : a+=k[0]; - break; - case 1 : a+=k8[0]; - break; - case 0 : return c; /* zero length requires no mixing */ - } - - } else { /* need to read the key one byte at a time */ - const uint8_t *k = (const uint8_t *)key; - - /*--------------- all but the last block: affect some 32 bits of (a,b,c) */ - while (length > 12) - { - a += k[0]; - a += ((uint32_t)k[1])<<8; - a += ((uint32_t)k[2])<<16; - a += ((uint32_t)k[3])<<24; - b += k[4]; - b += ((uint32_t)k[5])<<8; - b += ((uint32_t)k[6])<<16; - b += ((uint32_t)k[7])<<24; - c += k[8]; - c += ((uint32_t)k[9])<<8; - c += ((uint32_t)k[10])<<16; - c += ((uint32_t)k[11])<<24; - mix(a,b,c); - length -= 12; - k += 12; - } - - /*-------------------------------- last block: affect all 32 bits of (c) */ - switch(length) /* all the case statements fall through */ - { - case 12: c+=((uint32_t)k[11])<<24; /* fall through */ - case 11: c+=((uint32_t)k[10])<<16; /* fall through */ - case 10: c+=((uint32_t)k[9])<<8; /* fall through */ - case 9 : c+=k[8]; /* fall through */ - case 8 : b+=((uint32_t)k[7])<<24; /* fall through */ - case 7 : b+=((uint32_t)k[6])<<16; /* fall through */ - case 6 : b+=((uint32_t)k[5])<<8; /* fall through */ - case 5 : b+=k[4]; /* fall through */ - case 4 : a+=((uint32_t)k[3])<<24; /* fall through */ - case 3 : a+=((uint32_t)k[2])<<16; /* fall through */ - case 2 : a+=((uint32_t)k[1])<<8; /* fall through */ - case 1 : a+=k[0]; - break; - case 0 : return c; - } - } - - final(a,b,c); - return c; -} diff --git a/3party/jansson/src/memory.c b/3party/jansson/src/memory.c deleted file mode 100644 index a2be5d23d8..0000000000 --- a/3party/jansson/src/memory.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * Copyright (c) 2011-2012 Basile Starynkevitch - * - * Jansson is free software; you can redistribute it and/or modify it - * under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include - -#include "jansson.h" -#include "jansson_private.h" - -/* C89 allows these to be macros */ -#undef malloc -#undef free - -/* memory function pointers */ -static json_malloc_t do_malloc = malloc; -static json_free_t do_free = free; - -void *jsonp_malloc(size_t size) -{ - if(!size) - return NULL; - - return (*do_malloc)(size); -} - -void jsonp_free(void *ptr) -{ - if(!ptr) - return; - - (*do_free)(ptr); -} - -char *jsonp_strdup(const char *str) -{ - return jsonp_strndup(str, strlen(str)); -} - -char *jsonp_strndup(const char *str, size_t len) -{ - char *new_str; - - new_str = jsonp_malloc(len + 1); - if(!new_str) - return NULL; - - memcpy(new_str, str, len); - new_str[len] = '\0'; - return new_str; -} - -void json_set_alloc_funcs(json_malloc_t malloc_fn, json_free_t free_fn) -{ - do_malloc = malloc_fn; - do_free = free_fn; -} - -void json_get_alloc_funcs(json_malloc_t *malloc_fn, json_free_t *free_fn) -{ - if (malloc_fn) - *malloc_fn = do_malloc; - if (free_fn) - *free_fn = do_free; -} diff --git a/3party/jansson/src/pack_unpack.c b/3party/jansson/src/pack_unpack.c deleted file mode 100644 index 3b9977667e..0000000000 --- a/3party/jansson/src/pack_unpack.c +++ /dev/null @@ -1,952 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * Copyright (c) 2011-2012 Graeme Smecher - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include "jansson.h" -#include "jansson_private.h" -#include "utf.h" - -typedef struct { - int line; - int column; - size_t pos; - char token; -} token_t; - -typedef struct { - const char *start; - const char *fmt; - token_t prev_token; - token_t token; - token_t next_token; - json_error_t *error; - size_t flags; - int line; - int column; - size_t pos; - int has_error; -} scanner_t; - -#define token(scanner) ((scanner)->token.token) - -static const char * const type_names[] = { - "object", - "array", - "string", - "integer", - "real", - "true", - "false", - "null" -}; - -#define type_name(x) type_names[json_typeof(x)] - -static const char unpack_value_starters[] = "{[siIbfFOon"; - -static void scanner_init(scanner_t *s, json_error_t *error, - size_t flags, const char *fmt) -{ - s->error = error; - s->flags = flags; - s->fmt = s->start = fmt; - memset(&s->prev_token, 0, sizeof(token_t)); - memset(&s->token, 0, sizeof(token_t)); - memset(&s->next_token, 0, sizeof(token_t)); - s->line = 1; - s->column = 0; - s->pos = 0; - s->has_error = 0; -} - -static void next_token(scanner_t *s) -{ - const char *t; - s->prev_token = s->token; - - if(s->next_token.line) { - s->token = s->next_token; - s->next_token.line = 0; - return; - } - - if (!token(s) && !*s->fmt) - return; - - t = s->fmt; - s->column++; - s->pos++; - - /* skip space and ignored chars */ - while(*t == ' ' || *t == '\t' || *t == '\n' || *t == ',' || *t == ':') { - if(*t == '\n') { - s->line++; - s->column = 1; - } - else - s->column++; - - s->pos++; - t++; - } - - s->token.token = *t; - s->token.line = s->line; - s->token.column = s->column; - s->token.pos = s->pos; - - if (*t) t++; - s->fmt = t; -} - -static void prev_token(scanner_t *s) -{ - s->next_token = s->token; - s->token = s->prev_token; -} - -static void set_error(scanner_t *s, const char *source, enum json_error_code code, - const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - - jsonp_error_vset(s->error, s->token.line, s->token.column, s->token.pos, - code, fmt, ap); - - jsonp_error_set_source(s->error, source); - - va_end(ap); -} - -static json_t *pack(scanner_t *s, va_list *ap); - - -/* ours will be set to 1 if jsonp_free() must be called for the result - afterwards */ -static char *read_string(scanner_t *s, va_list *ap, - const char *purpose, size_t *out_len, int *ours, int optional) -{ - char t; - strbuffer_t strbuff; - const char *str; - size_t length; - - next_token(s); - t = token(s); - prev_token(s); - - *ours = 0; - if(t != '#' && t != '%' && t != '+') { - /* Optimize the simple case */ - str = va_arg(*ap, const char *); - - if(!str) { - if (!optional) { - set_error(s, "", json_error_null_value, "NULL %s", purpose); - s->has_error = 1; - } - return NULL; - } - - length = strlen(str); - - if(!utf8_check_string(str, length)) { - set_error(s, "", json_error_invalid_utf8, "Invalid UTF-8 %s", purpose); - s->has_error = 1; - return NULL; - } - - *out_len = length; - return (char *)str; - } else if (optional) { - set_error(s, "", json_error_invalid_format, "Cannot use '%c' on optional strings", t); - s->has_error = 1; - - return NULL; - } - - if(strbuffer_init(&strbuff)) { - set_error(s, "", json_error_out_of_memory, "Out of memory"); - s->has_error = 1; - } - - while(1) { - str = va_arg(*ap, const char *); - if(!str) { - set_error(s, "", json_error_null_value, "NULL %s", purpose); - s->has_error = 1; - } - - next_token(s); - - if(token(s) == '#') { - length = va_arg(*ap, int); - } - else if(token(s) == '%') { - length = va_arg(*ap, size_t); - } - else { - prev_token(s); - length = s->has_error ? 0 : strlen(str); - } - - if(!s->has_error && strbuffer_append_bytes(&strbuff, str, length) == -1) { - set_error(s, "", json_error_out_of_memory, "Out of memory"); - s->has_error = 1; - } - - next_token(s); - if(token(s) != '+') { - prev_token(s); - break; - } - } - - if(s->has_error) { - strbuffer_close(&strbuff); - return NULL; - } - - if(!utf8_check_string(strbuff.value, strbuff.length)) { - set_error(s, "", json_error_invalid_utf8, "Invalid UTF-8 %s", purpose); - strbuffer_close(&strbuff); - s->has_error = 1; - return NULL; - } - - *out_len = strbuff.length; - *ours = 1; - return strbuffer_steal_value(&strbuff); -} - -static json_t *pack_object(scanner_t *s, va_list *ap) -{ - json_t *object = json_object(); - next_token(s); - - while(token(s) != '}') { - char *key; - size_t len; - int ours; - json_t *value; - char valueOptional; - - if(!token(s)) { - set_error(s, "", json_error_invalid_format, "Unexpected end of format string"); - goto error; - } - - if(token(s) != 's') { - set_error(s, "", json_error_invalid_format, "Expected format 's', got '%c'", token(s)); - goto error; - } - - key = read_string(s, ap, "object key", &len, &ours, 0); - - next_token(s); - - next_token(s); - valueOptional = token(s); - prev_token(s); - - value = pack(s, ap); - if(!value) { - if(ours) - jsonp_free(key); - - if(valueOptional != '*') { - set_error(s, "", json_error_null_value, "NULL object value"); - s->has_error = 1; - } - - next_token(s); - continue; - } - - if(s->has_error) - json_decref(value); - - if(!s->has_error && json_object_set_new_nocheck(object, key, value)) { - set_error(s, "", json_error_out_of_memory, "Unable to add key \"%s\"", key); - s->has_error = 1; - } - - if(ours) - jsonp_free(key); - - next_token(s); - } - - if(!s->has_error) - return object; - -error: - json_decref(object); - return NULL; -} - -static json_t *pack_array(scanner_t *s, va_list *ap) -{ - json_t *array = json_array(); - next_token(s); - - while(token(s) != ']') { - json_t *value; - char valueOptional; - - if(!token(s)) { - set_error(s, "", json_error_invalid_format, "Unexpected end of format string"); - /* Format string errors are unrecoverable. */ - goto error; - } - - next_token(s); - valueOptional = token(s); - prev_token(s); - - value = pack(s, ap); - if(!value) { - if(valueOptional != '*') { - s->has_error = 1; - } - - next_token(s); - continue; - } - - if(s->has_error) - json_decref(value); - - if(!s->has_error && json_array_append_new(array, value)) { - set_error(s, "", json_error_out_of_memory, "Unable to append to array"); - s->has_error = 1; - } - - next_token(s); - } - - if(!s->has_error) - return array; - -error: - json_decref(array); - return NULL; -} - -static json_t *pack_string(scanner_t *s, va_list *ap) -{ - char *str; - char t; - size_t len; - int ours; - int optional; - - next_token(s); - t = token(s); - optional = t == '?' || t == '*'; - if (!optional) - prev_token(s); - - str = read_string(s, ap, "string", &len, &ours, optional); - - if (!str) - return t == '?' && !s->has_error ? json_null() : NULL; - - if (s->has_error) { - /* It's impossible to reach this point if ours != 0, do not free str. */ - return NULL; - } - - if (ours) - return jsonp_stringn_nocheck_own(str, len); - - return json_stringn_nocheck(str, len); -} - -static json_t *pack_object_inter(scanner_t *s, va_list *ap, int need_incref) -{ - json_t *json; - char ntoken; - - next_token(s); - ntoken = token(s); - - if (ntoken != '?' && ntoken != '*') - prev_token(s); - - json = va_arg(*ap, json_t *); - - if (json) - return need_incref ? json_incref(json) : json; - - switch (ntoken) { - case '?': - return json_null(); - case '*': - return NULL; - default: - break; - } - - set_error(s, "", json_error_null_value, "NULL object"); - s->has_error = 1; - return NULL; -} - -static json_t *pack_integer(scanner_t *s, json_int_t value) -{ - json_t *json = json_integer(value); - - if (!json) { - set_error(s, "", json_error_out_of_memory, "Out of memory"); - s->has_error = 1; - } - - return json; -} - -static json_t *pack_real(scanner_t *s, double value) -{ - /* Allocate without setting value so we can identify OOM error. */ - json_t *json = json_real(0.0); - - if (!json) { - set_error(s, "", json_error_out_of_memory, "Out of memory"); - s->has_error = 1; - - return NULL; - } - - if (json_real_set(json, value)) { - json_decref(json); - - set_error(s, "", json_error_numeric_overflow, "Invalid floating point value"); - s->has_error = 1; - - return NULL; - } - - return json; -} - -static json_t *pack(scanner_t *s, va_list *ap) -{ - switch(token(s)) { - case '{': - return pack_object(s, ap); - - case '[': - return pack_array(s, ap); - - case 's': /* string */ - return pack_string(s, ap); - - case 'n': /* null */ - return json_null(); - - case 'b': /* boolean */ - return va_arg(*ap, int) ? json_true() : json_false(); - - case 'i': /* integer from int */ - return pack_integer(s, va_arg(*ap, int)); - - case 'I': /* integer from json_int_t */ - return pack_integer(s, va_arg(*ap, json_int_t)); - - case 'f': /* real */ - return pack_real(s, va_arg(*ap, double)); - - case 'O': /* a json_t object; increments refcount */ - return pack_object_inter(s, ap, 1); - - case 'o': /* a json_t object; doesn't increment refcount */ - return pack_object_inter(s, ap, 0); - - default: - set_error(s, "", json_error_invalid_format, "Unexpected format character '%c'", - token(s)); - s->has_error = 1; - return NULL; - } -} - -static int unpack(scanner_t *s, json_t *root, va_list *ap); - -static int unpack_object(scanner_t *s, json_t *root, va_list *ap) -{ - int ret = -1; - int strict = 0; - int gotopt = 0; - - /* Use a set (emulated by a hashtable) to check that all object - keys are accessed. Checking that the correct number of keys - were accessed is not enough, as the same key can be unpacked - multiple times. - */ - hashtable_t key_set; - - if(hashtable_init(&key_set)) { - set_error(s, "", json_error_out_of_memory, "Out of memory"); - return -1; - } - - if(root && !json_is_object(root)) { - set_error(s, "", json_error_wrong_type, "Expected object, got %s", - type_name(root)); - goto out; - } - next_token(s); - - while(token(s) != '}') { - const char *key; - json_t *value; - int opt = 0; - - if(strict != 0) { - set_error(s, "", json_error_invalid_format, "Expected '}' after '%c', got '%c'", - (strict == 1 ? '!' : '*'), token(s)); - goto out; - } - - if(!token(s)) { - set_error(s, "", json_error_invalid_format, "Unexpected end of format string"); - goto out; - } - - if(token(s) == '!' || token(s) == '*') { - strict = (token(s) == '!' ? 1 : -1); - next_token(s); - continue; - } - - if(token(s) != 's') { - set_error(s, "", json_error_invalid_format, "Expected format 's', got '%c'", token(s)); - goto out; - } - - key = va_arg(*ap, const char *); - if(!key) { - set_error(s, "", json_error_null_value, "NULL object key"); - goto out; - } - - next_token(s); - - if(token(s) == '?') { - opt = gotopt = 1; - next_token(s); - } - - if(!root) { - /* skipping */ - value = NULL; - } - else { - value = json_object_get(root, key); - if(!value && !opt) { - set_error(s, "", json_error_item_not_found, "Object item not found: %s", key); - goto out; - } - } - - if(unpack(s, value, ap)) - goto out; - - hashtable_set(&key_set, key, json_null()); - next_token(s); - } - - if(strict == 0 && (s->flags & JSON_STRICT)) - strict = 1; - - if(root && strict == 1) { - /* We need to check that all non optional items have been parsed */ - const char *key; - /* keys_res is 1 for uninitialized, 0 for success, -1 for error. */ - int keys_res = 1; - strbuffer_t unrecognized_keys; - json_t *value; - long unpacked = 0; - - if (gotopt || json_object_size(root) != key_set.size) { - json_object_foreach(root, key, value) { - if(!hashtable_get(&key_set, key)) { - unpacked++; - - /* Save unrecognized keys for the error message */ - if (keys_res == 1) { - keys_res = strbuffer_init(&unrecognized_keys); - } else if (!keys_res) { - keys_res = strbuffer_append_bytes(&unrecognized_keys, ", ", 2); - } - - if (!keys_res) - keys_res = strbuffer_append_bytes(&unrecognized_keys, key, strlen(key)); - } - } - } - if (unpacked) { - set_error(s, "", json_error_end_of_input_expected, - "%li object item(s) left unpacked: %s", - unpacked, - keys_res ? "" : strbuffer_value(&unrecognized_keys)); - strbuffer_close(&unrecognized_keys); - goto out; - } - } - - ret = 0; - -out: - hashtable_close(&key_set); - return ret; -} - -static int unpack_array(scanner_t *s, json_t *root, va_list *ap) -{ - size_t i = 0; - int strict = 0; - - if(root && !json_is_array(root)) { - set_error(s, "", json_error_wrong_type, "Expected array, got %s", type_name(root)); - return -1; - } - next_token(s); - - while(token(s) != ']') { - json_t *value; - - if(strict != 0) { - set_error(s, "", json_error_invalid_format, "Expected ']' after '%c', got '%c'", - (strict == 1 ? '!' : '*'), - token(s)); - return -1; - } - - if(!token(s)) { - set_error(s, "", json_error_invalid_format, "Unexpected end of format string"); - return -1; - } - - if(token(s) == '!' || token(s) == '*') { - strict = (token(s) == '!' ? 1 : -1); - next_token(s); - continue; - } - - if(!strchr(unpack_value_starters, token(s))) { - set_error(s, "", json_error_invalid_format, "Unexpected format character '%c'", - token(s)); - return -1; - } - - if(!root) { - /* skipping */ - value = NULL; - } - else { - value = json_array_get(root, i); - if(!value) { - set_error(s, "", json_error_index_out_of_range, "Array index %lu out of range", - (unsigned long)i); - return -1; - } - } - - if(unpack(s, value, ap)) - return -1; - - next_token(s); - i++; - } - - if(strict == 0 && (s->flags & JSON_STRICT)) - strict = 1; - - if(root && strict == 1 && i != json_array_size(root)) { - long diff = (long)json_array_size(root) - (long)i; - set_error(s, "", json_error_end_of_input_expected, "%li array item(s) left unpacked", diff); - return -1; - } - - return 0; -} - -static int unpack(scanner_t *s, json_t *root, va_list *ap) -{ - switch(token(s)) - { - case '{': - return unpack_object(s, root, ap); - - case '[': - return unpack_array(s, root, ap); - - case 's': - if(root && !json_is_string(root)) { - set_error(s, "", json_error_wrong_type, "Expected string, got %s", - type_name(root)); - return -1; - } - - if(!(s->flags & JSON_VALIDATE_ONLY)) { - const char **str_target; - size_t *len_target = NULL; - - str_target = va_arg(*ap, const char **); - if(!str_target) { - set_error(s, "", json_error_null_value, "NULL string argument"); - return -1; - } - - next_token(s); - - if(token(s) == '%') { - len_target = va_arg(*ap, size_t *); - if(!len_target) { - set_error(s, "", json_error_null_value, "NULL string length argument"); - return -1; - } - } - else - prev_token(s); - - if(root) { - *str_target = json_string_value(root); - if(len_target) - *len_target = json_string_length(root); - } - } - return 0; - - case 'i': - if(root && !json_is_integer(root)) { - set_error(s, "", json_error_wrong_type, "Expected integer, got %s", - type_name(root)); - return -1; - } - - if(!(s->flags & JSON_VALIDATE_ONLY)) { - int *target = va_arg(*ap, int*); - if(root) - *target = (int)json_integer_value(root); - } - - return 0; - - case 'I': - if(root && !json_is_integer(root)) { - set_error(s, "", json_error_wrong_type, "Expected integer, got %s", - type_name(root)); - return -1; - } - - if(!(s->flags & JSON_VALIDATE_ONLY)) { - json_int_t *target = va_arg(*ap, json_int_t*); - if(root) - *target = json_integer_value(root); - } - - return 0; - - case 'b': - if(root && !json_is_boolean(root)) { - set_error(s, "", json_error_wrong_type, "Expected true or false, got %s", - type_name(root)); - return -1; - } - - if(!(s->flags & JSON_VALIDATE_ONLY)) { - int *target = va_arg(*ap, int*); - if(root) - *target = json_is_true(root); - } - - return 0; - - case 'f': - if(root && !json_is_real(root)) { - set_error(s, "", json_error_wrong_type, "Expected real, got %s", - type_name(root)); - return -1; - } - - if(!(s->flags & JSON_VALIDATE_ONLY)) { - double *target = va_arg(*ap, double*); - if(root) - *target = json_real_value(root); - } - - return 0; - - case 'F': - if(root && !json_is_number(root)) { - set_error(s, "", json_error_wrong_type, "Expected real or integer, got %s", - type_name(root)); - return -1; - } - - if(!(s->flags & JSON_VALIDATE_ONLY)) { - double *target = va_arg(*ap, double*); - if(root) - *target = json_number_value(root); - } - - return 0; - - case 'O': - if(root && !(s->flags & JSON_VALIDATE_ONLY)) - json_incref(root); - /* Fall through */ - - case 'o': - if(!(s->flags & JSON_VALIDATE_ONLY)) { - json_t **target = va_arg(*ap, json_t**); - if(root) - *target = root; - } - - return 0; - - case 'n': - /* Never assign, just validate */ - if(root && !json_is_null(root)) { - set_error(s, "", json_error_wrong_type, "Expected null, got %s", - type_name(root)); - return -1; - } - return 0; - - default: - set_error(s, "", json_error_invalid_format, "Unexpected format character '%c'", - token(s)); - return -1; - } -} - -json_t *json_vpack_ex(json_error_t *error, size_t flags, - const char *fmt, va_list ap) -{ - scanner_t s; - va_list ap_copy; - json_t *value; - - if(!fmt || !*fmt) { - jsonp_error_init(error, ""); - jsonp_error_set(error, -1, -1, 0, json_error_invalid_argument, "NULL or empty format string"); - return NULL; - } - jsonp_error_init(error, NULL); - - scanner_init(&s, error, flags, fmt); - next_token(&s); - - va_copy(ap_copy, ap); - value = pack(&s, &ap_copy); - va_end(ap_copy); - - /* This will cover all situations where s.has_error is true */ - if(!value) - return NULL; - - next_token(&s); - if(token(&s)) { - json_decref(value); - set_error(&s, "", json_error_invalid_format, "Garbage after format string"); - return NULL; - } - - return value; -} - -json_t *json_pack_ex(json_error_t *error, size_t flags, const char *fmt, ...) -{ - json_t *value; - va_list ap; - - va_start(ap, fmt); - value = json_vpack_ex(error, flags, fmt, ap); - va_end(ap); - - return value; -} - -json_t *json_pack(const char *fmt, ...) -{ - json_t *value; - va_list ap; - - va_start(ap, fmt); - value = json_vpack_ex(NULL, 0, fmt, ap); - va_end(ap); - - return value; -} - -int json_vunpack_ex(json_t *root, json_error_t *error, size_t flags, - const char *fmt, va_list ap) -{ - scanner_t s; - va_list ap_copy; - - if(!root) { - jsonp_error_init(error, ""); - jsonp_error_set(error, -1, -1, 0, json_error_null_value, "NULL root value"); - return -1; - } - - if(!fmt || !*fmt) { - jsonp_error_init(error, ""); - jsonp_error_set(error, -1, -1, 0, json_error_invalid_argument, "NULL or empty format string"); - return -1; - } - jsonp_error_init(error, NULL); - - scanner_init(&s, error, flags, fmt); - next_token(&s); - - va_copy(ap_copy, ap); - if(unpack(&s, root, &ap_copy)) { - va_end(ap_copy); - return -1; - } - va_end(ap_copy); - - next_token(&s); - if(token(&s)) { - set_error(&s, "", json_error_invalid_format, "Garbage after format string"); - return -1; - } - - return 0; -} - -int json_unpack_ex(json_t *root, json_error_t *error, size_t flags, const char *fmt, ...) -{ - int ret; - va_list ap; - - va_start(ap, fmt); - ret = json_vunpack_ex(root, error, flags, fmt, ap); - va_end(ap); - - return ret; -} - -int json_unpack(json_t *root, const char *fmt, ...) -{ - int ret; - va_list ap; - - va_start(ap, fmt); - ret = json_vunpack_ex(root, NULL, 0, fmt, ap); - va_end(ap); - - return ret; -} diff --git a/3party/jansson/src/strbuffer.c b/3party/jansson/src/strbuffer.c deleted file mode 100644 index 5e8c003956..0000000000 --- a/3party/jansson/src/strbuffer.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -#include -#include -#include "jansson_private.h" -#include "strbuffer.h" - -#define STRBUFFER_MIN_SIZE 16 -#define STRBUFFER_FACTOR 2 -#define STRBUFFER_SIZE_MAX ((size_t)-1) - -int strbuffer_init(strbuffer_t *strbuff) -{ - strbuff->size = STRBUFFER_MIN_SIZE; - strbuff->length = 0; - - strbuff->value = jsonp_malloc(strbuff->size); - if(!strbuff->value) - return -1; - - /* initialize to empty */ - strbuff->value[0] = '\0'; - return 0; -} - -void strbuffer_close(strbuffer_t *strbuff) -{ - if(strbuff->value) - jsonp_free(strbuff->value); - - strbuff->size = 0; - strbuff->length = 0; - strbuff->value = NULL; -} - -void strbuffer_clear(strbuffer_t *strbuff) -{ - strbuff->length = 0; - strbuff->value[0] = '\0'; -} - -const char *strbuffer_value(const strbuffer_t *strbuff) -{ - return strbuff->value; -} - -char *strbuffer_steal_value(strbuffer_t *strbuff) -{ - char *result = strbuff->value; - strbuff->value = NULL; - return result; -} - -int strbuffer_append_byte(strbuffer_t *strbuff, char byte) -{ - return strbuffer_append_bytes(strbuff, &byte, 1); -} - -int strbuffer_append_bytes(strbuffer_t *strbuff, const char *data, size_t size) -{ - if(size >= strbuff->size - strbuff->length) - { - size_t new_size; - char *new_value; - - /* avoid integer overflow */ - if (strbuff->size > STRBUFFER_SIZE_MAX / STRBUFFER_FACTOR - || size > STRBUFFER_SIZE_MAX - 1 - || strbuff->length > STRBUFFER_SIZE_MAX - 1 - size) - return -1; - - new_size = max(strbuff->size * STRBUFFER_FACTOR, - strbuff->length + size + 1); - - new_value = jsonp_malloc(new_size); - if(!new_value) - return -1; - - memcpy(new_value, strbuff->value, strbuff->length); - - jsonp_free(strbuff->value); - strbuff->value = new_value; - strbuff->size = new_size; - } - - memcpy(strbuff->value + strbuff->length, data, size); - strbuff->length += size; - strbuff->value[strbuff->length] = '\0'; - - return 0; -} - -char strbuffer_pop(strbuffer_t *strbuff) -{ - if(strbuff->length > 0) { - char c = strbuff->value[--strbuff->length]; - strbuff->value[strbuff->length] = '\0'; - return c; - } - else - return '\0'; -} diff --git a/3party/jansson/src/strbuffer.h b/3party/jansson/src/strbuffer.h deleted file mode 100644 index a0276d4b1c..0000000000 --- a/3party/jansson/src/strbuffer.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifndef STRBUFFER_H -#define STRBUFFER_H - -#include - -typedef struct { - char *value; - size_t length; /* bytes used */ - size_t size; /* bytes allocated */ -} strbuffer_t; - -int strbuffer_init(strbuffer_t *strbuff) JANSSON_ATTRS(warn_unused_result); -void strbuffer_close(strbuffer_t *strbuff); - -void strbuffer_clear(strbuffer_t *strbuff); - -const char *strbuffer_value(const strbuffer_t *strbuff); - -/* Steal the value and close the strbuffer */ -char *strbuffer_steal_value(strbuffer_t *strbuff); - -int strbuffer_append_byte(strbuffer_t *strbuff, char byte); -int strbuffer_append_bytes(strbuffer_t *strbuff, const char *data, size_t size); - -char strbuffer_pop(strbuffer_t *strbuff); - -#endif diff --git a/3party/jansson/src/strconv.c b/3party/jansson/src/strconv.c deleted file mode 100644 index 8075481e3b..0000000000 --- a/3party/jansson/src/strconv.c +++ /dev/null @@ -1,145 +0,0 @@ -#include -#include -#include -#include -#include -#ifdef __MINGW32__ -#undef __NO_ISOCEXT /* ensure stdlib.h will declare prototypes for mingw own 'strtod' replacement, called '__strtod' */ -#endif -#include "jansson_private.h" -#include "strbuffer.h" - -/* need jansson_private_config.h to get the correct snprintf */ -#ifdef HAVE_CONFIG_H -#include -#endif - -#ifdef __MINGW32__ -#define strtod __strtod -#endif - -#if JSON_HAVE_LOCALECONV -#include - -/* - - This code assumes that the decimal separator is exactly one - character. - - - If setlocale() is called by another thread between the call to - localeconv() and the call to sprintf() or strtod(), the result may - be wrong. setlocale() is not thread-safe and should not be used - this way. Multi-threaded programs should use uselocale() instead. -*/ - -static void to_locale(strbuffer_t *strbuffer) -{ - const char *point; - char *pos; - - point = localeconv()->decimal_point; - if(*point == '.') { - /* No conversion needed */ - return; - } - - pos = strchr(strbuffer->value, '.'); - if(pos) - *pos = *point; -} - -static void from_locale(char *buffer) -{ - const char *point; - char *pos; - - point = localeconv()->decimal_point; - if(*point == '.') { - /* No conversion needed */ - return; - } - - pos = strchr(buffer, *point); - if(pos) - *pos = '.'; -} -#endif - -int jsonp_strtod(strbuffer_t *strbuffer, double *out) -{ - double value; - char *end; - -#if JSON_HAVE_LOCALECONV - to_locale(strbuffer); -#endif - - errno = 0; - value = strtod(strbuffer->value, &end); - assert(end == strbuffer->value + strbuffer->length); - - if((value == HUGE_VAL || value == -HUGE_VAL) && errno == ERANGE) { - /* Overflow */ - return -1; - } - - *out = value; - return 0; -} - -int jsonp_dtostr(char *buffer, size_t size, double value, int precision) -{ - int ret; - char *start, *end; - size_t length; - - if (precision == 0) - precision = 17; - - ret = snprintf(buffer, size, "%.*g", precision, value); - if(ret < 0) - return -1; - - length = (size_t)ret; - if(length >= size) - return -1; - -#if JSON_HAVE_LOCALECONV - from_locale(buffer); -#endif - - /* Make sure there's a dot or 'e' in the output. Otherwise - a real is converted to an integer when decoding */ - if(strchr(buffer, '.') == NULL && - strchr(buffer, 'e') == NULL) - { - if(length + 3 >= size) { - /* No space to append ".0" */ - return -1; - } - buffer[length] = '.'; - buffer[length + 1] = '0'; - buffer[length + 2] = '\0'; - length += 2; - } - - /* Remove leading '+' from positive exponent. Also remove leading - zeros from exponents (added by some printf() implementations) */ - start = strchr(buffer, 'e'); - if(start) { - start++; - end = start + 1; - - if(*start == '-') - start++; - - while(*end == '0') - end++; - - if(end != start) { - memmove(start, end, length - (size_t)(end - buffer)); - length -= (size_t)(end - start); - } - } - - return (int)length; -} diff --git a/3party/jansson/src/utf.c b/3party/jansson/src/utf.c deleted file mode 100644 index be966cbd80..0000000000 --- a/3party/jansson/src/utf.c +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include "utf.h" - -int utf8_encode(int32_t codepoint, char *buffer, size_t *size) -{ - if(codepoint < 0) - return -1; - else if(codepoint < 0x80) - { - buffer[0] = (char)codepoint; - *size = 1; - } - else if(codepoint < 0x800) - { - buffer[0] = 0xC0 + ((codepoint & 0x7C0) >> 6); - buffer[1] = 0x80 + ((codepoint & 0x03F)); - *size = 2; - } - else if(codepoint < 0x10000) - { - buffer[0] = 0xE0 + ((codepoint & 0xF000) >> 12); - buffer[1] = 0x80 + ((codepoint & 0x0FC0) >> 6); - buffer[2] = 0x80 + ((codepoint & 0x003F)); - *size = 3; - } - else if(codepoint <= 0x10FFFF) - { - buffer[0] = 0xF0 + ((codepoint & 0x1C0000) >> 18); - buffer[1] = 0x80 + ((codepoint & 0x03F000) >> 12); - buffer[2] = 0x80 + ((codepoint & 0x000FC0) >> 6); - buffer[3] = 0x80 + ((codepoint & 0x00003F)); - *size = 4; - } - else - return -1; - - return 0; -} - -size_t utf8_check_first(char byte) -{ - unsigned char u = (unsigned char)byte; - - if(u < 0x80) - return 1; - - if(0x80 <= u && u <= 0xBF) { - /* second, third or fourth byte of a multi-byte - sequence, i.e. a "continuation byte" */ - return 0; - } - else if(u == 0xC0 || u == 0xC1) { - /* overlong encoding of an ASCII byte */ - return 0; - } - else if(0xC2 <= u && u <= 0xDF) { - /* 2-byte sequence */ - return 2; - } - - else if(0xE0 <= u && u <= 0xEF) { - /* 3-byte sequence */ - return 3; - } - else if(0xF0 <= u && u <= 0xF4) { - /* 4-byte sequence */ - return 4; - } - else { /* u >= 0xF5 */ - /* Restricted (start of 4-, 5- or 6-byte sequence) or invalid - UTF-8 */ - return 0; - } -} - -size_t utf8_check_full(const char *buffer, size_t size, int32_t *codepoint) -{ - size_t i; - int32_t value = 0; - unsigned char u = (unsigned char)buffer[0]; - - if(size == 2) - { - value = u & 0x1F; - } - else if(size == 3) - { - value = u & 0xF; - } - else if(size == 4) - { - value = u & 0x7; - } - else - return 0; - - for(i = 1; i < size; i++) - { - u = (unsigned char)buffer[i]; - - if(u < 0x80 || u > 0xBF) { - /* not a continuation byte */ - return 0; - } - - value = (value << 6) + (u & 0x3F); - } - - if(value > 0x10FFFF) { - /* not in Unicode range */ - return 0; - } - - else if(0xD800 <= value && value <= 0xDFFF) { - /* invalid code point (UTF-16 surrogate halves) */ - return 0; - } - - else if((size == 2 && value < 0x80) || - (size == 3 && value < 0x800) || - (size == 4 && value < 0x10000)) { - /* overlong encoding */ - return 0; - } - - if(codepoint) - *codepoint = value; - - return 1; -} - -const char *utf8_iterate(const char *buffer, size_t bufsize, int32_t *codepoint) -{ - size_t count; - int32_t value; - - if(!bufsize) - return buffer; - - count = utf8_check_first(buffer[0]); - if(count <= 0) - return NULL; - - if(count == 1) - value = (unsigned char)buffer[0]; - else - { - if(count > bufsize || !utf8_check_full(buffer, count, &value)) - return NULL; - } - - if(codepoint) - *codepoint = value; - - return buffer + count; -} - -int utf8_check_string(const char *string, size_t length) -{ - size_t i; - - for(i = 0; i < length; i++) - { - size_t count = utf8_check_first(string[i]); - if(count == 0) - return 0; - else if(count > 1) - { - if(count > length - i) - return 0; - - if(!utf8_check_full(&string[i], count, NULL)) - return 0; - - i += count - 1; - } - } - - return 1; -} diff --git a/3party/jansson/src/utf.h b/3party/jansson/src/utf.h deleted file mode 100644 index f4cda08dbc..0000000000 --- a/3party/jansson/src/utf.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifndef UTF_H -#define UTF_H - -#ifdef HAVE_CONFIG_H -#include -#endif - - -#ifdef _WIN32 -typedef int int32_t; -#else /* !_WIN32 */ -/* Assume a standard environment */ -#include -#endif /* _WIN32 */ - -#ifdef HAVE_STDINT_H -#include -#endif - - -int utf8_encode(int32_t codepoint, char *buffer, size_t *size); - -size_t utf8_check_first(char byte); -size_t utf8_check_full(const char *buffer, size_t size, int32_t *codepoint); -const char *utf8_iterate(const char *buffer, size_t size, int32_t *codepoint); - -int utf8_check_string(const char *string, size_t length); - -#endif diff --git a/3party/jansson/src/value.c b/3party/jansson/src/value.c deleted file mode 100644 index 3f964a041c..0000000000 --- a/3party/jansson/src/value.c +++ /dev/null @@ -1,1074 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include - -#ifdef HAVE_STDINT_H -#include -#endif - -#include "jansson.h" -#include "hashtable.h" -#include "jansson_private.h" -#include "utf.h" - -/* Work around nonstandard isnan() and isinf() implementations */ -#ifndef isnan -#ifndef __sun -static JSON_INLINE int isnan(double x) { return x != x; } -#endif -#endif -#ifndef isinf -static JSON_INLINE int isinf(double x) { return !isnan(x) && isnan(x - x); } -#endif - -static JSON_INLINE void json_init(json_t *json, json_type type) -{ - json->type = type; - json->refcount = 1; -} - - -/*** object ***/ - -extern volatile uint32_t hashtable_seed; - -json_t *json_object(void) -{ - json_object_t *object = jsonp_malloc(sizeof(json_object_t)); - if(!object) - return NULL; - - if (!hashtable_seed) { - /* Autoseed */ - json_object_seed(0); - } - - json_init(&object->json, JSON_OBJECT); - - if(hashtable_init(&object->hashtable)) - { - jsonp_free(object); - return NULL; - } - - return &object->json; -} - -static void json_delete_object(json_object_t *object) -{ - hashtable_close(&object->hashtable); - jsonp_free(object); -} - -size_t json_object_size(const json_t *json) -{ - json_object_t *object; - - if(!json_is_object(json)) - return 0; - - object = json_to_object(json); - return object->hashtable.size; -} - -json_t *json_object_get(const json_t *json, const char *key) -{ - json_object_t *object; - - if(!key || !json_is_object(json)) - return NULL; - - object = json_to_object(json); - return hashtable_get(&object->hashtable, key); -} - -int json_object_set_new_nocheck(json_t *json, const char *key, json_t *value) -{ - json_object_t *object; - - if(!value) - return -1; - - if(!key || !json_is_object(json) || json == value) - { - json_decref(value); - return -1; - } - object = json_to_object(json); - - if(hashtable_set(&object->hashtable, key, value)) - { - json_decref(value); - return -1; - } - - return 0; -} - -int json_object_set_new(json_t *json, const char *key, json_t *value) -{ - if(!key || !utf8_check_string(key, strlen(key))) - { - json_decref(value); - return -1; - } - - return json_object_set_new_nocheck(json, key, value); -} - -int json_object_del(json_t *json, const char *key) -{ - json_object_t *object; - - if(!key || !json_is_object(json)) - return -1; - - object = json_to_object(json); - return hashtable_del(&object->hashtable, key); -} - -int json_object_clear(json_t *json) -{ - json_object_t *object; - - if(!json_is_object(json)) - return -1; - - object = json_to_object(json); - hashtable_clear(&object->hashtable); - - return 0; -} - -int json_object_update(json_t *object, json_t *other) -{ - const char *key; - json_t *value; - - if(!json_is_object(object) || !json_is_object(other)) - return -1; - - json_object_foreach(other, key, value) { - if(json_object_set_nocheck(object, key, value)) - return -1; - } - - return 0; -} - -int json_object_update_existing(json_t *object, json_t *other) -{ - const char *key; - json_t *value; - - if(!json_is_object(object) || !json_is_object(other)) - return -1; - - json_object_foreach(other, key, value) { - if(json_object_get(object, key)) - json_object_set_nocheck(object, key, value); - } - - return 0; -} - -int json_object_update_missing(json_t *object, json_t *other) -{ - const char *key; - json_t *value; - - if(!json_is_object(object) || !json_is_object(other)) - return -1; - - json_object_foreach(other, key, value) { - if(!json_object_get(object, key)) - json_object_set_nocheck(object, key, value); - } - - return 0; -} - -void *json_object_iter(json_t *json) -{ - json_object_t *object; - - if(!json_is_object(json)) - return NULL; - - object = json_to_object(json); - return hashtable_iter(&object->hashtable); -} - -void *json_object_iter_at(json_t *json, const char *key) -{ - json_object_t *object; - - if(!key || !json_is_object(json)) - return NULL; - - object = json_to_object(json); - return hashtable_iter_at(&object->hashtable, key); -} - -void *json_object_iter_next(json_t *json, void *iter) -{ - json_object_t *object; - - if(!json_is_object(json) || iter == NULL) - return NULL; - - object = json_to_object(json); - return hashtable_iter_next(&object->hashtable, iter); -} - -const char *json_object_iter_key(void *iter) -{ - if(!iter) - return NULL; - - return hashtable_iter_key(iter); -} - -json_t *json_object_iter_value(void *iter) -{ - if(!iter) - return NULL; - - return (json_t *)hashtable_iter_value(iter); -} - -int json_object_iter_set_new(json_t *json, void *iter, json_t *value) -{ - if(!json_is_object(json) || !iter || !value) - { - json_decref(value); - return -1; - } - - hashtable_iter_set(iter, value); - return 0; -} - -void *json_object_key_to_iter(const char *key) -{ - if(!key) - return NULL; - - return hashtable_key_to_iter(key); -} - -static int json_object_equal(const json_t *object1, const json_t *object2) -{ - const char *key; - const json_t *value1, *value2; - - if(json_object_size(object1) != json_object_size(object2)) - return 0; - - json_object_foreach((json_t *)object1, key, value1) { - value2 = json_object_get(object2, key); - - if(!json_equal(value1, value2)) - return 0; - } - - return 1; -} - -static json_t *json_object_copy(json_t *object) -{ - json_t *result; - - const char *key; - json_t *value; - - result = json_object(); - if(!result) - return NULL; - - json_object_foreach(object, key, value) - json_object_set_nocheck(result, key, value); - - return result; -} - -static json_t *json_object_deep_copy(const json_t *object) -{ - json_t *result; - void *iter; - - result = json_object(); - if(!result) - return NULL; - - /* Cannot use json_object_foreach because object has to be cast - non-const */ - iter = json_object_iter((json_t *)object); - while(iter) { - const char *key; - const json_t *value; - key = json_object_iter_key(iter); - value = json_object_iter_value(iter); - - json_object_set_new_nocheck(result, key, json_deep_copy(value)); - iter = json_object_iter_next((json_t *)object, iter); - } - - return result; -} - - -/*** array ***/ - -json_t *json_array(void) -{ - json_array_t *array = jsonp_malloc(sizeof(json_array_t)); - if(!array) - return NULL; - json_init(&array->json, JSON_ARRAY); - - array->entries = 0; - array->size = 8; - - array->table = jsonp_malloc(array->size * sizeof(json_t *)); - if(!array->table) { - jsonp_free(array); - return NULL; - } - - return &array->json; -} - -static void json_delete_array(json_array_t *array) -{ - size_t i; - - for(i = 0; i < array->entries; i++) - json_decref(array->table[i]); - - jsonp_free(array->table); - jsonp_free(array); -} - -size_t json_array_size(const json_t *json) -{ - if(!json_is_array(json)) - return 0; - - return json_to_array(json)->entries; -} - -json_t *json_array_get(const json_t *json, size_t index) -{ - json_array_t *array; - if(!json_is_array(json)) - return NULL; - array = json_to_array(json); - - if(index >= array->entries) - return NULL; - - return array->table[index]; -} - -int json_array_set_new(json_t *json, size_t index, json_t *value) -{ - json_array_t *array; - - if(!value) - return -1; - - if(!json_is_array(json) || json == value) - { - json_decref(value); - return -1; - } - array = json_to_array(json); - - if(index >= array->entries) - { - json_decref(value); - return -1; - } - - json_decref(array->table[index]); - array->table[index] = value; - - return 0; -} - -static void array_move(json_array_t *array, size_t dest, - size_t src, size_t count) -{ - memmove(&array->table[dest], &array->table[src], count * sizeof(json_t *)); -} - -static void array_copy(json_t **dest, size_t dpos, - json_t **src, size_t spos, - size_t count) -{ - memcpy(&dest[dpos], &src[spos], count * sizeof(json_t *)); -} - -static json_t **json_array_grow(json_array_t *array, - size_t amount, - int copy) -{ - size_t new_size; - json_t **old_table, **new_table; - - if(array->entries + amount <= array->size) - return array->table; - - old_table = array->table; - - new_size = max(array->size + amount, array->size * 2); - new_table = jsonp_malloc(new_size * sizeof(json_t *)); - if(!new_table) - return NULL; - - array->size = new_size; - array->table = new_table; - - if(copy) { - array_copy(array->table, 0, old_table, 0, array->entries); - jsonp_free(old_table); - return array->table; - } - - return old_table; -} - -int json_array_append_new(json_t *json, json_t *value) -{ - json_array_t *array; - - if(!value) - return -1; - - if(!json_is_array(json) || json == value) - { - json_decref(value); - return -1; - } - array = json_to_array(json); - - if(!json_array_grow(array, 1, 1)) { - json_decref(value); - return -1; - } - - array->table[array->entries] = value; - array->entries++; - - return 0; -} - -int json_array_insert_new(json_t *json, size_t index, json_t *value) -{ - json_array_t *array; - json_t **old_table; - - if(!value) - return -1; - - if(!json_is_array(json) || json == value) { - json_decref(value); - return -1; - } - array = json_to_array(json); - - if(index > array->entries) { - json_decref(value); - return -1; - } - - old_table = json_array_grow(array, 1, 0); - if(!old_table) { - json_decref(value); - return -1; - } - - if(old_table != array->table) { - array_copy(array->table, 0, old_table, 0, index); - array_copy(array->table, index + 1, old_table, index, - array->entries - index); - jsonp_free(old_table); - } - else - array_move(array, index + 1, index, array->entries - index); - - array->table[index] = value; - array->entries++; - - return 0; -} - -int json_array_remove(json_t *json, size_t index) -{ - json_array_t *array; - - if(!json_is_array(json)) - return -1; - array = json_to_array(json); - - if(index >= array->entries) - return -1; - - json_decref(array->table[index]); - - /* If we're removing the last element, nothing has to be moved */ - if(index < array->entries - 1) - array_move(array, index, index + 1, array->entries - index - 1); - - array->entries--; - - return 0; -} - -int json_array_clear(json_t *json) -{ - json_array_t *array; - size_t i; - - if(!json_is_array(json)) - return -1; - array = json_to_array(json); - - for(i = 0; i < array->entries; i++) - json_decref(array->table[i]); - - array->entries = 0; - return 0; -} - -int json_array_extend(json_t *json, json_t *other_json) -{ - json_array_t *array, *other; - size_t i; - - if(!json_is_array(json) || !json_is_array(other_json)) - return -1; - array = json_to_array(json); - other = json_to_array(other_json); - - if(!json_array_grow(array, other->entries, 1)) - return -1; - - for(i = 0; i < other->entries; i++) - json_incref(other->table[i]); - - array_copy(array->table, array->entries, other->table, 0, other->entries); - - array->entries += other->entries; - return 0; -} - -static int json_array_equal(const json_t *array1, const json_t *array2) -{ - size_t i, size; - - size = json_array_size(array1); - if(size != json_array_size(array2)) - return 0; - - for(i = 0; i < size; i++) - { - json_t *value1, *value2; - - value1 = json_array_get(array1, i); - value2 = json_array_get(array2, i); - - if(!json_equal(value1, value2)) - return 0; - } - - return 1; -} - -static json_t *json_array_copy(json_t *array) -{ - json_t *result; - size_t i; - - result = json_array(); - if(!result) - return NULL; - - for(i = 0; i < json_array_size(array); i++) - json_array_append(result, json_array_get(array, i)); - - return result; -} - -static json_t *json_array_deep_copy(const json_t *array) -{ - json_t *result; - size_t i; - - result = json_array(); - if(!result) - return NULL; - - for(i = 0; i < json_array_size(array); i++) - json_array_append_new(result, json_deep_copy(json_array_get(array, i))); - - return result; -} - -/*** string ***/ - -static json_t *string_create(const char *value, size_t len, int own) -{ - char *v; - json_string_t *string; - - if(!value) - return NULL; - - if(own) - v = (char *)value; - else { - v = jsonp_strndup(value, len); - if(!v) - return NULL; - } - - string = jsonp_malloc(sizeof(json_string_t)); - if(!string) { - jsonp_free(v); - return NULL; - } - json_init(&string->json, JSON_STRING); - string->value = v; - string->length = len; - - return &string->json; -} - -json_t *json_string_nocheck(const char *value) -{ - if(!value) - return NULL; - - return string_create(value, strlen(value), 0); -} - -json_t *json_stringn_nocheck(const char *value, size_t len) -{ - return string_create(value, len, 0); -} - -/* this is private; "steal" is not a public API concept */ -json_t *jsonp_stringn_nocheck_own(const char *value, size_t len) -{ - return string_create(value, len, 1); -} - -json_t *json_string(const char *value) -{ - if(!value) - return NULL; - - return json_stringn(value, strlen(value)); -} - -json_t *json_stringn(const char *value, size_t len) -{ - if(!value || !utf8_check_string(value, len)) - return NULL; - - return json_stringn_nocheck(value, len); -} - -const char *json_string_value(const json_t *json) -{ - if(!json_is_string(json)) - return NULL; - - return json_to_string(json)->value; -} - -size_t json_string_length(const json_t *json) -{ - if(!json_is_string(json)) - return 0; - - return json_to_string(json)->length; -} - -int json_string_set_nocheck(json_t *json, const char *value) -{ - if(!value) - return -1; - - return json_string_setn_nocheck(json, value, strlen(value)); -} - -int json_string_setn_nocheck(json_t *json, const char *value, size_t len) -{ - char *dup; - json_string_t *string; - - if(!json_is_string(json) || !value) - return -1; - - dup = jsonp_strndup(value, len); - if(!dup) - return -1; - - string = json_to_string(json); - jsonp_free(string->value); - string->value = dup; - string->length = len; - - return 0; -} - -int json_string_set(json_t *json, const char *value) -{ - if(!value) - return -1; - - return json_string_setn(json, value, strlen(value)); -} - -int json_string_setn(json_t *json, const char *value, size_t len) -{ - if(!value || !utf8_check_string(value, len)) - return -1; - - return json_string_setn_nocheck(json, value, len); -} - -static void json_delete_string(json_string_t *string) -{ - jsonp_free(string->value); - jsonp_free(string); -} - -static int json_string_equal(const json_t *string1, const json_t *string2) -{ - json_string_t *s1, *s2; - - s1 = json_to_string(string1); - s2 = json_to_string(string2); - return s1->length == s2->length && !memcmp(s1->value, s2->value, s1->length); -} - -static json_t *json_string_copy(const json_t *string) -{ - json_string_t *s; - - s = json_to_string(string); - return json_stringn_nocheck(s->value, s->length); -} - -json_t *json_vsprintf(const char *fmt, va_list ap) { - json_t *json = NULL; - int length; - char *buf; - va_list aq; - va_copy(aq, ap); - - length = vsnprintf(NULL, 0, fmt, ap); - if (length == 0) { - json = json_string(""); - goto out; - } - - buf = jsonp_malloc(length + 1); - if (!buf) - goto out; - - vsnprintf(buf, length + 1, fmt, aq); - if (!utf8_check_string(buf, length)) { - jsonp_free(buf); - goto out; - } - - json = jsonp_stringn_nocheck_own(buf, length); - -out: - va_end(aq); - return json; -} - -json_t *json_sprintf(const char *fmt, ...) { - json_t *result; - va_list ap; - - va_start(ap, fmt); - result = json_vsprintf(fmt, ap); - va_end(ap); - - return result; -} - - -/*** integer ***/ - -json_t *json_integer(json_int_t value) -{ - json_integer_t *integer = jsonp_malloc(sizeof(json_integer_t)); - if(!integer) - return NULL; - json_init(&integer->json, JSON_INTEGER); - - integer->value = value; - return &integer->json; -} - -json_int_t json_integer_value(const json_t *json) -{ - if(!json_is_integer(json)) - return 0; - - return json_to_integer(json)->value; -} - -int json_integer_set(json_t *json, json_int_t value) -{ - if(!json_is_integer(json)) - return -1; - - json_to_integer(json)->value = value; - - return 0; -} - -static void json_delete_integer(json_integer_t *integer) -{ - jsonp_free(integer); -} - -static int json_integer_equal(const json_t *integer1, const json_t *integer2) -{ - return json_integer_value(integer1) == json_integer_value(integer2); -} - -static json_t *json_integer_copy(const json_t *integer) -{ - return json_integer(json_integer_value(integer)); -} - - -/*** real ***/ - -json_t *json_real(double value) -{ - json_real_t *real; - - if(isnan(value) || isinf(value)) - return NULL; - - real = jsonp_malloc(sizeof(json_real_t)); - if(!real) - return NULL; - json_init(&real->json, JSON_REAL); - - real->value = value; - return &real->json; -} - -double json_real_value(const json_t *json) -{ - if(!json_is_real(json)) - return 0; - - return json_to_real(json)->value; -} - -int json_real_set(json_t *json, double value) -{ - if(!json_is_real(json) || isnan(value) || isinf(value)) - return -1; - - json_to_real(json)->value = value; - - return 0; -} - -static void json_delete_real(json_real_t *real) -{ - jsonp_free(real); -} - -static int json_real_equal(const json_t *real1, const json_t *real2) -{ - return json_real_value(real1) == json_real_value(real2); -} - -static json_t *json_real_copy(const json_t *real) -{ - return json_real(json_real_value(real)); -} - - -/*** number ***/ - -double json_number_value(const json_t *json) -{ - if(json_is_integer(json)) - return (double)json_integer_value(json); - else if(json_is_real(json)) - return json_real_value(json); - else - return 0.0; -} - - -/*** simple values ***/ - -json_t *json_true(void) -{ - static json_t the_true = {JSON_TRUE, (size_t)-1}; - return &the_true; -} - - -json_t *json_false(void) -{ - static json_t the_false = {JSON_FALSE, (size_t)-1}; - return &the_false; -} - - -json_t *json_null(void) -{ - static json_t the_null = {JSON_NULL, (size_t)-1}; - return &the_null; -} - - -/*** deletion ***/ - -void json_delete(json_t *json) -{ - if (!json) - return; - - switch(json_typeof(json)) { - case JSON_OBJECT: - json_delete_object(json_to_object(json)); - break; - case JSON_ARRAY: - json_delete_array(json_to_array(json)); - break; - case JSON_STRING: - json_delete_string(json_to_string(json)); - break; - case JSON_INTEGER: - json_delete_integer(json_to_integer(json)); - break; - case JSON_REAL: - json_delete_real(json_to_real(json)); - break; - default: - return; - } - - /* json_delete is not called for true, false or null */ -} - - -/*** equality ***/ - -int json_equal(const json_t *json1, const json_t *json2) -{ - if(!json1 || !json2) - return 0; - - if(json_typeof(json1) != json_typeof(json2)) - return 0; - - /* this covers true, false and null as they are singletons */ - if(json1 == json2) - return 1; - - switch(json_typeof(json1)) { - case JSON_OBJECT: - return json_object_equal(json1, json2); - case JSON_ARRAY: - return json_array_equal(json1, json2); - case JSON_STRING: - return json_string_equal(json1, json2); - case JSON_INTEGER: - return json_integer_equal(json1, json2); - case JSON_REAL: - return json_real_equal(json1, json2); - default: - return 0; - } -} - - -/*** copying ***/ - -json_t *json_copy(json_t *json) -{ - if(!json) - return NULL; - - switch(json_typeof(json)) { - case JSON_OBJECT: - return json_object_copy(json); - case JSON_ARRAY: - return json_array_copy(json); - case JSON_STRING: - return json_string_copy(json); - case JSON_INTEGER: - return json_integer_copy(json); - case JSON_REAL: - return json_real_copy(json); - case JSON_TRUE: - case JSON_FALSE: - case JSON_NULL: - return json; - default: - return NULL; - } -} - -json_t *json_deep_copy(const json_t *json) -{ - if(!json) - return NULL; - - switch(json_typeof(json)) { - case JSON_OBJECT: - return json_object_deep_copy(json); - case JSON_ARRAY: - return json_array_deep_copy(json); - /* for the rest of the types, deep copying doesn't differ from - shallow copying */ - case JSON_STRING: - return json_string_copy(json); - case JSON_INTEGER: - return json_integer_copy(json); - case JSON_REAL: - return json_real_copy(json); - case JSON_TRUE: - case JSON_FALSE: - case JSON_NULL: - return (json_t *)json; - default: - return NULL; - } -} diff --git a/3party/jansson/test/.gitignore b/3party/jansson/test/.gitignore deleted file mode 100644 index 401ca5c19f..0000000000 --- a/3party/jansson/test/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -logs -bin/json_process -suites/api/test_array -suites/api/test_chaos -suites/api/test_copy -suites/api/test_cpp -suites/api/test_dump -suites/api/test_dump_callback -suites/api/test_equal -suites/api/test_load -suites/api/test_load_callback -suites/api/test_loadb -suites/api/test_memory_funcs -suites/api/test_number -suites/api/test_object -suites/api/test_pack -suites/api/test_simple -suites/api/test_sprintf -suites/api/test_unpack -run-suites.log -run-suites.trs -test-suite.log - diff --git a/3party/jansson/test/Makefile.am b/3party/jansson/test/Makefile.am deleted file mode 100644 index 86d1614e06..0000000000 --- a/3party/jansson/test/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -SUBDIRS = bin suites -EXTRA_DIST = scripts run-suites - -TESTS = run-suites -TESTS_ENVIRONMENT = \ - top_srcdir=$(top_srcdir) \ - top_builddir=$(top_builddir) - -clean-local: - rm -rf logs diff --git a/3party/jansson/test/bin/Makefile.am b/3party/jansson/test/bin/Makefile.am deleted file mode 100644 index 63b6dce7e2..0000000000 --- a/3party/jansson/test/bin/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -check_PROGRAMS = json_process - -AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src -LDFLAGS = -static # for speed and Valgrind -LDADD = $(top_builddir)/src/libjansson.la diff --git a/3party/jansson/test/bin/json_process.c b/3party/jansson/test/bin/json_process.c deleted file mode 100644 index 0b9ece8a92..0000000000 --- a/3party/jansson/test/bin/json_process.c +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include - -#ifdef HAVE_LOCALE_H -#include - #endif - -#if _WIN32 -#include /* for _setmode() */ -#include /* for _O_BINARY */ - -static const char dir_sep = '\\'; -#else -static const char dir_sep = '/'; -#endif - - -struct config { - int indent; - int compact; - int preserve_order; - int ensure_ascii; - int sort_keys; - int strip; - int use_env; - int have_hashseed; - int hashseed; - int precision; -} conf; - -#define l_isspace(c) ((c) == ' ' || (c) == '\n' || (c) == '\r' || (c) == '\t') - -/* Return a pointer to the first non-whitespace character of str. - Modifies str so that all trailing whitespace characters are - replaced by '\0'. */ -static const char *strip(char *str) -{ - size_t length; - char *result = str; - while (*result && l_isspace(*result)) - result++; - - length = strlen(result); - if (length == 0) - return result; - - while (l_isspace(result[length - 1])) - result[--length] = '\0'; - - return result; -} - - -static char *loadfile(FILE *file) -{ - long fsize, ret; - char *buf; - - fseek(file, 0, SEEK_END); - fsize = ftell(file); - fseek(file, 0, SEEK_SET); - - buf = malloc(fsize+1); - ret = fread(buf, 1, fsize, file); - if (ret != fsize) - exit(1); - buf[fsize] = '\0'; - - return buf; -} - - -static void read_conf(FILE *conffile) -{ - char *buffer, *line, *val; - - buffer = loadfile(conffile); - for (line = strtok(buffer, "\r\n"); line; line = strtok(NULL, "\r\n")) { - if (!strncmp(line, "export ", 7)) - continue; - val = strchr(line, '='); - if (!val) { - printf("invalid configuration line\n"); - break; - } - *val++ = '\0'; - - if (!strcmp(line, "JSON_INDENT")) - conf.indent = atoi(val); - if (!strcmp(line, "JSON_COMPACT")) - conf.compact = atoi(val); - if (!strcmp(line, "JSON_ENSURE_ASCII")) - conf.ensure_ascii = atoi(val); - if (!strcmp(line, "JSON_PRESERVE_ORDER")) - conf.preserve_order = atoi(val); - if (!strcmp(line, "JSON_SORT_KEYS")) - conf.sort_keys = atoi(val); - if (!strcmp(line, "JSON_REAL_PRECISION")) - conf.precision = atoi(val); - if (!strcmp(line, "STRIP")) - conf.strip = atoi(val); - if (!strcmp(line, "HASHSEED")) { - conf.have_hashseed = 1; - conf.hashseed = atoi(val); - } else { - conf.have_hashseed = 0; - } - } - - free(buffer); -} - - -static int cmpfile(const char *str, const char *path, const char *fname) -{ - char filename[1024], *buffer; - int ret; - FILE *file; - - sprintf(filename, "%s%c%s", path, dir_sep, fname); - file = fopen(filename, "rb"); - if (!file) { - if (conf.strip) - strcat(filename, ".strip"); - else - strcat(filename, ".normal"); - file = fopen(filename, "rb"); - } - if (!file) { - printf("Error: test result file could not be opened.\n"); - exit(1); - } - - buffer = loadfile(file); - if (strcmp(buffer, str) != 0) - ret = 1; - else - ret = 0; - free(buffer); - fclose(file); - - return ret; -} - -int use_conf(char *test_path) -{ - int ret; - size_t flags = 0; - char filename[1024], errstr[1024]; - char *buffer; - FILE *infile, *conffile; - json_t *json; - json_error_t error; - - sprintf(filename, "%s%cinput", test_path, dir_sep); - if (!(infile = fopen(filename, "rb"))) { - fprintf(stderr, "Could not open \"%s\"\n", filename); - return 2; - } - - sprintf(filename, "%s%cenv", test_path, dir_sep); - conffile = fopen(filename, "rb"); - if (conffile) { - read_conf(conffile); - fclose(conffile); - } - - if (conf.indent < 0 || conf.indent > 31) { - fprintf(stderr, "invalid value for JSON_INDENT: %d\n", conf.indent); - fclose(infile); - return 2; - } - if (conf.indent) - flags |= JSON_INDENT(conf.indent); - - if (conf.compact) - flags |= JSON_COMPACT; - - if (conf.ensure_ascii) - flags |= JSON_ENSURE_ASCII; - - if (conf.preserve_order) - flags |= JSON_PRESERVE_ORDER; - - if (conf.sort_keys) - flags |= JSON_SORT_KEYS; - - if (conf.precision < 0 || conf.precision > 31) { - fprintf(stderr, "invalid value for JSON_REAL_PRECISION: %d\n", - conf.precision); - fclose(infile); - return 2; - } - if (conf.precision) - flags |= JSON_REAL_PRECISION(conf.precision); - - if (conf.have_hashseed) - json_object_seed(conf.hashseed); - - if (conf.strip) { - /* Load to memory, strip leading and trailing whitespace */ - buffer = loadfile(infile); - json = json_loads(strip(buffer), 0, &error); - free(buffer); - } - else - json = json_loadf(infile, 0, &error); - - fclose(infile); - - if (!json) { - sprintf(errstr, "%d %d %d\n%s\n", - error.line, error.column, error.position, - error.text); - - ret = cmpfile(errstr, test_path, "error"); - return ret; - } - - buffer = json_dumps(json, flags); - ret = cmpfile(buffer, test_path, "output"); - free(buffer); - json_decref(json); - - return ret; -} - -static int getenv_int(const char *name) -{ - char *value, *end; - long result; - - value = getenv(name); - if(!value) - return 0; - - result = strtol(value, &end, 10); - if(*end != '\0') - return 0; - - return (int)result; -} - -int use_env() -{ - int indent, precision; - size_t flags = 0; - json_t *json; - json_error_t error; - - #ifdef _WIN32 - /* On Windows, set stdout and stderr to binary mode to avoid - outputting DOS line terminators */ - _setmode(_fileno(stdout), _O_BINARY); - _setmode(_fileno(stderr), _O_BINARY); - #endif - - indent = getenv_int("JSON_INDENT"); - if(indent < 0 || indent > 31) { - fprintf(stderr, "invalid value for JSON_INDENT: %d\n", indent); - return 2; - } - if(indent > 0) - flags |= JSON_INDENT(indent); - - if(getenv_int("JSON_COMPACT") > 0) - flags |= JSON_COMPACT; - - if(getenv_int("JSON_ENSURE_ASCII")) - flags |= JSON_ENSURE_ASCII; - - if(getenv_int("JSON_PRESERVE_ORDER")) - flags |= JSON_PRESERVE_ORDER; - - if(getenv_int("JSON_SORT_KEYS")) - flags |= JSON_SORT_KEYS; - - precision = getenv_int("JSON_REAL_PRECISION"); - if(precision < 0 || precision > 31) { - fprintf(stderr, "invalid value for JSON_REAL_PRECISION: %d\n", - precision); - return 2; - } - - if(getenv("HASHSEED")) - json_object_seed(getenv_int("HASHSEED")); - - if(precision > 0) - flags |= JSON_REAL_PRECISION(precision); - - if(getenv_int("STRIP")) { - /* Load to memory, strip leading and trailing whitespace */ - size_t size = 0, used = 0; - char *buffer = NULL, *buf_ck = NULL; - - while(1) { - size_t count; - - size = (size == 0 ? 128 : size * 2); - buf_ck = realloc(buffer, size); - if(!buf_ck) { - fprintf(stderr, "Unable to allocate %d bytes\n", (int)size); - free(buffer); - return 1; - } - buffer = buf_ck; - - count = fread(buffer + used, 1, size - used, stdin); - if(count < size - used) { - buffer[used + count] = '\0'; - break; - } - used += count; - } - - json = json_loads(strip(buffer), 0, &error); - free(buffer); - } - else - json = json_loadf(stdin, 0, &error); - - if(!json) { - fprintf(stderr, "%d %d %d\n%s\n", - error.line, error.column, - error.position, error.text); - return 1; - } - - json_dumpf(json, stdout, flags); - json_decref(json); - - return 0; -} - -int main(int argc, char *argv[]) -{ - int i; - char *test_path = NULL; - - #ifdef HAVE_SETLOCALE - setlocale(LC_ALL, ""); - #endif - - if (argc < 2) { - goto usage; - } - - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "--strip")) - conf.strip = 1; - else if (!strcmp(argv[i], "--env")) - conf.use_env = 1; - else - test_path = argv[i]; - } - - if (conf.use_env) - return use_env(); - else - { - if (!test_path) - goto usage; - - return use_conf(test_path); - } - -usage: - fprintf(stderr, "argc =%d\n", argc); - fprintf(stderr, "usage: %s [--strip] [--env] test_dir\n", argv[0]); - return 2; -} diff --git a/3party/jansson/test/run-suites b/3party/jansson/test/run-suites deleted file mode 100755 index fd1b89b5a7..0000000000 --- a/3party/jansson/test/run-suites +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/sh - -while [ -n "$1" ]; do - suite=$1 - if [ -x $top_srcdir/test/suites/$suite/run ]; then - SUITES="$SUITES $suite" - else - echo "No such suite: $suite" - exit 1 - fi - shift -done - -if [ -z "$SUITES" ]; then - suitedirs=$top_srcdir/test/suites/* - for suitedir in $suitedirs; do - if [ -d $suitedir ]; then - SUITES="$SUITES `basename $suitedir`" - fi - done -fi - -[ -z "$STOP" ] && STOP=0 - -suites_srcdir=$top_srcdir/test/suites -suites_builddir=suites -scriptdir=$top_srcdir/test/scripts -logdir=logs -bindir=bin -export suites_srcdir suites_builddir scriptdir logdir bindir - -passed=0 -failed=0 -for suite in $SUITES; do - echo "Suite: $suite" - if $suites_srcdir/$suite/run $suite; then - passed=`expr $passed + 1` - else - failed=`expr $failed + 1` - [ $STOP -eq 1 ] && break - fi -done - -if [ $failed -gt 0 ]; then - echo "$failed of `expr $passed + $failed` test suites failed" - exit 1 -else - echo "$passed test suites passed" - rm -rf $logdir -fi diff --git a/3party/jansson/test/scripts/run-tests.sh b/3party/jansson/test/scripts/run-tests.sh deleted file mode 100644 index f980a7657a..0000000000 --- a/3party/jansson/test/scripts/run-tests.sh +++ /dev/null @@ -1,100 +0,0 @@ -# Copyright (c) 2009-2016 Petri Lehtinen -# -# Jansson is free software; you can redistribute it and/or modify -# it under the terms of the MIT license. See LICENSE for details. - -die() { - echo "$1" >&2 - exit 1 -} - -[ -n "$1" ] || die "Usage: $0 suite-name" -[ -n "$bindir" ] || die "Set bindir" -[ -n "$logdir" ] || die "Set logdir" -[ -n "$scriptdir" ] || die "Set scriptdir" -[ -n "$suites_srcdir" ] || die "Set suites_srcdir" -[ -n "$suites_builddir" ] || die "Set suites_builddir" - -json_process=$bindir/json_process - -suite_name=$1 -suite_srcdir=$suites_srcdir/$suite_name -suite_builddir=$suites_builddir/$suite_name -suite_log=$logdir/$suite_name - -[ -z "$VERBOSE" ] && VERBOSE=0 -[ -z "$STOP" ] && STOP=0 - -. $scriptdir/valgrind.sh - -rm -rf $suite_log -mkdir -p $suite_log - -for test_path in $suite_srcdir/*; do - test_name=$(basename $test_path) - test_builddir=$suite_builddir/$test_name - test_log=$suite_log/$test_name - - [ "$test_name" = "run" ] && continue - is_test || continue - - rm -rf $test_log - mkdir -p $test_log - if [ $VERBOSE -eq 1 ]; then - printf '%s... ' "$test_name" - fi - - run_test - case $? in - 0) - # Success - if [ $VERBOSE -eq 1 ]; then - printf 'ok\n' - else - printf '.' - fi - rm -rf $test_log - ;; - - 77) - # Skip - if [ $VERBOSE -eq 1 ]; then - printf 'skipped\n' - else - printf 'S' - fi - rm -rf $test_log - ;; - - *) - # Failure - if [ $VERBOSE -eq 1 ]; then - printf 'FAILED\n' - else - printf 'F' - fi - - [ $STOP -eq 1 ] && break - ;; - esac -done - -if [ $VERBOSE -eq 0 ]; then - printf '\n' -fi - -if [ -n "$(ls -A $suite_log)" ]; then - for test_log in $suite_log/*; do - test_name=$(basename $test_log) - test_path=$suite_srcdir/$test_name - echo "=================================================================" - echo "$suite_name/$test_name" - echo "=================================================================" - show_error - echo - done - echo "=================================================================" - exit 1 -else - rm -rf $suite_log -fi diff --git a/3party/jansson/test/scripts/valgrind.sh b/3party/jansson/test/scripts/valgrind.sh deleted file mode 100644 index afbdcee154..0000000000 --- a/3party/jansson/test/scripts/valgrind.sh +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (c) 2009-2016 Petri Lehtinen -# -# Jansson is free software; you can redistribute it and/or modify -# it under the terms of the MIT license. See LICENSE for details. - -[ -z "$VALGRIND" ] && VALGRIND=0 - -VALGRIND_CMDLINE="valgrind --leak-check=full --show-reachable=yes --track-origins=yes -q" - -if [ $VALGRIND -eq 1 ]; then - test_runner="$VALGRIND_CMDLINE" - json_process="$VALGRIND_CMDLINE $json_process" -else - test_runner="" -fi - -valgrind_check() { - if [ $VALGRIND -eq 1 ]; then - # Check for Valgrind error output. The valgrind option - # --error-exitcode is not enough because Valgrind doesn't - # think unfreed allocs are errors. - if grep -E -q '^==[0-9]+== ' $1; then - touch $test_log/valgrind_error - return 1 - fi - fi -} - -valgrind_show_error() { - if [ $VALGRIND -eq 1 -a -f $test_log/valgrind_error ]; then - echo "valgrind detected an error" - return 0 - fi - return 1 -} diff --git a/3party/jansson/test/suites/.gitattributes b/3party/jansson/test/suites/.gitattributes deleted file mode 100644 index 68d88612cd..0000000000 --- a/3party/jansson/test/suites/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -api/ text=auto -* text eol=lf \ No newline at end of file diff --git a/3party/jansson/test/suites/Makefile.am b/3party/jansson/test/suites/Makefile.am deleted file mode 100644 index a53eb07f13..0000000000 --- a/3party/jansson/test/suites/Makefile.am +++ /dev/null @@ -1,2 +0,0 @@ -SUBDIRS = api -EXTRA_DIST = invalid invalid-unicode valid diff --git a/3party/jansson/test/suites/api/Makefile.am b/3party/jansson/test/suites/api/Makefile.am deleted file mode 100644 index 63548ac9db..0000000000 --- a/3party/jansson/test/suites/api/Makefile.am +++ /dev/null @@ -1,38 +0,0 @@ -EXTRA_DIST = run check-exports - -check_PROGRAMS = \ - test_array \ - test_chaos \ - test_copy \ - test_dump \ - test_dump_callback \ - test_equal \ - test_load \ - test_loadb \ - test_load_callback \ - test_memory_funcs \ - test_number \ - test_object \ - test_pack \ - test_simple \ - test_sprintf \ - test_unpack - -test_array_SOURCES = test_array.c util.h -test_chaos_SOURCES = test_chaos.c util.h -test_copy_SOURCES = test_copy.c util.h -test_dump_SOURCES = test_dump.c util.h -test_dump_callback_SOURCES = test_dump_callback.c util.h -test_load_SOURCES = test_load.c util.h -test_loadb_SOURCES = test_loadb.c util.h -test_memory_funcs_SOURCES = test_memory_funcs.c util.h -test_number_SOURCES = test_number.c util.h -test_object_SOURCES = test_object.c util.h -test_pack_SOURCES = test_pack.c util.h -test_simple_SOURCES = test_simple.c util.h -test_sprintf_SOURCES = test_sprintf.c util.h -test_unpack_SOURCES = test_unpack.c util.h - -AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src -LDFLAGS = -static # for speed and Valgrind -LDADD = $(top_builddir)/src/libjansson.la diff --git a/3party/jansson/test/suites/api/check-exports b/3party/jansson/test/suites/api/check-exports deleted file mode 100755 index 9adca7d391..0000000000 --- a/3party/jansson/test/suites/api/check-exports +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -# -# This test checks that libjansson.so exports the correct symbols. -# - -SOFILE="../src/.libs/libjansson.so" - -# The list of symbols, which the shared object should export, is read -# from the def file, which is used in Windows builds -grep 'json_' $top_srcdir/src/jansson.def \ - | sed -e 's/ //g' \ - | sort \ - >$test_log/exports - -nm -D $SOFILE >/dev/null >$test_log/symbols 2>/dev/null \ - || exit 77 # Skip if "nm -D" doesn't seem to work - -grep ' [DT] ' $test_log/symbols | cut -d' ' -f3 | grep -v '^_' | sort >$test_log/output - -if ! cmp -s $test_log/exports $test_log/output; then - diff -u $test_log/exports $test_log/output >&2 - exit 1 -fi diff --git a/3party/jansson/test/suites/api/run b/3party/jansson/test/suites/api/run deleted file mode 100755 index 0c017bca65..0000000000 --- a/3party/jansson/test/suites/api/run +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2009-2016 Petri Lehtinen -# -# Jansson is free software; you can redistribute it and/or modify -# it under the terms of the MIT license. See LICENSE for details. - -is_test() { - case "$test_name" in - *.c|check-exports) - return 0 - ;; - *) - return 1 - ;; - esac -} - -run_test() { - if [ "$test_name" = "check-exports" ]; then - test_log=$test_log $test_path >$test_log/stdout 2>$test_log/stderr - else - $test_runner $suite_builddir/${test_name%.c} \ - >$test_log/stdout \ - 2>$test_log/stderr \ - || return 1 - valgrind_check $test_log/stderr || return 1 - fi -} - -show_error() { - valgrind_show_error && return - cat $test_log/stderr -} - -. $top_srcdir/test/scripts/run-tests.sh diff --git a/3party/jansson/test/suites/api/test_array.c b/3party/jansson/test/suites/api/test_array.c deleted file mode 100644 index 9991fa07e7..0000000000 --- a/3party/jansson/test/suites/api/test_array.c +++ /dev/null @@ -1,505 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include "util.h" - -static void test_misc(void) -{ - json_t *array, *five, *seven, *value; - size_t i; - - array = json_array(); - five = json_integer(5); - seven = json_integer(7); - - if(!array) - fail("unable to create array"); - if(!five || !seven) - fail("unable to create integer"); - - if(json_array_size(array) != 0) - fail("empty array has nonzero size"); - - if(!json_array_append(array, NULL)) - fail("able to append NULL"); - - if(json_array_append(array, five)) - fail("unable to append"); - - if(json_array_size(array) != 1) - fail("wrong array size"); - - value = json_array_get(array, 0); - if(!value) - fail("unable to get item"); - if(value != five) - fail("got wrong value"); - - if(json_array_append(array, seven)) - fail("unable to append value"); - - if(json_array_size(array) != 2) - fail("wrong array size"); - - value = json_array_get(array, 1); - if(!value) - fail("unable to get item"); - if(value != seven) - fail("got wrong value"); - - if(json_array_set(array, 0, seven)) - fail("unable to set value"); - - if(!json_array_set(array, 0, NULL)) - fail("able to set NULL"); - - if(json_array_size(array) != 2) - fail("wrong array size"); - - value = json_array_get(array, 0); - if(!value) - fail("unable to get item"); - if(value != seven) - fail("got wrong value"); - - if(json_array_get(array, 2) != NULL) - fail("able to get value out of bounds"); - - if(!json_array_set(array, 2, seven)) - fail("able to set value out of bounds"); - - for(i = 2; i < 30; i++) { - if(json_array_append(array, seven)) - fail("unable to append value"); - - if(json_array_size(array) != i + 1) - fail("wrong array size"); - } - - for(i = 0; i < 30; i++) { - value = json_array_get(array, i); - if(!value) - fail("unable to get item"); - if(value != seven) - fail("got wrong value"); - } - - if(json_array_set_new(array, 15, json_integer(123))) - fail("unable to set new value"); - - value = json_array_get(array, 15); - if(!json_is_integer(value) || json_integer_value(value) != 123) - fail("json_array_set_new works incorrectly"); - - if(!json_array_set_new(array, 15, NULL)) - fail("able to set_new NULL value"); - - if(json_array_append_new(array, json_integer(321))) - fail("unable to append new value"); - - value = json_array_get(array, json_array_size(array) - 1); - if(!json_is_integer(value) || json_integer_value(value) != 321) - fail("json_array_append_new works incorrectly"); - - if(!json_array_append_new(array, NULL)) - fail("able to append_new NULL value"); - - json_decref(five); - json_decref(seven); - json_decref(array); -} - -static void test_insert(void) -{ - json_t *array, *five, *seven, *eleven, *value; - int i; - - array = json_array(); - five = json_integer(5); - seven = json_integer(7); - eleven = json_integer(11); - - if(!array) - fail("unable to create array"); - if(!five || !seven || !eleven) - fail("unable to create integer"); - - - if(!json_array_insert(array, 1, five)) - fail("able to insert value out of bounds"); - - - if(json_array_insert(array, 0, five)) - fail("unable to insert value in an empty array"); - - if(json_array_get(array, 0) != five) - fail("json_array_insert works incorrectly"); - - if(json_array_size(array) != 1) - fail("array size is invalid after insertion"); - - - if(json_array_insert(array, 1, seven)) - fail("unable to insert value at the end of an array"); - - if(json_array_get(array, 0) != five) - fail("json_array_insert works incorrectly"); - - if(json_array_get(array, 1) != seven) - fail("json_array_insert works incorrectly"); - - if(json_array_size(array) != 2) - fail("array size is invalid after insertion"); - - - if(json_array_insert(array, 1, eleven)) - fail("unable to insert value in the middle of an array"); - - if(json_array_get(array, 0) != five) - fail("json_array_insert works incorrectly"); - - if(json_array_get(array, 1) != eleven) - fail("json_array_insert works incorrectly"); - - if(json_array_get(array, 2) != seven) - fail("json_array_insert works incorrectly"); - - if(json_array_size(array) != 3) - fail("array size is invalid after insertion"); - - - if(json_array_insert_new(array, 2, json_integer(123))) - fail("unable to insert value in the middle of an array"); - - value = json_array_get(array, 2); - if(!json_is_integer(value) || json_integer_value(value) != 123) - fail("json_array_insert_new works incorrectly"); - - if(json_array_size(array) != 4) - fail("array size is invalid after insertion"); - - - for(i = 0; i < 20; i++) { - if(json_array_insert(array, 0, seven)) - fail("unable to insert value at the begining of an array"); - } - - for(i = 0; i < 20; i++) { - if(json_array_get(array, i) != seven) - fail("json_aray_insert works incorrectly"); - } - - if(json_array_size(array) != 24) - fail("array size is invalid after loop insertion"); - - json_decref(five); - json_decref(seven); - json_decref(eleven); - json_decref(array); -} - -static void test_remove(void) -{ - json_t *array, *five, *seven; - int i; - - array = json_array(); - five = json_integer(5); - seven = json_integer(7); - - if(!array) - fail("unable to create array"); - if(!five) - fail("unable to create integer"); - if(!seven) - fail("unable to create integer"); - - - if(!json_array_remove(array, 0)) - fail("able to remove an unexisting index"); - - - if(json_array_append(array, five)) - fail("unable to append"); - - if(!json_array_remove(array, 1)) - fail("able to remove an unexisting index"); - - if(json_array_remove(array, 0)) - fail("unable to remove"); - - if(json_array_size(array) != 0) - fail("array size is invalid after removing"); - - - if(json_array_append(array, five) || - json_array_append(array, seven) || - json_array_append(array, five) || - json_array_append(array, seven)) - fail("unable to append"); - - if(json_array_remove(array, 2)) - fail("unable to remove"); - - if(json_array_size(array) != 3) - fail("array size is invalid after removing"); - - if(json_array_get(array, 0) != five || - json_array_get(array, 1) != seven || - json_array_get(array, 2) != seven) - fail("remove works incorrectly"); - - json_decref(array); - - array = json_array(); - for(i = 0; i < 4; i++) { - json_array_append(array, five); - json_array_append(array, seven); - } - if(json_array_size(array) != 8) - fail("unable to append 8 items to array"); - - /* Remove an element from a "full" array. */ - json_array_remove(array, 5); - - json_decref(five); - json_decref(seven); - json_decref(array); -} - -static void test_clear(void) -{ - json_t *array, *five, *seven; - int i; - - array = json_array(); - five = json_integer(5); - seven = json_integer(7); - - if(!array) - fail("unable to create array"); - if(!five || !seven) - fail("unable to create integer"); - - for(i = 0; i < 10; i++) { - if(json_array_append(array, five)) - fail("unable to append"); - } - for(i = 0; i < 10; i++) { - if(json_array_append(array, seven)) - fail("unable to append"); - } - - if(json_array_size(array) != 20) - fail("array size is invalid after appending"); - - if(json_array_clear(array)) - fail("unable to clear"); - - if(json_array_size(array) != 0) - fail("array size is invalid after clearing"); - - json_decref(five); - json_decref(seven); - json_decref(array); -} - -static void test_extend(void) -{ - json_t *array1, *array2, *five, *seven; - int i; - - array1 = json_array(); - array2 = json_array(); - five = json_integer(5); - seven = json_integer(7); - - if(!array1 || !array2) - fail("unable to create array"); - if(!five || !seven) - fail("unable to create integer"); - - for(i = 0; i < 10; i++) { - if(json_array_append(array1, five)) - fail("unable to append"); - } - for(i = 0; i < 10; i++) { - if(json_array_append(array2, seven)) - fail("unable to append"); - } - - if(json_array_size(array1) != 10 || json_array_size(array2) != 10) - fail("array size is invalid after appending"); - - if(json_array_extend(array1, array2)) - fail("unable to extend"); - - for(i = 0; i < 10; i++) { - if(json_array_get(array1, i) != five) - fail("invalid array contents after extending"); - } - for(i = 10; i < 20; i++) { - if(json_array_get(array1, i) != seven) - fail("invalid array contents after extending"); - } - - json_decref(five); - json_decref(seven); - json_decref(array1); - json_decref(array2); -} - -static void test_circular() -{ - json_t *array1, *array2; - - /* the simple cases are checked */ - - array1 = json_array(); - if(!array1) - fail("unable to create array"); - - if(json_array_append(array1, array1) == 0) - fail("able to append self"); - - if(json_array_insert(array1, 0, array1) == 0) - fail("able to insert self"); - - if(json_array_append_new(array1, json_true())) - fail("failed to append true"); - - if(json_array_set(array1, 0, array1) == 0) - fail("able to set self"); - - json_decref(array1); - - - /* create circular references */ - - array1 = json_array(); - array2 = json_array(); - if(!array1 || !array2) - fail("unable to create array"); - - if(json_array_append(array1, array2) || - json_array_append(array2, array1)) - fail("unable to append"); - - /* circularity is detected when dumping */ - if(json_dumps(array1, 0) != NULL) - fail("able to dump circulars"); - - /* decref twice to deal with the circular references */ - json_decref(array1); - json_decref(array2); - json_decref(array1); -} - -static void test_array_foreach() -{ - size_t index; - json_t *array1, *array2, *value; - - array1 = json_pack("[sisisi]", "foo", 1, "bar", 2, "baz", 3); - array2 = json_array(); - - json_array_foreach(array1, index, value) { - json_array_append(array2, value); - } - - if(!json_equal(array1, array2)) - fail("json_array_foreach failed to iterate all elements"); - - json_decref(array1); - json_decref(array2); -} - -static void test_bad_args(void) -{ - json_t *arr = json_array(); - json_t *num = json_integer(1); - - if(!arr || !num) - fail("failed to create required objects"); - - if(json_array_size(NULL) != 0) - fail("NULL array has nonzero size"); - if(json_array_size(num) != 0) - fail("non-array has nonzero array size"); - - if(json_array_get(NULL, 0)) - fail("json_array_get did not return NULL for non-array"); - if(json_array_get(num, 0)) - fail("json_array_get did not return NULL for non-array"); - - if(!json_array_set_new(NULL, 0, json_incref(num))) - fail("json_array_set_new did not return error for non-array"); - if(!json_array_set_new(num, 0, json_incref(num))) - fail("json_array_set_new did not return error for non-array"); - if(!json_array_set_new(arr, 0, NULL)) - fail("json_array_set_new did not return error for NULL value"); - if(!json_array_set_new(arr, 0, json_incref(arr))) - fail("json_array_set_new did not return error for value == array"); - - if(!json_array_remove(NULL, 0)) - fail("json_array_remove did not return error for non-array"); - if(!json_array_remove(num, 0)) - fail("json_array_remove did not return error for non-array"); - - if(!json_array_clear(NULL)) - fail("json_array_clear did not return error for non-array"); - if(!json_array_clear(num)) - fail("json_array_clear did not return error for non-array"); - - if(!json_array_append_new(NULL, json_incref(num))) - fail("json_array_append_new did not return error for non-array"); - if(!json_array_append_new(num, json_incref(num))) - fail("json_array_append_new did not return error for non-array"); - if(!json_array_append_new(arr, NULL)) - fail("json_array_append_new did not return error for NULL value"); - if(!json_array_append_new(arr, json_incref(arr))) - fail("json_array_append_new did not return error for value == array"); - - if(!json_array_insert_new(NULL, 0, json_incref(num))) - fail("json_array_insert_new did not return error for non-array"); - if(!json_array_insert_new(num, 0, json_incref(num))) - fail("json_array_insert_new did not return error for non-array"); - if(!json_array_insert_new(arr, 0, NULL)) - fail("json_array_insert_new did not return error for NULL value"); - if(!json_array_insert_new(arr, 0, json_incref(arr))) - fail("json_array_insert_new did not return error for value == array"); - - if(!json_array_extend(NULL, arr)) - fail("json_array_extend did not return error for first argument non-array"); - if(!json_array_extend(num, arr)) - fail("json_array_extend did not return error for first argument non-array"); - if(!json_array_extend(arr, NULL)) - fail("json_array_extend did not return error for second arguemnt non-array"); - if(!json_array_extend(arr, num)) - fail("json_array_extend did not return error for second arguemnt non-array"); - - if(num->refcount != 1) - fail("unexpected reference count on num"); - if(arr->refcount != 1) - fail("unexpected reference count on arr"); - - json_decref(num); - json_decref(arr); -} - -static void run_tests() -{ - test_misc(); - test_insert(); - test_remove(); - test_clear(); - test_extend(); - test_circular(); - test_array_foreach(); - test_bad_args(); -} diff --git a/3party/jansson/test/suites/api/test_chaos.c b/3party/jansson/test/suites/api/test_chaos.c deleted file mode 100644 index 82776a6f3a..0000000000 --- a/3party/jansson/test/suites/api/test_chaos.c +++ /dev/null @@ -1,177 +0,0 @@ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -#include -#include -#include -#include "util.h" - -static int chaos_pos = 0; -static int chaos_fail = 0; -#define CHAOS_MAX_FAILURE 100 - -void *chaos_malloc(size_t size) -{ - if (chaos_pos == chaos_fail) - return NULL; - - chaos_pos++; - - return malloc(size); -} - -void chaos_free(void *obj) -{ - free(obj); -} - -/* Test all potential allocation failures. */ -#define chaos_loop(condition, code, cleanup) \ - { \ - chaos_pos = chaos_fail = 0; \ - while (condition) { \ - if (chaos_fail > CHAOS_MAX_FAILURE) \ - fail("too many chaos failures"); \ - code \ - chaos_pos = 0; \ - chaos_fail++; \ - } \ - cleanup \ - } - -#define chaos_loop_new_value(json, initcall) \ - chaos_loop(!json, json = initcall;, json_decref(json); json = NULL;) - -int test_unpack() -{ - int ret = -1; - int v1; - int v2; - json_error_t error; - json_t *root = json_pack("{s:i, s:i, s:i, s:i}", "n1", 1, "n2", 2, "n3", 3, "n4", 4); - - if (!root) - return -1; - - if (!json_unpack_ex(root, &error, JSON_STRICT, "{s:i, s:i}", "n1", &v1, "n2", &v2)) - fail("Unexpected success"); - - if (json_error_code(&error) != json_error_end_of_input_expected) { - if (json_error_code(&error) != json_error_out_of_memory) - fail("Unexpected error code"); - - goto out; - } - - if (strcmp(error.text, "2 object item(s) left unpacked: n3, n4")) - goto out; - - ret = 0; - -out: - json_decref(root); - return ret; -} - -int dump_chaos_callback(const char *buffer, size_t size, void *data) -{ - json_t *obj = json_object(); - - (void)buffer; - (void)size; - (void)data; - - if (!obj) - return -1; - - json_decref(obj); - - return 0; -} - -static void test_chaos() -{ - json_malloc_t orig_malloc; - json_free_t orig_free; - json_t *json = NULL; - json_t *obj = json_object(); - json_t *arr1 = json_array(); - json_t *arr2 = json_array(); - json_t *txt = json_string("test"); - json_t *intnum = json_integer(1); - json_t *dblnum = json_real(0.5); - char *dumptxt = NULL; - json_t *dumpobj = json_pack("{s:[iiis], s:s}", - "key1", 1, 2, 3, "txt", - "key2", "v2"); - int keyno; - - if (!obj || !arr1 || !arr2 || !txt || !intnum || !dblnum || !dumpobj) - fail("failed to allocate basic objects"); - - json_get_alloc_funcs(&orig_malloc, &orig_free); - json_set_alloc_funcs(chaos_malloc, chaos_free); - - chaos_loop_new_value(json, json_pack("{s:s}", "key", "value")); - chaos_loop_new_value(json, json_pack("{s:[]}", "key")); - chaos_loop_new_value(json, json_pack("[biIf]", 1, 1, (json_int_t)1, 1.0)); - chaos_loop_new_value(json, json_pack("[s*,s*]", "v1", "v2")); - chaos_loop_new_value(json, json_pack("o", json_incref(txt))); - chaos_loop_new_value(json, json_pack("O", txt)); - chaos_loop_new_value(json, json_pack("s++", "a", - "long string to force realloc", - "another long string to force yet another reallocation of the string because " - "that's what we are testing.")); - - chaos_loop(test_unpack(),,); - - chaos_loop(json_dump_callback(dumpobj, dump_chaos_callback, NULL, JSON_INDENT(1)),,); - chaos_loop(json_dump_callback(dumpobj, dump_chaos_callback, NULL, JSON_INDENT(1) | JSON_SORT_KEYS),,); - chaos_loop(!dumptxt, dumptxt = json_dumps(dumpobj, JSON_COMPACT);, free(dumptxt); dumptxt = NULL;); - - chaos_loop_new_value(json, json_copy(obj)); - chaos_loop_new_value(json, json_deep_copy(obj)); - - chaos_loop_new_value(json, json_copy(arr1)); - chaos_loop_new_value(json, json_deep_copy(arr1)); - - chaos_loop_new_value(json, json_copy(txt)); - chaos_loop_new_value(json, json_copy(intnum)); - chaos_loop_new_value(json, json_copy(dblnum)); - -#define JSON_LOAD_TXT "{\"n\":[1,2,3,4,5,6,7,8,9,10]}" - chaos_loop_new_value(json, json_loads(JSON_LOAD_TXT, 0, NULL)); - chaos_loop_new_value(json, json_loadb(JSON_LOAD_TXT, strlen(JSON_LOAD_TXT), 0, NULL)); - - chaos_loop_new_value(json, json_sprintf("%s", "string")); - - for (keyno = 0; keyno < 100; ++keyno) { -#if !defined(_MSC_VER) || _MSC_VER >= 1900 - /* Skip this test on old Windows compilers. */ - char testkey[10]; - - snprintf(testkey, sizeof(testkey), "test%d", keyno); - chaos_loop(json_object_set_new_nocheck(obj, testkey, json_object()),,); -#endif - chaos_loop(json_array_append_new(arr1, json_null()),,); - chaos_loop(json_array_insert_new(arr2, 0, json_null()),,); - } - - chaos_loop(json_array_extend(arr1, arr2),,); - chaos_loop(json_string_set_nocheck(txt, "test"),,); - - json_set_alloc_funcs(orig_malloc, orig_free); - json_decref(obj); - json_decref(arr1); - json_decref(arr2); - json_decref(txt); - json_decref(intnum); - json_decref(dblnum); - json_decref(dumpobj); -} - -static void run_tests() -{ - test_chaos(); -} diff --git a/3party/jansson/test/suites/api/test_copy.c b/3party/jansson/test/suites/api/test_copy.c deleted file mode 100644 index 41f0c7f648..0000000000 --- a/3party/jansson/test/suites/api/test_copy.c +++ /dev/null @@ -1,334 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include -#include "util.h" - -static void test_copy_simple(void) -{ - json_t *value, *copy; - - if(json_copy(NULL)) - fail("copying NULL doesn't return NULL"); - - /* true */ - value = json_true(); - copy = json_copy(value); - if(value != copy) - fail("copying true failed"); - json_decref(value); - json_decref(copy); - - /* false */ - value = json_false(); - copy = json_copy(value); - if(value != copy) - fail("copying false failed"); - json_decref(value); - json_decref(copy); - - /* null */ - value = json_null(); - copy = json_copy(value); - if(value != copy) - fail("copying null failed"); - json_decref(value); - json_decref(copy); - - /* string */ - value = json_string("foo"); - if(!value) - fail("unable to create a string"); - copy = json_copy(value); - if(!copy) - fail("unable to copy a string"); - if(copy == value) - fail("copying a string doesn't copy"); - if(!json_equal(copy, value)) - fail("copying a string produces an inequal copy"); - if(value->refcount != 1 || copy->refcount != 1) - fail("invalid refcounts"); - json_decref(value); - json_decref(copy); - - /* integer */ - value = json_integer(543); - if(!value) - fail("unable to create an integer"); - copy = json_copy(value); - if(!copy) - fail("unable to copy an integer"); - if(copy == value) - fail("copying an integer doesn't copy"); - if(!json_equal(copy, value)) - fail("copying an integer produces an inequal copy"); - if(value->refcount != 1 || copy->refcount != 1) - fail("invalid refcounts"); - json_decref(value); - json_decref(copy); - - /* real */ - value = json_real(123e9); - if(!value) - fail("unable to create a real"); - copy = json_copy(value); - if(!copy) - fail("unable to copy a real"); - if(copy == value) - fail("copying a real doesn't copy"); - if(!json_equal(copy, value)) - fail("copying a real produces an inequal copy"); - if(value->refcount != 1 || copy->refcount != 1) - fail("invalid refcounts"); - json_decref(value); - json_decref(copy); -} - -static void test_deep_copy_simple(void) -{ - json_t *value, *copy; - - if(json_deep_copy(NULL)) - fail("deep copying NULL doesn't return NULL"); - - /* true */ - value = json_true(); - copy = json_deep_copy(value); - if(value != copy) - fail("deep copying true failed"); - json_decref(value); - json_decref(copy); - - /* false */ - value = json_false(); - copy = json_deep_copy(value); - if(value != copy) - fail("deep copying false failed"); - json_decref(value); - json_decref(copy); - - /* null */ - value = json_null(); - copy = json_deep_copy(value); - if(value != copy) - fail("deep copying null failed"); - json_decref(value); - json_decref(copy); - - /* string */ - value = json_string("foo"); - if(!value) - fail("unable to create a string"); - copy = json_deep_copy(value); - if(!copy) - fail("unable to deep copy a string"); - if(copy == value) - fail("deep copying a string doesn't copy"); - if(!json_equal(copy, value)) - fail("deep copying a string produces an inequal copy"); - if(value->refcount != 1 || copy->refcount != 1) - fail("invalid refcounts"); - json_decref(value); - json_decref(copy); - - /* integer */ - value = json_integer(543); - if(!value) - fail("unable to create an integer"); - copy = json_deep_copy(value); - if(!copy) - fail("unable to deep copy an integer"); - if(copy == value) - fail("deep copying an integer doesn't copy"); - if(!json_equal(copy, value)) - fail("deep copying an integer produces an inequal copy"); - if(value->refcount != 1 || copy->refcount != 1) - fail("invalid refcounts"); - json_decref(value); - json_decref(copy); - - /* real */ - value = json_real(123e9); - if(!value) - fail("unable to create a real"); - copy = json_deep_copy(value); - if(!copy) - fail("unable to deep copy a real"); - if(copy == value) - fail("deep copying a real doesn't copy"); - if(!json_equal(copy, value)) - fail("deep copying a real produces an inequal copy"); - if(value->refcount != 1 || copy->refcount != 1) - fail("invalid refcounts"); - json_decref(value); - json_decref(copy); -} - -static void test_copy_array(void) -{ - const char *json_array_text = "[1, \"foo\", 3.141592, {\"foo\": \"bar\"}]"; - - json_t *array, *copy; - size_t i; - - array = json_loads(json_array_text, 0, NULL); - if(!array) - fail("unable to parse an array"); - - copy = json_copy(array); - if(!copy) - fail("unable to copy an array"); - if(copy == array) - fail("copying an array doesn't copy"); - if(!json_equal(copy, array)) - fail("copying an array produces an inequal copy"); - - for(i = 0; i < json_array_size(copy); i++) - { - if(json_array_get(array, i) != json_array_get(copy, i)) - fail("copying an array modifies its elements"); - } - - json_decref(array); - json_decref(copy); -} - -static void test_deep_copy_array(void) -{ - const char *json_array_text = "[1, \"foo\", 3.141592, {\"foo\": \"bar\"}]"; - - json_t *array, *copy; - size_t i; - - array = json_loads(json_array_text, 0, NULL); - if(!array) - fail("unable to parse an array"); - - copy = json_deep_copy(array); - if(!copy) - fail("unable to deep copy an array"); - if(copy == array) - fail("deep copying an array doesn't copy"); - if(!json_equal(copy, array)) - fail("deep copying an array produces an inequal copy"); - - for(i = 0; i < json_array_size(copy); i++) - { - if(json_array_get(array, i) == json_array_get(copy, i)) - fail("deep copying an array doesn't copy its elements"); - } - - json_decref(array); - json_decref(copy); -} - -static void test_copy_object(void) -{ - const char *json_object_text = - "{\"foo\": \"bar\", \"a\": 1, \"b\": 3.141592, \"c\": [1,2,3,4]}"; - - const char *keys[] = {"foo", "a", "b", "c"}; - int i; - - json_t *object, *copy; - void *iter; - - object = json_loads(json_object_text, 0, NULL); - if(!object) - fail("unable to parse an object"); - - copy = json_copy(object); - if(!copy) - fail("unable to copy an object"); - if(copy == object) - fail("copying an object doesn't copy"); - if(!json_equal(copy, object)) - fail("copying an object produces an inequal copy"); - - i = 0; - iter = json_object_iter(object); - while(iter) - { - const char *key; - json_t *value1, *value2; - - key = json_object_iter_key(iter); - value1 = json_object_iter_value(iter); - value2 = json_object_get(copy, key); - - if(value1 != value2) - fail("copying an object modifies its items"); - - if (strcmp(key, keys[i]) != 0) - fail("copying an object doesn't preserve key order"); - - iter = json_object_iter_next(object, iter); - i++; - } - - json_decref(object); - json_decref(copy); -} - -static void test_deep_copy_object(void) -{ - const char *json_object_text = - "{\"foo\": \"bar\", \"a\": 1, \"b\": 3.141592, \"c\": [1,2,3,4]}"; - - const char *keys[] = {"foo", "a", "b", "c"}; - int i; - - json_t *object, *copy; - void *iter; - - object = json_loads(json_object_text, 0, NULL); - if(!object) - fail("unable to parse an object"); - - copy = json_deep_copy(object); - if(!copy) - fail("unable to deep copy an object"); - if(copy == object) - fail("deep copying an object doesn't copy"); - if(!json_equal(copy, object)) - fail("deep copying an object produces an inequal copy"); - - i = 0; - iter = json_object_iter(object); - while(iter) - { - const char *key; - json_t *value1, *value2; - - key = json_object_iter_key(iter); - value1 = json_object_iter_value(iter); - value2 = json_object_get(copy, key); - - if(value1 == value2) - fail("deep copying an object doesn't copy its items"); - - if (strcmp(key, keys[i]) != 0) - fail("deep copying an object doesn't preserve key order"); - - iter = json_object_iter_next(object, iter); - i++; - } - - json_decref(object); - json_decref(copy); -} - -static void run_tests() -{ - test_copy_simple(); - test_deep_copy_simple(); - test_copy_array(); - test_deep_copy_array(); - test_copy_object(); - test_deep_copy_object(); -} diff --git a/3party/jansson/test/suites/api/test_dump.c b/3party/jansson/test/suites/api/test_dump.c deleted file mode 100644 index 17c495a18b..0000000000 --- a/3party/jansson/test/suites/api/test_dump.c +++ /dev/null @@ -1,326 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include "jansson_private_config.h" - -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#include "util.h" - -static int encode_null_callback(const char *buffer, size_t size, void *data) -{ - (void)buffer; - (void)size; - (void)data; - return 0; -} - -static void encode_null() -{ - if(json_dumps(NULL, JSON_ENCODE_ANY) != NULL) - fail("json_dumps didn't fail for NULL"); - - if(json_dumpb(NULL, NULL, 0, JSON_ENCODE_ANY) != 0) - fail("json_dumps didn't fail for NULL"); - - if(json_dumpf(NULL, stderr, JSON_ENCODE_ANY) != -1) - fail("json_dumpf didn't fail for NULL"); - -#ifdef HAVE_UNISTD_H - if(json_dumpfd(NULL, STDERR_FILENO, JSON_ENCODE_ANY) != -1) - fail("json_dumpfd didn't fail for NULL"); -#endif - - /* Don't test json_dump_file to avoid creating a file */ - - if(json_dump_callback(NULL, encode_null_callback, NULL, JSON_ENCODE_ANY) != -1) - fail("json_dump_callback didn't fail for NULL"); -} - - -static void encode_twice() -{ - /* Encode an empty object/array, add an item, encode again */ - - json_t *json; - char *result; - - json = json_object(); - result = json_dumps(json, 0); - if(!result || strcmp(result, "{}")) - fail("json_dumps failed"); - free(result); - - json_object_set_new(json, "foo", json_integer(5)); - result = json_dumps(json, 0); - if(!result || strcmp(result, "{\"foo\": 5}")) - fail("json_dumps failed"); - free(result); - - json_decref(json); - - json = json_array(); - result = json_dumps(json, 0); - if(!result || strcmp(result, "[]")) - fail("json_dumps failed"); - free(result); - - json_array_append_new(json, json_integer(5)); - result = json_dumps(json, 0); - if(!result || strcmp(result, "[5]")) - fail("json_dumps failed"); - free(result); - - json_decref(json); -} - -static void circular_references() -{ - /* Construct a JSON object/array with a circular reference: - - object: {"a": {"b": {"c": }}} - array: [[[]]] - - Encode it, remove the circular reference and encode again. - */ - - json_t *json; - char *result; - - json = json_object(); - json_object_set_new(json, "a", json_object()); - json_object_set_new(json_object_get(json, "a"), "b", json_object()); - json_object_set(json_object_get(json_object_get(json, "a"), "b"), "c", - json_object_get(json, "a")); - - if(json_dumps(json, 0)) - fail("json_dumps encoded a circular reference!"); - - json_object_del(json_object_get(json_object_get(json, "a"), "b"), "c"); - - result = json_dumps(json, 0); - if(!result || strcmp(result, "{\"a\": {\"b\": {}}}")) - fail("json_dumps failed!"); - free(result); - - json_decref(json); - - json = json_array(); - json_array_append_new(json, json_array()); - json_array_append_new(json_array_get(json, 0), json_array()); - json_array_append(json_array_get(json_array_get(json, 0), 0), - json_array_get(json, 0)); - - if(json_dumps(json, 0)) - fail("json_dumps encoded a circular reference!"); - - json_array_remove(json_array_get(json_array_get(json, 0), 0), 0); - - result = json_dumps(json, 0); - if(!result || strcmp(result, "[[[]]]")) - fail("json_dumps failed!"); - free(result); - - json_decref(json); -} - -static void encode_other_than_array_or_object() -{ - /* Encoding anything other than array or object should only - * succeed if the JSON_ENCODE_ANY flag is used */ - - json_t *json; - char *result; - - json = json_string("foo"); - if(json_dumps(json, 0) != NULL) - fail("json_dumps encoded a string!"); - if(json_dumpf(json, NULL, 0) == 0) - fail("json_dumpf encoded a string!"); - if(json_dumpfd(json, -1, 0) == 0) - fail("json_dumpfd encoded a string!"); - - result = json_dumps(json, JSON_ENCODE_ANY); - if(!result || strcmp(result, "\"foo\"") != 0) - fail("json_dumps failed to encode a string with JSON_ENCODE_ANY"); - - free(result); - json_decref(json); - - json = json_integer(42); - if(json_dumps(json, 0) != NULL) - fail("json_dumps encoded an integer!"); - if(json_dumpf(json, NULL, 0) == 0) - fail("json_dumpf encoded an integer!"); - if(json_dumpfd(json, -1, 0) == 0) - fail("json_dumpfd encoded an integer!"); - - result = json_dumps(json, JSON_ENCODE_ANY); - if(!result || strcmp(result, "42") != 0) - fail("json_dumps failed to encode an integer with JSON_ENCODE_ANY"); - - free(result); - json_decref(json); - - -} - -static void escape_slashes() -{ - /* Test dump escaping slashes */ - - json_t *json; - char *result; - - json = json_object(); - json_object_set_new(json, "url", json_string("https://github.com/akheron/jansson")); - - result = json_dumps(json, 0); - if(!result || strcmp(result, "{\"url\": \"https://github.com/akheron/jansson\"}")) - fail("json_dumps failed to not escape slashes"); - - free(result); - - result = json_dumps(json, JSON_ESCAPE_SLASH); - if(!result || strcmp(result, "{\"url\": \"https:\\/\\/github.com\\/akheron\\/jansson\"}")) - fail("json_dumps failed to escape slashes"); - - free(result); - json_decref(json); -} - -static void encode_nul_byte() -{ - json_t *json; - char *result; - - json = json_stringn("nul byte \0 in string", 20); - result = json_dumps(json, JSON_ENCODE_ANY); - if(!result || memcmp(result, "\"nul byte \\u0000 in string\"", 27)) - fail("json_dumps failed to dump an embedded NUL byte"); - - free(result); - json_decref(json); -} - -static void dump_file() -{ - json_t *json; - int result; - - result = json_dump_file(NULL, "", 0); - if (result != -1) - fail("json_dump_file succeeded with invalid args"); - - json = json_object(); - result = json_dump_file(json, "json_dump_file.json", 0); - if (result != 0) - fail("json_dump_file failed"); - - json_decref(json); - remove("json_dump_file.json"); -} - -static void dumpb() -{ - char buf[2]; - json_t *obj; - size_t size; - - obj = json_object(); - - size = json_dumpb(obj, buf, sizeof(buf), 0); - if(size != 2 || strncmp(buf, "{}", 2)) - fail("json_dumpb failed"); - - json_decref(obj); - obj = json_pack("{s:s}", "foo", "bar"); - - size = json_dumpb(obj, buf, sizeof(buf), JSON_COMPACT); - if(size != 13) - fail("json_dumpb size check failed"); - - json_decref(obj); -} - -static void dumpfd() -{ -#ifdef HAVE_UNISTD_H - int fds[2] = {-1, -1}; - json_t *a, *b; - - if(pipe(fds)) - fail("pipe() failed"); - - a = json_pack("{s:s}", "foo", "bar"); - - if(json_dumpfd(a, fds[1], 0)) - fail("json_dumpfd() failed"); - close(fds[1]); - - b = json_loadfd(fds[0], 0, NULL); - if (!b) - fail("json_loadfd() failed"); - close(fds[0]); - - if (!json_equal(a, b)) - fail("json_equal() failed for fd test"); - - json_decref(a); - json_decref(b); -#endif -} - -static void embed() -{ - static const char *plains[] = { - "{\"bar\":[],\"foo\":{}}", - "[[],{}]", - "{}", - "[]", - NULL - }; - - size_t i; - - for(i = 0; plains[i]; i++) { - const char *plain = plains[i]; - json_t *parse = NULL; - char *embed = NULL; - size_t psize = 0; - size_t esize = 0; - - psize = strlen(plain) - 2; - embed = calloc(1, psize); - parse = json_loads(plain, 0, NULL); - esize = json_dumpb(parse, embed, psize, - JSON_COMPACT | JSON_SORT_KEYS | JSON_EMBED); - json_decref(parse); - if(esize != psize) - fail("json_dumpb(JSON_EMBED) returned an invalid size"); - if(strncmp(plain + 1, embed, esize) != 0) - fail("json_dumps(JSON_EMBED) returned an invalid value"); - free(embed); - } -} - -static void run_tests() -{ - encode_null(); - encode_twice(); - circular_references(); - encode_other_than_array_or_object(); - escape_slashes(); - encode_nul_byte(); - dump_file(); - dumpb(); - dumpfd(); - embed(); -} diff --git a/3party/jansson/test/suites/api/test_dump_callback.c b/3party/jansson/test/suites/api/test_dump_callback.c deleted file mode 100644 index 1ceb968f2e..0000000000 --- a/3party/jansson/test/suites/api/test_dump_callback.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include -#include -#include "util.h" - -struct my_sink { - char *buf; - size_t off; - size_t cap; -}; - -static int my_writer(const char *buffer, size_t len, void *data) { - struct my_sink *s = data; - if (len > s->cap - s->off) { - return -1; - } - memcpy(s->buf + s->off, buffer, len); - s->off += len; - return 0; -} - -static void run_tests() -{ - struct my_sink s; - json_t *json; - const char str[] = "[\"A\", {\"B\": \"C\", \"e\": false}, 1, null, \"foo\"]"; - char *dumped_to_string; - - json = json_loads(str, 0, NULL); - if(!json) { - fail("json_loads failed"); - } - - dumped_to_string = json_dumps(json, 0); - if (!dumped_to_string) { - json_decref(json); - fail("json_dumps failed"); - } - - s.off = 0; - s.cap = strlen(dumped_to_string); - s.buf = malloc(s.cap); - if (!s.buf) { - json_decref(json); - free(dumped_to_string); - fail("malloc failed"); - } - - if (json_dump_callback(json, my_writer, &s, 0) == -1) { - json_decref(json); - free(dumped_to_string); - free(s.buf); - fail("json_dump_callback failed on an exact-length sink buffer"); - } - - if (strncmp(dumped_to_string, s.buf, s.off) != 0) { - json_decref(json); - free(dumped_to_string); - free(s.buf); - fail("json_dump_callback and json_dumps did not produce identical output"); - } - - s.off = 1; - if (json_dump_callback(json, my_writer, &s, 0) != -1) { - json_decref(json); - free(dumped_to_string); - free(s.buf); - fail("json_dump_callback succeeded on a short buffer when it should have failed"); - } - - json_decref(json); - free(dumped_to_string); - free(s.buf); -} diff --git a/3party/jansson/test/suites/api/test_equal.c b/3party/jansson/test/suites/api/test_equal.c deleted file mode 100644 index 339bab62bd..0000000000 --- a/3party/jansson/test/suites/api/test_equal.c +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include "util.h" - -static void test_equal_simple() -{ - json_t *value1, *value2; - - if(json_equal(NULL, NULL)) - fail("json_equal fails for two NULLs"); - - value1 = json_true(); - if(json_equal(value1, NULL) || json_equal(NULL, value1)) - fail("json_equal fails for NULL"); - - /* this covers true, false and null as they are singletons */ - if(!json_equal(value1, value1)) - fail("identical objects are not equal"); - json_decref(value1); - - /* integer */ - value1 = json_integer(1); - value2 = json_integer(1); - if(!value1 || !value2) - fail("unable to create integers"); - if(!json_equal(value1, value2)) - fail("json_equal fails for two equal integers"); - json_decref(value2); - - value2 = json_integer(2); - if(!value2) - fail("unable to create an integer"); - if(json_equal(value1, value2)) - fail("json_equal fails for two inequal integers"); - - json_decref(value1); - json_decref(value2); - - /* real */ - value1 = json_real(1.2); - value2 = json_real(1.2); - if(!value1 || !value2) - fail("unable to create reals"); - if(!json_equal(value1, value2)) - fail("json_equal fails for two equal reals"); - json_decref(value2); - - value2 = json_real(3.141592); - if(!value2) - fail("unable to create an real"); - if(json_equal(value1, value2)) - fail("json_equal fails for two inequal reals"); - - json_decref(value1); - json_decref(value2); - - /* string */ - value1 = json_string("foo"); - value2 = json_string("foo"); - if(!value1 || !value2) - fail("unable to create strings"); - if(!json_equal(value1, value2)) - fail("json_equal fails for two equal strings"); - json_decref(value2); - - value2 = json_string("bar"); - if(!value2) - fail("unable to create an string"); - if(json_equal(value1, value2)) - fail("json_equal fails for two inequal strings"); - json_decref(value2); - - value2 = json_string("bar2"); - if(!value2) - fail("unable to create an string"); - if(json_equal(value1, value2)) - fail("json_equal fails for two inequal length strings"); - - json_decref(value1); - json_decref(value2); -} - -static void test_equal_array() -{ - json_t *array1, *array2; - - array1 = json_array(); - array2 = json_array(); - if(!array1 || !array2) - fail("unable to create arrays"); - - if(!json_equal(array1, array2)) - fail("json_equal fails for two empty arrays"); - - json_array_append_new(array1, json_integer(1)); - json_array_append_new(array2, json_integer(1)); - json_array_append_new(array1, json_string("foo")); - json_array_append_new(array2, json_string("foo")); - json_array_append_new(array1, json_integer(2)); - json_array_append_new(array2, json_integer(2)); - if(!json_equal(array1, array2)) - fail("json_equal fails for two equal arrays"); - - json_array_remove(array2, 2); - if(json_equal(array1, array2)) - fail("json_equal fails for two inequal arrays"); - - json_array_append_new(array2, json_integer(3)); - if(json_equal(array1, array2)) - fail("json_equal fails for two inequal arrays"); - - json_decref(array1); - json_decref(array2); -} - -static void test_equal_object() -{ - json_t *object1, *object2; - - object1 = json_object(); - object2 = json_object(); - if(!object1 || !object2) - fail("unable to create objects"); - - if(!json_equal(object1, object2)) - fail("json_equal fails for two empty objects"); - - json_object_set_new(object1, "a", json_integer(1)); - json_object_set_new(object2, "a", json_integer(1)); - json_object_set_new(object1, "b", json_string("foo")); - json_object_set_new(object2, "b", json_string("foo")); - json_object_set_new(object1, "c", json_integer(2)); - json_object_set_new(object2, "c", json_integer(2)); - if(!json_equal(object1, object2)) - fail("json_equal fails for two equal objects"); - - json_object_del(object2, "c"); - if(json_equal(object1, object2)) - fail("json_equal fails for two inequal objects"); - - json_object_set_new(object2, "c", json_integer(3)); - if(json_equal(object1, object2)) - fail("json_equal fails for two inequal objects"); - - json_object_del(object2, "c"); - json_object_set_new(object2, "d", json_integer(2)); - if(json_equal(object1, object2)) - fail("json_equal fails for two inequal objects"); - - json_decref(object1); - json_decref(object2); -} - -static void test_equal_complex() -{ - json_t *value1, *value2; - - const char *complex_json = -"{" -" \"integer\": 1, " -" \"real\": 3.141592, " -" \"string\": \"foobar\", " -" \"true\": true, " -" \"object\": {" -" \"array-in-object\": [1,true,\"foo\",{}]," -" \"object-in-object\": {\"foo\": \"bar\"}" -" }," -" \"array\": [\"foo\", false, null, 1.234]" -"}"; - - value1 = json_loads(complex_json, 0, NULL); - value2 = json_loads(complex_json, 0, NULL); - if(!value1 || !value2) - fail("unable to parse JSON"); - if(!json_equal(value1, value2)) - fail("json_equal fails for two inequal strings"); - - json_decref(value1); - json_decref(value2); - - /* TODO: There's no negative test case here */ -} - -static void run_tests() -{ - test_equal_simple(); - test_equal_array(); - test_equal_object(); - test_equal_complex(); -} diff --git a/3party/jansson/test/suites/api/test_load.c b/3party/jansson/test/suites/api/test_load.c deleted file mode 100644 index a3bdc5785f..0000000000 --- a/3party/jansson/test/suites/api/test_load.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include -#include "util.h" - -static void file_not_found() -{ - json_t *json; - json_error_t error; - char *pos; - - json = json_load_file("/path/to/nonexistent/file.json", 0, &error); - if(json) - fail("json_load_file returned non-NULL for a nonexistent file"); - if(error.line != -1) - fail("json_load_file returned an invalid line number"); - - /* The error message is locale specific, only check the beginning - of the error message. */ - - pos = strchr(error.text, ':'); - if(!pos) - fail("json_load_file returne an invalid error message"); - - *pos = '\0'; - - if(strcmp(error.text, "unable to open /path/to/nonexistent/file.json") != 0) - fail("json_load_file returned an invalid error message"); - if(json_error_code(&error) != json_error_cannot_open_file) - fail("json_load_file returned an invalid error code"); -} - -static void very_long_file_name() { - json_t *json; - json_error_t error; - - json = json_load_file("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 0, &error); - if(json) - fail("json_load_file returned non-NULL for a nonexistent file"); - if(error.line != -1) - fail("json_load_file returned an invalid line number"); - - if (strncmp(error.source, "...aaa", 6) != 0) - fail("error source was set incorrectly"); - if(json_error_code(&error) != json_error_cannot_open_file) - fail("error code was set incorrectly"); -} - -static void reject_duplicates() -{ - json_error_t error; - - if(json_loads("{\"foo\": 1, \"foo\": 2}", JSON_REJECT_DUPLICATES, &error)) - fail("json_loads did not detect a duplicate key"); - check_error(json_error_duplicate_key, "duplicate object key near '\"foo\"'", "", 1, 16, 16); -} - -static void disable_eof_check() -{ - json_error_t error; - json_t *json; - - const char *text = "{\"foo\": 1} garbage"; - - if(json_loads(text, 0, &error)) - fail("json_loads did not detect garbage after JSON text"); - check_error(json_error_end_of_input_expected, "end of file expected near 'garbage'", "", 1, 18, 18); - - json = json_loads(text, JSON_DISABLE_EOF_CHECK, &error); - if(!json) - fail("json_loads failed with JSON_DISABLE_EOF_CHECK"); - - json_decref(json); -} - -static void decode_any() -{ - json_t *json; - json_error_t error; - - json = json_loads("\"foo\"", JSON_DECODE_ANY, &error); - if (!json || !json_is_string(json)) - fail("json_load decoded any failed - string"); - json_decref(json); - - json = json_loads("42", JSON_DECODE_ANY, &error); - if (!json || !json_is_integer(json)) - fail("json_load decoded any failed - integer"); - json_decref(json); - - json = json_loads("true", JSON_DECODE_ANY, &error); - if (!json || !json_is_true(json)) - fail("json_load decoded any failed - boolean"); - json_decref(json); - - json = json_loads("null", JSON_DECODE_ANY, &error); - if (!json || !json_is_null(json)) - fail("json_load decoded any failed - null"); - json_decref(json); -} - -static void decode_int_as_real() -{ - json_t *json; - json_error_t error; - -#if JSON_INTEGER_IS_LONG_LONG - const char *imprecise; - json_int_t expected; -#endif - - char big[311]; - - json = json_loads("42", JSON_DECODE_INT_AS_REAL | JSON_DECODE_ANY, &error); - if (!json || !json_is_real(json) || json_real_value(json) != 42.0) - fail("json_load decode int as real failed - int"); - json_decref(json); - -#if JSON_INTEGER_IS_LONG_LONG - /* This number cannot be represented exactly by a double */ - imprecise = "9007199254740993"; - expected = 9007199254740992ll; - - json = json_loads(imprecise, JSON_DECODE_INT_AS_REAL | JSON_DECODE_ANY, - &error); - if (!json || !json_is_real(json) || expected != (json_int_t)json_real_value(json)) - fail("json_load decode int as real failed - expected imprecision"); - json_decref(json); -#endif - - /* 1E309 overflows. Here we create 1E309 as a decimal number, i.e. - 1000...(309 zeroes)...0. */ - big[0] = '1'; - memset(big + 1, '0', 309); - big[310] = '\0'; - - json = json_loads(big, JSON_DECODE_INT_AS_REAL | JSON_DECODE_ANY, &error); - if (json || strcmp(error.text, "real number overflow") != 0 || - json_error_code(&error) != json_error_numeric_overflow) - fail("json_load decode int as real failed - expected overflow"); - json_decref(json); - -} - -static void allow_nul() -{ - const char *text = "\"nul byte \\u0000 in string\""; - const char *expected = "nul byte \0 in string"; - size_t len = 20; - json_t *json; - - json = json_loads(text, JSON_ALLOW_NUL | JSON_DECODE_ANY, NULL); - if(!json || !json_is_string(json)) - fail("unable to decode embedded NUL byte"); - - if(json_string_length(json) != len) - fail("decoder returned wrong string length"); - - if(memcmp(json_string_value(json), expected, len + 1)) - fail("decoder returned wrong string content"); - - json_decref(json); -} - -static void load_wrong_args() -{ - json_t *json; - json_error_t error; - - json = json_loads(NULL, 0, &error); - if (json) - fail("json_loads should return NULL if the first argument is NULL"); - - json = json_loadb(NULL, 0, 0, &error); - if (json) - fail("json_loadb should return NULL if the first argument is NULL"); - - json = json_loadf(NULL, 0, &error); - if (json) - fail("json_loadf should return NULL if the first argument is NULL"); - - json = json_loadfd(-1, 0, &error); - if (json) - fail("json_loadfd should return NULL if the first argument is < 0"); - - json = json_load_file(NULL, 0, &error); - if (json) - fail("json_load_file should return NULL if the first argument is NULL"); -} - -static void position() -{ - json_t *json; - size_t flags = JSON_DISABLE_EOF_CHECK; - json_error_t error; - - json = json_loads("{\"foo\": \"bar\"}", 0, &error); - if(error.position != 14) - fail("json_loads returned a wrong position"); - json_decref(json); - - json = json_loads("{\"foo\": \"bar\"} baz quux", flags, &error); - if(error.position != 14) - fail("json_loads returned a wrong position"); - json_decref(json); -} - -static void error_code() -{ - json_error_t error; - json_t *json = json_loads("[123] garbage", 0, &error); - if(json != NULL) - fail("json_loads returned not NULL"); - if(strlen(error.text) >= JSON_ERROR_TEXT_LENGTH) - fail("error.text longer than expected"); - if(json_error_code(&error) != json_error_end_of_input_expected) - fail("json_loads returned incorrect error code"); - - json = json_loads("{\"foo\": ", 0, &error); - if(json != NULL) - fail("json_loads returned not NULL"); - if(strlen(error.text) >= JSON_ERROR_TEXT_LENGTH) - fail("error.text longer than expected"); - if(json_error_code(&error) != json_error_premature_end_of_input) - fail("json_loads returned incorrect error code"); -} - -static void run_tests() -{ - file_not_found(); - very_long_file_name(); - reject_duplicates(); - disable_eof_check(); - decode_any(); - decode_int_as_real(); - allow_nul(); - load_wrong_args(); - position(); - error_code(); -} diff --git a/3party/jansson/test/suites/api/test_load_callback.c b/3party/jansson/test/suites/api/test_load_callback.c deleted file mode 100644 index 944952816c..0000000000 --- a/3party/jansson/test/suites/api/test_load_callback.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2009-2011 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include -#include -#include "util.h" - -struct my_source { - const char *buf; - size_t off; - size_t cap; -}; - -static const char my_str[] = "[\"A\", {\"B\": \"C\", \"e\": false}, 1, null, \"foo\"]"; - -static size_t greedy_reader(void *buf, size_t buflen, void *arg) -{ - struct my_source *s = arg; - if (buflen > s->cap - s->off) - buflen = s->cap - s->off; - if (buflen > 0) { - memcpy(buf, s->buf + s->off, buflen); - s->off += buflen; - return buflen; - } else { - return 0; - } -} - -static void run_tests() -{ - struct my_source s; - json_t *json; - json_error_t error; - - s.off = 0; - s.cap = strlen(my_str); - s.buf = my_str; - - json = json_load_callback(greedy_reader, &s, 0, &error); - - if (!json) - fail("json_load_callback failed on a valid callback"); - json_decref(json); - - s.off = 0; - s.cap = strlen(my_str) - 1; - s.buf = my_str; - - json = json_load_callback(greedy_reader, &s, 0, &error); - if (json) { - json_decref(json); - fail("json_load_callback should have failed on an incomplete stream, but it didn't"); - } - if (strcmp(error.source, "") != 0) { - fail("json_load_callback returned an invalid error source"); - } - if (strcmp(error.text, "']' expected near end of file") != 0) { - fail("json_load_callback returned an invalid error message for an unclosed top-level array"); - } - - json = json_load_callback(NULL, NULL, 0, &error); - if (json) { - json_decref(json); - fail("json_load_callback should have failed on NULL load callback, but it didn't"); - } - if (strcmp(error.text, "wrong arguments") != 0) { - fail("json_load_callback returned an invalid error message for a NULL load callback"); - } -} diff --git a/3party/jansson/test/suites/api/test_loadb.c b/3party/jansson/test/suites/api/test_loadb.c deleted file mode 100644 index 64e1fc568c..0000000000 --- a/3party/jansson/test/suites/api/test_loadb.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include -#include "util.h" - -static void run_tests() -{ - json_t *json; - json_error_t error; - const char str[] = "[\"A\", {\"B\": \"C\"}, 1, 2, 3]garbage"; - size_t len = strlen(str) - strlen("garbage"); - - json = json_loadb(str, len, 0, &error); - if(!json) { - fail("json_loadb failed on a valid JSON buffer"); - } - json_decref(json); - - json = json_loadb(str, len - 1, 0, &error); - if (json) { - json_decref(json); - fail("json_loadb should have failed on an incomplete buffer, but it didn't"); - } - if(error.line != 1) { - fail("json_loadb returned an invalid line number on fail"); - } - if(strcmp(error.text, "']' expected near end of file") != 0) { - fail("json_loadb returned an invalid error message for an unclosed top-level array"); - } -} diff --git a/3party/jansson/test/suites/api/test_memory_funcs.c b/3party/jansson/test/suites/api/test_memory_funcs.c deleted file mode 100644 index 02e450cd97..0000000000 --- a/3party/jansson/test/suites/api/test_memory_funcs.c +++ /dev/null @@ -1,137 +0,0 @@ -#include -#include - -#include "util.h" - -static int malloc_called = 0; -static int free_called = 0; -static size_t malloc_used = 0; - -/* helpers */ -static void create_and_free_complex_object() -{ - json_t *obj; - - obj = json_pack("{s:i,s:n,s:b,s:b,s:{s:s},s:[i,i,i]}", - "foo", 42, - "bar", - "baz", 1, - "qux", 0, - "alice", "bar", "baz", - "bob", 9, 8, 7); - - json_decref(obj); -} - -static void create_and_free_object_with_oom() -{ - int i; - char key[4]; - json_t *obj = json_object(); - - for (i = 0; i < 10; i++) - { - snprintf(key, sizeof key, "%d", i); - json_object_set_new(obj, key, json_integer(i)); - } - - json_decref(obj); -} - -static void *my_malloc(size_t size) -{ - malloc_called = 1; - return malloc(size); -} - -static void my_free(void *ptr) -{ - free_called = 1; - free(ptr); -} - -static void test_simple() -{ - json_malloc_t mfunc = NULL; - json_free_t ffunc = NULL; - - json_set_alloc_funcs(my_malloc, my_free); - json_get_alloc_funcs(&mfunc, &ffunc); - create_and_free_complex_object(); - - if (malloc_called != 1 || free_called != 1 - || mfunc != my_malloc || ffunc != my_free) - fail("Custom allocation failed"); -} - - -static void *oom_malloc(size_t size) -{ - if (malloc_used + size > 800) - return NULL; - - malloc_used += size; - return malloc(size); -} - -static void oom_free(void *ptr) -{ - free_called++; - free(ptr); -} - -static void test_oom() -{ - free_called = 0; - json_set_alloc_funcs(oom_malloc, oom_free); - create_and_free_object_with_oom(); - - if (free_called == 0) - fail("Allocation with OOM failed"); -} - - -/* - Test the secure memory functions code given in the API reference - documentation, but by using plain memset instead of - guaranteed_memset(). -*/ - -static void *secure_malloc(size_t size) -{ - /* Store the memory area size in the beginning of the block */ - void *ptr = malloc(size + 8); - *((size_t *)ptr) = size; - return (char *)ptr + 8; -} - -static void secure_free(void *ptr) -{ - size_t size; - - ptr = (char *)ptr - 8; - size = *((size_t *)ptr); - - /*guaranteed_*/memset(ptr, 0, size + 8); - free(ptr); -} - -static void test_secure_funcs(void) -{ - json_set_alloc_funcs(secure_malloc, secure_free); - create_and_free_complex_object(); -} - -static void test_bad_args(void) -{ - /* The result of this test is not crashing. */ - json_get_alloc_funcs(NULL, NULL); -} - -static void run_tests() -{ - test_simple(); - test_secure_funcs(); - test_oom(); - test_bad_args(); -} diff --git a/3party/jansson/test/suites/api/test_number.c b/3party/jansson/test/suites/api/test_number.c deleted file mode 100644 index bf33aecc80..0000000000 --- a/3party/jansson/test/suites/api/test_number.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include -#include "util.h" - -#ifdef INFINITY -// This test triggers "warning C4756: overflow in constant arithmetic" -// in Visual Studio. This warning is triggered here by design, so disable it. -// (This can only be done on function level so we keep these tests separate) -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning (disable: 4756) -#endif -static void test_inifity() -{ - json_t *real = json_real(INFINITY); - if (real != NULL) - fail("could construct a real from Inf"); - - real = json_real(1.0); - if (json_real_set(real, INFINITY) != -1) - fail("could set a real to Inf"); - - if (json_real_value(real) != 1.0) - fail("real value changed unexpectedly"); - - json_decref(real); -#ifdef _MSC_VER -#pragma warning(pop) -#endif -} -#endif // INFINITY - -static void test_bad_args(void) -{ - json_t *txt = json_string("test"); - - if(json_integer_value(NULL) != 0) - fail("json_integer_value did not return 0 for non-integer"); - if(json_integer_value(txt) != 0) - fail("json_integer_value did not return 0 for non-integer"); - - if(!json_integer_set(NULL, 0)) - fail("json_integer_set did not return error for non-integer"); - if(!json_integer_set(txt, 0)) - fail("json_integer_set did not return error for non-integer"); - - if(json_real_value(NULL) != 0.0) - fail("json_real_value did not return 0.0 for non-real"); - if(json_real_value(txt) != 0.0) - fail("json_real_value did not return 0.0 for non-real"); - - if(!json_real_set(NULL, 0.0)) - fail("json_real_set did not return error for non-real"); - if(!json_real_set(txt, 0.0)) - fail("json_real_set did not return error for non-real"); - - if(json_number_value(NULL) != 0.0) - fail("json_number_value did not return 0.0 for non-numeric"); - if(json_number_value(txt) != 0.0) - fail("json_number_value did not return 0.0 for non-numeric"); - - if (txt->refcount != 1) - fail("unexpected reference count for txt"); - - json_decref(txt); -} - -static void run_tests() -{ - json_t *integer, *real; - json_int_t i; - double d; - - integer = json_integer(5); - real = json_real(100.1); - - if(!integer) - fail("unable to create integer"); - if(!real) - fail("unable to create real"); - - i = json_integer_value(integer); - if(i != 5) - fail("wrong integer value"); - - d = json_real_value(real); - if(d != 100.1) - fail("wrong real value"); - - d = json_number_value(integer); - if(d != 5.0) - fail("wrong number value"); - d = json_number_value(real); - if(d != 100.1) - fail("wrong number value"); - - json_decref(integer); - json_decref(real); - -#ifdef NAN - real = json_real(NAN); - if(real != NULL) - fail("could construct a real from NaN"); - - real = json_real(1.0); - if(json_real_set(real, NAN) != -1) - fail("could set a real to NaN"); - - if(json_real_value(real) != 1.0) - fail("real value changed unexpectedly"); - - json_decref(real); -#endif - -#ifdef INFINITY - test_inifity(); -#endif - test_bad_args(); -} diff --git a/3party/jansson/test/suites/api/test_object.c b/3party/jansson/test/suites/api/test_object.c deleted file mode 100644 index 521ca81bdf..0000000000 --- a/3party/jansson/test/suites/api/test_object.c +++ /dev/null @@ -1,677 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include -#include "util.h" - -static void test_clear() -{ - json_t *object, *ten; - - object = json_object(); - ten = json_integer(10); - - if(!object) - fail("unable to create object"); - if(!ten) - fail("unable to create integer"); - - if(json_object_set(object, "a", ten) || - json_object_set(object, "b", ten) || - json_object_set(object, "c", ten) || - json_object_set(object, "d", ten) || - json_object_set(object, "e", ten)) - fail("unable to set value"); - - if(json_object_size(object) != 5) - fail("invalid size"); - - json_object_clear(object); - - if(json_object_size(object) != 0) - fail("invalid size after clear"); - - json_decref(ten); - json_decref(object); -} - -static void test_update() -{ - json_t *object, *other, *nine, *ten; - - object = json_object(); - other = json_object(); - - nine = json_integer(9); - ten = json_integer(10); - - if(!object || !other) - fail("unable to create object"); - if(!nine || !ten) - fail("unable to create integer"); - - - /* update an empty object with an empty object */ - - if(json_object_update(object, other)) - fail("unable to update an emtpy object with an empty object"); - - if(json_object_size(object) != 0) - fail("invalid size after update"); - - if(json_object_size(other) != 0) - fail("invalid size for updater after update"); - - - /* update an empty object with a nonempty object */ - - if(json_object_set(other, "a", ten) || - json_object_set(other, "b", ten) || - json_object_set(other, "c", ten) || - json_object_set(other, "d", ten) || - json_object_set(other, "e", ten)) - fail("unable to set value"); - - if(json_object_update(object, other)) - fail("unable to update an empty object"); - - if(json_object_size(object) != 5) - fail("invalid size after update"); - - if(json_object_get(object, "a") != ten || - json_object_get(object, "b") != ten || - json_object_get(object, "c") != ten || - json_object_get(object, "d") != ten || - json_object_get(object, "e") != ten) - fail("update works incorrectly"); - - - /* perform the same update again */ - - if(json_object_update(object, other)) - fail("unable to update a non-empty object"); - - if(json_object_size(object) != 5) - fail("invalid size after update"); - - if(json_object_get(object, "a") != ten || - json_object_get(object, "b") != ten || - json_object_get(object, "c") != ten || - json_object_get(object, "d") != ten || - json_object_get(object, "e") != ten) - fail("update works incorrectly"); - - - /* update a nonempty object with a nonempty object with both old - and new keys */ - - if(json_object_clear(other)) - fail("clear failed"); - - if(json_object_set(other, "a", nine) || - json_object_set(other, "b", nine) || - json_object_set(other, "f", nine) || - json_object_set(other, "g", nine) || - json_object_set(other, "h", nine)) - fail("unable to set value"); - - if(json_object_update(object, other)) - fail("unable to update a nonempty object"); - - if(json_object_size(object) != 8) - fail("invalid size after update"); - - if(json_object_get(object, "a") != nine || - json_object_get(object, "b") != nine || - json_object_get(object, "f") != nine || - json_object_get(object, "g") != nine || - json_object_get(object, "h") != nine) - fail("update works incorrectly"); - - json_decref(nine); - json_decref(ten); - json_decref(other); - json_decref(object); -} - -static void test_set_many_keys() -{ - json_t *object, *value; - const char *keys = "abcdefghijklmnopqrstuvwxyz"; - char buf[2]; - size_t i; - - object = json_object(); - if (!object) - fail("unable to create object"); - - value = json_string("a"); - if (!value) - fail("unable to create string"); - - buf[1] = '\0'; - for (i = 0; i < strlen(keys); i++) { - buf[0] = keys[i]; - if (json_object_set(object, buf, value)) - fail("unable to set object key"); - } - - json_decref(object); - json_decref(value); -} - -static void test_conditional_updates() -{ - json_t *object, *other; - - object = json_pack("{sisi}", "foo", 1, "bar", 2); - other = json_pack("{sisi}", "foo", 3, "baz", 4); - - if(json_object_update_existing(object, other)) - fail("json_object_update_existing failed"); - - if(json_object_size(object) != 2) - fail("json_object_update_existing added new items"); - - if(json_integer_value(json_object_get(object, "foo")) != 3) - fail("json_object_update_existing failed to update existing key"); - - if(json_integer_value(json_object_get(object, "bar")) != 2) - fail("json_object_update_existing updated wrong key"); - - json_decref(object); - - object = json_pack("{sisi}", "foo", 1, "bar", 2); - - if(json_object_update_missing(object, other)) - fail("json_object_update_missing failed"); - - if(json_object_size(object) != 3) - fail("json_object_update_missing didn't add new items"); - - if(json_integer_value(json_object_get(object, "foo")) != 1) - fail("json_object_update_missing updated existing key"); - - if(json_integer_value(json_object_get(object, "bar")) != 2) - fail("json_object_update_missing updated wrong key"); - - if(json_integer_value(json_object_get(object, "baz")) != 4) - fail("json_object_update_missing didn't add new items"); - - json_decref(object); - json_decref(other); -} - -static void test_circular() -{ - json_t *object1, *object2; - - object1 = json_object(); - object2 = json_object(); - if(!object1 || !object2) - fail("unable to create object"); - - /* the simple case is checked */ - if(json_object_set(object1, "a", object1) == 0) - fail("able to set self"); - - /* create circular references */ - if(json_object_set(object1, "a", object2) || - json_object_set(object2, "a", object1)) - fail("unable to set value"); - - /* circularity is detected when dumping */ - if(json_dumps(object1, 0) != NULL) - fail("able to dump circulars"); - - /* decref twice to deal with the circular references */ - json_decref(object1); - json_decref(object2); - json_decref(object1); -} - -static void test_set_nocheck() -{ - json_t *object, *string; - - object = json_object(); - string = json_string("bar"); - - if(!object) - fail("unable to create object"); - if(!string) - fail("unable to create string"); - - if(json_object_set_nocheck(object, "foo", string)) - fail("json_object_set_nocheck failed"); - if(json_object_get(object, "foo") != string) - fail("json_object_get after json_object_set_nocheck failed"); - - /* invalid UTF-8 in key */ - if(json_object_set_nocheck(object, "a\xefz", string)) - fail("json_object_set_nocheck failed for invalid UTF-8"); - if(json_object_get(object, "a\xefz") != string) - fail("json_object_get after json_object_set_nocheck failed"); - - if(json_object_set_new_nocheck(object, "bax", json_integer(123))) - fail("json_object_set_new_nocheck failed"); - if(json_integer_value(json_object_get(object, "bax")) != 123) - fail("json_object_get after json_object_set_new_nocheck failed"); - - /* invalid UTF-8 in key */ - if(json_object_set_new_nocheck(object, "asdf\xfe", json_integer(321))) - fail("json_object_set_new_nocheck failed for invalid UTF-8"); - if(json_integer_value(json_object_get(object, "asdf\xfe")) != 321) - fail("json_object_get after json_object_set_new_nocheck failed"); - - json_decref(string); - json_decref(object); -} - -static void test_iterators() -{ - json_t *object, *foo, *bar, *baz; - void *iter; - - if(json_object_iter(NULL)) - fail("able to iterate over NULL"); - - if(json_object_iter_next(NULL, NULL)) - fail("able to increment an iterator on a NULL object"); - - object = json_object(); - foo = json_string("foo"); - bar = json_string("bar"); - baz = json_string("baz"); - if(!object || !foo || !bar || !baz) - fail("unable to create values"); - - if(json_object_iter_next(object, NULL)) - fail("able to increment a NULL iterator"); - - if(json_object_set(object, "a", foo) || - json_object_set(object, "b", bar) || - json_object_set(object, "c", baz)) - fail("unable to populate object"); - - iter = json_object_iter(object); - if(!iter) - fail("unable to get iterator"); - if (strcmp(json_object_iter_key(iter), "a") != 0) - fail("iterating doesn't yield keys in order"); - if (json_object_iter_value(iter) != foo) - fail("iterating doesn't yield values in order"); - - iter = json_object_iter_next(object, iter); - if(!iter) - fail("unable to increment iterator"); - if (strcmp(json_object_iter_key(iter), "b") != 0) - fail("iterating doesn't yield keys in order"); - if (json_object_iter_value(iter) != bar) - fail("iterating doesn't yield values in order"); - - iter = json_object_iter_next(object, iter); - if(!iter) - fail("unable to increment iterator"); - if (strcmp(json_object_iter_key(iter), "c") != 0) - fail("iterating doesn't yield keys in order"); - if (json_object_iter_value(iter) != baz) - fail("iterating doesn't yield values in order"); - - if(json_object_iter_next(object, iter) != NULL) - fail("able to iterate over the end"); - - if(json_object_iter_at(object, "foo")) - fail("json_object_iter_at() succeeds for non-existent key"); - - iter = json_object_iter_at(object, "b"); - if(!iter) - fail("json_object_iter_at() fails for an existing key"); - - if(strcmp(json_object_iter_key(iter), "b")) - fail("iterating failed: wrong key"); - if(json_object_iter_value(iter) != bar) - fail("iterating failed: wrong value"); - - if(json_object_iter_set(object, iter, baz)) - fail("unable to set value at iterator"); - - if(strcmp(json_object_iter_key(iter), "b")) - fail("json_object_iter_key() fails after json_object_iter_set()"); - if(json_object_iter_value(iter) != baz) - fail("json_object_iter_value() fails after json_object_iter_set()"); - if(json_object_get(object, "b") != baz) - fail("json_object_get() fails after json_object_iter_set()"); - - json_decref(object); - json_decref(foo); - json_decref(bar); - json_decref(baz); -} - -static void test_misc() -{ - json_t *object, *string, *other_string, *value; - - object = json_object(); - string = json_string("test"); - other_string = json_string("other"); - - if(!object) - fail("unable to create object"); - if(!string || !other_string) - fail("unable to create string"); - - if(json_object_get(object, "a")) - fail("value for nonexisting key"); - - if(json_object_set(object, "a", string)) - fail("unable to set value"); - - if(!json_object_set(object, NULL, string)) - fail("able to set NULL key"); - - if(json_object_del(object, "a")) - fail("unable to del the only key"); - - if(json_object_set(object, "a", string)) - fail("unable to set value"); - - if(!json_object_set(object, "a", NULL)) - fail("able to set NULL value"); - - /* invalid UTF-8 in key */ - if(!json_object_set(object, "a\xefz", string)) - fail("able to set invalid unicode key"); - - value = json_object_get(object, "a"); - if(!value) - fail("no value for existing key"); - if(value != string) - fail("got different value than what was added"); - - /* "a", "lp" and "px" collide in a five-bucket hashtable */ - if(json_object_set(object, "b", string) || - json_object_set(object, "lp", string) || - json_object_set(object, "px", string)) - fail("unable to set value"); - - value = json_object_get(object, "a"); - if(!value) - fail("no value for existing key"); - if(value != string) - fail("got different value than what was added"); - - if(json_object_set(object, "a", other_string)) - fail("unable to replace an existing key"); - - value = json_object_get(object, "a"); - if(!value) - fail("no value for existing key"); - if(value != other_string) - fail("got different value than what was set"); - - if(!json_object_del(object, "nonexisting")) - fail("able to delete a nonexisting key"); - - if(json_object_del(object, "px")) - fail("unable to delete an existing key"); - - if(json_object_del(object, "a")) - fail("unable to delete an existing key"); - - if(json_object_del(object, "lp")) - fail("unable to delete an existing key"); - - - /* add many keys to initiate rehashing */ - - if(json_object_set(object, "a", string)) - fail("unable to set value"); - - if(json_object_set(object, "lp", string)) - fail("unable to set value"); - - if(json_object_set(object, "px", string)) - fail("unable to set value"); - - if(json_object_set(object, "c", string)) - fail("unable to set value"); - - if(json_object_set(object, "d", string)) - fail("unable to set value"); - - if(json_object_set(object, "e", string)) - fail("unable to set value"); - - - if(json_object_set_new(object, "foo", json_integer(123))) - fail("unable to set new value"); - - value = json_object_get(object, "foo"); - if(!json_is_integer(value) || json_integer_value(value) != 123) - fail("json_object_set_new works incorrectly"); - - if(!json_object_set_new(object, NULL, json_integer(432))) - fail("able to set_new NULL key"); - - if(!json_object_set_new(object, "foo", NULL)) - fail("able to set_new NULL value"); - - json_decref(string); - json_decref(other_string); - json_decref(object); -} - -static void test_preserve_order() -{ - json_t *object; - char *result; - - const char *expected = "{\"foobar\": 1, \"bazquux\": 6, \"lorem ipsum\": 3, \"sit amet\": 5, \"helicopter\": 7}"; - - object = json_object(); - - json_object_set_new(object, "foobar", json_integer(1)); - json_object_set_new(object, "bazquux", json_integer(2)); - json_object_set_new(object, "lorem ipsum", json_integer(3)); - json_object_set_new(object, "dolor", json_integer(4)); - json_object_set_new(object, "sit amet", json_integer(5)); - - /* changing a value should preserve the order */ - json_object_set_new(object, "bazquux", json_integer(6)); - - /* deletion shouldn't change the order of others */ - json_object_del(object, "dolor"); - - /* add a new item just to make sure */ - json_object_set_new(object, "helicopter", json_integer(7)); - - result = json_dumps(object, JSON_PRESERVE_ORDER); - - if(strcmp(expected, result) != 0) { - fprintf(stderr, "%s != %s", expected, result); - fail("JSON_PRESERVE_ORDER doesn't work"); - } - - free(result); - json_decref(object); -} - -static void test_object_foreach() -{ - const char *key; - json_t *object1, *object2, *value; - - object1 = json_pack("{sisisi}", "foo", 1, "bar", 2, "baz", 3); - object2 = json_object(); - - json_object_foreach(object1, key, value) - json_object_set(object2, key, value); - - if(!json_equal(object1, object2)) - fail("json_object_foreach failed to iterate all key-value pairs"); - - json_decref(object1); - json_decref(object2); -} - -static void test_object_foreach_safe() -{ - const char *key; - void *tmp; - json_t *object, *value; - - object = json_pack("{sisisi}", "foo", 1, "bar", 2, "baz", 3); - - json_object_foreach_safe(object, tmp, key, value) { - json_object_del(object, key); - } - - if(json_object_size(object) != 0) - fail("json_object_foreach_safe failed to iterate all key-value pairs"); - - json_decref(object); -} - -static void test_bad_args(void) -{ - json_t *obj = json_object(); - json_t *num = json_integer(1); - void *iter; - - if (!obj || !num) - fail("failed to allocate test objects"); - - if (json_object_set(obj, "testkey", json_null())) - fail("failed to set testkey on object"); - - iter = json_object_iter(obj); - if (!iter) - fail("failed to retrieve test iterator"); - - if(json_object_size(NULL) != 0) - fail("json_object_size with non-object argument returned non-zero"); - if(json_object_size(num) != 0) - fail("json_object_size with non-object argument returned non-zero"); - - if(json_object_get(NULL, "test") != NULL) - fail("json_object_get with non-object argument returned non-NULL"); - if(json_object_get(num, "test") != NULL) - fail("json_object_get with non-object argument returned non-NULL"); - if(json_object_get(obj, NULL) != NULL) - fail("json_object_get with NULL key returned non-NULL"); - - if(!json_object_set_new_nocheck(NULL, "test", json_null())) - fail("json_object_set_new_nocheck with non-object argument did not return error"); - if(!json_object_set_new_nocheck(num, "test", json_null())) - fail("json_object_set_new_nocheck with non-object argument did not return error"); - if(!json_object_set_new_nocheck(obj, "test", json_incref(obj))) - fail("json_object_set_new_nocheck with object == value did not return error"); - if(!json_object_set_new_nocheck(obj, NULL, json_object())) - fail("json_object_set_new_nocheck with NULL key did not return error"); - - if(!json_object_del(NULL, "test")) - fail("json_object_del with non-object argument did not return error"); - if(!json_object_del(num, "test")) - fail("json_object_del with non-object argument did not return error"); - if(!json_object_del(obj, NULL)) - fail("json_object_del with NULL key did not return error"); - - if(!json_object_clear(NULL)) - fail("json_object_clear with non-object argument did not return error"); - if(!json_object_clear(num)) - fail("json_object_clear with non-object argument did not return error"); - - if(!json_object_update(NULL, obj)) - fail("json_object_update with non-object first argument did not return error"); - if(!json_object_update(num, obj)) - fail("json_object_update with non-object first argument did not return error"); - if(!json_object_update(obj, NULL)) - fail("json_object_update with non-object second argument did not return error"); - if(!json_object_update(obj, num)) - fail("json_object_update with non-object second argument did not return error"); - - if(!json_object_update_existing(NULL, obj)) - fail("json_object_update_existing with non-object first argument did not return error"); - if(!json_object_update_existing(num, obj)) - fail("json_object_update_existing with non-object first argument did not return error"); - if(!json_object_update_existing(obj, NULL)) - fail("json_object_update_existing with non-object second argument did not return error"); - if(!json_object_update_existing(obj, num)) - fail("json_object_update_existing with non-object second argument did not return error"); - - if(!json_object_update_missing(NULL, obj)) - fail("json_object_update_missing with non-object first argument did not return error"); - if(!json_object_update_missing(num, obj)) - fail("json_object_update_missing with non-object first argument did not return error"); - if(!json_object_update_missing(obj, NULL)) - fail("json_object_update_missing with non-object second argument did not return error"); - if(!json_object_update_missing(obj, num)) - fail("json_object_update_missing with non-object second argument did not return error"); - - if(json_object_iter(NULL) != NULL) - fail("json_object_iter with non-object argument returned non-NULL"); - if(json_object_iter(num) != NULL) - fail("json_object_iter with non-object argument returned non-NULL"); - - if(json_object_iter_at(NULL, "test") != NULL) - fail("json_object_iter_at with non-object argument returned non-NULL"); - if(json_object_iter_at(num, "test") != NULL) - fail("json_object_iter_at with non-object argument returned non-NULL"); - if(json_object_iter_at(obj, NULL) != NULL) - fail("json_object_iter_at with NULL iter returned non-NULL"); - - if(json_object_iter_next(obj, NULL) != NULL) - fail("json_object_iter_next with NULL iter returned non-NULL"); - if(json_object_iter_next(num, iter) != NULL) - fail("json_object_iter_next with non-object argument returned non-NULL"); - - if(json_object_iter_key(NULL) != NULL) - fail("json_object_iter_key with NULL iter returned non-NULL"); - - if(json_object_key_to_iter(NULL) != NULL) - fail("json_object_key_to_iter with NULL iter returned non-NULL"); - - if(json_object_iter_value(NULL) != NULL) - fail("json_object_iter_value with NULL iter returned non-NULL"); - - if(!json_object_iter_set_new(NULL, iter, json_incref(num))) - fail("json_object_iter_set_new with non-object argument did not return error"); - if(!json_object_iter_set_new(num, iter, json_incref(num))) - fail("json_object_iter_set_new with non-object argument did not return error"); - if(!json_object_iter_set_new(obj, NULL, json_incref(num))) - fail("json_object_iter_set_new with NULL iter did not return error"); - if(!json_object_iter_set_new(obj, iter, NULL)) - fail("json_object_iter_set_new with NULL value did not return error"); - - if (obj->refcount != 1) - fail("unexpected reference count for obj"); - - if (num->refcount != 1) - fail("unexpected reference count for num"); - - json_decref(obj); - json_decref(num); -} - -static void run_tests() -{ - test_misc(); - test_clear(); - test_update(); - test_set_many_keys(); - test_conditional_updates(); - test_circular(); - test_set_nocheck(); - test_iterators(); - test_preserve_order(); - test_object_foreach(); - test_object_foreach_safe(); - test_bad_args(); -} diff --git a/3party/jansson/test/suites/api/test_pack.c b/3party/jansson/test/suites/api/test_pack.c deleted file mode 100644 index 084f170121..0000000000 --- a/3party/jansson/test/suites/api/test_pack.c +++ /dev/null @@ -1,518 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * Copyright (c) 2010-2012 Graeme Smecher - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include -#include -#include -#include -#include "util.h" - -#ifdef INFINITY -// This test triggers "warning C4756: overflow in constant arithmetic" -// in Visual Studio. This warning is triggered here by design, so disable it. -// (This can only be done on function level so we keep these tests separate) -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning (disable: 4756) -#endif -static void test_inifity() -{ - json_error_t error; - - if (json_pack_ex(&error, 0, "f", INFINITY)) - fail("json_pack infinity incorrectly succeeded"); - check_error(json_error_numeric_overflow, "Invalid floating point value", "", 1, 1, 1); - - if (json_pack_ex(&error, 0, "[f]", INFINITY)) - fail("json_pack infinity array element incorrectly succeeded"); - check_error(json_error_numeric_overflow, "Invalid floating point value", "", 1, 2, 2); - - if (json_pack_ex(&error, 0, "{s:f}", "key", INFINITY)) - fail("json_pack infinity object value incorrectly succeeded"); - check_error(json_error_numeric_overflow, "Invalid floating point value", "", 1, 4, 4); - -#ifdef _MSC_VER -#pragma warning(pop) -#endif -} -#endif // INFINITY - -static void run_tests() -{ - json_t *value; - int i; - char buffer[4] = {'t', 'e', 's', 't'}; - json_error_t error; - - /* - * Simple, valid json_pack cases - */ - /* true */ - value = json_pack("b", 1); - if(!json_is_true(value)) - fail("json_pack boolean failed"); - if(value->refcount != (size_t)-1) - fail("json_pack boolean refcount failed"); - json_decref(value); - - /* false */ - value = json_pack("b", 0); - if(!json_is_false(value)) - fail("json_pack boolean failed"); - if(value->refcount != (size_t)-1) - fail("json_pack boolean refcount failed"); - json_decref(value); - - /* null */ - value = json_pack("n"); - if(!json_is_null(value)) - fail("json_pack null failed"); - if(value->refcount != (size_t)-1) - fail("json_pack null refcount failed"); - json_decref(value); - - /* integer */ - value = json_pack("i", 1); - if(!json_is_integer(value) || json_integer_value(value) != 1) - fail("json_pack integer failed"); - if(value->refcount != (size_t)1) - fail("json_pack integer refcount failed"); - json_decref(value); - - /* integer from json_int_t */ - value = json_pack("I", (json_int_t)555555); - if(!json_is_integer(value) || json_integer_value(value) != 555555) - fail("json_pack json_int_t failed"); - if(value->refcount != (size_t)1) - fail("json_pack integer refcount failed"); - json_decref(value); - - /* real */ - value = json_pack("f", 1.0); - if(!json_is_real(value) || json_real_value(value) != 1.0) - fail("json_pack real failed"); - if(value->refcount != (size_t)1) - fail("json_pack real refcount failed"); - json_decref(value); - - /* string */ - value = json_pack("s", "test"); - if(!json_is_string(value) || strcmp("test", json_string_value(value))) - fail("json_pack string failed"); - if(value->refcount != (size_t)1) - fail("json_pack string refcount failed"); - json_decref(value); - - /* nullable string (defined case) */ - value = json_pack("s?", "test"); - if(!json_is_string(value) || strcmp("test", json_string_value(value))) - fail("json_pack nullable string (defined case) failed"); - if(value->refcount != (size_t)1) - fail("json_pack nullable string (defined case) refcount failed"); - json_decref(value); - - /* nullable string (NULL case) */ - value = json_pack("s?", NULL); - if(!json_is_null(value)) - fail("json_pack nullable string (NULL case) failed"); - if(value->refcount != (size_t)-1) - fail("json_pack nullable string (NULL case) refcount failed"); - json_decref(value); - - /* nullable string concatenation */ - if(json_pack_ex(&error, 0, "s?+", "test", "ing")) - fail("json_pack failed to catch invalid format 's?+'"); - check_error(json_error_invalid_format, "Cannot use '+' on optional strings", "", 1, 2, 2); - - /* nullable string with integer length */ - if(json_pack_ex(&error, 0, "s?#", "test", 4)) - fail("json_pack failed to catch invalid format 's?#'"); - check_error(json_error_invalid_format, "Cannot use '#' on optional strings", "", 1, 2, 2); - - /* string and length (int) */ - value = json_pack("s#", "test asdf", 4); - if(!json_is_string(value) || strcmp("test", json_string_value(value))) - fail("json_pack string and length failed"); - if(value->refcount != (size_t)1) - fail("json_pack string and length refcount failed"); - json_decref(value); - - /* string and length (size_t) */ - value = json_pack("s%", "test asdf", (size_t)4); - if(!json_is_string(value) || strcmp("test", json_string_value(value))) - fail("json_pack string and length failed"); - if(value->refcount != (size_t)1) - fail("json_pack string and length refcount failed"); - json_decref(value); - - /* string and length (int), non-NUL terminated string */ - value = json_pack("s#", buffer, 4); - if(!json_is_string(value) || strcmp("test", json_string_value(value))) - fail("json_pack string and length (int) failed"); - if(value->refcount != (size_t)1) - fail("json_pack string and length (int) refcount failed"); - json_decref(value); - - /* string and length (size_t), non-NUL terminated string */ - value = json_pack("s%", buffer, (size_t)4); - if(!json_is_string(value) || strcmp("test", json_string_value(value))) - fail("json_pack string and length (size_t) failed"); - if(value->refcount != (size_t)1) - fail("json_pack string and length (size_t) refcount failed"); - json_decref(value); - - /* string concatenation */ - if (json_pack("s+", "test", NULL)) - fail("json_pack string concatenation succeeded with NULL string"); - - value = json_pack("s++", "te", "st", "ing"); - if(!json_is_string(value) || strcmp("testing", json_string_value(value))) - fail("json_pack string concatenation failed"); - if(value->refcount != (size_t)1) - fail("json_pack string concatenation refcount failed"); - json_decref(value); - - /* string concatenation and length (int) */ - value = json_pack("s#+#+", "test", 1, "test", 2, "test"); - if(!json_is_string(value) || strcmp("ttetest", json_string_value(value))) - fail("json_pack string concatenation and length (int) failed"); - if(value->refcount != (size_t)1) - fail("json_pack string concatenation and length (int) refcount failed"); - json_decref(value); - - /* string concatenation and length (size_t) */ - value = json_pack("s%+%+", "test", (size_t)1, "test", (size_t)2, "test"); - if(!json_is_string(value) || strcmp("ttetest", json_string_value(value))) - fail("json_pack string concatenation and length (size_t) failed"); - if(value->refcount != (size_t)1) - fail("json_pack string concatenation and length (size_t) refcount failed"); - json_decref(value); - - /* empty object */ - value = json_pack("{}", 1.0); - if(!json_is_object(value) || json_object_size(value) != 0) - fail("json_pack empty object failed"); - if(value->refcount != (size_t)1) - fail("json_pack empty object refcount failed"); - json_decref(value); - - /* empty list */ - value = json_pack("[]", 1.0); - if(!json_is_array(value) || json_array_size(value) != 0) - fail("json_pack empty list failed"); - if(value->refcount != (size_t)1) - fail("json_pack empty list failed"); - json_decref(value); - - /* non-incref'd object */ - value = json_pack("o", json_integer(1)); - if(!json_is_integer(value) || json_integer_value(value) != 1) - fail("json_pack object failed"); - if(value->refcount != (size_t)1) - fail("json_pack integer refcount failed"); - json_decref(value); - - /* non-incref'd nullable object (defined case) */ - value = json_pack("o?", json_integer(1)); - if(!json_is_integer(value) || json_integer_value(value) != 1) - fail("json_pack nullable object (defined case) failed"); - if(value->refcount != (size_t)1) - fail("json_pack nullable object (defined case) refcount failed"); - json_decref(value); - - /* non-incref'd nullable object (NULL case) */ - value = json_pack("o?", NULL); - if(!json_is_null(value)) - fail("json_pack nullable object (NULL case) failed"); - if(value->refcount != (size_t)-1) - fail("json_pack nullable object (NULL case) refcount failed"); - json_decref(value); - - /* incref'd object */ - value = json_pack("O", json_integer(1)); - if(!json_is_integer(value) || json_integer_value(value) != 1) - fail("json_pack object failed"); - if(value->refcount != (size_t)2) - fail("json_pack integer refcount failed"); - json_decref(value); - json_decref(value); - - /* incref'd nullable object (defined case) */ - value = json_pack("O?", json_integer(1)); - if(!json_is_integer(value) || json_integer_value(value) != 1) - fail("json_pack incref'd nullable object (defined case) failed"); - if(value->refcount != (size_t)2) - fail("json_pack incref'd nullable object (defined case) refcount failed"); - json_decref(value); - json_decref(value); - - /* incref'd nullable object (NULL case) */ - value = json_pack("O?", NULL); - if(!json_is_null(value)) - fail("json_pack incref'd nullable object (NULL case) failed"); - if(value->refcount != (size_t)-1) - fail("json_pack incref'd nullable object (NULL case) refcount failed"); - - /* simple object */ - value = json_pack("{s:[]}", "foo"); - if(!json_is_object(value) || json_object_size(value) != 1) - fail("json_pack array failed"); - if(!json_is_array(json_object_get(value, "foo"))) - fail("json_pack array failed"); - if(json_object_get(value, "foo")->refcount != (size_t)1) - fail("json_pack object refcount failed"); - json_decref(value); - - /* object with complex key */ - value = json_pack("{s+#+: []}", "foo", "barbar", 3, "baz"); - if(!json_is_object(value) || json_object_size(value) != 1) - fail("json_pack array failed"); - if(!json_is_array(json_object_get(value, "foobarbaz"))) - fail("json_pack array failed"); - if(json_object_get(value, "foobarbaz")->refcount != (size_t)1) - fail("json_pack object refcount failed"); - json_decref(value); - - /* object with optional members */ - value = json_pack("{s:s,s:o,s:O}", "a", NULL, "b", NULL, "c", NULL); - if(value) - fail("json_pack object optional incorrectly succeeded"); - - value = json_pack("{s:**}", "a", NULL); - if(value) - fail("json_pack object optional invalid incorrectly succeeded"); - - if (json_pack_ex(&error, 0, "{s:i*}", "a", 1)) - fail("json_pack object optional invalid incorrectly succeeded"); - check_error(json_error_invalid_format, "Expected format 's', got '*'", "", 1, 5, 5); - - value = json_pack("{s:s*,s:o*,s:O*}", "a", NULL, "b", NULL, "c", NULL); - if(!json_is_object(value) || json_object_size(value) != 0) - fail("json_pack object optional failed"); - json_decref(value); - - value = json_pack("{s:s*}", "key", "\xff\xff"); - if(value) - fail("json_pack object optional with invalid UTF-8 incorrectly succeeded"); - - if(json_pack_ex(&error, 0, "{s: s*#}", "key", "test", 1)) - fail("json_pack failed to catch invalid format 's*#'"); - check_error(json_error_invalid_format, "Cannot use '#' on optional strings", "", 1, 6, 6); - - if(json_pack_ex(&error, 0, "{s: s*+}", "key", "test", "ing")) - fail("json_pack failed to catch invalid format 's*+'"); - check_error(json_error_invalid_format, "Cannot use '+' on optional strings", "", 1, 6, 6); - - /* simple array */ - value = json_pack("[i,i,i]", 0, 1, 2); - if(!json_is_array(value) || json_array_size(value) != 3) - fail("json_pack object failed"); - for(i=0; i<3; i++) - { - if(!json_is_integer(json_array_get(value, i)) || - json_integer_value(json_array_get(value, i)) != i) - - fail("json_pack integer array failed"); - } - json_decref(value); - - /* simple array with optional members */ - value = json_pack("[s,o,O]", NULL, NULL, NULL); - if(value) - fail("json_pack array optional incorrectly succeeded"); - - if (json_pack_ex(&error, 0, "[i*]", 1)) - fail("json_pack array optional invalid incorrectly succeeded"); - check_error(json_error_invalid_format, "Unexpected format character '*'", "", 1, 3, 3); - - value = json_pack("[**]", NULL); - if(value) - fail("json_pack array optional invalid incorrectly succeeded"); - value = json_pack("[s*,o*,O*]", NULL, NULL, NULL); - if(!json_is_array(value) || json_array_size(value) != 0) - fail("json_pack array optional failed"); - json_decref(value); - -#ifdef NAN - /* Invalid float values */ - if (json_pack_ex(&error, 0, "f", NAN)) - fail("json_pack NAN incorrectly succeeded"); - check_error(json_error_numeric_overflow, "Invalid floating point value", "", 1, 1, 1); - - if (json_pack_ex(&error, 0, "[f]", NAN)) - fail("json_pack NAN array element incorrectly succeeded"); - check_error(json_error_numeric_overflow, "Invalid floating point value", "", 1, 2, 2); - - if (json_pack_ex(&error, 0, "{s:f}", "key", NAN)) - fail("json_pack NAN object value incorrectly succeeded"); - check_error(json_error_numeric_overflow, "Invalid floating point value", "", 1, 4, 4); -#endif - -#ifdef INFINITY - test_inifity(); -#endif - - /* Whitespace; regular string */ - value = json_pack(" s\t ", "test"); - if(!json_is_string(value) || strcmp("test", json_string_value(value))) - fail("json_pack string (with whitespace) failed"); - json_decref(value); - - /* Whitespace; empty array */ - value = json_pack("[ ]"); - if(!json_is_array(value) || json_array_size(value) != 0) - fail("json_pack empty array (with whitespace) failed"); - json_decref(value); - - /* Whitespace; array */ - value = json_pack("[ i , i, i ] ", 1, 2, 3); - if(!json_is_array(value) || json_array_size(value) != 3) - fail("json_pack array (with whitespace) failed"); - json_decref(value); - - /* - * Invalid cases - */ - - /* newline in format string */ - if(json_pack_ex(&error, 0, "{\n\n1")) - fail("json_pack failed to catch invalid format '1'"); - check_error(json_error_invalid_format, "Expected format 's', got '1'", "", 3, 1, 4); - - /* mismatched open/close array/object */ - if(json_pack_ex(&error, 0, "[}")) - fail("json_pack failed to catch mismatched '}'"); - check_error(json_error_invalid_format, "Unexpected format character '}'", "", 1, 2, 2); - - if(json_pack_ex(&error, 0, "{]")) - fail("json_pack failed to catch mismatched ']'"); - check_error(json_error_invalid_format, "Expected format 's', got ']'", "", 1, 2, 2); - - /* missing close array */ - if(json_pack_ex(&error, 0, "[")) - fail("json_pack failed to catch missing ']'"); - check_error(json_error_invalid_format, "Unexpected end of format string", "", 1, 2, 2); - - /* missing close object */ - if(json_pack_ex(&error, 0, "{")) - fail("json_pack failed to catch missing '}'"); - check_error(json_error_invalid_format, "Unexpected end of format string", "", 1, 2, 2); - - /* garbage after format string */ - if(json_pack_ex(&error, 0, "[i]a", 42)) - fail("json_pack failed to catch garbage after format string"); - check_error(json_error_invalid_format, "Garbage after format string", "", 1, 4, 4); - - if(json_pack_ex(&error, 0, "ia", 42)) - fail("json_pack failed to catch garbage after format string"); - check_error(json_error_invalid_format, "Garbage after format string", "", 1, 2, 2); - - /* NULL string */ - if(json_pack_ex(&error, 0, "s", NULL)) - fail("json_pack failed to catch null argument string"); - check_error(json_error_null_value, "NULL string", "", 1, 1, 1); - - /* + on its own */ - if(json_pack_ex(&error, 0, "+", NULL)) - fail("json_pack failed to a lone +"); - check_error(json_error_invalid_format, "Unexpected format character '+'", "", 1, 1, 1); - - /* Empty format */ - if(json_pack_ex(&error, 0, "")) - fail("json_pack failed to catch empty format string"); - check_error(json_error_invalid_argument, "NULL or empty format string", "", -1, -1, 0); - - /* NULL format */ - if(json_pack_ex(&error, 0, NULL)) - fail("json_pack failed to catch NULL format string"); - check_error(json_error_invalid_argument, "NULL or empty format string", "", -1, -1, 0); - - /* NULL key */ - if(json_pack_ex(&error, 0, "{s:i}", NULL, 1)) - fail("json_pack failed to catch NULL key"); - check_error(json_error_null_value, "NULL object key", "", 1, 2, 2); - - /* NULL value followed by object still steals the object's ref */ - value = json_incref(json_object()); - if(json_pack_ex(&error, 0, "{s:s,s:o}", "badnull", NULL, "dontleak", value)) - fail("json_pack failed to catch NULL value"); - check_error(json_error_null_value, "NULL string", "", 1, 4, 4); - if(value->refcount != (size_t)1) - fail("json_pack failed to steal reference after error."); - json_decref(value); - - /* More complicated checks for row/columns */ - if(json_pack_ex(&error, 0, "{ {}: s }", "foo")) - fail("json_pack failed to catch object as key"); - check_error(json_error_invalid_format, "Expected format 's', got '{'", "", 1, 3, 3); - - /* Complex object */ - if(json_pack_ex(&error, 0, "{ s: {}, s:[ii{} }", "foo", "bar", 12, 13)) - fail("json_pack failed to catch missing ]"); - check_error(json_error_invalid_format, "Unexpected format character '}'", "", 1, 19, 19); - - /* Complex array */ - if(json_pack_ex(&error, 0, "[[[[[ [[[[[ [[[[ }]]]] ]]]] ]]]]]")) - fail("json_pack failed to catch extra }"); - check_error(json_error_invalid_format, "Unexpected format character '}'", "", 1, 21, 21); - - /* Invalid UTF-8 in object key */ - if(json_pack_ex(&error, 0, "{s:i}", "\xff\xff", 42)) - fail("json_pack failed to catch invalid UTF-8 in an object key"); - check_error(json_error_invalid_utf8, "Invalid UTF-8 object key", "", 1, 2, 2); - - /* Invalid UTF-8 in a string */ - if(json_pack_ex(&error, 0, "{s:s}", "foo", "\xff\xff")) - fail("json_pack failed to catch invalid UTF-8 in a string"); - check_error(json_error_invalid_utf8, "Invalid UTF-8 string", "", 1, 4, 4); - - /* Invalid UTF-8 in an optional '?' string */ - if(json_pack_ex(&error, 0, "{s:s?}", "foo", "\xff\xff")) - fail("json_pack failed to catch invalid UTF-8 in an optional '?' string"); - check_error(json_error_invalid_utf8, "Invalid UTF-8 string", "", 1, 5, 5); - - /* Invalid UTF-8 in an optional '*' string */ - if(json_pack_ex(&error, 0, "{s:s*}", "foo", "\xff\xff")) - fail("json_pack failed to catch invalid UTF-8 in an optional '*' string"); - check_error(json_error_invalid_utf8, "Invalid UTF-8 string", "", 1, 5, 5); - - /* Invalid UTF-8 in a concatenated key */ - if(json_pack_ex(&error, 0, "{s+:i}", "\xff\xff", "concat", 42)) - fail("json_pack failed to catch invalid UTF-8 in an object key"); - check_error(json_error_invalid_utf8, "Invalid UTF-8 object key", "", 1, 3, 3); - - if(json_pack_ex(&error, 0, "{s:o}", "foo", NULL)) - fail("json_pack failed to catch nullable object"); - check_error(json_error_null_value, "NULL object", "", 1, 4, 4); - - if(json_pack_ex(&error, 0, "{s:O}", "foo", NULL)) - fail("json_pack failed to catch nullable incref object"); - check_error(json_error_null_value, "NULL object", "", 1, 4, 4); - - if(json_pack_ex(&error, 0, "{s+:o}", "foo", "bar", NULL)) - fail("json_pack failed to catch non-nullable object value"); - check_error(json_error_null_value, "NULL object", "", 1, 5, 5); - - if(json_pack_ex(&error, 0, "[1s", "Hi")) - fail("json_pack failed to catch invalid format"); - check_error(json_error_invalid_format, "Unexpected format character '1'", "", 1, 2, 2); - - if(json_pack_ex(&error, 0, "[1s+", "Hi", "ya")) - fail("json_pack failed to catch invalid format"); - check_error(json_error_invalid_format, "Unexpected format character '1'", "", 1, 2, 2); - - if(json_pack_ex(&error, 0, "[so]", NULL, json_object())) - fail("json_pack failed to catch NULL value"); - check_error(json_error_null_value, "NULL string", "", 1, 2, 2); -} diff --git a/3party/jansson/test/suites/api/test_simple.c b/3party/jansson/test/suites/api/test_simple.c deleted file mode 100644 index 82771873ff..0000000000 --- a/3party/jansson/test/suites/api/test_simple.c +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include -#include "util.h" - -static void test_bad_args(void) -{ - json_t *num = json_integer(1); - json_t *txt = json_string("test"); - - if (!num || !txt) - fail("failed to allocate test objects"); - - if(json_string_nocheck(NULL) != NULL) - fail("json_string_nocheck with NULL argument did not return NULL"); - if(json_stringn_nocheck(NULL, 0) != NULL) - fail("json_stringn_nocheck with NULL argument did not return NULL"); - if(json_string(NULL) != NULL) - fail("json_string with NULL argument did not return NULL"); - if(json_stringn(NULL, 0) != NULL) - fail("json_stringn with NULL argument did not return NULL"); - - if(json_string_length(NULL) != 0) - fail("json_string_length with non-string argument did not return 0"); - if(json_string_length(num) != 0) - fail("json_string_length with non-string argument did not return 0"); - - if(json_string_value(NULL) != NULL) - fail("json_string_value with non-string argument did not return NULL"); - if(json_string_value(num) != NULL) - fail("json_string_value with non-string argument did not return NULL"); - - if(!json_string_setn_nocheck(NULL, "", 0)) - fail("json_string_setn with non-string argument did not return error"); - if(!json_string_setn_nocheck(num, "", 0)) - fail("json_string_setn with non-string argument did not return error"); - if(!json_string_setn_nocheck(txt, NULL, 0)) - fail("json_string_setn_nocheck with NULL value did not return error"); - - if(!json_string_set_nocheck(txt, NULL)) - fail("json_string_set_nocheck with NULL value did not return error"); - if(!json_string_set(txt, NULL)) - fail("json_string_set with NULL value did not return error"); - if(!json_string_setn(txt, NULL, 0)) - fail("json_string_setn with NULL value did not return error"); - - if(num->refcount != 1) - fail("unexpected reference count for num"); - if(txt->refcount != 1) - fail("unexpected reference count for txt"); - - json_decref(num); - json_decref(txt); -} - -/* Call the simple functions not covered by other tests of the public API */ -static void run_tests() -{ - json_t *value; - - value = json_boolean(1); - if(!json_is_true(value)) - fail("json_boolean(1) failed"); - json_decref(value); - - value = json_boolean(-123); - if(!json_is_true(value)) - fail("json_boolean(-123) failed"); - json_decref(value); - - value = json_boolean(0); - if(!json_is_false(value)) - fail("json_boolean(0) failed"); - if(json_boolean_value(value) != 0) - fail("json_boolean_value failed"); - json_decref(value); - - - value = json_integer(1); - if(json_typeof(value) != JSON_INTEGER) - fail("json_typeof failed"); - - if(json_is_object(value)) - fail("json_is_object failed"); - - if(json_is_array(value)) - fail("json_is_array failed"); - - if(json_is_string(value)) - fail("json_is_string failed"); - - if(!json_is_integer(value)) - fail("json_is_integer failed"); - - if(json_is_real(value)) - fail("json_is_real failed"); - - if(!json_is_number(value)) - fail("json_is_number failed"); - - if(json_is_true(value)) - fail("json_is_true failed"); - - if(json_is_false(value)) - fail("json_is_false failed"); - - if(json_is_boolean(value)) - fail("json_is_boolean failed"); - - if(json_is_null(value)) - fail("json_is_null failed"); - - json_decref(value); - - - value = json_string("foo"); - if(!value) - fail("json_string failed"); - if(strcmp(json_string_value(value), "foo")) - fail("invalid string value"); - if (json_string_length(value) != 3) - fail("invalid string length"); - - if(json_string_set(value, "barr")) - fail("json_string_set failed"); - if(strcmp(json_string_value(value), "barr")) - fail("invalid string value"); - if (json_string_length(value) != 4) - fail("invalid string length"); - - if(json_string_setn(value, "hi\0ho", 5)) - fail("json_string_set failed"); - if(memcmp(json_string_value(value), "hi\0ho\0", 6)) - fail("invalid string value"); - if (json_string_length(value) != 5) - fail("invalid string length"); - - json_decref(value); - - value = json_string(NULL); - if(value) - fail("json_string(NULL) failed"); - - /* invalid UTF-8 */ - value = json_string("a\xefz"); - if(value) - fail("json_string() failed"); - - value = json_string_nocheck("foo"); - if(!value) - fail("json_string_nocheck failed"); - if(strcmp(json_string_value(value), "foo")) - fail("invalid string value"); - if (json_string_length(value) != 3) - fail("invalid string length"); - - if(json_string_set_nocheck(value, "barr")) - fail("json_string_set_nocheck failed"); - if(strcmp(json_string_value(value), "barr")) - fail("invalid string value"); - if (json_string_length(value) != 4) - fail("invalid string length"); - - if(json_string_setn_nocheck(value, "hi\0ho", 5)) - fail("json_string_set failed"); - if(memcmp(json_string_value(value), "hi\0ho\0", 6)) - fail("invalid string value"); - if (json_string_length(value) != 5) - fail("invalid string length"); - - json_decref(value); - - /* invalid UTF-8 */ - value = json_string_nocheck("qu\xff"); - if(!value) - fail("json_string_nocheck failed"); - if(strcmp(json_string_value(value), "qu\xff")) - fail("invalid string value"); - if (json_string_length(value) != 3) - fail("invalid string length"); - - if(json_string_set_nocheck(value, "\xfd\xfe\xff")) - fail("json_string_set_nocheck failed"); - if(strcmp(json_string_value(value), "\xfd\xfe\xff")) - fail("invalid string value"); - if (json_string_length(value) != 3) - fail("invalid string length"); - - json_decref(value); - - - value = json_integer(123); - if(!value) - fail("json_integer failed"); - if(json_integer_value(value) != 123) - fail("invalid integer value"); - if(json_number_value(value) != 123.0) - fail("invalid number value"); - - if(json_integer_set(value, 321)) - fail("json_integer_set failed"); - if(json_integer_value(value) != 321) - fail("invalid integer value"); - if(json_number_value(value) != 321.0) - fail("invalid number value"); - - json_decref(value); - - value = json_real(123.123); - if(!value) - fail("json_real failed"); - if(json_real_value(value) != 123.123) - fail("invalid integer value"); - if(json_number_value(value) != 123.123) - fail("invalid number value"); - - if(json_real_set(value, 321.321)) - fail("json_real_set failed"); - if(json_real_value(value) != 321.321) - fail("invalid real value"); - if(json_number_value(value) != 321.321) - fail("invalid number value"); - - json_decref(value); - - value = json_true(); - if(!value) - fail("json_true failed"); - json_decref(value); - - value = json_false(); - if(!value) - fail("json_false failed"); - json_decref(value); - - value = json_null(); - if(!value) - fail("json_null failed"); - json_decref(value); - - /* Test reference counting on singletons (true, false, null) */ - value = json_true(); - if(value->refcount != (size_t)-1) - fail("refcounting true works incorrectly"); - json_decref(value); - if(value->refcount != (size_t)-1) - fail("refcounting true works incorrectly"); - json_incref(value); - if(value->refcount != (size_t)-1) - fail("refcounting true works incorrectly"); - - value = json_false(); - if(value->refcount != (size_t)-1) - fail("refcounting false works incorrectly"); - json_decref(value); - if(value->refcount != (size_t)-1) - fail("refcounting false works incorrectly"); - json_incref(value); - if(value->refcount != (size_t)-1) - fail("refcounting false works incorrectly"); - - value = json_null(); - if(value->refcount != (size_t)-1) - fail("refcounting null works incorrectly"); - json_decref(value); - if(value->refcount != (size_t)-1) - fail("refcounting null works incorrectly"); - json_incref(value); - if(value->refcount != (size_t)-1) - fail("refcounting null works incorrectly"); - -#ifdef json_auto_t - value = json_string("foo"); - { - json_auto_t *test = json_incref(value); - /* Use test so GCC doesn't complain it is unused. */ - if(!json_is_string(test)) - fail("value type check failed"); - } - if(value->refcount != 1) - fail("automatic decrement failed"); - json_decref(value); -#endif - - test_bad_args(); -} diff --git a/3party/jansson/test/suites/api/test_sprintf.c b/3party/jansson/test/suites/api/test_sprintf.c deleted file mode 100644 index c0a4cf7af7..0000000000 --- a/3party/jansson/test/suites/api/test_sprintf.c +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include -#include "util.h" - - -static void test_sprintf() { - json_t *s = json_sprintf("foo bar %d", 42); - if (!s) - fail("json_sprintf returned NULL"); - if (!json_is_string(s)) - fail("json_sprintf didn't return a JSON string"); - if (strcmp(json_string_value(s), "foo bar 42")) - fail("json_sprintf generated an unexpected string"); - - json_decref(s); - - s = json_sprintf("%s", ""); - if (!s) - fail("json_sprintf returned NULL"); - if (!json_is_string(s)) - fail("json_sprintf didn't return a JSON string"); - if (json_string_length(s) != 0) - fail("string is not empty"); - json_decref(s); - - if (json_sprintf("%s", "\xff\xff")) - fail("json_sprintf unexpected success with invalid UTF"); -} - - -static void run_tests() -{ - test_sprintf(); -} diff --git a/3party/jansson/test/suites/api/test_unpack.c b/3party/jansson/test/suites/api/test_unpack.c deleted file mode 100644 index 4516917e8c..0000000000 --- a/3party/jansson/test/suites/api/test_unpack.c +++ /dev/null @@ -1,406 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * Copyright (c) 2010-2012 Graeme Smecher - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#include -#include -#include -#include "util.h" - -static void run_tests() -{ - json_t *j, *j2; - int i1, i2, i3; - json_int_t I1; - int rv; - size_t z; - double f; - char *s; - - json_error_t error; - - /* - * Simple, valid json_pack cases - */ - - /* true */ - rv = json_unpack(json_true(), "b", &i1); - if(rv || !i1) - fail("json_unpack boolean failed"); - - /* false */ - rv = json_unpack(json_false(), "b", &i1); - if(rv || i1) - fail("json_unpack boolean failed"); - - /* null */ - if(json_unpack(json_null(), "n")) - fail("json_unpack null failed"); - - /* integer */ - j = json_integer(42); - rv = json_unpack(j, "i", &i1); - if(rv || i1 != 42) - fail("json_unpack integer failed"); - json_decref(j); - - /* json_int_t */ - j = json_integer(5555555); - rv = json_unpack(j, "I", &I1); - if(rv || I1 != 5555555) - fail("json_unpack json_int_t failed"); - json_decref(j); - - /* real */ - j = json_real(1.7); - rv = json_unpack(j, "f", &f); - if(rv || f != 1.7) - fail("json_unpack real failed"); - json_decref(j); - - /* number */ - j = json_integer(12345); - rv = json_unpack(j, "F", &f); - if(rv || f != 12345.0) - fail("json_unpack (real or) integer failed"); - json_decref(j); - - j = json_real(1.7); - rv = json_unpack(j, "F", &f); - if(rv || f != 1.7) - fail("json_unpack real (or integer) failed"); - json_decref(j); - - /* string */ - j = json_string("foo"); - rv = json_unpack(j, "s", &s); - if(rv || strcmp(s, "foo")) - fail("json_unpack string failed"); - json_decref(j); - - /* string with length (size_t) */ - j = json_string("foo"); - rv = json_unpack(j, "s%", &s, &z); - if(rv || strcmp(s, "foo") || z != 3) - fail("json_unpack string with length (size_t) failed"); - json_decref(j); - - /* empty object */ - j = json_object(); - if(json_unpack(j, "{}")) - fail("json_unpack empty object failed"); - json_decref(j); - - /* empty list */ - j = json_array(); - if(json_unpack(j, "[]")) - fail("json_unpack empty list failed"); - json_decref(j); - - /* non-incref'd object */ - j = json_object(); - rv = json_unpack(j, "o", &j2); - if(rv || j2 != j || j->refcount != 1) - fail("json_unpack object failed"); - json_decref(j); - - /* incref'd object */ - j = json_object(); - rv = json_unpack(j, "O", &j2); - if(rv || j2 != j || j->refcount != 2) - fail("json_unpack object failed"); - json_decref(j); - json_decref(j); - - /* simple object */ - j = json_pack("{s:i}", "foo", 42); - rv = json_unpack(j, "{s:i}", "foo", &i1); - if(rv || i1 != 42) - fail("json_unpack simple object failed"); - json_decref(j); - - /* simple array */ - j = json_pack("[iii]", 1, 2, 3); - rv = json_unpack(j, "[i,i,i]", &i1, &i2, &i3); - if(rv || i1 != 1 || i2 != 2 || i3 != 3) - fail("json_unpack simple array failed"); - json_decref(j); - - /* object with many items & strict checking */ - j = json_pack("{s:i, s:i, s:i}", "a", 1, "b", 2, "c", 3); - rv = json_unpack(j, "{s:i, s:i, s:i}", "a", &i1, "b", &i2, "c", &i3); - if(rv || i1 != 1 || i2 != 2 || i3 != 3) - fail("json_unpack object with many items failed"); - json_decref(j); - - /* - * Invalid cases - */ - - j = json_integer(42); - if(!json_unpack_ex(j, &error, 0, "z")) - fail("json_unpack succeeded with invalid format character"); - check_error(json_error_invalid_format, "Unexpected format character 'z'", "", 1, 1, 1); - - if(!json_unpack_ex(NULL, &error, 0, "[i]")) - fail("json_unpack succeeded with NULL root"); - check_error(json_error_null_value, "NULL root value", "", -1, -1, 0); - json_decref(j); - - /* mismatched open/close array/object */ - j = json_pack("[]"); - if(!json_unpack_ex(j, &error, 0, "[}")) - fail("json_unpack failed to catch mismatched ']'"); - check_error(json_error_invalid_format, "Unexpected format character '}'", "", 1, 2, 2); - json_decref(j); - - j = json_pack("{}"); - if(!json_unpack_ex(j, &error, 0, "{]")) - fail("json_unpack failed to catch mismatched '}'"); - check_error(json_error_invalid_format, "Expected format 's', got ']'", "", 1, 2, 2); - json_decref(j); - - /* missing close array */ - j = json_pack("[]"); - if(!json_unpack_ex(j, &error, 0, "[")) - fail("json_unpack failed to catch missing ']'"); - check_error(json_error_invalid_format, "Unexpected end of format string", "", 1, 2, 2); - json_decref(j); - - /* missing close object */ - j = json_pack("{}"); - if(!json_unpack_ex(j, &error, 0, "{")) - fail("json_unpack failed to catch missing '}'"); - check_error(json_error_invalid_format, "Unexpected end of format string", "", 1, 2, 2); - json_decref(j); - - /* garbage after format string */ - j = json_pack("[i]", 42); - if(!json_unpack_ex(j, &error, 0, "[i]a", &i1)) - fail("json_unpack failed to catch garbage after format string"); - check_error(json_error_invalid_format, "Garbage after format string", "", 1, 4, 4); - json_decref(j); - - j = json_integer(12345); - if(!json_unpack_ex(j, &error, 0, "ia", &i1)) - fail("json_unpack failed to catch garbage after format string"); - check_error(json_error_invalid_format, "Garbage after format string", "", 1, 2, 2); - json_decref(j); - - /* NULL format string */ - j = json_pack("[]"); - if(!json_unpack_ex(j, &error, 0, NULL)) - fail("json_unpack failed to catch null format string"); - check_error(json_error_invalid_argument, "NULL or empty format string", "", -1, -1, 0); - json_decref(j); - - /* NULL string pointer */ - j = json_string("foobie"); - if(!json_unpack_ex(j, &error, 0, "s", NULL)) - fail("json_unpack failed to catch null string pointer"); - check_error(json_error_null_value, "NULL string argument", "", 1, 1, 1); - json_decref(j); - - /* invalid types */ - j = json_integer(42); - j2 = json_string("foo"); - if(!json_unpack_ex(j, &error, 0, "s")) - fail("json_unpack failed to catch invalid type"); - check_error(json_error_wrong_type, "Expected string, got integer", "", 1, 1, 1); - - if(!json_unpack_ex(j, &error, 0, "n")) - fail("json_unpack failed to catch invalid type"); - check_error(json_error_wrong_type, "Expected null, got integer", "", 1, 1, 1); - - if(!json_unpack_ex(j, &error, 0, "b")) - fail("json_unpack failed to catch invalid type"); - check_error(json_error_wrong_type, "Expected true or false, got integer", "", 1, 1, 1); - - if(!json_unpack_ex(j2, &error, 0, "i")) - fail("json_unpack failed to catch invalid type"); - check_error(json_error_wrong_type, "Expected integer, got string", "", 1, 1, 1); - - if(!json_unpack_ex(j2, &error, 0, "I")) - fail("json_unpack failed to catch invalid type"); - check_error(json_error_wrong_type, "Expected integer, got string", "", 1, 1, 1); - - if(!json_unpack_ex(j, &error, 0, "f")) - fail("json_unpack failed to catch invalid type"); - check_error(json_error_wrong_type, "Expected real, got integer", "", 1, 1, 1); - - if(!json_unpack_ex(j2, &error, 0, "F")) - fail("json_unpack failed to catch invalid type"); - check_error(json_error_wrong_type, "Expected real or integer, got string", "", 1, 1, 1); - - if(!json_unpack_ex(j, &error, 0, "[i]")) - fail("json_unpack failed to catch invalid type"); - check_error(json_error_wrong_type, "Expected array, got integer", "", 1, 1, 1); - - if(!json_unpack_ex(j, &error, 0, "{si}", "foo")) - fail("json_unpack failed to catch invalid type"); - check_error(json_error_wrong_type, "Expected object, got integer", "", 1, 1, 1); - - json_decref(j); - json_decref(j2); - - /* Array index out of range */ - j = json_pack("[i]", 1); - if(!json_unpack_ex(j, &error, 0, "[ii]", &i1, &i2)) - fail("json_unpack failed to catch index out of array bounds"); - check_error(json_error_index_out_of_range, "Array index 1 out of range", "", 1, 3, 3); - json_decref(j); - - /* NULL object key */ - j = json_pack("{si}", "foo", 42); - if(!json_unpack_ex(j, &error, 0, "{si}", NULL, &i1)) - fail("json_unpack failed to catch null string pointer"); - check_error(json_error_null_value, "NULL object key", "", 1, 2, 2); - json_decref(j); - - /* Object key not found */ - j = json_pack("{si}", "foo", 42); - if(!json_unpack_ex(j, &error, 0, "{si}", "baz", &i1)) - fail("json_unpack failed to catch null string pointer"); - check_error(json_error_item_not_found, "Object item not found: baz", "", 1, 3, 3); - json_decref(j); - - /* - * Strict validation - */ - - j = json_pack("[iii]", 1, 2, 3); - rv = json_unpack(j, "[iii!]", &i1, &i2, &i3); - if(rv || i1 != 1 || i2 != 2 || i3 != 3) - fail("json_unpack array with strict validation failed"); - json_decref(j); - - j = json_pack("[iii]", 1, 2, 3); - if(!json_unpack_ex(j, &error, 0, "[ii!]", &i1, &i2)) - fail("json_unpack array with strict validation failed"); - check_error(json_error_end_of_input_expected, "1 array item(s) left unpacked", "", 1, 5, 5); - json_decref(j); - - /* Like above, but with JSON_STRICT instead of '!' format */ - j = json_pack("[iii]", 1, 2, 3); - if(!json_unpack_ex(j, &error, JSON_STRICT, "[ii]", &i1, &i2)) - fail("json_unpack array with strict validation failed"); - check_error(json_error_end_of_input_expected, "1 array item(s) left unpacked", "", 1, 4, 4); - json_decref(j); - - j = json_pack("{s:s, s:i}", "foo", "bar", "baz", 42); - rv = json_unpack(j, "{sssi!}", "foo", &s, "baz", &i1); - if(rv || strcmp(s, "bar") != 0 || i1 != 42) - fail("json_unpack object with strict validation failed"); - json_decref(j); - - /* Unpack the same item twice */ - j = json_pack("{s:s, s:i, s:b}", "foo", "bar", "baz", 42, "quux", 1); - if(!json_unpack_ex(j, &error, 0, "{s:s,s:s!}", "foo", &s, "foo", &s)) - fail("json_unpack object with strict validation failed"); - { - const char *possible_errors[] = { - "2 object item(s) left unpacked: baz, quux", - "2 object item(s) left unpacked: quux, baz" - }; - check_errors(json_error_end_of_input_expected, possible_errors, 2, "", 1, 10, 10); - } - json_decref(j); - - j = json_pack("[i,{s:i,s:n},[i,i]]", 1, "foo", 2, "bar", 3, 4); - if(json_unpack_ex(j, NULL, JSON_STRICT | JSON_VALIDATE_ONLY, - "[i{sisn}[ii]]", "foo", "bar")) - fail("json_unpack complex value with strict validation failed"); - json_decref(j); - - /* ! and * must be last */ - j = json_pack("[ii]", 1, 2); - if(!json_unpack_ex(j, &error, 0, "[i!i]", &i1, &i2)) - fail("json_unpack failed to catch ! in the middle of an array"); - check_error(json_error_invalid_format, "Expected ']' after '!', got 'i'", "", 1, 4, 4); - - if(!json_unpack_ex(j, &error, 0, "[i*i]", &i1, &i2)) - fail("json_unpack failed to catch * in the middle of an array"); - check_error(json_error_invalid_format, "Expected ']' after '*', got 'i'", "", 1, 4, 4); - json_decref(j); - - j = json_pack("{sssi}", "foo", "bar", "baz", 42); - if(!json_unpack_ex(j, &error, 0, "{ss!si}", "foo", &s, "baz", &i1)) - fail("json_unpack failed to catch ! in the middle of an object"); - check_error(json_error_invalid_format, "Expected '}' after '!', got 's'", "", 1, 5, 5); - - if(!json_unpack_ex(j, &error, 0, "{ss*si}", "foo", &s, "baz", &i1)) - fail("json_unpack failed to catch ! in the middle of an object"); - check_error(json_error_invalid_format, "Expected '}' after '*', got 's'", "", 1, 5, 5); - json_decref(j); - - /* Error in nested object */ - j = json_pack("{s{snsn}}", "foo", "bar", "baz"); - if(!json_unpack_ex(j, &error, 0, "{s{sn!}}", "foo", "bar")) - fail("json_unpack nested object with strict validation failed"); - check_error(json_error_end_of_input_expected, "1 object item(s) left unpacked: baz", "", 1, 7, 7); - json_decref(j); - - /* Error in nested array */ - j = json_pack("[[ii]]", 1, 2); - if(!json_unpack_ex(j, &error, 0, "[[i!]]", &i1)) - fail("json_unpack nested array with strict validation failed"); - check_error(json_error_end_of_input_expected, "1 array item(s) left unpacked", "", 1, 5, 5); - json_decref(j); - - /* Optional values */ - j = json_object(); - i1 = 0; - if(json_unpack(j, "{s?i}", "foo", &i1)) - fail("json_unpack failed for optional key"); - if(i1 != 0) - fail("json_unpack unpacked an optional key"); - json_decref(j); - - i1 = 0; - j = json_pack("{si}", "foo", 42); - if(json_unpack(j, "{s?i}", "foo", &i1)) - fail("json_unpack failed for an optional value"); - if(i1 != 42) - fail("json_unpack failed to unpack an optional value"); - json_decref(j); - - j = json_object(); - i1 = i2 = i3 = 0; - if(json_unpack(j, "{s?[ii]s?{s{si}}}", - "foo", &i1, &i2, - "bar", "baz", "quux", &i3)) - fail("json_unpack failed for complex optional values"); - if(i1 != 0 || i2 != 0 || i3 != 0) - fail("json_unpack unexpectedly unpacked something"); - json_decref(j); - - j = json_pack("{s{si}}", "foo", "bar", 42); - if(json_unpack(j, "{s?{s?i}}", "foo", "bar", &i1)) - fail("json_unpack failed for complex optional values"); - if(i1 != 42) - fail("json_unpack failed to unpack"); - json_decref(j); - - /* Combine ? and ! */ - j = json_pack("{si}", "foo", 42); - i1 = i2 = 0; - if(json_unpack(j, "{sis?i!}", "foo", &i1, "bar", &i2)) - fail("json_unpack failed for optional values with strict mode"); - if(i1 != 42) - fail("json_unpack failed to unpack"); - if(i2 != 0) - fail("json_unpack failed to unpack"); - json_decref(j); - - /* But don't compensate a missing key with an optional one. */ - j = json_pack("{sisi}", "foo", 42, "baz", 43); - i1 = i2 = i3 = 0; - if(!json_unpack_ex(j, &error, 0, "{sis?i!}", "foo", &i1, "bar", &i2)) - fail("json_unpack failed for optional values with strict mode and compensation"); - check_error(json_error_end_of_input_expected, "1 object item(s) left unpacked: baz", "", 1, 8, 8); - json_decref(j); -} diff --git a/3party/jansson/test/suites/api/util.h b/3party/jansson/test/suites/api/util.h deleted file mode 100644 index 9b658e7895..0000000000 --- a/3party/jansson/test/suites/api/util.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifndef UTIL_H -#define UTIL_H - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#if HAVE_LOCALE_H -#include -#endif - -#include - -#define failhdr fprintf(stderr, "%s:%d: ", __FILE__, __LINE__) - -#define fail(msg) \ - do { \ - failhdr; \ - fprintf(stderr, "%s\n", msg); \ - exit(1); \ - } while(0) - -/* Assumes json_error_t error */ -#define check_errors(code_, texts_, num_, source_, \ - line_, column_, position_) \ - do { \ - int i_, found_ = 0; \ - if(json_error_code(&error) != code_) { \ - failhdr; \ - fprintf(stderr, "code: %d != %d\n", \ - json_error_code(&error), code_); \ - exit(1); \ - } \ - for(i_ = 0; i_ < num_; i_++) { \ - if(strcmp(error.text, texts_[i_]) == 0) { \ - found_ = 1; \ - break; \ - } \ - } \ - if (!found_) { \ - failhdr; \ - if (num_ == 1) { \ - fprintf(stderr, "text: \"%s\" != \"%s\"\n", error.text, texts_[0]); \ - } else { \ - fprintf(stderr, "text: \"%s\" does not match\n", error.text); \ - } \ - exit(1); \ - } \ - if(strcmp(error.source, source_) != 0) { \ - failhdr; \ - \ - fprintf(stderr, "source: \"%s\" != \"%s\"\n", error.source, source_); \ - exit(1); \ - } \ - if(error.line != line_) { \ - failhdr; \ - fprintf(stderr, "line: %d != %d\n", error.line, line_); \ - exit(1); \ - } \ - if(error.column != column_) { \ - failhdr; \ - fprintf(stderr, "column: %d != %d\n", error.column, column_); \ - exit(1); \ - } \ - if(error.position != position_) { \ - failhdr; \ - fprintf(stderr, "position: %d != %d\n", error.position, position_); \ - exit(1); \ - } \ - } while(0) - - -/* Assumes json_error_t error */ -#define check_error(code_, text_, source_, line_, column_, position_) \ - check_errors(code_, &text_, 1, source_, line_, column_, position_) - - -static void run_tests(); - -int main() { -#ifdef HAVE_SETLOCALE - setlocale(LC_ALL, ""); -#endif - run_tests(); - return 0; -} - -#endif diff --git a/3party/jansson/test/suites/encoding-flags/array/input b/3party/jansson/test/suites/encoding-flags/array/input deleted file mode 100644 index 44e2ace7e5..0000000000 --- a/3party/jansson/test/suites/encoding-flags/array/input +++ /dev/null @@ -1 +0,0 @@ -[1, 2] diff --git a/3party/jansson/test/suites/encoding-flags/array/output b/3party/jansson/test/suites/encoding-flags/array/output deleted file mode 100644 index fd8ef09578..0000000000 --- a/3party/jansson/test/suites/encoding-flags/array/output +++ /dev/null @@ -1 +0,0 @@ -[1, 2] \ No newline at end of file diff --git a/3party/jansson/test/suites/encoding-flags/compact-array/env b/3party/jansson/test/suites/encoding-flags/compact-array/env deleted file mode 100644 index 4474aaf143..0000000000 --- a/3party/jansson/test/suites/encoding-flags/compact-array/env +++ /dev/null @@ -1,2 +0,0 @@ -JSON_COMPACT=1 -export JSON_COMPACT diff --git a/3party/jansson/test/suites/encoding-flags/compact-array/input b/3party/jansson/test/suites/encoding-flags/compact-array/input deleted file mode 100644 index 44e2ace7e5..0000000000 --- a/3party/jansson/test/suites/encoding-flags/compact-array/input +++ /dev/null @@ -1 +0,0 @@ -[1, 2] diff --git a/3party/jansson/test/suites/encoding-flags/compact-array/output b/3party/jansson/test/suites/encoding-flags/compact-array/output deleted file mode 100644 index 3169929f69..0000000000 --- a/3party/jansson/test/suites/encoding-flags/compact-array/output +++ /dev/null @@ -1 +0,0 @@ -[1,2] \ No newline at end of file diff --git a/3party/jansson/test/suites/encoding-flags/compact-object/env b/3party/jansson/test/suites/encoding-flags/compact-object/env deleted file mode 100644 index 93cb33ddaf..0000000000 --- a/3party/jansson/test/suites/encoding-flags/compact-object/env +++ /dev/null @@ -1,3 +0,0 @@ -JSON_COMPACT=1 -HASHSEED=1 -export JSON_COMPACT HASHSEED diff --git a/3party/jansson/test/suites/encoding-flags/compact-object/input b/3party/jansson/test/suites/encoding-flags/compact-object/input deleted file mode 100644 index 062e54fb49..0000000000 --- a/3party/jansson/test/suites/encoding-flags/compact-object/input +++ /dev/null @@ -1 +0,0 @@ -{"a": 1, "b": 2} diff --git a/3party/jansson/test/suites/encoding-flags/compact-object/output b/3party/jansson/test/suites/encoding-flags/compact-object/output deleted file mode 100644 index 73a5d70e33..0000000000 --- a/3party/jansson/test/suites/encoding-flags/compact-object/output +++ /dev/null @@ -1 +0,0 @@ -{"a":1,"b":2} \ No newline at end of file diff --git a/3party/jansson/test/suites/encoding-flags/ensure-ascii/env b/3party/jansson/test/suites/encoding-flags/ensure-ascii/env deleted file mode 100644 index 1b7b3e3f95..0000000000 --- a/3party/jansson/test/suites/encoding-flags/ensure-ascii/env +++ /dev/null @@ -1,2 +0,0 @@ -JSON_ENSURE_ASCII=1 -export JSON_ENSURE_ASCII diff --git a/3party/jansson/test/suites/encoding-flags/ensure-ascii/input b/3party/jansson/test/suites/encoding-flags/ensure-ascii/input deleted file mode 100644 index 69469cef58..0000000000 --- a/3party/jansson/test/suites/encoding-flags/ensure-ascii/input +++ /dev/null @@ -1,8 +0,0 @@ -[ - "foo", - "å ä ö", - "foo åä", - "åä foo", - "å foo ä", - "clef g: 𝄞" -] diff --git a/3party/jansson/test/suites/encoding-flags/ensure-ascii/output b/3party/jansson/test/suites/encoding-flags/ensure-ascii/output deleted file mode 100644 index 94fa79d2d2..0000000000 --- a/3party/jansson/test/suites/encoding-flags/ensure-ascii/output +++ /dev/null @@ -1 +0,0 @@ -["foo", "\u00E5 \u00E4 \u00F6", "foo \u00E5\u00E4", "\u00E5\u00E4 foo", "\u00E5 foo \u00E4", "clef g: \uD834\uDD1E"] \ No newline at end of file diff --git a/3party/jansson/test/suites/encoding-flags/indent-array/env b/3party/jansson/test/suites/encoding-flags/indent-array/env deleted file mode 100644 index d220f837c3..0000000000 --- a/3party/jansson/test/suites/encoding-flags/indent-array/env +++ /dev/null @@ -1,2 +0,0 @@ -JSON_INDENT=4 -export JSON_INDENT diff --git a/3party/jansson/test/suites/encoding-flags/indent-array/input b/3party/jansson/test/suites/encoding-flags/indent-array/input deleted file mode 100644 index 44e2ace7e5..0000000000 --- a/3party/jansson/test/suites/encoding-flags/indent-array/input +++ /dev/null @@ -1 +0,0 @@ -[1, 2] diff --git a/3party/jansson/test/suites/encoding-flags/indent-array/output b/3party/jansson/test/suites/encoding-flags/indent-array/output deleted file mode 100644 index c57d705ba8..0000000000 --- a/3party/jansson/test/suites/encoding-flags/indent-array/output +++ /dev/null @@ -1,4 +0,0 @@ -[ - 1, - 2 -] \ No newline at end of file diff --git a/3party/jansson/test/suites/encoding-flags/indent-compact-array/env b/3party/jansson/test/suites/encoding-flags/indent-compact-array/env deleted file mode 100644 index 78fbfcc2e7..0000000000 --- a/3party/jansson/test/suites/encoding-flags/indent-compact-array/env +++ /dev/null @@ -1,3 +0,0 @@ -JSON_INDENT=4 -JSON_COMPACT=1 -export JSON_INDENT JSON_COMPACT diff --git a/3party/jansson/test/suites/encoding-flags/indent-compact-array/input b/3party/jansson/test/suites/encoding-flags/indent-compact-array/input deleted file mode 100644 index 44e2ace7e5..0000000000 --- a/3party/jansson/test/suites/encoding-flags/indent-compact-array/input +++ /dev/null @@ -1 +0,0 @@ -[1, 2] diff --git a/3party/jansson/test/suites/encoding-flags/indent-compact-array/output b/3party/jansson/test/suites/encoding-flags/indent-compact-array/output deleted file mode 100644 index c57d705ba8..0000000000 --- a/3party/jansson/test/suites/encoding-flags/indent-compact-array/output +++ /dev/null @@ -1,4 +0,0 @@ -[ - 1, - 2 -] \ No newline at end of file diff --git a/3party/jansson/test/suites/encoding-flags/indent-compact-object/env b/3party/jansson/test/suites/encoding-flags/indent-compact-object/env deleted file mode 100644 index c73acc1792..0000000000 --- a/3party/jansson/test/suites/encoding-flags/indent-compact-object/env +++ /dev/null @@ -1,4 +0,0 @@ -JSON_INDENT=4 -JSON_COMPACT=1 -HASHSEED=1 -export JSON_INDENT JSON_COMPACT HASHSEED diff --git a/3party/jansson/test/suites/encoding-flags/indent-compact-object/input b/3party/jansson/test/suites/encoding-flags/indent-compact-object/input deleted file mode 100644 index 062e54fb49..0000000000 --- a/3party/jansson/test/suites/encoding-flags/indent-compact-object/input +++ /dev/null @@ -1 +0,0 @@ -{"a": 1, "b": 2} diff --git a/3party/jansson/test/suites/encoding-flags/indent-compact-object/output b/3party/jansson/test/suites/encoding-flags/indent-compact-object/output deleted file mode 100644 index 9cc42948d4..0000000000 --- a/3party/jansson/test/suites/encoding-flags/indent-compact-object/output +++ /dev/null @@ -1,4 +0,0 @@ -{ - "a":1, - "b":2 -} \ No newline at end of file diff --git a/3party/jansson/test/suites/encoding-flags/indent-object/env b/3party/jansson/test/suites/encoding-flags/indent-object/env deleted file mode 100644 index 961558ca23..0000000000 --- a/3party/jansson/test/suites/encoding-flags/indent-object/env +++ /dev/null @@ -1,3 +0,0 @@ -JSON_INDENT=4 -HASHSEED=1 -export JSON_INDENT HASHSEED diff --git a/3party/jansson/test/suites/encoding-flags/indent-object/input b/3party/jansson/test/suites/encoding-flags/indent-object/input deleted file mode 100644 index 062e54fb49..0000000000 --- a/3party/jansson/test/suites/encoding-flags/indent-object/input +++ /dev/null @@ -1 +0,0 @@ -{"a": 1, "b": 2} diff --git a/3party/jansson/test/suites/encoding-flags/indent-object/output b/3party/jansson/test/suites/encoding-flags/indent-object/output deleted file mode 100644 index 0fbddba449..0000000000 --- a/3party/jansson/test/suites/encoding-flags/indent-object/output +++ /dev/null @@ -1,4 +0,0 @@ -{ - "a": 1, - "b": 2 -} \ No newline at end of file diff --git a/3party/jansson/test/suites/encoding-flags/object/env b/3party/jansson/test/suites/encoding-flags/object/env deleted file mode 100644 index 9120b03514..0000000000 --- a/3party/jansson/test/suites/encoding-flags/object/env +++ /dev/null @@ -1,2 +0,0 @@ -HASHSEED=1 -export HASHSEED diff --git a/3party/jansson/test/suites/encoding-flags/object/input b/3party/jansson/test/suites/encoding-flags/object/input deleted file mode 100644 index 062e54fb49..0000000000 --- a/3party/jansson/test/suites/encoding-flags/object/input +++ /dev/null @@ -1 +0,0 @@ -{"a": 1, "b": 2} diff --git a/3party/jansson/test/suites/encoding-flags/object/output b/3party/jansson/test/suites/encoding-flags/object/output deleted file mode 100644 index ecd219f72d..0000000000 --- a/3party/jansson/test/suites/encoding-flags/object/output +++ /dev/null @@ -1 +0,0 @@ -{"a": 1, "b": 2} \ No newline at end of file diff --git a/3party/jansson/test/suites/encoding-flags/preserve-order/env b/3party/jansson/test/suites/encoding-flags/preserve-order/env deleted file mode 100644 index 4d9d206593..0000000000 --- a/3party/jansson/test/suites/encoding-flags/preserve-order/env +++ /dev/null @@ -1,2 +0,0 @@ -JSON_PRESERVE_ORDER=1 -export JSON_PRESERVE_ORDER diff --git a/3party/jansson/test/suites/encoding-flags/preserve-order/input b/3party/jansson/test/suites/encoding-flags/preserve-order/input deleted file mode 100644 index 27bcf18a07..0000000000 --- a/3party/jansson/test/suites/encoding-flags/preserve-order/input +++ /dev/null @@ -1 +0,0 @@ -{"foo": 1, "bar": 2, "asdf": 3, "deadbeef": 4, "badc0ffee": 5, "qwerty": 6} diff --git a/3party/jansson/test/suites/encoding-flags/preserve-order/output b/3party/jansson/test/suites/encoding-flags/preserve-order/output deleted file mode 100644 index 7a443f684c..0000000000 --- a/3party/jansson/test/suites/encoding-flags/preserve-order/output +++ /dev/null @@ -1 +0,0 @@ -{"foo": 1, "bar": 2, "asdf": 3, "deadbeef": 4, "badc0ffee": 5, "qwerty": 6} \ No newline at end of file diff --git a/3party/jansson/test/suites/encoding-flags/real-precision/env b/3party/jansson/test/suites/encoding-flags/real-precision/env deleted file mode 100644 index 9c52cbcd67..0000000000 --- a/3party/jansson/test/suites/encoding-flags/real-precision/env +++ /dev/null @@ -1,2 +0,0 @@ -JSON_REAL_PRECISION=4 -export JSON_REAL_PRECISION diff --git a/3party/jansson/test/suites/encoding-flags/real-precision/input b/3party/jansson/test/suites/encoding-flags/real-precision/input deleted file mode 100644 index e291165c15..0000000000 --- a/3party/jansson/test/suites/encoding-flags/real-precision/input +++ /dev/null @@ -1 +0,0 @@ -[1.23456789, 1.0, 1.0000000000000002] diff --git a/3party/jansson/test/suites/encoding-flags/real-precision/output b/3party/jansson/test/suites/encoding-flags/real-precision/output deleted file mode 100644 index f273c73e5b..0000000000 --- a/3party/jansson/test/suites/encoding-flags/real-precision/output +++ /dev/null @@ -1 +0,0 @@ -[1.235, 1.0, 1.0] \ No newline at end of file diff --git a/3party/jansson/test/suites/encoding-flags/run b/3party/jansson/test/suites/encoding-flags/run deleted file mode 100755 index 5db7d5e5c6..0000000000 --- a/3party/jansson/test/suites/encoding-flags/run +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2009-2016 Petri Lehtinen -# -# Jansson is free software; you can redistribute it and/or modify -# it under the terms of the MIT license. See LICENSE for details. - -is_test() { - test -d $test_path -} - -run_test() { - ( - if [ -f $test_path/env ]; then - . $test_path/env - fi - $json_process --env <$test_path/input >$test_log/stdout 2>$test_log/stderr - ) - valgrind_check $test_log/stderr || return 1 - cmp -s $test_path/output $test_log/stdout -} - -show_error() { - valgrind_show_error && return - - echo "EXPECTED OUTPUT:" - nl -bn $test_path/output - echo "ACTUAL OUTPUT:" - nl -bn $test_log/stdout -} - -. $top_srcdir/test/scripts/run-tests.sh diff --git a/3party/jansson/test/suites/encoding-flags/sort-keys/env b/3party/jansson/test/suites/encoding-flags/sort-keys/env deleted file mode 100644 index 3ef24cb7b8..0000000000 --- a/3party/jansson/test/suites/encoding-flags/sort-keys/env +++ /dev/null @@ -1,2 +0,0 @@ -JSON_SORT_KEYS=1 -export JSON_SORT_KEYS diff --git a/3party/jansson/test/suites/encoding-flags/sort-keys/input b/3party/jansson/test/suites/encoding-flags/sort-keys/input deleted file mode 100644 index 66951d6b03..0000000000 --- a/3party/jansson/test/suites/encoding-flags/sort-keys/input +++ /dev/null @@ -1 +0,0 @@ -{"foo": 1, "bar": 2, "baz": 3, "quux": 4} diff --git a/3party/jansson/test/suites/encoding-flags/sort-keys/output b/3party/jansson/test/suites/encoding-flags/sort-keys/output deleted file mode 100644 index 132d9df312..0000000000 --- a/3party/jansson/test/suites/encoding-flags/sort-keys/output +++ /dev/null @@ -1 +0,0 @@ -{"bar": 2, "baz": 3, "foo": 1, "quux": 4} \ No newline at end of file diff --git a/3party/jansson/test/suites/invalid-unicode/encoded-surrogate-half/error b/3party/jansson/test/suites/invalid-unicode/encoded-surrogate-half/error deleted file mode 100644 index 762d2c4b17..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/encoded-surrogate-half/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unable to decode byte 0xed near '"' diff --git a/3party/jansson/test/suites/invalid-unicode/encoded-surrogate-half/input b/3party/jansson/test/suites/invalid-unicode/encoded-surrogate-half/input deleted file mode 100644 index 515dd933ce..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/encoded-surrogate-half/input +++ /dev/null @@ -1 +0,0 @@ -[" <-- encoded surrogate half"] diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-after-backslash/error b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-after-backslash/error deleted file mode 100644 index b16dc171ee..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-after-backslash/error +++ /dev/null @@ -1,2 +0,0 @@ -1 3 3 -unable to decode byte 0xe5 near '"\' diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-after-backslash/input b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-after-backslash/input deleted file mode 100644 index 57c8beef64..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-after-backslash/input +++ /dev/null @@ -1 +0,0 @@ -["\"] diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-array/error b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-array/error deleted file mode 100644 index be15386df0..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-array/error +++ /dev/null @@ -1,2 +0,0 @@ -1 1 1 -unable to decode byte 0xe5 diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-array/input b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-array/input deleted file mode 100644 index ebefcd6f87..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-array/input +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-bigger-int/error b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-bigger-int/error deleted file mode 100644 index 01b4476392..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-bigger-int/error +++ /dev/null @@ -1,2 +0,0 @@ -1 4 4 -unable to decode byte 0xe5 near '123' diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-bigger-int/input b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-bigger-int/input deleted file mode 100644 index e512f9ae08..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-bigger-int/input +++ /dev/null @@ -1 +0,0 @@ -[123] diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-escape/error b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-escape/error deleted file mode 100644 index c13583dd85..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-escape/error +++ /dev/null @@ -1,2 +0,0 @@ -1 4 4 -unable to decode byte 0xe5 near '"\u' diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-escape/input b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-escape/input deleted file mode 100644 index 2b271b82f3..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-escape/input +++ /dev/null @@ -1 +0,0 @@ -["\u"] diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-exponent/error b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-exponent/error deleted file mode 100644 index c7b20b7a2a..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-exponent/error +++ /dev/null @@ -1,2 +0,0 @@ -1 4 4 -unable to decode byte 0xe5 near '1e1' diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-exponent/input b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-exponent/input deleted file mode 100644 index d8e83c5954..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-exponent/input +++ /dev/null @@ -1 +0,0 @@ -[1e1] diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-identifier/error b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-identifier/error deleted file mode 100644 index 33dfc23242..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-identifier/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unable to decode byte 0xe5 near 'a' diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-identifier/input b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-identifier/input deleted file mode 100644 index ef038514a9..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-identifier/input +++ /dev/null @@ -1 +0,0 @@ -[a] diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-int/error b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-int/error deleted file mode 100644 index 8f08970c12..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-int/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unable to decode byte 0xe5 near '0' diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-int/input b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-int/input deleted file mode 100644 index 371226e4cd..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-int/input +++ /dev/null @@ -1 +0,0 @@ -[0] diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-real-after-e/error b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-real-after-e/error deleted file mode 100644 index b7660e327f..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-real-after-e/error +++ /dev/null @@ -1,2 +0,0 @@ -1 3 3 -unable to decode byte 0xe5 near '1e' diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-real-after-e/input b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-real-after-e/input deleted file mode 100644 index 17fc29c90a..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-real-after-e/input +++ /dev/null @@ -1 +0,0 @@ -[1e] diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-string/error b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-string/error deleted file mode 100644 index 0b7039a520..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-string/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unable to decode byte 0xe5 near '"' diff --git a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-string/input b/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-string/input deleted file mode 100644 index 00b79c0afa..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/invalid-utf-8-in-string/input +++ /dev/null @@ -1 +0,0 @@ -[" <-- invalid UTF-8"] diff --git a/3party/jansson/test/suites/invalid-unicode/lone-invalid-utf-8/error b/3party/jansson/test/suites/invalid-unicode/lone-invalid-utf-8/error deleted file mode 100644 index 8e9a511192..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/lone-invalid-utf-8/error +++ /dev/null @@ -1,2 +0,0 @@ -1 0 0 -unable to decode byte 0xe5 diff --git a/3party/jansson/test/suites/invalid-unicode/lone-invalid-utf-8/input b/3party/jansson/test/suites/invalid-unicode/lone-invalid-utf-8/input deleted file mode 100644 index eb8079699b..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/lone-invalid-utf-8/input +++ /dev/null @@ -1 +0,0 @@ - diff --git a/3party/jansson/test/suites/invalid-unicode/lone-utf-8-continuation-byte/error b/3party/jansson/test/suites/invalid-unicode/lone-utf-8-continuation-byte/error deleted file mode 100644 index 86bbad3c80..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/lone-utf-8-continuation-byte/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unable to decode byte 0x81 near '"' diff --git a/3party/jansson/test/suites/invalid-unicode/lone-utf-8-continuation-byte/input b/3party/jansson/test/suites/invalid-unicode/lone-utf-8-continuation-byte/input deleted file mode 100644 index 62a26b6fb8..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/lone-utf-8-continuation-byte/input +++ /dev/null @@ -1 +0,0 @@ -[""] diff --git a/3party/jansson/test/suites/invalid-unicode/not-in-unicode-range/error b/3party/jansson/test/suites/invalid-unicode/not-in-unicode-range/error deleted file mode 100644 index d07ccb3e5e..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/not-in-unicode-range/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unable to decode byte 0xf4 near '"' diff --git a/3party/jansson/test/suites/invalid-unicode/not-in-unicode-range/input b/3party/jansson/test/suites/invalid-unicode/not-in-unicode-range/input deleted file mode 100644 index 1216186a78..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/not-in-unicode-range/input +++ /dev/null @@ -1 +0,0 @@ -[""] diff --git a/3party/jansson/test/suites/invalid-unicode/overlong-3-byte-encoding/error b/3party/jansson/test/suites/invalid-unicode/overlong-3-byte-encoding/error deleted file mode 100644 index 8a05abaed5..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/overlong-3-byte-encoding/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unable to decode byte 0xe0 near '"' diff --git a/3party/jansson/test/suites/invalid-unicode/overlong-3-byte-encoding/input b/3party/jansson/test/suites/invalid-unicode/overlong-3-byte-encoding/input deleted file mode 100644 index 0bf909f7be..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/overlong-3-byte-encoding/input +++ /dev/null @@ -1 +0,0 @@ -[" <-- overlong encoding"] diff --git a/3party/jansson/test/suites/invalid-unicode/overlong-4-byte-encoding/error b/3party/jansson/test/suites/invalid-unicode/overlong-4-byte-encoding/error deleted file mode 100644 index 7e19c5fe48..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/overlong-4-byte-encoding/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unable to decode byte 0xf0 near '"' diff --git a/3party/jansson/test/suites/invalid-unicode/overlong-4-byte-encoding/input b/3party/jansson/test/suites/invalid-unicode/overlong-4-byte-encoding/input deleted file mode 100644 index c6b6313509..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/overlong-4-byte-encoding/input +++ /dev/null @@ -1 +0,0 @@ -[" <-- overlong encoding"] diff --git a/3party/jansson/test/suites/invalid-unicode/overlong-ascii-encoding/error b/3party/jansson/test/suites/invalid-unicode/overlong-ascii-encoding/error deleted file mode 100644 index 1d382edd7a..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/overlong-ascii-encoding/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unable to decode byte 0xc1 near '"' diff --git a/3party/jansson/test/suites/invalid-unicode/overlong-ascii-encoding/input b/3party/jansson/test/suites/invalid-unicode/overlong-ascii-encoding/input deleted file mode 100644 index ef6e10a342..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/overlong-ascii-encoding/input +++ /dev/null @@ -1 +0,0 @@ -[""] diff --git a/3party/jansson/test/suites/invalid-unicode/restricted-utf-8/error b/3party/jansson/test/suites/invalid-unicode/restricted-utf-8/error deleted file mode 100644 index d018f5ff3d..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/restricted-utf-8/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unable to decode byte 0xfd near '"' diff --git a/3party/jansson/test/suites/invalid-unicode/restricted-utf-8/input b/3party/jansson/test/suites/invalid-unicode/restricted-utf-8/input deleted file mode 100644 index ba6017002c..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/restricted-utf-8/input +++ /dev/null @@ -1 +0,0 @@ -[""] diff --git a/3party/jansson/test/suites/invalid-unicode/run b/3party/jansson/test/suites/invalid-unicode/run deleted file mode 100755 index 369c43da52..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/run +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2009-2016 Petri Lehtinen -# -# Jansson is free software; you can redistribute it and/or modify -# it under the terms of the MIT license. See LICENSE for details. - -is_test() { - test -d $test_path -} - -run_test() { - $json_process --env <$test_path/input >$test_log/stdout 2>$test_log/stderr - valgrind_check $test_log/stderr || return 1 - cmp -s $test_path/error $test_log/stderr -} - -show_error() { - valgrind_show_error && return - - echo "EXPECTED ERROR:" - nl -bn $test_path/error - echo "ACTUAL ERROR:" - nl -bn $test_log/stderr -} - -. $top_srcdir/test/scripts/run-tests.sh diff --git a/3party/jansson/test/suites/invalid-unicode/truncated-utf-8/error b/3party/jansson/test/suites/invalid-unicode/truncated-utf-8/error deleted file mode 100644 index 8a05abaed5..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/truncated-utf-8/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unable to decode byte 0xe0 near '"' diff --git a/3party/jansson/test/suites/invalid-unicode/truncated-utf-8/input b/3party/jansson/test/suites/invalid-unicode/truncated-utf-8/input deleted file mode 100644 index bce9e18bf9..0000000000 --- a/3party/jansson/test/suites/invalid-unicode/truncated-utf-8/input +++ /dev/null @@ -1 +0,0 @@ -[" <-- truncated UTF-8"] diff --git a/3party/jansson/test/suites/invalid/apostrophe/error b/3party/jansson/test/suites/invalid/apostrophe/error deleted file mode 100644 index 79bb2a0eb4..0000000000 --- a/3party/jansson/test/suites/invalid/apostrophe/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -invalid token near ''' diff --git a/3party/jansson/test/suites/invalid/apostrophe/input b/3party/jansson/test/suites/invalid/apostrophe/input deleted file mode 100644 index f2dd4d224d..0000000000 --- a/3party/jansson/test/suites/invalid/apostrophe/input +++ /dev/null @@ -1 +0,0 @@ -[' diff --git a/3party/jansson/test/suites/invalid/ascii-unicode-identifier/error b/3party/jansson/test/suites/invalid/ascii-unicode-identifier/error deleted file mode 100644 index a4d8142805..0000000000 --- a/3party/jansson/test/suites/invalid/ascii-unicode-identifier/error +++ /dev/null @@ -1,2 +0,0 @@ -1 1 1 -'[' or '{' expected near 'a' diff --git a/3party/jansson/test/suites/invalid/ascii-unicode-identifier/input b/3party/jansson/test/suites/invalid/ascii-unicode-identifier/input deleted file mode 100644 index c2c0208eda..0000000000 --- a/3party/jansson/test/suites/invalid/ascii-unicode-identifier/input +++ /dev/null @@ -1 +0,0 @@ -aå diff --git a/3party/jansson/test/suites/invalid/brace-comma/error b/3party/jansson/test/suites/invalid/brace-comma/error deleted file mode 100644 index ce046213cf..0000000000 --- a/3party/jansson/test/suites/invalid/brace-comma/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -string or '}' expected near ',' diff --git a/3party/jansson/test/suites/invalid/brace-comma/input b/3party/jansson/test/suites/invalid/brace-comma/input deleted file mode 100644 index 74a6628d44..0000000000 --- a/3party/jansson/test/suites/invalid/brace-comma/input +++ /dev/null @@ -1 +0,0 @@ -{, diff --git a/3party/jansson/test/suites/invalid/bracket-comma/error b/3party/jansson/test/suites/invalid/bracket-comma/error deleted file mode 100644 index ce0a912bf2..0000000000 --- a/3party/jansson/test/suites/invalid/bracket-comma/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unexpected token near ',' diff --git a/3party/jansson/test/suites/invalid/bracket-comma/input b/3party/jansson/test/suites/invalid/bracket-comma/input deleted file mode 100644 index 5b911f11dc..0000000000 --- a/3party/jansson/test/suites/invalid/bracket-comma/input +++ /dev/null @@ -1 +0,0 @@ -[, diff --git a/3party/jansson/test/suites/invalid/bracket-one-comma/error.normal b/3party/jansson/test/suites/invalid/bracket-one-comma/error.normal deleted file mode 100644 index 0248b114aa..0000000000 --- a/3party/jansson/test/suites/invalid/bracket-one-comma/error.normal +++ /dev/null @@ -1,2 +0,0 @@ -2 0 4 -']' expected near end of file diff --git a/3party/jansson/test/suites/invalid/bracket-one-comma/error.strip b/3party/jansson/test/suites/invalid/bracket-one-comma/error.strip deleted file mode 100644 index f89b38fcbf..0000000000 --- a/3party/jansson/test/suites/invalid/bracket-one-comma/error.strip +++ /dev/null @@ -1,2 +0,0 @@ -1 3 3 -']' expected near end of file diff --git a/3party/jansson/test/suites/invalid/bracket-one-comma/input b/3party/jansson/test/suites/invalid/bracket-one-comma/input deleted file mode 100644 index 874691b1de..0000000000 --- a/3party/jansson/test/suites/invalid/bracket-one-comma/input +++ /dev/null @@ -1 +0,0 @@ -[1, diff --git a/3party/jansson/test/suites/invalid/empty/error b/3party/jansson/test/suites/invalid/empty/error deleted file mode 100644 index f45da6f820..0000000000 --- a/3party/jansson/test/suites/invalid/empty/error +++ /dev/null @@ -1,2 +0,0 @@ -1 0 0 -'[' or '{' expected near end of file diff --git a/3party/jansson/test/suites/invalid/empty/input b/3party/jansson/test/suites/invalid/empty/input deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/3party/jansson/test/suites/invalid/extra-comma-in-array/error b/3party/jansson/test/suites/invalid/extra-comma-in-array/error deleted file mode 100644 index cae86c2460..0000000000 --- a/3party/jansson/test/suites/invalid/extra-comma-in-array/error +++ /dev/null @@ -1,2 +0,0 @@ -1 4 4 -unexpected token near ']' diff --git a/3party/jansson/test/suites/invalid/extra-comma-in-array/input b/3party/jansson/test/suites/invalid/extra-comma-in-array/input deleted file mode 100644 index e8b1a170fd..0000000000 --- a/3party/jansson/test/suites/invalid/extra-comma-in-array/input +++ /dev/null @@ -1 +0,0 @@ -[1,] diff --git a/3party/jansson/test/suites/invalid/extra-comma-in-multiline-array/error b/3party/jansson/test/suites/invalid/extra-comma-in-multiline-array/error deleted file mode 100644 index 5baeea4472..0000000000 --- a/3party/jansson/test/suites/invalid/extra-comma-in-multiline-array/error +++ /dev/null @@ -1,2 +0,0 @@ -6 1 17 -unexpected token near ']' diff --git a/3party/jansson/test/suites/invalid/extra-comma-in-multiline-array/input b/3party/jansson/test/suites/invalid/extra-comma-in-multiline-array/input deleted file mode 100644 index bcb2a75260..0000000000 --- a/3party/jansson/test/suites/invalid/extra-comma-in-multiline-array/input +++ /dev/null @@ -1,6 +0,0 @@ -[1, -2, -3, -4, -5, -] diff --git a/3party/jansson/test/suites/invalid/garbage-after-newline/error b/3party/jansson/test/suites/invalid/garbage-after-newline/error deleted file mode 100644 index 5d2dec3749..0000000000 --- a/3party/jansson/test/suites/invalid/garbage-after-newline/error +++ /dev/null @@ -1,2 +0,0 @@ -2 3 11 -end of file expected near 'foo' diff --git a/3party/jansson/test/suites/invalid/garbage-after-newline/input b/3party/jansson/test/suites/invalid/garbage-after-newline/input deleted file mode 100644 index 3614ac78fe..0000000000 --- a/3party/jansson/test/suites/invalid/garbage-after-newline/input +++ /dev/null @@ -1,2 +0,0 @@ -[1,2,3] -foo diff --git a/3party/jansson/test/suites/invalid/garbage-at-the-end/error b/3party/jansson/test/suites/invalid/garbage-at-the-end/error deleted file mode 100644 index cdd8175728..0000000000 --- a/3party/jansson/test/suites/invalid/garbage-at-the-end/error +++ /dev/null @@ -1,2 +0,0 @@ -1 10 10 -end of file expected near 'foo' diff --git a/3party/jansson/test/suites/invalid/garbage-at-the-end/input b/3party/jansson/test/suites/invalid/garbage-at-the-end/input deleted file mode 100644 index 55aee53d22..0000000000 --- a/3party/jansson/test/suites/invalid/garbage-at-the-end/input +++ /dev/null @@ -1 +0,0 @@ -[1,2,3]foo diff --git a/3party/jansson/test/suites/invalid/integer-starting-with-zero/error b/3party/jansson/test/suites/invalid/integer-starting-with-zero/error deleted file mode 100644 index 64e0536aa6..0000000000 --- a/3party/jansson/test/suites/invalid/integer-starting-with-zero/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -invalid token near '0' diff --git a/3party/jansson/test/suites/invalid/integer-starting-with-zero/input b/3party/jansson/test/suites/invalid/integer-starting-with-zero/input deleted file mode 100644 index 12f67e2c26..0000000000 --- a/3party/jansson/test/suites/invalid/integer-starting-with-zero/input +++ /dev/null @@ -1 +0,0 @@ -[012] diff --git a/3party/jansson/test/suites/invalid/invalid-escape/error b/3party/jansson/test/suites/invalid/invalid-escape/error deleted file mode 100644 index d9863f73b3..0000000000 --- a/3party/jansson/test/suites/invalid/invalid-escape/error +++ /dev/null @@ -1,2 +0,0 @@ -1 4 4 -invalid escape near '"\a' diff --git a/3party/jansson/test/suites/invalid/invalid-escape/input b/3party/jansson/test/suites/invalid/invalid-escape/input deleted file mode 100644 index 64c7b70d98..0000000000 --- a/3party/jansson/test/suites/invalid/invalid-escape/input +++ /dev/null @@ -1 +0,0 @@ -["\a <-- invalid escape"] diff --git a/3party/jansson/test/suites/invalid/invalid-identifier/error b/3party/jansson/test/suites/invalid/invalid-identifier/error deleted file mode 100644 index 496c6aba25..0000000000 --- a/3party/jansson/test/suites/invalid/invalid-identifier/error +++ /dev/null @@ -1,2 +0,0 @@ -1 5 5 -invalid token near 'troo' diff --git a/3party/jansson/test/suites/invalid/invalid-identifier/input b/3party/jansson/test/suites/invalid/invalid-identifier/input deleted file mode 100644 index 3d2860da18..0000000000 --- a/3party/jansson/test/suites/invalid/invalid-identifier/input +++ /dev/null @@ -1 +0,0 @@ -[troo diff --git a/3party/jansson/test/suites/invalid/invalid-negative-integer/error b/3party/jansson/test/suites/invalid/invalid-negative-integer/error deleted file mode 100644 index f2526c51e7..0000000000 --- a/3party/jansson/test/suites/invalid/invalid-negative-integer/error +++ /dev/null @@ -1,2 +0,0 @@ -1 8 8 -']' expected near 'foo' diff --git a/3party/jansson/test/suites/invalid/invalid-negative-integer/input b/3party/jansson/test/suites/invalid/invalid-negative-integer/input deleted file mode 100644 index 6196980ecc..0000000000 --- a/3party/jansson/test/suites/invalid/invalid-negative-integer/input +++ /dev/null @@ -1 +0,0 @@ -[-123foo] diff --git a/3party/jansson/test/suites/invalid/invalid-negative-real/error b/3party/jansson/test/suites/invalid/invalid-negative-real/error deleted file mode 100644 index 933158ae5a..0000000000 --- a/3party/jansson/test/suites/invalid/invalid-negative-real/error +++ /dev/null @@ -1,2 +0,0 @@ -1 12 12 -']' expected near 'foo' diff --git a/3party/jansson/test/suites/invalid/invalid-negative-real/input b/3party/jansson/test/suites/invalid/invalid-negative-real/input deleted file mode 100644 index 3c763d334e..0000000000 --- a/3party/jansson/test/suites/invalid/invalid-negative-real/input +++ /dev/null @@ -1 +0,0 @@ -[-123.123foo] diff --git a/3party/jansson/test/suites/invalid/invalid-second-surrogate/error b/3party/jansson/test/suites/invalid/invalid-second-surrogate/error deleted file mode 100644 index e5a2359e66..0000000000 --- a/3party/jansson/test/suites/invalid/invalid-second-surrogate/error +++ /dev/null @@ -1,2 +0,0 @@ -1 62 62 -invalid Unicode '\uD888\u3210' diff --git a/3party/jansson/test/suites/invalid/invalid-second-surrogate/input b/3party/jansson/test/suites/invalid/invalid-second-surrogate/input deleted file mode 100644 index b21453f6f2..0000000000 --- a/3party/jansson/test/suites/invalid/invalid-second-surrogate/input +++ /dev/null @@ -1 +0,0 @@ -["\uD888\u3210 (first surrogate and invalid second surrogate)"] diff --git a/3party/jansson/test/suites/invalid/invalid-unicode-escape/error b/3party/jansson/test/suites/invalid/invalid-unicode-escape/error deleted file mode 100644 index 221c762eb0..0000000000 --- a/3party/jansson/test/suites/invalid/invalid-unicode-escape/error +++ /dev/null @@ -1,2 +0,0 @@ -1 5 5 -invalid escape near '"\uq' diff --git a/3party/jansson/test/suites/invalid/invalid-unicode-escape/input b/3party/jansson/test/suites/invalid/invalid-unicode-escape/input deleted file mode 100644 index f381e85b8b..0000000000 --- a/3party/jansson/test/suites/invalid/invalid-unicode-escape/input +++ /dev/null @@ -1 +0,0 @@ -["\uqqqq <-- invalid unicode escape"] diff --git a/3party/jansson/test/suites/invalid/lone-open-brace/error.normal b/3party/jansson/test/suites/invalid/lone-open-brace/error.normal deleted file mode 100644 index 00dc765b9c..0000000000 --- a/3party/jansson/test/suites/invalid/lone-open-brace/error.normal +++ /dev/null @@ -1,2 +0,0 @@ -2 0 2 -string or '}' expected near end of file diff --git a/3party/jansson/test/suites/invalid/lone-open-brace/error.strip b/3party/jansson/test/suites/invalid/lone-open-brace/error.strip deleted file mode 100644 index bb1c047456..0000000000 --- a/3party/jansson/test/suites/invalid/lone-open-brace/error.strip +++ /dev/null @@ -1,2 +0,0 @@ -1 1 1 -string or '}' expected near end of file diff --git a/3party/jansson/test/suites/invalid/lone-open-brace/input b/3party/jansson/test/suites/invalid/lone-open-brace/input deleted file mode 100644 index 98232c64fc..0000000000 --- a/3party/jansson/test/suites/invalid/lone-open-brace/input +++ /dev/null @@ -1 +0,0 @@ -{ diff --git a/3party/jansson/test/suites/invalid/lone-open-bracket/error.normal b/3party/jansson/test/suites/invalid/lone-open-bracket/error.normal deleted file mode 100644 index f463928f8a..0000000000 --- a/3party/jansson/test/suites/invalid/lone-open-bracket/error.normal +++ /dev/null @@ -1,2 +0,0 @@ -2 0 2 -']' expected near end of file diff --git a/3party/jansson/test/suites/invalid/lone-open-bracket/error.strip b/3party/jansson/test/suites/invalid/lone-open-bracket/error.strip deleted file mode 100644 index 2bc07ea0c5..0000000000 --- a/3party/jansson/test/suites/invalid/lone-open-bracket/error.strip +++ /dev/null @@ -1,2 +0,0 @@ -1 1 1 -']' expected near end of file diff --git a/3party/jansson/test/suites/invalid/lone-open-bracket/input b/3party/jansson/test/suites/invalid/lone-open-bracket/input deleted file mode 100644 index 558ed37d93..0000000000 --- a/3party/jansson/test/suites/invalid/lone-open-bracket/input +++ /dev/null @@ -1 +0,0 @@ -[ diff --git a/3party/jansson/test/suites/invalid/lone-second-surrogate/error b/3party/jansson/test/suites/invalid/lone-second-surrogate/error deleted file mode 100644 index bc5f34e11a..0000000000 --- a/3party/jansson/test/suites/invalid/lone-second-surrogate/error +++ /dev/null @@ -1,2 +0,0 @@ -1 40 40 -invalid Unicode '\uDFAA' diff --git a/3party/jansson/test/suites/invalid/lone-second-surrogate/input b/3party/jansson/test/suites/invalid/lone-second-surrogate/input deleted file mode 100644 index 328e35c826..0000000000 --- a/3party/jansson/test/suites/invalid/lone-second-surrogate/input +++ /dev/null @@ -1 +0,0 @@ -["\uDFAA (second surrogate on it's own)"] diff --git a/3party/jansson/test/suites/invalid/minus-sign-without-number/error b/3party/jansson/test/suites/invalid/minus-sign-without-number/error deleted file mode 100644 index b3a78b9781..0000000000 --- a/3party/jansson/test/suites/invalid/minus-sign-without-number/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -invalid token near '-' diff --git a/3party/jansson/test/suites/invalid/minus-sign-without-number/input b/3party/jansson/test/suites/invalid/minus-sign-without-number/input deleted file mode 100644 index 0337883557..0000000000 --- a/3party/jansson/test/suites/invalid/minus-sign-without-number/input +++ /dev/null @@ -1 +0,0 @@ -[-foo] diff --git a/3party/jansson/test/suites/invalid/negative-integer-starting-with-zero/error b/3party/jansson/test/suites/invalid/negative-integer-starting-with-zero/error deleted file mode 100644 index 36adc34b4c..0000000000 --- a/3party/jansson/test/suites/invalid/negative-integer-starting-with-zero/error +++ /dev/null @@ -1,2 +0,0 @@ -1 3 3 -invalid token near '-0' diff --git a/3party/jansson/test/suites/invalid/negative-integer-starting-with-zero/input b/3party/jansson/test/suites/invalid/negative-integer-starting-with-zero/input deleted file mode 100644 index 6fbb7a2f82..0000000000 --- a/3party/jansson/test/suites/invalid/negative-integer-starting-with-zero/input +++ /dev/null @@ -1 +0,0 @@ -[-012] diff --git a/3party/jansson/test/suites/invalid/null-byte-in-object-key/error b/3party/jansson/test/suites/invalid/null-byte-in-object-key/error deleted file mode 100644 index 3ec685b5d0..0000000000 --- a/3party/jansson/test/suites/invalid/null-byte-in-object-key/error +++ /dev/null @@ -1,2 +0,0 @@ -1 15 15 -NUL byte in object key not supported near '"foo\u0000bar"' diff --git a/3party/jansson/test/suites/invalid/null-byte-in-object-key/input b/3party/jansson/test/suites/invalid/null-byte-in-object-key/input deleted file mode 100644 index 593f0f67f9..0000000000 --- a/3party/jansson/test/suites/invalid/null-byte-in-object-key/input +++ /dev/null @@ -1 +0,0 @@ -{"foo\u0000bar": 42} \ No newline at end of file diff --git a/3party/jansson/test/suites/invalid/null-byte-in-string/error b/3party/jansson/test/suites/invalid/null-byte-in-string/error deleted file mode 100644 index 45f9bd8172..0000000000 --- a/3party/jansson/test/suites/invalid/null-byte-in-string/error +++ /dev/null @@ -1,2 +0,0 @@ -1 12 12 -control character 0x0 near '"null byte ' diff --git a/3party/jansson/test/suites/invalid/null-byte-in-string/input b/3party/jansson/test/suites/invalid/null-byte-in-string/input deleted file mode 100644 index 268d1f19435baef5ad7a609c65a951f6c8f6b30f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28 jcma!6$}7#uQAnyRNmXD_$jdKLNX*H}FHcQTisb?Thx!RG diff --git a/3party/jansson/test/suites/invalid/null-byte-in-string/nostrip b/3party/jansson/test/suites/invalid/null-byte-in-string/nostrip deleted file mode 100644 index 80f4bf761f..0000000000 --- a/3party/jansson/test/suites/invalid/null-byte-in-string/nostrip +++ /dev/null @@ -1,2 +0,0 @@ -The embedded NULL byte breaks json_loads(), which is used instead of -json_loadf() in the stripped tests. diff --git a/3party/jansson/test/suites/invalid/null-byte-outside-string/error b/3party/jansson/test/suites/invalid/null-byte-outside-string/error deleted file mode 100644 index 44d4def924..0000000000 --- a/3party/jansson/test/suites/invalid/null-byte-outside-string/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -invalid token near end of file diff --git a/3party/jansson/test/suites/invalid/null-byte-outside-string/input b/3party/jansson/test/suites/invalid/null-byte-outside-string/input deleted file mode 100644 index aa550eb0cd16b047736975b6c92ebd989d1981b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3 Kcma!M-~s>v9sp(l diff --git a/3party/jansson/test/suites/invalid/null-byte-outside-string/nostrip b/3party/jansson/test/suites/invalid/null-byte-outside-string/nostrip deleted file mode 100644 index 80f4bf761f..0000000000 --- a/3party/jansson/test/suites/invalid/null-byte-outside-string/nostrip +++ /dev/null @@ -1,2 +0,0 @@ -The embedded NULL byte breaks json_loads(), which is used instead of -json_loadf() in the stripped tests. diff --git a/3party/jansson/test/suites/invalid/null-escape-in-string/error b/3party/jansson/test/suites/invalid/null-escape-in-string/error deleted file mode 100644 index 3f5c8c6caf..0000000000 --- a/3party/jansson/test/suites/invalid/null-escape-in-string/error +++ /dev/null @@ -1,2 +0,0 @@ -1 33 33 -\u0000 is not allowed without JSON_ALLOW_NUL diff --git a/3party/jansson/test/suites/invalid/null-escape-in-string/input b/3party/jansson/test/suites/invalid/null-escape-in-string/input deleted file mode 100644 index dbc9c9a99f..0000000000 --- a/3party/jansson/test/suites/invalid/null-escape-in-string/input +++ /dev/null @@ -1 +0,0 @@ -["null escape \u0000 not allowed"] diff --git a/3party/jansson/test/suites/invalid/null/error b/3party/jansson/test/suites/invalid/null/error deleted file mode 100644 index 1f5d46490d..0000000000 --- a/3party/jansson/test/suites/invalid/null/error +++ /dev/null @@ -1,2 +0,0 @@ -1 4 4 -'[' or '{' expected near 'null' diff --git a/3party/jansson/test/suites/invalid/null/input b/3party/jansson/test/suites/invalid/null/input deleted file mode 100644 index 19765bd501..0000000000 --- a/3party/jansson/test/suites/invalid/null/input +++ /dev/null @@ -1 +0,0 @@ -null diff --git a/3party/jansson/test/suites/invalid/object-apostrophes/error b/3party/jansson/test/suites/invalid/object-apostrophes/error deleted file mode 100644 index 23fab01f65..0000000000 --- a/3party/jansson/test/suites/invalid/object-apostrophes/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -string or '}' expected near ''' diff --git a/3party/jansson/test/suites/invalid/object-apostrophes/input b/3party/jansson/test/suites/invalid/object-apostrophes/input deleted file mode 100644 index 52b290574b..0000000000 --- a/3party/jansson/test/suites/invalid/object-apostrophes/input +++ /dev/null @@ -1 +0,0 @@ -{'a' diff --git a/3party/jansson/test/suites/invalid/object-garbage-at-end/error b/3party/jansson/test/suites/invalid/object-garbage-at-end/error deleted file mode 100644 index 06c4ec1c22..0000000000 --- a/3party/jansson/test/suites/invalid/object-garbage-at-end/error +++ /dev/null @@ -1,2 +0,0 @@ -1 12 12 -'}' expected near '123' diff --git a/3party/jansson/test/suites/invalid/object-garbage-at-end/input b/3party/jansson/test/suites/invalid/object-garbage-at-end/input deleted file mode 100644 index 62c19d742b..0000000000 --- a/3party/jansson/test/suites/invalid/object-garbage-at-end/input +++ /dev/null @@ -1 +0,0 @@ -{"a":"a" 123} diff --git a/3party/jansson/test/suites/invalid/object-in-unterminated-array/error.normal b/3party/jansson/test/suites/invalid/object-in-unterminated-array/error.normal deleted file mode 100644 index 0248b114aa..0000000000 --- a/3party/jansson/test/suites/invalid/object-in-unterminated-array/error.normal +++ /dev/null @@ -1,2 +0,0 @@ -2 0 4 -']' expected near end of file diff --git a/3party/jansson/test/suites/invalid/object-in-unterminated-array/error.strip b/3party/jansson/test/suites/invalid/object-in-unterminated-array/error.strip deleted file mode 100644 index f89b38fcbf..0000000000 --- a/3party/jansson/test/suites/invalid/object-in-unterminated-array/error.strip +++ /dev/null @@ -1,2 +0,0 @@ -1 3 3 -']' expected near end of file diff --git a/3party/jansson/test/suites/invalid/object-in-unterminated-array/input b/3party/jansson/test/suites/invalid/object-in-unterminated-array/input deleted file mode 100644 index ca9ec378e2..0000000000 --- a/3party/jansson/test/suites/invalid/object-in-unterminated-array/input +++ /dev/null @@ -1 +0,0 @@ -[{} diff --git a/3party/jansson/test/suites/invalid/object-no-colon/error.normal b/3party/jansson/test/suites/invalid/object-no-colon/error.normal deleted file mode 100644 index 78d84f7b7d..0000000000 --- a/3party/jansson/test/suites/invalid/object-no-colon/error.normal +++ /dev/null @@ -1,2 +0,0 @@ -2 0 5 -':' expected near end of file diff --git a/3party/jansson/test/suites/invalid/object-no-colon/error.strip b/3party/jansson/test/suites/invalid/object-no-colon/error.strip deleted file mode 100644 index 528e266d27..0000000000 --- a/3party/jansson/test/suites/invalid/object-no-colon/error.strip +++ /dev/null @@ -1,2 +0,0 @@ -1 4 4 -':' expected near end of file diff --git a/3party/jansson/test/suites/invalid/object-no-colon/input b/3party/jansson/test/suites/invalid/object-no-colon/input deleted file mode 100644 index 107e6265c6..0000000000 --- a/3party/jansson/test/suites/invalid/object-no-colon/input +++ /dev/null @@ -1 +0,0 @@ -{"a" diff --git a/3party/jansson/test/suites/invalid/object-no-value/error.normal b/3party/jansson/test/suites/invalid/object-no-value/error.normal deleted file mode 100644 index 47ad902ddb..0000000000 --- a/3party/jansson/test/suites/invalid/object-no-value/error.normal +++ /dev/null @@ -1,2 +0,0 @@ -2 0 6 -unexpected token near end of file diff --git a/3party/jansson/test/suites/invalid/object-no-value/error.strip b/3party/jansson/test/suites/invalid/object-no-value/error.strip deleted file mode 100644 index b36c5e2bc6..0000000000 --- a/3party/jansson/test/suites/invalid/object-no-value/error.strip +++ /dev/null @@ -1,2 +0,0 @@ -1 5 5 -unexpected token near end of file diff --git a/3party/jansson/test/suites/invalid/object-no-value/input b/3party/jansson/test/suites/invalid/object-no-value/input deleted file mode 100644 index f68f262696..0000000000 --- a/3party/jansson/test/suites/invalid/object-no-value/input +++ /dev/null @@ -1 +0,0 @@ -{"a": diff --git a/3party/jansson/test/suites/invalid/object-unterminated-value/error.normal b/3party/jansson/test/suites/invalid/object-unterminated-value/error.normal deleted file mode 100644 index 2ad76d4736..0000000000 --- a/3party/jansson/test/suites/invalid/object-unterminated-value/error.normal +++ /dev/null @@ -1,2 +0,0 @@ -1 7 7 -unexpected newline near '"a' diff --git a/3party/jansson/test/suites/invalid/object-unterminated-value/error.strip b/3party/jansson/test/suites/invalid/object-unterminated-value/error.strip deleted file mode 100644 index 385afb534c..0000000000 --- a/3party/jansson/test/suites/invalid/object-unterminated-value/error.strip +++ /dev/null @@ -1,2 +0,0 @@ -1 7 7 -premature end of input near '"a' diff --git a/3party/jansson/test/suites/invalid/object-unterminated-value/input b/3party/jansson/test/suites/invalid/object-unterminated-value/input deleted file mode 100644 index b854d7e184..0000000000 --- a/3party/jansson/test/suites/invalid/object-unterminated-value/input +++ /dev/null @@ -1 +0,0 @@ -{"a":"a diff --git a/3party/jansson/test/suites/invalid/real-garbage-after-e/error b/3party/jansson/test/suites/invalid/real-garbage-after-e/error deleted file mode 100644 index b40ffa9b58..0000000000 --- a/3party/jansson/test/suites/invalid/real-garbage-after-e/error +++ /dev/null @@ -1,2 +0,0 @@ -1 3 3 -invalid token near '1e' diff --git a/3party/jansson/test/suites/invalid/real-garbage-after-e/input b/3party/jansson/test/suites/invalid/real-garbage-after-e/input deleted file mode 100644 index 6a945ac0f3..0000000000 --- a/3party/jansson/test/suites/invalid/real-garbage-after-e/input +++ /dev/null @@ -1 +0,0 @@ -[1ea] diff --git a/3party/jansson/test/suites/invalid/real-negative-overflow/error b/3party/jansson/test/suites/invalid/real-negative-overflow/error deleted file mode 100644 index d7f8e412d4..0000000000 --- a/3party/jansson/test/suites/invalid/real-negative-overflow/error +++ /dev/null @@ -1,2 +0,0 @@ -1 15 15 -real number overflow near '-123123e100000' diff --git a/3party/jansson/test/suites/invalid/real-negative-overflow/input b/3party/jansson/test/suites/invalid/real-negative-overflow/input deleted file mode 100644 index b5bd21c466..0000000000 --- a/3party/jansson/test/suites/invalid/real-negative-overflow/input +++ /dev/null @@ -1 +0,0 @@ -[-123123e100000] diff --git a/3party/jansson/test/suites/invalid/real-positive-overflow/error b/3party/jansson/test/suites/invalid/real-positive-overflow/error deleted file mode 100644 index 55883c981e..0000000000 --- a/3party/jansson/test/suites/invalid/real-positive-overflow/error +++ /dev/null @@ -1,2 +0,0 @@ -1 14 14 -real number overflow near '123123e100000' diff --git a/3party/jansson/test/suites/invalid/real-positive-overflow/input b/3party/jansson/test/suites/invalid/real-positive-overflow/input deleted file mode 100644 index 524e53b316..0000000000 --- a/3party/jansson/test/suites/invalid/real-positive-overflow/input +++ /dev/null @@ -1 +0,0 @@ -[123123e100000] diff --git a/3party/jansson/test/suites/invalid/real-truncated-at-e/error b/3party/jansson/test/suites/invalid/real-truncated-at-e/error deleted file mode 100644 index b40ffa9b58..0000000000 --- a/3party/jansson/test/suites/invalid/real-truncated-at-e/error +++ /dev/null @@ -1,2 +0,0 @@ -1 3 3 -invalid token near '1e' diff --git a/3party/jansson/test/suites/invalid/real-truncated-at-e/input b/3party/jansson/test/suites/invalid/real-truncated-at-e/input deleted file mode 100644 index 1d67b7b822..0000000000 --- a/3party/jansson/test/suites/invalid/real-truncated-at-e/input +++ /dev/null @@ -1 +0,0 @@ -[1e] diff --git a/3party/jansson/test/suites/invalid/real-truncated-at-point/error b/3party/jansson/test/suites/invalid/real-truncated-at-point/error deleted file mode 100644 index db972e8e16..0000000000 --- a/3party/jansson/test/suites/invalid/real-truncated-at-point/error +++ /dev/null @@ -1,2 +0,0 @@ -1 3 3 -invalid token near '1.' diff --git a/3party/jansson/test/suites/invalid/real-truncated-at-point/input b/3party/jansson/test/suites/invalid/real-truncated-at-point/input deleted file mode 100644 index b652b3fe02..0000000000 --- a/3party/jansson/test/suites/invalid/real-truncated-at-point/input +++ /dev/null @@ -1 +0,0 @@ -[1.] diff --git a/3party/jansson/test/suites/invalid/recursion-depth/error b/3party/jansson/test/suites/invalid/recursion-depth/error deleted file mode 100644 index 11e0537ff0..0000000000 --- a/3party/jansson/test/suites/invalid/recursion-depth/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2049 2049 -maximum parsing depth reached near '[' diff --git a/3party/jansson/test/suites/invalid/recursion-depth/input b/3party/jansson/test/suites/invalid/recursion-depth/input deleted file mode 100644 index bfa47d9d18..0000000000 --- a/3party/jansson/test/suites/invalid/recursion-depth/input +++ /dev/null @@ -1 +0,0 @@ -[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ diff --git a/3party/jansson/test/suites/invalid/run b/3party/jansson/test/suites/invalid/run deleted file mode 100755 index d1d490c63a..0000000000 --- a/3party/jansson/test/suites/invalid/run +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2009-2016 Petri Lehtinen -# -# Jansson is free software; you can redistribute it and/or modify -# it under the terms of the MIT license. See LICENSE for details. - -is_test() { - test -d $test_path -} - -do_run() { - variant=$1 - s=".$1" - - strip=0 - if [ "$variant" = "strip" ]; then - # This test should not be stripped - [ -f $test_path/nostrip ] && return - strip=1 - fi - - STRIP=$strip $json_process --env \ - <$test_path/input >$test_log/stdout$s 2>$test_log/stderr$s - valgrind_check $test_log/stderr$s || return 1 - - ref=error - [ -f $test_path/error$s ] && ref=error$s - - if ! cmp -s $test_path/$ref $test_log/stderr$s; then - echo $variant > $test_log/variant - return 1 - fi -} - -run_test() { - do_run normal && do_run strip -} - -show_error() { - valgrind_show_error && return - - read variant < $test_log/variant - s=".$variant" - - echo "VARIANT: $variant" - - echo "EXPECTED ERROR:" - ref=error - [ -f $test_path/error$s ] && ref=error$s - nl -bn $test_path/$ref - - echo "ACTUAL ERROR:" - nl -bn $test_log/stderr$s -} - -. $top_srcdir/test/scripts/run-tests.sh diff --git a/3party/jansson/test/suites/invalid/tab-character-in-string/error b/3party/jansson/test/suites/invalid/tab-character-in-string/error deleted file mode 100644 index 9e2f76ed23..0000000000 --- a/3party/jansson/test/suites/invalid/tab-character-in-string/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -control character 0x9 near '"' diff --git a/3party/jansson/test/suites/invalid/tab-character-in-string/input b/3party/jansson/test/suites/invalid/tab-character-in-string/input deleted file mode 100644 index 3ebae0953c..0000000000 --- a/3party/jansson/test/suites/invalid/tab-character-in-string/input +++ /dev/null @@ -1 +0,0 @@ -[" <-- tab character"] diff --git a/3party/jansson/test/suites/invalid/too-big-negative-integer/error b/3party/jansson/test/suites/invalid/too-big-negative-integer/error deleted file mode 100644 index a0640b9a94..0000000000 --- a/3party/jansson/test/suites/invalid/too-big-negative-integer/error +++ /dev/null @@ -1,2 +0,0 @@ -1 32 32 -too big negative integer diff --git a/3party/jansson/test/suites/invalid/too-big-negative-integer/input b/3party/jansson/test/suites/invalid/too-big-negative-integer/input deleted file mode 100644 index d6c26f1cf3..0000000000 --- a/3party/jansson/test/suites/invalid/too-big-negative-integer/input +++ /dev/null @@ -1 +0,0 @@ -[-123123123123123123123123123123] diff --git a/3party/jansson/test/suites/invalid/too-big-positive-integer/error b/3party/jansson/test/suites/invalid/too-big-positive-integer/error deleted file mode 100644 index 3bdbefd535..0000000000 --- a/3party/jansson/test/suites/invalid/too-big-positive-integer/error +++ /dev/null @@ -1,2 +0,0 @@ -1 31 31 -too big integer diff --git a/3party/jansson/test/suites/invalid/too-big-positive-integer/input b/3party/jansson/test/suites/invalid/too-big-positive-integer/input deleted file mode 100644 index 27c8553993..0000000000 --- a/3party/jansson/test/suites/invalid/too-big-positive-integer/input +++ /dev/null @@ -1 +0,0 @@ -[123123123123123123123123123123] diff --git a/3party/jansson/test/suites/invalid/truncated-unicode-surrogate/error b/3party/jansson/test/suites/invalid/truncated-unicode-surrogate/error deleted file mode 100644 index 1b99f061a2..0000000000 --- a/3party/jansson/test/suites/invalid/truncated-unicode-surrogate/error +++ /dev/null @@ -1,2 +0,0 @@ -1 46 46 -invalid Unicode '\uDADA' diff --git a/3party/jansson/test/suites/invalid/truncated-unicode-surrogate/input b/3party/jansson/test/suites/invalid/truncated-unicode-surrogate/input deleted file mode 100644 index 2b340f4ad4..0000000000 --- a/3party/jansson/test/suites/invalid/truncated-unicode-surrogate/input +++ /dev/null @@ -1 +0,0 @@ -["\uDADA (first surrogate without the second)"] diff --git a/3party/jansson/test/suites/invalid/unicode-identifier/error b/3party/jansson/test/suites/invalid/unicode-identifier/error deleted file mode 100644 index 178b0dd4d8..0000000000 --- a/3party/jansson/test/suites/invalid/unicode-identifier/error +++ /dev/null @@ -1,2 +0,0 @@ -1 1 2 -'[' or '{' expected near 'å' diff --git a/3party/jansson/test/suites/invalid/unicode-identifier/input b/3party/jansson/test/suites/invalid/unicode-identifier/input deleted file mode 100644 index aad321caf7..0000000000 --- a/3party/jansson/test/suites/invalid/unicode-identifier/input +++ /dev/null @@ -1 +0,0 @@ -å diff --git a/3party/jansson/test/suites/invalid/unterminated-array-and-object/error.normal b/3party/jansson/test/suites/invalid/unterminated-array-and-object/error.normal deleted file mode 100644 index 5b19804bc5..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-array-and-object/error.normal +++ /dev/null @@ -1,2 +0,0 @@ -2 0 3 -string or '}' expected near end of file diff --git a/3party/jansson/test/suites/invalid/unterminated-array-and-object/error.strip b/3party/jansson/test/suites/invalid/unterminated-array-and-object/error.strip deleted file mode 100644 index da2bb22f15..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-array-and-object/error.strip +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -string or '}' expected near end of file diff --git a/3party/jansson/test/suites/invalid/unterminated-array-and-object/input b/3party/jansson/test/suites/invalid/unterminated-array-and-object/input deleted file mode 100644 index cd9dc64823..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-array-and-object/input +++ /dev/null @@ -1 +0,0 @@ -[{ diff --git a/3party/jansson/test/suites/invalid/unterminated-array/error.normal b/3party/jansson/test/suites/invalid/unterminated-array/error.normal deleted file mode 100644 index 8025ed1b02..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-array/error.normal +++ /dev/null @@ -1,2 +0,0 @@ -2 0 5 -']' expected near end of file diff --git a/3party/jansson/test/suites/invalid/unterminated-array/error.strip b/3party/jansson/test/suites/invalid/unterminated-array/error.strip deleted file mode 100644 index 495d0f7c43..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-array/error.strip +++ /dev/null @@ -1,2 +0,0 @@ -1 4 4 -']' expected near end of file diff --git a/3party/jansson/test/suites/invalid/unterminated-array/input b/3party/jansson/test/suites/invalid/unterminated-array/input deleted file mode 100644 index 727ee81063..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-array/input +++ /dev/null @@ -1 +0,0 @@ -["a" diff --git a/3party/jansson/test/suites/invalid/unterminated-empty-key/error.normal b/3party/jansson/test/suites/invalid/unterminated-empty-key/error.normal deleted file mode 100644 index 3d646abda3..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-empty-key/error.normal +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -unexpected newline near '"' diff --git a/3party/jansson/test/suites/invalid/unterminated-empty-key/error.strip b/3party/jansson/test/suites/invalid/unterminated-empty-key/error.strip deleted file mode 100644 index 94f1947155..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-empty-key/error.strip +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -premature end of input near '"' diff --git a/3party/jansson/test/suites/invalid/unterminated-empty-key/input b/3party/jansson/test/suites/invalid/unterminated-empty-key/input deleted file mode 100644 index 4117452de4..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-empty-key/input +++ /dev/null @@ -1 +0,0 @@ -{" diff --git a/3party/jansson/test/suites/invalid/unterminated-key/error.normal b/3party/jansson/test/suites/invalid/unterminated-key/error.normal deleted file mode 100644 index 5f09b77da8..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-key/error.normal +++ /dev/null @@ -1,2 +0,0 @@ -1 3 3 -unexpected newline near '"a' diff --git a/3party/jansson/test/suites/invalid/unterminated-key/error.strip b/3party/jansson/test/suites/invalid/unterminated-key/error.strip deleted file mode 100644 index 8b6bec430d..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-key/error.strip +++ /dev/null @@ -1,2 +0,0 @@ -1 3 3 -premature end of input near '"a' diff --git a/3party/jansson/test/suites/invalid/unterminated-key/input b/3party/jansson/test/suites/invalid/unterminated-key/input deleted file mode 100644 index 705948c64e..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-key/input +++ /dev/null @@ -1 +0,0 @@ -{"a diff --git a/3party/jansson/test/suites/invalid/unterminated-object-and-array/error b/3party/jansson/test/suites/invalid/unterminated-object-and-array/error deleted file mode 100644 index ed97be73e3..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-object-and-array/error +++ /dev/null @@ -1,2 +0,0 @@ -1 2 2 -string or '}' expected near '[' diff --git a/3party/jansson/test/suites/invalid/unterminated-object-and-array/input b/3party/jansson/test/suites/invalid/unterminated-object-and-array/input deleted file mode 100644 index da35a86207..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-object-and-array/input +++ /dev/null @@ -1 +0,0 @@ -{[ diff --git a/3party/jansson/test/suites/invalid/unterminated-string/error.normal b/3party/jansson/test/suites/invalid/unterminated-string/error.normal deleted file mode 100644 index 5f09b77da8..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-string/error.normal +++ /dev/null @@ -1,2 +0,0 @@ -1 3 3 -unexpected newline near '"a' diff --git a/3party/jansson/test/suites/invalid/unterminated-string/error.strip b/3party/jansson/test/suites/invalid/unterminated-string/error.strip deleted file mode 100644 index 8b6bec430d..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-string/error.strip +++ /dev/null @@ -1,2 +0,0 @@ -1 3 3 -premature end of input near '"a' diff --git a/3party/jansson/test/suites/invalid/unterminated-string/input b/3party/jansson/test/suites/invalid/unterminated-string/input deleted file mode 100644 index 38ab6b04ca..0000000000 --- a/3party/jansson/test/suites/invalid/unterminated-string/input +++ /dev/null @@ -1 +0,0 @@ -["a diff --git a/3party/jansson/test/suites/valid/complex-array/env b/3party/jansson/test/suites/valid/complex-array/env deleted file mode 100644 index bd89eff9d9..0000000000 --- a/3party/jansson/test/suites/valid/complex-array/env +++ /dev/null @@ -1 +0,0 @@ -JSON_SORT_KEYS=1 \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/complex-array/input b/3party/jansson/test/suites/valid/complex-array/input deleted file mode 100644 index 1b9bbb949f..0000000000 --- a/3party/jansson/test/suites/valid/complex-array/input +++ /dev/null @@ -1,5 +0,0 @@ -[1,2,3,4, -"a", "b", "c", -{"foo": "bar", "core": "dump"}, -true, false, true, true, null, false -] diff --git a/3party/jansson/test/suites/valid/complex-array/output b/3party/jansson/test/suites/valid/complex-array/output deleted file mode 100644 index 7aefe5642c..0000000000 --- a/3party/jansson/test/suites/valid/complex-array/output +++ /dev/null @@ -1 +0,0 @@ -[1, 2, 3, 4, "a", "b", "c", {"core": "dump", "foo": "bar"}, true, false, true, true, null, false] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/empty-array/input b/3party/jansson/test/suites/valid/empty-array/input deleted file mode 100644 index fe51488c70..0000000000 --- a/3party/jansson/test/suites/valid/empty-array/input +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/3party/jansson/test/suites/valid/empty-array/output b/3party/jansson/test/suites/valid/empty-array/output deleted file mode 100644 index 0637a088a0..0000000000 --- a/3party/jansson/test/suites/valid/empty-array/output +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/empty-object-in-array/input b/3party/jansson/test/suites/valid/empty-object-in-array/input deleted file mode 100644 index 93d51406d6..0000000000 --- a/3party/jansson/test/suites/valid/empty-object-in-array/input +++ /dev/null @@ -1 +0,0 @@ -[{}] diff --git a/3party/jansson/test/suites/valid/empty-object-in-array/output b/3party/jansson/test/suites/valid/empty-object-in-array/output deleted file mode 100644 index ee1aac42be..0000000000 --- a/3party/jansson/test/suites/valid/empty-object-in-array/output +++ /dev/null @@ -1 +0,0 @@ -[{}] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/empty-object/input b/3party/jansson/test/suites/valid/empty-object/input deleted file mode 100644 index 0967ef424b..0000000000 --- a/3party/jansson/test/suites/valid/empty-object/input +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/3party/jansson/test/suites/valid/empty-object/output b/3party/jansson/test/suites/valid/empty-object/output deleted file mode 100644 index 9e26dfeeb6..0000000000 --- a/3party/jansson/test/suites/valid/empty-object/output +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/empty-string/input b/3party/jansson/test/suites/valid/empty-string/input deleted file mode 100644 index 66a1e18560..0000000000 --- a/3party/jansson/test/suites/valid/empty-string/input +++ /dev/null @@ -1 +0,0 @@ -[""] diff --git a/3party/jansson/test/suites/valid/empty-string/output b/3party/jansson/test/suites/valid/empty-string/output deleted file mode 100644 index 93b6be2bcc..0000000000 --- a/3party/jansson/test/suites/valid/empty-string/output +++ /dev/null @@ -1 +0,0 @@ -[""] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/escaped-utf-control-char/input b/3party/jansson/test/suites/valid/escaped-utf-control-char/input deleted file mode 100644 index 9a98545c00..0000000000 --- a/3party/jansson/test/suites/valid/escaped-utf-control-char/input +++ /dev/null @@ -1 +0,0 @@ -["\u0012 escaped control character"] diff --git a/3party/jansson/test/suites/valid/escaped-utf-control-char/output b/3party/jansson/test/suites/valid/escaped-utf-control-char/output deleted file mode 100644 index 07221b78d2..0000000000 --- a/3party/jansson/test/suites/valid/escaped-utf-control-char/output +++ /dev/null @@ -1 +0,0 @@ -["\u0012 escaped control character"] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/false/input b/3party/jansson/test/suites/valid/false/input deleted file mode 100644 index 4343652024..0000000000 --- a/3party/jansson/test/suites/valid/false/input +++ /dev/null @@ -1 +0,0 @@ -[false] diff --git a/3party/jansson/test/suites/valid/false/output b/3party/jansson/test/suites/valid/false/output deleted file mode 100644 index 67b2f07601..0000000000 --- a/3party/jansson/test/suites/valid/false/output +++ /dev/null @@ -1 +0,0 @@ -[false] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/negative-int/input b/3party/jansson/test/suites/valid/negative-int/input deleted file mode 100644 index a96d5cdb31..0000000000 --- a/3party/jansson/test/suites/valid/negative-int/input +++ /dev/null @@ -1 +0,0 @@ -[-123] diff --git a/3party/jansson/test/suites/valid/negative-int/output b/3party/jansson/test/suites/valid/negative-int/output deleted file mode 100644 index 8e30f8bd96..0000000000 --- a/3party/jansson/test/suites/valid/negative-int/output +++ /dev/null @@ -1 +0,0 @@ -[-123] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/negative-one/input b/3party/jansson/test/suites/valid/negative-one/input deleted file mode 100644 index 2363a1ac08..0000000000 --- a/3party/jansson/test/suites/valid/negative-one/input +++ /dev/null @@ -1 +0,0 @@ -[-1] diff --git a/3party/jansson/test/suites/valid/negative-one/output b/3party/jansson/test/suites/valid/negative-one/output deleted file mode 100644 index 99d21a2a0f..0000000000 --- a/3party/jansson/test/suites/valid/negative-one/output +++ /dev/null @@ -1 +0,0 @@ -[-1] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/negative-zero/input b/3party/jansson/test/suites/valid/negative-zero/input deleted file mode 100644 index 40fc49c715..0000000000 --- a/3party/jansson/test/suites/valid/negative-zero/input +++ /dev/null @@ -1 +0,0 @@ -[-0] diff --git a/3party/jansson/test/suites/valid/negative-zero/output b/3party/jansson/test/suites/valid/negative-zero/output deleted file mode 100644 index 6e7ea636ee..0000000000 --- a/3party/jansson/test/suites/valid/negative-zero/output +++ /dev/null @@ -1 +0,0 @@ -[0] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/null/input b/3party/jansson/test/suites/valid/null/input deleted file mode 100644 index 62864b313d..0000000000 --- a/3party/jansson/test/suites/valid/null/input +++ /dev/null @@ -1 +0,0 @@ -[null] diff --git a/3party/jansson/test/suites/valid/null/output b/3party/jansson/test/suites/valid/null/output deleted file mode 100644 index 500db4a86a..0000000000 --- a/3party/jansson/test/suites/valid/null/output +++ /dev/null @@ -1 +0,0 @@ -[null] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/one-byte-utf-8/input b/3party/jansson/test/suites/valid/one-byte-utf-8/input deleted file mode 100644 index 8bda4685d4..0000000000 --- a/3party/jansson/test/suites/valid/one-byte-utf-8/input +++ /dev/null @@ -1 +0,0 @@ -["\u002c one-byte UTF-8"] diff --git a/3party/jansson/test/suites/valid/one-byte-utf-8/output b/3party/jansson/test/suites/valid/one-byte-utf-8/output deleted file mode 100644 index c33d250ff7..0000000000 --- a/3party/jansson/test/suites/valid/one-byte-utf-8/output +++ /dev/null @@ -1 +0,0 @@ -[", one-byte UTF-8"] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/real-capital-e-negative-exponent/input b/3party/jansson/test/suites/valid/real-capital-e-negative-exponent/input deleted file mode 100644 index 1e9fa51537..0000000000 --- a/3party/jansson/test/suites/valid/real-capital-e-negative-exponent/input +++ /dev/null @@ -1 +0,0 @@ -[1E-2] diff --git a/3party/jansson/test/suites/valid/real-capital-e-negative-exponent/output b/3party/jansson/test/suites/valid/real-capital-e-negative-exponent/output deleted file mode 100644 index 75b9ef92cd..0000000000 --- a/3party/jansson/test/suites/valid/real-capital-e-negative-exponent/output +++ /dev/null @@ -1 +0,0 @@ -[0.01] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/real-capital-e-positive-exponent/input b/3party/jansson/test/suites/valid/real-capital-e-positive-exponent/input deleted file mode 100644 index 6a6ab93371..0000000000 --- a/3party/jansson/test/suites/valid/real-capital-e-positive-exponent/input +++ /dev/null @@ -1 +0,0 @@ -[1E+2] diff --git a/3party/jansson/test/suites/valid/real-capital-e-positive-exponent/output b/3party/jansson/test/suites/valid/real-capital-e-positive-exponent/output deleted file mode 100644 index d8ff702a11..0000000000 --- a/3party/jansson/test/suites/valid/real-capital-e-positive-exponent/output +++ /dev/null @@ -1 +0,0 @@ -[100.0] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/real-capital-e/input b/3party/jansson/test/suites/valid/real-capital-e/input deleted file mode 100644 index e70322356c..0000000000 --- a/3party/jansson/test/suites/valid/real-capital-e/input +++ /dev/null @@ -1 +0,0 @@ -[1E22] diff --git a/3party/jansson/test/suites/valid/real-capital-e/output b/3party/jansson/test/suites/valid/real-capital-e/output deleted file mode 100644 index 9a739f21fd..0000000000 --- a/3party/jansson/test/suites/valid/real-capital-e/output +++ /dev/null @@ -1 +0,0 @@ -[1e22] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/real-exponent/input b/3party/jansson/test/suites/valid/real-exponent/input deleted file mode 100644 index b2a69b9a35..0000000000 --- a/3party/jansson/test/suites/valid/real-exponent/input +++ /dev/null @@ -1 +0,0 @@ -[123e45] diff --git a/3party/jansson/test/suites/valid/real-exponent/output b/3party/jansson/test/suites/valid/real-exponent/output deleted file mode 100644 index 5ffc7196db..0000000000 --- a/3party/jansson/test/suites/valid/real-exponent/output +++ /dev/null @@ -1 +0,0 @@ -[1.2299999999999999e47] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/real-fraction-exponent/input b/3party/jansson/test/suites/valid/real-fraction-exponent/input deleted file mode 100644 index 0c1660d1e9..0000000000 --- a/3party/jansson/test/suites/valid/real-fraction-exponent/input +++ /dev/null @@ -1 +0,0 @@ -[123.456e78] diff --git a/3party/jansson/test/suites/valid/real-fraction-exponent/output b/3party/jansson/test/suites/valid/real-fraction-exponent/output deleted file mode 100644 index 66a3c81864..0000000000 --- a/3party/jansson/test/suites/valid/real-fraction-exponent/output +++ /dev/null @@ -1 +0,0 @@ -[1.23456e80] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/real-negative-exponent/input b/3party/jansson/test/suites/valid/real-negative-exponent/input deleted file mode 100644 index daa4af932b..0000000000 --- a/3party/jansson/test/suites/valid/real-negative-exponent/input +++ /dev/null @@ -1 +0,0 @@ -[1e-2] diff --git a/3party/jansson/test/suites/valid/real-negative-exponent/output b/3party/jansson/test/suites/valid/real-negative-exponent/output deleted file mode 100644 index 75b9ef92cd..0000000000 --- a/3party/jansson/test/suites/valid/real-negative-exponent/output +++ /dev/null @@ -1 +0,0 @@ -[0.01] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/real-positive-exponent/input b/3party/jansson/test/suites/valid/real-positive-exponent/input deleted file mode 100644 index f3780773a9..0000000000 --- a/3party/jansson/test/suites/valid/real-positive-exponent/input +++ /dev/null @@ -1 +0,0 @@ -[1e+2] diff --git a/3party/jansson/test/suites/valid/real-positive-exponent/output b/3party/jansson/test/suites/valid/real-positive-exponent/output deleted file mode 100644 index d8ff702a11..0000000000 --- a/3party/jansson/test/suites/valid/real-positive-exponent/output +++ /dev/null @@ -1 +0,0 @@ -[100.0] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/real-subnormal-number/input b/3party/jansson/test/suites/valid/real-subnormal-number/input deleted file mode 100644 index df6065345c..0000000000 --- a/3party/jansson/test/suites/valid/real-subnormal-number/input +++ /dev/null @@ -1 +0,0 @@ -[1.8011670033376514e-308] diff --git a/3party/jansson/test/suites/valid/real-subnormal-number/output b/3party/jansson/test/suites/valid/real-subnormal-number/output deleted file mode 100644 index e6b0a58e8b..0000000000 --- a/3party/jansson/test/suites/valid/real-subnormal-number/output +++ /dev/null @@ -1 +0,0 @@ -[1.8011670033376514e-308] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/real-underflow/input b/3party/jansson/test/suites/valid/real-underflow/input deleted file mode 100644 index dc709960a1..0000000000 --- a/3party/jansson/test/suites/valid/real-underflow/input +++ /dev/null @@ -1 +0,0 @@ -[123e-10000000] diff --git a/3party/jansson/test/suites/valid/real-underflow/output b/3party/jansson/test/suites/valid/real-underflow/output deleted file mode 100644 index 92df1df1d1..0000000000 --- a/3party/jansson/test/suites/valid/real-underflow/output +++ /dev/null @@ -1 +0,0 @@ -[0.0] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/run b/3party/jansson/test/suites/valid/run deleted file mode 100755 index d995489601..0000000000 --- a/3party/jansson/test/suites/valid/run +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2009-2016 Petri Lehtinen -# -# Jansson is free software; you can redistribute it and/or modify -# it under the terms of the MIT license. See LICENSE for details. - -JSON_SORT_KEYS=1 -export JSON_SORT_KEYS - -is_test() { - test -d $test_path -} - -do_run() { - variant=$1 - s=".$1" - - strip=0 - [ "$variant" = "strip" ] && strip=1 - - STRIP=$strip $json_process --env \ - <$test_path/input >$test_log/stdout$s 2>$test_log/stderr$s - valgrind_check $test_log/stderr$s || return 1 - - ref=output - [ -f $test_path/output$s ] && ref=output$s - - if ! cmp -s $test_path/$ref $test_log/stdout$s; then - echo $variant > $test_log/variant - return 1 - fi -} - -run_test() { - do_run normal && do_run strip -} - -show_error() { - valgrind_show_error && return - - read variant < $test_log/variant - s=".$variant" - - echo "VARIANT: $variant" - - echo "EXPECTED OUTPUT:" - ref=output - [ -f $test_path/output$s ] && ref=output$s - nl -bn $test_path/$ref - - echo "ACTUAL OUTPUT:" - nl -bn $test_log/stdout$s -} - -. $top_srcdir/test/scripts/run-tests.sh diff --git a/3party/jansson/test/suites/valid/short-string/input b/3party/jansson/test/suites/valid/short-string/input deleted file mode 100644 index 0c3426d4c2..0000000000 --- a/3party/jansson/test/suites/valid/short-string/input +++ /dev/null @@ -1 +0,0 @@ -["a"] diff --git a/3party/jansson/test/suites/valid/short-string/output b/3party/jansson/test/suites/valid/short-string/output deleted file mode 100644 index eac5f7b46e..0000000000 --- a/3party/jansson/test/suites/valid/short-string/output +++ /dev/null @@ -1 +0,0 @@ -["a"] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/simple-ascii-string/input b/3party/jansson/test/suites/valid/simple-ascii-string/input deleted file mode 100644 index 929b215c17..0000000000 --- a/3party/jansson/test/suites/valid/simple-ascii-string/input +++ /dev/null @@ -1 +0,0 @@ -["abcdefghijklmnopqrstuvwxyz1234567890 "] diff --git a/3party/jansson/test/suites/valid/simple-ascii-string/output b/3party/jansson/test/suites/valid/simple-ascii-string/output deleted file mode 100644 index 90358ab703..0000000000 --- a/3party/jansson/test/suites/valid/simple-ascii-string/output +++ /dev/null @@ -1 +0,0 @@ -["abcdefghijklmnopqrstuvwxyz1234567890 "] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/simple-int-0/input b/3party/jansson/test/suites/valid/simple-int-0/input deleted file mode 100644 index 111bb86865..0000000000 --- a/3party/jansson/test/suites/valid/simple-int-0/input +++ /dev/null @@ -1 +0,0 @@ -[0] diff --git a/3party/jansson/test/suites/valid/simple-int-0/output b/3party/jansson/test/suites/valid/simple-int-0/output deleted file mode 100644 index 6e7ea636ee..0000000000 --- a/3party/jansson/test/suites/valid/simple-int-0/output +++ /dev/null @@ -1 +0,0 @@ -[0] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/simple-int-1/input b/3party/jansson/test/suites/valid/simple-int-1/input deleted file mode 100644 index 7660873d10..0000000000 --- a/3party/jansson/test/suites/valid/simple-int-1/input +++ /dev/null @@ -1 +0,0 @@ -[1] diff --git a/3party/jansson/test/suites/valid/simple-int-1/output b/3party/jansson/test/suites/valid/simple-int-1/output deleted file mode 100644 index bace2a0be1..0000000000 --- a/3party/jansson/test/suites/valid/simple-int-1/output +++ /dev/null @@ -1 +0,0 @@ -[1] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/simple-int-123/input b/3party/jansson/test/suites/valid/simple-int-123/input deleted file mode 100644 index 3214bfe58c..0000000000 --- a/3party/jansson/test/suites/valid/simple-int-123/input +++ /dev/null @@ -1 +0,0 @@ -[123] diff --git a/3party/jansson/test/suites/valid/simple-int-123/output b/3party/jansson/test/suites/valid/simple-int-123/output deleted file mode 100644 index e47f69afcf..0000000000 --- a/3party/jansson/test/suites/valid/simple-int-123/output +++ /dev/null @@ -1 +0,0 @@ -[123] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/simple-object/input b/3party/jansson/test/suites/valid/simple-object/input deleted file mode 100644 index a34fb4907e..0000000000 --- a/3party/jansson/test/suites/valid/simple-object/input +++ /dev/null @@ -1 +0,0 @@ -{"a":[]} diff --git a/3party/jansson/test/suites/valid/simple-object/output b/3party/jansson/test/suites/valid/simple-object/output deleted file mode 100644 index 982abe8262..0000000000 --- a/3party/jansson/test/suites/valid/simple-object/output +++ /dev/null @@ -1 +0,0 @@ -{"a": []} \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/simple-real/input b/3party/jansson/test/suites/valid/simple-real/input deleted file mode 100644 index 0fed7df36a..0000000000 --- a/3party/jansson/test/suites/valid/simple-real/input +++ /dev/null @@ -1 +0,0 @@ -[123.456789] diff --git a/3party/jansson/test/suites/valid/simple-real/output b/3party/jansson/test/suites/valid/simple-real/output deleted file mode 100644 index b02878e5fc..0000000000 --- a/3party/jansson/test/suites/valid/simple-real/output +++ /dev/null @@ -1 +0,0 @@ -[123.456789] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/string-escapes/input b/3party/jansson/test/suites/valid/string-escapes/input deleted file mode 100644 index d994564d3f..0000000000 --- a/3party/jansson/test/suites/valid/string-escapes/input +++ /dev/null @@ -1 +0,0 @@ -["\"\\\/\b\f\n\r\t"] diff --git a/3party/jansson/test/suites/valid/string-escapes/output b/3party/jansson/test/suites/valid/string-escapes/output deleted file mode 100644 index ca5c1c6583..0000000000 --- a/3party/jansson/test/suites/valid/string-escapes/output +++ /dev/null @@ -1 +0,0 @@ -["\"\\/\b\f\n\r\t"] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/three-byte-utf-8/input b/3party/jansson/test/suites/valid/three-byte-utf-8/input deleted file mode 100644 index ccc0bfa572..0000000000 --- a/3party/jansson/test/suites/valid/three-byte-utf-8/input +++ /dev/null @@ -1 +0,0 @@ -["\u0821 three-byte UTF-8"] diff --git a/3party/jansson/test/suites/valid/three-byte-utf-8/output b/3party/jansson/test/suites/valid/three-byte-utf-8/output deleted file mode 100644 index c44d124e75..0000000000 --- a/3party/jansson/test/suites/valid/three-byte-utf-8/output +++ /dev/null @@ -1 +0,0 @@ -["ࠡ three-byte UTF-8"] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/true/input b/3party/jansson/test/suites/valid/true/input deleted file mode 100644 index 29513c4917..0000000000 --- a/3party/jansson/test/suites/valid/true/input +++ /dev/null @@ -1 +0,0 @@ -[true] diff --git a/3party/jansson/test/suites/valid/true/output b/3party/jansson/test/suites/valid/true/output deleted file mode 100644 index de601e305f..0000000000 --- a/3party/jansson/test/suites/valid/true/output +++ /dev/null @@ -1 +0,0 @@ -[true] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/two-byte-utf-8/input b/3party/jansson/test/suites/valid/two-byte-utf-8/input deleted file mode 100644 index 05ae854b52..0000000000 --- a/3party/jansson/test/suites/valid/two-byte-utf-8/input +++ /dev/null @@ -1 +0,0 @@ -["\u0123 two-byte UTF-8"] diff --git a/3party/jansson/test/suites/valid/two-byte-utf-8/output b/3party/jansson/test/suites/valid/two-byte-utf-8/output deleted file mode 100644 index 1f0988d945..0000000000 --- a/3party/jansson/test/suites/valid/two-byte-utf-8/output +++ /dev/null @@ -1 +0,0 @@ -["ģ two-byte UTF-8"] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/utf-8-string/input b/3party/jansson/test/suites/valid/utf-8-string/input deleted file mode 100644 index 20dc64a45c..0000000000 --- a/3party/jansson/test/suites/valid/utf-8-string/input +++ /dev/null @@ -1 +0,0 @@ -["€þıœəßð some utf-8 ĸʒ×ŋµåäö𝄞"] diff --git a/3party/jansson/test/suites/valid/utf-8-string/output b/3party/jansson/test/suites/valid/utf-8-string/output deleted file mode 100644 index 53728650da..0000000000 --- a/3party/jansson/test/suites/valid/utf-8-string/output +++ /dev/null @@ -1 +0,0 @@ -["€þıœəßð some utf-8 ĸʒ×ŋµåäö𝄞"] \ No newline at end of file diff --git a/3party/jansson/test/suites/valid/utf-surrogate-four-byte-encoding/input b/3party/jansson/test/suites/valid/utf-surrogate-four-byte-encoding/input deleted file mode 100644 index c598b41723..0000000000 --- a/3party/jansson/test/suites/valid/utf-surrogate-four-byte-encoding/input +++ /dev/null @@ -1 +0,0 @@ -["\uD834\uDD1E surrogate, four-byte UTF-8"] diff --git a/3party/jansson/test/suites/valid/utf-surrogate-four-byte-encoding/output b/3party/jansson/test/suites/valid/utf-surrogate-four-byte-encoding/output deleted file mode 100644 index fa806d2544..0000000000 --- a/3party/jansson/test/suites/valid/utf-surrogate-four-byte-encoding/output +++ /dev/null @@ -1 +0,0 @@ -["𝄞 surrogate, four-byte UTF-8"] \ No newline at end of file diff --git a/iphone/Chart/Chart.xcodeproj/project.pbxproj b/iphone/Chart/Chart.xcodeproj/project.pbxproj index a0ed30b614..68bdb5e047 100644 --- a/iphone/Chart/Chart.xcodeproj/project.pbxproj +++ b/iphone/Chart/Chart.xcodeproj/project.pbxproj @@ -182,7 +182,7 @@ isa = PBXProject; attributes = { DefaultBuildSystemTypeForWorkspace = Latest; - LastUpgradeCheck = 1310; + LastUpgradeCheck = 1410; ORGANIZATIONNAME = "Organic Maps"; TargetAttributes = { 47375D952420D4DB00FFCC49 = { diff --git a/iphone/CoreApi/CoreApi.xcodeproj/project.pbxproj b/iphone/CoreApi/CoreApi.xcodeproj/project.pbxproj index f3a05ef092..526069a59a 100644 --- a/iphone/CoreApi/CoreApi.xcodeproj/project.pbxproj +++ b/iphone/CoreApi/CoreApi.xcodeproj/project.pbxproj @@ -181,6 +181,7 @@ 9974CA2823DF1968003FE824 /* ElevationProfileData.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ElevationProfileData.mm; sourceTree = ""; }; 9974CA2B23DF197B003FE824 /* ElevationProfileData+Core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ElevationProfileData+Core.h"; sourceTree = ""; }; AC6A585628057CC1003EABAF /* StringUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringUtils.h; sourceTree = ""; }; + FAA6D8CF29205D2D00E8D50D /* libjansson.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libjansson.a; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -245,6 +246,7 @@ 4700161123425CFC00EBF03D /* Frameworks */ = { isa = PBXGroup; children = ( + FAA6D8CF29205D2D00E8D50D /* libjansson.a */, 4700161223425CFD00EBF03D /* UIKit.framework */, ); name = Frameworks; @@ -512,7 +514,7 @@ 470015E62342509C00EBF03D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1310; + LastUpgradeCheck = 1410; ORGANIZATIONNAME = "Organic Maps"; TargetAttributes = { 470015EE2342509C00EBF03D = { @@ -601,6 +603,10 @@ CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; GCC_PRECOMPILE_PREFIX_HEADER = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(OMIM_ROOT)/3party/glm", + ); ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; VERSIONING_SYSTEM = "apple-generic"; @@ -620,6 +626,10 @@ DEFINES_MODULE = YES; ENABLE_NS_ASSERTIONS = NO; GCC_PRECOMPILE_PREFIX_HEADER = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(OMIM_ROOT)/3party/glm", + ); SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -635,12 +645,6 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", - "$(OMIM_ROOT)/3party/glm", - ); INFOPLIST_FILE = CoreApi/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = ( @@ -664,12 +668,6 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", - "$(OMIM_ROOT)/3party/glm", - ); INFOPLIST_FILE = CoreApi/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/iphone/DatePicker/DatePicker.xcodeproj/project.pbxproj b/iphone/DatePicker/DatePicker.xcodeproj/project.pbxproj index c503784442..29d0d9e15c 100644 --- a/iphone/DatePicker/DatePicker.xcodeproj/project.pbxproj +++ b/iphone/DatePicker/DatePicker.xcodeproj/project.pbxproj @@ -146,7 +146,7 @@ 47A13C5C24B4A86000027D4F /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1310; + LastUpgradeCheck = 1410; ORGANIZATIONNAME = "Organic Maps"; TargetAttributes = { 47A13C6424B4A86000027D4F = { diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index d12db25a2e..23fb69cae1 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -3635,7 +3635,7 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1310; + LastUpgradeCheck = 1410; ORGANIZATIONNAME = "Organic Maps"; TargetAttributes = { 6741A93D1BF340DE002C974C = { @@ -4537,10 +4537,7 @@ GCC_PREFIX_HEADER = Maps_Prefix.pch; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/glm", - "$(OMIM_ROOT)/3party/jansson/src", ); INFOPLIST_FILE = OMaps.plist; OTHER_CFLAGS = ( @@ -4580,10 +4577,7 @@ GCC_PREFIX_HEADER = Maps_Prefix.pch; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/glm", - "$(OMIM_ROOT)/3party/jansson/src", ); INFOPLIST_FILE = OMaps.plist; OTHER_CFLAGS = ( diff --git a/iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/OMaps.xcscheme b/iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/OMaps.xcscheme index 12e0af3126..c15b91fcc2 100644 --- a/iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/OMaps.xcscheme +++ b/iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/OMaps.xcscheme @@ -1,6 +1,6 @@ > class DeserializerFromJson { public: - DeserializerFromJson(json_struct_t * node, OsmIdToFeatureIdsMap const & osmIdToFeatureIds); + DeserializerFromJson(json_t * node, OsmIdToFeatureIdsMap const & osmIdToFeatureIds); template typename std::enable_if::value || std::is_enum::value || @@ -106,7 +106,7 @@ private: return; } - json_struct_t * field = base::GetJSONOptionalField(m_node, name); + json_t * field = base::GetJSONOptionalField(m_node, name); if (field == nullptr) { // No optional field |name| at |m_node|. In that case the default value should be set to |t|. @@ -117,7 +117,7 @@ private: FromJSON(field, t); } - json_struct_t * m_node; + json_t * m_node; OsmIdToFeatureIdsMap const & m_osmIdToFeatureIds; }; diff --git a/xcode/agg/agg.xcodeproj/project.pbxproj b/xcode/agg/agg.xcodeproj/project.pbxproj index 4de206b617..e4cb158285 100644 --- a/xcode/agg/agg.xcodeproj/project.pbxproj +++ b/xcode/agg/agg.xcodeproj/project.pbxproj @@ -605,7 +605,7 @@ 67E8DB7C1BBC19810053C5BA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 67E8DB831BBC19810053C5BA = { CreatedOnToolsVersion = 7.0; diff --git a/xcode/base/base.xcodeproj/project.pbxproj b/xcode/base/base.xcodeproj/project.pbxproj index c971010b84..ed81ae1f1c 100644 --- a/xcode/base/base.xcodeproj/project.pbxproj +++ b/xcode/base/base.xcodeproj/project.pbxproj @@ -636,7 +636,7 @@ 6753416F1A3F57BF00A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 39FD27061CC65A7100AFF551 = { CreatedOnToolsVersion = 7.2.1; diff --git a/xcode/bsdiff/bsdiff.xcodeproj/project.pbxproj b/xcode/bsdiff/bsdiff.xcodeproj/project.pbxproj index 890e43446b..3dc6e59a57 100644 --- a/xcode/bsdiff/bsdiff.xcodeproj/project.pbxproj +++ b/xcode/bsdiff/bsdiff.xcodeproj/project.pbxproj @@ -117,7 +117,7 @@ 4586D0991F480FE600DF9CE5 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 4586D0A01F480FE600DF9CE5 = { CreatedOnToolsVersion = 8.3.3; diff --git a/xcode/coding/coding.xcodeproj/project.pbxproj b/xcode/coding/coding.xcodeproj/project.pbxproj index 3595021db6..5e61d40f6d 100644 --- a/xcode/coding/coding.xcodeproj/project.pbxproj +++ b/xcode/coding/coding.xcodeproj/project.pbxproj @@ -660,7 +660,7 @@ 675342131A3F586300A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 3949168E1BAC3A5F002A8C4F = { CreatedOnToolsVersion = 7.0; @@ -807,8 +807,6 @@ ); HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/icu", "$(OMIM_ROOT)/3party/icu/icu/icu4c/source/common", "$(OMIM_ROOT)/3party/icu/icu/icu4c/source/i18n", @@ -826,8 +824,6 @@ ); HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/icu", "$(OMIM_ROOT)/3party/icu/icu/icu4c/source/common", "$(OMIM_ROOT)/3party/icu/icu/icu4c/source/i18n", diff --git a/xcode/common.xcconfig b/xcode/common.xcconfig index 626de08212..27f893d48f 100644 --- a/xcode/common.xcconfig +++ b/xcode/common.xcconfig @@ -4,7 +4,8 @@ QT_PATH[arch=x86_64] = /usr/local/opt/qt@5 QT_PATH[arch=arm64] = /opt/homebrew/opt/qt@5 BOOST_ROOT = $(OMIM_ROOT)/3party/boost -HEADER_SEARCH_PATHS = $(inherited) $(OMIM_ROOT) $(BOOST_ROOT) +// jansson is included in many libs, and is also used in headers (leaks to other libs) +HEADER_SEARCH_PATHS = $(inherited) $(OMIM_ROOT) $(BOOST_ROOT) $(OMIM_ROOT)/3party/jansson $(OMIM_ROOT)/3party/jansson/jansson/src FRAMEWORK_SEARCH_PATHS[sdk=macosx*] = $(QT_PATH)/lib // Deployment target diff --git a/xcode/descriptions/descriptions.xcodeproj/project.pbxproj b/xcode/descriptions/descriptions.xcodeproj/project.pbxproj index 10eab57739..fc8e152425 100644 --- a/xcode/descriptions/descriptions.xcodeproj/project.pbxproj +++ b/xcode/descriptions/descriptions.xcodeproj/project.pbxproj @@ -104,7 +104,7 @@ isa = PBXProject; attributes = { DefaultBuildSystemTypeForWorkspace = Latest; - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { BBD4571121A6BD0300B0A79C = { CreatedOnToolsVersion = 10.0; diff --git a/xcode/drape/drape.xcodeproj/project.pbxproj b/xcode/drape/drape.xcodeproj/project.pbxproj index 4716f333ac..379f30c4a7 100644 --- a/xcode/drape/drape.xcodeproj/project.pbxproj +++ b/xcode/drape/drape.xcodeproj/project.pbxproj @@ -615,7 +615,7 @@ 6729A4E91A691F6A007D5872 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 6729A4F01A691F6A007D5872 = { CreatedOnToolsVersion = 6.1.1; diff --git a/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj b/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj index d4fdc1d40a..9a1edfe63c 100644 --- a/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj +++ b/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj @@ -823,7 +823,7 @@ 670947321BDF9B82005014C0 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 670947391BDF9B82005014C0 = { CreatedOnToolsVersion = 7.1; @@ -964,12 +964,10 @@ DEBUG_DRAPE_XCODE, ); HEADER_SEARCH_PATHS = ( - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", + "$(inherited)", "$(OMIM_ROOT)/3party/glm", "$(OMIM_ROOT)/3party/protobuf/protobuf/src", "$(OMIM_ROOT)/3party/protobuf", - "$(OMIM_ROOT)/3party/jansson/src", ); }; name = Debug; @@ -983,12 +981,10 @@ "U_DISABLE_RENAMING=1", ); HEADER_SEARCH_PATHS = ( - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", + "$(inherited)", "$(OMIM_ROOT)/3party/glm", "$(OMIM_ROOT)/3party/protobuf/protobuf/src", "$(OMIM_ROOT)/3party/protobuf", - "$(OMIM_ROOT)/3party/jansson/src", ); }; name = Release; diff --git a/xcode/editor/editor.xcodeproj/project.pbxproj b/xcode/editor/editor.xcodeproj/project.pbxproj index 5035ab73bd..9b7a4816aa 100644 --- a/xcode/editor/editor.xcodeproj/project.pbxproj +++ b/xcode/editor/editor.xcodeproj/project.pbxproj @@ -409,7 +409,7 @@ 341138631C15AD97002E3B3E /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 3411386A1C15AD97002E3B3E = { CreatedOnToolsVersion = 7.1.1; diff --git a/xcode/expat/expat.xcodeproj/project.pbxproj b/xcode/expat/expat.xcodeproj/project.pbxproj index 63e2cb4800..4a1cb6ed1b 100644 --- a/xcode/expat/expat.xcodeproj/project.pbxproj +++ b/xcode/expat/expat.xcodeproj/project.pbxproj @@ -163,7 +163,7 @@ 670D04F01B0BAEE50013A7AC /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 670D04F71B0BAEE50013A7AC = { CreatedOnToolsVersion = 6.3.2; diff --git a/xcode/freetype/freetype.xcodeproj/project.pbxproj b/xcode/freetype/freetype.xcodeproj/project.pbxproj index 67f2b632ec..a29980d95a 100644 --- a/xcode/freetype/freetype.xcodeproj/project.pbxproj +++ b/xcode/freetype/freetype.xcodeproj/project.pbxproj @@ -1383,7 +1383,7 @@ 6753484A1A408D9300A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 675348511A408D9300A0A8C3 = { CreatedOnToolsVersion = 6.1; diff --git a/xcode/ge0/ge0.xcodeproj/project.pbxproj b/xcode/ge0/ge0.xcodeproj/project.pbxproj index 7b7be0dc0f..922fe79806 100644 --- a/xcode/ge0/ge0.xcodeproj/project.pbxproj +++ b/xcode/ge0/ge0.xcodeproj/project.pbxproj @@ -177,7 +177,7 @@ 6753470F1A40577A00A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 3496AB751DC1F6CD00C5DDBA = { CreatedOnToolsVersion = 8.0; diff --git a/xcode/generator/generator.xcodeproj/project.pbxproj b/xcode/generator/generator.xcodeproj/project.pbxproj index 2821b48ada..f9f4f90d69 100644 --- a/xcode/generator/generator.xcodeproj/project.pbxproj +++ b/xcode/generator/generator.xcodeproj/project.pbxproj @@ -1182,7 +1182,7 @@ isa = PBXProject; attributes = { DefaultBuildSystemTypeForWorkspace = Latest; - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 6753401A1A3F2A1B00A0A8C3 = { CreatedOnToolsVersion = 6.1; @@ -1363,7 +1363,6 @@ "$(OMIM_ROOT)/3party/gflags/src", "$(QT_PATH)/include", "$(OMIM_ROOT)/3party/glm", - "$(OMIM_ROOT)/3party/jansson/src", ); }; name = Debug; @@ -1377,7 +1376,6 @@ "$(OMIM_ROOT)/3party/gflags/src", "$(QT_PATH)/include", "$(OMIM_ROOT)/3party/glm", - "$(OMIM_ROOT)/3party/jansson/src", ); }; name = Release; diff --git a/xcode/geometry/geometry.xcodeproj/project.pbxproj b/xcode/geometry/geometry.xcodeproj/project.pbxproj index 58df4e8d3a..00cab3d567 100644 --- a/xcode/geometry/geometry.xcodeproj/project.pbxproj +++ b/xcode/geometry/geometry.xcodeproj/project.pbxproj @@ -518,7 +518,7 @@ 675344891A3F684600A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 670F295B1BA9D39A00F2ABF4 = { CreatedOnToolsVersion = 6.4; diff --git a/xcode/gflags/gflags.xcodeproj/project.pbxproj b/xcode/gflags/gflags.xcodeproj/project.pbxproj index 05a33733f9..8bfd8c4ed9 100644 --- a/xcode/gflags/gflags.xcodeproj/project.pbxproj +++ b/xcode/gflags/gflags.xcodeproj/project.pbxproj @@ -100,7 +100,7 @@ 675344251A3F64E400A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 6753442C1A3F64E400A0A8C3 = { CreatedOnToolsVersion = 6.1; diff --git a/xcode/icu/icu.xcodeproj/project.pbxproj b/xcode/icu/icu.xcodeproj/project.pbxproj index 0516a6b812..b7668a3cf8 100644 --- a/xcode/icu/icu.xcodeproj/project.pbxproj +++ b/xcode/icu/icu.xcodeproj/project.pbxproj @@ -1500,7 +1500,7 @@ BBB165CF1E8275120058BF1E /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { BBB165D61E8275120058BF1E = { CreatedOnToolsVersion = 8.2.1; @@ -1662,8 +1662,6 @@ GCC_WARN_INHIBIT_ALL_WARNINGS = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/icu", "$(OMIM_ROOT)/3party/icu/icu/icu4c/source/common", "$(OMIM_ROOT)/3party/icu/icu/icu4c/source/i18n", @@ -1682,8 +1680,6 @@ GCC_WARN_INHIBIT_ALL_WARNINGS = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/icu", "$(OMIM_ROOT)/3party/icu/icu/icu4c/source/common", "$(OMIM_ROOT)/3party/icu/icu/icu4c/source/i18n", diff --git a/xcode/indexer/indexer.xcodeproj/project.pbxproj b/xcode/indexer/indexer.xcodeproj/project.pbxproj index f82ed660a5..f626e347fa 100644 --- a/xcode/indexer/indexer.xcodeproj/project.pbxproj +++ b/xcode/indexer/indexer.xcodeproj/project.pbxproj @@ -882,7 +882,7 @@ 675340921A3F53CB00A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 670C61241AB0661100C38A8C = { CreatedOnToolsVersion = 6.1.1; diff --git a/xcode/jansson/jansson.xcodeproj/project.pbxproj b/xcode/jansson/jansson.xcodeproj/project.pbxproj index 656e2265f7..045120bcf8 100644 --- a/xcode/jansson/jansson.xcodeproj/project.pbxproj +++ b/xcode/jansson/jansson.xcodeproj/project.pbxproj @@ -11,24 +11,26 @@ 6753445F1A3F666300A0A8C3 /* jansson_handle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6753445B1A3F666300A0A8C3 /* jansson_handle.cpp */; }; 675344601A3F666300A0A8C3 /* jansson_handle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6753445C1A3F666300A0A8C3 /* jansson_handle.hpp */; }; 675344611A3F666300A0A8C3 /* myjansson.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6753445D1A3F666300A0A8C3 /* myjansson.hpp */; }; - 675344741A3F676C00A0A8C3 /* dump.c in Sources */ = {isa = PBXBuildFile; fileRef = 675344641A3F676C00A0A8C3 /* dump.c */; }; - 675344751A3F676C00A0A8C3 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 675344651A3F676C00A0A8C3 /* error.c */; }; - 675344761A3F676C00A0A8C3 /* hashtable.c in Sources */ = {isa = PBXBuildFile; fileRef = 675344661A3F676C00A0A8C3 /* hashtable.c */; }; - 675344771A3F676C00A0A8C3 /* hashtable.h in Headers */ = {isa = PBXBuildFile; fileRef = 675344671A3F676C00A0A8C3 /* hashtable.h */; }; - 675344781A3F676C00A0A8C3 /* jansson_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 675344681A3F676C00A0A8C3 /* jansson_config.h */; }; - 675344791A3F676C00A0A8C3 /* jansson_private.h in Headers */ = {isa = PBXBuildFile; fileRef = 675344691A3F676C00A0A8C3 /* jansson_private.h */; }; - 6753447A1A3F676C00A0A8C3 /* jansson.h in Headers */ = {isa = PBXBuildFile; fileRef = 6753446A1A3F676C00A0A8C3 /* jansson.h */; }; - 6753447B1A3F676C00A0A8C3 /* load.c in Sources */ = {isa = PBXBuildFile; fileRef = 6753446B1A3F676C00A0A8C3 /* load.c */; }; - 6753447C1A3F676C00A0A8C3 /* memory.c in Sources */ = {isa = PBXBuildFile; fileRef = 6753446C1A3F676C00A0A8C3 /* memory.c */; }; - 6753447D1A3F676C00A0A8C3 /* pack_unpack.c in Sources */ = {isa = PBXBuildFile; fileRef = 6753446D1A3F676C00A0A8C3 /* pack_unpack.c */; }; - 6753447E1A3F676C00A0A8C3 /* strbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 6753446E1A3F676C00A0A8C3 /* strbuffer.c */; }; - 6753447F1A3F676C00A0A8C3 /* strbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6753446F1A3F676C00A0A8C3 /* strbuffer.h */; }; - 675344801A3F676C00A0A8C3 /* strconv.c in Sources */ = {isa = PBXBuildFile; fileRef = 675344701A3F676C00A0A8C3 /* strconv.c */; }; - 675344811A3F676C00A0A8C3 /* utf.c in Sources */ = {isa = PBXBuildFile; fileRef = 675344711A3F676C00A0A8C3 /* utf.c */; }; - 675344821A3F676C00A0A8C3 /* utf.h in Headers */ = {isa = PBXBuildFile; fileRef = 675344721A3F676C00A0A8C3 /* utf.h */; }; - 675344831A3F676C00A0A8C3 /* value.c in Sources */ = {isa = PBXBuildFile; fileRef = 675344731A3F676C00A0A8C3 /* value.c */; }; - E10342CF22A97A0C0073F984 /* lookup3.h in Headers */ = {isa = PBXBuildFile; fileRef = E10342CD22A97A0C0073F984 /* lookup3.h */; }; - E10342D022A97A0C0073F984 /* hashtable_seed.c in Sources */ = {isa = PBXBuildFile; fileRef = E10342CE22A97A0C0073F984 /* hashtable_seed.c */; }; + FAA6D8CD29205A2200E8D50D /* jansson_config.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA6D8CC29205A2200E8D50D /* jansson_config.h */; }; + FAA8867929214906004FA014 /* pack_unpack.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA8866429214906004FA014 /* pack_unpack.c */; }; + FAA8867A29214906004FA014 /* memory.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA8866629214906004FA014 /* memory.c */; }; + FAA8867B29214906004FA014 /* strconv.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA8866729214906004FA014 /* strconv.c */; }; + FAA8867C29214906004FA014 /* jansson_private.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA8866829214906004FA014 /* jansson_private.h */; }; + FAA8867D29214906004FA014 /* hashtable.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA8866929214906004FA014 /* hashtable.h */; }; + FAA8867E29214906004FA014 /* utf.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA8866A29214906004FA014 /* utf.h */; }; + FAA8867F29214906004FA014 /* strbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA8866B29214906004FA014 /* strbuffer.c */; }; + FAA8868029214906004FA014 /* lookup3.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA8866D29214906004FA014 /* lookup3.h */; }; + FAA8868129214906004FA014 /* dump.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA8866E29214906004FA014 /* dump.c */; }; + FAA8868229214906004FA014 /* hashtable_seed.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA8866F29214906004FA014 /* hashtable_seed.c */; }; + FAA8868329214906004FA014 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA8867029214906004FA014 /* error.c */; }; + FAA8868429214906004FA014 /* hashtable.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA8867129214906004FA014 /* hashtable.c */; }; + FAA8868529214906004FA014 /* version.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA8867229214906004FA014 /* version.c */; }; + FAA8868629214906004FA014 /* utf.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA8867329214906004FA014 /* utf.c */; }; + FAA8868729214906004FA014 /* jansson.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA8867429214906004FA014 /* jansson.h */; }; + FAA8868829214906004FA014 /* load.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA8867529214906004FA014 /* load.c */; }; + FAA8868929214906004FA014 /* value.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA8867729214906004FA014 /* value.c */; }; + FAA8868A29214906004FA014 /* strbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA8867829214906004FA014 /* strbuffer.h */; }; + FAA8868C29214A0E004FA014 /* jansson_private_config.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA8868B29214A0D004FA014 /* jansson_private_config.h */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -39,24 +41,29 @@ 6753445B1A3F666300A0A8C3 /* jansson_handle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jansson_handle.cpp; sourceTree = ""; }; 6753445C1A3F666300A0A8C3 /* jansson_handle.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = jansson_handle.hpp; sourceTree = ""; }; 6753445D1A3F666300A0A8C3 /* myjansson.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = myjansson.hpp; sourceTree = ""; }; - 675344641A3F676C00A0A8C3 /* dump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dump.c; sourceTree = ""; }; - 675344651A3F676C00A0A8C3 /* error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = error.c; sourceTree = ""; }; - 675344661A3F676C00A0A8C3 /* hashtable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hashtable.c; sourceTree = ""; }; - 675344671A3F676C00A0A8C3 /* hashtable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hashtable.h; sourceTree = ""; }; - 675344681A3F676C00A0A8C3 /* jansson_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jansson_config.h; sourceTree = ""; }; - 675344691A3F676C00A0A8C3 /* jansson_private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jansson_private.h; sourceTree = ""; }; - 6753446A1A3F676C00A0A8C3 /* jansson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jansson.h; sourceTree = ""; }; - 6753446B1A3F676C00A0A8C3 /* load.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = load.c; sourceTree = ""; }; - 6753446C1A3F676C00A0A8C3 /* memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = memory.c; sourceTree = ""; }; - 6753446D1A3F676C00A0A8C3 /* pack_unpack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pack_unpack.c; sourceTree = ""; }; - 6753446E1A3F676C00A0A8C3 /* strbuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = strbuffer.c; sourceTree = ""; }; - 6753446F1A3F676C00A0A8C3 /* strbuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strbuffer.h; sourceTree = ""; }; - 675344701A3F676C00A0A8C3 /* strconv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = strconv.c; sourceTree = ""; }; - 675344711A3F676C00A0A8C3 /* utf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utf.c; sourceTree = ""; }; - 675344721A3F676C00A0A8C3 /* utf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf.h; sourceTree = ""; }; - 675344731A3F676C00A0A8C3 /* value.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = value.c; sourceTree = ""; }; - E10342CD22A97A0C0073F984 /* lookup3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lookup3.h; sourceTree = ""; }; - E10342CE22A97A0C0073F984 /* hashtable_seed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hashtable_seed.c; sourceTree = ""; }; + FAA6D8CC29205A2200E8D50D /* jansson_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jansson_config.h; sourceTree = ""; }; + FAA8866429214906004FA014 /* pack_unpack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pack_unpack.c; sourceTree = ""; }; + FAA8866529214906004FA014 /* jansson_config.h.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jansson_config.h.in; sourceTree = ""; }; + FAA8866629214906004FA014 /* memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = memory.c; sourceTree = ""; }; + FAA8866729214906004FA014 /* strconv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = strconv.c; sourceTree = ""; }; + FAA8866829214906004FA014 /* jansson_private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jansson_private.h; sourceTree = ""; }; + FAA8866929214906004FA014 /* hashtable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hashtable.h; sourceTree = ""; }; + FAA8866A29214906004FA014 /* utf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf.h; sourceTree = ""; }; + FAA8866B29214906004FA014 /* strbuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = strbuffer.c; sourceTree = ""; }; + FAA8866C29214906004FA014 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + FAA8866D29214906004FA014 /* lookup3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lookup3.h; sourceTree = ""; }; + FAA8866E29214906004FA014 /* dump.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dump.c; sourceTree = ""; }; + FAA8866F29214906004FA014 /* hashtable_seed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hashtable_seed.c; sourceTree = ""; }; + FAA8867029214906004FA014 /* error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = error.c; sourceTree = ""; }; + FAA8867129214906004FA014 /* hashtable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hashtable.c; sourceTree = ""; }; + FAA8867229214906004FA014 /* version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = version.c; sourceTree = ""; }; + FAA8867329214906004FA014 /* utf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utf.c; sourceTree = ""; }; + FAA8867429214906004FA014 /* jansson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jansson.h; sourceTree = ""; }; + FAA8867529214906004FA014 /* load.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = load.c; sourceTree = ""; }; + FAA8867629214906004FA014 /* jansson.def */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jansson.def; sourceTree = ""; }; + FAA8867729214906004FA014 /* value.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = value.c; sourceTree = ""; }; + FAA8867829214906004FA014 /* strbuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strbuffer.h; sourceTree = ""; }; + FAA8868B29214A0D004FA014 /* jansson_private_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jansson_private_config.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -70,31 +77,6 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 670D04A11B0B719D0013A7AC /* src */ = { - isa = PBXGroup; - children = ( - 675344641A3F676C00A0A8C3 /* dump.c */, - E10342CE22A97A0C0073F984 /* hashtable_seed.c */, - E10342CD22A97A0C0073F984 /* lookup3.h */, - 675344651A3F676C00A0A8C3 /* error.c */, - 675344661A3F676C00A0A8C3 /* hashtable.c */, - 675344671A3F676C00A0A8C3 /* hashtable.h */, - 675344681A3F676C00A0A8C3 /* jansson_config.h */, - 675344691A3F676C00A0A8C3 /* jansson_private.h */, - 6753446A1A3F676C00A0A8C3 /* jansson.h */, - 6753446B1A3F676C00A0A8C3 /* load.c */, - 6753446C1A3F676C00A0A8C3 /* memory.c */, - 6753446D1A3F676C00A0A8C3 /* pack_unpack.c */, - 6753446E1A3F676C00A0A8C3 /* strbuffer.c */, - 6753446F1A3F676C00A0A8C3 /* strbuffer.h */, - 675344701A3F676C00A0A8C3 /* strconv.c */, - 675344711A3F676C00A0A8C3 /* utf.c */, - 675344721A3F676C00A0A8C3 /* utf.h */, - 675344731A3F676C00A0A8C3 /* value.c */, - ); - path = src; - sourceTree = ""; - }; 675344441A3F664300A0A8C3 = { isa = PBXGroup; children = ( @@ -116,16 +98,47 @@ 6753444F1A3F664300A0A8C3 /* jansson */ = { isa = PBXGroup; children = ( + FAA6D8CC29205A2200E8D50D /* jansson_config.h */, 6753445B1A3F666300A0A8C3 /* jansson_handle.cpp */, 6753445C1A3F666300A0A8C3 /* jansson_handle.hpp */, + FAA8868B29214A0D004FA014 /* jansson_private_config.h */, 345C55F71C93143B00B6783F /* myjansson.cpp */, 6753445D1A3F666300A0A8C3 /* myjansson.hpp */, - 670D04A11B0B719D0013A7AC /* src */, + FAA8866329214906004FA014 /* src */, ); name = jansson; path = ../../3party/jansson; sourceTree = ""; }; + FAA8866329214906004FA014 /* src */ = { + isa = PBXGroup; + children = ( + FAA8866429214906004FA014 /* pack_unpack.c */, + FAA8866529214906004FA014 /* jansson_config.h.in */, + FAA8866629214906004FA014 /* memory.c */, + FAA8866729214906004FA014 /* strconv.c */, + FAA8866829214906004FA014 /* jansson_private.h */, + FAA8866929214906004FA014 /* hashtable.h */, + FAA8866A29214906004FA014 /* utf.h */, + FAA8866B29214906004FA014 /* strbuffer.c */, + FAA8866C29214906004FA014 /* Makefile.am */, + FAA8866D29214906004FA014 /* lookup3.h */, + FAA8866E29214906004FA014 /* dump.c */, + FAA8866F29214906004FA014 /* hashtable_seed.c */, + FAA8867029214906004FA014 /* error.c */, + FAA8867129214906004FA014 /* hashtable.c */, + FAA8867229214906004FA014 /* version.c */, + FAA8867329214906004FA014 /* utf.c */, + FAA8867429214906004FA014 /* jansson.h */, + FAA8867529214906004FA014 /* load.c */, + FAA8867629214906004FA014 /* jansson.def */, + FAA8867729214906004FA014 /* value.c */, + FAA8867829214906004FA014 /* strbuffer.h */, + ); + name = src; + path = jansson/src; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -133,15 +146,16 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + FAA8867E29214906004FA014 /* utf.h in Headers */, + FAA8868029214906004FA014 /* lookup3.h in Headers */, 675344601A3F666300A0A8C3 /* jansson_handle.hpp in Headers */, - 675344791A3F676C00A0A8C3 /* jansson_private.h in Headers */, - 675344821A3F676C00A0A8C3 /* utf.h in Headers */, + FAA8868729214906004FA014 /* jansson.h in Headers */, + FAA8867C29214906004FA014 /* jansson_private.h in Headers */, + FAA8867D29214906004FA014 /* hashtable.h in Headers */, + FAA8868A29214906004FA014 /* strbuffer.h in Headers */, + FAA8868C29214A0E004FA014 /* jansson_private_config.h in Headers */, 675344611A3F666300A0A8C3 /* myjansson.hpp in Headers */, - E10342CF22A97A0C0073F984 /* lookup3.h in Headers */, - 6753447F1A3F676C00A0A8C3 /* strbuffer.h in Headers */, - 6753447A1A3F676C00A0A8C3 /* jansson.h in Headers */, - 675344771A3F676C00A0A8C3 /* hashtable.h in Headers */, - 675344781A3F676C00A0A8C3 /* jansson_config.h in Headers */, + FAA6D8CD29205A2200E8D50D /* jansson_config.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -171,7 +185,7 @@ 675344451A3F664300A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 6753444C1A3F664300A0A8C3 = { CreatedOnToolsVersion = 6.1; @@ -201,19 +215,20 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6753447B1A3F676C00A0A8C3 /* load.c in Sources */, - E10342D022A97A0C0073F984 /* hashtable_seed.c in Sources */, - 675344801A3F676C00A0A8C3 /* strconv.c in Sources */, - 6753447D1A3F676C00A0A8C3 /* pack_unpack.c in Sources */, - 675344761A3F676C00A0A8C3 /* hashtable.c in Sources */, + FAA8868829214906004FA014 /* load.c in Sources */, 345C55F81C93143B00B6783F /* myjansson.cpp in Sources */, - 675344751A3F676C00A0A8C3 /* error.c in Sources */, + FAA8867929214906004FA014 /* pack_unpack.c in Sources */, + FAA8868429214906004FA014 /* hashtable.c in Sources */, + FAA8867A29214906004FA014 /* memory.c in Sources */, + FAA8868529214906004FA014 /* version.c in Sources */, + FAA8868329214906004FA014 /* error.c in Sources */, + FAA8867F29214906004FA014 /* strbuffer.c in Sources */, 6753445F1A3F666300A0A8C3 /* jansson_handle.cpp in Sources */, - 675344831A3F676C00A0A8C3 /* value.c in Sources */, - 6753447C1A3F676C00A0A8C3 /* memory.c in Sources */, - 675344811A3F676C00A0A8C3 /* utf.c in Sources */, - 675344741A3F676C00A0A8C3 /* dump.c in Sources */, - 6753447E1A3F676C00A0A8C3 /* strbuffer.c in Sources */, + FAA8868229214906004FA014 /* hashtable_seed.c in Sources */, + FAA8868629214906004FA014 /* utf.c in Sources */, + FAA8868129214906004FA014 /* dump.c in Sources */, + FAA8867B29214906004FA014 /* strconv.c in Sources */, + FAA8868929214906004FA014 /* value.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -224,11 +239,11 @@ isa = XCBuildConfiguration; baseConfigurationReference = 34F558681DBF483000A4FC11 /* common-debug.xcconfig */; buildSettings = { - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - HEADER_SEARCH_PATHS = ( + GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", - "$(OMIM_ROOT)/3party/jansson/src", + HAVE_CONFIG_H, ); + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; }; name = Debug; }; @@ -236,11 +251,11 @@ isa = XCBuildConfiguration; baseConfigurationReference = 34F558691DBF483000A4FC11 /* common-release.xcconfig */; buildSettings = { - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - HEADER_SEARCH_PATHS = ( + GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", - "$(OMIM_ROOT)/3party/jansson/src", + HAVE_CONFIG_H, ); + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; }; name = Release; }; diff --git a/xcode/kml/kml.xcodeproj/project.pbxproj b/xcode/kml/kml.xcodeproj/project.pbxproj index c422eafa12..70417d448f 100644 --- a/xcode/kml/kml.xcodeproj/project.pbxproj +++ b/xcode/kml/kml.xcodeproj/project.pbxproj @@ -222,7 +222,7 @@ 45E45575205849A600D9F45E /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 45E4557C205849A600D9F45E = { CreatedOnToolsVersion = 9.2; diff --git a/xcode/map/map.xcodeproj/project.pbxproj b/xcode/map/map.xcodeproj/project.pbxproj index 46c6b2565a..3cf2116551 100644 --- a/xcode/map/map.xcodeproj/project.pbxproj +++ b/xcode/map/map.xcodeproj/project.pbxproj @@ -587,7 +587,7 @@ 675345B31A4054AD00A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 3DA571D720C1921D007BDE27 = { CreatedOnToolsVersion = 9.3.1; @@ -762,7 +762,6 @@ "$(QT_PATH)/include", "$(OMIM_ROOT)/3party/expat/lib", "$(OMIM_ROOT)/3party/glm", - "$(OMIM_ROOT)/3party/jansson/src", "$(OMIM_ROOT)/3party/protobuf/protobuf/src", ); }; @@ -777,7 +776,6 @@ "$(QT_PATH)/include", "$(OMIM_ROOT)/3party/expat/lib", "$(OMIM_ROOT)/3party/glm", - "$(OMIM_ROOT)/3party/jansson/src", "$(OMIM_ROOT)/3party/protobuf/protobuf/src", ); }; diff --git a/xcode/mapshot/mapshot.xcodeproj/project.pbxproj b/xcode/mapshot/mapshot.xcodeproj/project.pbxproj index 1e2901dcac..9d720805a5 100644 --- a/xcode/mapshot/mapshot.xcodeproj/project.pbxproj +++ b/xcode/mapshot/mapshot.xcodeproj/project.pbxproj @@ -112,7 +112,7 @@ 675D21291BFB6F3D00717E4F /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 675D21301BFB6F3D00717E4F = { CreatedOnToolsVersion = 7.1.1; diff --git a/xcode/minizip/minizip.xcodeproj/project.pbxproj b/xcode/minizip/minizip.xcodeproj/project.pbxproj index 5f4d76f5b8..5a1b076c23 100644 --- a/xcode/minizip/minizip.xcodeproj/project.pbxproj +++ b/xcode/minizip/minizip.xcodeproj/project.pbxproj @@ -134,7 +134,7 @@ isa = PBXProject; attributes = { DefaultBuildSystemTypeForWorkspace = Latest; - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 474017F523F5B2CE00A93C81 = { CreatedOnToolsVersion = 11.3; diff --git a/xcode/mwm_diff/mwm_diff.xcodeproj/project.pbxproj b/xcode/mwm_diff/mwm_diff.xcodeproj/project.pbxproj index 2a7e3224f7..2c0906935a 100644 --- a/xcode/mwm_diff/mwm_diff.xcodeproj/project.pbxproj +++ b/xcode/mwm_diff/mwm_diff.xcodeproj/project.pbxproj @@ -95,7 +95,7 @@ 4586D0CA1F48130600DF9CE5 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 4586D0D11F48130600DF9CE5 = { CreatedOnToolsVersion = 8.3.3; diff --git a/xcode/oauthcpp/oauthcpp.xcodeproj/project.pbxproj b/xcode/oauthcpp/oauthcpp.xcodeproj/project.pbxproj index 8421e16109..18e52097dc 100644 --- a/xcode/oauthcpp/oauthcpp.xcodeproj/project.pbxproj +++ b/xcode/oauthcpp/oauthcpp.xcodeproj/project.pbxproj @@ -123,7 +123,7 @@ 340C20E71C3E5E5000111D22 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 340C20EE1C3E5E5000111D22 = { CreatedOnToolsVersion = 7.2; diff --git a/xcode/open_location_code/open_location_code.xcodeproj/project.pbxproj b/xcode/open_location_code/open_location_code.xcodeproj/project.pbxproj index 3a8d879caf..6d72a6ae9f 100644 --- a/xcode/open_location_code/open_location_code.xcodeproj/project.pbxproj +++ b/xcode/open_location_code/open_location_code.xcodeproj/project.pbxproj @@ -115,7 +115,7 @@ 1D5F8AA4207616D300CAADFC /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 1D5F8AAB207616D300CAADFC = { CreatedOnToolsVersion = 9.2; diff --git a/xcode/opening_hours/opening_hours.xcodeproj/project.pbxproj b/xcode/opening_hours/opening_hours.xcodeproj/project.pbxproj index 68c94b4787..94d31bd39d 100644 --- a/xcode/opening_hours/opening_hours.xcodeproj/project.pbxproj +++ b/xcode/opening_hours/opening_hours.xcodeproj/project.pbxproj @@ -358,7 +358,7 @@ 670C61DF1AC3511700C38A8C /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 670C61E61AC3511700C38A8C = { CreatedOnToolsVersion = 6.1.1; diff --git a/xcode/openlr/openlr.xcodeproj/project.pbxproj b/xcode/openlr/openlr.xcodeproj/project.pbxproj index d3e6418be5..ffb317d94c 100644 --- a/xcode/openlr/openlr.xcodeproj/project.pbxproj +++ b/xcode/openlr/openlr.xcodeproj/project.pbxproj @@ -202,7 +202,7 @@ 671E78EB1E6A4FE400B2859B /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 671E78F21E6A4FE400B2859B = { CreatedOnToolsVersion = 8.2.1; @@ -257,12 +257,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 671E791F1E6A503F00B2859B /* common-debug.xcconfig */; buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", - "$(OMIM_ROOT)/3party/jansson/src", - ); }; name = Debug; }; @@ -270,12 +264,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 671E79201E6A503F00B2859B /* common-release.xcconfig */; buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", - "$(OMIM_ROOT)/3party/jansson/src", - ); }; name = Release; }; diff --git a/xcode/osrm/osrm.xcodeproj/project.pbxproj b/xcode/osrm/osrm.xcodeproj/project.pbxproj index 33a2521464..d9bd43b3d1 100644 --- a/xcode/osrm/osrm.xcodeproj/project.pbxproj +++ b/xcode/osrm/osrm.xcodeproj/project.pbxproj @@ -378,7 +378,7 @@ 67534D391A40B7ED00A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 67534D401A40B7ED00A0A8C3 = { CreatedOnToolsVersion = 6.1; diff --git a/xcode/platform/platform.xcodeproj/project.pbxproj b/xcode/platform/platform.xcodeproj/project.pbxproj index c6e04654bf..de240fdeca 100644 --- a/xcode/platform/platform.xcodeproj/project.pbxproj +++ b/xcode/platform/platform.xcodeproj/project.pbxproj @@ -588,7 +588,7 @@ 675343701A3F5CF500A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 675340E81C58C496002CF0D9 = { CreatedOnToolsVersion = 7.2; @@ -756,45 +756,33 @@ ); "FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]" = ( "$(inherited)", - "$(OMIM_ROOT)/iphone/Maps/3party/Carthage/Build/iOS", ); "FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]" = ( "$(inherited)", - "$(OMIM_ROOT)/iphone/Maps/3party/Carthage/Build/iOS", ); "FRAMEWORK_SEARCH_PATHS[sdk=macosx*]" = ( "$(inherited)", "$(QT_PATH)/lib", - "$(OMIM_ROOT)/iphone/Maps/3party/Carthage/Build/Mac", ); "HEADER_SEARCH_PATHS[sdk=iphoneos*]" = ( "$(inherited)", - "$(OMIM_ROOT)/iphone/Maps/3party/Carthage/Build/iOS/Alamofire.framework/Headers", - "$(OMIM_ROOT)/3party/jansson/src", ); "HEADER_SEARCH_PATHS[sdk=iphonesimulator*]" = ( "$(inherited)", - "$(OMIM_ROOT)/iphone/Maps/3party/Carthage/Build/iOS/Alamofire.framework/Headers", - "$(OMIM_ROOT)/3party/jansson/src", ); "HEADER_SEARCH_PATHS[sdk=macosx*]" = ( "$(inherited)", - "$(OMIM_ROOT)/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Headers", - "$(OMIM_ROOT)/3party/jansson/src", "$(QT_PATH)/include", ); "LIBRARY_SEARCH_PATHS[sdk=iphoneos*]" = ( "$(inherited)", - "$(OMIM_ROOT)/iphone/Maps/3party/Carthage/Build/iOS", ); "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*]" = ( "$(inherited)", - "$(OMIM_ROOT)/iphone/Maps/3party/Carthage/Build/iOS", ); "LIBRARY_SEARCH_PATHS[sdk=macosx*]" = ( "$(inherited)", "$(QT_PATH)/lib", - "$(OMIM_ROOT)/iphone/Maps/3party/Carthage/Build/Mac", ); }; name = Debug; @@ -834,17 +822,17 @@ "HEADER_SEARCH_PATHS[sdk=iphoneos*]" = ( "$(inherited)", "$(OMIM_ROOT)/iphone/Maps/3party/Carthage/Build/iOS/Alamofire.framework/Headers", - "$(OMIM_ROOT)/3party/jansson/src", + "$(OMIM_ROOT)/3party/jansson/jansson/src", ); "HEADER_SEARCH_PATHS[sdk=iphonesimulator*]" = ( "$(inherited)", "$(OMIM_ROOT)/iphone/Maps/3party/Carthage/Build/iOS/Alamofire.framework/Headers", - "$(OMIM_ROOT)/3party/jansson/src", + "$(OMIM_ROOT)/3party/jansson/jansson/src", ); "HEADER_SEARCH_PATHS[sdk=macosx*]" = ( "$(inherited)", "$(OMIM_ROOT)/iphone/Maps/3party/Carthage/Build/Mac/Alamofire.framework/Headers", - "$(OMIM_ROOT)/3party/jansson/src", + "$(OMIM_ROOT)/3party/jansson/jansson/src", "$(QT_PATH)/include", ); "LIBRARY_SEARCH_PATHS[sdk=iphoneos*]" = ( diff --git a/xcode/protobuf/protobuf.xcodeproj/project.pbxproj b/xcode/protobuf/protobuf.xcodeproj/project.pbxproj index 8c6d5d1b72..19e2b8b8b3 100644 --- a/xcode/protobuf/protobuf.xcodeproj/project.pbxproj +++ b/xcode/protobuf/protobuf.xcodeproj/project.pbxproj @@ -170,7 +170,7 @@ 670D04C51B0BAC210013A7AC /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 670D04CC1B0BAC210013A7AC = { CreatedOnToolsVersion = 6.3.2; diff --git a/xcode/pugixml/pugixml.xcodeproj/project.pbxproj b/xcode/pugixml/pugixml.xcodeproj/project.pbxproj index 74d60273aa..e19e68f6ae 100644 --- a/xcode/pugixml/pugixml.xcodeproj/project.pbxproj +++ b/xcode/pugixml/pugixml.xcodeproj/project.pbxproj @@ -103,7 +103,7 @@ 340DF9D41C1FF16000B5C7EC /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 340DF9DB1C1FF16000B5C7EC = { CreatedOnToolsVersion = 7.2; diff --git a/xcode/qt/qt.xcodeproj/project.pbxproj b/xcode/qt/qt.xcodeproj/project.pbxproj index 2acefd0df4..62bc1ed652 100644 --- a/xcode/qt/qt.xcodeproj/project.pbxproj +++ b/xcode/qt/qt.xcodeproj/project.pbxproj @@ -695,7 +695,7 @@ 675345411A404C6100A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 675345481A404C6100A0A8C3 = { CreatedOnToolsVersion = 6.1; @@ -840,7 +840,6 @@ "$(OMIM_ROOT)/3party/glm", "$(DERIVED_FILE_DIR)", "$(OMIM_ROOT)/3party/gflags/src", - "$(OMIM_ROOT)/3party/jansson/src", ); LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -871,7 +870,6 @@ "$(OMIM_ROOT)/3party/glm", "$(DERIVED_FILE_DIR)", "$(OMIM_ROOT)/3party/gflags/src", - "$(OMIM_ROOT)/3party/jansson/src", ); LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/xcode/routing/routing.xcodeproj/project.pbxproj b/xcode/routing/routing.xcodeproj/project.pbxproj index 04d381e6dd..8d7e771757 100644 --- a/xcode/routing/routing.xcodeproj/project.pbxproj +++ b/xcode/routing/routing.xcodeproj/project.pbxproj @@ -1065,7 +1065,7 @@ 675343F01A3F640D00A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 6742AD0D1C68A91B009CB89E = { CreatedOnToolsVersion = 7.2.1; @@ -1351,10 +1351,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 34F558351DBF2A2600A4FC11 /* common-debug.xcconfig */; buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(OMIM_ROOT)/3party/jansson/src", - ); }; name = Debug; }; @@ -1362,10 +1358,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 34F558361DBF2A2600A4FC11 /* common-release.xcconfig */; buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(OMIM_ROOT)/3party/jansson/src", - ); }; name = Release; }; diff --git a/xcode/routing_common/routing_common.xcodeproj/project.pbxproj b/xcode/routing_common/routing_common.xcodeproj/project.pbxproj index 239fb0f209..6b17e6052f 100644 --- a/xcode/routing_common/routing_common.xcodeproj/project.pbxproj +++ b/xcode/routing_common/routing_common.xcodeproj/project.pbxproj @@ -185,7 +185,7 @@ 671E786A1E6A3BE200B2859B /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 671E78711E6A3BE200B2859B = { CreatedOnToolsVersion = 8.2.1; @@ -256,12 +256,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 671E78901E6A3C9C00B2859B /* common-debug.xcconfig */; buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", - "$(OMIM_ROOT)/3party/jansson/src", - ); }; name = Debug; }; @@ -269,12 +263,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 671E78911E6A3C9C00B2859B /* common-release.xcconfig */; buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", - "$(OMIM_ROOT)/3party/jansson/src", - ); }; name = Release; }; diff --git a/xcode/sdf_image/sdf_image.xcodeproj/project.pbxproj b/xcode/sdf_image/sdf_image.xcodeproj/project.pbxproj index 2fbee29828..263e985e6c 100644 --- a/xcode/sdf_image/sdf_image.xcodeproj/project.pbxproj +++ b/xcode/sdf_image/sdf_image.xcodeproj/project.pbxproj @@ -95,7 +95,7 @@ 675D219C1BFB8D3F00717E4F /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 675D21A31BFB8D3F00717E4F = { CreatedOnToolsVersion = 7.1.1; diff --git a/xcode/search/search.xcodeproj/project.pbxproj b/xcode/search/search.xcodeproj/project.pbxproj index 15943c4d8e..07e40d664d 100644 --- a/xcode/search/search.xcodeproj/project.pbxproj +++ b/xcode/search/search.xcodeproj/project.pbxproj @@ -1106,7 +1106,7 @@ 675346A81A4055CF00A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 671C620B1AE9225100076BD0 = { CreatedOnToolsVersion = 6.3.1; diff --git a/xcode/shaders/shaders.xcodeproj/project.pbxproj b/xcode/shaders/shaders.xcodeproj/project.pbxproj index 53ce0a7d76..ec7f248643 100644 --- a/xcode/shaders/shaders.xcodeproj/project.pbxproj +++ b/xcode/shaders/shaders.xcodeproj/project.pbxproj @@ -463,7 +463,7 @@ 4566606620E254060085E8C1 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 4566606D20E254060085E8C1 = { CreatedOnToolsVersion = 9.4; @@ -674,12 +674,9 @@ buildSettings = { HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/glm", "$(OMIM_ROOT)/3party/Vulkan-Headers/include", "$(OMIM_ROOT)/3party/vulkan_wrapper", - "$(OMIM_ROOT)/3party/jansson/src", ); }; name = Debug; @@ -690,12 +687,9 @@ buildSettings = { HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/glm", "$(OMIM_ROOT)/3party/Vulkan-Headers/include", "$(OMIM_ROOT)/3party/vulkan_wrapper", - "$(OMIM_ROOT)/3party/jansson/src", ); }; name = Release; @@ -720,8 +714,6 @@ FRAMEWORK_SEARCH_PATHS = "$(QT_PATH)/lib"; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/glm", "$(QT_PATH)/include", ); @@ -735,8 +727,6 @@ FRAMEWORK_SEARCH_PATHS = "$(QT_PATH)/lib"; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/glm", "$(QT_PATH)/include", ); diff --git a/xcode/software_renderer/software_renderer.xcodeproj/project.pbxproj b/xcode/software_renderer/software_renderer.xcodeproj/project.pbxproj index 6e3d9061cb..900ba4f88c 100644 --- a/xcode/software_renderer/software_renderer.xcodeproj/project.pbxproj +++ b/xcode/software_renderer/software_renderer.xcodeproj/project.pbxproj @@ -193,7 +193,7 @@ 453FEDCD1F35E647005C1BB4 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 453FEDD41F35E647005C1BB4 = { CreatedOnToolsVersion = 8.3.3; diff --git a/xcode/stb_image/stb_image.xcodeproj/project.pbxproj b/xcode/stb_image/stb_image.xcodeproj/project.pbxproj index 3647da391a..572b91f95d 100644 --- a/xcode/stb_image/stb_image.xcodeproj/project.pbxproj +++ b/xcode/stb_image/stb_image.xcodeproj/project.pbxproj @@ -99,7 +99,7 @@ 675D21B21BFB8DBA00717E4F /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 675D21B91BFB8DBA00717E4F = { CreatedOnToolsVersion = 7.1.1; diff --git a/xcode/storage/storage.xcodeproj/project.pbxproj b/xcode/storage/storage.xcodeproj/project.pbxproj index 40d1279b6e..b660f64881 100644 --- a/xcode/storage/storage.xcodeproj/project.pbxproj +++ b/xcode/storage/storage.xcodeproj/project.pbxproj @@ -521,7 +521,7 @@ 675342D81A3F59EF00A0A8C3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 675342DF1A3F59EF00A0A8C3 = { CreatedOnToolsVersion = 6.1; @@ -677,7 +677,6 @@ buildSettings = { HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)/3party/jansson/src", "$(OMIM_ROOT)/3party/glm/", ); }; @@ -689,7 +688,6 @@ buildSettings = { HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)/3party/jansson/src", "$(OMIM_ROOT)/3party/glm/", ); }; diff --git a/xcode/succinct/succinct.xcodeproj/project.pbxproj b/xcode/succinct/succinct.xcodeproj/project.pbxproj index 6b44376496..3c9451b60d 100644 --- a/xcode/succinct/succinct.xcodeproj/project.pbxproj +++ b/xcode/succinct/succinct.xcodeproj/project.pbxproj @@ -182,7 +182,7 @@ 67B52B631AD3CA7F00664C17 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 67B52B6A1AD3CA7F00664C17 = { CreatedOnToolsVersion = 6.2; diff --git a/xcode/tess2/tess2.xcodeproj/project.pbxproj b/xcode/tess2/tess2.xcodeproj/project.pbxproj index aa64464cd9..6f755f5220 100644 --- a/xcode/tess2/tess2.xcodeproj/project.pbxproj +++ b/xcode/tess2/tess2.xcodeproj/project.pbxproj @@ -137,7 +137,7 @@ 6719DD301B95A8E70018166F /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 6719DD371B95A8E70018166F = { CreatedOnToolsVersion = 6.4; @@ -187,8 +187,6 @@ GCC_WARN_INHIBIT_ALL_WARNINGS = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/libtess2/Include", ); }; @@ -201,8 +199,6 @@ GCC_WARN_INHIBIT_ALL_WARNINGS = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/libtess2/Include", ); }; diff --git a/xcode/tracking/tracking.xcodeproj/project.pbxproj b/xcode/tracking/tracking.xcodeproj/project.pbxproj index 8c68117469..64b5e09e86 100644 --- a/xcode/tracking/tracking.xcodeproj/project.pbxproj +++ b/xcode/tracking/tracking.xcodeproj/project.pbxproj @@ -237,7 +237,7 @@ 675E88481DB7AC0300F8EBDA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 675E884F1DB7AC0300F8EBDA = { CreatedOnToolsVersion = 8.0; diff --git a/xcode/traffic/traffic.xcodeproj/project.pbxproj b/xcode/traffic/traffic.xcodeproj/project.pbxproj index 785c3b96d7..0f7d05a1fd 100644 --- a/xcode/traffic/traffic.xcodeproj/project.pbxproj +++ b/xcode/traffic/traffic.xcodeproj/project.pbxproj @@ -219,7 +219,7 @@ 67BECB421DDA43AF00FC4E99 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 67BECB491DDA43AF00FC4E99 = { CreatedOnToolsVersion = 8.1; diff --git a/xcode/transit/transit.xcodeproj/project.pbxproj b/xcode/transit/transit.xcodeproj/project.pbxproj index d9844db15e..3360869d4f 100644 --- a/xcode/transit/transit.xcodeproj/project.pbxproj +++ b/xcode/transit/transit.xcodeproj/project.pbxproj @@ -150,7 +150,7 @@ 56D7F2EC1FE7F0F200D99E62 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 56D7F2F31FE7F0F200D99E62 = { CreatedOnToolsVersion = 9.2; @@ -212,12 +212,6 @@ buildSettings = { EXECUTABLE_PREFIX = lib; GCC_PREFIX_HEADER = "$(OMIM_ROOT)/precompiled_headers.hpp"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", - "$(OMIM_ROOT)/3party/jansson/src", - ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -227,12 +221,6 @@ buildSettings = { EXECUTABLE_PREFIX = lib; GCC_PREFIX_HEADER = "$(OMIM_ROOT)/precompiled_headers.hpp"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", - "$(OMIM_ROOT)/3party/jansson/src", - ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/xcode/vulkan_wrapper/vulkan_wrapper.xcodeproj/project.pbxproj b/xcode/vulkan_wrapper/vulkan_wrapper.xcodeproj/project.pbxproj index 5aa28b7e9b..e94b1dfe0f 100644 --- a/xcode/vulkan_wrapper/vulkan_wrapper.xcodeproj/project.pbxproj +++ b/xcode/vulkan_wrapper/vulkan_wrapper.xcodeproj/project.pbxproj @@ -95,7 +95,7 @@ 4577B26521F2044300864FAC /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1410; TargetAttributes = { 4577B26C21F2044300864FAC = { CreatedOnToolsVersion = 10.1; @@ -151,8 +151,6 @@ buildSettings = { HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/Vulkan-Headers/include", ); }; @@ -163,8 +161,6 @@ buildSettings = { HEADER_SEARCH_PATHS = ( "$(inherited)", - "$(OMIM_ROOT)", - "$(BOOST_ROOT)", "$(OMIM_ROOT)/3party/Vulkan-Headers/include", ); }; -- 2.45.3 From e6d1076907a3090a6a524570f68651daf81f3293 Mon Sep 17 00:00:00 2001 From: Alexander Borsuk Date: Sun, 13 Nov 2022 17:35:59 +0100 Subject: [PATCH 4/5] KML to KMB Signed-off-by: Alexander Borsuk --- kml/CMakeLists.txt | 1 + kml/kmb_to_kml/kmb_to_kml.cpp | 20 +++++++++---- kml/kml_to_kmb/CMakeLists.txt | 8 +++++ kml/kml_to_kmb/kml_to_kmb.cpp | 55 +++++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 kml/kml_to_kmb/CMakeLists.txt create mode 100644 kml/kml_to_kmb/kml_to_kmb.cpp diff --git a/kml/CMakeLists.txt b/kml/CMakeLists.txt index d9cc83f723..27ffc8a4bf 100644 --- a/kml/CMakeLists.txt +++ b/kml/CMakeLists.txt @@ -27,4 +27,5 @@ omim_add_test_subdirectory(kml_tests) if(PLATFORM_DESKTOP) omim_add_tool_subdirectory(kmb_to_kml) + omim_add_tool_subdirectory(kml_to_kmb) endif() diff --git a/kml/kmb_to_kml/kmb_to_kml.cpp b/kml/kmb_to_kml/kmb_to_kml.cpp index 4da1050342..2c1412348a 100644 --- a/kml/kmb_to_kml/kmb_to_kml.cpp +++ b/kml/kmb_to_kml/kmb_to_kml.cpp @@ -9,7 +9,8 @@ #include -int main(int argc, char** argv) { +int main(int argc, char** argv) +{ if (argc < 2) { std::cout << "Converts kmb file to kml\n"; std::cout << "Usage: " << argv[0] << " path_to_kmb_file\n"; @@ -20,26 +21,33 @@ int main(int argc, char** argv) { std::string filePath = argv[1]; kml::FileData kmlData; - try { + try + { FileReader reader(filePath); kml::binary::DeserializerKml des(kmlData); des.Deserialize(reader); - } catch (kml::binary::DeserializerKml::DeserializeException const & ex) { + } + catch (kml::binary::DeserializerKml::DeserializeException const & ex) + { std::cerr << "Error reading kmb file " << filePath << ": " << ex.what() << std::endl; return 1; } - try { + try + { // Change extension to kml. filePath[filePath.size() - 1] = 'l'; kml::SerializerKml ser(kmlData); FileWriter kmlFile(filePath); ser.Serialize(kmlFile); - } catch (kml::SerializerKml::SerializeException const & ex) { + } + catch (kml::SerializerKml::SerializeException const & ex) + { std::cerr << "Error encoding to kml file " << filePath << ": " << ex.what() << std::endl; return 1; } - catch (FileWriter::Exception const & ex) { + catch (FileWriter::Exception const & ex) + { std::cerr << "Error writing to kml file " << filePath << ": " << ex.what() << std::endl; return 1; } diff --git a/kml/kml_to_kmb/CMakeLists.txt b/kml/kml_to_kmb/CMakeLists.txt new file mode 100644 index 0000000000..64cefa6359 --- /dev/null +++ b/kml/kml_to_kmb/CMakeLists.txt @@ -0,0 +1,8 @@ +# Console utility to convert KML file to KMB. +project(kml_to_kmb) + +set(SRC kml_to_kmb.cpp) + +omim_add_executable(${PROJECT_NAME} ${SRC}) + +target_link_libraries(${PROJECT_NAME} kml) diff --git a/kml/kml_to_kmb/kml_to_kmb.cpp b/kml/kml_to_kmb/kml_to_kmb.cpp new file mode 100644 index 0000000000..b4be9ac7e6 --- /dev/null +++ b/kml/kml_to_kmb/kml_to_kmb.cpp @@ -0,0 +1,55 @@ +#include "kml/serdes.hpp" +#include "kml/serdes_binary.hpp" + +#include "indexer/classificator_loader.hpp" + +#include "coding/file_reader.hpp" +#include "coding/file_writer.hpp" + +#include + + +int main(int argc, char** argv) +{ + if (argc < 2) { + std::cout << "Converts kml file to kmb\n"; + std::cout << "Usage: " << argv[0] << " path_to_kml_file\n"; + return 1; + } + // TODO: Why bookmarks serialization requires classifier? + classificator::Load(); + + std::string filePath = argv[1]; + kml::FileData kmlData; + try + { + FileReader reader(filePath); + kml::DeserializerKml des(kmlData); + des.Deserialize(reader); + } + catch (kml::DeserializerKml::DeserializeException const & ex) + { + std::cerr << "Error reading kml file " << filePath << ": " << ex.what() << std::endl; + return 1; + } + + try + { + // Change extension to kmb. + filePath[filePath.size() - 1] = 'b'; + kml::binary::SerializerKml ser(kmlData); + FileWriter kmlFile(filePath); + ser.Serialize(kmlFile); + } + catch (kml::SerializerKml::SerializeException const & ex) + { + std::cerr << "Error encoding to kmb file " << filePath << ": " << ex.what() << std::endl; + return 1; + } + catch (FileWriter::Exception const & ex) + { + std::cerr << "Error writing to kmb file " << filePath << ": " << ex.what() << std::endl; + return 1; + } + return 0; +} -- 2.45.3 From 2300912e6a4a4ede40d623ace8286772cbd506d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Metehan=20=C3=96zy=C3=BCrek?= <80093621+MetehanOzyurek@users.noreply.github.com> Date: Tue, 15 Nov 2022 21:12:11 +0300 Subject: [PATCH 5/5] [strings][categories] Updated Turkish translations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Metehan Özyürek --- data/categories.txt | 228 ++++++++++++++++++--------------- data/strings/types_strings.txt | 12 +- 2 files changed, 129 insertions(+), 111 deletions(-) diff --git a/data/categories.txt b/data/categories.txt index daaa9b97d8..9e1b44058a 100644 --- a/data/categories.txt +++ b/data/categories.txt @@ -810,7 +810,7 @@ et:3Kohvik|3restoran eu:3Kafetegia|3Jatetxea sv:3Café|3restaurang th:3 คาเฟ่|ร้านอาหาร่ -tr:4Kafeterya|restoran|2Cafe|Bistro +tr:4Kafeterya|kafe|restoran|2Cafe|Bistro uk:3Кафе|3ресторан|2їжа|2їсти vi:Cà phê|quán ăn zh-Hans:1咖啡馆่|餐厅|食物 @@ -847,7 +847,7 @@ et:4Kiirtoit|3restoran|3kohvik|kaasaost|rämpstoit eu:4Fast food|jatetxea|kafetegia sv:4Snabbmat|3restaurang|3café|takeaway th:1อาหารจานด่วน|ร้านอาหาร|คาเฟ่|นำกลับ -tr:4Fast food|3restoran|3kafeterya +tr:4Fast food|3restoran|3kafeterya|lokanta uk:3Фастфуд|3ресторан|3кафе|2їсти vi:Thức ăn nhanh|quán ăn zh-Hans:1快餐|餐厅|外卖|食物 @@ -883,7 +883,7 @@ et:3Restoran|3kohvik eu:3Jatetxea|3Kafetegia sv:3Restaurang|3café th:3ร้านอาหาร -tr:3Restoran|3kafeterya +tr:3Restoran|3kafeterya|3lokanta|3kafe uk:3Ресторан|3кафе vi:Quán ăn|cà phê zh-Hans:1餐厅|咖啡馆|食物 @@ -916,7 +916,7 @@ pt-BR:3Posto de combustível|3gasolina ro:3Benzinărie sv:3Bensinstation|3bränsle|2gas th:3ปั๊มน้ำมัน|เชื้อเพลิง -tr:3Yakıt|3Benzin istasyonu|2gaz +tr:3Yakıt|3Benzin istasyonu|2gaz|Benzinlik uk:азс|агзс|агнкс|бензоколонка|бензозаправка|4автозаправка|3заправка vi:Trạm xăng zh-Hans:1加油站|燃料 @@ -1028,7 +1028,7 @@ et:4Kosmeetika eu:4Produktu kosmetikoak sv:4Kosmetika th:เครื่องสำอาง -tr:Bakım ürünleri|güzellik merkezi +tr:4Bakım ürünleri|3güzellik merkezi|Kozmetik uk:4Косметика vi:Mỹ phẩm zh-Hans:化妝品|商店 @@ -1114,8 +1114,9 @@ zh-Hant:熟食店 shop-farm|@food en:Farm food -ru:Фермерская еда et:Talutoit +ru:Фермерская еда +tr:Çiftlik gıdaları shop-garden_centre en:4Garden Centre|U+1F3EC|U+1F3EA|U+1F3E1 @@ -1155,14 +1156,16 @@ fa:فروشگاه تجهیزات باغبانی shop-grocery|@food en:Grocery +et:Toidukaubad fr:Épicerie ru:Бакалея -et:Toidukaubad +tr:Market shop-health_food|@food en:Health food -ru:Здоровая еда et:Tervisetoit +ru:Здоровая еда +tr:Sağlıklı Gıda shop-mobile_phone en:4Cell Phones|4Mobile Phones|6smartphones|electronics store|U+1F3EC|U+1F3EA|U+1F4F1|U+1F4F2 @@ -1191,7 +1194,7 @@ et:4Mobiiltelefonid|Elektroonikapood eu:Sakelako telefonoak|Sakelako telefono denda|elektronika denda sv:4Mobilbutik|elektronikaffär th:ร้านขายโทรศัพท์มือถือ|ร้านขายอุปกรณ์อิเล็กโทรนิก -tr:3Cep telefonu mağazası|3elektronik mağazası|telefon|cep telefonu +tr:3Cep telefonu mağazası|3elektronik mağazası|telefon|cep telefonu|akıllı telefon uk:4Мобільні телефони|салон мобільного зв'язку|салон мобільних телефонів vi:Cửa hàng điện thoại di động|cửa hàng ĐTDĐ zh-Hans:手机商店|商店 @@ -1300,7 +1303,7 @@ et:Mööblipood eu:Altzari denda sv:4Möbelaffär th:ร้านเฟอร์นิเจอร์ -tr:4Mobilya mağazası +tr:4Mobilya mağazası|eşya mağazası uk:Магазин меблів|4меблі vi:Cửa hàng nội thất zh-Hans:家具店|商店 @@ -1376,7 +1379,7 @@ et:Alkoholipood|4alkohol eu:4Likore-denda|likore sv:Spritaffär|4alkohol th:ร้านขายเหล้า -tr:İçki dükkanı +tr:İçki dükkanı|alkol uk:Винний магазин|крамниця спиртних напоїв|4алкоголь vi:Cửa hàng rượu|rượu zh-Hans:烈酒|商店 @@ -1412,7 +1415,7 @@ et:Raamatupood eu:4Liburudenda sv:Bokaffär th:ร้านหนังสือ -tr:Kitapçı +tr:3Kitapçı|3kitap mağazası|3kitaplar uk:3Книгарня vi:Hiệu sách zh-Hans:书店|商店 @@ -1448,7 +1451,7 @@ et:Kingapood eu:4Oinetako denda sv:Skobutik th:ร้านขายรองเท้า -tr:Ayakkabı mağazası +tr:Ayakkabı mağazası|Ayakkabıcı uk:Магазин взуття|3взуття vi:Cửa hàng giày zh-Hans:鞋店|商店 @@ -1485,7 +1488,7 @@ et:4Elektroonika eu:4Elektronika sv:4Elektronik|elektronikaffär th:ร้านขายอุปกรณ์อิเล็กทรอนิกส์ -tr:4Elektronik mağazası +tr:4Elektronik mağazası|Teknoloji uk:Електротехніка|4Електроніка vi:Cửa hàng điện zh-Hans:电子产品|商店 @@ -1777,7 +1780,7 @@ et:3Supermarket eu:3Supermerkatua sv:3Stormarknad|dagligvaruhandel th:3ซูเปอร์มาร์เก็ต -tr:3Süpermarket +tr:3Süpermarket|3market uk:3Супермаркет|3універсам vi:Siêu thị zh-Hans:超市|商店 @@ -1853,7 +1856,7 @@ et:Kaubamaja eu:Denda handiak sv:Varuhus th:ห้างสรรพสินค้า -tr:Alışveriş merkezi +tr:Alışveriş merkezi|büyük mağaza|market|büyük market uk:4Універмаг vi:Cửa hàng bách hóa zh-Hans:百货商店|商店 @@ -2155,7 +2158,7 @@ et:Autopood eu:Autoen salmenta sv:Bilåterförsäljare th:ร้านค้ารถยนต์ -tr:Otomobil mağazası|Araba mağazası|Araba showroomu|Otomobil showroomu|Araba galerisi|Otomobil galerisi +tr:Otomobil mağazası|Araba mağazası|Araba showroomu|Otomobil showroomu|Araba galerisi|Otomobil galerisi|Oto showroom|Otoshowroom uk:4Автосалон vi:Cửa hàng xe zh-Hans:车店|商店 @@ -2263,7 +2266,7 @@ et:Bussipeatus eu:Autobus geltokia sv:Busshållplats|3buss|hållplats th:ป้ายรถเมล์|รถเมล์|ขนส่ง -tr:Otobüs durağı|3otobüs|3dolmuş +tr:Otobüs durağı|3otobüs|3dolmuş|durak|dolmuş durağı uk:4Зупинка|5автобус|4тролейбус vi:3Bến xe buýt zh-Hans:1公交车站|公交车|运输|交通 @@ -2299,7 +2302,7 @@ et:Trammipeatus eu:Tranbiaren geltokia sv:Spårvagnshållplats|3spårvagn|hållplats th:ป้ายรถราง|ขนส่ง -tr:3Tramvay durağı|Tramvay +tr:3Tramvay durağı|Tramvay|durak uk:4Зупинка|4трамвай vi:Bến tàu điện zh-Hans:1电车站|运输|交通 @@ -2372,7 +2375,7 @@ et:Rongijaam eu:3Tren geltokia|3tren sv:3Tågstation|4järnväg|järnväg|3tåg|4station th:3สถานีรถไฟ|รถไฟ|สถานี|ขนส่ง -tr:2Gar|3demiryolları|İstasyon|Tren +tr:2Gar|3demiryolları|İstasyon|Tren|tren istasyonu uk:4Залізничний вокзал|3поїзд|залізниця|3станція vi:Đường tàu hỏa zh-Hans:1火车站ี|铁路ี|站ี|运输|交通 @@ -2669,7 +2672,7 @@ et:3Turisti-info eu:4Informazioa sv:4Turistinformation|4information th:4ข้อมูลการท่องเที่ยว|ข้อมูล -tr:4Turist bilgileri|4Bilgi +tr:4Turist bilgilendirme|4Bilgi uk:4Турінформація|3інформація vi:Thông tin du lịch zh-Hans:1旅游信息|信息|景点 @@ -3226,7 +3229,7 @@ sk:3Zámok|atrakcia|Hrad|Kastrum|Opevnený kostol|Pevnosť|Hradisko|Kremeľ|Kaš sv:Slott|Borg|Castrum|Försvarskyrka|Fästning|Fornborg|Kreml|Herrgård|Palats sw:Ngome|kivutio|utalii|Kanisa lililoimarishwa|Kremlin|Nyumba ya manor|Ikulu th:ปราสาท|การท่องเที่ยว|ป้อมโรมัน|โบสถ์เสริมความแข็งแกร่ง|ป้อม|ป้อมเนิน|เครมลิน|คฤหาสน์|วัง|ปราสาท -tr:Kale|Saray|Müstahkem şato|Castra|Müstahkem şato|Müstahkem kilise|Tepe Kalesi|Kremlin|Malikane|Şato +tr:Kale|Saray|şato|kule|Tepe Kalesi uk:3Замок|4фортеця|мури|Каструм|Фортеця|Городище|Кремль|Садиба|Палац|Шато vi:Pháo đài|Lâu đài|Pháo đài La mã|Nhà thờ kiên cố|Trang viên|Cung điện| zh-Hans:城堡|古罗马兵营|坚固的教堂|要塞|丘堡|克里姆林|庄园大屋|宮殿|法式城堡 @@ -3492,7 +3495,7 @@ sk:Pomník sv:Minnesmärke sw:Plaque th:ที่ระลึก -tr:Hatıra Plaketi +tr:Hatıra Plaketi|Anı plaketi uk:Дошка пам'яті vi:Đài tưởng niệm zh-Hans:纪念牌匾 @@ -3606,7 +3609,7 @@ sk:Kameň úrazu sv:Snubbelsten sw:Kikwazo th:อุปสรรค์ -tr:Tökezleyen Taşlar +tr:Tökezleyen Taşlar|Stolperstein uk:Камені спотикання vi:Vấp ngã zh-Hans:绊脚石 @@ -3682,7 +3685,7 @@ sk:Zaujímavosť|pomník|pamiatka sv:4Monument sw:Makumbusho|kivutio|utalii th:3อนุสาวรีย์|การท่องเที่ยว -tr:Abide +tr:Abide|anıt uk:Пам'ятник|4монумент vi:Tượng đài zh-Hans:纪念碑|景点 @@ -3872,7 +3875,7 @@ sk:Prícestný kríž sv:Korset vid vägkanten sw:Msalaba wa njiani th:ทางข้าม -tr:Hıristiyan Haçı +tr:Yol kenarı haçı|Yol kenarında haç|yol üstü haç|yol üstünde haç uk:Християнський хрест vi:Đường chéo zh-Hans:路旁十字架 @@ -3910,7 +3913,7 @@ sk:Svätyňa pri ceste sv:Helgedom vid vägkanten sw:Kaburi la njia th:ศาลเจ้าข้างทาง -tr:Tapınak +tr:Yol üstünde türbe|yol üstü türbe|yol kenarı türbe|yol kenarında türbe uk:Святиня vi:Đền thờ zh-Hans:路旁神龛 @@ -4064,7 +4067,7 @@ nl:4Fiets reparatie pt:Conserto de bicicleta|4bicicleta pt-BR:Oficina de bicicletas|4bicicleta ru:4Велоремонт|велосипед|ремонт|ремонт велосипедов -tr:4Bisiklet tamiri|4Bisiklet +tr:4Bisiklet tamiri|4Bisiklet|Bisiklet tamircisi uk:4Велоремонт|велосипед|ремонт|ремонт велосипедів zh-Hans:1自行车修理 zh-Hant:1自行車修理 @@ -4099,7 +4102,7 @@ sk:Zdieľanie automobilov sv:Samåkning sw:Kushiriki Gari th:การใช้รถร่วมกัน -tr:Araç Paylaşımı|Araç kiralama +tr:Araç Paylaşımı|ortak araç uk:3Каршерінг vi:Chia sẻ Xe zh-Hans:拼车点 @@ -4314,7 +4317,7 @@ et:Kasiino eu:Kasinoa sv:Kasino th:คาสิโน -tr:Casino +tr:Casino|Gazino|Kumarhane uk:Казино zh-Hans:赌场 zh-Hant:賭場 @@ -4568,7 +4571,7 @@ pt-BR:3Hospital|3clínica|3médico|saúde|serviços de saúde|primeiros socorros ro:5ambulanță|medic|4doctor|diagnostică sv:klinik|3läkare th:3โรงพยาบาล|แพทย์ -tr:hastane|3klinik|doktor|sağlık merkezi|sağlık hizmetleri|ilk yardım +tr:hastane|3klinik|doktor|sağlık merkezi|sağlık hizmetleri|ilk yardım|sağlık ocağı uk:клініка|3лікар|травмпункт zh-Hans:诊所|医生 zh-Hant:醫生|診所|醫療|診療 @@ -5097,7 +5100,7 @@ et:Prügikast eu:Zaborrontzia sv:4Avfallscontainer|Soptunna|skräp|avfall th:ขยะ|ถังขยะ -tr:Çöplük|Çöp +tr:Çöplük|Çöp kutusu|çöp uk:4Сміттєвий контейнер|сміття|смітник vi:Xử lý chất thải|Rác zh-Hans:垃圾 @@ -5217,7 +5220,7 @@ sk:Batérie sv:Batterier sw:Betri th:แบตเตอรี่ -tr:3Piller|Atık Pil Toplama +tr:3Piller|Atık Pil Toplama|Atık pil kutusu uk:5Прийом батарейок|Утилізація батарей|5Переробка батарей|5Здати батареї|4Збір батарейок|5Батарейки vi:Ắc quy zh-Hans:电池 @@ -5252,7 +5255,7 @@ es-MX:Ropa vieja|Reciclaje de cosas innecesarias et:Rõivaste taaskasutus sv:Gamla kläder|Överlämna onödiga saker th:เสื้อผ้าเก่า|รีไซเคิลเสื้อผ้าเก่า -tr:4Eski kıyafetler|Eski kıyafetler geri dönüşümü|Kıyafet toplama kutusu +tr:4Eski kıyafetler|Eski kıyafetler geri dönüşümü|Kıyafet toplama kutusu|giysi toplama kutusu uk:5Прийом одягу|Старий одяг|Здати непотрібні речі|Здати речі|5Здати одяг vi:Quần áo cũ|Chuyển giao những thứ không cần thiết el:Παλιά ρούχα|Ανακύκλωση παλαιών ρούχων @@ -5529,7 +5532,7 @@ recycling-cartons|@recycling en:4Recycling of Bewerage Cartons|5Cartons Recycling|5Bewerage Cartons Recycling be:5Прыём тетрапака|5Здаць тетрапак|4Збор тетрапака|5Тетрапак ru:5Приём тетрапака|5Сдать тетрапак|4Сбор тетрапака|5Тетрапак -tr:5Karton Kutu Geri Dönüşümü|4Tetrapak +tr:5Karton Kutu Geri Dönüşümü|4Tetrapak|içecek kutusu geri dönüşümü uk:5Прийом тетрапака|5Здати тетрапак|4Збір тетрапака|5Тетрапак et:Tetrapakkide taaskasutus @@ -5541,7 +5544,7 @@ fr:Station de vidange|4Vidange es:Estación de vaciado para caravanas it:4Camper service ru:4Слив нечистот|слив туалета|слив для туалета|нечистоты|канализация -tr:6Karavan Çöplüğü +tr:6Karavan Çöplüğü|Karavanlar için çöplük uk:4Злив нечистот|слив туалету|слив для туалету|нечистоти|каналізація et:Haagiselamute jäätmepunkt @@ -5684,7 +5687,7 @@ et:WC eu:Komuna sv:3Toalett th:3ห้องน้ำ -tr:3Tuvalet|WC +tr:3Tuvalet|WC|Umumi tuvalet uk:3Туалет vi:Nhà vệ sinh zh-Hans:1厕所 @@ -5714,7 +5717,7 @@ es:3Baños|aseos|3lavabo|inodoro|baño|wc et:WC|tualett eu:3Komunak|3konketa sv:WC|toalett -tr:WC|tuvalet +tr:WC|tuvalet|umumi tuvalet zh-Hant:2洗手間|wc el:μπάνιο|χώρος ανάγκης|αποχωρητήριο|wc sk:3Toalety|wc @@ -5857,7 +5860,7 @@ et:Linn eu:Herria sv:Stad|stad th:เมือง -tr:Şehir|kasaba +tr:Şehir|il|ilçe uk:Місто vi:Đất nước zh-Hans:城市 @@ -5894,7 +5897,7 @@ et:Linn eu:Herria sv:Stad|stad th:เมือง -tr:Kasaba +tr:Şehir|il|ilçe uk:Місто vi:Thành phố zh-Hans:镇 @@ -6152,7 +6155,7 @@ es:Aldea eu:Herria sv:By|by th:หมู่บ้านเล็ก ๆ|หมู่บ้าน -tr:Mezra|köy +tr:Mezra|köy|muhit uk:Поселення|селище|село vi:Quận zh-Hans:村庄 @@ -6373,7 +6376,7 @@ et:Tänav eu:Kalea sv:Gata|väg th:ถนน -tr:Sokak|sk|sok +tr:Sokak|sk|sok|cadde|cad|cd uk:Вулиця|провулок|проїзд|проспект|бульвар|вул vi:Phố zh-Hans:街头 @@ -6470,7 +6473,7 @@ et:Sadul fr:Col it:4Sella ru:4Седловина|5Перевал -tr:Sele|eyer +tr:Sırt|geçit uk:4Сідловина|5Перевал mr:खोगीर @@ -6679,7 +6682,7 @@ et:Külalistemaja eu:Ostatua|gaztetxea|aterpea sv:Gästhus|vandrarhem th:3เกสท์เฮ้าส์|โรงแรม์|์โรงแรม -tr:Misafir evi|pansiyon +tr:Misafir evi|pansiyon|misafirhane uk:5Гостинний дім|хостел|постояльний двір vi:Nhà khách zh-Hans:1招待所์|์旅馆์|์旅社|旅店 @@ -6859,7 +6862,7 @@ et:4Staadion eu:5Estadioa|4kirola sv:4Stadion|4sport th:สนามกีฬา -tr:4Stadyum +tr:4Stadyum|arena uk:4Стадіон|4спорт vi:Sân vận động zh-Hans:体育场 @@ -7045,7 +7048,7 @@ et:4Ujumisbassein|sport eu:4Igerilekua|kirola sv:4Simbassäng|sport th:4สระว่ายน้ำ -tr:2Yüzme havuzu|spor +tr:2Yüzme havuzu|havuz|spor uk:4Басейн|спорт vi:Bể bơi zh-Hans:2游泳池|运动 @@ -7163,7 +7166,7 @@ pt:Atletismo pt-BR:Atletismo ro:Atletism ru:Лёгкая атлетика -tr:Atletik +tr:Atletik|Atletizm uk:Легка атлетика vi:Thế vận hội zh-Hans:竞技 @@ -7309,7 +7312,7 @@ sk:Plážový volejbal sv:Beachvolleyboll sw:Mpira wa wavu wa pwani th:วอลเลย์บอลชายหาด -tr:Plaj voleybolu +tr:Plaj voleybolu|sahil voleybolu uk:Пляжний волейбол vi:Bóng chuyền bãi biển zh-Hans:沙滩排球 @@ -7338,7 +7341,7 @@ pt:Lawn bowls pt-BR:Lawn bowls ru:Боулз sv:Bowls -tr:Kuka Oynu +tr:Kuka Oynu|Kuka oyunu uk:Боулз zh-Hans:草地滾球 zh-Hant:草地滾球 @@ -7635,7 +7638,7 @@ sk:Potápanie sv:Dykning sw:Upigaji mbizi wa Scuba th:ดำน้ำลึก -tr:Dalma +tr:Dalış alanı|tüplü dalış alanı|dalış sahası|tüplü dalış sahası uk:Місце для дайвінгу vi:Môn lặn zh-Hans:水肺潜水 @@ -7674,7 +7677,7 @@ sk:Streľba sv:Skytte sw:Kupiga risasi th:ยิงปืน -tr:Çekim +tr:Atış sahası|atış alanı uk:Стрільба vi:Chụp zh-Hans:射击 @@ -7751,7 +7754,7 @@ sk:Lyžovanie sv:Skidåkning sw:Skii th:เล่นสกี -tr:Kayak yapmak +tr:Kayak|kayakçılık uk:Катання на лижах vi:Trượt tuyết zh-Hans:滑雪 @@ -7983,7 +7986,7 @@ sk:Kuželky|Bowling sv:Kägel|Bowling sw:Wkittles|Bowling th:Skittles|โบว์ลิ่ง -tr:Skittles|Bowling +tr:Bowling|Bovling uk:Кеглі|Боулінг vi:Nhảy nhót|Bowling zh-Hans:九柱戏|保龄球 @@ -8113,7 +8116,7 @@ et:4Saatkond eu:4Enbaxada sv:4Ambassad th:4สถานทูต -tr:4Büyükelçilik +tr:4Elçilik uk:4Посольство vi:Đại sứ quán zh-Hans:使馆 @@ -8277,7 +8280,7 @@ et:Allikas eu:Udaberria sv:Vattenkälla th:ฤดูใบไม้ผลิ -tr:Pınar +tr:Pınar|Kaynak uk:4Джерело vi:Suối zh-Hans:海湾 @@ -8356,7 +8359,7 @@ sk:Voda pre karavan sv:Vattenpost sw:Kituo cha Maji th:จุดเติมน้ำ -tr:Su Noktası +tr:Su Noktası|Karavanlar için su noktası uk:Заправка водою|вода для каравану|вода для автобудинку vi:Điểm cấp nước zh-Hans:取水点 @@ -8393,7 +8396,7 @@ sk:Vodovodný kohútik sv:Vattenkran sw:Bomba la Maji th:ก๊อกน้ำ -tr:Çeşme Suyu|su musluğu +tr:Çeşme Suyu|su musluğu|musluk|çeşme uk:5Водопровідний кран vi:Vòi nước zh-Hans:水龙头 @@ -8777,7 +8780,7 @@ et:Haagiselamute ala|matkamine eu:Karabana gunea|kanpalekua sv:4Husvagnsplats th:4ขบวนนักเดินทาง -tr:4Karavan alanı +tr:4Karavan alanı|3karavan parkı uk:4Автокемпінг|4кемпінг для автобудинків|4стоянка для автобудинків vi:Khu lễ hội hóa trang zh-Hans:房车宿营地 @@ -8811,7 +8814,7 @@ et:Kontor eu:Bulegoa sv:Kontor|företag th:สำนักงาน|บริษัท -tr:Ofis|şirket +tr:Ofis|şirket|iş yeri uk:Офіс vi:Văn phòng zh-Hans:办公室|公司 @@ -8922,7 +8925,7 @@ et:Advokaadibüroo eu:Abokatu bulego|abokatu bulego sv:4Advokatkontor th:สำนักงานทนายความ -tr:4Avukatlık bürosu +tr:4Avukatlık bürosu|avukat uk:3Адвокат|4нотаріус vi:Văn phòng luật sư zh-Hans:律师事务所 @@ -8958,7 +8961,7 @@ et:Mobiilside operaator eu:Telefono mugikorren operadorea sv:Mobiloperatör th:ผู้ให้บริการโทรศัพท์มือถือ -tr:Cep telefonu operatörü +tr:Cep telefonu operatörü|telekom uk:Телекомунікаційна компанія vi:Điều hành di động zh-Hans:移动运营商 @@ -9268,7 +9271,7 @@ sk:Záhradníctvo sv:Trädgårdsmästare sw:Mtunza bustani th:คนจัดสวน -tr:Bahçe Düzenleyici +tr:Bahçe Düzenleyici|Bahçeci|bahçıvan uk:Садівник vi:Người thiết kế và xây dựng cảnh quan zh-Hans:园艺工 @@ -9575,7 +9578,7 @@ sk:Oprava obuvy sv:Skomakare sw:Mtengeneza viatu th:ช่างซ่อมรองเท้า -tr:Ayakkabı tamircisi +tr:Ayakkabı tamircisi|kunduracı uk:4Ремонт взуття|взуття vi:Sửa giày zh-Hans:修鞋匠 @@ -9871,7 +9874,7 @@ et:Rand eu:Hondartza sv:Strand th:ชายหาด -tr:Plaj +tr:Plaj|sahil uk:Пляж vi:Bãi biển zh-Hans:海滩 @@ -9927,6 +9930,7 @@ fr:4Borne géodésique ja:測量標 pl:4Znak geodezyjny ru:4Геодезический пункт|Геодезический знак|4тригонометрический пункт|пункт триангуляции|тригопункт|4триангулятор +tr:4veri toplama istasyonu|4nirengi istasyonu|4jeodezik ölçüm noktası|4ölçüm istasyonu uk:4Геодезичний пункт mr:सर्वेक्षण बिंदू|सर्व्हे पॉइंट @@ -9995,7 +9999,7 @@ et:4Koopiakeskus|trükikoda eu:4Kopiagailu denda|4inprimaketa|Kopia zentroa|Fotokopia zentroa sv:4Kopieringsbutik|4Tryckare th:ร้านถ่ายเอกสาร|เครื่องพิมพ์ -tr:4Kopyalama Merkezi|Yazıcı +tr:4Kopyalama Merkezi|Yazıcı|copy center|copycenter uk:4Копіювальний центр|друк|поліграфія vi:Cửa hàng Copy|Máy in zh-Hans:复印店|打印机 @@ -10174,7 +10178,7 @@ et:Rehvipood|rehvid eu:Pneumatikoen denda sv:Däckaffär th:ร้านยาง -tr:Tekerlekçi +tr:Tekerlekçi|lastikçi uk:Магазин шин|3шини vi:Cửa hàng Lốp zh-Hans:轮胎店|商店 @@ -10210,7 +10214,7 @@ et:Autopesu eu:5Auto-garbiketa sv:Biltvätt th:ล้างรถ -tr:Araba Yıkama +tr:Araba Yıkama|oto yıkama uk:4Автомийна vi:Rửa Xe zh-Hans:洗车 @@ -10355,7 +10359,7 @@ et:4Jalgrattaparkla eu:Bizikleta aparkalekua sv:4Cykelparkering th:ที่จอดจักรยาน -tr:4Bisiklet park etme +tr:4Bisiklet park etme|bisiklet park uk:4Велопарковка|велостоянка vi:Chỗ Đậu Xe Đạp zh-Hans:自行车存放处 @@ -10726,7 +10730,7 @@ et:Kogukonna keskus eu:Komunitate Zentroa sv:Stadshus th:ศูนย์ชุมชน -tr:İletişim Merkezi +tr:Toplum Merkezi|Halkevi uk:Центр культури та дозвілля|3Дім культури vi:Trung Tâm Cộng Đồng zh-Hans:社区中心 @@ -10762,7 +10766,7 @@ et:Kohtumaja eu:Auzitegia sv:Domstol th:ศาล -tr:Adliye|Mahkeme +tr:Adliye|Mahkeme|adalet sarayı uk:Суд vi:Tòa án zh-Hans:法院 @@ -10819,6 +10823,7 @@ eu:3Kafea saltzeko makina|Kafea fr:Distributeur de café|Café it:Distributore automatico di caffè|Caffè ru:3Кофейный автомат|кофе|кофемат +tr:4Kahve Dispenseri|Kahve Makinesi uk:3Кавовий автомат|кава mr:कॉफी विक्रीयंत्र @@ -10832,6 +10837,7 @@ eu:4Kondoiak saltzeko makina|Preserbatiboak fr:Distributeur de préservatifs|Préservatifs it:Distributore di profilattici|Preservativi ru:Автомат с презервативами|5презервативы|5кондомат +tr:5Prezervatif Dispenseri|Kondom dispenseri uk:Автомат з презервативами|5презервативи|5кондомат mr:कंडोम विक्रीयंत्र @@ -10882,6 +10888,7 @@ eu:4Janaria saltzeko makina|Elikagaia|Askariak fr:Distributeur d'aliments|Aliments it:Distributore automatico di alimenti|Macchinetta automatica|Snack ru:Автомат с едой|5перекус|4снэки +tr:Otomat|Yiyecek dispenseri|atıştırmalık uk:Автомат з їжею|5перекус|4снекі mr:अन्न विक्रीयंत्र @@ -10915,7 +10922,7 @@ ro:4Parcomat sk:Automat na výdaj parkovacích lístkov sv:4Parkeringsautomat th:เครื่องชำระค่าที่จอดรถอัตโนมัติ -tr:4Park Etme Biletleri|Park sayacı +tr:4Park Etme Biletleri|Park sayacı|park bileti uk:4Паркомат|Оплата паркування vi:Máy trả tiền vé đậu xe zh-Hans:停车场付费机 @@ -10953,7 +10960,7 @@ sk:Predajný automat na lístky verejnej dopravy sv:Biljettautomat sw:Mashine ya kuuzia tiketi za usafiri wa umma th:เครื่องขายของหรือตั๋วขนส่งมวลชนอัตโนมัติ -tr:Toplu taşıma biletleri için otomatlar +tr:Toplu taşıma biletleri için otomatlar|toplu taşıma bileti|bilet uk:Автомат з продажу квитків vi:Máy bán vé phương tiện công cộng tự động zh-Hans:公共交通售票机 @@ -10970,6 +10977,7 @@ eu:4Egunkariak saltzeko makina|Egunkariak fr:Distributeur de journaux|Journaux it:Distributore automatico di giornali|Riviste ru:Газетный автомат|газетомат|3газеты|4пресса +tr:4Gazete dispenseri|Gazetelik uk:Газетний автомат|газетомат|3газети|4преса mr:वर्तमानपत्र विक्रीयंत्र @@ -10983,6 +10991,7 @@ eu:4Gozokiak saltzeko makina|Gozokiak fr:Distributeur de bonbons|Bonbons it:Distributore di dolci|Caramelle ru:Автомат со сладостями|4сладости|4конфеты +tr:Tatlı dispenseri|şekerler uk:Автомат із солодощами|4солодощі|4цукерки mr:मिठाई विक्रीयंत्र @@ -11004,7 +11013,7 @@ de:5Paketstation|Paket Abholstation|Paket SB|Paket Versandstation et:4Pakiautomaat fr:Consigne automatique pour colis|3locker ru:3Почтомат|Постамат|5Получение посылок -tr:4koli dolabı +tr:4kilitli dolap|4kitli dolap|kasa uk:3Поштомат|5Отримання посилок mr:पार्सल लॉकर @@ -11224,7 +11233,7 @@ et:Mereandide pood|4kalaturg|4mereannid|kala eu:Arrain-denda sv:Fiskhandlare th:ร้านขายปลา -tr:Deniz ürünleri mağazası +tr:4Deniz ürünleri mağazası|3balıkçı uk:4Рибна крамниця vi:Người bán cá zh-Hans:鱼商 @@ -11337,7 +11346,7 @@ et:Piletimüük eu:Sarreren salmenta sv:Biljettkontor th:จุดจำหน่ายตั๋ว -tr:Bilet +tr:Biletçi|gişe uk:4Квиткова каса|квиток|театральна каса|квитковий центр|продаж квитків|бронювання квитків vi:Phòng vé zh-Hans:售票处 @@ -11373,7 +11382,7 @@ et:Alkoholipood eu:Ardo-denda|Ardoa sv:Vinhandel th:ร้านขายไวน์ -tr:Şarap mağazası +tr:Şarap mağazası|şarapçı uk:4Винна крамниця vi:Rượu|Cửa hàng rượu zh-Hans:贩酒处 @@ -11553,7 +11562,7 @@ et:Köisraja jaam eu:Teleferiko geltokia sv:Linbanestation th:สถานีกระเช้าลอยฟ้า -tr:Havayolu İstasyonu +tr:Teleferik İstasyonu uk:Канатна дорога vi:Trạm Cáp Treo zh-Hans:缆车车站 @@ -11878,7 +11887,7 @@ et:4Vulkaan eu:4Sumendia sv:4Vulkan th:ภูเขาไฟ -tr:4Volkan +tr:4Volkan|Yanardağ uk:4Вулкан vi:Núi lửa zh-Hans:火山 @@ -11985,7 +11994,7 @@ et:Raamatuvahetus|raamaturiiul eu:Liburu-trukea|liburudenda sv:Bokskåp|bokutbyte th:ตู้หนังสือ สถานที่แลกเปลี่ยนหนังสือ -tr:Kütüphane|Kitap Değişimi +tr:Kitap Değişimi|Kitap paylaşma uk:4Книгообмін|обмін книгами vi:Kệ sách|Trao đổi sách zh-Hans:书架|书本交换 @@ -12057,7 +12066,7 @@ et:Lasketiir eu:Tiro eremua sv:Skjutbana th:สนามยิงปืน -tr:Atış Poligonu +tr:Poligon|Atış Poligonu|Atış menzili uk:Тир vi:Nơi bắn súng zh-Hans:射击域 @@ -12094,7 +12103,7 @@ et:Ujumine eu:Igeriketa zentroa sv:Simhall th:ศูนย์ว่ายน้ำ -tr:Yüzme Merkezi +tr:Yüzme uk:Плавання|басейн vi:Trung tâm Bơi lội zh-Hans:游泳中心 @@ -12318,7 +12327,7 @@ sk:Hudobná škola sv:Musikskola sw:Shule ya Muziki th:โรงเรียนดนตรี -tr:Müzik Okulu +tr:Müzik Okulu|Müzik kursu uk:Музична школа ім vi:Trường âm nhạc zh-Hans:音乐学校 @@ -12355,7 +12364,7 @@ sk:Jazyková škola sv:Språkskola sw:Shule ya Lugha th:โรงเรียนภาษา -tr:Dil Okulu +tr:Dil Okulu|Dil kursu uk:Мовна школа vi:Ngôn ngữ Trường học zh-Hans:语言学校 @@ -12428,7 +12437,7 @@ sk:3Internetová kaviareň sv:3Internetkafé sw:Mkahawa wa Intaneti th:อินเทอร์เน็ตคาเฟ่ -tr:3İnternet Cafe +tr:3İnternet Cafe|3İnternet Kafe uk:3Інтернет-кафе vi:Quán Internet zh-Hans:网吧 @@ -12465,7 +12474,7 @@ sk:Parkovisko pre motocykle sv:4Motorcykelparkering sw:Uegeshaji Pikipiki th:ที่จอดรถมอเตอร์ไซค์ -tr:4Motosiklet Parkı +tr:4Motosiklet Parkı|4Motorsiklet Parkı uk:Парковка для мотоциклів|4мотопарковка vi:Bãi đỗ xe máy zh-Hans:摩托车停车场 @@ -12689,7 +12698,7 @@ sk:4Požiarny hydrant sv:4Brandpost sw:Bomba la Kuzima Moto th:หัวจ่ายน้ำดับเพลิง -tr:Yangın Söndürme Musluğu +tr:Yangın Söndürme Musluğu|yangın musluğu uk:4Пожежний гідрант|гідрант vi:Vòi chữa cháy zh-Hans:消防栓 @@ -12764,7 +12773,7 @@ sk:Poisťovňa sv:Försäkringskontor sw:Ofisi ya Bima th:สำนักงานประกันภัย -tr:Sigorta Acentası +tr:Sigorta Acentesi uk:5Страхова компанія|Страховий агент vi:Văn phòng bảo hiểm zh-Hans:保险机构 @@ -12911,7 +12920,7 @@ sk:Obchod s motocyklami sv:4Motorcykelaffär sw:Duka la Pikipiki th:ร้านรถมอเตอร์ไซค์ -tr:4Motosiklet Dükkanı +tr:4Motosiklet Dükkanı|4Motorsiklet dükkanı uk:Магазин мотоциклів|4мотоцикли vi:Cửa hàng xe máy zh-Hans:摩托车商店 @@ -13021,7 +13030,7 @@ sk:Papiernictvo sv:Pappershandel sw:Duka la Vitabu th:ร้านขายเครื่องเขียน -tr:Kırtasiye Dükkanı +tr:Kırtasiye Mağazası uk:Магазин канцелярських товарів|4Канцелярські товари vi:Cửa hàng văn phòng phẩm zh-Hans:文具店 @@ -13284,7 +13293,7 @@ sk:Národný park sv:Nationalpark sw:Hifadhi ya taifa th:อุทยานแห่งชาติ -tr:Ulusal park +tr:Ulusal park|Milli park|Millipark uk:Національний парк vi:Công viên quốc gia zh-Hans:国家公园 @@ -13321,7 +13330,7 @@ sk:Rezervácia sv:Naturreservat sw:Hifadhi th:เขตอนุรักษ์ธรรมชาติ -tr:Doğal koruma alanı +tr:Doğa koruma alanı uk:Заповідник vi:Giữ chỗ zh-Hans:野生动物园 @@ -13482,7 +13491,7 @@ ja:マリーナ pt:3Marina pt-BR:3Marina ru:4Причал|5пристань|3Марина -tr:Yat Limanı +tr:İskele|Marina|Rıhtım uk:5Пристань|3Марина zh-Hans:游艇码头 @@ -13519,7 +13528,7 @@ sk:Miesto konania podujatí sv:Evenemangslokal sw:Ukumbi wa Matukio th:สถานที่จัดงาน -tr:Etkinlik mekanı +tr:Etkinlik mekanı|etkinlik alanı uk:Місце проведення подій vi:Địa điểm tổ chức sự kiện zh-Hans:活动场所 @@ -13539,6 +13548,7 @@ pl:Sklep z czekoladą pt:Loja de chocolates pt-BR:Loja de chocolates ru:Шоколад +tr:Çikolata mağazası shop-coffee|@food en:Cofee store @@ -13553,6 +13563,7 @@ pl:Sklep z kawą pt:Loja de café pt-BR:Loja de café ru:Кофе +tr:Kahve mağazası shop-fabric en:Fabric shop @@ -13563,6 +13574,7 @@ it:Merceria nl:Stoffenwinkel pt:Loja de tecidos pt-BR:Loja de aviamentos +tr:Kumaş mağazası|Tekstil mağazası shop-money_lender en:Money lender @@ -13573,6 +13585,7 @@ pl:ożyczkodawca pt:Prestamista pt-BR:Prestamista ru:Ростовщик +tr:Tefeci shop-music en:Record store|vinyl @@ -13589,6 +13602,7 @@ pl:Sklep muzyczny pt:Loja de música pt-BR:Loja de música ru:Музыка +tr:Plak mağazası shop-musical_instrument en:Musical instruments @@ -13604,6 +13618,7 @@ pl:Sklep z instrumentami muzycznymi pt:Loja de instrumentos musicais pt-BR:Loja de instrumentos musicais ru:Музыкальные инструменты +tr:Enstrüman Mağazası shop-tea en:Tea store @@ -13620,6 +13635,7 @@ pl:Sklep z herbatą pt:Loja de chás pt-BR:Loja de chás ru:Чай +tr:Çay mağazası zh-Hans:茶叶商店 shop-antiques @@ -13654,7 +13670,7 @@ sk:Starožitnosti sv:Antikviteter sw:Mambo ya kale th:ของเก่า -tr:Antikalar +tr:Antika uk:Антикваріат vi:Đồ cổ zh-Hans:古董 @@ -13768,7 +13784,7 @@ sk:Obchod s taškami sv:Väskor butik sw:Hifadhi ya Mifuko th:ร้านกระเป๋า -tr:Çanta Mağazası +tr:Çanta Mağazası|Çantacı uk:Магазин сумок vi:Cửa hàng túi xách zh-Hans:箱包店 @@ -13806,7 +13822,7 @@ sk:Predajňa syrov sv:Ostaffär sw:Duka la Jibini th:ร้านชีส -tr:Peynir Dükkanı +tr:Peynirci uk:Магазин сиру vi:Cửa hàng pho mát zh-Hans:奶酪店 @@ -13882,7 +13898,7 @@ sk:Predajňa elektro sv:Elektronik affär sw:Duka la Umeme th:ร้านขายเครื่องใช้ไฟฟ้า -tr:Elektirikli eşya dükkanı +tr:Elektronik eşya dükkanı|Elektronik mağazası uk:Магазин електротехніки vi:Cửa hàng điện tử zh-Hans:电器商城 @@ -13920,7 +13936,7 @@ sk:Rybársky obchod sv:Fiskeaffär sw:Duka la Uvuvi th:ร้านตกปลา -tr:Balıkçı Dükkanı +tr:Balıkçılık Dükkanı|Balıkçılık Mağazası|Balıkçılık uk:Рибальський магазин vi:Cửa hàng câu cá zh-Hans:钓鱼店 @@ -14034,7 +14050,7 @@ sk:Zdravotnícky materiál sv:Medicinska förnödenheter sw:Vifaa vya Matibabu th:เวชภัณฑ์ -tr:Tıbbi malzemeler +tr:Tıbbi malzemeler|medikalci uk:Медичні товари vi:Vật tư y tế zh-Hans:医疗用品 @@ -14072,7 +14088,7 @@ sk:Výživové doplnky sv:Kosttillskott sw:Virutubisho vya Lishe th:อาหารเสริม -tr:Besin Takviyeleri +tr:Besin Takviyeleri|Takviye besin|takviye gıda|gıda takviyesi uk:Харчові добавки vi:Bổ sung dinh dưỡng zh-Hans:营养补充剂 @@ -14110,7 +14126,7 @@ sk:Farby sv:Färger sw:Rangi th:สี -tr:Boyalar +tr:Boya|boyacı uk:Фарби vi:Sơn zh-Hans:油漆 @@ -14148,7 +14164,7 @@ sk:Parfuméria sv:Parfymer sw:Perfumery th:น้ำหอม -tr:Parfümeri +tr:Parfümeri|parfümcü uk:Парфумерія vi:Nước hoa zh-Hans:香水 @@ -14262,7 +14278,7 @@ sk:Tabak sv:Tobak sw:Tumbaku th:ยาสูบ -tr:Tütün +tr:Tütüncü uk:Тютюн vi:Thuốc lá zh-Hans:烟草 @@ -14300,7 +14316,7 @@ sk:Živnostenské potreby sv:Handlar förnödenheter sw:Ugavi wa Biashara th:อุปกรณ์การค้า -tr:Esnaf Malzemeleri +tr:Esnaf Malzemeleri|İş yeri malzemeleri|Dükkan malzemeleri uk:Торгівля припасами vi:Nguồn cung cấp Giao dịch zh-Hans:贸易用品 @@ -14338,7 +14354,7 @@ sk:Hodinky sv:Klockor sw:Saa th:นาฬิกา -tr:Saatler +tr:Saatçi uk:Годинники vi:Xem zh-Hans:手表 @@ -14376,7 +14392,7 @@ sk:Veľkoobchod sv:Grossistbutik sw:Duka la Jumla th:ร้านขายส่ง -tr:Toptan satış mağazası +tr:Toptan satış mağazası|toptancı uk:Оптовий магазин vi:Cửa hàng bán buôn zh-Hans:批发店 diff --git a/data/strings/types_strings.txt b/data/strings/types_strings.txt index c5816232b6..3afd74721e 100644 --- a/data/strings/types_strings.txt +++ b/data/strings/types_strings.txt @@ -20173,7 +20173,7 @@ sv = Livsmedel sw = Chakula cha mboga th = ร้านขายของชำ - tr = Bakkal + tr = Market uk = Бакалія vi = Cửa hàng tạp hóa zh-Hans = 杂货店 @@ -23931,6 +23931,7 @@ ja = 動物 nl = Dierenverblijf pl = Atrakcje zwierzęce + tr = Hayvanat bahçesi [type.tourism.attraction.specified] ref = type.tourism.attraction @@ -24614,7 +24615,7 @@ pt = Redutor de velocidade pt-BR = Redutor de velocidade ru = Лежачий полицейский - tr = Hız Kesici (Tümsek) + tr = Hız Kesici (Kasis) uk = Лежачий полiцейський [type.traffic_calming.bump] @@ -24631,7 +24632,7 @@ pt = Lomba pt-BR = Quebra-molas ru = Лежачий полицейский - tr = Hız Kesici (Tümsek) + tr = Hız Kesici (Kasis) uk = Лежачий полiцейський [type.traffic_calming.hump] @@ -24646,7 +24647,7 @@ pt = Lomba longa pt-BR = Quebra-molas longa ru = Лежачий полицейский - tr = Hız Kesici (Tümsek) + tr = Hız Kesici (Kasis) uk = Лежачий полiцейський [type.waterway] @@ -24826,7 +24827,7 @@ sk = Stavidlo sv = Slussport th = ประตูระบายน้ำ - tr = Kilit Kapısı + tr = Eklüz Kapağı uk = Шлюз vi = Cổng Khóa zh-Hans = 闸门 @@ -25254,6 +25255,7 @@ pt = Telesqui de barra em T pt-BR = Telesqui de barra em T ru = Бугельный подъёмник + tr = Kayakçı teleferiği uk = Бугельний витяг [type.piste_type] -- 2.45.3