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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4AADFC77B70 for ; Mon, 10 Apr 2023 23:33:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229626AbjDJXdX (ORCPT ); Mon, 10 Apr 2023 19:33:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45444 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229591AbjDJXdW (ORCPT ); Mon, 10 Apr 2023 19:33:22 -0400 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4020E185; Mon, 10 Apr 2023 16:33:21 -0700 (PDT) Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 33ANVVci006187; Mon, 10 Apr 2023 23:32:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=qcppdkim1; bh=JWGCwAS2SPZcwfza4dJDZPfqNJEQn/jVjQYB6lof1wQ=; b=V0Fm5UeQ2OMo8kJvqrJv/56lZ2B4HszLUFFPhWKIa7VQGbOsYWhJhT9slmKd3/IXdpES YSiMbVhCXaottvBhDbyIXar/c5IQLe3fZyh/U5uxjpU4+aQnXOzmn5DR4fgrRJ+lZ6e4 3vFhXGHo9oLWnyX+cKQf759NhOPwOIwbGpN3icBv6kgdxMJW6Iwv/5ZJu83dtGBsrwZB x07DTuhkWqkfQ53K0YLq/JE8qnU/XgbwaZWm+7VzlQL1UMgAq5k1GU/0Xq70tAJYkmje 6DpFRKfeursfjLWxpXbPyNA96m2HueZlkwKkDCzkcE5tFdH7eCmlHnUdJRKDT4zGbOl4 XA== Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3pvj1ksag5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Apr 2023 23:32:55 +0000 Received: from nalasex01c.na.qualcomm.com (nalasex01c.na.qualcomm.com [10.47.97.35]) by NALASPPMTA04.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 33ANWqOQ014382 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Apr 2023 23:32:52 GMT Received: from [10.110.49.239] (10.80.80.8) by nalasex01c.na.qualcomm.com (10.47.97.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Mon, 10 Apr 2023 16:32:50 -0700 Message-ID: Date: Mon, 10 Apr 2023 16:32:49 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v5 1/2] check-uapi: Introduce check-uapi.sh To: Greg Kroah-Hartman , Masahiro Yamada CC: Nathan Chancellor , Nick Desaulniers , Nicolas Schier , , , , , Randy Dunlap , Arnd Bergmann , "Bjorn Andersson" , Todd Kjos , "Matthias Maennich" , Giuliano Procida , , , Jordan Crouse , Trilok Soni , "Satya Durga Srinivasu Prabhala" , Elliot Berman , Guru Das Srinagesh References: <20230407203456.27141-1-quic_johmoo@quicinc.com> <20230407203456.27141-2-quic_johmoo@quicinc.com> <2023041015-lunar-dandelion-1b4e@gregkh> Content-Language: en-US From: John Moon In-Reply-To: <2023041015-lunar-dandelion-1b4e@gregkh> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nalasex01c.na.qualcomm.com (10.47.97.35) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: UP2Oi11XV1DZUJx1uDYpt7-HiGAdaX9M X-Proofpoint-ORIG-GUID: UP2Oi11XV1DZUJx1uDYpt7-HiGAdaX9M X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-04-10_16,2023-04-06_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=986 mlxscore=0 suspectscore=0 priorityscore=1501 adultscore=0 bulkscore=0 phishscore=0 malwarescore=0 spamscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2304100205 Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org On 4/10/2023 11:45 AM, Greg Kroah-Hartman wrote: > On Mon, Apr 10, 2023 at 07:03:05PM +0900, Masahiro Yamada wrote: >> On Sat, Apr 8, 2023 at 5:35 AM John Moon wrote: >>> >>> While the kernel community has been good at maintaining backwards >>> compatibility with kernel UAPIs, it would be helpful to have a tool >>> to check if a commit introduces changes that break backwards >>> compatibility. >>> >>> To that end, introduce check-uapi.sh: a simple shell script that >>> checks for changes to UAPI headers using libabigail. >>> >>> libabigail is "a framework which aims at helping developers and >>> software distributors to spot some ABI-related issues like interface >>> incompatibility in ELF shared libraries by performing a static >>> analysis of the ELF binaries at hand." >>> >>> The script uses one of libabigail's tools, "abidiff", to compile the >>> changed header before and after the commit to detect any changes. >>> >>> abidiff "compares the ABI of two shared libraries in ELF format. It >>> emits a meaningful report describing the differences between the two >>> ABIs." >>> >>> The script also includes the ability to check the compatibility of >>> all UAPI headers across commits. This allows developers to inspect >>> the stability of the UAPIs over time. >>> >>> Signed-off-by: John Moon >> >> >> >> BTW, is there anybody (except the submitters) who loves this tool? >> (or anybody who has ever evaluated this?) > > I evaluated the first one, and yes, I do want this, but I haven't tested > it out yet, sorry. > > I get patches for header files all the time and hand-verifying that they > don't break the abi is a pain at times > Agreed, this is the way we're using the tool internally. It's great as a quick spot-check on a change. >> According to this tool, it looks like we broke a lot of UAPI >> headers in the previous MW (between v6.2 and v6.3-rc1). > > That's not ok, and needs to be fixed, otherwise this is useless as no > one can rely on it at all. > Right, there are several classes of false positives that we've documented and when examining thousands of commits at time, it'll flag many things. For some comparison, if you run checkpatch on the same changeset (v6.2..v6.3-rc1), you get 995 errors and 7,313 warnings. Still, checkpatch is helpful for spot-checks. "./scripts/check-uapi.sh -b v6.3-rc1 -p v6.2" flags 36 out of the 911 files checked. Of those 36, 19 fell into the currently documented false positive categories: Enum expansion: 17 Expanding into padded/reserved fields: 2 Beyond those, the tool appears to be flagging legitimate breakages. Some fit into the definition of "intentional breakages" where support is being dropped or something is being refactored: File removals: - include/uapi/drm/i810_drm.h - include/uapi/drm/mga_drm.h - include/uapi/drm/r128_drm.h - include/uapi/drm/savage_drm.h - include/uapi/drm/sis_drm.h - include/uapi/drm/via_drm.h - include/uapi/linux/meye.h File moves: - include/uapi/misc/habanalabs.h Removal of struct: - include/uapi/linux/uuid.h (5e6a51787fef) - include/uapi/linux/mei.h (failed due to uuid.h) - include/uapi/linux/ublk_cmd.h (failed due to uuid.h) Others do not seem to be intentional: Addition/use of flex arrays: - include/uapi/linux/rseq.h (f7b01bb0b57f) - include/uapi/scsi/scsi_bsg_mpi3mr.h (c6f2e6b6eaaf) Type change: - include/uapi/scsi/scsi_bsg_ufs.h (3f5145a615238) Additions into existing struct: - include/uapi/drm/amdgpu_drm.h (b299221faf9b) - include/uapi/linux/perf_event.h (09519ec3b19e) - include/uapi/linux/virtio_blk.h (95bfec41bd3d) Is there something I'm missing that makes these changes false positives? If so, I'd be happy to add on to the documentation and work towards a way to filter them out. In the mean time, we will start a thread on the libabigail mailing list to see if there's a way to add flags such as --ignore-enum-expansion, --ignore-expansion-into-reserved-fields, etc. Enum expansion seems to be making up the largest portion of false positives, so would be the best thing to filter out. >> The script takes some time because it builds many objects >> internally. >> >> However, once this script starts running, you must not hit Ctrl-C. >> If you do it, your repository will be sprinkled with a ton >> of untracked files. > > That needs to be unwound and fixed. > >> CAVEAT >> This tool runs 'git checkout' a couple of times internally. >> If you interrupt it, your worktree might be messed up. > > ctrl-c can be properly caught and the git state needs to be restored for > this to be able to be accepted. > Yes, this can be taken care of. > thanks, > > greg k-h From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 60F65C76196 for ; Mon, 10 Apr 2023 23:34:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Iqd71yOcTunom9FfGfmrhAbWoYt878E2u3dSfGGfwd0=; b=E0QOi/k81baUdw /ZS8heSHBiU6bxpzJe4raN53MtwO7moo3lRDRipHPE0lSF/7h+znASupD+M/lvWaqjp3Gwp4I1wHE Z634S9p/F/4WXyrSNyE9GPglyLggK56WXr15Dtbgo+0oQzBDqxLpxLWKKlK6DW2xipXRMKkbX/hGw dbV3q6xfI5caE98OZm3GA0NWjsm+KUz0/Azbllxnv9QKs6X9LSbuVYc4gzg7dikHRvfpVkqGfjapa oNfj67U3pwIvstTsQs8kyd5mPCEDA2cqdkC0rEMxKRFI5VUlTBwDU7ibtqiQcRS7yAKO21bxvmo2L HUu+BRkKNHik+v8QmUJQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pm10h-00G5eB-0w; Mon, 10 Apr 2023 23:33:19 +0000 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pm10e-00G5de-1l for linux-arm-kernel@lists.infradead.org; Mon, 10 Apr 2023 23:33:18 +0000 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 33ANVVci006187; Mon, 10 Apr 2023 23:32:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=qcppdkim1; bh=JWGCwAS2SPZcwfza4dJDZPfqNJEQn/jVjQYB6lof1wQ=; b=V0Fm5UeQ2OMo8kJvqrJv/56lZ2B4HszLUFFPhWKIa7VQGbOsYWhJhT9slmKd3/IXdpES YSiMbVhCXaottvBhDbyIXar/c5IQLe3fZyh/U5uxjpU4+aQnXOzmn5DR4fgrRJ+lZ6e4 3vFhXGHo9oLWnyX+cKQf759NhOPwOIwbGpN3icBv6kgdxMJW6Iwv/5ZJu83dtGBsrwZB x07DTuhkWqkfQ53K0YLq/JE8qnU/XgbwaZWm+7VzlQL1UMgAq5k1GU/0Xq70tAJYkmje 6DpFRKfeursfjLWxpXbPyNA96m2HueZlkwKkDCzkcE5tFdH7eCmlHnUdJRKDT4zGbOl4 XA== Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3pvj1ksag5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Apr 2023 23:32:55 +0000 Received: from nalasex01c.na.qualcomm.com (nalasex01c.na.qualcomm.com [10.47.97.35]) by NALASPPMTA04.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 33ANWqOQ014382 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Apr 2023 23:32:52 GMT Received: from [10.110.49.239] (10.80.80.8) by nalasex01c.na.qualcomm.com (10.47.97.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Mon, 10 Apr 2023 16:32:50 -0700 Message-ID: Date: Mon, 10 Apr 2023 16:32:49 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v5 1/2] check-uapi: Introduce check-uapi.sh To: Greg Kroah-Hartman , Masahiro Yamada CC: Nathan Chancellor , Nick Desaulniers , Nicolas Schier , , , , , Randy Dunlap , Arnd Bergmann , "Bjorn Andersson" , Todd Kjos , "Matthias Maennich" , Giuliano Procida , , , Jordan Crouse , Trilok Soni , "Satya Durga Srinivasu Prabhala" , Elliot Berman , Guru Das Srinagesh References: <20230407203456.27141-1-quic_johmoo@quicinc.com> <20230407203456.27141-2-quic_johmoo@quicinc.com> <2023041015-lunar-dandelion-1b4e@gregkh> Content-Language: en-US From: John Moon In-Reply-To: <2023041015-lunar-dandelion-1b4e@gregkh> X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nalasex01c.na.qualcomm.com (10.47.97.35) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: UP2Oi11XV1DZUJx1uDYpt7-HiGAdaX9M X-Proofpoint-ORIG-GUID: UP2Oi11XV1DZUJx1uDYpt7-HiGAdaX9M X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-04-10_16,2023-04-06_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=986 mlxscore=0 suspectscore=0 priorityscore=1501 adultscore=0 bulkscore=0 phishscore=0 malwarescore=0 spamscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2304100205 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230410_163316_704586_A964D8D0 X-CRM114-Status: GOOD ( 33.92 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gNC8xMC8yMDIzIDExOjQ1IEFNLCBHcmVnIEtyb2FoLUhhcnRtYW4gd3JvdGU6Cj4gT24gTW9u LCBBcHIgMTAsIDIwMjMgYXQgMDc6MDM6MDVQTSArMDkwMCwgTWFzYWhpcm8gWWFtYWRhIHdyb3Rl Ogo+PiBPbiBTYXQsIEFwciA4LCAyMDIzIGF0IDU6MzXigK9BTSBKb2huIE1vb24gPHF1aWNfam9o bW9vQHF1aWNpbmMuY29tPiB3cm90ZToKPj4+Cj4+PiBXaGlsZSB0aGUga2VybmVsIGNvbW11bml0 eSBoYXMgYmVlbiBnb29kIGF0IG1haW50YWluaW5nIGJhY2t3YXJkcwo+Pj4gY29tcGF0aWJpbGl0 eSB3aXRoIGtlcm5lbCBVQVBJcywgaXQgd291bGQgYmUgaGVscGZ1bCB0byBoYXZlIGEgdG9vbAo+ Pj4gdG8gY2hlY2sgaWYgYSBjb21taXQgaW50cm9kdWNlcyBjaGFuZ2VzIHRoYXQgYnJlYWsgYmFj a3dhcmRzCj4+PiBjb21wYXRpYmlsaXR5Lgo+Pj4KPj4+IFRvIHRoYXQgZW5kLCBpbnRyb2R1Y2Ug Y2hlY2stdWFwaS5zaDogYSBzaW1wbGUgc2hlbGwgc2NyaXB0IHRoYXQKPj4+IGNoZWNrcyBmb3Ig Y2hhbmdlcyB0byBVQVBJIGhlYWRlcnMgdXNpbmcgbGliYWJpZ2FpbC4KPj4+Cj4+PiBsaWJhYmln YWlsIGlzICJhIGZyYW1ld29yayB3aGljaCBhaW1zIGF0IGhlbHBpbmcgZGV2ZWxvcGVycyBhbmQK Pj4+IHNvZnR3YXJlIGRpc3RyaWJ1dG9ycyB0byBzcG90IHNvbWUgQUJJLXJlbGF0ZWQgaXNzdWVz IGxpa2UgaW50ZXJmYWNlCj4+PiBpbmNvbXBhdGliaWxpdHkgaW4gRUxGIHNoYXJlZCBsaWJyYXJp ZXMgYnkgcGVyZm9ybWluZyBhIHN0YXRpYwo+Pj4gYW5hbHlzaXMgb2YgdGhlIEVMRiBiaW5hcmll cyBhdCBoYW5kLiIKPj4+Cj4+PiBUaGUgc2NyaXB0IHVzZXMgb25lIG9mIGxpYmFiaWdhaWwncyB0 b29scywgImFiaWRpZmYiLCB0byBjb21waWxlIHRoZQo+Pj4gY2hhbmdlZCBoZWFkZXIgYmVmb3Jl IGFuZCBhZnRlciB0aGUgY29tbWl0IHRvIGRldGVjdCBhbnkgY2hhbmdlcy4KPj4+Cj4+PiBhYmlk aWZmICJjb21wYXJlcyB0aGUgQUJJIG9mIHR3byBzaGFyZWQgbGlicmFyaWVzIGluIEVMRiBmb3Jt YXQuIEl0Cj4+PiBlbWl0cyBhIG1lYW5pbmdmdWwgcmVwb3J0IGRlc2NyaWJpbmcgdGhlIGRpZmZl cmVuY2VzIGJldHdlZW4gdGhlIHR3bwo+Pj4gQUJJcy4iCj4+Pgo+Pj4gVGhlIHNjcmlwdCBhbHNv IGluY2x1ZGVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrIHRoZSBjb21wYXRpYmlsaXR5IG9mCj4+PiBh bGwgVUFQSSBoZWFkZXJzIGFjcm9zcyBjb21taXRzLiBUaGlzIGFsbG93cyBkZXZlbG9wZXJzIHRv IGluc3BlY3QKPj4+IHRoZSBzdGFiaWxpdHkgb2YgdGhlIFVBUElzIG92ZXIgdGltZS4KPj4+Cj4+ PiBTaWduZWQtb2ZmLWJ5OiBKb2huIE1vb24gPHF1aWNfam9obW9vQHF1aWNpbmMuY29tPgo+Pgo+ Pgo+Pgo+PiBCVFcsIGlzIHRoZXJlIGFueWJvZHkgKGV4Y2VwdCB0aGUgc3VibWl0dGVycykgd2hv IGxvdmVzIHRoaXMgdG9vbD8KPj4gKG9yIGFueWJvZHkgd2hvIGhhcyBldmVyIGV2YWx1YXRlZCB0 aGlzPykKPiAKPiBJIGV2YWx1YXRlZCB0aGUgZmlyc3Qgb25lLCBhbmQgeWVzLCBJIGRvIHdhbnQg dGhpcywgYnV0IEkgaGF2ZW4ndCB0ZXN0ZWQKPiBpdCBvdXQgeWV0LCBzb3JyeS4KPiAKPiBJIGdl dCBwYXRjaGVzIGZvciBoZWFkZXIgZmlsZXMgYWxsIHRoZSB0aW1lIGFuZCBoYW5kLXZlcmlmeWlu ZyB0aGF0IHRoZXkKPiBkb24ndCBicmVhayB0aGUgYWJpIGlzIGEgcGFpbiBhdCB0aW1lcwo+CgpB Z3JlZWQsIHRoaXMgaXMgdGhlIHdheSB3ZSdyZSB1c2luZyB0aGUgdG9vbCBpbnRlcm5hbGx5LiBJ dCdzIGdyZWF0IGFzIGEgCnF1aWNrIHNwb3QtY2hlY2sgb24gYSBjaGFuZ2UuCgo+PiBBY2NvcmRp bmcgdG8gdGhpcyB0b29sLCBpdCBsb29rcyBsaWtlIHdlIGJyb2tlIGEgbG90IG9mIFVBUEkKPj4g aGVhZGVycyBpbiB0aGUgcHJldmlvdXMgTVcgKGJldHdlZW4gdjYuMiBhbmQgdjYuMy1yYzEpLgo+ IAo+IFRoYXQncyBub3Qgb2ssIGFuZCBuZWVkcyB0byBiZSBmaXhlZCwgb3RoZXJ3aXNlIHRoaXMg aXMgdXNlbGVzcyBhcyBubwo+IG9uZSBjYW4gcmVseSBvbiBpdCBhdCBhbGwuCj4gCgpSaWdodCwg dGhlcmUgYXJlIHNldmVyYWwgY2xhc3NlcyBvZiBmYWxzZSBwb3NpdGl2ZXMgdGhhdCB3ZSd2ZSAK ZG9jdW1lbnRlZCBhbmQgd2hlbiBleGFtaW5pbmcgdGhvdXNhbmRzIG9mIGNvbW1pdHMgYXQgdGlt ZSwgaXQnbGwgZmxhZyAKbWFueSB0aGluZ3MuCgpGb3Igc29tZSBjb21wYXJpc29uLCBpZiB5b3Ug cnVuIGNoZWNrcGF0Y2ggb24gdGhlIHNhbWUgY2hhbmdlc2V0IAoodjYuMi4udjYuMy1yYzEpLCB5 b3UgZ2V0IDk5NSBlcnJvcnMgYW5kIDcsMzEzIHdhcm5pbmdzLiBTdGlsbCwgCmNoZWNrcGF0Y2gg aXMgaGVscGZ1bCBmb3Igc3BvdC1jaGVja3MuCgoiLi9zY3JpcHRzL2NoZWNrLXVhcGkuc2ggLWIg djYuMy1yYzEgLXAgdjYuMiIgZmxhZ3MgMzYgb3V0IG9mIHRoZSA5MTEgCmZpbGVzIGNoZWNrZWQu IE9mIHRob3NlIDM2LCAxOSBmZWxsIGludG8gdGhlIGN1cnJlbnRseSBkb2N1bWVudGVkIGZhbHNl IApwb3NpdGl2ZSBjYXRlZ29yaWVzOgoKRW51bSBleHBhbnNpb246IDE3CkV4cGFuZGluZyBpbnRv IHBhZGRlZC9yZXNlcnZlZCBmaWVsZHM6IDIKCkJleW9uZCB0aG9zZSwgdGhlIHRvb2wgYXBwZWFy cyB0byBiZSBmbGFnZ2luZyBsZWdpdGltYXRlIGJyZWFrYWdlcy4KClNvbWUgZml0IGludG8gdGhl IGRlZmluaXRpb24gb2YgImludGVudGlvbmFsIGJyZWFrYWdlcyIgd2hlcmUgc3VwcG9ydCBpcyAK YmVpbmcgZHJvcHBlZCBvciBzb21ldGhpbmcgaXMgYmVpbmcgcmVmYWN0b3JlZDoKCiAgRmlsZSBy ZW1vdmFsczoKICAgIC0gaW5jbHVkZS91YXBpL2RybS9pODEwX2RybS5oCiAgICAtIGluY2x1ZGUv dWFwaS9kcm0vbWdhX2RybS5oCiAgICAtIGluY2x1ZGUvdWFwaS9kcm0vcjEyOF9kcm0uaAogICAg LSBpbmNsdWRlL3VhcGkvZHJtL3NhdmFnZV9kcm0uaAogICAgLSBpbmNsdWRlL3VhcGkvZHJtL3Np c19kcm0uaAogICAgLSBpbmNsdWRlL3VhcGkvZHJtL3ZpYV9kcm0uaAogICAgLSBpbmNsdWRlL3Vh cGkvbGludXgvbWV5ZS5oCgogIEZpbGUgbW92ZXM6CiAgICAtIGluY2x1ZGUvdWFwaS9taXNjL2hh YmFuYWxhYnMuaAoKICBSZW1vdmFsIG9mIHN0cnVjdDoKICAgIC0gaW5jbHVkZS91YXBpL2xpbnV4 L3V1aWQuaCAoNWU2YTUxNzg3ZmVmKQogICAgICAtIGluY2x1ZGUvdWFwaS9saW51eC9tZWkuaCAo ZmFpbGVkIGR1ZSB0byB1dWlkLmgpCiAgICAgIC0gaW5jbHVkZS91YXBpL2xpbnV4L3VibGtfY21k LmggKGZhaWxlZCBkdWUgdG8gdXVpZC5oKQoKT3RoZXJzIGRvIG5vdCBzZWVtIHRvIGJlIGludGVu dGlvbmFsOgoKICBBZGRpdGlvbi91c2Ugb2YgZmxleCBhcnJheXM6CiAgICAtIGluY2x1ZGUvdWFw aS9saW51eC9yc2VxLmggKGY3YjAxYmIwYjU3ZikKICAgIC0gaW5jbHVkZS91YXBpL3Njc2kvc2Nz aV9ic2dfbXBpM21yLmggKGM2ZjJlNmI2ZWFhZikKCiAgVHlwZSBjaGFuZ2U6CiAgICAtIGluY2x1 ZGUvdWFwaS9zY3NpL3Njc2lfYnNnX3Vmcy5oICgzZjUxNDVhNjE1MjM4KQoKICBBZGRpdGlvbnMg aW50byBleGlzdGluZyBzdHJ1Y3Q6CiAgICAtIGluY2x1ZGUvdWFwaS9kcm0vYW1kZ3B1X2RybS5o IChiMjk5MjIxZmFmOWIpCiAgICAtIGluY2x1ZGUvdWFwaS9saW51eC9wZXJmX2V2ZW50LmggKDA5 NTE5ZWMzYjE5ZSkKICAgIC0gaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19ibGsuaCAoOTViZmVj NDFiZDNkKQoKSXMgdGhlcmUgc29tZXRoaW5nIEknbSBtaXNzaW5nIHRoYXQgbWFrZXMgdGhlc2Ug Y2hhbmdlcyBmYWxzZSBwb3NpdGl2ZXM/IApJZiBzbywgSSdkIGJlIGhhcHB5IHRvIGFkZCBvbiB0 byB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgd29yayB0b3dhcmRzIGEgCndheSB0byBmaWx0ZXIgdGhl bSBvdXQuCgpJbiB0aGUgbWVhbiB0aW1lLCB3ZSB3aWxsIHN0YXJ0IGEgdGhyZWFkIG9uIHRoZSBs aWJhYmlnYWlsIG1haWxpbmcgbGlzdCAKdG8gc2VlIGlmIHRoZXJlJ3MgYSB3YXkgdG8gYWRkIGZs YWdzIHN1Y2ggYXMgLS1pZ25vcmUtZW51bS1leHBhbnNpb24sIAotLWlnbm9yZS1leHBhbnNpb24t aW50by1yZXNlcnZlZC1maWVsZHMsIGV0Yy4gRW51bSBleHBhbnNpb24gc2VlbXMgdG8gYmUgCm1h a2luZyB1cCB0aGUgbGFyZ2VzdCBwb3J0aW9uIG9mIGZhbHNlIHBvc2l0aXZlcywgc28gd291bGQg YmUgdGhlIGJlc3QgCnRoaW5nIHRvIGZpbHRlciBvdXQuCgo+PiBUaGUgc2NyaXB0IHRha2VzIHNv bWUgdGltZSBiZWNhdXNlIGl0IGJ1aWxkcyBtYW55IG9iamVjdHMKPj4gaW50ZXJuYWxseS4KPj4K Pj4gSG93ZXZlciwgb25jZSB0aGlzIHNjcmlwdCBzdGFydHMgcnVubmluZywgeW91IG11c3Qgbm90 IGhpdCBDdHJsLUMuCj4+IElmIHlvdSBkbyBpdCwgeW91ciByZXBvc2l0b3J5IHdpbGwgYmUgc3By aW5rbGVkIHdpdGggYSB0b24KPj4gb2YgdW50cmFja2VkIGZpbGVzLgo+IAo+IFRoYXQgbmVlZHMg dG8gYmUgdW53b3VuZCBhbmQgZml4ZWQuCj4gCj4+IENBVkVBVAo+PiBUaGlzIHRvb2wgcnVucyAn Z2l0IGNoZWNrb3V0JyBhIGNvdXBsZSBvZiB0aW1lcyBpbnRlcm5hbGx5Lgo+PiBJZiB5b3UgaW50 ZXJydXB0IGl0LCB5b3VyIHdvcmt0cmVlIG1pZ2h0IGJlIG1lc3NlZCB1cC4KPiAKPiBjdHJsLWMg Y2FuIGJlIHByb3Blcmx5IGNhdWdodCBhbmQgdGhlIGdpdCBzdGF0ZSBuZWVkcyB0byBiZSByZXN0 b3JlZCBmb3IKPiB0aGlzIHRvIGJlIGFibGUgdG8gYmUgYWNjZXB0ZWQuCj4KClllcywgdGhpcyBj YW4gYmUgdGFrZW4gY2FyZSBvZi4KCj4gdGhhbmtzLAo+IAo+IGdyZWcgay1oCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1h aWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==