Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6F869C433EF for ; Tue, 7 Dec 2021 18:27:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240231AbhLGSbN (ORCPT ); Tue, 7 Dec 2021 13:31:13 -0500 Received: from mga14.intel.com ([192.55.52.115]:29680 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240554AbhLGSbE (ORCPT ); Tue, 7 Dec 2021 13:31:04 -0500 X-IronPort-AV: E=McAfee;i="6200,9189,10190"; a="237881069" X-IronPort-AV: E=Sophos;i="5.87,295,1631602800"; d="scan'208";a="237881069" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Dec 2021 10:09:39 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,295,1631602800"; d="scan'208";a="542895662" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga001.jf.intel.com with ESMTP; 07 Dec 2021 10:09:39 -0800 Received: from orsmsx605.amr.corp.intel.com (10.22.229.18) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Tue, 7 Dec 2021 10:09:38 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx605.amr.corp.intel.com (10.22.229.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Tue, 7 Dec 2021 10:09:38 -0800 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (104.47.56.40) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Tue, 7 Dec 2021 10:09:38 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B5WhQHLYYzDbs7xcyVKDhLEhNGvVlwE1meOi7yp0Hrzy+La/Ytbshu0V2pmhv75azQcQOZrU50WtehsYzIt6l7C0zD45sXDvsXeMeaXnujVeZXFicKOBKZjcpuM+uMNC4MkkAfu1bHaCUWzDv33Px3MbBRJln1CL2wXMzOwIJcsyMYdnAw5DAdL66pUjmdXoRdQs8dAA6VEbChorMUyd0gDbvkXC+8W/zJ3ooQ8VJeRKZGcI7l6e21xq+OTRLBBB64MI9WRPMinR2mdl5Uh4qubuf+TwIjrJP/Xb/DlmJpav62VatQjP67gcoECubTLhPr1hwIUHNWhFtKfFZh8d1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/dN6peN4FynVvqz1BOstswOXQB1YsZClFGt+XEgh/I0=; b=KtYTkX9NYFMsXpRjWF2o+M84i/vLw+k68qOB3sgjjOWofWoIQ+ByrZp1mzoIon4ABdoE8rcF3kXWr9HJYBGgsawluJLHTQQmiGQWoYbrCqwIfNBbvp0NgGzBF/zmrtYMB5J/D0pgXUy3833CqMbVpmjQUXty6Cqs26aHasOSTEbUmEkQZaUVKv6RPtjpE4mcoPbdjr9Pme3sPliV+x7uQumF3JUjCtnojNY891DznB3lgovTCifINhRJYp2LtcCJC2AI332XkUVODfbsWna1UeshbCmPfwDkU+BZejKoPGXuSG9kwPviwCmyF/iIL2YG2GIQrweXGn9GEHMYHl4jxQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/dN6peN4FynVvqz1BOstswOXQB1YsZClFGt+XEgh/I0=; b=E9qTCsKGZlyTJpxTZwDUFfyIqueLjicyWyLFosRAKJ0YiQcyPCLJD8Qnvs8btb1RvxdMm+zVb1Hdl06tDd7jfc01HUs2jn55zzKD9YiP+5Ul7OC9D91SZU76qoe9yDW1YIiJFTWa0/VCWSodYeg5AOguALX2n119v0ALdPsHmt4= Received: from MW4PR11MB5823.namprd11.prod.outlook.com (2603:10b6:303:186::12) by MW5PR11MB5906.namprd11.prod.outlook.com (2603:10b6:303:1a0::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.20; Tue, 7 Dec 2021 18:09:36 +0000 Received: from MW4PR11MB5823.namprd11.prod.outlook.com ([fe80::1d1b:2541:5263:68de]) by MW4PR11MB5823.namprd11.prod.outlook.com ([fe80::1d1b:2541:5263:68de%5]) with mapi id 15.20.4755.022; Tue, 7 Dec 2021 18:09:36 +0000 From: "Winiarska, Iwona" To: "billy_tsai@aspeedtech.com" , "gregkh@linuxfoundation.org" , "linux-kernel@vger.kernel.org" , "openbmc@lists.ozlabs.org" CC: "corbet@lwn.net" , "jae.hyun.yoo@linux.intel.com" , "linux-hwmon@vger.kernel.org" , "andrew@aj.id.au" , "Hansen, Dave" , "Luck, Tony" , "jdelvare@suse.com" , "olof@lixom.net" , "rdunlap@infradead.org" , "devicetree@vger.kernel.org" , "linux-aspeed@lists.ozlabs.org" , "linux@roeck-us.net" , "arnd@arndb.de" , "linux-doc@vger.kernel.org" , "robh+dt@kernel.org" , "zweiss@equinix.com" , "bp@alien8.de" , "linux-arm-kernel@lists.infradead.org" , "pierre-louis.bossart@linux.intel.com" , "andriy.shevchenko@linux.intel.com" , "Williams, Dan J" Subject: Re: [PATCH v4 05/13] peci: Add peci-aspeed controller driver Thread-Topic: [PATCH v4 05/13] peci: Add peci-aspeed controller driver Thread-Index: AQHX4HPaxGefPohjA0+Yy1Npn3kxdawlAxSAgAJnMQA= Date: Tue, 7 Dec 2021 18:09:36 +0000 Message-ID: <670e4bd2c9d8dc91d1c9fca2b050915942b2a9b2.camel@intel.com> References: <20211123140706.2945700-1-iwona.winiarska@intel.com> <20211123140706.2945700-6-iwona.winiarska@intel.com> <71D27F36-8BB7-4C30-99C5-CCA4F9A30945@aspeedtech.com> In-Reply-To: <71D27F36-8BB7-4C30-99C5-CCA4F9A30945@aspeedtech.com> Accept-Language: en-US, pl-PL Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.40.4 (3.40.4-2.fc34) authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3fb2ce63-8629-4ad7-8795-08d9b9acba75 x-ms-traffictypediagnostic: MW5PR11MB5906:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr,ExtFwd x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: SWZ/FuEFEl3TvGqtjJEOOyfjlqj2I3vtA7vfxTyQW9/exuziTSoE5QozT6lPg97CCukz+YH2k01g9rJ39mRsb57NzrYg0H/yi9ntOyDfincOKGLuRetW4jnwIYibcGGrLxSipRGyQm31XgSngCSAimFkI8ZL7CJRloxYVKviq7VgXkzBQtlwlh7Iea2dvQ5OrJ3RewYxQLNGy5Um8B7qpMa0Z0V2OyPsEeDUPjIcAL6yDg7aI6NBTtC50gl2AVSRbQF3CEfElq1OfO0XVRU2wCpDOWBcvMny7co8lAyUE5QTeGZq803QjHrNPPWWJaEncroNDhcZUmp6sh6qQRCfA7mcnsjUyGXx5zqbHJVINj58kGFBypwZBaQ13XFv6FdwATjuY4w3EFTmx3rpHO2ZTJndY+UY57NwwAG00wkiqWu/KBkdit3MDbxbjxHKcYKofAmdUuzm/XklLCW9AG/9bci3qNIe03GKdqDHc01qws0jznWphwC2bf4j2TeSZu2NZccx2aQbp8SsX9l2N0idX/+G0XAOJ/2R3lZ/AaK9Ya4SDNEu+bN7zxdyTAPEYtZITe0d696ZpwoQQ0ZwhT4upHy3WDLGYCpLHyU+mgnburJ0UvGjRb+s9pX2PKU0W4Ni4CK583Zok7R5m+5c49UP50mY3zTEb9DAEcsXPrCIcrceL1CjvQasF8Vf0MTtaK9FCspxXq5sREVYR6BZ1rngYg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB5823.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(64756008)(66476007)(66556008)(38070700005)(71200400001)(76116006)(2906002)(66946007)(66446008)(7416002)(91956017)(53546011)(6506007)(6486002)(4326008)(316002)(6512007)(122000001)(186003)(26005)(508600001)(86362001)(8936002)(83380400001)(38100700002)(2616005)(110136005)(5660300002)(36756003)(54906003)(8676002)(82960400001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?djI4Y0pzMjZuSWxLNnVYb0x0Q2RwRnJIcEg5Y2huRjFLZFhUL1F1eGtTK2ww?= =?utf-8?B?bmYvdGtOSlZtMjhlY2RWMGZXdnZRQndZcW45TnFPcWZRVjFTbHkxbjc1aks3?= =?utf-8?B?Z05KVHB1b1VmcC9qRVBQM3RUekUwQnZPTzkyeDMxR2lHcFJiMFo2a0VKZ1BX?= =?utf-8?B?RXAxSHVrRGJHeksrU1FxWlpiZ0tFL3podmwzSGVHakQ4cFpSRE1mQkMwemJJ?= =?utf-8?B?WjcweTFNV000VkQwOG5xcDJxMmVtV0dkeXk5WkZxU2F6bnIzcm1RYnFOZkRV?= =?utf-8?B?cVV2RFdvNHE0YTlKRG8wV3NoelRUSDdVTGIvcGZnQUo0SitUdmlRQXpzTG5l?= =?utf-8?B?SHpyZFdhZ0s2bGFPNkZEbVJRQisrekhoM0hOTTRObkp3QTkxUVdHQTlBWW9F?= =?utf-8?B?TllhSjFsd0U5SzY3UHYwQ3pSeHpNRXBpV3VvWm9jcVBFRnMvTWliODVUSDhX?= =?utf-8?B?MDI3QWNZeVFITXJwT1phMUxnK0wvc1VoeUsrem9HWmNyNzVlRzJMZ2hKUS9i?= =?utf-8?B?YVlmYjRiQnlxTTR1T2pSRS91elNLZ0JXVUhqRUlSdUlUMWRZNjJ2aXk0dXlL?= =?utf-8?B?U1VvN2QzL1QrcGlUV2MzOU5MTEZreFVUbGhjSGRkN2l2UDByTTFDdTdNOHRo?= =?utf-8?B?c0FadkllU2VwQUZJdlhtMFJTcDVpQXV0OHdXM3IzV3pvVUs1WVhDZVZIengz?= =?utf-8?B?UlJXUUovTVkxc0dxNlV4ekZIaXFvcHN0ZjRVelZzaDJqUTdkQlA1ei9kOVhp?= =?utf-8?B?Q0hkekU4aG1HZ2g2WmM5ejlMeXNQOTBWWG94U3pYdEJ5WkZpMkhBTitDNzcy?= =?utf-8?B?VldEYTRFUGhuOExNRjY2SE9aSWpZSzRDL01OWWpZa1E5YmN0blNWa2Q1R2w5?= =?utf-8?B?QXZTbzBEVnorcExucy9pWEVrNTdtcUNuSUE2UnRuRmpXMVMrUnhRM01uMVRP?= =?utf-8?B?MUNLNENZelpTVWdGSjdyYnV6MmFYb05Jc2lqZXBsQzRnMjU4VG9iRTRoWVQ3?= =?utf-8?B?WnBkcWJHeE5pOUEyL011QzMvSWwxU0VYUXhhZDgycDErRFZGc1ZrSkpkMFBK?= =?utf-8?B?UVZvbnFTdmtSa05GMmlpRmFIa1Jzd1RUUHVhaXloQjRBcUt5VER5ZlAyUnJ6?= =?utf-8?B?QVoxT1RKelNoc3U4UzA3WHpxWUlVQjZmZWRYbjNuODdzUklHVFd3ZlBocVZu?= =?utf-8?B?VzUwcFhXMk9MMnJRVFZJREQ3QWRjaFhyWXRraTE0cW9LL1EyYnZxMmYzUnlm?= =?utf-8?B?UzJDd05UTXErS2RDTFBTbGwwZ0ZyNGNLdlhKVlowZ21QQXFTNStlVVV1VG9k?= =?utf-8?B?R2FZRUt1aHZUNTRUOG85ZmhZWkwwc0lqVGlUeWJZTkplZksreER2VG1lZExo?= =?utf-8?B?TlF0OUcyU2RpMlZBdFFnd2ZnUXlHSmRMK1d6TmN6bFpoZjFyR1kvWkRUTmNj?= =?utf-8?B?VE13Y3M1Q2toZ05jRXJNOHRhSE1nK3NHUzNmajJ1d3JzczYvOXpYOGlhNGJz?= =?utf-8?B?YlN2SzJ5anF2QVM1NkYxRVFjaWM4bHVWd3hnUHpyRmlPbWpHTGVDMGtvNnhI?= =?utf-8?B?ZGdQOUVUWUdybVFFTzlrTU5aSWR4VmppekhxSUdEV1VRMzFoTkhtMCtzV2c4?= =?utf-8?B?c2FBTENRZGZRcnJuRTN6SkU5blo5ZjVjN2h1U29Vc3l6NE1pb1RWNFFnL1lx?= =?utf-8?B?eklYdFV6RndjNHZIajA2cnQwM3YrMFlaSWkvQllrazhmQ3BVRC9iWHVFYlY1?= =?utf-8?B?WFZXQnRkOHhXWG5vZXRQdExCNjUrZnhJZFdFZ2o5KzN2K0doUVpFeGQ5VC94?= =?utf-8?B?L3RFSk10SHJQbDlqeUQvaXRicVVJTXFFTVVRbStnOGhvekFkd09oOVk0NU4y?= =?utf-8?B?R3lNRnk2cEx2YTJad05TRlRJeHNpdDBiMW9qZVg3MitaNzMwNVNXOVk1K091?= =?utf-8?B?Yy9pWGJUS0loN1FRVWJXT0ZIR0syRUVjTldMWVdyNTU0MHFlM2dhTTZMcmRr?= =?utf-8?B?c25CSUF0WldKQis0RmduRXdHNTlhMUpxTFdLeFUzeVBNUmo0b1pTUnptM2Mv?= =?utf-8?B?Y3g3dEJCQVRzcmt2K0dkUGEwVGUrdHZyY01zRktvQ2VrdkdxUGFuQThXdU1L?= =?utf-8?B?cFY5Z1BKbUg4Q0R5d2NGYkN3STZnWW9XUkFXeHBOK2oyVGx0R1FvcjhIVllO?= =?utf-8?B?NzFBWGlJZlpLZzNmU3dxOG04QlpGRzk1OWdmcHlYd3RYRGxWQWhlVTRVSHVX?= =?utf-8?Q?GwgzE3a6vMpGNTafvTDRlJ9rtpXHQgav0PGQmpINzQ=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB5823.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3fb2ce63-8629-4ad7-8795-08d9b9acba75 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Dec 2021 18:09:36.1691 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: aPxoaQIQwzC4iZ0KY3OacBsWPNXlpeJfnVkdTMsyKZTwuXVo5Rol08/caUl5NutJ4w+RFGVvpeJtygrUSUiEtzK9AUNBGumWW4lvx7L4MbA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR11MB5906 X-OriginatorOrg: intel.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gTW9uLCAyMDIxLTEyLTA2IGF0IDA1OjI3ICswMDAwLCBCaWxseSBUc2FpIHdyb3RlOgo+IEhp LAo+IAo+IEFmdGVyIHJldmlld2luZyB0aGUgcGF0Y2gsIEkgaGF2ZSBzb21lIHN1Z2dlc3Rpb25z IGZvciB5b3UuIFBsZWFzZSBzZWUgdGhlCj4gcmVwbHkgaW5saW5lLgo+IAo+IE9uIDIwMjEvMTEv MjMsIDEwOjExIFBNLCAib3BlbmJtYyBvbiBiZWhhbGYgb2YgSXdvbmEgV2luaWFyc2thIgo+IDxv cGVuYm1jLWJvdW5jZXMrYmlsbHlfdHNhaT1hc3BlZWR0ZWNoLmNvbUBsaXN0cy5vemxhYnMub3Jn wqBvbiBiZWhhbGYgb2YKPiBpd29uYS53aW5pYXJza2FAaW50ZWwuY29tPiB3cm90ZToKPiAKPiDC oMKgwqAgPsKgwqAgRnJvbTogSmFlIEh5dW4gWW9vIDxqYWUuaHl1bi55b29AbGludXguaW50ZWwu Y29tPgo+IEFkZCB0aGUgZGVmaW5lIGZvciB0aGUgYnVzIGZyZXF1ZW5jeQo+IMKgwqDCoMKgwqDC oMKgICNkZWZpbmUgQVNQRUVEX1BFQ0lfQlVTX0ZSRVFVRU5DWV9NSU7CoMKgwqDCoMKgwqDCoMKg wqDCoMKgMjAwMAo+IMKgwqDCoMKgwqDCoMKgICNkZWZpbmUgQVNQRUVEX1BFQ0lfQlVTX0ZSRVFV RU5DWV9ERUZBVUxUwqDCoMKgwqDCoMKgwqAyMDAwCj4gwqDCoMKgwqDCoMKgwqAgI2RlZmluZSBB U1BFRURfUEVDSV9CVVNfRlJFUVVFTkNZX01BWMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAxMDAwMDAw Cj4gCj4gwqDCoCA+wqDCoCArc3RydWN0IGFzcGVlZF9wZWNpIHsKPiDCoMKgwqAgPsKgwqAgK8Kg wqDCoMKgwqDCoMKgc3RydWN0IHBlY2lfY29udHJvbGxlciAqY29udHJvbGxlcjsKPiDCoMKgwqAg PsKgwqAgK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2Owo+IMKgwqDCoCA+wqDCoCAr wqDCoMKgwqDCoMKgwqB2b2lkIF9faW9tZW0gKmJhc2U7Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBjbGsgKmNsazsKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IHJlc2V0X2NvbnRyb2wgKnJzdDsKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgaW50 IGlycTsKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgc3BpbmxvY2tfdCBsb2NrOyAvKiB0 byBzeW5jIGNvbXBsZXRpb24gc3RhdHVzIGhhbmRsaW5nICovCj4gwqDCoMKgID7CoMKgICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBjb21wbGV0aW9uIHhmZXJfY29tcGxldGU7Cj4gwqDCoMKgID7CoMKg ICvCoMKgwqDCoMKgwqDCoHUzMiBzdGF0dXM7Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDC oHUzMiBjbWRfdGltZW91dF9tczsKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgdTMyIG1z Z190aW1pbmc7Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoHUzMiBhZGRyX3RpbWluZzsK PiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgdTMyIHJkX3NhbXBsaW5nX3BvaW50Owo+IMKg wqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqB1MzIgY2xrX2RpdjsKPiAKPiBBZGQgdGhlIHBhcmVt ZXRlciB0byBzdG9yZSB0aGUgYnVzX2ZyZXEgZnJvbSB0aGUgZHRzIHByb3BlcnR5Cj4gwqDCoMKg wqDCoMKgwqAgdTMyIGJ1c19mcmVxOwo+IAo+IMKgwqDCoCA+wqDCoCArfTsKPiDCoMKgwqAgPsKg wqAgKwo+IMKgwqDCoCA+wqDCoCArc3RhdGljIHZvaWQgYXNwZWVkX3BlY2lfaW5pdF9yZWdzKHN0 cnVjdCBhc3BlZWRfcGVjaSAqcHJpdikKPiDCoMKgwqAgPsKgwqAgK3sKPiDCoMKgwqAgPsKgwqAg K8KgwqDCoMKgwqDCoMKgdTMyIHZhbDsKPiDCoMKgwqAgPsKgwqAgKwo+IMKgwqDCoCA+wqDCoCAr wqDCoMKgwqDCoMKgwqB2YWwgPSBGSUVMRF9QUkVQKEFTUEVFRF9QRUNJX0NUUkxfQ0xLX0RJVl9N QVNLLAo+IEFTUEVFRF9QRUNJX0NMS19ESVZfREVGQVVMVCk7Cj4gwqDCoMKgID7CoMKgICvCoMKg wqDCoMKgwqDCoHZhbCB8PSBBU1BFRURfUEVDSV9DVFJMX1BFQ0lfQ0xLX0VOOwo+IMKgwqDCoCA+ wqDCoCArwqDCoMKgwqDCoMKgwqB3cml0ZWwodmFsLCBwcml2LT5iYXNlICsgQVNQRUVEX1BFQ0lf Q1RSTCk7Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoC8qCj4gwqDCoMKgID7CoMKgICvC oMKgwqDCoMKgwqDCoCAqIFRpbWluZyBuZWdvdGlhdGlvbiBwZXJpb2Qgc2V0dGluZy4KPiDCoMKg wqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgICogVGhlIHVuaXQgb2YgdGhlIHByb2dyYW1tZWQgdmFs dWUgaXMgNCB0aW1lcyBvZiBQRUNJIGNsb2NrCj4gcGVyaW9kLgo+IMKgwqDCoCA+wqDCoCArwqDC oMKgwqDCoMKgwqAgKi8KPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgdmFsID0gRklFTERf UFJFUChBU1BFRURfUEVDSV9UX05FR09fTVNHX01BU0ssIHByaXYtCj4gPm1zZ190aW1pbmcpOwo+ IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqB2YWwgfD0gRklFTERfUFJFUChBU1BFRURfUEVD SV9UX05FR09fQUREUl9NQVNLLCBwcml2LQo+ID5hZGRyX3RpbWluZyk7Cj4gwqDCoMKgID7CoMKg ICvCoMKgwqDCoMKgwqDCoHdyaXRlbCh2YWwsIHByaXYtPmJhc2UgKyBBU1BFRURfUEVDSV9USU1J TkdfTkVHT1RJQVRJT04pOwo+IMKgwqDCoCA+wqDCoCArCj4gwqDCoMKgID7CoMKgICvCoMKgwqDC oMKgwqDCoC8qIENsZWFyIGludGVycnVwdHMgKi8KPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDC oMKgdmFsID0gcmVhZGwocHJpdi0+YmFzZSArIEFTUEVFRF9QRUNJX0lOVF9TVFMpIHwKPiBBU1BF RURfUEVDSV9JTlRfTUFTSzsKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgd3JpdGVsKHZh bCwgcHJpdi0+YmFzZSArIEFTUEVFRF9QRUNJX0lOVF9TVFMpOwo+IMKgwqDCoCA+wqDCoCArCj4g wqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoC8qIFNldCB0aW1pbmcgbmVnb3RpYXRpb24gbW9k ZSBhbmQgZW5hYmxlIGludGVycnVwdHMgKi8KPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKg dmFsID0gRklFTERfUFJFUChBU1BFRURfUEVDSV9USU1JTkdfTkVHT19TRUxfTUFTSywKPiBBU1BF RURfUEVDSV8xU1RfQklUX09GX0FERFJfTkVHTyk7Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKg wqDCoHZhbCB8PSBBU1BFRURfUEVDSV9JTlRfTUFTSzsKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKg wqDCoMKgd3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIEFTUEVFRF9QRUNJX0lOVF9DVFJMKTsKPiDC oMKgwqAgPsKgwqAgKwo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqB2YWwgPSBGSUVMRF9Q UkVQKEFTUEVFRF9QRUNJX0NUUkxfU0FNUExJTkdfTUFTSywgcHJpdi0KPiA+cmRfc2FtcGxpbmdf cG9pbnQpOwo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqB2YWwgfD0gRklFTERfUFJFUChB U1BFRURfUEVDSV9DVFJMX0NMS19ESVZfTUFTSywgcHJpdi0KPiA+Y2xrX2Rpdik7Cj4gwqDCoMKg ID7CoMKgICvCoMKgwqDCoMKgwqDCoHZhbCB8PSBBU1BFRURfUEVDSV9DVFJMX1BFQ0lfRU47Cj4g wqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoHZhbCB8PSBBU1BFRURfUEVDSV9DVFJMX1BFQ0lf Q0xLX0VOOwo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqB3cml0ZWwodmFsLCBwcml2LT5i YXNlICsgQVNQRUVEX1BFQ0lfQ1RSTCk7Cj4gwqDCoMKgID7CoMKgICt9Cj4gwqDCoMKgID7CoMKg ICsKPiDCoMKgwqAgPsKgwqAgK3N0YXRpYyBpbmxpbmUgaW50IGFzcGVlZF9wZWNpX2NoZWNrX2lk bGUoc3RydWN0IGFzcGVlZF9wZWNpICpwcml2KQo+IMKgwqDCoCA+wqDCoCArewo+IMKgwqDCoCA+ wqDCoCArwqDCoMKgwqDCoMKgwqB1MzIgY21kX3N0cyA9IHJlYWRsKHByaXYtPmJhc2UgKyBBU1BF RURfUEVDSV9DTUQpOwo+IMKgwqDCoCA+wqDCoCArCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKg wqDCoGlmIChGSUVMRF9HRVQoQVNQRUVEX1BFQ0lfQ01EX1NUU19NQVNLLCBjbWRfc3RzKSA9PQo+ IEFTUEVFRF9QRUNJX0NNRF9TVFNfQUREUl9UX05FR08pCj4gwqDCoMKgID7CoMKgICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhc3BlZWRfcGVjaV9pbml0X3JlZ3MocHJpdik7Cj4gCj4g QXMgbG9uZyBhcyB0aGUgc3RhdGUgaXMgbm90IGlkbGUsIHRoZSBjb250cm9sbGVyIG5lZWQgdG8g cmVpbml0aWFsaXplIHRoZSBQRUNJCj4gcmVnaXN0ZXIgZm9yIHNvbHZpbmcgdGhlIFBFQ0kgY29u dHJvbGxlciBoYW5nLgo+IEJlZm9yZSBhc3QyNjAwQTMsIHRoZSBjb250cm9sbGVyIHNob3VsZCBh c3NlcnQvZGUtYXNzZXJ0IHRoZSByZXNldCBmb3Igc29sdmluZwo+IHRoZSBoYW5nIGlzc3VlLgo+ IEZvciBiYWNrd2FyZCBjb21wYXRpYmxlLCBJIHN1Z2dlc3QgdG8gYWRkIHRoZSByZXNldCBhc3Nl cnQvZGUtYXNzZXJ0IGluIHRoaXMKPiBwbGFjZS4KPiDCoMKgwqDCoMKgwqDCoCBpZiAoRklFTERf R0VUKEFTUEVFRF9QRUNJX0NNRF9TVFNfTUFTSywgY21kX3N0cykpIHsKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlc2V0X2NvbnRyb2xfYXNzZXJ0KHBy aXYtPnJzdCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtPnJzdCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3BlZWRfcGVjaV9pbml0X3JlZ3MocHJpdik7 Cj4gwqDCoMKgwqDCoMKgwqAgfQoKQWNrLgoKPiAKCiguLi4pCgo+IMKgwqDCoCA+wqDCoCArc3Rh dGljIHZvaWQgYXNwZWVkX3BlY2lfcHJvcGVydHlfc2V0dXAoc3RydWN0IGFzcGVlZF9wZWNpICpw cml2KQo+IMKgwqDCoCA+wqDCoCArewo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqBhc3Bl ZWRfcGVjaV9wcm9wZXJ0eV9zYW5pdGl6ZShwcml2LT5kZXYsICJhc3BlZWQsY2xvY2stCj4gZGl2 aWRlciIsCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCwgQVNQRUVEX1BFQ0lfQ0xL X0RJVl9NQVgsCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVNQRUVEX1BFQ0lfQ0xL X0RJVl9ERUZBVUxULAo+ICZwcml2LT5jbGtfZGl2KTsKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKg wqDCoMKgYXNwZWVkX3BlY2lfcHJvcGVydHlfc2FuaXRpemUocHJpdi0+ZGV2LCAiYXNwZWVkLG1z Zy10aW1pbmciLAo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsIEFTUEVFRF9QRUNJ X01TR19USU1JTkdfTUFYLAo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFTUEVFRF9Q RUNJX01TR19USU1JTkdfREVGQVVMVCwKPiAmcHJpdi0+bXNnX3RpbWluZyk7Cj4gwqDCoMKgID7C oMKgICvCoMKgwqDCoMKgwqDCoGFzcGVlZF9wZWNpX3Byb3BlcnR5X3Nhbml0aXplKHByaXYtPmRl diwgImFzcGVlZCxhZGRyLXRpbWluZyIsCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg MCwgQVNQRUVEX1BFQ0lfQUREUl9USU1JTkdfTUFYLAo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEFTUEVFRF9QRUNJX0FERFJfVElNSU5HX0RFRkFVTFQsCj4gJnByaXYtPmFkZHJfdGlt aW5nKTsKPiAKPiBVc2UgdGhlIGJ1cy1mcmVxdWVuY3kgdG8gcmVwbGFjZSB0aGUgcHJvcGVydHkg YWJvdmU6Cj4gwqDCoMKgwqDCoMKgwqAgYXNwZWVkX3BlY2lfcHJvcGVydHlfc2FuaXRpemUocHJp di0+ZGV2LCAiYnVzLWZyZXF1ZW5jeSIsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFTUEVFRF9QRUNJX0JVU19GUkVRVUVO Q1lfTUlOLAo+IEFTUEVFRF9QRUNJX0JVU19GUkVRVUVOQ1lfTUFYLAo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBBU1BFRURf UEVDSV9CVVNfRlJFUVVFTkNZX0RFRkFVTFQsICZwcml2LQo+ID5idXNfZnJlcSk7Cj4gCj4gwqDC oMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoGFzcGVlZF9wZWNpX3Byb3BlcnR5X3Nhbml0aXplKHBy aXYtPmRldiwgImFzcGVlZCxyZC1zYW1wbGluZy0KPiBwb2ludCIsCj4gwqDCoMKgID7CoMKgICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgMCwKPiBBU1BFRURfUEVDSV9SRF9TQU1QTElOR19QT0lOVF9NQVgsCj4g wqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiBBU1BFRURfUEVDSV9SRF9TQU1QTElOR19Q T0lOVF9ERUZBVUxULAo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZwcml2LT5yZF9z YW1wbGluZ19wb2ludCk7Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoGFzcGVlZF9wZWNp X3Byb3BlcnR5X3Nhbml0aXplKHByaXYtPmRldiwgImNtZC10aW1lb3V0LW1zIiwKPiDCoMKgwqAg PsKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAxLAo+IEFTUEVFRF9QRUNJX0NNRF9USU1FT1VUX01TX01B WCwKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IEFTUEVFRF9QRUNJX0NNRF9USU1F T1VUX01TX0RFRkFVTFQsICZwcml2LT5jbWRfdGltZW91dF9tcyk7Cj4gwqDCoMKgID7CoMKgICt9 Cj4gQWRkIHRoZSBmdW5jdGlvbiBvZiBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0aW5nIHRoZSBzZXR0 aW5ncyB0byBhZGFwdCB0byB0aGUgYnVzCj4gZnJlcXVlbmN5LgoKSWYgd2Ugd2FudCB0byBnbyB3 aXRoIGV4cG9zaW5nICJidXMtZnJlcXVlbmN5IiwgaW5zdGVhZCBvZiBoYXJkd2FyZSBwcm9wZXJ0 aWVzLApJIGRvbid0IHRoaW5rIHdlIHNob3VsZCBvcGVuY29kZSBpdCBpbiB0aGlzIHdheS4KUmF0 aGVyLCB3ZSBzaG91bGQgZXhwb3NlIGl0IGFzIGEgY2xvY2ssIHBhc3NpbmcgImNsb2NrLWZyZXF1 ZW5jeSIgcHJvcGVydHkgdmlhCkRUUyBhbmQgZXhwb3NpbmcgaXQgdXNpbmcgc3RydWN0IGNsa19o dy4KV2Ugd291bGQgdGhlbiBqdXN0IGNhbGwgY2xvY2sgQVBJIChjbGtfcm91bmRfcmF0ZSAvIGNs a19zZXRfcmF0ZSBldGMpLApwcmVzZW50aW5nIHRoaXMgYXMgd2hhdCBpdCBhY3R1YWxseSBpcyAo YSAiY3VzdG9tIiBjbG9jayBkaXZpZGVyKS4KClRoYW5rcwotSXdvbmEKCj4gwqDCoMKgwqDCoMKg wqAgc3RhdGljIHZvaWQgYXNwZWVkX3BlY2lfYnVzX2ZyZXFfc2V0dXAoc3RydWN0IGFzcGVlZF9w ZWNpICpwcml2KQo+IMKgwqDCoMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdW5zaWduZWQgbG9uZyBzcmNfY2xrX3JhdGU7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGludCBkZWx0YV92YWx1ZSwgZGVsdGFfdG1wLCBjbGtfZGl2aXNvciwgY2xrX2Rp dmlzb3JfdG1wOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgbXNnX3RpbWlu ZywgY2xrX2RpdjsKPiAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3JjX2Nsa19y YXRlID0gY2xrX2dldF9yYXRlKHByaXYtPmNsayk7Cj4gCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC8qCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBQRUNJIGJ1 cyBmcmVxwqAgPSAoc291cmNlIGNsayByYXRlKSAvICg0ICoKPiAoUEVDSTA0WzE1OjhdKjQrMSkg KiAoMSA8PCBQRUNJMDBbMTA6OF0pKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICogKDEgPDwgUEVDSTAwWzEwOjhdKSAqIChQRUNJMDRbMTU6OF0qNCsxKSA9IChzb3VyY2UgY2xr Cj4gcmF0ZSkgLyAoNCAqIFBFQ0kgYnVzIGZyZXEgKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICovCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsa19kaXZpc29y ID0gc3JjX2Nsa19yYXRlIC8gKDQgKiBwcml2LT5idXNfZnJlcSk7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGRlbHRhX3ZhbHVlID0gY2xrX2Rpdmlzb3I7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIC8qIEZpbmQgdGhlIGNsb3Nlc3QgZGl2aXNvciBmb3IgYnVzLWZy ZXF1ZW5jeSAqLwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKG1zZ190aW1p bmcgPSAxOyBtc2dfdGltaW5nIDw9IDI1NTsgbXNnX3RpbWluZysrKQo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChjbGtfZGl2ID0gMDsgY2xrX2Rp diA8IDc7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY2xrX2RpdisrKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2xrX2Rpdmlzb3JfdG1wID0gKDEg PDwgY2xrX2RpdikgKgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKG1z Z190aW1pbmcgKiA0ICsgMSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVsdGFfdG1wID0gYWJzKGNsa19kaXZpc29yIC0K PiBjbGtfZGl2aXNvcl90bXApOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChkZWx0YV90bXAgPCBkZWx0YV92YWx1ZSkg ewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZWx0YV92YWx1ZSA9IGRlbHRhX3RtcDsKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+bXNnX3RpbWluZyA9IG1zZ190aW1pbmc7Cj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHByaXYtPmFkZHJfdGltaW5nID0gcHJpdi0+bXNnX3RpbWluZzsKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+Y2xrX2RpdiA9IGNsa19kaXY7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDC oMKgwqDCoMKgIH0KPiAKPiDCoMKgwqAgPsKgwqAgKwo+IMKgwqDCoCA+wqDCoCArc3RhdGljIHN0 cnVjdCBwZWNpX2NvbnRyb2xsZXJfb3BzIGFzcGVlZF9vcHMgPSB7Cj4gwqDCoMKgID7CoMKgICvC oMKgwqDCoMKgwqDCoC54ZmVyID0gYXNwZWVkX3BlY2lfeGZlciwKPiDCoMKgwqAgPsKgwqAgK307 Cj4gwqDCoMKgID7CoMKgICsKPiDCoMKgwqAgPsKgwqAgK3N0YXRpYyB2b2lkIGFzcGVlZF9wZWNp X3Jlc2V0X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKQo+IMKgwqDCoCA+wqDCoCArewo+IMKg wqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqByZXNldF9jb250cm9sX2Fzc2VydChkYXRhKTsKPiDC oMKgwqAgPsKgwqAgK30KPiDCoMKgwqAgPsKgwqAgKwo+IMKgwqDCoCA+wqDCoCArc3RhdGljIGlu dCBkZXZtX2FzcGVlZF9wZWNpX3Jlc2V0X2NvbnRyb2xfZGVhc3NlcnQoc3RydWN0IGRldmljZQo+ ICpkZXYsIHN0cnVjdCByZXNldF9jb250cm9sICpyc3QpCj4gwqDCoMKgID7CoMKgICt7Cj4gwqDC oMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gwqDCoMKgID7CoMKgICsKPiDCoMKg wqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgcmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChyc3Qp Owo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+IMKgwqDCoCA+wqDCoCAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiDCoMKgwqAgPsKgwqAg Kwo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqByZXR1cm4gZGV2bV9hZGRfYWN0aW9uX29y X3Jlc2V0KGRldiwKPiBhc3BlZWRfcGVjaV9yZXNldF9jb250cm9sX3JlbGVhc2UsIHJzdCk7Cj4g wqDCoMKgID7CoMKgICt9Cj4gwqDCoMKgID7CoMKgICsKPiDCoMKgwqAgPsKgwqAgK3N0YXRpYyB2 b2lkIGFzcGVlZF9wZWNpX2Nsa19yZWxlYXNlKHZvaWQgKmRhdGEpCj4gwqDCoMKgID7CoMKgICt7 Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoGNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRh KTsKPiDCoMKgwqAgPsKgwqAgK30KPiDCoMKgwqAgPsKgwqAgKwo+IMKgwqDCoCA+wqDCoCArc3Rh dGljIGludCBkZXZtX2FzcGVlZF9wZWNpX2Nsa19lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgY2xrCj4gKmNsaykKPiDCoMKgwqAgPsKgwqAgK3sKPiDCoMKgwqAgPsKgwqAgK8KgwqDC oMKgwqDCoMKgaW50IHJldDsKPiDCoMKgwqAgPsKgwqAgKwo+IMKgwqDCoCA+wqDCoCArwqDCoMKg wqDCoMKgwqByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKPiDCoMKgwqAgPsKgwqAgK8Kg wqDCoMKgwqDCoMKgaWYgKHJldCkKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gwqDCoMKgID7CoMKgICsKPiDCoMKgwqAgPsKgwqAgK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFzcGVlZF9w ZWNpX2Nsa19yZWxlYXNlLAo+IGNsayk7Cj4gwqDCoMKgID7CoMKgICt9Cj4gwqDCoMKgID7CoMKg ICsKPiDCoMKgwqAgPsKgwqAgK3N0YXRpYyBpbnQgYXNwZWVkX3BlY2lfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKPiDCoMKgwqAgPsKgwqAgK3sKPiDCoMKgwqAgPsKgwqAgK8Kg wqDCoMKgwqDCoMKgc3RydWN0IHBlY2lfY29udHJvbGxlciAqY29udHJvbGxlcjsKPiDCoMKgwqAg PsKgwqAgK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFzcGVlZF9wZWNpICpwcml2Owo+IMKgwqDCoCA+ wqDCoCArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+IMKgwqDCoCA+wqDCoCArCj4gwqDCoMKgID7C oMKgICvCoMKgwqDCoMKgwqDCoHByaXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9m KCpwcml2KSwgR0ZQX0tFUk5FTCk7Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoGlmICgh cHJpdikKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAtRU5PTUVNOwo+IMKgwqDCoCA+wqDCoCArCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDC oHByaXYtPmRldiA9ICZwZGV2LT5kZXY7Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoGRl dl9zZXRfZHJ2ZGF0YShwcml2LT5kZXYsIHByaXYpOwo+IMKgwqDCoCA+wqDCoCArCj4gwqDCoMKg ID7CoMKgICvCoMKgwqDCoMKgwqDCoHByaXYtPmJhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBf cmVzb3VyY2UocGRldiwgMCk7Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoGlmIChJU19F UlIocHJpdi0+YmFzZSkpCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gUFRSX0VSUihwcml2LT5iYXNlKTsKPiDCoMKgwqAgPsKgwqAgKwo+IMKgwqDC oCA+wqDCoCArwqDCoMKgwqDCoMKgwqBwcml2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYs IDApOwo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqBpZiAoIXByaXYtPmlycSkKPiDCoMKg wqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBwcml2LT5pcnE7 Cj4gwqDCoMKgID7CoMKgICsKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgcmV0ID0gZGV2 bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBwcml2LT5pcnEsCj4gYXNwZWVkX3BlY2lfaXJxX2hh bmRsZXIsCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsICJwZWNpLWFzcGVlZCIsIHByaXYpOwo+IMKgwqDC oCA+wqDCoCArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiDCoMKgwqAgPsKgwqAgKwo+IMKgwqDC oCA+wqDCoCArwqDCoMKgwqDCoMKgwqBpbml0X2NvbXBsZXRpb24oJnByaXYtPnhmZXJfY29tcGxl dGUpOwo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqBzcGluX2xvY2tfaW5pdCgmcHJpdi0+ bG9jayk7Cj4gwqDCoMKgID7CoMKgICsKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgcHJp di0+cnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKPiDCoMKg wqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihwcml2LT5yc3QpKQo+IMKgwqDCoCA+ wqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRldl9lcnJfcHJvYmUo cHJpdi0+ZGV2LCBQVFJfRVJSKHByaXYtPnJzdCksCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICJmYWlsZWQgdG8gZ2V0IHJlc2V0IGNvbnRyb2xcbiIpOwo+IMKgwqDCoCA+wqDCoCArCj4g wqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoHJldCA9IGRldm1fYXNwZWVkX3BlY2lfcmVzZXRf Y29udHJvbF9kZWFzc2VydChwcml2LT5kZXYsIHByaXYtCj4gPnJzdCk7Cj4gwqDCoMKgID7CoMKg ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LT5kZXYsIHJldCwgImNhbm5v dCBkZWFzc2VydAo+IHJlc2V0IGNvbnRyb2xcbiIpOwo+IMKgwqDCoCA+wqDCoCArCj4gwqDCoMKg ID7CoMKgICvCoMKgwqDCoMKgwqDCoHByaXYtPmNsayA9IGRldm1fY2xrX2dldChwcml2LT5kZXYs IE5VTEwpOwo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKHByaXYtPmNs aykpCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g ZGV2X2Vycl9wcm9iZShwcml2LT5kZXYsIFBUUl9FUlIocHJpdi0+Y2xrKSwKPiAiZmFpbGVkIHRv IGdldCBjbGtcbiIpOwo+IMKgwqDCoCA+wqDCoCArCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKg wqDCoHJldCA9IGRldm1fYXNwZWVkX3BlY2lfY2xrX2VuYWJsZShwcml2LT5kZXYsIHByaXYtPmNs ayk7Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gwqDCoMKgID7CoMKg ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2 LT5kZXYsIHJldCwgImZhaWxlZCB0byBlbmFibGUKPiBjbG9ja1xuIik7Cj4gwqDCoMKgID7CoMKg ICsKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgYXNwZWVkX3BlY2lfcHJvcGVydHlfc2V0 dXAocHJpdik7Cj4gCj4gwqDCoMKgwqDCoMKgwqAgYXNwZWVkX3BlY2lfYnVzX2ZyZXFfc2V0dXAo cHJpdik7Cj4gCj4gwqDCoMKgID7CoMKgICsKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKg YXNwZWVkX3BlY2lfaW5pdF9yZWdzKHByaXYpOwo+IMKgwqDCoCA+wqDCoCArCj4gwqDCoMKgID7C oMKgICvCoMKgwqDCoMKgwqDCoGNvbnRyb2xsZXIgPSBkZXZtX3BlY2lfY29udHJvbGxlcl9hZGQo cHJpdi0+ZGV2LCAmYXNwZWVkX29wcyk7Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoGlm IChJU19FUlIoY29udHJvbGxlcikpCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LT5kZXYsIFBUUl9FUlIoY29udHJv bGxlciksCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJmYWlsZWQgdG8gYWRkIGFzcGVl ZCBwZWNpCj4gY29udHJvbGxlclxuIik7Cj4gwqDCoMKgID7CoMKgICsKPiDCoMKgwqAgPsKgwqAg K8KgwqDCoMKgwqDCoMKgcHJpdi0+Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cj4gwqDCoMKgID7C oMKgICsKPiDCoMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gwqDCoMKgID7C oMKgICt9Cj4gwqDCoMKgID7CoMKgICsKPiDCoMKgwqAgPsKgwqAgK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIGFzcGVlZF9wZWNpX29mX3RhYmxlW10gPSB7Cj4gwqDCoMKgID7CoMKg ICvCoMKgwqDCoMKgwqDCoHsgLmNvbXBhdGlibGUgPSAiYXNwZWVkLGFzdDI0MDAtcGVjaSIsIH0s Cj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoHsgLmNvbXBhdGlibGUgPSAiYXNwZWVkLGFz dDI1MDAtcGVjaSIsIH0sCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoHsgLmNvbXBhdGli bGUgPSAiYXNwZWVkLGFzdDI2MDAtcGVjaSIsIH0sCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKg wqDCoHsgfQo+IMKgwqDCoCA+wqDCoCArfTsKPiDCoMKgwqAgPsKgwqAgK01PRFVMRV9ERVZJQ0Vf VEFCTEUob2YsIGFzcGVlZF9wZWNpX29mX3RhYmxlKTsKPiDCoMKgwqAgPsKgwqAgKwo+IMKgwqDC oCA+wqDCoCArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXNwZWVkX3BlY2lfZHJpdmVy ID0gewo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqAucHJvYmXCoCA9IGFzcGVlZF9wZWNp X3Byb2JlLAo+IMKgwqDCoCA+wqDCoCArwqDCoMKgwqDCoMKgwqAuZHJpdmVyID0gewo+IMKgwqDC oCA+wqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm5hbWXCoMKgwqDCoMKgwqDC oMKgwqDCoCA9ICJwZWNpLWFzcGVlZCIsCj4gwqDCoMKgID7CoMKgICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAub2ZfbWF0Y2hfdGFibGUgPSBhc3BlZWRfcGVjaV9vZl90YWJsZSwKPiDC oMKgwqAgPsKgwqAgK8KgwqDCoMKgwqDCoMKgfSwKPiDCoMKgwqAgPsKgwqAgK307Cj4gwqDCoMKg ID7CoMKgICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFzcGVlZF9wZWNpX2RyaXZlcik7Cj4gwqDC oMKgID7CoMKgICsKPiDCoMKgwqAgPsKgwqAgK01PRFVMRV9BVVRIT1IoIlJ5YW4gQ2hlbiA8cnlh bl9jaGVuQGFzcGVlZHRlY2guY29tPiIpOwo+IMKgwqDCoCA+wqDCoCArTU9EVUxFX0FVVEhPUigi SmFlIEh5dW4gWW9vIDxqYWUuaHl1bi55b29AbGludXguaW50ZWwuY29tPiIpOwo+IMKgwqDCoCA+ wqDCoCArTU9EVUxFX0RFU0NSSVBUSU9OKCJBU1BFRUQgUEVDSSBkcml2ZXIiKTsKPiDCoMKgwqAg PsKgwqAgK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiDCoMKgwqAgPsKgwqAgK01PRFVMRV9JTVBP UlRfTlMoUEVDSSk7Cj4gwqDCoMKgID7CoMKgIC0tIAo+IMKgwqDCoCA+wqDCoCAyLjMxLjEKPiAK PiAKPiAKCg==