Enerji
Oklo (OKLO): Nükleer Atık Tüketerek AI’ı Güçlendiriyor

Neden AI Yeni Bir Nükleer Enerji Döngüsünü Harekete Geçiriyor
AI veri merkezleri tarafından enerji talebinin patlaması, önümüzdeki on yıl için enerji tüketimi tahminlerini tamamen değiştirirken, daha fazla enerji üretimi nhanh benötiliyor.
İdeal olarak, bu, güneş ve rüzgar gibi karbon-nötr yenilenebilir kaynaklardan gelmelidir. Ancak, pratikte, büyük ölçekli piller sadece başlıyor ve sürekli veri merkezi operasyonları için ara sıra yenilenebilirlerin güvenilmesini sağlamak için henüz yeterli değil.
Bu nedenle teknoloji endüstrisi nükleer enerjiye yönelmeye başladı. İlk adımlar,最近 kapatılan geleneksel nükleer santrallerin yeniden başlatılmasıyla ilgiliydi, Örneğin, Three Mile Island nükleer reaktörünün Microsoft ile ortaklık içinde yeniden başlatılması.
Ancak, onlarca veya hatta yüzlerce GW’lık veri merkezlerinin inşa edilmesiyla, yeni nükleer reaktörler gerekiyor. Ne yazık ki, geleneksel nükleer tasarımlar inşa edilmeye yavaş, kompleks izin süreçleriyle yükümlü ve hala Fukushima ve Chernobyl gibi geçmiş olaylardan kaynaklanan kamu stigmasına sahip.
Bu nedenle, nükleer enerji santrallerinin yeni bir nesli, Küçük Modüler Reaktörler (SMR’ler), nükleer endüstrisinin yeni trendi. Daha hızlı inşa edilmeleri, seri olarak inşa edildiklerinde daha ucuz olmaları ve dağıtımında daha esnek olmaları bekleniyor.
Çok sayıda SMR tasarımı, endüstrinin aşina olduğu basınçlı nükleer tesislerin küçük ölçekli bir kopyasını yapıyor. Ancak bazıları, 4. nesil nükleer enerji santrallerine doğru bir adım öteye geçiyor ve bir şirket birçok yatırımcının dikkatini çekti: Oklo.
(OKLO )
Devam Eden Nükleer Rönesans
Stratejik Bir Endişe
Benimsenme oranı ve veri merkezi inşa hızı dikkate alındığında, veri merkezlerinin enerji gereksinimleri 2030 yılına kadar 2-6 kat artabilir.

Bu enerji talebi, uzun süredir ihmal edilen güç şebekelerine ve büyük ölçüde durağan güç üretimine sahip Batı’da karşılanması zor olacak. Oysa geleneksel nükleer güç, yalnızca 2020’lerin sonlarında ortaya çıkan ülkelerde artması planlanıyor.

Kaynak: The Economist
Bu nedenle, AI model şirketleri Batı’da bir başlangıç avantajına sahip olabilir, ancak güç üretimi kısıtlamaları sonunda Çin’e bir avantaj sağlayabilir. Bu nedenle, SMR’ler artık hem politika yapıcılar hem de AI şirketleri tarafından enerji açığını kapatmak için benimseniyor.
Örneğin, Google, 2030’dan itibaren Kairos ile 500 MW’a kadar SMR kapasitesi için anlaşma imzaladı, enquanto X-energy, Washington Eyaletinde 12 Xe-100 reaktörünü Amazon için hizmet vermek üzere dağıtmayı planlıyor.

