From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id F348A3858D28 for ; Mon, 31 Jul 2023 20:14:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F348A3858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 36VDTJId029569; Mon, 31 Jul 2023 20:14:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=corp-2023-03-30; bh=b+z8KCwS5iW95y5jfQqITCBLJsl+9N/7QewECHsIv5U=; b=N4PPD9njH/P9iDlUSv9GqH1COLj0lv+pAarzbKiNhj4HLnL5D1USRuU2IHGVOxJzG+op Awqh4C81teWcyCW2HZZvB/dJg/RmzAaCa1gZQvFgk4jif9Ztz2WED5HrtxqeLTZPCQx2 2TDOma6G3c8hGzD8+ztBwM5Z1bmVL/SSsXVRmG91gkf7vkGv1QzwfqtAsD2NkgENqvgU iSewoN3RDy7zl+PSnaw2EWehHy9I8Ln4M/CUeh6SEs+SR7z5bG6k9oCSEVWvcWjOzx8T /drY5PGy6hVGTOZgnSxH5HcjU44zWGyKzSiVqyeAHS/CkktNBzUiW7IAJFy0RBP5IjU7 kQ== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3s4ttd3h12-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 31 Jul 2023 20:14:47 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 36VJY0Dx008693; Mon, 31 Jul 2023 20:14:47 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2109.outbound.protection.outlook.com [104.47.58.109]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3s4s7bnsay-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 31 Jul 2023 20:14:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e+MTfoinW0BBldLRYLcQfbC6/NVykBjOS36WLnKXtxDBiyIy5r6pfzu8pOWC1iHlcG2cJqN/QI/Ce20Vu2o4nBdRgbXIjdNQErub+FJA9ibFcHWe4xDVEznBza2OtT8gFZB/f40NB+nnsVjx7v2dTFk4yYkQd2zCnRFy1PlvVnA+AXGmx4rWTVqsgF5uaBmwc/jAUOub8bkmV9ZB6B0xXAnOs4uY7wgfvUUkmks2Dw7ZNRT27RucJyMPbxF+G2CNBCfxROw46LlSboVJHEWhGnC4xFo9Vzs+KCFqFDE3D8P3xMlOA6NKB/QqbVXAu65X/sfXaSeo89tSSwZLOTDNfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=b+z8KCwS5iW95y5jfQqITCBLJsl+9N/7QewECHsIv5U=; b=E9RZbAoDAHtuy4SYAAKxmLLm21fIftKL4lZT4nagqnTEAlttzjNeBfY9DO5DqJwDQMrtElwL4u1QKSMHqzElNPqLg7Fre6m6Xz0s+QmgP9e2em8Ny7SgL4v3zoRg3mQighNF3DK5yiF52CELZBNmp0nOQyqotHuGJShCCuMT8bwix7rpt1a+sPpJfuDinahxiMr7s0Bu4kZ9Sfj7iuGlgRi5Qxqv9bRNAQ5cZZZZ3NuEJQX6DcjadbAFXOQ79PcxuH0eKWw5ri+ZsxQGFERukY4wpzYU8ja5q4jtwoC77b4YZWr11Oq4L9V7eoyqjOQNqTMYzaBVebcqqWQYWYzYsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=b+z8KCwS5iW95y5jfQqITCBLJsl+9N/7QewECHsIv5U=; b=ueVCTxTmZvsn462T9lRfibsAoan/rmvL7ThCGoIwZ7NbqVK9vRQKZF8QypY7c27UVaJMQw8QjiKLDuLKdklTZXnji9JE8ukpbEyP6c+aijJuMTf6xwoUr34WpMQOVJM2QBwNq0mtyPfoqn16mZgvTyWc80ftyanguUa1b3pfnpo= Received: from MN2PR10MB4349.namprd10.prod.outlook.com (2603:10b6:208:1d4::9) by BY5PR10MB4146.namprd10.prod.outlook.com (2603:10b6:a03:20d::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6631.43; Mon, 31 Jul 2023 20:14:44 +0000 Received: from MN2PR10MB4349.namprd10.prod.outlook.com ([fe80::59ab:7bce:a3c3:fd5a]) by MN2PR10MB4349.namprd10.prod.outlook.com ([fe80::59ab:7bce:a3c3:fd5a%4]) with mapi id 15.20.6631.042; Mon, 31 Jul 2023 20:14:42 +0000 From: Qing Zhao To: Kees Cook , Siddhesh Poyarekar CC: "joseph@codesourcery.com" , "richard.guenther@gmail.com" , "jakub@redhat.com" , "gcc-patches@gcc.gnu.org" , "uecker@tugraz.at" , "isanbard@gmail.com" Subject: Re: [V1][PATCH 0/3] New attribute "element_count" to annotate bounds for C99 FAM(PR108896) Thread-Topic: [V1][PATCH 0/3] New attribute "element_count" to annotate bounds for C99 FAM(PR108896) Thread-Index: AQHZjyQM4cZ0Nx0hq0Cg9tjYZZoL4q9tBmcAgEBSagCACxrkAIAGVkYAgAAnywCAAtQjgIAS8xWA Date: Mon, 31 Jul 2023 20:14:42 +0000 Message-ID: <72AF1253-564C-46C1-9FBC-5A53871CB701@oracle.com> References: <20230525161450.3704901-1-qing.zhao@oracle.com> <202305261218.2420AB8E0@keescook> <202307131311.1F30C4357@keescook> <202307171612.406D82C39@keescook> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Apple Mail (2.3696.120.41.1.3) x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR10MB4349:EE_|BY5PR10MB4146:EE_ x-ms-office365-filtering-correlation-id: a8477a9b-5934-4957-7570-08db9202c6d5 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: drjcyn1gkyf9smp24Ni2SbVYwGHvu/Pjwaml3YjeqtoI7KMOfQRz4ZKwzRVqWlPpDZ5GzCpI6k6dcZh+kESVHbrQW8YuwHRV4LT647awTWk07SgnJiNRsljDXiLtL6eeZRg5Rqjg8e96JTRsqaSu3cSrSxya3/evvcu+OugrtUUOp0xKy/I4oyrX+aeW2puNxkojGbRVEiAPykPBmrhZoiGX50JciINjkuUZQtcvYou7rUEB7MuYngylBVmdQ6xCdQ8IHV/txmfbEsl6ygnjg1e0zRqVfsiIzD13wKFchuLVFaAavcyv9TUoEj+ZAaJig0R93x7EvGD6Lzwmgy4JwIjr6Ap+xRm5c1jNKVxZcsLxggQKVLpBzppB0crItEbOXTyAEmVWF1yGkw0cWiaZebd/+5oZcub0h76YqKlhl0W8/vImrEPeig9N8j7ZwaS6MDRivws3T1k1vosqhOuRqXN1pTxPwUvL4Y734PSdf27CuQMixkrVzs2Ry9YHLtZbh8czP/zSlSrKjVASrUSAU1fyvhLKl/71Kyq/Ig0a4CvSB50CW7/8bmvC23n+ton/BQhLHMyYsmh8DPPrhMtMCW9CtYXCrdNb4VCzPd7Q0alCeIq6F2Z9U016cZ9qQ0dhcHG5M5QALT9prwelx9pJ5MpJFlCnhzZzKOwZohMmzk03dAeIyt/DNOSVVSIG7cCP x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR10MB4349.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(366004)(39860400002)(376002)(396003)(346002)(451199021)(44832011)(966005)(6512007)(6486002)(36756003)(2616005)(53546011)(6506007)(83380400001)(186003)(33656002)(66946007)(91956017)(66556008)(76116006)(54906003)(41300700001)(122000001)(110136005)(38070700005)(38100700002)(86362001)(66476007)(316002)(5660300002)(66446008)(4326008)(8676002)(8936002)(64756008)(2906002)(71200400001)(478600001)(45980500001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?T3VYUi81RGNSSE1RYm8zL3NoUDZJWnhZNzdQQVJ0NzJoQzBFbWhBM0s5clph?= =?utf-8?B?ck0wYlhtTG41Rjk5NTVMbUcvUHdybVpzMFhZeDNXUk9kemRzRFNSY3VSdlhL?= =?utf-8?B?RnFwNUw5WFdTMVdhbFhmNkZYUGtmZ3g4L3NKc2ZVVFZmaEFkdUVTVmtLell3?= =?utf-8?B?N1FIajZRcS8xOWlRdFRzR2hXUXBxR0NsVnZqN3B3dS8zSTZMS3RvS3g3eWla?= =?utf-8?B?UTR5bCtVSzYxN2FoTW1qdzFzU0N0QmhDTTl2MDg1U1BLaWx5K0NHQnJBejVQ?= =?utf-8?B?VzlKU0NOWUhDbTUxcTR3WUdrQnRmTlh1Qk9xT21NRFBLUGVBQ3pVeGI4MDdO?= =?utf-8?B?YUdGTTRKbnRDQVBnbjB2MXp4RGZXS01wWDdleXFOVTJoUjJYV3ZnWHdrTUJT?= =?utf-8?B?M3BJRm5NM2JCRVp6R0I4YmNSZThXaDIyOC9Vd0RoMzBBTkpTcTRlM1JtSERj?= =?utf-8?B?SjJuOHRWRVZZWUxlZ0I1OUJCdyt6ZXJyQkFRQmo1MDAvMFc5WVRudmx3SW8y?= =?utf-8?B?UzNSdUtJZTVvR0JsTU9laTJTOWhOOGs3cDdxbFR3ZHNPZUxnNWxLZmU0WFIw?= =?utf-8?B?cC9Ea2tUMmMyMkRRL1FEQ01UVGc2YjZuSXhqUUFjM053M0s1NE1rL0UweS80?= =?utf-8?B?STJtL09MWXBBVG5wcUh6R2JqL0lvUzRFdXZnSC9Ba3oyRGtIc21PUDdXNGlx?= =?utf-8?B?bmtTcWJjRklCcVo4UExaeEcwOGtwY0hwMHN3YVRTNVZvKzhPV1hiMWNnZGMv?= =?utf-8?B?NEZiYUVySVp6c1ZRS293Um92S3FqUlZKTkdVSzRLaXZXeFIrWGtWL3FOSjRQ?= =?utf-8?B?cCtXQjVPcDh5NkFRSWpPTC9adEVvOC9oQnZtK3UvaTkvSlc4VldLKzcrZUV5?= =?utf-8?B?WFp0ZjhNYnR4WDhhQWN2YjM1MWlFa295SjVLM1RjTWRBR2lGSjc2YlhhU3BG?= =?utf-8?B?Nk9oV3FvOG95Q2l0QjdJTmhQZ3ZtbFFhN3lYQ25paEVDQWdKWnNaTlRQWEVO?= =?utf-8?B?WTJoSUx5MlhwT2dlM09OMk1EYnp5NWFaN0VveGRGc2lKbnlRTzlFZ3Q5bDFD?= =?utf-8?B?a3RzRlkydmoxbW4zSmNGK1R6QzdiVzgwc0Nyb1J6dDB5K2NYVm90bDJRRk1s?= =?utf-8?B?bHRUVmErOW0rYTF4cjMrQ1hOOVF3VHFLbVdxYWtJUzhoVzNEV2VRWGNjL2pZ?= =?utf-8?B?d2tUQVg3QXdjRU9TSlIvdXJPNGdFaStWWjAyRlJOVnlBYi9PZTFIT0hXNklv?= =?utf-8?B?NWhPM0JBTXRaeHFDa0RoNDd6OU4xakF1ZE5iQWJDWWtqWE5RTFNPeGVjK1Np?= =?utf-8?B?RzFldXlvQzJOWFpqbElaQTAyUkRVMkRhNXRDWkZnSWhyV3BZbVhzeEJIUGxx?= =?utf-8?B?MGVLSXQyL0wyakluZGIyK3BnaFQwemhrbDRaQmpuWnpPT08xZW1ZMGZUWXRF?= =?utf-8?B?dFZVZU5hTjJROFFpdXNPdm1oSlgyVXFBN1ZROGU1N1MvVzZ0NUw2QmZUSmdm?= =?utf-8?B?QTZVeTMxa3l5d3FjNVB3YXVyQk1GOWJxQTVKRUhBaXE0cC9xV3Z4SDlaOTNk?= =?utf-8?B?QmdjYlVGcXUyUmhzaVdLRVhUS0hKR3RSOU1pQzBzRFNuZDNQTTJWQjVCNm5X?= =?utf-8?B?N1Q0RW9nd3NIWlg2cC9YNktYaGZtY1pnV3FQL1lneW9UbmcwNUNscktFL0NJ?= =?utf-8?B?blY2SEJxVEtDRjNXYlYxcnhFVkVVRDZOdE0xMndjQkY5K0piRk4xOWpYZWpU?= =?utf-8?B?Ykdob0dHK1AvWU5lNG12cDhCN3I3SXlETTBsM3BTNEpGYUlmVXZBam9JNHRN?= =?utf-8?B?KytuaFdpTkNueWI2eTY5eDlwZTFoS0lUR1dNRGxXY1FTVDJkcHVVSWM3bTBG?= =?utf-8?B?NjYrOENSVFNvSk0xaThzSkh4MmxpZUlXRHJ5cWlyMzNUR1k4ay8zQ1BVZHFE?= =?utf-8?B?KytFZ0diWGtDRzhtQ0o4ZU12U012WHNHaElwcEQxMG1keXd1RStiQjd3L1k0?= =?utf-8?B?ZFNtQ2hLbXRPemh6VThOR3VyNGpLWDB5aUszelg2cVJPWTh2WmJWWGZJMXJt?= =?utf-8?B?UkJWdjMzTU1sZnpCaG5vN3FLN1Yxci94bDArK1RGL09KYU9TaW5CSGNYVXhj?= =?utf-8?B?Wm5RVXJ3ZDZKZ2lsYlBUclN3MkxPdXF3c2RaeXM3TXNnOWdMVEQvSWczWldP?= =?utf-8?Q?lOSpvbjcHgKAT8ETHXFR89A=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <1B0EA81F0CBA3348A2D7BD4CD9E67B0C@namprd10.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: =?utf-8?B?dXo4QmpISjBtS21WQkt6VmtTQXN2NVBCN1k4VVhSVnhGZHh2aG5hVk9DNHU0?= =?utf-8?B?YTdlWmcrZFdPVlZLbDlSZEkwQmNUS1VFRHRPNmp2T1prbjJQeGZLSmpTcXhk?= =?utf-8?B?WlppczhOQTBYeUdicVF0TnozTjhxRllQem1xNnUwQUY4YitITjZ3UkthYStV?= =?utf-8?B?T1g2Wms2RytJd0wxQU43VVFzdTVRenk5NDJQSXhHelArMEFyOVlFVEpYNCtz?= =?utf-8?B?TnY5TlJzUmd4akZUcnZkR1djVDNDSWtqb1FmazVhZVR6NjE5KzE5eGx5Vy92?= =?utf-8?B?eCt4OTgweWhYY04rTHRHMUlmaFdaSm9nUElIemx3K0RvNjI1WUt5NjJhVmho?= =?utf-8?B?NW9raUl1ZjNNRjVhcXk1Z1N0dy9adG9hS09zMVJEV2QwMDNndktuQTRwWGN2?= =?utf-8?B?OXgwZWRXV2RuWmsyTjk5Tjh6UTlqZkpQVGJxcHpJSTQza0FuREEwL2c3UzFs?= =?utf-8?B?UjZRZkVDYkRmbG5VRU9JeFExd3poeFJLMzV0TGQwNWxxazY0NWJKaTJEODA0?= =?utf-8?B?aXdpeXFFNjUvRmdzTFpwNUtmN2l4T3RFOTkrMDFUUFNYMEVuWjZ2bHdlT01k?= =?utf-8?B?cEJmWjg5ZHJyYzI0QmpHU0JQRzcxZHdxWlo5c0FBN0syTzdXdmVFVFZEaUtl?= =?utf-8?B?UXluYlF2NVBjZy9sUE5Ib2pUL1lUczExQVBmOFM5N205d2FBQkNWVWZta2RG?= =?utf-8?B?TVg0M1Q5enhFdmFsQWxrekpMQTNqR3FsZnEvaHBjeFV0MVptYURGZlo5Snhs?= =?utf-8?B?azlBSUpJQjhNNTZxajNiRm5pY2lvUHVkcmxWTHFzOW9VcEk0T0psRCtoc0p3?= =?utf-8?B?Z2hTeFdPRVBGZU1QVkpzMFNOZjNCOHAvMXB1aUVPYktzZGZEUlRWeVU1KzYy?= =?utf-8?B?V0xyVVZNOUFIdmpzVUswSVYwbnlBWmtaWHBBTURzNnRGS082YTg1L1NneUtF?= =?utf-8?B?cEhBSXZZL2RiZ1dMWkliK0V0RGNkeHMzQU1lcE9TQlNJVGtySzBvZDdTaktt?= =?utf-8?B?QjAvUEpSYjdJaURlNHowLzUvS0tERXFKMFU1eS95d0l4ZlZNWDVoNm9Wc1ZG?= =?utf-8?B?TkZ6OFVnMXFsWEgrMGRJRGtYc3hvTnY3U3VlcHN4VGNPdS95Yjc2M3dQNUNl?= =?utf-8?B?aVlBQlRuVjNuM2l0clFWelZFSUNXL1BGNGE5c0NVUDJheWtXdnhFeGg4WEpE?= =?utf-8?B?YjRZTE52NmNRZSszQndaTkZCQlF3VlErMW8vSmNJYWI5eXAybThaMGFuT3Vi?= =?utf-8?Q?uZcsQQN30G4TTU6?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB4349.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8477a9b-5934-4957-7570-08db9202c6d5 X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Jul 2023 20:14:42.6096 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: QxNV3DBS7Ejb4k4M6xyDw6srExCkw3GVhJBOGhdfaHY2RSovWWqMNs/CTwDJhapR2hozihMdm876gzfkgBJ+4Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4146 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-07-31_14,2023-07-31_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 phishscore=0 mlxscore=0 adultscore=0 malwarescore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2306200000 definitions=main-2307310184 X-Proofpoint-GUID: PZDREwYzRuPTLLXDzBz8y71rD1lqjN8g X-Proofpoint-ORIG-GUID: PZDREwYzRuPTLLXDzBz8y71rD1lqjN8g X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,KAM_SHORT,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: SGksDQoNCkFmdGVyIHNvbWUgZGV0YWlsZWQgc3R1ZHkgYW5kIGNvbnNpZGVyYXRpb24gb24gaG93 IHRvIHVzZSB0aGUgbmV3IGF0dHJpYnV0ZSDigJxjb3VudGVkX2J54oCdDQogaW4gX19idWlsdGlu X2R5bmFtaWNfb2JqZWN0X3NpemUsIEkgY2FtZSB1cCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhhbXBs ZSB3aXRoIGRldGFpbGVkIGV4cGxhbmF0aW9uIA0Kb24gdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGZy b20gR0NDIG9uIHVzaW5nIHRoaXMgbmV3IGF0dHJpYnV0ZS4gDQoNClBsZWFzZSB0YWtlIGEgbG9v ayBvbiB0aGlzIGV4YW1wbGUgYW5kICB0aGUgZXhwbGFuYXRpb24gZW1iZWRkZWQsIGFuZCBsZXQg bWUga25vdyBpZiB5b3UgaGF2ZSBmdXJ0aGVyDQpDb21tZW50cyBvciBzdWdnZXN0aW9ucy4NCg0K VGhhbmtzIGEgbG90Lg0KDQpRaW5nDQoNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCiNpbmNsdWRlIDxzdGRpbnQuaD4NCiNpbmNsdWRlIDxtYWxsb2MuaD4NCiNp bmNsdWRlIDxzdHJpbmcuaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KDQpzdHJ1Y3QgYW5ub3RhdGVk IHsNCiAgICAgICAgc2l6ZV90IGZvbzsNCiAgICAgICAgaW50IGFycmF5W10gX19hdHRyaWJ1dGVf XygoY291bnRlZF9ieSAoZm9vKSkpOw0KfTsNCg0KI2RlZmluZSBleHBlY3QocCwgX3YpIGRvIHsg XA0KICAgIHNpemVfdCB2ID0gX3Y7IFwNCiAgICBpZiAocCA9PSB2KSBcDQogICAgICAgIF9fYnVp bHRpbl9wcmludGYgKCJvazogICVzID09ICV6ZFxuIiwgI3AsIHApOyBcDQogICAgZWxzZSBcDQog ICAgICAgIHsgIFwNCiAgICAgICAgICBfX2J1aWx0aW5fcHJpbnRmICgiV0FUOiAlcyA9PSAlemQg KGV4cGVjdGVkICV6ZClcbiIsICNwLCBwLCB2KTsgXA0KICAgICAgICB9IFwNCn0gd2hpbGUgKDAp Ow0KDQojZGVmaW5lIG5vaW5saW5lIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpDQojZGVm aW5lIFNJWkVfQlVNUCAyIA0KDQovKiBJbiBnZW5lcmFsLCBEdWUgdG8gdHlwZSBjYXN0aW5nLCB0 aGUgdHlwZSBmb3IgdGhlIHBvaW50ZWUgb2YgYSBwb2ludGVyDQogICBkb2VzIG5vdCBzYXkgYW55 dGhpbmcgYWJvdXQgdGhlIG9iamVjdCBpdCBwb2ludHMgdG8sDQogICBTbywgX19idWlsdGluX29i amVjdF9zaXplIGNhbiBub3QgZGlyZWN0bHkgdXNlIHRoZSB0eXBlIG9mIHRoZSBwb2ludGVlDQog ICB0byBkZWNpZGUgdGhlIHNpemUgb2YgdGhlIG9iamVjdCB0aGUgcG9pbnRlciBwb2ludHMgdG8u DQoNCiAgIHRoZXJlIGFyZSBvbmx5IHR3byByZWxpYWJsZSB3YXlzOg0KICAgQS4gb2JzZXJ2ZWQg YWxsb2NhdGlvbnMgIChjYWxsIHRvIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBpbiB0aGUgcm91 dGluZSkNCiAgIEIuIG9ic2VydmVkIGFjY2Vzc2VzICAgICAocmVhZCBvciB3cml0ZSBhY2Nlc3Mg dG8gdGhlIGxvY2F0aW9uIG9mIHRoZSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9p bnRlciBwb2ludHMgdG8pDQoNCiAgIHRoYXQgcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUg dHlwZS9leGlzdGVuY2Ugb2YgYW4gb2JqZWN0IGF0DQogICB0aGUgY29ycmVzcG9uZGluZyBhZGRy ZXNzLg0KDQogICBmb3IgQSwgd2UgdXNlIHRoZSAiYWxsb2Nfc2l6ZSIgYXR0cmlidXRlIGZvciB0 aGUgY29ycmVzcG9uZGluZyBhbGxvY2F0aW9uDQogICBmdW5jdGlvbnMgdG8gZGV0ZXJtaW5lIHRo ZSBvYmplY3Qgc2l6ZTsNCg0KICAgRm9yIEIsIHdlIHVzZSB0aGUgU0laRSBpbmZvIG9mIHRoZSBU WVBFIGF0dGFjaGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIGFjY2Vzcy4NCiAgIChXZSB0cmVhdCBj b3VudGVkX2J5IGF0dHJpYnV0ZSBhcyBhIGNvbXBsZW1lbnQgdG8gdGhlIFNJWkUgaW5mbyBvZiB0 aGUgVFlQRQ0KICAgIGZvciBGTUEpIA0KDQogICBUaGUgb25seSBvdGhlciB3YXkgaW4gQyB3aGlj aCBlbnN1cmVzIHRoYXQgYSBwb2ludGVyIGFjdHVhbGx5IHBvaW50cw0KICAgdG8gYW4gb2JqZWN0 IG9mIHRoZSBjb3JyZWN0IHR5cGUgaXMgJ3N0YXRpYyc6DQoNCiAgIHZvaWQgZm9vKHN0cnVjdCBQ ICpwW3N0YXRpYyAxXSk7ICAgDQoNCiAgIFNlZSBodHRwczovL2djYy5nbnUub3JnL3BpcGVybWFp bC9nY2MtcGF0Y2hlcy8yMDIzLUp1bHkvNjI0ODE0Lmh0bWwNCiAgIGZvciBtb3JlIGRldGFpbHMu ICAqLw0KDQovKiBpbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLCBtYWxsb2MgYWxsb2NhdGVkIG1v cmUgc3BhY2UgdGhhbiB0aGUgdmFsdWUNCiAgIG9mIGNvdW50ZWRfYnkgYXR0cmlidXRlLiAgVGhl biB3aGF0J3MgdGhlIGNvcnJlY3QgYmVoYXZpb3Igd2UgZXhwZWN0DQogICB0aGUgX19idWlsdGlu X2R5bmFtaWNfb2JqZWN0X3NpemUgc2hvdWxkIGhhdmUgZm9yIGVhY2ggb2YgdGhlIGNhc2VzPyAg Ki8gDQoNCnN0YXRpYyBzdHJ1Y3QgYW5ub3RhdGVkICogbm9pbmxpbmUgYWxsb2NfYnVmIChpbnQg aW5kZXgpDQp7DQogIHN0cnVjdCBhbm5vdGF0ZWQgKnA7DQogIHAgPSBtYWxsb2Moc2l6ZW9mICgq cCkgKyAoaW5kZXggKyBTSVpFX0JVTVApICogc2l6ZW9mIChpbnQpKTsNCiAgcC0+Zm9vID0gaW5k ZXg7DQoNCiAgLyp3aGVuIGNoZWNraW5nIHRoZSBvYnNlcnZlZCBhY2Nlc3MgcC0+YXJyYXksIHdl IGhhdmUgaW5mbyBvbiBib3RoDQogICAgb2JzZXJ2ZXJlZCBhbGxvY2F0aW9uIGFuZCBvYnNlcnZl ZCBhY2Nlc3MsIA0KICAgIEEuIGZyb20gb2JzZXJ2ZWQgYWxsb2NhdGlvbjogKGluZGV4ICsgU0la RV9CVU1QKSAqIHNpemVvZiAoaW50KQ0KICAgIEIuIGZyb20gb2JzZXJ2ZWQgYWNjZXNzOiBwLT5m b28gKiBzaXplb2YgKGludCkNCg0KICAgIGluIHRoZSBhYm92ZSwgcC0+Zm9vID0gaW5kZXguDQog ICAqLw0KICAgDQogIC8qIGZvciBNQVhJTVVNIHN1Yi1vYmplY3Qgc2l6ZTogY2hvc2UgdGhlIHNt YWxsZXIgb2YgQSBhbmQgQi4NCiAgICogUGxlYXNlIHNlZSBodHRwczovL2djYy5nbnUub3JnL3Bp cGVybWFpbC9nY2MtcGF0Y2hlcy8yMDIzLUp1bHkvNjI1ODkxLmh0bWwNCiAgICogZm9yIGRldGFp bHMgb24gd2h5LiAgKi8NCiAgZXhwZWN0KF9fYnVpbHRpbl9keW5hbWljX29iamVjdF9zaXplKHAt PmFycmF5LCAxKSwgKHAtPmZvbykgKiBzaXplb2YoaW50KSk7DQogIGV4cGVjdChfX2J1aWx0aW5f ZHluYW1pY19vYmplY3Rfc2l6ZShwLT5hcnJheSwgMCksIHNpemVvZiAoKnApICsgKHAtPmZvbykg KiBzaXplb2YoaW50KSk7DQoNCiAgLyogZm9yIE1JTklNVU0gc3ViLW9iamVjdCBzaXplOiBjaG9z ZSB0aGUgc21hbGxlciBvZiBBIGFuZCBCIHRvby4gICovDQogIGV4cGVjdChfX2J1aWx0aW5fZHlu YW1pY19vYmplY3Rfc2l6ZShwLT5hcnJheSwgMyksIHAtPmZvbyAqIHNpemVvZihpbnQpKTsNCiAg ZXhwZWN0KF9fYnVpbHRpbl9keW5hbWljX29iamVjdF9zaXplKHAtPmFycmF5LCAyKSwgc2l6ZW9m ICgqcCkgKyBwLT5mb28gKiBzaXplb2YoaW50KSk7DQoNCiAgLyp3aGVuIGNoZWNraW5nIHRoZSBw b2ludGVyIHAsIHdlIG9ubHkgaGF2ZSBpbmZvIG9uIHRoZSBvYnNlcnZlZCBhbGxvY2F0aW9uLg0K ICAgIFNvLCB0aGUgb2JqZWN0IHNpemUgaW5mbyBjYW4gb25seSBiZWVuIG9idGFpbmVkIGZyb20g dGhlIGNhbGwgdG8gbWFsbG9jLg0KICAgIGZvciBib3RoIE1BWElNVU0gYW5kIE1JTklNVU06IEEg PSAoaW5kZXggKyBTSVpFX0JVTVApICogc2l6ZW9mIChpbnQpICAqLyANCiAgZXhwZWN0KF9fYnVp bHRpbl9keW5hbWljX29iamVjdF9zaXplKHAsIDEpLCBzaXplb2YgKCpwKSArIChwLT5mb28gKyBT SVpFX0JVTVApICogc2l6ZW9mKGludCkpOw0KICBleHBlY3QoX19idWlsdGluX2R5bmFtaWNfb2Jq ZWN0X3NpemUocCwgMCksIHNpemVvZiAoKnApICsgKHAtPmZvbyArIFNJWkVfQlVNUCkgKiBzaXpl b2YoaW50KSk7DQogIGV4cGVjdChfX2J1aWx0aW5fZHluYW1pY19vYmplY3Rfc2l6ZShwLCAzKSwg c2l6ZW9mICgqcCkgKyAocC0+Zm9vICsgU0laRV9CVU1QKSAqIHNpemVvZihpbnQpKTsNCiAgZXhw ZWN0KF9fYnVpbHRpbl9keW5hbWljX29iamVjdF9zaXplKHAsIDIpLCBzaXplb2YgKCpwKSArIChw LT5mb28gKyBTSVpFX0JVTVApICogc2l6ZW9mKGludCkpOw0KICByZXR1cm4gcDsNCn0NCg0KDQpp bnQgbWFpbiAoKQ0Kew0KICBzdHJ1Y3QgYW5ub3RhdGVkICpwOyANCiAgcCA9IGFsbG9jX2J1ZiAo MTApOw0KICAvKndoZW4gY2hlY2tpbmcgdGhlIG9ic2VydmVkIGFjY2VzcyBwLT5hcnJheSwgd2Ug b25seSBoYXZlIGluZm8gb24gdGhlDQogICAgb2JzZXJ2ZWQgYWNjZXNzLCBpLmUsIHRoZSBUWVBF X1NJWkUgaW5mbyBmcm9tIHRoZSBhY2Nlc3MuIFdlIGRvbid0IGhhdmUNCiAgICBpbmZvIG9uIHRo ZSB3aG9sZSBvYmplY3QuICAqLw0KDQogIC8qRm9yIE1BWElNVU0gc2l6ZSwgV2Uga25vdyB0aGUg U0laRSBpbmZvIG9mIHRoZSBUWVBFIGZyb20gdGhlIGFjY2VzcyB0byB0aGUNCiAgICBzdWItb2Jq ZWN0IHAtPmFycmF5Lg0KICAgIGJ1dCBkb24ndCBrbm93IHRoZSB3aG9sZSBvYmplY3QgdGhlIHBv aW50ZXIgcCBwb2ludHMgdG8uICAqLyANCiAgZXhwZWN0KF9fYnVpbHRpbl9keW5hbWljX29iamVj dF9zaXplKHAtPmFycmF5LCAxKSwgcC0+Zm9vICogc2l6ZW9mKGludCkpOw0KICBleHBlY3QoX19i dWlsdGluX2R5bmFtaWNfb2JqZWN0X3NpemUocC0+YXJyYXksIDApLCAtMSk7DQoNCiAgLypmb3Ig TUlOSU1VTSBzaXplLCBXZSBrbm93IHRoZSBUWVBFX1NJWkUgZnJvbSB0aGUgYWNjZXNzIHRvIHRo ZSBzdWItb2plY3QNCiAgICBwLT5hcnJheS4NCiAgICBidXQgZG9uJ3Qga25vdyB0aGUgd2hvbGUg b2JqZWN0IHRoZSBwb2ludGVyIHAgcG9pbnRzIHRvLiAgKi8NCiAgZXhwZWN0KF9fYnVpbHRpbl9k eW5hbWljX29iamVjdF9zaXplKHAtPmFycmF5LCAzKSwgcC0+Zm9vICogc2l6ZW9mKGludCkpOw0K ICBleHBlY3QoX19idWlsdGluX2R5bmFtaWNfb2JqZWN0X3NpemUocC0+YXJyYXksIDIpLCAwKTsN Cg0KICAvKndoZW4gY2hlY2tpbmcgdGhlIHBvaW50ZXIgcCwgd2UgaGF2ZSBubyBvYnNlcnZlZCBh bGxvY2F0aW9uIG5vciBvYnNlcnZlZCBhY2Nlc3MuDQogICAgdGhlcmVmb3JlLCB3ZSBjYW5ub3Qg ZGV0ZXJtaW5lIHRoZSBzaXplIGluZm8gaGVyZS4gICovDQogIGV4cGVjdChfX2J1aWx0aW5fZHlu YW1pY19vYmplY3Rfc2l6ZShwLCAxKSwgLTEpOw0KICBleHBlY3QoX19idWlsdGluX2R5bmFtaWNf b2JqZWN0X3NpemUocCwgMCksIC0xKTsNCiAgZXhwZWN0KF9fYnVpbHRpbl9keW5hbWljX29iamVj dF9zaXplKHAsIDMpLCAwKTsNCiAgZXhwZWN0KF9fYnVpbHRpbl9keW5hbWljX29iamVjdF9zaXpl KHAsIDIpLCAwKTsNCg0KICByZXR1cm4gMDsNCn0NCg0KDQoNCg0KDQo+IE9uIEp1bCAxOSwgMjAy MywgYXQgMjo1MiBQTSwgUWluZyBaaGFvIHZpYSBHY2MtcGF0Y2hlcyA8Z2NjLXBhdGNoZXNAZ2Nj LmdudS5vcmc+IHdyb3RlOg0KPiANCj4gDQo+Pj4gDQo+Pj4gVGhlIHBvaW50IGlzOiBhbGxvY2F0 aW9uIHNpemUgc2hvdWxkIHN5bmNlZCB3aXRoIHRoZSB2YWx1ZSBvZiDigJxjb3VudGVkX2J54oCd LiBMTFZN4oCZcyBSRkMgYWxzbyBoYXZlIHRoZSBzaW1pbGFyIHJlcXVpcmVtZW50Og0KPj4+IGh0 dHBzOi8vZGlzY291cnNlLmxsdm0ub3JnL3QvcmZjLWVuZm9yY2luZy1ib3VuZHMtc2FmZXR5LWlu LWMtZmJvdW5kcy1zYWZldHkvNzA4NTQjbWFpbnRhaW5pbmctY29ycmVjdG5lc3Mtb2YtYm91bmRz LWFubm90YXRpb25zLTE4DQo+PiANCj4+IFJpZ2h0LCBJJ20gc2F5aW5nIGl0IHdvdWxkIGJlIG5p Y2UgaWYgX19hbGxvY19zaXplIHdhcyBjaGVja2VkIGFzIHdlbGwsDQo+PiBpbiB0aGUgc2Vuc2Ug dGhhdCBpZiBpdCBpcyBhdmFpbGFibGUsIGl0IGtub3dzIHdpdGhvdXQgcXVlc3Rpb24gd2hhdCB0 aGUNCj4+IHNpemUgb2YgdGhlIGFsbG9jYXRpb24gaXMuIElmIF9fYWxsb2Nfc2l6ZSBhbmQgX19j b3VudGVkX2J5IGNvbmZsaWN0LA0KPj4gdGhlIHNtYWxsZXIgb2YgdGhlIHR3byBzaG91bGQgYmUg dGhlIHRydXRoLg0KPiANCj4gSSBkb27igJl0IHRoaW5rIHRoYXQgIOKAnGlmIF9fYWxsb2Nfc2l6 ZSBhbmQgX19jb3VudGVkX2J5IGNvbmZsaWN0LCB0aGUgc21hbGxlciBvZiB0aGUgdHdvIHNob3Vs ZCBiZSB0aGUgdHJ1dGjigJ0gd2lsbCB3b3JrIGNvcnJlY3RseS4NCj4gDQo+IFdoZW4gX19hbGxv Y19zaXplIGlzIGxhcmdlciB0aGFuIHRoZSB2YWx1ZSBvZiBfX2NvdW50ZWRfYnksIGl04oCZcyBv a2F5LiANCj4gQnV0IHdoZW4gdGhlIHZhbHVlIG9mIF9fY291bnRlZF9ieSBpcyBsYXJnZXIgdGhh biB0aGUgX19hbGxvY19zaXplLCB0aGUgYXJyYXkgYm91bmQgY2hlY2sgb3Igb2JqZWN0IHNpemUg c2FuaXRpemVyIG1pZ2h0IG5vdCB3b3JrIGNvcnJlY3RseS4NCj4gDQo+IA0KPiBQbGVhc2Ugc2Vl IHRoZSBmb2xsb3dpbmcgZXhhbXBsZToNCj4gDQo+IHN0cnVjdCBncm93cyB7DQo+IAlpbnQgYWxs b2NfY291bnQ7DQo+IAlpbnQgdmFsaWRfY291bnQ7DQo+IAlpbnQgIGl0ZW1bXSBfX2NvdW50ZWRf YnkodmFsaWRfY291bnQpOw0KPiB9ICpwOw0KPiANCj4gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX25v aW5saW5lX18pKSBzb21ldGhpbmcgKGludCBuKQ0KPiB7DQo+IAlwID0gbWFsbG9jKHNpemVvZigq cCkgKyBzaXplb2YoKnAtPml0ZW0pICogMTAwKTsNCj4gCXAtPmFsbG9jX2NvdW50ID0gMTAwOw0K PiAJcC0+dmFsaWRfY291bnQgPSAxMDI7DQo+IAlwLT5pdGVtW25dID0gMTA7CQkvLyBib3RoIF9h bGxvY19zaXplIGFuZCB0aGUgdmFsdWUgb2YgX19jb3VudGVkX2J5IGFyZSBhdmFpbGFibGUgaW4g dGhpcyByb3V0aW5lLCB0aGUgc21hbGxlciBvbmUgaXMgLCAxMDA7DQo+IA0KPiB9DQo+IA0KPiB2 b2lkIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpICBzb21ldGhpbmdfMiAoaW50IG4pDQo+ IHsNCj4gICBwLT5pdGVtW25dID0gMTA7ICAgLy8gb25seSB0aGUgdmFsdWUgb2YgIF9fY291bnRl ZF9ieSBpcyBhdmFpbGFibGUgaW4gdGhpcyByb3V0aW5lLCB3aGljaCBpcyAxMDI7ICANCj4gfQ0K PiANCj4gSW50IG1haW4NCj4gew0KPiAgIFNvbWV0aGluZyAoMTAxKTsNCj4gICBTb21ldGhpbmdf MiAoMTAxKTsNCj4gfQ0KPiANCj4gDQo+IEZvciB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIG91dC1v Zi1ib3VuZCBhcnJheSBhY2Nlc3MgaW4gcm91dGluZSDigJxzb21ldGhpbmfigJ0gc2hvdWxkIGJl IGFibGUgdG8gYmUgY2F1Z2h0IGJ5IHRoZSBjb21waWxlci4NCj4gSG93ZXZlciwgdGhlIG91dC1v Zi1ib3VuZCBhcnJheSBhY2Nlc3MgaW4gdGhlIHJvdXRpbmUg4oCcc29tZXRoaW5nXzLigJ0gd2ls bCBOT1QgYmUgYWJsZSB0byBiZSBjYXVnaHQgYnkgdGhlIGNvbXBpbGVyLg0KPiANCj4gU2luY2Ug aW4gdGhlIHJvdXRpbmUg4oCcc29tZXRoaW5nXzLigJ0gLCB0aGUgY29tcGlsZXIgZG9u4oCZdCBr bm93IHRoZSBhbGxvY19zaXplLCB0aGUgb25seSBhdmFpbGFibGUgaW5mbyBpcyB0aGUgY291bnRl ZF9ieSB2YWx1ZQ0KPiB0aHJvdWdoIHRoZSBhdHRyaWJ1dGUuICBCdXQgdGhpcyB2YWx1ZSBpcyBi aWdnZXIgdGhhbiB0aGUgUkVBTCBzaXplIG9mIHRoZSBhcnJheS4gVGhlcmVmb3JlIHRoZSBjb21w aWxlciBjYW5ub3QgZGV0ZWN0IHRoZSANCj4gb3V0LW9mLWJvdW5kIGFycmF5IGFjY2VzcyBpbiB0 aGUgcm91dGluZSBzb21ldGhpbmdfMg0KPiANCj4gDQo+IEJhc2VkIG9uIHRoZSBhYm92ZSBvYnNl cnZhdGlvbiwgSSB0aGluayB3ZSBzaG91bGQgYWRkIHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnQ6 IA0KPiANCj4gVGhlIHZhbHVlIG9mIOKAnGNvdW50ZWRfYnnigJ0gc2hvdWxkIGJlIGVxdWFsIG9y IFNNQUxMRVIgdGhhbiB0aGUgcmVhbCBhbGxvY19zaXplIGZvciB0aGUgZmxleGlibGUgYXJyYXkg bWVtYmVyLiANCj4gDQo+IFRoaXMgaXMgdGhlIHNhbWUgcmVxdWlyZW1lbnQgYXMgdGhlIExMVk0g UkZDLiANCj4gaHR0cHM6Ly9kaXNjb3Vyc2UubGx2bS5vcmcvdC9yZmMtZW5mb3JjaW5nLWJvdW5k cy1zYWZldHktaW4tYy1mYm91bmRzLXNhZmV0eS83MDg1NCNtYWludGFpbmluZy1jb3JyZWN0bmVz cy1vZi1ib3VuZHMtYW5ub3RhdGlvbnMtMTgNCj4gDQo+ICJ0aGUgY29tcGlsZXIgaW5zZXJ0cyBh ZGRpdGlvbmFsIGNoZWNrcyB0byBlbnN1cmUgdGhlIG5ldyBidWYgaGFzIGF0IGxlYXN0IGFzIG1h bnkgZWxlbWVudHMgYXMgdGhlIG5ldyBjb3VudCBpbmRpY2F0ZXMu4oCdDQo+IExMVk0gaGFzIGFk ZGl0aW9uYWwgcmVxdWlyZW1lbnQgaW4gYWRkaXRpb24gdG8gdGhpcywgd2UgbWlnaHQgbmVlZCB0 byBjb25zaWRlciB0aG9zZSByZXF1aXJlbWVudCB0b28uIA0KPiANCj4gUWluZw0KPiANCj4+IEJ1 dCwgYXMgSSBzYWlkLCBpZiB0aGVyZSBpcyBzb21lIG5lZWQgdG8gZXhwbGljaXRseSBpZ25vcmUg X19hbGxvY19zaXplDQo+PiB3aGVuIF9fY291bnRlZF9ieSBpcyBwcmVzZW50LCBJIGNhbiBsaXZl IHdpdGggaXQ7IHdlIGp1c3QgbmVlZCB0bw0KPj4gZG9jdW1lbnQgaXQuDQo+PiANCj4+IElmIHRo ZSBSRkMgYW5kIHlvdSBhZ3JlZSB0aGF0IHRoZSBfX2NvdW50ZWRfYnkgdmFyaWFibGUgY2FuIG9u bHkgZXZlciBiZQ0KPj4gKHJlKWFzc2lnbmVkIGFmdGVyIHRoZSBmbGV4IGFycmF5IGhhcyBiZWVu IChyZSlhbGxvY2F0ZWQsIHRoZW4gSSBndWVzcw0KPj4gd2UnbGwgc2VlIGhvdyBpdCBnb2VzLiA6 KSBJIHRoaW5rIG1vc3QgcGxhY2VzIGluIHRoZSBrZXJuZWwgdXNpbmcNCj4+IF9fY291bnRlZF9i eSB3aWxsIGJlIGZpbmUsIGJ1dCBJIHN1c3BlY3Qgd2UgbWF5IGhhdmUgY2FzZXMgd2hlcmUgd2Ug bmVlZA0KPj4gdG8gdXBkYXRlIGl0IGxpa2UgaW4gdGhlIGxvb3AgSSBkZXNjcmliZWQgYWJvdmUu IElmIHRoYXQncyB0cnVlLCB3ZSBjYW4NCj4+IHJldmlzaXQgdGhlIHJlcXVpcmVtZW50IHRoZW4u IDopDQo+PiANCj4+IC1LZWVzDQo+PiANCj4+IC0tIA0KPj4gS2VlcyBDb29rDQo+IA0KDQo=