📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Unsupervised Deep Learning - Google DeepMind & Facebook Artificial Intelligence NeurIPS 2018

The Artificial Intelligence Channel1:50:08

Transcription

这是一场嘲弄。Leo 会在我之后发言,嗯,我不会详细介绍他的发言方式,他会向你介绍的。但最后,还将有另外 10 到 15 分钟的问答环节,我们两人都会一起出现,所以你可以问任何关于演示文稿任何部分的问题,直到那时,好的。

首先,在非常普遍的层面上,你知道,我们在机器学习、人工智能和深度学习等方面如何定位无监督学习?人们经常谈论三种不同的学习类型:监督学习、无监督学习和强化学习。我认为这种分类有点无益。我认为最好沿着两个变异维度来思考。

其中一个维度是主动与被动。在监督或无监督环境中,学习者,如果你愿意,就是代理,是被动的。它只是接收数据,它不会以任何方式采取行动来修改它将来会接收到的数据的观察结果。然后我们有主动环境,在那里我们拥有我们通常认为的代理,它实际上与环境互动,从而影响它将接收到的信息以及它将处于的状态。

这里的另一个自由度是是否有来自老师的信号。显然,在监督学习中,你有目标,你有预先定义的训练目标,这些目标据推测是由人类老师给你的。在无监督学习中,你拿走这些目标,你只是直接从数据中学习。

因此,强化学习中的类比是,嗯,正常的,你知道,正常的强化学习,具有外部奖励的强化学习,你有一个老师。当你拿走老师时,你就处于我们称之为内在动机或探索的环境中,在那里你只是为了了解环境而了解它,而不是为了优化特定的奖励。

这应该很清楚,你知道,这些分类都不是绝对的。在有老师和没有老师之间存在一种连续性。你可以有不同程度的监督。你可以有半监督学习。你可以有,你知道,非常稀疏的外部奖励与内在奖励相结合。

在强化学习中,主动和被动之间也存在一种连续性。所以,你知道,在一种极端情况下,有一个完全主动的强化学习代理,然后有像主动学习这样的东西,在那里你基本上是在进行监督学习,只是你正在决定要查看哪种数据。课程学习是另一个例子。

所以,无论如何,这次讲座将主要集中在无监督学习环境,但我也将尝试谈论一些内在动机和强化学习,而没有老师信号。希望,希望我能传达这样的想法,即这里我们谈论的所有东西都应该与这两种环境相关。所以我们实际上是在谈论在没有老师的情况下学习,而不是专门学习通常被认为是无监督学习或无监督强化学习的东西。

所以,无论如何,在进行了这个介绍之后,你知道,第一个问题是,所以如果我们想在这里谈论如何在没有老师的情况下学习,那么第一个问题是,你知道,你为什么要这样做?

所以,如果你的最终目标是创造能够执行各种任务的智能系统,无论是强化学习、主动任务还是监督任务,你可能会问,为什么我们不直接教它们如何做这些任务呢?收集大量数据并教它们如何做好呢?

你知道,第一个问题,第一个抱怨,每个人都会提出的就是,嗯,获取所有这些训练信号,所有这些教学信号可能很困难。所以在监督学习的情况下,你必须获得大量的标记数据,这可能很难获得。在强化学习的情况下,主动情况有点,你知道,比这更微妙。奖励信号通常以更具程序性的方式定义,它们不是通过特定的观察结果手工分配的,但它们仍然很难定义。仍然有人必须考虑任务应该是什么以及奖励结构应该是什么。

所以任何从事过强化学习的人都知道,确定奖励结构确实是问题的一个重要组成部分,这正是很多工作所在。

嗯,第二个在这里有点更模糊,你知道,这是一个有些主观的观点,但我认为普遍的共识是,无监督学习感觉更像人类的学习方式,对吧?婴儿,我是说,在某种程度上,我们教我们的孩子东西,我们告诉他们事情,但他们大部分时间都在探索和与世界互动,并在不知道如何做的情况下了解世界。所以,普遍的感觉是,如果我们所做的只是给我们的代理信号并要求它们精确地优化和匹配这些信号,那么它们就永远不会以我们认为的人类智能的方式学习。

但我认为最后一点是真正关键的一点,那就是我们不仅仅想解决特定的任务,我们想快速地将它们泛化到新的任务和情况。这,你知道,在监督学习环境中已经很明显了,但在强化环境中则更加明显。所以,你知道,我们不可能通过让它接触到它一生中将遇到的所有可能场景来构建一个通用的智能代理。世界不是这样的,事物在变化,新的情况会出现。我认为通用智能的关键要素实际上不是学习大量事物的能力,而是快速适应新事物和新情况的能力。

而且,我认为这是人们普遍认为仅仅通过,你知道,监督学习或外部奖励是无法实现的。所以,我说它没有发生,当然,你知道,有整个领域,你知道,迁移学习,对吧?在一个任务上教学并迁移到另一个任务。多任务学习,一次性学习,这些东西。

而且,没有不尊重在这个领域工作的人,我认为公平地说,它确实有点用。所以,你知道,我最近听到的一个例子是,你知道,对于语音识别系统,这是关于,你知道,商业语音识别系统,就像我使用谷歌和类似的地方一样。当你有一个数据量非常少的语言时,你可以有时从另一种非常相似的语言中进行引导,而你确实有很多数据。所以你正在获得实际的,你知道,商业改进,通过从相似的类别迁移。但你通常不会迁移很远,从,你知道,一个,也许一个方言,一个字母,一个,一个密切相关的语言到另一个。

而总的来说,有一种直觉,这种迁移似乎并没有像我们希望的那样泛化得那么远或那么快。而一种假设,假设是,老师提供的这些代理的目标和奖励中信息量不足,以至于它们能够学习可迁移的技能。

所以,这突出显示了这个词“技能”。我最近听了参议员辛格的演讲,他说了一句话,我一直铭记在心,那就是我们需要停止思考教代理学习任务,而是开始教它们学习技能。人们不是孤立地解决一系列任务,然后迁移它们。相反,我们一生中通过学习技能,能够以后灵活地重用和,你知道,灵活地适应它们。

好的,你们中的许多人可能以前读过扬·勒昆的这句话。他说,如果智能是一块蛋糕,无监督学习就是蛋糕,监督学习就是蛋糕上的糖霜,强化学习就是蛋糕上的樱桃。你们中的一些人可能会有点惊讶地看到来自 DeepMind 的人引用这句话,但我并不认为这是对强化学习的贬低,而是说明了这些不同类型信号之间信息量巨大的巨大差异。

所以很清楚,监督学习的目标信息量比输入数据少得多。我将在下一张幻灯片中通过一个具体的例子来详细说明这一点,以使其非常清楚。但当然,强化学习的奖励信号包含的信息更少。你可能会有一系列非常长的动作,与,你知道,一个复杂的环境互动,涉及视觉、声音等等,然后最后你只会得到一个单一的奖励信号,你知道,你成功了还是没有,一个或零。

