From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 97713C433F5 for ; Wed, 9 Mar 2022 02:21:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=Gf0Mtu/Tq0sepbIcDgUVyzUd6b6hsulQcpBcoGIGYTo=; b=SZK/F/7Ny/7PCt1QCFDGAw2WMZ NyEanDQ4oZyIxBIV/dmyUtPA3GNItJTNnexcOAhiw9NpjpjVVHAeDtTd0626U1xuFPNnzHKmO5ZPR LIrO2DIX6B82k6nUtu8L/JesdhA5IxJt3qtF35s4Kt1+uZPEym+lFdDw3w1pV6+MdUbjIXzthFVqK G5954D0A0hpWQms5e9aouBq/cR9sXgINk9KSQ7t8UN37/UEQdnJH7MDKESzRoE+iewJPV0nTcBRRQ z7J4vLTt5rJk60M0Lmx9GVWM2gAZdm/F7DPiRc96FRxMc7VpLLFYDDmsNgvDCqa64LfVwnGrB91qe MpifA65Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nRlvW-006wiJ-LV; Wed, 09 Mar 2022 02:19:47 +0000 Received: from mail-io1-xd49.google.com ([2607:f8b0:4864:20::d49]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nRlpa-006uPM-0E for linux-arm-kernel@lists.infradead.org; Wed, 09 Mar 2022 02:14:00 +0000 Received: by mail-io1-xd49.google.com with SMTP id y3-20020a056602178300b00645d25c30c1so795888iox.6 for ; Tue, 08 Mar 2022 18:13:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=QDWpCpn+veRklE4xrlCJW0/iT9CAlZeuw7Pgjvey8tc=; b=LwmKue/K4g8qyMWnLJAwsFCHHM2jHDxS5JaFvqqCuVAKgH0JvEHfSH5vPyCio6sT0u 9KOrzTKjK+KEVHAYQbLP1Qa0G15mvhK7OrbaRIS3CEnUdyBsmZRCPABlsT+Wr5vAQvfk qWYP4W6Y+6cH7YFU7jZX1lMrPgrS7uE0sqRV+tVoFpIDdNjq1VFo9qcMWv1LKpP8aKKl r8IIkWGsKCiBUf7up4QHHuBhDlyMwMdphEj+sHM44CUiis7me+TU0fdpA9sZJb/rsnOX wDGKNXSV6iSEpTvFQFl5TxBsxUv9rGXkuLhsee1va4gNFap/k7W2PoLYhXAFsghGVB7h yfbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=QDWpCpn+veRklE4xrlCJW0/iT9CAlZeuw7Pgjvey8tc=; b=WdVtm4tbgLDc0iVMBL2M2gOZKUrvyORDtHBl1OEjyAv3kErSFDEbabzyDHrqIuan+1 JFNNJ231aHjUxZg0d/+9VQiqC7JF1CydjBLEY8bsRLvLONbtpZB6b7zS7bxyiTdRVGH1 hQrB5Xv2Amae2HJEwZvqLdBiTKUAOiq/0EP+6C4QWFG5+QAl8R8abIgKrZvDT6M32aFm p2zoIUBD6y2cY8yjIfY8waZXvVtCCeD6qWh5vDoV/f/lux9mqw9ZltEzGYtza0oJPiht WQ3pMSsMYmOLWOp6BPI0ffff2vQQHtFgL+MAS2wGjk68yGkYWw0n9idedfvuM+ZMpeMt o5Pw== X-Gm-Message-State: AOAM5336q4gx8zsAKgCcd/NTVNt7EOp4RhrBtYNRTg46HrLyJgXuSk9q b/fl0f2lehjv+HSk13Oxa60C6UGEr8s= X-Google-Smtp-Source: ABdhPJwfs0mN8Hub10rJwuhasVtnmdwLZAtr7BbolujSJTPgIY/Wcyc1DT5tuy8xuNIdoCEwh85bku8jjh8= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:57a6:54a6:aad1:c0a8]) (user=yuzhao job=sendgmr) by 2002:a05:6602:2f0b:b0:644:c875:116b with SMTP id q11-20020a0566022f0b00b00644c875116bmr16867936iow.115.1646792015105; Tue, 08 Mar 2022 18:13:35 -0800 (PST) Date: Tue, 8 Mar 2022 19:12:25 -0700 In-Reply-To: <20220309021230.721028-1-yuzhao@google.com> Message-Id: <20220309021230.721028-9-yuzhao@google.com> Mime-Version: 1.0 References: <20220309021230.721028-1-yuzhao@google.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog Subject: [PATCH v9 08/14] mm: multi-gen LRU: support page table walks From: Yu Zhao To: Andrew Morton , Linus Torvalds Cc: Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Jesse Barnes , Johannes Weiner , Jonathan Corbet , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Rik van Riel , Vlastimil Babka , Will Deacon , Ying Huang , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, page-reclaim@google.com, x86@kernel.org, Yu Zhao , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , "=?UTF-8?q?Holger=20Hoffst=C3=A4tte?=" , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220308_181338_233919_DE7FFD92 X-CRM114-Status: GOOD ( 33.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VG8gZnVydGhlciBleHBsb2l0IHNwYXRpYWwgbG9jYWxpdHksIHRoZSBhZ2luZyBwcmVmZXJzIHRv IHdhbGsgcGFnZQp0YWJsZXMgdG8gc2VhcmNoIGZvciB5b3VuZyBQVEVzIGFuZCBwcm9tb3RlIGhv dCBwYWdlcy4gQSBraWxsIHN3aXRjaAp3aWxsIGJlIGFkZGVkIGluIHRoZSBuZXh0IHBhdGNoIHRv IGRpc2FibGUgdGhpcyBiZWhhdmlvci4gV2hlbgpkaXNhYmxlZCwgdGhlIGFnaW5nIHJlbGllcyBv biB0aGUgcm1hcCBvbmx5LgoKTkI6IHRoaXMgYmVoYXZpb3IgaGFzIG5vdGhpbmcgc2ltaWxhciB3 aXRoIHRoZSBwYWdlIHRhYmxlIHNjYW5uaW5nIGluCnRoZSAyLjQga2VybmVsIFsxXSwgd2hpY2gg c2VhcmNoZXMgcGFnZSB0YWJsZXMgZm9yIG9sZCBQVEVzLCBhZGRzIGNvbGQKcGFnZXMgdG8gc3dh cGNhY2hlIGFuZCB1bm1hcHMgdGhlbS4KClRvIGF2b2lkIGNvbmZ1c2lvbiwgdGhlIHRlcm0gIml0 ZXJhdGlvbiIgc3BlY2lmaWNhbGx5IG1lYW5zIHRoZQp0cmF2ZXJzYWwgb2YgYW4gZW50aXJlIG1t X3N0cnVjdCBsaXN0OyB0aGUgdGVybSAid2FsayIgd2lsbCBiZSBhcHBsaWVkCnRvIHBhZ2UgdGFi bGVzIGFuZCB0aGUgcm1hcCwgYXMgdXN1YWwuCgpBbiBtbV9zdHJ1Y3QgbGlzdCBpcyBtYWludGFp bmVkIGZvciBlYWNoIG1lbWNnLCBhbmQgYW4gbW1fc3RydWN0CmZvbGxvd3MgaXRzIG93bmVyIHRh c2sgdG8gdGhlIG5ldyBtZW1jZyB3aGVuIHRoaXMgdGFzayBpcyBtaWdyYXRlZC4KR2l2ZW4gYW4g bHJ1dmVjLCB0aGUgYWdpbmcgaXRlcmF0ZXMgbHJ1dmVjX21lbWNnKCktPm1tX2xpc3QgYW5kIGNh bGxzCndhbGtfcGFnZV9yYW5nZSgpIHdpdGggZWFjaCBtbV9zdHJ1Y3Qgb24gdGhpcyBsaXN0IHRv IHByb21vdGUgaG90CnBhZ2VzIGJlZm9yZSBpdCBpbmNyZW1lbnRzIG1heF9zZXEuCgpXaGVuIG11 bHRpcGxlIHBhZ2UgdGFibGUgd2Fsa2VycyBpdGVyYXRlIHRoZSBzYW1lIGxpc3QsIGVhY2ggb2Yg dGhlbQpnZXRzIGEgdW5pcXVlIG1tX3N0cnVjdDsgdGhlcmVmb3JlIHRoZXkgY2FuIHJ1biBjb25j dXJyZW50bHkuIFBhZ2UKdGFibGUgd2Fsa2VycyBpZ25vcmUgYW55IG1pc3BsYWNlZCBwYWdlcywg ZS5nLiwgaWYgYW4gbW1fc3RydWN0IHdhcwptaWdyYXRlZCwgcGFnZXMgaXQgbGVmdCBpbiB0aGUg cHJldmlvdXMgbWVtY2cgd2lsbCBub3QgYmUgcHJvbW90ZWQKd2hlbiBpdHMgY3VycmVudCBtZW1j ZyBpcyB1bmRlciByZWNsYWltLiBTaW1pbGFybHksIHBhZ2UgdGFibGUgd2Fsa2Vycwp3aWxsIG5v dCBwcm9tb3RlIHBhZ2VzIGZyb20gbm9kZXMgb3RoZXIgdGhhbiB0aGUgb25lIHVuZGVyIHJlY2xh aW0uCgpUaGlzIHBhdGNoIHVzZXMgdGhlIGZvbGxvd2luZyBvcHRpbWl6YXRpb25zIHdoZW4gd2Fs a2luZyBwYWdlIHRhYmxlczoKMS4gSXQgdHJhY2tzIHRoZSB1c2FnZSBvZiBtbV9zdHJ1Y3QncyBi ZXR3ZWVuIGNvbnRleHQgc3dpdGNoZXMgc28gdGhhdAogICBwYWdlIHRhYmxlIHdhbGtlcnMgY2Fu IHNraXAgcHJvY2Vzc2VzIHRoYXQgaGF2ZSBiZWVuIHNsZWVwaW5nIHNpbmNlCiAgIHRoZSBsYXN0 IGl0ZXJhdGlvbi4KMi4gSXQgdXNlcyBnZW5lcmF0aW9uYWwgQmxvb20gZmlsdGVycyB0byByZWNv cmQgcG9wdWxhdGVkIGJyYW5jaGVzIHNvCiAgIHRoYXQgcGFnZSB0YWJsZSB3YWxrZXJzIGNhbiBy ZWR1Y2UgdGhlaXIgc2VhcmNoIHNwYWNlIGJhc2VkIG9uIHRoZQogICBxdWVyeSByZXN1bHRzLCBl LmcuLCB0byBza2lwIHBhZ2UgdGFibGVzIGNvbnRhaW5pbmcgbW9zdGx5IGhvbGVzIG9yCiAgIG1p c3BsYWNlZCBwYWdlcy4KMy4gSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBhY2Nlc3NlZCBiaXQg aW4gbm9uLWxlYWYgUE1EIGVudHJpZXMgd2hlbgogICBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9Q TURfWU9VTkc9eS4KNC4gSXQgZG9lcyBub3QgemlnemFnIGJldHdlZW4gYSBQR0QgdGFibGUgYW5k IHRoZSBzYW1lIFBNRCB0YWJsZQogICBzcGFubmluZyBtdWx0aXBsZSBWTUFzLiBJT1csIGl0IGZp bmlzaGVzIGFsbCB0aGUgVk1BcyB3aXRoaW4gdGhlCiAgIHJhbmdlIG9mIHRoZSBzYW1lIFBNRCB0 YWJsZSBiZWZvcmUgaXQgcmV0dXJucyB0byBhIFBHRCB0YWJsZS4gVGhpcwogICBpbXByb3ZlcyB0 aGUgY2FjaGUgcGVyZm9ybWFuY2UgZm9yIHdvcmtsb2FkcyB0aGF0IGhhdmUgbGFyZ2UKICAgbnVt YmVycyBvZiB0aW55IFZNQXMgWzJdLCBlc3BlY2lhbGx5IHdoZW4gQ09ORklHX1BHVEFCTEVfTEVW RUxTPTUuCgpTZXJ2ZXIgYmVuY2htYXJrIHJlc3VsdHM6CiAgU2luZ2xlIHdvcmtsb2FkOgogICAg ZmlvIChidWZmZXJlZCBJL08pOiBubyBjaGFuZ2UKCiAgU2luZ2xlIHdvcmtsb2FkOgogICAgbWVt Y2FjaGVkIChhbm9uKTogK1s1LjUsIDcuNV0lCiAgICAgICAgICAgICAgICBPcHMvc2VjICAgICAg S0Ivc2VjCiAgICAgIHBhdGNoMS02OiAxMDE1MjkyLjgzICAgMzk0OTAuMzgKICAgICAgcGF0Y2gx LTc6IDEwODA4NTYuODIgICA0MjA0MC41MwoKICBDb25maWd1cmF0aW9uczoKICAgIG5vIGNoYW5n ZQoKQ2xpZW50IGJlbmNobWFyayByZXN1bHRzOgogIGtzd2FwZCBwcm9maWxlczoKICAgIHBhdGNo MS02CiAgICAgIDQ1LjQ5JSAgbHpvMXhfMV9kb19jb21wcmVzcyAocmVhbCB3b3JrKQogICAgICAg Ny4zOCUgIHBhZ2Vfdm1hX21hcHBlZF93YWxrCiAgICAgICA3LjI0JSAgX3Jhd19zcGluX3VubG9j a19pcnEKICAgICAgIDIuNjQlICBwdGVwX2NsZWFyX2ZsdXNoCiAgICAgICAyLjMxJSAgX196cmFt X2J2ZWNfd3JpdGUKICAgICAgIDIuMTMlICBkb19yYXdfc3Bpbl9sb2NrCiAgICAgICAyLjA5JSAg bHJ1X2dlbl9sb29rX2Fyb3VuZAogICAgICAgMS44OSUgIGZyZWVfdW5yZWZfcGFnZV9saXN0CiAg ICAgICAxLjg1JSAgbWVtbW92ZQogICAgICAgMS43NCUgIG9ial9tYWxsb2MKCiAgICBwYXRjaDEt NwogICAgICA0Ny43MyUgIGx6bzF4XzFfZG9fY29tcHJlc3MgKHJlYWwgd29yaykKICAgICAgIDYu ODQlICBwYWdlX3ZtYV9tYXBwZWRfd2FsawogICAgICAgNi4xNCUgIF9yYXdfc3Bpbl91bmxvY2tf aXJxCiAgICAgICAyLjg2JSAgd2Fsa19wdGVfcmFuZ2UKICAgICAgIDIuNzklICBwdGVwX2NsZWFy X2ZsdXNoCiAgICAgICAyLjI0JSAgX196cmFtX2J2ZWNfd3JpdGUKICAgICAgIDIuMTAlICBkb19y YXdfc3Bpbl9sb2NrCiAgICAgICAxLjk0JSAgZnJlZV91bnJlZl9wYWdlX2xpc3QKICAgICAgIDEu ODAlICBtZW1tb3ZlCiAgICAgICAxLjc1JSAgb2JqX21hbGxvYwoKICBDb25maWd1cmF0aW9uczoK ICAgIG5vIGNoYW5nZQoKWzFdIGh0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy8yMzczMi8KWzJdIGh0 dHBzOi8vc291cmNlLmFuZHJvaWQuY29tL2RldmljZXMvdGVjaC9kZWJ1Zy9zY3VkbwoKU2lnbmVk LW9mZi1ieTogWXUgWmhhbyA8eXV6aGFvQGdvb2dsZS5jb20+CkFja2VkLWJ5OiBCcmlhbiBHZWZm b24gPGJnZWZmb25AZ29vZ2xlLmNvbT4KQWNrZWQtYnk6IEphbiBBbGV4YW5kZXIgU3RlZmZlbnMg KGhlZnRpZykgPGhlZnRpZ0BhcmNobGludXgub3JnPgpBY2tlZC1ieTogT2xla3NhbmRyIE5hdGFs ZW5rbyA8b2xla3NhbmRyQG5hdGFsZW5rby5uYW1lPgpBY2tlZC1ieTogU3RldmVuIEJhcnJldHQg PHN0ZXZlbkBsaXF1b3JpeC5uZXQ+CkFja2VkLWJ5OiBTdWxlaW1hbiBTb3VobGFsIDxzdWxlaW1h bkBnb29nbGUuY29tPgpUZXN0ZWQtYnk6IERhbmllbCBCeXJuZSA8ZGpieXJuZUBtdHUuZWR1PgpU ZXN0ZWQtYnk6IERvbmFsZCBDYXJyIDxkQGNoYW9zLXJlaW5zLmNvbT4KVGVzdGVkLWJ5OiBIb2xn ZXIgSG9mZnN0w6R0dGUgPGhvbGdlckBhcHBsaWVkLWFzeW5jaHJvbnkuY29tPgpUZXN0ZWQtYnk6 IEtvbnN0YW50aW4gS2hhcmxhbW92IDxIaS1BbmdlbEB5YW5kZXgucnU+ClRlc3RlZC1ieTogU2h1 YW5nIFpoYWkgPHN6aGFpMkBjcy5yb2NoZXN0ZXIuZWR1PgpUZXN0ZWQtYnk6IFNvZmlhIFRyaW5o IDxzb2ZpYS50cmluaEBlZGkud29ya3M+ClRlc3RlZC1ieTogVmFpYmhhdiBKYWluIDx2YWliaGF2 QGxpbnV4LmlibS5jb20+Ci0tLQogZnMvZXhlYy5jICAgICAgICAgICAgICAgICAgfCAgIDIgKwog aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggfCAgIDUgKwogaW5jbHVkZS9saW51eC9tbV90eXBl cy5oICAgfCAgNzggKysrCiBpbmNsdWRlL2xpbnV4L21tem9uZS5oICAgICB8ICA1OCArKysKIGlu Y2x1ZGUvbGludXgvc3dhcC5oICAgICAgIHwgICA0ICsKIGtlcm5lbC9leGl0LmMgICAgICAgICAg ICAgIHwgICAxICsKIGtlcm5lbC9mb3JrLmMgICAgICAgICAgICAgIHwgICA5ICsKIGtlcm5lbC9z Y2hlZC9jb3JlLmMgICAgICAgIHwgICAxICsKIG1tL21lbWNvbnRyb2wuYyAgICAgICAgICAgIHwg IDI0ICsKIG1tL3Ztc2Nhbi5jICAgICAgICAgICAgICAgIHwgOTYwICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0KIDEwIGZpbGVzIGNoYW5nZWQsIDExMjkgaW5zZXJ0aW9ucygr KSwgMTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmlu ZGV4IDc5ZjJjOTQ4MzMwMi4uNjY5NmZiYmVjYmYzIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysr IGIvZnMvZXhlYy5jCkBAIC0xMDA2LDYgKzEwMDYsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChz dHJ1Y3QgbW1fc3RydWN0ICptbSkKIAlhY3RpdmVfbW0gPSB0c2stPmFjdGl2ZV9tbTsKIAl0c2st PmFjdGl2ZV9tbSA9IG1tOwogCXRzay0+bW0gPSBtbTsKKwlscnVfZ2VuX2FkZF9tbShtbSk7CiAJ LyoKIAkgKiBUaGlzIHByZXZlbnRzIHByZWVtcHRpb24gd2hpbGUgYWN0aXZlX21tIGlzIGJlaW5n IGxvYWRlZCBhbmQKIAkgKiBpdCBhbmQgbW0gYXJlIGJlaW5nIHVwZGF0ZWQsIHdoaWNoIGNvdWxk IGNhdXNlIHByb2JsZW1zIGZvcgpAQCAtMTAxOCw2ICsxMDE5LDcgQEAgc3RhdGljIGludCBleGVj X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJYWN0aXZhdGVfbW0oYWN0aXZlX21tLCBtbSk7 CiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfV0FOVF9JUlFTX09GRl9BQ1RJVkFURV9NTSkp CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKKwlscnVfZ2VuX3VzZV9tbShtbSk7CiAJdHNrLT5tbS0+ dm1hY2FjaGVfc2VxbnVtID0gMDsKIAl2bWFjYWNoZV9mbHVzaCh0c2spOwogCXRhc2tfdW5sb2Nr KHRzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUv bGludXgvbWVtY29udHJvbC5oCmluZGV4IGM4Y2U3NDU3NzI5MC4uYjhlNTcxODY2NWI4IDEwMDY0 NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21l bWNvbnRyb2wuaApAQCAtMzQzLDYgKzM0MywxMSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7CiAJc3Ry dWN0IGRlZmVycmVkX3NwbGl0IGRlZmVycmVkX3NwbGl0X3F1ZXVlOwogI2VuZGlmCiAKKyNpZmRl ZiBDT05GSUdfTFJVX0dFTgorCS8qIHBlci1tZW1jZyBtbV9zdHJ1Y3QgbGlzdCAqLworCXN0cnVj dCBscnVfZ2VuX21tX2xpc3QgbW1fbGlzdDsKKyNlbmRpZgorCiAJc3RydWN0IG1lbV9jZ3JvdXBf cGVyX25vZGUgKm5vZGVpbmZvW107CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21t X3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggMGY1NDk4NzBkYTZhLi5j YmM3ZmEzODFhYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAorKysgYi9p bmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTMsNiArMyw3IEBACiAjZGVmaW5lIF9MSU5VWF9N TV9UWVBFU19ICiAKICNpbmNsdWRlIDxsaW51eC9tbV90eXBlc190YXNrLmg+CisjaW5jbHVkZSA8 bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2F1eHZlYy5oPgogI2luY2x1ZGUgPGxp bnV4L2tyZWYuaD4KQEAgLTE3LDYgKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdz LWxheW91dC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4 L3NlcWxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgorI2luY2x1ZGUgPGxpbnV4 L21tZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIApAQCAtNjM3LDYgKzY0MCwyMiBA QCBzdHJ1Y3QgbW1fc3RydWN0IHsKICNpZmRlZiBDT05GSUdfSU9NTVVfU1VQUE9SVAogCQl1MzIg cGFzaWQ7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTFJVX0dFTgorCQlzdHJ1Y3QgeworCQkJLyog dGhpcyBtbV9zdHJ1Y3QgaXMgb24gbHJ1X2dlbl9tbV9saXN0ICovCisJCQlzdHJ1Y3QgbGlzdF9o ZWFkIGxpc3Q7CisjaWZkZWYgQ09ORklHX01FTUNHCisJCQkvKiBwb2ludHMgdG8gdGhlIG1lbWNn IG9mICJvd25lciIgYWJvdmUgKi8KKwkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKKyNlbmRp ZgorCQkJLyoKKwkJCSAqIFNldCB3aGVuIHN3aXRjaGluZyB0byB0aGlzIG1tX3N0cnVjdCwgYXMg YSBoaW50IG9mCisJCQkgKiB3aGV0aGVyIGl0IGhhcyBiZWVuIHVzZWQgc2luY2UgdGhlIGxhc3Qg dGltZSBwZXItbm9kZQorCQkJICogcGFnZSB0YWJsZSB3YWxrZXJzIGNsZWFyZWQgdGhlIGNvcnJl c3BvbmRpbmcgYml0cy4KKwkJCSAqLworCQkJbm9kZW1hc2tfdCBub2RlczsKKwkJfSBscnVfZ2Vu OworI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCiAJfSBfX3JhbmRvbWl6ZV9sYXlvdXQ7CiAK IAkvKgpAQCAtNjYzLDYgKzY4Miw2NSBAQCBzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCAqbW1fY3B1 bWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAlyZXR1cm4gKHN0cnVjdCBjcHVtYXNrICopJm1t LT5jcHVfYml0bWFwOwogfQogCisjaWZkZWYgQ09ORklHX0xSVV9HRU4KKworc3RydWN0IGxydV9n ZW5fbW1fbGlzdCB7CisJLyogbW1fc3RydWN0IGxpc3QgZm9yIHBhZ2UgdGFibGUgd2Fsa2VycyAq LworCXN0cnVjdCBsaXN0X2hlYWQgZmlmbzsKKwkvKiBwcm90ZWN0cyB0aGUgbGlzdCBhYm92ZSAq LworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3ZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1t X3N0cnVjdCAqbW0pOwordm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7 CisjaWZkZWYgQ09ORklHX01FTUNHCit2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1f c3RydWN0ICptbSk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9t bShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlJTklUX0xJU1RfSEVBRCgmbW0tPmxydV9nZW4u bGlzdCk7CisjaWZkZWYgQ09ORklHX01FTUNHCisJbW0tPmxydV9nZW4ubWVtY2cgPSBOVUxMOwor I2VuZGlmCisJbm9kZXNfY2xlYXIobW0tPmxydV9nZW4ubm9kZXMpOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgbHJ1X2dlbl91c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJLyogdW5s aWtlbHkgYnV0IG5vdCBhIGJ1ZyB3aGVuIHJhY2luZyB3aXRoIGxydV9nZW5fbWlncmF0ZV9tbSgp ICovCisJVk1fV0FSTl9PTihsaXN0X2VtcHR5KCZtbS0+bHJ1X2dlbi5saXN0KSk7CisKKwlpZiAo IShjdXJyZW50LT5mbGFncyAmIFBGX0tUSFJFQUQpICYmICFub2Rlc19mdWxsKG1tLT5scnVfZ2Vu Lm5vZGVzKSkKKwkJbm9kZXNfc2V0YWxsKG1tLT5scnVfZ2VuLm5vZGVzKTsKK30KKworI2Vsc2Ug LyogIUNPTkZJR19MUlVfR0VOICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2FkZF9t bShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxydV9n ZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorCisjaWZkZWYgQ09ORklHX01F TUNHCitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1 Y3QgKm1tKQoreworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRf bW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVf Z2VuX3VzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJ R19MUlVfR0VOICovCisKIHN0cnVjdCBtbXVfZ2F0aGVyOwogZXh0ZXJuIHZvaWQgdGxiX2dhdGhl cl9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogZXh0 ZXJuIHZvaWQgdGxiX2dhdGhlcl9tbXVfZnVsbG1tKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmgg Yi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNkNjRjNjRhOTUyZC4uYTJkNTMwMjVhMzIx IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgv bW16b25lLmgKQEAgLTQxMSw2ICs0MTEsNTggQEAgc3RydWN0IGxydV9nZW5fc3RydWN0IHsKIAlh dG9taWNfbG9uZ190IHJlZmF1bHRlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9O Ul9USUVSU107CiB9OwogCitlbnVtIHsKKwlNTV9QVEVfVE9UQUwsCS8qIHRvdGFsIGxlYWYgZW50 cmllcyAqLworCU1NX1BURV9PTEQsCS8qIG9sZCBsZWFmIGVudHJpZXMgKi8KKwlNTV9QVEVfWU9V TkcsCS8qIHlvdW5nIGxlYWYgZW50cmllcyAqLworCU1NX1BNRF9UT1RBTCwJLyogdG90YWwgbm9u LWxlYWYgZW50cmllcyAqLworCU1NX1BNRF9GT1VORCwJLyogbm9uLWxlYWYgZW50cmllcyBmb3Vu ZCBpbiBCbG9vbSBmaWx0ZXJzICovCisJTU1fUE1EX0FEREVELAkvKiBub24tbGVhZiBlbnRyaWVz IGFkZGVkIHRvIEJsb29tIGZpbHRlcnMgKi8KKwlOUl9NTV9TVEFUUworfTsKKworLyogbW5lbW9u aWMgY29kZXMgZm9yIHRoZSBtbSBzdGF0cyBhYm92ZSAqLworI2RlZmluZSBNTV9TVEFUX0NPREVT CQkidG95ZGZhIgorCisvKiBkb3VibGUtYnVmZmVyaW5nIEJsb29tIGZpbHRlcnMgKi8KKyNkZWZp bmUgTlJfQkxPT01fRklMVEVSUwkyCisKK3N0cnVjdCBscnVfZ2VuX21tX3N0YXRlIHsKKwkvKiBz ZXQgdG8gbWF4X3NlcSBhZnRlciBlYWNoIGl0ZXJhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcgc2Vx OworCS8qIHdoZXJlIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBzdGFydHMgKGluY2x1c2l2ZSkgKi8K KwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCS8qIHdoZXJlIHRoZSBsYXN0IGl0ZXJhdGlvbiBl bmRzIChleGNsdXNpdmUpICovCisJc3RydWN0IGxpc3RfaGVhZCAqdGFpbDsKKwkvKiB0byB3YWl0 IGZvciB0aGUgbGFzdCBwYWdlIHRhYmxlIHdhbGtlciB0byBmaW5pc2ggKi8KKwlzdHJ1Y3Qgd2Fp dF9xdWV1ZV9oZWFkIHdhaXQ7CisJLyogQmxvb20gZmlsdGVycyBmbGlwIGFmdGVyIGVhY2ggaXRl cmF0aW9uICovCisJdW5zaWduZWQgbG9uZyAqZmlsdGVyc1tOUl9CTE9PTV9GSUxURVJTXTsKKwkv KiB0aGUgbW0gc3RhdHMgZm9yIGRlYnVnZ2luZyAqLworCXVuc2lnbmVkIGxvbmcgc3RhdHNbTlJf SElTVF9HRU5TXVtOUl9NTV9TVEFUU107CisJLyogdGhlIG51bWJlciBvZiBjb25jdXJyZW50IHBh Z2UgdGFibGUgd2Fsa2VycyAqLworCWludCBucl93YWxrZXJzOworfTsKKworc3RydWN0IGxydV9n ZW5fbW1fd2FsayB7CisJLyogdGhlIGxydXZlYyB1bmRlciByZWNsYWltICovCisJc3RydWN0IGxy dXZlYyAqbHJ1dmVjOworCS8qIHVuc3RhYmxlIG1heF9zZXEgZnJvbSBscnVfZ2VuX3N0cnVjdCAq LworCXVuc2lnbmVkIGxvbmcgbWF4X3NlcTsKKwkvKiB0aGUgbmV4dCBhZGRyZXNzIHdpdGhpbiBh biBtbSB0byBzY2FuICovCisJdW5zaWduZWQgbG9uZyBuZXh0X2FkZHI7CisJLyogdG8gYmF0Y2gg cGFnZSB0YWJsZSBlbnRyaWVzICovCisJdW5zaWduZWQgbG9uZyBiaXRtYXBbQklUU19UT19MT05H UyhNSU5fTFJVX0JBVENIKV07CisJLyogdG8gYmF0Y2ggcHJvbW90ZWQgcGFnZXMgKi8KKwlpbnQg bnJfcGFnZXNbTUFYX05SX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9aT05FU107CisJLyog dG8gYmF0Y2ggdGhlIG1tIHN0YXRzICovCisJaW50IG1tX3N0YXRzW05SX01NX1NUQVRTXTsKKwkv KiB0b3RhbCBiYXRjaGVkIGl0ZW1zICovCisJaW50IGJhdGNoZWQ7CisJYm9vbCBjYW5fc3dhcDsK Kwlib29sIGZ1bGxfc2NhbjsKK307CisKIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3Qg bHJ1dmVjICpscnV2ZWMpOwogdm9pZCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3Zt YV9tYXBwZWRfd2FsayAqcHZtdyk7CiAKQEAgLTQ2MSw2ICs1MTMsOCBAQCBzdHJ1Y3QgbHJ1dmVj IHsKICNpZmRlZiBDT05GSUdfTFJVX0dFTgogCS8qIGV2aWN0YWJsZSBwYWdlcyBkaXZpZGVkIGlu dG8gZ2VuZXJhdGlvbnMgKi8KIAlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QJCWxydWdlbjsKKwkvKiB0 byBjb25jdXJyZW50bHkgaXRlcmF0ZSBscnVfZ2VuX21tX2xpc3QgKi8KKwlzdHJ1Y3QgbHJ1X2dl bl9tbV9zdGF0ZQkJbW1fc3RhdGU7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTUVNQ0cKIAlzdHJ1 Y3QgcGdsaXN0X2RhdGEgKnBnZGF0OwpAQCAtMTA1Myw2ICsxMTA3LDEwIEBAIHR5cGVkZWYgc3Ry dWN0IHBnbGlzdF9kYXRhIHsKIAogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCisjaWZkZWYgQ09O RklHX0xSVV9HRU4KKwkvKiBrc3dhcCBtbSB3YWxrIGRhdGEgKi8KKwlzdHJ1Y3QgbHJ1X2dlbl9t bV93YWxrCW1tX3dhbGs7CisjZW5kaWYKIAlaT05FX1BBRERJTkcoX3BhZDJfKQogCiAJLyogUGVy LW5vZGUgdm1zdGF0cyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNs dWRlL2xpbnV4L3N3YXAuaAppbmRleCBiMzc1MjBkM2ZmMWQuLjA0ZDg0YWM2ZDFhYyAxMDA2NDQK LS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAg LTEzNyw2ICsxMzcsMTAgQEAgdW5pb24gc3dhcF9oZWFkZXIgewogICovCiBzdHJ1Y3QgcmVjbGFp bV9zdGF0ZSB7CiAJdW5zaWduZWQgbG9uZyByZWNsYWltZWRfc2xhYjsKKyNpZmRlZiBDT05GSUdf TFJVX0dFTgorCS8qIHBlci10aHJlYWQgbW0gd2FsayBkYXRhICovCisJc3RydWN0IGxydV9nZW5f bW1fd2FsayAqbW1fd2FsazsKKyNlbmRpZgogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAt LWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IGIwMGEyNWJiNGFiOS4u NTRkMmNlNGI5M2QxIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0 LmMKQEAgLTQ2Myw2ICs0NjMsNyBAQCB2b2lkIG1tX3VwZGF0ZV9uZXh0X293bmVyKHN0cnVjdCBt bV9zdHJ1Y3QgKm1tKQogCQlnb3RvIHJldHJ5OwogCX0KIAlXUklURV9PTkNFKG1tLT5vd25lciwg Yyk7CisJbHJ1X2dlbl9taWdyYXRlX21tKG1tKTsKIAl0YXNrX3VubG9jayhjKTsKIAlwdXRfdGFz a19zdHJ1Y3QoYyk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2Zvcmsu YwppbmRleCBmMWU4OTAwN2YyMjguLjliYzMwM2VhY2NhMSAxMDA2NDQKLS0tIGEva2VybmVsL2Zv cmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC0xMDc5LDYgKzEwNzksNyBAQCBzdGF0aWMgc3Ry dWN0IG1tX3N0cnVjdCAqbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tf c3RydWN0ICpwLAogCQlnb3RvIGZhaWxfbm9jb250ZXh0OwogCiAJbW0tPnVzZXJfbnMgPSBnZXRf dXNlcl9ucyh1c2VyX25zKTsKKwlscnVfZ2VuX2luaXRfbW0obW0pOwogCXJldHVybiBtbTsKIAog ZmFpbF9ub2NvbnRleHQ6CkBAIC0xMTIxLDYgKzExMjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg X19tbXB1dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAl9CiAJaWYgKG1tLT5iaW5mbXQpCiAJCW1v ZHVsZV9wdXQobW0tPmJpbmZtdC0+bW9kdWxlKTsKKwlscnVfZ2VuX2RlbF9tbShtbSk7CiAJbW1k cm9wKG1tKTsKIH0KIApAQCAtMjU4Niw2ICsyNTg4LDEzIEBAIHBpZF90IGtlcm5lbF9jbG9uZShz dHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpCiAJCWdldF90YXNrX3N0cnVjdChwKTsKIAl9 CiAKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTFJVX0dFTikgJiYgIShjbG9uZV9mbGFncyAmIENM T05FX1ZNKSkgeworCQkvKiBsb2NrIHRoZSB0YXNrIHRvIHN5bmNocm9uaXplIHdpdGggbWVtY2cg bWlncmF0aW9uICovCisJCXRhc2tfbG9jayhwKTsKKwkJbHJ1X2dlbl9hZGRfbW0ocC0+bW0pOwor CQl0YXNrX3VubG9jayhwKTsKKwl9CisKIAl3YWtlX3VwX25ld190YXNrKHApOwogCiAJLyogZm9y a2luZyBjb21wbGV0ZSBhbmQgY2hpbGQgc3RhcnRlZCB0byBydW4sIHRlbGwgcHRyYWNlciAqLwpk aWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKaW5k ZXggOTc0NTYxM2Q1MzFjLi5lY2YwY2RjZTg2MDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9j b3JlLmMKKysrIGIva2VybmVsL3NjaGVkL2NvcmUuYwpAQCAtNDk3OSw2ICs0OTc5LDcgQEAgY29u dGV4dF9zd2l0Y2goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkg KiBmaW5pc2hfdGFza19zd2l0Y2goKSdzIG1tZHJvcCgpLgogCQkgKi8KIAkJc3dpdGNoX21tX2ly cXNfb2ZmKHByZXYtPmFjdGl2ZV9tbSwgbmV4dC0+bW0sIG5leHQpOworCQlscnVfZ2VuX3VzZV9t bShuZXh0LT5tbSk7CiAKIAkJaWYgKCFwcmV2LT5tbSkgeyAgICAgICAgICAgICAgICAgICAgICAg IC8vIGZyb20ga2VybmVsCiAJCQkvKiB3aWxsIG1tZHJvcCgpIGluIGZpbmlzaF90YXNrX3N3aXRj aCgpLiAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmlu ZGV4IGU0YzMwOTUwYWEzYy4uZDU5OTM0OTBiMzJmIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9s LmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC02MTU1LDYgKzYxNTUsMjkgQEAgc3RhdGljIHZv aWQgbWVtX2Nncm91cF9tb3ZlX3Rhc2sodm9pZCkKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklH X0xSVV9HRU4KK3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFz a3NldCAqdHNldCkKK3sKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCXN0cnVj dCB0YXNrX3N0cnVjdCAqdGFzayA9IE5VTEw7CisKKwljZ3JvdXBfdGFza3NldF9mb3JfZWFjaF9s ZWFkZXIodGFzaywgY3NzLCB0c2V0KQorCQlicmVhazsKKworCWlmICghdGFzaykKKwkJcmV0dXJu OworCisJdGFza19sb2NrKHRhc2spOworCWlmICh0YXNrLT5tbSAmJiB0YXNrLT5tbS0+b3duZXIg PT0gdGFzaykKKwkJbHJ1X2dlbl9taWdyYXRlX21tKHRhc2stPm1tKTsKKwl0YXNrX3VubG9jayh0 YXNrKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2F0dGFjaChzdHJ1Y3QgY2dy b3VwX3Rhc2tzZXQgKnRzZXQpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KKwog c3RhdGljIGludCBzZXFfcHV0c19tZW1jZ190dW5hYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5z aWduZWQgbG9uZyB2YWx1ZSkKIHsKIAlpZiAodmFsdWUgPT0gUEFHRV9DT1VOVEVSX01BWCkKQEAg LTY1MDAsNiArNjUyMyw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5 cyA9IHsKIAkuY3NzX3Jlc2V0ID0gbWVtX2Nncm91cF9jc3NfcmVzZXQsCiAJLmNzc19yc3RhdF9m bHVzaCA9IG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoLAogCS5jYW5fYXR0YWNoID0gbWVtX2Nn cm91cF9jYW5fYXR0YWNoLAorCS5hdHRhY2ggPSBtZW1fY2dyb3VwX2F0dGFjaCwKIAkuY2FuY2Vs X2F0dGFjaCA9IG1lbV9jZ3JvdXBfY2FuY2VsX2F0dGFjaCwKIAkucG9zdF9hdHRhY2ggPSBtZW1f Y2dyb3VwX21vdmVfdGFzaywKIAkuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsCmRpZmYgLS1n aXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDJiNjg1YWEwMzc5Yy4uNjdkYzQx OTBlNzkwIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtNTAs NiArNTAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3ByaW50ay5oPgogI2luY2x1ZGUgPGxpbnV4L2Rh eC5oPgogI2luY2x1ZGUgPGxpbnV4L3BzaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2V3YWxrLmg+ CisjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5o PgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpAQCAtMzEzMyw2ICszMTM1LDM3MiBAQCBzdGF0aWMg Ym9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQog CSAgICAgICBnZXRfbnJfZ2VucyhscnV2ZWMsIExSVV9HRU5fQU5PTikgPD0gTUFYX05SX0dFTlM7 CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAg ICBtbV9zdHJ1Y3QgbGlzdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVj dCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykK K3sKKwlzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCBtbV9saXN0ID0geworCQkuZmlmbyA9 IExJU1RfSEVBRF9JTklUKG1tX2xpc3QuZmlmbyksCisJCS5sb2NrID0gX19TUElOX0xPQ0tfVU5M T0NLRUQobW1fbGlzdC5sb2NrKSwKKwl9OworCisjaWZkZWYgQ09ORklHX01FTUNHCisJaWYgKG1l bWNnKQorCQlyZXR1cm4gJm1lbWNnLT5tbV9saXN0OworI2VuZGlmCisJcmV0dXJuICZtbV9saXN0 OworfQorCit2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWlu dCBuaWQ7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9t bShtbSk7CisJc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1l bWNnKTsKKworCVZNX0JVR19PTl9NTSghbGlzdF9lbXB0eSgmbW0tPmxydV9nZW4ubGlzdCksIG1t KTsKKyNpZmRlZiBDT05GSUdfTUVNQ0cKKwlWTV9CVUdfT05fTU0obW0tPmxydV9nZW4ubWVtY2cs IG1tKTsKKwltbS0+bHJ1X2dlbi5tZW1jZyA9IG1lbWNnOworI2VuZGlmCisJc3Bpbl9sb2NrKCZt bV9saXN0LT5sb2NrKTsKKworCWZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkgewor CQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpOworCisJCWlm ICghbHJ1dmVjKQorCQkJY29udGludWU7CisKKwkJaWYgKGxydXZlYy0+bW1fc3RhdGUudGFpbCA9 PSAmbW1fbGlzdC0+ZmlmbykKKwkJCWxydXZlYy0+bW1fc3RhdGUudGFpbCA9ICZtbS0+bHJ1X2dl bi5saXN0OworCX0KKworCWxpc3RfYWRkX3RhaWwoJm1tLT5scnVfZ2VuLmxpc3QsICZtbV9saXN0 LT5maWZvKTsKKworCXNwaW5fdW5sb2NrKCZtbV9saXN0LT5sb2NrKTsKK30KKwordm9pZCBscnVf Z2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpbnQgbmlkOworCXN0cnVjdCBs cnVfZ2VuX21tX2xpc3QgKm1tX2xpc3Q7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVM TDsKKworCWlmIChsaXN0X2VtcHR5KCZtbS0+bHJ1X2dlbi5saXN0KSkKKwkJcmV0dXJuOworCisj aWZkZWYgQ09ORklHX01FTUNHCisJbWVtY2cgPSBtbS0+bHJ1X2dlbi5tZW1jZzsKKyNlbmRpZgor CW1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7CisKKwlzcGluX2xvY2soJm1tX2xpc3QtPmxv Y2spOworCisJZm9yX2VhY2hfbm9kZShuaWQpIHsKKwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjID0g Z2V0X2xydXZlYyhtZW1jZywgbmlkKTsKKworCQlpZiAoIWxydXZlYykKKwkJCWNvbnRpbnVlOwor CisJCWlmIChscnV2ZWMtPm1tX3N0YXRlLnRhaWwgPT0gJm1tLT5scnVfZ2VuLmxpc3QpCisJCQls cnV2ZWMtPm1tX3N0YXRlLnRhaWwgPSBscnV2ZWMtPm1tX3N0YXRlLnRhaWwtPm5leHQ7CisKKwkJ aWYgKGxydXZlYy0+bW1fc3RhdGUuaGVhZCAhPSAmbW0tPmxydV9nZW4ubGlzdCkKKwkJCWNvbnRp bnVlOworCisJCWxydXZlYy0+bW1fc3RhdGUuaGVhZCA9IGxydXZlYy0+bW1fc3RhdGUuaGVhZC0+ bmV4dDsKKwkJaWYgKGxydXZlYy0+bW1fc3RhdGUuaGVhZCA9PSAmbW1fbGlzdC0+ZmlmbykKKwkJ CVdSSVRFX09OQ0UobHJ1dmVjLT5tbV9zdGF0ZS5zZXEsIGxydXZlYy0+bW1fc3RhdGUuc2VxICsg MSk7CisJfQorCisJbGlzdF9kZWxfaW5pdCgmbW0tPmxydV9nZW4ubGlzdCk7CisKKwlzcGluX3Vu bG9jaygmbW1fbGlzdC0+bG9jayk7CisKKyNpZmRlZiBDT05GSUdfTUVNQ0cKKwltZW1fY2dyb3Vw X3B1dChtbS0+bHJ1X2dlbi5tZW1jZyk7CisJbW0tPmxydV9nZW4ubWVtY2cgPSBOVUxMOworI2Vu ZGlmCit9CisKKyNpZmRlZiBDT05GSUdfTUVNQ0cKK3ZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKKworCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJm1tLT5vd25lci0+YWxsb2NfbG9jayk7CisKKwkvKiBmb3IgbW1f dXBkYXRlX25leHRfb3duZXIoKSAqLworCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCisJCXJl dHVybjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV90YXNr KG1tLT5vd25lcik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJaWYgKG1lbWNnID09IG1tLT5scnVf Z2VuLm1lbWNnKQorCQlyZXR1cm47CisKKwlWTV9CVUdfT05fTU0oIW1tLT5scnVfZ2VuLm1lbWNn LCBtbSk7CisJVk1fQlVHX09OX01NKGxpc3RfZW1wdHkoJm1tLT5scnVfZ2VuLmxpc3QpLCBtbSk7 CisKKwlscnVfZ2VuX2RlbF9tbShtbSk7CisJbHJ1X2dlbl9hZGRfbW0obW0pOworfQorI2VuZGlm CisKKy8qCisgKiBCbG9vbSBmaWx0ZXJzIHdpdGggbT0xPDwxNSwgaz0yIGFuZCB0aGUgZmFsc2Ug cG9zaXRpdmUgcmF0ZXMgb2YgfjEvNSB3aGVuCisgKiBuPTEwLDAwMCBhbmQgfjEvMiB3aGVuIG49 MjAsMDAwLCB3aGVyZSwgY29udmVudGlvbmFsbHksIG0gaXMgdGhlIG51bWJlciBvZgorICogYml0 cyBpbiBhIGJpdG1hcCwgayBpcyB0aGUgbnVtYmVyIG9mIGhhc2ggZnVuY3Rpb25zIGFuZCBuIGlz IHRoZSBudW1iZXIgb2YKKyAqIGluc2VydGVkIGl0ZW1zLgorICoKKyAqIFBhZ2UgdGFibGUgd2Fs a2VycyB1c2Ugb25lIG9mIHRoZSB0d28gZmlsdGVycyB0byByZWR1Y2UgdGhlaXIgc2VhcmNoIHNw YWNlLgorICogVG8gZ2V0IHJpZCBvZiBub24tbGVhZiBlbnRyaWVzIHRoYXQgbm8gbG9uZ2VyIGhh dmUgZW5vdWdoIGxlYWYgZW50cmllcywgdGhlCisgKiBhZ2luZyB1c2VzIHRoZSBkb3VibGUtYnVm ZmVyaW5nIHRlY2huaXF1ZSB0byBmbGlwIHRvIHRoZSBvdGhlciBmaWx0ZXIgZWFjaAorICogdGlt ZSBpdCBwcm9kdWNlcyBhIG5ldyBnZW5lcmF0aW9uLiBGb3Igbm9uLWxlYWYgZW50cmllcyB0aGF0 IGhhdmUgZW5vdWdoCisgKiBsZWFmIGVudHJpZXMsIHRoZSBhZ2luZyBjYXJyaWVzIHRoZW0gb3Zl ciB0byB0aGUgbmV4dCBnZW5lcmF0aW9uIGluCisgKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZp Y3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXAKKyAqIGluIGxydV9n ZW5fbG9va19hcm91bmQoKS4KKyAqCisgKiBGb3IgZnV0dXJlIG9wdGltaXphdGlvbnM6CisgKiAx LiBJdCdzIG5vdCBuZWNlc3NhcnkgdG8ga2VlcCBib3RoIGZpbHRlcnMgYWxsIHRoZSB0aW1lLiBU aGUgc3BhcmUgb25lIGNhbiBiZQorICogICAgZnJlZWQgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJp b2QgYW5kIHJlYWxsb2NhdGVkIGlmIG5lZWRlZCBhZ2Fpbi4KKyAqIDIuIEFuZCB3aGVuIHJlYWxs b2NhdGluZywgaXQncyB3b3J0aCBzY2FsaW5nIGl0cyBzaXplIGFjY29yZGluZyB0byB0aGUgbnVt YmVyCisgKiAgICBvZiBpbnNlcnRlZCBlbnRyaWVzIGluIHRoZSBvdGhlciBmaWx0ZXIsIHRvIHJl ZHVjZSB0aGUgbWVtb3J5IG92ZXJoZWFkIG9uCisgKiAgICBzbWFsbCBzeXN0ZW1zIGFuZCBmYWxz ZSBwb3NpdGl2ZXMgb24gbGFyZ2Ugc3lzdGVtcy4KKyAqIDMuIEplbmtpbnMnIGhhc2ggZnVuY3Rp b24gaXMgYW4gYWx0ZXJuYXRpdmUgdG8gS251dGgncy4KKyAqLworI2RlZmluZSBCTE9PTV9GSUxU RVJfU0hJRlQJMTUKKworc3RhdGljIGlubGluZSBpbnQgZmlsdGVyX2dlbl9mcm9tX3NlcSh1bnNp Z25lZCBsb25nIHNlcSkKK3sKKwlyZXR1cm4gc2VxICUgTlJfQkxPT01fRklMVEVSUzsKK30KKwor c3RhdGljIHZvaWQgZ2V0X2l0ZW1fa2V5KHZvaWQgKml0ZW0sIGludCAqa2V5KQoreworCXUzMiBo YXNoID0gaGFzaF9wdHIoaXRlbSwgQkxPT01fRklMVEVSX1NISUZUICogMik7CisKKwlCVUlMRF9C VUdfT04oQkxPT01fRklMVEVSX1NISUZUICogMiA+IEJJVFNfUEVSX1RZUEUodTMyKSk7CisKKwlr ZXlbMF0gPSBoYXNoICYgKEJJVChCTE9PTV9GSUxURVJfU0hJRlQpIC0gMSk7CisJa2V5WzFdID0g aGFzaCA+PiBCTE9PTV9GSUxURVJfU0hJRlQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X2Jsb29t X2ZpbHRlcihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxKQoreworCXVu c2lnbmVkIGxvbmcgKmZpbHRlcjsKKwlpbnQgZ2VuID0gZmlsdGVyX2dlbl9mcm9tX3NlcShzZXEp OworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZ2V0X21tX2xpc3QobHJ1dmVjX21lbWNnKGxydXZl YykpLT5sb2NrKTsKKworCWZpbHRlciA9IGxydXZlYy0+bW1fc3RhdGUuZmlsdGVyc1tnZW5dOwor CWlmIChmaWx0ZXIpIHsKKwkJYml0bWFwX2NsZWFyKGZpbHRlciwgMCwgQklUKEJMT09NX0ZJTFRF Ul9TSElGVCkpOworCQlyZXR1cm47CisJfQorCisJZmlsdGVyID0gYml0bWFwX3phbGxvYyhCSVQo QkxPT01fRklMVEVSX1NISUZUKSwgR0ZQX0FUT01JQyk7CisJV1JJVEVfT05DRShscnV2ZWMtPm1t X3N0YXRlLmZpbHRlcnNbZ2VuXSwgZmlsdGVyKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2Js b29tX2ZpbHRlcihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCB2b2lk ICppdGVtKQoreworCWludCBrZXlbMl07CisJdW5zaWduZWQgbG9uZyAqZmlsdGVyOworCWludCBn ZW4gPSBmaWx0ZXJfZ2VuX2Zyb21fc2VxKHNlcSk7CisKKwlmaWx0ZXIgPSBSRUFEX09OQ0UobHJ1 dmVjLT5tbV9zdGF0ZS5maWx0ZXJzW2dlbl0pOworCWlmICghZmlsdGVyKQorCQlyZXR1cm47CisK KwlnZXRfaXRlbV9rZXkoaXRlbSwga2V5KTsKKworCWlmICghdGVzdF9iaXQoa2V5WzBdLCBmaWx0 ZXIpKQorCQlzZXRfYml0KGtleVswXSwgZmlsdGVyKTsKKwlpZiAoIXRlc3RfYml0KGtleVsxXSwg ZmlsdGVyKSkKKwkJc2V0X2JpdChrZXlbMV0sIGZpbHRlcik7Cit9CisKK3N0YXRpYyBib29sIHRl c3RfYmxvb21fZmlsdGVyKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEs IHZvaWQgKml0ZW0pCit7CisJaW50IGtleVsyXTsKKwl1bnNpZ25lZCBsb25nICpmaWx0ZXI7CisJ aW50IGdlbiA9IGZpbHRlcl9nZW5fZnJvbV9zZXEoc2VxKTsKKworCWZpbHRlciA9IFJFQURfT05D RShscnV2ZWMtPm1tX3N0YXRlLmZpbHRlcnNbZ2VuXSk7CisJaWYgKCFmaWx0ZXIpCisJCXJldHVy biB0cnVlOworCisJZ2V0X2l0ZW1fa2V5KGl0ZW0sIGtleSk7CisKKwlyZXR1cm4gdGVzdF9iaXQo a2V5WzBdLCBmaWx0ZXIpICYmIHRlc3RfYml0KGtleVsxXSwgZmlsdGVyKTsKK30KKworc3RhdGlj IHZvaWQgcmVzZXRfbW1fc3RhdHMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgbHJ1X2dl bl9tbV93YWxrICp3YWxrLCBib29sIGxhc3QpCit7CisJaW50IGk7CisJaW50IGhpc3Q7CisKKwls b2NrZGVwX2Fzc2VydF9oZWxkKCZnZXRfbW1fbGlzdChscnV2ZWNfbWVtY2cobHJ1dmVjKSktPmxv Y2spOworCisJaWYgKHdhbGspIHsKKwkJaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKHdhbGstPm1h eF9zZXEpOworCisJCWZvciAoaSA9IDA7IGkgPCBOUl9NTV9TVEFUUzsgaSsrKSB7CisJCQlXUklU RV9PTkNFKGxydXZlYy0+bW1fc3RhdGUuc3RhdHNbaGlzdF1baV0sCisJCQkJICAgbHJ1dmVjLT5t bV9zdGF0ZS5zdGF0c1toaXN0XVtpXSArIHdhbGstPm1tX3N0YXRzW2ldKTsKKwkJCXdhbGstPm1t X3N0YXRzW2ldID0gMDsKKwkJfQorCX0KKworCWlmIChOUl9ISVNUX0dFTlMgPiAxICYmIGxhc3Qp IHsKKwkJaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydXZlYy0+bW1fc3RhdGUuc2VxICsgMSk7 CisKKwkJZm9yIChpID0gMDsgaSA8IE5SX01NX1NUQVRTOyBpKyspCisJCQlXUklURV9PTkNFKGxy dXZlYy0+bW1fc3RhdGUuc3RhdHNbaGlzdF1baV0sIDApOworCX0KK30KKworc3RhdGljIGJvb2wg c2hvdWxkX3NraXBfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dh bGsgKndhbGspCit7CisJaW50IHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplID0gMDsKKwlzdHJ1 Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstPmxydXZlYyk7CisKKwlp ZiAoIXdhbGstPmZ1bGxfc2NhbiAmJiBjcHVtYXNrX2VtcHR5KG1tX2NwdW1hc2sobW0pKSAmJgor CSAgICAhbm9kZV9pc3NldChwZ2RhdC0+bm9kZV9pZCwgbW0tPmxydV9nZW4ubm9kZXMpKQorCQly ZXR1cm4gdHJ1ZTsKKworCW5vZGVfY2xlYXIocGdkYXQtPm5vZGVfaWQsIG1tLT5scnVfZ2VuLm5v ZGVzKTsKKworCWZvciAodHlwZSA9ICF3YWxrLT5jYW5fc3dhcDsgdHlwZSA8IEFOT05fQU5EX0ZJ TEU7IHR5cGUrKykgeworCQlzaXplICs9IHR5cGUgPyBnZXRfbW1fY291bnRlcihtbSwgTU1fRklM RVBBR0VTKSA6CisJCQkgICAgICAgZ2V0X21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUykgKwor CQkJICAgICAgIGdldF9tbV9jb3VudGVyKG1tLCBNTV9TSE1FTVBBR0VTKTsKKwl9CisKKwlpZiAo c2l6ZSA8IE1JTl9MUlVfQkFUQ0gpCisJCXJldHVybiB0cnVlOworCisJaWYgKG1tX2lzX29vbV92 aWN0aW0obW0pKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiAhbW1nZXRfbm90X3plcm8obW0p OworfQorCitzdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Qoc3RydWN0IGxydXZlYyAqbHJ1dmVj LCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLAorCQkJICAgIHN0cnVjdCBtbV9zdHJ1Y3Qg KippdGVyKQoreworCWJvb2wgZmlyc3QgPSBmYWxzZTsKKwlib29sIGxhc3QgPSB0cnVlOworCXN0 cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBs cnV2ZWNfbWVtY2cobHJ1dmVjKTsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0g Z2V0X21tX2xpc3QobWVtY2cpOworCXN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9 ICZscnV2ZWMtPm1tX3N0YXRlOworCisJLyoKKwkgKiBUaGVyZSBhcmUgZm91ciBpbnRlcmVzdGlu ZyBjYXNlcyBmb3IgdGhpcyBwYWdlIHRhYmxlIHdhbGtlcjoKKwkgKiAxLiBJdCB0cmllcyB0byBz dGFydCBhIG5ldyBpdGVyYXRpb24gb2YgbW1fbGlzdCB3aXRoIGEgc3RhbGUgbWF4X3NlcTsKKwkg KiAgICB0aGVyZSBpcyBub3RoaW5nIHRvIGJlIGRvbmUuCisJICogMi4gSXQncyB0aGUgZmlyc3Qg b2YgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiwgYW5kIGl0IG5lZWRzIHRvIHJlc2V0CisJICogICAg dGhlIEJsb29tIGZpbHRlciBmb3IgdGhlIG5leHQgZ2VuZXJhdGlvbi4KKwkgKiAzLiBJdCByZWFj aGVzIHRoZSBlbmQgb2YgbW1fbGlzdCwgYW5kIGl0IG5lZWRzIHRvIGluY3JlbWVudAorCSAqICAg IG1tX3N0YXRlLT5zZXE7IHRoZSBpdGVyYXRpb24gaXMgZG9uZS4KKwkgKiA0LiBJdCdzIHRoZSBs YXN0IG9mIHRoZSBjdXJyZW50IGdlbmVyYXRpb24sIGFuZCBpdCBuZWVkcyB0byByZXNldCB0aGUK KwkgKiAgICBtbSBzdGF0cyBjb3VudGVycyBmb3IgdGhlIG5leHQgZ2VuZXJhdGlvbi4KKwkgKi8K KwlpZiAoKml0ZXIpCisJCW1tcHV0X2FzeW5jKCppdGVyKTsKKwllbHNlIGlmICh3YWxrLT5tYXhf c2VxIDw9IFJFQURfT05DRShtbV9zdGF0ZS0+c2VxKSkKKwkJcmV0dXJuIGZhbHNlOworCisJc3Bp bl9sb2NrKCZtbV9saXN0LT5sb2NrKTsKKworCVZNX0JVR19PTihtbV9zdGF0ZS0+c2VxICsgMSA8 IHdhbGstPm1heF9zZXEpOworCVZNX0JVR19PTigqaXRlciAmJiBtbV9zdGF0ZS0+c2VxID4gd2Fs ay0+bWF4X3NlcSk7CisJVk1fQlVHX09OKCppdGVyICYmICFtbV9zdGF0ZS0+bnJfd2Fsa2Vycyk7 CisKKwlpZiAod2Fsay0+bWF4X3NlcSA8PSBtbV9zdGF0ZS0+c2VxKSB7CisJCWlmICghKml0ZXIp CisJCQlsYXN0ID0gZmFsc2U7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIW1tX3N0YXRlLT5u cl93YWxrZXJzKSB7CisJCVZNX0JVR19PTihtbV9zdGF0ZS0+aGVhZCAmJiBtbV9zdGF0ZS0+aGVh ZCAhPSAmbW1fbGlzdC0+Zmlmbyk7CisKKwkJbW1fc3RhdGUtPmhlYWQgPSBtbV9saXN0LT5maWZv Lm5leHQ7CisJCWZpcnN0ID0gdHJ1ZTsKKwl9CisKKwl3aGlsZSAoIW1tICYmIG1tX3N0YXRlLT5o ZWFkICE9ICZtbV9saXN0LT5maWZvKSB7CisJCW1tID0gbGlzdF9lbnRyeShtbV9zdGF0ZS0+aGVh ZCwgc3RydWN0IG1tX3N0cnVjdCwgbHJ1X2dlbi5saXN0KTsKKworCQltbV9zdGF0ZS0+aGVhZCA9 IG1tX3N0YXRlLT5oZWFkLT5uZXh0OworCisJCS8qIGZ1bGwgc2NhbiBmb3IgdGhvc2UgYWRkZWQg YWZ0ZXIgdGhlIGxhc3QgaXRlcmF0aW9uICovCisJCWlmICghbW1fc3RhdGUtPnRhaWwgfHwgbW1f c3RhdGUtPnRhaWwgPT0gJm1tLT5scnVfZ2VuLmxpc3QpIHsKKwkJCW1tX3N0YXRlLT50YWlsID0g bW1fc3RhdGUtPmhlYWQ7CisJCQl3YWxrLT5mdWxsX3NjYW4gPSB0cnVlOworCQl9CisKKwkJaWYg KHNob3VsZF9za2lwX21tKG1tLCB3YWxrKSkKKwkJCW1tID0gTlVMTDsKKwl9CisKKwlpZiAobW1f c3RhdGUtPmhlYWQgPT0gJm1tX2xpc3QtPmZpZm8pCisJCVdSSVRFX09OQ0UobW1fc3RhdGUtPnNl cSwgbW1fc3RhdGUtPnNlcSArIDEpOworZG9uZToKKwlpZiAoKml0ZXIgJiYgIW1tKQorCQltbV9z dGF0ZS0+bnJfd2Fsa2Vycy0tOworCWlmICghKml0ZXIgJiYgbW0pCisJCW1tX3N0YXRlLT5ucl93 YWxrZXJzKys7CisKKwlpZiAobW1fc3RhdGUtPm5yX3dhbGtlcnMpCisJCWxhc3QgPSBmYWxzZTsK KworCWlmIChtbSAmJiBmaXJzdCkKKwkJcmVzZXRfYmxvb21fZmlsdGVyKGxydXZlYywgd2Fsay0+ bWF4X3NlcSArIDEpOworCisJaWYgKCppdGVyIHx8IGxhc3QpCisJCXJlc2V0X21tX3N0YXRzKGxy dXZlYywgd2FsaywgbGFzdCk7CisKKwlzcGluX3VubG9jaygmbW1fbGlzdC0+bG9jayk7CisKKwkq aXRlciA9IG1tOworCisJcmV0dXJuIGxhc3Q7Cit9CisKK3N0YXRpYyBib29sIGl0ZXJhdGVfbW1f bGlzdF9ub3dhbGsoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEp Cit7CisJYm9vbCBzdWNjZXNzID0gZmFsc2U7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0g bHJ1dmVjX21lbWNnKGxydXZlYyk7CisJc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9 IGdldF9tbV9saXN0KG1lbWNnKTsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUg PSAmbHJ1dmVjLT5tbV9zdGF0ZTsKKworCWlmIChtYXhfc2VxIDw9IFJFQURfT05DRShtbV9zdGF0 ZS0+c2VxKSkKKwkJcmV0dXJuIGZhbHNlOworCisJc3Bpbl9sb2NrKCZtbV9saXN0LT5sb2NrKTsK KworCVZNX0JVR19PTihtbV9zdGF0ZS0+c2VxICsgMSA8IG1heF9zZXEpOworCisJaWYgKG1heF9z ZXEgPiBtbV9zdGF0ZS0+c2VxICYmICFtbV9zdGF0ZS0+bnJfd2Fsa2VycykgeworCQlWTV9CVUdf T04obW1fc3RhdGUtPmhlYWQgJiYgbW1fc3RhdGUtPmhlYWQgIT0gJm1tX2xpc3QtPmZpZm8pOwor CisJCVdSSVRFX09OQ0UobW1fc3RhdGUtPnNlcSwgbW1fc3RhdGUtPnNlcSArIDEpOworCQlyZXNl dF9tbV9zdGF0cyhscnV2ZWMsIE5VTEwsIHRydWUpOworCQlzdWNjZXNzID0gdHJ1ZTsKKwl9CisK KwlzcGluX3VubG9jaygmbW1fbGlzdC0+bG9jayk7CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKwog LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmF1 bHQgZmVlZGJhY2sgbG9vcAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMyODYsNiArMzY1 NCw0NjUgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywg c3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCByZWNsYWkKIAlyZXR1cm4gbmV3X2dlbjsKIH0KIAor c3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fs aywgc3RydWN0IGZvbGlvICpmb2xpbywKKwkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dl bikKK3sKKwlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKKwlpbnQgem9uZSA9 IGZvbGlvX3pvbmVudW0oZm9saW8pOworCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlv KTsKKworCVZNX0JVR19PTihvbGRfZ2VuID49IE1BWF9OUl9HRU5TKTsKKwlWTV9CVUdfT04obmV3 X2dlbiA+PSBNQVhfTlJfR0VOUyk7CisKKwl3YWxrLT5iYXRjaGVkKys7CisKKwl3YWxrLT5ucl9w YWdlc1tvbGRfZ2VuXVt0eXBlXVt6b25lXSAtPSBkZWx0YTsKKwl3YWxrLT5ucl9wYWdlc1tuZXdf Z2VuXVt0eXBlXVt6b25lXSArPSBkZWx0YTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfYmF0Y2hf c2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsp Cit7CisJaW50IGdlbiwgdHlwZSwgem9uZTsKKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdl biA9ICZscnV2ZWMtPmxydWdlbjsKKworCXdhbGstPmJhdGNoZWQgPSAwOworCisJZm9yX2VhY2hf Z2VuX3R5cGVfem9uZShnZW4sIHR5cGUsIHpvbmUpIHsKKwkJZW51bSBscnVfbGlzdCBscnUgPSB0 eXBlICogTFJVX0lOQUNUSVZFX0ZJTEU7CisJCWludCBkZWx0YSA9IHdhbGstPm5yX3BhZ2VzW2dl bl1bdHlwZV1bem9uZV07CisKKwkJaWYgKCFkZWx0YSkKKwkJCWNvbnRpbnVlOworCisJCXdhbGst Pm5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0gPSAwOworCQlXUklURV9PTkNFKGxydWdlbi0+bnJf cGFnZXNbZ2VuXVt0eXBlXVt6b25lXSwKKwkJCSAgIGxydWdlbi0+bnJfcGFnZXNbZ2VuXVt0eXBl XVt6b25lXSArIGRlbHRhKTsKKworCQlpZiAobHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4p KQorCQkJbHJ1ICs9IExSVV9BQ1RJVkU7CisJCV9fdXBkYXRlX2xydV9zaXplKGxydXZlYywgbHJ1 LCB6b25lLCBkZWx0YSk7CisJfQorfQorCitzdGF0aWMgaW50IHNob3VsZF9za2lwX3ZtYSh1bnNp Z25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGsp Cit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisJc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICp2bWEgPSB3YWxrLT52bWE7CisJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqcHJpdiA9IHdh bGstPnByaXZhdGU7CisKKwlpZiAoIXZtYV9pc19hY2Nlc3NpYmxlKHZtYSkgfHwgaXNfdm1faHVn ZXRsYl9wYWdlKHZtYSkgfHwKKwkgICAgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fTE9DS0VEIHwgVk1f U1BFQ0lBTCB8IFZNX1NFUV9SRUFEIHwgVk1fUkFORF9SRUFEKSkgfHwKKwkgICAgdm1hID09IGdl dF9nYXRlX3ZtYSh2bWEtPnZtX21tKSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAodm1hX2lzX2Fu b255bW91cyh2bWEpKQorCQlyZXR1cm4gIXByaXYtPmNhbl9zd2FwOworCisJaWYgKFdBUk5fT05f T05DRSghdm1hLT52bV9maWxlIHx8ICF2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZykpCisJCXJldHVy biB0cnVlOworCisJbWFwcGluZyA9IHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nOworCWlmIChtYXBw aW5nX3VuZXZpY3RhYmxlKG1hcHBpbmcpKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIGNoZWNrIHJl YWRwYWdlIHRvIGV4Y2x1ZGUgc3BlY2lhbCBtYXBwaW5ncyBsaWtlIGRheCwgZXRjLiAqLworCXJl dHVybiBzaG1lbV9tYXBwaW5nKG1hcHBpbmcpID8gIXByaXYtPmNhbl9zd2FwIDogIW1hcHBpbmct PmFfb3BzLT5yZWFkcGFnZTsKK30KKworLyoKKyAqIFNvbWUgdXNlcnNwYWNlIG1lbW9yeSBhbGxv Y2F0b3JzIG1hcCBtYW55IHNpbmdsZS1wYWdlIFZNQXMuIEluc3RlYWQgb2YKKyAqIHJldHVybmlu ZyBiYWNrIHRvIHRoZSBQR0QgdGFibGUgZm9yIGVhY2ggb2Ygc3VjaCBWTUFzLCBmaW5pc2ggYW4g ZW50aXJlIFBNRAorICogdGFibGUgdG8gcmVkdWNlIHppZ3phZ3MgYW5kIGltcHJvdmUgY2FjaGUg cGVyZm9ybWFuY2UuCisgKi8KK3N0YXRpYyBib29sIGdldF9uZXh0X3ZtYShzdHJ1Y3QgbW1fd2Fs ayAqd2FsaywgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgdW5z aWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCkKK3sKKwl1bnNpZ25lZCBsb25n IG5leHQgPSByb3VuZF91cCgqZW5kLCBzaXplKTsKKworCVZNX0JVR19PTihtYXNrICYgc2l6ZSk7 CisJVk1fQlVHX09OKCpzdGFydCA+PSAqZW5kKTsKKwlWTV9CVUdfT04oKG5leHQgJiBtYXNrKSAh PSAoKnN0YXJ0ICYgbWFzaykpOworCisJd2hpbGUgKHdhbGstPnZtYSkgeworCQlpZiAobmV4dCA+ PSB3YWxrLT52bWEtPnZtX2VuZCkgeworCQkJd2Fsay0+dm1hID0gd2Fsay0+dm1hLT52bV9uZXh0 OworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKG5leHQgJiBtYXNrKSAhPSAod2Fsay0+dm1h LT52bV9zdGFydCAmIG1hc2spKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWlmIChzaG91bGRfc2tp cF92bWEod2Fsay0+dm1hLT52bV9zdGFydCwgd2Fsay0+dm1hLT52bV9lbmQsIHdhbGspKSB7CisJ CQl3YWxrLT52bWEgPSB3YWxrLT52bWEtPnZtX25leHQ7CisJCQljb250aW51ZTsKKwkJfQorCisJ CSpzdGFydCA9IG1heChuZXh0LCB3YWxrLT52bWEtPnZtX3N0YXJ0KTsKKwkJbmV4dCA9IChuZXh0 IHwgfm1hc2spICsgMTsKKwkJLyogcm91bmRlZC11cCBib3VuZGFyaWVzIGNhbiB3cmFwIHRvIDAg Ki8KKwkJKmVuZCA9IG5leHQgJiYgbmV4dCA8IHdhbGstPnZtYS0+dm1fZW5kID8gbmV4dCA6IHdh bGstPnZtYS0+dm1fZW5kOworCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsK K30KKworc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZykK K3sKKwlpbnQgbiA9IGNsYW1wX3QoaW50LCBjYWNoZV9saW5lX3NpemUoKSAvIHNpemVvZihwdGVf dCksIDIsIDgpOworCisJLyogc3VpdGFibGUgaWYgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIHlvdW5n IFBURXMgcGVyIGNhY2hlbGluZSBpcyA+PTEgKi8KKwlyZXR1cm4geW91bmcgKiBuID49IHRvdGFs OworfQorCitzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBs b25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgIHN0cnVjdCBtbV93YWxrICp3YWxr KQoreworCWludCBpOworCXB0ZV90ICpwdGU7CisJc3BpbmxvY2tfdCAqcHRsOworCXVuc2lnbmVk IGxvbmcgYWRkcjsKKwlpbnQgdG90YWwgPSAwOworCWludCB5b3VuZyA9IDA7CisJc3RydWN0IGxy dV9nZW5fbW1fd2FsayAqcHJpdiA9IHdhbGstPnByaXZhdGU7CisJc3RydWN0IG1lbV9jZ3JvdXAg Km1lbWNnID0gbHJ1dmVjX21lbWNnKHByaXYtPmxydXZlYyk7CisJc3RydWN0IHBnbGlzdF9kYXRh ICpwZ2RhdCA9IGxydXZlY19wZ2RhdChwcml2LT5scnV2ZWMpOworCWludCBvbGRfZ2VuLCBuZXdf Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShwcml2LT5tYXhfc2VxKTsKKworCVZNX0JVR19PTihwbWRf bGVhZigqcG1kKSk7CisKKwlwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstPm1tLCBwbWQs IHN0YXJ0ICYgUE1EX01BU0ssICZwdGwpOworCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwor cmVzdGFydDoKKwlmb3IgKGkgPSBwdGVfaW5kZXgoc3RhcnQpLCBhZGRyID0gc3RhcnQ7IGFkZHIg IT0gZW5kOyBpKyssIGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCXN0cnVjdCBmb2xpbyAqZm9saW87 CisJCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGVbaV0pOworCisJCVZNX0JVR19PTihh ZGRyIDwgd2Fsay0+dm1hLT52bV9zdGFydCB8fCBhZGRyID49IHdhbGstPnZtYS0+dm1fZW5kKTsK KworCQl0b3RhbCsrOworCQlwcml2LT5tbV9zdGF0c1tNTV9QVEVfVE9UQUxdKys7CisKKwkJaWYg KCFwdGVfcHJlc2VudChwdGVbaV0pIHx8IGlzX3plcm9fcGZuKHBmbikpCisJCQljb250aW51ZTsK KworCQlpZiAoV0FSTl9PTl9PTkNFKHB0ZV9kZXZtYXAocHRlW2ldKSB8fCBwdGVfc3BlY2lhbChw dGVbaV0pKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcHRlX3lvdW5nKHB0ZVtpXSkpIHsKKwkJ CXByaXYtPm1tX3N0YXRzW01NX1BURV9PTERdKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCVZN X0JVR19PTighcGZuX3ZhbGlkKHBmbikpOworCQlpZiAocGZuIDwgcGdkYXQtPm5vZGVfc3RhcnRf cGZuIHx8IHBmbiA+PSBwZ2RhdF9lbmRfcGZuKHBnZGF0KSkKKwkJCWNvbnRpbnVlOworCisJCWZv bGlvID0gcGZuX2ZvbGlvKHBmbik7CisJCWlmIChmb2xpb19uaWQoZm9saW8pICE9IHBnZGF0LT5u b2RlX2lkKQorCQkJY29udGludWU7CisKKwkJaWYgKGZvbGlvX21lbWNnX3JjdShmb2xpbykgIT0g bWVtY2cpCisJCQljb250aW51ZTsKKworCQlpZiAoIXB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmco d2Fsay0+dm1hLCBhZGRyLCBwdGUgKyBpKSkKKwkJCWNvbnRpbnVlOworCisJCXlvdW5nKys7CisJ CXByaXYtPm1tX3N0YXRzW01NX1BURV9ZT1VOR10rKzsKKworCQlpZiAocHRlX2RpcnR5KHB0ZVtp XSkgJiYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICYmCisJCSAgICAhKGZvbGlvX3Rlc3RfYW5v bihmb2xpbykgJiYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAmJgorCQkgICAgICAhZm9s aW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKKwkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwor CisJCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuKTsKKwkJaWYgKG9s ZF9nZW4gPj0gMCAmJiBvbGRfZ2VuICE9IG5ld19nZW4pCisJCQl1cGRhdGVfYmF0Y2hfc2l6ZShw cml2LCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CisJfQorCisJaWYgKGkgPCBQVFJTX1BFUl9Q VEUgJiYgZ2V0X25leHRfdm1hKHdhbGssIFBNRF9NQVNLLCBQQUdFX1NJWkUsICZzdGFydCwgJmVu ZCkpCisJCWdvdG8gcmVzdGFydDsKKworCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOworCXB0 ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOworCisJcmV0dXJuIHN1aXRhYmxlX3RvX3NjYW4odG90 YWwsIHlvdW5nKTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdF KSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORykKK3N0YXRpYyB2 b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIG5leHQs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgc3RydWN0IG1tX3dhbGsgKndhbGss IHVuc2lnbmVkIGxvbmcgKnN0YXJ0KQoreworCWludCBpOworCXBtZF90ICpwbWQ7CisJc3Bpbmxv Y2tfdCAqcHRsOworCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKnByaXYgPSB3YWxrLT5wcml2YXRl OworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhwcml2LT5scnV2ZWMp OworCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQocHJpdi0+bHJ1dmVj KTsKKwlpbnQgb2xkX2dlbiwgbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEocHJpdi0+bWF4X3Nl cSk7CisKKwlWTV9CVUdfT04ocHVkX2xlYWYoKnB1ZCkpOworCisJLyogdHJ5IHRvIGJhdGNoIGF0 IG1vc3QgMStNSU5fTFJVX0JBVENIKzEgZW50cmllcyAqLworCWlmICgqc3RhcnQgPT0gLTEpIHsK KwkJKnN0YXJ0ID0gbmV4dDsKKwkJcmV0dXJuOworCX0KKworCWkgPSBuZXh0ID09IC0xID8gMCA6 IHBtZF9pbmRleChuZXh0KSAtIHBtZF9pbmRleCgqc3RhcnQpOworCWlmIChpICYmIGkgPD0gTUlO X0xSVV9CQVRDSCkgeworCQlfX3NldF9iaXQoaSAtIDEsIHByaXYtPmJpdG1hcCk7CisJCXJldHVy bjsKKwl9CisKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgKnN0YXJ0KTsKKwlwdGwgPSBwbWRfbG9j ayh3YWxrLT5tbSwgcG1kKTsKKwlhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTsKKworCWRvIHsK KwkJc3RydWN0IGZvbGlvICpmb2xpbzsKKwkJdW5zaWduZWQgbG9uZyBwZm4gPSBwbWRfcGZuKHBt ZFtpXSk7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IGkgPyAoKnN0YXJ0ICYgUE1EX01BU0spICsg aSAqIFBNRF9TSVpFIDogKnN0YXJ0OworCisJCVZNX0JVR19PTihhZGRyIDwgdm1hLT52bV9zdGFy dCB8fCBhZGRyID49IHZtYS0+dm1fZW5kKTsKKworCQlpZiAoIXBtZF9wcmVzZW50KHBtZFtpXSkg fHwgaXNfaHVnZV96ZXJvX3BtZChwbWRbaV0pKQorCQkJZ290byBuZXh0OworCisJCWlmIChXQVJO X09OX09OQ0UocG1kX2Rldm1hcChwbWRbaV0pKSkKKwkJCWdvdG8gbmV4dDsKKworCQlpZiAoIXBt ZF90cmFuc19odWdlKHBtZFtpXSkpIHsKKwkJCWlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0hB U19OT05MRUFGX1BNRF9ZT1VORykpCisJCQkJcG1kcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEs IGFkZHIsIHBtZCArIGkpOworCQkJZ290byBuZXh0OworCQl9CisKKwkJVk1fQlVHX09OKCFwZm5f dmFsaWQocGZuKSk7CisJCWlmIChwZm4gPCBwZ2RhdC0+bm9kZV9zdGFydF9wZm4gfHwgcGZuID49 IHBnZGF0X2VuZF9wZm4ocGdkYXQpKQorCQkJZ290byBuZXh0OworCisJCWZvbGlvID0gcGZuX2Zv bGlvKHBmbik7CisJCWlmIChmb2xpb19uaWQoZm9saW8pICE9IHBnZGF0LT5ub2RlX2lkKQorCQkJ Z290byBuZXh0OworCisJCWlmIChmb2xpb19tZW1jZ19yY3UoZm9saW8pICE9IG1lbWNnKQorCQkJ Z290byBuZXh0OworCisJCWlmICghcG1kcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHIs IHBtZCArIGkpKQorCQkJZ290byBuZXh0OworCisJCXByaXYtPm1tX3N0YXRzW01NX1BURV9ZT1VO R10rKzsKKworCQlpZiAocG1kX2RpcnR5KHBtZFtpXSkgJiYgIWZvbGlvX3Rlc3RfZGlydHkoZm9s aW8pICYmCisJCSAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJiYgZm9saW9fdGVzdF9zd2Fw YmFja2VkKGZvbGlvKSAmJgorCQkgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkK KwkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOworCisJCW9sZF9nZW4gPSBmb2xpb191cGRhdGVf Z2VuKGZvbGlvLCBuZXdfZ2VuKTsKKwkJaWYgKG9sZF9nZW4gPj0gMCAmJiBvbGRfZ2VuICE9IG5l d19nZW4pCisJCQl1cGRhdGVfYmF0Y2hfc2l6ZShwcml2LCBmb2xpbywgb2xkX2dlbiwgbmV3X2dl bik7CituZXh0OgorCQlpID0gaSA+IE1JTl9MUlVfQkFUQ0ggPyAwIDoKKwkJICAgIGZpbmRfbmV4 dF9iaXQocHJpdi0+Yml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSArIDE7CisJfSB3aGlsZSAoaSA8 PSBNSU5fTFJVX0JBVENIKTsKKworCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOworCXNwaW5f dW5sb2NrKHB0bCk7CisKKwkqc3RhcnQgPSAtMTsKKwliaXRtYXBfemVybyhwcml2LT5iaXRtYXAs IE1JTl9MUlVfQkFUQ0gpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xv Y2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIG5leHQsIHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqdm1hLAorCQkJCSAgc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgKnN0YXJ0 KQoreworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQs IHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJICAgc3RydWN0IG1t X3dhbGsgKndhbGspCit7CisJaW50IGk7CisJcG1kX3QgKnBtZDsKKwl1bnNpZ25lZCBsb25nIG5l eHQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwor CXVuc2lnbmVkIGxvbmcgcG9zID0gLTE7CisJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqcHJpdiA9 IHdhbGstPnByaXZhdGU7CisKKwlWTV9CVUdfT04ocHVkX2xlYWYoKnB1ZCkpOworCisJLyoKKwkg KiBGaW5pc2ggYW4gZW50aXJlIFBNRCBpbiB0d28gcGFzc2VzOiB0aGUgZmlyc3Qgb25seSByZWFj aGVzIHRvIFBURQorCSAqIHRhYmxlcyB0byBhdm9pZCB0YWtpbmcgdGhlIFBNRCBsb2NrOyB0aGUg c2Vjb25kLCBpZiBuZWNlc3NhcnksIHRha2VzCisJICogdGhlIFBNRCBsb2NrIHRvIGNsZWFyIHRo ZSBhY2Nlc3NlZCBiaXQgaW4gUE1EIGVudHJpZXMuCisJICovCisJcG1kID0gcG1kX29mZnNldChw dWQsIHN0YXJ0ICYgUFVEX01BU0spOworcmVzdGFydDoKKwkvKiB3YWxrX3B0ZV9yYW5nZSgpIG1h eSBjYWxsIGdldF9uZXh0X3ZtYSgpICovCisJdm1hID0gd2Fsay0+dm1hOworCWZvciAoaSA9IHBt ZF9pbmRleChzdGFydCksIGFkZHIgPSBzdGFydDsgYWRkciAhPSBlbmQ7IGkrKywgYWRkciA9IG5l eHQpIHsKKwkJcG1kX3QgdmFsID0gcG1kX3JlYWRfYXRvbWljKHBtZCArIGkpOworCisJCS8qIGZv ciBwbWRfcmVhZF9hdG9taWMoKSAqLworCQliYXJyaWVyKCk7CisKKwkJbmV4dCA9IHBtZF9hZGRy X2VuZChhZGRyLCBlbmQpOworCisJCWlmICghcG1kX3ByZXNlbnQodmFsKSkgeworCQkJcHJpdi0+ bW1fc3RhdHNbTU1fUFRFX1RPVEFMXSsrOworCQkJY29udGludWU7CisJCX0KKworI2lmZGVmIENP TkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQorCQlpZiAocG1kX3RyYW5zX2h1Z2UodmFsKSkgewor CQkJdW5zaWduZWQgbG9uZyBwZm4gPSBwbWRfcGZuKHZhbCk7CisJCQlzdHJ1Y3QgcGdsaXN0X2Rh dGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHByaXYtPmxydXZlYyk7CisKKwkJCXByaXYtPm1tX3N0 YXRzW01NX1BURV9UT1RBTF0rKzsKKworCQkJaWYgKGlzX2h1Z2VfemVyb19wbWQodmFsKSkKKwkJ CQljb250aW51ZTsKKworCQkJaWYgKCFwbWRfeW91bmcodmFsKSkgeworCQkJCXByaXYtPm1tX3N0 YXRzW01NX1BURV9PTERdKys7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChwZm4gPCBw Z2RhdC0+bm9kZV9zdGFydF9wZm4gfHwgcGZuID49IHBnZGF0X2VuZF9wZm4ocGdkYXQpKQorCQkJ CWNvbnRpbnVlOworCisJCQl3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkLCBhZGRyLCB2bWEsIHdh bGssICZwb3MpOworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorCQlwcml2LT5tbV9zdGF0c1tN TV9QTURfVE9UQUxdKys7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9V TkcKKwkJaWYgKCFwbWRfeW91bmcodmFsKSkKKwkJCWNvbnRpbnVlOworCisJCXdhbGtfcG1kX3Jh bmdlX2xvY2tlZChwdWQsIGFkZHIsIHZtYSwgd2FsaywgJnBvcyk7CisjZW5kaWYKKwkJaWYgKCFw cml2LT5mdWxsX3NjYW4gJiYgIXRlc3RfYmxvb21fZmlsdGVyKHByaXYtPmxydXZlYywgcHJpdi0+ bWF4X3NlcSwgcG1kICsgaSkpCisJCQljb250aW51ZTsKKworCQlwcml2LT5tbV9zdGF0c1tNTV9Q TURfRk9VTkRdKys7CisKKwkJaWYgKCF3YWxrX3B0ZV9yYW5nZSgmdmFsLCBhZGRyLCBuZXh0LCB3 YWxrKSkKKwkJCWNvbnRpbnVlOworCisJCXByaXYtPm1tX3N0YXRzW01NX1BNRF9BRERFRF0rKzsK KworCQkvKiBjYXJyeSBvdmVyIHRvIHRoZSBuZXh0IGdlbmVyYXRpb24gKi8KKwkJdXBkYXRlX2Js b29tX2ZpbHRlcihwcml2LT5scnV2ZWMsIHByaXYtPm1heF9zZXEgKyAxLCBwbWQgKyBpKTsKKwl9 CisKKwl3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkLCAtMSwgdm1hLCB3YWxrLCAmcG9zKTsKKwor CWlmIChpIDwgUFRSU19QRVJfUE1EICYmIGdldF9uZXh0X3ZtYSh3YWxrLCBQVURfTUFTSywgUE1E X1NJWkUsICZzdGFydCwgJmVuZCkpCisJCWdvdG8gcmVzdGFydDsKK30KKworc3RhdGljIGludCB3 YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBs b25nIGVuZCwKKwkJCSAgc3RydWN0IG1tX3dhbGsgKndhbGspCit7CisJaW50IGk7CisJcHVkX3Qg KnB1ZDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCXN0cnVj dCBscnVfZ2VuX21tX3dhbGsgKnByaXYgPSB3YWxrLT5wcml2YXRlOworCisJVk1fQlVHX09OKHA0 ZF9sZWFmKCpwNGQpKTsKKworCXB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBzdGFydCAmIFA0RF9NQVNL KTsKK3Jlc3RhcnQ6CisJZm9yIChpID0gcHVkX2luZGV4KHN0YXJ0KSwgYWRkciA9IHN0YXJ0OyBh ZGRyICE9IGVuZDsgaSsrLCBhZGRyID0gbmV4dCkgeworCQlwdWRfdCB2YWwgPSBSRUFEX09OQ0Uo cHVkW2ldKTsKKworCQluZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisKKwkJaWYgKCFw dWRfcHJlc2VudCh2YWwpIHx8IFdBUk5fT05fT05DRShwdWRfbGVhZih2YWwpKSkKKwkJCWNvbnRp bnVlOworCisJCXdhbGtfcG1kX3JhbmdlKCZ2YWwsIGFkZHIsIG5leHQsIHdhbGspOworCisJCWlm IChwcml2LT5iYXRjaGVkID49IE1BWF9MUlVfQkFUQ0gpIHsKKwkJCWVuZCA9IChhZGRyIHwgflBV RF9NQVNLKSArIDE7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwlpZiAoaSA8IFBUUlNfUEVS X1BVRCAmJiBnZXRfbmV4dF92bWEod2FsaywgUDREX01BU0ssIFBVRF9TSVpFLCAmc3RhcnQsICZl bmQpKQorCQlnb3RvIHJlc3RhcnQ7CisKKwllbmQgPSByb3VuZF91cChlbmQsIFA0RF9TSVpFKTsK K2RvbmU6CisJLyogcm91bmRlZC11cCBib3VuZGFyaWVzIGNhbiB3cmFwIHRvIDAgKi8KKwlwcml2 LT5uZXh0X2FkZHIgPSBlbmQgJiYgd2Fsay0+dm1hID8gbWF4KGVuZCwgd2Fsay0+dm1hLT52bV9z dGFydCkgOiAwOworCisJcmV0dXJuIC1FQUdBSU47Cit9CisKK3N0YXRpYyB2b2lkIHdhbGtfbW0o c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9n ZW5fbW1fd2FsayAqd2FsaykKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIG1t X3dhbGtfb3BzID0geworCQkudGVzdF93YWxrID0gc2hvdWxkX3NraXBfdm1hLAorCQkucDRkX2Vu dHJ5ID0gd2Fsa19wdWRfcmFuZ2UsCisJfTsKKworCWludCBlcnI7CisJc3RydWN0IG1lbV9jZ3Jv dXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CisKKwl3YWxrLT5uZXh0X2FkZHIgPSBG SVJTVF9VU0VSX0FERFJFU1M7CisKKwlkbyB7CisJCWVyciA9IC1FQlVTWTsKKworCQkvKiBmb2xp b191cGRhdGVfZ2VuKCkgcmVxdWlyZXMgc3RhYmxlIGZvbGlvX21lbWNnKCkgKi8KKwkJaWYgKCFt ZW1fY2dyb3VwX3RyeWxvY2tfcGFnZXMobWVtY2cpKQorCQkJYnJlYWs7CisKKwkJLyogdGhlIGNh bGxlciBtaWdodCBiZSBob2xkaW5nIHRoZSBsb2NrIGZvciB3cml0ZSAqLworCQlpZiAobW1hcF9y ZWFkX3RyeWxvY2sobW0pKSB7CisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gd2Fsay0+bmV4dF9h ZGRyOworCQkJdW5zaWduZWQgbG9uZyBlbmQgPSBtbS0+aGlnaGVzdF92bV9lbmQ7CisKKwkJCWVy ciA9IHdhbGtfcGFnZV9yYW5nZShtbSwgc3RhcnQsIGVuZCwgJm1tX3dhbGtfb3BzLCB3YWxrKTsK KworCQkJbW1hcF9yZWFkX3VubG9jayhtbSk7CisKKwkJCWlmICh3YWxrLT5iYXRjaGVkKSB7CisJ CQkJc3Bpbl9sb2NrX2lycSgmbHJ1dmVjLT5scnVfbG9jayk7CisJCQkJcmVzZXRfYmF0Y2hfc2l6 ZShscnV2ZWMsIHdhbGspOworCQkJCXNwaW5fdW5sb2NrX2lycSgmbHJ1dmVjLT5scnVfbG9jayk7 CisJCQl9CisJCX0KKworCQltZW1fY2dyb3VwX3VubG9ja19wYWdlcygpOworCisJCWNvbmRfcmVz Y2hlZCgpOworCX0gd2hpbGUgKGVyciA9PSAtRUFHQUlOICYmIHdhbGstPm5leHRfYWRkciAmJiAh bW1faXNfb29tX3ZpY3RpbShtbSkpOworfQorCitzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fd2Fs ayAqYWxsb2NfbW1fd2Fsayh2b2lkKQoreworCWlmIChjdXJyZW50LT5yZWNsYWltX3N0YXRlICYm IGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUtPm1tX3dhbGspCisJCXJldHVybiBjdXJyZW50LT5yZWNs YWltX3N0YXRlLT5tbV93YWxrOworCisJcmV0dXJuIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBscnVf Z2VuX21tX3dhbGspLAorCQkgICAgICAgX19HRlBfSElHSCB8IF9fR0ZQX05PTUVNQUxMT0MgfCBf X0dGUF9OT1dBUk4pOworfQorCitzdGF0aWMgdm9pZCBmcmVlX21tX3dhbGsoc3RydWN0IGxydV9n ZW5fbW1fd2FsayAqd2FsaykKK3sKKwlpZiAoIWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgfHwgIWN1 cnJlbnQtPnJlY2xhaW1fc3RhdGUtPm1tX3dhbGspCisJCWtmcmVlKHdhbGspOworfQorCiBzdGF0 aWMgdm9pZCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiB7CiAJaW50IHR5cGU7 CkBAIC0zMzQ0LDcgKzQxNzEsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9faW5jX21pbl9zZXEoc3Ry dWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGNhbl9zd2FwKQogCXJldHVybiBzdWNjZXNzOwogfQog Ci1zdGF0aWMgdm9pZCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVk IGxvbmcgbWF4X3NlcSkKK3N0YXRpYyB2b2lkIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxy dXZlYykKIHsKIAlpbnQgcHJldiwgbmV4dDsKIAlpbnQgdHlwZSwgem9uZTsKQEAgLTMzNTQsOSAr NDE4MSw2IEBAIHN0YXRpYyB2b2lkIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywg dW5zaWduZWQgbG9uZyBtYXhfc2VxKQogCiAJVk1fQlVHX09OKCFzZXFfaXNfdmFsaWQobHJ1dmVj KSk7CiAKLQlpZiAobWF4X3NlcSAhPSBscnVnZW4tPm1heF9zZXEpCi0JCWdvdG8gdW5sb2NrOwot CiAJaW5jX21pbl9zZXEobHJ1dmVjKTsKIAogCS8qIHVwZGF0ZSB0aGUgYWN0aXZlL2luYWN0aXZl IExSVSBzaXplcyBmb3IgY29tcGF0aWJpbGl0eSAqLwpAQCAtMzM4MiwxMCArNDIwNiw3MiBAQCBz dGF0aWMgdm9pZCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxv bmcgbWF4X3NlcSkKIAogCS8qIG1ha2Ugc3VyZSBwcmVjZWRpbmcgbW9kaWZpY2F0aW9ucyBhcHBl YXIgKi8KIAlzbXBfc3RvcmVfcmVsZWFzZSgmbHJ1Z2VuLT5tYXhfc2VxLCBscnVnZW4tPm1heF9z ZXEgKyAxKTsKLXVubG9jazoKKwogCXNwaW5fdW5sb2NrX2lycSgmbHJ1dmVjLT5scnVfbG9jayk7 CiB9CiAKK3N0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2 ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwKKwkJCSAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9s ICpzYywgYm9vbCBjYW5fc3dhcCwgYm9vbCBmdWxsX3NjYW4pCit7CisJYm9vbCBzdWNjZXNzOwor CXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBO VUxMOworCXN0cnVjdCBscnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2VuOwor CisJVk1fQlVHX09OKG1heF9zZXEgPiBSRUFEX09OQ0UobHJ1Z2VuLT5tYXhfc2VxKSk7CisKKwkv KgorCSAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nl c3NlZCBiaXQsIGZhbGxiYWNrCisJICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBv bmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGEKKwkgKiBoYW5kZnVsIG9mIFBURXMuIFNw cmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHkKKwkgKiBp cyBsZXNzIGVmZmljaWVudCwgYnV0IGl0IGF2b2lkcyBidXJzdHkgcGFnZSBmYXVsdHMuCisJICov CisJaWYgKCFmdWxsX3NjYW4gJiYgIWFyY2hfaGFzX2h3X3B0ZV95b3VuZygpKSB7CisJCXN1Y2Nl c3MgPSBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKGxydXZlYywgbWF4X3NlcSk7CisJCWdvdG8gZG9u ZTsKKwl9CisKKwl3YWxrID0gYWxsb2NfbW1fd2FsaygpOworCWlmICghd2FsaykgeworCQlzdWNj ZXNzID0gaXRlcmF0ZV9tbV9saXN0X25vd2FsayhscnV2ZWMsIG1heF9zZXEpOworCQlnb3RvIGRv bmU7CisJfQorCisJd2Fsay0+bHJ1dmVjID0gbHJ1dmVjOworCXdhbGstPm1heF9zZXEgPSBtYXhf c2VxOworCXdhbGstPmNhbl9zd2FwID0gY2FuX3N3YXA7CisJd2Fsay0+ZnVsbF9zY2FuID0gZnVs bF9zY2FuOworCisJZG8geworCQlzdWNjZXNzID0gaXRlcmF0ZV9tbV9saXN0KGxydXZlYywgd2Fs aywgJm1tKTsKKwkJaWYgKG1tKQorCQkJd2Fsa19tbShscnV2ZWMsIG1tLCB3YWxrKTsKKworCQlj b25kX3Jlc2NoZWQoKTsKKwl9IHdoaWxlIChtbSk7CisKKwlmcmVlX21tX3dhbGsod2Fsayk7Citk b25lOgorCWlmICghc3VjY2VzcykgeworCQlpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgJiYgIXNj LT5wcmlvcml0eSkKKwkJCXdhaXRfZXZlbnRfa2lsbGFibGUobHJ1dmVjLT5tbV9zdGF0ZS53YWl0 LAorCQkJCQkgICAgbWF4X3NlcSA8IFJFQURfT05DRShscnVnZW4tPm1heF9zZXEpKTsKKworCQly ZXR1cm4gbWF4X3NlcSA8IFJFQURfT05DRShscnVnZW4tPm1heF9zZXEpOworCX0KKworCVZNX0JV R19PTihtYXhfc2VxICE9IFJFQURfT05DRShscnVnZW4tPm1heF9zZXEpKTsKKworCWluY19tYXhf c2VxKGxydXZlYyk7CisJLyogZWl0aGVyIHRoaXMgc2VlcyBhbnkgd2FpdGVycyBvciB0aGV5IHdp bGwgc2VlIHVwZGF0ZWQgbWF4X3NlcSAqLworCWlmICh3cV9oYXNfc2xlZXBlcigmbHJ1dmVjLT5t bV9zdGF0ZS53YWl0KSkKKwkJd2FrZV91cF9hbGwoJmxydXZlYy0+bW1fc3RhdGUud2FpdCk7CisK Kwl3YWtldXBfZmx1c2hlcl90aHJlYWRzKFdCX1JFQVNPTl9WTVNDQU4pOworCisJcmV0dXJuIHRy dWU7Cit9CisKIHN0YXRpYyBsb25nIGdldF9ucl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1 dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgKm1pbl9z ZXEsIGJvb2wgY2FuX3N3YXAsIGJvb2wgKm5lZWRfYWdpbmcpCiB7CkBAIC0zNDUzLDcgKzQzMzks NyBAQCBzdGF0aWMgdm9pZCBhZ2VfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0 IHNjYW5fY29udHJvbCAqc2MpCiAJCW5yX3RvX3NjYW4rKzsKIAogCWlmIChucl90b19zY2FuICYm IG5lZWRfYWdpbmcgJiYgKCFtZW1fY2dyb3VwX2JlbG93X2xvdyhtZW1jZykgfHwgc2MtPm1lbWNn X2xvd19yZWNsYWltKSkKLQkJaW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxKTsKKwkJdHJ5X3Rv X2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc2MsIHN3YXBwaW5lc3MsIGZhbHNlKTsKIH0K IAogc3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0 LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKQEAgLTM0NjIsNiArNDM0OCw4IEBAIHN0YXRpYyB2 b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNj YW5fY29udHJvbCAqc2MpCiAKIAlWTV9CVUdfT04oIWN1cnJlbnRfaXNfa3N3YXBkKCkpOwogCisJ Y3VycmVudC0+cmVjbGFpbV9zdGF0ZS0+bW1fd2FsayA9ICZwZ2RhdC0+bW1fd2FsazsKKwogCW1l bWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpOwogCWRvIHsKIAkJc3RydWN0 IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKQEAgLTM0 NzAsMTEgKzQzNTgsMTYgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGds aXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCQljb25kX3Jlc2No ZWQoKTsKIAl9IHdoaWxlICgobWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5V TEwpKSk7CisKKwljdXJyZW50LT5yZWNsYWltX3N0YXRlLT5tbV93YWxrID0gTlVMTDsKIH0KIAog LyoKICAqIFRoaXMgZnVuY3Rpb24gZXhwbG9pdHMgc3BhdGlhbCBsb2NhbGl0eSB3aGVuIHNocmlu a19wYWdlX2xpc3QoKSB3YWxrcyB0aGUKICAqIHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQ VEVzIG9mIGEgeW91bmcgUFRFIGFuZCBwcm9tb3RlcyBob3QgcGFnZXMuCisgKiBJZiB0aGUgc2Nh biB3YXMgZG9uZSBjYWNoZWxpbmUgZWZmaWNpZW50bHksIGl0IGFkZHMgdGhlIFBNRCBlbnRyeSBw b2ludGluZworICogdG8gdGhlIFBURSB0YWJsZSB0byB0aGUgQmxvb20gZmlsdGVyLiBUaGlzIHBy b2Nlc3MgaXMgYSBmZWVkYmFjayBsb29wIGZyb20KKyAqIHRoZSBldmljdGlvbiB0byB0aGUgYWdp bmcuCiAgKi8KIHZvaWQgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVk X3dhbGsgKnB2bXcpCiB7CkBAIC0zNDg0LDYgKzQzNzcsOCBAQCB2b2lkIGxydV9nZW5fbG9va19h cm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogCXVuc2lnbmVkIGxvbmcg ZW5kOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOworCXN0cnVj dCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CisJaW50IHlvdW5nID0gMDsKIAl1bnNpZ25lZCBsb25n IGJpdG1hcFtCSVRTX1RPX0xPTkdTKE1JTl9MUlVfQkFUQ0gpXSA9IHt9OwogCXN0cnVjdCBtZW1f Y2dyb3VwICptZW1jZyA9IHBhZ2VfbWVtY2cocHZtdy0+cGFnZSk7CiAJc3RydWN0IHBnbGlzdF9k YXRhICpwZ2RhdCA9IHBhZ2VfcGdkYXQocHZtdy0+cGFnZSk7CkBAIC0zNTQxLDYgKzQ0MzYsOCBA QCB2b2lkIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpw dm13KQogCQlpZiAoIXB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcocHZtdy0+dm1hLCBhZGRyLCBw dGUgKyBpKSkKIAkJCWNvbnRpbnVlOwogCisJCXlvdW5nKys7CisKIAkJaWYgKHB0ZV9kaXJ0eShw dGVbaV0pICYmICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmJgogCQkgICAgIShmb2xpb190ZXN0 X2Fub24oZm9saW8pICYmIGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgJiYKIAkJICAgICAg IWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpCkBAIC0zNTU2LDcgKzQ0NTMsMTMgQEAgdm9p ZCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykK IAlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCWlm IChiaXRtYXBfd2VpZ2h0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCkgPCBQQUdFVkVDX1NJWkUpIHsK KwkvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi8K KwlpZiAoc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpCisJCXVwZGF0ZV9ibG9vbV9maWx0ZXIo bHJ1dmVjLCBtYXhfc2VxLCBwdm13LT5wbWQpOworCisJd2FsayA9IGN1cnJlbnQtPnJlY2xhaW1f c3RhdGUgPyBjdXJyZW50LT5yZWNsYWltX3N0YXRlLT5tbV93YWxrIDogTlVMTDsKKworCWlmICgh d2FsayAmJiBiaXRtYXBfd2VpZ2h0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCkgPCBQQUdFVkVDX1NJ WkUpIHsKIAkJZm9yX2VhY2hfc2V0X2JpdChpLCBiaXRtYXAsIE1JTl9MUlVfQkFUQ0gpIHsKIAkJ CWZvbGlvID0gcGFnZV9mb2xpbyhwdGVfcGFnZShwdGVbaV0pKTsKIAkJCWZvbGlvX2FjdGl2YXRl KGZvbGlvKTsKQEAgLTM1NjgsOCArNDQ3MSwxMCBAQCB2b2lkIGxydV9nZW5fbG9va19hcm91bmQo c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogCWlmICghbWVtX2Nncm91cF90cnls b2NrX3BhZ2VzKG1lbWNnKSkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycSgmbHJ1dmVjLT5s cnVfbG9jayk7Ci0JbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1dmVjLT5scnVnZW4ubWF4 X3NlcSk7CisJaWYgKCF3YWxrKSB7CisJCXNwaW5fbG9ja19pcnEoJmxydXZlYy0+bHJ1X2xvY2sp OworCQluZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnV2ZWMtPmxydWdlbi5tYXhfc2VxKTsK Kwl9CiAKIAlmb3JfZWFjaF9zZXRfYml0KGksIGJpdG1hcCwgTUlOX0xSVV9CQVRDSCkgewogCQlm b2xpbyA9IHBhZ2VfZm9saW8ocHRlX3BhZ2UocHRlW2ldKSk7CkBAIC0zNTgwLDEwICs0NDg1LDE0 IEBAIHZvaWQgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsg KnB2bXcpCiAJCWlmIChvbGRfZ2VuIDwgMCB8fCBvbGRfZ2VuID09IG5ld19nZW4pCiAJCQljb250 aW51ZTsKIAotCQlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5l d19nZW4pOworCQlpZiAod2FsaykKKwkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBv bGRfZ2VuLCBuZXdfZ2VuKTsKKwkJZWxzZQorCQkJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMs IGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnEoJmxydXZl Yy0+bHJ1X2xvY2spOworCWlmICghd2FsaykKKwkJc3Bpbl91bmxvY2tfaXJxKCZscnV2ZWMtPmxy dV9sb2NrKTsKIAogCW1lbV9jZ3JvdXBfdW5sb2NrX3BhZ2VzKCk7CiB9CkBAIC0zODUwLDYgKzQ3 NTksNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0 cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJ ZW51bSB2bV9ldmVudF9pdGVtIGl0ZW07CiAJc3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0OworCXN0 cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0g bHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZl Y19wZ2RhdChscnV2ZWMpOwogCkBAIC0zODg5LDYgKzQ3OTksMTAgQEAgc3RhdGljIGludCBldmlj dF9mb2xpb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywg aW50IHN3YXAKIAogCW1vdmVfcGFnZXNfdG9fbHJ1KGxydXZlYywgJmxpc3QpOwogCisJd2FsayA9 IGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPyBjdXJyZW50LT5yZWNsYWltX3N0YXRlLT5tbV93YWxr IDogTlVMTDsKKwlpZiAod2FsayAmJiB3YWxrLT5iYXRjaGVkKQorCQlyZXNldF9iYXRjaF9zaXpl KGxydXZlYywgd2Fsayk7CisKIAlpdGVtID0gY3VycmVudF9pc19rc3dhcGQoKSA/IFBHU1RFQUxf S1NXQVBEIDogUEdTVEVBTF9ESVJFQ1Q7CiAJaWYgKCFjZ3JvdXBfcmVjbGFpbShzYykpCiAJCV9f Y291bnRfdm1fZXZlbnRzKGl0ZW0sIHJlY2xhaW1lZCk7CkBAIC0zOTQzLDIwICs0ODU3LDI1IEBA IHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0 IHNjYW5fY29udHJvbCAqc2MsIGJvb2wKIAkJcmV0dXJuIDA7CiAJfQogCi0JaW5jX21heF9zZXEo bHJ1dmVjLCBtYXhfc2VxKTsKKwlpZiAodHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3Nl cSwgc2MsIGNhbl9zd2FwLCBmYWxzZSkpCisJCXJldHVybiBucl90b19zY2FuOwogCi0JcmV0dXJu IG5yX3RvX3NjYW47CisJcmV0dXJuIG1pbl9zZXFbTFJVX0dFTl9GSUxFXSArIE1JTl9OUl9HRU5T IDw9IG1heF9zZXEgPyBucl90b19zY2FuIDogMDsKIH0KIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9z aHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAq c2MpCiB7CiAJc3RydWN0IGJsa19wbHVnIHBsdWc7CiAJbG9uZyBzY2FubmVkID0gMDsKKwlzdHJ1 Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7CiAKIAlscnVfYWRk X2RyYWluKCk7CiAKIAlibGtfc3RhcnRfcGx1ZygmcGx1Zyk7CiAKKwlpZiAoY3VycmVudF9pc19r c3dhcGQoKSkKKwkJY3VycmVudC0+cmVjbGFpbV9zdGF0ZS0+bW1fd2FsayA9ICZwZ2RhdC0+bW1f d2FsazsKKwogCXdoaWxlICh0cnVlKSB7CiAJCWludCBkZWx0YTsKIAkJaW50IHN3YXBwaW5lc3M7 CkBAIC0zOTg0LDYgKzQ5MDMsOSBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMo c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYwogCQljb25kX3Jl c2NoZWQoKTsKIAl9CiAKKwlpZiAoY3VycmVudF9pc19rc3dhcGQoKSkKKwkJY3VycmVudC0+cmVj bGFpbV9zdGF0ZS0+bW1fd2FsayA9IE5VTEw7CisKIAlibGtfZmluaXNoX3BsdWcoJnBsdWcpOwog fQogCkBAIC00MDAwLDE1ICs0OTIyLDIxIEBAIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1 Y3QgbHJ1dmVjICpscnV2ZWMpCiAKIAlmb3JfZWFjaF9nZW5fdHlwZV96b25lKGdlbiwgdHlwZSwg em9uZSkKIAkJSU5JVF9MSVNUX0hFQUQoJmxydWdlbi0+bGlzdHNbZ2VuXVt0eXBlXVt6b25lXSk7 CisKKwlscnV2ZWMtPm1tX3N0YXRlLnNlcSA9IE1JTl9OUl9HRU5TOworCWluaXRfd2FpdHF1ZXVl X2hlYWQoJmxydXZlYy0+bW1fc3RhdGUud2FpdCk7CiB9CiAKICNpZmRlZiBDT05GSUdfTUVNQ0cK IHZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKKwlJ TklUX0xJU1RfSEVBRCgmbWVtY2ctPm1tX2xpc3QuZmlmbyk7CisJc3Bpbl9sb2NrX2luaXQoJm1l bWNnLT5tbV9saXN0LmxvY2spOwogfQogCiB2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3Qg bWVtX2Nncm91cCAqbWVtY2cpCiB7CisJaW50IGk7CiAJaW50IG5pZDsKIAogCWZvcl9lYWNoX25v ZGUobmlkKSB7CkBAIC00MDE2LDYgKzQ5NDQsMTEgQEAgdm9pZCBscnVfZ2VuX2V4aXRfbWVtY2co c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCiAJCVZNX0JVR19PTihtZW1jaHJfaW52KGxydXZl Yy0+bHJ1Z2VuLm5yX3BhZ2VzLCAwLAogCQkJCSAgICAgc2l6ZW9mKGxydXZlYy0+bHJ1Z2VuLm5y X3BhZ2VzKSkpOworCisJCWZvciAoaSA9IDA7IGkgPCBOUl9CTE9PTV9GSUxURVJTOyBpKyspIHsK KwkJCWJpdG1hcF9mcmVlKGxydXZlYy0+bW1fc3RhdGUuZmlsdGVyc1tpXSk7CisJCQlscnV2ZWMt Pm1tX3N0YXRlLmZpbHRlcnNbaV0gPSBOVUxMOworCQl9CiAJfQogfQogI2VuZGlmCkBAIC00MDI0 LDYgKzQ5NTcsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZCkKIHsKIAlC VUlMRF9CVUdfT04oTUlOX05SX0dFTlMgKyAxID49IE1BWF9OUl9HRU5TKTsKIAlCVUlMRF9CVUdf T04oQklUKExSVV9HRU5fV0lEVEgpIDw9IE1BWF9OUl9HRU5TKTsKKwlCVUlMRF9CVUdfT04oc2l6 ZW9mKE1NX1NUQVRfQ09ERVMpICE9IE5SX01NX1NUQVRTICsgMSk7CiAKIAlyZXR1cm4gMDsKIH07 Ci0tIAoyLjM1LjEuNjE2LmcwYmRjYmI0NDY0LWdvb2cKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAps aW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==