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 1B2B1C6FD1D for ; Tue, 21 Mar 2023 13:31:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lists.lttng.org; s=default; t=1679405492; bh=rQAUhFQ922sjD78AWyAm36FOEsor2krq1fVDrWiM4NM=; 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=BABZl58nL5uj0cw/c+j/OhlIvWNYi6C6oYwUUVKIs26M3Wu+ZsGTaO6ZZ+C43znU8 3fbhEyLVGhfm+5flEbN074X1qcTj/6mXbyyhdEdKBq6jsJrR25yZQHCAIbmzDdWHGT +ozgltUYS+na5gvlnQ3CUhpHecX+YbNzsbpynUiX6Rr1cxXDy4BaL1gbO5HAzg+VcD xPiB2MUnPIbXp8ZOrHeKWsXwSkQuUyXEvolwQWjbOLJa/NYktyLiAOeT+aIawBAXL1 c7iGarRCnsEZIanHKHHjenwyMmmfvR5beG2XJQUtnMmNSkihnDan8YIENT0/F2DNVG pAVQRIyi3mewg== Received: from lists-lttng01.efficios.com (localhost [IPv6:::1]) by lists.lttng.org (Postfix) with ESMTP id 4PgsvS3GJYz2HGv; Tue, 21 Mar 2023 09:31:32 -0400 (EDT) Received: from wout1-smtp.messagingengine.com (wout1-smtp.messagingengine.com [64.147.123.24]) by lists.lttng.org (Postfix) with ESMTPS id 4PgsvP6QMFz2Gn6 for ; Tue, 21 Mar 2023 09:31:29 -0400 (EDT) Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.west.internal (Postfix) with ESMTP id B370732002FB; Tue, 21 Mar 2023 09:31:22 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Tue, 21 Mar 2023 09:31:22 -0400 X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrvdegtddghedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvfevufffkffojghfgggtgfesth ekredtredtjeenucfhrhhomhepqfhnughrvghjucfuuhhrupcuoehonhgurhgvjhesshhu rhihrdhorhhgqeenucggtffrrghtthgvrhhnpedtieeggeehteetteetgeevueeuieefve dtgfejjeefieevffefvddufeduvefgueenucffohhmrghinhepghhnuhdrohhrghenucev lhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehonhgurhgvjh esshhurhihrdhorhhg X-ME-Proxy: Feedback-ID: ida81469e:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 21 Mar 2023 09:31:21 -0400 (EDT) To: lttng-dev@lists.lttng.org Date: Tue, 21 Mar 2023 14:30:57 +0100 Message-Id: <20230321133102.1054238-3-ondrej@sury.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230321133102.1054238-1-ondrej@sury.org> References: <20230321133102.1054238-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 dG9taWMuaAppbmRleCAyZmI1ZmQ0Li4wMzI3ODEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VyY3Uv 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 bWljX2V4Y2hhbmdlX24oKGFkZHIpLCAodiksIF9fQVRPTUlDX1NFUV9DU1QpCisKKyNkZWZpbmUg dWF0b21pY19jbXB4Y2hnKGFkZHIsIG9sZCwgbmV3KSBcCisJKHsJCQkJCQkJCQlcCisJCV9fdHlw ZW9mX18oKihhZGRyKSkgX19vbGQgPSBvbGQ7CQkJCVwKKwkJX19hdG9taWNfY29tcGFyZV9leGNo YW5nZV9uKGFkZHIsICZfX29sZCwgbmV3LCAwLAkJXAorCQkJCQkgICAgX19BVE9NSUNfU0VRX0NT VCwgX19BVE9NSUNfU0VRX0NTVCk7CQlcCisJCV9fb2xkOwkJCQkJCQkJXAorCX0pCisKKyNkZWZp bmUgdWF0b21pY19hZGRfcmV0dXJuKGFkZHIsIHYpIFwKKwlfX2F0b21pY19hZGRfZmV0Y2goKGFk ZHIpLCAodiksIF9fQVRPTUlDX1NFUV9DU1QpCisKKyNkZWZpbmUgdWF0b21pY19hZGQoYWRkciwg dikgXAorCSh2b2lkKV9fYXRvbWljX2FkZF9mZXRjaCgoYWRkciksICh2KSwgX19BVE9NSUNfUkVM QVhFRCkKKworI2RlZmluZSB1YXRvbWljX3N1Yl9yZXR1cm4oYWRkciwgdikgXAorCV9fYXRvbWlj X3N1Yl9mZXRjaCgoYWRkciksICh2KSwgX19BVE9NSUNfU0VRX0NTVCkKKworI2RlZmluZSB1YXRv bWljX3N1YihhZGRyLCB2KSBcCisJKHZvaWQpX19hdG9taWNfc3ViX2ZldGNoKChhZGRyKSwgKHYp LCBfX0FUT01JQ19SRUxBWEVEKQorCisjZGVmaW5lIHVhdG9taWNfYW5kKGFkZHIsIG1hc2spIFwK Kwkodm9pZClfX2F0b21pY19hbmRfZmV0Y2goKGFkZHIpLCAobWFzayksIF9fQVRPTUlDX1JFTEFY RUQpCisKKyNkZWZpbmUgdWF0b21pY19vcihhZGRyLCBtYXNrKQkJCQkJCVwKKwkodm9pZClfX2F0 b21pY19vcl9mZXRjaCgoYWRkciksIChtYXNrKSwgX19BVE9NSUNfUkVMQVhFRCkKKworI2RlZmlu ZSB1YXRvbWljX2luYyhhZGRyKSAodm9pZClfX2F0b21pY19hZGRfZmV0Y2goKGFkZHIpLCAxLCBf X0FUT01JQ19SRUxBWEVEKQorI2RlZmluZSB1YXRvbWljX2RlYyhhZGRyKSAodm9pZClfX2F0b21p Y19zdWJfZmV0Y2goKGFkZHIpLCAxLCBfX0FUT01JQ19SRUxBWEVEKQorCisjZGVmaW5lIGNtbV9z bXBfbWJfX2JlZm9yZV91YXRvbWljX2FuZCgpCV9fYXRvbWljX3RocmVhZF9mZW5jZShfX0FUT01J Q19TRVFfQ1NUKQorI2RlZmluZSBjbW1fc21wX21iX19hZnRlcl91YXRvbWljX2FuZCgpCQlfX2F0 b21pY190aHJlYWRfZmVuY2UoX19BVE9NSUNfU0VRX0NTVCkKKyNkZWZpbmUgY21tX3NtcF9tYl9f YmVmb3JlX3VhdG9taWNfb3IoKQkJX19hdG9taWNfdGhyZWFkX2ZlbmNlKF9fQVRPTUlDX1NFUV9D U1QpCisjZGVmaW5lIGNtbV9zbXBfbWJfX2FmdGVyX3VhdG9taWNfb3IoKQkJX19hdG9taWNfdGhy ZWFkX2ZlbmNlKF9fQVRPTUlDX1NFUV9DU1QpCisjZGVmaW5lIGNtbV9zbXBfbWJfX2JlZm9yZV91 YXRvbWljX2FkZCgpCV9fYXRvbWljX3RocmVhZF9mZW5jZShfX0FUT01JQ19TRVFfQ1NUKQorI2Rl ZmluZSBjbW1fc21wX21iX19hZnRlcl91YXRvbWljX2FkZCgpCQlfX2F0b21pY190aHJlYWRfZmVu Y2UoX19BVE9NSUNfU0VRX0NTVCkKKyNkZWZpbmUgY21tX3NtcF9tYl9fYmVmb3JlX3VhdG9taWNf c3ViKCkJY21tX3NtcF9tYl9fYmVmb3JlX3VhdG9taWNfYWRkKCkKKyNkZWZpbmUgY21tX3NtcF9t Yl9fYWZ0ZXJfdWF0b21pY19zdWIoKQkJY21tX3NtcF9tYl9fYWZ0ZXJfdWF0b21pY19hZGQoKQor I2RlZmluZSBjbW1fc21wX21iX19iZWZvcmVfdWF0b21pY19pbmMoKQljbW1fc21wX21iX19iZWZv cmVfdWF0b21pY19hZGQoKQorI2RlZmluZSBjbW1fc21wX21iX19hZnRlcl91YXRvbWljX2luYygp CQljbW1fc21wX21iX19hZnRlcl91YXRvbWljX2FkZCgpCisjZGVmaW5lIGNtbV9zbXBfbWJfX2Jl Zm9yZV91YXRvbWljX2RlYygpCWNtbV9zbXBfbWJfX2JlZm9yZV91YXRvbWljX2FkZCgpCisjZGVm aW5lIGNtbV9zbXBfbWJfX2FmdGVyX3VhdG9taWNfZGVjKCkJCWNtbV9zbXBfbWJfX2FmdGVyX3Vh dG9taWNfYWRkKCkKKworI2RlZmluZSBjbW1fc21wX21iKCkJCQkJY21tX21iKCkKIAogI2VuZGlm IC8qIF9VUkNVX1VBVE9NSUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91cmN1L3VhdG9taWMv YWFyY2g2NC5oIGIvaW5jbHVkZS91cmN1L3VhdG9taWMvYWFyY2g2NC5oCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCA1ODY5OGNlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvdXJjdS91YXRv bWljL2FhcmNoNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLSNpZm5kZWYgX1VS Q1VfQVJDSF9VQVRPTUlDX0FBUkNINjRfSAotI2RlZmluZSBfVVJDVV9BUkNIX1VBVE9NSUNfQUFS Q0g2NF9ICi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTEtMTk5NCBieSBYZXJveCBDb3Jwb3Jh dGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBi eSBTaWxpY29uIEdyYXBoaWNzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo YykgMTk5OS0yMDA0IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCi0g KiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxNSBNYXRoaWV1IERlc25veWVycwotICogQ29weXJpZ2h0 IChjKSAyMDEwICAgICAgUGF1bCBFLiBNY0tlbm5leSwgSUJNIENvcnBvcmF0aW9uCi0gKgkJCSAg IChBZGFwdGVkIGZyb20gdWF0b21pY19hcmNoX3BwYy5oKQotICoKLSAqIFRISVMgTUFURVJJQUwg SVMgUFJPVklERUQgQVMgSVMsIFdJVEggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWSBFWFBSRVNTRUQK LSAqIE9SIElNUExJRUQuICBBTlkgVVNFIElTIEFUIFlPVVIgT1dOIFJJU0suCi0gKgotICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2Ugb3IgY29weSB0aGlzIHByb2dyYW0KLSAq IGZvciBhbnkgcHVycG9zZSwgIHByb3ZpZGVkIHRoZSBhYm92ZSBub3RpY2VzIGFyZSByZXRhaW5l ZCBvbiBhbGwgY29waWVzLgotICogUGVybWlzc2lvbiB0byBtb2RpZnkgdGhlIGNvZGUgYW5kIHRv IGRpc3RyaWJ1dGUgbW9kaWZpZWQgY29kZSBpcyBncmFudGVkLAotICogcHJvdmlkZWQgdGhlIGFi b3ZlIG5vdGljZXMgYXJlIHJldGFpbmVkLCBhbmQgYSBub3RpY2UgdGhhdCB0aGUgY29kZSB3YXMK LSAqIG1vZGlmaWVkIGlzIGluY2x1ZGVkIHdpdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Uu Ci0gKgotICogQ29kZSBpbnNwaXJlZCBmcm9tIGxpYnVhdG9taWNfb3BzLTEuMiwgaW5oZXJpdGVk IGluIHBhcnQgZnJvbSB0aGUKLSAqIEJvZWhtLURlbWVycy1XZWlzZXIgY29uc2VydmF0aXZlIGdh cmJhZ2UgY29sbGVjdG9yLgotICovCi0KLSNpbmNsdWRlIDx1cmN1L2NvbXBpbGVyLmg+Ci0jaW5j bHVkZSA8dXJjdS9zeXN0ZW0uaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsK LSNlbmRpZgotCi0jZGVmaW5lIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCi0jZGVmaW5lIFVBVE9N SUNfSEFTX0FUT01JQ19TSE9SVAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0j aW5jbHVkZSA8dXJjdS91YXRvbWljL2dlbmVyaWMuaD4KLQotI2VuZGlmIC8qIF9VUkNVX0FSQ0hf VUFUT01JQ19BQVJDSDY0X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXJjdS91YXRvbWljL2Fs cGhhLmggYi9pbmNsdWRlL3VyY3UvdWF0b21pYy9hbHBoYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA1ZGNlYjkwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvdXJjdS91YXRvbWljL2Fs cGhhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jaWZuZGVmIF9VUkNVX1VBVE9N SUNfQVJDSF9BTFBIQV9ICi0jZGVmaW5lIF9VUkNVX1VBVE9NSUNfQVJDSF9BTFBIQV9ICi0KLS8q Ci0gKiBBdG9taWMgZXhjaGFuZ2Ugb3BlcmF0aW9ucyBmb3IgdGhlIEFscGhhIGFyY2hpdGVjdHVy ZS4gTGV0IEdDQyBkbyBpdC4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgUGFvbG8gQm9uemlu aSA8cGJvbnppbmlAcmVkaGF0LmNvbT4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwgdG8KLSAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCi0gKiByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQv b3IKLSAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0g KiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAq Ci0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHVyY3Uv Y29tcGlsZXIuaD4KLSNpbmNsdWRlIDx1cmN1L3N5c3RlbS5oPgotI2luY2x1ZGUgPHVyY3UvdWF0 b21pYy9nZW5lcmljLmg+Ci0KLSNlbmRpZiAvKiBfVVJDVV9VQVRPTUlDX0FSQ0hfQUxQSEFfSCAq LwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91cmN1L3VhdG9taWMvYXJtLmggYi9pbmNsdWRlL3VyY3Uv dWF0b21pYy9hcm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVmMzJmMy4uMDAw MDAwMAotLS0gYS9pbmNsdWRlL3VyY3UvdWF0b21pYy9hcm0uaAorKysgL2Rldi9udWxsCkBAIC0x LDU3ICswLDAgQEAKLSNpZm5kZWYgX1VSQ1VfQVJDSF9VQVRPTUlDX0FSTV9ICi0jZGVmaW5lIF9V UkNVX0FSQ0hfVUFUT01JQ19BUk1fSAotCi0vKgotICogQXRvbWljcyBmb3IgQVJNLiAgVGhpcyBh cHByb2FjaCBpcyB1c2FibGUgb24ga2VybmVscyBiYWNrIHRvIDIuNi4xNS4KLSAqCi0gKiBDb3B5 cmlnaHQgKGMpIDE5OTEtMTk5NCBieSBYZXJveCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBTaWxpY29uIEdyYXBoaWNzLiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA0IEhld2xldHQt UGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkg ICAgICBNYXRoaWV1IERlc25veWVycwotICogQ29weXJpZ2h0IChjKSAyMDEwICAgICAgUGF1bCBF LiBNY0tlbm5leSwgSUJNIENvcnBvcmF0aW9uCi0gKgkJCSAgIChBZGFwdGVkIGZyb20gdWF0b21p Y19hcmNoX3BwYy5oKQotICoKLSAqIFRISVMgTUFURVJJQUwgSVMgUFJPVklERUQgQVMgSVMsIFdJ VEggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWSBFWFBSRVNTRUQKLSAqIE9SIElNUExJRUQuICBBTlkg VVNFIElTIEFUIFlPVVIgT1dOIFJJU0suCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCB0byB1c2Ugb3IgY29weSB0aGlzIHByb2dyYW0KLSAqIGZvciBhbnkgcHVycG9zZSwgIHBy b3ZpZGVkIHRoZSBhYm92ZSBub3RpY2VzIGFyZSByZXRhaW5lZCBvbiBhbGwgY29waWVzLgotICog UGVybWlzc2lvbiB0byBtb2RpZnkgdGhlIGNvZGUgYW5kIHRvIGRpc3RyaWJ1dGUgbW9kaWZpZWQg Y29kZSBpcyBncmFudGVkLAotICogcHJvdmlkZWQgdGhlIGFib3ZlIG5vdGljZXMgYXJlIHJldGFp bmVkLCBhbmQgYSBub3RpY2UgdGhhdCB0aGUgY29kZSB3YXMKLSAqIG1vZGlmaWVkIGlzIGluY2x1 ZGVkIHdpdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UuCi0gKgotICogQ29kZSBpbnNwaXJl ZCBmcm9tIGxpYnVhdG9taWNfb3BzLTEuMiwgaW5oZXJpdGVkIGluIHBhcnQgZnJvbSB0aGUKLSAq IEJvZWhtLURlbWVycy1XZWlzZXIgY29uc2VydmF0aXZlIGdhcmJhZ2UgY29sbGVjdG9yLgotICov Ci0KLSNpbmNsdWRlIDx1cmN1L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8dXJjdS9zeXN0ZW0uaD4K LSNpbmNsdWRlIDx1cmN1L2FyY2guaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMi IHsKLSNlbmRpZgotCi0vKiB4Y2hnICovCi0KLS8qCi0gKiBCYXNlZCBvbiBbMV0sIF9fc3luY19s b2NrX3Rlc3RfYW5kX3NldCgpIGlzIG5vdCBhIGZ1bGwgYmFycmllciwgYnV0Ci0gKiBpbnN0ZWFk IG9ubHkgYW4gYWNxdWlyZSBiYXJyaWVyLiBHaXZlbiB0aGF0IHVhdG9taWNfeGNoZygpIGFjdHMg YXMKLSAqIGJvdGggcmVsZWFzZSBhbmQgYWNxdWlyZSBiYXJyaWVycywgd2UgdGhlcmVmb3JlIG5l ZWQgdG8gaGF2ZSBvdXIgb3duCi0gKiByZWxlYXNlIGJhcnJpZXIgYmVmb3JlIHRoaXMgb3BlcmF0 aW9uLgotICoKLSAqIFsxXSBodHRwczovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjLTQuMS4w L2djYy9BdG9taWMtQnVpbHRpbnMuaHRtbAotICovCi0jZGVmaW5lIHVhdG9taWNfeGNoZyhhZGRy LCB2KQkJCQlcCi0JKHsJCQkJCQlcCi0JCWNtbV9zbXBfbWIoKTsJCQkJXAotCQlfX3N5bmNfbG9j a190ZXN0X2FuZF9zZXQoYWRkciwgdik7CVwKLQl9KQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0K LSNlbmRpZgotCi0jaW5jbHVkZSA8dXJjdS91YXRvbWljL2dlbmVyaWMuaD4KLQotI2VuZGlmIC8q IF9VUkNVX0FSQ0hfVUFUT01JQ19BUk1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91cmN1L3Vh dG9taWMvZ2NjLmggYi9pbmNsdWRlL3VyY3UvdWF0b21pYy9nY2MuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNDM4ZTAzOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3VyY3UvdWF0b21p Yy9nY2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLSNpZm5kZWYgX1VSQ1VfQVJD SF9VQVRPTUlDX0dDQ19ICi0jZGVmaW5lIF9VUkNVX0FSQ0hfVUFUT01JQ19HQ0NfSAotCi0vKgot ICogQ29weXJpZ2h0IChjKSAxOTkxLTE5OTQgYnkgWGVyb3ggQ29ycG9yYXRpb24uICBBbGwgcmln aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgU2lsaWNvbiBHcmFw aGljcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNCBI ZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgotICogQ29weXJpZ2h0IChj KSAyMDA5ICAgICAgTWF0aGlldSBEZXNub3llcnMKLSAqIENvcHlyaWdodCAoYykgMjAxMCAgICAg IFBhdWwgRS4gTWNLZW5uZXksIElCTSBDb3Jwb3JhdGlvbgotICoJCQkgICAoQWRhcHRlZCBmcm9t IHVhdG9taWNfYXJjaF9wcGMuaCkKLSAqCi0gKiBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEFT IElTLCBXSVRIIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkgRVhQUkVTU0VECi0gKiBPUiBJTVBMSUVE LiAgQU5ZIFVTRSBJUyBBVCBZT1VSIE9XTiBSSVNLLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQgdG8gdXNlIG9yIGNvcHkgdGhpcyBwcm9ncmFtCi0gKiBmb3IgYW55IHB1cnBv c2UsICBwcm92aWRlZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWluZWQgb24gYWxsIGNvcGll cy4KLSAqIFBlcm1pc3Npb24gdG8gbW9kaWZ5IHRoZSBjb2RlIGFuZCB0byBkaXN0cmlidXRlIG1v ZGlmaWVkIGNvZGUgaXMgZ3JhbnRlZCwKLSAqIHByb3ZpZGVkIHRoZSBhYm92ZSBub3RpY2VzIGFy ZSByZXRhaW5lZCwgYW5kIGEgbm90aWNlIHRoYXQgdGhlIGNvZGUgd2FzCi0gKiBtb2RpZmllZCBp cyBpbmNsdWRlZCB3aXRoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLgotICoKLSAqIENvZGUg aW5zcGlyZWQgZnJvbSBsaWJ1YXRvbWljX29wcy0xLjIsIGluaGVyaXRlZCBpbiBwYXJ0IGZyb20g dGhlCi0gKiBCb2VobS1EZW1lcnMtV2Vpc2VyIGNvbnNlcnZhdGl2ZSBnYXJiYWdlIGNvbGxlY3Rv ci4KLSAqLwotCi0jaW5jbHVkZSA8dXJjdS9jb21waWxlci5oPgotI2luY2x1ZGUgPHVyY3Uvc3lz dGVtLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotLyoK LSAqIElmIHlvdXIgcGxhdGZvcm0gZG9lc24ndCBoYXZlIGEgZnVsbCBzZXQgb2YgYXRvbWljcywg eW91IHdpbGwgbmVlZAotICogYSBzZXBhcmF0ZSB1YXRvbWljX2FyY2hfKi5oIGZpbGUgZm9yIHlv dXIgYXJjaGl0ZWN0dXJlLiAgT3RoZXJ3aXNlLAotICoganVzdCByZWx5IG9uIHRoZSBkZWZpbml0 aW9ucyBpbiB1YXRvbWljL2dlbmVyaWMuaC4KLSAqLwotI2RlZmluZSBVQVRPTUlDX0hBU19BVE9N SUNfQllURQotI2RlZmluZSBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKLQotI2lmZGVmIF9fY3Bs dXNwbHVzCi19Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHVyY3UvdWF0b21pYy9nZW5lcmljLmg+Ci0K LSNlbmRpZiAvKiBfVVJDVV9BUkNIX1VBVE9NSUNfR0NDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1 ZGUvdXJjdS91YXRvbWljL2dlbmVyaWMuaCBiL2luY2x1ZGUvdXJjdS91YXRvbWljL2dlbmVyaWMu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM3NjJiMC4uMDAwMDAwMAotLS0gYS9p bmNsdWRlL3VyY3UvdWF0b21pYy9nZW5lcmljLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MTMgKzAs MCBAQAotI2lmbmRlZiBfVVJDVV9VQVRPTUlDX0dFTkVSSUNfSAotI2RlZmluZSBfVVJDVV9VQVRP TUlDX0dFTkVSSUNfSAotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkxLTE5OTQgYnkgWGVyb3gg Q29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAxOTk2 LTE5OTkgYnkgU2lsaWNvbiBHcmFwaGljcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5 cmlnaHQgKGMpIDE5OTktMjAwNCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwg TC5QLgotICogQ29weXJpZ2h0IChjKSAyMDA5ICAgICAgTWF0aGlldSBEZXNub3llcnMKLSAqIENv cHlyaWdodCAoYykgMjAxMCAgICAgIFBhb2xvIEJvbnppbmkKLSAqCi0gKiBUSElTIE1BVEVSSUFM IElTIFBST1ZJREVEIEFTIElTLCBXSVRIIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkgRVhQUkVTU0VE Ci0gKiBPUiBJTVBMSUVELiAgQU5ZIFVTRSBJUyBBVCBZT1VSIE9XTiBSSVNLLgotICoKLSAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlIG9yIGNvcHkgdGhpcyBwcm9ncmFtCi0g KiBmb3IgYW55IHB1cnBvc2UsICBwcm92aWRlZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWlu ZWQgb24gYWxsIGNvcGllcy4KLSAqIFBlcm1pc3Npb24gdG8gbW9kaWZ5IHRoZSBjb2RlIGFuZCB0 byBkaXN0cmlidXRlIG1vZGlmaWVkIGNvZGUgaXMgZ3JhbnRlZCwKLSAqIHByb3ZpZGVkIHRoZSBh Ym92ZSBub3RpY2VzIGFyZSByZXRhaW5lZCwgYW5kIGEgbm90aWNlIHRoYXQgdGhlIGNvZGUgd2Fz Ci0gKiBtb2RpZmllZCBpcyBpbmNsdWRlZCB3aXRoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl LgotICoKLSAqIENvZGUgaW5zcGlyZWQgZnJvbSBsaWJ1YXRvbWljX29wcy0xLjIsIGluaGVyaXRl ZCBpbiBwYXJ0IGZyb20gdGhlCi0gKiBCb2VobS1EZW1lcnMtV2Vpc2VyIGNvbnNlcnZhdGl2ZSBn YXJiYWdlIGNvbGxlY3Rvci4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8 dXJjdS9jb21waWxlci5oPgotI2luY2x1ZGUgPHVyY3Uvc3lzdGVtLmg+Ci0KLSNpZmRlZiBfX2Nw bHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2lmbmRlZiB1YXRvbWljX3NldAotI2Rl ZmluZSB1YXRvbWljX3NldChhZGRyLCB2KQkoKHZvaWQpIENNTV9TVE9SRV9TSEFSRUQoKihhZGRy KSwgKHYpKSkKLSNlbmRpZgotCi0jaWZuZGVmIHVhdG9taWNfcmVhZAotI2RlZmluZSB1YXRvbWlj X3JlYWQoYWRkcikJQ01NX0xPQURfU0hBUkVEKCooYWRkcikpCi0jZW5kaWYKLQotI2lmICFkZWZp bmVkIF9fT1BUSU1JWkVfXyAgfHwgZGVmaW5lZCBVQVRPTUlDX05PX0xJTktfRVJST1IKLXN0YXRp YyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSwgX19ub3JldHVybl9fKSkKLXZv aWQgX3VhdG9taWNfbGlua19lcnJvcih2b2lkKQotewotI2lmZGVmIElMTEVHQUxfSU5TVFIKLQkv KgotCSAqIGdlbmVyYXRlIGFuIGlsbGVnYWwgaW5zdHJ1Y3Rpb24uIENhbm5vdCBjYXRjaCB0aGlz IHdpdGgKLQkgKiBsaW5rZXIgdHJpY2tzIHdoZW4gb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQu Ci0JICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oSUxMRUdBTF9JTlNUUik7Ci0jZWxzZQotCV9f YnVpbHRpbl90cmFwKCk7Ci0jZW5kaWYKLX0KLQotI2Vsc2UgLyogI2lmICFkZWZpbmVkIF9fT1BU SU1JWkVfXyAgfHwgZGVmaW5lZCBVQVRPTUlDX05PX0xJTktfRVJST1IgKi8KLWV4dGVybiB2b2lk IF91YXRvbWljX2xpbmtfZXJyb3Iodm9pZCk7Ci0jZW5kaWYgLyogI2Vsc2UgI2lmICFkZWZpbmVk IF9fT1BUSU1JWkVfXyAgfHwgZGVmaW5lZCBVQVRPTUlDX05PX0xJTktfRVJST1IgKi8KLQotLyog Y21weGNoZyAqLwotCi0jaWZuZGVmIHVhdG9taWNfY21weGNoZwotc3RhdGljIGlubGluZSBfX2F0 dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKLXVuc2lnbmVkIGxvbmcgX3VhdG9taWNfY21weGNo Zyh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIG9sZCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcg X25ldywgaW50IGxlbikKLXsKLQlzd2l0Y2ggKGxlbikgewotI2lmZGVmIFVBVE9NSUNfSEFTX0FU T01JQ19CWVRFCi0JY2FzZSAxOgotCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2Fw XzEoKHVpbnQ4X3QgKikgYWRkciwgb2xkLAotCQkJCV9uZXcpOwotI2VuZGlmCi0jaWZkZWYgVUFU T01JQ19IQVNfQVRPTUlDX1NIT1JUCi0JY2FzZSAyOgotCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21w YXJlX2FuZF9zd2FwXzIoKHVpbnQxNl90ICopIGFkZHIsIG9sZCwKLQkJCQlfbmV3KTsKLSNlbmRp ZgotCWNhc2UgNDoKLQkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF80KCh1aW50 MzJfdCAqKSBhZGRyLCBvbGQsCi0JCQkJX25ldyk7Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09 IDY0KQotCWNhc2UgODoKLQkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF84KCh1 aW50NjRfdCAqKSBhZGRyLCBvbGQsCi0JCQkJX25ldyk7Ci0jZW5kaWYKLQl9Ci0JX3VhdG9taWNf bGlua19lcnJvcigpOwotCXJldHVybiAwOwotfQotCi0KLSNkZWZpbmUgdWF0b21pY19jbXB4Y2hn KGFkZHIsIG9sZCwgX25ldykJCQkJICAgICAgXAotCSgoX190eXBlb2ZfXygqKGFkZHIpKSkgX3Vh dG9taWNfY21weGNoZygoYWRkciksCQkJICAgICAgXAotCQkJCQkJY2FhX2Nhc3RfbG9uZ19rZWVw X3NpZ24ob2xkKSwgXAotCQkJCQkJY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24oX25ldyksXAotCQkJ CQkJc2l6ZW9mKCooYWRkcikpKSkKLQotCi0vKiB1YXRvbWljX2FuZCAqLwotCi0jaWZuZGVmIHVh dG9taWNfYW5kCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQot dm9pZCBfdWF0b21pY19hbmQodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCSAgaW50 IGxlbikKLXsKLQlzd2l0Y2ggKGxlbikgewotI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRF Ci0JY2FzZSAxOgotCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF8xKCh1aW50OF90ICopIGFkZHIsIHZh bCk7Ci0JCXJldHVybjsKLSNlbmRpZgotI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAot CWNhc2UgMjoKLQkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfMigodWludDE2X3QgKikgYWRkciwgdmFs KTsKLQkJcmV0dXJuOwotI2VuZGlmCi0JY2FzZSA0OgotCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF80 KCh1aW50MzJfdCAqKSBhZGRyLCB2YWwpOwotCQlyZXR1cm47Ci0jaWYgKENBQV9CSVRTX1BFUl9M T05HID09IDY0KQotCWNhc2UgODoKLQkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfOCgodWludDY0X3Qg KikgYWRkciwgdmFsKTsKLQkJcmV0dXJuOwotI2VuZGlmCi0JfQotCV91YXRvbWljX2xpbmtfZXJy b3IoKTsKLX0KLQotI2RlZmluZSB1YXRvbWljX2FuZChhZGRyLCB2KQkJCVwKLQkoX3VhdG9taWNf YW5kKChhZGRyKSwJCQlcCi0JCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKHYpLAlcCi0JCXNpemVv ZigqKGFkZHIpKSkpCi0jZGVmaW5lIGNtbV9zbXBfbWJfX2JlZm9yZV91YXRvbWljX2FuZCgpCWNt bV9iYXJyaWVyKCkKLSNkZWZpbmUgY21tX3NtcF9tYl9fYWZ0ZXJfdWF0b21pY19hbmQoKQkJY21t X2JhcnJpZXIoKQotCi0jZW5kaWYKLQotLyogdWF0b21pY19vciAqLwotCi0jaWZuZGVmIHVhdG9t aWNfb3IKLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi12b2lk IF91YXRvbWljX29yKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQkgaW50IGxlbikK LXsKLQlzd2l0Y2ggKGxlbikgewotI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCi0JY2Fz ZSAxOgotCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzEoKHVpbnQ4X3QgKikgYWRkciwgdmFsKTsKLQkJ cmV0dXJuOwotI2VuZGlmCi0jaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCi0JY2FzZSAy OgotCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzIoKHVpbnQxNl90ICopIGFkZHIsIHZhbCk7Ci0JCXJl dHVybjsKLSNlbmRpZgotCWNhc2UgNDoKLQkJX19zeW5jX29yX2FuZF9mZXRjaF80KCh1aW50MzJf dCAqKSBhZGRyLCB2YWwpOwotCQlyZXR1cm47Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0 KQotCWNhc2UgODoKLQkJX19zeW5jX29yX2FuZF9mZXRjaF84KCh1aW50NjRfdCAqKSBhZGRyLCB2 YWwpOwotCQlyZXR1cm47Ci0jZW5kaWYKLQl9Ci0JX3VhdG9taWNfbGlua19lcnJvcigpOwotCXJl dHVybjsKLX0KLQotI2RlZmluZSB1YXRvbWljX29yKGFkZHIsIHYpCQkJXAotCShfdWF0b21pY19v cigoYWRkciksCQkJXAotCQljYWFfY2FzdF9sb25nX2tlZXBfc2lnbih2KSwJXAotCQlzaXplb2Yo KihhZGRyKSkpKQotI2RlZmluZSBjbW1fc21wX21iX19iZWZvcmVfdWF0b21pY19vcigpCQljbW1f YmFycmllcigpCi0jZGVmaW5lIGNtbV9zbXBfbWJfX2FmdGVyX3VhdG9taWNfb3IoKQkJY21tX2Jh cnJpZXIoKQotCi0jZW5kaWYKLQotCi0vKiB1YXRvbWljX2FkZF9yZXR1cm4gKi8KLQotI2lmbmRl ZiB1YXRvbWljX2FkZF9yZXR1cm4KLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlz X2lubGluZSkpCi11bnNpZ25lZCBsb25nIF91YXRvbWljX2FkZF9yZXR1cm4odm9pZCAqYWRkciwg dW5zaWduZWQgbG9uZyB2YWwsCi0JCQkJIGludCBsZW4pCi17Ci0Jc3dpdGNoIChsZW4pIHsKLSNp ZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfQllURQotCWNhc2UgMToKLQkJcmV0dXJuIF9fc3luY19h ZGRfYW5kX2ZldGNoXzEoKHVpbnQ4X3QgKikgYWRkciwgdmFsKTsKLSNlbmRpZgotI2lmZGVmIFVB VE9NSUNfSEFTX0FUT01JQ19TSE9SVAotCWNhc2UgMjoKLQkJcmV0dXJuIF9fc3luY19hZGRfYW5k X2ZldGNoXzIoKHVpbnQxNl90ICopIGFkZHIsIHZhbCk7Ci0jZW5kaWYKLQljYXNlIDQ6Ci0JCXJl dHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF80KCh1aW50MzJfdCAqKSBhZGRyLCB2YWwpOwotI2lm IChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKLQljYXNlIDg6Ci0JCXJldHVybiBfX3N5bmNfYWRk X2FuZF9mZXRjaF84KCh1aW50NjRfdCAqKSBhZGRyLCB2YWwpOwotI2VuZGlmCi0JfQotCV91YXRv bWljX2xpbmtfZXJyb3IoKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0jZGVmaW5lIHVhdG9taWNfYWRk X3JldHVybihhZGRyLCB2KQkJCQkJICAgIFwKLQkoKF9fdHlwZW9mX18oKihhZGRyKSkpIF91YXRv bWljX2FkZF9yZXR1cm4oKGFkZHIpLAkJICAgIFwKLQkJCQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9z aWduKHYpLCBcCi0JCQkJCQlzaXplb2YoKihhZGRyKSkpKQotI2VuZGlmIC8qICNpZm5kZWYgdWF0 b21pY19hZGRfcmV0dXJuICovCi0KLSNpZm5kZWYgdWF0b21pY194Y2hnCi0vKiB4Y2hnICovCi0K LXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi11bnNpZ25lZCBs b25nIF91YXRvbWljX2V4Y2hhbmdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQg bGVuKQotewotCXN3aXRjaCAobGVuKSB7Ci0jaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUK LQljYXNlIDE6Ci0JewotCQl1aW50OF90IG9sZDsKLQotCQlkbyB7Ci0JCQlvbGQgPSB1YXRvbWlj X3JlYWQoKHVpbnQ4X3QgKikgYWRkcik7Ci0JCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJl X2FuZF9zd2FwXzEoKHVpbnQ4X3QgKikgYWRkciwKLQkJCQlvbGQsIHZhbCkpOwotCi0JCXJldHVy biBvbGQ7Ci0JfQotI2VuZGlmCi0jaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCi0JY2Fz ZSAyOgotCXsKLQkJdWludDE2X3Qgb2xkOwotCi0JCWRvIHsKLQkJCW9sZCA9IHVhdG9taWNfcmVh ZCgodWludDE2X3QgKikgYWRkcik7Ci0JCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2Fu ZF9zd2FwXzIoKHVpbnQxNl90ICopIGFkZHIsCi0JCQkJb2xkLCB2YWwpKTsKLQotCQlyZXR1cm4g b2xkOwotCX0KLSNlbmRpZgotCWNhc2UgNDoKLQl7Ci0JCXVpbnQzMl90IG9sZDsKLQotCQlkbyB7 Ci0JCQlvbGQgPSB1YXRvbWljX3JlYWQoKHVpbnQzMl90ICopIGFkZHIpOwotCQl9IHdoaWxlICgh X19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF80KCh1aW50MzJfdCAqKSBhZGRyLAotCQkJCW9s ZCwgdmFsKSk7Ci0KLQkJcmV0dXJuIG9sZDsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09 IDY0KQotCWNhc2UgODoKLQl7Ci0JCXVpbnQ2NF90IG9sZDsKLQotCQlkbyB7Ci0JCQlvbGQgPSB1 YXRvbWljX3JlYWQoKHVpbnQ2NF90ICopIGFkZHIpOwotCQl9IHdoaWxlICghX19zeW5jX2Jvb2xf Y29tcGFyZV9hbmRfc3dhcF84KCh1aW50NjRfdCAqKSBhZGRyLAotCQkJCW9sZCwgdmFsKSk7Ci0K LQkJcmV0dXJuIG9sZDsKLQl9Ci0jZW5kaWYKLQl9Ci0JX3VhdG9taWNfbGlua19lcnJvcigpOwot CXJldHVybiAwOwotfQotCi0jZGVmaW5lIHVhdG9taWNfeGNoZyhhZGRyLCB2KQkJCQkJCSAgICBc Ci0JKChfX3R5cGVvZl9fKCooYWRkcikpKSBfdWF0b21pY19leGNoYW5nZSgoYWRkciksCQkgICAg XAotCQkJCQkJY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24odiksIFwKLQkJCQkJCXNpemVvZigqKGFk ZHIpKSkpCi0jZW5kaWYgLyogI2lmbmRlZiB1YXRvbWljX3hjaGcgKi8KLQotI2Vsc2UgLyogI2lm bmRlZiB1YXRvbWljX2NtcHhjaGcgKi8KLQotI2lmbmRlZiB1YXRvbWljX2FuZAotLyogdWF0b21p Y19hbmQgKi8KLQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkK LXZvaWQgX3VhdG9taWNfYW5kKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgbGVu KQotewotCXN3aXRjaCAobGVuKSB7Ci0jaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKLQlj YXNlIDE6Ci0JewotCQl1aW50OF90IG9sZCwgb2xkdDsKLQotCQlvbGR0ID0gdWF0b21pY19yZWFk KCh1aW50OF90ICopIGFkZHIpOwotCQlkbyB7Ci0JCQlvbGQgPSBvbGR0OwotCQkJb2xkdCA9IF91 YXRvbWljX2NtcHhjaGcoYWRkciwgb2xkLCBvbGQgJiB2YWwsIDEpOwotCQl9IHdoaWxlIChvbGR0 ICE9IG9sZCk7Ci0KLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotI2lmZGVmIFVBVE9NSUNfSEFTX0FU T01JQ19TSE9SVAotCWNhc2UgMjoKLQl7Ci0JCXVpbnQxNl90IG9sZCwgb2xkdDsKLQotCQlvbGR0 ID0gdWF0b21pY19yZWFkKCh1aW50MTZfdCAqKSBhZGRyKTsKLQkJZG8gewotCQkJb2xkID0gb2xk dDsKLQkJCW9sZHQgPSBfdWF0b21pY19jbXB4Y2hnKGFkZHIsIG9sZCwgb2xkICYgdmFsLCAyKTsK LQkJfSB3aGlsZSAob2xkdCAhPSBvbGQpOwotCX0KLSNlbmRpZgotCWNhc2UgNDoKLQl7Ci0JCXVp bnQzMl90IG9sZCwgb2xkdDsKLQotCQlvbGR0ID0gdWF0b21pY19yZWFkKCh1aW50MzJfdCAqKSBh ZGRyKTsKLQkJZG8gewotCQkJb2xkID0gb2xkdDsKLQkJCW9sZHQgPSBfdWF0b21pY19jbXB4Y2hn KGFkZHIsIG9sZCwgb2xkICYgdmFsLCA0KTsKLQkJfSB3aGlsZSAob2xkdCAhPSBvbGQpOwotCi0J CXJldHVybjsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0KQotCWNhc2UgODoKLQl7 Ci0JCXVpbnQ2NF90IG9sZCwgb2xkdDsKLQotCQlvbGR0ID0gdWF0b21pY19yZWFkKCh1aW50NjRf dCAqKSBhZGRyKTsKLQkJZG8gewotCQkJb2xkID0gb2xkdDsKLQkJCW9sZHQgPSBfdWF0b21pY19j bXB4Y2hnKGFkZHIsIG9sZCwgb2xkICYgdmFsLCA4KTsKLQkJfSB3aGlsZSAob2xkdCAhPSBvbGQp OwotCi0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQl9Ci0JX3VhdG9taWNfbGlua19lcnJvcigpOwot fQotCi0jZGVmaW5lIHVhdG9taWNfYW5kKGFkZHIsIHYpCQkJXAotCShfdWF0b21pY19hbmQoKGFk ZHIpLAkJCVwKLQkJY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24odiksCVwKLQkJc2l6ZW9mKCooYWRk cikpKSkKLSNkZWZpbmUgY21tX3NtcF9tYl9fYmVmb3JlX3VhdG9taWNfYW5kKCkJY21tX2JhcnJp ZXIoKQotI2RlZmluZSBjbW1fc21wX21iX19hZnRlcl91YXRvbWljX2FuZCgpCQljbW1fYmFycmll cigpCi0KLSNlbmRpZiAvKiAjaWZuZGVmIHVhdG9taWNfYW5kICovCi0KLSNpZm5kZWYgdWF0b21p Y19vcgotLyogdWF0b21pY19vciAqLwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFs d2F5c19pbmxpbmUpKQotdm9pZCBfdWF0b21pY19vcih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25n IHZhbCwgaW50IGxlbikKLXsKLQlzd2l0Y2ggKGxlbikgewotI2lmZGVmIFVBVE9NSUNfSEFTX0FU T01JQ19CWVRFCi0JY2FzZSAxOgotCXsKLQkJdWludDhfdCBvbGQsIG9sZHQ7Ci0KLQkJb2xkdCA9 IHVhdG9taWNfcmVhZCgodWludDhfdCAqKSBhZGRyKTsKLQkJZG8gewotCQkJb2xkID0gb2xkdDsK LQkJCW9sZHQgPSBfdWF0b21pY19jbXB4Y2hnKGFkZHIsIG9sZCwgb2xkIHwgdmFsLCAxKTsKLQkJ fSB3aGlsZSAob2xkdCAhPSBvbGQpOwotCi0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBV QVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKLQljYXNlIDI6Ci0JewotCQl1aW50MTZfdCBvbGQsIG9s ZHQ7Ci0KLQkJb2xkdCA9IHVhdG9taWNfcmVhZCgodWludDE2X3QgKikgYWRkcik7Ci0JCWRvIHsK LQkJCW9sZCA9IG9sZHQ7Ci0JCQlvbGR0ID0gX3VhdG9taWNfY21weGNoZyhhZGRyLCBvbGQsIG9s ZCB8IHZhbCwgMik7Ci0JCX0gd2hpbGUgKG9sZHQgIT0gb2xkKTsKLQotCQlyZXR1cm47Ci0JfQot I2VuZGlmCi0JY2FzZSA0OgotCXsKLQkJdWludDMyX3Qgb2xkLCBvbGR0OwotCi0JCW9sZHQgPSB1 YXRvbWljX3JlYWQoKHVpbnQzMl90ICopIGFkZHIpOwotCQlkbyB7Ci0JCQlvbGQgPSBvbGR0Owot CQkJb2xkdCA9IF91YXRvbWljX2NtcHhjaGcoYWRkciwgb2xkLCBvbGQgfCB2YWwsIDQpOwotCQl9 IHdoaWxlIChvbGR0ICE9IG9sZCk7Ci0KLQkJcmV0dXJuOwotCX0KLSNpZiAoQ0FBX0JJVFNfUEVS X0xPTkcgPT0gNjQpCi0JY2FzZSA4OgotCXsKLQkJdWludDY0X3Qgb2xkLCBvbGR0OwotCi0JCW9s ZHQgPSB1YXRvbWljX3JlYWQoKHVpbnQ2NF90ICopIGFkZHIpOwotCQlkbyB7Ci0JCQlvbGQgPSBv bGR0OwotCQkJb2xkdCA9IF91YXRvbWljX2NtcHhjaGcoYWRkciwgb2xkLCBvbGQgfCB2YWwsIDgp OwotCQl9IHdoaWxlIChvbGR0ICE9IG9sZCk7Ci0KLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCX0K LQlfdWF0b21pY19saW5rX2Vycm9yKCk7Ci19Ci0KLSNkZWZpbmUgdWF0b21pY19vcihhZGRyLCB2 KQkJCVwKLQkoX3VhdG9taWNfb3IoKGFkZHIpLAkJCVwKLQkJY2FhX2Nhc3RfbG9uZ19rZWVwX3Np Z24odiksCVwKLQkJc2l6ZW9mKCooYWRkcikpKSkKLSNkZWZpbmUgY21tX3NtcF9tYl9fYmVmb3Jl X3VhdG9taWNfb3IoKQkJY21tX2JhcnJpZXIoKQotI2RlZmluZSBjbW1fc21wX21iX19hZnRlcl91 YXRvbWljX29yKCkJCWNtbV9iYXJyaWVyKCkKLQotI2VuZGlmIC8qICNpZm5kZWYgdWF0b21pY19v ciAqLwotCi0jaWZuZGVmIHVhdG9taWNfYWRkX3JldHVybgotLyogdWF0b21pY19hZGRfcmV0dXJu ICovCi0KLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi11bnNp Z25lZCBsb25nIF91YXRvbWljX2FkZF9yZXR1cm4odm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2 YWwsIGludCBsZW4pCi17Ci0Jc3dpdGNoIChsZW4pIHsKLSNpZmRlZiBVQVRPTUlDX0hBU19BVE9N SUNfQllURQotCWNhc2UgMToKLQl7Ci0JCXVpbnQ4X3Qgb2xkLCBvbGR0OwotCi0JCW9sZHQgPSB1 YXRvbWljX3JlYWQoKHVpbnQ4X3QgKikgYWRkcik7Ci0JCWRvIHsKLQkJCW9sZCA9IG9sZHQ7Ci0J CQlvbGR0ID0gdWF0b21pY19jbXB4Y2hnKCh1aW50OF90ICopIGFkZHIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZCwgb2xkICsgdmFsKTsKLQkJfSB3 aGlsZSAob2xkdCAhPSBvbGQpOwotCi0JCXJldHVybiBvbGQgKyB2YWw7Ci0JfQotI2VuZGlmCi0j aWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCi0JY2FzZSAyOgotCXsKLQkJdWludDE2X3Qg b2xkLCBvbGR0OwotCi0JCW9sZHQgPSB1YXRvbWljX3JlYWQoKHVpbnQxNl90ICopIGFkZHIpOwot CQlkbyB7Ci0JCQlvbGQgPSBvbGR0OwotCQkJb2xkdCA9IHVhdG9taWNfY21weGNoZygodWludDE2 X3QgKikgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb2xkLCBvbGQgKyB2YWwpOwotCQl9IHdoaWxlIChvbGR0ICE9IG9sZCk7Ci0KLQkJcmV0dXJu IG9sZCArIHZhbDsKLQl9Ci0jZW5kaWYKLQljYXNlIDQ6Ci0JewotCQl1aW50MzJfdCBvbGQsIG9s ZHQ7Ci0KLQkJb2xkdCA9IHVhdG9taWNfcmVhZCgodWludDMyX3QgKikgYWRkcik7Ci0JCWRvIHsK LQkJCW9sZCA9IG9sZHQ7Ci0JCQlvbGR0ID0gdWF0b21pY19jbXB4Y2hnKCh1aW50MzJfdCAqKSBh ZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQs IG9sZCArIHZhbCk7Ci0JCX0gd2hpbGUgKG9sZHQgIT0gb2xkKTsKLQotCQlyZXR1cm4gb2xkICsg dmFsOwotCX0KLSNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCi0JY2FzZSA4OgotCXsKLQkJ dWludDY0X3Qgb2xkLCBvbGR0OwotCi0JCW9sZHQgPSB1YXRvbWljX3JlYWQoKHVpbnQ2NF90ICop IGFkZHIpOwotCQlkbyB7Ci0JCQlvbGQgPSBvbGR0OwotCQkJb2xkdCA9IHVhdG9taWNfY21weGNo ZygodWludDY0X3QgKikgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb2xkLCBvbGQgKyB2YWwpOwotCQl9IHdoaWxlIChvbGR0ICE9IG9sZCk7Ci0K LQkJcmV0dXJuIG9sZCArIHZhbDsKLQl9Ci0jZW5kaWYKLQl9Ci0JX3VhdG9taWNfbGlua19lcnJv cigpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIHVhdG9taWNfYWRkX3JldHVybihhZGRyLCB2 KQkJCQkJICAgIFwKLQkoKF9fdHlwZW9mX18oKihhZGRyKSkpIF91YXRvbWljX2FkZF9yZXR1cm4o KGFkZHIpLAkJICAgIFwKLQkJCQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKHYpLCBcCi0JCQkJ CQlzaXplb2YoKihhZGRyKSkpKQotI2VuZGlmIC8qICNpZm5kZWYgdWF0b21pY19hZGRfcmV0dXJu ICovCi0KLSNpZm5kZWYgdWF0b21pY194Y2hnCi0vKiB4Y2hnICovCi0KLXN0YXRpYyBpbmxpbmUg X19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi11bnNpZ25lZCBsb25nIF91YXRvbWljX2V4 Y2hhbmdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgbGVuKQotewotCXN3aXRj aCAobGVuKSB7Ci0jaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKLQljYXNlIDE6Ci0Jewot CQl1aW50OF90IG9sZCwgb2xkdDsKLQotCQlvbGR0ID0gdWF0b21pY19yZWFkKCh1aW50OF90ICop IGFkZHIpOwotCQlkbyB7Ci0JCQlvbGQgPSBvbGR0OwotCQkJb2xkdCA9IHVhdG9taWNfY21weGNo ZygodWludDhfdCAqKSBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvbGQsIHZhbCk7Ci0JCX0gd2hpbGUgKG9sZHQgIT0gb2xkKTsKLQotCQlyZXR1 cm4gb2xkOwotCX0KLSNlbmRpZgotI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAotCWNh c2UgMjoKLQl7Ci0JCXVpbnQxNl90IG9sZCwgb2xkdDsKLQotCQlvbGR0ID0gdWF0b21pY19yZWFk KCh1aW50MTZfdCAqKSBhZGRyKTsKLQkJZG8gewotCQkJb2xkID0gb2xkdDsKLQkJCW9sZHQgPSB1 YXRvbWljX2NtcHhjaGcoKHVpbnQxNl90ICopIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9sZCwgdmFsKTsKLQkJfSB3aGlsZSAob2xkdCAhPSBv bGQpOwotCi0JCXJldHVybiBvbGQ7Ci0JfQotI2VuZGlmCi0JY2FzZSA0OgotCXsKLQkJdWludDMy X3Qgb2xkLCBvbGR0OwotCi0JCW9sZHQgPSB1YXRvbWljX3JlYWQoKHVpbnQzMl90ICopIGFkZHIp OwotCQlkbyB7Ci0JCQlvbGQgPSBvbGR0OwotCQkJb2xkdCA9IHVhdG9taWNfY21weGNoZygodWlu dDMyX3QgKikgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb2xkLCB2YWwpOwotCQl9IHdoaWxlIChvbGR0ICE9IG9sZCk7Ci0KLQkJcmV0dXJuIG9s ZDsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0KQotCWNhc2UgODoKLQl7Ci0JCXVp bnQ2NF90IG9sZCwgb2xkdDsKLQotCQlvbGR0ID0gdWF0b21pY19yZWFkKCh1aW50NjRfdCAqKSBh ZGRyKTsKLQkJZG8gewotCQkJb2xkID0gb2xkdDsKLQkJCW9sZHQgPSB1YXRvbWljX2NtcHhjaGco KHVpbnQ2NF90ICopIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG9sZCwgdmFsKTsKLQkJfSB3aGlsZSAob2xkdCAhPSBvbGQpOwotCi0JCXJldHVy biBvbGQ7Ci0JfQotI2VuZGlmCi0JfQotCV91YXRvbWljX2xpbmtfZXJyb3IoKTsKLQlyZXR1cm4g MDsKLX0KLQotI2RlZmluZSB1YXRvbWljX3hjaGcoYWRkciwgdikJCQkJCQkgICAgXAotCSgoX190 eXBlb2ZfXygqKGFkZHIpKSkgX3VhdG9taWNfZXhjaGFuZ2UoKGFkZHIpLAkJICAgIFwKLQkJCQkJ CWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKHYpLCBcCi0JCQkJCQlzaXplb2YoKihhZGRyKSkpKQot I2VuZGlmIC8qICNpZm5kZWYgdWF0b21pY194Y2hnICovCi0KLSNlbmRpZiAvKiAjZWxzZSAjaWZu ZGVmIHVhdG9taWNfY21weGNoZyAqLwotCi0vKiB1YXRvbWljX3N1Yl9yZXR1cm4sIHVhdG9taWNf YWRkLCB1YXRvbWljX3N1YiwgdWF0b21pY19pbmMsIHVhdG9taWNfZGVjICovCi0KLSNpZm5kZWYg dWF0b21pY19hZGQKLSNkZWZpbmUgdWF0b21pY19hZGQoYWRkciwgdikJCSh2b2lkKXVhdG9taWNf YWRkX3JldHVybigoYWRkciksICh2KSkKLSNkZWZpbmUgY21tX3NtcF9tYl9fYmVmb3JlX3VhdG9t aWNfYWRkKCkJY21tX2JhcnJpZXIoKQotI2RlZmluZSBjbW1fc21wX21iX19hZnRlcl91YXRvbWlj X2FkZCgpCQljbW1fYmFycmllcigpCi0jZW5kaWYKLQotI2RlZmluZSB1YXRvbWljX3N1Yl9yZXR1 cm4oYWRkciwgdikJXAotCXVhdG9taWNfYWRkX3JldHVybigoYWRkciksIC0oY2FhX2Nhc3RfbG9u Z19rZWVwX3NpZ24odikpKQotI2RlZmluZSB1YXRvbWljX3N1YihhZGRyLCB2KQkJXAotCXVhdG9t aWNfYWRkKChhZGRyKSwgLShjYWFfY2FzdF9sb25nX2tlZXBfc2lnbih2KSkpCi0jZGVmaW5lIGNt bV9zbXBfbWJfX2JlZm9yZV91YXRvbWljX3N1YigpCWNtbV9zbXBfbWJfX2JlZm9yZV91YXRvbWlj X2FkZCgpCi0jZGVmaW5lIGNtbV9zbXBfbWJfX2FmdGVyX3VhdG9taWNfc3ViKCkJCWNtbV9zbXBf bWJfX2FmdGVyX3VhdG9taWNfYWRkKCkKLQotI2lmbmRlZiB1YXRvbWljX2luYwotI2RlZmluZSB1 YXRvbWljX2luYyhhZGRyKQkJdWF0b21pY19hZGQoKGFkZHIpLCAxKQotI2RlZmluZSBjbW1fc21w X21iX19iZWZvcmVfdWF0b21pY19pbmMoKQljbW1fc21wX21iX19iZWZvcmVfdWF0b21pY19hZGQo KQotI2RlZmluZSBjbW1fc21wX21iX19hZnRlcl91YXRvbWljX2luYygpCQljbW1fc21wX21iX19h ZnRlcl91YXRvbWljX2FkZCgpCi0jZW5kaWYKLQotI2lmbmRlZiB1YXRvbWljX2RlYwotI2RlZmlu ZSB1YXRvbWljX2RlYyhhZGRyKQkJdWF0b21pY19hZGQoKGFkZHIpLCAtMSkKLSNkZWZpbmUgY21t X3NtcF9tYl9fYmVmb3JlX3VhdG9taWNfZGVjKCkJY21tX3NtcF9tYl9fYmVmb3JlX3VhdG9taWNf YWRkKCkKLSNkZWZpbmUgY21tX3NtcF9tYl9fYWZ0ZXJfdWF0b21pY19kZWMoKQkJY21tX3NtcF9t Yl9fYWZ0ZXJfdWF0b21pY19hZGQoKQotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQot I2VuZGlmCi0KLSNlbmRpZiAvKiBfVVJDVV9VQVRPTUlDX0dFTkVSSUNfSCAqLwpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS91cmN1L3VhdG9taWMvaHBwYS5oIGIvaW5jbHVkZS91cmN1L3VhdG9taWMvaHBw YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTAyMTUzLi4wMDAwMDAwCi0tLSBh L2luY2x1ZGUvdXJjdS91YXRvbWljL2hwcGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAg QEAKLSNpZm5kZWYgX1VSQ1VfQVJDSF9VQVRPTUlDX0hQUEFfSAotI2RlZmluZSBfVVJDVV9BUkNI X1VBVE9NSUNfSFBQQV9ICi0KLSNpbmNsdWRlIDx1cmN1L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8 dXJjdS9zeXN0ZW0uaD4KLQotI2RlZmluZSBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKLSNpbmNs dWRlIDx1cmN1L3VhdG9taWMvZ2VuZXJpYy5oPgotCi0jZW5kaWYgLyogX1VSQ1VfQVJDSF9VQVRP TUlDX0hQUEFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91cmN1L3VhdG9taWMvaWE2NC5oIGIv aW5jbHVkZS91cmN1L3VhdG9taWMvaWE2NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBiNWRiOGNjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvdXJjdS91YXRvbWljL2lhNjQuaAorKysg L2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLSNpZm5kZWYgX1VSQ1VfQVJDSF9VQVRPTUlDX0lB NjRfSAotI2RlZmluZSBfVVJDVV9BUkNIX1VBVE9NSUNfSUE2NF9ICi0KLS8qCi0gKiBDb3B5cmln aHQgKGMpIDE5OTEtMTk5NCBieSBYZXJveCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBTaWxpY29uIEdyYXBoaWNzLiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA0IEhld2xldHQtUGFj a2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAx NSBNYXRoaWV1IERlc25veWVycwotICogQ29weXJpZ2h0IChjKSAyMDEwICAgICAgUGF1bCBFLiBN Y0tlbm5leSwgSUJNIENvcnBvcmF0aW9uCi0gKgkJCSAgIChBZGFwdGVkIGZyb20gdWF0b21pY19h cmNoX3BwYy5oKQotICoKLSAqIFRISVMgTUFURVJJQUwgSVMgUFJPVklERUQgQVMgSVMsIFdJVEgg QUJTT0xVVEVMWSBOTyBXQVJSQU5UWSBFWFBSRVNTRUQKLSAqIE9SIElNUExJRUQuICBBTlkgVVNF IElTIEFUIFlPVVIgT1dOIFJJU0suCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCB0byB1c2Ugb3IgY29weSB0aGlzIHByb2dyYW0KLSAqIGZvciBhbnkgcHVycG9zZSwgIHByb3Zp ZGVkIHRoZSBhYm92ZSBub3RpY2VzIGFyZSByZXRhaW5lZCBvbiBhbGwgY29waWVzLgotICogUGVy bWlzc2lvbiB0byBtb2RpZnkgdGhlIGNvZGUgYW5kIHRvIGRpc3RyaWJ1dGUgbW9kaWZpZWQgY29k ZSBpcyBncmFudGVkLAotICogcHJvdmlkZWQgdGhlIGFib3ZlIG5vdGljZXMgYXJlIHJldGFpbmVk LCBhbmQgYSBub3RpY2UgdGhhdCB0aGUgY29kZSB3YXMKLSAqIG1vZGlmaWVkIGlzIGluY2x1ZGVk IHdpdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UuCi0gKgotICogQ29kZSBpbnNwaXJlZCBm cm9tIGxpYnVhdG9taWNfb3BzLTEuMiwgaW5oZXJpdGVkIGluIHBhcnQgZnJvbSB0aGUKLSAqIEJv ZWhtLURlbWVycy1XZWlzZXIgY29uc2VydmF0aXZlIGdhcmJhZ2UgY29sbGVjdG9yLgotICovCi0K LSNpbmNsdWRlIDx1cmN1L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8dXJjdS9zeXN0ZW0uaD4KLQot I2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0jZGVmaW5lIFVBVE9N SUNfSEFTX0FUT01JQ19CWVRFCi0jZGVmaW5lIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAotCi0j aWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jaW5jbHVkZSA8dXJjdS91YXRvbWljL2dl bmVyaWMuaD4KLQotI2VuZGlmIC8qIF9VUkNVX0FSQ0hfVUFUT01JQ19JQTY0X0ggKi8KZGlmZiAt LWdpdCBhL2luY2x1ZGUvdXJjdS91YXRvbWljL202OGsuaCBiL2luY2x1ZGUvdXJjdS91YXRvbWlj L202OGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBiMDFjNy4uMDAwMDAwMAot LS0gYS9pbmNsdWRlL3VyY3UvdWF0b21pYy9tNjhrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCAr MCwwIEBACi0vKgotICogQXRvbWljIGV4Y2hhbmdlIG9wZXJhdGlvbnMgZm9yIHRoZSBtNjhrIGFy Y2hpdGVjdHVyZS4gTGV0IEdDQyBkbyBpdC4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgTWlj aGFlbCBKZWFuc29uIDxtamVhbnNvbkBlZmZpY2lvcy5jb20+Ci0gKgotICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCi0gKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQotICogcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwgYW5kL29yCi0gKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp bmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAot ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g SU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJFLgotICovCi0KLSNp Zm5kZWYgX1VSQ1VfQVJDSF9VQVRPTUlDX002OEtfSAotI2RlZmluZSBfVVJDVV9BUkNIX1VBVE9N SUNfTTY4S19ICi0KLSNpbmNsdWRlIDx1cmN1L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8dXJjdS9z eXN0ZW0uaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0j ZGVmaW5lIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCi0jZGVmaW5lIFVBVE9NSUNfSEFTX0FUT01J Q19TSE9SVAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jaW5jbHVkZSA8dXJj dS91YXRvbWljL2dlbmVyaWMuaD4KLQotI2VuZGlmIC8qIF9VUkNVX0FSQ0hfVUFUT01JQ19NNjhL X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXJjdS91YXRvbWljL21pcHMuaCBiL2luY2x1ZGUv dXJjdS91YXRvbWljL21pcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ3Y2E3 Zi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3VyY3UvdWF0b21pYy9taXBzLmgKKysrIC9kZXYvbnVs bApAQCAtMSwzMiArMCwwIEBACi0jaWZuZGVmIF9VUkNVX1VBVE9NSUNfQVJDSF9NSVBTX0gKLSNk ZWZpbmUgX1VSQ1VfVUFUT01JQ19BUkNIX01JUFNfSAotCi0vKgotICogQXRvbWljIGV4Y2hhbmdl IG9wZXJhdGlvbnMgZm9yIHRoZSBNSVBTIGFyY2hpdGVjdHVyZS4gTGV0IEdDQyBkbyBpdC4KLSAq Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgUGFvbG8gQm9uemluaSA8cGJvbnppbmlAcmVkaGF0LmNv bT4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KLSAqIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24gdGhlCi0gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKLSAqIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJl IGlzCi0gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBU SEUgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHVyY3UvY29tcGlsZXIuaD4KLSNpbmNsdWRl IDx1cmN1L3N5c3RlbS5oPgotI2luY2x1ZGUgPHVyY3UvdWF0b21pYy9nZW5lcmljLmg+Ci0KLSNl bmRpZiAvKiBfVVJDVV9VQVRPTUlDX0FSQ0hfTUlQU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRl L3VyY3UvdWF0b21pYy9uaW9zMi5oIGIvaW5jbHVkZS91cmN1L3VhdG9taWMvbmlvczIuaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIzYzMwMy4uMDAwMDAwMAotLS0gYS9pbmNsdWRl L3VyY3UvdWF0b21pYy9uaW9zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2lm bmRlZiBfVVJDVV9VQVRPTUlDX0FSQ0hfTklPUzJfSAotI2RlZmluZSBfVVJDVV9VQVRPTUlDX0FS Q0hfTklPUzJfSAotCi0vKgotICogQXRvbWljIGV4Y2hhbmdlIG9wZXJhdGlvbnMgZm9yIHRoZSBO SU9TMiBhcmNoaXRlY3R1cmUuIExldCBHQ0MgZG8gaXQuCi0gKgotICogQ29weXJpZ2h0IChjKSAy MDE2IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNv cHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLCB0bwotICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKLSAqIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsIGFuZC9vcgotICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVk ZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3 YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5P IEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVk ZSA8dXJjdS9jb21waWxlci5oPgotI2luY2x1ZGUgPHVyY3Uvc3lzdGVtLmg+Ci0jaW5jbHVkZSA8 dXJjdS91YXRvbWljL2dlbmVyaWMuaD4KLQotI2VuZGlmIC8qIF9VUkNVX1VBVE9NSUNfQVJDSF9O SU9TMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VyY3UvdWF0b21pYy9wcGMuaCBiL2luY2x1 ZGUvdXJjdS91YXRvbWljL3BwYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTY3 MmY1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvdXJjdS91YXRvbWljL3BwYy5oCisrKyAvZGV2L251 bGwKQEAgLTEsMjM3ICswLDAgQEAKLSNpZm5kZWYgX1VSQ1VfQVJDSF9VQVRPTUlDX1BQQ19ICi0j ZGVmaW5lIF9VUkNVX0FSQ0hfVUFUT01JQ19QUENfSAotCi0vKgotICogQ29weXJpZ2h0IChjKSAx OTkxLTE5OTQgYnkgWGVyb3ggQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog Q29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgU2lsaWNvbiBHcmFwaGljcy4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNCBIZXdsZXR0LVBhY2thcmQgRGV2 ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgotICogQ29weXJpZ2h0IChjKSAyMDA5ICAgICAgTWF0aGll dSBEZXNub3llcnMKLSAqCi0gKiBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEFTIElTLCBXSVRI IEFCU09MVVRFTFkgTk8gV0FSUkFOVFkgRVhQUkVTU0VECi0gKiBPUiBJTVBMSUVELiAgQU5ZIFVT RSBJUyBBVCBZT1VSIE9XTiBSSVNLLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQgdG8gdXNlIG9yIGNvcHkgdGhpcyBwcm9ncmFtCi0gKiBmb3IgYW55IHB1cnBvc2UsICBwcm92 aWRlZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWluZWQgb24gYWxsIGNvcGllcy4KLSAqIFBl cm1pc3Npb24gdG8gbW9kaWZ5IHRoZSBjb2RlIGFuZCB0byBkaXN0cmlidXRlIG1vZGlmaWVkIGNv ZGUgaXMgZ3JhbnRlZCwKLSAqIHByb3ZpZGVkIHRoZSBhYm92ZSBub3RpY2VzIGFyZSByZXRhaW5l ZCwgYW5kIGEgbm90aWNlIHRoYXQgdGhlIGNvZGUgd2FzCi0gKiBtb2RpZmllZCBpcyBpbmNsdWRl ZCB3aXRoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLgotICoKLSAqIENvZGUgaW5zcGlyZWQg ZnJvbSBsaWJ1YXRvbWljX29wcy0xLjIsIGluaGVyaXRlZCBpbiBwYXJ0IGZyb20gdGhlCi0gKiBC b2VobS1EZW1lcnMtV2Vpc2VyIGNvbnNlcnZhdGl2ZSBnYXJiYWdlIGNvbGxlY3Rvci4KLSAqLwot Ci0jaW5jbHVkZSA8dXJjdS9jb21waWxlci5oPgotI2luY2x1ZGUgPHVyY3Uvc3lzdGVtLmg+Ci0K LSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2RlZmluZSBJTExF R0FMX0lOU1RSCSIubG9uZwkweGQwMGQwMCIKLQotLyoKLSAqIFByb3ZpZGluZyBzZXF1ZW50aWFs IGNvbnNpc3RlbmN5IHNlbWFudGljIHdpdGggcmVzcGVjdCB0byBvdGhlcgotICogaW5zdHJ1Y3Rp b25zIGZvciBjbXB4Y2hnIGFuZCBhZGRfcmV0dXJuIGZhbWlseSBvZiBhdG9taWMgcHJpbWl0aXZl cy4KLSAqCi0gKiBUaGlzIGlzIGFjaGlldmVkIHdpdGg6Ci0gKiAgIGx3c3luYyAocHJpb3IgbG9h ZHMgY2FuIGJlIHJlb3JkZXJlZCBhZnRlciBmb2xsb3dpbmcgbG9hZCkKLSAqICAgbHdhcngKLSAq ICAgc3R3Y3guCi0gKiAgIHRlc3QgaWYgc3VjY2VzcyAocmV0cnkpCi0gKiAgIHN5bmMKLSAqCi0g KiBFeHBsYW5hdGlvbiBvZiB0aGUgc2VxdWVudGlhbCBjb25zaXN0ZW5jeSBwcm92aWRlZCBieSB0 aGlzIHNjaGVtZQotICogZnJvbSBQYXVsIEUuIE1jS2VubmV5OgotICoKLSAqIFRoZSByZWFzb24g d2UgY2FuIGdldCBhd2F5IHdpdGggdGhlIGx3c3luYyBiZWZvcmUgaXMgdGhhdCBpZiBhIHByaW9y Ci0gKiBzdG9yZSByZW9yZGVycyB3aXRoIHRoZSBsd2FyeCwgdGhlbiB5b3UgaGF2ZSB0byBzdG9y ZSB0byB0aGUgYXRvbWljCi0gKiB2YXJpYWJsZSBmcm9tIHNvbWUgb3RoZXIgQ1BVIHRvIGRldGVj dCBpdC4KLSAqCi0gKiBBbmQgaWYgeW91IGRvIHRoYXQsIHRoZSBsd2FyeCB3aWxsIGxvc2UgaXRz IHJlc2VydmF0aW9uLCBzbyB0aGUgc3R3Y3gKLSAqIHdpbGwgZmFpbC4gIFRoZSBhdG9taWMgb3Bl cmF0aW9uIHdpbGwgcmV0cnksIHNvIHRoYXQgdGhlIGNhbGxlciB3b24ndCBiZQotICogYWJsZSB0 byBzZWUgdGhlIG1pc29yZGVyaW5nLgotICovCi0KLS8qIHhjaGcgKi8KLQotc3RhdGljIGlubGlu ZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKLXVuc2lnbmVkIGxvbmcgX3VhdG9taWNf ZXhjaGFuZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsIGludCBsZW4pCi17Ci0Jc3dp dGNoIChsZW4pIHsKLQljYXNlIDQ6Ci0JewotCQl1bnNpZ25lZCBpbnQgcmVzdWx0OwotCi0JCV9f YXNtX18gX192b2xhdGlsZV9fKAotCQkJTFdTWU5DX09QQ09ERQotCQkiMTpcdCIJImx3YXJ4ICUw LDAsJTFcbiIJLyogbG9hZCBhbmQgcmVzZXJ2ZSAqLwotCQkJInN0d2N4LiAlMiwwLCUxXG4iCS8q IGVsc2Ugc3RvcmUgY29uZGl0aW9uYWwgKi8KLQkJCSJibmUtIDFiXG4iCSAJLyogcmV0cnkgaWYg bG9zdCByZXNlcnZhdGlvbiAqLwotCQkJInN5bmNcbiIKLQkJCQk6ICI9JnIiKHJlc3VsdCkKLQkJ CQk6ICJyIihhZGRyKSwgInIiKHZhbCkKLQkJCQk6ICJtZW1vcnkiLCAiY2MiKTsKLQotCQlyZXR1 cm4gcmVzdWx0OwotCX0KLSNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCi0JY2FzZSA4Ogot CXsKLQkJdW5zaWduZWQgbG9uZyByZXN1bHQ7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0J CQlMV1NZTkNfT1BDT0RFCi0JCSIxOlx0IgkibGRhcnggJTAsMCwlMVxuIgkvKiBsb2FkIGFuZCBy ZXNlcnZlICovCi0JCQkic3RkY3guICUyLDAsJTFcbiIJLyogZWxzZSBzdG9yZSBjb25kaXRpb25h bCAqLwotCQkJImJuZS0gMWJcbiIJIAkvKiByZXRyeSBpZiBsb3N0IHJlc2VydmF0aW9uICovCi0J CQkic3luY1xuIgotCQkJCTogIj0mciIocmVzdWx0KQotCQkJCTogInIiKGFkZHIpLCAiciIodmFs KQotCQkJCTogIm1lbW9yeSIsICJjYyIpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotI2VuZGlm Ci0JfQotCS8qCi0JICogZ2VuZXJhdGUgYW4gaWxsZWdhbCBpbnN0cnVjdGlvbi4gQ2Fubm90IGNh dGNoIHRoaXMgd2l0aAotCSAqIGxpbmtlciB0cmlja3Mgd2hlbiBvcHRpbWl6YXRpb25zIGFyZSBk aXNhYmxlZC4KLQkgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhJTExFR0FMX0lOU1RSKTsKLQly ZXR1cm4gMDsKLX0KLQotI2RlZmluZSB1YXRvbWljX3hjaGcoYWRkciwgdikJCQkJCQkgICAgXAot CSgoX190eXBlb2ZfXygqKGFkZHIpKSkgX3VhdG9taWNfZXhjaGFuZ2UoKGFkZHIpLAkJICAgIFwK LQkJCQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKHYpLCBcCi0JCQkJCQlzaXplb2YoKihhZGRy KSkpKQotLyogY21weGNoZyAqLwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5 c19pbmxpbmUpKQotdW5zaWduZWQgbG9uZyBfdWF0b21pY19jbXB4Y2hnKHZvaWQgKmFkZHIsIHVu c2lnbmVkIGxvbmcgb2xkLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBfbmV3LCBpbnQgbGVuKQot ewotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSA0OgotCXsKLQkJdW5zaWduZWQgaW50IG9sZF92YWw7 Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCQlMV1NZTkNfT1BDT0RFCi0JCSIxOlx0Igki bHdhcnggJTAsMCwlMVxuIgkvKiBsb2FkIGFuZCByZXNlcnZlICovCi0JCQkiY21wdyAlMCwlM1xu IgkJLyogaWYgbG9hZCBpcyBub3QgZXF1YWwgdG8gKi8KLQkJCSJibmUgMmZcbiIJCS8qIG9sZCwg ZmFpbCAqLwotCQkJInN0d2N4LiAlMiwwLCUxXG4iCS8qIGVsc2Ugc3RvcmUgY29uZGl0aW9uYWwg Ki8KLQkJCSJibmUtIDFiXG4iCSAJLyogcmV0cnkgaWYgbG9zdCByZXNlcnZhdGlvbiAqLwotCQkJ InN5bmNcbiIKLQkJIjI6XG4iCi0JCQkJOiAiPSZyIihvbGRfdmFsKQotCQkJCTogInIiKGFkZHIp LCAiciIoKHVuc2lnbmVkIGludClfbmV3KSwKLQkJCQkgICJyIigodW5zaWduZWQgaW50KW9sZCkK LQkJCQk6ICJtZW1vcnkiLCAiY2MiKTsKLQotCQlyZXR1cm4gb2xkX3ZhbDsKLQl9Ci0jaWYgKENB QV9CSVRTX1BFUl9MT05HID09IDY0KQotCWNhc2UgODoKLQl7Ci0JCXVuc2lnbmVkIGxvbmcgb2xk X3ZhbDsKLQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCUxXU1lOQ19PUENPREUKLQkJIjE6 XHQiCSJsZGFyeCAlMCwwLCUxXG4iCS8qIGxvYWQgYW5kIHJlc2VydmUgKi8KLQkJCSJjbXBkICUw LCUzXG4iCQkvKiBpZiBsb2FkIGlzIG5vdCBlcXVhbCB0byAqLwotCQkJImJuZSAyZlxuIgkJLyog b2xkLCBmYWlsICovCi0JCQkic3RkY3guICUyLDAsJTFcbiIJLyogZWxzZSBzdG9yZSBjb25kaXRp b25hbCAqLwotCQkJImJuZS0gMWJcbiIJIAkvKiByZXRyeSBpZiBsb3N0IHJlc2VydmF0aW9uICov Ci0JCQkic3luY1xuIgotCQkiMjpcbiIKLQkJCQk6ICI9JnIiKG9sZF92YWwpCi0JCQkJOiAiciIo YWRkciksICJyIigodW5zaWduZWQgbG9uZylfbmV3KSwKLQkJCQkgICJyIigodW5zaWduZWQgbG9u ZylvbGQpCi0JCQkJOiAibWVtb3J5IiwgImNjIik7Ci0KLQkJcmV0dXJuIG9sZF92YWw7Ci0JfQot I2VuZGlmCi0JfQotCS8qCi0JICogZ2VuZXJhdGUgYW4gaWxsZWdhbCBpbnN0cnVjdGlvbi4gQ2Fu bm90IGNhdGNoIHRoaXMgd2l0aAotCSAqIGxpbmtlciB0cmlja3Mgd2hlbiBvcHRpbWl6YXRpb25z IGFyZSBkaXNhYmxlZC4KLQkgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhJTExFR0FMX0lOU1RS KTsKLQlyZXR1cm4gMDsKLX0KLQotCi0jZGVmaW5lIHVhdG9taWNfY21weGNoZyhhZGRyLCBvbGQs IF9uZXcpCQkJCSAgICAgIFwKLQkoKF9fdHlwZW9mX18oKihhZGRyKSkpIF91YXRvbWljX2NtcHhj aGcoKGFkZHIpLAkJCSAgICAgIFwKLQkJCQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKG9sZCks IFwKLQkJCQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKF9uZXcpLFwKLQkJCQkJCXNpemVvZigq KGFkZHIpKSkpCi0KLS8qIHVhdG9taWNfYWRkX3JldHVybiAqLwotCi1zdGF0aWMgaW5saW5lIF9f YXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQotdW5zaWduZWQgbG9uZyBfdWF0b21pY19hZGRf cmV0dXJuKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQkJCSBpbnQgbGVuKQotewot CXN3aXRjaCAobGVuKSB7Ci0JY2FzZSA0OgotCXsKLQkJdW5zaWduZWQgaW50IHJlc3VsdDsKLQot CQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCUxXU1lOQ19PUENPREUKLQkJIjE6XHQiCSJsd2Fy eCAlMCwwLCUxXG4iCS8qIGxvYWQgYW5kIHJlc2VydmUgKi8KLQkJCSJhZGQgJTAsJTIsJTBcbiIJ LyogYWRkIHZhbCB0byB2YWx1ZSBsb2FkZWQgKi8KLQkJCSJzdHdjeC4gJTAsMCwlMVxuIgkvKiBz dG9yZSBjb25kaXRpb25hbCAqLwotCQkJImJuZS0gMWJcbiIJIAkvKiByZXRyeSBpZiBsb3N0IHJl c2VydmF0aW9uICovCi0JCQkic3luY1xuIgotCQkJCTogIj0mciIocmVzdWx0KQotCQkJCTogInIi KGFkZHIpLCAiciIodmFsKQotCQkJCTogIm1lbW9yeSIsICJjYyIpOwotCi0JCXJldHVybiByZXN1 bHQ7Ci0JfQotI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKLQljYXNlIDg6Ci0JewotCQl1 bnNpZ25lZCBsb25nIHJlc3VsdDsKLQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCUxXU1lO Q19PUENPREUKLQkJIjE6XHQiCSJsZGFyeCAlMCwwLCUxXG4iCS8qIGxvYWQgYW5kIHJlc2VydmUg Ki8KLQkJCSJhZGQgJTAsJTIsJTBcbiIJLyogYWRkIHZhbCB0byB2YWx1ZSBsb2FkZWQgKi8KLQkJ CSJzdGRjeC4gJTAsMCwlMVxuIgkvKiBzdG9yZSBjb25kaXRpb25hbCAqLwotCQkJImJuZS0gMWJc biIJIAkvKiByZXRyeSBpZiBsb3N0IHJlc2VydmF0aW9uICovCi0JCQkic3luY1xuIgotCQkJCTog Ij0mciIocmVzdWx0KQotCQkJCTogInIiKGFkZHIpLCAiciIodmFsKQotCQkJCTogIm1lbW9yeSIs ICJjYyIpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotI2VuZGlmCi0JfQotCS8qCi0JICogZ2Vu ZXJhdGUgYW4gaWxsZWdhbCBpbnN0cnVjdGlvbi4gQ2Fubm90IGNhdGNoIHRoaXMgd2l0aAotCSAq IGxpbmtlciB0cmlja3Mgd2hlbiBvcHRpbWl6YXRpb25zIGFyZSBkaXNhYmxlZC4KLQkgKi8KLQlf X2FzbV9fIF9fdm9sYXRpbGVfXyhJTExFR0FMX0lOU1RSKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0j ZGVmaW5lIHVhdG9taWNfYWRkX3JldHVybihhZGRyLCB2KQkJCQkJICAgIFwKLQkoKF9fdHlwZW9m X18oKihhZGRyKSkpIF91YXRvbWljX2FkZF9yZXR1cm4oKGFkZHIpLAkJICAgIFwKLQkJCQkJCWNh YV9jYXN0X2xvbmdfa2VlcF9zaWduKHYpLCBcCi0JCQkJCQlzaXplb2YoKihhZGRyKSkpKQotCi0j aWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jaW5jbHVkZSA8dXJjdS91YXRvbWljL2dl bmVyaWMuaD4KLQotI2VuZGlmIC8qIF9VUkNVX0FSQ0hfVUFUT01JQ19QUENfSCAqLwpkaWZmIC0t Z2l0IGEvaW5jbHVkZS91cmN1L3VhdG9taWMvcmlzY3YuaCBiL2luY2x1ZGUvdXJjdS91YXRvbWlj L3Jpc2N2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NzAwZTEuLjAwMDAwMDAK LS0tIGEvaW5jbHVkZS91cmN1L3VhdG9taWMvcmlzY3YuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0 ICswLDAgQEAKLS8qCi0gKiBBdG9taWMgZXhjaGFuZ2Ugb3BlcmF0aW9ucyBmb3IgdGhlIFJJU0Mt ViBhcmNoaXRlY3R1cmUuIExldCBHQ0MgZG8gaXQuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE4 IE1pY2hhZWwgSmVhbnNvbiA8bWplYW5zb25AZWZmaWNpb3MuY29tPgotICoKLSAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhIGNvcHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bwotICogZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKLSAq IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsIGFuZC9vcgotICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg YmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqLwot Ci0jaWZuZGVmIF9VUkNVX0FSQ0hfVUFUT01JQ19SSVNDVl9ICi0jZGVmaW5lIF9VUkNVX0FSQ0hf VUFUT01JQ19SSVNDVl9ICi0KLSNpbmNsdWRlIDx1cmN1L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8 dXJjdS9zeXN0ZW0uaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRp ZgotCi0jZGVmaW5lIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCi0jZGVmaW5lIFVBVE9NSUNfSEFT X0FUT01JQ19TSE9SVAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jaW5jbHVk ZSA8dXJjdS91YXRvbWljL2dlbmVyaWMuaD4KLQotI2VuZGlmIC8qIF9VUkNVX0FSQ0hfVUFUT01J Q19SSVNDVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VyY3UvdWF0b21pYy9zMzkwLmggYi9p bmNsdWRlL3VyY3UvdWF0b21pYy9zMzkwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDQyZjIzZTcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS91cmN1L3VhdG9taWMvczM5MC5oCisrKyAv ZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLSNpZm5kZWYgX1VSQ1VfVUFUT01JQ19BUkNIX1Mz OTBfSAotI2RlZmluZSBfVVJDVV9VQVRPTUlDX0FSQ0hfUzM5MF9ICi0KLS8qCi0gKiBBdG9taWMg ZXhjaGFuZ2Ugb3BlcmF0aW9ucyBmb3IgdGhlIFMzOTAgYXJjaGl0ZWN0dXJlLiBCYXNlZCBvbiBp bmZvcm1hdGlvbgotICogdGFrZW4gZnJvbSB0aGUgUHJpbmNpcGxlcyBvZiBPcGVyYXRpb24gQXBw ZW5kaXggQSAiQ29uZGl0aW9uYWwgU3dhcHBpbmcKLSAqIEluc3RydWN0aW9ucyAoQ1MsIENEUyki LgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOSBOb3ZlbGwsIEluYy4KLSAqIEF1dGhvcjogSmFu IEJsdW5jayA8amJsdW5ja0BzdXNlLmRlPgotICogQ29weXJpZ2h0IChjKSAyMDA5IE1hdGhpZXUg RGVzbm95ZXJzIDxtYXRoaWV1LmRlc25veWVyc0BlZmZpY2lvcy5jb20+Ci0gKgotICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCi0gKiBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQot ICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwgYW5kL29yCi0gKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs bCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJFLgotICov Ci0KLSNpbmNsdWRlIDx1cmN1L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8dXJjdS9zeXN0ZW0uaD4K LQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0jaWYgX19HTlVD X18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKLSNkZWZpbmUg Q09NUElMRVJfSEFWRV9TSE9SVF9NRU1fT1BFUkFORAotI2VuZGlmCi0KLS8qCi0gKiBNRU1PUCBh c3NlbWJsZXIgb3BlcmFuZCBydWxlczoKLSAqIC0gb3AgcmVmZXIgdG8gTUVNT1BfSU4gb3BlcmFu ZAotICogLSBNRU1PUF9JTiBjYW4gZXhwYW5kIHRvIG1vcmUgdGhhbiBhIHNpbmdsZSBvcGVyYW5k LiBVc2UgaXQgYXQgdGhlIGVuZCBvZgotICogICBvcGVyYW5kIGxpc3Qgb25seS4KLSAqLwotCi0j aWZkZWYgQ09NUElMRVJfSEFWRV9TSE9SVF9NRU1fT1BFUkFORAotCi0jZGVmaW5lIE1FTU9QX09V VChhZGRyKQkiPVEiICgqKGFkZHIpKQotI2RlZmluZSBNRU1PUF9JTihhZGRyKQkiUSIgKCooYWRk cikpCi0jZGVmaW5lIE1FTU9QX1JFRihvcCkJI29wCQkvKiBvcCByZWZlciB0byBNRU1PUF9JTiBv cGVyYW5kICovCi0KLSNlbHNlIC8qICFDT01QSUxFUl9IQVZFX1NIT1JUX01FTV9PUEVSQU5EICov Ci0KLSNkZWZpbmUgTUVNT1BfT1VUKGFkZHIpCSI9bSIgKCooYWRkcikpCi0jZGVmaW5lIE1FTU9Q X0lOKGFkZHIpCSJhIiAoYWRkciksICJtIiAoKihhZGRyKSkKLSNkZWZpbmUgTUVNT1BfUkVGKG9w KQkiMCgiICNvcCAiKSIJLyogb3AgcmVmZXIgdG8gTUVNT1BfSU4gb3BlcmFuZCAqLwotCi0jZW5k aWYgLyogIUNPTVBJTEVSX0hBVkVfU0hPUlRfTUVNX09QRVJBTkQgKi8KLQotLyoKLSAqIFRoZSBf X2hwKCkgbWFjcm8gY2FzdHMgdGhlIHZvaWQgcG9pbnRlciBAeCB0byBhIHBvaW50ZXIgdG8gYSBz dHJ1Y3R1cmUKLSAqIGNvbnRhaW5pbmcgYW4gYXJyYXkgb2YgY2hhciBvZiB0aGUgc3BlY2lmaWVk IHNpemUuIFRoaXMgYWxsb3dzIHBhc3NpbmcgdGhlCi0gKiBAYWRkciBhcmd1bWVudHMgb2YgdGhl IGZvbGxvd2luZyBpbmxpbmUgZnVuY3Rpb25zIGFzICJtIiBhbmQgIittIiBvcGVyYW5kcwotICog dG8gdGhlIGFzc2VtYmx5LiBUaGUgQHNpemUgcGFyYW1ldGVyIHNob3VsZCBiZSBhIGNvbnN0YW50 IHRvIHN1cHBvcnQKLSAqIGNvbXBpbGVycyBzdWNoIGFzIGNsYW5nIHdoaWNoIGRvIG5vdCBzdXBw b3J0IFZMQS4gQ3JlYXRlIHR5cGVkZWZzIGJlY2F1c2UKLSAqIEMrKyBkb2VzIG5vdCBhbGxvdyB0 eXBlcyBiZSBkZWZpbmVkIGluIGNhc3RzLgotICovCi0KLXR5cGVkZWYgc3RydWN0IHsgY2hhciB2 WzRdOyB9IF9faHBfNDsKLXR5cGVkZWYgc3RydWN0IHsgY2hhciB2WzhdOyB9IF9faHBfODsKLQot I2RlZmluZSBfX2hwKHNpemUsIHgpCSgoX19ocF8jI3NpemUgKikoeCkpCi0KLS8qIHhjaGcgKi8K LQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKLXVuc2lnbmVk IGxvbmcgX3VhdG9taWNfZXhjaGFuZ2Uodm9sYXRpbGUgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9u ZyB2YWwsIGludCBsZW4pCi17Ci0Jc3dpdGNoIChsZW4pIHsKLQljYXNlIDQ6Ci0JewotCQl1bnNp Z25lZCBpbnQgb2xkX3ZhbDsKLQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCSIwOgljcyAl MCwlMiwiIE1FTU9QX1JFRiglMykgIlxuIgotCQkJIglicmMgNCwwYlxuIgotCQkJOiAiPSZyIiAo b2xkX3ZhbCksIE1FTU9QX09VVCAoX19ocCg0LCBhZGRyKSkKLQkJCTogInIiICh2YWwpLCBNRU1P UF9JTiAoX19ocCg0LCBhZGRyKSkKLQkJCTogIm1lbW9yeSIsICJjYyIpOwotCQlyZXR1cm4gb2xk X3ZhbDsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0KQotCWNhc2UgODoKLQl7Ci0J CXVuc2lnbmVkIGxvbmcgb2xkX3ZhbDsKLQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCSIw Ogljc2cgJTAsJTIsIiBNRU1PUF9SRUYoJTMpICJcbiIKLQkJCSIJYnJjIDQsMGJcbiIKLQkJCTog Ij0mciIgKG9sZF92YWwpLCBNRU1PUF9PVVQgKF9faHAoOCwgYWRkcikpCi0JCQk6ICJyIiAodmFs KSwgTUVNT1BfSU4gKF9faHAoOCwgYWRkcikpCi0JCQk6ICJtZW1vcnkiLCAiY2MiKTsKLQkJcmV0 dXJuIG9sZF92YWw7Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJX19hc21fXyBfX3ZvbGF0aWxl X18oIi5sb25nCTB4ZDAwZDAwIik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgdWF0 b21pY194Y2hnKGFkZHIsIHYpCQkJCQkJICAgIFwKLQkoX190eXBlb2ZfXygqKGFkZHIpKSkgX3Vh dG9taWNfZXhjaGFuZ2UoKGFkZHIpLAkJCSAgICBcCi0JCQkJCQljYWFfY2FzdF9sb25nX2tlZXBf c2lnbih2KSwgXAotCQkJCQkJc2l6ZW9mKCooYWRkcikpKQotCi0vKiBjbXB4Y2hnICovCi0KLXN0 YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi11bnNpZ25lZCBsb25n IF91YXRvbWljX2NtcHhjaGcodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBvbGQsCi0JCQkgICAg ICAgdW5zaWduZWQgbG9uZyBfbmV3LCBpbnQgbGVuKQotewotCXN3aXRjaCAobGVuKSB7Ci0JY2Fz ZSA0OgotCXsKLQkJdW5zaWduZWQgaW50IG9sZF92YWwgPSAodW5zaWduZWQgaW50KW9sZDsKLQot CQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCSIJY3MgJTAsJTIsIiBNRU1PUF9SRUYoJTMpICJc biIKLQkJCTogIityIiAob2xkX3ZhbCksIE1FTU9QX09VVCAoX19ocCg0LCBhZGRyKSkKLQkJCTog InIiIChfbmV3KSwgTUVNT1BfSU4gKF9faHAoNCwgYWRkcikpCi0JCQk6ICJtZW1vcnkiLCAiY2Mi KTsKLQkJcmV0dXJuIG9sZF92YWw7Ci0JfQotI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkK LQljYXNlIDg6Ci0JewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJCSIJY3NnICUwLCUyLCIg TUVNT1BfUkVGKCUzKSAiXG4iCi0JCQk6ICIrciIgKG9sZCksIE1FTU9QX09VVCAoX19ocCg4LCBh ZGRyKSkKLQkJCTogInIiIChfbmV3KSwgTUVNT1BfSU4gKF9faHAoOCwgYWRkcikpCi0JCQk6ICJt ZW1vcnkiLCAiY2MiKTsKLQkJcmV0dXJuIG9sZDsKLQl9Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlf X2FzbV9fIF9fdm9sYXRpbGVfXygiLmxvbmcJMHhkMDBkMDAiKTsKLQl9Ci0KLQlyZXR1cm4gMDsK LX0KLQotI2RlZmluZSB1YXRvbWljX2NtcHhjaGcoYWRkciwgb2xkLCBfbmV3KQkJCQkgICAgIFwK LQkoX190eXBlb2ZfXygqKGFkZHIpKSkgX3VhdG9taWNfY21weGNoZygoYWRkciksCQkJICAgICBc Ci0JCQkJCSAgICAgICBjYWFfY2FzdF9sb25nX2tlZXBfc2lnbihvbGQpLCBcCi0JCQkJCSAgICAg ICBjYWFfY2FzdF9sb25nX2tlZXBfc2lnbihfbmV3KSxcCi0JCQkJCSAgICAgICBzaXplb2YoKihh ZGRyKSkpCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNpbmNsdWRlIDx1cmN1 L3VhdG9taWMvZ2VuZXJpYy5oPgotCi0jZW5kaWYgLyogX1VSQ1VfVUFUT01JQ19BUkNIX1MzOTBf SCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91cmN1L3VhdG9taWMvc3BhcmM2NC5oIGIvaW5jbHVk ZS91cmN1L3VhdG9taWMvc3BhcmM2NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh OWYyNzk1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvdXJjdS91YXRvbWljL3NwYXJjNjQuaAorKysg L2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLSNpZm5kZWYgX1VSQ1VfQVJDSF9VQVRPTUlDX1NQ QVJDNjRfSAotI2RlZmluZSBfVVJDVV9BUkNIX1VBVE9NSUNfU1BBUkM2NF9ICi0KLS8qCi0gKiBD b3B5cmlnaHQgKGMpIDE5OTEtMTk5NCBieSBYZXJveCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBTaWxpY29uIEdyYXBoaWNz LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDAzIGJ5IEhl d2xldHQtUGFja2FyZCBDb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0 IChjKSAyMDA5ICAgICAgTWF0aGlldSBEZXNub3llcnMKLSAqCi0gKiBUSElTIE1BVEVSSUFMIElT IFBST1ZJREVEIEFTIElTLCBXSVRIIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkgRVhQUkVTU0VECi0g KiBPUiBJTVBMSUVELiAgQU5ZIFVTRSBJUyBBVCBZT1VSIE9XTiBSSVNLLgotICoKLSAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlIG9yIGNvcHkgdGhpcyBwcm9ncmFtCi0gKiBm b3IgYW55IHB1cnBvc2UsICBwcm92aWRlZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWluZWQg b24gYWxsIGNvcGllcy4KLSAqIFBlcm1pc3Npb24gdG8gbW9kaWZ5IHRoZSBjb2RlIGFuZCB0byBk aXN0cmlidXRlIG1vZGlmaWVkIGNvZGUgaXMgZ3JhbnRlZCwKLSAqIHByb3ZpZGVkIHRoZSBhYm92 ZSBub3RpY2VzIGFyZSByZXRhaW5lZCwgYW5kIGEgbm90aWNlIHRoYXQgdGhlIGNvZGUgd2FzCi0g KiBtb2RpZmllZCBpcyBpbmNsdWRlZCB3aXRoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLgot ICoKLSAqIENvZGUgaW5zcGlyZWQgZnJvbSBsaWJ1YXRvbWljX29wcy0xLjIsIGluaGVyaXRlZCBp biBwYXJ0IGZyb20gdGhlCi0gKiBCb2VobS1EZW1lcnMtV2Vpc2VyIGNvbnNlcnZhdGl2ZSBnYXJi YWdlIGNvbGxlY3Rvci4KLSAqLwotCi0jaW5jbHVkZSA8dXJjdS9jb21waWxlci5oPgotI2luY2x1 ZGUgPHVyY3Uvc3lzdGVtLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0j ZW5kaWYKLQotLyogY21weGNoZyAqLwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFs d2F5c19pbmxpbmUpKQotdW5zaWduZWQgbG9uZyBfdWF0b21pY19jbXB4Y2hnKHZvaWQgKmFkZHIs IHVuc2lnbmVkIGxvbmcgb2xkLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBfbmV3LCBpbnQgbGVu KQotewotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSA0OgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxl X18gKAotCQkJIm1lbWJhciAjU3RvcmVMb2FkIHwgI0xvYWRMb2FkXG5cdCIKLSAgICAgICAgICAg ICAgICAgICAgICAgICJjYXMgWyUxXSwlMiwlMFxuXHQiCi0gICAgICAgICAgICAgICAgICAgICAg ICAibWVtYmFyICNTdG9yZUxvYWQgfCAjU3RvcmVTdG9yZVxuXHQiCi0gICAgICAgICAgICAgICAg ICAgICAgICA6ICIrJnIiIChfbmV3KQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIgKGFk ZHIpLCAiciIgKG9sZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwotCi0J CXJldHVybiBfbmV3OwotCX0KLSNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCi0JY2FzZSA4 OgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkJIm1lbWJhciAjU3RvcmVMb2FkIHwg I0xvYWRMb2FkXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICJjYXN4IFslMV0sJTIsJTBc blx0IgotICAgICAgICAgICAgICAgICAgICAgICAgIm1lbWJhciAjU3RvcmVMb2FkIHwgI1N0b3Jl U3RvcmVcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgOiAiKyZyIiAoX25ldykKLSAgICAg ICAgICAgICAgICAgICAgICAgIDogInIiIChhZGRyKSwgInIiIChvbGQpCi0gICAgICAgICAgICAg ICAgICAgICAgICA6ICJtZW1vcnkiKTsKLQotCQlyZXR1cm4gX25ldzsKLQl9Ci0jZW5kaWYKLQl9 Ci0JX19idWlsdGluX3RyYXAoKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0jZGVmaW5lIHVhdG9taWNf Y21weGNoZyhhZGRyLCBvbGQsIF9uZXcpCQkJCSAgICAgICBcCi0JKChfX3R5cGVvZl9fKCooYWRk cikpKSBfdWF0b21pY19jbXB4Y2hnKChhZGRyKSwJCQkgICAgICAgXAotCQkJCQkJY2FhX2Nhc3Rf bG9uZ19rZWVwX3NpZ24ob2xkKSwgIFwKLQkJCQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKF9u ZXcpLCBcCi0JCQkJCQlzaXplb2YoKihhZGRyKSkpKQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0K LSNlbmRpZgotCi0jaW5jbHVkZSA8dXJjdS91YXRvbWljL2dlbmVyaWMuaD4KLQotI2VuZGlmIC8q IF9VUkNVX0FSQ0hfVUFUT01JQ19QUENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91cmN1L3Vh dG9taWMvdGlsZS5oIGIvaW5jbHVkZS91cmN1L3VhdG9taWMvdGlsZS5oCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCA4MzBmMjYwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvdXJjdS91YXRv bWljL3RpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLSNpZm5kZWYgX1VSQ1Vf QVJDSF9VQVRPTUlDX1RJTEVfSAotI2RlZmluZSBfVVJDVV9BUkNIX1VBVE9NSUNfVElMRV9ICi0K LS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTEtMTk5NCBieSBYZXJveCBDb3Jwb3JhdGlvbi4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBTaWxpY29u IEdyYXBoaWNzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMTk5OS0y MDA0IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCi0gKiBDb3B5cmln aHQgKGMpIDIwMDktMjAxNSBNYXRoaWV1IERlc25veWVycwotICogQ29weXJpZ2h0IChjKSAyMDEw ICAgICAgUGF1bCBFLiBNY0tlbm5leSwgSUJNIENvcnBvcmF0aW9uCi0gKgkJCSAgIChBZGFwdGVk IGZyb20gdWF0b21pY19hcmNoX3BwYy5oKQotICoKLSAqIFRISVMgTUFURVJJQUwgSVMgUFJPVklE RUQgQVMgSVMsIFdJVEggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWSBFWFBSRVNTRUQKLSAqIE9SIElN UExJRUQuICBBTlkgVVNFIElTIEFUIFlPVVIgT1dOIFJJU0suCi0gKgotICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCB0byB1c2Ugb3IgY29weSB0aGlzIHByb2dyYW0KLSAqIGZvciBhbnkg cHVycG9zZSwgIHByb3ZpZGVkIHRoZSBhYm92ZSBub3RpY2VzIGFyZSByZXRhaW5lZCBvbiBhbGwg Y29waWVzLgotICogUGVybWlzc2lvbiB0byBtb2RpZnkgdGhlIGNvZGUgYW5kIHRvIGRpc3RyaWJ1 dGUgbW9kaWZpZWQgY29kZSBpcyBncmFudGVkLAotICogcHJvdmlkZWQgdGhlIGFib3ZlIG5vdGlj ZXMgYXJlIHJldGFpbmVkLCBhbmQgYSBub3RpY2UgdGhhdCB0aGUgY29kZSB3YXMKLSAqIG1vZGlm aWVkIGlzIGluY2x1ZGVkIHdpdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UuCi0gKgotICog Q29kZSBpbnNwaXJlZCBmcm9tIGxpYnVhdG9taWNfb3BzLTEuMiwgaW5oZXJpdGVkIGluIHBhcnQg ZnJvbSB0aGUKLSAqIEJvZWhtLURlbWVycy1XZWlzZXIgY29uc2VydmF0aXZlIGdhcmJhZ2UgY29s bGVjdG9yLgotICovCi0KLSNpbmNsdWRlIDx1cmN1L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8dXJj dS9zeXN0ZW0uaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgot Ci0jZGVmaW5lIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCi0jZGVmaW5lIFVBVE9NSUNfSEFTX0FU T01JQ19TSE9SVAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jaW5jbHVkZSA8 dXJjdS91YXRvbWljL2dlbmVyaWMuaD4KLQotI2VuZGlmIC8qIF9VUkNVX0FSQ0hfVUFUT01JQ19U SUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXJjdS91YXRvbWljL3g4Ni5oIGIvaW5jbHVk ZS91cmN1L3VhdG9taWMveDg2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MTY5 NjMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS91cmN1L3VhdG9taWMveDg2LmgKKysrIC9kZXYvbnVs bApAQCAtMSw2NDYgKzAsMCBAQAotI2lmbmRlZiBfVVJDVV9BUkNIX1VBVE9NSUNfWDg2X0gKLSNk ZWZpbmUgX1VSQ1VfQVJDSF9VQVRPTUlDX1g4Nl9ICi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5 OTEtMTk5NCBieSBYZXJveCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD b3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBTaWxpY29uIEdyYXBoaWNzLiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA0IEhld2xldHQtUGFja2FyZCBEZXZl bG9wbWVudCBDb21wYW55LCBMLlAuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgICAgICBNYXRoaWV1 IERlc25veWVycwotICoKLSAqIFRISVMgTUFURVJJQUwgSVMgUFJPVklERUQgQVMgSVMsIFdJVEgg QUJTT0xVVEVMWSBOTyBXQVJSQU5UWSBFWFBSRVNTRUQKLSAqIE9SIElNUExJRUQuICBBTlkgVVNF IElTIEFUIFlPVVIgT1dOIFJJU0suCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCB0byB1c2Ugb3IgY29weSB0aGlzIHByb2dyYW0KLSAqIGZvciBhbnkgcHVycG9zZSwgIHByb3Zp ZGVkIHRoZSBhYm92ZSBub3RpY2VzIGFyZSByZXRhaW5lZCBvbiBhbGwgY29waWVzLgotICogUGVy bWlzc2lvbiB0byBtb2RpZnkgdGhlIGNvZGUgYW5kIHRvIGRpc3RyaWJ1dGUgbW9kaWZpZWQgY29k ZSBpcyBncmFudGVkLAotICogcHJvdmlkZWQgdGhlIGFib3ZlIG5vdGljZXMgYXJlIHJldGFpbmVk LCBhbmQgYSBub3RpY2UgdGhhdCB0aGUgY29kZSB3YXMKLSAqIG1vZGlmaWVkIGlzIGluY2x1ZGVk IHdpdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UuCi0gKgotICogQ29kZSBpbnNwaXJlZCBm cm9tIGxpYnVhdG9taWNfb3BzLTEuMiwgaW5oZXJpdGVkIGluIHBhcnQgZnJvbSB0aGUKLSAqIEJv ZWhtLURlbWVycy1XZWlzZXIgY29uc2VydmF0aXZlIGdhcmJhZ2UgY29sbGVjdG9yLgotICovCi0K LSNpbmNsdWRlIDx1cmN1L2FyY2guaD4KLSNpbmNsdWRlIDx1cmN1L2NvbmZpZy5oPgotI2luY2x1 ZGUgPHVyY3UvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDx1cmN1L3N5c3RlbS5oPgotCi0jZGVmaW5l IFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCi0jZGVmaW5lIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9S VAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8qCi0gKiBE ZXJpdmVkIGZyb20gQU9fY29tcGFyZV9hbmRfc3dhcCgpIGFuZCBBT190ZXN0X2FuZF9zZXRfZnVs bCgpLgotICovCi0KLS8qCi0gKiBUaGUgX19ocCgpIG1hY3JvIGNhc3RzIHRoZSB2b2lkIHBvaW50 ZXIgQHggdG8gYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlCi0gKiBjb250YWluaW5nIGFuIGFycmF5 IG9mIGNoYXIgb2YgdGhlIHNwZWNpZmllZCBzaXplLiBUaGlzIGFsbG93cyBwYXNzaW5nIHRoZQot ICogQGFkZHIgYXJndW1lbnRzIG9mIHRoZSBmb2xsb3dpbmcgaW5saW5lIGZ1bmN0aW9ucyBhcyAi bSIgYW5kICIrbSIgb3BlcmFuZHMKLSAqIHRvIHRoZSBhc3NlbWJseS4gVGhlIEBzaXplIHBhcmFt ZXRlciBzaG91bGQgYmUgYSBjb25zdGFudCB0byBzdXBwb3J0Ci0gKiBjb21waWxlcnMgc3VjaCBh cyBjbGFuZyB3aGljaCBkbyBub3Qgc3VwcG9ydCBWTEEuIENyZWF0ZSB0eXBlZGVmcyBiZWNhdXNl Ci0gKiBDKysgZG9lcyBub3QgYWxsb3cgdHlwZXMgYmUgZGVmaW5lZCBpbiBjYXN0cy4KLSAqLwot Ci10eXBlZGVmIHN0cnVjdCB7IGNoYXIgdlsxXTsgfSBfX2hwXzE7Ci10eXBlZGVmIHN0cnVjdCB7 IGNoYXIgdlsyXTsgfSBfX2hwXzI7Ci10eXBlZGVmIHN0cnVjdCB7IGNoYXIgdls0XTsgfSBfX2hw XzQ7Ci10eXBlZGVmIHN0cnVjdCB7IGNoYXIgdls4XTsgfSBfX2hwXzg7Ci0KLSNkZWZpbmUgX19o cChzaXplLCB4KQkoKF9faHBfIyNzaXplICopKHgpKQotCi0jZGVmaW5lIF91YXRvbWljX3NldChh ZGRyLCB2KQkoKHZvaWQpIENNTV9TVE9SRV9TSEFSRUQoKihhZGRyKSwgKHYpKSkKLQotLyogY21w eGNoZyAqLwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQot dW5zaWduZWQgbG9uZyBfX3VhdG9taWNfY21weGNoZyh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25n IG9sZCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgX25ldywgaW50IGxlbikKLXsKLQlzd2l0Y2gg KGxlbikgewotCWNhc2UgMToKLQl7Ci0JCXVuc2lnbmVkIGNoYXIgcmVzdWx0ID0gb2xkOwotCi0J CV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibG9jazsgY21weGNoZ2IgJTIsICUxIgotCQkJOiAi K2EiKHJlc3VsdCksICIrbSIoKl9faHAoMSwgYWRkcikpCi0JCQk6ICJxIigodW5zaWduZWQgY2hh cilfbmV3KQotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCWNhc2UgMjoK LQl7Ci0JCXVuc2lnbmVkIHNob3J0IHJlc3VsdCA9IG9sZDsKLQotCQlfX2FzbV9fIF9fdm9sYXRp bGVfXygKLQkJImxvY2s7IGNtcHhjaGd3ICUyLCAlMSIKLQkJCTogIithIihyZXN1bHQpLCAiK20i KCpfX2hwKDIsIGFkZHIpKQotCQkJOiAiciIoKHVuc2lnbmVkIHNob3J0KV9uZXcpCi0JCQk6ICJt ZW1vcnkiKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JY2FzZSA0OgotCXsKLQkJdW5zaWduZWQg aW50IHJlc3VsdCA9IG9sZDsKLQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxvY2s7IGNt cHhjaGdsICUyLCAlMSIKLQkJCTogIithIihyZXN1bHQpLCAiK20iKCpfX2hwKDQsIGFkZHIpKQot CQkJOiAiciIoKHVuc2lnbmVkIGludClfbmV3KQotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybiBy ZXN1bHQ7Ci0JfQotI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKLQljYXNlIDg6Ci0Jewot CQl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9sZDsKLQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygK LQkJImxvY2s7IGNtcHhjaGdxICUyLCAlMSIKLQkJCTogIithIihyZXN1bHQpLCAiK20iKCpfX2hw KDgsIGFkZHIpKQotCQkJOiAiciIoKHVuc2lnbmVkIGxvbmcpX25ldykKLQkJCTogIm1lbW9yeSIp OwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLSNlbmRpZgotCX0KLQkvKgotCSAqIGdlbmVyYXRlIGFu IGlsbGVnYWwgaW5zdHJ1Y3Rpb24uIENhbm5vdCBjYXRjaCB0aGlzIHdpdGgKLQkgKiBsaW5rZXIg dHJpY2tzIHdoZW4gb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuCi0JICovCi0JX19hc21fXyBf X3ZvbGF0aWxlX18oInVkMiIpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIF91YXRvbWljX2Nt cHhjaGcoYWRkciwgb2xkLCBfbmV3KQkJCQkgICAgICBcCi0JKChfX3R5cGVvZl9fKCooYWRkcikp KSBfX3VhdG9taWNfY21weGNoZygoYWRkciksCQkgICAgICBcCi0JCQkJCQljYWFfY2FzdF9sb25n X2tlZXBfc2lnbihvbGQpLCBcCi0JCQkJCQljYWFfY2FzdF9sb25nX2tlZXBfc2lnbihfbmV3KSxc Ci0JCQkJCQlzaXplb2YoKihhZGRyKSkpKQotCi0vKiB4Y2hnICovCi0KLXN0YXRpYyBpbmxpbmUg X19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi11bnNpZ25lZCBsb25nIF9fdWF0b21pY19l eGNoYW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxlbikKLXsKLQkvKiBO b3RlOiB0aGUgInhjaGciIGluc3RydWN0aW9uIGRvZXMgbm90IG5lZWQgYSAibG9jayIgcHJlZml4 LiAqLwotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCXsKLQkJdW5zaWduZWQgY2hhciByZXN1 bHQ7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkieGNoZ2IgJTAsICUxIgotCQkJOiAiPXEi KHJlc3VsdCksICIrbSIoKl9faHAoMSwgYWRkcikpCi0JCQk6ICIwIiAoKHVuc2lnbmVkIGNoYXIp dmFsKQotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCWNhc2UgMjoKLQl7 Ci0JCXVuc2lnbmVkIHNob3J0IHJlc3VsdDsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJ4 Y2hndyAlMCwgJTEiCi0JCQk6ICI9ciIocmVzdWx0KSwgIittIigqX19ocCgyLCBhZGRyKSkKLQkJ CTogIjAiICgodW5zaWduZWQgc2hvcnQpdmFsKQotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybiBy ZXN1bHQ7Ci0JfQotCWNhc2UgNDoKLQl7Ci0JCXVuc2lnbmVkIGludCByZXN1bHQ7Ci0JCV9fYXNt X18gX192b2xhdGlsZV9fKAotCQkieGNoZ2wgJTAsICUxIgotCQkJOiAiPXIiKHJlc3VsdCksICIr bSIoKl9faHAoNCwgYWRkcikpCi0JCQk6ICIwIiAoKHVuc2lnbmVkIGludCl2YWwpCi0JCQk6ICJt ZW1vcnkiKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09 IDY0KQotCWNhc2UgODoKLQl7Ci0JCXVuc2lnbmVkIGxvbmcgcmVzdWx0OwotCQlfX2FzbV9fIF9f dm9sYXRpbGVfXygKLQkJInhjaGdxICUwLCAlMSIKLQkJCTogIj1yIihyZXN1bHQpLCAiK20iKCpf X2hwKDgsIGFkZHIpKQotCQkJOiAiMCIgKCh1bnNpZ25lZCBsb25nKXZhbCkKLQkJCTogIm1lbW9y eSIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLSNlbmRpZgotCX0KLQkvKgotCSAqIGdlbmVyYXRl IGFuIGlsbGVnYWwgaW5zdHJ1Y3Rpb24uIENhbm5vdCBjYXRjaCB0aGlzIHdpdGgKLQkgKiBsaW5r ZXIgdHJpY2tzIHdoZW4gb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuCi0JICovCi0JX19hc21f XyBfX3ZvbGF0aWxlX18oInVkMiIpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIF91YXRvbWlj X3hjaGcoYWRkciwgdikJCQkJCQkgICAgICBcCi0JKChfX3R5cGVvZl9fKCooYWRkcikpKSBfX3Vh dG9taWNfZXhjaGFuZ2UoKGFkZHIpLAkJICAgICAgXAotCQkJCQkJY2FhX2Nhc3RfbG9uZ19rZWVw X3NpZ24odiksICAgXAotCQkJCQkJc2l6ZW9mKCooYWRkcikpKSkKLQotLyogdWF0b21pY19hZGRf cmV0dXJuICovCi0KLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkp Ci11bnNpZ25lZCBsb25nIF9fdWF0b21pY19hZGRfcmV0dXJuKHZvaWQgKmFkZHIsIHVuc2lnbmVk IGxvbmcgdmFsLAotCQkJCSBpbnQgbGVuKQotewotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgot CXsKLQkJdW5zaWduZWQgY2hhciByZXN1bHQgPSB2YWw7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxl X18oCi0JCSJsb2NrOyB4YWRkYiAlMSwgJTAiCi0JCQk6ICIrbSIoKl9faHAoMSwgYWRkcikpLCAi K3EiIChyZXN1bHQpCi0JCQk6Ci0JCQk6ICJtZW1vcnkiKTsKLQkJcmV0dXJuIHJlc3VsdCArICh1 bnNpZ25lZCBjaGFyKXZhbDsKLQl9Ci0JY2FzZSAyOgotCXsKLQkJdW5zaWduZWQgc2hvcnQgcmVz dWx0ID0gdmFsOwotCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibG9jazsgeGFkZHcgJTEs ICUwIgotCQkJOiAiK20iKCpfX2hwKDIsIGFkZHIpKSwgIityIiAocmVzdWx0KQotCQkJOgotCQkJ OiAibWVtb3J5Iik7Ci0JCXJldHVybiByZXN1bHQgKyAodW5zaWduZWQgc2hvcnQpdmFsOwotCX0K LQljYXNlIDQ6Ci0JewotCQl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gdmFsOwotCi0JCV9fYXNtX18g X192b2xhdGlsZV9fKAotCQkibG9jazsgeGFkZGwgJTEsICUwIgotCQkJOiAiK20iKCpfX2hwKDQs IGFkZHIpKSwgIityIiAocmVzdWx0KQotCQkJOgotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybiBy ZXN1bHQgKyAodW5zaWduZWQgaW50KXZhbDsKLQl9Ci0jaWYgKENBQV9CSVRTX1BFUl9MT05HID09 IDY0KQotCWNhc2UgODoKLQl7Ci0JCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gdmFsOwotCi0JCV9f YXNtX18gX192b2xhdGlsZV9fKAotCQkibG9jazsgeGFkZHEgJTEsICUwIgotCQkJOiAiK20iKCpf X2hwKDgsIGFkZHIpKSwgIityIiAocmVzdWx0KQotCQkJOgotCQkJOiAibWVtb3J5Iik7Ci0JCXJl dHVybiByZXN1bHQgKyAodW5zaWduZWQgbG9uZyl2YWw7Ci0JfQotI2VuZGlmCi0JfQotCS8qCi0J ICogZ2VuZXJhdGUgYW4gaWxsZWdhbCBpbnN0cnVjdGlvbi4gQ2Fubm90IGNhdGNoIHRoaXMgd2l0 aAotCSAqIGxpbmtlciB0cmlja3Mgd2hlbiBvcHRpbWl6YXRpb25zIGFyZSBkaXNhYmxlZC4KLQkg Ki8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygidWQyIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZp bmUgX3VhdG9taWNfYWRkX3JldHVybihhZGRyLCB2KQkJCQkJICAgIFwKLQkoKF9fdHlwZW9mX18o KihhZGRyKSkpIF9fdWF0b21pY19hZGRfcmV0dXJuKChhZGRyKSwJCSAgICBcCi0JCQkJCQljYWFf Y2FzdF9sb25nX2tlZXBfc2lnbih2KSwgXAotCQkJCQkJc2l6ZW9mKCooYWRkcikpKSkKLQotLyog dWF0b21pY19hbmQgKi8KLQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5s aW5lKSkKLXZvaWQgX191YXRvbWljX2FuZCh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwg aW50IGxlbikKLXsKLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQl7Ci0JCV9fYXNtX18gX192 b2xhdGlsZV9fKAotCQkibG9jazsgYW5kYiAlMSwgJTAiCi0JCQk6ICI9bSIoKl9faHAoMSwgYWRk cikpCi0JCQk6ICJpcSIgKCh1bnNpZ25lZCBjaGFyKXZhbCkKLQkJCTogIm1lbW9yeSIpOwotCQly ZXR1cm47Ci0JfQotCWNhc2UgMjoKLQl7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibG9j azsgYW5kdyAlMSwgJTAiCi0JCQk6ICI9bSIoKl9faHAoMiwgYWRkcikpCi0JCQk6ICJpciIgKCh1 bnNpZ25lZCBzaG9ydCl2YWwpCi0JCQk6ICJtZW1vcnkiKTsKLQkJcmV0dXJuOwotCX0KLQljYXNl IDQ6Ci0JewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxvY2s7IGFuZGwgJTEsICUwIgot CQkJOiAiPW0iKCpfX2hwKDQsIGFkZHIpKQotCQkJOiAiaXIiICgodW5zaWduZWQgaW50KXZhbCkK LQkJCTogIm1lbW9yeSIpOwotCQlyZXR1cm47Ci0JfQotI2lmIChDQUFfQklUU19QRVJfTE9ORyA9 PSA2NCkKLQljYXNlIDg6Ci0JewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxvY2s7IGFu ZHEgJTEsICUwIgotCQkJOiAiPW0iKCpfX2hwKDgsIGFkZHIpKQotCQkJOiAiZXIiICgodW5zaWdu ZWQgbG9uZyl2YWwpCi0JCQk6ICJtZW1vcnkiKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCX0K LQkvKgotCSAqIGdlbmVyYXRlIGFuIGlsbGVnYWwgaW5zdHJ1Y3Rpb24uIENhbm5vdCBjYXRjaCB0 aGlzIHdpdGgKLQkgKiBsaW5rZXIgdHJpY2tzIHdoZW4gb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJs ZWQuCi0JICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oInVkMiIpOwotCXJldHVybjsKLX0KLQot I2RlZmluZSBfdWF0b21pY19hbmQoYWRkciwgdikJCQkJCQkgICBcCi0JKF9fdWF0b21pY19hbmQo KGFkZHIpLCBjYWFfY2FzdF9sb25nX2tlZXBfc2lnbih2KSwgc2l6ZW9mKCooYWRkcikpKSkKLQot LyogdWF0b21pY19vciAqLwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19p bmxpbmUpKQotdm9pZCBfX3VhdG9taWNfb3Iodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWws IGludCBsZW4pCi17Ci0Jc3dpdGNoIChsZW4pIHsKLQljYXNlIDE6Ci0JewotCQlfX2FzbV9fIF9f dm9sYXRpbGVfXygKLQkJImxvY2s7IG9yYiAlMSwgJTAiCi0JCQk6ICI9bSIoKl9faHAoMSwgYWRk cikpCi0JCQk6ICJpcSIgKCh1bnNpZ25lZCBjaGFyKXZhbCkKLQkJCTogIm1lbW9yeSIpOwotCQly ZXR1cm47Ci0JfQotCWNhc2UgMjoKLQl7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibG9j azsgb3J3ICUxLCAlMCIKLQkJCTogIj1tIigqX19ocCgyLCBhZGRyKSkKLQkJCTogImlyIiAoKHVu c2lnbmVkIHNob3J0KXZhbCkKLQkJCTogIm1lbW9yeSIpOwotCQlyZXR1cm47Ci0JfQotCWNhc2Ug NDoKLQl7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibG9jazsgb3JsICUxLCAlMCIKLQkJ CTogIj1tIigqX19ocCg0LCBhZGRyKSkKLQkJCTogImlyIiAoKHVuc2lnbmVkIGludCl2YWwpCi0J CQk6ICJtZW1vcnkiKTsKLQkJcmV0dXJuOwotCX0KLSNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0g NjQpCi0JY2FzZSA4OgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJsb2NrOyBvcnEg JTEsICUwIgotCQkJOiAiPW0iKCpfX2hwKDgsIGFkZHIpKQotCQkJOiAiZXIiICgodW5zaWduZWQg bG9uZyl2YWwpCi0JCQk6ICJtZW1vcnkiKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCX0KLQkv KgotCSAqIGdlbmVyYXRlIGFuIGlsbGVnYWwgaW5zdHJ1Y3Rpb24uIENhbm5vdCBjYXRjaCB0aGlz IHdpdGgKLQkgKiBsaW5rZXIgdHJpY2tzIHdoZW4gb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQu Ci0JICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oInVkMiIpOwotCXJldHVybjsKLX0KLQotI2Rl ZmluZSBfdWF0b21pY19vcihhZGRyLCB2KQkJCQkJCSAgIFwKLQkoX191YXRvbWljX29yKChhZGRy KSwgY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24odiksIHNpemVvZigqKGFkZHIpKSkpCi0KLS8qIHVh dG9taWNfYWRkICovCi0KLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGlu ZSkpCi12b2lkIF9fdWF0b21pY19hZGQodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsIGlu dCBsZW4pCi17Ci0Jc3dpdGNoIChsZW4pIHsKLQljYXNlIDE6Ci0JewotCQlfX2FzbV9fIF9fdm9s YXRpbGVfXygKLQkJImxvY2s7IGFkZGIgJTEsICUwIgotCQkJOiAiPW0iKCpfX2hwKDEsIGFkZHIp KQotCQkJOiAiaXEiICgodW5zaWduZWQgY2hhcil2YWwpCi0JCQk6ICJtZW1vcnkiKTsKLQkJcmV0 dXJuOwotCX0KLQljYXNlIDI6Ci0JewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxvY2s7 IGFkZHcgJTEsICUwIgotCQkJOiAiPW0iKCpfX2hwKDIsIGFkZHIpKQotCQkJOiAiaXIiICgodW5z aWduZWQgc2hvcnQpdmFsKQotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybjsKLQl9Ci0JY2FzZSA0 OgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJsb2NrOyBhZGRsICUxLCAlMCIKLQkJ CTogIj1tIigqX19ocCg0LCBhZGRyKSkKLQkJCTogImlyIiAoKHVuc2lnbmVkIGludCl2YWwpCi0J CQk6ICJtZW1vcnkiKTsKLQkJcmV0dXJuOwotCX0KLSNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0g NjQpCi0JY2FzZSA4OgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJsb2NrOyBhZGRx ICUxLCAlMCIKLQkJCTogIj1tIigqX19ocCg4LCBhZGRyKSkKLQkJCTogImVyIiAoKHVuc2lnbmVk IGxvbmcpdmFsKQotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQl9Ci0J LyoKLQkgKiBnZW5lcmF0ZSBhbiBpbGxlZ2FsIGluc3RydWN0aW9uLiBDYW5ub3QgY2F0Y2ggdGhp cyB3aXRoCi0JICogbGlua2VyIHRyaWNrcyB3aGVuIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVk LgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJ1ZDIiKTsKLQlyZXR1cm47Ci19Ci0KLSNk ZWZpbmUgX3VhdG9taWNfYWRkKGFkZHIsIHYpCQkJCQkJICAgXAotCShfX3VhdG9taWNfYWRkKChh ZGRyKSwgY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24odiksIHNpemVvZigqKGFkZHIpKSkpCi0KLQot LyogdWF0b21pY19pbmMgKi8KLQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNf aW5saW5lKSkKLXZvaWQgX191YXRvbWljX2luYyh2b2lkICphZGRyLCBpbnQgbGVuKQotewotCXN3 aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJs b2NrOyBpbmNiICUwIgotCQkJOiAiPW0iKCpfX2hwKDEsIGFkZHIpKQotCQkJOgotCQkJOiAibWVt b3J5Iik7Ci0JCXJldHVybjsKLQl9Ci0JY2FzZSAyOgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxl X18oCi0JCSJsb2NrOyBpbmN3ICUwIgotCQkJOiAiPW0iKCpfX2hwKDIsIGFkZHIpKQotCQkJOgot CQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybjsKLQl9Ci0JY2FzZSA0OgotCXsKLQkJX19hc21fXyBf X3ZvbGF0aWxlX18oCi0JCSJsb2NrOyBpbmNsICUwIgotCQkJOiAiPW0iKCpfX2hwKDQsIGFkZHIp KQotCQkJOgotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVybjsKLQl9Ci0jaWYgKENBQV9CSVRTX1BF Ul9MT05HID09IDY0KQotCWNhc2UgODoKLQl7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQki bG9jazsgaW5jcSAlMCIKLQkJCTogIj1tIigqX19ocCg4LCBhZGRyKSkKLQkJCToKLQkJCTogIm1l bW9yeSIpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JfQotCS8qIGdlbmVyYXRlIGFuIGlsbGVn YWwgaW5zdHJ1Y3Rpb24uIENhbm5vdCBjYXRjaCB0aGlzIHdpdGggbGlua2VyIHRyaWNrcwotCSAq IHdoZW4gb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQuICovCi0JX19hc21fXyBfX3ZvbGF0aWxl X18oInVkMiIpOwotCXJldHVybjsKLX0KLQotI2RlZmluZSBfdWF0b21pY19pbmMoYWRkcikJKF9f dWF0b21pY19pbmMoKGFkZHIpLCBzaXplb2YoKihhZGRyKSkpKQotCi0vKiB1YXRvbWljX2RlYyAq LwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQotdm9pZCBf X3VhdG9taWNfZGVjKHZvaWQgKmFkZHIsIGludCBsZW4pCi17Ci0Jc3dpdGNoIChsZW4pIHsKLQlj YXNlIDE6Ci0JewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxvY2s7IGRlY2IgJTAiCi0J CQk6ICI9bSIoKl9faHAoMSwgYWRkcikpCi0JCQk6Ci0JCQk6ICJtZW1vcnkiKTsKLQkJcmV0dXJu OwotCX0KLQljYXNlIDI6Ci0JewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxvY2s7IGRl Y3cgJTAiCi0JCQk6ICI9bSIoKl9faHAoMiwgYWRkcikpCi0JCQk6Ci0JCQk6ICJtZW1vcnkiKTsK LQkJcmV0dXJuOwotCX0KLQljYXNlIDQ6Ci0JewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJ ImxvY2s7IGRlY2wgJTAiCi0JCQk6ICI9bSIoKl9faHAoNCwgYWRkcikpCi0JCQk6Ci0JCQk6ICJt ZW1vcnkiKTsKLQkJcmV0dXJuOwotCX0KLSNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCi0J Y2FzZSA4OgotCXsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSJsb2NrOyBkZWNxICUwIgot CQkJOiAiPW0iKCpfX2hwKDgsIGFkZHIpKQotCQkJOgotCQkJOiAibWVtb3J5Iik7Ci0JCXJldHVy bjsKLQl9Ci0jZW5kaWYKLQl9Ci0JLyoKLQkgKiBnZW5lcmF0ZSBhbiBpbGxlZ2FsIGluc3RydWN0 aW9uLiBDYW5ub3QgY2F0Y2ggdGhpcyB3aXRoCi0JICogbGlua2VyIHRyaWNrcyB3aGVuIG9wdGlt aXphdGlvbnMgYXJlIGRpc2FibGVkLgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJ1ZDIi KTsKLQlyZXR1cm47Ci19Ci0KLSNkZWZpbmUgX3VhdG9taWNfZGVjKGFkZHIpCShfX3VhdG9taWNf ZGVjKChhZGRyKSwgc2l6ZW9mKCooYWRkcikpKSkKLQotI2lmZGVmIFVSQ1VfQVJDSF9YODZfTk9f Q0FTCi0KLS8qIEZvciBiYWNrd2FyZHMgY29tcGF0ICovCi0jZGVmaW5lIENPTkZJR19SQ1VfQ09N UEFUX0FSQ0ggMQotCi1leHRlcm4gaW50IF9fcmN1X2Nhc19hdmFpbDsKLWV4dGVybiBpbnQgX19y Y3VfY2FzX2luaXQodm9pZCk7Ci0KLSNkZWZpbmUgVUFUT01JQ19DT01QQVQoaW5zbikJCQkJCQkJ XAotCSgoY2FhX2xpa2VseShfX3JjdV9jYXNfYXZhaWwgPiAwKSkJCQkJCQlcCi0JPyAoX3VhdG9t aWNfIyNpbnNuKQkJCQkJCQlcCi0JCTogKChjYWFfdW5saWtlbHkoX19yY3VfY2FzX2F2YWlsIDwg MCkJCQkJXAotCQkJPyAoKF9fcmN1X2Nhc19pbml0KCkgPiAwKQkJCQlcCi0JCQkJPyAoX3VhdG9t aWNfIyNpbnNuKQkJCQlcCi0JCQkJOiAoY29tcGF0X3VhdG9taWNfIyNpbnNuKSkJCQlcCi0JCQk6 IChjb21wYXRfdWF0b21pY18jI2luc24pKSkpCi0KLS8qCi0gKiBXZSBsZWF2ZSB0aGUgcmV0dXJu IHZhbHVlIHNvIHdlIGRvbid0IGJyZWFrIHRoZSBBQkksIGJ1dCByZW1vdmUgdGhlCi0gKiByZXR1 cm4gdmFsdWUgZnJvbSB0aGUgQVBJLgotICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfY29tcGF0 X3VhdG9taWNfc2V0KHZvaWQgKmFkZHIsCi0JCQkJCSB1bnNpZ25lZCBsb25nIF9uZXcsIGludCBs ZW4pOwotI2RlZmluZSBjb21wYXRfdWF0b21pY19zZXQoYWRkciwgX25ldykJCQkJICAgICAJICAg ICAgIFwKLQkoKHZvaWQpIF9jb21wYXRfdWF0b21pY19zZXQoKGFkZHIpLAkJCQkgICAgICAgXAot CQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKF9uZXcpLAkJICAgICAgIFwKLQkJCQlzaXplb2Yo KihhZGRyKSkpKQotCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIF9jb21wYXRfdWF0b21pY194Y2hn KHZvaWQgKmFkZHIsCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBfbmV3LCBpbnQgbGVuKTsKLSNkZWZp bmUgY29tcGF0X3VhdG9taWNfeGNoZyhhZGRyLCBfbmV3KQkJCQkJICAgICAgIFwKLQkoKF9fdHlw ZW9mX18oKihhZGRyKSkpIF9jb21wYXRfdWF0b21pY194Y2hnKChhZGRyKSwJCSAgICAgICBcCi0J CQkJCQljYWFfY2FzdF9sb25nX2tlZXBfc2lnbihfbmV3KSwgXAotCQkJCQkJc2l6ZW9mKCooYWRk cikpKSkKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX2NvbXBhdF91YXRvbWljX2NtcHhjaGcodm9p ZCAqYWRkciwgdW5zaWduZWQgbG9uZyBvbGQsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBfbmV3 LCBpbnQgbGVuKTsKLSNkZWZpbmUgY29tcGF0X3VhdG9taWNfY21weGNoZyhhZGRyLCBvbGQsIF9u ZXcpCQkJCSAgICAgICBcCi0JKChfX3R5cGVvZl9fKCooYWRkcikpKSBfY29tcGF0X3VhdG9taWNf Y21weGNoZygoYWRkciksCQkgICAgICAgXAotCQkJCQkJY2FhX2Nhc3RfbG9uZ19rZWVwX3NpZ24o b2xkKSwgIFwKLQkJCQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKF9uZXcpLCBcCi0JCQkJCQlz aXplb2YoKihhZGRyKSkpKQotCi1leHRlcm4gdm9pZCBfY29tcGF0X3VhdG9taWNfYW5kKHZvaWQg KmFkZHIsIHVuc2lnbmVkIGxvbmcgX25ldywgaW50IGxlbik7Ci0jZGVmaW5lIGNvbXBhdF91YXRv bWljX2FuZChhZGRyLCB2KQkJCQkgICAgICAgXAotCShfY29tcGF0X3VhdG9taWNfYW5kKChhZGRy KSwJCQkJICAgICAgIFwKLQkJCWNhYV9jYXN0X2xvbmdfa2VlcF9zaWduKHYpLAkJICAgICAgIFwK LQkJCXNpemVvZigqKGFkZHIpKSkpCi0KLWV4dGVybiB2b2lkIF9jb21wYXRfdWF0b21pY19vcih2 b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIF9uZXcsIGludCBsZW4pOwotI2RlZmluZSBjb21wYXRf dWF0b21pY19vcihhZGRyLCB2KQkJCQkgICAgICAgXAotCShfY29tcGF0X3VhdG9taWNfb3IoKGFk ZHIpLAkJCQkgICAgICAgXAotCQkJICBjYWFfY2FzdF9sb25nX2tlZXBfc2lnbih2KSwJCSAgICAg ICBcCi0JCQkgIHNpemVvZigqKGFkZHIpKSkpCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIF9jb21w YXRfdWF0b21pY19hZGRfcmV0dXJuKHZvaWQgKmFkZHIsCi0JCQkJCQl1bnNpZ25lZCBsb25nIF9u ZXcsIGludCBsZW4pOwotI2RlZmluZSBjb21wYXRfdWF0b21pY19hZGRfcmV0dXJuKGFkZHIsIHYp CQkJICAgICAgICAgICAgXAotCSgoX190eXBlb2ZfXygqKGFkZHIpKSkgX2NvbXBhdF91YXRvbWlj X2FkZF9yZXR1cm4oKGFkZHIpLCAgICAgCSAgICBcCi0JCQkJCQljYWFfY2FzdF9sb25nX2tlZXBf c2lnbih2KSwgXAotCQkJCQkJc2l6ZW9mKCooYWRkcikpKSkKLQotI2RlZmluZSBjb21wYXRfdWF0 b21pY19hZGQoYWRkciwgdikJCQkJCSAgICAgICBcCi0JCSgodm9pZCljb21wYXRfdWF0b21pY19h ZGRfcmV0dXJuKChhZGRyKSwgKHYpKSkKLSNkZWZpbmUgY29tcGF0X3VhdG9taWNfaW5jKGFkZHIp CQkJCQkgICAgICAgXAotCQkoY29tcGF0X3VhdG9taWNfYWRkKChhZGRyKSwgMSkpCi0jZGVmaW5l IGNvbXBhdF91YXRvbWljX2RlYyhhZGRyKQkJCQkJICAgICAgIFwKLQkJKGNvbXBhdF91YXRvbWlj X2FkZCgoYWRkciksIC0xKSkKLQotI2Vsc2UKLSNkZWZpbmUgVUFUT01JQ19DT01QQVQoaW5zbikJ KF91YXRvbWljXyMjaW5zbikKLSNlbmRpZgotCi0vKiBSZWFkIGlzIGF0b21pYyBldmVuIGluIGNv bXBhdCBtb2RlICovCi0jZGVmaW5lIHVhdG9taWNfc2V0KGFkZHIsIHYpCQkJXAotCQlVQVRPTUlD X0NPTVBBVChzZXQoYWRkciwgdikpCi0KLSNkZWZpbmUgdWF0b21pY19jbXB4Y2hnKGFkZHIsIG9s ZCwgX25ldykJXAotCQlVQVRPTUlDX0NPTVBBVChjbXB4Y2hnKGFkZHIsIG9sZCwgX25ldykpCi0j ZGVmaW5lIHVhdG9taWNfeGNoZyhhZGRyLCB2KQkJCVwKLQkJVUFUT01JQ19DT01QQVQoeGNoZyhh ZGRyLCB2KSkKLQotI2RlZmluZSB1YXRvbWljX2FuZChhZGRyLCB2KQkJXAotCQlVQVRPTUlDX0NP TVBBVChhbmQoYWRkciwgdikpCi0jZGVmaW5lIGNtbV9zbXBfbWJfX2JlZm9yZV91YXRvbWljX2Fu ZCgpCWNtbV9iYXJyaWVyKCkKLSNkZWZpbmUgY21tX3NtcF9tYl9fYWZ0ZXJfdWF0b21pY19hbmQo KQkJY21tX2JhcnJpZXIoKQotCi0jZGVmaW5lIHVhdG9taWNfb3IoYWRkciwgdikJCVwKLQkJVUFU T01JQ19DT01QQVQob3IoYWRkciwgdikpCi0jZGVmaW5lIGNtbV9zbXBfbWJfX2JlZm9yZV91YXRv bWljX29yKCkJCWNtbV9iYXJyaWVyKCkKLSNkZWZpbmUgY21tX3NtcF9tYl9fYWZ0ZXJfdWF0b21p Y19vcigpCQljbW1fYmFycmllcigpCi0KLSNkZWZpbmUgdWF0b21pY19hZGRfcmV0dXJuKGFkZHIs IHYpCQlcCi0JCVVBVE9NSUNfQ09NUEFUKGFkZF9yZXR1cm4oYWRkciwgdikpCi0KLSNkZWZpbmUg dWF0b21pY19hZGQoYWRkciwgdikJVUFUT01JQ19DT01QQVQoYWRkKGFkZHIsIHYpKQotI2RlZmlu ZSBjbW1fc21wX21iX19iZWZvcmVfdWF0b21pY19hZGQoKQljbW1fYmFycmllcigpCi0jZGVmaW5l IGNtbV9zbXBfbWJfX2FmdGVyX3VhdG9taWNfYWRkKCkJCWNtbV9iYXJyaWVyKCkKLQotI2RlZmlu ZSB1YXRvbWljX2luYyhhZGRyKQlVQVRPTUlDX0NPTVBBVChpbmMoYWRkcikpCi0jZGVmaW5lIGNt bV9zbXBfbWJfX2JlZm9yZV91YXRvbWljX2luYygpCWNtbV9iYXJyaWVyKCkKLSNkZWZpbmUgY21t X3NtcF9tYl9fYWZ0ZXJfdWF0b21pY19pbmMoKQkJY21tX2JhcnJpZXIoKQotCi0jZGVmaW5lIHVh dG9taWNfZGVjKGFkZHIpCVVBVE9NSUNfQ09NUEFUKGRlYyhhZGRyKSkKLSNkZWZpbmUgY21tX3Nt cF9tYl9fYmVmb3JlX3VhdG9taWNfZGVjKCkJY21tX2JhcnJpZXIoKQotI2RlZmluZSBjbW1fc21w X21iX19hZnRlcl91YXRvbWljX2RlYygpCQljbW1fYmFycmllcigpCi0KLSNpZmRlZiBfX2NwbHVz cGx1cwotfQotI2VuZGlmCi0KLSNpbmNsdWRlIDx1cmN1L3VhdG9taWMvZ2VuZXJpYy5oPgotCi0j ZW5kaWYgLyogX1VSQ1VfQVJDSF9VQVRPTUlDX1g4Nl9IICovCi0tIAoyLjM5LjIKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmx0dG5nLWRldiBtYWlsaW5n IGxpc3QKbHR0bmctZGV2QGxpc3RzLmx0dG5nLm9yZwpodHRwczovL2xpc3RzLmx0dG5nLm9yZy9j Z2ktYmluL21haWxtYW4vbGlzdGluZm8vbHR0bmctZGV2Cg==