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 3C8E4C433DB for ; Mon, 29 Mar 2021 19:44:13 +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 28E38617C9 for ; Mon, 29 Mar 2021 19:44:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 28E38617C9 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=j7JXbBZ4ykopGZ06+ad4kMO96 D/ElsKHbesk8+U3+N0Vc9apP+/nTQgF3KOTHN6TGo/5kH7YWsVSc2DCrKFzWgYZKm8Od+jp9SSpVJ Ukv73/bWeXw0tJvrkDTUCiiG+XOOmfBuwgSK3fx9sWoFcaoZdIM6wS25m/izhral30XjGKDpyMVph ivZ5+gKeDYjtYb69TxuN6NpidvKgTm1WdXvpjLBwLfnepWnoz1YgN1YjoVYjQyoQ0sWfxKp+8VI0B 8MS2nqQoJIJqPrTGRP9qGINivgdjtn8IL9ygta235eA6yxaZDrJ8Ngb7qCcvy3nV0qvYf+zEDoY1b 3oyWRktfA==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lQxhO-001HCe-W8; Mon, 29 Mar 2021 19:37:19 +0000 Received: from mail-bn8nam12on2127.outbound.protection.outlook.com ([40.107.237.127] helo=NAM12-BN8-obe.outbound.protection.outlook.com) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lQqqu-000dpZ-KS for linux-arm-kernel@lists.infradead.org; Mon, 29 Mar 2021 12:18:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RnpvCOnuv8hChhFwCx38l1dbobSGtwrFHcL1AOhBEzXoV0fMKeR61Bt1pNuK5w+4OMrX3jEYV8qEY47XWF/PRVkIIXV9M/0U7cFdEb1EooDPLvaw6oSUWv9j3xdgejK/Si5Qh/lB8j29fz/mWWhgGOGK6ztxVBP/AtuqEvfIb2nDMMdmQJsXYNrky0aK6abXY+n9wVtPzC6ZUAwSE5S2B7HtdMviuus5XUaueuT1Tvmv8eWwo5KmJqaZWGw7+87hik8dvPV/mTwSJINCWbq93WaF+vfH41Bnu+C621cqcIgr6MCimOGzvcsVnAG8i9e7ldKbiA1o/qFcHV6mH45cpg== 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=IWinMc8CuQs8UaQHnl52DTr06JZr1zt63CHC4eaNRijLUQR9kVt+BpgeFEhb8ONa5OMYmiVfXuNzfynHZIfqbXxl33f6H0I1EasvBr2Jd4uljBNtbwRDLihArsoICQTWaNdP/GXxS8dbKAwfI40NyaJ5w658Bq8cEFzidzntBFlc0ZxxIw+gXqqa45B09llYeFHzJ17EbMVllr6zOUWqGTKKLsFrzZWL4l+42Qpt5Y52+tPoyT8DUZedjgepk/UG7Y1dqF+jAba9plc/mMt0hdZ2T1eXsscQC6PvE2KzP/hPpLDApvNHK/UPx8haAwCXsATiF3vtBZjL1hltVqM0lQ== 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=T0FETEOXm0UbUJ53d4MqR/bZN3hEtLWLjWYN3BZzkqqY+EYMiVhFX31o6o+lj3krNiXbZaA0JX8dIYlYYrXc5XGjMP0fmywK6R3s2F5R/E5puDyFn9wX/X0xVadMDcj9ZyQOTx8Qvo0nB8pVwSw4A4Zozh8zqDv9v9iDBHuX4Hk= 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 CO2PR01MB2198.prod.exchangelabs.com (2603:10b6:102:10::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3977.29; Mon, 29 Mar 2021 12:18:36 +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:18:35 +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: openbmc@lists.ozlabs.org, 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:17:58 +0700 Message-Id: <20210329121759.5644-3-quan@os.amperecomputing.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20210329121759.5644-1-quan@os.amperecomputing.com> References: <20210329121759.5644-1-quan@os.amperecomputing.com> X-Originating-IP: [118.69.219.201] X-ClientProxiedBy: HKAPR03CA0027.apcprd03.prod.outlook.com (2603:1096:203:c9::14) 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 HKAPR03CA0027.apcprd03.prod.outlook.com (2603:1096:203:c9::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3999.14 via Frontend Transport; Mon, 29 Mar 2021 12:18:31 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 65213569-e6b5-47e3-5b3a-08d8f2acc699 X-MS-TrafficTypeDiagnostic: CO2PR01MB2198: 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: PnKL6B5ACfK/Pcpf5SKfwkj5sU9lSdHmg2leRmYI9PTRrMj/NUME16dw41oXRgw4z1AeZv4o+/+pgLvrQMzBdOcCQ87JoaPR6IuMcRR/u7RSbgd6oMVKe+MCep+8Rkmus76i7KRxazLtLjjrFX24pweWY7NdH7Osp+/Q/D4OYuPwD7EPNb25G0UmRbrle53tCpknQZ4IiM9uEuNDa2CU1M5gym4IZQ7nTXMdoa/lsgTJeHVB8ga8yR6O9y9YFJXL2NJbPnLmPGmoCPnuOWGa2dwi5An2bxBHk1F1NKJqW4lhTPluV8YiRYWaoKhHv63blAV3oXlBZ6Oc5PmJUrJqkjHu4BgzrXDJrJ3IIzZxvYKtnkM5hKUifCCZ8gUqV28Z5wcsrh24XQfyCwZJlIpxZw3j31SBB+U6YB28Qs7vS3gvpgdJRAVjqenV0zCFLdD2vXxr/5apHeTmjJ8WXdAd7jciFXlyi9ctqUTLXAmtNhJYX9ZOmwPpHS9VOfzPGS+Agw9V7YaMTHTt+ODOqpdblRy5eIczcOq//5ix8kTG3f8W+7GZd2XXUswlIpGrS7KmEuQap4zTBLe3ihtRaFGsLykEVq/gVMHtFsAp0+yakANAbLjfCBzy5p+BCYtVaJGXsmVr+ktTuV/YYueA3uFpuVhSWqS55PzVTqYyXr7KzFY7xCvN2zp7/5AYz8SuKK3WyRVRgzoTrdHEGeh0nPratKB4+RFS5PLKi+lAnlNcnQIPB1MZDrpsrh75YRx+5CO2CFc837z0Vpgps3DcCPN3dw== 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)(39840400004)(366004)(136003)(376002)(346002)(66476007)(54906003)(52116002)(38100700001)(110136005)(66946007)(6506007)(316002)(86362001)(478600001)(107886003)(30864003)(8936002)(186003)(2616005)(66556008)(16526019)(4326008)(6666004)(26005)(8676002)(956004)(1076003)(7416002)(5660300002)(2906002)(83380400001)(921005)(6486002)(6512007)(2004002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?UENrbUJTNHBlM0MwdWhacms1SU90aFp6bkJoYzB5MDJXWlpmd2gzUTd4ZUZx?= =?utf-8?B?ZjN5S3dFcUZjcytvWCt4c0JpbFZibEdLbis4dkx3RGhWMHdVTjBtSGwwTUQ2?= =?utf-8?B?SC9RVkw3dVM2V1ZHMkw0akt4cktUdXpxUmNMbDNVUkRvbU4vOFBkNkp4WWs1?= =?utf-8?B?U1ZXTlJYSnplaWRKSGhsZU14SGxyZVpUdGphbUxkSXFnNW9Pd1YvUWVRMlNu?= =?utf-8?B?c0JjZC94ZDE5U2VSbDRSZmhUVlMrWGVnUXRFbkp0T3RVUlpGYWxzSmZQa243?= =?utf-8?B?cURCQ1l1bDUyVjY5SUNtRlMyN1grWUlVeDhXNUQ0cmZ3YVJuODJna2Y5cmxy?= =?utf-8?B?bjNoY2RmRmhYZzk5U3c5czExOGlGZ2xwZ2c2UjJMdDlHeG16eXVCbkJlTTI1?= =?utf-8?B?RWpDaDBZSGhtTUcvSVZCY1RlYXRwZXRUZUZCQTRmOW91WnpKVmRRWGFGOEtm?= =?utf-8?B?eE05aHB5R25HK3lZQ3JtM1JyN0VpRFZlcnpXRVNzb0VJUlNlaCtqYVVvbVZp?= =?utf-8?B?ekZrN1dUMEt0SHpOdE9ZWU9MVHNPY0d4WGErdFBEYlQ1c0FncFVoUGlJdHV2?= =?utf-8?B?UlVMVHEzNU5IcVRKNjBVMWJENy9uRXp5UE9CQlI3aGQwVzlEOWwyT3lsZmUy?= =?utf-8?B?a1lXaG5IZGtmdnFNYnRIZEhrUVRGU2FVb21uYkFrdjBNYUNRekNDSXpFQ0x4?= =?utf-8?B?KzFBQlVSVFgxQk12ekpEb1AycW1NaVlldWJ6aUYzUHpzeWVkcVhxNHBRNzBS?= =?utf-8?B?R3NYYlo3U3B3UW13ZGpBR1RpQ2pLNUpSNUxTYmNCR2FYbVJSTXZpeUJFUzF5?= =?utf-8?B?RUlSVEhWR3I5ZDVsR3RKWUxrOTJ0c2tacTVyN2NObm9LbWV1UGJpdlRyRysz?= =?utf-8?B?MGJQTzJEdkp2Q0YzMlowK2o1TkduQlY4OEplbHZ5c2p5ejJ1bEFWSjJFclFY?= =?utf-8?B?ejUxWWF5L2lmd050bVZiTlhSTE9tY1ZHVTBuQVJtSlZrZXJwRXdRdndORHJU?= =?utf-8?B?TmdQQVNRbWtjd3FFYlVWRUZocnZzbXBkN0Q2bkRNaXpDTENrWFVHRDFwb2Qy?= =?utf-8?B?S2ZrbGtadnZZWlczSmo0T3RzU0txNTJJajZkdi9HTVBEUld2VWwvb0F4ZmhX?= =?utf-8?B?Q05oWUMrTXlzajRrM1JGQWg1ZkFwU1Fna0lJLzRDZWxqK3lPTDk2YUFwdHR1?= =?utf-8?B?b2pqQzZWbXBaMkFncHhzcEtvZ2pZT0tVVEZ4d2lNS1BBUjRQanJxK29WUEg2?= =?utf-8?B?Wk10ang0eFJVdkFMNXJmNDkvWHM0K0xSa2FMeHlCZ0ZtS1U3VUxlQkZSUklz?= =?utf-8?B?NjVjRW9VakFHUnliaUNyK3NKMjZ5dm40V1lNbVozNHNNUm1maTllRStNMTVZ?= =?utf-8?B?VWlDUE1NeEliZW9IYld4N0M0U1FDQmp4K2I1RkhKdXcrR0pEc2E1V1Q1SUpr?= =?utf-8?B?Y05tN1M2UnBsU3Q0OVArN2UwTHFaejBXRVYrcHNGT293OGdSODNwVGdNVzI4?= =?utf-8?B?UFFCbHdWUHJ6eTNXSHBLRUFyZWJVZlFsSEpJZXUyRXY2WnBXVHNWUDcxSU9v?= =?utf-8?B?a1ZJSXBad01tYnNFNjNqam04N2lBOXVpVDl2M2pPVW1ZRy9CamtFam85NnJq?= =?utf-8?B?QytIcVNkZ1h3QWpjZU1pMDIycWZ0SUx2N3VFamg0WE9KUTNQVDZmTTFXVXcy?= =?utf-8?B?d08xNDRSd3lxZzV1WDlXTkFHMER2V1R4SzlMRlVvK0FZZ0YvOHFxbXIxWTYr?= =?utf-8?Q?z7/ERgkHKexFKRIVq0kCP9bwY8Iq2iH0ZoL+I4o?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 65213569-e6b5-47e3-5b3a-08d8f2acc699 X-MS-Exchange-CrossTenant-AuthSource: MW2PR0102MB3482.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2021 12:18:35.8407 (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: +OwnOBrE/2VDJy3e8/ersuCkhUdzNgL+zkDVhXJ8T27vuTYH7gB0efSyp3MkqIhIDaTFVgzhHQeBKi04nWVhR3NXnkF+9Ud8G25VL6ao9UQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR01MB2198 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210329_131840_987151_65578AEE X-CRM114-Status: GOOD ( 23.53 ) 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=