在这些情况下,代理能够学习到任何东西都令人惊讶,它们获得的信息很少,你知道,可以抓住。它们认为它们可以做某事。但也很清楚,如果我们反过来,如果我们停止思考来自老师的信号,而是开始思考数据中固有的信号,那么我们就有这个基本上无限的信息供应。世界,我们可以,我们可以去,你知道,浏览整个互联网。我们可以让数码相机运行。我们可以,你知道,我们可以收集无限的信息,如果我们不必担心如何标记或分配这些信息。

所以,它似乎很明显,我们应该利用它。

所以,只是为了举一个小例子,这有点,你知道,在某种意义上是迂腐的,但我认为这是一个很好的观点。

所以,假设我们看看 ImageNet,我们看看训练集,它有大约 128 万张图片,每张图片都被分配了 1000 个标签中的一个。我认为我的数字是正确的,但如果它们是错误的,如果这些标签大致平均分布在各个类别中,那么标签集就包含大约,嗯,1000 的对数乘以 1.2 百万,也就是 12.8 兆比特的信息。

当你想到它时,这真的不是很多。你知道,人们经常对初学者感到惊讶,你知道,当人们开始从事机器学习时,他们会惊讶于他们神经网络在如此大的数据集上过拟合。但关键是,如果你做监督学习,你不是在过拟合数据中的输入,你是在过拟合目标,而目标实际上并没有那么多。

相比之下,如果你将所有图片解压缩,以 1280x528 的分辨率,根据我的粗略估计,你将看到大约 500 千兆比特的数据。所以,数量级要多得多。

所以,最近有一篇论文表明,嗯,你知道,这些神经网络有时可能拥有过多的容量。对吧?我们可以将 ImageNet 的标签随机化,它仍然可以完美地解决训练集,这意味着它学习的是胡言乱语,对吧?它只是在记忆一堆与输入完全无关的标签。

而且,实际上这并不奇怪,对吧?卷积网络可能有大约 3000 万个权重,而你要求它学习 1280 万比特,对吧?所以,你做一下计算,你不必嵌入那么多,你知道,每个参数不到一比特,抱歉,每个权重不到一比特,对吧?这并不难做到。

但当然,同一个网络无法记忆像素,如果我们随机化像素并要求它进行密度建模,要求它,你知道,对像素进行建模,它根本就行不通。

所以,实际上,据我所知,最大的无监督模型,最大的 ImageNet 无监督模型,现在开始在 32x32 分辨率的训练集上过拟合。但,你知道,它们并没有记忆,它们只是过拟合。

所以,无论如何,这只是为了让你在这些数据中可用的信息量与训练信号或标签量之间的数量级差异方面记住这一点。

所以,你知道,一页纸,什么是监督学习?一页纸?老实说,这真的很简单。你知道,你有一个输入 X 的数据集,你给它们打上标签 Y,你的任务是预测给定 X 的 Y。而且,你知道,通常你只是以最大似然的方式来做这件事。所以你有一个损失函数,它是数据集中这些 XY 对的总和,即目标给定输入的负对数概率。

而且,这真的,你知道,这仍然是驱动大量深度学习的引擎,对吧?你知道,很多头条新闻的结果,你知道,可以追溯到,你知道,ImageNet 分类结果,语音识别结果,机器翻译等等。它们大部分都是,你知道,显然,这比这要复杂得多,有网络架构,有优化网络的方式等等。但就你实际运行的损失函数而言,它非常简单,它是一种古老的统计技术。

那么问题是,嗯,当我们拿走目标时会发生什么?所以现在我们的数据集只包含很多 X,而没有 Y。损失是什么?损失是什么?

当然,这是无监督学习的根本挑战,对吧?任务是未定义的,顾名思义,我们不再有任务了。而这正是使无监督学习变得困难,但也使其变得有趣的原因,因为我们不仅仅是在优化预定义的任务。所以我们必须想出一些东西,以某种间接的方式给我们我们认为我们想要的。

问题是,即使我们这样做了,所以,假设我们可以,我们可以用模糊的术语说,我们真正想要的是一个单一的任务,它能让网络泛化到我们想要的许多其他任务。你想学习任何能让你快速泛化到生活中将要发生的事情的事情。

但问题是,你指的是哪些任务?对吧?如果你预定义了一组测试,那么实际上你只是在做监督学习或强化学习,再次。你只是把它推迟了一步。你只是说,优化这个东西,以便在那个东西上获得最好的分数,你知道,那组任务。而且,我不相信那会给我们想要的泛化能力,因为那里真的必须有泛化能力。有些东西在你建模时没有预测到。

好的,最简单的事情,可以说,就是基本上做和你以前一样的事情,只是没有目标。所以现在你是在数据上进行最大似然,而不是在目标上。所以这是老式的密度建模。而且,你知道,密度建模的目标是什么?

嗯,从根本上说,你试图做的是学习数据绘制的真实分布。而且,我在这里用了“真实”这个词,用了引号,因为总有一个问题是,嗯,你实际上拥有的只是一个数据集。谈论一个真实的分布是否有意义,还是你应该只尝试尽可能好地学习这个数据集?

我不想深入探讨这个无休止的哲学兔子洞,但基本思想是,你正在训练系统,试图学习关于数据的一切。学习你发现的每一个模式和每一个规律,都应该以某种方式让你能够减少这个,这个负的,这个对数损失,提高这些对数概率。

嗯,我认为在我们深入研究细节之前,我们应该,而且,是的,在我继续之前,有一件事我想让大家从这次教程中学到的是,关于如何进行无监督学习没有明确的答案,对吧?正如我所说,这就是它困难的原因,但也是它有趣的原因。你将从我和马可·奥雷利奥那里听到很多不同的模型和不同的方法,而且如果你能与该领域的其他人交流,你还会听到更多。

所以,真的没有共识,什么是最好的做法。但你经常听到的一件事是,嗯,我们不应该试图一次理解所有事情,那没有意义。我们应该专注于那些我们有一些想法或一些信念,有一天会对我们有用的事情。

我正在读卡洛·维希的《家庭的死亡》,我想他的发音是这样。我不会读出这段引文,它有点长,你可以自己看看。但基本思想是,叙述者走在斯德哥尔摩的街道上,他看到了这个,你知道,非常引人注目的云层形成,我想也许是日落之类的。云是彩色的,它们很美。他抬头一看,意识到没有人看云。他想,为什么没有人注意到这些云?这是我一生中再也看不到的,你知道,美丽而复杂的模式,但没有人看。

显然,原因是我们不看它们,因为我们不需要。除了也许估计,你知道,是否可能下雨或类似的事情,我们真的不需要看云。它们在某种意义上是结构、模式、信息的取之不尽的储存库,但它们不是我们能够,我们可以相当肯定地说,它们不是对我们有用的模式。而这也许是你的专业气象学家。

所以,这是一个持续的难题,那就是,鉴于你实际上无法希望学习所有东西,你不应该对你试图学习的东西稍微更专注一些吗?