Kaynak: GE Vernova
Tüm SMR’ler Eşit Değil
Tüm SMR’ler, klasik nükleer güç santrallerinden ayıran beberapa ortak özelliklere sahiptir:
- Küçük: Tek bir modülün güç çıkışı, geleneksel bir güç santralinin %5-10’u civarında.
- Standartlaştırılmış ve seri üretilmiş: Tasarım, fabrikada seri olarak üretilip, güç santrali sitesine veya nihai müşterilere, özel tasarım, yeniden mühendislik vb. olmadan gönderilebilir.
- Daha güvenli: Düşük güç çıkışı ve yakıt envanteri, nükleer bir olayın riskini ve ciddiyetini azaltır.
- Kolayca dağıtılır: Geleneksel tesislere göre çok daha küçük bir Acil Durum Planlama Bölgesi (EPZ) ve önceden onaylanmış bir tasarım, izin verme sürecini hızlandırır ve azaltır.
Ancak, SMR’ler arasında önemli farklılıklar olabilir. Bazıları daha eski tasarımları tekrarlıyor, sadece daha küçük, diğerleri ise son birkaç on yılda nükleer endüstrisi tarafından yapılan yenilikleri benimseyerek daha güvenli ve üretken hale geliyor.
SMR Tasarımları Karşılaştırıldı (Oklo vs Ana Rakipler)
Bu anlık görüntü, Oklo’nun hızlı reaktör yaklaşımının, AI ve endüstriyel güç yükleri için yarışan daha geleneksel SMR yollarından nasıl farklı olduğunu gösteriyor.
Swipe to scroll →
| Şirket | Çekirdek Reaktör Tipi | Soğutucu / Sistem | Yakıt Stratejisi | AI/Veri Merkezi Açısı | Ana Ayırt Edici Özellik | Ana Risk |
|---|---|---|---|---|---|---|
| Oklo | Hızlı reaktör (gelişmiş SMR) | Likit metal / erimiş tuz sınıfı termal sistem (su değil) | Geri dönüştürülmüş/kullanılmış nükleer yakıt akışlarını tüketmek üzere tasarlandı | Güçlü, yüksek çalışma zamanlı arkası veya ızgara desteği gücü olarak konumlandırıldı | Atıkdan-enerjiye anlatısı + uzun yakıt aralıkları | Düzenleyici/ilk türden yürütme + yakıt geri dönüşüm ölçeklendirme |
| NuScale | Hafif su SMR (basınçlı) | Su soğutmalı, geleneksel tesis mimarisi | Standart zenginleştirilmiş uranyum tedarik zinciri | İzgara + endüstriyel müşteriler için hedefleniyor; veri merkezleri mogelijk PPAlar aracılığıyla | En “tanıdık” düzenleyici yol haritası gelişmiş tasarımlara kıyasla | Proje ekonomisi + müşteri/utilite sözleşmesi riski |
| X-energy | Yüksek sıcaklık gaz reaktörü (HTGR) | Helyum soğutmalı, TRISO yakıtı | HALEU / gelişmiş yakıt tedarik bağımlılıkları | Endüstriyel + veri merkezi kümeleri için çoklu birim dağıtımlarını hedefliyor | Güçlü ısı çıkışı (proses ısı) + modüler ölçeklendirme | Yakıt erişilebilirliği (HALEU) + üretim rampası |
| Kairos Power | Florür tuzlu yüksek sıcaklık reaktörü | Erimiş tuz soğutması (su değil) | Gelişmiş yakıt yolları; tedarik zinciri hala ortaya çıkıyor | Hyperscaler talebi ve modüler teslimat حولunda kamuoyu tarafından çerçevelendi | Fiziksel güvenlik tasarımı + yüksek sıcaklık verimliliği | Demo’dan ticarete geçiş zamanlaması |
| GE Hitachi (BWRX-300) | Hafif su SMR (BWR) | Su soğutmalı, basitleştirilmiş kaynar su tasarımı | Geleneksel uranyum tedarik zinciri | İzgara ölçekli dağıtımlar için hedefleniyor; veri merkezleri ızgara yakınlığı aracılığıyla | “Küçültülmüş kanıtlanmış BWR” yaklaşımı için dağıtım hızı | Siting/izin verme + büyük proje teslimi yürütme |
Nasıl Okunur: Hafif su tasarımları genellikle daha az ilk türden teknik sorularla karşı karşıya kalırken, gelişmiş tasarımlar (hızlı, erimiş tuz, HTGR) adım değişikliği ekonomileri veya yakıt esnekliği hedefliyor – ancak daha fazla yürütme ve lisanslama belirsizliği taşıyor.
Oklo: Şirket Özeti ve Stratejik Konumlandırma
Şirket 2013 yılında kuruldu ve adını Afrika’daki Gabon ülkesindeki Oklo bölgesinden aldı, burada yaklaşık 1,7 milyar yıl önce kendi kendine devam eden nükleer fisyon reaksiyonları meydana geldi.
Oklo, uzun süredir AI teknolojisiyle derinlemesine bağlantılıydı, OpenAI kurucusu Sam Altman, Oklo’nun başkanlığını yaptı ve onu halka açık piyasalara bir SPAC aracılığıyla yönlendirdi.
2025’in başlarında Altman, “çatışma çıkarlarını önlemek” ve gelecekteki ortaklıkları kolaylaştırmak için Oklo yönetim kurulundan ayrıldı, ancak Oklo hala “AI için SMR” şirketi olarak güçlü bir şekilde konumlandırıldı.
Şirket, bir erimiş tuz (likit metal soğutmalı) hızlı reaktör SMR geliştiriyor.
Sam Altman’dan başka, Peter Thiel ve Facebook kurucu ortağı Dustin Moskovitz ve diğer risk sermayesi şirketlerinden de destek aldı. Oklo, Enerji Bakanlığı ve Idaho Ulusal Laboratuvarı’ndan da destek alıyor.
Oklo’nun Benzersiz Teknolojisi
Hızlı Reaktörler
Burada Oklo, diğer çoğu SMR şirketinden farklıdır.
Oklo’nun tasarımı geleneksel reaktörlerden farklıdır; nükleer atığı geri dönüştürebilen bir “hızlı reaktör”. Bu, uranyum tedarik kısıtlamalarını hafifletebilir, çünkü yalnızca ABD’deki atık stokları, ülkeyi 150 yıl boyunca güçlendirme enerjiye sahiptir.
Hızlı reaktörlerin çalışması, yaklaşık %10 ışık hızında seyahat eden yüksek enerji nötronlarını kullanmayı içerir.
Bu daha hızlı hız, geleneksel bir reaktörde üretken olmayan uranyum yakıtını kullanabilir. Sonuç olarak, hızlı nükleer reaktörler, özellikle geri dönüştürülmüş veya transüranyen yakıt akışlarıyla birleştirildiğinde, uranyumdan geleneksel light-water reaktörlerden çok daha fazla kullanılabilir enerji çıkarabilir.
Deneysel Üretken Reaktör-II (EBR-II), on yıllar boyunca çalıştı ve Fukushima kazasına yol açan zorlamalar kadar şiddetli zorlamalar sırasında bile kolayca güvenli kalabileceğini gösterdi. EBR-II ile yapılan testler, soğutucunun kapatılabileceğini ve tüm kapatma sistemlerinin kaldırılabilmesini, reaktörün doğal olarak stabilize olabileceğini ve hasar görmeden kendini kapatabileceğini gösterdi.
Hızlı reaktörlerin taze uranyum ihtiyacı yoktur, bu da endüstrinin potansiyel yıllarca veya on yıllarca uranyum eksikliği ile karşı karşıya olduğu durumlarda önemli olabilir.

