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 X-Spam-Level: X-Spam-Status: No, score=-10.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EDBA7C433E3 for ; Wed, 22 Jul 2020 14:50:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A489A206D7 for ; Wed, 22 Jul 2020 14:50:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=marvell.com header.i=@marvell.com header.b="twWtqgzD"; dkim=pass (1024-bit key) header.d=marvell.onmicrosoft.com header.i=@marvell.onmicrosoft.com header.b="h++XFkLc" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732699AbgGVOuk (ORCPT ); Wed, 22 Jul 2020 10:50:40 -0400 Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:8876 "EHLO mx0b-0016f401.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729642AbgGVOui (ORCPT ); Wed, 22 Jul 2020 10:50:38 -0400 Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 06MElg26017001; Wed, 22 Jul 2020 07:49:53 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=pfpt0818; bh=m0IUk8iaeUhUl5eO2mz5p024/N6jQIm9hWoauzfqJsY=; b=twWtqgzDgfyyO3TOPI5ukNMatxuqQGD5ml+s+rAOyuq/sTKhFItscvKxye5LD0gewDU+ SxsM2Vdwit3DvWRKEYC6ooS+IEUJjaWCU6bGsVqOMBxLgEjQEQ6k0b1vqOHEeCiAWXlf hmxKdrHrBdzMMu4Ed3W7KibE4cZ7EksepDMTwoF7UI0H5/0Uc0WWoWQ7V9CITziby7F5 TXQaflUljWXKa2JUD1QW68HwmO1TcC7KFunuF5/S6VFip0z2W6OPzxyr5H5f/MZuzo1w Fwgogb0cV9uct38TnOn29fyNxfZjsW3Xgvg7D334RlJp8j6Ye8OdW5nXjfgzLb6ue8ZB dw== Received: from sc-exch02.marvell.com ([199.233.58.182]) by mx0a-0016f401.pphosted.com with ESMTP id 32bxens6sq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Wed, 22 Jul 2020 07:49:52 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 22 Jul 2020 07:49:51 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.174) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Wed, 22 Jul 2020 07:49:51 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KmWSKykihW+M9B8df4Y2PHojgmacjkWt66FUjfbx/7Yta/UHyotw+pIb1V3ttQ+rMIkXMWULJiknPFcIQoR79Dxa4neAErsaJZWZTsGeQ2BAChXMzA/cPyGGnZgk5IAiOh6C+bgL7hvj5y2JvpbCmUg58hTfuWcGUkhZlnGmx1GYkvV5bHasAh9/mYt8PoT+Ykc+9oHMboijlWnuUmQcCml1z90bznv2G+v0hzMMspnLZle7rXfB+2A60kz/A5kWBhEUF36UN8CAdLVWKVozPE9Obf1mg5VdL1LGjrfnHZ+0M6CHdsmNKl5EpgHe8gfw4ey/k3rE8f7FMz+BFeeUJg== 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-SenderADCheck; bh=m0IUk8iaeUhUl5eO2mz5p024/N6jQIm9hWoauzfqJsY=; b=PMrjimCHmZrnqqxOPDOI/lh5ziqzQN1K/QQIgSTmPJsjlEYsrCNoSITaVDcyW9O5FnsP406iygM3oTeN/neLScf2MNfZGXarkS0LgrFA90uhmZMooGyFeubXsrOY5SC+AbkQmkB4hCV2Q/E5MVp8cIxZDXi/qjvWj04+oUPhnOOM8OGRh0NwWeMJszNxBE5Bk8gRHW638zKeVdmKlqn9QzFdAaMIoEqSrLEZLXr0v2yT+PdxEJFdWHAuck4zypRjcYsKmwxWU24h/KvosGFkhQcyuUUa1a9HIbDV8jOa3mezvWMu7e4AnUbywM/lIpk4egaWWTwpOVYdI8RCMZ2v5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=m0IUk8iaeUhUl5eO2mz5p024/N6jQIm9hWoauzfqJsY=; b=h++XFkLcBbk9v3eBd1W5tuyoww1JPneEOBRH+MoKoJ0tCLCVW2NA0c+MFTzSX5gq4es0u1aNE2LCCnNxPV+HErySJetti0X6fiBcZNmUYAv3XOt+DTWahU/65OIMGV7hR5oq7Zc2kMOkFQFMPvoRew1/AukQFhBroCN2E996sCU= Received: from MW2PR18MB2267.namprd18.prod.outlook.com (2603:10b6:907:3::11) by MW2PR18MB2156.namprd18.prod.outlook.com (2603:10b6:907:a::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.24; Wed, 22 Jul 2020 14:49:49 +0000 Received: from MW2PR18MB2267.namprd18.prod.outlook.com ([fe80::b9a6:a3f2:2263:dc32]) by MW2PR18MB2267.namprd18.prod.outlook.com ([fe80::b9a6:a3f2:2263:dc32%4]) with mapi id 15.20.3195.026; Wed, 22 Jul 2020 14:49:49 +0000 From: Alex Belits To: "frederic@kernel.org" , "rostedt@goodmis.org" CC: Prasun Kapoor , "mingo@kernel.org" , "davem@davemloft.net" , "linux-api@vger.kernel.org" , "peterz@infradead.org" , "linux-arch@vger.kernel.org" , "catalin.marinas@arm.com" , "tglx@linutronix.de" , "will@kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "netdev@vger.kernel.org" Subject: [PATCH v4 03/13] task_isolation: userspace hard isolation from kernel Thread-Topic: [PATCH v4 03/13] task_isolation: userspace hard isolation from kernel Thread-Index: AQHWYDdZDqoeqvfF50CzG3l43t/UoQ== Date: Wed, 22 Jul 2020 14:49:49 +0000 Message-ID: References: <04be044c1bcd76b7438b7563edc35383417f12c8.camel@marvell.com> In-Reply-To: <04be044c1bcd76b7438b7563edc35383417f12c8.camel@marvell.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=marvell.com; x-originating-ip: [173.228.7.197] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5305314b-6572-4836-1a1c-08d82e4e7bfb x-ms-traffictypediagnostic: MW2PR18MB2156: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: styNdZUpa8KzBHSTTwjAGj/VGgx54Nc4YxCCim68RAYrw/G4bLkUk7iJh3Yojqct3t5oV92dyqJWD+7paoi4bk+VnhoMwaRn+Ol7hUlzBJcnX4KovyhRwBOcWKCKtYybsKS5oHn1kdOoC/ZlVjcG9O8lJ3kS8mebtaPIv0ZQJmyA7aJf0aB3Rm8q0Pbwq+SNENdEodqlMxBTcyQbNVmr1ScG5P4OvJTN+3uF4EWCdMRc/f8C4FX1AcF22xva8qJob5ldfwK951syNpfQhDjqsjWX1+2UHRiirNv+KBQWtpUHAoRfkWO289hpWXQ+TfiCzwqp02e6Chdn3mvNx6/cqYhAFGl3mug/H3JZdGYwn3F59a/pdV1GmIHyzwUu0iHQ x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW2PR18MB2267.namprd18.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(346002)(136003)(396003)(376002)(39860400002)(366004)(76116006)(91956017)(83380400001)(86362001)(71200400001)(66556008)(26005)(5660300002)(36756003)(66446008)(7416002)(478600001)(6512007)(8936002)(6506007)(110136005)(6486002)(2906002)(54906003)(66476007)(30864003)(186003)(64756008)(2616005)(8676002)(4326008)(66946007)(316002)(21314003)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: mV7wDiTIH4W8RhSe2OPepVQqwyvJ7oL4+3Uvp0tzOB2SMc9q7YLpVs3MdQRQrmZm/g5Anbya9hRIFHVfT9D0NmathS5BBrwdAPqGItPJnv1fy9WVWa5BjXIBcBHfzzHxpza2SZIVnMLMUYs5AJk/rSme6Ixq2iKCg6V9cG59TgYleH/HDJoiegLZnKhVVMML5Pqbtd4BRYWcmnpvVdgeX0wzI8QQpkHp5XrmeoXnQ/Ps5XXcMGDaJ4a24YPp5cEWr212PNtSZIEpY2o9CUw7/bS4pX5vbC59f3EoU08a7ZqwVruitGGVq7ug8vX0YaUNJt905X93T8thmjq5HalmSpPAgfwwK49bbb1Es8Klbg/FXKd+kxHTAhVt7J86huJLPeWnJklguJDrSF5eyflV/fdXlqX3odtIPVGDeJ+S9z7cYJd74iPU5AwQ4CxEOZP767GSF3nE4nWX6u/KaflILcD919BCxxgSUfvlTKyMdWk= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW2PR18MB2267.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5305314b-6572-4836-1a1c-08d82e4e7bfb X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Jul 2020 14:49:49.4306 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 2xxJ1wCYI7zelQ0/V8DAXIk+lhvjDcCFwY7OglLrA8Hi6kJthcY/EGszF59bhAHUPJh9nq55JPcWan6B3D+kKA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW2PR18MB2156 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235,18.0.687 definitions=2020-07-22_09:2020-07-22,2020-07-22 signatures=0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org VGhlIGV4aXN0aW5nIG5vaHpfZnVsbCBtb2RlIGlzIGRlc2lnbmVkIGFzIGEgInNvZnQiIGlzb2xh dGlvbiBtb2RlDQp0aGF0IG1ha2VzIHRyYWRlb2ZmcyB0byBtaW5pbWl6ZSB1c2Vyc3BhY2UgaW50 ZXJydXB0aW9ucyB3aGlsZQ0Kc3RpbGwgYXR0ZW1wdGluZyB0byBhdm9pZCBvdmVyaGVhZHMgaW4g dGhlIGtlcm5lbCBlbnRyeS9leGl0IHBhdGgsDQp0byBwcm92aWRlIDEwMCUga2VybmVsIHNlbWFu dGljcywgZXRjLg0KDQpIb3dldmVyLCBzb21lIGFwcGxpY2F0aW9ucyByZXF1aXJlIGEgImhhcmQi IGNvbW1pdG1lbnQgZnJvbSB0aGUNCmtlcm5lbCB0byBhdm9pZCBpbnRlcnJ1cHRpb25zLCBpbiBw YXJ0aWN1bGFyIHVzZXJzcGFjZSBkZXZpY2UgZHJpdmVyDQpzdHlsZSBhcHBsaWNhdGlvbnMsIHN1 Y2ggYXMgaGlnaC1zcGVlZCBuZXR3b3JraW5nIGNvZGUuDQoNClRoaXMgY2hhbmdlIGludHJvZHVj ZXMgYSBmcmFtZXdvcmsgdG8gYWxsb3cgYXBwbGljYXRpb25zDQp0byBlbGVjdCB0byBoYXZlIHRo ZSAiaGFyZCIgc2VtYW50aWNzIGFzIG5lZWRlZCwgc3BlY2lmeWluZw0KcHJjdGwoUFJfVEFTS19J U09MQVRJT04sIFBSX1RBU0tfSVNPTEFUSU9OX0VOQUJMRSkgdG8gZG8gc28uDQoNClRoZSBrZXJu ZWwgbXVzdCBiZSBidWlsdCB3aXRoIHRoZSBuZXcgVEFTS19JU09MQVRJT04gS2NvbmZpZyBmbGFn DQp0byBlbmFibGUgdGhpcyBtb2RlLCBhbmQgdGhlIGtlcm5lbCBib290ZWQgd2l0aCBhbiBhcHBy b3ByaWF0ZQ0KImlzb2xjcHVzPW5vaHosZG9tYWluLENQVUxJU1QiIGJvb3QgYXJndW1lbnQgdG8g ZW5hYmxlDQpub2h6X2Z1bGwgYW5kIGlzb2xjcHVzLiBUaGUgInRhc2tfaXNvbGF0aW9uIiBzdGF0 ZSBpcyB0aGVuIGluZGljYXRlZA0KYnkgc2V0dGluZyBhIG5ldyB0YXNrIHN0cnVjdCBmaWVsZCwg dGFza19pc29sYXRpb25fZmxhZywgdG8gdGhlDQp2YWx1ZSBwYXNzZWQgYnkgcHJjdGwoKSwgYW5k IGFsc28gc2V0dGluZyBhIFRJRl9UQVNLX0lTT0xBVElPTg0KYml0IGluIHRoZSB0aHJlYWRfaW5m byBmbGFncy4gV2hlbiB0aGUga2VybmVsIGlzIHJldHVybmluZyB0bw0KdXNlcnNwYWNlIGZyb20g dGhlIHByY3RsKCkgY2FsbCBhbmQgc2VlcyBUSUZfVEFTS19JU09MQVRJT04gc2V0LA0KaXQgY2Fs bHMgdGhlIG5ldyB0YXNrX2lzb2xhdGlvbl9zdGFydCgpIHJvdXRpbmUgdG8gYXJyYW5nZSBmb3IN CnRoZSB0YXNrIHRvIGF2b2lkIGJlaW5nIGludGVycnVwdGVkIGluIHRoZSBmdXR1cmUuDQoNCldp dGggaW50ZXJydXB0cyBkaXNhYmxlZCwgdGFza19pc29sYXRpb25fc3RhcnQoKSBlbnN1cmVzIHRo YXQga2VybmVsDQpzdWJzeXN0ZW1zIHRoYXQgbWlnaHQgY2F1c2UgYSBmdXR1cmUgaW50ZXJydXB0 IGFyZSBxdWllc2NlZC4gSWYgaXQNCmRvZXNuJ3Qgc3VjY2VlZCwgaXQgYWRqdXN0cyB0aGUgc3lz Y2FsbCByZXR1cm4gdmFsdWUgdG8gaW5kaWNhdGUgdGhhdA0KZmFjdCwgYW5kIHVzZXJzcGFjZSBj YW4gcmV0cnkgYXMgZGVzaXJlZC4gSW4gYWRkaXRpb24gdG8gc3RvcHBpbmcNCnRoZSBzY2hlZHVs ZXIgdGljaywgdGhlIGNvZGUgdGFrZXMgYW55IGFjdGlvbnMgdGhhdCBtaWdodCBhdm9pZA0KYSBm dXR1cmUgaW50ZXJydXB0IHRvIHRoZSBjb3JlLCBzdWNoIGFzIGEgd29ya2VyIHRocmVhZCBiZWlu Zw0Kc2NoZWR1bGVkIHRoYXQgY291bGQgYmUgcXVpZXNjZWQgbm93IChlLmcuIHRoZSB2bXN0YXQg d29ya2VyKQ0Kb3IgYSBmdXR1cmUgSVBJIHRvIHRoZSBjb3JlIHRvIGNsZWFuIHVwIHNvbWUgc3Rh dGUgdGhhdCBjb3VsZCBiZQ0KY2xlYW5lZCB1cCBub3cgKGUuZy4gdGhlIG1tIGxydSBwZXItY3B1 IGNhY2hlKS4NCg0KT25jZSB0aGUgdGFzayBoYXMgcmV0dXJuZWQgdG8gdXNlcnNwYWNlIGFmdGVy IGlzc3VpbmcgdGhlIHByY3RsKCksDQppZiBpdCBlbnRlcnMgdGhlIGtlcm5lbCBhZ2FpbiB2aWEg c3lzdGVtIGNhbGwsIHBhZ2UgZmF1bHQsIG9yIGFueQ0Kb3RoZXIgZXhjZXB0aW9uIG9yIGlycSwg dGhlIGtlcm5lbCB3aWxsIHNlbmQgaXQgYSBzaWduYWwgdG8gaW5kaWNhdGUNCmlzb2xhdGlvbiBs b3NzLiBJbiBhZGRpdGlvbiB0byBzZW5kaW5nIGEgc2lnbmFsLCB0aGUgY29kZSBzdXBwb3J0cyBh DQprZXJuZWwgY29tbWFuZC1saW5lICJ0YXNrX2lzb2xhdGlvbl9kZWJ1ZyIgZmxhZyB3aGljaCBj YXVzZXMgYSBzdGFjaw0KYmFja3RyYWNlIHRvIGJlIGdlbmVyYXRlZCB3aGVuZXZlciBhIHRhc2sg bG9zZXMgaXNvbGF0aW9uLg0KDQpUbyBhbGxvdyB0aGUgc3RhdGUgdG8gYmUgZW50ZXJlZCBhbmQg ZXhpdGVkLCB0aGUgc3lzY2FsbCBjaGVja2luZw0KdGVzdCBpZ25vcmVzIHRoZSBwcmN0bChQUl9U QVNLX0lTT0xBVElPTikgc3lzY2FsbCBzbyB0aGF0IHdlIGNhbg0KY2xlYXIgdGhlIGJpdCBhZ2Fp biBsYXRlciwgYW5kIGlnbm9yZXMgZXhpdC9leGl0X2dyb3VwIHRvIGFsbG93DQpleGl0aW5nIHRo ZSB0YXNrIHdpdGhvdXQgYSBwb2ludGxlc3Mgc2lnbmFsIGJlaW5nIGRlbGl2ZXJlZC4NCg0KVGhl IHByY3RsKCkgQVBJIGFsbG93cyBmb3Igc3BlY2lmeWluZyBhIHNpZ25hbCBudW1iZXIgdG8gdXNl IGluc3RlYWQNCm9mIHRoZSBkZWZhdWx0IFNJR0tJTEwsIHRvIGFsbG93IGZvciBjYXRjaGluZyB0 aGUgbm90aWZpY2F0aW9uDQpzaWduYWw7IGZvciBleGFtcGxlLCBpbiBhIHByb2R1Y3Rpb24gZW52 aXJvbm1lbnQsIGl0IG1pZ2h0IGJlDQpoZWxwZnVsIHRvIGxvZyBpbmZvcm1hdGlvbiB0byB0aGUg YXBwbGljYXRpb24gbG9nZ2luZyBtZWNoYW5pc20NCmJlZm9yZSBleGl0aW5nLiBPciwgdGhlIHNp Z25hbCBoYW5kbGVyIG1pZ2h0IGNob29zZSB0byByZXNldCB0aGUNCnByb2dyYW0gY291bnRlciBi YWNrIHRvIHRoZSBjb2RlIHNlZ21lbnQgaW50ZW5kZWQgdG8gYmUgcnVuIGlzb2xhdGVkDQp2aWEg cHJjdGwoKSB0byBjb250aW51ZSBleGVjdXRpb24uDQoNCkluIGEgbnVtYmVyIG9mIGNhc2VzIHdl IGNhbiB0ZWxsIG9uIGEgcmVtb3RlIGNwdSB0aGF0IHdlIGFyZQ0KZ29pbmcgdG8gYmUgaW50ZXJy dXB0aW5nIHRoZSBjcHUsIGUuZy4gdmlhIGFuIElQSSBvciBhIFRMQiBmbHVzaC4NCkluIHRoYXQg Y2FzZSB3ZSBnZW5lcmF0ZSB0aGUgZGlhZ25vc3RpYyAoYW5kIG9wdGlvbmFsIHN0YWNrIGR1bXAp DQpvbiB0aGUgcmVtb3RlIGNvcmUgdG8gYmUgYWJsZSB0byBkZWxpdmVyIGJldHRlciBkaWFnbm9z dGljcy4NCklmIHRoZSBpbnRlcnJ1cHQgaXMgbm90IHNvbWV0aGluZyBjYXVnaHQgYnkgTGludXgg KGUuZy4gYQ0KaHlwZXJ2aXNvciBpbnRlcnJ1cHQpIHdlIGNhbiBhbHNvIHJlcXVlc3QgYSByZXNj aGVkdWxlIElQSSB0bw0KYmUgc2VudCB0byB0aGUgcmVtb3RlIGNvcmUgc28gaXQgY2FuIGJlIHN1 cmUgdG8gZ2VuZXJhdGUgYQ0Kc2lnbmFsIHRvIG5vdGlmeSB0aGUgcHJvY2Vzcy4NCg0KSXNvbGF0 aW9uIGFsc28gZGlzYWJsZXMgQ1BVIHN0YXRlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIHRo YXQNCmFyZS4gbm9ybWFsbHkgZG9uZSBieSBJUEkuIEluIHRoZSBmdXR1cmUsIG1vcmUgc3luY2hy b25pemF0aW9uDQptZWNoYW5pc21zLCBzdWNoIGFzIFRMQiBmbHVzaGVzLCBtYXkgYmUgZGlzYWJs ZWQgZm9yIGlzb2xhdGVkIHRhc2tzLg0KVGhpcyByZXF1aXJlcyBjYXJlZnVsIGhhbmRsaW5nIG9m IGtlcm5lbCBlbnRyeSBmcm9tIGlzb2xhdGVkIHRhc2sgLS0NCnJlbW90ZSBzeW5jaHJvbml6YXRp b24gcmVxdWVzdHMgbXVzdCBiZSByZS1lbmFibGVkIGFuZA0Kc3luY2hyb25pemF0aW9uIHByb2Nl ZHVyZSB0cmlnZ2VyZWQsIGJlZm9yZSBhbnl0aGluZyBvdGhlciB0aGFuDQpsb3ctbGV2ZWwga2Vy bmVsIGVudHJ5IGNvZGUgaXMgY2FsbGVkLiBTYW1lIGFwcGxpZXMgdG8gZXhpdGluZyBmcm9tDQpr ZXJuZWwgdG8gdXNlcnNwYWNlIGFmdGVyIGlzb2xhdGlvbiBpcyBlbmFibGVkIC0tIGVpdGhlciB0 aGUgY29kZQ0Kc2hvdWxkIG5vdCBkZXBlbmQgb24gc3luY2hyb25pemF0aW9uLCBvciBpc29sYXRp b24gc2hvdWxkIGJlIGJyb2tlbi4NCg0KRm9yIHRoaXMgcHVycG9zZSwgcGVyLUNQVSBsb3ctbGV2 ZWwgZmxhZ3MgbGxfaXNvbF9mbGFncyBhcmUgdXNlZCB0bw0KaW5kaWNhdGUgaXNvbGF0aW9uIHN0 YXRlLCBhbmQgdGFza19pc29sYXRpb25fa2VybmVsX2VudGVyKCkgaXMgdXNlZA0KdG8gc2FmZWx5 IGNsZWFyIHRoZW0gZWFybHkgaW4ga2VybmVsIGVudHJ5LiBDUFUgbWFzayBjb3JyZXNwb25kaW5n DQp0byBpc29sYXRpb24gYml0IGluIGxsX2lzb2xfZmxhZ3MgaXMgdmlzaWJsZSB0byB1c2Vyc3Bh Y2UgYXMNCi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2lzb2xhdGlvbl9ydW5uaW5nLCBhbmQgY2Fu IGJlIHVzZWQgZm9yDQptb25pdG9yaW5nLg0KDQpTZXBhcmF0ZSBwYXRjaGVzIHRoYXQgZm9sbG93 IHByb3ZpZGUgdGhlc2UgY2hhbmdlcyBmb3IgeDg2LCBhcm0sDQphbmQgYXJtNjQgYXJjaGl0ZWN0 dXJlcywgeGVuIGFuZCBpcnFjaGlwIGRyaXZlcnMuDQoNClNpZ25lZC1vZmYtYnk6IEFsZXggQmVs aXRzIDxhYmVsaXRzQG1hcnZlbGwuY29tPg0KLS0tDQogLi4uL2FkbWluLWd1aWRlL2tlcm5lbC1w YXJhbWV0ZXJzLnR4dCAgICAgICAgIHwgICA2ICsNCiBkcml2ZXJzL2Jhc2UvY3B1LmMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgMjMgKw0KIGluY2x1ZGUvbGludXgvaHJ0aW1lci5oICAg ICAgICAgICAgICAgICAgICAgICB8ICAgNCArDQogaW5jbHVkZS9saW51eC9pc29sYXRpb24uaCAg ICAgICAgICAgICAgICAgICAgIHwgMjk1ICsrKysrKw0KIGluY2x1ZGUvbGludXgvc2NoZWQuaCAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSArDQogaW5jbHVkZS9saW51eC90aWNrLmggICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAzICsNCiBpbmNsdWRlL3VhcGkvbGludXgvcHJjdGwu aCAgICAgICAgICAgICAgICAgICAgfCAgIDYgKw0KIGluaXQvS2NvbmZpZyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAyOCArDQoga2VybmVsL01ha2VmaWxlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAyICsNCiBrZXJuZWwvaXNvbGF0aW9uLmMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCA4NDEgKysrKysrKysrKysrKysrKysrDQoga2VybmVsL3NpZ25h bC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsNCiBrZXJuZWwvc3lzLmMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKw0KIGtlcm5lbC90aW1lL2hy dGltZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyNyArDQoga2VybmVsL3RpbWUvdGlj ay1zY2hlZC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDE4ICsNCiAxNCBmaWxlcyBjaGFuZ2Vk LCAxMjY2IGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9p c29sYXRpb24uaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBrZXJuZWwvaXNvbGF0aW9uLmMNCg0KZGlm ZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0 IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQNCmluZGV4 IGZiOTVmYWQ4MWM3OS4uMzIxZjlkMjFhOTlhIDEwMDY0NA0KLS0tIGEvRG9jdW1lbnRhdGlvbi9h ZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQNCisrKyBiL0RvY3VtZW50YXRpb24vYWRt aW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0DQpAQCAtNTAxNSw2ICs1MDE1LDEyIEBADQog CQkJbmV1dHJhbGl6ZSBhbnkgZWZmZWN0IG9mIC9wcm9jL3N5cy9rZXJuZWwvc3lzcnEuDQogCQkJ VXNlZnVsIGZvciBkZWJ1Z2dpbmcuDQogDQorCXRhc2tfaXNvbGF0aW9uX2RlYnVnCVtLTkxdDQor CQkJSW4ga2VybmVscyBidWlsdCB3aXRoIENPTkZJR19UQVNLX0lTT0xBVElPTiwgdGhpcw0KKwkJ CXNldHRpbmcgd2lsbCBnZW5lcmF0ZSBjb25zb2xlIGJhY2t0cmFjZXMgdG8NCisJCQlhY2NvbXBh bnkgdGhlIGRpYWdub3N0aWNzIGdlbmVyYXRlZCBhYm91dA0KKwkJCWludGVycnVwdGluZyB0YXNr cyBydW5uaW5nIHdpdGggdGFzayBpc29sYXRpb24uDQorDQogCXRjcG1oYXNoX2VudHJpZXM9IFtL TkwsTkVUXQ0KIAkJCVNldCB0aGUgbnVtYmVyIG9mIHRjcF9tZXRyaWNzX2hhc2ggc2xvdHMuDQog CQkJRGVmYXVsdCB2YWx1ZSBpcyA4MTkyIG9yIDE2Mzg0IGRlcGVuZGluZyBvbiB0b3RhbA0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jcHUuYyBiL2RyaXZlcnMvYmFzZS9jcHUuYw0KaW5kZXgg ZDIxMzZhYjliMTRhLi43MzNiMGU3ZDU5OGMgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2Jhc2UvY3B1 LmMNCisrKyBiL2RyaXZlcnMvYmFzZS9jcHUuYw0KQEAgLTI4Nyw2ICsyODcsMjYgQEAgc3RhdGlj IHNzaXplX3QgcHJpbnRfY3B1c19pc29sYXRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsDQogfQ0KIHN0 YXRpYyBERVZJQ0VfQVRUUihpc29sYXRlZCwgMDQ0NCwgcHJpbnRfY3B1c19pc29sYXRlZCwgTlVM TCk7DQogDQorI2lmZGVmIENPTkZJR19UQVNLX0lTT0xBVElPTg0KK3N0YXRpYyBzc2l6ZV90IHBy aW50X2lzb2xhdGlvbl9ydW5uaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwNCisJCQkJICAgICAgc3Ry dWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCit7DQorCWludCBuOw0KKwlj cHVtYXNrX3Zhcl90IGlzb2xhdGlvbl9ydW5uaW5nOw0KKw0KKwlpZiAoIXphbGxvY19jcHVtYXNr X3ZhcigmaXNvbGF0aW9uX3J1bm5pbmcsIEdGUF9LRVJORUwpKQ0KKwkJcmV0dXJuIC1FTk9NRU07 DQorDQorCXRhc2tfaXNvbGF0aW9uX2NwdW1hc2soaXNvbGF0aW9uX3J1bm5pbmcpOw0KKwluID0g c3ByaW50ZihidWYsICIlKnBibFxuIiwgY3B1bWFza19wcl9hcmdzKGlzb2xhdGlvbl9ydW5uaW5n KSk7DQorDQorCWZyZWVfY3B1bWFza192YXIoaXNvbGF0aW9uX3J1bm5pbmcpOw0KKw0KKwlyZXR1 cm4gbjsNCit9DQorc3RhdGljIERFVklDRV9BVFRSKGlzb2xhdGlvbl9ydW5uaW5nLCAwNDQ0LCBw cmludF9pc29sYXRpb25fcnVubmluZywgTlVMTCk7DQorI2VuZGlmDQorDQogI2lmZGVmIENPTkZJ R19OT19IWl9GVUxMDQogc3RhdGljIHNzaXplX3QgcHJpbnRfY3B1c19ub2h6X2Z1bGwoc3RydWN0 IGRldmljZSAqZGV2LA0KIAkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFy ICpidWYpDQpAQCAtNDczLDYgKzQ5Myw5IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjcHVf cm9vdF9hdHRyc1tdID0gew0KICNpZmRlZiBDT05GSUdfTk9fSFpfRlVMTA0KIAkmZGV2X2F0dHJf bm9oel9mdWxsLmF0dHIsDQogI2VuZGlmDQorI2lmZGVmIENPTkZJR19UQVNLX0lTT0xBVElPTg0K KwkmZGV2X2F0dHJfaXNvbGF0aW9uX3J1bm5pbmcuYXR0ciwNCisjZW5kaWYNCiAjaWZkZWYgQ09O RklHX0dFTkVSSUNfQ1BVX0FVVE9QUk9CRQ0KIAkmZGV2X2F0dHJfbW9kYWxpYXMuYXR0ciwNCiAj ZW5kaWYNCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaCBiL2luY2x1ZGUvbGlu dXgvaHJ0aW1lci5oDQppbmRleCAxNWM4YWMzMTM2NzguLmU4MTI1MmViNGY5MiAxMDA2NDQNCi0t LSBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oDQorKysgYi9pbmNsdWRlL2xpbnV4L2hydGltZXIu aA0KQEAgLTUyOCw2ICs1MjgsMTAgQEAgZXh0ZXJuIHZvaWQgX19pbml0IGhydGltZXJzX2luaXQo dm9pZCk7DQogLyogU2hvdyBwZW5kaW5nIHRpbWVyczogKi8NCiBleHRlcm4gdm9pZCBzeXNycV90 aW1lcl9saXN0X3Nob3codm9pZCk7DQogDQorI2lmZGVmIENPTkZJR19UQVNLX0lTT0xBVElPTg0K K2V4dGVybiB2b2lkIGtpY2tfaHJ0aW1lcih2b2lkKTsNCisjZW5kaWYNCisNCiBpbnQgaHJ0aW1l cnNfcHJlcGFyZV9jcHUodW5zaWduZWQgaW50IGNwdSk7DQogI2lmZGVmIENPTkZJR19IT1RQTFVH X0NQVQ0KIGludCBocnRpbWVyc19kZWFkX2NwdSh1bnNpZ25lZCBpbnQgY3B1KTsNCmRpZmYgLS1n aXQgYS9pbmNsdWRlL2xpbnV4L2lzb2xhdGlvbi5oIGIvaW5jbHVkZS9saW51eC9pc29sYXRpb24u aA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uYTkyZmYyMDBkYjEy DQotLS0gL2Rldi9udWxsDQorKysgYi9pbmNsdWRlL2xpbnV4L2lzb2xhdGlvbi5oDQpAQCAtMCww ICsxLDI5NSBAQA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8N CisvKg0KKyAqIFRhc2sgaXNvbGF0aW9uIHN1cHBvcnQNCisgKg0KKyAqIEF1dGhvcnM6DQorICog ICBDaHJpcyBNZXRjYWxmIDxjbWV0Y2FsZkBtZWxsYW5veC5jb20+DQorICogICBBbGV4IEJlbGl0 cyA8YWJlbGl0c0BtYXJ2ZWxsLmNvbT4NCisgKiAgIFl1cmkgTm9yb3YgPHlub3JvdkBtYXJ2ZWxs LmNvbT4NCisgKi8NCisjaWZuZGVmIF9MSU5VWF9JU09MQVRJT05fSA0KKyNkZWZpbmUgX0xJTlVY X0lTT0xBVElPTl9IDQorDQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0KKyNpbmNsdWRlIDxsaW51eC9l cnJuby5oPg0KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+DQorI2luY2x1ZGUgPGxpbnV4L3Bl cmNwdS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPg0KKyNpbmNsdWRlIDxsaW51eC9w cmN0bC5oPg0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KKw0KK3N0cnVjdCB0YXNrX3N0cnVj dDsNCisNCisjaWZkZWYgQ09ORklHX1RBU0tfSVNPTEFUSU9ODQorDQoraW50IHRhc2tfaXNvbGF0 aW9uX21lc3NhZ2UoaW50IGNwdSwgaW50IGxldmVsLCBib29sIHN1cHAsIGNvbnN0IGNoYXIgKmZt dCwgLi4uKTsNCisNCisjZGVmaW5lIHByX3Rhc2tfaXNvbF9lbWVyZyhjcHUsIGZtdCwgLi4uKQkJ CVwNCisJdGFza19pc29sYXRpb25fbWVzc2FnZShjcHUsIExPR0xFVkVMX0VNRVJHLCBmYWxzZSwg Zm10LCAjI19fVkFfQVJHU19fKQ0KKyNkZWZpbmUgcHJfdGFza19pc29sX2FsZXJ0KGNwdSwgZm10 LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxfQUxFUlQs IGZhbHNlLCBmbXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfY3JpdChj cHUsIGZtdCwgLi4uKQkJCVwNCisJdGFza19pc29sYXRpb25fbWVzc2FnZShjcHUsIExPR0xFVkVM X0NSSVQsIGZhbHNlLCBmbXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xf ZXJyKGNwdSwgZm10LCAuLi4pCQkJCVwNCisJdGFza19pc29sYXRpb25fbWVzc2FnZShjcHUsIExP R0xFVkVMX0VSUiwgZmFsc2UsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisjZGVmaW5lIHByX3Rhc2tf aXNvbF93YXJuKGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNw dSwgTE9HTEVWRUxfV0FSTklORywgZmFsc2UsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisjZGVmaW5l IHByX3Rhc2tfaXNvbF9ub3RpY2UoY3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tfaXNvbGF0aW9u X21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9OT1RJQ0UsIGZhbHNlLCBmbXQsICMjX19WQV9BUkdTX18p DQorI2RlZmluZSBwcl90YXNrX2lzb2xfaW5mbyhjcHUsIGZtdCwgLi4uKQkJCVwNCisJdGFza19p c29sYXRpb25fbWVzc2FnZShjcHUsIExPR0xFVkVMX0lORk8sIGZhbHNlLCBmbXQsICMjX19WQV9B UkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfZGVidWcoY3B1LCBmbXQsIC4uLikJCQlcDQor CXRhc2tfaXNvbGF0aW9uX21lc3NhZ2UoY3B1LCBMT0dMRVZFTF9ERUJVRywgZmFsc2UsIGZtdCwg IyNfX1ZBX0FSR1NfXykNCisNCisjZGVmaW5lIHByX3Rhc2tfaXNvbF9lbWVyZ19zdXBwKGNwdSwg Zm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxfRU1F UkcsIHRydWUsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisjZGVmaW5lIHByX3Rhc2tfaXNvbF9hbGVy dF9zdXBwKGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwg TE9HTEVWRUxfQUxFUlQsIHRydWUsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCisjZGVmaW5lIHByX3Rh c2tfaXNvbF9jcml0X3N1cHAoY3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tfaXNvbGF0aW9uX21l c3NhZ2UoY3B1LCBMT0dMRVZFTF9DUklULCB0cnVlLCBmbXQsICMjX19WQV9BUkdTX18pDQorI2Rl ZmluZSBwcl90YXNrX2lzb2xfZXJyX3N1cHAoY3B1LCBmbXQsIC4uLikJCQkJXA0KKwl0YXNrX2lz b2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxfRVJSLCB0cnVlLCBmbXQsICMjX19WQV9BUkdT X18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfd2Fybl9zdXBwKGNwdSwgZm10LCAuLi4pCQkJXA0K Kwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxfV0FSTklORywgdHJ1ZSwgZm10 LCAjI19fVkFfQVJHU19fKQ0KKyNkZWZpbmUgcHJfdGFza19pc29sX25vdGljZV9zdXBwKGNwdSwg Zm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwgTE9HTEVWRUxfTk9U SUNFLCB0cnVlLCBmbXQsICMjX19WQV9BUkdTX18pDQorI2RlZmluZSBwcl90YXNrX2lzb2xfaW5m b19zdXBwKGNwdSwgZm10LCAuLi4pCQkJXA0KKwl0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGNwdSwg TE9HTEVWRUxfSU5GTywgdHJ1ZSwgZm10LCAjI19fVkFfQVJHU19fKQ0KKyNkZWZpbmUgcHJfdGFz a19pc29sX2RlYnVnX3N1cHAoY3B1LCBmbXQsIC4uLikJCQlcDQorCXRhc2tfaXNvbGF0aW9uX21l c3NhZ2UoY3B1LCBMT0dMRVZFTF9ERUJVRywgdHJ1ZSwgZm10LCAjI19fVkFfQVJHU19fKQ0KKw0K KyNkZWZpbmUgQklUX0xMX1RBU0tfSVNPTEFUSU9OCSgwKQ0KKyNkZWZpbmUgRkxBR19MTF9UQVNL X0lTT0xBVElPTgkoMSA8PCBCSVRfTExfVEFTS19JU09MQVRJT04pDQorDQorREVDTEFSRV9QRVJf Q1BVKHVuc2lnbmVkIGxvbmcsIGxsX2lzb2xfZmxhZ3MpOw0KK2V4dGVybiBjcHVtYXNrX3Zhcl90 IHRhc2tfaXNvbGF0aW9uX21hcDsNCisNCisvKioNCisgKiB0YXNrX2lzb2xhdGlvbl9yZXF1ZXN0 KCkgLSBwcmN0bCBob29rIHRvIHJlcXVlc3QgdGFzayBpc29sYXRpb24NCisgKiBAZmxhZ3M6CUZs YWdzIGZyb20gPGxpbnV4L3ByY3RsLmg+IFBSX1RBU0tfSVNPTEFUSU9OX3h4eC4NCisgKg0KKyAq IFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIGdlbmVyaWMgcHJjdGwoKSBjb2RlIGZvciBQUl9UQVNL X0lTT0xBVElPTi4NCisgKg0KKyAqIFJldHVybjogUmV0dXJucyAwIHdoZW4gdGFzayBpc29sYXRp b24gZW5hYmxlZCwgb3RoZXJ3aXNlIGEgbmVnYXRpdmUNCisgKiBlcnJuby4NCisgKi8NCitleHRl cm4gaW50IHRhc2tfaXNvbGF0aW9uX3JlcXVlc3QodW5zaWduZWQgaW50IGZsYWdzKTsNCisNCisv KioNCisgKiB0YXNrX2lzb2xhdGlvbl9rZXJuZWxfZW50ZXIoKSAtIGNsZWFyIGxvdy1sZXZlbCB0 YXNrIGlzb2xhdGlvbiBmbGFnDQorICoNCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgaW1tZWRp YXRlbHkgYWZ0ZXIgZW50ZXJpbmcga2VybmVsLg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0 YXNrX2lzb2xhdGlvbl9rZXJuZWxfZW50ZXIodm9pZCkNCit7DQorCXVuc2lnbmVkIGxvbmcgZmxh Z3M7DQorDQorCS8qDQorCSAqIFRoaXMgZnVuY3Rpb24gcnVucyBvbiBhIENQVSB0aGF0IHJhbiBp c29sYXRlZCB0YXNrLg0KKwkgKg0KKwkgKiBXZSBkb24ndCB3YW50IHRoaXMgQ1BVIHJ1bm5pbmcg Y29kZSBmcm9tIHRoZSByZXN0IG9mIGtlcm5lbA0KKwkgKiB1bnRpbCBvdGhlciBDUFVzIGtub3cg dGhhdCBpdCBpcyBubyBsb25nZXIgaXNvbGF0ZWQuDQorCSAqIFdoZW4gQ1BVIGlzIHJ1bm5pbmcg aXNvbGF0ZWQgdGFzayB1bnRpbCB0aGlzIHBvaW50IGFueXRoaW5nDQorCSAqIHRoYXQgY2F1c2Vz IGFuIGludGVycnVwdCBvbiB0aGlzIENQVSBtdXN0IGVuZCB1cCBjYWxsaW5nIHRoaXMNCisJICog YmVmb3JlIHRvdWNoaW5nIHRoZSByZXN0IG9mIGtlcm5lbC4gVGhhdCBpcywgdGhpcyBmdW5jdGlv biBvcg0KKwkgKiBmYXN0X3Rhc2tfaXNvbGF0aW9uX2NwdV9jbGVhbnVwKCkgb3Igc3RvcF9pc29s YXRpb24oKSBjYWxsaW5nDQorCSAqIGl0LiBJZiBhbnkgaW50ZXJydXB0LCBpbmNsdWRpbmcgc2No ZWR1bGluZyB0aW1lciwgYXJyaXZlcywgaXQNCisJICogd2lsbCBzdGlsbCBlbmQgdXAgaGVyZSBl YXJseSBhZnRlciBlbnRlcmluZyBrZXJuZWwuDQorCSAqIEZyb20gdGhpcyBwb2ludCBpbnRlcnJ1 cHRzIGFyZSBkaXNhYmxlZCB1bnRpbCBhbGwgQ1BVcyB3aWxsIHNlZQ0KKwkgKiB0aGF0IHRoaXMg Q1BVIGlzIG5vIGxvbmdlciBydW5uaW5nIGlzb2xhdGVkIHRhc2suDQorCSAqDQorCSAqIFNlZSBh bHNvIGZhc3RfdGFza19pc29sYXRpb25fY3B1X2NsZWFudXAoKS4NCisJICovDQorCXNtcF9ybWIo KTsNCisJaWYoKHRoaXNfY3B1X3JlYWQobGxfaXNvbF9mbGFncykgJiBGTEFHX0xMX1RBU0tfSVNP TEFUSU9OKSA9PSAwKQ0KKwkJcmV0dXJuOw0KKw0KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7DQor DQorCS8qIENsZWFyIGxvdy1sZXZlbCBmbGFncyAqLw0KKwl0aGlzX2NwdV93cml0ZShsbF9pc29s X2ZsYWdzLCAwKTsNCisNCisJLyoNCisJICogSWYgc29tZXRoaW5nIGhhcHBlbmVkIHRoYXQgcmVx dWlyZXMgYSBiYXJyaWVyIHRoYXQgd291bGQNCisJICogb3RoZXJ3aXNlIGJlIGNhbGxlZCBmcm9t IHJlbW90ZSBDUFVzIGJ5IENQVSBraWNrIHByb2NlZHVyZSwNCisJICogdGhpcyBiYXJyaWVyIHJ1 bnMgaW5zdGVhZCBvZiBpdC4gQWZ0ZXIgdGhpcyBiYXJyaWVyLCBDUFUNCisJICoga2ljayBwcm9j ZWR1cmUgd291bGQgc2VlIHRoZSB1cGRhdGVkIGxsX2lzb2xfZmxhZ3MsIHNvIGl0DQorCSAqIHdp bGwgcnVuIGl0cyBvd24gSVBJIHRvIHRyaWdnZXIgYSBiYXJyaWVyLg0KKwkgKi8NCisJc21wX21i KCk7DQorCS8qDQorCSAqIFN5bmNocm9uaXplIGluc3RydWN0aW9ucyAtLSB0aGlzIENQVSB3YXMg bm90IGtpY2tlZCB3aGlsZQ0KKwkgKiBpbiBpc29sYXRlZCBtb2RlLCBzbyBpdCBtaWdodCByZXF1 aXJlIHN5bmNocm9uaXphdGlvbi4NCisJICogVGhlcmUgbWlnaHQgYmUgYW4gSVBJIGlmIGtpY2sg cHJvY2VkdXJlIGhhcHBlbmVkIGFuZA0KKwkgKiBsbF9pc29sX2ZsYWdzIHdhcyBhbHJlYWR5IHVw ZGF0ZWQgd2hpbGUgaXQgYXNzZW1ibGVkIGEgQ1BVDQorCSAqIG1hc2suIEhvd2V2ZXIgaWYgdGhp cyBkaWQgbm90IGhhcHBlbiwgc3luY2hyb25pemUgZXZlcnl0aGluZw0KKwkgKiBoZXJlLg0KKwkg Ki8NCisJaW5zdHJfc3luYygpOw0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7DQorfQ0KKw0K K2V4dGVybiB2b2lkIHRhc2tfaXNvbGF0aW9uX2NwdV9jbGVhbnVwKHZvaWQpOw0KKy8qKg0KKyAq IHRhc2tfaXNvbGF0aW9uX3N0YXJ0KCkgLSBhdHRlbXB0IHRvIGFjdHVhbGx5IHN0YXJ0IHRhc2sg aXNvbGF0aW9uDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkIGFzIHRo ZSBsYXN0IHRoaW5nIHByaW9yIHRvIHJldHVybmluZyB0bw0KKyAqIHVzZXIgc3BhY2UgaWYgVElG X1RBU0tfSVNPTEFUSU9OIGlzIHNldCBpbiB0aGUgdGhyZWFkX2luZm8gZmxhZ3MuICBJdA0KKyAq IHdpbGwgYXR0ZW1wdCB0byBxdWllc2NlIHRoZSBjb3JlIGFuZCBlbnRlciB0YXNrLWlzb2xhdGlv biBtb2RlLiAgSWYgaXQNCisgKiBmYWlscywgaXQgd2lsbCByZXNldCB0aGUgc3lzdGVtIGNhbGwg cmV0dXJuIHZhbHVlIHRvIGFuIGVycm9yIGNvZGUgdGhhdA0KKyAqIGluZGljYXRlcyB0aGUgZmFp bHVyZSBtb2RlLg0KKyAqLw0KK2V4dGVybiB2b2lkIHRhc2tfaXNvbGF0aW9uX3N0YXJ0KHZvaWQp Ow0KKw0KKy8qKg0KKyAqIGlzX2lzb2xhdGlvbl9jcHUoKSAtIGNoZWNrIGlmIENQVSBpcyBpbnRl bmRlZCBmb3IgcnVubmluZyBpc29sYXRlZCB0YXNrcy4NCisgKiBAY3B1OglDUFUgdG8gY2hlY2su DQorICovDQorc3RhdGljIGlubGluZSBib29sIGlzX2lzb2xhdGlvbl9jcHUoaW50IGNwdSkNCit7 DQorCXJldHVybiB0YXNrX2lzb2xhdGlvbl9tYXAgIT0gTlVMTCAmJg0KKwkJY3B1bWFza190ZXN0 X2NwdShjcHUsIHRhc2tfaXNvbGF0aW9uX21hcCk7DQorfQ0KKw0KKy8qKg0KKyAqIHRhc2tfaXNv bGF0aW9uX29uX2NwdSgpIC0gY2hlY2sgaWYgdGhlIGNwdSBpcyBydW5uaW5nIGlzb2xhdGVkIHRh c2sNCisgKiBAY3B1OglDUFUgdG8gY2hlY2suDQorICovDQorc3RhdGljIGlubGluZSBpbnQgdGFz a19pc29sYXRpb25fb25fY3B1KGludCBjcHUpDQorew0KKyAgcmV0dXJuIHRlc3RfYml0KEJJVF9M TF9UQVNLX0lTT0xBVElPTiwgJnBlcl9jcHUobGxfaXNvbF9mbGFncywgY3B1KSk7DQorfQ0KKw0K K2V4dGVybiB2b2lkIHRhc2tfaXNvbGF0aW9uX2NoZWNrX3J1bl9jbGVhbnVwKHZvaWQpOw0KKw0K Ky8qKg0KKyAqIHRhc2tfaXNvbGF0aW9uX2NwdW1hc2soKSAtIHNldCBDUFVzIGN1cnJlbnRseSBy dW5uaW5nIGlzb2xhdGVkIHRhc2tzDQorICogQG1hc2s6CU1hc2sgdG8gbW9kaWZ5Lg0KKyAqLw0K K2V4dGVybiB2b2lkIHRhc2tfaXNvbGF0aW9uX2NwdW1hc2soc3RydWN0IGNwdW1hc2sgKm1hc2sp Ow0KKw0KKy8qKg0KKyAqIHRhc2tfaXNvbGF0aW9uX2NsZWFyX2NwdW1hc2soKSAtIGNsZWFyIENQ VXMgY3VycmVudGx5IHJ1bm5pbmcgaXNvbGF0ZWQgdGFza3MNCisgKiBAbWFzazogICAgICBNYXNr IHRvIG1vZGlmeS4NCisgKi8NCitleHRlcm4gdm9pZCB0YXNrX2lzb2xhdGlvbl9jbGVhcl9jcHVt YXNrKHN0cnVjdCBjcHVtYXNrICptYXNrKTsNCisNCisvKioNCisgKiB0YXNrX2lzb2xhdGlvbl9z eXNjYWxsKCkgLSByZXBvcnQgYSBzeXNjYWxsIGZyb20gYW4gaXNvbGF0ZWQgdGFzaw0KKyAqIEBu cjoJCVRoZSBzeXNjYWxsIG51bWJlci4NCisgKg0KKyAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUg aW52b2tlZCBhdCBzeXNjYWxsIGVudHJ5IGlmIFRJRl9UQVNLX0lTT0xBVElPTiBpcw0KKyAqIHNl dCBpbiB0aGUgdGhyZWFkX2luZm8gZmxhZ3MuICBJdCBjaGVja3MgZm9yIHZhbGlkIHN5c2NhbGxz LA0KKyAqIHNwZWNpZmljYWxseSBwcmN0bCgpIHdpdGggUFJfVEFTS19JU09MQVRJT04sIGV4aXQo KSwgYW5kIGV4aXRfZ3JvdXAoKS4NCisgKiBGb3IgYW55IG90aGVyIHN5c2NhbGwgaXQgd2lsbCBy YWlzZSBhIHNpZ25hbCBhbmQgcmV0dXJuIGZhaWx1cmUuDQorICoNCisgKiBSZXR1cm46IDAgZm9y IGFjY2VwdGFibGUgc3lzY2FsbHMsIC0xIGZvciBhbGwgb3RoZXJzLg0KKyAqLw0KK2V4dGVybiBp bnQgdGFza19pc29sYXRpb25fc3lzY2FsbChpbnQgbnIpOw0KKw0KKy8qKg0KKyAqIF90YXNrX2lz b2xhdGlvbl9pbnRlcnJ1cHQoKSAtIHJlcG9ydCBhbiBpbnRlcnJ1cHQgb2YgYW4gaXNvbGF0ZWQg dGFzaw0KKyAqIEBmbXQ6CUEgZm9ybWF0IHN0cmluZyBkZXNjcmliaW5nIHRoZSBpbnRlcnJ1cHQN CisgKiBALi4uOglGb3JtYXQgYXJndW1lbnRzLCBpZiBhbnkuDQorICoNCisgKiBUaGlzIHJvdXRp bmUgc2hvdWxkIGJlIGludm9rZWQgYXQgYW55IGV4Y2VwdGlvbiBvciBJUlEgaWYNCisgKiBUSUZf VEFTS19JU09MQVRJT04gaXMgc2V0IGluIHRoZSB0aHJlYWRfaW5mbyBmbGFncy4gIEl0IGlzIG5v dCBuZWNlc3NhcnkNCisgKiB0byBpbnZva2UgaXQgaWYgdGhlIGV4Y2VwdGlvbiB3aWxsIGdlbmVy YXRlIGEgc2lnbmFsIGFueXdheSAoZS5nLiBhIGJhZA0KKyAqIHBhZ2UgZmF1bHQpLCBhbmQgaW4g dGhhdCBjYXNlIGl0IGlzIHByZWZlcmFibGUgbm90IHRvIGludm9rZSBpdCBidXQganVzdA0KKyAq IHJlbHkgb24gdGhlIHN0YW5kYXJkIExpbnV4IHNpZ25hbC4gIFRoZSBtYWNybyB0YXNrX2lzb2xh dGlvbl9zeXNjYWxsKCkNCisgKiB3cmFwcyB0aGUgVElGX1RBU0tfSVNPTEFUSU9OIGZsYWcgdGVz dCB0byBzaW1wbGlmeSB0aGUgY2FsbGVyIGNvZGUuDQorICovDQorZXh0ZXJuIHZvaWQgX3Rhc2tf aXNvbGF0aW9uX2ludGVycnVwdChjb25zdCBjaGFyICpmbXQsIC4uLik7DQorI2RlZmluZSB0YXNr X2lzb2xhdGlvbl9pbnRlcnJ1cHQoZm10LCAuLi4pCQkJCVwNCisJZG8gewkJCQkJCQkJXA0KKwkJ aWYgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MgJiBfVElGX1RBU0tfSVNPTEFUSU9OKQlc DQorCQkJX3Rhc2tfaXNvbGF0aW9uX2ludGVycnVwdChmbXQsICMjIF9fVkFfQVJHU19fKTsJXA0K Kwl9IHdoaWxlICgwKQ0KKw0KKy8qKg0KKyAqIHRhc2tfaXNvbGF0aW9uX3JlbW90ZSgpIC0gcmVw b3J0IGEgcmVtb3RlIGludGVycnVwdCBvZiBhbiBpc29sYXRlZCB0YXNrDQorICogQGNwdToJVGhl IHJlbW90ZSBjcHUgdGhhdCBpcyBhYm91dCB0byBiZSBpbnRlcnJ1cHRlZC4NCisgKiBAZm10OglB IGZvcm1hdCBzdHJpbmcgZGVzY3JpYmluZyB0aGUgaW50ZXJydXB0DQorICogQC4uLjoJRm9ybWF0 IGFyZ3VtZW50cywgaWYgYW55Lg0KKyAqDQorICogVGhpcyByb3V0aW5lIHNob3VsZCBiZSBpbnZv a2VkIGFueSB0aW1lIGEgcmVtb3RlIElQSSBvciBvdGhlciB0eXBlIG9mDQorICogaW50ZXJydXB0 IGlzIGJlaW5nIGRlbGl2ZXJlZCB0byBhbm90aGVyIGNwdS4gVGhlIGZ1bmN0aW9uIHdpbGwgY2hl Y2sgdG8NCisgKiBzZWUgaWYgdGhlIHRhcmdldCBjb3JlIGlzIHJ1bm5pbmcgYSB0YXNrLWlzb2xh dGlvbiB0YXNrLCBhbmQgZ2VuZXJhdGUgYQ0KKyAqIGRpYWdub3N0aWMgb24gdGhlIGNvbnNvbGUg aWYgc287IGluIGFkZGl0aW9uLCB3ZSB0YWcgdGhlIHRhc2sgc28gaXQNCisgKiBkb2Vzbid0IGdl bmVyYXRlIGFub3RoZXIgZGlhZ25vc3RpYyB3aGVuIHRoZSBpbnRlcnJ1cHQgYWN0dWFsbHkgYXJy aXZlcy4NCisgKiBHZW5lcmF0aW5nIGEgZGlhZ25vc3RpYyByZW1vdGVseSB5aWVsZHMgYSBjbGVh cmVyIGluZGljYXRpb24gb2Ygd2hhdA0KKyAqIGhhcHBlbmVkIHRoZW4ganVzdCByZXBvcnRpbmcg b25seSB3aGVuIHRoZSByZW1vdGUgY29yZSBpcyBpbnRlcnJ1cHRlZC4NCisgKg0KKyAqLw0KK2V4 dGVybiB2b2lkIHRhc2tfaXNvbGF0aW9uX3JlbW90ZShpbnQgY3B1LCBjb25zdCBjaGFyICpmbXQs IC4uLik7DQorDQorLyoqDQorICogdGFza19pc29sYXRpb25fcmVtb3RlX2NwdW1hc2soKSAtIHJl cG9ydCBpbnRlcnJ1cHRpb24gb2YgbXVsdGlwbGUgY3B1cw0KKyAqIEBtYXNrOglUaGUgc2V0IG9m IHJlbW90ZXMgY3B1cyB0aGF0IGFyZSBhYm91dCB0byBiZSBpbnRlcnJ1cHRlZC4NCisgKiBAZm10 OglBIGZvcm1hdCBzdHJpbmcgZGVzY3JpYmluZyB0aGUgaW50ZXJydXB0DQorICogQC4uLjoJRm9y bWF0IGFyZ3VtZW50cywgaWYgYW55Lg0KKyAqDQorICogVGhpcyBpcyB0aGUgY3B1bWFzayB2YXJp YW50IG9mIF90YXNrX2lzb2xhdGlvbl9yZW1vdGUoKS4gIFdlDQorICogZ2VuZXJhdGUgYSBzaW5n bGUtbGluZSBkaWFnbm9zdGljIG1lc3NhZ2UgZXZlbiBpZiBtdWx0aXBsZSByZW1vdGUNCisgKiB0 YXNrLWlzb2xhdGlvbiBjcHVzIGFyZSBiZWluZyBpbnRlcnJ1cHRlZC4NCisgKi8NCitleHRlcm4g dm9pZCB0YXNrX2lzb2xhdGlvbl9yZW1vdGVfY3B1bWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAq bWFzaywNCisJCQkJCSAgY29uc3QgY2hhciAqZm10LCAuLi4pOw0KKw0KKy8qKg0KKyAqIF90YXNr X2lzb2xhdGlvbl9zaWduYWwoKSAtIGRpc2FibGUgdGFzayBpc29sYXRpb24gd2hlbiBzaWduYWwg aXMgcGVuZGluZw0KKyAqIEB0YXNrOglUaGUgdGFzayBmb3Igd2hpY2ggdG8gZGlzYWJsZSBpc29s YXRpb24uDQorICoNCisgKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhIGRpYWdub3N0aWMgYW5k IGRpc2FibGVzIHRhc2sgaXNvbGF0aW9uOyBpdA0KKyAqIHNob3VsZCBiZSBjYWxsZWQgaWYgVElG X1RBU0tfSVNPTEFUSU9OIGlzIHNldCB3aGVuIG5vdGlmeWluZyBhIHRhc2sgb2YgYQ0KKyAqIHBl bmRpbmcgc2lnbmFsLiAgVGhlIHRhc2tfaXNvbGF0aW9uX2ludGVycnVwdCgpIGZ1bmN0aW9uIG5v cm1hbGx5DQorICogZ2VuZXJhdGVzIGEgZGlhZ25vc3RpYyBmb3IgZXZlbnRzIHRoYXQganVzdCBp bnRlcnJ1cHQgYSB0YXNrIHdpdGhvdXQNCisgKiBnZW5lcmF0aW5nIGEgc2lnbmFsOyBoZXJlIHdl IG5lZWQgdG8gaG9vayB0aGUgcGF0aHMgdGhhdCBjb3JyZXNwb25kIHRvDQorICogaW50ZXJydXB0 cyB0aGF0IGRvIGdlbmVyYXRlIGEgc2lnbmFsLiAgVGhlIG1hY3JvIHRhc2tfaXNvbGF0aW9uX3Np Z25hbCgpDQorICogd3JhcHMgdGhlIFRJRl9UQVNLX0lTT0xBVElPTiBmbGFnIHRlc3QgdG8gc2lt cGxpZnkgdGhlIGNhbGxlciBjb2RlLg0KKyAqLw0KK2V4dGVybiB2b2lkIF90YXNrX2lzb2xhdGlv bl9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsNCisjZGVmaW5lIHRhc2tfaXNvbGF0 aW9uX3NpZ25hbCh0YXNrKQkJCQkJXA0KKwlkbyB7CQkJCQkJCQlcDQorCQlpZiAodGFza190aHJl YWRfaW5mbyh0YXNrKS0+ZmxhZ3MgJiBfVElGX1RBU0tfSVNPTEFUSU9OKSBcDQorCQkJX3Rhc2tf aXNvbGF0aW9uX3NpZ25hbCh0YXNrKTsJCQlcDQorCX0gd2hpbGUgKDApDQorDQorLyoqDQorICog dGFza19pc29sYXRpb25fdXNlcl9leGl0KCkgLSBkZWJ1ZyBhbGwgdXNlcl9leGl0IGNhbGxzDQor ICoNCisgKiBCeSBkZWZhdWx0LCB3ZSBkb24ndCBnZW5lcmF0ZSBhbiBleGNlcHRpb24gaW4gdGhl IGxvdy1sZXZlbCB1c2VyX2V4aXQoKQ0KKyAqIGNvZGUsIGJlY2F1c2UgcHJvZ3JhbXMgbG9zZSB0 aGUgYWJpbGl0eSB0byBkaXNhYmxlIHRhc2sgaXNvbGF0aW9uOiB0aGUNCisgKiB1c2VyX2V4aXQo KSBob29rIHdpbGwgY2F1c2UgYSBzaWduYWwgcHJpb3IgdG8gdGFza19pc29sYXRpb25fc3lzY2Fs bCgpDQorICogZGlzYWJsaW5nIHRhc2sgaXNvbGF0aW9uLiAgSW4gYWRkaXRpb24sIGl0IG1lYW5z IHRoYXQgd2UgbG9zZSBhbGwgdGhlDQorICogZGlhZ25vc3RpYyBpbmZvIG90aGVyd2lzZSBhdmFp bGFibGUgZnJvbSB0YXNrX2lzb2xhdGlvbl9pbnRlcnJ1cHQoKSBob29rcw0KKyAqIGxhdGVyIGlu IHRoZSBpbnRlcnJ1cHQtaGFuZGxpbmcgcHJvY2Vzcy4gIEJ1dCB5b3UgbWF5IGVuYWJsZSBpdCBo ZXJlIGZvcg0KKyAqIGEgc3BlY2lhbCBrZXJuZWwgYnVpbGQgaWYgeW91IGFyZSBoYXZpbmcgdW5k aWFnbm9zZWQgdXNlcnNwYWNlIGppdHRlci4NCisgKi8NCitzdGF0aWMgaW5saW5lIHZvaWQgdGFz a19pc29sYXRpb25fdXNlcl9leGl0KHZvaWQpDQorew0KKyNpZmRlZiBERUJVR19UQVNLX0lTT0xB VElPTg0KKwl0YXNrX2lzb2xhdGlvbl9pbnRlcnJ1cHQoInVzZXJfZXhpdCIpOw0KKyNlbmRpZg0K K30NCisNCisjZWxzZSAvKiAhQ09ORklHX1RBU0tfSVNPTEFUSU9OICovDQorc3RhdGljIGlubGlu ZSBpbnQgdGFza19pc29sYXRpb25fcmVxdWVzdCh1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJu IC1FSU5WQUw7IH0NCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19pc29sYXRpb25fa2VybmVsX2Vu dGVyKHZvaWQpIHt9DQorc3RhdGljIGlubGluZSB2b2lkIHRhc2tfaXNvbGF0aW9uX3N0YXJ0KHZv aWQpIHsgfQ0KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19pc29sYXRpb25fY3B1KGludCBjcHUpIHsg cmV0dXJuIDA7IH0NCitzdGF0aWMgaW5saW5lIGludCB0YXNrX2lzb2xhdGlvbl9vbl9jcHUoaW50 IGNwdSkgeyByZXR1cm4gMDsgfQ0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl9j cHVtYXNrKHN0cnVjdCBjcHVtYXNrICptYXNrKSB7IH0NCitzdGF0aWMgaW5saW5lIHZvaWQgdGFz a19pc29sYXRpb25fY2xlYXJfY3B1bWFzayhzdHJ1Y3QgY3B1bWFzayAqbWFzaykgeyB9DQorc3Rh dGljIGlubGluZSB2b2lkIHRhc2tfaXNvbGF0aW9uX2NwdV9jbGVhbnVwKHZvaWQpIHsgfQ0KK3N0 YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl9jaGVja19ydW5fY2xlYW51cCh2b2lkKSB7 IH0NCitzdGF0aWMgaW5saW5lIGludCB0YXNrX2lzb2xhdGlvbl9zeXNjYWxsKGludCBucikgeyBy ZXR1cm4gMDsgfQ0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl9pbnRlcnJ1cHQo Y29uc3QgY2hhciAqZm10LCAuLi4pIHsgfQ0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lzb2xh dGlvbl9yZW1vdGUoaW50IGNwdSwgY29uc3QgY2hhciAqZm10LCAuLi4pIHsgfQ0KK3N0YXRpYyBp bmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl9yZW1vdGVfY3B1bWFzayhjb25zdCBzdHJ1Y3QgY3B1 bWFzayAqbWFzaywNCisJCQkJCQkgY29uc3QgY2hhciAqZm10LCAuLi4pIHsgfQ0KK3N0YXRpYyBp bmxpbmUgdm9pZCB0YXNrX2lzb2xhdGlvbl9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNr KSB7IH0NCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19pc29sYXRpb25fdXNlcl9leGl0KHZvaWQp IHsgfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfTElOVVhfSVNPTEFUSU9OX0ggKi8NCmRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgNCmlu ZGV4IDY4MzM3Mjk0MzA5My4uN2ZiN2JiM2ZkZGFhIDEwMDY0NA0KLS0tIGEvaW5jbHVkZS9saW51 eC9zY2hlZC5oDQorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgNCkBAIC0xMzAxLDYgKzEzMDEs MTEgQEAgc3RydWN0IHRhc2tfc3RydWN0IHsNCiAJdW5zaWduZWQgbG9uZwkJCXByZXZfbG93ZXN0 X3N0YWNrOw0KICNlbmRpZg0KIA0KKyNpZmRlZiBDT05GSUdfVEFTS19JU09MQVRJT04NCisJdW5z aWduZWQgc2hvcnQJCQl0YXNrX2lzb2xhdGlvbl9mbGFnczsgLyogcHJjdGwgKi8NCisJdW5zaWdu ZWQgc2hvcnQJCQl0YXNrX2lzb2xhdGlvbl9zdGF0ZTsNCisjZW5kaWYNCisNCiAjaWZkZWYgQ09O RklHX1g4Nl9NQ0UNCiAJdTY0CQkJCW1jZV9hZGRyOw0KIAlfX3U2NAkJCQltY2VfcmlwdiA6IDEs DQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aWNrLmggYi9pbmNsdWRlL2xpbnV4L3RpY2su aA0KaW5kZXggNzM0MDYxM2M3ZWZmLi4yN2M3YzAzM2Q1YTggMTAwNjQ0DQotLS0gYS9pbmNsdWRl L2xpbnV4L3RpY2suaA0KKysrIGIvaW5jbHVkZS9saW51eC90aWNrLmgNCkBAIC0yNjgsNiArMjY4 LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHRpY2tfZGVwX2NsZWFyX3NpZ25hbChzdHJ1Y3Qgc2ln bmFsX3N0cnVjdCAqc2lnbmFsLA0KIGV4dGVybiB2b2lkIHRpY2tfbm9oel9mdWxsX2tpY2tfY3B1 KGludCBjcHUpOw0KIGV4dGVybiB2b2lkIF9fdGlja19ub2h6X3Rhc2tfc3dpdGNoKHZvaWQpOw0K IGV4dGVybiB2b2lkIF9faW5pdCB0aWNrX25vaHpfZnVsbF9zZXR1cChjcHVtYXNrX3Zhcl90IGNw dW1hc2spOw0KKyNpZmRlZiBDT05GSUdfVEFTS19JU09MQVRJT04NCitleHRlcm4gaW50IHRyeV9z dG9wX2Z1bGxfdGljayh2b2lkKTsNCisjZW5kaWYNCiAjZWxzZQ0KIHN0YXRpYyBpbmxpbmUgYm9v bCB0aWNrX25vaHpfZnVsbF9lbmFibGVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9DQogc3RhdGlj IGlubGluZSBib29sIHRpY2tfbm9oel9mdWxsX2NwdShpbnQgY3B1KSB7IHJldHVybiBmYWxzZTsg fQ0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oIGIvaW5jbHVkZS91YXBp L2xpbnV4L3ByY3RsLmgNCmluZGV4IDA3YjRmODEzMWUzNi4uZjQ4NDhlZDJhMDY5IDEwMDY0NA0K LS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmgNCisrKyBiL2luY2x1ZGUvdWFwaS9saW51 eC9wcmN0bC5oDQpAQCAtMjM4LDQgKzIzOCwxMCBAQCBzdHJ1Y3QgcHJjdGxfbW1fbWFwIHsNCiAj ZGVmaW5lIFBSX1NFVF9JT19GTFVTSEVSCQk1Nw0KICNkZWZpbmUgUFJfR0VUX0lPX0ZMVVNIRVIJ CTU4DQogDQorLyogRW5hYmxlIHRhc2tfaXNvbGF0aW9uIG1vZGUgZm9yIFRBU0tfSVNPTEFUSU9O IGtlcm5lbHMuICovDQorI2RlZmluZSBQUl9UQVNLX0lTT0xBVElPTgkJNDgNCisjIGRlZmluZSBQ Ul9UQVNLX0lTT0xBVElPTl9FTkFCTEUJKDEgPDwgMCkNCisjIGRlZmluZSBQUl9UQVNLX0lTT0xB VElPTl9TRVRfU0lHKHNpZykJKCgoc2lnKSAmIDB4N2YpIDw8IDgpDQorIyBkZWZpbmUgUFJfVEFT S19JU09MQVRJT05fR0VUX1NJRyhiaXRzKSAoKChiaXRzKSA+PiA4KSAmIDB4N2YpDQorDQogI2Vu ZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovDQpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5p dC9LY29uZmlnDQppbmRleCAwNDk4YWY1NjdmNzAuLjdjYmZlM2VhZTNiNiAxMDA2NDQNCi0tLSBh L2luaXQvS2NvbmZpZw0KKysrIGIvaW5pdC9LY29uZmlnDQpAQCAtNjIwLDYgKzYyMCwzNCBAQCBj b25maWcgQ1BVX0lTT0xBVElPTg0KIA0KIHNvdXJjZSAia2VybmVsL3JjdS9LY29uZmlnIg0KIA0K K2NvbmZpZyBIQVZFX0FSQ0hfVEFTS19JU09MQVRJT04NCisJYm9vbA0KKw0KK2NvbmZpZyBUQVNL X0lTT0xBVElPTg0KKwlib29sICJQcm92aWRlIGhhcmQgQ1BVIGlzb2xhdGlvbiBmcm9tIHRoZSBr ZXJuZWwgb24gZGVtYW5kIg0KKwlkZXBlbmRzIG9uIE5PX0haX0ZVTEwgJiYgSEFWRV9BUkNIX1RB U0tfSVNPTEFUSU9ODQorCWhlbHANCisNCisJQWxsb3cgdXNlcnNwYWNlIHByb2Nlc3NlcyB0aGF0 IHBsYWNlIHRoZW1zZWx2ZXMgb24gY29yZXMgd2l0aA0KKwlub2h6X2Z1bGwgYW5kIGlzb2xjcHVz IGVuYWJsZWQsIGFuZCBydW4gcHJjdGwoUFJfVEFTS19JU09MQVRJT04pLA0KKwl0byAiaXNvbGF0 ZSIgdGhlbXNlbHZlcyBmcm9tIHRoZSBrZXJuZWwuICBQcmlvciB0byByZXR1cm5pbmcgdG8NCisJ dXNlcnNwYWNlLCBpc29sYXRlZCB0YXNrcyB3aWxsIGFycmFuZ2UgdGhhdCBubyBmdXR1cmUga2Vy bmVsDQorCWFjdGl2aXR5IHdpbGwgaW50ZXJydXB0IHRoZSB0YXNrIHdoaWxlIHRoZSB0YXNrIGlz IHJ1bm5pbmcgaW4NCisJdXNlcnNwYWNlLiAgQXR0ZW1wdGluZyB0byByZS1lbnRlciB0aGUga2Vy bmVsIHdoaWxlIGluIHRoaXMgbW9kZQ0KKwl3aWxsIGNhdXNlIHRoZSB0YXNrIHRvIGJlIHRlcm1p bmF0ZWQgd2l0aCBhIHNpZ25hbDsgeW91IG11c3QNCisJZXhwbGljaXRseSB1c2UgcHJjdGwoKSB0 byBkaXNhYmxlIHRhc2sgaXNvbGF0aW9uIGJlZm9yZSByZXN1bWluZw0KKwlub3JtYWwgdXNlIG9m IHRoZSBrZXJuZWwuDQorDQorCVRoaXMgImhhcmQiIGlzb2xhdGlvbiBmcm9tIHRoZSBrZXJuZWwg aXMgcmVxdWlyZWQgZm9yIHVzZXJzcGFjZQ0KKwl0YXNrcyB0aGF0IGFyZSBydW5uaW5nIGhhcmQg cmVhbC10aW1lIHRhc2tzIGluIHVzZXJzcGFjZSwgc3VjaCBhcw0KKwlhIGhpZ2gtc3BlZWQgbmV0 d29yayBkcml2ZXIgaW4gdXNlcnNwYWNlLiAgV2l0aG91dCB0aGlzIG9wdGlvbiwgYnV0DQorCXdp dGggTk9fSFpfRlVMTCBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgbWFrZSBhIGJlc3QtZmFpdGgs ICJzb2Z0Ig0KKwllZmZvcnQgdG8gc2hpZWxkIGEgc2luZ2xlIHVzZXJzcGFjZSBwcm9jZXNzIGZy b20gaW50ZXJydXB0cywgYnV0DQorCW1ha2VzIG5vIGd1YXJhbnRlZXMuDQorDQorCVlvdSBzaG91 bGQgc2F5ICJOIiB1bmxlc3MgeW91IGFyZSBpbnRlbmRpbmcgdG8gcnVuIGENCisJaGlnaC1wZXJm b3JtYW5jZSB1c2Vyc3BhY2UgZHJpdmVyIG9yIHNpbWlsYXIgdGFzay4NCisNCiBjb25maWcgQlVJ TERfQklOMkMNCiAJYm9vbA0KIAlkZWZhdWx0IG4NCmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZp bGUgYi9rZXJuZWwvTWFrZWZpbGUNCmluZGV4IGYzMjE4YmM1ZWM2OS4uNTQ2ZDhkODNjYzJmIDEw MDY0NA0KLS0tIGEva2VybmVsL01ha2VmaWxlDQorKysgYi9rZXJuZWwvTWFrZWZpbGUNCkBAIC0x MzAsNiArMTMwLDggQEAgS0FTQU5fU0FOSVRJWkVfc3RhY2tsZWFrLm8gOj0gbg0KIEtDU0FOX1NB TklUSVpFX3N0YWNrbGVhay5vIDo9IG4NCiBLQ09WX0lOU1RSVU1FTlRfc3RhY2tsZWFrLm8gOj0g bg0KIA0KK29iai0kKENPTkZJR19UQVNLX0lTT0xBVElPTikgKz0gaXNvbGF0aW9uLm8NCisNCiAk KG9iaikvY29uZmlncy5vOiAkKG9iaikvY29uZmlnX2RhdGEuZ3oNCiANCiB0YXJnZXRzICs9IGNv bmZpZ19kYXRhLmd6DQpkaWZmIC0tZ2l0IGEva2VybmVsL2lzb2xhdGlvbi5jIGIva2VybmVsL2lz b2xhdGlvbi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5hZmVm ZjQ5MGI3NmMNCi0tLSAvZGV2L251bGwNCisrKyBiL2tlcm5lbC9pc29sYXRpb24uYw0KQEAgLTAs MCArMSw4NDEgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQor LyoNCisgKiAgbGludXgva2VybmVsL2lzb2xhdGlvbi5jDQorICoNCisgKiAgSW1wbGVtZW50YXRp b24gb2YgdGFzayBpc29sYXRpb24uDQorICoNCisgKiBBdXRob3JzOg0KKyAqICAgQ2hyaXMgTWV0 Y2FsZiA8Y21ldGNhbGZAbWVsbGFub3guY29tPg0KKyAqICAgQWxleCBCZWxpdHMgPGFiZWxpdHNA bWFydmVsbC5jb20+DQorICogICBZdXJpIE5vcm92IDx5bm9yb3ZAbWFydmVsbC5jb20+DQorICov DQorDQorI2luY2x1ZGUgPGxpbnV4L21tLmg+DQorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4NCisj aW5jbHVkZSA8bGludXgvdm1zdGF0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L2lzb2xhdGlvbi5oPg0KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPg0K KyNpbmNsdWRlIDxsaW51eC9zbXAuaD4NCisjaW5jbHVkZSA8bGludXgvdGljay5oPg0KKyNpbmNs dWRlIDxhc20vdW5pc3RkLmg+DQorI2luY2x1ZGUgPGFzbS9zeXNjYWxsLmg+DQorI2luY2x1ZGUg PGxpbnV4L2hydGltZXIuaD4NCisNCisvKg0KKyAqIFRoZXNlIHZhbHVlcyBhcmUgc3RvcmVkIGlu IHRhc2tfaXNvbGF0aW9uX3N0YXRlLg0KKyAqIE5vdGUgdGhhdCBTVEFURV9OT1JNQUwgKyBUSUZf VEFTS19JU09MQVRJT04gbWVhbnMgd2UgYXJlIHN0aWxsDQorICogcmV0dXJuaW5nIGZyb20gc3lz X3ByY3RsKCkgdG8gdXNlcnNwYWNlLg0KKyAqLw0KK2VudW0gew0KKwlTVEFURV9OT1JNQUwgPSAw LAkvKiBOb3QgaXNvbGF0ZWQgKi8NCisJU1RBVEVfSVNPTEFURUQgPSAxCS8qIEluIHVzZXJzcGFj ZSwgaXNvbGF0ZWQgKi8NCit9Ow0KKw0KKy8qDQorICogQ291bnRlciBmb3IgaXNvbGF0aW9uIHN0 YXRlIG9uIGEgZ2l2ZW4gQ1BVLCBpbmNyZW1lbnRzIHdoZW4gZW50ZXJpbmcNCisgKiBpc29sYXRp b24gYW5kIGRlY3JlbWVudHMgd2hlbiBleGl0aW5nIGlzb2xhdGlvbiAoYmVmb3JlIG9yIGFmdGVy IHRoZQ0KKyAqIGNsZWFudXApLiBNdWx0aXBsZSBzaW11bHRhbmVvdXNseSBydW5uaW5nIHByb2Nl ZHVyZXMgZW50ZXJpbmcgb3INCisgKiBleGl0aW5nIGlzb2xhdGlvbiBhcmUgcHJldmVudGVkIGJ5 IGNoZWNraW5nIHRoZSByZXN1bHQgb2YNCisgKiBpbmNyZW1lbnRpbmcgb3IgZGVjcmVtZW50aW5n IHRoaXMgdmFyaWFibGUuIFRoaXMgdmFyaWFibGUgaXMgYm90aA0KKyAqIGluY3JlbWVudGVkIGFu ZCBkZWNyZW1lbnRlZCBieSBDUFUgdGhhdCBjYXVzZWQgaXNvbGF0aW9uIGVudGVyaW5nIG9yDQor ICogZXhpdC4NCisgKg0KKyAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgbXVsdGlwbGUgaXNv bGF0aW9uLWJyZWFraW5nIGV2ZW50cyBtYXkgaGFwcGVuDQorICogYXQgb25jZSAob3Igb25lIGFz IHRoZSByZXN1bHQgb2YgdGhlIG90aGVyKSwgaG93ZXZlciBpc29sYXRpb24gZXhpdA0KKyAqIG1h eSBvbmx5IGhhcHBlbiBvbmNlIHRvIHRyYW5zaXRpb24gZnJvbSBpc29sYXRlZCB0byBub24taXNv bGF0ZWQgc3RhdGUuDQorICogVGhlcmVmb3JlLCBpZiBkZWNyZW1lbnRpbmcgdGhpcyBjb3VudGVy IHJlc3VsdHMgaW4gYSB2YWx1ZSBsZXNzIHRoYW4gMCwNCisgKiBpc29sYXRpb24gZXhpdCBwcm9j ZWR1cmUgY2FuJ3QgYmUgc3RhcnRlZCAtLSBpdCBhbHJlYWR5IGhhcHBlbmVkLCBvciBpcw0KKyAq IGluIHByb2dyZXNzLCBvciBpc29sYXRpb24gaXMgbm90IGVudGVyZWQgeWV0Lg0KKyAqLw0KK0RF RklORV9QRVJfQ1BVKGF0b21pY190LCBpc29sX2NvdW50ZXIpOw0KKw0KKy8qDQorICogTG93LWxl dmVsIGlzb2xhdGlvbiBmbGFncy4NCisgKiBUaG9zZSBmbGFncyBhcmUgdXNlZCBieSBsb3ctbGV2 ZWwgaXNvbGF0aW9uIHNldC9jbGVhci9jaGVjayByb3V0aW5lcy4NCisgKiBUaG9zZSBmbGFncyBz aG91bGQgYmUgc2V0IGxhc3QgYmVmb3JlIHJldHVybiB0byB1c2Vyc3BhY2UgYW5kIGNsZWFyZWQN CisgKiBmaXJzdCB1cG9uIGtlcm5lbCBlbnRyeSwgYW5kIHN5bmNocm9uaXplZCB0byBhbGxvdyBp c29sYXRpb24gYnJlYWtpbmcNCisgKiBkZXRlY3Rpb24gYmVmb3JlIHRvdWNoaW5nIHBvdGVudGlh bGx5IHVuc3luY2hyb25pemVkIHBhcnRzIG9mIGtlcm5lbC4NCisgKiBJc29sYXRlZCB0YXNrIGRv ZXMgbm90IHJlY2VpdmUgc3luY2hyb25pemF0aW9uIGV2ZW50cyBvZiBhbnkga2luZCwgc28NCisg KiBhdCB0aGUgdGltZSBvZiB0aGUgZmlyc3QgZW50cnkgaW50byBrZXJuZWwgaXQgbWlnaHQgbm90 IGJlIHJlYWR5IHRvDQorICogcnVuIG1vc3Qgb2YgdGhlIGtlcm5lbCBjb2RlLiBIb3dldmVyIHRv IHBlcmZvcm0gc3luY2hyb25pemF0aW9uDQorICogcHJvcGVybHksIGtlcm5lbCBlbnRyeSBjb2Rl IHNob3VsZCBhbHNvIGVuYWJsZSBzeW5jaHJvbml6YXRpb24gZXZlbnRzDQorICogYXQgdGhlIHNh bWUgdGltZS4gVGhpcyBwcmVzZW50cyBhIHByb2JsZW0gYmVjYXVzZSBtb3JlIGtlcm5lbCBjb2Rl DQorICogc2hvdWxkIHJ1biB0byBkZXRlcm1pbmUgdGhlIGNhdXNlIG9mIGlzb2xhdGlvbiBicmVh a2luZywgc2lnbmFscyBtYXkNCisgKiBoYXZlIHRvIGJlIGdlbmVyYXRlZCwgZXRjLiBTbyBzb21l IGZsYWcgY2xlYXJpbmcgYW5kIHN5bmNocm9uaXphdGlvbg0KKyAqIHNob3VsZCBoYXBwZW4gaW4g Imxvdy1sZXZlbCIgZW50cnkgY29kZSBidXQgcHJvY2Vzc2luZyBvZiBpc29sYXRpb24NCisgKiBi cmVha2luZyBzaG91bGQgaGFwcGVuIGluICJoaWdoLWxldmVsIiBjb2RlLiBMb3ctbGV2ZWwgaXNv bGF0aW9uIGZsYWdzDQorICogc2hvdWxkIGJlIHNldCBpbiB0aGF0IGxvdy1sZXZlbCBjb2RlLCBw b3NzaWJseSBsb25nIGJlZm9yZSB0aGUgY2F1c2UNCisgKiBvZiBpc29sYXRpb24gYnJlYWtpbmcg aXMga25vd24uIFN5bW1ldHJpY2FsbHksIGVudGVyaW5nIGlzb2xhdGlvbg0KKyAqIHNob3VsZCBk aXNhYmxlIHN5bmNocm9uaXphdGlvbiBldmVudHMgYmVmb3JlIHJldHVybmluZyB0byB1c2Vyc3Bh Y2UNCisgKiBidXQgYWZ0ZXIgYWxsIHBvdGVudGlhbGx5IHZvbGF0aWxlIGNvZGUgaXMgZmluaXNo ZWQuDQorICovDQorREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgbGxfaXNvbF9mbGFncyk7 DQorDQorLyoNCisgKiBEZXNjcmlwdGlvbiBvZiB0aGUgbGFzdCB0d28gdGFza3MgdGhhdCByYW4g aXNvbGF0ZWQgb24gYSBnaXZlbiBDUFUuDQorICogVGhpcyBpcyBpbnRlbmRlZCBvbmx5IGZvciBt ZXNzYWdlcyBhYm91dCBpc29sYXRpb24gYnJlYWtpbmcuIFdlDQorICogZG9uJ3Qgd2FudCBhbnkg cmVmZXJlbmNlcyB0byBhY3R1YWwgdGFzayB3aGlsZSBhY2Nlc3NpbmcgdGhpcyBmcm9tDQorICog Q1BVIHRoYXQgY2F1c2VkIGlzb2xhdGlvbiBicmVha2luZyAtLSB3ZSBrbm93IG5vdGhpbmcgYWJv dXQgdGltaW5nDQorICogYW5kIGRvbid0IHdhbnQgdG8gdXNlIGxvY2tpbmcgb3IgUkNVLg0KKyAq Lw0KK3N0cnVjdCBpc29sX3Rhc2tfZGVzYyB7DQorCWF0b21pY190IGN1cnJfaW5kZXg7DQorCWF0 b21pY190IGN1cnJfaW5kZXhfd3I7DQorCWJvb2wJd2FybmVkWzJdOw0KKwlwaWRfdAlwaWRbMl07 DQorCXBpZF90CXRnaWRbMl07DQorCWNoYXIJY29tbVsyXVtUQVNLX0NPTU1fTEVOXTsNCit9Ow0K K3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgaXNvbF90YXNrX2Rlc2MsIGlzb2xfdGFza19k ZXNjcyk7DQorDQorLyoNCisgKiBDb3VudGVyIGZvciBpc29sYXRpb24gZXhpdGluZyBwcm9jZWR1 cmVzIChmcm9tIHJlcXVlc3QgdG8gdGhlIHN0YXJ0IG9mDQorICogY2xlYW51cCkgYmVpbmcgYXR0 ZW1wdGVkIGF0IG9uY2Ugb24gYSBDUFUuIE5vcm1hbGx5IGluY3JlbWVudGluZyBvZg0KKyAqIHRo aXMgY291bnRlciBpcyBwZXJmb3JtZWQgZnJvbSB0aGUgQ1BVIHRoYXQgY2F1c2VkIGlzb2xhdGlv biBicmVha2luZywNCisgKiBob3dldmVyIGRlY3JlbWVudGluZyBpcyBkb25lIGZyb20gdGhlIGNs ZWFudXAgcHJvY2VkdXJlLCBkZWxlZ2F0ZWQgdG8NCisgKiB0aGUgQ1BVIHRoYXQgaXMgZXhpdGlu ZyBpc29sYXRpb24sIG5vdCBmcm9tIHRoZSBDUFUgdGhhdCBjYXVzZWQgaXNvbGF0aW9uDQorICog YnJlYWtpbmcuDQorICoNCisgKiBJZiBpbmNyZW1lbnRpbmcgdGhpcyBjb3VudGVyIHdoaWxlIHN0 YXJ0aW5nIGlzb2xhdGlvbiBleGl0IHByb2NlZHVyZQ0KKyAqIHJlc3VsdHMgaW4gYSB2YWx1ZSBn cmVhdGVyIHRoYW4gMCwgaXNvbGF0aW9uIGV4aXRpbmcgaXMgYWxyZWFkeSBpbg0KKyAqIHByb2dy ZXNzLCBhbmQgY2xlYW51cCBkaWQgbm90IHN0YXJ0IHlldC4gVGhpcyBtZWFucywgY291bnRlciBz aG91bGQgYmUNCisgKiBkZWNyZW1lbnRlZCBiYWNrLCBhbmQgaXNvbGF0aW9uIGV4aXQgdGhhdCBp cyBhbHJlYWR5IGluIHByb2dyZXNzLCBzaG91bGQNCisgKiBiZSBhbGxvd2VkIHRvIGNvbXBsZXRl LiBPdGhlcndpc2UsIGEgbmV3IGlzb2xhdGlvbiBleGl0IHByb2NlZHVyZSBzaG91bGQNCisgKiBi ZSBzdGFydGVkLg0KKyAqLw0KK0RFRklORV9QRVJfQ1BVKGF0b21pY190LCBpc29sX2V4aXRfY291 bnRlcik7DQorDQorLyoNCisgKiBEZXNjcmlwdG9yIGZvciBpc29sYXRpb24tYnJlYWtpbmcgU01Q IGNhbGxzDQorICovDQorREVGSU5FX1BFUl9DUFUoY2FsbF9zaW5nbGVfZGF0YV90LCBpc29sX2Jy ZWFrX2NzZCk7DQorDQorY3B1bWFza192YXJfdCB0YXNrX2lzb2xhdGlvbl9tYXA7DQorY3B1bWFz a192YXJfdCB0YXNrX2lzb2xhdGlvbl9jbGVhbnVwX21hcDsNCitzdGF0aWMgREVGSU5FX1NQSU5M T0NLKHRhc2tfaXNvbGF0aW9uX2NsZWFudXBfbG9jayk7DQorDQorLyogV2UgY2FuIHJ1biBvbiBj cHVzIHRoYXQgYXJlIGlzb2xhdGVkIGZyb20gdGhlIHNjaGVkdWxlciBhbmQgYXJlIG5vaHpfZnVs bC4gKi8NCitzdGF0aWMgaW50IF9faW5pdCB0YXNrX2lzb2xhdGlvbl9pbml0KHZvaWQpDQorew0K KwlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZ0YXNrX2lzb2xhdGlvbl9jbGVhbnVwX21hcCk7 DQorCWlmIChhbGxvY19jcHVtYXNrX3ZhcigmdGFza19pc29sYXRpb25fbWFwLCBHRlBfS0VSTkVM KSkNCisJCS8qDQorCQkgKiBBdCB0aGlzIHBvaW50IHRhc2sgaXNvbGF0aW9uIHNob3VsZCBtYXRj aA0KKwkJICogbm9oel9mdWxsLiBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4NCisJCSAq Lw0KKwkJY3B1bWFza19jb3B5KHRhc2tfaXNvbGF0aW9uX21hcCwgdGlja19ub2h6X2Z1bGxfbWFz ayk7DQorCXJldHVybiAwOw0KK30NCitjb3JlX2luaXRjYWxsKHRhc2tfaXNvbGF0aW9uX2luaXQp DQorDQorLyogRW5hYmxlIHN0YWNrIGJhY2t0cmFjZXMgb2YgYW55IGludGVycnVwdHMgb2YgdGFz a19pc29sYXRpb24gY29yZXMuICovDQorc3RhdGljIGJvb2wgdGFza19pc29sYXRpb25fZGVidWc7 DQorc3RhdGljIGludCBfX2luaXQgdGFza19pc29sYXRpb25fZGVidWdfZnVuYyhjaGFyICpzdHIp DQorew0KKwl0YXNrX2lzb2xhdGlvbl9kZWJ1ZyA9IHRydWU7DQorCXJldHVybiAxOw0KK30NCitf X3NldHVwKCJ0YXNrX2lzb2xhdGlvbl9kZWJ1ZyIsIHRhc2tfaXNvbGF0aW9uX2RlYnVnX2Z1bmMp Ow0KKw0KKy8qDQorICogUmVjb3JkIG5hbWUsIHBpZCBhbmQgZ3JvdXAgcGlkIG9mIHRoZSB0YXNr IGVudGVyaW5nIGlzb2xhdGlvbiBvbg0KKyAqIHRoZSBjdXJyZW50IENQVS4NCisgKi8NCitzdGF0 aWMgdm9pZCByZWNvcmRfY3Vycl9pc29sYXRlZF90YXNrKHZvaWQpDQorew0KKwlpbnQgaW5kOw0K KwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOw0KKwlzdHJ1Y3QgaXNvbF90YXNrX2Rlc2Mg KmRlc2MgPSAmcGVyX2NwdShpc29sX3Rhc2tfZGVzY3MsIGNwdSk7DQorCXN0cnVjdCB0YXNrX3N0 cnVjdCAqdGFzayA9IGN1cnJlbnQ7DQorDQorCS8qIEZpbmlzaCBldmVyeXRoaW5nIGJlZm9yZSBy ZWNvcmRpbmcgY3VycmVudCB0YXNrICovDQorCXNtcF9tYigpOw0KKwlpbmQgPSBhdG9taWNfaW5j X3JldHVybigmZGVzYy0+Y3Vycl9pbmRleF93cikgJiAxOw0KKwlkZXNjLT5jb21tW2luZF1bc2l6 ZW9mKHRhc2stPmNvbW0pIC0gMV0gPSAnXDAnOw0KKwltZW1jcHkoZGVzYy0+Y29tbVtpbmRdLCB0 YXNrLT5jb21tLCBzaXplb2YodGFzay0+Y29tbSkgLSAxKTsNCisJZGVzYy0+cGlkW2luZF0gPSB0 YXNrLT5waWQ7DQorCWRlc2MtPnRnaWRbaW5kXSA9IHRhc2stPnRnaWQ7DQorCWRlc2MtPndhcm5l ZFtpbmRdID0gZmFsc2U7DQorCS8qIFdyaXRlIGV2ZXJ5dGhpbmcsIHRvIGJlIHNlZW4gYnkgb3Ro ZXIgQ1BVcyAqLw0KKwlzbXBfbWIoKTsNCisJYXRvbWljX2luYygmZGVzYy0+Y3Vycl9pbmRleCk7 DQorCS8qIEV2ZXJ5b25lIHdpbGwgc2VlIHRoZSBuZXcgcmVjb3JkIGZyb20gdGhpcyBwb2ludCAq Lw0KKwlzbXBfbWIoKTsNCit9DQorDQorLyoNCisgKiBQcmludCBtZXNzYWdlIHByZWZpeGVkIHdp dGggdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjdXJyZW50IChvcg0KKyAqIGxhc3QpIGlzb2xhdGVk IHRhc2sgb24gYSBnaXZlbiBDUFUuIEludGVuZGVkIGZvciBpc29sYXRpb24gYnJlYWtpbmcNCisg KiBtZXNzYWdlcyB0aGF0IGluY2x1ZGUgdGFyZ2V0IHRhc2sgZm9yIHRoZSB1c2VyJ3MgY29udmVu aWVuY2UuDQorICoNCisgKiBNZXNzYWdlcyBwcm9kdWNlZCB3aXRoIHRoaXMgZnVuY3Rpb24gbWF5 IGhhdmUgb2Jzb2xldGUgdGFzaw0KKyAqIGluZm9ybWF0aW9uIGlmIGlzb2xhdGVkIHRhc2tzIG1h bmFnZWQgdG8gZXhpdCwgc3RhcnQgYW5kIGVudGVyDQorICogaXNvbGF0aW9uIG11bHRpcGxlIHRp bWVzLCBvciBtdWx0aXBsZSB0YXNrcyB0cmllZCB0byBlbnRlcg0KKyAqIGlzb2xhdGlvbiBvbiB0 aGUgc2FtZSBDUFUgYXQgb25jZS4gRm9yIHRob3NlIHVudXN1YWwgY2FzZXMgaXQgd291bGQNCisg KiBjb250YWluIGEgdmFsaWQgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlIGZvciBpc29sYXRpb24g YnJlYWtpbmcgYW5kDQorICogdGFyZ2V0IENQVSBudW1iZXIsIGp1c3Qgbm90IHRoZSBjb3JyZWN0 IGRlc2NyaXB0aW9uIG9mIHdoaWNoIHRhc2sNCisgKiBlbmRlZCB1cCBsb3NpbmcgaXNvbGF0aW9u Lg0KKyAqLw0KK2ludCB0YXNrX2lzb2xhdGlvbl9tZXNzYWdlKGludCBjcHUsIGludCBsZXZlbCwg Ym9vbCBzdXBwLCBjb25zdCBjaGFyICpmbXQsIC4uLikNCit7DQorCXN0cnVjdCBpc29sX3Rhc2tf ZGVzYyAqZGVzYzsNCisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOw0KKwl2YV9saXN0IGFyZ3M7 DQorCWNoYXIgYnVmX3ByZWZpeFtUQVNLX0NPTU1fTEVOICsgMjAgKyAzICogMjBdOw0KKwljaGFy IGJ1ZlsyMDBdOw0KKwlpbnQgY3Vycl9jcHUsIGluZF9jb3VudGVyLCBpbmRfY291bnRlcl9vbGQs IGluZDsNCisNCisJY3Vycl9jcHUgPSBnZXRfY3B1KCk7DQorCWRlc2MgPSAmcGVyX2NwdShpc29s X3Rhc2tfZGVzY3MsIGNwdSk7DQorCWluZF9jb3VudGVyID0gYXRvbWljX3JlYWQoJmRlc2MtPmN1 cnJfaW5kZXgpOw0KKw0KKwlpZiAoY3Vycl9jcHUgPT0gY3B1KSB7DQorCQkvKg0KKwkJICogTWVz c2FnZSBpcyBmb3IgdGhlIGN1cnJlbnQgQ1BVIHNvIGN1cnJlbnQNCisJCSAqIHRhc2tfc3RydWN0 IHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgY2FjaGVkDQorCQkgKiBpbmZvcm1hdGlvbi4NCisJ CSAqDQorCQkgKiBMaWtlIGluIG90aGVyIGRpYWdub3N0aWMgbWVzc2FnZXMsIGlmIGlzc3VlZCBm cm9tDQorCQkgKiBpbnRlcnJ1cHQgY29udGV4dCwgY3VycmVudCB3aWxsIGJlIHRoZSBpbnRlcnJ1 cHRlZA0KKwkJICogdGFzay4gVW5saWtlIG90aGVyIGRpYWdub3N0aWMgbWVzc2FnZXMsIHRoaXMg aXMNCisJCSAqIGFsd2F5cyByZWxldmFudCBiZWNhdXNlIHRoZSBtZXNzYWdlIGlzIGFib3V0DQor CQkgKiBpbnRlcnJ1cHRpbmcgYSB0YXNrLg0KKwkJICovDQorCQlpbmQgPSBpbmRfY291bnRlciAm IDE7DQorCQlpZiAoc3VwcCAmJiBkZXNjLT53YXJuZWRbaW5kXSkgew0KKwkJCS8qDQorCQkJICog SWYgc3VwcCBpcyB0cnVlLCBza2lwIHRoZSBtZXNzYWdlIGlmIHRoZQ0KKwkJCSAqIHNhbWUgdGFz ayB3YXMgbWVudGlvbmVkIGluIHRoZSBtZXNzYWdlDQorCQkJICogb3JpZ2luYXRlZCBvbiByZW1v dGUgQ1BVLCBhbmQgaXQgZGlkIG5vdA0KKwkJCSAqIHJlLWVudGVyIGlzb2xhdGVkIHN0YXRlIHNp bmNlIHRoZW4gKHdhcm5lZA0KKwkJCSAqIGlzIHRydWUpLiBPbmx5IGxvY2FsIG1lc3NhZ2VzIGZv bGxvd2luZw0KKwkJCSAqIHJlbW90ZSBtZXNzYWdlcywgbGlrZWx5IGFib3V0IHRoZSBzYW1lDQor CQkJICogaXNvbGF0aW9uIGJyZWFraW5nIGV2ZW50LCBhcmUgc2tpcHBlZCB0bw0KKwkJCSAqIGF2 b2lkIGR1cGxpY2F0aW9uLiBJZiByZW1vdGUgY2F1c2UgaXMNCisJCQkgKiBpbW1lZGlhdGVseSBm b2xsb3dlZCBieSBhIGxvY2FsIG9uZSBiZWZvcmUNCisJCQkgKiBpc29sYXRpb24gaXMgYnJva2Vu LCBsb2NhbCBjYXVzZSBpcyBza2lwcGVkDQorCQkJICogZnJvbSBtZXNzYWdlcy4NCisJCQkgKi8N CisJCQlwdXRfY3B1KCk7DQorCQkJcmV0dXJuIDA7DQorCQl9DQorCQl0YXNrID0gY3VycmVudDsN CisJCXNucHJpbnRmKGJ1Zl9wcmVmaXgsIHNpemVvZihidWZfcHJlZml4KSwNCisJCQkgImlzb2xh dGlvbiAlcy8lZC8lZCAoY3B1ICVkKSIsDQorCQkJIHRhc2stPmNvbW0sIHRhc2stPnRnaWQsIHRh c2stPnBpZCwgY3B1KTsNCisJCXB1dF9jcHUoKTsNCisJfSBlbHNlIHsNCisJCS8qDQorCQkgKiBN ZXNzYWdlIGlzIGZvciByZW1vdGUgQ1BVLCB1c2UgY2FjaGVkIGluZm9ybWF0aW9uLg0KKwkJICov DQorCQlwdXRfY3B1KCk7DQorCQkvKg0KKwkJICogTWFrZSBzdXJlLCBpbmRleCByZW1haW5lZCB1 bmNoYW5nZWQgd2hpbGUgZGF0YSB3YXMNCisJCSAqIGNvcGllZC4gSWYgaXQgY2hhbmdlZCwgZGF0 YSB0aGF0IHdhcyBjb3BpZWQgbWF5IGJlDQorCQkgKiBpbmNvbnNpc3RlbnQgYmVjYXVzZSB0d28g dXBkYXRlcyBpbiBhIHNlcXVlbmNlIGNvdWxkDQorCQkgKiBvdmVyd3JpdGUgdGhlIGRhdGEgd2hp bGUgaXQgd2FzIGJlaW5nIHJlYWQuDQorCQkgKi8NCisJCWRvIHsNCisJCQkvKiBNYWtlIHN1cmUg d2UgYXJlIHJlYWRpbmcgdXAgdG8gZGF0ZSB2YWx1ZXMgKi8NCisJCQlzbXBfbWIoKTsNCisJCQlp bmQgPSBpbmRfY291bnRlciAmIDE7DQorCQkJc25wcmludGYoYnVmX3ByZWZpeCwgc2l6ZW9mKGJ1 Zl9wcmVmaXgpLA0KKwkJCQkgImlzb2xhdGlvbiAlcy8lZC8lZCAoY3B1ICVkKSIsDQorCQkJCSBk ZXNjLT5jb21tW2luZF0sIGRlc2MtPnRnaWRbaW5kXSwNCisJCQkJIGRlc2MtPnBpZFtpbmRdLCBj cHUpOw0KKwkJCWRlc2MtPndhcm5lZFtpbmRdID0gdHJ1ZTsNCisJCQlpbmRfY291bnRlcl9vbGQg PSBpbmRfY291bnRlcjsNCisJCQkvKiBSZWNvcmQgdGhlIHdhcm5lZCBmbGFnLCB0aGVuIHJlLXJl YWQgZGVzY3JpcHRvciAqLw0KKwkJCXNtcF9tYigpOw0KKwkJCWluZF9jb3VudGVyID0gYXRvbWlj X3JlYWQoJmRlc2MtPmN1cnJfaW5kZXgpOw0KKwkJCS8qDQorCQkJICogSWYgdGhlIGNvdW50ZXIg Y2hhbmdlZCwgc29tZXRoaW5nIHdhcyB1cGRhdGVkLCBzbw0KKwkJCSAqIHJlcGVhdCBldmVyeXRo aW5nIHRvIGdldCB0aGUgY3VycmVudCBkYXRhDQorCQkJICovDQorCQl9IHdoaWxlIChpbmRfY291 bnRlciAhPSBpbmRfY291bnRlcl9vbGQpOw0KKwl9DQorDQorCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7 DQorCXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFyZ3MpOw0KKwl2YV9lbmQoYXJn cyk7DQorDQorCXN3aXRjaCAobGV2ZWwpIHsNCisJY2FzZSBMT0dMRVZFTF9FTUVSRzoNCisJCXBy X2VtZXJnKCIlczogJXMiLCBidWZfcHJlZml4LCBidWYpOw0KKwkJYnJlYWs7DQorCWNhc2UgTE9H TEVWRUxfQUxFUlQ6DQorCQlwcl9hbGVydCgiJXM6ICVzIiwgYnVmX3ByZWZpeCwgYnVmKTsNCisJ CWJyZWFrOw0KKwljYXNlIExPR0xFVkVMX0NSSVQ6DQorCQlwcl9jcml0KCIlczogJXMiLCBidWZf cHJlZml4LCBidWYpOw0KKwkJYnJlYWs7DQorCWNhc2UgTE9HTEVWRUxfRVJSOg0KKwkJcHJfZXJy KCIlczogJXMiLCBidWZfcHJlZml4LCBidWYpOw0KKwkJYnJlYWs7DQorCWNhc2UgTE9HTEVWRUxf V0FSTklORzoNCisJCXByX3dhcm4oIiVzOiAlcyIsIGJ1Zl9wcmVmaXgsIGJ1Zik7DQorCQlicmVh azsNCisJY2FzZSBMT0dMRVZFTF9OT1RJQ0U6DQorCQlwcl9ub3RpY2UoIiVzOiAlcyIsIGJ1Zl9w cmVmaXgsIGJ1Zik7DQorCQlicmVhazsNCisJY2FzZSBMT0dMRVZFTF9JTkZPOg0KKwkJcHJfaW5m bygiJXM6ICVzIiwgYnVmX3ByZWZpeCwgYnVmKTsNCisJCWJyZWFrOw0KKwljYXNlIExPR0xFVkVM X0RFQlVHOg0KKwkJcHJfZGVidWcoIiVzOiAlcyIsIGJ1Zl9wcmVmaXgsIGJ1Zik7DQorCQlicmVh azsNCisJZGVmYXVsdDoNCisJCS8qIE5vIG1lc3NhZ2Ugd2l0aG91dCBhIHZhbGlkIGxldmVsICov DQorCQlyZXR1cm4gMDsNCisJfQ0KKwlyZXR1cm4gMTsNCit9DQorDQorLyoNCisgKiBEdW1wIHN0 YWNrIGlmIG5lZWQgYmUuIFRoaXMgY2FuIGJlIGhlbHBmdWwgZXZlbiBmcm9tIHRoZSBmaW5hbCBl eGl0DQorICogdG8gdXNlcm1vZGUgY29kZSBzaW5jZSBzdGFjayB0cmFjZXMgc29tZXRpbWVzIGNh cnJ5IGluZm9ybWF0aW9uIGFib3V0DQorICogd2hhdCBwdXQgeW91IGludG8gdGhlIGtlcm5lbCwg ZS5nLiBhbiBpbnRlcnJ1cHQgbnVtYmVyIGVuY29kZWQgaW4NCisgKiB0aGUgaW5pdGlhbCBlbnRy eSBzdGFjayBmcmFtZSB0aGF0IGlzIHN0aWxsIHZpc2libGUgYXQgZXhpdCB0aW1lLg0KKyAqLw0K K3N0YXRpYyB2b2lkIGRlYnVnX2R1bXBfc3RhY2sodm9pZCkNCit7DQorCWlmICh0YXNrX2lzb2xh dGlvbl9kZWJ1ZykNCisJCWR1bXBfc3RhY2soKTsNCit9DQorDQorLyoNCisgKiBTZXQgdGhlIGZs YWdzIHdvcmQgYnV0IGRvbid0IHRyeSB0byBhY3R1YWxseSBzdGFydCB0YXNrIGlzb2xhdGlvbiB5 ZXQuDQorICogV2Ugd2lsbCBzdGFydCBpdCB3aGVuIGVudGVyaW5nIHVzZXIgc3BhY2UgaW4gdGFz a19pc29sYXRpb25fc3RhcnQoKS4NCisgKi8NCitpbnQgdGFza19pc29sYXRpb25fcmVxdWVzdCh1 bnNpZ25lZCBpbnQgZmxhZ3MpDQorew0KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdXJy ZW50Ow0KKw0KKwkvKg0KKwkgKiBUaGUgdGFzayBpc29sYXRpb24gZmxhZ3Mgc2hvdWxkIGFsd2F5 cyBiZSBjbGVhcmVkIGp1c3QgYnkNCisJICogdmlydHVlIG9mIGhhdmluZyBlbnRlcmVkIHRoZSBr ZXJuZWwuDQorCSAqLw0KKwlXQVJOX09OX09OQ0UodGVzdF90c2tfdGhyZWFkX2ZsYWcodGFzaywg VElGX1RBU0tfSVNPTEFUSU9OKSk7DQorCVdBUk5fT05fT05DRSh0YXNrLT50YXNrX2lzb2xhdGlv bl9mbGFncyAhPSAwKTsNCisJV0FSTl9PTl9PTkNFKHRhc2stPnRhc2tfaXNvbGF0aW9uX3N0YXRl ICE9IFNUQVRFX05PUk1BTCk7DQorDQorCXRhc2stPnRhc2tfaXNvbGF0aW9uX2ZsYWdzID0gZmxh Z3M7DQorCWlmICghKHRhc2stPnRhc2tfaXNvbGF0aW9uX2ZsYWdzICYgUFJfVEFTS19JU09MQVRJ T05fRU5BQkxFKSkNCisJCXJldHVybiAwOw0KKw0KKwkvKiBXZSBhcmUgdHJ5aW5nIHRvIGVuYWJs ZSB0YXNrIGlzb2xhdGlvbi4gKi8NCisJc2V0X3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfVEFT S19JU09MQVRJT04pOw0KKw0KKwkvKg0KKwkgKiBTaHV0IGRvd24gdGhlIHZtc3RhdCB3b3JrZXIg c28gd2UncmUgbm90IGludGVycnVwdGVkIGxhdGVyLg0KKwkgKiBXZSBoYXZlIHRvIHRyeSB0byBk byB0aGlzIGhlcmUgKHdpdGggaW50ZXJydXB0cyBlbmFibGVkKSBzaW5jZQ0KKwkgKiB3ZSBhcmUg Y2FuY2VsaW5nIGRlbGF5ZWQgd29yayBhbmQgd2lsbCBjYWxsIGZsdXNoX3dvcmsoKQ0KKwkgKiAo d2hpY2ggZW5hYmxlcyBpbnRlcnJ1cHRzKSBhbmQgcG9zc2libHkgc2NoZWR1bGUoKS4NCisJICov DQorCXF1aWV0X3Ztc3RhdF9zeW5jKCk7DQorDQorCS8qIFdlIHJldHVybiAwIGhlcmUgYnV0IHdl IG1heSBjaGFuZ2UgdGhhdCBpbiB0YXNrX2lzb2xhdGlvbl9zdGFydCgpLiAqLw0KKwlyZXR1cm4g MDsNCit9DQorDQorLyoNCisgKiBQZXJmb3JtIGFjdGlvbnMgdGhhdCBzaG91bGQgYmUgZG9uZSBp bW1lZGlhdGVseSBvbiBleGl0IGZyb20gaXNvbGF0aW9uLg0KKyAqLw0KK3N0YXRpYyB2b2lkIGZh c3RfdGFza19pc29sYXRpb25fY3B1X2NsZWFudXAodm9pZCAqaW5mbykNCit7DQorCXVuc2lnbmVk IGxvbmcgZmxhZ3M7DQorDQorCS8qDQorCSAqIFRoaXMgZnVuY3Rpb24gcnVucyBvbiBhIENQVSB0 aGF0IHJhbiBpc29sYXRlZCB0YXNrLg0KKwkgKg0KKwkgKiBXZSBkb24ndCB3YW50IHRoaXMgQ1BV IHJ1bm5pbmcgY29kZSBmcm9tIHRoZSByZXN0IG9mIGtlcm5lbA0KKwkgKiB1bnRpbCBvdGhlciBD UFVzIGtub3cgdGhhdCBpdCBpcyBubyBsb25nZXIgaXNvbGF0ZWQuDQorCSAqIFdoZW4gQ1BVIGlz IHJ1bm5pbmcgaXNvbGF0ZWQgdGFzayB1bnRpbCB0aGlzIHBvaW50IGFueXRoaW5nDQorCSAqIHRo YXQgY2F1c2VzIGFuIGludGVycnVwdCBvbiB0aGlzIENQVSBtdXN0IGVuZCB1cCBjYWxsaW5nIHRo aXMNCisJICogb3IgdGFza19pc29sYXRpb25fa2VybmVsX2VudGVyKCkgYmVmb3JlIHRvdWNoaW5n IHRoZSByZXN0IG9mDQorCSAqIGtlcm5lbC4gVGhhdCBpcywgdGFza19pc29sYXRpb25fa2VybmVs X2VudGVyKCksIElQSSB0byB0aGlzDQorCSAqIGZ1bmN0aW9uIG9yIHN0b3BfaXNvbGF0aW9uKCkg Y2FsbGluZyBpdC4gSWYgYW55IGludGVycnVwdCwNCisJICogaW5jbHVkaW5nIHNjaGVkdWxpbmcg dGltZXIsIGFycml2ZXMgYmVmb3JlIGEgY2FsbCB0byB0aGlzDQorCSAqIGZ1bmN0aW9uLCBpdCB3 aWxsIHN0aWxsIGVuZCB1cCBpbiB0YXNrX2lzb2xhdGlvbl9rZXJuZWxfZW50ZXIoKQ0KKwkgKiBl YXJseSBhZnRlciBlbnRlcmluZyBrZXJuZWwuDQorCSAqIEZyb20gdGhpcyBwb2ludCBpbnRlcnJ1 cHRzIGFyZSBkaXNhYmxlZCB1bnRpbCBhbGwgQ1BVcyB3aWxsIHNlZQ0KKwkgKiB0aGF0IHRoaXMg Q1BVIGlzIG5vIGxvbmdlciBydW5uaW5nIGlzb2xhdGVkIHRhc2suDQorCSAqDQorCSAqIFNlZSBh bHNvIHRhc2tfaXNvbGF0aW9uX2tlcm5lbF9lbnRlcigpLg0KKwkgKi8NCisJbG9jYWxfaXJxX3Nh dmUoZmxhZ3MpOw0KKwlhdG9taWNfZGVjKCZwZXJfY3B1KGlzb2xfZXhpdF9jb3VudGVyLCBzbXBf cHJvY2Vzc29yX2lkKCkpKTsNCisJc21wX21iX19hZnRlcl9hdG9taWMoKTsNCisJLyoNCisJICog QXQgdGhpcyBwb2ludCBicmVha2luZyBpc29sYXRpb24gZnJvbSBvdGhlciBDUFVzIGlzIHBvc3Np YmxlIGFnYWluLA0KKwkgKiBob3dldmVyIGludGVycnVwdHMgd29uJ3QgYXJyaXZlIHVudGlsIGxv Y2FsX2lycV9yZXN0b3JlKCkNCisJICovDQorDQorCS8qDQorCSAqIFRoaXMgdGFzayBpcyBubyBs b25nZXIgaXNvbGF0ZWQgKGFuZCBpZiBieSBhbnkgY2hhbmNlIHRoaXMNCisJICogaXMgdGhlIHdy b25nIHRhc2ssIGl0J3MgYWxyZWFkeSBub3QgaXNvbGF0ZWQpDQorCSAqLw0KKwljdXJyZW50LT50 YXNrX2lzb2xhdGlvbl9mbGFncyA9IDA7DQorCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjdXJyZW50 LCBUSUZfVEFTS19JU09MQVRJT04pOw0KKw0KKwkvKiBSdW4gdGhlIHJlc3Qgb2YgY2xlYW51cCBs YXRlciAqLw0KKwlzZXRfdHNrX3RocmVhZF9mbGFnKGN1cnJlbnQsIFRJRl9OT1RJRllfUkVTVU1F KTsNCisNCisJLyogQ2xlYXIgbG93LWxldmVsIGZsYWdzIGlmIHRoZXkgYXJlIG5vdCBjbGVhcmVk IHlldCAqLw0KKwl0aGlzX2NwdV93cml0ZShsbF9pc29sX2ZsYWdzLCAwKTsNCisNCisJLyoNCisJ ICogSWYgc29tZXRoaW5nIGhhcHBlbmVkIHRoYXQgcmVxdWlyZXMgYSBiYXJyaWVyIHRoYXQgd291 bGQNCisJICogb3RoZXJ3aXNlIGJlIGNhbGxlZCBmcm9tIHJlbW90ZSBDUFVzIGJ5IENQVSBraWNr IHByb2NlZHVyZSwNCisJICogdGhpcyBiYXJyaWVyIHJ1bnMgaW5zdGVhZCBvZiBpdC4gQWZ0ZXIg dGhpcyBiYXJyaWVyLCBDUFUNCisJICoga2ljayBwcm9jZWR1cmUgd291bGQgc2VlIHRoZSB1cGRh dGVkIGxsX2lzb2xfZmxhZ3MsIHNvIGl0DQorCSAqIHdpbGwgcnVuIGl0cyBvd24gSVBJIHRvIHRy aWdnZXIgYSBiYXJyaWVyLg0KKwkgKi8NCisJc21wX21iKCk7DQorCS8qDQorCSAqIFN5bmNocm9u aXplIGluc3RydWN0aW9ucyAtLSB0aGlzIENQVSB3YXMgbm90IGtpY2tlZCB3aGlsZQ0KKwkgKiBp biBpc29sYXRlZCBtb2RlLCBzbyBpdCBtaWdodCByZXF1aXJlIHN5bmNocm9uaXphdGlvbi4NCisJ ICogVGhlcmUgbWlnaHQgYmUgYW4gSVBJIGlmIGtpY2sgcHJvY2VkdXJlIGhhcHBlbmVkIGFuZA0K KwkgKiBsbF9pc29sX2ZsYWdzIHdhcyBhbHJlYWR5IHVwZGF0ZWQgd2hpbGUgaXQgYXNzZW1ibGVk IGEgQ1BVDQorCSAqIG1hc2suIEhvd2V2ZXIgaWYgdGhpcyBkaWQgbm90IGhhcHBlbiwgc3luY2hy b25pemUgZXZlcnl0aGluZw0KKwkgKiBoZXJlLg0KKwkgKi8NCisJaW5zdHJfc3luYygpOw0KKwls b2NhbF9pcnFfcmVzdG9yZShmbGFncyk7DQorfQ0KKw0KKy8qIERpc2FibGUgdGFzayBpc29sYXRp b24gZm9yIHRoZSBzcGVjaWZpZWQgdGFzay4gKi8NCitzdGF0aWMgdm9pZCBzdG9wX2lzb2xhdGlv bihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApDQorew0KKwlpbnQgY3B1LCB0aGlzX2NwdTsNCisJdW5z aWduZWQgbG9uZyBmbGFnczsNCisNCisJdGhpc19jcHUgPSBnZXRfY3B1KCk7DQorCWNwdSA9IHRh c2tfY3B1KHApOw0KKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBlcl9jcHUoaXNvbF9leGl0X2Nv dW50ZXIsIGNwdSkpID4gMSkgew0KKwkJLyogQWxyZWFkeSBleGl0aW5nIGlzb2xhdGlvbiAqLw0K KwkJYXRvbWljX2RlYygmcGVyX2NwdShpc29sX2V4aXRfY291bnRlciwgY3B1KSk7DQorCQlwdXRf Y3B1KCk7DQorCQlyZXR1cm47DQorCX0NCisNCisJaWYgKHAgPT0gY3VycmVudCkgew0KKwkJcC0+ dGFza19pc29sYXRpb25fc3RhdGUgPSBTVEFURV9OT1JNQUw7DQorCQlmYXN0X3Rhc2tfaXNvbGF0 aW9uX2NwdV9jbGVhbnVwKE5VTEwpOw0KKwkJdGFza19pc29sYXRpb25fY3B1X2NsZWFudXAoKTsN CisJCWlmIChhdG9taWNfZGVjX3JldHVybigmcGVyX2NwdShpc29sX2NvdW50ZXIsIGNwdSkpIDwg MCkgew0KKwkJCS8qIElzIG5vdCBpc29sYXRlZCBhbHJlYWR5ICovDQorCQkJYXRvbWljX2luYygm cGVyX2NwdShpc29sX2NvdW50ZXIsIGNwdSkpOw0KKwkJfQ0KKwkJcHV0X2NwdSgpOw0KKwl9IGVs c2Ugew0KKwkJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZwZXJfY3B1KGlzb2xfY291bnRlciwgY3B1 KSkgPCAwKSB7DQorCQkJLyogSXMgbm90IGlzb2xhdGVkIGFscmVhZHkgKi8NCisJCQlhdG9taWNf aW5jKCZwZXJfY3B1KGlzb2xfY291bnRlciwgY3B1KSk7DQorCQkJYXRvbWljX2RlYygmcGVyX2Nw dShpc29sX2V4aXRfY291bnRlciwgY3B1KSk7DQorCQkJcHV0X2NwdSgpOw0KKwkJCXJldHVybjsN CisJCX0NCisJCS8qDQorCQkgKiBTY2hlZHVsZSAic2xvdyIgY2xlYW51cC4gVGhpcyByZWxpZXMg b24NCisJCSAqIFRJRl9OT1RJRllfUkVTVU1FIGJlaW5nIHNldA0KKwkJICovDQorCQlzcGluX2xv Y2tfaXJxc2F2ZSgmdGFza19pc29sYXRpb25fY2xlYW51cF9sb2NrLCBmbGFncyk7DQorCQljcHVt YXNrX3NldF9jcHUoY3B1LCB0YXNrX2lzb2xhdGlvbl9jbGVhbnVwX21hcCk7DQorCQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZ0YXNrX2lzb2xhdGlvbl9jbGVhbnVwX2xvY2ssIGZsYWdzKTsNCisJ CS8qDQorCQkgKiBTZXR0aW5nIGZsYWdzIGlzIGRlbGVnYXRlZCB0byB0aGUgQ1BVIHdoZXJlDQor CQkgKiBpc29sYXRlZCB0YXNrIGlzIHJ1bm5pbmcNCisJCSAqIGlzb2xfZXhpdF9jb3VudGVyIHdp bGwgYmUgZGVjcmVtZW50ZWQgZnJvbSB0aGVyZSBhcyB3ZWxsLg0KKwkJICovDQorCQlwZXJfY3B1 KGlzb2xfYnJlYWtfY3NkLCBjcHUpLmZ1bmMgPQ0KKwkJICAgIGZhc3RfdGFza19pc29sYXRpb25f Y3B1X2NsZWFudXA7DQorCQlwZXJfY3B1KGlzb2xfYnJlYWtfY3NkLCBjcHUpLmluZm8gPSBOVUxM Ow0KKwkJcGVyX2NwdShpc29sX2JyZWFrX2NzZCwgY3B1KS5mbGFncyA9IDA7DQorCQlzbXBfY2Fs bF9mdW5jdGlvbl9zaW5nbGVfYXN5bmMoY3B1LA0KKwkJCQkJICAgICAgICZwZXJfY3B1KGlzb2xf YnJlYWtfY3NkLCBjcHUpKTsNCisJCXB1dF9jcHUoKTsNCisJfQ0KK30NCisNCisvKg0KKyAqIFRo aXMgY29kZSBydW5zIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBqdXN0IGJlZm9yZSB0aGUgcmV0 dXJuIHRvDQorICogdXNlcnNwYWNlLCBhZnRlciBhIHByY3RsKCkgaGFzIHJlcXVlc3RlZCBlbmFi bGluZyB0YXNrIGlzb2xhdGlvbi4NCisgKiBXZSB0YWtlIHdoYXRldmVyIHN0ZXBzIGFyZSBuZWVk ZWQgdG8gYXZvaWQgYmVpbmcgaW50ZXJydXB0ZWQgbGF0ZXI6DQorICogZHJhaW4gdGhlIGxydSBw YWdlcywgc3RvcCB0aGUgc2NoZWR1bGVyIHRpY2ssIGV0Yy4gIE1vcmUNCisgKiBmdW5jdGlvbmFs aXR5IG1heSBiZSBhZGRlZCBoZXJlIGxhdGVyIHRvIGF2b2lkIG90aGVyIHR5cGVzIG9mDQorICog aW50ZXJydXB0cyBmcm9tIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLg0KKyAqDQorICogSWYgd2Ug Y2FuJ3QgZW5hYmxlIHRhc2sgaXNvbGF0aW9uLCB3ZSB1cGRhdGUgdGhlIHN5c2NhbGwgcmV0dXJu DQorICogdmFsdWUgd2l0aCBhbiBhcHByb3ByaWF0ZSBlcnJvci4NCisgKi8NCit2b2lkIHRhc2tf aXNvbGF0aW9uX3N0YXJ0KHZvaWQpDQorew0KKwlpbnQgZXJyb3I7DQorCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7DQorDQorCS8qDQorCSAqIFdlIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiBTVEFURV9O T1JNQUwgKGlzb2xhdGlvbiBkaXNhYmxlZCksDQorCSAqIG9uIG91ciB3YXkgb3V0IG9mIHRoZSBr ZXJuZWwgZnJvbSB0aGUgcHJjdGwoKSB0aGF0IHR1cm5lZCBpdCBvbi4NCisJICogSWYgd2UgYXJl IGV4aXRpbmcgZnJvbSB0aGUga2VybmVsIGluIGFub3RoZXIgc3RhdGUsIGl0IG1lYW5zIHdlDQor CSAqIG1hZGUgaXQgYmFjayBpbnRvIHRoZSBrZXJuZWwgd2l0aG91dCBkaXNhYmxpbmcgdGFzayBp c29sYXRpb24sDQorCSAqIGFuZCB3ZSBzaG91bGQgaW52ZXN0aWdhdGUgaG93IChhbmQgaW4gYW55 IGNhc2UgZGlzYWJsZSB0YXNrDQorCSAqIGlzb2xhdGlvbiBhdCB0aGlzIHBvaW50KS4gIFdlIGFy ZSBjbGVhcmx5IG5vdCBvbiB0aGUgcGF0aCBiYWNrDQorCSAqIGZyb20gdGhlIHByY3RsKCkgc28g d2UgZG9uJ3QgdG91Y2ggdGhlIHN5c2NhbGwgcmV0dXJuIHZhbHVlLg0KKwkgKi8NCisJaWYgKFdB Uk5fT05fT05DRShjdXJyZW50LT50YXNrX2lzb2xhdGlvbl9zdGF0ZSAhPSBTVEFURV9OT1JNQUwp KSB7DQorCQkvKiBJbmNyZW1lbnQgY291bnRlciwgdGhpcyB3aWxsIGFsbG93IGlzb2xhdGlvbiBi cmVha2luZyAqLw0KKwkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwZXJfY3B1KGlzb2xfY291bnRl ciwNCisJCQkJCSAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSkpID4gMSkgew0KKwkJCWF0b21pY19k ZWMoJnBlcl9jcHUoaXNvbF9jb3VudGVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpKTsNCisJCX0NCisJ CS8vYXRvbWljX2luYygmcGVyX2NwdShpc29sX2NvdW50ZXIsIHNtcF9wcm9jZXNzb3JfaWQoKSkp Ow0KKwkJc3RvcF9pc29sYXRpb24oY3VycmVudCk7DQorCQlyZXR1cm47DQorCX0NCisNCisJLyoN CisJICogTXVzdCBiZSBhZmZpbml0aXplZCB0byBhIHNpbmdsZSBjb3JlIHdpdGggdGFzayBpc29s YXRpb24gcG9zc2libGUuDQorCSAqIEluIHByaW5jaXBsZSB0aGlzIGNvdWxkIGJlIHJlbW90ZWx5 IG1vZGlmaWVkIGJldHdlZW4gdGhlIHByY3RsKCkNCisJICogYW5kIHRoZSByZXR1cm4gdG8gdXNl cnNwYWNlLCBzbyB3ZSBoYXZlIHRvIGNoZWNrIGl0IGhlcmUuDQorCSAqLw0KKwlpZiAoY3VycmVu dC0+bnJfY3B1c19hbGxvd2VkICE9IDEgfHwNCisJICAgICFpc19pc29sYXRpb25fY3B1KHNtcF9w cm9jZXNzb3JfaWQoKSkpIHsNCisJCWVycm9yID0gLUVJTlZBTDsNCisJCWdvdG8gZXJyb3I7DQor CX0NCisNCisJLyogSWYgdGhlIHZtc3RhdCBkZWxheWVkIHdvcmsgaXMgbm90IGNhbmNlbGVkLCB3 ZSBoYXZlIHRvIHRyeSBhZ2Fpbi4gKi8NCisJaWYgKCF2bXN0YXRfaWRsZSgpKSB7DQorCQllcnJv ciA9IC1FQUdBSU47DQorCQlnb3RvIGVycm9yOw0KKwl9DQorDQorCS8qIFRyeSB0byBzdG9wIHRo ZSBkeW5hbWljIHRpY2suICovDQorCWVycm9yID0gdHJ5X3N0b3BfZnVsbF90aWNrKCk7DQorCWlm IChlcnJvcikNCisJCWdvdG8gZXJyb3I7DQorDQorCS8qIERyYWluIHRoZSBwYWdldmVjcyB0byBh dm9pZCB1bm5lY2Vzc2FyeSBJUEkgZmx1c2hlcyBsYXRlci4gKi8NCisJbHJ1X2FkZF9kcmFpbigp Ow0KKw0KKwkvKg0KKwkgKiBUYXNrIGlzIGdvaW5nIHRvIGJlIG1hcmtlZCBhcyBpc29sYXRlZC4g VGhpcyBkaXNhYmxlcyBJUElzDQorCSAqIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbiwgc28gdG8g YXZvaWQgaW5jb25zaXN0ZW5jeQ0KKwkgKiBkb24ndCBsZXQgYW55dGhpbmcgaW50ZXJydXB0IHVz IGFuZCBpc3N1ZSBhIGJhcnJpZXIgYXQgdGhlIGVuZC4NCisJICovDQorCWxvY2FsX2lycV9zYXZl KGZsYWdzKTsNCisNCisJLyogSW5jcmVtZW50IGNvdW50ZXIsIHRoaXMgd2lsbCBhbGxvdyBpc29s YXRpb24gYnJlYWtpbmcgKi8NCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwZXJfY3B1KGlzb2xf Y291bnRlciwNCisJCQkJICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKSkgPiAxKSB7DQorCQlhdG9t aWNfZGVjKCZwZXJfY3B1KGlzb2xfY291bnRlciwgc21wX3Byb2Nlc3Nvcl9pZCgpKSk7DQorCX0N CisNCisJLyogUmVjb3JkIGlzb2xhdGVkIHRhc2sgSURzIGFuZCBuYW1lICovDQorCXJlY29yZF9j dXJyX2lzb2xhdGVkX3Rhc2soKTsNCisJc21wX3dtYigpOw0KKw0KKwkvKiBGcm9tIHRoaXMgcG9p bnQgdGhpcyBpcyByZWNvZ25pemVkIGFzIGlzb2xhdGVkIGJ5IG90aGVyIENQVXMgKi8NCisJY3Vy cmVudC0+dGFza19pc29sYXRpb25fc3RhdGUgPSBTVEFURV9JU09MQVRFRDsNCisJdGhpc19jcHVf d3JpdGUobGxfaXNvbF9mbGFncywgRkxBR19MTF9UQVNLX0lTT0xBVElPTik7DQorCXNtcF9tYigp Ow0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7DQorCS8qDQorCSAqIElmIGFueXRoaW5nIGlu dGVycnVwdHMgdXMgYXQgdGhpcyBwb2ludCwgaXQgd2lsbCB0cmlnZ2VyDQorCSAqIGlzb2xhdGlv biBicmVha2luZyBwcm9jZWR1cmUuDQorCSAqLw0KKwlyZXR1cm47DQorDQorZXJyb3I6DQorCS8q IEluY3JlbWVudCBjb3VudGVyLCB0aGlzIHdpbGwgYWxsb3cgaXNvbGF0aW9uIGJyZWFraW5nICov DQorCWlmIChhdG9taWNfaW5jX3JldHVybigmcGVyX2NwdShpc29sX2NvdW50ZXIsDQorCQkJCSAg ICAgIHNtcF9wcm9jZXNzb3JfaWQoKSkpID4gMSkgew0KKwkJYXRvbWljX2RlYygmcGVyX2NwdShp c29sX2NvdW50ZXIsIHNtcF9wcm9jZXNzb3JfaWQoKSkpOw0KKwl9DQorCXN0b3BfaXNvbGF0aW9u KGN1cnJlbnQpOw0KKwlzeXNjYWxsX3NldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgY3VycmVudF9w dF9yZWdzKCksIGVycm9yLCAwKTsNCit9DQorDQorLyogU3RvcCB0YXNrIGlzb2xhdGlvbiBvbiB0 aGUgcmVtb3RlIHRhc2sgYW5kIHNlbmQgaXQgYSBzaWduYWwuICovDQorc3RhdGljIHZvaWQgc2Vu ZF9pc29sYXRpb25fc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykNCit7DQorCWludCBm bGFncyA9IHRhc2stPnRhc2tfaXNvbGF0aW9uX2ZsYWdzOw0KKwlrZXJuZWxfc2lnaW5mb190IGlu Zm8gPSB7DQorCQkuc2lfc2lnbm8gPSBQUl9UQVNLX0lTT0xBVElPTl9HRVRfU0lHKGZsYWdzKSA/ OiBTSUdLSUxMLA0KKwl9Ow0KKw0KKwlzdG9wX2lzb2xhdGlvbih0YXNrKTsNCisJc2VuZF9zaWdf aW5mbyhpbmZvLnNpX3NpZ25vLCAmaW5mbywgdGFzayk7DQorfQ0KKw0KKy8qIE9ubHkgYSBmZXcg c3lzY2FsbHMgYXJlIHZhbGlkIG9uY2Ugd2UgYXJlIGluIHRhc2sgaXNvbGF0aW9uIG1vZGUuICov DQorc3RhdGljIGJvb2wgaXNfYWNjZXB0YWJsZV9zeXNjYWxsKGludCBzeXNjYWxsKQ0KK3sNCisJ LyogTm8gbmVlZCB0byBpbmN1ciBhbiBpc29sYXRpb24gc2lnbmFsIGlmIHdlIGFyZSBqdXN0IGV4 aXRpbmcuICovDQorCWlmIChzeXNjYWxsID09IF9fTlJfZXhpdCB8fCBzeXNjYWxsID09IF9fTlJf ZXhpdF9ncm91cCkNCisJCXJldHVybiB0cnVlOw0KKw0KKwkvKiBDaGVjayB0byBzZWUgaWYgaXQn cyB0aGUgcHJjdGwgZm9yIGlzb2xhdGlvbi4gKi8NCisJaWYgKHN5c2NhbGwgPT0gX19OUl9wcmN0 bCkgew0KKwkJdW5zaWduZWQgbG9uZyBhcmdbU1lTQ0FMTF9NQVhfQVJHU107DQorDQorCQlzeXNj YWxsX2dldF9hcmd1bWVudHMoY3VycmVudCwgY3VycmVudF9wdF9yZWdzKCksIGFyZyk7DQorCQlp ZiAoYXJnWzBdID09IFBSX1RBU0tfSVNPTEFUSU9OKQ0KKwkJCXJldHVybiB0cnVlOw0KKwl9DQor DQorCXJldHVybiBmYWxzZTsNCit9DQorDQorLyoNCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVk IGZyb20gc3lzY2FsbCBlbnRyeSwgcHJldmVudHMgbW9zdCBzeXNjYWxscw0KKyAqIGZyb20gZXhl Y3V0aW5nLCBhbmQgaWYgbmVlZGVkIHJhaXNlcyBhIHNpZ25hbCB0byBub3RpZnkgdGhlIHByb2Nl c3MuDQorICoNCisgKiBOb3RlIHRoYXQgd2UgaGF2ZSB0byBzdG9wIGlzb2xhdGlvbiBiZWZvcmUg d2UgZXZlbiBwcmludCBhIG1lc3NhZ2UNCisgKiBoZXJlLCBzaW5jZSBvdGhlcndpc2Ugd2UgbWln aHQgZW5kIHVwIHJlcG9ydGluZyBhbiBpbnRlcnJ1cHQgZHVlIHRvDQorICoga2lja2luZyB0aGUg cHJpbnRrIGhhbmRsaW5nIGNvZGUsIHJhdGhlciB0aGFuIHJlcG9ydGluZyB0aGUgdHJ1ZQ0KKyAq IGNhdXNlIG9mIGludGVycnVwdCBoZXJlLg0KKyAqDQorICogVGhlIG1lc3NhZ2UgaXMgbm90IHN1 cHByZXNzZWQgYnkgcHJldmlvdXMgcmVtb3RlbHkgdHJpZ2dlcmVkDQorICogbWVzc2FnZXMuDQor ICovDQoraW50IHRhc2tfaXNvbGF0aW9uX3N5c2NhbGwoaW50IHN5c2NhbGwpDQorew0KKwlzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdXJyZW50Ow0KKw0KKwlpZiAoaXNfYWNjZXB0YWJsZV9z eXNjYWxsKHN5c2NhbGwpKSB7DQorCQlzdG9wX2lzb2xhdGlvbih0YXNrKTsNCisJCXJldHVybiAw Ow0KKwl9DQorDQorCXNlbmRfaXNvbGF0aW9uX3NpZ25hbCh0YXNrKTsNCisNCisJcHJfdGFza19p c29sX3dhcm4oc21wX3Byb2Nlc3Nvcl9pZCgpLA0KKwkJCSAgInRhc2tfaXNvbGF0aW9uIGxvc3Qg ZHVlIHRvIHN5c2NhbGwgJWRcbiIsDQorCQkJICBzeXNjYWxsKTsNCisJZGVidWdfZHVtcF9zdGFj aygpOw0KKw0KKwlzeXNjYWxsX3NldF9yZXR1cm5fdmFsdWUodGFzaywgY3VycmVudF9wdF9yZWdz KCksIC1FUkVTVEFSVE5PSU5UUiwgLTEpOw0KKwlyZXR1cm4gLTE7DQorfQ0KKw0KKy8qDQorICog VGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIGFueSBleGNlcHRpb24gb3IgaXJxIHRoYXQgZG9l c24ndA0KKyAqIG90aGVyd2lzZSB0cmlnZ2VyIGEgc2lnbmFsIHRvIHRoZSB1c2VyIHByb2Nlc3Mg KGUuZy4gcGFnZSBmYXVsdCkuDQorICoNCisgKiBNZXNzYWdlcyB3aWxsIGJlIHN1cHByZXNzZWQg aWYgdGhlcmUgaXMgYWxyZWFkeSBhIHJlcG9ydGVkIHJlbW90ZQ0KKyAqIGNhdXNlIGZvciBpc29s YXRpb24gYnJlYWtpbmcsIHNvIHdlIGRvbid0IGdlbmVyYXRlIG11bHRpcGxlDQorICogY29uZnVz aW5nbHkgc2ltaWxhciBtZXNzYWdlcyBhYm91dCB0aGUgc2FtZSBldmVudC4NCisgKi8NCit2b2lk IF90YXNrX2lzb2xhdGlvbl9pbnRlcnJ1cHQoY29uc3QgY2hhciAqZm10LCAuLi4pDQorew0KKwlz dHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdXJyZW50Ow0KKwl2YV9saXN0IGFyZ3M7DQorCWNo YXIgYnVmWzEwMF07DQorDQorCS8qIFJDVSBzaG91bGQgaGF2ZSBiZWVuIGVuYWJsZWQgcHJpb3Ig dG8gdGhpcyBwb2ludC4gKi8NCisJUkNVX0xPQ0tERVBfV0FSTighcmN1X2lzX3dhdGNoaW5nKCks ICJrZXJuZWwgZW50cnkgd2l0aG91dCBSQ1UiKTsNCisNCisJLyogQXJlIHdlIGV4aXRpbmcgaXNv bGF0aW9uIGFscmVhZHk/ICovDQorCWlmIChhdG9taWNfcmVhZCgmcGVyX2NwdShpc29sX2V4aXRf Y291bnRlciwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkgIT0gMCkgew0KKwkJdGFzay0+dGFza19pc29s YXRpb25fc3RhdGUgPSBTVEFURV9OT1JNQUw7DQorCQlyZXR1cm47DQorCX0NCisJLyoNCisJICog QXZvaWQgcmVwb3J0aW5nIGludGVycnVwdHMgdGhhdCBoYXBwZW4gYWZ0ZXIgd2UgaGF2ZSBwcmN0 bCdlZA0KKwkgKiB0byBlbmFibGUgaXNvbGF0aW9uLCBidXQgYmVmb3JlIHdlIGhhdmUgcmV0dXJu ZWQgdG8gdXNlcnNwYWNlLg0KKwkgKi8NCisJaWYgKHRhc2stPnRhc2tfaXNvbGF0aW9uX3N0YXRl ID09IFNUQVRFX05PUk1BTCkNCisJCXJldHVybjsNCisNCisJdmFfc3RhcnQoYXJncywgZm10KTsN CisJdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncyk7DQorCXZhX2VuZChhcmdz KTsNCisNCisJLyogSGFuZGxlIE5NSXMgbWluaW1hbGx5LCBzaW5jZSB3ZSBjYW4ndCBzZW5kIGEg c2lnbmFsLiAqLw0KKwlpZiAoaW5fbm1pKCkpIHsNCisJCXRhc2tfaXNvbGF0aW9uX2tlcm5lbF9l bnRlcigpOw0KKwkJcHJfdGFza19pc29sX2VycihzbXBfcHJvY2Vzc29yX2lkKCksDQorCQkJCSAi aXNvbGF0aW9uOiBpbiBOTUk7IG5vdCBkZWxpdmVyaW5nIHNpZ25hbFxuIik7DQorCX0gZWxzZSB7 DQorCQlzZW5kX2lzb2xhdGlvbl9zaWduYWwodGFzayk7DQorCX0NCisNCisJaWYgKHByX3Rhc2tf aXNvbF93YXJuX3N1cHAoc21wX3Byb2Nlc3Nvcl9pZCgpLA0KKwkJCQkgICAidGFza19pc29sYXRp b24gbG9zdCBkdWUgdG8gJXNcbiIsIGJ1ZikpDQorCQlkZWJ1Z19kdW1wX3N0YWNrKCk7DQorfQ0K Kw0KKy8qDQorICogQ2FsbGVkIGJlZm9yZSB3ZSB3YWtlIHVwIGEgdGFzayB0aGF0IGhhcyBhIHNp Z25hbCB0byBwcm9jZXNzLg0KKyAqIE5lZWRzIHRvIGJlIGRvbmUgdG8gaGFuZGxlIGludGVycnVw dHMgdGhhdCB0cmlnZ2VyIHNpZ25hbHMsIHdoaWNoDQorICogd2UgZG9uJ3QgY2F0Y2ggd2l0aCB0 YXNrX2lzb2xhdGlvbl9pbnRlcnJ1cHQoKSBob29rcy4NCisgKg0KKyAqIFRoaXMgbWVzc2FnZSBp cyBhbHNvIHN1cHByZXNzZWQgaWYgdGhlcmUgd2FzIGFscmVhZHkgYSByZW1vdGVseQ0KKyAqIGNh dXNlZCBtZXNzYWdlIGFib3V0IHRoZSBzYW1lIGlzb2xhdGlvbiBicmVha2luZyBldmVudC4NCisg Ki8NCit2b2lkIF90YXNrX2lzb2xhdGlvbl9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNr KQ0KK3sNCisJc3RydWN0IGlzb2xfdGFza19kZXNjICpkZXNjOw0KKwlpbnQgaW5kLCBjcHU7DQor CWJvb2wgZG9fd2FybiA9ICh0YXNrLT50YXNrX2lzb2xhdGlvbl9zdGF0ZSA9PSBTVEFURV9JU09M QVRFRCk7DQorDQorCWNwdSA9IHRhc2tfY3B1KHRhc2spOw0KKwlkZXNjID0gJnBlcl9jcHUoaXNv bF90YXNrX2Rlc2NzLCBjcHUpOw0KKwlpbmQgPSBhdG9taWNfcmVhZCgmZGVzYy0+Y3Vycl9pbmRl eCkgJiAxOw0KKwlpZiAoZGVzYy0+d2FybmVkW2luZF0pDQorCQlkb193YXJuID0gZmFsc2U7DQor DQorCXN0b3BfaXNvbGF0aW9uKHRhc2spOw0KKw0KKwlpZiAoZG9fd2Fybikgew0KKwkJcHJfd2Fy bigiaXNvbGF0aW9uOiAlcy8lZC8lZCAoY3B1ICVkKTogdGFza19pc29sYXRpb24gbG9zdCBkdWUg dG8gc2lnbmFsXG4iLA0KKwkJCXRhc2stPmNvbW0sIHRhc2stPnRnaWQsIHRhc2stPnBpZCwgY3B1 KTsNCisJCWRlYnVnX2R1bXBfc3RhY2soKTsNCisJfQ0KK30NCisNCisvKg0KKyAqIEdlbmVyYXRl IGEgc3RhY2sgYmFja3RyYWNlIGlmIHdlIGFyZSBnb2luZyB0byBpbnRlcnJ1cHQgYW5vdGhlciB0 YXNrDQorICogaXNvbGF0aW9uIHByb2Nlc3MuDQorICovDQordm9pZCB0YXNrX2lzb2xhdGlvbl9y ZW1vdGUoaW50IGNwdSwgY29uc3QgY2hhciAqZm10LCAuLi4pDQorew0KKwlzdHJ1Y3QgdGFza19z dHJ1Y3QgKmN1cnJfdGFzazsNCisJdmFfbGlzdCBhcmdzOw0KKwljaGFyIGJ1ZlsyMDBdOw0KKw0K KwlzbXBfcm1iKCk7DQorCWlmICghaXNfaXNvbGF0aW9uX2NwdShjcHUpIHx8ICF0YXNrX2lzb2xh dGlvbl9vbl9jcHUoY3B1KSkNCisJCXJldHVybjsNCisNCisJY3Vycl90YXNrID0gY3VycmVudDsN CisNCisJdmFfc3RhcnQoYXJncywgZm10KTsNCisJdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1Ziks IGZtdCwgYXJncyk7DQorCXZhX2VuZChhcmdzKTsNCisJaWYgKHByX3Rhc2tfaXNvbF93YXJuKGNw dSwNCisJCQkgICAgICAidGFza19pc29sYXRpb24gbG9zdCBkdWUgdG8gJXMgYnkgJXMvJWQvJWQg b24gY3B1ICVkXG4iLA0KKwkJCSAgICAgIGJ1ZiwNCisJCQkgICAgICBjdXJyX3Rhc2stPmNvbW0s IGN1cnJfdGFzay0+dGdpZCwNCisJCQkgICAgICBjdXJyX3Rhc2stPnBpZCwgc21wX3Byb2Nlc3Nv cl9pZCgpKSkNCisJCWRlYnVnX2R1bXBfc3RhY2soKTsNCit9DQorDQorLyoNCisgKiBHZW5lcmF0 ZSBhIHN0YWNrIGJhY2t0cmFjZSBpZiBhbnkgb2YgdGhlIGNwdXMgaW4gIm1hc2siIGFyZSBydW5u aW5nDQorICogdGFzayBpc29sYXRpb24gcHJvY2Vzc2VzLg0KKyAqLw0KK3ZvaWQgdGFza19pc29s YXRpb25fcmVtb3RlX2NwdW1hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssDQorCQkJCSAg IGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KK3sNCisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyX3Rh c2s7DQorCWNwdW1hc2tfdmFyX3Qgd2Fybl9tYXNrOw0KKwl2YV9saXN0IGFyZ3M7DQorCWNoYXIg YnVmWzIwMF07DQorCWludCBjcHUsIGZpcnN0X2NwdTsNCisNCisJaWYgKHRhc2tfaXNvbGF0aW9u X21hcCA9PSBOVUxMIHx8DQorCQkhemFsbG9jX2NwdW1hc2tfdmFyKCZ3YXJuX21hc2ssIEdGUF9L RVJORUwpKQ0KKwkJcmV0dXJuOw0KKw0KKwlmaXJzdF9jcHUgPSAtMTsNCisJc21wX3JtYigpOw0K Kwlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgbWFzaywgdGFza19pc29sYXRpb25fbWFwKSB7DQorCQlp ZiAodGFza19pc29sYXRpb25fb25fY3B1KGNwdSkpIHsNCisJCQlpZiAoZmlyc3RfY3B1IDwgMCkN CisJCQkJZmlyc3RfY3B1ID0gY3B1Ow0KKwkJCWVsc2UNCisJCQkJY3B1bWFza19zZXRfY3B1KGNw dSwgd2Fybl9tYXNrKTsNCisJCX0NCisJfQ0KKw0KKwlpZiAoZmlyc3RfY3B1IDwgMCkNCisJCWdv dG8gZG9uZTsNCisNCisJY3Vycl90YXNrID0gY3VycmVudDsNCisNCisJdmFfc3RhcnQoYXJncywg Zm10KTsNCisJdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncyk7DQorCXZhX2Vu ZChhcmdzKTsNCisNCisJaWYgKGNwdW1hc2tfd2VpZ2h0KHdhcm5fbWFzaykgPT0gMCkNCisJCXBy X3Rhc2tfaXNvbF93YXJuKGZpcnN0X2NwdSwNCisJCQkJICAidGFza19pc29sYXRpb24gbG9zdCBk dWUgdG8gJXMgYnkgJXMvJWQvJWQgb24gY3B1ICVkXG4iLA0KKwkJCQkgIGJ1ZiwgY3Vycl90YXNr LT5jb21tLCBjdXJyX3Rhc2stPnRnaWQsDQorCQkJCSAgY3Vycl90YXNrLT5waWQsIHNtcF9wcm9j ZXNzb3JfaWQoKSk7DQorCWVsc2UNCisJCXByX3Rhc2tfaXNvbF93YXJuKGZpcnN0X2NwdSwNCisJ CQkJICAiIGFuZCBjcHVzICUqcGJsOiB0YXNrX2lzb2xhdGlvbiBsb3N0IGR1ZSB0byAlcyBieSAl cy8lZC8lZCBvbiBjcHUgJWRcbiIsDQorCQkJCSAgY3B1bWFza19wcl9hcmdzKHdhcm5fbWFzayks DQorCQkJCSAgYnVmLCBjdXJyX3Rhc2stPmNvbW0sIGN1cnJfdGFzay0+dGdpZCwNCisJCQkJICBj dXJyX3Rhc2stPnBpZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsNCisJZGVidWdfZHVtcF9zdGFjaygp Ow0KKw0KK2RvbmU6DQorCWZyZWVfY3B1bWFza192YXIod2Fybl9tYXNrKTsNCit9DQorDQorLyoN CisgKiBTZXQgQ1BVcyBjdXJyZW50bHkgcnVubmluZyBpc29sYXRlZCB0YXNrcyBpbiBDUFUgbWFz ay4NCisgKi8NCit2b2lkIHRhc2tfaXNvbGF0aW9uX2NwdW1hc2soc3RydWN0IGNwdW1hc2sgKm1h c2spDQorew0KKwlpbnQgY3B1Ow0KKw0KKwlpZiAodGFza19pc29sYXRpb25fbWFwID09IE5VTEwp DQorCQlyZXR1cm47DQorDQorCXNtcF9ybWIoKTsNCisJZm9yX2VhY2hfY3B1KGNwdSwgdGFza19p c29sYXRpb25fbWFwKQ0KKwkJaWYgKHRhc2tfaXNvbGF0aW9uX29uX2NwdShjcHUpKQ0KKwkJCWNw dW1hc2tfc2V0X2NwdShjcHUsIG1hc2spOw0KK30NCisNCisvKg0KKyAqIENsZWFyIENQVXMgY3Vy cmVudGx5IHJ1bm5pbmcgaXNvbGF0ZWQgdGFza3MgaW4gQ1BVIG1hc2suDQorICovDQordm9pZCB0 YXNrX2lzb2xhdGlvbl9jbGVhcl9jcHVtYXNrKHN0cnVjdCBjcHVtYXNrICptYXNrKQ0KK3sNCisJ aW50IGNwdTsNCisNCisJaWYgKHRhc2tfaXNvbGF0aW9uX21hcCA9PSBOVUxMKQ0KKwkJcmV0dXJu Ow0KKw0KKwlzbXBfcm1iKCk7DQorCWZvcl9lYWNoX2NwdShjcHUsIHRhc2tfaXNvbGF0aW9uX21h cCkNCisJCWlmICh0YXNrX2lzb2xhdGlvbl9vbl9jcHUoY3B1KSkNCisJCQljcHVtYXNrX2NsZWFy X2NwdShjcHUsIG1hc2spOw0KK30NCisNCisvKg0KKyAqIENsZWFudXAgcHJvY2VkdXJlLiBUaGUg Y2FsbCB0byB0aGlzIHByb2NlZHVyZSBtYXkgYmUgZGVsYXllZC4NCisgKi8NCit2b2lkIHRhc2tf aXNvbGF0aW9uX2NwdV9jbGVhbnVwKHZvaWQpDQorew0KKwlraWNrX2hydGltZXIoKTsNCit9DQor DQorLyoNCisgKiBDaGVjayBpZiBjbGVhbnVwIGlzIHNjaGVkdWxlZCBvbiB0aGUgY3VycmVudCBD UFUsIGFuZCBpZiBzbywgcnVuIGl0Lg0KKyAqIEludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG5v dGlmeV9yZXN1bWUoKSBvciBhbm90aGVyIHN1Y2ggY2FsbGJhY2sNCisgKiBvbiB0aGUgdGFyZ2V0 IENQVS4NCisgKi8NCit2b2lkIHRhc2tfaXNvbGF0aW9uX2NoZWNrX3J1bl9jbGVhbnVwKHZvaWQp DQorew0KKwlpbnQgY3B1Ow0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKw0KKwlzcGluX2xvY2tf aXJxc2F2ZSgmdGFza19pc29sYXRpb25fY2xlYW51cF9sb2NrLCBmbGFncyk7DQorDQorCWNwdSA9 IHNtcF9wcm9jZXNzb3JfaWQoKTsNCisNCisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCB0YXNr X2lzb2xhdGlvbl9jbGVhbnVwX21hcCkpIHsNCisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgdGFz a19pc29sYXRpb25fY2xlYW51cF9tYXApOw0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFz a19pc29sYXRpb25fY2xlYW51cF9sb2NrLCBmbGFncyk7DQorCQl0YXNrX2lzb2xhdGlvbl9jcHVf Y2xlYW51cCgpOw0KKwl9IGVsc2UNCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2tfaXNv bGF0aW9uX2NsZWFudXBfbG9jaywgZmxhZ3MpOw0KK30NCmRpZmYgLS1naXQgYS9rZXJuZWwvc2ln bmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMNCmluZGV4IGVlMjJlYzc4ZmQ2ZC4uZDAxNTM3YzMyYTY3 IDEwMDY0NA0KLS0tIGEva2VybmVsL3NpZ25hbC5jDQorKysgYi9rZXJuZWwvc2lnbmFsLmMNCkBA IC00Niw2ICs0Niw3IEBADQogI2luY2x1ZGUgPGxpbnV4L2xpdmVwYXRjaC5oPg0KICNpbmNsdWRl IDxsaW51eC9jZ3JvdXAuaD4NCiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4NCisjaW5jbHVkZSA8 bGludXgvaXNvbGF0aW9uLmg+DQogDQogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTDQogI2lu Y2x1ZGUgPHRyYWNlL2V2ZW50cy9zaWduYWwuaD4NCkBAIC03NTgsNiArNzU5LDcgQEAgc3RhdGlj IGludCBkZXF1ZXVlX3N5bmNocm9ub3VzX3NpZ25hbChrZXJuZWxfc2lnaW5mb190ICppbmZvKQ0K ICAqLw0KIHZvaWQgc2lnbmFsX3dha2VfdXBfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0LCB1 bnNpZ25lZCBpbnQgc3RhdGUpDQogew0KKwl0YXNrX2lzb2xhdGlvbl9zaWduYWwodCk7DQogCXNl dF90c2tfdGhyZWFkX2ZsYWcodCwgVElGX1NJR1BFTkRJTkcpOw0KIAkvKg0KIAkgKiBUQVNLX1dB S0VLSUxMIGFsc28gbWVhbnMgd2FrZSBpdCB1cCBpbiB0aGUgc3RvcHBlZC90cmFjZWQva2lsbGFi bGUNCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMNCmluZGV4IDAwYTk2 NzQ2ZTI4YS4uNjUzOGE3NDRjNzM0IDEwMDY0NA0KLS0tIGEva2VybmVsL3N5cy5jDQorKysgYi9r ZXJuZWwvc3lzLmMNCkBAIC00Miw2ICs0Miw3IEBADQogI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVf b3BzLmg+DQogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4NCiAjaW5jbHVkZSA8bGludXgvY3R5 cGUuaD4NCisjaW5jbHVkZSA8bGludXgvaXNvbGF0aW9uLmg+DQogDQogI2luY2x1ZGUgPGxpbnV4 L2NvbXBhdC5oPg0KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPg0KQEAgLTI1MjcsNiArMjUy OCwxMSBAQCBTWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25n LCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLA0KIA0KIAkJZXJyb3IgPSAoY3VycmVudC0+Zmxh Z3MgJiBQUl9JT19GTFVTSEVSKSA9PSBQUl9JT19GTFVTSEVSOw0KIAkJYnJlYWs7DQorCWNhc2Ug UFJfVEFTS19JU09MQVRJT046DQorCQlpZiAoYXJnMyB8fCBhcmc0IHx8IGFyZzUpDQorCQkJcmV0 dXJuIC1FSU5WQUw7DQorCQllcnJvciA9IHRhc2tfaXNvbGF0aW9uX3JlcXVlc3QoYXJnMik7DQor CQlicmVhazsNCiAJZGVmYXVsdDoNCiAJCWVycm9yID0gLUVJTlZBTDsNCiAJCWJyZWFrOw0KZGlm ZiAtLWdpdCBhL2tlcm5lbC90aW1lL2hydGltZXIuYyBiL2tlcm5lbC90aW1lL2hydGltZXIuYw0K aW5kZXggZDg5ZGExYzdlMDA1Li5mM2QxZjNkNDcyNDIgMTAwNjQ0DQotLS0gYS9rZXJuZWwvdGlt ZS9ocnRpbWVyLmMNCisrKyBiL2tlcm5lbC90aW1lL2hydGltZXIuYw0KQEAgLTMwLDYgKzMwLDcg QEANCiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4NCiAjaW5jbHVkZSA8bGludXgvaW50ZXJy dXB0Lmg+DQogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4NCisjaW5jbHVkZSA8bGludXgvaXNvbGF0 aW9uLmg+DQogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPg0KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z29i amVjdHMuaD4NCiAjaW5jbHVkZSA8bGludXgvc2NoZWQvc2lnbmFsLmg+DQpAQCAtNzIxLDYgKzcy MiwxOSBAQCBzdGF0aWMgdm9pZCByZXRyaWdnZXJfbmV4dF9ldmVudCh2b2lkICphcmcpDQogCXJh d19zcGluX3VubG9jaygmYmFzZS0+bG9jayk7DQogfQ0KIA0KKyNpZmRlZiBDT05GSUdfVEFTS19J U09MQVRJT04NCit2b2lkIGtpY2tfaHJ0aW1lcih2b2lkKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBm bGFnczsNCisNCisJcHJlZW1wdF9kaXNhYmxlKCk7DQorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsN CisJcmV0cmlnZ2VyX25leHRfZXZlbnQoTlVMTCk7DQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdz KTsNCisJcHJlZW1wdF9lbmFibGUoKTsNCit9DQorI2VuZGlmDQorDQogLyoNCiAgKiBTd2l0Y2gg dG8gaGlnaCByZXNvbHV0aW9uIG1vZGUNCiAgKi8NCkBAIC04NjgsOCArODgyLDIxIEBAIHN0YXRp YyB2b2lkIGhydGltZXJfcmVwcm9ncmFtKHN0cnVjdCBocnRpbWVyICp0aW1lciwgYm9vbCByZXBy b2dyYW0pDQogdm9pZCBjbG9ja193YXNfc2V0KHZvaWQpDQogew0KICNpZmRlZiBDT05GSUdfSElH SF9SRVNfVElNRVJTDQorI2lmZGVmIENPTkZJR19UQVNLX0lTT0xBVElPTg0KKwlzdHJ1Y3QgY3B1 bWFzayBtYXNrOw0KKw0KKwljcHVtYXNrX2NsZWFyKCZtYXNrKTsNCisJdGFza19pc29sYXRpb25f Y3B1bWFzaygmbWFzayk7DQorCWNwdW1hc2tfY29tcGxlbWVudCgmbWFzaywgJm1hc2spOw0KKwkv Kg0KKwkgKiBSZXRyaWdnZXIgdGhlIENQVSBsb2NhbCBldmVudHMgZXZlcnl3aGVyZSBleGNlcHQg Q1BVcw0KKwkgKiBydW5uaW5nIGlzb2xhdGVkIHRhc2tzLg0KKwkgKi8NCisJb25fZWFjaF9jcHVf bWFzaygmbWFzaywgcmV0cmlnZ2VyX25leHRfZXZlbnQsIE5VTEwsIDEpOw0KKyNlbHNlDQogCS8q IFJldHJpZ2dlciB0aGUgQ1BVIGxvY2FsIGV2ZW50cyBldmVyeXdoZXJlICovDQogCW9uX2VhY2hf Y3B1KHJldHJpZ2dlcl9uZXh0X2V2ZW50LCBOVUxMLCAxKTsNCisjZW5kaWYNCiAjZW5kaWYNCiAJ dGltZXJmZF9jbG9ja193YXNfc2V0KCk7DQogfQ0KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3Rp Y2stc2NoZWQuYyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYw0KaW5kZXggM2UyZGM5Yjg4NThj Li42ZTRjZDg0NTlmMDUgMTAwNjQ0DQotLS0gYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMNCisr KyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYw0KQEAgLTg4OCw2ICs4ODgsMjQgQEAgc3RhdGlj IHZvaWQgdGlja19ub2h6X2Z1bGxfdXBkYXRlX3RpY2soc3RydWN0IHRpY2tfc2NoZWQgKnRzKQ0K ICNlbmRpZg0KIH0NCiANCisjaWZkZWYgQ09ORklHX1RBU0tfSVNPTEFUSU9ODQoraW50IHRyeV9z dG9wX2Z1bGxfdGljayh2b2lkKQ0KK3sNCisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsN CisJc3RydWN0IHRpY2tfc2NoZWQgKnRzID0gdGhpc19jcHVfcHRyKCZ0aWNrX2NwdV9zY2hlZCk7 DQorDQorCS8qIEZvciBhbiB1bnN0YWJsZSBjbG9jaywgd2Ugc2hvdWxkIHJldHVybiBhIHBlcm1h bmVudCBlcnJvciBjb2RlLiAqLw0KKwlpZiAoYXRvbWljX3JlYWQoJnRpY2tfZGVwX21hc2spICYg VElDS19ERVBfTUFTS19DTE9DS19VTlNUQUJMRSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlp ZiAoIWNhbl9zdG9wX2Z1bGxfdGljayhjcHUsIHRzKSkNCisJCXJldHVybiAtRUFHQUlOOw0KKw0K Kwl0aWNrX25vaHpfc3RvcF9zY2hlZF90aWNrKHRzLCBjcHUpOw0KKwlyZXR1cm4gMDsNCit9DQor I2VuZGlmDQorDQogc3RhdGljIGJvb2wgY2FuX3N0b3BfaWRsZV90aWNrKGludCBjcHUsIHN0cnVj dCB0aWNrX3NjaGVkICp0cykNCiB7DQogCS8qDQotLSANCjIuMjYuMg0KDQo=