而且,实际上,我将在下一张幻灯片上再次重复这一点。你知道,当你说的,哦,让我们,你知道,让我们通过密度建模来进行无监督学习,让我们对一切进行建模。嗯,有一件事很明显,那就是密度建模是困难的。所以,你从一个极端走向另一个极端。在强化学习、监督环境中,你没有足够的比特来学习。现在你却拥有太多了,就好像,你知道,如果你谈论,你知道,高清视频,以每秒 60 或 30 帧的速度运行,系统流入的信息太多了。即使是今天的计算机,也很难同时对所有这些进行建模。

第二个问题,我可能会说我们有一个稍微好一点的解决方案,那就是,你知道,你必须处理这些变量之间的复杂相互作用,这是一种维度灾难。这些是高维的、非常复杂的、难以建模的数据。

第二个问题实际上更根本,它基本上是对我上一张幻灯片所说的内容的重述。你会经常听到人们说,并非所有比特都是平等的。这是我的同事们之间一遍又一遍地进行的讨论。基本上,如果你只是优化对数似然,它们会更多地依赖于这些非常低级的、不重要的细节,比如相邻像素之间的确切相关性,单词级别的 n-gram,可能只是最后两个或三个单词。但要获得这些统计数据非常非常精确,而这些并不是我们直观上想要学习的东西,对吧?

相反,我们想学习高层结构。我们想知道图像的内容是什么,是猫还是狗,而不是每个像素的颜色值可能是什么。我们想了解语言的语义,而不是,你知道,词组之间的精确转换概率。

还有一个问题,这是一个更普遍的问题,一个真正无监督学习的问题,而且,你知道,更广泛地说,即使你以某种意义上拥有正确的损失函数,并且它提供了正确的底层结构,但并不总是清楚如何访问那个底层结构以用于未来的任务。而这正是表示学习的由来。

所以,你知道,为了解决这些问题,神经网络必须学习输入数据的有趣且,你知道,本质上是有用的表示。但它们往往是黑箱,很难访问这些表示。我将在讲座后面回到这一点。

好的,密度的一个好处是,你基本上免费获得了一个生成模型。所以,如果你,如果你学会了如何,你知道,建模数据,数据的概率分布,只要你能从该分布中抽取样本,那么你就拥有了一个生成模型。

而且,生成模型在很多方面都很棒。我认为,你知道,从根本上说,对我来说最重要的事情是,它们能让你看到模型已经学到了什么,没有学到什么。对吧?你可以从分布中生成。所以,对数概率,任何形式的度量,都只能告诉你模型有多好。当你从中生成时,你就会看到它实际上学到了哪些模式,它实际上嵌入了哪些结构。

所以,这就像对理查德·费曼的著名引言的一种量化:“我无法创造的东西,我不理解。”所以,我们正在走这条路,对吧?我们正在构建创造性的模型,必须能够实际创建数据来证明它们已经理解了它。

这些的另一个用途是,如果你有一个生成模型,你可以用它来,例如,想象可能发生的场景。而这一直是人们在基于模型的强化学习背景下探索的事情。我现在就不再深入讨论了。

好的,那么问题是,就像,如果你,你知道,如果你认为密度建模是一个好主意,而这本身就是一个很大的假设,那么下一个问题是,嗯,我们应该使用什么模型来进行密度建模?

而我现在要谈论的是自回归模型,它们是一类非常简单、非常强大的模型,我认为它们在建模各种各样的数据类型方面做得非常好。

好的,这一个数学公式,可能,我确定你们都熟悉了,你知道,自回归模型只需要知道的唯一数学公式就是概率的链式法则。所以,基本上,给定任何变量的联合概率,你总是可以将其分解为所有变量的条件概率链。

而在这里重要的是,在这种情况下,我们有一个语言模型。所以,我们有“猫坐在垫子上”。你从“the”的概率开始,然后是“cat”给定“the”的概率,“sat”给定“cat”的概率,依此类推。

而且,这里有一个非常自然的顺序。但实际上,链式法则在你想要的任何顺序下仍然有效。所以,你可以打乱这个顺序,原则上运行相同的东西。在实践中,这一点很重要,我将在后面进一步讨论,你选择的顺序对你实际能够学习系统的程度至关重要。它引入了一种归纳偏见,这是一个很大的,你知道,围绕这个有很多争论。

对于自回归模型,实际上,就像一个简短的题外话,我曾经训练过一个字符级别的神经网络语言模型,它允许它选择下一个要预测的字符。所以,而不是像通常那样从右到左,它可以选择要查看的位置。有趣的是,它几乎是以正常的顺序预测字符,除了它会跳过每个单词的第一个字母,直接跳到第二个字母,然后到达单词的末尾,然后回到第一个字母。

我猜测为什么它会这样做是因为在英语中,第二个字母通常是元音,这意味着它的熵比第一个字母低。所以,我认为,如果有一个基本的规则,我们应该如何排序,我们应该如何排序自回归预测,那可能是系统总是想先做出最安全的赌注,它想先做出它最确定的预测,给定到目前为止的信息,然后继续下一个。但通常这就是你得到的。你知道,如果你有一个时间序列,并且你按时间顺序进行预测,这大致就是你得到的。

所以,无论如何,自回归网络,嗯,它基本上就是,你知道,将那个技巧应用于神经网络。所以,你获取高维数据,并将其分解为一系列小块,你必须选择序列是什么,然后你从之前的块中预测每个块。

对我来说,这基本上解决了,嗯,我们早些时候的标记可能不同意我的观点,我们对自回归模型的相对优点进行了长时间的辩论。所以,你稍后会听到更多。但我认为这解决了问题中的维度灾难部分,因为你一次只预测系统的一小部分。你不再有这个问题,你无法处理许多变量之间的协方差或相互作用。

而且,对过去的条件,你知道,这个概率被分解成一系列独立的预测,每个预测都以过去的状态为条件。这是通过神经网络的状态完成的。

所以,这个教程不会讨论太多,几乎不会讨论深度学习架构。它更多地是关于损失函数和训练方法。但就自回归网络而言,可能已经出现了三个基本的结构成为赢家。有循环门控循环神经网络,如 LSTM 和 GRU。有掩码卷积,掩码是为了确保在预测时,未来状态对过去状态不可访问。最近,人们越来越倾向于使用 Transformer,其中,你知道,卷积或递归状态被完全移除,对过去的条件完全通过注意力机制完成。

无论你选择什么,你最终都会得到相同的损失函数和大致相似的行为。

然后,你还没有,你知道,给定这个嵌入了过去的神经网络,将其作为某种高维向量,然后将其通过网络的输出层,其工作基本上是参数化预测。所以,无论你的预测是什么,接下来会发生什么。最常见的是 softmax 分类,那么你的输出层只是给你这个预测的参数。

好的,只是为了看看它是如何工作的,对于一个循环神经网络语言模型,这可能是我们最早的神经网络语言模型之一。杰弗里·辛曼早在 90 年代初就做过这个,寻找时间结构等等。系统有这个循环连接,它在每一步接收输入向量,并循环地将它们与前一步的自身状态一起输入,以构建一个表示任何时间点历史的状态。然后它根据这个做出预测。