Kaynak: WNA
Oklo’nun Tasarımları
Oklo’nun farklı olduğu yer, hızlı reaktörünün bir “üretken” reaktör olmadığı, yani madenden uranyumdan daha fazla yakıt üretmediği yerdir. Bunun yerine, biriken nükleer atıkları tüketmek üzere tasarlandı.
Transüranyen elementlerin tüketilmesinin ek bir avantajı, kalan atık akışının daha kısa ömürlü fisyon ürünleriyle domine edilmesi, yüksek seviyeli radyotoksikliğin zaman çerçevesini on binlerce yıldan birkaç yüzyıla indirgemektir.
Atıkın daha kısa ömrü, hızlı reaktörlerin uranyumdan (plütonyum gibi nükleer silahlar için kullanılan) daha ağır olan transüranyen malzemeleri tüketmesi sayesinde, nükleer silahların yayılma riskini (plütonyumun imhasını) azaltır. Hızlı nötron reaktörleri ayrıca daha geniş bir yakıt izotopları yelpazesini fisyonlayabilir ve geri dönüştürülmüş kullanılan nükleer yakıtlardaki safsızlıklara karşı daha az duyarlıdır.

Kaynak: Oklo
Şirketin tasarımı, ilkelerden itibaren bir nükleer reaktörün kavramını yeniden inşa etmeye çalışıyor, endüstrinin sadece özel yapım parçaları kullanma uygulamasından uzaklaşıyor, benzer şekilde SpaceX roketleri için maliyetleri radikal olarak azalttı.
Örneğin, basınçsız operasyonlara yönelik tercihi, karmaşık ve pahalı bileşenlerin ihtiyacını ortadan kaldırır ve genel olarak tasarımı basitleştirir, daha az parça gerektirir.
Likit metal soğutma sistemi (erimiş tuz) de nükleer endüstrisinin su soğutmalı tasarımlar yerine yöneldiği yöndür, doğası gereği daha iyi bir güvenlik profiline ve modern tedarik zincirlerini kullanma yeteneğine sahiptir.
Oklo’nun reaktörleri ayrıca çok güvenilir olacak ve çok az downtime gerektirecek, çünkü yalnızca her 20 yılda bir yakıt ikmali gerektirecekler.
Daha küçük ayak izi, geleneksel, devasa güç santrallerinden tamamen farklı görünen bir nükleer tesis sitesi yaratılmasına yardımcı olur, Aurora güç ürünleri ürün hattı ile birlikte, 75MWe (megawatt eşdeğeri) elektrik gücü üretebilen bir ürün sunar, hem elektrik hem de doğrudan ısı üretebilir.

