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 3A864385803D for ; Mon, 27 Jun 2022 14:19:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3A864385803D Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 25RDdH3q002153; Mon, 27 Jun 2022 14:19:29 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3gws52bbry-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Jun 2022 14:19:29 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 25REBUpI038569; Mon, 27 Jun 2022 14:19:28 GMT Received: from nam02-sn1-obe.outbound.protection.outlook.com (mail-sn1anam02lp2043.outbound.protection.outlook.com [104.47.57.43]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com with ESMTP id 3gwrt0xup3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 27 Jun 2022 14:19:28 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Uur+1NSQtTbTZykXe8etIaxbQ/qvb4JRQ8H6FJx6ZLaW++eTNvS2FXspJN/40lvsc+J1S2EfVIbI1UKuxiHlQRdMXBJIL9mLUeZVFLD88nb/CnCgfJSENRODL3qwKbYWiYFshpzjxC3/mpmeZh1TFPNwe7b4kq94ig+G93DBgAD5+ES927p9ZKNS0W8bUAFekjur+GdISAZFaknfC9DizH2ixe9oM6OkenjkvW+mV7jCkbrE7hrnWgFeVG/64QHSiQKarp1dmLI24syMG1Sa74MYkPhDI9YHp8IlLUG1pX297bp9ql7KhrPF6gJC97qIi+1F2kpFyWlYcF/nKjoU4Q== 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=tj8XpghDlqKEOZ1aSfFxMp2MowaR14gr3FrTCTlTaiA=; b=H1+YlvfPGLorSGPGstltb9WRlH2KEEZ/jgtBvIsT1erqs0dVMAlGXz0sjWm6EmhV6AUUJ0Rg8R6JtzEtMhZt0NME+uoTi3EN5hjww5/ZUiJsAw5Ttr/HKWspGRf5vOjUiYbjZLjvExHbSwiPpL7lQSO5yyr+dtFcsrSe7uPE0SHk2aLmXHr8/21Nu49U/fYEeUPjIZg8jZytxnRvr+CGfdVpA80GcbGJEO+BAj+hIRAZHEwb92kjb2obj8QFSJ8KRJL9JvLGm/nn+t3auwMuAaI5wh2Kp5GmsX33CfcyUyN+B+OWYt9RqEFmiOMAdSAHYNYkeEqZTf+3/tRNK6uChw== 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 Received: from CH2PR10MB4344.namprd10.prod.outlook.com (2603:10b6:610:af::19) by SN4PR10MB5542.namprd10.prod.outlook.com (2603:10b6:806:1e9::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.22; Mon, 27 Jun 2022 14:19:26 +0000 Received: from CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::2d14:50e4:3bb:4e30]) by CH2PR10MB4344.namprd10.prod.outlook.com ([fe80::2d14:50e4:3bb:4e30%9]) with mapi id 15.20.5373.018; Mon, 27 Jun 2022 14:19:26 +0000 From: Qing Zhao To: Jakub Jelinek , gcc-patches Paul A Clarke via CC: kees Cook , siddhesh Poyarekar , Martin Sebor Subject: [GCC 13][PATCH] PR101836: Add a new option -fstrict-flex-array[=n] and use it in __builtin_object_size Thread-Topic: [GCC 13][PATCH] PR101836: Add a new option -fstrict-flex-array[=n] and use it in __builtin_object_size Thread-Index: AQHYijDon+w7vPOzzU2oxqVhGzvYCw== Date: Mon, 27 Jun 2022 14:19:26 +0000 Message-ID: <45936DE9-4099-4ED2-8B2B-6956A2FB493D@oracle.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-mailer: Apple Mail (2.3608.120.23.2.7) x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a5878f86-fbc8-43ba-f3fe-08da58480a8d x-ms-traffictypediagnostic: SN4PR10MB5542:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: C5Ootu3YzT7Jp7NqH/FMJA7Z+YbPPRF/3/jfDPSxT1+ls+aesncu7aZ/dc03oLWciMjrDdSnQzf9iSmchxFPV8vi8qJJ3yUpYgQcCDgROTiMKvvH4kn8QaWZSKtzrR5DQ2LdWRYz/M3YrZhJXsNC3lGkmHUjh1FB7DOfNAuCjdvyvY/YNCPDd/5vknmDI0toDO/ZOWCvlw09IJyb/pE5VxH0PLlb1NX0dGoeRwXgc2qZ/0o+12yzkSoyCG39JGe+H/JyfXhlji+vv3kMMKno+3X1BcBRhAo40eweBmsmXbVTRugjzxG+FBujUvz7uD7IQkXQ3tHK07R7uIuMYw0yo+vp46ekBp9NLmmhbUTIHCSi2pgVCGBum7DGTkUeyHM85Dg98EJYfm5WpCSYaTboLuvRKTT0JjcaBhXaTdyGX24T9/id2VajNVKERIM2VFmS51TRUtIx5oLQ9ilev7OLjBcpxrLqCbp27TQeKwnaE/hmCZOstUx8Dlt8azM7S00SxFvlbBxMo2Fh9OYpZYKj//NqigdM7jcldikCcJ/oaecdjgEkTsyrgEWYECqCeKJLLznWzPVm6MSqxNBmwveBvPe+cDIgbM7cTiEov8QIZ6q7xKsb929D9u5ThRQgM+gnemOxGVwk+t5HHXSnwZcaIgofR2zonztiU41ExPMK313nrlHP6oHYw2irDk/cr2vpsHSFNaceVnqFayy06naOyltOnUVmb2OWJn7YIOCbsVelITdJ7ENQRdGKm6a7x8QSonZxChn0GshZZalrk4rlyi2Op1+yywaHMm5fhUYSidbehI+1mNQv3FMvGP8/qDfXckIPQMrHa6fUm9kxUVFctX6vGkJ5sFqJyEUqzGYM3uqBit6YdDMhvjHzec6KQU92FMCvb91/z8nxcnz0ljnyDA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR10MB4344.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(346002)(39860400002)(366004)(376002)(396003)(136003)(66446008)(44832011)(8936002)(38100700002)(5660300002)(8676002)(84970400001)(36756003)(2906002)(66946007)(99936003)(91956017)(6512007)(110136005)(316002)(66476007)(66556008)(6486002)(4326008)(71200400001)(54906003)(6506007)(478600001)(38070700005)(33656002)(64756008)(2616005)(86362001)(122000001)(41300700001)(186003)(76116006)(45980500001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?4Xak21FU0FFuCVMzml4gMZlpRPS87IGt9JEQLCAmz90Ski6K1GZoPMDz0afF?= =?us-ascii?Q?jrHMDZPL5by3XDigjN8/9H77INQ366cgDqXc7/Lkdx+xFCt9TABt5ls+9AcG?= =?us-ascii?Q?A1AaYy79LzVDAu4u8alcedVb2MYGRu5+E2KRhLP7SqS8l16s29VtBo/1752s?= =?us-ascii?Q?LZE835J99YtISjdFETjpc/rLi95z/uk+juycd2gaax0N0HfRJO6gdwYl0a0y?= =?us-ascii?Q?4zbt6iYlj06AiodX4yTgnK/th2jgISLNLxF2bYxpIAqznD/2rLVxxV7Na+OD?= =?us-ascii?Q?pBNdoxQ/1PxXbHKxsWp9ATYyB9zg9ajIeHjKOZdJPrvckM+YCVs7wfzRUCWo?= =?us-ascii?Q?6Uf3KSMxdHPs9J9f+I1ojLBQvUtCSXvm0CQaw73CM4e7tw73QK+brgGOEMoJ?= =?us-ascii?Q?JNEzn3xF7VXCwodUDNY30kP8VrmUBjyqzg9F1Bq6hZkgSFzzlpiZq2aKAPJP?= =?us-ascii?Q?Q46a0f4BKz0aa/rL0gfh6m4yZkUpA5R7Gsw8SJHMGPCBiih91NScM0PWGOBI?= =?us-ascii?Q?NRTJ1qR55VEI45KHwSS0RUUwSG2f/SCPYHlJv2G10beVKgEfDr5wGKwec2OV?= =?us-ascii?Q?ZXtS+O3pQO1r3ITI+7u/eELvzdSeh0pzfs34q+X9kJptpXvgq+HgantUY4Kt?= =?us-ascii?Q?6qz2FXiLGuzHx1KTLTQ0kqALMHqLLZNKaGf8flFmFSTPP9wihyRpOOsEail9?= =?us-ascii?Q?7ruZLTa4IGLDNJC3QL3Kfz1dCY4elhR/zcGHBNLL76lrySvdOQ6FzNYBinu4?= =?us-ascii?Q?dX5pdF/Lp8vJoQRJoERZV1RZAzpnn1KrEVDSVyRWPNhRpEjCc/ZObmW6JSbu?= =?us-ascii?Q?BdQxBrjFn4TsAs4obVL1Bfmk5su+6VG6czpW5q/Uk38VMuJx4JmP4jTxFNnb?= =?us-ascii?Q?8XmSPpVlGll71xcVZaWrtfatXpF7QKDe+VNhN5fYdFA3qOy2uKhKzI/si/Z/?= =?us-ascii?Q?lQGhjh/b01R+ofSenHu3cSDjP86ExjYnVqfZI9786jb+NhBYWQZl/QezYd+Z?= =?us-ascii?Q?4qslaT7uoSRletPwQrGJieSjYLjNgIa52EcJbQx/P82dt1Ck9EwoPgNNpup3?= =?us-ascii?Q?vkjYi9vpf+gIz2t47Tv6KaKO42x/UI2WYkImmf3igJaPgUmCT0dBsdZayamx?= =?us-ascii?Q?Md7vI21KlnEL7NlDLxgUAevdctj5/Hs5/sSFG1SMLSDo4Thj6pI/kePzpo/u?= =?us-ascii?Q?s6qUUEfMJpPdyxY4DJ79Fdq2FaM9EogKnNJtQg0x60A77f7OUT1Ze1JoOK9u?= =?us-ascii?Q?4NTyBUEn3AxUWz0V2Sgml497RtjAEvVXMrILlAYr1ZTEFoGikn7VcSD2GfFm?= =?us-ascii?Q?T23sWZCCRyovem57Zgh5+e10aTBy3eea2bpjMM6On2qoR22Zy6KPIPyux6SV?= =?us-ascii?Q?FxpyhZEYVvNS758FiA4Tnbt0S4rk6XM+D47oVvmCJaN0XnIJKhrsRvSNntjW?= =?us-ascii?Q?Go7a+Mh6wYEg9gw0AnQPfh57/oX5dGOWFI2zOB5x6rsHNy/93OFhS9oU08jt?= =?us-ascii?Q?iAnfNApNoS/vZz5aZS2F9M59VwAOkmN0P1yo3QQXqDu+8zLMaQdFx5Q/qzVN?= =?us-ascii?Q?d3Z+UEI+OULwuR9DB9B7MdBe0/FgwR73OO0rkJhPomV6k91sTx0TOvkxP/XJ?= =?us-ascii?Q?2fwUQ453CK4RqsFrPphAZ+Q=3D?= Content-Type: multipart/mixed; boundary="_002_45936DE940994ED28B2B6956A2FB493Doraclecom_" MIME-Version: 1.0 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4344.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a5878f86-fbc8-43ba-f3fe-08da58480a8d X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jun 2022 14:19:26.3999 (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: rglptf1EoslvxwiJT6n+92w0YsZ6yqruxmTkKTzGRl7Xmq6D0i03Wo6M5EGi0dvY4g1fHZ4V7nEgF0KgsfSXZQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR10MB5542 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.517, 18.0.883 definitions=2022-06-27_06:2022-06-24, 2022-06-27 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 bulkscore=0 phishscore=0 mlxlogscore=999 adultscore=0 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2204290000 definitions=main-2206270063 X-Proofpoint-ORIG-GUID: Y_77SFGwJ1ndgS95e7g_AyF9VTw_3MXy X-Proofpoint-GUID: Y_77SFGwJ1ndgS95e7g_AyF9VTw_3MXy X-Spam-Status: No, score=-5.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Jun 2022 14:19:33 -0000 --_002_45936DE940994ED28B2B6956A2FB493Doraclecom_ Content-Type: text/plain; charset="us-ascii" Content-ID: <5BD14087F9EA144595952572DB690E1B@namprd10.prod.outlook.com> Content-Transfer-Encoding: quoted-printable Hi,=20 Per our discussion in the bug report, I came up with the following patch: =3D=3D=3D=3D=3D=3D=3D PR101836: Add a new option -fstrict-flex-array[=3Dn] Add the new option and use it in __builtin_object_size. Treat the trailing array of a structure as a flexible array member in a stricter way. The value of 'n' controls the level of strictness. 'n'=3D0 is the least strict, all trailing arrays of structures are treated as flexible array members; This is the default behavior of GCC without spec= ify this option. 'n'=3D3 is the strictest, only when the trailing array is declared as a flexible array member per C99 standard onwards ([]), it is treated as a flexible array member; There are two more levels in between 0 and 3, which are provided to support older codes that use GCC zero-length array extension ([0]), or one-size arr= ay as flexible array member ([1]): When 'n' is 1, the trailing array is treated as a flexible array member when it is declared as either [], [0], or [1]; When 'n' is 2, the trailing array is treated as a flexible array member when it is declared as either [], or [0]. There are other places in GCC that conservatively treat flexible array memb= ers. A follow-up patch will make -ftrict-flex-array option to control all these places consistently. Bootstrapped and regression tested on both X86 and aarch64, no issues. Any comment and suggestion? Okay for commit to Gcc13? thanks. Qing =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D gcc/ PR tree-optimization/101836 * common.opt (fstrict-flex-array, fstrict-flex-array=3D): New option= s. * doc/invoke.texi (-fstrict-flex-array, -fstrict-flex-array=3D): Doc= ument. * tree-object-size.cc (addr_object_size): Call is_flexible_array_p t= o check whether an array is a flexible array. * tree.cc (special_array_member_type): New routine. (is_flexible_array_p): New routine. (component_ref_size): Call special_array_member_type to decide the type of special array member. * tree.h (enum struct special_array_member): Add is_vla, trail_flex. (special_array_member_type): New prototype. (is_flexible_array_p): New prototype. gcc/testsuite/ PR tree-optimization/101836 * gcc.dg/pr101836.c: New test. * gcc.dg/pr101836_1.c: New test. * gcc.dg/pr101836_2.c: New test. * gcc.dg/pr101836_3.c: New test. * gcc.dg/pr101836_4.c: New test. * gcc.dg/pr101836_5.c: New test. The complete patch is: --_002_45936DE940994ED28B2B6956A2FB493Doraclecom_ Content-Type: application/octet-stream; name="0001-PR101836-Add-a-new-option-fstrict-flex-array-n.patch" Content-Description: 0001-PR101836-Add-a-new-option-fstrict-flex-array-n.patch Content-Disposition: attachment; filename="0001-PR101836-Add-a-new-option-fstrict-flex-array-n.patch"; size=26062; creation-date="Mon, 27 Jun 2022 14:19:26 GMT"; modification-date="Mon, 27 Jun 2022 14:19:26 GMT" Content-ID: Content-Transfer-Encoding: base64 RnJvbSA4ODBmMTAyNGM1ZDFiOGQxMThmZjNjODRkM2RhNDNhZWJjMGFkMjdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBRaW5nIFpoYW8gPHFpbmcuemhhb0BvcmFjbGUuY29tPgpEYXRl OiBUaHUsIDE2IEp1biAyMDIyIDIxOjA1OjM5ICswMDAwClN1YmplY3Q6IFtQQVRDSF0gUFIxMDE4 MzY6IEFkZCBhIG5ldyBvcHRpb24gLWZzdHJpY3QtZmxleC1hcnJheVs9bl0KCkFkZCB0aGUgbmV3 IG9wdGlvbiBhbmQgdXNlIGl0IGluIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZS4KClRyZWF0IHRoZSB0 cmFpbGluZyBhcnJheSBvZiBhIHN0cnVjdHVyZSBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBp biBhCnN0cmljdGVyIHdheS4gIFRoZSB2YWx1ZSBvZiAnbicgY29udHJvbHMgdGhlIGxldmVsIG9m IHN0cmljdG5lc3MuCiduJz0wIGlzIHRoZSBsZWFzdCBzdHJpY3QsIGFsbCB0cmFpbGluZyBhcnJh eXMgb2Ygc3RydWN0dXJlcyBhcmUgdHJlYXRlZAphcyBmbGV4aWJsZSBhcnJheSBtZW1iZXJzOyBU aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIEdDQyB3aXRob3V0IHNwZWNpZnkKdGhpcyBv cHRpb24uCiduJz0zIGlzIHRoZSBzdHJpY3Rlc3QsIG9ubHkgd2hlbiB0aGUgdHJhaWxpbmcgYXJy YXkgaXMgZGVjbGFyZWQgYXMgYQpmbGV4aWJsZSBhcnJheSBtZW1iZXIgcGVyIEM5OSBzdGFuZGFy ZCBvbndhcmRzIChbXSksIGl0IGlzIHRyZWF0ZWQgYXMgYQpmbGV4aWJsZSBhcnJheSBtZW1iZXI7 ClRoZXJlIGFyZSB0d28gbW9yZSBsZXZlbHMgaW4gYmV0d2VlbiAwIGFuZCAzLCB3aGljaCBhcmUg cHJvdmlkZWQgdG8gc3VwcG9ydApvbGRlciBjb2RlcyB0aGF0IHVzZSBHQ0MgemVyby1sZW5ndGgg YXJyYXkgZXh0ZW5zaW9uIChbMF0pLCBvciBvbmUtc2l6ZSBhcnJheSBhcwpmbGV4aWJsZSBhcnJh eSBtZW1iZXIgKFsxXSk6CldoZW4gJ24nIGlzIDEsIHRoZSB0cmFpbGluZyBhcnJheSBpcyB0cmVh dGVkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyCndoZW4gaXQgaXMgZGVjbGFyZWQgYXMgZWl0 aGVyIFtdLCBbMF0sIG9yIFsxXTsKV2hlbiAnbicgaXMgMiwgdGhlIHRyYWlsaW5nIGFycmF5IGlz IHRyZWF0ZWQgYXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIKd2hlbiBpdCBpcyBkZWNsYXJlZCBh cyBlaXRoZXIgW10sIG9yIFswXS4KClRoZXJlIGFyZSBvdGhlciBwbGFjZXMgaW4gR0NDIHRoYXQg Y29uc2VydmF0aXZlbHkgdHJlYXQgZmxleGlibGUgYXJyYXkgbWVtYmVycy4KQSBmb2xsb3ctdXAg cGF0Y2ggd2lsbCBtYWtlIC1mdHJpY3QtZmxleC1hcnJheSBvcHRpb24gdG8gY29udHJvbCBhbGwg dGhlc2UKcGxhY2VzIGNvbnNpc3RlbnRseS4KCmdjYy8KCglQUiB0cmVlLW9wdGltaXphdGlvbi8x MDE4MzYKCSogY29tbW9uLm9wdCAoZnN0cmljdC1mbGV4LWFycmF5LCBmc3RyaWN0LWZsZXgtYXJy YXk9KTogTmV3IG9wdGlvbnMuCgkqIGRvYy9pbnZva2UudGV4aSAoLWZzdHJpY3QtZmxleC1hcnJh eSwgLWZzdHJpY3QtZmxleC1hcnJheT0pOiBEb2N1bWVudC4KCSogdHJlZS1vYmplY3Qtc2l6ZS5j YyAoYWRkcl9vYmplY3Rfc2l6ZSk6IENhbGwgaXNfZmxleGlibGVfYXJyYXlfcCB0bwoJY2hlY2sg d2hldGhlciBhbiBhcnJheSBpcyBhIGZsZXhpYmxlIGFycmF5LgoJKiB0cmVlLmNjIChzcGVjaWFs X2FycmF5X21lbWJlcl90eXBlKTogTmV3IHJvdXRpbmUuCgkoaXNfZmxleGlibGVfYXJyYXlfcCk6 IE5ldyByb3V0aW5lLgoJKGNvbXBvbmVudF9yZWZfc2l6ZSk6IENhbGwgc3BlY2lhbF9hcnJheV9t ZW1iZXJfdHlwZSB0byBkZWNpZGUgdGhlCgl0eXBlIG9mIHNwZWNpYWwgYXJyYXkgbWVtYmVyLgoJ KiB0cmVlLmggKGVudW0gc3RydWN0IHNwZWNpYWxfYXJyYXlfbWVtYmVyKTogQWRkIGlzX3ZsYSwg dHJhaWxfZmxleC4KCShzcGVjaWFsX2FycmF5X21lbWJlcl90eXBlKTogTmV3IHByb3RvdHlwZS4K CShpc19mbGV4aWJsZV9hcnJheV9wKTogTmV3IHByb3RvdHlwZS4KCmdjYy90ZXN0c3VpdGUvCgoJ UFIgdHJlZS1vcHRpbWl6YXRpb24vMTAxODM2CgkqIGdjYy5kZy9wcjEwMTgzNi5jOiBOZXcgdGVz dC4KCSogZ2NjLmRnL3ByMTAxODM2XzEuYzogTmV3IHRlc3QuCgkqIGdjYy5kZy9wcjEwMTgzNl8y LmM6IE5ldyB0ZXN0LgoJKiBnY2MuZGcvcHIxMDE4MzZfMy5jOiBOZXcgdGVzdC4KCSogZ2NjLmRn L3ByMTAxODM2XzQuYzogTmV3IHRlc3QuCgkqIGdjYy5kZy9wcjEwMTgzNl81LmM6IE5ldyB0ZXN0 LgotLS0KIGdjYy9jb21tb24ub3B0ICAgICAgICAgICAgICAgICAgICB8ICAgOCArKwogZ2NjL2Rv Yy9pbnZva2UudGV4aSAgICAgICAgICAgICAgIHwgIDMzICsrKysrKy0KIGdjYy90ZXN0c3VpdGUv Z2NjLmRnL3ByMTAxODM2LmMgICB8ICA2MCArKysrKysrKysrKwogZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvcHIxMDE4MzZfMS5jIHwgIDYwICsrKysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2djYy5kZy9w cjEwMTgzNl8yLmMgfCAgNjAgKysrKysrKysrKysKIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTAx ODM2XzMuYyB8ICA2MCArKysrKysrKysrKwogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIxMDE4MzZf NC5jIHwgIDYwICsrKysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjEwMTgzNl81LmMg fCAgNjAgKysrKysrKysrKysKIGdjYy90cmVlLW9iamVjdC1zaXplLmNjICAgICAgICAgICB8ICAx NiArKy0KIGdjYy90cmVlLmNjICAgICAgICAgICAgICAgICAgICAgICB8IDE1OSArKysrKysrKysr KysrKysrKysrKysrLS0tLS0tLS0KIGdjYy90cmVlLmggICAgICAgICAgICAgICAgICAgICAgICB8 ICAxNiArKy0KIDExIGZpbGVzIGNoYW5nZWQsIDUzNiBpbnNlcnRpb25zKCspLCA1NiBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjEwMTgzNi5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIxMDE4MzZfMS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIxMDE4MzZfMi5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIxMDE4MzZfMy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIxMDE4MzZfNC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIxMDE4MzZfNS5jCgpkaWZmIC0tZ2l0IGEv Z2NjL2NvbW1vbi5vcHQgYi9nY2MvY29tbW9uLm9wdAppbmRleCAzMjkxN2FhZmNhZS4uZTI4Njk3 YWI4YjEgMTAwNjQ0Ci0tLSBhL2djYy9jb21tb24ub3B0CisrKyBiL2djYy9jb21tb24ub3B0CkBA IC0yNzcyLDYgKzI3NzIsMTQgQEAgZnN0cmljdC1hbGlhc2luZwogQ29tbW9uIFZhcihmbGFnX3N0 cmljdF9hbGlhc2luZykgT3B0aW1pemF0aW9uCiBBc3N1bWUgc3RyaWN0IGFsaWFzaW5nIHJ1bGVz IGFwcGx5LgogCitmc3RyaWN0LWZsZXgtYXJyYXkKK0NvbW1vbiBBbGlhcyhmc3RyaWN0LWZsZXgt YXJyYXk9LDMsMCkKKworZnN0cmljdC1mbGV4LWFycmF5PQorQ29tbW9uIEpvaW5lZCBSZWplY3RO ZWdhdGl2ZSBVSW50ZWdlciBWYXIoZmxhZ19zdHJpY3RfZmxleF9hcnJheSkgSW5pdCgwKSBJbnRl Z2VyUmFuZ2UoMCwzKSBPcHRpbWl6YXRpb24KKy1mc3RyaWN0LWZsZXgtYXJyYXk9PGxldmVsPiAg ICBUcmVhdCB0aGUgdHJhaWxpbmcgYXJyYXkgb2YgYSBzdHJ1Y3R1cmUgYXMgYSBmbGV4aWJsZSBh cnJheSBpbiBhIHN0cmljdGVyIHdheS4gIFRoZSBkZWZhdWx0IGlzIHRyZWF0aW5nIGFsbCB0cmFp bGluZyBhcnJheXMgb2Ygc3RydWN0dXJlcyBhcyBmbGV4aWJsZSBhcnJheXMuCisKKwogZnN0cmlj dC1vdmVyZmxvdwogQ29tbW9uCiBUcmVhdCBzaWduZWQgb3ZlcmZsb3cgYXMgdW5kZWZpbmVkLiAg TmVnYXRlZCBhcyAtZndyYXB2IC1md3JhcHYtcG9pbnRlci4KZGlmZiAtLWdpdCBhL2djYy9kb2Mv aW52b2tlLnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCmluZGV4IDgxZDEzZjRlNzhlLi43YTcy ZTI5Y2VkZiAxMDA2NDQKLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQorKysgYi9nY2MvZG9jL2lu dm9rZS50ZXhpCkBAIC01NzksNyArNTc5LDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1D KysgRGlhbGVjdHN9LgogLWZzcGxpdC1wYXRocyBAZ29sCiAtZnNwbGl0LXdpZGUtdHlwZXMgIC1m c3BsaXQtd2lkZS10eXBlcy1lYXJseSAgLWZzc2EtYmFja3Byb3AgIC1mc3NhLXBoaW9wdCBAZ29s CiAtZnN0ZGFyZy1vcHQgIC1mc3RvcmUtbWVyZ2luZyAgLWZzdHJpY3QtYWxpYXNpbmcgLWZpcGEt c3RyaWN0LWFsaWFzaW5nIEBnb2wKLS1mdGhyZWFkLWp1bXBzICAtZnRyYWNlciAgLWZ0cmVlLWJp dC1jY3AgQGdvbAorLWZzdHJpY3QtZmxleC1hcnJheVs9QHZhcntufV0gLWZ0aHJlYWQtanVtcHMg IC1mdHJhY2VyICAtZnRyZWUtYml0LWNjcCBAZ29sCiAtZnRyZWUtYnVpbHRpbi1jYWxsLWRjZSAg LWZ0cmVlLWNjcCAgLWZ0cmVlLWNoIEBnb2wKIC1mdHJlZS1jb2FsZXNjZS12YXJzICAtZnRyZWUt Y29weS1wcm9wICAtZnRyZWUtZGNlICAtZnRyZWUtZG9taW5hdG9yLW9wdHMgQGdvbAogLWZ0cmVl LWRzZSAgLWZ0cmVlLWZvcndwcm9wICAtZnRyZWUtZnJlICAtZmNvZGUtaG9pc3RpbmcgQGdvbApA QCAtMTI3ODcsNiArMTI3ODcsMzcgQEAgZnVuY3Rpb24gYm91bmRhcnkuCiBUaGUgQG9wdGlvbnst ZmlwYS1zdHJpY3QtYWxpYXNpbmd9IG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYW5kIGlz CiBlZmZlY3RpdmUgb25seSBpbiBjb21iaW5hdGlvbiB3aXRoIEBvcHRpb257LWZzdHJpY3QtYWxp YXNpbmd9LgogCitAaXRlbSAtZnN0cmljdC1mbGV4LWFycmF5CitAb3BpbmRleCBmc3RyaWN0LWZs ZXgtYXJyYXkKK0BvcGluZGV4IGZuby1zdHJpY3QtZmxleC1hcnJheQorVHJlYXQgdGhlIHRyYWls aW5nIGFycmF5IG9mIGEgc3RydWN0dXJlIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGluIGEK K3N0cmljdGVyIHdheS4KK1RoZSBwb3NpdGl2ZSBmb3JtIGlzIGVxdWl2YWxlbnQgdG8gQG9wdGlv bnstZnN0cmljdC1mbGV4LWFycmF5PTN9LCB3aGljaCBpcyB0aGUKK3N0cmljdGVzdC4gIEEgdHJh aWxpbmcgYXJyYXkgaXMgdHJlYXRlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBvbmx5IHdo ZW4gaXQKK2lzIGRlY2xhcmVkIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIHBlciBDOTkgc3Rh bmRhcmQgb253YXJkcy4KK1RoZSBuZWdhdGl2ZSBmb3JtIGlzIGVxdWl2YWxlbnQgdG8gQG9wdGlv bnstZnN0cmljdC1mbGV4LWFycmF5PTB9LCB3aGljaCBpcyB0aGUKK2xlYXN0IHN0cmljdC4gIEFs bCB0cmFpbGluZyBhcnJheXMgb2Ygc3RydWN0dXJlcyBhcmUgdHJlYXRlZCBhcyBmbGV4aWJsZSBh cnJheQorbWVtYmVycy4KKworQGl0ZW0gLWZzdHJpY3QtZmxleC1hcnJheT1AdmFye259CitAb3Bp bmRleCBmc3RyaWN0LWZsZXgtYXJyYXk9QHZhcntufQorVHJlYXQgdGhlIHRyYWlsaW5nIGFycmF5 IG9mIGEgc3RydWN0dXJlIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGluIGEKK3N0cmljdGVy IHdheS4gIFRoZSB2YWx1ZSBvZiBAdmFye259IGNvbnRyb2xzIHRoZSBsZXZlbCBvZiBzdHJpY3Ru ZXNzLgorQHZhcntufSBpcyAwIGlzIHRoZSBsZWFzdCBzdHJpY3QsIGFsbCB0cmFpbGluZyBhcnJh eXMgb2Ygc3RydWN0dXJlcyBhcmUgdHJlYXRlZAorYXMgZmxleGlibGUgYXJyYXkgbWVtYmVyczsg VGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBHQ0Mgd2l0aG91dCBzcGVjaWZ5Cit0aGlz IG9wdGlvbi4KK0B2YXJ7bn0gaXMgMyBpcyB0aGUgc3RyaWN0ZXN0LCBvbmx5IHdoZW4gdGhlIHRy YWlsaW5nIGFycmF5IGlzIGRlY2xhcmVkIGFzIGEKK2ZsZXhpYmxlIGFycmF5IG1lbWJlciBwZXIg Qzk5IHN0YW5kYXJkIG9ud2FyZHMgKFtdKSwgaXQgaXMgdHJlYXRlZCBhcyBhCitmbGV4aWJsZSBh cnJheSBtZW1iZXI7CitUaGVyZSBhcmUgdHdvIG1vcmUgbGV2ZWxzIGluIGJldHdlZW4gMCBhbmQg Mywgd2hpY2ggYXJlIHByb3ZpZGVkIHRvIHN1cHBvcnQKK29sZGVyIGNvZGVzIHRoYXQgdXNlIEdD QyB6ZXJvLWxlbmd0aCBhcnJheSBleHRlbnNpb24gKFswXSksIG9yIG9uZS1zaXplIGFycmF5IGFz CitmbGV4aWJsZSBhcnJheSBtZW1iZXIgKFsxXSk6CitXaGVuIEB2YXJ7bn0gaXMgMSwgdGhlIHRy YWlsaW5nIGFycmF5IGlzIHRyZWF0ZWQgYXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIKK3doZW4g aXQgaXMgZGVjbGFyZWQgYXMgZWl0aGVyIFtdLCBbMF0sIG9yIFsxXTsKK1doZW4gQHZhcntufSBp cyAyLCB0aGUgdHJhaWxpbmcgYXJyYXkgaXMgdHJlYXRlZCBhcyBhIGZsZXhpYmxlIGFycmF5IG1l bWJlcgord2hlbiBpdCBpcyBkZWNsYXJlZCBhcyBlaXRoZXIgW10sIG9yIFswXS4KKworCiBAaXRl bSAtZmFsaWduLWZ1bmN0aW9ucwogQGl0ZW14IC1mYWxpZ24tZnVuY3Rpb25zPUB2YXJ7bn0KIEBp dGVteCAtZmFsaWduLWZ1bmN0aW9ucz1AdmFye259OkB2YXJ7bX0KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ByMTAxODM2LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjEwMTgz Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNWI0ZTUxNjBhNAot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTAxODM2LmMKQEAgLTAs MCArMSw2MCBAQAorLyogLWZzdHJpY3QtZmxleC1hcnJheSBpcyBhbGlhc2VkIHdpdGggLWZ0cmlj dC1mbGV4LWFycmF5PTMsIHdoaWNoIGlzIHRoZQorICAgc3RyaWN0ZXN0LCBvbmx5IFtdIGlzIHRy ZWF0ZWQgYXMgZmxleGlibGUgYXJyYXkuICAqLyAKKy8qIFBSIHRyZWUtb3B0aW1pemF0aW9uLzEw MTgzNiAqLworLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZzdHJp Y3QtZmxleC1hcnJheSIgfSAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2RlZmluZSBleHBl Y3QocCwgX3YpIGRvIHsgXAorICAgIHNpemVfdCB2ID0gX3Y7IFwKKyAgICBpZiAocCA9PSB2KSBc CisgICAgICAgIHByaW50Zigib2s6ICAlcyA9PSAlemRcbiIsICNwLCBwKTsgXAorICAgIGVsc2Ug XAorCXsgIFwKKyAgICAgICAgICBwcmludGYoIldBVDogJXMgPT0gJXpkIChleHBlY3RlZCAlemQp XG4iLCAjcCwgcCwgdik7IFwKKwkgIF9fYnVpbHRpbl9hYm9ydCAoKTsgXAorCX0gXAorfSB3aGls ZSAoMCk7CisKK3N0cnVjdCB0cmFpbGluZ19hcnJheV8xIHsKKyAgICBpbnQgYTsKKyAgICBpbnQg YjsKKyAgICBpbnQgY1s0XTsKK307CisKK3N0cnVjdCB0cmFpbGluZ19hcnJheV8yIHsKKyAgICBp bnQgYTsKKyAgICBpbnQgYjsKKyAgICBpbnQgY1sxXTsKK307CisKK3N0cnVjdCB0cmFpbGluZ19h cnJheV8zIHsKKyAgICBpbnQgYTsKKyAgICBpbnQgYjsKKyAgICBpbnQgY1swXTsKK307CitzdHJ1 Y3QgdHJhaWxpbmdfYXJyYXlfNCB7CisgICAgaW50IGE7CisgICAgaW50IGI7CisgICAgaW50IGNb XTsKK307CisKK3ZvaWQgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkgc3R1ZmYoCisgICAg c3RydWN0IHRyYWlsaW5nX2FycmF5XzEgKm5vcm1hbCwKKyAgICBzdHJ1Y3QgdHJhaWxpbmdfYXJy YXlfMiAqdHJhaWxpbmdfMSwKKyAgICBzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMyAqdHJhaWxpbmdf MCwKKyAgICBzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfNCAqdHJhaWxpbmdfZmxleCkKK3sKKyAgICBl eHBlY3QoX19idWlsdGluX29iamVjdF9zaXplKG5vcm1hbC0+YywgMSksIDE2KTsKKyAgICBleHBl Y3QoX19idWlsdGluX29iamVjdF9zaXplKHRyYWlsaW5nXzEtPmMsIDEpLCA0KTsKKyAgICBleHBl Y3QoX19idWlsdGluX29iamVjdF9zaXplKHRyYWlsaW5nXzAtPmMsIDEpLCAwKTsKKyAgICBleHBl Y3QoX19idWlsdGluX29iamVjdF9zaXplKHRyYWlsaW5nX2ZsZXgtPmMsIDEpLCAtMSk7Cit9CisK K2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgc3R1ZmYoKHZvaWQgKilh cmd2WzBdLCAodm9pZCAqKWFyZ3ZbMF0sICh2b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2WzBd KTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv cHIxMDE4MzZfMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIxMDE4MzZfMS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMGVhMjA0MjdhNQotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTAxODM2XzEuYwpAQCAtMCwwICsxLDYwIEBA CisvKiAtZnN0cmljdC1mbGV4LWFycmF5PTMgaXMgdGhlIHN0cmljdGVzdCwgb25seSBbXSBpcyB0 cmVhdGVkIGFzCisgICBmbGV4aWJsZSBhcnJheS4gICovIAorLyogUFIgdHJlZS1vcHRpbWl6YXRp b24vMTAxODM2ICovCisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAt ZnN0cmljdC1mbGV4LWFycmF5PTMiIH0gKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNkZWZp bmUgZXhwZWN0KHAsIF92KSBkbyB7IFwKKyAgICBzaXplX3QgdiA9IF92OyBcCisgICAgaWYgKHAg PT0gdikgXAorICAgICAgICBwcmludGYoIm9rOiAgJXMgPT0gJXpkXG4iLCAjcCwgcCk7IFwKKyAg ICBlbHNlIFwKKwl7ICBcCisgICAgICAgICAgcHJpbnRmKCJXQVQ6ICVzID09ICV6ZCAoZXhwZWN0 ZWQgJXpkKVxuIiwgI3AsIHAsIHYpOyBcCisJICBfX2J1aWx0aW5fYWJvcnQgKCk7IFwKKwl9IFwK K30gd2hpbGUgKDApOworCitzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMSB7CisgICAgaW50IGE7Cisg ICAgaW50IGI7CisgICAgaW50IGNbNF07Cit9OworCitzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMiB7 CisgICAgaW50IGE7CisgICAgaW50IGI7CisgICAgaW50IGNbMV07Cit9OworCitzdHJ1Y3QgdHJh aWxpbmdfYXJyYXlfMyB7CisgICAgaW50IGE7CisgICAgaW50IGI7CisgICAgaW50IGNbMF07Cit9 Oworc3RydWN0IHRyYWlsaW5nX2FycmF5XzQgeworICAgIGludCBhOworICAgIGludCBiOworICAg IGludCBjW107Cit9OworCit2b2lkIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpIHN0dWZm KAorICAgIHN0cnVjdCB0cmFpbGluZ19hcnJheV8xICpub3JtYWwsCisgICAgc3RydWN0IHRyYWls aW5nX2FycmF5XzIgKnRyYWlsaW5nXzEsCisgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzMgKnRy YWlsaW5nXzAsCisgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzQgKnRyYWlsaW5nX2ZsZXgpCit7 CisgICAgZXhwZWN0KF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShub3JtYWwtPmMsIDEpLCAxNik7Cisg ICAgZXhwZWN0KF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSh0cmFpbGluZ18xLT5jLCAxKSwgNCk7Cisg ICAgZXhwZWN0KF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSh0cmFpbGluZ18wLT5jLCAxKSwgMCk7Cisg ICAgZXhwZWN0KF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSh0cmFpbGluZ19mbGV4LT5jLCAxKSwgLTEp OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIHN0dWZmKCh2 b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2WzBdLCAodm9pZCAqKWFyZ3ZbMF0sICh2b2lkICop YXJndlswXSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3ByMTAxODM2XzIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTAxODM2XzIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWJiZTg4ZjQzM2MKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjEwMTgzNl8yLmMKQEAgLTAsMCAr MSw2MCBAQAorLyogV2hlbiAtZnN0cmljdC1mbGV4LWFycmF5PTIsIG9ubHkgW10gYW5kIFswXSBh cmUgdHJlYXRlZCBhcyBmbGV4aWFibGUKKyAgIGFycmF5cy4gICovCisvKiBQUiB0cmVlLW9wdGlt aXphdGlvbi8xMDE4MzYgKi8KKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8yIC1mc3RyaWN0LWZsZXgtYXJyYXk9MiIgfSAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKwor I2RlZmluZSBleHBlY3QocCwgX3YpIGRvIHsgXAorICAgIHNpemVfdCB2ID0gX3Y7IFwKKyAgICBp ZiAocCA9PSB2KSBcCisgICAgICAgIHByaW50Zigib2s6ICAlcyA9PSAlemRcbiIsICNwLCBwKTsg XAorICAgIGVsc2UgXAorCXsgIFwKKyAgICAgICAgICBwcmludGYoIldBVDogJXMgPT0gJXpkIChl eHBlY3RlZCAlemQpXG4iLCAjcCwgcCwgdik7IFwKKwkgIF9fYnVpbHRpbl9hYm9ydCAoKTsgXAor CX0gXAorfSB3aGlsZSAoMCk7CisKK3N0cnVjdCB0cmFpbGluZ19hcnJheV8xIHsKKyAgICBpbnQg YTsKKyAgICBpbnQgYjsKKyAgICBpbnQgY1s0XTsKK307CisKK3N0cnVjdCB0cmFpbGluZ19hcnJh eV8yIHsKKyAgICBpbnQgYTsKKyAgICBpbnQgYjsKKyAgICBpbnQgY1sxXTsKK307CisKK3N0cnVj dCB0cmFpbGluZ19hcnJheV8zIHsKKyAgICBpbnQgYTsKKyAgICBpbnQgYjsKKyAgICBpbnQgY1sw XTsKK307CitzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfNCB7CisgICAgaW50IGE7CisgICAgaW50IGI7 CisgICAgaW50IGNbXTsKK307CisKK3ZvaWQgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkg c3R1ZmYoCisgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzEgKm5vcm1hbCwKKyAgICBzdHJ1Y3Qg dHJhaWxpbmdfYXJyYXlfMiAqdHJhaWxpbmdfMSwKKyAgICBzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlf MyAqdHJhaWxpbmdfMCwKKyAgICBzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfNCAqdHJhaWxpbmdfZmxl eCkKK3sKKyAgICBleHBlY3QoX19idWlsdGluX29iamVjdF9zaXplKG5vcm1hbC0+YywgMSksIDE2 KTsKKyAgICBleHBlY3QoX19idWlsdGluX29iamVjdF9zaXplKHRyYWlsaW5nXzEtPmMsIDEpLCA0 KTsKKyAgICBleHBlY3QoX19idWlsdGluX29iamVjdF9zaXplKHRyYWlsaW5nXzAtPmMsIDEpLCAt MSk7CisgICAgZXhwZWN0KF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSh0cmFpbGluZ19mbGV4LT5jLCAx KSwgLTEpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIHN0 dWZmKCh2b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2WzBdLCAodm9pZCAqKWFyZ3ZbMF0sICh2 b2lkICopYXJndlswXSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ByMTAxODM2XzMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTAxODM2 XzMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDRiYTBhZmU1YmMK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjEwMTgzNl8zLmMKQEAg LTAsMCArMSw2MCBAQAorLyogV2hlbiAtZnN0cmljdC1mbGV4LWFycmF5PTEsIFtdLCBbMF0sIGFu ZCBbMV0gYXJlIHRyZWF0ZWQgYXMgZmxleGlibGUKKyAgIGFycmF5cy4gICovCisvKiBQUiB0cmVl LW9wdGltaXphdGlvbi8xMDE4MzYgKi8KKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLU8yIC1mc3RyaWN0LWZsZXgtYXJyYXk9MSIgfSAqLworCisjaW5jbHVkZSA8c3RkaW8u aD4KKworI2RlZmluZSBleHBlY3QocCwgX3YpIGRvIHsgXAorICAgIHNpemVfdCB2ID0gX3Y7IFwK KyAgICBpZiAocCA9PSB2KSBcCisgICAgICAgIHByaW50Zigib2s6ICAlcyA9PSAlemRcbiIsICNw LCBwKTsgXAorICAgIGVsc2UgXAorCXsgIFwKKyAgICAgICAgICBwcmludGYoIldBVDogJXMgPT0g JXpkIChleHBlY3RlZCAlemQpXG4iLCAjcCwgcCwgdik7IFwKKwkgIF9fYnVpbHRpbl9hYm9ydCAo KTsgXAorCX0gXAorfSB3aGlsZSAoMCk7CisKK3N0cnVjdCB0cmFpbGluZ19hcnJheV8xIHsKKyAg ICBpbnQgYTsKKyAgICBpbnQgYjsKKyAgICBpbnQgY1s0XTsKK307CisKK3N0cnVjdCB0cmFpbGlu Z19hcnJheV8yIHsKKyAgICBpbnQgYTsKKyAgICBpbnQgYjsKKyAgICBpbnQgY1sxXTsKK307CisK K3N0cnVjdCB0cmFpbGluZ19hcnJheV8zIHsKKyAgICBpbnQgYTsKKyAgICBpbnQgYjsKKyAgICBp bnQgY1swXTsKK307CitzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfNCB7CisgICAgaW50IGE7CisgICAg aW50IGI7CisgICAgaW50IGNbXTsKK307CisKK3ZvaWQgX19hdHRyaWJ1dGVfXygoX19ub2lubGlu ZV9fKSkgc3R1ZmYoCisgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzEgKm5vcm1hbCwKKyAgICBz dHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMiAqdHJhaWxpbmdfMSwKKyAgICBzdHJ1Y3QgdHJhaWxpbmdf YXJyYXlfMyAqdHJhaWxpbmdfMCwKKyAgICBzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfNCAqdHJhaWxp bmdfZmxleCkKK3sKKyAgICBleHBlY3QoX19idWlsdGluX29iamVjdF9zaXplKG5vcm1hbC0+Yywg MSksIDE2KTsKKyAgICBleHBlY3QoX19idWlsdGluX29iamVjdF9zaXplKHRyYWlsaW5nXzEtPmMs IDEpLCAtMSk7CisgICAgZXhwZWN0KF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSh0cmFpbGluZ18wLT5j LCAxKSwgLTEpOworICAgIGV4cGVjdChfX2J1aWx0aW5fb2JqZWN0X3NpemUodHJhaWxpbmdfZmxl eC0+YywgMSksIC0xKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sK KyAgICBzdHVmZigodm9pZCAqKWFyZ3ZbMF0sICh2b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2 WzBdLCAodm9pZCAqKWFyZ3ZbMF0pOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy5kZy9wcjEwMTgzNl80LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9w cjEwMTgzNl80LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIxMGQz Y2UzMTJkCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIxMDE4MzZf NC5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qIHdoZW4gLWZzdHJpY3QtZmxleC1hcnJheT0wLCBhbGwg dHJhaWxpbmcgYXJyYXlzIGFyZSB0cmVhdGVkIGFzCisgICBmbGV4aWJsZSBhcnJheXMuICAqLwor LyogUFIgdHJlZS1vcHRpbWl6YXRpb24vMTAxODM2ICovCisvKiB7IGRnLWRvIHJ1biB9ICovCisv KiB7IGRnLW9wdGlvbnMgIi1PMiAtZnN0cmljdC1mbGV4LWFycmF5PTAiIH0gKi8KKworI2luY2x1 ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUgZXhwZWN0KHAsIF92KSBkbyB7IFwKKyAgICBzaXplX3Qg diA9IF92OyBcCisgICAgaWYgKHAgPT0gdikgXAorICAgICAgICBwcmludGYoIm9rOiAgJXMgPT0g JXpkXG4iLCAjcCwgcCk7IFwKKyAgICBlbHNlIFwKKwl7ICBcCisgICAgICAgICAgcHJpbnRmKCJX QVQ6ICVzID09ICV6ZCAoZXhwZWN0ZWQgJXpkKVxuIiwgI3AsIHAsIHYpOyBcCisJICBfX2J1aWx0 aW5fYWJvcnQgKCk7IFwKKwl9IFwKK30gd2hpbGUgKDApOworCitzdHJ1Y3QgdHJhaWxpbmdfYXJy YXlfMSB7CisgICAgaW50IGE7CisgICAgaW50IGI7CisgICAgaW50IGNbNF07Cit9OworCitzdHJ1 Y3QgdHJhaWxpbmdfYXJyYXlfMiB7CisgICAgaW50IGE7CisgICAgaW50IGI7CisgICAgaW50IGNb MV07Cit9OworCitzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMyB7CisgICAgaW50IGE7CisgICAgaW50 IGI7CisgICAgaW50IGNbMF07Cit9Oworc3RydWN0IHRyYWlsaW5nX2FycmF5XzQgeworICAgIGlu dCBhOworICAgIGludCBiOworICAgIGludCBjW107Cit9OworCit2b2lkIF9fYXR0cmlidXRlX18o KF9fbm9pbmxpbmVfXykpIHN0dWZmKAorICAgIHN0cnVjdCB0cmFpbGluZ19hcnJheV8xICpub3Jt YWwsCisgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzIgKnRyYWlsaW5nXzEsCisgICAgc3RydWN0 IHRyYWlsaW5nX2FycmF5XzMgKnRyYWlsaW5nXzAsCisgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5 XzQgKnRyYWlsaW5nX2ZsZXgpCit7CisgICAgZXhwZWN0KF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShu b3JtYWwtPmMsIDEpLCAtMSk7CisgICAgZXhwZWN0KF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSh0cmFp bGluZ18xLT5jLCAxKSwgLTEpOworICAgIGV4cGVjdChfX2J1aWx0aW5fb2JqZWN0X3NpemUodHJh aWxpbmdfMC0+YywgMSksIC0xKTsKKyAgICBleHBlY3QoX19idWlsdGluX29iamVjdF9zaXplKHRy YWlsaW5nX2ZsZXgtPmMsIDEpLCAtMSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCit7CisgICAgc3R1ZmYoKHZvaWQgKilhcmd2WzBdLCAodm9pZCAqKWFyZ3ZbMF0sICh2 b2lkICopYXJndlswXSwgKHZvaWQgKilhcmd2WzBdKTsKKworICAgIHJldHVybiAwOworfQpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIxMDE4MzZfNS5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvcHIxMDE4MzZfNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi4yZjZiNWY3YWUxZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ByMTAxODM2XzUuYwpAQCAtMCwwICsxLDYwIEBACisvKiAtZm5vLXN0cmljdC1mbGV4LWFycmF5 IGlzIGFsaWFzZWQgdG8gLWZzdHJpY3QtZmxleC1hcnJheT0wLAorICAgYWxsIHRyYWlsaW5nIGFy cmF5cyBhcmUgdHJlYXRlZCBhcyBmbGV4aWJsZSBhcnJheS4gICovCisvKiBQUiB0cmVlLW9wdGlt aXphdGlvbi8xMDE4MzYgKi8KKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8yIC1mbm8tc3RyaWN0LWZsZXgtYXJyYXkiIH0gKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisK KyNkZWZpbmUgZXhwZWN0KHAsIF92KSBkbyB7IFwKKyAgICBzaXplX3QgdiA9IF92OyBcCisgICAg aWYgKHAgPT0gdikgXAorICAgICAgICBwcmludGYoIm9rOiAgJXMgPT0gJXpkXG4iLCAjcCwgcCk7 IFwKKyAgICBlbHNlIFwKKwl7ICBcCisgICAgICAgICAgcHJpbnRmKCJXQVQ6ICVzID09ICV6ZCAo ZXhwZWN0ZWQgJXpkKVxuIiwgI3AsIHAsIHYpOyBcCisJICBfX2J1aWx0aW5fYWJvcnQgKCk7IFwK Kwl9IFwKK30gd2hpbGUgKDApOworCitzdHJ1Y3QgdHJhaWxpbmdfYXJyYXlfMSB7CisgICAgaW50 IGE7CisgICAgaW50IGI7CisgICAgaW50IGNbNF07Cit9OworCitzdHJ1Y3QgdHJhaWxpbmdfYXJy YXlfMiB7CisgICAgaW50IGE7CisgICAgaW50IGI7CisgICAgaW50IGNbMV07Cit9OworCitzdHJ1 Y3QgdHJhaWxpbmdfYXJyYXlfMyB7CisgICAgaW50IGE7CisgICAgaW50IGI7CisgICAgaW50IGNb MF07Cit9Oworc3RydWN0IHRyYWlsaW5nX2FycmF5XzQgeworICAgIGludCBhOworICAgIGludCBi OworICAgIGludCBjW107Cit9OworCit2b2lkIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykp IHN0dWZmKAorICAgIHN0cnVjdCB0cmFpbGluZ19hcnJheV8xICpub3JtYWwsCisgICAgc3RydWN0 IHRyYWlsaW5nX2FycmF5XzIgKnRyYWlsaW5nXzEsCisgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5 XzMgKnRyYWlsaW5nXzAsCisgICAgc3RydWN0IHRyYWlsaW5nX2FycmF5XzQgKnRyYWlsaW5nX2Zs ZXgpCit7CisgICAgZXhwZWN0KF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShub3JtYWwtPmMsIDEpLCAt MSk7CisgICAgZXhwZWN0KF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSh0cmFpbGluZ18xLT5jLCAxKSwg LTEpOworICAgIGV4cGVjdChfX2J1aWx0aW5fb2JqZWN0X3NpemUodHJhaWxpbmdfMC0+YywgMSks IC0xKTsKKyAgICBleHBlY3QoX19idWlsdGluX29iamVjdF9zaXplKHRyYWlsaW5nX2ZsZXgtPmMs IDEpLCAtMSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAg c3R1ZmYoKHZvaWQgKilhcmd2WzBdLCAodm9pZCAqKWFyZ3ZbMF0sICh2b2lkICopYXJndlswXSwg KHZvaWQgKilhcmd2WzBdKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Ry ZWUtb2JqZWN0LXNpemUuY2MgYi9nY2MvdHJlZS1vYmplY3Qtc2l6ZS5jYwppbmRleCAxMmJjMDg2 OGI3Ny4uOWY2ZTc4NjQwZWQgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLW9iamVjdC1zaXplLmNjCisr KyBiL2djYy90cmVlLW9iamVjdC1zaXplLmNjCkBAIC02MDQsOSArNjA0LDkgQEAgYWRkcl9vYmpl Y3Rfc2l6ZSAoc3RydWN0IG9iamVjdF9zaXplX2luZm8gKm9zaSwgY29uc3RfdHJlZSBwdHIsCiAJ ICBlbHNlIGlmICh2YXIgIT0gcHRfdmFyICYmIFRSRUVfQ09ERSAocHRfdmFyKSA9PSBNRU1fUkVG KQogCSAgICB7CiAJICAgICAgdHJlZSB2ID0gdmFyOwotCSAgICAgIC8qIEZvciAmWC0+ZmxkLCBj b21wdXRlIG9iamVjdCBzaXplIG9ubHkgaWYgZmxkIGlzbid0IHRoZSBsYXN0Ci0JCSBmaWVsZCwg YXMgc3RydWN0IHsgaW50IGk7IGNoYXIgY1sxXTsgfSBpcyBvZnRlbiB1c2VkIGluc3RlYWQKLQkJ IG9mIGZsZXhpYmxlIGFycmF5IG1lbWJlci4gICovCisJICAgICAgYm9vbCBpc19mbGV4aWJsZV9h cnJheSA9IGZhbHNlOworCSAgICAgIC8qIEZvciAmWC0+ZmxkLCBjb21wdXRlIG9iamVjdCBzaXpl IGlmIGZsZCBpc24ndCBhIGZsZXhpYmxlIGFycmF5CisJCSBtZW1iZXIuICAqLwogCSAgICAgIHdo aWxlICh2ICYmIHYgIT0gcHRfdmFyKQogCQlzd2l0Y2ggKFRSRUVfQ09ERSAodikpCiAJCSAgewpA QCAtNjI4LDYgKzYyOCw3IEBAIGFkZHJfb2JqZWN0X3NpemUgKHN0cnVjdCBvYmplY3Rfc2l6ZV9p bmZvICpvc2ksIGNvbnN0X3RyZWUgcHRyLAogCQkgICAgdiA9IE5VTExfVFJFRTsKIAkJICAgIGJy ZWFrOwogCQkgIGNhc2UgQ09NUE9ORU5UX1JFRjoKKwkJICAgIGlzX2ZsZXhpYmxlX2FycmF5ID0g aXNfZmxleGlibGVfYXJyYXlfcCAodik7CiAJCSAgICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUg KHYpKSAhPSBBUlJBWV9UWVBFKQogCQkgICAgICB7CiAJCQl2ID0gTlVMTF9UUkVFOwpAQCAtNjQ1 LDEyICs2NDYsOSBAQCBhZGRyX29iamVjdF9zaXplIChzdHJ1Y3Qgb2JqZWN0X3NpemVfaW5mbyAq b3NpLCBjb25zdF90cmVlIHB0ciwKIAkJCSYmIFRSRUVfQ09ERSAoVFJFRV9UWVBFIChUUkVFX09Q RVJBTkQgKHYsIDApKSkKIAkJCSAgID09IFJFQ09SRF9UWVBFKQogCQkgICAgICB7Ci0JCQl0cmVl IGZsZF9jaGFpbiA9IERFQ0xfQ0hBSU4gKFRSRUVfT1BFUkFORCAodiwgMSkpOwotCQkJZm9yICg7 IGZsZF9jaGFpbjsgZmxkX2NoYWluID0gREVDTF9DSEFJTiAoZmxkX2NoYWluKSkKLQkJCSAgaWYg KFRSRUVfQ09ERSAoZmxkX2NoYWluKSA9PSBGSUVMRF9ERUNMKQotCQkJICAgIGJyZWFrOwotCi0J CQlpZiAoZmxkX2NoYWluKQorCQkJLyogY29tcHV0ZSBvYmplY3Qgc2l6ZSBvbmx5IGlmIHYgaXMg bm90IGEKKwkJCSAgIGZsZXhpYmxlIGFycmF5IG1lbWJlci4gICovCisJCQlpZiAoIWlzX2ZsZXhp YmxlX2FycmF5KQogCQkJICB7CiAJCQkgICAgdiA9IE5VTExfVFJFRTsKIAkJCSAgICBicmVhazsK ZGlmZiAtLWdpdCBhL2djYy90cmVlLmNjIGIvZ2NjL3RyZWUuY2MKaW5kZXggMmJmYjY3NDg5YzYu LjMyOTY4NGI1N2RmIDEwMDY0NAotLS0gYS9nY2MvdHJlZS5jYworKysgYi9nY2MvdHJlZS5jYwpA QCAtMTI3NjIsNiArMTI3NjIsMTEyIEBAIGFycmF5X2F0X3N0cnVjdF9lbmRfcCAodHJlZSByZWYp CiAgIHJldHVybiB0cnVlOwogfQogCisvKiBSZXR1cm4gdGhlIHR5cGUgb2Ygc3BlY2lhbF9hcnJh eV9tZW1iZXIgZm9yIHRoZSBDT01QT05FTlRfUkVGIFJFRi4gICovCitzcGVjaWFsX2FycmF5X21l bWJlcgorc3BlY2lhbF9hcnJheV9tZW1iZXJfdHlwZSAodHJlZSByZWYpCit7CisgIGdjY19hc3Nl cnQgKFRSRUVfQ09ERSAocmVmKSA9PSBDT01QT05FTlRfUkVGKTsKKyAgYm9vbCB0cmFpbGluZyA9 IGFycmF5X2F0X3N0cnVjdF9lbmRfcCAocmVmKTsKKyAgc3BlY2lhbF9hcnJheV9tZW1iZXIgc2Ft ID0gc3BlY2lhbF9hcnJheV9tZW1iZXI6Om5vbmU7CisKKyAgLyogaWYgdGhpcyByZWZlcmVuY2Ug aXMgYSB0cmFpbGluZyBhcnJheSwgYW5kIGhhcyBhIEM5OSBmbGV4aWJsZSBhcnJheQorICAgICBt ZW1iZXIgdHlwZSwgaXQncyBhIHJlYWwgZmxleGlibGUgYXJyYXkgbWVtYmVyLiAgKi8KKyAgaWYg KHRyYWlsaW5nICYmIGZsZXhpYmxlX2FycmF5X3R5cGVfcCAoVFJFRV9UWVBFIChUUkVFX09QRVJB TkQgKHJlZiwgMCkpKSkKKyAgICByZXR1cm4gc3BlY2lhbF9hcnJheV9tZW1iZXI6OnRyYWlsX2Zs ZXg7CisKKyAgLyogVGhlIHJlZmVyZW5jZWQgbWVtYmVyLiAgKi8KKyAgdHJlZSBtZW1iZXIgPSBU UkVFX09QRVJBTkQgKHJlZiwgMSk7CisgIHRyZWUgbWVtdHlwZSA9IFRSRUVfVFlQRSAobWVtYmVy KTsKKworICAvKiBJZiB0aGUgdHlwZSBvZiB0aGUgcmVmZXJlbmNlZCBtZW1iZXIgaXMgbm90IEFS UkFZLCBub3QgYSBzcGVjaWFsCisgICAgIGFycmF5IG1lbWJlci4gICovCisgIGlmIChUUkVFX0NP REUgKG1lbXR5cGUpICE9IEFSUkFZX1RZUEUpCisgICAgcmV0dXJuIHNhbTsKKworICB0cmVlIG1l bXNpemUgPSBERUNMX1NJWkVfVU5JVCAobWVtYmVyKTsKKyAgaWYgKG1lbXNpemUpCisgICAgewor ICAgICAgYm9vbCB6ZXJvX2xlbmd0aCA9IGludGVnZXJfemVyb3AgKG1lbXNpemUpOworICAgICAg aWYgKCF0cmFpbGluZyAmJiAhemVyb19sZW5ndGgpCisJLyogTUVNQkVSIGlzIGVpdGhlciBhbiBp bnRlcmlvciBhcnJheSBvciBpcyBhbiBhcnJheSB3aXRoCisJICAgbW9yZSB0aGFuIG9uZSBlbGVt ZW50LCBub3QgYSBzcGVjaWFsIGFycmF5IG1lbWJlci4gICovCisJcmV0dXJuIHNhbTsKKworICAg ICAgaWYgKHplcm9fbGVuZ3RoKQorCXsKKwkgIGlmICh0cmFpbGluZykKKwkgICAgc2FtID0gc3Bl Y2lhbF9hcnJheV9tZW1iZXI6OnRyYWlsXzA7CisJICBlbHNlCisJICAgIHNhbSA9IHNwZWNpYWxf YXJyYXlfbWVtYmVyOjppbnRfMDsKKwl9CisgICAgICBlbHNlCisJaWYgKHRyZWUgZG9tID0gVFlQ RV9ET01BSU4gKG1lbXR5cGUpKQorCSAgaWYgKHRyZWUgbWluID0gVFlQRV9NSU5fVkFMVUUgKGRv bSkpCisJICAgIGlmICh0cmVlIG1heCA9IFRZUEVfTUFYX1ZBTFVFIChkb20pKQorCSAgICAgIGlm IChUUkVFX0NPREUgKG1pbikgPT0gSU5URUdFUl9DU1QKKwkJICAmJiBUUkVFX0NPREUgKG1heCkg PT0gSU5URUdFUl9DU1QpCisJCXsKKwkJICBvZmZzZXRfaW50IG1pbmlkeCA9IHdpOjp0b19vZmZz ZXQgKG1pbik7CisJCSAgb2Zmc2V0X2ludCBtYXhpZHggPSB3aTo6dG9fb2Zmc2V0IChtYXgpOwor CQkgIG9mZnNldF9pbnQgbmVsdHNtMSA9IG1heGlkeCAtIG1pbmlkeDsKKwkJICBpZiAobmVsdHNt MSA+IDApCisJCSAgICAvKiBNRU1CRVIgaXMgYW4gYXJyYXkgd2l0aCBhIGNvbnN0YW50IHNpemUg d2hpY2ggaXMgbW9yZQorCQkgICAgICAgdGhhbiBvbmUgZWxlbWVudCwgbm90IGEgc3BlY2lhbCBh cnJheSBtZW1iZXIuICAqLworCQkgICAgcmV0dXJuIHNhbTsKKworCQkgIGlmIChuZWx0c20xID09 IDAgJiYgdHJhaWxpbmcpCisJCSAgICBzYW0gPSBzcGVjaWFsX2FycmF5X21lbWJlcjo6dHJhaWxf MTsKKwkJfQorICAgICAgLyogV2hlbiBnZXR0aW5nIGhlcmUgYW5kIHRoZSB0eXBlIGhhcyBub3Qg YmVlbiBkZWNpZGVkIHlldCwgdGhlIGFycmF5IGlzCisJIGEgdmFyaWFibGUgbGVuZ3RoIGFycmF5 LiAgKi8KKyAgICAgIGlmIChzYW0gPT0gc3BlY2lhbF9hcnJheV9tZW1iZXI6Om5vbmUpCisJICBz YW0gPSBzcGVjaWFsX2FycmF5X21lbWJlcjo6aXNfdmxhOworCisgICAgfQorICByZXR1cm4gc2Ft OworfQorCisvKiBDaGVjayB3aGV0aGVyIHRoZSBjb21wb25lbnQgcmVmZXJlbmNlIFJFRiBpcyBh IGZsZXhpYmxlIGFycmF5OgorICAgaXQncyBkZWNpZGVkIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBm bGFnX3N0cmljdF9mbGV4X2FycmF5LiAgKi8KK2Jvb2wKK2lzX2ZsZXhpYmxlX2FycmF5X3AgKHRy ZWUgcmVmKQoreworICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKHJlZikgPT0gQ09NUE9ORU5UX1JF Rik7CisKKyAgYm9vbCBpc190cmFpbGluZ19hcnJheSA9IGFycmF5X2F0X3N0cnVjdF9lbmRfcCAo cmVmKTsKKyAgYm9vbCBpc19mbGV4aWJsZV9hcnJheSA9IGZhbHNlOworCisgIC8qIFNldCBmb3Ig YWNjZXNzZXMgdG8gc3BlY2lhbCB0cmFpbGluZyBhcnJheXMuICAqLworICBzcGVjaWFsX2FycmF5 X21lbWJlciBzYW0gPSBzcGVjaWFsX2FycmF5X21lbWJlcl90eXBlIChyZWYpOworCisgIHN3aXRj aCAoZmxhZ19zdHJpY3RfZmxleF9hcnJheSkKKyAgICB7CisgICAgICBjYXNlIDA6CisJLyogZGVm YXVsdCwgYWxsIHRyYWlsaW5nIGFycmF5cyBhcmUgZmxleGlhYmxlIGFycmF5cy4gICovCisJaXNf ZmxleGlibGVfYXJyYXkgPSBpc190cmFpbGluZ19hcnJheTsKKwlicmVhazsKKyAgICAgIGNhc2Ug MToKKwkvKiBMZXZlbCAxOiBhbGwgWzFdLCBbMF0sIGFuZCBbXSBhcmUgZmxleGlhYmxlIGFycmF5 cy4gICovCisJaWYgKHNhbSA9PSBzcGVjaWFsX2FycmF5X21lbWJlcjo6dHJhaWxfMSkKKwkgIGlz X2ZsZXhpYmxlX2FycmF5ID0gaXNfdHJhaWxpbmdfYXJyYXk7CisJLyogRkFMTFRIUk9VR0ggKi8K KyAgICAgIGNhc2UgMjoKKwkvKiBMZXZlbCAyOiBhbGwgWzBdLCBhbmQgW10gYXJlIGZsZXhpYWJs ZSBhcnJheXMuICAqLworCWlmIChzYW0gPT0gc3BlY2lhbF9hcnJheV9tZW1iZXI6OnRyYWlsXzAp CisJICBpc19mbGV4aWJsZV9hcnJheSA9IGlzX3RyYWlsaW5nX2FycmF5OworCS8qIEZBTExUSFJP VUdIICovCisgICAgICBjYXNlIDM6CisJLyogTGV2ZWwgMzogT25seSBbXSBhcmUgZmxleGlhYmxl IGFycmF5cy4gICovCisJaWYgKHNhbSA9PSBzcGVjaWFsX2FycmF5X21lbWJlcjo6dHJhaWxfZmxl eCkKKwkgIGlzX2ZsZXhpYmxlX2FycmF5ID0gaXNfdHJhaWxpbmdfYXJyYXk7CisJYnJlYWs7Cisg ICAgICBkZWZhdWx0OgorCWdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB9CisKKyAgcmV0dXJuIGlz X2ZsZXhpYmxlX2FycmF5OworfQorCiAvKiBSZXR1cm4gYSB0cmVlIHJlcHJlc2VudGluZyB0aGUg b2Zmc2V0LCBpbiBieXRlcywgb2YgdGhlIGZpZWxkIHJlZmVyZW5jZWQKICAgIGJ5IEVYUC4gIFRo aXMgZG9lcyBub3QgaW5jbHVkZSBhbnkgb2Zmc2V0IGluIERFQ0xfRklFTERfQklUX09GRlNFVC4g ICovCiAKQEAgLTEyODMxLDEyICsxMjkzNyw5IEBAIGdldF9pbml0aWFsaXplcl9mb3IgKHRyZWUg aW5pdCwgdHJlZSBkZWNsKQogdHJlZQogY29tcG9uZW50X3JlZl9zaXplICh0cmVlIHJlZiwgc3Bl Y2lhbF9hcnJheV9tZW1iZXIgKnNhbSAvKiA9IE5VTEwgKi8pCiB7Ci0gIGdjY19hc3NlcnQgKFRS RUVfQ09ERSAocmVmKSA9PSBDT01QT05FTlRfUkVGKTsKLQotICBzcGVjaWFsX2FycmF5X21lbWJl ciBzYW1idWY7Ci0gIGlmICghc2FtKQotICAgIHNhbSA9ICZzYW1idWY7Ci0gICpzYW0gPSBzcGVj aWFsX2FycmF5X21lbWJlcjo6bm9uZTsKKyAgc3BlY2lhbF9hcnJheV9tZW1iZXIgdGVtcF9zYW0g PSBzcGVjaWFsX2FycmF5X21lbWJlcl90eXBlIChyZWYpOworICBpZiAoc2FtKQorICAgICpzYW0g PSB0ZW1wX3NhbTsKIAogICAvKiBUaGUgb2JqZWN0L2FyZ3VtZW50IHJlZmVyZW5jZWQgYnkgdGhl IENPTVBPTkVOVF9SRUYgYW5kIGl0cyB0eXBlLiAgKi8KICAgdHJlZSBhcmcgPSBUUkVFX09QRVJB TkQgKHJlZiwgMCk7CkBAIC0xMjg1Nyw0MSArMTI5NjAsMTMgQEAgY29tcG9uZW50X3JlZl9zaXpl ICh0cmVlIHJlZiwgc3BlY2lhbF9hcnJheV9tZW1iZXIgKnNhbSAvKiA9IE5VTEwgKi8pCiAJcmV0 dXJuICh0cmVlX2ludF9jc3RfZXF1YWwgKG1lbXNpemUsIFRZUEVfU0laRV9VTklUIChtZW10eXBl KSkKIAkJPyBtZW1zaXplIDogTlVMTF9UUkVFKTsKIAotICAgICAgYm9vbCB0cmFpbGluZyA9IGFy cmF5X2F0X3N0cnVjdF9lbmRfcCAocmVmKTsKLSAgICAgIGJvb2wgemVyb19sZW5ndGggPSBpbnRl Z2VyX3plcm9wIChtZW1zaXplKTsKLSAgICAgIGlmICghdHJhaWxpbmcgJiYgIXplcm9fbGVuZ3Ro KQorICAgICAgaWYgKHRlbXBfc2FtID09IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjpub25lKQogCS8q IE1FTUJFUiBpcyBlaXRoZXIgYW4gaW50ZXJpb3IgYXJyYXkgb3IgaXMgYW4gYXJyYXkgd2l0aAot CSAgIG1vcmUgdGhhbiBvbmUgZWxlbWVudC4gICovCisJICAgbW9yZSB0aGFuIG9uZSBlbGVtZW50 LCBpLmUsIGEgbm9ybWFsIGFycmF5LiAgKi8KIAlyZXR1cm4gbWVtc2l6ZTsKIAotICAgICAgaWYg KHplcm9fbGVuZ3RoKQotCXsKLQkgIGlmICh0cmFpbGluZykKLQkgICAgKnNhbSA9IHNwZWNpYWxf YXJyYXlfbWVtYmVyOjp0cmFpbF8wOwotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgKnNhbSA9IHNw ZWNpYWxfYXJyYXlfbWVtYmVyOjppbnRfMDsKLQkgICAgICBtZW1zaXplID0gTlVMTF9UUkVFOwot CSAgICB9Ci0JfQotCi0gICAgICBpZiAoIXplcm9fbGVuZ3RoKQotCWlmICh0cmVlIGRvbSA9IFRZ UEVfRE9NQUlOIChtZW10eXBlKSkKLQkgIGlmICh0cmVlIG1pbiA9IFRZUEVfTUlOX1ZBTFVFIChk b20pKQotCSAgICBpZiAodHJlZSBtYXggPSBUWVBFX01BWF9WQUxVRSAoZG9tKSkKLQkgICAgICBp ZiAoVFJFRV9DT0RFIChtaW4pID09IElOVEVHRVJfQ1NUCi0JCSAgJiYgVFJFRV9DT0RFIChtYXgp ID09IElOVEVHRVJfQ1NUKQotCQl7Ci0JCSAgb2Zmc2V0X2ludCBtaW5pZHggPSB3aTo6dG9fb2Zm c2V0IChtaW4pOwotCQkgIG9mZnNldF9pbnQgbWF4aWR4ID0gd2k6OnRvX29mZnNldCAobWF4KTsK LQkJICBvZmZzZXRfaW50IG5lbHRzbTEgPSBtYXhpZHggLSBtaW5pZHg7Ci0JCSAgaWYgKG5lbHRz bTEgPiAwKQotCQkgICAgLyogTUVNQkVSIGlzIGFuIGFycmF5IHdpdGggbW9yZSB0aGFuIG9uZSBl bGVtZW50LiAgKi8KLQkJICAgIHJldHVybiBtZW1zaXplOwotCi0JCSAgaWYgKG5lbHRzbTEgPT0g MCkKLQkJICAgICpzYW0gPSBzcGVjaWFsX2FycmF5X21lbWJlcjo6dHJhaWxfMTsKLQkJfQorICAg ICAgaWYgKHRlbXBfc2FtID09IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjppbnRfMCkKKwltZW1zaXpl ID0gTlVMTF9UUkVFOwogCiAgICAgICAvKiBGb3IgYSByZWZlcmVuY2UgdG8gYSB6ZXJvLSBvciBv bmUtZWxlbWVudCBhcnJheSBtZW1iZXIgb2YgYSB1bmlvbgogCSB1c2UgdGhlIHNpemUgb2YgdGhl IHVuaW9uIGluc3RlYWQgb2YgdGhlIHNpemUgb2YgdGhlIG1lbWJlci4gICovCkBAIC0xMjkwOCw3 ICsxMjk4Myw3IEBAIGNvbXBvbmVudF9yZWZfc2l6ZSAodHJlZSByZWYsIHNwZWNpYWxfYXJyYXlf bWVtYmVyICpzYW0gLyogPSBOVUxMICovKQogICB0cmVlIGJhc2UgPSBnZXRfYWRkcl9iYXNlX2Fu ZF91bml0X29mZnNldCAocmVmLCAmYmFzZW9mZik7CiAgIGlmICghYmFzZSB8fCAhVkFSX1AgKGJh c2UpKQogICAgIHsKLSAgICAgIGlmICgqc2FtICE9IHNwZWNpYWxfYXJyYXlfbWVtYmVyOjppbnRf MCkKKyAgICAgIGlmICh0ZW1wX3NhbSAhPSBzcGVjaWFsX2FycmF5X21lbWJlcjo6aW50XzApCiAJ cmV0dXJuIE5VTExfVFJFRTsKIAogICAgICAgaWYgKFRSRUVfQ09ERSAoYXJnKSAhPSBDT01QT05F TlRfUkVGKQpAQCAtMTI5MjgsNyArMTMwMDMsNyBAQCBjb21wb25lbnRfcmVmX3NpemUgKHRyZWUg cmVmLCBzcGVjaWFsX2FycmF5X21lbWJlciAqc2FtIC8qID0gTlVMTCAqLykKICAgLyogRGV0ZXJt aW5lIHRoZSBiYXNlIHR5cGUgb2YgdGhlIHJlZmVyZW5jZWQgb2JqZWN0LiAgSWYgaXQncwogICAg ICB0aGUgc2FtZSBhcyBBUkdUWVBFIGFuZCBNRU1CRVIgaGFzIGEga25vd24gc2l6ZSwgcmV0dXJu IGl0LiAgKi8KICAgdHJlZSBidCA9IGJhc2V0eXBlOwotICBpZiAoKnNhbSAhPSBzcGVjaWFsX2Fy cmF5X21lbWJlcjo6aW50XzApCisgIGlmICh0ZW1wX3NhbSAhPSBzcGVjaWFsX2FycmF5X21lbWJl cjo6aW50XzApCiAgICAgd2hpbGUgKFRSRUVfQ09ERSAoYnQpID09IEFSUkFZX1RZUEUpCiAgICAg ICBidCA9IFRSRUVfVFlQRSAoYnQpOwogICBib29sIHR5cGVtYXRjaCA9IHVzZWxlc3NfdHlwZV9j b252ZXJzaW9uX3AgKGFyZ3R5cGUsIGJ0KTsKQEAgLTEyOTY4LDcgKzEzMDQzLDcgQEAgY29tcG9u ZW50X3JlZl9zaXplICh0cmVlIHJlZiwgc3BlY2lhbF9hcnJheV9tZW1iZXIgKnNhbSAvKiA9IE5V TEwgKi8pCiAJICBpZiAoREVDTF9QIChiYXNlKQogCSAgICAgICYmIERFQ0xfRVhURVJOQUwgKGJh c2UpCiAJICAgICAgJiYgYnQgPT0gYmFzZXR5cGUKLQkgICAgICAmJiAqc2FtICE9IHNwZWNpYWxf YXJyYXlfbWVtYmVyOjppbnRfMCkKKwkgICAgICAmJiB0ZW1wX3NhbSAhPSBzcGVjaWFsX2FycmF5 X21lbWJlcjo6aW50XzApCiAJICAgIC8qIFRoZSBzaXplIG9mIGEgZmxleGlibGUgYXJyYXkgbWVt YmVyIG9mIGFuIGV4dGVybiBzdHJ1Y3QKIAkgICAgICAgd2l0aCBubyBpbml0aWFsaXplciBjYW5u b3QgYmUgZGV0ZXJtaW5lZCAoaXQncyBkZWZpbmVkCiAJICAgICAgIGluIGFub3RoZXIgdHJhbnNs YXRpb24gdW5pdCBhbmQgY2FuIGhhdmUgYW4gaW5pdGlhbGl6ZXIKQEAgLTEzMDE3LDcgKzEzMDky LDcgQEAgY29tcG9uZW50X3JlZl9zaXplICh0cmVlIHJlZiwgc3BlY2lhbF9hcnJheV9tZW1iZXIg KnNhbSAvKiA9IE5VTEwgKi8pCiAJICA/IE5VTExfVFJFRSA6IHNpemVfemVyb19ub2RlKTsKIH0K IAotLyogUmV0dXJuIHRoZSBtYWNoaW5lIG1vZGUgb2YgVC4gIEZvciB2ZWN0b3JzLCByZXR1cm5z IHRoZSBtb2RlIG9mIHRoZQorLyogUmV0dXJuIHRoZSBtYWNtaGluZSBtb2RlIG9mIFQuICBGb3Ig dmVjdG9ycywgcmV0dXJucyB0aGUgbW9kZSBvZiB0aGUKICAgIGlubmVyIHR5cGUuICBUaGUgbWFp biB1c2UgY2FzZSBpcyB0byBmZWVkIHRoZSByZXN1bHQgdG8gSE9OT1JfTkFOUywKICAgIGF2b2lk aW5nIHRoZSBCTEttb2RlIHRoYXQgYSBkaXJlY3QgVFlQRV9NT0RFIChUKSBtaWdodCByZXR1cm4u ICAqLwogCmRpZmYgLS1naXQgYS9nY2MvdHJlZS5oIGIvZ2NjL3RyZWUuaAppbmRleCA1MDdlYTI1 MmI5NS4uY2QxYzMwZWUxNzkgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLmgKKysrIGIvZ2NjL3RyZWUu aApAQCAtNTUzOSwxMiArNTUzOSwyMCBAQCBleHRlcm4gdHJlZSBjb21wb25lbnRfcmVmX2ZpZWxk X29mZnNldCAodHJlZSk7CiAgICByZXR1cm5zIG51bGwuICAqLwogZW51bSBzdHJ1Y3Qgc3BlY2lh bF9hcnJheV9tZW1iZXIKICAgewotICAgbm9uZSwgICAgICAvKiBOb3QgYSBzcGVjaWFsIGFycmF5 IG1lbWJlci4gICovCi0gICBpbnRfMCwgICAgIC8qIEludGVyaW9yIGFycmF5IG1lbWJlciB3aXRo IHNpemUgemVyby4gICovCi0gICB0cmFpbF8wLCAgIC8qIFRyYWlsaW5nIGFycmF5IG1lbWJlciB3 aXRoIHNpemUgemVyby4gICovCi0gICB0cmFpbF8xICAgIC8qIFRyYWlsaW5nIGFycmF5IG1lbWJl ciB3aXRoIG9uZSBlbGVtZW50LiAgKi8KKyAgIG5vbmUsICAgICAgIC8qIE5vdCBhIHNwZWNpYWwg YXJyYXkgbWVtYmVyLiAgKi8KKyAgIGlzX3ZsYSwgICAgIC8qIHZhcmlhYmxlIGxlbmd0aCBhcnJh eS4gICovCisgICBpbnRfMCwgICAgICAvKiBJbnRlcmlvciBhcnJheSBtZW1iZXIgd2l0aCBzaXpl IHplcm8uICAqLworICAgdHJhaWxfMCwgICAgLyogVHJhaWxpbmcgYXJyYXkgbWVtYmVyIHdpdGgg c2l6ZSB6ZXJvLiAgKi8KKyAgIHRyYWlsXzEsICAgIC8qIFRyYWlsaW5nIGFycmF5IG1lbWJlciB3 aXRoIG9uZSBlbGVtZW50LiAgKi8KKyAgIHRyYWlsX2ZsZXggIC8qIEZsZXhpYmxlIGFycmF5IG1l bWJlciBwZXIgQzk5IHN0YW5kYXJkLCBbXS4gICovCiAgIH07CiAKKy8qIFJldHVybiB0aGUgdHlw ZSBvZiBzcGVjaWFsX2FycmF5X21lbWJlciBmb3IgdGhlIENPTVBPTkVOVF9SRUYgUkVGLiAgKi8K K2V4dGVybiBzcGVjaWFsX2FycmF5X21lbWJlciBzcGVjaWFsX2FycmF5X21lbWJlcl90eXBlICh0 cmVlKTsKKworLyogQ2hlY2sgd2hldGhlciB0aGUgY29tcG9uZW50IHJlZmVyZW5jZSBSRUYgaXMg YSBmbGV4aWJsZSBhcnJheS4gICovCitleHRlcm4gYm9vbCBpc19mbGV4aWJsZV9hcnJheV9wICh0 cmVlKTsKKwogLyogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBtZW1iZXIgcmVmZXJlbmNlZCBieSB0 aGUgQ09NUE9ORU5UX1JFRiwgdXNpbmcKICAgIGl0cyBpbml0aWFsaXplciBleHByZXNzaW9uIGlm IG5lY2Vzc2FyeSBpbiBvcmRlciB0byBkZXRlcm1pbmUgdGhlIHNpemUKICAgIG9mIGFuIGluaXRp YWxpemVkIGZsZXhpYmxlIGFycmF5IG1lbWJlci4gIFRoZSBzaXplIG1pZ2h0IGJlIHplcm8gZm9y Ci0tIAoyLjI3LjAKCg== --_002_45936DE940994ED28B2B6956A2FB493Doraclecom_--