所以,你知道,为什么,为什么我如此喜欢自回归模型?嗯,一个我认为已经很清楚的观点是,它们相当简单,对吧?一旦你选择了顺序,一切都只是,你知道,转动把手。损失函数已经为你准备好了,你不需要去想它。而且,它都是,你知道,它都是标准化的,而且你不需要,你知道,担心有正确定义的概率分布等等。

而且,一个相关的观点是,生成样本非常容易。所以,基本上,如何从 RNN,从自回归模型生成样本?你只需要在每一步从预测分布中选择一个样本,然后将其作为下一步的输入。我总是认为这就像神经网络的“做梦”一样,对于计算机来说。当我们做梦时,我们想象可能发生的事情,然后把它们当作它们已经发生过一样对待。

但实际上,使用自回归模型的主要原因,你知道,不像那个诗意。它只是因为它们在很多类型的数据上都能获得最佳的对数似然。特别是,我认为我们最关注的与通用智能相关的数据类型,如图像、音频、视频、文本。这些是数字世界的四种感官,对吧?这些是你可以在互联网上找到的东西,而且你可以在大量数字化内容中找到它们。

当然,这些类型的模型也有缺点。第一个是它们非常昂贵。你知道,就像,你知道,数据基本上,你知道,你拥有的预测数量与数据中的片段数量一样多。所以,如果你将你的高密度视频分解成单个像素或单个颜色通道,你每秒要进行数百万次预测。即使是今天的计算机,这也变得非常昂贵。你可以在训练期间通过并行化来缓解这个问题,但这在生成期间不起作用,因为在生成期间,它必须是串行的。你必须从预测分布中选择一个,然后输入它,然后再次选择一个。

有这个顺序依赖问题。所以,正如我所说,预测的顺序确实很重要。而且,我想,这紧随其后的是,你无法轻松地按顺序填充缺失的数据。我想马可·奥雷利奥将谈论这一点。所以,我说的填充,例如,给定,你知道,一个句子和一些缺失的单词,填补缺失的单词。自回归模型在填充可能的未来或猜测可能的未来方面做得很好,但不能填补过去的一部分。

现在,原则上,你可以做一些类似束搜索的事情,并尝试推断出这些词必须是什么,即使使用自回归模型,但它非常笨拙。

另一个很多人担心自回归模型的问题是这个“教师强制”的想法。所以,基本上,因为系统总是被训练来预测一步,它从未学会如何生成多步。我认为这通常被认为是自回归模型在生成建模方面的缺点。人们说,哦,它们无法生成长序列。根据我的经验,现代自回归神经网络实际上可以生成非常令人信服的长序列。

无论如何,从无监督学习的角度来看,这不是问题。问题在于,通过只预测一步,它们学习到的是一种近视的表示。我们又回到了“比特不平等”的问题。它们只关注下一个比特,下一个预测,而不是数据的大规模结构,而这正是你真正想要的。

好的,所以,快速回顾一下,你知道,为什么,你知道,语言建模在哪里?抱歉,自回归模型在数据方面处于什么位置?你知道,在语言建模中,我认为很清楚它们在某种意义上确实占主导地位。语言模型一直都是自回归的,这是自然而然的事情,那就是预测下一个单词,给定前面的单词。

这张幻灯片展示了,你知道,它已经变得多么先进。如果你看看这些结果,你可以看到,如果你,如果你对困惑度数字有所了解,它们变得非常低,这些巨大的神经网络模型。而且,你知道,作为一个生成模型,它们也变得相当令人印象深刻。这些引文中的一半是生成的,一半不是。它们根据哪个是哪个进行了颜色编码。你知道,如果你看看它们,并试图决定哪个颜色是真实的,哪个颜色是假的。你知道,老实说,我不得不问奥雷利奥·维尼·奥尔斯,他给了我这张幻灯片,哪个是哪个。但实际上,红色的是假的,绿色的是真的。

好的,你们中的许多人可能听说过 WaveNet。你知道,WaveNet 是一个稍微不同的环境。它不是纯粹的无监督。你有一个条件信号,对吧?你有一个文本信号,从这个文本信号中生成数据。但它主要是无监督的。所以,即使你在没有文本的情况下运行 WaveNet,它已经生成了非常令人信服的音频,生成了一种包含真实单词甚至单个短语的杂音。

对我来说,当我看到 WaveNet 时,我感到很惊讶,仅仅是因为它必须生成的音频数据的巨大数量,数据的频率。所以,你知道,每秒 16000 次预测,16 千赫兹,生成原始音频。而一个网络可以做到这一点,并且可以在很长的时间内保持连贯。而且,你知道,现在,我认为这已经是音频生成领域的最新技术了。

那么 Pixel RNN 呢?这是一个有趣的问题。当我们将自回归模型应用于图像时会发生什么?嗯,这里的顺序问题确实变得很重要,对吧?就像,你想预测图像中的所有像素,但你必须给出一个特定的顺序。

所以,在语音中,你知道,任何时间性的东西都有一个清晰的顺序,就像你预测每个音频信号,基于上一个,基于上一个,有一个时间顺序。在 Pixel RNN 中,它几乎是随机的,你知道,不是随机的,而是任意的,对吧?你只是必须选择一个顺序。

所以,这里有一种栅格扫描顺序,经常被使用,其中,你知道,像素 Xi 在这里,它被预测,基于到目前为止所有其他已揭示的像素。

另一个重要且令人惊讶且重要的事情是 Pixel RNN,实际上 WaveNet 也是如此,那就是,尽管它建模的是本质上连续的数据,尽管它是离散化的连续数据,但它使用 softmax 输出。所以,它将这些,它实际上应该更具体地说,它实际上建模的是每个像素的单个颜色通道。每个像素中的单个 RGB 数字。每个像素有三个预测,每个都基于之前的像素,比如蓝色基于红色和绿色,依此类推。

而且,它将这些数字,这些数字,你知道,0 到 255 之间的数字,视为 256 个完全不同的类别,这乍一看似乎很奇怪,因为它丢弃了我们拥有的信息,即彼此接近的数字对应于相似的颜色。128 比 129 更接近 255,作为一个颜色通道,但不知何故,只是忽略了这一点,并将其视为独立的类别进行训练,效果比将其视为连续的要好。

所以,你可以用混合模型而不是 softmax 来运行这种模型,但用 softmax 效果更好。它会产生在 ImageNet 上训练的样本,原始 Pixel RNN。而且,这些都是,你知道,在图像生成方面,这些都是两年前的,它们已经很过时了。我稍后会展示一些更好的图像,但它会产生纹理,以及,你知道,你可以看到这些真实图像的一些风味。但它们没有,你知道,它们有局部结构,没有全局结构。基本上,它们,乍一看,它们似乎证实了关于自回归模型的所有说法,即它们无法捕捉全局结构。