Kaynak: Oklo
Şirket, reaktörün buhar türbini kısmında Siemens’in uzmanlığını kullanacak, türbinlerin satın alma işlemleri zaten devam ediyor.
Hızlı Reaktörlerin Teknik ve Ekonomik Zorlukları
Avantajlarına rağmen, hızlı reaktörler light-water reaktörlerden daha karmaşıktır, bu da tarihsel olarak onlara karşı çalışmıştır.
Sonuç olarak, yalnızca araştırma ve geliştirme maliyetini aynı reaktörün birçok kez inşa edilmesiyle amorti edebilen bir tasarım, light-water reaktörlerle rekabetçi olabilir. Neyse ki, SMR’lerin modülerliği ve seri üretimi bu sorunu hafifletmeye yardımcı olmalıdır.
Diğer bir sorun, nükleer yakıtın geri dönüşümünün, taze olarak çıkarılan ve zenginleştirilen uranyumdan daha pahalı olmasıdır.
Ancak, zaten sürekli olarak üretilen nükleer atıkların geri dönüşüm maliyeti, 10.000+ yıl süren toksik atıklar yerine hızlı reaktörler için yakıt oluşturmak için kullanılabilir. Bu nedenle, 1960’lar ve 1970’lerde hızlı reaktörlerinOutOf favor olmasının aksine, bu denklem çok farklıdır.
Oklo, bu konuya elini koydu ve Nisan 2025’te Tennessee’de 1,68 milyar dolarlık bir ileri yakıt geri dönüşüm merkezinin inşasına başladı.
ABD’de depolanan 94.000 metrik ton kullanılan nükleer yakıtın geri dönüşümünden elde edilebilecek enerji, yaklaşık 1,3 trilyon varil petrolle eşdeğerdir, yani Suudi Arabistan’ın rezervlerinin beş katı.
Yakıt, gelişmiş nükleer enerjinin piyasaya sürülmesinde en önemli faktördür. Kullanılmış yakıtı büyük ölçekte geri dönüştürerek, atığı gigavata dönüştürüyoruz, maliyetleri düşürüyoruz ve temiz, güvenilir ve ucuz güç dağıtmak için güvenli bir ABD tedarik zincirini kuruyoruz. — Jacob DeWitte, Oklo kurucu ortak ve CEO
Oklo’nun İlerlemesi ve Zaman Çizelgesi
SMR İnşası
Diğer bazı SMR şirketlerine kıyasla daha yavaş ilerleyen Oklo, ilk SMR’lerini Idaho Ulusal Laboratuvarı’nda (INL) 2027 veya 2028’in sonlarında dağıtmayı bekliyor.
Şirket, güvenilir güç arayan şirketlerle birkaç anlaşma imzaladı.
Bunlardan biri, Meta için 1,2 GW’lık bir proje, Power Ohio için destekleyecek, aynı zamanda Ohio güç şebekesine bağlanacak ve özel olarak finanse edilecek, Ohio elektrik kullanıcılarına maliyeti olmayacak ve inşaat ve operasyon boyunca birçok işi yaratacak. Proje, 2030’da ilk gücünü online görecek.
Diğer bir proje, veri merkezi (dahil AI veri merkezi) operatörü Switch ile yapılan 12 GW anlaşması, tarihin en büyük kurumsal güç anlaşmalarından biri. Bu, uzun vadeli bir plandı ve Oklo’nun, 2044 yılına kadar birçok Aurora güç ürünleri projesini dağıtmayı planlıyor.
Radyoizotoplar
SMR’ler, uzun vadede şirketin faaliyetlerinin büyük bölümünü oluştururken, Oklo, daha sớm gelir elde edebileceği bir “yan iş” ekledi: tıbbi radyoizotoplar.
Radyoizotoplar, 2026 yılına kadar 55,7 milyar dolarlık bir pazar fırsatına sahip olacak.
Oklo, bu pazara girmek için 2024 yılında Atomic Alchemy’yi 25 milyon dolar karşılığında satın aldı.
Oklo, Enerji Bakanlığı Reaktör Pilot Programı (RPP) kapsamında bir radyoizotop pilot tesisi inşa ediyor, bu proje Ocak 2026’da onaylandı. Başlangıç tarihi henüz verilmese de, bu, Oklo’nun SMR’leri için kullanacağı nükleer yakıtın gelirini en üst düzeye çıkarmasına yardımcı olabilir.
İzotop dönüşümü ve nükleer reaksiyonların kullanılması, tıbbi uygulamaların ötesine geçebilir ve yarı iletken/AI endüstrilerine geri dönebilir. Atomic Alchemy’nin teknolojileri özellikle silikonun (NTD) nötron transmutasyon dopingini kullanır ve bazı silikon atomlarını fosfor atomlarına dönüştürür. Reaksiyonu ince ayarlayarak, mevcut yöntemlerden daha kesin ve tutarlı bir yarı iletken malzemesi “doping” yöntemi geliştirilebilir.
Nadir izotoplar ayrıca, uzay araştırmaları ve lunar üsler için önemli olan ticari Radyoizotop Güç Sistemleri (RPS’ler) veya “nükleer piller” için kullanılabilir. Oklo, bu konuda Zeno Power ile ortaklık kurdu.
Oklo Yatırım Tezi: Riskler, Katalizörler ve Görünüm
Şu anda birçok SMR şirketi, nükleer endüstrisinin yenilenmesi için çalışıyor. AI’ye bağlıuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenuddenudden











