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=-17.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,USER_AGENT_GIT autolearn=ham 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 85BDFC433C1 for ; Mon, 29 Mar 2021 19:36:19 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 18A846196E for ; Mon, 29 Mar 2021 19:36:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 18A846196E Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=os.amperecomputing.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=gdXuz4sAgiB3hpazgqw6iPP1jUp672P4oG+jjUrJsOE=; b=KB611xN8DdGETEEDmfj0K8oRA +OCerw5hr1bswRVYBvYfZxMQZCnNOjdD0DyULePbFNCiLzcqvQ+Bphp8Ms/kATIg1Pb8+rM5UDgCk dahhRpbqsX2CVNWXdCojewXHzxRcQUB8h9iUGKYNEdVSFMGzINopeNDUfst8xeoCfd5bd8RyHSh1f A8C/utNHB4y8T5YM5U0EN+erdMdJK+R1RkxOYynjP74cNJHOgnKg6USTN/wo04qdWeCaAPr9Ydeyr 1brMZfe9D7lo6qRXN3Fgk3OKJrrLo1rczyOJvyy6liSip2lNwYRFvl1J/jNpqvKQP13A7XqoqWsLn Nm6g/jsKw==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lQxaS-001Fx8-E3; Mon, 29 Mar 2021 19:30:09 +0000 Received: from mail-dm6nam11on2100.outbound.protection.outlook.com ([40.107.223.100] helo=NAM11-DM6-obe.outbound.protection.outlook.com) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lQqiL-000dOA-2l for linux-arm-kernel@lists.infradead.org; Mon, 29 Mar 2021 12:09:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HHOasz3ICNllG/VtkPbRy0dB72XFzEQY3OPp1aLUkRU/tlnn9zN0HCV0GI75Pj1f1DZKn7hbM+RNAf7qZ0lqCpm/Hgq6VGiIbL844qWLRDm1lYf56t7BhogVJsA161dZuIAJfffvbcxr+L9R9B1NiqGW1VfdhGzdxgkJkEQKGFB0eFLyePCIwmnwLYhyB3/8MeUC8kErdLb4332bHa0cTdZm6+hJkGOydFM6nX2/1W1TTyqSwTsCteKDOVWSDCq6IIRrheEYHOmPp/1xPEzRaOuuY9ES3ZfXscJLImTKIb19lOKTXs+DvFaEaMyRnwDA1HCu3Ug6HLak4YfTWPOXsg== 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=vmTD/UAk6wbBkI+OBSheNaNjRlvzJADBqzqKzbZAtIk=; b=Gsj9cYImhzzk3J2CIEhGJIhyisAvPHLcPJlHVCd9r9NvctWjKzKcpZFbfSEGbhCRSaA0alVIPtG8DilatEq/Tl5ObKnQi1u98xfnHU0NEo3SyIctkMceRck8Q/BwQOA1KYMG1jdkzabiSFh9NSJKqO3bmXG4h7PeIJeFYyIcinxmIQ+RsRIZFHKZBIh49mYDiFaUM070ePbppQOSczV/7O80AfkkVJiKhhDtzBAg5kdFk1Ksa7QDP2drNrq7tsWeuo8oHEUf++rqKSSNvIZm7/JZ+vGzpW4Vlh4tGLX5zri0TYfHpXjoscA/SoRp8Gniq8vLFO9dKlKGuty+ix7kew== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vmTD/UAk6wbBkI+OBSheNaNjRlvzJADBqzqKzbZAtIk=; b=A+kENpt3fXFQHI9vKry/A5jWKPqmLIAiQ6V5ddHGf85QKApT7m/yHGwiMb3qX2btB8Js6Sg/OvhUSX+8ZhZ+ihg8xv1CUqzP4Zr2LGzBjPUmJNVHGjHNJ4pKEQ3hiiR57EspuMmrzzoOEGJsxdBRlXXdtSyK48QJC00XK37leaU= Authentication-Results: acm.org; dkim=none (message not signed) header.d=none;acm.org; dmarc=none action=none header.from=os.amperecomputing.com; Received: from MW2PR0102MB3482.prod.exchangelabs.com (2603:10b6:302:c::32) by MWHPR01MB2320.prod.exchangelabs.com (2603:10b6:300:26::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3977.25; Mon, 29 Mar 2021 12:09:43 +0000 Received: from MW2PR0102MB3482.prod.exchangelabs.com ([fe80::d840:7aa7:58d4:b503]) by MW2PR0102MB3482.prod.exchangelabs.com ([fe80::d840:7aa7:58d4:b503%5]) with mapi id 15.20.3977.033; Mon, 29 Mar 2021 12:09:43 +0000 From: Quan Nguyen To: Corey Minyard , Rob Herring , Joel Stanley , Andrew Jeffery , Wolfram Sang , Philipp Zabel , openipmi-developer@lists.sourceforge.net, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org, linux-kernel@vger.kernel.org, linux-i2c@vger.kernel.org Cc: Open Source Submission , Phong Vo , "Thang Q . Nguyen" Subject: [PATCH v1 2/3] drivers: char: ipmi: Add Aspeed SSIF BMC driver Date: Mon, 29 Mar 2021 19:09:13 +0700 Message-Id: <20210329120914.4527-3-quan@os.amperecomputing.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20210329120914.4527-1-quan@os.amperecomputing.com> References: <20210329120914.4527-1-quan@os.amperecomputing.com> X-Originating-IP: [118.69.219.201] X-ClientProxiedBy: HKAPR04CA0010.apcprd04.prod.outlook.com (2603:1096:203:d0::20) To MW2PR0102MB3482.prod.exchangelabs.com (2603:10b6:302:c::32) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from hcm-sw-17.amperecomputing.com (118.69.219.201) by HKAPR04CA0010.apcprd04.prod.outlook.com (2603:1096:203:d0::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3977.26 via Frontend Transport; Mon, 29 Mar 2021 12:09:39 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 89fdf95b-fa86-4f28-ee9a-08d8f2ab88fc X-MS-TrafficTypeDiagnostic: MWHPR01MB2320: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3044; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4KZmivTx093MwKapFknJCGIGF/Lqkskhar/m/vf6EmOEHCaZV5R+tPAPZ/lTWNkXN59RYTTKybavdSC4LJMaQNEYeM2mf4EdS3aApJ8Fsg165e9iCwGpktHcWQ4bAohfyYDLaK1BHZteFxdfYTfp56bTSq02WOqMiH3BdaBSnR/Rgdz5b/nRHEYEkZFmIyqSjg4sP6eaB/yMGyXu31grC009jwmfJl1/6o/9Wld7iSZauC/6hXSXbbcvRzAJs2ZfqrCb8SKvj7QMvVGfr9W0NufwXrQmHk6ftjdI5DWCDWh1fJDtyNuxNPBBvKArVcdtr11XuNRotstFD0Fr/luRbHD4XhWnWgZtEWba944ZYegY3mxUywNBbBvQe2OFlwXfLy0h0ZiKgm7NDJkyzr3KXp691QOGy4GQt2GCZfZJix+OQAvfm0r2N53X2z+j6lwOenBgXvYcfxmC30QI1XQJGZCJxuN6jgZRuxEu9/uBvmbIsl0CAlJbNin2UAdkeGezXl20UrIqKBR1q91i2OO2qI9ZP666OTSD5zakVG2H4wcThZekz+pwUqN+uYgRcd5fRKrZWZX6/SpzvsXCCd3Z2zJLWyrB/vNQ8qn10fVe217dk0oYBSGvBYfS8DqNYgHZKu8M9FUCPtzdgNNo1M86wTkC6ukYxL5Kxlxius4tMKoXbaP8c2rd1/qQRl9vWrCoX9XeWXD5PfrAG74z2wob/e/azw4kIvCbuK6/kv6l0uZWnpHng+9mNFM10+/CsQ1B5mRtKhjmS1ZeK3kInQYbAA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW2PR0102MB3482.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(366004)(136003)(346002)(376002)(39840400004)(7416002)(107886003)(921005)(86362001)(110136005)(6486002)(8676002)(52116002)(4326008)(8936002)(6512007)(66946007)(2906002)(956004)(5660300002)(2616005)(478600001)(26005)(30864003)(6506007)(1076003)(83380400001)(54906003)(186003)(16526019)(6666004)(316002)(66476007)(66556008)(38100700001)(2004002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?d1o3NmxTd3pod3cveWR2K0ZReUdWS3VrRzhoWHQ5WXlyQktBRHBweFBTNDJv?= =?utf-8?B?MUkrZ09mYUZLQ3luUSttWXpVYW0xMDFxMkRhSUdWRCt2SnpVdmxlNFdXaXVP?= =?utf-8?B?YkZqUCtwTE0zZUxtY2dPRU5scUdMTk1uL1h5REQ1dmlYSmJUelZiYUlSUnFC?= =?utf-8?B?MHpYbUZYeUliV29tUTVhZTd6NkpnWHF4U1RreG1PY1c5ZFpGTThxcjFtckhF?= =?utf-8?B?bXRadHk5WTlJcVNRYVllWjlvVVgxOGo4aXY2ZkR0V00zU0lMQ2ExUE5wOXh1?= =?utf-8?B?N1FPWGtXVVpHbHRYL0xWM09FekJ6R3M2eS9DQjNZcmMwYU52Z0JyL2NYQW1i?= =?utf-8?B?ZkJjNTFSL2s5YTQ5Q3VmaGRWbWx6a1ZZOTRwVFhKemV6aTk3RU1SV3NPWHNG?= =?utf-8?B?Z0drdjFhdjZHZEFwYXg0dmZNcGJGbG5oeTJIbDBaLytaaFN2VXV2NnBCVlVS?= =?utf-8?B?cWptb3NXSVhvSCtWTWlrOFQ2VFpnN1Q1TmQyVXIzaU1Oa1pyTTUydHRpWDdl?= =?utf-8?B?UGtQOEswNG00RHpoVmo5eHZ1eFJLbFJUOFJjYncrQjU1SllTWjRUME01UjFV?= =?utf-8?B?TUVkUDNmdXdORlNBL1o4R2NUWFpuNWpUT3B3d2JyenFMNWRQSjdzOHJNWDdZ?= =?utf-8?B?bVhRQ1N5eGJBYkdDMWVvbmphYVcwT0FTTmRnWTdiOUthWkZoaUdndHgyQytK?= =?utf-8?B?NE1YTlVJQ09STUl3b0QxUWlCRmxMQ3pCNXd4QVJyRGJicXEydjg4TFFDTmN4?= =?utf-8?B?dTVjNEZsbllpbGUzUkNYaW5uekdLbHVKUmhLQU9IRDQ2RmZkNUR4Wm5jKzVt?= =?utf-8?B?c3prRTZZeU1PWm1TSHpBMU5XVHZCQTNVcTBXc0w3T3dGLzVJbkFub2FFVTVL?= =?utf-8?B?OVlUK0NNajFKbll5dExWOUZWckJ0Q2p2YXlFazRXdjZFSmdhem9HYUNJdlpG?= =?utf-8?B?NHREWFJtOEpPdGV5dU1HcW41NEpxNEFoZTJYajd2ckFqVU85WDluTHh2aVp2?= =?utf-8?B?Vm52TlgxWnRUQ0ZTaEkra3hqNXU0WW5ZcWJmUVlVQVRkQjJhOFRlV3NzN3NI?= =?utf-8?B?YmRvaUhkOEVOanZxbFhpWnBhazlKMFBhd29PS0JVcXpkekdSdDZCZjhqSUJs?= =?utf-8?B?NzJLa2IxVmVTR1BCaEl1dXJUalpRNnBTaCtsU2NxZUxhbGFSVm5Nc3hBWHFs?= =?utf-8?B?MEZvQ25XS2NBVkxGYzJHZkpsZ3plMk5WQ2sxaEo1ZitYUjJBL3kzRlFJR0dr?= =?utf-8?B?LzBYV0FZbzRZazB0cThYdHJlWEtCU0pyclRSdkxqWFhNN1ZEN0t0R3p6Nlg2?= =?utf-8?B?V0wxVGZ5blEva3ZQUlhNa2xKamtLdXpZaFVMZTEwa1YvODZaa1huSkRSenZ2?= =?utf-8?B?eng3Q2hlYnRtcHlaTU56WVViUVhSRHVOYzB0cERkQWRNRkVnNTVHU0ZVY0Q0?= =?utf-8?B?VFhHRjZUUWZUd0NBM2FBb010b0lRekFxd094UUsvcE1vY3FueGZoc3YxVHk5?= =?utf-8?B?dmZYTlIzWjljcTljSUh0aUViRE44UStvY3JpYnpjOW1ydE5JMTdHUEVVNy85?= =?utf-8?B?R3d1S1B2QVFJdjR0R24veUYxWEtVZXlyTnFnZm5RVXVzWGd2ME5ZSTZ4ZGF6?= =?utf-8?B?SUVBKzJ6cms2MERxamI1V1h1dU5TcTZtZmhaaVpqNFV5MjJwUUQ0SEZyS3pS?= =?utf-8?B?Q3gwcE9EbnVNeWhuSktYZWZLeEtqamcwZXoxM0pSYk1NV3ZTUCtqSkZ1RW43?= =?utf-8?Q?i7mIWMoBkiJSBzmeu/0i5SOhwSyfUP0xTWGrY1V?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 89fdf95b-fa86-4f28-ee9a-08d8f2ab88fc X-MS-Exchange-CrossTenant-AuthSource: MW2PR0102MB3482.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2021 12:09:42.9609 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: lqzxFC/MkzT29kH0KMo2g6m0l7QkepFMYv6ol6OQNfyxkwog/dVV2QECU0AwoUMU6WBdsISL3lGx+7Bre4Yq/2ZwSwBVdyfMoIGNXLjFxN0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR01MB2320 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210329_130949_463619_1DB3D446 X-CRM114-Status: GOOD ( 23.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhlIFNNQnVzIHN5c3RlbSBpbnRlcmZhY2UgKFNTSUYpIElQTUkgQk1DIGRyaXZlciBjYW4gYmUg dXNlZCB0byBwZXJmb3JtCmluLWJhbmQgSVBNSSBjb21tdW5pY2F0aW9uIHdpdGggdGhlaXIgaG9z dCBpbiBtYW5hZ2VtZW50IChCTUMpIHNpZGUuCgpUaGlzIGNvbW1pdHMgYWRkcyBzdXBwb3J0IHNw ZWNpZmljYWxseSBmb3IgQXNwZWVkIEFTVDI1MDAgd2hpY2ggY29tbW9ubHkKdXNlZCBhcyBCb2Fy ZCBNYW5hZ2VtZW50IENvbnRyb2xsZXJzLgoKU2lnbmVkLW9mZi1ieTogUXVhbiBOZ3V5ZW4gPHF1 YW5Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT4KLS0tCiBkcml2ZXJzL2NoYXIvaXBtaS9LY29uZmln ICAgICAgICAgICB8ICAyMiArCiBkcml2ZXJzL2NoYXIvaXBtaS9NYWtlZmlsZSAgICAgICAgICB8 ICAgMiArCiBkcml2ZXJzL2NoYXIvaXBtaS9zc2lmX2JtYy5jICAgICAgICB8IDY0NSArKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2NoYXIvaXBtaS9zc2lmX2JtYy5oICAgICAg ICB8ICA5MiArKysrCiBkcml2ZXJzL2NoYXIvaXBtaS9zc2lmX2JtY19hc3BlZWQuYyB8IDEzMiAr KysrKysKIDUgZmlsZXMgY2hhbmdlZCwgODkzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2NoYXIvaXBtaS9zc2lmX2JtYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2hh ci9pcG1pL3NzaWZfYm1jX2FzcGVlZC5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkv S2NvbmZpZyBiL2RyaXZlcnMvY2hhci9pcG1pL0tjb25maWcKaW5kZXggMDc4NDdkOWE0NTlhLi5k NjdmZDIwNDQwOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL0tjb25maWcKKysrIGIv ZHJpdmVycy9jaGFyL2lwbWkvS2NvbmZpZwpAQCAtMTMzLDYgKzEzMywyOCBAQCBjb25maWcgQVNQ RUVEX0JUX0lQTUlfQk1DCiAJICBmb3VuZCBvbiBBc3BlZWQgU09DcyAoQVNUMjQwMCBhbmQgQVNU MjUwMCkuIFRoZSBkcml2ZXIKIAkgIGltcGxlbWVudHMgdGhlIEJNQyBzaWRlIG9mIHRoZSBCVCBp bnRlcmZhY2UuCiAKK2NvbmZpZyBTU0lGX0lQTUlfQk1DCisJdHJpc3RhdGUgIlNTSUYgSVBNSSBC TUMgZHJpdmVyIgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB0aGUgSVBNSSBTTUJ1cyBzeXN0ZW0g aW50ZXJmYWNlIChTU0lGKSBhdCB0aGUKKwkgIG1hbmFnZW1lbnQgKEJNQykgc2lkZS4KKworCSAg VGhlIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBCTUMgc2lkZSBvZiB0aGUgU01CdXMgc3lzdGVtCisJ ICBpbnRlcmZhY2UgKFNTSUYpLgorCitjb25maWcgQVNQRUVEX1NTSUZfSVBNSV9CTUMKKwlkZXBl bmRzIG9uIEFSQ0hfQVNQRUVEIHx8IENPTVBJTEVfVEVTVAorCWRlcGVuZHMgb24gSTJDCisJc2Vs ZWN0IFNTSUZfSVBNSV9CTUMKKwlzZWxlY3QgSTJDX1NMQVZFCisJdHJpc3RhdGUgIkFzcGVlZCBT U0lGIElQTUkgQk1DIGRyaXZlciIKKwloZWxwCisJICBQcm92aWRlcyBhIGRyaXZlciBmb3IgdGhl IFNTSUYgSVBNSSBpbnRlcmZhY2UgZm91bmQgb24KKwkgIEFzcGVlZCBBU1QyNTAwIFNvQy4KKwor CSAgVGhlIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBCTUMgc2lkZSBvZiB0aGUgU01CdXMgc3lzdGVt CisJICBpbnRlcmZhY2UgKFNTSUYpLCBzcGVjaWZpYyBmb3IgQXNwZWVkIEFTVDI1MDAgU29DLgor CiBjb25maWcgSVBNQl9ERVZJQ0VfSU5URVJGQUNFCiAJdHJpc3RhdGUgJ0lQTUIgSW50ZXJmYWNl IGhhbmRsZXInCiAJZGVwZW5kcyBvbiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1p L01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL2lwbWkvTWFrZWZpbGUKaW5kZXggMDgyMmFkYzJlYzQx Li4wNWI5OTNmNzMzNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL01ha2VmaWxlCisr KyBiL2RyaXZlcnMvY2hhci9pcG1pL01ha2VmaWxlCkBAIC0yNywzICsyNyw1IEBAIG9iai0kKENP TkZJR19BU1BFRURfQlRfSVBNSV9CTUMpICs9IGJ0LWJtYy5vCiBvYmotJChDT05GSUdfQVNQRUVE X0tDU19JUE1JX0JNQykgKz0ga2NzX2JtY19hc3BlZWQubwogb2JqLSQoQ09ORklHX05QQ003WFhf S0NTX0lQTUlfQk1DKSArPSBrY3NfYm1jX25wY203eHgubwogb2JqLSQoQ09ORklHX0lQTUJfREVW SUNFX0lOVEVSRkFDRSkgKz0gaXBtYl9kZXZfaW50Lm8KK29iai0kKENPTkZJR19TU0lGX0lQTUlf Qk1DKSArPSBzc2lmX2JtYy5vCitvYmotJChDT05GSUdfQVNQRUVEX1NTSUZfSVBNSV9CTUMpICs9 IHNzaWZfYm1jX2FzcGVlZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9zc2lmX2Jt Yy5jIGIvZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmFlNmU4NzUwYzc5NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvY2hhci9pcG1pL3NzaWZfYm1jLmMKQEAgLTAsMCArMSw2NDUgQEAKKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyoKKyAqIFRoZSBkcml2ZXIgZm9yIEJNQyBzaWRlIG9m IFNTSUYgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIxLCBBbXBlcmUgQ29tcHV0 aW5nIExMQworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNs dWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8 bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4 L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlICJzc2lmX2JtYy5oIgorCisvKgorICogQ2FsbCBpbiBX UklURSBjb250ZXh0CisgKi8KK3N0YXRpYyBpbnQgc2VuZF9zc2lmX2JtY19yZXNwb25zZShzdHJ1 Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYywgYm9vbCBub25fYmxvY2tpbmcpCit7CisJdW5zaWdu ZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJaWYgKCFub25fYmxvY2tpbmcpIHsKK3JldHJ5 OgorCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc3NpZl9ibWMtPndhaXRfcXVldWUs CisJCQkJCSAgICAgICAhc3NpZl9ibWMtPnJlc3BvbnNlX2luX3Byb2dyZXNzKTsKKwkJaWYgKHJl dCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNzaWZfYm1jLT5s b2NrLCBmbGFncyk7CisJaWYgKHNzaWZfYm1jLT5yZXNwb25zZV9pbl9wcm9ncmVzcykgeworCQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZzc2lmX2JtYy0+bG9jaywgZmxhZ3MpOworCQlpZiAobm9u X2Jsb2NraW5nKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJZ290byByZXRyeTsKKwl9CisKKwkv KgorCSAqIENoZWNrIHRoZSByZXNwb25zZSBkYXRhIGxlbmd0aCBmcm9tIHVzZXJzcGFjZSB0byBk ZXRlcm1pbmUgdGhlIHR5cGUKKwkgKiBvZiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB3aGV0aGVyIGl0 IGlzIHNpbmdsZS1wYXJ0IG9yIG11bHRpLXBhcnQuCisJICovCisJc3NpZl9ibWMtPmlzX3Npbmds ZXBhcnRfcmVhZCA9CisJCShzc2lmX21zZ19sZW4oJnNzaWZfYm1jLT5yZXNwb25zZSkgPD0gKE1B WF9QQVlMT0FEX1BFUl9UUkFOU0FDVElPTiArIDEpKSA/CisJCXRydWUgOiBmYWxzZTsgLyogMTog Ynl0ZSBvZiBsZW5ndGggKi8KKworCXNzaWZfYm1jLT5yZXNwb25zZV9pbl9wcm9ncmVzcyA9IHRy dWU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3NpZl9ibWMtPmxvY2ssIGZsYWdzKTsKKwor CXJldHVybiAwOworfQorCisvKgorICogQ2FsbCBpbiBSRUFEIGNvbnRleHQKKyAqLworc3RhdGlj IGludCByZWNlaXZlX3NzaWZfYm1jX3JlcXVlc3Qoc3RydWN0IHNzaWZfYm1jX2N0eCAqc3NpZl9i bWMsIGJvb2wgbm9uX2Jsb2NraW5nKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJl dDsKKworCWlmICghbm9uX2Jsb2NraW5nKSB7CityZXRyeToKKwkJcmV0ID0gd2FpdF9ldmVudF9p bnRlcnJ1cHRpYmxlKHNzaWZfYm1jLT53YWl0X3F1ZXVlLAorCQkJCQkgICAgICAgc3NpZl9ibWMt PnJlcXVlc3RfYXZhaWxhYmxlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJ c3Bpbl9sb2NrX2lycXNhdmUoJnNzaWZfYm1jLT5sb2NrLCBmbGFncyk7CisJaWYgKCFzc2lmX2Jt Yy0+cmVxdWVzdF9hdmFpbGFibGUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3NpZl9i bWMtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKG5vbl9ibG9ja2luZykKKwkJCXJldHVybiAtRUFHQUlO OworCQlnb3RvIHJldHJ5OworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzc2lmX2JtYy0+ bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEhhbmRsZSBTU0lGIG1lc3NhZ2Ug dGhhdCB3aWxsIGJlIHNlbnQgdG8gdXNlciAqLworc3RhdGljIHNzaXplX3Qgc3NpZl9ibWNfcmVh ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2Zm X3QgKnBwb3MpCit7CisJc3RydWN0IHNzaWZfYm1jX2N0eCAqc3NpZl9ibWMgPSB0b19zc2lmX2Jt YyhmaWxlKTsKKwlzdHJ1Y3Qgc3NpZl9tc2cgbXNnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJ c3NpemVfdCByZXQ7CisKKwltdXRleF9sb2NrKCZzc2lmX2JtYy0+ZmlsZV9tdXRleCk7CisKKwly ZXQgPSByZWNlaXZlX3NzaWZfYm1jX3JlcXVlc3Qoc3NpZl9ibWMsIGZpbGUtPmZfZmxhZ3MgJiBP X05PTkJMT0NLKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmc3NpZl9ibWMtPmxvY2ssIGZsYWdzKTsKKwljb3VudCA9IG1pbl90KHNzaXplX3QsIGNv dW50LCBzc2lmX21zZ19sZW4oJnNzaWZfYm1jLT5yZXF1ZXN0KSk7CisJbWVtY3B5KCZtc2csICZz c2lmX2JtYy0+cmVxdWVzdCwgY291bnQpOworCXNzaWZfYm1jLT5yZXF1ZXN0X2F2YWlsYWJsZSA9 IGZhbHNlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNzaWZfYm1jLT5sb2NrLCBmbGFncyk7 CisKKwlyZXQgPSBjb3B5X3RvX3VzZXIoYnVmLCAmbXNnLCBjb3VudCk7CitvdXQ6CisJbXV0ZXhf dW5sb2NrKCZzc2lmX2JtYy0+ZmlsZV9tdXRleCk7CisKKwlyZXR1cm4gKHJldCA8IDApID8gcmV0 IDogY291bnQ7Cit9CisKKy8qIEhhbmRsZSBTU0lGIG1lc3NhZ2UgdGhhdCBpcyB3cml0dGVuIGJ5 IHVzZXIgKi8KK3N0YXRpYyBzc2l6ZV90IHNzaWZfYm1jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxl LCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkgICAgICBsb2ZmX3Qg KnBwb3MpCit7CisJc3RydWN0IHNzaWZfYm1jX2N0eCAqc3NpZl9ibWMgPSB0b19zc2lmX2JtYyhm aWxlKTsKKwlzdHJ1Y3Qgc3NpZl9tc2cgbXNnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Np emVfdCByZXQ7CisKKwlpZiAoY291bnQgPiBzaXplb2Yoc3RydWN0IHNzaWZfbXNnKSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZzc2lmX2JtYy0+ZmlsZV9tdXRleCk7CisKKwly ZXQgPSBjb3B5X2Zyb21fdXNlcigmbXNnLCBidWYsIGNvdW50KTsKKwlpZiAocmV0KQorCQlnb3Rv IG91dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzc2lmX2JtYy0+bG9jaywgZmxhZ3MpOworCWlm IChjb3VudCA+PSBzc2lmX21zZ19sZW4oJnNzaWZfYm1jLT5yZXNwb25zZSkpCisJCW1lbWNweSgm c3NpZl9ibWMtPnJlc3BvbnNlLCAmbXNnLCBjb3VudCk7CisJZWxzZQorCQlyZXQgPSAtRUlOVkFM OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNzaWZfYm1jLT5sb2NrLCBmbGFncyk7CisKKwlp ZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IHNlbmRfc3NpZl9ibWNfcmVzcG9uc2Uoc3Np Zl9ibWMsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlpZiAoIXJldCAmJiBzc2lmX2Jt Yy0+c2V0X3NzaWZfYm1jX3N0YXR1cykKKwkJc3NpZl9ibWMtPnNldF9zc2lmX2JtY19zdGF0dXMo c3NpZl9ibWMsIFNTSUZfQk1DX1JFQURZKTsKK291dDoKKwltdXRleF91bmxvY2soJnNzaWZfYm1j LT5maWxlX211dGV4KTsKKworCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiBjb3VudDsKK30KKwor c3RhdGljIGxvbmcgc3NpZl9ibWNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGlu dCBjbWQsIHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1 bnNpZ25lZCBpbnQgc3NpZl9ibWNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAq d2FpdCkKK3sKKwlzdHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYyA9IHRvX3NzaWZfYm1jKGZp bGUpOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKworCW11dGV4X2xvY2soJnNzaWZfYm1jLT5m aWxlX211dGV4KTsKKwlwb2xsX3dhaXQoZmlsZSwgJnNzaWZfYm1jLT53YWl0X3F1ZXVlLCB3YWl0 KTsKKworCS8qCisJICogVGhlIHJlcXVlc3QgbWVzc2FnZSBpcyBub3cgYXZhaWxhYmxlIHNvIHVz ZXJzcGFjZSBhcHBsaWNhdGlvbiBjYW4KKwkgKiBnZXQgdGhlIHJlcXVlc3QKKwkgKi8KKwlpZiAo c3NpZl9ibWMtPnJlcXVlc3RfYXZhaWxhYmxlKQorCQltYXNrIHw9IFBPTExJTjsKKworCW11dGV4 X3VubG9jaygmc3NpZl9ibWMtPmZpbGVfbXV0ZXgpOworCXJldHVybiBtYXNrOworfQorCisvKgor ICogU3lzdGVtIGNhbGxzIHRvIGRldmljZSBpbnRlcmZhY2UgZm9yIHVzZXIgYXBwcworICovCitz dGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzc2lmX2JtY19mb3BzID0geworCS5v d25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSBzc2lmX2JtY19yZWFkLAorCS53cml0ZQkJ PSBzc2lmX2JtY193cml0ZSwKKwkucG9sbAkJPSBzc2lmX2JtY19wb2xsLAorCS51bmxvY2tlZF9p b2N0bAk9IHNzaWZfYm1jX2lvY3RsLAorfTsKKworLyogQ2FsbGVkIHdpdGggc3NpZl9ibWMtPmxv Y2sgaGVsZC4gKi8KK3N0YXRpYyBpbnQgaGFuZGxlX3JlcXVlc3Qoc3RydWN0IHNzaWZfYm1jX2N0 eCAqc3NpZl9ibWMpCit7CisJaWYgKHNzaWZfYm1jLT5zZXRfc3NpZl9ibWNfc3RhdHVzKQorCQlz c2lmX2JtYy0+c2V0X3NzaWZfYm1jX3N0YXR1cyhzc2lmX2JtYywgU1NJRl9CTUNfQlVTWSk7CisK KwkvKiBSZXF1ZXN0IG1lc3NhZ2UgaXMgYXZhaWxhYmxlIHRvIHByb2Nlc3MgKi8KKwlzc2lmX2Jt Yy0+cmVxdWVzdF9hdmFpbGFibGUgPSB0cnVlOworCS8qCisJICogVGhpcyBpcyB0aGUgbmV3IFJF QUQgcmVxdWVzdC4KKwkgKiBDbGVhciB0aGUgcmVzcG9uc2UgYnVmZmVyIG9mIHRoZSBwcmV2aW91 cyB0cmFuc2FjdGlvbgorCSAqLworCW1lbXNldCgmc3NpZl9ibWMtPnJlc3BvbnNlLCAwLCBzaXpl b2Yoc3RydWN0IHNzaWZfbXNnKSk7CisJd2FrZV91cF9hbGwoJnNzaWZfYm1jLT53YWl0X3F1ZXVl KTsKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIHdpdGggc3NpZl9ibWMtPmxvY2sgaGVsZC4g Ki8KK3N0YXRpYyBpbnQgY29tcGxldGVfcmVzcG9uc2Uoc3RydWN0IHNzaWZfYm1jX2N0eCAqc3Np Zl9ibWMpCit7CisJLyogSW52YWxpZGF0ZSByZXNwb25zZSBpbiBidWZmZXIgdG8gZGVub3RlIGl0 IGhhdmluZyBiZWVuIHNlbnQuICovCisJc3NpZl9ibWMtPnJlc3BvbnNlLmxlbiA9IDA7CisJc3Np Zl9ibWMtPnJlc3BvbnNlX2luX3Byb2dyZXNzID0gZmFsc2U7CisJc3NpZl9ibWMtPm5ieXRlc19w cm9jZXNzZWQgPSAwOworCXNzaWZfYm1jLT5yZW1haW5fbGVuID0gMDsKKwltZW1zZXQoJnNzaWZf Ym1jLT5yZXNwb25zZV9idWYsIDAsIE1BWF9QQVlMT0FEX1BFUl9UUkFOU0FDVElPTik7CisJd2Fr ZV91cF9hbGwoJnNzaWZfYm1jLT53YWl0X3F1ZXVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgc2V0X211bHRpcGFydF9yZXNwb25zZV9idWZmZXIoc3RydWN0IHNzaWZfYm1jX2N0eCAq c3NpZl9ibWMsIHU4ICp2YWwpCit7CisJdTggcmVzcG9uc2VfbGVuID0gMDsKKwlpbnQgaWR4ID0g MDsKKwl1OCBkYXRhX2xlbjsKKworCWRhdGFfbGVuID0gc3NpZl9ibWMtPnJlc3BvbnNlLmxlbjsK Kwlzd2l0Y2ggKHNzaWZfYm1jLT5zbWJ1c19jbWQpIHsKKwljYXNlIFNTSUZfSVBNSV9NVUxUSVBB UlRfUkVBRF9TVEFSVDoKKwkJLyoKKwkJICogUmVhZCBTdGFydCBsZW5ndGggaXMgMzIgYnl0ZXMu CisJCSAqIFJlYWQgU3RhcnQgdHJhbnNmZXIgZmlyc3QgMzAgYnl0ZXMgb2YgSVBNSSByZXNwb25z ZQorCQkgKiBhbmQgMiBzcGVjaWFsIGNvZGUgMHgwMCwgMHgwMS4KKwkJICovCisJCSp2YWwgPSBN QVhfUEFZTE9BRF9QRVJfVFJBTlNBQ1RJT047CisJCXNzaWZfYm1jLT5yZW1haW5fbGVuID0gZGF0 YV9sZW4gLSBNQVhfSVBNSV9EQVRBX1BFUl9TVEFSVF9UUkFOU0FDVElPTjsKKwkJc3NpZl9ibWMt PmJsb2NrX251bSA9IDA7CisKKwkJc3NpZl9ibWMtPnJlc3BvbnNlX2J1ZltpZHgrK10gPSAweDAw OyAvKiBTdGFydCBGbGFnICovCisJCXNzaWZfYm1jLT5yZXNwb25zZV9idWZbaWR4KytdID0gMHgw MTsgLyogU3RhcnQgRmxhZyAqLworCQlzc2lmX2JtYy0+cmVzcG9uc2VfYnVmW2lkeCsrXSA9IHNz aWZfYm1jLT5yZXNwb25zZS5uZXRmbl9sdW47CisJCXNzaWZfYm1jLT5yZXNwb25zZV9idWZbaWR4 KytdID0gc3NpZl9ibWMtPnJlc3BvbnNlLmNtZDsKKwkJc3NpZl9ibWMtPnJlc3BvbnNlX2J1Zltp ZHgrK10gPSBzc2lmX2JtYy0+cmVzcG9uc2UucGF5bG9hZFswXTsKKworCQlyZXNwb25zZV9sZW4g PSBNQVhfUEFZTE9BRF9QRVJfVFJBTlNBQ1RJT04gLSBpZHg7CisKKwkJbWVtY3B5KCZzc2lmX2Jt Yy0+cmVzcG9uc2VfYnVmW2lkeF0sICZzc2lmX2JtYy0+cmVzcG9uc2UucGF5bG9hZFsxXSwKKwkJ ICAgICAgIHJlc3BvbnNlX2xlbik7CisJCWJyZWFrOworCisJY2FzZSBTU0lGX0lQTUlfTVVMVElQ QVJUX1JFQURfTUlERExFOgorCQkvKgorCQkgKiBJUE1JIFJFQUQgTWlkZGxlIG9yIFJFQUQgRW5k IG1lc3NhZ2VzIGNhbiBjYXJyeSB1cCB0byAzMSBieXRlcworCQkgKiBJUE1JIGRhdGEgcGx1cyBi bG9jayBudW1iZXIgYnl0ZS4KKwkJICovCisJCWlmIChzc2lmX2JtYy0+cmVtYWluX2xlbiA8IE1B WF9JUE1JX0RBVEFfUEVSX01JRERMRV9UUkFOU0FDVElPTikgeworCQkJLyoKKwkJCSAqIFRoaXMg aXMgUkVBRCBFbmQgbWVzc2FnZQorCQkJICogIFJldHVybiBsZW5ndGggaXMgdGhlIHJlbWFpbmlu ZyByZXNwb25zZSBkYXRhIGxlbmd0aAorCQkJICogIHBsdXMgYmxvY2sgbnVtYmVyCisJCQkgKiAg QmxvY2sgbnVtYmVyIDB4RkYgaXMgdG8gaW5kaWNhdGUgdGhpcyBpcyBsYXN0IG1lc3NhZ2UKKwkJ CSAqCisJCQkgKiBSZXR1cm4gbGVuZ3RoIGlzOiByZW1haW4gcmVzcG9uc2UgcGx1cyBibG9jayBu dW1iZXIKKwkJCSAqLworCQkJKnZhbCA9IHNzaWZfYm1jLT5yZW1haW5fbGVuICsgMTsKKwkJCXNz aWZfYm1jLT5ibG9ja19udW0gPSAweEZGOworCQkJc3NpZl9ibWMtPnJlc3BvbnNlX2J1ZltpZHgr K10gPSBzc2lmX2JtYy0+YmxvY2tfbnVtOworCQkJcmVzcG9uc2VfbGVuID0gc3NpZl9ibWMtPnJl bWFpbl9sZW47CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVGhpcyBpcyBSRUFEIE1pZGRsZSBt ZXNzYWdlCisJCQkgKiAgUmVzcG9uc2UgbGVuZ3RoIGlzIHRoZSBtYXhpbXVtIFNNQlVTIHRyYW5z ZmVyIGxlbmd0aAorCQkJICogIEJsb2NrIG51bWJlciBieXRlIGlzIGluY3JlbWVudGVkCisJCQkg KiBSZXR1cm4gbGVuZ3RoIGlzIG1heGltdW0gU01CVVMgdHJhbnNmZXIgbGVuZ3RoCisJCQkgKi8K KwkJCSp2YWwgPSBNQVhfUEFZTE9BRF9QRVJfVFJBTlNBQ1RJT047CisJCQlzc2lmX2JtYy0+cmVt YWluX2xlbiAtPSBNQVhfSVBNSV9EQVRBX1BFUl9NSURETEVfVFJBTlNBQ1RJT047CisJCQlyZXNw b25zZV9sZW4gPSBNQVhfSVBNSV9EQVRBX1BFUl9NSURETEVfVFJBTlNBQ1RJT047CisJCQlzc2lm X2JtYy0+cmVzcG9uc2VfYnVmW2lkeCsrXSA9IHNzaWZfYm1jLT5ibG9ja19udW07CisJCQlzc2lm X2JtYy0+YmxvY2tfbnVtKys7CisJCX0KKworCQltZW1jcHkoJnNzaWZfYm1jLT5yZXNwb25zZV9i dWZbaWR4XSwKKwkJICAgICAgIHNzaWZfYm1jLT5yZXNwb25zZS5wYXlsb2FkICsgMSArIHNzaWZf Ym1jLT5uYnl0ZXNfcHJvY2Vzc2VkLAorCQkgICAgICAgcmVzcG9uc2VfbGVuKTsKKwkJYnJlYWs7 CisKKwlkZWZhdWx0OgorCQkvKiBEbyBub3QgZXhwZWN0IHRvIGdvIHRvIHRoaXMgY2FzZSAqLwor CQlwcl9lcnIoIkVycm9yOiBVbmV4cGVjdGVkIFNNQnVzIGNvbW1hbmQgcmVjZWl2ZWQgMHgleFxu Iiwgc3NpZl9ibWMtPnNtYnVzX2NtZCk7CisJCWJyZWFrOworCX0KKworCXNzaWZfYm1jLT5uYnl0 ZXNfcHJvY2Vzc2VkICs9IHJlc3BvbnNlX2xlbjsKK30KKworc3RhdGljIHZvaWQgc2V0X3Npbmds ZXBhcnRfcmVzcG9uc2VfYnVmZmVyKHN0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZfYm1jLCB1OCAq dmFsKQoreworCXU4ICpidWYgPSAodTggKikmc3NpZl9ibWMtPnJlc3BvbnNlOworCisJLyoKKwkg KiBEbyBub3QgZXhwZWN0IHRoZSBJUE1JIHJlc3BvbnNlIGhhcyBkYXRhIGxlbmd0aCAwLgorCSAq IFdpdGggc29tZSBJMkMgU01CdXMgY29udHJvbGxlcnMgKEFzcGVlZCBJMkMpLCByZXR1cm4gMCBm b3IKKwkgKiB0aGUgU01CdXMgUmVhZCBSZXF1ZXN0IGNhbGxiYWNrIG1pZ2h0IGNhdXNlIGJhZCBz dGF0ZSBmb3IKKwkgKiB0aGUgYnVzLiBTbyByZXR1cm4gMSBieXRlIGxlbmd0aCBzbyB0aGF0IG1h c3RlciB3aWxsCisJICogcmVzZW5kIHRoZSBSZWFkIFJlcXVlc3QgYmVjYXVzZSB0aGUgbGVuZ3Ro IG9mIHJlc3BvbnNlIGlzCisJICogbGVzcyB0aGFuIGEgbm9ybWFsIElQTUkgcmVzcG9uc2UuCisJ ICoKKwkgKiBPdGhlcndpc2UsIHJldHVybiB0aGUgbGVuZ3RoIG9mIElQTUkgcmVzcG9uc2UKKwkg Ki8KKwkqdmFsID0gKGJ1Zltzc2lmX2JtYy0+bXNnX2lkeF0pID8gYnVmW3NzaWZfYm1jLT5tc2df aWR4XSA6IDB4MTsKK30KKworLyogUHJvY2VzcyB0aGUgSVBNSSByZXNwb25zZSB0aGF0IHdpbGwg YmUgcmVhZCBieSBtYXN0ZXIgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWFkX3Byb2Nlc3NlZChz dHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYywgdTggKnZhbCkKK3sKKwl1OCAqYnVmOworCXU4 IHBlY19sZW4sIGFkZHIsIGxlbjsKKwl1OCBwZWMgPSAwOworCisJcGVjX2xlbiA9IHNzaWZfYm1j LT5wZWNfc3VwcG9ydCA/IDEgOiAwOworCS8qIFBFQyAtIFN0YXJ0IFJlYWQgQWRkcmVzcyAqLwor CWFkZHIgPSBHRVRfOEJJVF9BRERSKHNzaWZfYm1jLT5jbGllbnQtPmFkZHIpOworCXBlYyA9IGky Y19zbWJ1c19wZWMocGVjLCAmYWRkciwgMSk7CisJLyogUEVDIC0gU1NJRiBDb21tYW5kICovCisJ cGVjID0gaTJjX3NtYnVzX3BlYyhwZWMsICZzc2lmX2JtYy0+c21idXNfY21kLCAxKTsKKwkvKiBQ RUMgLSBSZXN0YXJ0IFdyaXRlIEFkZHJlc3MgKi8KKwlhZGRyID0gYWRkciB8IDB4MDE7CisJcGVj ID0gaTJjX3NtYnVzX3BlYyhwZWMsICZhZGRyLCAxKTsKKworCWlmIChzc2lmX2JtYy0+aXNfc2lu Z2xlcGFydF9yZWFkKSB7CisJCS8qIFNpbmdsZS1wYXJ0IFJlYWQgcHJvY2Vzc2luZyAqLworCQli dWYgPSAodTggKikmc3NpZl9ibWMtPnJlc3BvbnNlOworCisJCWlmIChzc2lmX2JtYy0+cmVzcG9u c2UubGVuICYmIHNzaWZfYm1jLT5tc2dfaWR4IDwgc3NpZl9ibWMtPnJlc3BvbnNlLmxlbikgewor CQkJc3NpZl9ibWMtPm1zZ19pZHgrKzsKKwkJCSp2YWwgPSBidWZbc3NpZl9ibWMtPm1zZ19pZHhd OworCQl9IGVsc2UgaWYgKHNzaWZfYm1jLT5yZXNwb25zZS5sZW4gJiYKKwkJCSAgIChzc2lmX2Jt Yy0+bXNnX2lkeCA9PSBzc2lmX2JtYy0+cmVzcG9uc2UubGVuKSkgeworCQkJc3NpZl9ibWMtPm1z Z19pZHgrKzsKKwkJCSp2YWwgPSBpMmNfc21idXNfcGVjKHBlYywgYnVmLCBzc2lmX21zZ19sZW4o JnNzaWZfYm1jLT5yZXNwb25zZSkpOworCQl9IGVsc2UgeworCQkJKnZhbCA9IDA7CisJCX0KKwkJ LyogSW52YWxpZGF0ZSByZXNwb25zZSBidWZmZXIgdG8gZGVub3RlIGl0IGlzIHNlbnQgKi8KKwkJ aWYgKHNzaWZfYm1jLT5tc2dfaWR4ICsgMSA+PSAoc3NpZl9tc2dfbGVuKCZzc2lmX2JtYy0+cmVz cG9uc2UpICsgcGVjX2xlbikpCisJCQljb21wbGV0ZV9yZXNwb25zZShzc2lmX2JtYyk7CisJfSBl bHNlIHsKKwkJLyogTXVsdGktcGFydCBSZWFkIHByb2Nlc3NpbmcgKi8KKwkJc3dpdGNoIChzc2lm X2JtYy0+c21idXNfY21kKSB7CisJCWNhc2UgU1NJRl9JUE1JX01VTFRJUEFSVF9SRUFEX1NUQVJU OgorCQljYXNlIFNTSUZfSVBNSV9NVUxUSVBBUlRfUkVBRF9NSURETEU6CisJCQlidWYgPSAodTgg Kikmc3NpZl9ibWMtPnJlc3BvbnNlX2J1ZjsKKwkJCSp2YWwgPSBidWZbc3NpZl9ibWMtPm1zZ19p ZHhdOworCQkJc3NpZl9ibWMtPm1zZ19pZHgrKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ LyogRG8gbm90IGV4cGVjdCB0byBnbyB0byB0aGlzIGNhc2UgKi8KKwkJCXByX2VycigiRXJyb3I6 IFVuZXhwZWN0ZWQgU01CdXMgY29tbWFuZCByZWNlaXZlZCAweCV4XG4iLAorCQkJICAgICAgIHNz aWZfYm1jLT5zbWJ1c19jbWQpOworCQkJYnJlYWs7CisJCX0KKwkJbGVuID0gKHNzaWZfYm1jLT5i bG9ja19udW0gPT0gMHhGRikgPworCQkgICAgICAgc3NpZl9ibWMtPnJlbWFpbl9sZW4gKyAxIDog TUFYX1BBWUxPQURfUEVSX1RSQU5TQUNUSU9OOworCQlpZiAoc3NpZl9ibWMtPm1zZ19pZHggPT0g KGxlbiArIDEpKSB7CisJCQlwZWMgPSBpMmNfc21idXNfcGVjKHBlYywgJmxlbiwgMSk7CisJCQkq dmFsID0gaTJjX3NtYnVzX3BlYyhwZWMsIHNzaWZfYm1jLT5yZXNwb25zZV9idWYsIGxlbik7CisJ CX0KKwkJLyogSW52YWxpZGF0ZSByZXNwb25zZSBidWZmZXIgdG8gZGVub3RlIGxhc3QgcmVzcG9u c2UgaXMgc2VudCAqLworCQlpZiAoc3NpZl9ibWMtPmJsb2NrX251bSA9PSAweEZGICYmCisJCSAg ICBzc2lmX2JtYy0+bXNnX2lkeCA+IChzc2lmX2JtYy0+cmVtYWluX2xlbiArIHBlY19sZW4pKSB7 CisJCQljb21wbGV0ZV9yZXNwb25zZShzc2lmX2JtYyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2 b2lkIGhhbmRsZV93cml0ZV9yZWNlaXZlZChzdHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYywg dTggKnZhbCkKK3sKKwl1OCAqYnVmOworCXU4IHNtYnVzX2NtZDsKKworCWJ1ZiA9ICh1OCAqKSZz c2lmX2JtYy0+cmVxdWVzdDsKKwlpZiAoc3NpZl9ibWMtPm1zZ19pZHggPj0gc2l6ZW9mKHN0cnVj dCBzc2lmX21zZykpCisJCXJldHVybjsKKworCXNtYnVzX2NtZCA9IHNzaWZfYm1jLT5zbWJ1c19j bWQ7CisJc3dpdGNoIChzbWJ1c19jbWQpIHsKKwljYXNlIFNTSUZfSVBNSV9TSU5HTEVQQVJUX1dS SVRFOgorCQkvKiBTaW5nbGUtcGFydCB3cml0ZSAqLworCQlidWZbc3NpZl9ibWMtPm1zZ19pZHgg LSAxXSA9ICp2YWw7CisJCXNzaWZfYm1jLT5tc2dfaWR4Kys7CisKKwkJYnJlYWs7CisJY2FzZSBT U0lGX0lQTUlfTVVMVElQQVJUX1dSSVRFX1NUQVJUOgorCQkvKiBSZXNldCBsZW5ndGggdG8gemVy byAqLworCQlpZiAoc3NpZl9ibWMtPm1zZ19pZHggPT0gMSkKKwkJCXNzaWZfYm1jLT5yZXF1ZXN0 LmxlbiA9IDA7CisKKwkJZmFsbHRocm91Z2g7CisJY2FzZSBTU0lGX0lQTUlfTVVMVElQQVJUX1dS SVRFX01JRERMRToKKwljYXNlIFNTSUZfSVBNSV9NVUxUSVBBUlRfV1JJVEVfRU5EOgorCQkvKiBN dWx0aS1wYXJ0IHdyaXRlLCAybmQgYnl0ZSByZWNlaXZlZCBpcyBsZW5ndGggKi8KKwkJaWYgKHNz aWZfYm1jLT5tc2dfaWR4ID09IDEpIHsKKwkJCXNzaWZfYm1jLT5yZXF1ZXN0LmxlbiArPSAqdmFs OworCQkJc3NpZl9ibWMtPnJlY3ZfbGVuID0gKnZhbDsKKwkJfSBlbHNlIHsKKwkJCWJ1Zltzc2lm X2JtYy0+bXNnX2lkeCAtIDEgKworCQkJICAgIHNzaWZfYm1jLT5yZXF1ZXN0LmxlbiAtIHNzaWZf Ym1jLT5yZWN2X2xlbl0JPSAqdmFsOworCQl9CisKKwkJc3NpZl9ibWMtPm1zZ19pZHgrKzsKKwor CQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBEbyBub3QgZXhwZWN0IHRvIGdvIHRvIHRoaXMgY2Fz ZSAqLworCQlwcl9lcnIoIkVycm9yOiBVbmV4cGVjdGVkIFNNQnVzIGNvbW1hbmQgcmVjZWl2ZWQg MHgleFxuIiwgc3NpZl9ibWMtPnNtYnVzX2NtZCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGlj IGJvb2wgdmFsaWRhdGVfcGVjKHN0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZfYm1jKQoreworCXU4 IHJwZWMgPSAwLCBjcGVjID0gMDsKKwlib29sIHJldCA9IHRydWU7CisJdTggYWRkciwgaW5kZXg7 CisJdTggKmJ1ZjsKKworCWJ1ZiA9ICh1OCAqKSZzc2lmX2JtYy0+cmVxdWVzdDsKKwlzd2l0Y2gg KHNzaWZfYm1jLT5zbWJ1c19jbWQpIHsKKwljYXNlIFNTSUZfSVBNSV9TSU5HTEVQQVJUX1dSSVRF OgorCQlpZiAoKHNzaWZfYm1jLT5tc2dfaWR4IC0gMSkgPT0gc3NpZl9tc2dfbGVuKCZzc2lmX2Jt Yy0+cmVxdWVzdCkpIHsKKwkJCS8qIFBFQyBpcyBub3QgaW5jbHVkZWQgKi8KKwkJCXNzaWZfYm1j LT5wZWNfc3VwcG9ydCA9IGZhbHNlOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlpZiAoKHNz aWZfYm1jLT5tc2dfaWR4IC0gMSkgIT0gKHNzaWZfbXNnX2xlbigmc3NpZl9ibWMtPnJlcXVlc3Qp ICsgMSkpCisJCQlnb3RvIGVycm9yOworCisJCS8qIFBFQyBpcyBpbmNsdWRlZCAqLworCQlzc2lm X2JtYy0+cGVjX3N1cHBvcnQgPSB0cnVlOworCQlycGVjID0gYnVmW3NzaWZfYm1jLT5tc2dfaWR4 IC0gMl07CisJCWFkZHIgPSBHRVRfOEJJVF9BRERSKHNzaWZfYm1jLT5jbGllbnQtPmFkZHIpOwor CQljcGVjID0gaTJjX3NtYnVzX3BlYyhjcGVjLCAmYWRkciwgMSk7CisJCWNwZWMgPSBpMmNfc21i dXNfcGVjKGNwZWMsICZzc2lmX2JtYy0+c21idXNfY21kLCAxKTsKKwkJY3BlYyA9IGkyY19zbWJ1 c19wZWMoY3BlYywgYnVmLCBzc2lmX21zZ19sZW4oJnNzaWZfYm1jLT5yZXF1ZXN0KSk7CisJCWlm IChycGVjICE9IGNwZWMpIHsKKwkJCXByX2VycigiQmFkIFBFQyAweCUwMnggdnMuIDB4JTAyeFxu IiwgcnBlYywgY3BlYyk7CisJCQlyZXQgPSBmYWxzZTsKKwkJfQorCisJCWJyZWFrOworCWNhc2Ug U1NJRl9JUE1JX01VTFRJUEFSVF9XUklURV9TVEFSVDoKKwljYXNlIFNTSUZfSVBNSV9NVUxUSVBB UlRfV1JJVEVfTUlERExFOgorCWNhc2UgU1NJRl9JUE1JX01VTFRJUEFSVF9XUklURV9FTkQ6CisJ CWluZGV4ID0gc3NpZl9ibWMtPnJlcXVlc3QubGVuIC0gc3NpZl9ibWMtPnJlY3ZfbGVuOworCQlp ZiAoKHNzaWZfYm1jLT5tc2dfaWR4IC0gMSArIGluZGV4KSA9PSBzc2lmX21zZ19sZW4oJnNzaWZf Ym1jLT5yZXF1ZXN0KSkgeworCQkJLyogUEVDIGlzIG5vdCBpbmNsdWRlZCAqLworCQkJc3NpZl9i bWMtPnBlY19zdXBwb3J0ID0gZmFsc2U7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCWlmICgo c3NpZl9ibWMtPm1zZ19pZHggLSAxICsgaW5kZXgpICE9IChzc2lmX21zZ19sZW4oJnNzaWZfYm1j LT5yZXF1ZXN0KSArIDEpKQorCQkJZ290byBlcnJvcjsKKworCQkvKiBQRUMgaXMgaW5jbHVkZWQg Ki8KKwkJc3NpZl9ibWMtPnBlY19zdXBwb3J0ID0gdHJ1ZTsKKwkJcnBlYyA9IGJ1Zltzc2lmX2Jt Yy0+bXNnX2lkeCAtIDIgKyBpbmRleF07CisJCWFkZHIgPSBHRVRfOEJJVF9BRERSKHNzaWZfYm1j LT5jbGllbnQtPmFkZHIpOworCQljcGVjID0gaTJjX3NtYnVzX3BlYyhjcGVjLCAmYWRkciwgMSk7 CisJCWNwZWMgPSBpMmNfc21idXNfcGVjKGNwZWMsICZzc2lmX2JtYy0+c21idXNfY21kLCAxKTsK KwkJY3BlYyA9IGkyY19zbWJ1c19wZWMoY3BlYywgJnNzaWZfYm1jLT5yZWN2X2xlbiwgMSk7CisJ CS8qIEFzIFNNQnVzIHNwZWNpZmljYXRpb24gZG9lcyBub3QgYWxsb3cgdGhlIGxlbmd0aAorCQkg KiAoYnl0ZSBjb3VudCkgaW4gdGhlIFdyaXRlLUJsb2NrIHByb3RvY29sIHRvIGJlIHplcm8uCisJ CSAqIFRoZXJlZm9yZSwgaXQgaXMgaWxsZWdhbCB0byBoYXZlIHRoZSBsYXN0IE1pZGRsZQorCQkg KiB0cmFuc2FjdGlvbiBpbiB0aGUgc2VxdWVuY2UgY2FycnkgMzItYnl0ZXMgYW5kIGhhdmUKKwkJ ICogYSBsZW5ndGggb2Yg4oCYMOKAmSBpbiB0aGUgRW5kIHRyYW5zYWN0aW9uLgorCQkgKiBCdXQg c29tZSB1c2VycyBtYXkgdHJ5IHRvIHVzZSB0aGlzIHdheSBhbmQgd2Ugc2hvdWxkCisJCSAqIHBy ZXZlbnQgc3NpZl9ibWMgZHJpdmVyIGJyb2tlbiBpbiB0aGlzIGNhc2UuCisJCSAqLworCQlpZiAo c3NpZl9ibWMtPnJlY3ZfbGVuICE9IDApCisJCQljcGVjID0gaTJjX3NtYnVzX3BlYyhjcGVjLCBi dWYgKyAxICsgaW5kZXgsIHNzaWZfYm1jLT5yZWN2X2xlbik7CisKKwkJaWYgKHJwZWMgIT0gY3Bl YykgeworCQkJcHJfZXJyKCJCYWQgUEVDIDB4JTAyeCB2cy4gMHglMDJ4XG4iLCBycGVjLCBjcGVj KTsKKwkJCXJldCA9IGZhbHNlOworCQl9CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7 CisJfQorCisJcmV0dXJuIHJldDsKK2Vycm9yOgorCS8qIERvIG5vdCBleHBlY3QgdG8gZ28gdG8g dGhpcyBjYXNlICovCisJcHJfZXJyKCJFcnJvcjogVW5leHBlY3RlZCBsZW5ndGggcmVjZWl2ZWQg JWRcbiIsIHNzaWZfbXNnX2xlbigmc3NpZl9ibWMtPnJlcXVlc3QpKTsKKworCXJldHVybiBmYWxz ZTsKK30KKworc3RhdGljIHZvaWQgY29tcGxldGVfd3JpdGVfcmVjZWl2ZWQoc3RydWN0IHNzaWZf Ym1jX2N0eCAqc3NpZl9ibWMpCit7CisJdTggY21kID0gc3NpZl9ibWMtPnNtYnVzX2NtZDsKKwor CS8qIEEgQk1DIHRoYXQgcmVjZWl2ZXMgYW4gaW52YWxpZCBQRUMgc2hhbGwgZHJvcCB0aGUgZGF0 YSBmb3IgdGhlIHdyaXRlCisJICogdHJhbnNhY3Rpb24gYW5kIGFueSBmdXJ0aGVyIHRyYW5zYWN0 aW9ucyAocmVhZCBvciB3cml0ZSkgdW50aWwKKwkgKiB0aGUgbmV4dCB2YWxpZCByZWFkIG9yIHdy aXRlIFN0YXJ0IHRyYW5zYWN0aW9uIGlzIHJlY2VpdmVkCisJICovCisJaWYgKCF2YWxpZGF0ZV9w ZWMoc3NpZl9ibWMpKSB7CisJCXByX2VycigiUmVjZWl2ZWQgaW52YWxpZCBQRUNcbiIpOworCQly ZXR1cm47CisJfQorCisJaWYgKGNtZCA9PSBTU0lGX0lQTUlfU0lOR0xFUEFSVF9XUklURSB8fCBj bWQgPT0gU1NJRl9JUE1JX01VTFRJUEFSVF9XUklURV9FTkQpCisJCWhhbmRsZV9yZXF1ZXN0KHNz aWZfYm1jKTsKK30KKworLyoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSBJMkMgc2xh dmUgZXZlbnRzCisgKi8KK3N0YXRpYyBpbnQgc3NpZl9ibWNfY2Ioc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCwgZW51bSBpMmNfc2xhdmVfZXZlbnQgZXZlbnQsIHU4ICp2YWwpCit7CisJc3RydWN0 IHNzaWZfYm1jX2N0eCAqc3NpZl9ibWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwor CXNwaW5fbG9jaygmc3NpZl9ibWMtPmxvY2spOworCisJLyogSTJDIEV2ZW50IEhhbmRsZXI6CisJ ICogICBJMkNfU0xBVkVfUkVBRF9SRVFVRVNURUQJMHgwCisJICogICBJMkNfU0xBVkVfV1JJVEVf UkVRVUVTVEVECTB4MQorCSAqICAgSTJDX1NMQVZFX1JFQURfUFJPQ0VTU0VECTB4MgorCSAqICAg STJDX1NMQVZFX1dSSVRFX1JFQ0VJVkVECTB4MworCSAqICAgSTJDX1NMQVZFX1NUT1AJCTB4NAor CSAqLworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEkyQ19TTEFWRV9SRUFEX1JFUVVFU1RFRDoK KwkJc3NpZl9ibWMtPm1zZ19pZHggPSAwOworCQlpZiAoc3NpZl9ibWMtPmlzX3NpbmdsZXBhcnRf cmVhZCkKKwkJCXNldF9zaW5nbGVwYXJ0X3Jlc3BvbnNlX2J1ZmZlcihzc2lmX2JtYywgdmFsKTsK KwkJZWxzZQorCQkJc2V0X211bHRpcGFydF9yZXNwb25zZV9idWZmZXIoc3NpZl9ibWMsIHZhbCk7 CisJCWJyZWFrOworCisJY2FzZSBJMkNfU0xBVkVfV1JJVEVfUkVRVUVTVEVEOgorCQlzc2lmX2Jt Yy0+bXNnX2lkeCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBJMkNfU0xBVkVfUkVBRF9QUk9DRVNT RUQ6CisJCWhhbmRsZV9yZWFkX3Byb2Nlc3NlZChzc2lmX2JtYywgdmFsKTsKKwkJYnJlYWs7CisK KwljYXNlIEkyQ19TTEFWRV9XUklURV9SRUNFSVZFRDoKKwkJLyoKKwkJICogRmlyc3QgYnl0ZSBp cyBTTUJVUyBjb21tYW5kLCBub3QgYSBwYXJ0IG9mIFNTSUYgbWVzc2FnZS4KKwkJICogU1NJRiBy ZXF1ZXN0IGJ1ZmZlciBzdGFydHMgd2l0aCBtc2dfaWR4IDEgZm9yIHRoZSBmaXJzdAorCQkgKiAg YnVmZmVyIGJ5dGUuCisJCSAqLworCQlpZiAoc3NpZl9ibWMtPm1zZ19pZHggPT0gMCkgeworCQkJ LyogU01CVVMgY29tbWFuZCBjYW4gdmFyeSAoc2luZ2xlIG9yIG11bHRpLXBhcnQpICovCisJCQlz c2lmX2JtYy0+c21idXNfY21kID0gKnZhbDsKKwkJCXNzaWZfYm1jLT5tc2dfaWR4Kys7CisJCX0g ZWxzZSB7CisJCQloYW5kbGVfd3JpdGVfcmVjZWl2ZWQoc3NpZl9ibWMsIHZhbCk7CisJCX0KKwor CQlicmVhazsKKworCWNhc2UgSTJDX1NMQVZFX1NUT1A6CisJCS8qCisJCSAqIFBFQyBieXRlIGlz IGFwcGVuZGVkIGF0IHRoZSBlbmQgb2YgZWFjaCB0cmFuc2FjdGlvbi4KKwkJICogRGV0ZWN0IFBF QyBpcyBzdXBwb3J0IG9yIG5vdCBhZnRlciByZWNlaXZpbmcgd3JpdGUgcmVxdWVzdAorCQkgKiBj b21wbGV0ZWx5LgorCQkgKi8KKwkJaWYgKHNzaWZfYm1jLT5sYXN0X2V2ZW50ID09IEkyQ19TTEFW RV9XUklURV9SRUNFSVZFRCkKKwkJCWNvbXBsZXRlX3dyaXRlX3JlY2VpdmVkKHNzaWZfYm1jKTsK KwkJLyogUmVzZXQgbWVzc2FnZSBpbmRleCAqLworCQlzc2lmX2JtYy0+bXNnX2lkeCA9IDA7CisJ CWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXNzaWZfYm1jLT5sYXN0X2V2ZW50 ID0gZXZlbnQ7CisJc3Bpbl91bmxvY2soJnNzaWZfYm1jLT5sb2NrKTsKKworCXJldHVybiAwOwor fQorCitzdHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtY19hbGxvYyhzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50LCBpbnQgc2l6ZW9mX3ByaXYpCit7CisJc3RydWN0IHNzaWZfYm1jX2N0eCAqc3Np Zl9ibWM7CisJaW50IHJldDsKKworCXNzaWZfYm1jID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRl diwgc2l6ZW9mKCpzc2lmX2JtYykgKyBzaXplb2ZfcHJpdiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFz c2lmX2JtYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzcGluX2xvY2tfaW5pdCgm c3NpZl9ibWMtPmxvY2spOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmc3NpZl9ibWMtPndhaXRf cXVldWUpOworCXNzaWZfYm1jLT5yZXF1ZXN0X2F2YWlsYWJsZSA9IGZhbHNlOworCXNzaWZfYm1j LT5yZXNwb25zZV9pbl9wcm9ncmVzcyA9IGZhbHNlOworCisJbXV0ZXhfaW5pdCgmc3NpZl9ibWMt PmZpbGVfbXV0ZXgpOworCisJLyogUmVnaXN0ZXIgbWlzYyBkZXZpY2UgaW50ZXJmYWNlICovCisJ c3NpZl9ibWMtPm1pc2NkZXYubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1I7CisJc3NpZl9ibWMt Pm1pc2NkZXYubmFtZSA9IERFVklDRV9OQU1FOworCXNzaWZfYm1jLT5taXNjZGV2LmZvcHMgPSAm c3NpZl9ibWNfZm9wczsKKwlzc2lmX2JtYy0+bWlzY2Rldi5wYXJlbnQgPSAmY2xpZW50LT5kZXY7 CisJcmV0ID0gbWlzY19yZWdpc3Rlcigmc3NpZl9ibWMtPm1pc2NkZXYpOworCWlmIChyZXQpCisJ CWdvdG8gb3V0OworCisJc3NpZl9ibWMtPmNsaWVudCA9IGNsaWVudDsKKwlzc2lmX2JtYy0+Y2xp ZW50LT5mbGFncyB8PSBJMkNfQ0xJRU5UX1NMQVZFOworCisJLyogUmVnaXN0ZXIgSTJDIHNsYXZl ICovCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc3NpZl9ibWMpOworCXJldCA9IGkyY19z bGF2ZV9yZWdpc3RlcihjbGllbnQsIHNzaWZfYm1jX2NiKTsKKwlpZiAocmV0KSB7CisJCW1pc2Nf ZGVyZWdpc3Rlcigmc3NpZl9ibWMtPm1pc2NkZXYpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXR1 cm4gc3NpZl9ibWM7CisKK291dDoKKwlkZXZtX2tmcmVlKCZjbGllbnQtPmRldiwgc3NpZl9ibWMp OworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitFWFBPUlRfU1lNQk9MKHNzaWZfYm1jX2FsbG9j KTsKKworTU9EVUxFX0FVVEhPUigiQ2h1b25nIFRyYW4gPGNodW9uZ0Bvcy5hbXBlcmVjb21wdXRp bmcuY29tPiIpOworTU9EVUxFX0FVVEhPUigiUXVhbiBOZ3V5ZW4gPHF1YW5Ab3MuYW1wZXJlY29t cHV0aW5nLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGludXggZGV2aWNlIGRyaXZlciBv ZiB0aGUgQk1DIElQTUkgU1NJRiBpbnRlcmZhY2UuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYy Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9zc2lmX2JtYy5oIGIvZHJpdmVycy9j aGFyL2lwbWkvc3NpZl9ibWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLmEyZWUwOTA1NzJkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL3Nz aWZfYm1jLmgKQEAgLTAsMCArMSw5MiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjArICovCisvKgorICogVGhlIGRyaXZlciBmb3IgQk1DIHNpZGUgb2YgU1NJRiBpbnRlcmZh Y2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEsIEFtcGVyZSBDb21wdXRpbmcgTExDCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxo dHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyNpZm5kZWYgX19TU0lGX0JNQ19I X18KKyNkZWZpbmUgX19TU0lGX0JNQ19IX18KKworI2RlZmluZSBERVZJQ0VfTkFNRQkJCQkiaXBt aS1zc2lmLWhvc3QiCisKKyNkZWZpbmUgR0VUXzhCSVRfQUREUihhZGRyXzdiaXQpCQkoKChhZGRy XzdiaXQpIDw8IDEpICYgMHhmZikKKworI2RlZmluZSBNU0dfUEFZTE9BRF9MRU5fTUFYCQkJMjUy CisKKy8qIEEgc3RhbmRhcmQgU01CdXMgVHJhbnNhY3Rpb24gaXMgbGltaXRlZCB0byAzMiBkYXRh IGJ5dGVzICovCisjZGVmaW5lIE1BWF9QQVlMT0FEX1BFUl9UUkFOU0FDVElPTgkJMzIKKworI2Rl ZmluZSBNQVhfSVBNSV9EQVRBX1BFUl9TVEFSVF9UUkFOU0FDVElPTgkzMAorI2RlZmluZSBNQVhf SVBNSV9EQVRBX1BFUl9NSURETEVfVFJBTlNBQ1RJT04JMzEKKworI2RlZmluZSBTU0lGX0lQTUlf U0lOR0xFUEFSVF9XUklURQkJMHgyCisjZGVmaW5lIFNTSUZfSVBNSV9TSU5HTEVQQVJUX1JFQUQJ CTB4MworI2RlZmluZSBTU0lGX0lQTUlfTVVMVElQQVJUX1dSSVRFX1NUQVJUCQkweDYKKyNkZWZp bmUgU1NJRl9JUE1JX01VTFRJUEFSVF9XUklURV9NSURETEUJMHg3CisjZGVmaW5lIFNTSUZfSVBN SV9NVUxUSVBBUlRfV1JJVEVfRU5ECQkweDgKKyNkZWZpbmUgU1NJRl9JUE1JX01VTFRJUEFSVF9S RUFEX1NUQVJUCQkweDMKKyNkZWZpbmUgU1NJRl9JUE1JX01VTFRJUEFSVF9SRUFEX01JRERMRQkJ MHg5CisKK3N0cnVjdCBzc2lmX21zZyB7CisJdTggbGVuOworCXU4IG5ldGZuX2x1bjsKKwl1OCBj bWQ7CisJdTggcGF5bG9hZFtNU0dfUEFZTE9BRF9MRU5fTUFYXTsKK30gX19wYWNrZWQ7CisKK3N0 YXRpYyBpbmxpbmUgdTMyIHNzaWZfbXNnX2xlbihzdHJ1Y3Qgc3NpZl9tc2cgKnNzaWZfbXNnKQor eworCXJldHVybiBzc2lmX21zZy0+bGVuICsgMTsKK30KKworI2RlZmluZSBTU0lGX0JNQ19CVVNZ ICAgMHgwMQorI2RlZmluZSBTU0lGX0JNQ19SRUFEWSAgMHgwMgorCitzdHJ1Y3Qgc3NpZl9ibWNf Y3R4IHsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50OworCXN0cnVjdCBtaXNjZGV2aWNlCW1p c2NkZXY7CisJdTgJCQlzbWJ1c19jbWQ7CisJc3RydWN0IHNzaWZfbXNnCQlyZXF1ZXN0OworCWJv b2wJCQlyZXF1ZXN0X2F2YWlsYWJsZTsKKwlzdHJ1Y3Qgc3NpZl9tc2cJCXJlc3BvbnNlOworCWJv b2wJCQlyZXNwb25zZV9pbl9wcm9ncmVzczsKKwkvKiBSZXNwb25zZSBidWZmZXIgZm9yIE11bHRp LXBhcnQgUmVhZCBUcmFuc2FjdGlvbiAqLworCXU4CQkJcmVzcG9uc2VfYnVmW01BWF9QQVlMT0FE X1BFUl9UUkFOU0FDVElPTl07CisJLyogRmxhZyB0byBpZGVudGlmeSBhIE11bHRpLXBhcnQgUmVh ZCBUcmFuc2FjdGlvbiAqLworCWJvb2wJCQlpc19zaW5nbGVwYXJ0X3JlYWQ7CisJdTgJCQluYnl0 ZXNfcHJvY2Vzc2VkOworCXU4CQkJcmVtYWluX2xlbjsKKwl1OAkJCXJlY3ZfbGVuOworCS8qIEJs b2NrIE51bWJlciBvZiBhIE11bHRpLXBhcnQgUmVhZCBUcmFuc2FjdGlvbiAqLworCXU4CQkJYmxv Y2tfbnVtOworCXNpemVfdAkJCW1zZ19pZHg7CisJZW51bSBpMmNfc2xhdmVfZXZlbnQJbGFzdF9l dmVudDsKKwlib29sCQkJcGVjX3N1cHBvcnQ7CisJc3BpbmxvY2tfdAkJbG9jazsKKwl3YWl0X3F1 ZXVlX2hlYWRfdAl3YWl0X3F1ZXVlOworCXN0cnVjdCBtdXRleAkJZmlsZV9tdXRleDsKKwl2b2lk ICgqc2V0X3NzaWZfYm1jX3N0YXR1cykoc3RydWN0IHNzaWZfYm1jX2N0eCAqc3NpZl9ibWMsIHVu c2lnbmVkIGludCBmbGFncyk7CisJdm9pZAkJCSpwcml2OworfTsKKworc3RhdGljIGlubGluZSBz dHJ1Y3Qgc3NpZl9ibWNfY3R4ICp0b19zc2lmX2JtYyhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwly ZXR1cm4gY29udGFpbmVyX29mKGZpbGUtPnByaXZhdGVfZGF0YSwgc3RydWN0IHNzaWZfYm1jX2N0 eCwgbWlzY2Rldik7Cit9CisKK3N0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZfYm1jX2FsbG9jKHN0 cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBzaXplb2ZfcHJpdik7CisKKyNlbmRpZiAvKiBf X1NTSUZfQk1DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWNf YXNwZWVkLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9zc2lmX2JtY19hc3BlZWQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAyYWJmY2E5MDk4NgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL3NzaWZfYm1jX2FzcGVlZC5jCkBAIC0wLDAgKzEsMTMy IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiBUaGUgZHJp dmVyIGZvciBCTUMgc2lkZSBvZiBBc3BlZWQgU1NJRiBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMjEsIEFtcGVyZSBDb21wdXRpbmcgTExDCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMK KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxp bnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisKKyNpbmNsdWRlICJzc2lm X2JtYy5oIgorCitzdHJ1Y3QgYXNwZWVkX2kyY19idXMgeworCXN0cnVjdCBpMmNfYWRhcHRlciAg ICAgICAgICAgICAgYWRhcDsKKwlzdHJ1Y3QgZGV2aWNlICAgICAgICAgICAgICAgICAgICpkZXY7 CisJdm9pZCBfX2lvbWVtICAgICAgICAgICAgICAgICAgICAqYmFzZTsKKwlzdHJ1Y3QgcmVzZXRf Y29udHJvbCAgICAgICAgICAgICpyc3Q7CisJLyogU3luY2hyb25pemVzIEkvTyBtZW0gYWNjZXNz IHRvIGJhc2UuICovCisJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgICAgICBsb2NrOworfTsK KworI2RlZmluZSBBU1BFRURfSTJDX0lOVFJfQ1RSTF9SRUcJMHgwYworI2RlZmluZSBBU1BFRURf STJDRF9JTlRSX1NMQVZFX01BVENICUJJVCg3KQorI2RlZmluZSBBU1BFRURfSTJDRF9JTlRSX1JY X0RPTkUJQklUKDIpCit2b2lkIGFzcGVlZF9pMmNfZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgYXNw ZWVkX2kyY19idXMgKmJ1cywgdW5zaWduZWQgbG9uZyBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcg Y3VycmVudF9tYXNrOworCisJY3VycmVudF9tYXNrID0gcmVhZGwoYnVzLT5iYXNlICsgQVNQRUVE X0kyQ19JTlRSX0NUUkxfUkVHKTsKKwl3cml0ZWwoY3VycmVudF9tYXNrIHwgbWFzaywgYnVzLT5i YXNlICsgQVNQRUVEX0kyQ19JTlRSX0NUUkxfUkVHKTsKK30KKwordm9pZCBhc3BlZWRfaTJjX2Rp c2FibGVfaW50ZXJydXB0KHN0cnVjdCBhc3BlZWRfaTJjX2J1cyAqYnVzLCB1bnNpZ25lZCBsb25n IG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBjdXJyZW50X21hc2s7CisKKwljdXJyZW50X21hc2sg PSByZWFkbChidXMtPmJhc2UgKyBBU1BFRURfSTJDX0lOVFJfQ1RSTF9SRUcpOworCXdyaXRlbChj dXJyZW50X21hc2sgJiB+bWFzaywgYnVzLT5iYXNlICsgQVNQRUVEX0kyQ19JTlRSX0NUUkxfUkVH KTsKK30KKwordm9pZCBhc3BlZWRfc2V0X3NzaWZfYm1jX3N0YXR1cyhzdHJ1Y3Qgc3NpZl9ibWNf Y3R4ICpzc2lmX2JtYywgdW5zaWduZWQgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgYXNwZWVkX2ky Y19idXMgKmJ1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYnVzID0gKHN0cnVjdCBhc3Bl ZWRfaTJjX2J1cyAqKXNzaWZfYm1jLT5wcml2OworCWlmICghYnVzKQorCQlyZXR1cm47CisKKwlz cGluX2xvY2tfaXJxc2F2ZSgmYnVzLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoc3RhdHVzICYgU1NJ Rl9CTUNfQlVTWSkgeworCQkvKiBJZ25vcmUgUlhfRE9ORSBhbmQgU0xBVkVfTUFUQ0ggd2hlbiBz bGF2ZSBidXN5IHByb2Nlc3NpbmcgKi8KKwkJYXNwZWVkX2kyY19kaXNhYmxlX2ludGVycnVwdChi dXMsIEFTUEVFRF9JMkNEX0lOVFJfUlhfRE9ORSk7CisJCWFzcGVlZF9pMmNfZGlzYWJsZV9pbnRl cnJ1cHQoYnVzLCBBU1BFRURfSTJDRF9JTlRSX1NMQVZFX01BVENIKTsKKwl9IGVsc2UgaWYgKHN0 YXR1cyAmIFNTSUZfQk1DX1JFQURZKSB7CisJCS8qIEVuYWJsZSBSWF9ET05FIGFuZCBTTEFWRV9N QVRDSCB3aGVuIHNsYXZlIHJlYWR5ICovCisJCWFzcGVlZF9pMmNfZW5hYmxlX2ludGVycnVwdChi dXMsIEFTUEVFRF9JMkNEX0lOVFJfUlhfRE9ORSk7CisJCWFzcGVlZF9pMmNfZW5hYmxlX2ludGVy cnVwdChidXMsIEFTUEVFRF9JMkNEX0lOVFJfU0xBVkVfTUFUQ0gpOworCX0KKworCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmJ1cy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHNzaWZf Ym1jX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2 aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYzsKKworCXNzaWZf Ym1jID0gc3NpZl9ibWNfYWxsb2MoY2xpZW50LCBzaXplb2Yoc3RydWN0IGFzcGVlZF9pMmNfYnVz KSk7CisJaWYgKElTX0VSUihzc2lmX2JtYykpCisJCXJldHVybiBQVFJfRVJSKHNzaWZfYm1jKTsK KworCXNzaWZfYm1jLT5wcml2ID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwor CXNzaWZfYm1jLT5zZXRfc3NpZl9ibWNfc3RhdHVzID0gYXNwZWVkX3NldF9zc2lmX2JtY19zdGF0 dXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc2lmX2JtY19yZW1vdmUoc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYyA9 IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaTJjX3NsYXZlX3VucmVnaXN0ZXIoY2xp ZW50KTsKKwltaXNjX2RlcmVnaXN0ZXIoJnNzaWZfYm1jLT5taXNjZGV2KTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzc2lmX2JtY19tYXRjaFtd ID0geworCXsgLmNvbXBhdGlibGUgPSAiYXNwZWVkLGFzdDI1MDAtc3NpZi1ibWMiIH0sCisJeyB9 LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNzaWZfYm1jX2lkW10g PSB7CisJeyBERVZJQ0VfTkFNRSwgMCB9LAorCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFC TEUoaTJjLCBzc2lmX2JtY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzc2lmX2Jt Y19kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9IERFVklDRV9OQU1FLAorCQku b2ZfbWF0Y2hfdGFibGUgPSBzc2lmX2JtY19tYXRjaCwKKwl9LAorCS5wcm9iZQkJPSBzc2lmX2Jt Y19wcm9iZSwKKwkucmVtb3ZlCQk9IHNzaWZfYm1jX3JlbW92ZSwKKwkuaWRfdGFibGUJPSBzc2lm X2JtY19pZCwKK307CisKK21vZHVsZV9pMmNfZHJpdmVyKHNzaWZfYm1jX2RyaXZlcik7CisKK01P RFVMRV9BVVRIT1IoIkNodW9uZyBUcmFuIDxjaHVvbmdAb3MuYW1wZXJlY29tcHV0aW5nLmNvbT4i KTsKK01PRFVMRV9BVVRIT1IoIlF1YW4gTmd1eWVuIDxxdWFuQG9zLmFtcGVyZWNvbXB1dGluZy5j b20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxpbnV4IGRldmljZSBkcml2ZXIgb2YgQXNwZWVk IEJNQyBJUE1JIFNTSUYgaW50ZXJmYWNlLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwot LSAKMi4yOC4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=