有趣的是,当你开始以数据中给出的标签为条件时,你立即就能获得更多的全局结构。而且,这并不是 Pixel RNN 的特定之处,这对于生成模型来说普遍如此。而且,这又回到了“比特不平等”的问题。所以,乍一看似乎很奇怪,你正在以一个只有,你知道,最多 1000 比特的条件来建模,突然你的图像看起来好多了。

但当然,对数似然不会比 1000 比特的对数好多少,对吧?你知道,信息进多少,信息出多少。所以,对数似然变化不大。生成的,看起来是我们关心的东西,高层结构,变化很大。这经常被用作反对密度建模的论据。

但我们可以更进一步,说,嗯,如果我们证明,我们说,这个顺序是任意的,这个栅格扫描顺序,如果我们改变它呢?对吧?我们可以以任何我们想要的方式这样做。

所以,有一篇非常近期的论文,叫做 Subsample Pixel Networks,基本思想是采用这个,这个自回归图像生成器,并改变自回归预测的顺序。所以,现在你有一个图像被切分成,比如说,如果它是 128x128 的图像,你将其切分成四个 32x32 的切片。你对每个切片进行自回归建模,然后你对下一个切片进行建模,以之前的切片为条件,依此类推。

而且,这里还有其他技巧。例如,每个通道内的实际比特也被重新排序,这样较低的五位比特就会被预测,然后高频比特会在最后被预测。所以,有很多巧妙的重构。而且,图像质量有了真正的飞跃。例如,以及当前硬件可以合理建模的图像尺寸的飞跃。

所以,原始的,有一个实际方面。所以,如果我们看看这些从 CelebA 生成的人脸,它们还没有达到 GAN 生成人脸的水平,但它们已经变得相当令人信服了,对吧?我的意思是,你可以看到,再迭代几次,我们可能会有,你知道,自回归的,你知道,纯粹的对数似然模型生成我们无法分辨真假的图像。

而且,在 ImageNet 上,ImageNet 是一个更难生成的数据集,因为它更通用。但你真的可以看到,这里有更多的全局结构。比如,这显然是一只狗,你知道,在中间的顶部,等等。

而且,你知道,即使是视频,你也可以应用这种完全自回归的方法。通常,你会在,目前,相对低分辨率的视频上进行观察,因为,你知道,建模如此多的数据相当困难。

好的,所以,稍微回顾一下,你知道,一个对我来说相当怀旧的自回归模型是我的手写合成网络。该网络被训练来一次生成人们的手写。有趣的是,它回到了连续与离散的争论。这是一个完全连续的模型,事物没有被离散化。相反,在每个时间步都有一个混合密度模型,它预测二维密度,比如下一个点的 XY 坐标。

这个数据被记录为一系列 XY 坐标,XY 点,就像有人用笔书写一样。这个东西显示了密度图的样子,你可以看到它非常丰富,有很多结构,有很多协方差。它不仅仅是,你知道,找到下一个点的平均值,它实际上在塑造预测。而底部的这个部分显示了它在预测它们时如何在不同组件的权重之间切换。

好的,继续。我的意思是,到目前为止我们所谈论的都很好。至少这些自回归模型给了我们一个机会,让我们能够以一种相当连贯的方式来建模无监督数据。但最终,它不是关于建模数据,而是关于在某种意义上表示数据。这才是我们真正关心的。

我们真正关心的是利用无监督学习来泛化到新的任务。我们真正关心的是表示。所以,我思考表示学习的方式是,深度网络的工作方式是,它们学习输入数据的复杂且通常是分层的表示。每一层都代表了下面的一层。

而我思考它的方式是,一种网络用来描述数据的内部语言。而这,我认为是这里的关键。这里有一种描述正在发生。这意味着你可以从一个相对简单的任务,如物体识别中获得一种功能性语言。如果你必须识别帽子,那么你可能有一种语言,它能识别尖耳朵、胡须和尾巴。如果你把所有这些放在一起,那么也许你可以说,这是一只猫。

而且,我认为这非常有趣,因为它与维特根斯坦关于语言游戏的思想有关,他在他的哲学研究中提出过。而且,你知道,很久以前,这是 1930 年代还是什么时候。他谈到了语言,他实际上想说的是,我们如何拥有一种没有词汇的语言?我们如何获得一种在表达它之前就出现的语言?

而他所说的,你知道,只是两个人之间为了某种功能目的而玩的语言游戏。所以,他的例子是,有两个建筑工人,他们正在合作建造一栋建筑。他们将学会一种关于砖块和石块的语言,“把这个梁递给我”,“把那个石块放在那里”,因为这是他们完成任务所需的语言。

所以,你们中的一些人可能已经看到了克里斯托弗·奥拉等人关于 Distill 的论文。如果你还没有看过,我强烈推荐你看看,它们非常漂亮。它们对这些大型卷积网络内部发生的事情进行了惊人的详细分析,这些网络可以对 ImageNet 或类似数据集进行分类。

而且,它们发现了一种视觉词汇,它在网络底部开始,具有像边缘和方向这样的低级事物,然后构建到更像纹理、图案,然后是复合事物,如眼睛、书架、文本、铆钉、鸟类,并将它们进一步构建成完整的物体,如房屋、狗、轮子等等。

所以,我的意思是,从中可以得出的一点是,实际上,你知道,即使监督学习在输入到系统的比特数量方面非常有限,但它从中学习到了非常丰富的东西,对吧?它学习到了相当复杂的表示。

那么问题是,嗯,我们是否期望无监督表示做得比这更好?而且,你知道,答案必须是肯定的,我们希望它们能做到。所以,你知道,最终你可以从图像识别中获得很多东西。但当然,它总是受限于任务的要求。所以,如果你要做的只是识别物体,你可能不需要内化物理定律。例如,你不需要了解太多关于世界的事情。你只需要学习,你知道,任何能帮助你解决特定问题的东西。

而且,我认为背后的指导原则是。

