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 lists.lttng.org (lists.lttng.org [167.114.26.123]) (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 B17AEC74A5B for ; Fri, 17 Mar 2023 21:38:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lists.lttng.org; s=default; t=1679089099; bh=MetOdlAhcdFUJ5VLuOzEt+8bszPkcwud1PqqPtFYaS4=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=ZmBOUkmARqB6iBltgAKd4ZzS2IxdvqfqJj92F9WrtWrmGYr5dyKwAZRSg36CN1MNf Bh70u1LhZPhZ/GimXv7n5Ksws+6LJ1q9d0LpAeEPBrzCYLngkJj1TXVd5tq2OU8cic Tb1c+wnSGfw/AFKGB7ixznjGT9FwXIQ1isxvpWLg8WqGz3MRMpXBCfm2N6Zvuy1VXu ewl17Nq87yjlIUbC17wS3yHfcUZU+Ja1VOeFbdcqiqeN7gN4p/6FGNsMJNP8E7VRTq KKL/OUmaJnPxt0sCdpFKBBjyziT3HC12DAyVKtGnn3R1A8BzqZK80PNuBibNF72jjd Qcq+rUoL9J3JQ== Received: from lists-lttng01.efficios.com (localhost [IPv6:::1]) by lists.lttng.org (Postfix) with ESMTP id 4Pdcty6qGRz2Ckr; Fri, 17 Mar 2023 17:38:18 -0400 (EDT) Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by lists.lttng.org (Postfix) with ESMTPS id 4Pdctt3jZbz2Cvv for ; Fri, 17 Mar 2023 17:38:14 -0400 (EDT) Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 4B039320031A; Fri, 17 Mar 2023 17:38:13 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Fri, 17 Mar 2023 17:38:13 -0400 X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrvdefvddgudehtdcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhephffvvefufffkofgjfhggtgfgse htkeertdertdejnecuhfhrohhmpefqnhgurhgvjhcuufhurhpuuceoohhnughrvghjsehs uhhrhidrohhrgheqnecuggftrfgrthhtvghrnheptdeigeegheetteetteegveeuueeife evtdfgjeejfeeivefffedvudefudevgfeunecuffhomhgrihhnpehgnhhurdhorhhgnecu vehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepohhnughrvg hjsehsuhhrhidrohhrgh X-ME-Proxy: Feedback-ID: ida81469e:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 17 Mar 2023 17:38:11 -0400 (EDT) To: lttng-dev@lists.lttng.org Date: Fri, 17 Mar 2023 22:37:50 +0100 Message-Id: <20230317213755.455957-3-ondrej@sury.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230317213755.455957-1-ondrej@sury.org> References: <20230317213755.455957-1-ondrej@sury.org> MIME-Version: 1.0 Subject: [lttng-dev] [PATCH 2/7] Use gcc __atomic builtis for implementation X-BeenThere: lttng-dev@lists.lttng.org X-Mailman-Version: 2.1.39 Precedence: list List-Id: LTTng development list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: =?utf-8?q?Ond=C5=99ej_Sur=C3=BD_via_lttng-dev?= Reply-To: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: lttng-dev-bounces@lists.lttng.org Sender: "lttng-dev" UmVwbGFjZSB0aGUgY3VzdG9tIGFzc2VtYmx5IGNvZGUgaW4gaW5jbHVkZS91cmN1L3VhdG9taWMv IHdpdGggX19hdG9taWMKYnVpbHRpbnMgcHJvdmlkZWQgYnkgQzExLWNvbXBhdGlibGUgY29tcGls ZXIuCgpTaWduZWQtb2ZmLWJ5OiBPbmTFmWVqIFN1csO9IDxvbmRyZWpAc3VyeS5vcmc+Ci0tLQog aW5jbHVkZS9NYWtlZmlsZS5hbSAgICAgICAgICAgIHwgIDE2IC0KIGluY2x1ZGUvdXJjdS91YXRv bWljLmggICAgICAgICB8ICA4NCArKystLQogaW5jbHVkZS91cmN1L3VhdG9taWMvYWFyY2g2NC5o IHwgIDQxIC0tLQogaW5jbHVkZS91cmN1L3VhdG9taWMvYWxwaGEuaCAgIHwgIDMyIC0tCiBpbmNs dWRlL3VyY3UvdWF0b21pYy9hcm0uaCAgICAgfCAgNTcgLS0tCiBpbmNsdWRlL3VyY3UvdWF0b21p Yy9nY2MuaCAgICAgfCAgNDYgLS0tCiBpbmNsdWRlL3VyY3UvdWF0b21pYy9nZW5lcmljLmggfCA2 MTMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaW5jbHVkZS91cmN1L3VhdG9taWMv aHBwYS5oICAgIHwgIDEwIC0KIGluY2x1ZGUvdXJjdS91YXRvbWljL2lhNjQuaCAgICB8ICA0MSAt LS0KIGluY2x1ZGUvdXJjdS91YXRvbWljL202OGsuaCAgICB8ICA0NCAtLS0KIGluY2x1ZGUvdXJj dS91YXRvbWljL21pcHMuaCAgICB8ICAzMiAtLQogaW5jbHVkZS91cmN1L3VhdG9taWMvbmlvczIu aCAgIHwgIDMyIC0tCiBpbmNsdWRlL3VyY3UvdWF0b21pYy9wcGMuaCAgICAgfCAyMzcgLS0tLS0t LS0tLS0tCiBpbmNsdWRlL3VyY3UvdWF0b21pYy9yaXNjdi5oICAgfCAgNDQgLS0tCiBpbmNsdWRl L3VyY3UvdWF0b21pYy9zMzkwLmggICAgfCAxNzAgLS0tLS0tLS0tCiBpbmNsdWRlL3VyY3UvdWF0 b21pYy9zcGFyYzY0LmggfCAgODEgLS0tLS0KIGluY2x1ZGUvdXJjdS91YXRvbWljL3RpbGUuaCAg ICB8ICA0MSAtLS0KIGluY2x1ZGUvdXJjdS91YXRvbWljL3g4Ni5oICAgICB8IDY0NiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDE4IGZpbGVzIGNoYW5nZWQsIDUzIGluc2VydGlv bnMoKyksIDIyMTQgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91cmN1 L3VhdG9taWMvYWFyY2g2NC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91cmN1L3VhdG9t aWMvYWxwaGEuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdXJjdS91YXRvbWljL2FybS5o CiBkZWxldGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91cmN1L3VhdG9taWMvZ2NjLmgKIGRlbGV0ZSBt b2RlIDEwMDY0NCBpbmNsdWRlL3VyY3UvdWF0b21pYy9nZW5lcmljLmgKIGRlbGV0ZSBtb2RlIDEw MDY0NCBpbmNsdWRlL3VyY3UvdWF0b21pYy9ocHBhLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbmNs dWRlL3VyY3UvdWF0b21pYy9pYTY0LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VyY3Uv dWF0b21pYy9tNjhrLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VyY3UvdWF0b21pYy9t aXBzLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VyY3UvdWF0b21pYy9uaW9zMi5oCiBk ZWxldGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91cmN1L3VhdG9taWMvcHBjLmgKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBpbmNsdWRlL3VyY3UvdWF0b21pYy9yaXNjdi5oCiBkZWxldGUgbW9kZSAxMDA2NDQg aW5jbHVkZS91cmN1L3VhdG9taWMvczM5MC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91 cmN1L3VhdG9taWMvc3BhcmM2NC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91cmN1L3Vh dG9taWMvdGlsZS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91cmN1L3VhdG9taWMveDg2 LmgKCmRpZmYgLS1naXQgYS9pbmNsdWRlL01ha2VmaWxlLmFtIGIvaW5jbHVkZS9NYWtlZmlsZS5h bQppbmRleCBiYTFmZTYwLi41M2EyOGZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL01ha2VmaWxlLmFt CisrKyBiL2luY2x1ZGUvTWFrZWZpbGUuYW0KQEAgLTU5LDI0ICs1OSw4IEBAIG5vYmFzZV9pbmNs dWRlX0hFQURFUlMgPSBcCiAJdXJjdS9zeXNjYWxsLWNvbXBhdC5oIFwKIAl1cmN1L3N5c3RlbS5o IFwKIAl1cmN1L3Rscy1jb21wYXQuaCBcCi0JdXJjdS91YXRvbWljL2FhcmNoNjQuaCBcCi0JdXJj dS91YXRvbWljL2FscGhhLmggXAogCXVyY3UvdWF0b21pY19hcmNoLmggXAotCXVyY3UvdWF0b21p Yy9hcm0uaCBcCi0JdXJjdS91YXRvbWljL2djYy5oIFwKLQl1cmN1L3VhdG9taWMvZ2VuZXJpYy5o IFwKIAl1cmN1L3VhdG9taWMuaCBcCi0JdXJjdS91YXRvbWljL2hwcGEuaCBcCi0JdXJjdS91YXRv bWljL2lhNjQuaCBcCi0JdXJjdS91YXRvbWljL202OGsuaCBcCi0JdXJjdS91YXRvbWljL21pcHMu aCBcCi0JdXJjdS91YXRvbWljL25pb3MyLmggXAotCXVyY3UvdWF0b21pYy9wcGMuaCBcCi0JdXJj dS91YXRvbWljL3Jpc2N2LmggXAotCXVyY3UvdWF0b21pYy9zMzkwLmggXAotCXVyY3UvdWF0b21p Yy9zcGFyYzY0LmggXAotCXVyY3UvdWF0b21pYy90aWxlLmggXAotCXVyY3UvdWF0b21pYy94ODYu aCBcCiAJdXJjdS91cmN1LWJwLmggXAogCXVyY3UvdXJjdS1mdXRleC5oIFwKIAl1cmN1L3VyY3Uu aCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VyY3UvdWF0b21pYy5oIGIvaW5jbHVkZS91cmN1L3Vh dG9taWMuaAppbmRleCAyZmI1ZmQ0Li40ZGJlZjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VyY3Uv dWF0b21pYy5oCisrKyBiL2luY2x1ZGUvdXJjdS91YXRvbWljLmgKQEAgLTIyLDM3ICsyMiw1OSBA QAogI2RlZmluZSBfVVJDVV9VQVRPTUlDX0gKIAogI2luY2x1ZGUgPHVyY3UvYXJjaC5oPgorI2lu Y2x1ZGUgPHVyY3Uvc3lzdGVtLmg+CiAKLSNpZiBkZWZpbmVkKFVSQ1VfQVJDSF9YODYpCi0jaW5j bHVkZSA8dXJjdS91YXRvbWljL3g4Ni5oPgotI2VsaWYgZGVmaW5lZChVUkNVX0FSQ0hfUFBDKQot I2luY2x1ZGUgPHVyY3UvdWF0b21pYy9wcGMuaD4KLSNlbGlmIGRlZmluZWQoVVJDVV9BUkNIX1Mz OTApCi0jaW5jbHVkZSA8dXJjdS91YXRvbWljL3MzOTAuaD4KLSNlbGlmIGRlZmluZWQoVVJDVV9B UkNIX1NQQVJDNjQpCi0jaW5jbHVkZSA8dXJjdS91YXRvbWljL3NwYXJjNjQuaD4KLSNlbGlmIGRl ZmluZWQoVVJDVV9BUkNIX0FMUEhBKQotI2luY2x1ZGUgPHVyY3UvdWF0b21pYy9hbHBoYS5oPgot I2VsaWYgZGVmaW5lZChVUkNVX0FSQ0hfSUE2NCkKLSNpbmNsdWRlIDx1cmN1L3VhdG9taWMvaWE2 NC5oPgotI2VsaWYgZGVmaW5lZChVUkNVX0FSQ0hfQVJNKQotI2luY2x1ZGUgPHVyY3UvdWF0b21p Yy9hcm0uaD4KLSNlbGlmIGRlZmluZWQoVVJDVV9BUkNIX0FBUkNINjQpCi0jaW5jbHVkZSA8dXJj dS91YXRvbWljL2FhcmNoNjQuaD4KLSNlbGlmIGRlZmluZWQoVVJDVV9BUkNIX01JUFMpCi0jaW5j bHVkZSA8dXJjdS91YXRvbWljL21pcHMuaD4KLSNlbGlmIGRlZmluZWQoVVJDVV9BUkNIX05JT1My KQotI2luY2x1ZGUgPHVyY3UvdWF0b21pYy9uaW9zMi5oPgotI2VsaWYgZGVmaW5lZChVUkNVX0FS Q0hfVElMRSkKLSNpbmNsdWRlIDx1cmN1L3VhdG9taWMvdGlsZS5oPgotI2VsaWYgZGVmaW5lZChV UkNVX0FSQ0hfSFBQQSkKLSNpbmNsdWRlIDx1cmN1L3VhdG9taWMvaHBwYS5oPgotI2VsaWYgZGVm aW5lZChVUkNVX0FSQ0hfTTY4SykKLSNpbmNsdWRlIDx1cmN1L3VhdG9taWMvbTY4ay5oPgotI2Vs aWYgZGVmaW5lZChVUkNVX0FSQ0hfUklTQ1YpCi0jaW5jbHVkZSA8dXJjdS91YXRvbWljL3Jpc2N2 Lmg+Ci0jZWxzZQotI2Vycm9yICJDYW5ub3QgYnVpbGQ6IHVucmVjb2duaXplZCBhcmNoaXRlY3R1 cmUsIHNlZSA8dXJjdS9hcmNoLmg+LiIKLSNlbmRpZgorI2RlZmluZSBVQVRPTUlDX0hBU19BVE9N SUNfQllURQorI2RlZmluZSBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKKworI2RlZmluZSB1YXRv bWljX3NldChhZGRyLCB2KSBfX2F0b21pY19zdG9yZV9uKGFkZHIsIHYsIF9fQVRPTUlDX1JFTEVB U0UpCisKKyNkZWZpbmUgdWF0b21pY19yZWFkKGFkZHIpIF9fYXRvbWljX2xvYWRfbigoYWRkciks IF9fQVRPTUlDX0NPTlNVTUUpCisKKyNkZWZpbmUgdWF0b21pY194Y2hnKGFkZHIsIHYpIF9fYXRv bWljX2V4Y2hhbmdlX24oKGFkZHIpLCAodiksIF9fQVRPTUlDX0FDUV9SRUwpCisKKyNkZWZpbmUg dWF0b21pY19jbXB4Y2hnKGFkZHIsIG9sZCwgbmV3KSBcCisJKHsJCQkJCQkJCQlcCisJCV9fdHlw ZW9mX18oKihhZGRyKSkgX19vbGQgPSBvbGQ7CQkJCVwKKwkJX19hdG9taWNfY29tcGFyZV9leGNo YW5nZV9uKGFkZHIsICZfX29sZCwgbmV3LCAwLAkJXAorCQkJCQkgICAgX19BVE9NSUNfQUNRX1JF TCwgX19BVE9NSUNfQ09OU1VNRSk7XAorCQlfX29sZDsJCQkJCQkJCVwKKwl9KQorCisjZGVmaW5l IHVhdG9taWNfYWRkX3JldHVybihhZGRyLCB2KSBcCisJX19hdG9taWNfYWRkX2ZldGNoKChhZGRy KSwgKHYpLCBfX0FUT01JQ19BQ1FfUkVMKQorCisjZGVmaW5lIHVhdG9taWNfYWRkKGFkZHIsIHYp IFwKKwkodm9pZClfX2F0b21pY19hZGRfZmV0Y2goKGFkZHIpLCAodiksIF9fQVRPTUlDX1JFTEFY RUQpCisKKyNkZWZpbmUgdWF0b21pY19zdWJfcmV0dXJuKGFkZHIsIHYpIFwKKwlfX2F0b21pY19z dWJfZmV0Y2goKGFkZHIpLCAodiksIF9fQVRPTUlDX0FDUV9SRUwpCisKKyNkZWZpbmUgdWF0b21p Y19zdWIoYWRkciwgdikgXAorCSh2b2lkKV9fYXRvbWljX3N1Yl9mZXRjaCgoYWRkciksICh2KSwg X19BVE9NSUNfUkVMQVhFRCkKKworI2RlZmluZSB1YXRvbWljX2FuZChhZGRyLCBtYXNrKSBcCisJ KHZvaWQpX19hdG9taWNfYW5kX2ZldGNoKChhZGRyKSwgKG1hc2spLCBfX0FUT01JQ19SRUxBWEVE KQorCisjZGVmaW5lIHVhdG9taWNfb3IoYWRkciwgbWFzaykJCQkJCQlcCisJKHZvaWQpX19hdG9t aWNfb3JfZmV0Y2goKGFkZHIpLCAobWFzayksIF9fQVRPTUlDX1JFTEFYRUQpCisKKyNkZWZpbmUg dWF0b21pY19pbmMoYWRkcikgKHZvaWQpX19hdG9taWNfYWRkX2ZldGNoKChhZGRyKSwgMSwgX19B VE9NSUNfUkVMQVhFRCkKKyNkZWZpbmUgdWF0b21pY19kZWMoYWRkcikgKHZvaWQpX19hdG9taWNf c3ViX2ZldGNoKChhZGRyKSwgMSwgX19BVE9NSUNfUkVMQVhFRCkKKworI2RlZmluZSBjbW1fc21w X21iX19iZWZvcmVfdWF0b21pY19hbmQoKQlfX2F0b21pY190aHJlYWRfZmVuY2UoX19BVE9NSUNf QUNRX1JFTCkKKyNkZWZpbmUgY21tX3NtcF9tYl9fYWZ0ZXJfdWF0b21pY19hbmQoKQkJX19hdG9t aWNfdGhyZWFkX2ZlbmNlKF9fQVRPTUlDX0FDUV9SRUwpCisjZGVmaW5lIGNtbV9zbXBfbWJfX2Jl Zm9yZV91YXRvbWljX29yKCkJCV9fYXRvbWljX3RocmVhZF9mZW5jZShfX0FUT01JQ19BQ1FfUkVM KQorI2RlZmluZSBjbW1fc21wX21iX19hZnRlcl91YXRvbWljX29yKCkJCV9fYXRvbWljX3RocmVh ZF9mZW5jZShfX0FUT01JQ19BQ1FfUkVMKQorI2RlZmluZSBjbW1fc21wX21iX19iZWZvcmVfdWF0 b21pY19hZGQoKQlfX2F0b21pY190aHJlYWRfZmVuY2UoX19BVE9NSUNfQUNRX1JFTCkKKyNkZWZp bmUgY21tX3NtcF9tYl9fYWZ0ZXJfdWF0b21pY19hZGQoKQkJX19hdG9taWNfdGhyZWFkX2ZlbmNl KF9fQVRPTUlDX0FDUV9SRUwpCisjZGVmaW5lIGNtbV9zbXBfbWJfX2JlZm9yZV91YXRvbWljX3N1 YigpCWNtbV9zbXBfbWJfX2JlZm9yZV91YXRvbWljX2FkZCgpCisjZGVmaW5lIGNtbV9zbXBfbWJf X2FmdGVyX3VhdG9taWNfc3ViKCkJCWNtbV9zbXBfbWJfX2FmdGVyX3VhdG9taWNfYWRkKCkKKyNk ZWZpbmUgY21tX3NtcF9tYl9fYmVmb3JlX3VhdG9taWNfaW5jKCkJY21tX3NtcF9tYl9fYmVmb3Jl X3VhdG9taWNfYWRkKCkKKyNkZWZpbmUgY21tX3NtcF9tYl9fYWZ0ZXJfdWF0b21pY19pbmMoKQkJ Y21tX3NtcF9tYl9fYWZ0ZXJfdWF0b21pY19hZGQoKQorI2RlZmluZSBjbW1fc21wX21iX19iZWZv cmVfdWF0b21pY19kZWMoKQljbW1fc21wX21iX19iZWZvcmVfdWF0b21pY19hZGQoKQorI2RlZmlu ZSBjbW1fc21wX21iX19hZnRlcl91YXRvbWljX2RlYygpCQljbW1fc21wX21iX19hZnRlcl91YXRv bWljX2FkZCgpCisKKyNkZWZpbmUgY21tX3NtcF9tYigpCQkJCWNtbV9tYigpCiAKICNlbmRpZiAv KiBfVVJDVV9VQVRPTUlDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXJjdS91YXRvbWljL2Fh cmNoNjQuaCBiL2luY2x1ZGUvdXJjdS91YXRvbWljL2FhcmNoNjQuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNTg2OThjZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3VyY3UvdWF0b21p Yy9hYXJjaDY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jaWZuZGVmIF9VUkNV X0FSQ0hfVUFUT01JQ19BQVJDSDY0X0gKLSNkZWZpbmUgX1VSQ1VfQVJDSF9VQVRPTUlDX0FBUkNI NjRfSAotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkxLTE5OTQgYnkgWGVyb3ggQ29ycG9yYXRp b24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkg U2lsaWNvbiBHcmFwaGljcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMp IDE5OTktMjAwNCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgotICog Q29weXJpZ2h0IChjKSAyMDA5LTIwMTUgTWF0aGlldSBEZXNub3llcnMKLSAqIENvcHlyaWdodCAo YykgMjAxMCAgICAgIFBhdWwgRS4gTWNLZW5uZXksIElCTSBDb3Jwb3JhdGlvbgotICoJCQkgICAo QWRhcHRlZCBmcm9tIHVhdG9taWNfYXJjaF9wcGMuaCkKLSAqCi0gKiBUSElTIE1BVEVSSUFMIElT IFBST1ZJREVEIEFTIElTLCBXSVRIIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkgRVhQUkVTU0VECi0g KiBPUiBJTVBMSUVELiAgQU5ZIFVTRSBJUyBBVCBZT1VSIE9XTiBSSVNLLgotICoKLSAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlIG9yIGNvcHkgdGhpcyBwcm9ncmFtCi0gKiBm b3IgYW55IHB1cnBvc2UsICBwcm92aWRlZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWluZWQg b24gYWxsIGNvcGllcy4KLSAqIFBlcm1pc3Npb24gdG8gbW9kaWZ5IHRoZSBjb2RlIGFuZCB0byBk aXN0cmlidXRlIG1vZGlmaWVkIGNvZGUgaXMgZ3JhbnRlZCwKLSAqIHByb3ZpZGVkIHRoZSBhYm92 ZSBub3RpY2VzIGFyZSByZXRhaW5lZCwgYW5kIGEgbm90aWNlIHRoYXQgdGhlIGNvZGUgd2FzCi0g KiBtb2RpZmllZCBpcyBpbmNsdWRlZCB3aXRoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLgot ICoKLSAqIENvZGUgaW5zcGlyZWQgZnJvbSBsaWJ1YXRvbWljX29wcy0xLjIsIGluaGVyaXRlZCBp biBwYXJ0IGZyb20gdGhlCi0gKiBCb2VobS1EZW1lcnMtV2Vpc2VyIGNvbnNlcnZhdGl2ZSBnYXJi YWdlIGNvbGxlY3Rvci4KLSAqLwotCi0jaW5jbHVkZSA8dXJjdS9jb21waWxlci5oPgotI2luY2x1 ZGUgPHVyY3Uvc3lzdGVtLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0j ZW5kaWYKLQotI2RlZmluZSBVQVRPTUlDX0hBU19BVE9NSUNfQllURQotI2RlZmluZSBVQVRPTUlD X0hBU19BVE9NSUNfU0hPUlQKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2lu Y2x1ZGUgPHVyY3UvdWF0b21pYy9nZW5lcmljLmg+Ci0KLSNlbmRpZiAvKiBfVVJDVV9BUkNIX1VB VE9NSUNfQUFSQ0g2NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VyY3UvdWF0b21pYy9hbHBo YS5oIGIvaW5jbHVkZS91cmN1L3VhdG9taWMvYWxwaGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggNWRjZWI5MC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3VyY3UvdWF0b21pYy9hbHBo YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2lmbmRlZiBfVVJDVV9VQVRPTUlD X0FSQ0hfQUxQSEFfSAotI2RlZmluZSBfVVJDVV9VQVRPTUlDX0FSQ0hfQUxQSEFfSAotCi0vKgot ICogQXRvbWljIGV4Y2hhbmdlIG9wZXJhdGlvbnMgZm9yIHRoZSBBbHBoYSBhcmNoaXRlY3R1cmUu IExldCBHQ0MgZG8gaXQuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFBhb2xvIEJvbnppbmkg PHBib256aW5pQHJlZGhhdC5jb20+Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksIHRvCi0gKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQotICogcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29y Ci0gKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICog YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgot ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hB TEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDx1cmN1L2Nv bXBpbGVyLmg+Ci0jaW5jbHVkZSA8dXJjdS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDx1cmN1L3VhdG9t aWMvZ2VuZXJpYy5oPgotCi0jZW5kaWYgLyogX1VSQ1VfVUFUT01JQ19BUkNIX0FMUEhBX0ggKi8K ZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXJjdS91YXRvbWljL2FybS5oIGIvaW5jbHVkZS91cmN1L3Vh dG9taWMvYXJtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZjMyZjMuLjAwMDAw MDAKLS0tIGEvaW5jbHVkZS91cmN1L3VhdG9taWMvYXJtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1 NyArMCwwIEBACi0jaWZuZGVmIF9VUkNVX0FSQ0hfVUFUT01JQ19BUk1fSAotI2RlZmluZSBfVVJD VV9BUkNIX1VBVE9NSUNfQVJNX0gKLQotLyoKLSAqIEF0b21pY3MgZm9yIEFSTS4gIFRoaXMgYXBw cm9hY2ggaXMgdXNhYmxlIG9uIGtlcm5lbHMgYmFjayB0byAyLjYuMTUuCi0gKgotICogQ29weXJp Z2h0IChjKSAxOTkxLTE5OTQgYnkgWGVyb3ggQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgU2lsaWNvbiBHcmFwaGljcy4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNCBIZXdsZXR0LVBh Y2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgotICogQ29weXJpZ2h0IChjKSAyMDA5ICAg ICAgTWF0aGlldSBEZXNub3llcnMKLSAqIENvcHlyaWdodCAoYykgMjAxMCAgICAgIFBhdWwgRS4g TWNLZW5uZXksIElCTSBDb3Jwb3JhdGlvbgotICoJCQkgICAoQWRhcHRlZCBmcm9tIHVhdG9taWNf YXJjaF9wcGMuaCkKLSAqCi0gKiBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEFTIElTLCBXSVRI IEFCU09MVVRFTFkgTk8gV0FSUkFOVFkgRVhQUkVTU0VECi0gKiBPUiBJTVBMSUVELiAgQU5ZIFVT RSBJUyBBVCBZT1VSIE9XTiBSSVNLLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQgdG8gdXNlIG9yIGNvcHkgdGhpcyBwcm9ncmFtCi0gKiBmb3IgYW55IHB1cnBvc2UsICBwcm92 aWRlZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWluZWQgb24gYWxsIGNvcGllcy4KLSAqIFBl cm1pc3Npb24gdG8gbW9kaWZ5IHRoZSBjb2RlIGFuZCB0byBkaXN0cmlidXRlIG1vZGlmaWVkIGNv ZGUgaXMgZ3JhbnRlZCwKLSAqIHByb3ZpZGVkIHRoZSBhYm92ZSBub3RpY2VzIGFyZSByZXRhaW5l ZCwgYW5kIGEgbm90aWNlIHRoYXQgdGhlIGNvZGUgd2FzCi0gKiBtb2RpZmllZCBpcyBpbmNsdWRl ZCB3aXRoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLgotICoKLSAqIENvZGUgaW5zcGlyZWQg ZnJvbSBsaWJ1YXRvbWljX29wcy0xLjIsIGluaGVyaXRlZCBpbiBwYXJ0IGZyb20gdGhlCi0gKiBC b2VobS1EZW1lcnMtV2Vpc2VyIGNvbnNlcnZhdGl2ZSBnYXJiYWdlIGNvbGxlY3Rvci4KLSAqLwot Ci0jaW5jbHVkZSA8dXJjdS9jb21waWxlci5oPgotI2luY2x1ZGUgPHVyY3Uvc3lzdGVtLmg+Ci0j aW5jbHVkZSA8dXJjdS9hcmNoLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7 Ci0jZW5kaWYKLQotLyogeGNoZyAqLwotCi0vKgotICogQmFzZWQgb24gWzFdLCBfX3N5bmNfbG9j a190ZXN0X2FuZF9zZXQoKSBpcyBub3QgYSBmdWxsIGJhcnJpZXIsIGJ1dAotICogaW5zdGVhZCBv bmx5IGFuIGFjcXVpcmUgYmFycmllci4gR2l2ZW4gdGhhdCB1YXRvbWljX3hjaGcoKSBhY3RzIGFz Ci0gKiBib3RoIHJlbGVhc2UgYW5kIGFjcXVpcmUgYmFycmllcnMsIHdlIHRoZXJlZm9yZSBuZWVk IHRvIGhhdmUgb3VyIG93bgotICogcmVsZWFzZSBiYXJyaWVyIGJlZm9yZSB0aGlzIG9wZXJhdGlv bi4KLSAqCi0gKiBbMV0gaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy00LjEuMC9n Y2MvQXRvbWljLUJ1aWx0aW5zLmh0bWwKLSAqLwotI2RlZmluZSB1YXRvbWljX3hjaGcoYWRkciwg dikJCQkJXAotCSh7CQkJCQkJXAotCQljbW1fc21wX21iKCk7CQkJCVwKLQkJX19zeW5jX2xvY2tf dGVzdF9hbmRfc2V0KGFkZHIsIHYpOwlcCi0JfSkKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0j ZW5kaWYKLQotI2luY2x1ZGUgPHVyY3UvdWF0b21pYy9nZW5lcmljLmg+Ci0KLSNlbmRpZiAvKiBf VVJDVV9BUkNIX1VBVE9NSUNfQVJNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXJjdS91YXRv bWljL2djYy5oIGIvaW5jbHVkZS91cmN1L3VhdG9taWMvZ2NjLmgKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDQzOGUwMzkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS91cmN1L3VhdG9taWMv Z2NjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0jaWZuZGVmIF9VUkNVX0FSQ0hf VUFUT01JQ19HQ0NfSAotI2RlZmluZSBfVVJDVV9BUkNIX1VBVE9NSUNfR0NDX0gKLQotLyoKLSAq IENvcHlyaWdodCAoYykgMTk5MS0xOTk0IGJ5IFhlcm94IENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IFNpbGljb24gR3JhcGhp Y3MuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQgSGV3 bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KLSAqIENvcHlyaWdodCAoYykg MjAwOSAgICAgIE1hdGhpZXUgRGVzbm95ZXJzCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgICAgICBQ YXVsIEUuIE1jS2VubmV5LCBJQk0gQ29ycG9yYXRpb24KLSAqCQkJICAgKEFkYXB0ZWQgZnJvbSB1 YXRvbWljX2FyY2hfcHBjLmgpCi0gKgotICogVEhJUyBNQVRFUklBTCBJUyBQUk9WSURFRCBBUyBJ UywgV0lUSCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZIEVYUFJFU1NFRAotICogT1IgSU1QTElFRC4g IEFOWSBVU0UgSVMgQVQgWU9VUiBPV04gUklTSy4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkIHRvIHVzZSBvciBjb3B5IHRoaXMgcHJvZ3JhbQotICogZm9yIGFueSBwdXJwb3Nl LCAgcHJvdmlkZWQgdGhlIGFib3ZlIG5vdGljZXMgYXJlIHJldGFpbmVkIG9uIGFsbCBjb3BpZXMu Ci0gKiBQZXJtaXNzaW9uIHRvIG1vZGlmeSB0aGUgY29kZSBhbmQgdG8gZGlzdHJpYnV0ZSBtb2Rp ZmllZCBjb2RlIGlzIGdyYW50ZWQsCi0gKiBwcm92aWRlZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUg cmV0YWluZWQsIGFuZCBhIG5vdGljZSB0aGF0IHRoZSBjb2RlIHdhcwotICogbW9kaWZpZWQgaXMg aW5jbHVkZWQgd2l0aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZS4KLSAqCi0gKiBDb2RlIGlu c3BpcmVkIGZyb20gbGlidWF0b21pY19vcHMtMS4yLCBpbmhlcml0ZWQgaW4gcGFydCBmcm9tIHRo ZQotICogQm9laG0tRGVtZXJzLVdlaXNlciBjb25zZXJ2YXRpdmUgZ2FyYmFnZSBjb2xsZWN0b3Iu Ci0gKi8KLQotI2luY2x1ZGUgPHVyY3UvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDx1cmN1L3N5c3Rl bS5oPgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8qCi0g KiBJZiB5b3VyIHBsYXRmb3JtIGRvZXNuJ3QgaGF2ZSBhIGZ1bGwgc2V0IG9mIGF0b21pY3MsIHlv dSB3aWxsIG5lZWQKLSAqIGEgc2VwYXJhdGUgdWF0b21pY19hcmNoXyouaCBmaWxlIGZvciB5b3Vy IGFyY2hpdGVjdHVyZS4gIE90aGVyd2lzZSwKLSAqIGp1c3QgcmVseSBvbiB0aGUgZGVmaW5pdGlv bnMgaW4gdWF0b21pYy9nZW5lcmljLmguCi0gKi8KLSNkZWZpbmUgVUFUT01JQ19IQVNfQVRPTUlD X0JZVEUKLSNkZWZpbmUgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCi0KLSNpZmRlZiBfX2NwbHVz cGx1cwotfQotI2VuZGlmCi0KLSNpbmNsdWRlIDx1cmN1L3VhdG9taWMvZ2VuZXJpYy5oPgotCi0j ZW5kaWYgLyogX1VSQ1VfQVJDSF9VQVRPTUlDX0dDQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRl L3VyY3UvdWF0b21pYy9nZW5lcmljLmggYi9pbmNsdWRlL3VyY3UvdWF0b21pYy9nZW5lcmljLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNzYyYjAuLjAwMDAwMDAKLS0tIGEvaW5j bHVkZS91cmN1L3VhdG9taWMvZ2VuZXJpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEzICswLDAg QEAKLSNpZm5kZWYgX1VSQ1VfVUFUT01JQ19HRU5FUklDX0gKLSNkZWZpbmUgX1VSQ1VfVUFUT01J Q19HRU5FUklDX0gKLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MS0xOTk0IGJ5IFhlcm94IENv cnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMTk5Ni0x OTk5IGJ5IFNpbGljb24gR3JhcGhpY3MuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp Z2h0IChjKSAxOTk5LTIwMDQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwu UC4KLSAqIENvcHlyaWdodCAoYykgMjAwOSAgICAgIE1hdGhpZXUgRGVzbm95ZXJzCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMTAgICAgICBQYW9sbyBCb256aW5pCi0gKgotICogVEhJUyBNQVRFUklBTCBJ UyBQUk9WSURFRCBBUyBJUywgV0lUSCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZIEVYUFJFU1NFRAot ICogT1IgSU1QTElFRC4gIEFOWSBVU0UgSVMgQVQgWU9VUiBPV04gUklTSy4KLSAqCi0gKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSBvciBjb3B5IHRoaXMgcHJvZ3JhbQotICog Zm9yIGFueSBwdXJwb3NlLCAgcHJvdmlkZWQgdGhlIGFib3ZlIG5vdGljZXMgYXJlIHJldGFpbmVk IG9uIGFsbCBjb3BpZXMuCi0gKiBQZXJtaXNzaW9uIHRvIG1vZGlmeSB0aGUgY29kZSBhbmQgdG8g ZGlzdHJpYnV0ZSBtb2RpZmllZCBjb2RlIGlzIGdyYW50ZWQsCi0gKiBwcm92aWRlZCB0aGUgYWJv dmUgbm90aWNlcyBhcmUgcmV0YWluZWQsIGFuZCBhIG5vdGljZSB0aGF0IHRoZSBjb2RlIHdhcwot ICogbW9kaWZpZWQgaXMgaW5jbHVkZWQgd2l0aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZS4K LSAqCi0gKiBDb2RlIGluc3BpcmVkIGZyb20gbGlidWF0b21pY19vcHMtMS4yLCBpbmhlcml0ZWQg aW4gcGFydCBmcm9tIHRoZQotICogQm9laG0tRGVtZXJzLVdlaXNlciBjb25zZXJ2YXRpdmUgZ2Fy YmFnZSBjb2xsZWN0b3IuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHVy Y3UvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDx1cmN1L3N5c3RlbS5oPgotCi0jaWZkZWYgX19jcGx1 c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLSNpZm5kZWYgdWF0b21pY19zZXQKLSNkZWZp bmUgdWF0b21pY19zZXQoYWRkciwgdikJKCh2b2lkKSBDTU1fU1RPUkVfU0hBUkVEKCooYWRkciks ICh2KSkpCi0jZW5kaWYKLQotI2lmbmRlZiB1YXRvbWljX3JlYWQKLSNkZWZpbmUgdWF0b21pY19y ZWFkKGFkZHIpCUNNTV9MT0FEX1NIQVJFRCgqKGFkZHIpKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5l ZCBfX09QVElNSVpFX18gIHx8IGRlZmluZWQgVUFUT01JQ19OT19MSU5LX0VSUk9SCi1zdGF0aWMg aW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUsIF9fbm9yZXR1cm5fXykpCi12b2lk IF91YXRvbWljX2xpbmtfZXJyb3Iodm9pZCkKLXsKLSNpZmRlZiBJTExFR0FMX0lOU1RSCi0JLyoK LQkgKiBnZW5lcmF0ZSBhbiBpbGxlZ2FsIGluc3RydWN0aW9uLiBDYW5ub3QgY2F0Y2ggdGhpcyB3 aXRoCi0JICogbGlua2VyIHRyaWNrcyB3aGVuIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLgot CSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKElMTEVHQUxfSU5TVFIpOwotI2Vsc2UKLQlfX2J1 aWx0aW5fdHJhcCgpOwotI2VuZGlmCi19Ci0KLSNlbHNlIC8qICNpZiAhZGVmaW5lZCBfX09QVElN SVpFX18gIHx8IGRlZmluZWQgVUFUT01JQ19OT19MSU5LX0VSUk9SICovCi1leHRlcm4gdm9pZCBf dWF0b21pY19saW5rX2Vycm9yKHZvaWQpOwotI2VuZGlmIC8qICNlbHNlICNpZiAhZGVmaW5lZCBf X09QVElNSVpFX18gIHx8IGRlZmluZWQgVUFUT01JQ19OT19MSU5LX0VSUk9SICovCi0KLS8qIGNt cHhjaGcgKi8KLQotI2lmbmRlZiB1YXRvbWljX2NtcHhjaGcKLXN0YXRpYyBpbmxpbmUgX19hdHRy aWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi11bnNpZ25lZCBsb25nIF91YXRvbWljX2NtcHhjaGco dm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBvbGQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIF9u ZXcsIGludCBsZW4pCi17Ci0Jc3dpdGNoIChsZW4pIHsKLSNpZmRlZiBVQVRPTUlDX0hBU19BVE9N SUNfQllURQotCWNhc2UgMToKLQkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF8x KCh1aW50OF90ICopIGFkZHIsIG9sZCwKLQkJCQlfbmV3KTsKLSNlbmRpZgotI2lmZGVmIFVBVE9N SUNfSEFTX0FUT01JQ19TSE9SVAotCWNhc2UgMjoKLQkJcmV0dXJuIF9fc3luY192YWxfY29tcGFy ZV9hbmRfc3dhcF8yKCh1aW50MTZfdCAqKSBhZGRyLCBvbGQsCi0JCQkJX25ldyk7Ci0jZW5kaWYK LQljYXNlIDQ6Ci0JCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfNCgodWludDMy X3QgKikgYWRkciwgb2xkLAotCQkJCV9uZXcpOwotI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2 NCkKLQljYXNlIDg6Ci0JCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfOCgodWlu dDY0X3QgKikgYWRkciwgb2xkLAotCQkJCV9uZXcpOwotI2VuZGlmCi0JfQotCV91YXRvbWljX2xp bmtfZXJyb3IoKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0jZGVmaW5lIHVhdG9taWNfY21weGNoZyhh ZGRyLCBvbGQsIF9uZXcpCQkJCSAgICAgIFwKLQkoKF9fdHlwZW9mX18oKihhZGRyKSkpIF91YXRv bWljX2NtcHhjaGcoKGFkZHIpLAkJCSAgICAgIFwKLQkJCQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9z aWduKG9sZCksIFwKLQkJCQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKF9uZXcpLFwKLQkJCQkJ CXNpemVvZigqKGFkZHIpKSkpCi0KLQotLyogdWF0b21pY19hbmQgKi8KLQotI2lmbmRlZiB1YXRv bWljX2FuZAotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKLXZv aWQgX3VhdG9taWNfYW5kKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQkgIGludCBs ZW4pCi17Ci0Jc3dpdGNoIChsZW4pIHsKLSNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfQllURQot CWNhc2UgMToKLQkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfMSgodWludDhfdCAqKSBhZGRyLCB2YWwp OwotCQlyZXR1cm47Ci0jZW5kaWYKLSNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKLQlj YXNlIDI6Ci0JCV9fc3luY19hbmRfYW5kX2ZldGNoXzIoKHVpbnQxNl90ICopIGFkZHIsIHZhbCk7 Ci0JCXJldHVybjsKLSNlbmRpZgotCWNhc2UgNDoKLQkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfNCgo dWludDMyX3QgKikgYWRkciwgdmFsKTsKLQkJcmV0dXJuOwotI2lmIChDQUFfQklUU19QRVJfTE9O RyA9PSA2NCkKLQljYXNlIDg6Ci0JCV9fc3luY19hbmRfYW5kX2ZldGNoXzgoKHVpbnQ2NF90ICop IGFkZHIsIHZhbCk7Ci0JCXJldHVybjsKLSNlbmRpZgotCX0KLQlfdWF0b21pY19saW5rX2Vycm9y KCk7Ci19Ci0KLSNkZWZpbmUgdWF0b21pY19hbmQoYWRkciwgdikJCQlcCi0JKF91YXRvbWljX2Fu ZCgoYWRkciksCQkJXAotCQljYWFfY2FzdF9sb25nX2tlZXBfc2lnbih2KSwJXAotCQlzaXplb2Yo KihhZGRyKSkpKQotI2RlZmluZSBjbW1fc21wX21iX19iZWZvcmVfdWF0b21pY19hbmQoKQljbW1f YmFycmllcigpCi0jZGVmaW5lIGNtbV9zbXBfbWJfX2FmdGVyX3VhdG9taWNfYW5kKCkJCWNtbV9i YXJyaWVyKCkKLQotI2VuZGlmCi0KLS8qIHVhdG9taWNfb3IgKi8KLQotI2lmbmRlZiB1YXRvbWlj X29yCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQotdm9pZCBf dWF0b21pY19vcih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJIGludCBsZW4pCi17 Ci0Jc3dpdGNoIChsZW4pIHsKLSNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfQllURQotCWNhc2Ug MToKLQkJX19zeW5jX29yX2FuZF9mZXRjaF8xKCh1aW50OF90ICopIGFkZHIsIHZhbCk7Ci0JCXJl dHVybjsKLSNlbmRpZgotI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAotCWNhc2UgMjoK LQkJX19zeW5jX29yX2FuZF9mZXRjaF8yKCh1aW50MTZfdCAqKSBhZGRyLCB2YWwpOwotCQlyZXR1 cm47Ci0jZW5kaWYKLQljYXNlIDQ6Ci0JCV9fc3luY19vcl9hbmRfZmV0Y2hfNCgodWludDMyX3Qg KikgYWRkciwgdmFsKTsKLQkJcmV0dXJuOwotI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkK LQljYXNlIDg6Ci0JCV9fc3luY19vcl9hbmRfZmV0Y2hfOCgodWludDY0X3QgKikgYWRkciwgdmFs KTsKLQkJcmV0dXJuOwotI2VuZGlmCi0JfQotCV91YXRvbWljX2xpbmtfZXJyb3IoKTsKLQlyZXR1 cm47Ci19Ci0KLSNkZWZpbmUgdWF0b21pY19vcihhZGRyLCB2KQkJCVwKLQkoX3VhdG9taWNfb3Io KGFkZHIpLAkJCVwKLQkJY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24odiksCVwKLQkJc2l6ZW9mKCoo YWRkcikpKSkKLSNkZWZpbmUgY21tX3NtcF9tYl9fYmVmb3JlX3VhdG9taWNfb3IoKQkJY21tX2Jh cnJpZXIoKQotI2RlZmluZSBjbW1fc21wX21iX19hZnRlcl91YXRvbWljX29yKCkJCWNtbV9iYXJy aWVyKCkKLQotI2VuZGlmCi0KLQotLyogdWF0b21pY19hZGRfcmV0dXJuICovCi0KLSNpZm5kZWYg dWF0b21pY19hZGRfcmV0dXJuCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19p bmxpbmUpKQotdW5zaWduZWQgbG9uZyBfdWF0b21pY19hZGRfcmV0dXJuKHZvaWQgKmFkZHIsIHVu c2lnbmVkIGxvbmcgdmFsLAotCQkJCSBpbnQgbGVuKQotewotCXN3aXRjaCAobGVuKSB7Ci0jaWZk ZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKLQljYXNlIDE6Ci0JCXJldHVybiBfX3N5bmNfYWRk X2FuZF9mZXRjaF8xKCh1aW50OF90ICopIGFkZHIsIHZhbCk7Ci0jZW5kaWYKLSNpZmRlZiBVQVRP TUlDX0hBU19BVE9NSUNfU0hPUlQKLQljYXNlIDI6Ci0JCXJldHVybiBfX3N5bmNfYWRkX2FuZF9m ZXRjaF8yKCh1aW50MTZfdCAqKSBhZGRyLCB2YWwpOwotI2VuZGlmCi0JY2FzZSA0OgotCQlyZXR1 cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfNCgodWludDMyX3QgKikgYWRkciwgdmFsKTsKLSNpZiAo Q0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCi0JY2FzZSA4OgotCQlyZXR1cm4gX19zeW5jX2FkZF9h bmRfZmV0Y2hfOCgodWludDY0X3QgKikgYWRkciwgdmFsKTsKLSNlbmRpZgotCX0KLQlfdWF0b21p Y19saW5rX2Vycm9yKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotI2RlZmluZSB1YXRvbWljX2FkZF9y ZXR1cm4oYWRkciwgdikJCQkJCSAgICBcCi0JKChfX3R5cGVvZl9fKCooYWRkcikpKSBfdWF0b21p Y19hZGRfcmV0dXJuKChhZGRyKSwJCSAgICBcCi0JCQkJCQljYWFfY2FzdF9sb25nX2tlZXBfc2ln bih2KSwgXAotCQkJCQkJc2l6ZW9mKCooYWRkcikpKSkKLSNlbmRpZiAvKiAjaWZuZGVmIHVhdG9t aWNfYWRkX3JldHVybiAqLwotCi0jaWZuZGVmIHVhdG9taWNfeGNoZwotLyogeGNoZyAqLwotCi1z dGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQotdW5zaWduZWQgbG9u ZyBfdWF0b21pY19leGNoYW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxl bikKLXsKLQlzd2l0Y2ggKGxlbikgewotI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCi0J Y2FzZSAxOgotCXsKLQkJdWludDhfdCBvbGQ7Ci0KLQkJZG8gewotCQkJb2xkID0gdWF0b21pY19y ZWFkKCh1aW50OF90ICopIGFkZHIpOwotCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9h bmRfc3dhcF8xKCh1aW50OF90ICopIGFkZHIsCi0JCQkJb2xkLCB2YWwpKTsKLQotCQlyZXR1cm4g b2xkOwotCX0KLSNlbmRpZgotI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAotCWNhc2Ug MjoKLQl7Ci0JCXVpbnQxNl90IG9sZDsKLQotCQlkbyB7Ci0JCQlvbGQgPSB1YXRvbWljX3JlYWQo KHVpbnQxNl90ICopIGFkZHIpOwotCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRf c3dhcF8yKCh1aW50MTZfdCAqKSBhZGRyLAotCQkJCW9sZCwgdmFsKSk7Ci0KLQkJcmV0dXJuIG9s ZDsKLQl9Ci0jZW5kaWYKLQljYXNlIDQ6Ci0JewotCQl1aW50MzJfdCBvbGQ7Ci0KLQkJZG8gewot CQkJb2xkID0gdWF0b21pY19yZWFkKCh1aW50MzJfdCAqKSBhZGRyKTsKLQkJfSB3aGlsZSAoIV9f c3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfNCgodWludDMyX3QgKikgYWRkciwKLQkJCQlvbGQs IHZhbCkpOwotCi0JCXJldHVybiBvbGQ7Ci0JfQotI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2 NCkKLQljYXNlIDg6Ci0JewotCQl1aW50NjRfdCBvbGQ7Ci0KLQkJZG8gewotCQkJb2xkID0gdWF0 b21pY19yZWFkKCh1aW50NjRfdCAqKSBhZGRyKTsKLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2Nv bXBhcmVfYW5kX3N3YXBfOCgodWludDY0X3QgKikgYWRkciwKLQkJCQlvbGQsIHZhbCkpOwotCi0J CXJldHVybiBvbGQ7Ci0JfQotI2VuZGlmCi0JfQotCV91YXRvbWljX2xpbmtfZXJyb3IoKTsKLQly ZXR1cm4gMDsKLX0KLQotI2RlZmluZSB1YXRvbWljX3hjaGcoYWRkciwgdikJCQkJCQkgICAgXAot CSgoX190eXBlb2ZfXygqKGFkZHIpKSkgX3VhdG9taWNfZXhjaGFuZ2UoKGFkZHIpLAkJICAgIFwK LQkJCQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKHYpLCBcCi0JCQkJCQlzaXplb2YoKihhZGRy KSkpKQotI2VuZGlmIC8qICNpZm5kZWYgdWF0b21pY194Y2hnICovCi0KLSNlbHNlIC8qICNpZm5k ZWYgdWF0b21pY19jbXB4Y2hnICovCi0KLSNpZm5kZWYgdWF0b21pY19hbmQKLS8qIHVhdG9taWNf YW5kICovCi0KLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi12 b2lkIF91YXRvbWljX2FuZCh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxlbikK LXsKLQlzd2l0Y2ggKGxlbikgewotI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCi0JY2Fz ZSAxOgotCXsKLQkJdWludDhfdCBvbGQsIG9sZHQ7Ci0KLQkJb2xkdCA9IHVhdG9taWNfcmVhZCgo dWludDhfdCAqKSBhZGRyKTsKLQkJZG8gewotCQkJb2xkID0gb2xkdDsKLQkJCW9sZHQgPSBfdWF0 b21pY19jbXB4Y2hnKGFkZHIsIG9sZCwgb2xkICYgdmFsLCAxKTsKLQkJfSB3aGlsZSAob2xkdCAh PSBvbGQpOwotCi0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBVQVRPTUlDX0hBU19BVE9N SUNfU0hPUlQKLQljYXNlIDI6Ci0JewotCQl1aW50MTZfdCBvbGQsIG9sZHQ7Ci0KLQkJb2xkdCA9 IHVhdG9taWNfcmVhZCgodWludDE2X3QgKikgYWRkcik7Ci0JCWRvIHsKLQkJCW9sZCA9IG9sZHQ7 Ci0JCQlvbGR0ID0gX3VhdG9taWNfY21weGNoZyhhZGRyLCBvbGQsIG9sZCAmIHZhbCwgMik7Ci0J CX0gd2hpbGUgKG9sZHQgIT0gb2xkKTsKLQl9Ci0jZW5kaWYKLQljYXNlIDQ6Ci0JewotCQl1aW50 MzJfdCBvbGQsIG9sZHQ7Ci0KLQkJb2xkdCA9IHVhdG9taWNfcmVhZCgodWludDMyX3QgKikgYWRk cik7Ci0JCWRvIHsKLQkJCW9sZCA9IG9sZHQ7Ci0JCQlvbGR0ID0gX3VhdG9taWNfY21weGNoZyhh ZGRyLCBvbGQsIG9sZCAmIHZhbCwgNCk7Ci0JCX0gd2hpbGUgKG9sZHQgIT0gb2xkKTsKLQotCQly ZXR1cm47Ci0JfQotI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKLQljYXNlIDg6Ci0Jewot CQl1aW50NjRfdCBvbGQsIG9sZHQ7Ci0KLQkJb2xkdCA9IHVhdG9taWNfcmVhZCgodWludDY0X3Qg KikgYWRkcik7Ci0JCWRvIHsKLQkJCW9sZCA9IG9sZHQ7Ci0JCQlvbGR0ID0gX3VhdG9taWNfY21w eGNoZyhhZGRyLCBvbGQsIG9sZCAmIHZhbCwgOCk7Ci0JCX0gd2hpbGUgKG9sZHQgIT0gb2xkKTsK LQotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JfQotCV91YXRvbWljX2xpbmtfZXJyb3IoKTsKLX0K LQotI2RlZmluZSB1YXRvbWljX2FuZChhZGRyLCB2KQkJCVwKLQkoX3VhdG9taWNfYW5kKChhZGRy KSwJCQlcCi0JCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKHYpLAlcCi0JCXNpemVvZigqKGFkZHIp KSkpCi0jZGVmaW5lIGNtbV9zbXBfbWJfX2JlZm9yZV91YXRvbWljX2FuZCgpCWNtbV9iYXJyaWVy KCkKLSNkZWZpbmUgY21tX3NtcF9tYl9fYWZ0ZXJfdWF0b21pY19hbmQoKQkJY21tX2JhcnJpZXIo KQotCi0jZW5kaWYgLyogI2lmbmRlZiB1YXRvbWljX2FuZCAqLwotCi0jaWZuZGVmIHVhdG9taWNf b3IKLS8qIHVhdG9taWNfb3IgKi8KLQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdh eXNfaW5saW5lKSkKLXZvaWQgX3VhdG9taWNfb3Iodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2 YWwsIGludCBsZW4pCi17Ci0Jc3dpdGNoIChsZW4pIHsKLSNpZmRlZiBVQVRPTUlDX0hBU19BVE9N SUNfQllURQotCWNhc2UgMToKLQl7Ci0JCXVpbnQ4X3Qgb2xkLCBvbGR0OwotCi0JCW9sZHQgPSB1 YXRvbWljX3JlYWQoKHVpbnQ4X3QgKikgYWRkcik7Ci0JCWRvIHsKLQkJCW9sZCA9IG9sZHQ7Ci0J CQlvbGR0ID0gX3VhdG9taWNfY21weGNoZyhhZGRyLCBvbGQsIG9sZCB8IHZhbCwgMSk7Ci0JCX0g d2hpbGUgKG9sZHQgIT0gb2xkKTsKLQotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0jaWZkZWYgVUFU T01JQ19IQVNfQVRPTUlDX1NIT1JUCi0JY2FzZSAyOgotCXsKLQkJdWludDE2X3Qgb2xkLCBvbGR0 OwotCi0JCW9sZHQgPSB1YXRvbWljX3JlYWQoKHVpbnQxNl90ICopIGFkZHIpOwotCQlkbyB7Ci0J CQlvbGQgPSBvbGR0OwotCQkJb2xkdCA9IF91YXRvbWljX2NtcHhjaGcoYWRkciwgb2xkLCBvbGQg fCB2YWwsIDIpOwotCQl9IHdoaWxlIChvbGR0ICE9IG9sZCk7Ci0KLQkJcmV0dXJuOwotCX0KLSNl bmRpZgotCWNhc2UgNDoKLQl7Ci0JCXVpbnQzMl90IG9sZCwgb2xkdDsKLQotCQlvbGR0ID0gdWF0 b21pY19yZWFkKCh1aW50MzJfdCAqKSBhZGRyKTsKLQkJZG8gewotCQkJb2xkID0gb2xkdDsKLQkJ CW9sZHQgPSBfdWF0b21pY19jbXB4Y2hnKGFkZHIsIG9sZCwgb2xkIHwgdmFsLCA0KTsKLQkJfSB3 aGlsZSAob2xkdCAhPSBvbGQpOwotCi0JCXJldHVybjsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9M T05HID09IDY0KQotCWNhc2UgODoKLQl7Ci0JCXVpbnQ2NF90IG9sZCwgb2xkdDsKLQotCQlvbGR0 ID0gdWF0b21pY19yZWFkKCh1aW50NjRfdCAqKSBhZGRyKTsKLQkJZG8gewotCQkJb2xkID0gb2xk dDsKLQkJCW9sZHQgPSBfdWF0b21pY19jbXB4Y2hnKGFkZHIsIG9sZCwgb2xkIHwgdmFsLCA4KTsK LQkJfSB3aGlsZSAob2xkdCAhPSBvbGQpOwotCi0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQl9Ci0J X3VhdG9taWNfbGlua19lcnJvcigpOwotfQotCi0jZGVmaW5lIHVhdG9taWNfb3IoYWRkciwgdikJ CQlcCi0JKF91YXRvbWljX29yKChhZGRyKSwJCQlcCi0JCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWdu KHYpLAlcCi0JCXNpemVvZigqKGFkZHIpKSkpCi0jZGVmaW5lIGNtbV9zbXBfbWJfX2JlZm9yZV91 YXRvbWljX29yKCkJCWNtbV9iYXJyaWVyKCkKLSNkZWZpbmUgY21tX3NtcF9tYl9fYWZ0ZXJfdWF0 b21pY19vcigpCQljbW1fYmFycmllcigpCi0KLSNlbmRpZiAvKiAjaWZuZGVmIHVhdG9taWNfb3Ig Ki8KLQotI2lmbmRlZiB1YXRvbWljX2FkZF9yZXR1cm4KLS8qIHVhdG9taWNfYWRkX3JldHVybiAq LwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQotdW5zaWdu ZWQgbG9uZyBfdWF0b21pY19hZGRfcmV0dXJuKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFs LCBpbnQgbGVuKQotewotCXN3aXRjaCAobGVuKSB7Ci0jaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlD X0JZVEUKLQljYXNlIDE6Ci0JewotCQl1aW50OF90IG9sZCwgb2xkdDsKLQotCQlvbGR0ID0gdWF0 b21pY19yZWFkKCh1aW50OF90ICopIGFkZHIpOwotCQlkbyB7Ci0JCQlvbGQgPSBvbGR0OwotCQkJ b2xkdCA9IHVhdG9taWNfY21weGNoZygodWludDhfdCAqKSBhZGRyLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQsIG9sZCArIHZhbCk7Ci0JCX0gd2hp bGUgKG9sZHQgIT0gb2xkKTsKLQotCQlyZXR1cm4gb2xkICsgdmFsOwotCX0KLSNlbmRpZgotI2lm ZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAotCWNhc2UgMjoKLQl7Ci0JCXVpbnQxNl90IG9s ZCwgb2xkdDsKLQotCQlvbGR0ID0gdWF0b21pY19yZWFkKCh1aW50MTZfdCAqKSBhZGRyKTsKLQkJ ZG8gewotCQkJb2xkID0gb2xkdDsKLQkJCW9sZHQgPSB1YXRvbWljX2NtcHhjaGcoKHVpbnQxNl90 ICopIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG9sZCwgb2xkICsgdmFsKTsKLQkJfSB3aGlsZSAob2xkdCAhPSBvbGQpOwotCi0JCXJldHVybiBv bGQgKyB2YWw7Ci0JfQotI2VuZGlmCi0JY2FzZSA0OgotCXsKLQkJdWludDMyX3Qgb2xkLCBvbGR0 OwotCi0JCW9sZHQgPSB1YXRvbWljX3JlYWQoKHVpbnQzMl90ICopIGFkZHIpOwotCQlkbyB7Ci0J CQlvbGQgPSBvbGR0OwotCQkJb2xkdCA9IHVhdG9taWNfY21weGNoZygodWludDMyX3QgKikgYWRk ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkLCBv bGQgKyB2YWwpOwotCQl9IHdoaWxlIChvbGR0ICE9IG9sZCk7Ci0KLQkJcmV0dXJuIG9sZCArIHZh bDsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0KQotCWNhc2UgODoKLQl7Ci0JCXVp bnQ2NF90IG9sZCwgb2xkdDsKLQotCQlvbGR0ID0gdWF0b21pY19yZWFkKCh1aW50NjRfdCAqKSBh ZGRyKTsKLQkJZG8gewotCQkJb2xkID0gb2xkdDsKLQkJCW9sZHQgPSB1YXRvbWljX2NtcHhjaGco KHVpbnQ2NF90ICopIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG9sZCwgb2xkICsgdmFsKTsKLQkJfSB3aGlsZSAob2xkdCAhPSBvbGQpOwotCi0J CXJldHVybiBvbGQgKyB2YWw7Ci0JfQotI2VuZGlmCi0JfQotCV91YXRvbWljX2xpbmtfZXJyb3Io KTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSB1YXRvbWljX2FkZF9yZXR1cm4oYWRkciwgdikJ CQkJCSAgICBcCi0JKChfX3R5cGVvZl9fKCooYWRkcikpKSBfdWF0b21pY19hZGRfcmV0dXJuKChh ZGRyKSwJCSAgICBcCi0JCQkJCQljYWFfY2FzdF9sb25nX2tlZXBfc2lnbih2KSwgXAotCQkJCQkJ c2l6ZW9mKCooYWRkcikpKSkKLSNlbmRpZiAvKiAjaWZuZGVmIHVhdG9taWNfYWRkX3JldHVybiAq LwotCi0jaWZuZGVmIHVhdG9taWNfeGNoZwotLyogeGNoZyAqLwotCi1zdGF0aWMgaW5saW5lIF9f YXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQotdW5zaWduZWQgbG9uZyBfdWF0b21pY19leGNo YW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxlbikKLXsKLQlzd2l0Y2gg KGxlbikgewotI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCi0JY2FzZSAxOgotCXsKLQkJ dWludDhfdCBvbGQsIG9sZHQ7Ci0KLQkJb2xkdCA9IHVhdG9taWNfcmVhZCgodWludDhfdCAqKSBh ZGRyKTsKLQkJZG8gewotCQkJb2xkID0gb2xkdDsKLQkJCW9sZHQgPSB1YXRvbWljX2NtcHhjaGco KHVpbnQ4X3QgKikgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb2xkLCB2YWwpOwotCQl9IHdoaWxlIChvbGR0ICE9IG9sZCk7Ci0KLQkJcmV0dXJu IG9sZDsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKLQljYXNl IDI6Ci0JewotCQl1aW50MTZfdCBvbGQsIG9sZHQ7Ci0KLQkJb2xkdCA9IHVhdG9taWNfcmVhZCgo dWludDE2X3QgKikgYWRkcik7Ci0JCWRvIHsKLQkJCW9sZCA9IG9sZHQ7Ci0JCQlvbGR0ID0gdWF0 b21pY19jbXB4Y2hnKCh1aW50MTZfdCAqKSBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvbGQsIHZhbCk7Ci0JCX0gd2hpbGUgKG9sZHQgIT0gb2xk KTsKLQotCQlyZXR1cm4gb2xkOwotCX0KLSNlbmRpZgotCWNhc2UgNDoKLQl7Ci0JCXVpbnQzMl90 IG9sZCwgb2xkdDsKLQotCQlvbGR0ID0gdWF0b21pY19yZWFkKCh1aW50MzJfdCAqKSBhZGRyKTsK LQkJZG8gewotCQkJb2xkID0gb2xkdDsKLQkJCW9sZHQgPSB1YXRvbWljX2NtcHhjaGcoKHVpbnQz Ml90ICopIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9sZCwgdmFsKTsKLQkJfSB3aGlsZSAob2xkdCAhPSBvbGQpOwotCi0JCXJldHVybiBvbGQ7 Ci0JfQotI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKLQljYXNlIDg6Ci0JewotCQl1aW50 NjRfdCBvbGQsIG9sZHQ7Ci0KLQkJb2xkdCA9IHVhdG9taWNfcmVhZCgodWludDY0X3QgKikgYWRk cik7Ci0JCWRvIHsKLQkJCW9sZCA9IG9sZHQ7Ci0JCQlvbGR0ID0gdWF0b21pY19jbXB4Y2hnKCh1 aW50NjRfdCAqKSBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvbGQsIHZhbCk7Ci0JCX0gd2hpbGUgKG9sZHQgIT0gb2xkKTsKLQotCQlyZXR1cm4g b2xkOwotCX0KLSNlbmRpZgotCX0KLQlfdWF0b21pY19saW5rX2Vycm9yKCk7Ci0JcmV0dXJuIDA7 Ci19Ci0KLSNkZWZpbmUgdWF0b21pY194Y2hnKGFkZHIsIHYpCQkJCQkJICAgIFwKLQkoKF9fdHlw ZW9mX18oKihhZGRyKSkpIF91YXRvbWljX2V4Y2hhbmdlKChhZGRyKSwJCSAgICBcCi0JCQkJCQlj YWFfY2FzdF9sb25nX2tlZXBfc2lnbih2KSwgXAotCQkJCQkJc2l6ZW9mKCooYWRkcikpKSkKLSNl bmRpZiAvKiAjaWZuZGVmIHVhdG9taWNfeGNoZyAqLwotCi0jZW5kaWYgLyogI2Vsc2UgI2lmbmRl ZiB1YXRvbWljX2NtcHhjaGcgKi8KLQotLyogdWF0b21pY19zdWJfcmV0dXJuLCB1YXRvbWljX2Fk ZCwgdWF0b21pY19zdWIsIHVhdG9taWNfaW5jLCB1YXRvbWljX2RlYyAqLwotCi0jaWZuZGVmIHVh dG9taWNfYWRkCi0jZGVmaW5lIHVhdG9taWNfYWRkKGFkZHIsIHYpCQkodm9pZCl1YXRvbWljX2Fk ZF9yZXR1cm4oKGFkZHIpLCAodikpCi0jZGVmaW5lIGNtbV9zbXBfbWJfX2JlZm9yZV91YXRvbWlj X2FkZCgpCWNtbV9iYXJyaWVyKCkKLSNkZWZpbmUgY21tX3NtcF9tYl9fYWZ0ZXJfdWF0b21pY19h ZGQoKQkJY21tX2JhcnJpZXIoKQotI2VuZGlmCi0KLSNkZWZpbmUgdWF0b21pY19zdWJfcmV0dXJu KGFkZHIsIHYpCVwKLQl1YXRvbWljX2FkZF9yZXR1cm4oKGFkZHIpLCAtKGNhYV9jYXN0X2xvbmdf a2VlcF9zaWduKHYpKSkKLSNkZWZpbmUgdWF0b21pY19zdWIoYWRkciwgdikJCVwKLQl1YXRvbWlj X2FkZCgoYWRkciksIC0oY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24odikpKQotI2RlZmluZSBjbW1f c21wX21iX19iZWZvcmVfdWF0b21pY19zdWIoKQljbW1fc21wX21iX19iZWZvcmVfdWF0b21pY19h ZGQoKQotI2RlZmluZSBjbW1fc21wX21iX19hZnRlcl91YXRvbWljX3N1YigpCQljbW1fc21wX21i X19hZnRlcl91YXRvbWljX2FkZCgpCi0KLSNpZm5kZWYgdWF0b21pY19pbmMKLSNkZWZpbmUgdWF0 b21pY19pbmMoYWRkcikJCXVhdG9taWNfYWRkKChhZGRyKSwgMSkKLSNkZWZpbmUgY21tX3NtcF9t Yl9fYmVmb3JlX3VhdG9taWNfaW5jKCkJY21tX3NtcF9tYl9fYmVmb3JlX3VhdG9taWNfYWRkKCkK LSNkZWZpbmUgY21tX3NtcF9tYl9fYWZ0ZXJfdWF0b21pY19pbmMoKQkJY21tX3NtcF9tYl9fYWZ0 ZXJfdWF0b21pY19hZGQoKQotI2VuZGlmCi0KLSNpZm5kZWYgdWF0b21pY19kZWMKLSNkZWZpbmUg dWF0b21pY19kZWMoYWRkcikJCXVhdG9taWNfYWRkKChhZGRyKSwgLTEpCi0jZGVmaW5lIGNtbV9z bXBfbWJfX2JlZm9yZV91YXRvbWljX2RlYygpCWNtbV9zbXBfbWJfX2JlZm9yZV91YXRvbWljX2Fk ZCgpCi0jZGVmaW5lIGNtbV9zbXBfbWJfX2FmdGVyX3VhdG9taWNfZGVjKCkJCWNtbV9zbXBfbWJf X2FmdGVyX3VhdG9taWNfYWRkKCkKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNl bmRpZgotCi0jZW5kaWYgLyogX1VSQ1VfVUFUT01JQ19HRU5FUklDX0ggKi8KZGlmZiAtLWdpdCBh L2luY2x1ZGUvdXJjdS91YXRvbWljL2hwcGEuaCBiL2luY2x1ZGUvdXJjdS91YXRvbWljL2hwcGEu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwMjE1My4uMDAwMDAwMAotLS0gYS9p bmNsdWRlL3VyY3UvdWF0b21pYy9ocHBhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBA Ci0jaWZuZGVmIF9VUkNVX0FSQ0hfVUFUT01JQ19IUFBBX0gKLSNkZWZpbmUgX1VSQ1VfQVJDSF9V QVRPTUlDX0hQUEFfSAotCi0jaW5jbHVkZSA8dXJjdS9jb21waWxlci5oPgotI2luY2x1ZGUgPHVy Y3Uvc3lzdGVtLmg+Ci0KLSNkZWZpbmUgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCi0jaW5jbHVk ZSA8dXJjdS91YXRvbWljL2dlbmVyaWMuaD4KLQotI2VuZGlmIC8qIF9VUkNVX0FSQ0hfVUFUT01J Q19IUFBBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXJjdS91YXRvbWljL2lhNjQuaCBiL2lu Y2x1ZGUvdXJjdS91YXRvbWljL2lhNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg YjVkYjhjYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3VyY3UvdWF0b21pYy9pYTY0LmgKKysrIC9k ZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jaWZuZGVmIF9VUkNVX0FSQ0hfVUFUT01JQ19JQTY0 X0gKLSNkZWZpbmUgX1VSQ1VfQVJDSF9VQVRPTUlDX0lBNjRfSAotCi0vKgotICogQ29weXJpZ2h0 IChjKSAxOTkxLTE5OTQgYnkgWGVyb3ggQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVk LgotICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgU2lsaWNvbiBHcmFwaGljcy4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNCBIZXdsZXR0LVBhY2th cmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTUg TWF0aGlldSBEZXNub3llcnMKLSAqIENvcHlyaWdodCAoYykgMjAxMCAgICAgIFBhdWwgRS4gTWNL ZW5uZXksIElCTSBDb3Jwb3JhdGlvbgotICoJCQkgICAoQWRhcHRlZCBmcm9tIHVhdG9taWNfYXJj aF9wcGMuaCkKLSAqCi0gKiBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEFTIElTLCBXSVRIIEFC U09MVVRFTFkgTk8gV0FSUkFOVFkgRVhQUkVTU0VECi0gKiBPUiBJTVBMSUVELiAgQU5ZIFVTRSBJ UyBBVCBZT1VSIE9XTiBSSVNLLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQg dG8gdXNlIG9yIGNvcHkgdGhpcyBwcm9ncmFtCi0gKiBmb3IgYW55IHB1cnBvc2UsICBwcm92aWRl ZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWluZWQgb24gYWxsIGNvcGllcy4KLSAqIFBlcm1p c3Npb24gdG8gbW9kaWZ5IHRoZSBjb2RlIGFuZCB0byBkaXN0cmlidXRlIG1vZGlmaWVkIGNvZGUg aXMgZ3JhbnRlZCwKLSAqIHByb3ZpZGVkIHRoZSBhYm92ZSBub3RpY2VzIGFyZSByZXRhaW5lZCwg YW5kIGEgbm90aWNlIHRoYXQgdGhlIGNvZGUgd2FzCi0gKiBtb2RpZmllZCBpcyBpbmNsdWRlZCB3 aXRoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLgotICoKLSAqIENvZGUgaW5zcGlyZWQgZnJv bSBsaWJ1YXRvbWljX29wcy0xLjIsIGluaGVyaXRlZCBpbiBwYXJ0IGZyb20gdGhlCi0gKiBCb2Vo bS1EZW1lcnMtV2Vpc2VyIGNvbnNlcnZhdGl2ZSBnYXJiYWdlIGNvbGxlY3Rvci4KLSAqLwotCi0j aW5jbHVkZSA8dXJjdS9jb21waWxlci5oPgotI2luY2x1ZGUgPHVyY3Uvc3lzdGVtLmg+Ci0KLSNp ZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2RlZmluZSBVQVRPTUlD X0hBU19BVE9NSUNfQllURQotI2RlZmluZSBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKLQotI2lm ZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHVyY3UvdWF0b21pYy9nZW5l cmljLmg+Ci0KLSNlbmRpZiAvKiBfVVJDVV9BUkNIX1VBVE9NSUNfSUE2NF9IICovCmRpZmYgLS1n aXQgYS9pbmNsdWRlL3VyY3UvdWF0b21pYy9tNjhrLmggYi9pbmNsdWRlL3VyY3UvdWF0b21pYy9t NjhrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYjAxYzcuLjAwMDAwMDAKLS0t IGEvaW5jbHVkZS91cmN1L3VhdG9taWMvbTY4ay5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAs MCBAQAotLyoKLSAqIEF0b21pYyBleGNoYW5nZSBvcGVyYXRpb25zIGZvciB0aGUgbTY4ayBhcmNo aXRlY3R1cmUuIExldCBHQ0MgZG8gaXQuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3IE1pY2hh ZWwgSmVhbnNvbiA8bWplYW5zb25AZWZmaWNpb3MuY29tPgotICoKLSAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh IGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bwotICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKLSAqIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsIGFuZC9vcgotICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5j bHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNv ZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElO IE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcK LSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqLwotCi0jaWZu ZGVmIF9VUkNVX0FSQ0hfVUFUT01JQ19NNjhLX0gKLSNkZWZpbmUgX1VSQ1VfQVJDSF9VQVRPTUlD X002OEtfSAotCi0jaW5jbHVkZSA8dXJjdS9jb21waWxlci5oPgotI2luY2x1ZGUgPHVyY3Uvc3lz dGVtLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2Rl ZmluZSBVQVRPTUlDX0hBU19BVE9NSUNfQllURQotI2RlZmluZSBVQVRPTUlDX0hBU19BVE9NSUNf U0hPUlQKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHVyY3Uv dWF0b21pYy9nZW5lcmljLmg+Ci0KLSNlbmRpZiAvKiBfVVJDVV9BUkNIX1VBVE9NSUNfTTY4S19I ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VyY3UvdWF0b21pYy9taXBzLmggYi9pbmNsdWRlL3Vy Y3UvdWF0b21pYy9taXBzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkN2NhN2Yu LjAwMDAwMDAKLS0tIGEvaW5jbHVkZS91cmN1L3VhdG9taWMvbWlwcy5oCisrKyAvZGV2L251bGwK QEAgLTEsMzIgKzAsMCBAQAotI2lmbmRlZiBfVVJDVV9VQVRPTUlDX0FSQ0hfTUlQU19ICi0jZGVm aW5lIF9VUkNVX1VBVE9NSUNfQVJDSF9NSVBTX0gKLQotLyoKLSAqIEF0b21pYyBleGNoYW5nZSBv cGVyYXRpb25zIGZvciB0aGUgTUlQUyBhcmNoaXRlY3R1cmUuIExldCBHQ0MgZG8gaXQuCi0gKgot ICogQ29weXJpZ2h0IChjKSAyMDEwIFBhb2xvIEJvbnppbmkgPHBib256aW5pQHJlZGhhdC5jb20+ Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCi0gKiBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uIHRoZQotICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCi0gKiBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBp cwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK LSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhF IFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDx1cmN1L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8 dXJjdS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDx1cmN1L3VhdG9taWMvZ2VuZXJpYy5oPgotCi0jZW5k aWYgLyogX1VSQ1VfVUFUT01JQ19BUkNIX01JUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91 cmN1L3VhdG9taWMvbmlvczIuaCBiL2luY2x1ZGUvdXJjdS91YXRvbWljL25pb3MyLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViM2MzMDMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS91 cmN1L3VhdG9taWMvbmlvczIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSNpZm5k ZWYgX1VSQ1VfVUFUT01JQ19BUkNIX05JT1MyX0gKLSNkZWZpbmUgX1VSQ1VfVUFUT01JQ19BUkNI X05JT1MyX0gKLQotLyoKLSAqIEF0b21pYyBleGNoYW5nZSBvcGVyYXRpb25zIGZvciB0aGUgTklP UzIgYXJjaGl0ZWN0dXJlLiBMZXQgR0NDIGRvIGl0LgotICoKLSAqIENvcHlyaWdodCAoYykgMjAx NiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5 Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwgdG8KLSAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCi0gKiByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LCBhbmQvb3IKLSAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk IGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy ZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBF VkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUg PHVyY3UvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDx1cmN1L3N5c3RlbS5oPgotI2luY2x1ZGUgPHVy Y3UvdWF0b21pYy9nZW5lcmljLmg+Ci0KLSNlbmRpZiAvKiBfVVJDVV9VQVRPTUlDX0FSQ0hfTklP UzJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91cmN1L3VhdG9taWMvcHBjLmggYi9pbmNsdWRl L3VyY3UvdWF0b21pYy9wcGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU2NzJm NS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3VyY3UvdWF0b21pYy9wcGMuaAorKysgL2Rldi9udWxs CkBAIC0xLDIzNyArMCwwIEBACi0jaWZuZGVmIF9VUkNVX0FSQ0hfVUFUT01JQ19QUENfSAotI2Rl ZmluZSBfVVJDVV9BUkNIX1VBVE9NSUNfUFBDX0gKLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5 MS0xOTk0IGJ5IFhlcm94IENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv cHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IFNpbGljb24gR3JhcGhpY3MuICBBbGwgcmlnaHRzIHJl c2VydmVkLgotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQgSGV3bGV0dC1QYWNrYXJkIERldmVs b3BtZW50IENvbXBhbnksIEwuUC4KLSAqIENvcHlyaWdodCAoYykgMjAwOSAgICAgIE1hdGhpZXUg RGVzbm95ZXJzCi0gKgotICogVEhJUyBNQVRFUklBTCBJUyBQUk9WSURFRCBBUyBJUywgV0lUSCBB QlNPTFVURUxZIE5PIFdBUlJBTlRZIEVYUFJFU1NFRAotICogT1IgSU1QTElFRC4gIEFOWSBVU0Ug SVMgQVQgWU9VUiBPV04gUklTSy4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk IHRvIHVzZSBvciBjb3B5IHRoaXMgcHJvZ3JhbQotICogZm9yIGFueSBwdXJwb3NlLCAgcHJvdmlk ZWQgdGhlIGFib3ZlIG5vdGljZXMgYXJlIHJldGFpbmVkIG9uIGFsbCBjb3BpZXMuCi0gKiBQZXJt aXNzaW9uIHRvIG1vZGlmeSB0aGUgY29kZSBhbmQgdG8gZGlzdHJpYnV0ZSBtb2RpZmllZCBjb2Rl IGlzIGdyYW50ZWQsCi0gKiBwcm92aWRlZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWluZWQs IGFuZCBhIG5vdGljZSB0aGF0IHRoZSBjb2RlIHdhcwotICogbW9kaWZpZWQgaXMgaW5jbHVkZWQg d2l0aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZS4KLSAqCi0gKiBDb2RlIGluc3BpcmVkIGZy b20gbGlidWF0b21pY19vcHMtMS4yLCBpbmhlcml0ZWQgaW4gcGFydCBmcm9tIHRoZQotICogQm9l aG0tRGVtZXJzLVdlaXNlciBjb25zZXJ2YXRpdmUgZ2FyYmFnZSBjb2xsZWN0b3IuCi0gKi8KLQot I2luY2x1ZGUgPHVyY3UvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDx1cmN1L3N5c3RlbS5oPgotCi0j aWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLSNkZWZpbmUgSUxMRUdB TF9JTlNUUgkiLmxvbmcJMHhkMDBkMDAiCi0KLS8qCi0gKiBQcm92aWRpbmcgc2VxdWVudGlhbCBj b25zaXN0ZW5jeSBzZW1hbnRpYyB3aXRoIHJlc3BlY3QgdG8gb3RoZXIKLSAqIGluc3RydWN0aW9u cyBmb3IgY21weGNoZyBhbmQgYWRkX3JldHVybiBmYW1pbHkgb2YgYXRvbWljIHByaW1pdGl2ZXMu Ci0gKgotICogVGhpcyBpcyBhY2hpZXZlZCB3aXRoOgotICogICBsd3N5bmMgKHByaW9yIGxvYWRz IGNhbiBiZSByZW9yZGVyZWQgYWZ0ZXIgZm9sbG93aW5nIGxvYWQpCi0gKiAgIGx3YXJ4Ci0gKiAg IHN0d2N4LgotICogICB0ZXN0IGlmIHN1Y2Nlc3MgKHJldHJ5KQotICogICBzeW5jCi0gKgotICog RXhwbGFuYXRpb24gb2YgdGhlIHNlcXVlbnRpYWwgY29uc2lzdGVuY3kgcHJvdmlkZWQgYnkgdGhp cyBzY2hlbWUKLSAqIGZyb20gUGF1bCBFLiBNY0tlbm5leToKLSAqCi0gKiBUaGUgcmVhc29uIHdl IGNhbiBnZXQgYXdheSB3aXRoIHRoZSBsd3N5bmMgYmVmb3JlIGlzIHRoYXQgaWYgYSBwcmlvcgot ICogc3RvcmUgcmVvcmRlcnMgd2l0aCB0aGUgbHdhcngsIHRoZW4geW91IGhhdmUgdG8gc3RvcmUg dG8gdGhlIGF0b21pYwotICogdmFyaWFibGUgZnJvbSBzb21lIG90aGVyIENQVSB0byBkZXRlY3Qg aXQuCi0gKgotICogQW5kIGlmIHlvdSBkbyB0aGF0LCB0aGUgbHdhcnggd2lsbCBsb3NlIGl0cyBy ZXNlcnZhdGlvbiwgc28gdGhlIHN0d2N4Ci0gKiB3aWxsIGZhaWwuICBUaGUgYXRvbWljIG9wZXJh dGlvbiB3aWxsIHJldHJ5LCBzbyB0aGF0IHRoZSBjYWxsZXIgd29uJ3QgYmUKLSAqIGFibGUgdG8g c2VlIHRoZSBtaXNvcmRlcmluZy4KLSAqLwotCi0vKiB4Y2hnICovCi0KLXN0YXRpYyBpbmxpbmUg X19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi11bnNpZ25lZCBsb25nIF91YXRvbWljX2V4 Y2hhbmdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgbGVuKQotewotCXN3aXRj aCAobGVuKSB7Ci0JY2FzZSA0OgotCXsKLQkJdW5zaWduZWQgaW50IHJlc3VsdDsKLQotCQlfX2Fz bV9fIF9fdm9sYXRpbGVfXygKLQkJCUxXU1lOQ19PUENPREUKLQkJIjE6XHQiCSJsd2FyeCAlMCww LCUxXG4iCS8qIGxvYWQgYW5kIHJlc2VydmUgKi8KLQkJCSJzdHdjeC4gJTIsMCwlMVxuIgkvKiBl bHNlIHN0b3JlIGNvbmRpdGlvbmFsICovCi0JCQkiYm5lLSAxYlxuIgkgCS8qIHJldHJ5IGlmIGxv c3QgcmVzZXJ2YXRpb24gKi8KLQkJCSJzeW5jXG4iCi0JCQkJOiAiPSZyIihyZXN1bHQpCi0JCQkJ OiAiciIoYWRkciksICJyIih2YWwpCi0JCQkJOiAibWVtb3J5IiwgImNjIik7Ci0KLQkJcmV0dXJu IHJlc3VsdDsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0KQotCWNhc2UgODoKLQl7 Ci0JCXVuc2lnbmVkIGxvbmcgcmVzdWx0OwotCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkJ TFdTWU5DX09QQ09ERQotCQkiMTpcdCIJImxkYXJ4ICUwLDAsJTFcbiIJLyogbG9hZCBhbmQgcmVz ZXJ2ZSAqLwotCQkJInN0ZGN4LiAlMiwwLCUxXG4iCS8qIGVsc2Ugc3RvcmUgY29uZGl0aW9uYWwg Ki8KLQkJCSJibmUtIDFiXG4iCSAJLyogcmV0cnkgaWYgbG9zdCByZXNlcnZhdGlvbiAqLwotCQkJ InN5bmNcbiIKLQkJCQk6ICI9JnIiKHJlc3VsdCkKLQkJCQk6ICJyIihhZGRyKSwgInIiKHZhbCkK LQkJCQk6ICJtZW1vcnkiLCAiY2MiKTsKLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLSNlbmRpZgot CX0KLQkvKgotCSAqIGdlbmVyYXRlIGFuIGlsbGVnYWwgaW5zdHJ1Y3Rpb24uIENhbm5vdCBjYXRj aCB0aGlzIHdpdGgKLQkgKiBsaW5rZXIgdHJpY2tzIHdoZW4gb3B0aW1pemF0aW9ucyBhcmUgZGlz YWJsZWQuCi0JICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oSUxMRUdBTF9JTlNUUik7Ci0JcmV0 dXJuIDA7Ci19Ci0KLSNkZWZpbmUgdWF0b21pY194Y2hnKGFkZHIsIHYpCQkJCQkJICAgIFwKLQko KF9fdHlwZW9mX18oKihhZGRyKSkpIF91YXRvbWljX2V4Y2hhbmdlKChhZGRyKSwJCSAgICBcCi0J CQkJCQljYWFfY2FzdF9sb25nX2tlZXBfc2lnbih2KSwgXAotCQkJCQkJc2l6ZW9mKCooYWRkcikp KSkKLS8qIGNtcHhjaGcgKi8KLQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNf aW5saW5lKSkKLXVuc2lnbmVkIGxvbmcgX3VhdG9taWNfY21weGNoZyh2b2lkICphZGRyLCB1bnNp Z25lZCBsb25nIG9sZCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgX25ldywgaW50IGxlbikKLXsK LQlzd2l0Y2ggKGxlbikgewotCWNhc2UgNDoKLQl7Ci0JCXVuc2lnbmVkIGludCBvbGRfdmFsOwot Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkJTFdTWU5DX09QQ09ERQotCQkiMTpcdCIJImx3 YXJ4ICUwLDAsJTFcbiIJLyogbG9hZCBhbmQgcmVzZXJ2ZSAqLwotCQkJImNtcHcgJTAsJTNcbiIJ CS8qIGlmIGxvYWQgaXMgbm90IGVxdWFsIHRvICovCi0JCQkiYm5lIDJmXG4iCQkvKiBvbGQsIGZh aWwgKi8KLQkJCSJzdHdjeC4gJTIsMCwlMVxuIgkvKiBlbHNlIHN0b3JlIGNvbmRpdGlvbmFsICov Ci0JCQkiYm5lLSAxYlxuIgkgCS8qIHJldHJ5IGlmIGxvc3QgcmVzZXJ2YXRpb24gKi8KLQkJCSJz eW5jXG4iCi0JCSIyOlxuIgotCQkJCTogIj0mciIob2xkX3ZhbCkKLQkJCQk6ICJyIihhZGRyKSwg InIiKCh1bnNpZ25lZCBpbnQpX25ldyksCi0JCQkJICAiciIoKHVuc2lnbmVkIGludClvbGQpCi0J CQkJOiAibWVtb3J5IiwgImNjIik7Ci0KLQkJcmV0dXJuIG9sZF92YWw7Ci0JfQotI2lmIChDQUFf QklUU19QRVJfTE9ORyA9PSA2NCkKLQljYXNlIDg6Ci0JewotCQl1bnNpZ25lZCBsb25nIG9sZF92 YWw7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCQlMV1NZTkNfT1BDT0RFCi0JCSIxOlx0 IgkibGRhcnggJTAsMCwlMVxuIgkvKiBsb2FkIGFuZCByZXNlcnZlICovCi0JCQkiY21wZCAlMCwl M1xuIgkJLyogaWYgbG9hZCBpcyBub3QgZXF1YWwgdG8gKi8KLQkJCSJibmUgMmZcbiIJCS8qIG9s ZCwgZmFpbCAqLwotCQkJInN0ZGN4LiAlMiwwLCUxXG4iCS8qIGVsc2Ugc3RvcmUgY29uZGl0aW9u YWwgKi8KLQkJCSJibmUtIDFiXG4iCSAJLyogcmV0cnkgaWYgbG9zdCByZXNlcnZhdGlvbiAqLwot CQkJInN5bmNcbiIKLQkJIjI6XG4iCi0JCQkJOiAiPSZyIihvbGRfdmFsKQotCQkJCTogInIiKGFk ZHIpLCAiciIoKHVuc2lnbmVkIGxvbmcpX25ldyksCi0JCQkJICAiciIoKHVuc2lnbmVkIGxvbmcp b2xkKQotCQkJCTogIm1lbW9yeSIsICJjYyIpOwotCi0JCXJldHVybiBvbGRfdmFsOwotCX0KLSNl bmRpZgotCX0KLQkvKgotCSAqIGdlbmVyYXRlIGFuIGlsbGVnYWwgaW5zdHJ1Y3Rpb24uIENhbm5v dCBjYXRjaCB0aGlzIHdpdGgKLQkgKiBsaW5rZXIgdHJpY2tzIHdoZW4gb3B0aW1pemF0aW9ucyBh cmUgZGlzYWJsZWQuCi0JICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oSUxMRUdBTF9JTlNUUik7 Ci0JcmV0dXJuIDA7Ci19Ci0KLQotI2RlZmluZSB1YXRvbWljX2NtcHhjaGcoYWRkciwgb2xkLCBf bmV3KQkJCQkgICAgICBcCi0JKChfX3R5cGVvZl9fKCooYWRkcikpKSBfdWF0b21pY19jbXB4Y2hn KChhZGRyKSwJCQkgICAgICBcCi0JCQkJCQljYWFfY2FzdF9sb25nX2tlZXBfc2lnbihvbGQpLCBc Ci0JCQkJCQljYWFfY2FzdF9sb25nX2tlZXBfc2lnbihfbmV3KSxcCi0JCQkJCQlzaXplb2YoKihh ZGRyKSkpKQotCi0vKiB1YXRvbWljX2FkZF9yZXR1cm4gKi8KLQotc3RhdGljIGlubGluZSBfX2F0 dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKLXVuc2lnbmVkIGxvbmcgX3VhdG9taWNfYWRkX3Jl dHVybih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJCQkgaW50IGxlbikKLXsKLQlz d2l0Y2ggKGxlbikgewotCWNhc2UgNDoKLQl7Ci0JCXVuc2lnbmVkIGludCByZXN1bHQ7Ci0KLQkJ X19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCQlMV1NZTkNfT1BDT0RFCi0JCSIxOlx0IgkibHdhcngg JTAsMCwlMVxuIgkvKiBsb2FkIGFuZCByZXNlcnZlICovCi0JCQkiYWRkICUwLCUyLCUwXG4iCS8q IGFkZCB2YWwgdG8gdmFsdWUgbG9hZGVkICovCi0JCQkic3R3Y3guICUwLDAsJTFcbiIJLyogc3Rv cmUgY29uZGl0aW9uYWwgKi8KLQkJCSJibmUtIDFiXG4iCSAJLyogcmV0cnkgaWYgbG9zdCByZXNl cnZhdGlvbiAqLwotCQkJInN5bmNcbiIKLQkJCQk6ICI9JnIiKHJlc3VsdCkKLQkJCQk6ICJyIihh ZGRyKSwgInIiKHZhbCkKLQkJCQk6ICJtZW1vcnkiLCAiY2MiKTsKLQotCQlyZXR1cm4gcmVzdWx0 OwotCX0KLSNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCi0JY2FzZSA4OgotCXsKLQkJdW5z aWduZWQgbG9uZyByZXN1bHQ7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCQlMV1NZTkNf T1BDT0RFCi0JCSIxOlx0IgkibGRhcnggJTAsMCwlMVxuIgkvKiBsb2FkIGFuZCByZXNlcnZlICov Ci0JCQkiYWRkICUwLCUyLCUwXG4iCS8qIGFkZCB2YWwgdG8gdmFsdWUgbG9hZGVkICovCi0JCQki c3RkY3guICUwLDAsJTFcbiIJLyogc3RvcmUgY29uZGl0aW9uYWwgKi8KLQkJCSJibmUtIDFiXG4i CSAJLyogcmV0cnkgaWYgbG9zdCByZXNlcnZhdGlvbiAqLwotCQkJInN5bmNcbiIKLQkJCQk6ICI9 JnIiKHJlc3VsdCkKLQkJCQk6ICJyIihhZGRyKSwgInIiKHZhbCkKLQkJCQk6ICJtZW1vcnkiLCAi Y2MiKTsKLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLSNlbmRpZgotCX0KLQkvKgotCSAqIGdlbmVy YXRlIGFuIGlsbGVnYWwgaW5zdHJ1Y3Rpb24uIENhbm5vdCBjYXRjaCB0aGlzIHdpdGgKLQkgKiBs aW5rZXIgdHJpY2tzIHdoZW4gb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuCi0JICovCi0JX19h c21fXyBfX3ZvbGF0aWxlX18oSUxMRUdBTF9JTlNUUik7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotI2Rl ZmluZSB1YXRvbWljX2FkZF9yZXR1cm4oYWRkciwgdikJCQkJCSAgICBcCi0JKChfX3R5cGVvZl9f KCooYWRkcikpKSBfdWF0b21pY19hZGRfcmV0dXJuKChhZGRyKSwJCSAgICBcCi0JCQkJCQljYWFf Y2FzdF9sb25nX2tlZXBfc2lnbih2KSwgXAotCQkJCQkJc2l6ZW9mKCooYWRkcikpKSkKLQotI2lm ZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHVyY3UvdWF0b21pYy9nZW5l cmljLmg+Ci0KLSNlbmRpZiAvKiBfVVJDVV9BUkNIX1VBVE9NSUNfUFBDX0ggKi8KZGlmZiAtLWdp dCBhL2luY2x1ZGUvdXJjdS91YXRvbWljL3Jpc2N2LmggYi9pbmNsdWRlL3VyY3UvdWF0b21pYy9y aXNjdi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjcwMGUxLi4wMDAwMDAwCi0t LSBhL2luY2x1ZGUvdXJjdS91YXRvbWljL3Jpc2N2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCAr MCwwIEBACi0vKgotICogQXRvbWljIGV4Y2hhbmdlIG9wZXJhdGlvbnMgZm9yIHRoZSBSSVNDLVYg YXJjaGl0ZWN0dXJlLiBMZXQgR0NDIGRvIGl0LgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxOCBN aWNoYWVsIEplYW5zb24gPG1qZWFuc29uQGVmZmljaW9zLmNvbT4KLSAqCi0gKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KLSAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCi0gKiBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLCBhbmQvb3IKLSAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl IGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks Ci0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKi8KLQot I2lmbmRlZiBfVVJDVV9BUkNIX1VBVE9NSUNfUklTQ1ZfSAotI2RlZmluZSBfVVJDVV9BUkNIX1VB VE9NSUNfUklTQ1ZfSAotCi0jaW5jbHVkZSA8dXJjdS9jb21waWxlci5oPgotI2luY2x1ZGUgPHVy Y3Uvc3lzdGVtLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYK LQotI2RlZmluZSBVQVRPTUlDX0hBU19BVE9NSUNfQllURQotI2RlZmluZSBVQVRPTUlDX0hBU19B VE9NSUNfU0hPUlQKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2luY2x1ZGUg PHVyY3UvdWF0b21pYy9nZW5lcmljLmg+Ci0KLSNlbmRpZiAvKiBfVVJDVV9BUkNIX1VBVE9NSUNf UklTQ1ZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91cmN1L3VhdG9taWMvczM5MC5oIGIvaW5j bHVkZS91cmN1L3VhdG9taWMvczM5MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0 MmYyM2U3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvdXJjdS91YXRvbWljL3MzOTAuaAorKysgL2Rl di9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0jaWZuZGVmIF9VUkNVX1VBVE9NSUNfQVJDSF9TMzkw X0gKLSNkZWZpbmUgX1VSQ1VfVUFUT01JQ19BUkNIX1MzOTBfSAotCi0vKgotICogQXRvbWljIGV4 Y2hhbmdlIG9wZXJhdGlvbnMgZm9yIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gQmFzZWQgb24gaW5m b3JtYXRpb24KLSAqIHRha2VuIGZyb20gdGhlIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIEFwcGVu ZGl4IEEgIkNvbmRpdGlvbmFsIFN3YXBwaW5nCi0gKiBJbnN0cnVjdGlvbnMgKENTLCBDRFMpIi4K LSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgTm92ZWxsLCBJbmMuCi0gKiBBdXRob3I6IEphbiBC bHVuY2sgPGpibHVuY2tAc3VzZS5kZT4KLSAqIENvcHlyaWdodCAoYykgMjAwOSBNYXRoaWV1IERl c25veWVycyA8bWF0aGlldS5kZXNub3llcnNAZWZmaWNpb3MuY29tPgotICoKLSAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bwotICogZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKLSAq IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsIGFuZC9vcgotICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg YmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqLwot Ci0jaW5jbHVkZSA8dXJjdS9jb21waWxlci5oPgotI2luY2x1ZGUgPHVyY3Uvc3lzdGVtLmg+Ci0K LSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2lmIF9fR05VQ19f ID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0jZGVmaW5lIENP TVBJTEVSX0hBVkVfU0hPUlRfTUVNX09QRVJBTkQKLSNlbmRpZgotCi0vKgotICogTUVNT1AgYXNz ZW1ibGVyIG9wZXJhbmQgcnVsZXM6Ci0gKiAtIG9wIHJlZmVyIHRvIE1FTU9QX0lOIG9wZXJhbmQK LSAqIC0gTUVNT1BfSU4gY2FuIGV4cGFuZCB0byBtb3JlIHRoYW4gYSBzaW5nbGUgb3BlcmFuZC4g VXNlIGl0IGF0IHRoZSBlbmQgb2YKLSAqICAgb3BlcmFuZCBsaXN0IG9ubHkuCi0gKi8KLQotI2lm ZGVmIENPTVBJTEVSX0hBVkVfU0hPUlRfTUVNX09QRVJBTkQKLQotI2RlZmluZSBNRU1PUF9PVVQo YWRkcikJIj1RIiAoKihhZGRyKSkKLSNkZWZpbmUgTUVNT1BfSU4oYWRkcikJIlEiICgqKGFkZHIp KQotI2RlZmluZSBNRU1PUF9SRUYob3ApCSNvcAkJLyogb3AgcmVmZXIgdG8gTUVNT1BfSU4gb3Bl cmFuZCAqLwotCi0jZWxzZSAvKiAhQ09NUElMRVJfSEFWRV9TSE9SVF9NRU1fT1BFUkFORCAqLwot Ci0jZGVmaW5lIE1FTU9QX09VVChhZGRyKQkiPW0iICgqKGFkZHIpKQotI2RlZmluZSBNRU1PUF9J TihhZGRyKQkiYSIgKGFkZHIpLCAibSIgKCooYWRkcikpCi0jZGVmaW5lIE1FTU9QX1JFRihvcCkJ IjAoIiAjb3AgIikiCS8qIG9wIHJlZmVyIHRvIE1FTU9QX0lOIG9wZXJhbmQgKi8KLQotI2VuZGlm IC8qICFDT01QSUxFUl9IQVZFX1NIT1JUX01FTV9PUEVSQU5EICovCi0KLS8qCi0gKiBUaGUgX19o cCgpIG1hY3JvIGNhc3RzIHRoZSB2b2lkIHBvaW50ZXIgQHggdG8gYSBwb2ludGVyIHRvIGEgc3Ry dWN0dXJlCi0gKiBjb250YWluaW5nIGFuIGFycmF5IG9mIGNoYXIgb2YgdGhlIHNwZWNpZmllZCBz aXplLiBUaGlzIGFsbG93cyBwYXNzaW5nIHRoZQotICogQGFkZHIgYXJndW1lbnRzIG9mIHRoZSBm b2xsb3dpbmcgaW5saW5lIGZ1bmN0aW9ucyBhcyAibSIgYW5kICIrbSIgb3BlcmFuZHMKLSAqIHRv IHRoZSBhc3NlbWJseS4gVGhlIEBzaXplIHBhcmFtZXRlciBzaG91bGQgYmUgYSBjb25zdGFudCB0 byBzdXBwb3J0Ci0gKiBjb21waWxlcnMgc3VjaCBhcyBjbGFuZyB3aGljaCBkbyBub3Qgc3VwcG9y dCBWTEEuIENyZWF0ZSB0eXBlZGVmcyBiZWNhdXNlCi0gKiBDKysgZG9lcyBub3QgYWxsb3cgdHlw ZXMgYmUgZGVmaW5lZCBpbiBjYXN0cy4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCB7IGNoYXIgdls0 XTsgfSBfX2hwXzQ7Ci10eXBlZGVmIHN0cnVjdCB7IGNoYXIgdls4XTsgfSBfX2hwXzg7Ci0KLSNk ZWZpbmUgX19ocChzaXplLCB4KQkoKF9faHBfIyNzaXplICopKHgpKQotCi0vKiB4Y2hnICovCi0K LXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi11bnNpZ25lZCBs b25nIF91YXRvbWljX2V4Y2hhbmdlKHZvbGF0aWxlIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcg dmFsLCBpbnQgbGVuKQotewotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSA0OgotCXsKLQkJdW5zaWdu ZWQgaW50IG9sZF92YWw7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCQkiMDoJY3MgJTAs JTIsIiBNRU1PUF9SRUYoJTMpICJcbiIKLQkJCSIJYnJjIDQsMGJcbiIKLQkJCTogIj0mciIgKG9s ZF92YWwpLCBNRU1PUF9PVVQgKF9faHAoNCwgYWRkcikpCi0JCQk6ICJyIiAodmFsKSwgTUVNT1Bf SU4gKF9faHAoNCwgYWRkcikpCi0JCQk6ICJtZW1vcnkiLCAiY2MiKTsKLQkJcmV0dXJuIG9sZF92 YWw7Ci0JfQotI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKLQljYXNlIDg6Ci0JewotCQl1 bnNpZ25lZCBsb25nIG9sZF92YWw7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCQkiMDoJ Y3NnICUwLCUyLCIgTUVNT1BfUkVGKCUzKSAiXG4iCi0JCQkiCWJyYyA0LDBiXG4iCi0JCQk6ICI9 JnIiIChvbGRfdmFsKSwgTUVNT1BfT1VUIChfX2hwKDgsIGFkZHIpKQotCQkJOiAiciIgKHZhbCks IE1FTU9QX0lOIChfX2hwKDgsIGFkZHIpKQotCQkJOiAibWVtb3J5IiwgImNjIik7Ci0JCXJldHVy biBvbGRfdmFsOwotCX0KLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCV9fYXNtX18gX192b2xhdGlsZV9f KCIubG9uZwkweGQwMGQwMCIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIHVhdG9t aWNfeGNoZyhhZGRyLCB2KQkJCQkJCSAgICBcCi0JKF9fdHlwZW9mX18oKihhZGRyKSkpIF91YXRv bWljX2V4Y2hhbmdlKChhZGRyKSwJCQkgICAgXAotCQkJCQkJY2FhX2Nhc3RfbG9uZ19rZWVwX3Np Z24odiksIFwKLQkJCQkJCXNpemVvZigqKGFkZHIpKSkKLQotLyogY21weGNoZyAqLwotCi1zdGF0 aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQotdW5zaWduZWQgbG9uZyBf dWF0b21pY19jbXB4Y2hnKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgb2xkLAotCQkJICAgICAg IHVuc2lnbmVkIGxvbmcgX25ldywgaW50IGxlbikKLXsKLQlzd2l0Y2ggKGxlbikgewotCWNhc2Ug NDoKLQl7Ci0JCXVuc2lnbmVkIGludCBvbGRfdmFsID0gKHVuc2lnbmVkIGludClvbGQ7Ci0KLQkJ X19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCQkiCWNzICUwLCUyLCIgTUVNT1BfUkVGKCUzKSAiXG4i Ci0JCQk6ICIrciIgKG9sZF92YWwpLCBNRU1PUF9PVVQgKF9faHAoNCwgYWRkcikpCi0JCQk6ICJy IiAoX25ldyksIE1FTU9QX0lOIChfX2hwKDQsIGFkZHIpKQotCQkJOiAibWVtb3J5IiwgImNjIik7 Ci0JCXJldHVybiBvbGRfdmFsOwotCX0KLSNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCi0J Y2FzZSA4OgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCQkiCWNzZyAlMCwlMiwiIE1F TU9QX1JFRiglMykgIlxuIgotCQkJOiAiK3IiIChvbGQpLCBNRU1PUF9PVVQgKF9faHAoOCwgYWRk cikpCi0JCQk6ICJyIiAoX25ldyksIE1FTU9QX0lOIChfX2hwKDgsIGFkZHIpKQotCQkJOiAibWVt b3J5IiwgImNjIik7Ci0JCXJldHVybiBvbGQ7Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJX19h c21fXyBfX3ZvbGF0aWxlX18oIi5sb25nCTB4ZDAwZDAwIik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19 Ci0KLSNkZWZpbmUgdWF0b21pY19jbXB4Y2hnKGFkZHIsIG9sZCwgX25ldykJCQkJICAgICBcCi0J KF9fdHlwZW9mX18oKihhZGRyKSkpIF91YXRvbWljX2NtcHhjaGcoKGFkZHIpLAkJCSAgICAgXAot CQkJCQkgICAgICAgY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24ob2xkKSwgXAotCQkJCQkgICAgICAg Y2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24oX25ldyksXAotCQkJCQkgICAgICAgc2l6ZW9mKCooYWRk cikpKQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jaW5jbHVkZSA8dXJjdS91 YXRvbWljL2dlbmVyaWMuaD4KLQotI2VuZGlmIC8qIF9VUkNVX1VBVE9NSUNfQVJDSF9TMzkwX0gg Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXJjdS91YXRvbWljL3NwYXJjNjQuaCBiL2luY2x1ZGUv dXJjdS91YXRvbWljL3NwYXJjNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlm Mjc5NS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3VyY3UvdWF0b21pYy9zcGFyYzY0LmgKKysrIC9k ZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0jaWZuZGVmIF9VUkNVX0FSQ0hfVUFUT01JQ19TUEFS QzY0X0gKLSNkZWZpbmUgX1VSQ1VfQVJDSF9VQVRPTUlDX1NQQVJDNjRfSAotCi0vKgotICogQ29w eXJpZ2h0IChjKSAxOTkxLTE5OTQgYnkgWGVyb3ggQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJl c2VydmVkLgotICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgU2lsaWNvbiBHcmFwaGljcy4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMyBieSBIZXds ZXR0LVBhY2thcmQgQ29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo YykgMjAwOSAgICAgIE1hdGhpZXUgRGVzbm95ZXJzCi0gKgotICogVEhJUyBNQVRFUklBTCBJUyBQ Uk9WSURFRCBBUyBJUywgV0lUSCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZIEVYUFJFU1NFRAotICog T1IgSU1QTElFRC4gIEFOWSBVU0UgSVMgQVQgWU9VUiBPV04gUklTSy4KLSAqCi0gKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSBvciBjb3B5IHRoaXMgcHJvZ3JhbQotICogZm9y IGFueSBwdXJwb3NlLCAgcHJvdmlkZWQgdGhlIGFib3ZlIG5vdGljZXMgYXJlIHJldGFpbmVkIG9u IGFsbCBjb3BpZXMuCi0gKiBQZXJtaXNzaW9uIHRvIG1vZGlmeSB0aGUgY29kZSBhbmQgdG8gZGlz dHJpYnV0ZSBtb2RpZmllZCBjb2RlIGlzIGdyYW50ZWQsCi0gKiBwcm92aWRlZCB0aGUgYWJvdmUg bm90aWNlcyBhcmUgcmV0YWluZWQsIGFuZCBhIG5vdGljZSB0aGF0IHRoZSBjb2RlIHdhcwotICog bW9kaWZpZWQgaXMgaW5jbHVkZWQgd2l0aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZS4KLSAq Ci0gKiBDb2RlIGluc3BpcmVkIGZyb20gbGlidWF0b21pY19vcHMtMS4yLCBpbmhlcml0ZWQgaW4g cGFydCBmcm9tIHRoZQotICogQm9laG0tRGVtZXJzLVdlaXNlciBjb25zZXJ2YXRpdmUgZ2FyYmFn ZSBjb2xsZWN0b3IuCi0gKi8KLQotI2luY2x1ZGUgPHVyY3UvY29tcGlsZXIuaD4KLSNpbmNsdWRl IDx1cmN1L3N5c3RlbS5oPgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2Vu ZGlmCi0KLS8qIGNtcHhjaGcgKi8KLQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdh eXNfaW5saW5lKSkKLXVuc2lnbmVkIGxvbmcgX3VhdG9taWNfY21weGNoZyh2b2lkICphZGRyLCB1 bnNpZ25lZCBsb25nIG9sZCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgX25ldywgaW50IGxlbikK LXsKLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgNDoKLQl7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9f ICgKLQkJCSJtZW1iYXIgI1N0b3JlTG9hZCB8ICNMb2FkTG9hZFxuXHQiCi0gICAgICAgICAgICAg ICAgICAgICAgICAiY2FzIFslMV0sJTIsJTBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAg Im1lbWJhciAjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmVcblx0IgotICAgICAgICAgICAgICAgICAg ICAgICAgOiAiKyZyIiAoX25ldykKLSAgICAgICAgICAgICAgICAgICAgICAgIDogInIiIChhZGRy KSwgInIiIChvbGQpCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKLQotCQly ZXR1cm4gX25ldzsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0KQotCWNhc2UgODoK LQl7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJCSJtZW1iYXIgI1N0b3JlTG9hZCB8ICNM b2FkTG9hZFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2FzeCBbJTFdLCUyLCUwXG5c dCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtZW1iYXIgI1N0b3JlTG9hZCB8ICNTdG9yZVN0 b3JlXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgIDogIismciIgKF9uZXcpCi0gICAgICAg ICAgICAgICAgICAgICAgICA6ICJyIiAoYWRkciksICJyIiAob2xkKQotICAgICAgICAgICAgICAg ICAgICAgICAgOiAibWVtb3J5Iik7Ci0KLQkJcmV0dXJuIF9uZXc7Ci0JfQotI2VuZGlmCi0JfQot CV9fYnVpbHRpbl90cmFwKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotI2RlZmluZSB1YXRvbWljX2Nt cHhjaGcoYWRkciwgb2xkLCBfbmV3KQkJCQkgICAgICAgXAotCSgoX190eXBlb2ZfXygqKGFkZHIp KSkgX3VhdG9taWNfY21weGNoZygoYWRkciksCQkJICAgICAgIFwKLQkJCQkJCWNhYV9jYXN0X2xv bmdfa2VlcF9zaWduKG9sZCksICBcCi0JCQkJCQljYWFfY2FzdF9sb25nX2tlZXBfc2lnbihfbmV3 KSwgXAotCQkJCQkJc2l6ZW9mKCooYWRkcikpKSkKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0j ZW5kaWYKLQotI2luY2x1ZGUgPHVyY3UvdWF0b21pYy9nZW5lcmljLmg+Ci0KLSNlbmRpZiAvKiBf VVJDVV9BUkNIX1VBVE9NSUNfUFBDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXJjdS91YXRv bWljL3RpbGUuaCBiL2luY2x1ZGUvdXJjdS91YXRvbWljL3RpbGUuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggODMwZjI2MC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3VyY3UvdWF0b21p Yy90aWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jaWZuZGVmIF9VUkNVX0FS Q0hfVUFUT01JQ19USUxFX0gKLSNkZWZpbmUgX1VSQ1VfQVJDSF9VQVRPTUlDX1RJTEVfSAotCi0v KgotICogQ29weXJpZ2h0IChjKSAxOTkxLTE5OTQgYnkgWGVyb3ggQ29ycG9yYXRpb24uICBBbGwg cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgU2lsaWNvbiBH cmFwaGljcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAw NCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgotICogQ29weXJpZ2h0 IChjKSAyMDA5LTIwMTUgTWF0aGlldSBEZXNub3llcnMKLSAqIENvcHlyaWdodCAoYykgMjAxMCAg ICAgIFBhdWwgRS4gTWNLZW5uZXksIElCTSBDb3Jwb3JhdGlvbgotICoJCQkgICAoQWRhcHRlZCBm cm9tIHVhdG9taWNfYXJjaF9wcGMuaCkKLSAqCi0gKiBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVE IEFTIElTLCBXSVRIIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkgRVhQUkVTU0VECi0gKiBPUiBJTVBM SUVELiAgQU5ZIFVTRSBJUyBBVCBZT1VSIE9XTiBSSVNLLgotICoKLSAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQgdG8gdXNlIG9yIGNvcHkgdGhpcyBwcm9ncmFtCi0gKiBmb3IgYW55IHB1 cnBvc2UsICBwcm92aWRlZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWluZWQgb24gYWxsIGNv cGllcy4KLSAqIFBlcm1pc3Npb24gdG8gbW9kaWZ5IHRoZSBjb2RlIGFuZCB0byBkaXN0cmlidXRl IG1vZGlmaWVkIGNvZGUgaXMgZ3JhbnRlZCwKLSAqIHByb3ZpZGVkIHRoZSBhYm92ZSBub3RpY2Vz IGFyZSByZXRhaW5lZCwgYW5kIGEgbm90aWNlIHRoYXQgdGhlIGNvZGUgd2FzCi0gKiBtb2RpZmll ZCBpcyBpbmNsdWRlZCB3aXRoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLgotICoKLSAqIENv ZGUgaW5zcGlyZWQgZnJvbSBsaWJ1YXRvbWljX29wcy0xLjIsIGluaGVyaXRlZCBpbiBwYXJ0IGZy b20gdGhlCi0gKiBCb2VobS1EZW1lcnMtV2Vpc2VyIGNvbnNlcnZhdGl2ZSBnYXJiYWdlIGNvbGxl Y3Rvci4KLSAqLwotCi0jaW5jbHVkZSA8dXJjdS9jb21waWxlci5oPgotI2luY2x1ZGUgPHVyY3Uv c3lzdGVtLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQot I2RlZmluZSBVQVRPTUlDX0hBU19BVE9NSUNfQllURQotI2RlZmluZSBVQVRPTUlDX0hBU19BVE9N SUNfU0hPUlQKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHVy Y3UvdWF0b21pYy9nZW5lcmljLmg+Ci0KLSNlbmRpZiAvKiBfVVJDVV9BUkNIX1VBVE9NSUNfVElM RV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VyY3UvdWF0b21pYy94ODYuaCBiL2luY2x1ZGUv dXJjdS91YXRvbWljL3g4Ni5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDE2OTYz Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvdXJjdS91YXRvbWljL3g4Ni5oCisrKyAvZGV2L251bGwK QEAgLTEsNjQ2ICswLDAgQEAKLSNpZm5kZWYgX1VSQ1VfQVJDSF9VQVRPTUlDX1g4Nl9ICi0jZGVm aW5lIF9VUkNVX0FSQ0hfVUFUT01JQ19YODZfSAotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkx LTE5OTQgYnkgWGVyb3ggQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w eXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgU2lsaWNvbiBHcmFwaGljcy4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxv cG1lbnQgQ29tcGFueSwgTC5QLgotICogQ29weXJpZ2h0IChjKSAyMDA5ICAgICAgTWF0aGlldSBE ZXNub3llcnMKLSAqCi0gKiBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEFTIElTLCBXSVRIIEFC U09MVVRFTFkgTk8gV0FSUkFOVFkgRVhQUkVTU0VECi0gKiBPUiBJTVBMSUVELiAgQU5ZIFVTRSBJ UyBBVCBZT1VSIE9XTiBSSVNLLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQg dG8gdXNlIG9yIGNvcHkgdGhpcyBwcm9ncmFtCi0gKiBmb3IgYW55IHB1cnBvc2UsICBwcm92aWRl ZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWluZWQgb24gYWxsIGNvcGllcy4KLSAqIFBlcm1p c3Npb24gdG8gbW9kaWZ5IHRoZSBjb2RlIGFuZCB0byBkaXN0cmlidXRlIG1vZGlmaWVkIGNvZGUg aXMgZ3JhbnRlZCwKLSAqIHByb3ZpZGVkIHRoZSBhYm92ZSBub3RpY2VzIGFyZSByZXRhaW5lZCwg YW5kIGEgbm90aWNlIHRoYXQgdGhlIGNvZGUgd2FzCi0gKiBtb2RpZmllZCBpcyBpbmNsdWRlZCB3 aXRoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLgotICoKLSAqIENvZGUgaW5zcGlyZWQgZnJv bSBsaWJ1YXRvbWljX29wcy0xLjIsIGluaGVyaXRlZCBpbiBwYXJ0IGZyb20gdGhlCi0gKiBCb2Vo bS1EZW1lcnMtV2Vpc2VyIGNvbnNlcnZhdGl2ZSBnYXJiYWdlIGNvbGxlY3Rvci4KLSAqLwotCi0j aW5jbHVkZSA8dXJjdS9hcmNoLmg+Ci0jaW5jbHVkZSA8dXJjdS9jb25maWcuaD4KLSNpbmNsdWRl IDx1cmN1L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8dXJjdS9zeXN0ZW0uaD4KLQotI2RlZmluZSBV QVRPTUlDX0hBU19BVE9NSUNfQllURQotI2RlZmluZSBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQK LQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0vKgotICogRGVy aXZlZCBmcm9tIEFPX2NvbXBhcmVfYW5kX3N3YXAoKSBhbmQgQU9fdGVzdF9hbmRfc2V0X2Z1bGwo KS4KLSAqLwotCi0vKgotICogVGhlIF9faHAoKSBtYWNybyBjYXN0cyB0aGUgdm9pZCBwb2ludGVy IEB4IHRvIGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZQotICogY29udGFpbmluZyBhbiBhcnJheSBv ZiBjaGFyIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4gVGhpcyBhbGxvd3MgcGFzc2luZyB0aGUKLSAq IEBhZGRyIGFyZ3VtZW50cyBvZiB0aGUgZm9sbG93aW5nIGlubGluZSBmdW5jdGlvbnMgYXMgIm0i IGFuZCAiK20iIG9wZXJhbmRzCi0gKiB0byB0aGUgYXNzZW1ibHkuIFRoZSBAc2l6ZSBwYXJhbWV0 ZXIgc2hvdWxkIGJlIGEgY29uc3RhbnQgdG8gc3VwcG9ydAotICogY29tcGlsZXJzIHN1Y2ggYXMg Y2xhbmcgd2hpY2ggZG8gbm90IHN1cHBvcnQgVkxBLiBDcmVhdGUgdHlwZWRlZnMgYmVjYXVzZQot ICogQysrIGRvZXMgbm90IGFsbG93IHR5cGVzIGJlIGRlZmluZWQgaW4gY2FzdHMuCi0gKi8KLQot dHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIHZbMV07IH0gX19ocF8xOwotdHlwZWRlZiBzdHJ1Y3QgeyBj aGFyIHZbMl07IH0gX19ocF8yOwotdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIHZbNF07IH0gX19ocF80 OwotdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIHZbOF07IH0gX19ocF84OwotCi0jZGVmaW5lIF9faHAo c2l6ZSwgeCkJKChfX2hwXyMjc2l6ZSAqKSh4KSkKLQotI2RlZmluZSBfdWF0b21pY19zZXQoYWRk ciwgdikJKCh2b2lkKSBDTU1fU1RPUkVfU0hBUkVEKCooYWRkciksICh2KSkpCi0KLS8qIGNtcHhj aGcgKi8KLQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKLXVu c2lnbmVkIGxvbmcgX191YXRvbWljX2NtcHhjaGcodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBv bGQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIF9uZXcsIGludCBsZW4pCi17Ci0Jc3dpdGNoIChs ZW4pIHsKLQljYXNlIDE6Ci0JewotCQl1bnNpZ25lZCBjaGFyIHJlc3VsdCA9IG9sZDsKLQotCQlf X2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxvY2s7IGNtcHhjaGdiICUyLCAlMSIKLQkJCTogIith IihyZXN1bHQpLCAiK20iKCpfX2hwKDEsIGFkZHIpKQotCQkJOiAicSIoKHVuc2lnbmVkIGNoYXIp X25ldykKLQkJCTogIm1lbW9yeSIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQljYXNlIDI6Ci0J ewotCQl1bnNpZ25lZCBzaG9ydCByZXN1bHQgPSBvbGQ7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxl X18oCi0JCSJsb2NrOyBjbXB4Y2hndyAlMiwgJTEiCi0JCQk6ICIrYSIocmVzdWx0KSwgIittIigq X19ocCgyLCBhZGRyKSkKLQkJCTogInIiKCh1bnNpZ25lZCBzaG9ydClfbmV3KQotCQkJOiAibWVt b3J5Iik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCWNhc2UgNDoKLQl7Ci0JCXVuc2lnbmVkIGlu dCByZXN1bHQgPSBvbGQ7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJsb2NrOyBjbXB4 Y2hnbCAlMiwgJTEiCi0JCQk6ICIrYSIocmVzdWx0KSwgIittIigqX19ocCg0LCBhZGRyKSkKLQkJ CTogInIiKCh1bnNpZ25lZCBpbnQpX25ldykKLQkJCTogIm1lbW9yeSIpOwotCQlyZXR1cm4gcmVz dWx0OwotCX0KLSNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCi0JY2FzZSA4OgotCXsKLQkJ dW5zaWduZWQgbG9uZyByZXN1bHQgPSBvbGQ7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0J CSJsb2NrOyBjbXB4Y2hncSAlMiwgJTEiCi0JCQk6ICIrYSIocmVzdWx0KSwgIittIigqX19ocCg4 LCBhZGRyKSkKLQkJCTogInIiKCh1bnNpZ25lZCBsb25nKV9uZXcpCi0JCQk6ICJtZW1vcnkiKTsK LQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0jZW5kaWYKLQl9Ci0JLyoKLQkgKiBnZW5lcmF0ZSBhbiBp bGxlZ2FsIGluc3RydWN0aW9uLiBDYW5ub3QgY2F0Y2ggdGhpcyB3aXRoCi0JICogbGlua2VyIHRy aWNrcyB3aGVuIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLgotCSAqLwotCV9fYXNtX18gX192 b2xhdGlsZV9fKCJ1ZDIiKTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBfdWF0b21pY19jbXB4 Y2hnKGFkZHIsIG9sZCwgX25ldykJCQkJICAgICAgXAotCSgoX190eXBlb2ZfXygqKGFkZHIpKSkg X191YXRvbWljX2NtcHhjaGcoKGFkZHIpLAkJICAgICAgXAotCQkJCQkJY2FhX2Nhc3RfbG9uZ19r ZWVwX3NpZ24ob2xkKSwgXAotCQkJCQkJY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24oX25ldyksXAot CQkJCQkJc2l6ZW9mKCooYWRkcikpKSkKLQotLyogeGNoZyAqLwotCi1zdGF0aWMgaW5saW5lIF9f YXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQotdW5zaWduZWQgbG9uZyBfX3VhdG9taWNfZXhj aGFuZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsIGludCBsZW4pCi17Ci0JLyogTm90 ZTogdGhlICJ4Y2hnIiBpbnN0cnVjdGlvbiBkb2VzIG5vdCBuZWVkIGEgImxvY2siIHByZWZpeC4g Ki8KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQl7Ci0JCXVuc2lnbmVkIGNoYXIgcmVzdWx0 OwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJInhjaGdiICUwLCAlMSIKLQkJCTogIj1xIihy ZXN1bHQpLCAiK20iKCpfX2hwKDEsIGFkZHIpKQotCQkJOiAiMCIgKCh1bnNpZ25lZCBjaGFyKXZh bCkKLQkJCTogIm1lbW9yeSIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQljYXNlIDI6Ci0Jewot CQl1bnNpZ25lZCBzaG9ydCByZXN1bHQ7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkieGNo Z3cgJTAsICUxIgotCQkJOiAiPXIiKHJlc3VsdCksICIrbSIoKl9faHAoMiwgYWRkcikpCi0JCQk6 ICIwIiAoKHVuc2lnbmVkIHNob3J0KXZhbCkKLQkJCTogIm1lbW9yeSIpOwotCQlyZXR1cm4gcmVz dWx0OwotCX0KLQljYXNlIDQ6Ci0JewotCQl1bnNpZ25lZCBpbnQgcmVzdWx0OwotCQlfX2FzbV9f IF9fdm9sYXRpbGVfXygKLQkJInhjaGdsICUwLCAlMSIKLQkJCTogIj1yIihyZXN1bHQpLCAiK20i KCpfX2hwKDQsIGFkZHIpKQotCQkJOiAiMCIgKCh1bnNpZ25lZCBpbnQpdmFsKQotCQkJOiAibWVt b3J5Iik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2 NCkKLQljYXNlIDg6Ci0JewotCQl1bnNpZ25lZCBsb25nIHJlc3VsdDsKLQkJX19hc21fXyBfX3Zv bGF0aWxlX18oCi0JCSJ4Y2hncSAlMCwgJTEiCi0JCQk6ICI9ciIocmVzdWx0KSwgIittIigqX19o cCg4LCBhZGRyKSkKLQkJCTogIjAiICgodW5zaWduZWQgbG9uZyl2YWwpCi0JCQk6ICJtZW1vcnki KTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0jZW5kaWYKLQl9Ci0JLyoKLQkgKiBnZW5lcmF0ZSBh biBpbGxlZ2FsIGluc3RydWN0aW9uLiBDYW5ub3QgY2F0Y2ggdGhpcyB3aXRoCi0JICogbGlua2Vy IHRyaWNrcyB3aGVuIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLgotCSAqLwotCV9fYXNtX18g X192b2xhdGlsZV9fKCJ1ZDIiKTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBfdWF0b21pY194 Y2hnKGFkZHIsIHYpCQkJCQkJICAgICAgXAotCSgoX190eXBlb2ZfXygqKGFkZHIpKSkgX191YXRv bWljX2V4Y2hhbmdlKChhZGRyKSwJCSAgICAgIFwKLQkJCQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9z aWduKHYpLCAgIFwKLQkJCQkJCXNpemVvZigqKGFkZHIpKSkpCi0KLS8qIHVhdG9taWNfYWRkX3Jl dHVybiAqLwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQot dW5zaWduZWQgbG9uZyBfX3VhdG9taWNfYWRkX3JldHVybih2b2lkICphZGRyLCB1bnNpZ25lZCBs b25nIHZhbCwKLQkJCQkgaW50IGxlbikKLXsKLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQl7 Ci0JCXVuc2lnbmVkIGNoYXIgcmVzdWx0ID0gdmFsOwotCi0JCV9fYXNtX18gX192b2xhdGlsZV9f KAotCQkibG9jazsgeGFkZGIgJTEsICUwIgotCQkJOiAiK20iKCpfX2hwKDEsIGFkZHIpKSwgIitx IiAocmVzdWx0KQotCQkJOgotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybiByZXN1bHQgKyAodW5z aWduZWQgY2hhcil2YWw7Ci0JfQotCWNhc2UgMjoKLQl7Ci0JCXVuc2lnbmVkIHNob3J0IHJlc3Vs dCA9IHZhbDsKLQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxvY2s7IHhhZGR3ICUxLCAl MCIKLQkJCTogIittIigqX19ocCgyLCBhZGRyKSksICIrciIgKHJlc3VsdCkKLQkJCToKLQkJCTog Im1lbW9yeSIpOwotCQlyZXR1cm4gcmVzdWx0ICsgKHVuc2lnbmVkIHNob3J0KXZhbDsKLQl9Ci0J Y2FzZSA0OgotCXsKLQkJdW5zaWduZWQgaW50IHJlc3VsdCA9IHZhbDsKLQotCQlfX2FzbV9fIF9f dm9sYXRpbGVfXygKLQkJImxvY2s7IHhhZGRsICUxLCAlMCIKLQkJCTogIittIigqX19ocCg0LCBh ZGRyKSksICIrciIgKHJlc3VsdCkKLQkJCToKLQkJCTogIm1lbW9yeSIpOwotCQlyZXR1cm4gcmVz dWx0ICsgKHVuc2lnbmVkIGludCl2YWw7Ci0JfQotI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2 NCkKLQljYXNlIDg6Ci0JewotCQl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IHZhbDsKLQotCQlfX2Fz bV9fIF9fdm9sYXRpbGVfXygKLQkJImxvY2s7IHhhZGRxICUxLCAlMCIKLQkJCTogIittIigqX19o cCg4LCBhZGRyKSksICIrciIgKHJlc3VsdCkKLQkJCToKLQkJCTogIm1lbW9yeSIpOwotCQlyZXR1 cm4gcmVzdWx0ICsgKHVuc2lnbmVkIGxvbmcpdmFsOwotCX0KLSNlbmRpZgotCX0KLQkvKgotCSAq IGdlbmVyYXRlIGFuIGlsbGVnYWwgaW5zdHJ1Y3Rpb24uIENhbm5vdCBjYXRjaCB0aGlzIHdpdGgK LQkgKiBsaW5rZXIgdHJpY2tzIHdoZW4gb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuCi0JICov Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInVkMiIpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5l IF91YXRvbWljX2FkZF9yZXR1cm4oYWRkciwgdikJCQkJCSAgICBcCi0JKChfX3R5cGVvZl9fKCoo YWRkcikpKSBfX3VhdG9taWNfYWRkX3JldHVybigoYWRkciksCQkgICAgXAotCQkJCQkJY2FhX2Nh c3RfbG9uZ19rZWVwX3NpZ24odiksIFwKLQkJCQkJCXNpemVvZigqKGFkZHIpKSkpCi0KLS8qIHVh dG9taWNfYW5kICovCi0KLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGlu ZSkpCi12b2lkIF9fdWF0b21pY19hbmQodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsIGlu dCBsZW4pCi17Ci0Jc3dpdGNoIChsZW4pIHsKLQljYXNlIDE6Ci0JewotCQlfX2FzbV9fIF9fdm9s YXRpbGVfXygKLQkJImxvY2s7IGFuZGIgJTEsICUwIgotCQkJOiAiPW0iKCpfX2hwKDEsIGFkZHIp KQotCQkJOiAiaXEiICgodW5zaWduZWQgY2hhcil2YWwpCi0JCQk6ICJtZW1vcnkiKTsKLQkJcmV0 dXJuOwotCX0KLQljYXNlIDI6Ci0JewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxvY2s7 IGFuZHcgJTEsICUwIgotCQkJOiAiPW0iKCpfX2hwKDIsIGFkZHIpKQotCQkJOiAiaXIiICgodW5z aWduZWQgc2hvcnQpdmFsKQotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybjsKLQl9Ci0JY2FzZSA0 OgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJsb2NrOyBhbmRsICUxLCAlMCIKLQkJ CTogIj1tIigqX19ocCg0LCBhZGRyKSkKLQkJCTogImlyIiAoKHVuc2lnbmVkIGludCl2YWwpCi0J CQk6ICJtZW1vcnkiKTsKLQkJcmV0dXJuOwotCX0KLSNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0g NjQpCi0JY2FzZSA4OgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJsb2NrOyBhbmRx ICUxLCAlMCIKLQkJCTogIj1tIigqX19ocCg4LCBhZGRyKSkKLQkJCTogImVyIiAoKHVuc2lnbmVk IGxvbmcpdmFsKQotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQl9Ci0J LyoKLQkgKiBnZW5lcmF0ZSBhbiBpbGxlZ2FsIGluc3RydWN0aW9uLiBDYW5ub3QgY2F0Y2ggdGhp cyB3aXRoCi0JICogbGlua2VyIHRyaWNrcyB3aGVuIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVk LgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJ1ZDIiKTsKLQlyZXR1cm47Ci19Ci0KLSNk ZWZpbmUgX3VhdG9taWNfYW5kKGFkZHIsIHYpCQkJCQkJICAgXAotCShfX3VhdG9taWNfYW5kKChh ZGRyKSwgY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24odiksIHNpemVvZigqKGFkZHIpKSkpCi0KLS8q IHVhdG9taWNfb3IgKi8KLQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5s aW5lKSkKLXZvaWQgX191YXRvbWljX29yKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBp bnQgbGVuKQotewotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCXsKLQkJX19hc21fXyBfX3Zv bGF0aWxlX18oCi0JCSJsb2NrOyBvcmIgJTEsICUwIgotCQkJOiAiPW0iKCpfX2hwKDEsIGFkZHIp KQotCQkJOiAiaXEiICgodW5zaWduZWQgY2hhcil2YWwpCi0JCQk6ICJtZW1vcnkiKTsKLQkJcmV0 dXJuOwotCX0KLQljYXNlIDI6Ci0JewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxvY2s7 IG9ydyAlMSwgJTAiCi0JCQk6ICI9bSIoKl9faHAoMiwgYWRkcikpCi0JCQk6ICJpciIgKCh1bnNp Z25lZCBzaG9ydCl2YWwpCi0JCQk6ICJtZW1vcnkiKTsKLQkJcmV0dXJuOwotCX0KLQljYXNlIDQ6 Ci0JewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxvY2s7IG9ybCAlMSwgJTAiCi0JCQk6 ICI9bSIoKl9faHAoNCwgYWRkcikpCi0JCQk6ICJpciIgKCh1bnNpZ25lZCBpbnQpdmFsKQotCQkJ OiAibWVtb3J5Iik7Ci0JCXJldHVybjsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0 KQotCWNhc2UgODoKLQl7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibG9jazsgb3JxICUx LCAlMCIKLQkJCTogIj1tIigqX19ocCg4LCBhZGRyKSkKLQkJCTogImVyIiAoKHVuc2lnbmVkIGxv bmcpdmFsKQotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQl9Ci0JLyoK LQkgKiBnZW5lcmF0ZSBhbiBpbGxlZ2FsIGluc3RydWN0aW9uLiBDYW5ub3QgY2F0Y2ggdGhpcyB3 aXRoCi0JICogbGlua2VyIHRyaWNrcyB3aGVuIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLgot CSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJ1ZDIiKTsKLQlyZXR1cm47Ci19Ci0KLSNkZWZp bmUgX3VhdG9taWNfb3IoYWRkciwgdikJCQkJCQkgICBcCi0JKF9fdWF0b21pY19vcigoYWRkciks IGNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKHYpLCBzaXplb2YoKihhZGRyKSkpKQotCi0vKiB1YXRv bWljX2FkZCAqLwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUp KQotdm9pZCBfX3VhdG9taWNfYWRkKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQg bGVuKQotewotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCXsKLQkJX19hc21fXyBfX3ZvbGF0 aWxlX18oCi0JCSJsb2NrOyBhZGRiICUxLCAlMCIKLQkJCTogIj1tIigqX19ocCgxLCBhZGRyKSkK LQkJCTogImlxIiAoKHVuc2lnbmVkIGNoYXIpdmFsKQotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVy bjsKLQl9Ci0JY2FzZSAyOgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJsb2NrOyBh ZGR3ICUxLCAlMCIKLQkJCTogIj1tIigqX19ocCgyLCBhZGRyKSkKLQkJCTogImlyIiAoKHVuc2ln bmVkIHNob3J0KXZhbCkKLQkJCTogIm1lbW9yeSIpOwotCQlyZXR1cm47Ci0JfQotCWNhc2UgNDoK LQl7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibG9jazsgYWRkbCAlMSwgJTAiCi0JCQk6 ICI9bSIoKl9faHAoNCwgYWRkcikpCi0JCQk6ICJpciIgKCh1bnNpZ25lZCBpbnQpdmFsKQotCQkJ OiAibWVtb3J5Iik7Ci0JCXJldHVybjsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0 KQotCWNhc2UgODoKLQl7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibG9jazsgYWRkcSAl MSwgJTAiCi0JCQk6ICI9bSIoKl9faHAoOCwgYWRkcikpCi0JCQk6ICJlciIgKCh1bnNpZ25lZCBs b25nKXZhbCkKLQkJCTogIm1lbW9yeSIpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JfQotCS8q Ci0JICogZ2VuZXJhdGUgYW4gaWxsZWdhbCBpbnN0cnVjdGlvbi4gQ2Fubm90IGNhdGNoIHRoaXMg d2l0aAotCSAqIGxpbmtlciB0cmlja3Mgd2hlbiBvcHRpbWl6YXRpb25zIGFyZSBkaXNhYmxlZC4K LQkgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygidWQyIik7Ci0JcmV0dXJuOwotfQotCi0jZGVm aW5lIF91YXRvbWljX2FkZChhZGRyLCB2KQkJCQkJCSAgIFwKLQkoX191YXRvbWljX2FkZCgoYWRk ciksIGNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKHYpLCBzaXplb2YoKihhZGRyKSkpKQotCi0KLS8q IHVhdG9taWNfaW5jICovCi0KLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lu bGluZSkpCi12b2lkIF9fdWF0b21pY19pbmModm9pZCAqYWRkciwgaW50IGxlbikKLXsKLQlzd2l0 Y2ggKGxlbikgewotCWNhc2UgMToKLQl7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibG9j azsgaW5jYiAlMCIKLQkJCTogIj1tIigqX19ocCgxLCBhZGRyKSkKLQkJCToKLQkJCTogIm1lbW9y eSIpOwotCQlyZXR1cm47Ci0JfQotCWNhc2UgMjoKLQl7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9f KAotCQkibG9jazsgaW5jdyAlMCIKLQkJCTogIj1tIigqX19ocCgyLCBhZGRyKSkKLQkJCToKLQkJ CTogIm1lbW9yeSIpOwotCQlyZXR1cm47Ci0JfQotCWNhc2UgNDoKLQl7Ci0JCV9fYXNtX18gX192 b2xhdGlsZV9fKAotCQkibG9jazsgaW5jbCAlMCIKLQkJCTogIj1tIigqX19ocCg0LCBhZGRyKSkK LQkJCToKLQkJCTogIm1lbW9yeSIpOwotCQlyZXR1cm47Ci0JfQotI2lmIChDQUFfQklUU19QRVJf TE9ORyA9PSA2NCkKLQljYXNlIDg6Ci0JewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxv Y2s7IGluY3EgJTAiCi0JCQk6ICI9bSIoKl9faHAoOCwgYWRkcikpCi0JCQk6Ci0JCQk6ICJtZW1v cnkiKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCX0KLQkvKiBnZW5lcmF0ZSBhbiBpbGxlZ2Fs IGluc3RydWN0aW9uLiBDYW5ub3QgY2F0Y2ggdGhpcyB3aXRoIGxpbmtlciB0cmlja3MKLQkgKiB3 aGVuIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLiAqLwotCV9fYXNtX18gX192b2xhdGlsZV9f KCJ1ZDIiKTsKLQlyZXR1cm47Ci19Ci0KLSNkZWZpbmUgX3VhdG9taWNfaW5jKGFkZHIpCShfX3Vh dG9taWNfaW5jKChhZGRyKSwgc2l6ZW9mKCooYWRkcikpKSkKLQotLyogdWF0b21pY19kZWMgKi8K LQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKLXZvaWQgX191 YXRvbWljX2RlYyh2b2lkICphZGRyLCBpbnQgbGVuKQotewotCXN3aXRjaCAobGVuKSB7Ci0JY2Fz ZSAxOgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJsb2NrOyBkZWNiICUwIgotCQkJ OiAiPW0iKCpfX2hwKDEsIGFkZHIpKQotCQkJOgotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybjsK LQl9Ci0JY2FzZSAyOgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJsb2NrOyBkZWN3 ICUwIgotCQkJOiAiPW0iKCpfX2hwKDIsIGFkZHIpKQotCQkJOgotCQkJOiAibWVtb3J5Iik7Ci0J CXJldHVybjsKLQl9Ci0JY2FzZSA0OgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJs b2NrOyBkZWNsICUwIgotCQkJOiAiPW0iKCpfX2hwKDQsIGFkZHIpKQotCQkJOgotCQkJOiAibWVt b3J5Iik7Ci0JCXJldHVybjsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0KQotCWNh c2UgODoKLQl7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibG9jazsgZGVjcSAlMCIKLQkJ CTogIj1tIigqX19ocCg4LCBhZGRyKSkKLQkJCToKLQkJCTogIm1lbW9yeSIpOwotCQlyZXR1cm47 Ci0JfQotI2VuZGlmCi0JfQotCS8qCi0JICogZ2VuZXJhdGUgYW4gaWxsZWdhbCBpbnN0cnVjdGlv bi4gQ2Fubm90IGNhdGNoIHRoaXMgd2l0aAotCSAqIGxpbmtlciB0cmlja3Mgd2hlbiBvcHRpbWl6 YXRpb25zIGFyZSBkaXNhYmxlZC4KLQkgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygidWQyIik7 Ci0JcmV0dXJuOwotfQotCi0jZGVmaW5lIF91YXRvbWljX2RlYyhhZGRyKQkoX191YXRvbWljX2Rl YygoYWRkciksIHNpemVvZigqKGFkZHIpKSkpCi0KLSNpZmRlZiBVUkNVX0FSQ0hfWDg2X05PX0NB UwotCi0vKiBGb3IgYmFja3dhcmRzIGNvbXBhdCAqLwotI2RlZmluZSBDT05GSUdfUkNVX0NPTVBB VF9BUkNIIDEKLQotZXh0ZXJuIGludCBfX3JjdV9jYXNfYXZhaWw7Ci1leHRlcm4gaW50IF9fcmN1 X2Nhc19pbml0KHZvaWQpOwotCi0jZGVmaW5lIFVBVE9NSUNfQ09NUEFUKGluc24pCQkJCQkJCVwK LQkoKGNhYV9saWtlbHkoX19yY3VfY2FzX2F2YWlsID4gMCkpCQkJCQkJXAotCT8gKF91YXRvbWlj XyMjaW5zbikJCQkJCQkJXAotCQk6ICgoY2FhX3VubGlrZWx5KF9fcmN1X2Nhc19hdmFpbCA8IDAp CQkJCVwKLQkJCT8gKChfX3JjdV9jYXNfaW5pdCgpID4gMCkJCQkJXAotCQkJCT8gKF91YXRvbWlj XyMjaW5zbikJCQkJXAotCQkJCTogKGNvbXBhdF91YXRvbWljXyMjaW5zbikpCQkJXAotCQkJOiAo Y29tcGF0X3VhdG9taWNfIyNpbnNuKSkpKQotCi0vKgotICogV2UgbGVhdmUgdGhlIHJldHVybiB2 YWx1ZSBzbyB3ZSBkb24ndCBicmVhayB0aGUgQUJJLCBidXQgcmVtb3ZlIHRoZQotICogcmV0dXJu IHZhbHVlIGZyb20gdGhlIEFQSS4KLSAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX2NvbXBhdF91 YXRvbWljX3NldCh2b2lkICphZGRyLAotCQkJCQkgdW5zaWduZWQgbG9uZyBfbmV3LCBpbnQgbGVu KTsKLSNkZWZpbmUgY29tcGF0X3VhdG9taWNfc2V0KGFkZHIsIF9uZXcpCQkJCSAgICAgCSAgICAg ICBcCi0JKCh2b2lkKSBfY29tcGF0X3VhdG9taWNfc2V0KChhZGRyKSwJCQkJICAgICAgIFwKLQkJ CQljYWFfY2FzdF9sb25nX2tlZXBfc2lnbihfbmV3KSwJCSAgICAgICBcCi0JCQkJc2l6ZW9mKCoo YWRkcikpKSkKLQotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfY29tcGF0X3VhdG9taWNfeGNoZyh2 b2lkICphZGRyLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgX25ldywgaW50IGxlbik7Ci0jZGVmaW5l IGNvbXBhdF91YXRvbWljX3hjaGcoYWRkciwgX25ldykJCQkJCSAgICAgICBcCi0JKChfX3R5cGVv Zl9fKCooYWRkcikpKSBfY29tcGF0X3VhdG9taWNfeGNoZygoYWRkciksCQkgICAgICAgXAotCQkJ CQkJY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24oX25ldyksIFwKLQkJCQkJCXNpemVvZigqKGFkZHIp KSkpCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIF9jb21wYXRfdWF0b21pY19jbXB4Y2hnKHZvaWQg KmFkZHIsIHVuc2lnbmVkIGxvbmcgb2xkLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgX25ldywg aW50IGxlbik7Ci0jZGVmaW5lIGNvbXBhdF91YXRvbWljX2NtcHhjaGcoYWRkciwgb2xkLCBfbmV3 KQkJCQkgICAgICAgXAotCSgoX190eXBlb2ZfXygqKGFkZHIpKSkgX2NvbXBhdF91YXRvbWljX2Nt cHhjaGcoKGFkZHIpLAkJICAgICAgIFwKLQkJCQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKG9s ZCksICBcCi0JCQkJCQljYWFfY2FzdF9sb25nX2tlZXBfc2lnbihfbmV3KSwgXAotCQkJCQkJc2l6 ZW9mKCooYWRkcikpKSkKLQotZXh0ZXJuIHZvaWQgX2NvbXBhdF91YXRvbWljX2FuZCh2b2lkICph ZGRyLCB1bnNpZ25lZCBsb25nIF9uZXcsIGludCBsZW4pOwotI2RlZmluZSBjb21wYXRfdWF0b21p Y19hbmQoYWRkciwgdikJCQkJICAgICAgIFwKLQkoX2NvbXBhdF91YXRvbWljX2FuZCgoYWRkciks CQkJCSAgICAgICBcCi0JCQljYWFfY2FzdF9sb25nX2tlZXBfc2lnbih2KSwJCSAgICAgICBcCi0J CQlzaXplb2YoKihhZGRyKSkpKQotCi1leHRlcm4gdm9pZCBfY29tcGF0X3VhdG9taWNfb3Iodm9p ZCAqYWRkciwgdW5zaWduZWQgbG9uZyBfbmV3LCBpbnQgbGVuKTsKLSNkZWZpbmUgY29tcGF0X3Vh dG9taWNfb3IoYWRkciwgdikJCQkJICAgICAgIFwKLQkoX2NvbXBhdF91YXRvbWljX29yKChhZGRy KSwJCQkJICAgICAgIFwKLQkJCSAgY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24odiksCQkgICAgICAg XAotCQkJICBzaXplb2YoKihhZGRyKSkpKQotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfY29tcGF0 X3VhdG9taWNfYWRkX3JldHVybih2b2lkICphZGRyLAotCQkJCQkJdW5zaWduZWQgbG9uZyBfbmV3 LCBpbnQgbGVuKTsKLSNkZWZpbmUgY29tcGF0X3VhdG9taWNfYWRkX3JldHVybihhZGRyLCB2KQkJ CSAgICAgICAgICAgIFwKLQkoKF9fdHlwZW9mX18oKihhZGRyKSkpIF9jb21wYXRfdWF0b21pY19h ZGRfcmV0dXJuKChhZGRyKSwgICAgIAkgICAgXAotCQkJCQkJY2FhX2Nhc3RfbG9uZ19rZWVwX3Np Z24odiksIFwKLQkJCQkJCXNpemVvZigqKGFkZHIpKSkpCi0KLSNkZWZpbmUgY29tcGF0X3VhdG9t aWNfYWRkKGFkZHIsIHYpCQkJCQkgICAgICAgXAotCQkoKHZvaWQpY29tcGF0X3VhdG9taWNfYWRk X3JldHVybigoYWRkciksICh2KSkpCi0jZGVmaW5lIGNvbXBhdF91YXRvbWljX2luYyhhZGRyKQkJ CQkJICAgICAgIFwKLQkJKGNvbXBhdF91YXRvbWljX2FkZCgoYWRkciksIDEpKQotI2RlZmluZSBj b21wYXRfdWF0b21pY19kZWMoYWRkcikJCQkJCSAgICAgICBcCi0JCShjb21wYXRfdWF0b21pY19h ZGQoKGFkZHIpLCAtMSkpCi0KLSNlbHNlCi0jZGVmaW5lIFVBVE9NSUNfQ09NUEFUKGluc24pCShf dWF0b21pY18jI2luc24pCi0jZW5kaWYKLQotLyogUmVhZCBpcyBhdG9taWMgZXZlbiBpbiBjb21w YXQgbW9kZSAqLwotI2RlZmluZSB1YXRvbWljX3NldChhZGRyLCB2KQkJCVwKLQkJVUFUT01JQ19D T01QQVQoc2V0KGFkZHIsIHYpKQotCi0jZGVmaW5lIHVhdG9taWNfY21weGNoZyhhZGRyLCBvbGQs IF9uZXcpCVwKLQkJVUFUT01JQ19DT01QQVQoY21weGNoZyhhZGRyLCBvbGQsIF9uZXcpKQotI2Rl ZmluZSB1YXRvbWljX3hjaGcoYWRkciwgdikJCQlcCi0JCVVBVE9NSUNfQ09NUEFUKHhjaGcoYWRk ciwgdikpCi0KLSNkZWZpbmUgdWF0b21pY19hbmQoYWRkciwgdikJCVwKLQkJVUFUT01JQ19DT01Q QVQoYW5kKGFkZHIsIHYpKQotI2RlZmluZSBjbW1fc21wX21iX19iZWZvcmVfdWF0b21pY19hbmQo KQljbW1fYmFycmllcigpCi0jZGVmaW5lIGNtbV9zbXBfbWJfX2FmdGVyX3VhdG9taWNfYW5kKCkJ CWNtbV9iYXJyaWVyKCkKLQotI2RlZmluZSB1YXRvbWljX29yKGFkZHIsIHYpCQlcCi0JCVVBVE9N SUNfQ09NUEFUKG9yKGFkZHIsIHYpKQotI2RlZmluZSBjbW1fc21wX21iX19iZWZvcmVfdWF0b21p Y19vcigpCQljbW1fYmFycmllcigpCi0jZGVmaW5lIGNtbV9zbXBfbWJfX2FmdGVyX3VhdG9taWNf b3IoKQkJY21tX2JhcnJpZXIoKQotCi0jZGVmaW5lIHVhdG9taWNfYWRkX3JldHVybihhZGRyLCB2 KQkJXAotCQlVQVRPTUlDX0NPTVBBVChhZGRfcmV0dXJuKGFkZHIsIHYpKQotCi0jZGVmaW5lIHVh dG9taWNfYWRkKGFkZHIsIHYpCVVBVE9NSUNfQ09NUEFUKGFkZChhZGRyLCB2KSkKLSNkZWZpbmUg Y21tX3NtcF9tYl9fYmVmb3JlX3VhdG9taWNfYWRkKCkJY21tX2JhcnJpZXIoKQotI2RlZmluZSBj bW1fc21wX21iX19hZnRlcl91YXRvbWljX2FkZCgpCQljbW1fYmFycmllcigpCi0KLSNkZWZpbmUg dWF0b21pY19pbmMoYWRkcikJVUFUT01JQ19DT01QQVQoaW5jKGFkZHIpKQotI2RlZmluZSBjbW1f c21wX21iX19iZWZvcmVfdWF0b21pY19pbmMoKQljbW1fYmFycmllcigpCi0jZGVmaW5lIGNtbV9z bXBfbWJfX2FmdGVyX3VhdG9taWNfaW5jKCkJCWNtbV9iYXJyaWVyKCkKLQotI2RlZmluZSB1YXRv bWljX2RlYyhhZGRyKQlVQVRPTUlDX0NPTVBBVChkZWMoYWRkcikpCi0jZGVmaW5lIGNtbV9zbXBf bWJfX2JlZm9yZV91YXRvbWljX2RlYygpCWNtbV9iYXJyaWVyKCkKLSNkZWZpbmUgY21tX3NtcF9t Yl9fYWZ0ZXJfdWF0b21pY19kZWMoKQkJY21tX2JhcnJpZXIoKQotCi0jaWZkZWYgX19jcGx1c3Bs dXMKLX0KLSNlbmRpZgotCi0jaW5jbHVkZSA8dXJjdS91YXRvbWljL2dlbmVyaWMuaD4KLQotI2Vu ZGlmIC8qIF9VUkNVX0FSQ0hfVUFUT01JQ19YODZfSCAqLwotLSAKMi4zOS4yCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsdHRuZy1kZXYgbWFpbGluZyBs aXN0Cmx0dG5nLWRldkBsaXN0cy5sdHRuZy5vcmcKaHR0cHM6Ly9saXN0cy5sdHRuZy5vcmcvY2dp LWJpbi9tYWlsbWFuL2xpc3RpbmZvL2x0dG5nLWRldgo=