无监督表示学习是指表示应该更通用,对吧?任何有助于您对世界进行建模或预测的事情都应该值得在您的无监督系统中进行表示,并且这应该有助于您进行泛化,这就是理论。因此,正如我所说,我们真正想要的是一个能为我们描述数据的神经网络。所以您会想到这些,你知道,图像字幕实验,人们拍摄图像,然后自动,你知道,训练它们从图像映射到字幕,比如“一个人站在火车平台上”之类的。我们希望网络能够为我们做到这一点,适用于各种数据,并且我们希望在某种意义上从网络中获得这些描述,或者至少,哦,真的抱歉,我看到我花了比我想象的更长的时间,我不得不稍微缩短我的演示文稿,也许我们会稍微占用一些问答时间,好的,所以我们想获得这些描述,我们该怎么做?过去探索过的一种方法是自动编码器,所以我们编码数据,将其放入一些压缩的潜在表示中,然后我们解码,其思想是,通过压缩这种潜在表示的行为将强制生成可用且易于访问的表示,您可以在其他地方重复使用。现在,这是一种概括,而不是仅仅,你知道,压缩这个瓶颈,例如通过使其更小,使用更少的隐藏单元,您可以采取一种信息论方法,并查看表示潜在信息的编码成本。我认为我真的很不幸,我不得不跳过很多内容,也许我可以给你一点点品尝,一些,一些,所以关联压缩网络是我最近一直在研究的一种网络类型,它们是一种摆脱变分编码器一个众所周知的问题的方法,即当你使解码器强大时,代码往往会被忽略,解码器往往会接管,而非常关联的压缩网络通过允许代码的先验条件是相似的代码和潜在空间中附近的事物来摆脱这种情况,您会在潜在空间中获得这种自然的聚类和分层,而高层想法是,而不是学习,而不是学习单个数据点,您在这里所做的是学习整个数据集,您整体地查看数据集的结构,并说我如何表示其中的内容。因此,想法是您获得的高层信息应该组织低层数据,而不是仅仅单独注释它,您必须查看论文以获取详细信息,但如果我们看看,比如说,这是一组由关联压缩网络重建的图像,所以显然这里的质量再次,你知道,不是那么高,这主要是解码器的功能,以及我们为了计算目的将图像缩小到非常小的尺寸,32x32,但这里的想法,真正的,这里的重点是表示,而不是图像质量。那么这里发生了什么?嗯,如果你看看,比如说,最左边的列中的这些图像是原始的,真实的图像,然后它们右边的图像是从该图像重新生成的。所以让我们看看从顶部数第二个,你可以说,这里的潜在表示是什么?似乎网络已经描述了,我刚才说我们想要这种字幕或图像的描述,而字幕可能是“一个留着黑发、留着胡茬的男人正对着镜头微笑,背景是浅色的”。然后它将该描述传递给解码器,并说“好的,现在根据该描述创建一系列图像”,它或多或少就是这样。我的意思是,它们并不完美,但它通常捕捉到它们看起来都是男性,它们通常在微笑,姿势是正面朝向的,等等。所以它显然捕捉到了我们想要捕捉的数据的这些高层属性,您也可以从重建中看到这一点,实际上您也可以从分类结果中看到这一点。所以,你知道,表示学习的一个持续的事情是如何评估您的表示有多好。通常您会查看某种下游任务,如果我们采用这种表示并将其馈送给一个简单的分类器,它能否告诉我们,例如,我们正在查看哪个数字?是的,它可以。好的,我将不得不跳过很多东西。哦,我想说的一件事是,互信息是表示学习中一个非常重要的概念。正如我所说,我们想要描述数据的好代码,从数学上讲,这意味着我们希望最大化代码与数据之间的互信息。因此,编码器或变分编码器或这些关联专业人士实际上都隐式地做到这一点,因为使用潜在空间中的样本(潜在代码)解码数据与在没有该潜在样本的情况下可以进行的最佳解码之间的差异是互信息的下界。这意味着每次您最小化重建成本时,您都在提高互信息的这个下界。但这似乎是一种笨拙的方法,对吧?我们想要的只是代码,而所有这些解码工作似乎非常昂贵。我们试图做的只是最大化互信息,还有其他方法可以做到这一点吗?最近有一篇论文“具有对比预测编码的表示学习”,它有一种非常巧妙的方法来做到这一点。所以,而不是在这种情况下,您有一个音频信号,来自信号的某个部分的代码 C,而不是像自动编码器那样尝试解码——我应该说,与自动编码器不同,这里的系统是预测性的。它不是通过一个瓶颈来重建相同的数据,而是获取代码并使用它们来预测未来数据。但它不是通过精确重建来预测,而是尝试找到两个代码并以更直接的方式最大化它们之间的互信息。好的,我不会详细介绍,没有时间了,但它基本上使用了这种噪声对比估计的思想,即给定代码 C 和代码 said,取大量其他可能成为 said 的代码。在实践中,您会有一个大的训练样本小批量,您会从批次中的其他元素中获取那些与 C 不相关但来自其他音频序列的东西,然后您会问,您能区分这个下一个代码与之前的代码有多好?您能否在负样本的背景下预测它是什么?您必须相信这一点,但这基本上为您提供了互信息的另一个界限,并提高了代码对数据的这种描述性。至关重要的是,您预测得越远,您预测的窗口越大,您看到的高层特征就越慢变化。您可能从低层的东西,比如音素,到高层的东西,比如单词、韵律或类似的东西。而且结果在实践中非常好,你知道,考虑到这是完全无监督的,然后只是在上面放了一个线性分类器,您获得的分类率并不比完全监督的方法差多少。同样,当您在 ImageNet 上进行操作时,它的表现优于当时所有其他无监督方法,至少是当时存在的。那么现在,我还有多少时间?好的,这将是一次真正的快速浏览,不幸的是,我应该留出更多时间来谈论无监督强化学习。你知道,你可以利用无监督学习进行强化学习的最简单方法是将其视为一个辅助任务。基本上,您有一个单一的网络,它既最大化奖励,又最小化一些无监督损失,并且关键是同一个网络,因为基本上这里发生的是,如果无监督损失会影响该网络内部形成的表示,那么这些表示应该有助于它执行任何超级,任何它必须执行的强化学习任务。所以这真的是这个想法的直接表达,你知道,学习结构并表示它能让你更好地泛化。是的,我将不得不,你知道,跳过重点,但在实践中,这确实有效,而且它正在变得,实际上,你知道,在可能,你知道,几年内,这已经成为现代 RL 代理的标准技术,添加这些辅助损失。在这里,我们展示了在添加了——首先,他们查看了输入重建,这是一种非常直接的,只是对所有像素进行建模,然后他们查看了一些其他,你知道,更有效的辅助损失,并且确实改进了基线。好的,跳过,所以一种更根本的将无监督学习与强化学习相结合的方式是说,无监督学习实际上可以指导策略,它不仅仅是关于塑造表示,它指导策略,在这一点上,您有一个内在激励的代理。代理只是被它在环境中看到的东西、它能发现的东西、它能控制的东西所激励,而没有外部奖励。与无监督学习的其余部分一样,有很多方法可以做到这一点,而且没有共识哪种方法是正确的。我将非常快速地浏览一下,它有两个主要分支。其中一个是通过引导代理走向新颖的观察来奖励代理的好奇心,从中它可以快速学习。有很多方法可以做到这一点。去年有一篇关于好奇心驱动探索的论文,我监督预测,它在这里产生了很大的影响,它只是在潜在空间中进行预测,并寻找那些提供不可预测的潜在值的点。所以这是一种将您引向您不知道的东西,并远离您知道的东西的方式。还有很多其他定义好奇心的方法。Jürgen Schmidhuber,他可能在观众中,也可能不在,他定义了可能是最最有可能的好奇代理。我在这里给它起了个错误的名字,抱歉,它不应该说“复杂度增益”,而应该说“压缩进度”。想法是您正在寻找数据,这些数据不仅有助于您了解该数据,还有助于您了解您曾经观察过的所有内容。如果您有您过去的所有记录,换句话说,一个记忆,那么您所说的是,这个新的观察能教会我多少关于我一生中曾经学到的所有东西。所以这显然是一个非常宏大的事情,但我想它具有,它具有这些其他好奇信号所缺失的一个非常有趣的属性,那就是它有点回顾性,它告诉你,你想学习事物来告知你过去。最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个,最后一个, last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last and last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last last

你从英文数据侧取一个句子,对其进行编码,得到一个字母表示。从这个字母和表示中,你对其进行解码,得到一些意大利语的翻译,对吧?所以你可以想象这个编码器和解码器是一个循环的,它也可以是一个变换器,它可以是任何东西。但现在我们没有英文句子任何一句的真实翻译。所以我们所做的,就像在计算机视觉中一样,我们将其馈送到另一个序列到序列模型,该模型接收这个句子,并从中开始一个拉丁表示,然后重建原始的英文句子。现在我们有了一种方法来计算这个 Y 和这个 Y 双撇号之间的重建误差。但现在,就像在循环时间中一样,我们需要添加另一个约束来确保这个中间句子是一个有效的,在这种情况下是意大利语句子。所以,在循环计数中,在这个空间中进行了对抗性训练。但现在,在机器翻译中这样做有点困难,因为我们有一个离散的标记序列,对吧?所以我们不太清楚如何以非常有效的方式进行反向传播。所以,我们没有这样做,而是我们进行了有噪声的编码,以确保解码器生成流畅的句子。好的,所以你取你的输入句子,你添加噪声,我说的噪声是指你删除单词,你软交换单词,你迫使你的解码器去构建原始的明文句子。所以现在当解码器被使用时,它将总是生成流畅的句子,因为它已经学会了数据中的规律性。最后一个问题是,如果你只做这个,效果不会很好,因为解码器有可能作弊,也就是说,当你输入同一语言的句子时,它可能会很好地重建。所以当你做底部的时候,但当你翻译时,它可能无法很好地重建。所以你需要确保编码器产生的表示在进行翻译和进行语言建模时是相同的。因为如果你使用字母空间的两个不同部分,那么这将不会奏效。所以有几种方法可以做到这一点。如果两种语言相关,我们共享编码器中的所有参数,并且我们联合学习词嵌入,我们将单词分解成子词。所以有很多重叠,因为我们将有很多子词出现在两种语言中,比如英语和法语,对吧?如果两种语言不相关,那么我们就应用我之前描述的算法来对齐词嵌入,并且我们共享编码器中的所有参数,以及这个潜在表示。所以,如果你将这个应用于大型数据集进行机器翻译,你会发现这种方法比以前的方法在同一任务上效果更好。并且请记住,在 2018 年之前,在这个大型基准上的性能基本上为零。我们离有监督的最新技术还很远,但仍然,如果你进行这些翻译,它们实际上是有用的,你可以阅读它们,而且它们相当不错。如果你只是给你一个想法,我们使用每种语言 1000 万个单语句子获得的性能,与使用 10 万个并行句子获得的性能大致相同,就像你使用 10 万个并行句子进行有监督训练一样。对于像英语、法语、英语、德语这样的语言,它也适用于更遥远的语言对,比如你这样做。所以这里有一个例子,如果你从未见过它,它看起来像阿拉伯语,但这种语言与印地语相关,所以在这种情况下,这很有趣,因为实际上存在英语和它之间的并行数据。但它就像基因翻译一样,就像电影字幕翻译一样。所以如果你不想说翻译新闻,它效果不太好。但现在如果你使用单语数据,你知道如果你抓取新闻网站,但用英语,你会这样做,然后你使用这个无监督的方法,你实际上比使用并行数据集做得更好。所以这里的总体思想是,为了对齐两个领域,有几个原则适用范围相当广泛。一个是循环一致性,所以如果你映射到一个领域,你需要能够回到原始领域。第二个是约束,我的意思是,当你映射到一个领域时,你生成的东西实际上具有你想要拥有的领域的相同特征。让我用一些关于我们面临的挑战的讨论来结束。在我看来,第一个也是最大的挑战是定义好的指标。所以,比如说,让我们考虑一个有监督的 Spitzer 学习。对一套好的下游任务和指标来评估 NLP 中的特征学习方法达成共识将是非常好的。在这方面已经做了很多工作,我们有像 Santaville 这样的基准,就像我之前为生成描述的 Blue 基准一样。这甚至更棘手,因为有很多合理的方式来预测下一个句子会是什么,对吧?所以,同样,在 NLP 中,在这方面已经做了很多工作。对于像机器翻译这样的特定应用,你可以将其视为一个条件生成任务,每年都有一个比赛,有一堆不同的指标以不同的方式对评估进行切片,并且有非常大的基准来比较不同的模型。在对话中,有一个评估对话系统的平台。但例如,在计算机视觉中,社区正在团结起来,达到一个共识的水平,如何评估模型,我认为这是一个巨大的挑战,甚至更重要的是,我认为这是一个巨大的障碍,甚至比设计更好的模型更重要。因为如果我们没有一套好的任务和指标,就很难比较模型并评估我们是否取得了任何进展。所以第二个挑战是推广我们的无监督学习算法。所以,例如,在 NLP 中,我描述的指标是基于从句子中预测一个缺失的单词,对吧?但如果我有一个缺失的片段呢?如果我想从一个句子中提取特征,而这个句子缺少任何部分呢?我想能够做到这一点。在计算机视觉中,有监督学习显示出很大的希望。但同样,每个辅助任务都不同,取决于数据,所以我们需要设计多少任务才能获得对数据的更全面的看法?正如 Alex 之前提到的,自回归模型也有局限性,对吧?因为你需要定义一个顺序,并且根据应用,你的顺序可能非常关键。然后你还需要考虑效率。所以,当生成这些模型时,它们可能会很慢。所以我不知道正确的答案是什么,但让我描述一个更通用的框架,看看它的优缺点。所以,在 Multan 框架中,是 Omnicom 的基于能量的模型框架。所以这是一个边际框架,因为本质上,你只需要定义一个能量函数。所以,对于每个输入,在某个点,你都需要能够分配一个标量值,并且这个能量函数是参数化的。学习的目标是确保能量在训练数据的高密度区域较低,对吧?正如你在图片中看到的,训练就是塑造这个能量函数。所以,为什么这有用呢?好吧,假设你有一些缺失的变量,好吧,假设你向你的输入数据点添加噪声,为了 Denalis,你可以做的是,你可以在你的能量表面上进行搜索,找到离你的起始点最近的最小值,对吧?因为能量函数是由一些深度神经网络参数化的,具有确定性或随机变量,你可以从任何变量子集中提取特征。但这有一个缺点,缺点是学习这些能量函数非常困难。因为你只观察到正样本,如果你想学习这些对比函数,你需要能够幻想负样本。而且,如果你在高维空间中工作,你需要将能量推高很多很多点,这可能是不可行的。有不同的方法来定义负样本,通过搜索,通过简单地使用像对比散度这样的东西,因为它真的很难,因为空间太大了,无法明确地提高能量,你可能想考虑其他方法,比如如果你使用一个编码器,并且你的能量函数是重建误差,一种约束模型的方法是有一个瓶颈。所以,说,如果我的代码是低维的,或者它是稀疏的,如果你注入噪声,那么我就没有足够的代码来很好地重建每个输入数据点。所以,如果我没有足够的代码,并且我需要很好地重建我的训练样本,那么必然我会在有噪声的数据上做得更糟,对吧?所以,我的动画可能不起作用,但你明白了,如果你喜欢移动这个抛物线,好吧,你在高密度训练数据的地方放一个最小值,必然,你也有高密度,所以概率很低,假设。所以你看到有一个权衡。所以你想很好地模拟你的数据,你的数据可能在高维空间中,可能非常非线性,对吧?所以你想有一个非常灵活的模型,同时,你需要使这个对比度变得非常非常困难。所以,问题是,有没有更好的方法来提高这个能量函数?有没有比这个更通用的框架,更可行?以及在多大程度上我们可以设计损失和框架,使其与架构和应用无关,对吧?因为我使用卷积神经网络的事实给了我很多很好的偏见,并约束了我的搜索空间。第三个挑战是关于不确定性。所以,每当你进行高维空间预测时,通常有很多合理的方式,有很多可能的未来结果。所以,例如,有很多方式可以完成句子,这些方式都是合理的,对吧?所以有很多方法可以处理不确定性,你可以有潜在变量,你可以使用枪支等等。问题是哪种方法更适合,哪种方法更有效。让我最后说一句。我们对无监督学习的兴趣是因为我们想在更少的监督下学习,就像 Alex 所说的,我们不关心在一项任务上做得好,我们想学习一种技能,对吧?所以我们想从更少标记的数据中更有效地学习。机器学习中有许多领域有相同的目标,即用更少的数据学习,以便能够在这里转移知识。我只提几个。所以,也许一种思考无监督学习的方式是在更广泛的背景下。所以,也许一种处理有监督学习的方式是通过采用这些其他学习设置并逐渐减少监督。更一般地说,我认为我们不应该孤立地看待无监督学习。所以,如果我们回到 Ali Khan 的那个不错的比喻,你不应该只想要那个,或者只是感觉到了情况。你真的想拿一整块,对吧?所以我的意思是,我很难想象没有利用观察到的信息,如何才能让强化学习很好地工作。同时,我很难想象如何才能在孤立地看待它时成功地进行无监督学习。所以它必须是一个更大系统的一部分。如果你的学习系统的另一个组件接收到一个稀疏的奖励,这可能不足以训练你的参数。关于你可能想考虑的好的无监督任务。所以结论是,无监督学习实际上是关于让代理或模型在与老师的互动更少的情况下进行学习。有几种应用,其中一些已经相当成功,但总的来说,存在开放性的问题。一个开放性问题是关于定义好的指标。另一个大问题是关于使我们的算法更通用,效率如何。第三个是关于将无监督学习整合到你学习系统的更广泛背景中。有了这个,我想感谢你,我很乐意回答你的问题。现在,掌声。所以,大约有两个问题的时间。然后,就像我之前问的,如果你能稍等一下,直到我们进行问答环节,而不要离开房间,当然,人们会这样做。所以,我们有任何问题吗?所以,有时间了。哦,是的,请。你能找到那个麦克风吗?然后问一个问题。是的,在最后面。当我们等他去麦克风的时候。是的,麦克风工作吗?所以,感谢您的教程。您能否评论一下所有这些漂亮的无监督学习工具如何可能对异常检测任务有益,无论是图像还是视频?所以,现在,我想说,这是主流任务。但你可以看到无监督学习实际上是只从正数据中学习。所以,基本上,进行 S&T 估计,找出离你观察到的数据点很远的数据点。所以,我想说,在其他社区,我想说异常检测是无监督学习的应用。虽然我想说,在机器学习中,那不是。主要驱动力主要是关于建模数据和为其他任务学习表示。我同意这一点。一分钟。我们说,显然,异常检测作为一个有监督问题,问题是,你知道,大规模不平衡的数据集。而我想,在某些情况下,你可以免费获得无监督学习。如果你有一个好的数据模型,那么你就可以看到,你知道,某事在这个模型下的可能性有多大。你知道,异常检测应该相当自然地跟随,我想,从一个好的无监督模型。如果你理解正确,你提到过,在某些情况下,架构比 GAN 的训练方式和损失函数更重要。你能详细说明一下吗?哦,GAN 的情况。我指的是,如果你看看,所以,卷积神经网络给你一个非常好的起点,对吧?它们设计得非常好,具有很好的归纳偏置。而且,现在,你看到很多方法,从自回归模型、GAN、潜在变量模型,都能够生成相当逼真的图像。所以,似乎有足够的证据表明,与损失函数相比,架构的选择通常对生成质量更重要。所以,如果你使用一个具有弱卷积网络的 GAN,我不知道,它没有最新的归一化层,那么生成的效果就不那么好。而且,如果你也使用其他方法,比如,你知道,Alex 提到的自回归方法,你也可以获得像 GAN 一样好的生成效果。当然,还有一个问题是如何评估不同的模型。现在,对于图像生成,有很多指标。我认为它们并不特别令人满意,在我看来。所以,也许这不是定义好的指标来评估这些生成模型的质量的问题。当你在这个上下文中说架构时,你的意思是什么类型的架构,还是?我的意思是,我指的是你使用的生成器的类型,将高斯分布的样本转换为数据点的函数。所以,你使用的参数化函数是什么?库克,谢谢你精彩的演讲。我真的很喜欢你对特定领域内表示学习的覆盖以及科学的最新进展。你能评论一下跨越非常不同领域,例如图像和文本的科学的最新进展吗?这个领域是否有工作正在进行?音乐。是的,有很多关于多模态学习的工作。所以,从视频、文本、图像中学习。事实上,从其他模态中学习的无监督学习方法有很多令人兴奋的进展。所以,是的,当然。抱歉,我以为我只有一两个参考。但有一个整个子领域在这方面工作。只是快速的。你认为我们可以使用像 CycleGANs 这样的东西做类似的事情吗?当然,这确实取决于应用。因为对于某些应用,比如说,你想做无监督语音识别。当你从文本到语音时,有一些挑战。也许当你朝这个方向发展时,比从语音到文本时有更多的歧义。所以,我不想过度概括。但我会说,总的来说,有很多这方面的工作。对于某些应用,它不太明显,对于其他应用则更明显。我想问一下,我们是否可以访问演示材料?当然。它将在明天上传到我们的网站上。我们将在下午上传一个 PDF。所以,请查看我的网站。这是一个好问题。在最坏的情况下,我会尽可能多地发推特,这样你就可以在明天左右访问这些幻灯片。是的,我们也会在会议页面上放一个链接。它肯定会公开。谢谢。好吧,感谢您参加本次教程。本次教程到此结束。