From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id EEF91A046B for ; Fri, 23 Aug 2019 10:10:41 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C89D31BF95; Fri, 23 Aug 2019 10:10:41 +0200 (CEST) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20086.outbound.protection.outlook.com [40.107.2.86]) by dpdk.org (Postfix) with ESMTP id 3707F1BEEA for ; Wed, 21 Aug 2019 17:12:22 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k3Hia2RhQ7VxrFQKAhkuFJNBbfhCDyBfe3pCG+/RZfFs0Ilv32XA75HsvzCuEj29ko5UubJfEzssiGi3NavnI9u3JNHzBlebeLC9BFo69Sayp9LQwIPEzTBKCJ5z0PTqk2FYp237sesM5dQ8YwjLetgHsSg35xcrhY3U9tfYDb7oISswFkdL/MhK1Q20Hz79iZ1xCIJnljucw1q5+lFFO1kzdZOEYwYOc59yljSapf5ptiOJOOxpv9hu69mMGxou1ZgekO1cTfzwBddm8QCexzlPR+n48a1HDGRmhUWtC6b9Qy/OBnEj9Nig1EyREudfhfYYv0QTQsT8eIkEmdl/bg== 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=oMfN5tgvtdE+9VgLlrqaTBL5nDWqBLV53XULHIHt5ao=; b=Xl4I18Pl5Cld1bN6j8FpDw/MhxNhZU/TRrzW83Di/QnPqPrXDJFFROYCykanzHIuYOlQgZ1/QRIQt/91S4Zg+526snn+2w1A7XKT9zlysV6qIn2VYuizy2utuh9EqAph2vix2uVU1/zt4Fy7yzsxXT4Awj4mXMUZ6D875NxpR9l3yhmDc/LInIiIBbRgtYE707kP8Bfjk4qqT+bXeBEipMojx+nrPMh5dKQuugqOQ5QpbKi9ugHTsVP1tVljKOf45UZwxkRbE36tb052WPoPpvfoWX8NtoySrKJOZmJ7ZDMB8EUVMIHXnbHlwyeXJIjGT9bF1zceNQ2Dxio2kT6b3g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=titan-ic.com; dmarc=pass action=none header.from=titan-ic.com; dkim=pass header.d=titan-ic.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=titan-ic.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oMfN5tgvtdE+9VgLlrqaTBL5nDWqBLV53XULHIHt5ao=; b=j+Z2a1P7778BHPGdUYc3M3g2WeKpojazQb69hKfiMuM4HGjj20FYzeGwsLyvP3xoj/R5Q1aYY6NocwRn8zQh7DL85A/9JcNYAP0LITJ1mGyUrOolOVOXQ8iqg0E8ReSDd99S5w246EFCBZA3+ufipTVfXVSctup8+90gBaC8/nc= Received: from AM6PR10MB3110.EURPRD10.PROD.OUTLOOK.COM (20.179.1.24) by AM6PR10MB1893.EURPRD10.PROD.OUTLOOK.COM (52.134.120.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Wed, 21 Aug 2019 15:12:19 +0000 Received: from AM6PR10MB3110.EURPRD10.PROD.OUTLOOK.COM ([fe80::c6b:cf04:446e:9fbd]) by AM6PR10MB3110.EURPRD10.PROD.OUTLOOK.COM ([fe80::c6b:cf04:446e:9fbd%3]) with mapi id 15.20.2178.020; Wed, 21 Aug 2019 15:12:19 +0000 From: John Bromhead To: Shahaf Shuler CC: Thomas Monjalon , "dev@dpdk.org" , "jerinj@marvell.com" , Pavan Nikhilesh , Hemant Agrawal , Opher Reviv , Alex Rosenbaum , Dovrat Zifroni , Prasun Kapoor , Nipun Gupta , "Wang, Xiang W" , "Richardson, Bruce" , "yang.a.hong@intel.com" , "harry.chang@intel.com" , "gu.jian1@zte.com.cn" , "shanjiangh@chinatelecom.cn" , "zhangy.yun@chinatelecom.cn" , "lixingfu@huachentel.com" , "wushuai@inspur.com" , "yuyingxia@yxlink.com" , "fanchenggang@sunyainfo.com" , "davidfgao@tencent.com" , "liuzhong1@chinaunicom.cn" , "zhaoyong11@huawei.com" , "oc@yunify.com" , "jim@netgate.com" , "hongjun.ni@intel.com" , "deri@ntop.org" , "fc@napatech.com" , "arthur.su@lionic.com" , James Hunter , Gareth Douglas , Sakir Sezer Thread-Topic: [dpdk-dev] [RFC PATCH v1] regexdev: introduce regexdev subsystem Thread-Index: AQHVU11d2rjOOBgmkkyAXamhbVFWAKcFHPIAgACh+TA= Date: Wed, 21 Aug 2019 15:12:19 +0000 Message-ID: <92B76803-7AEB-4A33-9363-4AAAF1B74A42@titan-ic.com> References: <20190627155036.56940-1-jerinj@marvell.com> <8285913.8xKIzI91KM@xps> <1922242.dABWq9CbNQ@xps>, In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=j.bromhead@titan-ic.com; x-originating-ip: [2606:6000:cae0:2500:e855:ef7a:3ff3:712d] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ee4d1242-cb4a-466a-4957-08d72649f5bb x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(5600148)(711020)(4605104)(1401327)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7027125)(7023125)(2017052603328)(7193020); SRVR:AM6PR10MB1893; x-ms-traffictypediagnostic: AM6PR10MB1893: x-ms-exchange-purlcount: 8 x-ld-processed: b8d0447f-0b48-40fa-a185-8aab91f36195,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1775; x-forefront-prvs: 0136C1DDA4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(346002)(39840400004)(376002)(396003)(136003)(189003)(43544003)(199004)(53946003)(66946007)(6306002)(54896002)(46003)(606006)(508600001)(186003)(66446008)(64756008)(66556008)(66476007)(6512007)(14454004)(76116006)(91956017)(236005)(7416002)(8676002)(53936002)(36756003)(102836004)(6246003)(7406005)(53546011)(107886003)(316002)(6486002)(53386004)(446003)(7736002)(33656002)(6506007)(99286004)(256004)(476003)(71200400001)(71190400001)(966005)(2616005)(6116002)(25786009)(2906002)(81156014)(11346002)(6916009)(6436002)(45080400002)(14444005)(86362001)(76176011)(8936002)(4326008)(229853002)(5660300002)(30864003)(486006)(81166006)(54906003)(91820200001)(130860200001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR10MB1893; H:AM6PR10MB3110.EURPRD10.PROD.OUTLOOK.COM; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: titan-ic.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: chN4j6LbZmdWHmR4gGsn6fDw/Q+v9ifXPN+nVwtzNLXwEPP9lavMb5kRjcCis8cded5P0qyzBscp7Jg4yRhe/epIYcrvBuJvQ3/BxqMaLg2ddF1De9P8OtO1Scv0xoVAkZfPz/RZ7M3DeidTEbZzP+73tA27GVDiJvOfbKthB0LGP1+JHtQPbY5DYOC6hHGeP5d2zrdx90Tf/rJJf6HFWp5vXZxdgxHq4ZoUvfOgo8KoXuw1TlocODoI45gsMO7B/wxUhtlt3HitgX/tV+gz3CvCYAfHPgGuPLo4tJjz2U8894fR0y9TFbxq4ZpX+BFbkjoYs5M7umNhB1+3VrgZa/Jctc4/fLLoEOfLJM6ffhlNGRZ4m5gKykLDhQdRHtEWEfJP2IdPzM6i0Lq6m3A4JkFg3VqZlbAkq9DuX72s4jI= MIME-Version: 1.0 X-OriginatorOrg: titan-ic.com X-MS-Exchange-CrossTenant-Network-Message-Id: ee4d1242-cb4a-466a-4957-08d72649f5bb X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Aug 2019 15:12:19.1885 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b8d0447f-0b48-40fa-a185-8aab91f36195 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: GI9K46ruJwT3DM6Kz95lKOTt1fX0MvXP6xR55l4eSyfKrLG859U1Drmcx/n9zbCQwRq+KPHc5qlQY9IBl7oj7g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR10MB1893 X-Mailman-Approved-At: Fri, 23 Aug 2019 10:10:39 +0200 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [RFC PATCH v1] regexdev: introduce regexdev subsystem X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" VGhlaXIgYXJlIHByb2JhYmx5IHF1aXRlIGEgZmV3IG90aGVyIHVzZSBjYXNlcywgYnV0IHN1Z2dl c3QgeW91IGFsc28gYWRkDQoNCk5hdHVyYWwgTGFuZ3VhZ2UgUHJvY2Vzc2luZyAoTkxQKQ0KU2Vu dGltZW50IEFuYWx5c2lzDQpCaWcgRGF0YSBkYXRhYmFzZSBhY2NlbGVyYXRpb24gKFNwYXJrLCBI YWRvb3AgZXRjLikNCkNvbXB1dGF0aW9uYWwgU3RvcmFnZQ0KDQpSZWdhcmRzIEpvaG5CDQoNCkpv aG4gQnJvbWhlYWQNClZQIG9mIEJ1c2luZXNzIERldmVsb3BtZW50DQpUaXRhbiBJQw0KU2FuIERp ZWdvLCBDQSA5MjEzMCwgVVNBDQoNCmouYnJvbWhlYWRAdGl0YW4taWMuY29tPG1haWx0bzpqLmJy b21oZWFkQHRpdGFuLWljLmNvbT4NCkNlbGw6ICsxLTg1OC02NDItMjUwMQ0KV2ViOiB3d3cudGl0 YW4taWMuY29tPGh0dHA6Ly93d3cudGl0YW4taWMuY29tLz4NClBlcnNvbmFsIGVtYWlsOiBqb2hu QGJyb21oZWFkLmNvbTxtYWlsdG86am9obkBicm9taGVhZC5jb20+DQpMaW5rZWRJbjogaHR0cHM6 Ly93d3cubGlua2VkaW4uY29tL2luL2picm9taGVhZDxodHRwczovL3d3dy5saW5rZWRpbi5jb20v aW4vamJyb21oZWFkLz4NClRvIGJvb2sgYSBtZWV0aW5nOiBodHRwczovL2NhbGVuZGx5LmNvbS9q b2huYnJvbWhlYWQvdGl0YW5pYw0KDQoNCk9uIEF1ZyAyMCwgMjAxOSwgYXQgMTA6MzIgUE0sIFNo YWhhZiBTaHVsZXIgPHNoYWhhZnNAbWVsbGFub3guY29tPG1haWx0bzpzaGFoYWZzQG1lbGxhbm94 LmNvbT4+IHdyb3RlOg0KDQpIaSBKZXJpbiwNCg0KVGh1cnNkYXksIEF1Z3VzdCAxNSwgMjAxOSAy OjM0IFBNLCBUaG9tYXMgTW9uamFsb246DQpTdWJqZWN0OiBSZTogW2RwZGstZGV2XSBbUkZDIFBB VENIIHYxXSByZWdleGRldjogaW50cm9kdWNlIHJlZ2V4ZGV2DQpzdWJzeXN0ZW0NCg0KK0NjIG1v cmUNCg0KLS0tLS0tLS0tLS0tDQoNCkZyb206IEplcmluIEphY29iIDxqZXJpbmpAbWFydmVsbC5j b208bWFpbHRvOmplcmluakBtYXJ2ZWxsLmNvbT4+DQoNCkV2ZW4gdGhvdWdoIHRoZXJlIGFyZSBz b21lIHZlbmRvcnMgd2hpY2ggb2ZmZXIgUmVnZXggSFcgb2ZmbG9hZCwgZHVlIHRvDQpsYWNrIG9m IHN0YW5kYXJkIEFQSSwgSXQgaXMgZGlmZmN1bHQgZm9yIERQREsgY29uc3VtZXIgdG8gdXNlIHRo ZW0NCmluIGEgcG9ydGFibGUgd2F5Lg0KDQpUaGlzIF9SRkNfIGF0dGVtcHRzIHRvIHN0YW5kYXJk aXplIHRoZSBSZWdFeC9EUEkgb2ZmbG9hZCBBUElzIGZvciBEUERLLg0KDQpUaGUgRG94eWdlbiBn ZW5lcmF0ZWQgUkZDIEFQSSBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBoZXJlOg0KaHR0cHM6Ly9l dXIwMy5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJG ZHJlYQ0KbXktbm9ldGhlci0NCjIyNzc3ZS5uZXRsaWZ5LmNvbTxodHRwOi8vMjI3NzdlLm5ldGxp ZnkuY29tPiUyRnJ0ZV9fcmVnZXhkZXZfOGguaHRtbCZhbXA7ZGF0YT0wMiU3QzAxJTdDc2hhDQpo YWZzJTQwbWVsbGFub3guY29tPGh0dHA6Ly80MG1lbGxhbm94LmNvbT4lN0NkZjkzNDE2Y2Y0ZTg0 OThhOTgyYzA4ZDcyMTc0ODkzNyU3Q2E2NTI5NzFjDQo3ZDJlNGQ5YmE2YTRkMTQ5MjU2ZjQ2MWIl N0MwJTdDMCU3QzYzNzAxNDY1NjczOTk5MzEzMSZhbXA7c2RhdGENCj02WkFPckxtajNzZjdMclBS bHpFN0l5cWtLOGI0Y3ZGSVFxSzZ6U3dGNGF3JTNEJmFtcDtyZXNlcnZlZD0wDQoNClRoaXMgUkZD IGNyYWZ0ZWQgYmFzZWQgb24gU1cgUmVnZXggQVBJIGZyYW1ld29ya3Mgc3VjaCBhcyBsaWJwY3Jl IGFuZA0KaHlwZXJzY2FuIGFuZCBhIGZldyBvZiB0aGUgUmVnRXggSFcgSVBzIHdoaWNoIEkgYW0g YXdhcmUgb2YuDQoNClJlZ0V4IHBhdHRlcm4gbWF0Y2hpbmcgYXBwbGljYXRpb25zOg0K4oCiIE5l eHQgR2VuZXJhdGlvbiBGaXJld2FsbHMgKE5HRlcpDQrigKIgRGVlcCBQYWNrZXQgYW5kIEZsb3cg SW5zcGVjdGlvbiAoRFBJKQ0K4oCiIEludHJ1c2lvbiBQcmV2ZW50aW9uIFN5c3RlbXMgKElQUykN CuKAoiBERG9TIE1pdGlnYXRpb24NCuKAoiBOZXR3b3JrIE1vbml0b3JpbmcNCuKAoiBEYXRhIExv c3MgUHJldmVudGlvbiAoRExQKQ0K4oCiIFNtYXJ0IE5JQ3MNCuKAoiBHcmFtbWFyIGJhc2VkIGNv bnRlbnQgcHJvY2Vzc2luZw0K4oCiIFVSTCwgc3BhbSBhbmQgYWR3YXJlIGZpbHRlcmluZw0K4oCi IEFkdmFuY2VkIGF1ZGl0aW5nIGFuZCBwb2xpY2luZyBvZiB1c2VyL2FwcGxpY2F0aW9uIHNlY3Vy aXR5IHBvbGljaWVzDQrigKIgRmluYW5jaWFsIGRhdGEgbWluaW5nIC0gcGFyc2luZyBvZiBzdHJl YW1lZCBmaW5hbmNpYWwgZmVlZHMNCg0KSSB0aGluayB0d28gbW9yZSBpbXBvcnRhbnQgdXNlIGNh c2UgdG8gYWRkIChhdCBsZWFzdCBvbiB0aGUgZG9jIG9mIHRoaXMgc3Vic3lzdGVtKSBhcmU6DQoq IGFwcGxpY2F0aW9uIHJlY29nbml0aW9uDQoqIG1lbW9yeSBpbnRyb3NwZWN0aW9uDQoNCg0KDQpS ZXF1ZXN0IHRvIHJldmlldyBmcm9tIEhXIGFuZCBTVyBSZWdFeCB2ZW5kb3JzIGFuZCBSZWdFeCBh cHBsaWNhdGlvbg0KdXNlcnMNCnRvIGhhdmUgcG9ydGFibGUgRFBESyBBUEkgZm9yIFJlZ0V4Lg0K DQpUaGUgQVBJIHNjaGVtYXRpY3MgYXJlIGJhc2VkIGNyeXB0b2RldiwgZXZlbnRkZXYgYW5kIGV0 aGRldiBleGlzdGluZw0KZGV2aWNlIEFQSS4NCg0KU2lnbmVkLW9mZi1ieTogSmVyaW4gSmFjb2Ig PGplcmluakBtYXJ2ZWxsLmNvbTxtYWlsdG86amVyaW5qQG1hcnZlbGwuY29tPj4NClNpZ25lZC1v ZmYtYnk6IFBhdmFuIE5pa2hpbGVzaCA8cGJoYWdhdmF0dWxhQG1hcnZlbGwuY29tPG1haWx0bzpw YmhhZ2F2YXR1bGFAbWFydmVsbC5jb20+Pg0KLS0tDQoNClJURSBSZWdFeCBEZXZpY2UgQVBJDQot LS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpEZWZpbmVzIFJURSBSZWdFeCBEZXZpY2UgQVBJcyBmb3Ig UmVnRXggb3BlcmF0aW9ucyBhbmQgaXRzIHByb3Zpc2lvbmluZy4NCg0KVGhlIFJlZ0V4IERldmlj ZSBBUEkgaXMgY29tcG9zZWQgb2YgdHdvIHBhcnRzOg0KDQotIFRoZSBhcHBsaWNhdGlvbi1vcmll bnRlZCBSZWdFeCBBUEkgdGhhdCBpbmNsdWRlcyBmdW5jdGlvbnMgdG8gc2V0dXANCmEgUmVnRXgg ZGV2aWNlIChjb25maWd1cmUgaXQsIHNldHVwIGl0cyBxdWV1ZSBwYWlycyBhbmQgc3RhcnQgaXQp LA0KdXBkYXRlIHRoZSBydWxlIGRhdGFiYXNlIGFuZCBzbyBvbi4NCg0KLSBUaGUgZHJpdmVyLW9y aWVudGVkIFJlZ0V4IEFQSSB0aGF0IGV4cG9ydHMgYSBmdW5jdGlvbiBhbGxvd2luZw0KYSBSZWdF eCBwb2xsIE1vZGUgRHJpdmVyIChQTUQpIHRvIHNpbXVsdGFuZW91c2x5IHJlZ2lzdGVyIGl0c2Vs ZiBhcw0KYSBSZWdFeCBkZXZpY2UgZHJpdmVyLg0KDQpSZWdFeCBkZXZpY2UgY29tcG9uZW50cyBh bmQgZGVmaW5pdGlvbnM6DQoNCiAgICstLS0tLS0tLS0tLS0tLS0tLSsNCiAgIHwgICAgICAgICAg ICAgICAgIHwNCiAgIHwgICAgICAgICAgICAgICAgIG8tLS0tLS0tLS0rICAgIHJ0ZV9yZWdleF9b ZW58ZGVdcXVldWVfYnVyc3QoKQ0KICAgfCAgIFBDUkUgYmFzZWQgICAgby0tLS0tLSsgIHwgICAg ICAgICAgICAgICB8DQogICB8ICBSZWdFeCBwYXR0ZXJuICB8ICAgICAgfCAgfCAgKy0tLS0tLS0t KyAgIHwNCiAgIHwgbWF0Y2hpbmcgZW5naW5lIG8tLS0tLS0rLS0rLS1vICAgICAgICB8ICAgfCAg ICArLS0tLS0tKw0KICAgfCAgICAgICAgICAgICAgICAgfCAgICAgIHwgIHwgIHwgcXVldWUgIHw8 PT1vPT09PnxDb3JlIDB8DQogICB8ICAgICAgICAgICAgICAgICBvLS0tLSsgfCAgfCAgfCBwYWly IDAgfCAgICAgICAgfCAgICAgIHwNCiAgIHwgICAgICAgICAgICAgICAgIHwgICAgfCB8ICB8ICAr LS0tLS0tLS0rICAgICAgICArLS0tLS0tKw0KICAgKy0tLS0tLS0tLS0tLS0tLS0tKyAgICB8IHwg IHwNCiAgICAgICAgICBeICAgICAgICAgICAgICAgfCB8ICB8ICArLS0tLS0tLS0rDQogICAgICAg ICAgfCAgICAgICAgICAgICAgIHwgfCAgfCAgfCAgICAgICAgfCAgICAgICAgKy0tLS0tLSsNCiAg ICAgICAgICB8ICAgICAgICAgICAgICAgfCArLS0rLS1vIHF1ZXVlICB8PD09PT09PT58Q29yZSAx fA0KICAgICAgUnVsZXxEYXRhYmFzZSAgICAgICB8ICAgIHwgIHwgcGFpciAxIHwgICAgICAgIHwg ICAgICB8DQogICArLS0tLS0tKy0tLS0tLS0tLS0rICAgIHwgICAgfCAgKy0tLS0tLS0tKyAgICAg ICAgKy0tLS0tLSsNCiAgIHwgICAgIEdyb3VwIDAgICAgIHwgICAgfCAgICB8DQogICB8ICstLS0t LS0tLS0tLS0tKyB8ICAgIHwgICAgfCAgKy0tLS0tLS0tKyAgICAgICAgKy0tLS0tLSsNCiAgIHwg fCBSdWxlcyAwLi5uICB8IHwgICAgfCAgICB8ICB8ICAgICAgICB8ICAgICAgICB8Q29yZSAyfA0K ICAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICB8ICAgICstLW8gcXVldWUgIHw8PT09PT09PnwgICAg ICB8DQogICB8ICAgICBHcm91cCAxICAgICB8ICAgIHwgICAgICAgfCBwYWlyIDIgfCAgICAgICAg Ky0tLS0tLSsNCiAgIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgfCAgICAgICArLS0tLS0tLS0rDQog ICB8IHwgUnVsZXMgMC4ubiAgfCB8ICAgIHwNCiAgIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgfCAg ICAgICArLS0tLS0tLS0rDQogICB8ICAgICBHcm91cCAyICAgICB8ICAgIHwgICAgICAgfCAgICAg ICAgfCAgICAgICAgKy0tLS0tLSsNCiAgIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgfCAgICAgICB8 IHF1ZXVlICB8PD09PT09PT58Q29yZSBufA0KICAgfCB8IFJ1bGVzIDAuLm4gIHwgfCAgICArLS0t LS0tLW8gcGFpciBuIHwgICAgICAgIHwgICAgICB8DQogICB8ICstLS0tLS0tLS0tLS0tKyB8ICAg ICAgICAgICAgKy0tLS0tLS0tKyAgICAgICAgKy0tLS0tLSsNCiAgIHwgICAgIEdyb3VwIG4gICAg IHwNCiAgIHwgKy0tLS0tLS0tLS0tLS0rIHw8LS0tLS0tLXJ0ZV9yZWdleF9ydWxlX2RiX3VwZGF0 ZSgpDQogICB8IHwgUnVsZXMgMC4ubiAgfCB8PC0tLS0tLS1ydGVfcmVnZXhfcnVsZV9kYl9pbXBv cnQoKQ0KICAgfCArLS0tLS0tLS0tLS0tLSsgfC0tLS0tLS0+cnRlX3JlZ2V4X3J1bGVfZGJfZXhw b3J0KCkNCiAgICstLS0tLS0tLS0tLS0tLS0tLSsNCg0KUmVnRXg6IEEgcmVndWxhciBleHByZXNz aW9uIGlzIGEgY29uY2lzZSBhbmQgZmxleGlibGUgbWVhbnMgZm9yIG1hdGNoaW5nDQpzdHJpbmdz IG9mIHRleHQsIHN1Y2ggYXMgcGFydGljdWxhciBjaGFyYWN0ZXJzLCB3b3Jkcywgb3IgcGF0dGVy bnMgb2YNCmNoYXJhY3RlcnMuIEEgY29tbW9uIGFiYnJldmlhdGlvbiBmb3IgdGhpcyBpcyDigJxS ZWdFeOKAnS4NCg0KUmVnRXggZGV2aWNlOiBBIGhhcmR3YXJlIG9yIHNvZnR3YXJlLWJhc2VkIGlt cGxlbWVudGF0aW9uIG9mIFJlZ0V4DQpkZXZpY2UgQVBJIGZvciBQQ1JFIGJhc2VkIHBhdHRlcm4g bWF0Y2hpbmcgc3ludGF4IGFuZCBzZW1hbnRpY3MuDQoNClBDUkUgUmVnRXggc3ludGF4IGFuZCBz ZW1hbnRpY3Mgc3BlY2lmaWNhdGlvbjoNCmh0dHBzOi8vZXVyMDMuc2FmZWxpbmtzLnByb3RlY3Rp b24ub3V0bG9vay5jb20vP3VybD1odHRwJTNBJTJGJTJGcmVnZXgNCmtpdC5zb3VyY2Vmb3JnZS5u ZXQ8aHR0cDovL2tpdC5zb3VyY2Vmb3JnZS5uZXQ+JTJGRG9jdW1lbnRhdGlvbiUyRnBjcmUlMkZw Y3JlcGF0dGVybi5odG1sJmFtcDtkDQphdGE9MDIlN0MwMSU3Q3NoYWhhZnMlNDBtZWxsYW5veC5j b208aHR0cDovLzQwbWVsbGFub3guY29tPiU3Q2RmOTM0MTZjZjRlODQ5OGE5ODJjMDhkNzIxDQo3 NDg5MzclN0NhNjUyOTcxYzdkMmU0ZDliYTZhNGQxNDkyNTZmNDYxYiU3QzAlN0MwJTdDNjM3MDE0 NjU2NzMNCjk5OTMxMzEmYW1wO3NkYXRhPUIwTFNNdWJsZER5M1VsRjU1WjN3aGhOaVJxNmVwMXB4 QjhScnQ1REl0ZnclMw0KRCZhbXA7cmVzZXJ2ZWQ9MA0KDQpSZWdFeCBxdWV1ZSBwYWlyOiBFYWNo IFJlZ0V4IGRldmljZSBzaG91bGQgaGF2ZSBvbmUgb3IgbW9yZSBxdWV1ZSBwYWlyIHRvDQp0cmFu c21pdCBhIGJ1cnN0IG9mIHBhdHRlcm4gbWF0Y2hpbmcgcmVxdWVzdCBhbmQgcmVjZWl2ZSBhIGJ1 cnN0IG9mDQpyZWNlaXZlIHRoZSBwYXR0ZXJuIG1hdGNoaW5nIHJlc3BvbnNlLiBUaGUgcGF0dGVy biBtYXRjaGluZw0KcmVxdWVzdC9yZXNwb25zZQ0KZW1iZWRkZWQgaW4gKnJ0ZV9yZWdleF9vcHMq IHN0cnVjdHVyZS4NCg0KUnVsZTogQSBwYXR0ZXJuIG1hdGNoaW5nIHJ1bGUgZXhwcmVzc2VkIGlu IFBDUkUgUmVnRXggc3ludGF4IGFsb25nIHdpdGgNCk1hdGNoIElEIGFuZCBHcm91cCBJRCB0byBp ZGVudGlmeSB0aGUgcnVsZSB1cG9uIHRoZSBtYXRjaC4NCg0KUnVsZSBkYXRhYmFzZTogVGhlIFJl Z0V4IGRldmljZSBhY2NlcHRzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kIGNvbnZlcnRzDQp0aGVt DQppbnRvIGEgY29tcGlsZWQgcnVsZSBkYXRhYmFzZSB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8g c2NhbiBkYXRhLg0KQ29tcGlsYXRpb24gYWxsb3dzIHRoZSBkZXZpY2UgdG8gYW5hbHl6ZSB0aGUg Z2l2ZW4gcGF0dGVybihzKSBhbmQNCnByZS1kZXRlcm1pbmUgaG93IHRvIHNjYW4gZm9yIHRoZXNl IHBhdHRlcm5zIGluIGFuIG9wdGltaXplZCBmYXNoaW9uIHRoYXQNCndvdWxkIGJlIGZhciB0b28g ZXhwZW5zaXZlIHRvIGNvbXB1dGUgYXQgcnVuLXRpbWUuIEEgcnVsZSBkYXRhYmFzZSBjb250YWlu cw0KYSBzZXQgb2YgcnVsZXMgdGhhdCBjb21waWxlZCBpbiBkZXZpY2Ugc3BlY2lmaWMgYmluYXJ5 IGZvcm0uDQoNCk1hdGNoIElEIG9yIFJ1bGUgSUQ6IEEgdW5pcXVlIGlkZW50aWZpZXIgcHJvdmlk ZWQgYXQgdGhlIHRpbWUgb2YgcnVsZQ0KY3JlYXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBp ZGVudGlmeSB0aGUgcnVsZSB1cG9uIG1hdGNoLg0KDQpHcm91cCBJRDogR3JvdXAgb2YgcnVsZXMg Y2FuIGJlIGdyb3VwZWQgdW5kZXIgb25lIGdyb3VwIElEIHRvIGVuYWJsZQ0KcnVsZSBpc29sYXRp b24gYW5kIGVmZmVjdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBBIHVuaXF1ZSBncm91cCBpZGVudGlm aWVyDQpwcm92aWRlZCBhdCB0aGUgdGltZSBvZiBydWxlIGNyZWF0aW9uIGZvciB0aGUgYXBwbGlj YXRpb24gdG8gaWRlbnRpZnkgdGhlDQpydWxlIHVwb24gbWF0Y2guDQoNClNjYW46IEEgcGF0dGVy biBtYXRjaGluZyByZXF1ZXN0IHRocm91Z2ggKmVucXVldWUqIEFQSS4NCg0KSXQgbWF5IHBvc3Np YmxlIHRoYXQgYSBnaXZlbiBSZWdFeCBkZXZpY2UgbWF5IG5vdCBzdXBwb3J0IGFsbCB0aGUgZmVh dHVyZXMNCm9mIFBDUkUuIFRoZSBhcHBsaWNhdGlvbiBtYXkgcHJvYmUgdW5zdXBwb3J0ZWQgZmVh dHVyZXMgdGhyb3VnaA0Kc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFn cw0KDQpCeSBkZWZhdWx0LCBhbGwgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgUmVnRXggRGV2aWNlIEFQ SSBleHBvcnRlZCBieSBhIFBNRA0KYXJlIGxvY2stZnJlZSBmdW5jdGlvbnMgd2hpY2ggYXNzdW1l IHRvIG5vdCBiZSBpbnZva2VkIGluIHBhcmFsbGVsIG9uDQpkaWZmZXJlbnQgbG9naWNhbCBjb3Jl cyB0byB3b3JrIG9uIHRoZSBzYW1lIHRhcmdldCBvYmplY3QuIEZvciBpbnN0YW5jZSwNCnRoZSBk ZXF1ZXVlIGZ1bmN0aW9uIG9mIGEgUE1EIGNhbm5vdCBiZSBpbnZva2VkIGluIHBhcmFsbGVsIG9u IHR3byBsb2dpY2FsDQpjb3JlcyB0byBvcGVyYXRlcyBvbiBzYW1lIFJlZ0V4IHF1ZXVlIHBhaXIu IE9mIGNvdXJzZSwgdGhpcyBmdW5jdGlvbg0KY2FuIGJlIGludm9rZWQgaW4gcGFyYWxsZWwgYnkg ZGlmZmVyZW50IGxvZ2ljYWwgY29yZSBvbiBkaWZmZXJlbnQgcXVldWUgcGFpci4NCkl0IGlzIHRo ZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXBwZXIgbGV2ZWwgYXBwbGljYXRpb24gdG8gZW5mb3Jj ZSB0aGlzIHJ1bGUuDQoNCkluIGFsbCBmdW5jdGlvbnMgb2YgdGhlIFJlZ0V4IEFQSSwgdGhlIFJl Z0V4IGRldmljZSBpcw0KZGVzaWduYXRlZCBieSBhbiBpbnRlZ2VyID49IDAgbmFtZWQgdGhlIGRl dmljZSBpZGVudGlmaWVyICpkZXZfaWQqDQoNCkF0IHRoZSBSZWdFeCBkcml2ZXIgbGV2ZWwsIFJl Z0V4IGRldmljZXMgYXJlIHJlcHJlc2VudGVkIGJ5IGEgZ2VuZXJpYw0KZGF0YSBzdHJ1Y3R1cmUg b2YgdHlwZSAqcnRlX3JlZ2V4X2RldiouDQoNClJlZ0V4IGRldmljZXMgYXJlIGR5bmFtaWNhbGx5 IHJlZ2lzdGVyZWQgZHVyaW5nIHRoZSBQQ0kvU29DIGRldmljZSBwcm9iaW5nDQpwaGFzZSBwZXJm b3JtZWQgYXQgRUFMIGluaXRpYWxpemF0aW9uIHRpbWUuDQpXaGVuIGEgUmVnRXggZGV2aWNlIGlz IGJlaW5nIHByb2JlZCwgYSAqcnRlX3JlZ2V4X2Rldiogc3RydWN0dXJlIGFuZA0KYSBuZXcgZGV2 aWNlIGlkZW50aWZpZXIgYXJlIGFsbG9jYXRlZCBmb3IgdGhhdCBkZXZpY2UuIFRoZW4sIHRoZQ0K cmVnZXhfZGV2X2luaXQoKSBmdW5jdGlvbiBzdXBwbGllZCBieSB0aGUgUmVnRXggZHJpdmVyIG1h dGNoaW5nIHRoZSBwcm9iZWQNCmRldmljZSBpcyBpbnZva2VkIHRvIHByb3Blcmx5IGluaXRpYWxp emUgdGhlIGRldmljZS4NCg0KVGhlIHJvbGUgb2YgdGhlIGRldmljZSBpbml0IGZ1bmN0aW9uIGNv bnNpc3RzIG9mIHJlc2V0dGluZyB0aGUgaGFyZHdhcmUgb3INCnNvZnR3YXJlIFJlZ0V4IGRyaXZl ciBpbXBsZW1lbnRhdGlvbnMuDQoNCklmIHRoZSBkZXZpY2UgaW5pdCBvcGVyYXRpb24gaXMgc3Vj Y2Vzc2Z1bCwgdGhlIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4NCnRoZSBkZXZpY2UgaWRlbnRpZmll ciBhc3NpZ25lZCB0byB0aGUgbmV3IGRldmljZSBhbmQgaXRzIGFzc29jaWF0ZWQNCipydGVfcmVn ZXhfZGV2KiBzdHJ1Y3R1cmUgaXMgZWZmZWN0aXZlbHkgcmVnaXN0ZXJlZC4NCk90aGVyd2lzZSwg Ym90aCB0aGUgKnJ0ZV9yZWdleF9kZXYqIHN0cnVjdHVyZSBhbmQgdGhlIGRldmljZSBpZGVudGlm aWVyIGFyZQ0KZnJlZWQuDQoNClRoZSBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhlIGFwcGxpY2F0 aW9uIFJlZ0V4IEFQSSB0byBzZXR1cCBhIGRldmljZQ0KZGVzaWduYXRlZCBieSBpdHMgZGV2aWNl IGlkZW50aWZpZXIgbXVzdCBiZSBpbnZva2VkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6DQotIHJ0 ZV9yZWdleF9kZXZfY29uZmlndXJlKCkNCi0gcnRlX3JlZ2V4X3F1ZXVlX3BhaXJfc2V0dXAoKQ0K LSBydGVfcmVnZXhfZGV2X3N0YXJ0KCkNCg0KVGhlbiwgdGhlIGFwcGxpY2F0aW9uIGNhbiBpbnZv a2UsIGluIGFueSBvcmRlciwgdGhlIGZ1bmN0aW9ucw0KZXhwb3J0ZWQgYnkgdGhlIFJlZ0V4IEFQ SSB0byBlbnF1ZXVlIHBhdHRlcm4gbWF0Y2hpbmcgam9iLCBkZXF1ZXVlDQpwYXR0ZXJuDQptYXRj aGluZyByZXNwb25zZSwgZ2V0IHRoZSBzdGF0cywgdXBkYXRlIHRoZSBydWxlIGRhdGFiYXNlLA0K Z2V0L3NldCBkZXZpY2UgYXR0cmlidXRlcyBhbmQgc28gb24NCg0KSWYgdGhlIGFwcGxpY2F0aW9u IHdhbnRzIHRvIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiAoaS5lLiBjYWxsDQpydGVfcmVnZXhf ZGV2X2NvbmZpZ3VyZSgpIG9yIHJ0ZV9yZWdleF9xdWV1ZV9wYWlyX3NldHVwKCkpLCBpdCBtdXN0 IGNhbGwNCnJ0ZV9yZWdleF9kZXZfc3RvcCgpIGZpcnN0IHRvIHN0b3AgdGhlIGRldmljZSBhbmQg dGhlbiBkbyB0aGUNCnJlY29uZmlndXJhdGlvbg0KYmVmb3JlIGNhbGxpbmcgcnRlX3JlZ2V4X2Rl dl9zdGFydCgpIGFnYWluLiBUaGUgZW5xdWV1ZSBhbmQgZGVxdWV1ZQ0KZnVuY3Rpb25zIHNob3Vs ZCBub3QgYmUgaW52b2tlZCB3aGVuIHRoZSBkZXZpY2UgaXMgc3RvcHBlZC4NCg0KRmluYWxseSwg YW4gYXBwbGljYXRpb24gY2FuIGNsb3NlIGEgUmVnRXggZGV2aWNlIGJ5IGludm9raW5nIHRoZQ0K cnRlX3JlZ2V4X2Rldl9jbG9zZSgpIGZ1bmN0aW9uLg0KDQpFYWNoIGZ1bmN0aW9uIG9mIHRoZSBh cHBsaWNhdGlvbiBSZWdFeCBBUEkgaW52b2tlcyBhIHNwZWNpZmljIGZ1bmN0aW9uDQpvZiB0aGUg UE1EIHRoYXQgY29udHJvbHMgdGhlIHRhcmdldCBkZXZpY2UgZGVzaWduYXRlZCBieSBpdHMgZGV2 aWNlDQppZGVudGlmaWVyLg0KDQpGb3IgdGhpcyBwdXJwb3NlLCBhbGwgZGV2aWNlLXNwZWNpZmlj IGZ1bmN0aW9ucyBvZiBhIFJlZ0V4IGRyaXZlciBhcmUNCnN1cHBsaWVkIHRocm91Z2ggYSBzZXQg b2YgcG9pbnRlcnMgY29udGFpbmVkIGluIGEgZ2VuZXJpYyBzdHJ1Y3R1cmUgb2YgdHlwZQ0KKnJl Z2V4X2Rldl9vcHMqLg0KVGhlIGFkZHJlc3Mgb2YgdGhlICpyZWdleF9kZXZfb3BzKiBzdHJ1Y3R1 cmUgaXMgc3RvcmVkIGluIHRoZQ0KKnJ0ZV9yZWdleF9kZXYqDQpzdHJ1Y3R1cmUgYnkgdGhlIGRl dmljZSBpbml0IGZ1bmN0aW9uIG9mIHRoZSBSZWdFeCBkcml2ZXIsIHdoaWNoIGlzDQppbnZva2Vk IGR1cmluZyB0aGUgUENJL1NvQyBkZXZpY2UgcHJvYmluZyBwaGFzZSwgYXMgZXhwbGFpbmVkIGVh cmxpZXIuDQoNCkluIG90aGVyIHdvcmRzLCBlYWNoIGZ1bmN0aW9uIG9mIHRoZSBSZWdFeCBBUEkg c2ltcGx5IHJldHJpZXZlcyB0aGUNCipydGVfcmVnZXhfZGV2KiBzdHJ1Y3R1cmUgYXNzb2NpYXRl ZCB3aXRoIHRoZSBkZXZpY2UgaWRlbnRpZmllciBhbmQNCnBlcmZvcm1zIGFuIGluZGlyZWN0IGlu dm9jYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgZHJpdmVyIGZ1bmN0aW9uDQpzdXBwbGllZCBp biB0aGUgKnJlZ2V4X2Rldl9vcHMqIHN0cnVjdHVyZSBvZiB0aGUgKnJ0ZV9yZWdleF9kZXYqDQpz dHJ1Y3R1cmUuDQoNCkZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0aGUgYWRkcmVzcyBvZiB0aGUg ZmFzdC1wYXRoIGZ1bmN0aW9ucyBvZiB0aGUNClJlZ0V4IGRyaXZlciBpcyBub3QgY29udGFpbmVk IGluIHRoZSAqcmVnZXhfZGV2X29wcyogc3RydWN0dXJlLg0KSW5zdGVhZCwgdGhleSBhcmUgZGly ZWN0bHkgc3RvcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlICpydGVfcmVnZXhfZGV2Kg0Kc3Ry dWN0dXJlIHRvIGF2b2lkIGFuIGV4dHJhIGluZGlyZWN0IG1lbW9yeSBhY2Nlc3MgZHVyaW5nIHRo ZWlyIGludm9jYXRpb24uDQoNClJURSBSZWdFeCBkZXZpY2UgZHJpdmVycyBkbyBub3QgdXNlIGlu dGVycnVwdHMgZm9yIGVucXVldWUgb3IgZGVxdWV1ZQ0Kb3BlcmF0aW9uLiBJbnN0ZWFkLCBSZWdF eCBkcml2ZXJzIGV4cG9ydCBQb2xsLU1vZGUgZW5xdWV1ZSBhbmQgZGVxdWV1ZQ0KZnVuY3Rpb25z IHRvIGFwcGxpY2F0aW9ucy4NCg0KVGhlICplbnF1ZXVlKiBvcGVyYXRpb24gc3VibWl0cyBhIGJ1 cnN0IG9mIFJlZ0V4IHBhdHRlcm4gbWF0Y2hpbmcNCnJlcXVlc3QNCnRvIHRoZSBSZWdFeCBkZXZp Y2UgYW5kIHRoZSAqZGVxdWV1ZSogb3BlcmF0aW9uIGdldHMgYSBidXJzdCBvZiBwYXR0ZXJuDQpt YXRjaGluZyByZXNwb25zZSBmb3IgdGhlIG9uZXMgc3VibWl0dGVkIHRocm91Z2ggKmVucXVldWUq IG9wZXJhdGlvbi4NCg0KVHlwaWNhbCBhcHBsaWNhdGlvbiB1dGlsaXNhdGlvbiBvZiB0aGUgUmVn RXggZGV2aWNlIEFQSSB3aWxsIGZvbGxvdyB0aGUNCmZvbGxvd2luZyBwcm9ncmFtbWluZyBmbG93 Lg0KDQotIHJ0ZV9yZWdleF9kZXZfY29uZmlndXJlKCkNCi0gcnRlX3JlZ2V4X3F1ZXVlX3BhaXJf c2V0dXAoKQ0KLSBydGVfcmVnZXhfcnVsZV9kYl91cGRhdGUoKSBOZWVkcyB0byBpbnZva2UgaWYg cHJlY29tcGlsZWQgcnVsZSBkYXRhYmFzZQ0Kbm90DQpwcm92aWRlZCBpbiBydGVfcmVnZXhfZGV2 X2NvbmZpZzo6cnVsZV9kYiBmb3IgcnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKQ0KYW5kL29yIGFw cGxpY2F0aW9uIG5lZWRzIHRvIHVwZGF0ZSBydWxlIGRhdGFiYXNlLg0KLSBDcmVhdGUgb3IgcmV1 c2UgZXhpdGluZyBtZW1wb29sIGZvciAqcnRlX3JlZ2V4X29wcyogb2JqZWN0cy4NCi0gcnRlX3Jl Z2V4X2Rldl9zdGFydCgpDQotIHJ0ZV9yZWdleF9lbnF1ZXVlX2J1cnN0KCkNCi0gcnRlX3JlZ2V4 X2RlcXVldWVfYnVyc3QoKQ0KDQotLS0NCg0KY29uZmlnL2NvbW1vbl9iYXNlICAgICAgICAgICAg ICAgICB8ICAgIDUgKw0KZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZCAgICAgICAgICB8ICAgIDEg Kw0KZG9jL2FwaS9kb3h5LWFwaS5jb25mLmluICAgICAgICAgICB8ICAgIDEgKw0KbGliL01ha2Vm aWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKw0KbGliL2xpYnJ0ZV9yZWdleGRldi9N YWtlZmlsZSAgICAgICB8ICAgMjMgKw0KbGliL2xpYnJ0ZV9yZWdleGRldi9ydGVfcmVnZXhkZXYu YyB8ICAgIDUgKw0KbGliL2xpYnJ0ZV9yZWdleGRldi9ydGVfcmVnZXhkZXYuaCB8IDEyNDcNCisr KysrKysrKysrKysrKysrKysrKysrKysrKysNCjcgZmlsZXMgY2hhbmdlZCwgMTI4NCBpbnNlcnRp b25zKCspDQpjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9yZWdleGRldi9NYWtlZmlsZQ0K Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVfcmVnZXhkZXYvcnRlX3JlZ2V4ZGV2LmMNCmNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGlicnRlX3JlZ2V4ZGV2L3J0ZV9yZWdleGRldi5oDQoNCmRp ZmYgLS1naXQgYS9jb25maWcvY29tbW9uX2Jhc2UgYi9jb25maWcvY29tbW9uX2Jhc2UNCmluZGV4 IGU0MDZlNzgzNi4uOTg2MDkzZDZlIDEwMDY0NA0KLS0tIGEvY29uZmlnL2NvbW1vbl9iYXNlDQor KysgYi9jb25maWcvY29tbW9uX2Jhc2UNCkBAIC03NDYsNiArNzQ2LDExIEBADQpDT05GSUdfUlRF X0xJQlJURV9QTURfRFBBQTJfUURNQV9SQVdERVY9bg0KIw0KQ09ORklHX1JURV9MSUJSVEVfUE1E X0lGUEdBX1JBV0RFVj15DQoNCisjDQorIyBDb21waWxlIHJlZ2V4IGRldmljZSBzdXBwb3J0DQor Iw0KK0NPTkZJR19SVEVfTElCUlRFX1JFR0VYREVWPXkNCisNCiMNCiMgQ29tcGlsZSBsaWJydGVf cmluZw0KIw0KZGlmZiAtLWdpdCBhL2RvYy9hcGkvZG94eS1hcGktaW5kZXgubWQgYi9kb2MvYXBp L2RveHktYXBpLWluZGV4Lm1kDQppbmRleCA3MTUyNDhkZDEuLmEwYmMyN2FlNCAxMDA2NDQNCi0t LSBhL2RvYy9hcGkvZG94eS1hcGktaW5kZXgubWQNCisrKyBiL2RvYy9hcGkvZG94eS1hcGktaW5k ZXgubWQNCkBAIC0yNiw2ICsyNiw3IEBAIFRoZSBwdWJsaWMgQVBJIGhlYWRlcnMgYXJlIGdyb3Vw ZWQgYnkgdG9waWNzOg0KW2V2ZW50X3RpbWVyX2FkYXB0ZXJdICAgIChAcmVmIHJ0ZV9ldmVudF90 aW1lcl9hZGFwdGVyLmgpLA0KW2V2ZW50X2NyeXB0b19hZGFwdGVyXSAgIChAcmVmIHJ0ZV9ldmVu dF9jcnlwdG9fYWRhcHRlci5oKSwNCltyYXdkZXZdICAgICAgICAgICAgIChAcmVmIHJ0ZV9yYXdk ZXYuaCksDQorICBbcmVnZXhkZXZdICAgICAgICAgICAoQHJlZiBydGVfcmVnZXhkZXYuaCksDQpb bWV0cmljc10gICAgICAgICAgICAoQHJlZiBydGVfbWV0cmljcy5oKSwNCltiaXRyYXRlXSAgICAg ICAgICAgIChAcmVmIHJ0ZV9iaXRyYXRlLmgpLA0KW2xhdGVuY3ldICAgICAgICAgICAgKEByZWYg cnRlX2xhdGVuY3lzdGF0cy5oKSwNCmRpZmYgLS1naXQgYS9kb2MvYXBpL2RveHktYXBpLmNvbmYu aW4gYi9kb2MvYXBpL2RveHktYXBpLmNvbmYuaW4NCmluZGV4IGI5ODk2Y2I2My4uN2FkYjgyMWJi IDEwMDY0NA0KLS0tIGEvZG9jL2FwaS9kb3h5LWFwaS5jb25mLmluDQorKysgYi9kb2MvYXBpL2Rv eHktYXBpLmNvbmYuaW4NCkBAIC01Myw2ICs1Myw3IEBAIElOUFVUICAgICAgICAgICAgICAgICAg ID0gQFRPUERJUkAvZG9jL2FwaS9kb3h5LWFwaS0NCmluZGV4Lm1kIFwNCkBUT1BESVJAL2xpYi9s aWJydGVfcmF3ZGV2IFwNCkBUT1BESVJAL2xpYi9saWJydGVfcmN1IFwNCkBUT1BESVJAL2xpYi9s aWJydGVfcmVvcmRlciBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICBAVE9QRElSQC9saWIv bGlicnRlX3JlZ2V4ZGV2IFwNCkBUT1BESVJAL2xpYi9saWJydGVfcmluZyBcDQpAVE9QRElSQC9s aWIvbGlicnRlX3NjaGVkIFwNCkBUT1BESVJAL2xpYi9saWJydGVfc2VjdXJpdHkgXA0KZGlmZiAt LWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQ0KaW5kZXggNzkxZTBkOTkxLi41N2Rl OTY5MWEgMTAwNjQ0DQotLS0gYS9saWIvTWFrZWZpbGUNCisrKyBiL2xpYi9NYWtlZmlsZQ0KQEAg LTQ0LDYgKzQ0LDggQEAgREVQRElSUy1saWJydGVfZXZlbnRkZXYgOj0gbGlicnRlX2VhbCBsaWJy dGVfcmluZw0KbGlicnRlX2V0aGRldiBsaWJydGVfaGFzaCBcDQpsaWJydGVfbWVtcG9vbCBsaWJy dGVfdGltZXIgbGlicnRlX2NyeXB0b2Rldg0KRElSUy0kKENPTkZJR19SVEVfTElCUlRFX1JBV0RF VikgKz0gbGlicnRlX3Jhd2Rldg0KREVQRElSUy1saWJydGVfcmF3ZGV2IDo9IGxpYnJ0ZV9lYWwg bGlicnRlX2V0aGRldg0KK0RJUlMtJChDT05GSUdfUlRFX0xJQlJURV9SRUdFWERFVikgKz0gbGli cnRlX3JlZ2V4ZGV2DQorREVQRElSUy1saWJydGVfcmVnZXhkZXYgOj0gbGlicnRlX2VhbA0KRElS Uy0kKENPTkZJR19SVEVfTElCUlRFX1ZIT1NUKSArPSBsaWJydGVfdmhvc3QNCkRFUERJUlMtbGli cnRlX3Zob3N0IDo9IGxpYnJ0ZV9lYWwgbGlicnRlX21lbXBvb2wgbGlicnRlX21idWYNCmxpYnJ0 ZV9ldGhkZXYgXA0KICAgICAgICAgICBsaWJydGVfbmV0DQpkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0 ZV9yZWdleGRldi9NYWtlZmlsZSBiL2xpYi9saWJydGVfcmVnZXhkZXYvTWFrZWZpbGUNCm5ldyBm aWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAuLjcyM2I0YjI4Yw0KLS0tIC9kZXYvbnVs bA0KKysrIGIvbGliL2xpYnJ0ZV9yZWdleGRldi9NYWtlZmlsZQ0KQEAgLTAsMCArMSwyMyBAQA0K KyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KKyMgQ29weXJpZ2h0KEMp IDIwMTkgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCisjDQorDQoraW5jbHVkZSAkKFJURV9T REspL21rL3J0ZS52YXJzLm1rDQorDQorIyBsaWJyYXJ5IG5hbWUNCitMSUIgPSBsaWJydGVfcmVn ZXhkZXYuYQ0KKw0KKyMgbGlicmFyeSB2ZXJzaW9uDQorTElCQUJJVkVSIDo9IDENCisNCisjIGJ1 aWxkIGZsYWdzDQorQ0ZMQUdTICs9IC1PMw0KK0NGTEFHUyArPSAkKFdFUlJPUl9GTEFHUykNCisN CisjIGxpYnJhcnkgc291cmNlIGZpbGVzDQorU1JDUy15ICs9IHJ0ZV9yZWdleGRldi5jDQorDQor IyBleHBvcnQgaW5jbHVkZSBmaWxlcw0KK1NZTUxJTksteS1pbmNsdWRlICs9IHJ0ZV9yZWdleGRl di5oDQorDQoraW5jbHVkZSAkKFJURV9TREspL21rL3J0ZS5saWIubWsNCmRpZmYgLS1naXQgYS9s aWIvbGlicnRlX3JlZ2V4ZGV2L3J0ZV9yZWdleGRldi5jDQpiL2xpYi9saWJydGVfcmVnZXhkZXYv cnRlX3JlZ2V4ZGV2LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAuLmU1 YmUwZjI5Yw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbGliL2xpYnJ0ZV9yZWdleGRldi9ydGVfcmVn ZXhkZXYuYw0KQEAgLTAsMCArMSw1IEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT RC0zLUNsYXVzZQ0KKyAqIENvcHlyaWdodChDKSAyMDE5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBM dGQuDQorICovDQorDQorI2luY2x1ZGUgPHJ0ZV9yZWdleGRldi5oPg0KZGlmZiAtLWdpdCBhL2xp Yi9saWJydGVfcmVnZXhkZXYvcnRlX3JlZ2V4ZGV2LmgNCmIvbGliL2xpYnJ0ZV9yZWdleGRldi9y dGVfcmVnZXhkZXYuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMC4uNzY1 ZGE0YWFhDQotLS0gL2Rldi9udWxsDQorKysgYi9saWIvbGlicnRlX3JlZ2V4ZGV2L3J0ZV9yZWdl eGRldi5oDQpAQCAtMCwwICsxLDEyNDcgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTMtQ2xhdXNlDQorICogQ29weXJpZ2h0KEMpIDIwMTkgTWFydmVsbCBJbnRlcm5hdGlvbmFs IEx0ZC4NCisgKi8NCisNCisjaWZuZGVmIF9SVEVfUkVHRVhERVZfSF8NCisjZGVmaW5lIF9SVEVf UkVHRVhERVZfSF8NCisNCisvKioNCisgKiBAZmlsZQ0KKyAqDQorICogUlRFIFJlZ0V4IERldmlj ZSBBUEkNCisgKg0KKyAqIERlZmluZXMgUlRFIFJlZ0V4IERldmljZSBBUElzIGZvciBSZWdFeCBv cGVyYXRpb25zIGFuZCBpdHMgcHJvdmlzaW9uaW5nLg0KKyAqDQorICogVGhlIFJlZ0V4IERldmlj ZSBBUEkgaXMgY29tcG9zZWQgb2YgdHdvIHBhcnRzOg0KKyAqDQorICogLSBUaGUgYXBwbGljYXRp b24tb3JpZW50ZWQgUmVnRXggQVBJIHRoYXQgaW5jbHVkZXMgZnVuY3Rpb25zIHRvIHNldHVwDQor ICogICBhIFJlZ0V4IGRldmljZSAoY29uZmlndXJlIGl0LCBzZXR1cCBpdHMgcXVldWUgcGFpcnMg YW5kIHN0YXJ0IGl0KSwNCisgKiAgIHVwZGF0ZSB0aGUgcnVsZSBkYXRhYmFzZSBhbmQgc28gb24u DQorICoNCisgKiAtIFRoZSBkcml2ZXItb3JpZW50ZWQgUmVnRXggQVBJIHRoYXQgZXhwb3J0cyBh IGZ1bmN0aW9uIGFsbG93aW5nDQorICogICBhIFJlZ0V4IHBvbGwgTW9kZSBEcml2ZXIgKFBNRCkg dG8gc2ltdWx0YW5lb3VzbHkgcmVnaXN0ZXIgaXRzZWxmIGFzDQorICogICBhIFJlZ0V4IGRldmlj ZSBkcml2ZXIuDQorICoNCisgKiBSZWdFeCBkZXZpY2UgY29tcG9uZW50cyBhbmQgZGVmaW5pdGlv bnM6DQorICoNCisgKiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tKw0KKyAqICAgICB8ICAgICAgICAg ICAgICAgICB8DQorICogICAgIHwgICAgICAgICAgICAgICAgIG8tLS0tLS0tLS0rICAgIHJ0ZV9y ZWdleF9bZW58ZGVdcXVldWVfYnVyc3QoKQ0KKyAqICAgICB8ICAgUENSRSBiYXNlZCAgICBvLS0t LS0tKyAgfCAgICAgICAgICAgICAgIHwNCisgKiAgICAgfCAgUmVnRXggcGF0dGVybiAgfCAgICAg IHwgIHwgICstLS0tLS0tLSsgICB8DQorICogICAgIHwgbWF0Y2hpbmcgZW5naW5lIG8tLS0tLS0r LS0rLS1vICAgICAgICB8ICAgfCAgICArLS0tLS0tKw0KKyAqICAgICB8ICAgICAgICAgICAgICAg ICB8ICAgICAgfCAgfCAgfCBxdWV1ZSAgfDw9PW89PT0+fENvcmUgMHwNCisgKiAgICAgfCAgICAg ICAgICAgICAgICAgby0tLS0rIHwgIHwgIHwgcGFpciAwIHwgICAgICAgIHwgICAgICB8DQorICog ICAgIHwgICAgICAgICAgICAgICAgIHwgICAgfCB8ICB8ICArLS0tLS0tLS0rICAgICAgICArLS0t LS0tKw0KKyAqICAgICArLS0tLS0tLS0tLS0tLS0tLS0rICAgIHwgfCAgfA0KKyAqICAgICAgICAg ICAgXiAgICAgICAgICAgICAgIHwgfCAgfCAgKy0tLS0tLS0tKw0KKyAqICAgICAgICAgICAgfCAg ICAgICAgICAgICAgIHwgfCAgfCAgfCAgICAgICAgfCAgICAgICAgKy0tLS0tLSsNCisgKiAgICAg ICAgICAgIHwgICAgICAgICAgICAgICB8ICstLSstLW8gcXVldWUgIHw8PT09PT09PnxDb3JlIDF8 DQorICogICAgICAgIFJ1bGV8RGF0YWJhc2UgICAgICAgfCAgICB8ICB8IHBhaXIgMSB8ICAgICAg ICB8ICAgICAgfA0KKyAqICAgICArLS0tLS0tKy0tLS0tLS0tLS0rICAgIHwgICAgfCAgKy0tLS0t LS0tKyAgICAgICAgKy0tLS0tLSsNCisgKiAgICAgfCAgICAgR3JvdXAgMCAgICAgfCAgICB8ICAg IHwNCisgKiAgICAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICB8ICAgIHwgICstLS0tLS0tLSsgICAg ICAgICstLS0tLS0rDQorICogICAgIHwgfCBSdWxlcyAwLi5uICB8IHwgICAgfCAgICB8ICB8ICAg ICAgICB8ICAgICAgICB8Q29yZSAyfA0KKyAqICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgIHwg ICAgKy0tbyBxdWV1ZSAgfDw9PT09PT0+fCAgICAgIHwNCisgKiAgICAgfCAgICAgR3JvdXAgMSAg ICAgfCAgICB8ICAgICAgIHwgcGFpciAyIHwgICAgICAgICstLS0tLS0rDQorICogICAgIHwgKy0t LS0tLS0tLS0tLS0rIHwgICAgfCAgICAgICArLS0tLS0tLS0rDQorICogICAgIHwgfCBSdWxlcyAw Li5uICB8IHwgICAgfA0KKyAqICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgIHwgICAgICAgKy0t LS0tLS0tKw0KKyAqICAgICB8ICAgICBHcm91cCAyICAgICB8ICAgIHwgICAgICAgfCAgICAgICAg fCAgICAgICAgKy0tLS0tLSsNCisgKiAgICAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICB8ICAgICAg IHwgcXVldWUgIHw8PT09PT09PnxDb3JlIG58DQorICogICAgIHwgfCBSdWxlcyAwLi5uICB8IHwg ICAgKy0tLS0tLS1vIHBhaXIgbiB8ICAgICAgICB8ICAgICAgfA0KKyAqICAgICB8ICstLS0tLS0t LS0tLS0tKyB8ICAgICAgICAgICAgKy0tLS0tLS0tKyAgICAgICAgKy0tLS0tLSsNCisgKiAgICAg fCAgICAgR3JvdXAgbiAgICAgfA0KKyAqICAgICB8ICstLS0tLS0tLS0tLS0tKyB8PC0tLS0tLS1y dGVfcmVnZXhfcnVsZV9kYl91cGRhdGUoKQ0KKyAqICAgICB8IHwgUnVsZXMgMC4ubiAgfCB8PC0t LS0tLS1ydGVfcmVnZXhfcnVsZV9kYl9pbXBvcnQoKQ0KKyAqICAgICB8ICstLS0tLS0tLS0tLS0t KyB8LS0tLS0tLT5ydGVfcmVnZXhfcnVsZV9kYl9leHBvcnQoKQ0KKyAqICAgICArLS0tLS0tLS0t LS0tLS0tLS0rDQorICoNCisgKiBSZWdFeDogQSByZWd1bGFyIGV4cHJlc3Npb24gaXMgYSBjb25j aXNlIGFuZCBmbGV4aWJsZSBtZWFucyBmb3IgbWF0Y2hpbmcNCisgKiBzdHJpbmdzIG9mIHRleHQs IHN1Y2ggYXMgcGFydGljdWxhciBjaGFyYWN0ZXJzLCB3b3Jkcywgb3IgcGF0dGVybnMgb2YNCisg KiBjaGFyYWN0ZXJzLiBBIGNvbW1vbiBhYmJyZXZpYXRpb24gZm9yIHRoaXMgaXMg4oCcUmVnRXji gJ0uDQorICoNCisgKiBSZWdFeCBkZXZpY2U6IEEgaGFyZHdhcmUgb3Igc29mdHdhcmUtYmFzZWQg aW1wbGVtZW50YXRpb24gb2YgUmVnRXgNCisgKiBkZXZpY2UgQVBJIGZvciBQQ1JFIGJhc2VkIHBh dHRlcm4gbWF0Y2hpbmcgc3ludGF4IGFuZCBzZW1hbnRpY3MuDQorICoNCisgKiBQQ1JFIFJlZ0V4 IHN5bnRheCBhbmQgc2VtYW50aWNzIHNwZWNpZmljYXRpb246DQorICoNCmh0dHBzOi8vZXVyMDMu c2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwJTNBJTJGJTJGcmVnZXgN CmtpdC5zb3VyY2Vmb3JnZS5uZXQ8aHR0cDovL2tpdC5zb3VyY2Vmb3JnZS5uZXQ+JTJGRG9jdW1l bnRhdGlvbiUyRnBjcmUlMkZwY3JlcGF0dGVybi5odG1sJmFtcDtkDQphdGE9MDIlN0MwMSU3Q3No YWhhZnMlNDBtZWxsYW5veC5jb208aHR0cDovLzQwbWVsbGFub3guY29tPiU3Q2RmOTM0MTZjZjRl ODQ5OGE5ODJjMDhkNzIxDQo3NDg5MzclN0NhNjUyOTcxYzdkMmU0ZDliYTZhNGQxNDkyNTZmNDYx YiU3QzAlN0MwJTdDNjM3MDE0NjU2NzMNCjk5OTMxMzEmYW1wO3NkYXRhPUIwTFNNdWJsZER5M1Vs RjU1WjN3aGhOaVJxNmVwMXB4QjhScnQ1REl0ZnclMw0KRCZhbXA7cmVzZXJ2ZWQ9MA0KKyAqDQor ICogUmVnRXggcXVldWUgcGFpcjogRWFjaCBSZWdFeCBkZXZpY2Ugc2hvdWxkIGhhdmUgb25lIG9y IG1vcmUgcXVldWUNCnBhaXIgdG8NCisgKiB0cmFuc21pdCBhIGJ1cnN0IG9mIHBhdHRlcm4gbWF0 Y2hpbmcgcmVxdWVzdCBhbmQgcmVjZWl2ZSBhIGJ1cnN0IG9mDQorICogcmVjZWl2ZSB0aGUgcGF0 dGVybiBtYXRjaGluZyByZXNwb25zZS4gVGhlIHBhdHRlcm4gbWF0Y2hpbmcNCnJlcXVlc3QvcmVz cG9uc2UNCisgKiBlbWJlZGRlZCBpbiAqcnRlX3JlZ2V4X29wcyogc3RydWN0dXJlLg0KKyAqDQor ICogUnVsZTogQSBwYXR0ZXJuIG1hdGNoaW5nIHJ1bGUgZXhwcmVzc2VkIGluIFBDUkUgUmVnRXgg c3ludGF4IGFsb25nIHdpdGgNCisgKiBNYXRjaCBJRCBhbmQgR3JvdXAgSUQgdG8gaWRlbnRpZnkg dGhlIHJ1bGUgdXBvbiB0aGUgbWF0Y2guDQorICoNCisgKiBSdWxlIGRhdGFiYXNlOiBUaGUgUmVn RXggZGV2aWNlIGFjY2VwdHMgcmVndWxhciBleHByZXNzaW9ucyBhbmQNCmNvbnZlcnRzIHRoZW0N CisgKiBpbnRvIGEgY29tcGlsZWQgcnVsZSBkYXRhYmFzZSB0aGF0IGNhbiB0aGVuIGJlIHVzZWQg dG8gc2NhbiBkYXRhLg0KKyAqIENvbXBpbGF0aW9uIGFsbG93cyB0aGUgZGV2aWNlIHRvIGFuYWx5 emUgdGhlIGdpdmVuIHBhdHRlcm4ocykgYW5kDQorICogcHJlLWRldGVybWluZSBob3cgdG8gc2Nh biBmb3IgdGhlc2UgcGF0dGVybnMgaW4gYW4gb3B0aW1pemVkIGZhc2hpb24NCnRoYXQNCisgKiB3 b3VsZCBiZSBmYXIgdG9vIGV4cGVuc2l2ZSB0byBjb21wdXRlIGF0IHJ1bi10aW1lLiBBIHJ1bGUg ZGF0YWJhc2UNCmNvbnRhaW5zDQorICogYSBzZXQgb2YgcnVsZXMgdGhhdCBjb21waWxlZCBpbiBk ZXZpY2Ugc3BlY2lmaWMgYmluYXJ5IGZvcm0uDQorICoNCisgKiBNYXRjaCBJRCBvciBSdWxlIElE OiBBIHVuaXF1ZSBpZGVudGlmaWVyIHByb3ZpZGVkIGF0IHRoZSB0aW1lIG9mIHJ1bGUNCisgKiBj cmVhdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGlkZW50aWZ5IHRoZSBydWxlIHVwb24gbWF0 Y2guDQorICoNCisgKiBHcm91cCBJRDogR3JvdXAgb2YgcnVsZXMgY2FuIGJlIGdyb3VwZWQgdW5k ZXIgb25lIGdyb3VwIElEIHRvIGVuYWJsZQ0KKyAqIHJ1bGUgaXNvbGF0aW9uIGFuZCBlZmZlY3Rp dmUgcGF0dGVybiBtYXRjaGluZy4gQSB1bmlxdWUgZ3JvdXAgaWRlbnRpZmllcg0KKyAqIHByb3Zp ZGVkIGF0IHRoZSB0aW1lIG9mIHJ1bGUgY3JlYXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBp ZGVudGlmeSB0aGUNCisgKiBydWxlIHVwb24gbWF0Y2guDQorICoNCisgKiBTY2FuOiBBIHBhdHRl cm4gbWF0Y2hpbmcgcmVxdWVzdCB0aHJvdWdoICplbnF1ZXVlKiBBUEkuDQorICoNCisgKiBJdCBt YXkgcG9zc2libGUgdGhhdCBhIGdpdmVuIFJlZ0V4IGRldmljZSBtYXkgbm90IHN1cHBvcnQgYWxs IHRoZSBmZWF0dXJlcw0KKyAqIG9mIFBDUkUuIFRoZSBhcHBsaWNhdGlvbiBtYXkgcHJvYmUgdW5z dXBwb3J0ZWQgZmVhdHVyZXMgdGhyb3VnaA0KKyAqIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86 OnBjcmVfdW5zdXBfZmxhZ3MNCisgKg0KKyAqIEJ5IGRlZmF1bHQsIGFsbCB0aGUgZnVuY3Rpb25z IG9mIHRoZSBSZWdFeCBEZXZpY2UgQVBJIGV4cG9ydGVkIGJ5IGEgUE1EDQorICogYXJlIGxvY2st ZnJlZSBmdW5jdGlvbnMgd2hpY2ggYXNzdW1lIHRvIG5vdCBiZSBpbnZva2VkIGluIHBhcmFsbGVs IG9uDQorICogZGlmZmVyZW50IGxvZ2ljYWwgY29yZXMgdG8gd29yayBvbiB0aGUgc2FtZSB0YXJn ZXQgb2JqZWN0LiBGb3IgaW5zdGFuY2UsDQorICogdGhlIGRlcXVldWUgZnVuY3Rpb24gb2YgYSBQ TUQgY2Fubm90IGJlIGludm9rZWQgaW4gcGFyYWxsZWwgb24gdHdvDQpsb2dpY2FsDQorICogY29y ZXMgdG8gb3BlcmF0ZXMgb24gc2FtZSBSZWdFeCBxdWV1ZSBwYWlyLiBPZiBjb3Vyc2UsIHRoaXMg ZnVuY3Rpb24NCisgKiBjYW4gYmUgaW52b2tlZCBpbiBwYXJhbGxlbCBieSBkaWZmZXJlbnQgbG9n aWNhbCBjb3JlIG9uIGRpZmZlcmVudCBxdWV1ZQ0KcGFpci4NCisgKiBJdCBpcyB0aGUgcmVzcG9u c2liaWxpdHkgb2YgdGhlIHVwcGVyIGxldmVsIGFwcGxpY2F0aW9uIHRvIGVuZm9yY2UgdGhpcyBy dWxlLg0KKyAqDQorICogSW4gYWxsIGZ1bmN0aW9ucyBvZiB0aGUgUmVnRXggQVBJLCB0aGUgUmVn RXggZGV2aWNlIGlzDQorICogZGVzaWduYXRlZCBieSBhbiBpbnRlZ2VyID49IDAgbmFtZWQgdGhl IGRldmljZSBpZGVudGlmaWVyICpkZXZfaWQqDQorICoNCisgKiBBdCB0aGUgUmVnRXggZHJpdmVy IGxldmVsLCBSZWdFeCBkZXZpY2VzIGFyZSByZXByZXNlbnRlZCBieSBhIGdlbmVyaWMNCisgKiBk YXRhIHN0cnVjdHVyZSBvZiB0eXBlICpydGVfcmVnZXhfZGV2Ki4NCisgKg0KKyAqIFJlZ0V4IGRl dmljZXMgYXJlIGR5bmFtaWNhbGx5IHJlZ2lzdGVyZWQgZHVyaW5nIHRoZSBQQ0kvU29DIGRldmlj ZQ0KcHJvYmluZw0KKyAqIHBoYXNlIHBlcmZvcm1lZCBhdCBFQUwgaW5pdGlhbGl6YXRpb24gdGlt ZS4NCisgKiBXaGVuIGEgUmVnRXggZGV2aWNlIGlzIGJlaW5nIHByb2JlZCwgYSAqcnRlX3JlZ2V4 X2Rldiogc3RydWN0dXJlIGFuZA0KKyAqIGEgbmV3IGRldmljZSBpZGVudGlmaWVyIGFyZSBhbGxv Y2F0ZWQgZm9yIHRoYXQgZGV2aWNlLiBUaGVuLCB0aGUNCisgKiByZWdleF9kZXZfaW5pdCgpIGZ1 bmN0aW9uIHN1cHBsaWVkIGJ5IHRoZSBSZWdFeCBkcml2ZXIgbWF0Y2hpbmcgdGhlDQpwcm9iZWQN CisgKiBkZXZpY2UgaXMgaW52b2tlZCB0byBwcm9wZXJseSBpbml0aWFsaXplIHRoZSBkZXZpY2Uu DQorICoNCisgKiBUaGUgcm9sZSBvZiB0aGUgZGV2aWNlIGluaXQgZnVuY3Rpb24gY29uc2lzdHMg b2YgcmVzZXR0aW5nIHRoZSBoYXJkd2FyZSBvcg0KKyAqIHNvZnR3YXJlIFJlZ0V4IGRyaXZlciBp bXBsZW1lbnRhdGlvbnMuDQorICoNCisgKiBJZiB0aGUgZGV2aWNlIGluaXQgb3BlcmF0aW9uIGlz IHN1Y2Nlc3NmdWwsIHRoZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuDQorICogdGhlIGRldmljZSBp ZGVudGlmaWVyIGFzc2lnbmVkIHRvIHRoZSBuZXcgZGV2aWNlIGFuZCBpdHMgYXNzb2NpYXRlZA0K KyAqICpydGVfcmVnZXhfZGV2KiBzdHJ1Y3R1cmUgaXMgZWZmZWN0aXZlbHkgcmVnaXN0ZXJlZC4N CisgKiBPdGhlcndpc2UsIGJvdGggdGhlICpydGVfcmVnZXhfZGV2KiBzdHJ1Y3R1cmUgYW5kIHRo ZSBkZXZpY2UgaWRlbnRpZmllcg0KYXJlDQorICogZnJlZWQuDQorICoNCisgKiBUaGUgZnVuY3Rp b25zIGV4cG9ydGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBSZWdFeCBBUEkgdG8gc2V0dXAgYSBkZXZp Y2UNCisgKiBkZXNpZ25hdGVkIGJ5IGl0cyBkZXZpY2UgaWRlbnRpZmllciBtdXN0IGJlIGludm9r ZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoNCisgKiAgICAgLSBydGVfcmVnZXhfZGV2X2NvbmZp Z3VyZSgpDQorICogICAgIC0gcnRlX3JlZ2V4X3F1ZXVlX3BhaXJfc2V0dXAoKQ0KKyAqICAgICAt IHJ0ZV9yZWdleF9kZXZfc3RhcnQoKQ0KKyAqDQorICogVGhlbiwgdGhlIGFwcGxpY2F0aW9uIGNh biBpbnZva2UsIGluIGFueSBvcmRlciwgdGhlIGZ1bmN0aW9ucw0KKyAqIGV4cG9ydGVkIGJ5IHRo ZSBSZWdFeCBBUEkgdG8gZW5xdWV1ZSBwYXR0ZXJuIG1hdGNoaW5nIGpvYiwgZGVxdWV1ZQ0KcGF0 dGVybg0KKyAqIG1hdGNoaW5nIHJlc3BvbnNlLCBnZXQgdGhlIHN0YXRzLCB1cGRhdGUgdGhlIHJ1 bGUgZGF0YWJhc2UsDQorICogZ2V0L3NldCBkZXZpY2UgYXR0cmlidXRlcyBhbmQgc28gb24NCisg Kg0KKyAqIElmIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRp b24gKGkuZS4gY2FsbA0KKyAqIHJ0ZV9yZWdleF9kZXZfY29uZmlndXJlKCkgb3IgcnRlX3JlZ2V4 X3F1ZXVlX3BhaXJfc2V0dXAoKSksIGl0IG11c3QNCmNhbGwNCisgKiBydGVfcmVnZXhfZGV2X3N0 b3AoKSBmaXJzdCB0byBzdG9wIHRoZSBkZXZpY2UgYW5kIHRoZW4gZG8gdGhlDQpyZWNvbmZpZ3Vy YXRpb24NCisgKiBiZWZvcmUgY2FsbGluZyBydGVfcmVnZXhfZGV2X3N0YXJ0KCkgYWdhaW4uIFRo ZSBlbnF1ZXVlIGFuZCBkZXF1ZXVlDQorICogZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgaW52b2tl ZCB3aGVuIHRoZSBkZXZpY2UgaXMgc3RvcHBlZC4NCisgKg0KKyAqIEZpbmFsbHksIGFuIGFwcGxp Y2F0aW9uIGNhbiBjbG9zZSBhIFJlZ0V4IGRldmljZSBieSBpbnZva2luZyB0aGUNCisgKiBydGVf cmVnZXhfZGV2X2Nsb3NlKCkgZnVuY3Rpb24uDQorICoNCisgKiBFYWNoIGZ1bmN0aW9uIG9mIHRo ZSBhcHBsaWNhdGlvbiBSZWdFeCBBUEkgaW52b2tlcyBhIHNwZWNpZmljIGZ1bmN0aW9uDQorICog b2YgdGhlIFBNRCB0aGF0IGNvbnRyb2xzIHRoZSB0YXJnZXQgZGV2aWNlIGRlc2lnbmF0ZWQgYnkg aXRzIGRldmljZQ0KKyAqIGlkZW50aWZpZXIuDQorICoNCisgKiBGb3IgdGhpcyBwdXJwb3NlLCBh bGwgZGV2aWNlLXNwZWNpZmljIGZ1bmN0aW9ucyBvZiBhIFJlZ0V4IGRyaXZlciBhcmUNCisgKiBz dXBwbGllZCB0aHJvdWdoIGEgc2V0IG9mIHBvaW50ZXJzIGNvbnRhaW5lZCBpbiBhIGdlbmVyaWMg c3RydWN0dXJlIG9mIHR5cGUNCisgKiAqcmVnZXhfZGV2X29wcyouDQorICogVGhlIGFkZHJlc3Mg b2YgdGhlICpyZWdleF9kZXZfb3BzKiBzdHJ1Y3R1cmUgaXMgc3RvcmVkIGluIHRoZQ0KKnJ0ZV9y ZWdleF9kZXYqDQorICogc3RydWN0dXJlIGJ5IHRoZSBkZXZpY2UgaW5pdCBmdW5jdGlvbiBvZiB0 aGUgUmVnRXggZHJpdmVyLCB3aGljaCBpcw0KKyAqIGludm9rZWQgZHVyaW5nIHRoZSBQQ0kvU29D IGRldmljZSBwcm9iaW5nIHBoYXNlLCBhcyBleHBsYWluZWQgZWFybGllci4NCisgKg0KKyAqIElu IG90aGVyIHdvcmRzLCBlYWNoIGZ1bmN0aW9uIG9mIHRoZSBSZWdFeCBBUEkgc2ltcGx5IHJldHJp ZXZlcyB0aGUNCisgKiAqcnRlX3JlZ2V4X2Rldiogc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCB0 aGUgZGV2aWNlIGlkZW50aWZpZXIgYW5kDQorICogcGVyZm9ybXMgYW4gaW5kaXJlY3QgaW52b2Nh dGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBkcml2ZXIgZnVuY3Rpb24NCisgKiBzdXBwbGllZCBp biB0aGUgKnJlZ2V4X2Rldl9vcHMqIHN0cnVjdHVyZSBvZiB0aGUgKnJ0ZV9yZWdleF9kZXYqDQpz dHJ1Y3R1cmUuDQorICoNCisgKiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdGhlIGFkZHJlc3Mg b2YgdGhlIGZhc3QtcGF0aCBmdW5jdGlvbnMgb2YgdGhlDQorICogUmVnRXggZHJpdmVyIGlzIG5v dCBjb250YWluZWQgaW4gdGhlICpyZWdleF9kZXZfb3BzKiBzdHJ1Y3R1cmUuDQorICogSW5zdGVh ZCwgdGhleSBhcmUgZGlyZWN0bHkgc3RvcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlICpydGVf cmVnZXhfZGV2Kg0KKyAqIHN0cnVjdHVyZSB0byBhdm9pZCBhbiBleHRyYSBpbmRpcmVjdCBtZW1v cnkgYWNjZXNzIGR1cmluZyB0aGVpcg0KaW52b2NhdGlvbi4NCisgKg0KKyAqIFJURSBSZWdFeCBk ZXZpY2UgZHJpdmVycyBkbyBub3QgdXNlIGludGVycnVwdHMgZm9yIGVucXVldWUgb3IgZGVxdWV1 ZQ0KKyAqIG9wZXJhdGlvbi4gSW5zdGVhZCwgUmVnRXggZHJpdmVycyBleHBvcnQgUG9sbC1Nb2Rl IGVucXVldWUgYW5kDQpkZXF1ZXVlDQorICogZnVuY3Rpb25zIHRvIGFwcGxpY2F0aW9ucy4NCisg Kg0KKyAqIFRoZSAqZW5xdWV1ZSogb3BlcmF0aW9uIHN1Ym1pdHMgYSBidXJzdCBvZiBSZWdFeCBw YXR0ZXJuIG1hdGNoaW5nDQpyZXF1ZXN0DQorICogdG8gdGhlIFJlZ0V4IGRldmljZSBhbmQgdGhl ICpkZXF1ZXVlKiBvcGVyYXRpb24gZ2V0cyBhIGJ1cnN0IG9mIHBhdHRlcm4NCisgKiBtYXRjaGlu ZyByZXNwb25zZSBmb3IgdGhlIG9uZXMgc3VibWl0dGVkIHRocm91Z2ggKmVucXVldWUqDQpvcGVy YXRpb24uDQorICoNCisgKiBUeXBpY2FsIGFwcGxpY2F0aW9uIHV0aWxpc2F0aW9uIG9mIHRoZSBS ZWdFeCBkZXZpY2UgQVBJIHdpbGwgZm9sbG93IHRoZQ0KKyAqIGZvbGxvd2luZyBwcm9ncmFtbWlu ZyBmbG93Lg0KKyAqDQorICogLSBydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgpDQorICogLSBydGVf cmVnZXhfcXVldWVfcGFpcl9zZXR1cCgpDQorICogLSBydGVfcmVnZXhfcnVsZV9kYl91cGRhdGUo KSBOZWVkcyB0byBpbnZva2UgaWYgcHJlY29tcGlsZWQgcnVsZQ0KZGF0YWJhc2Ugbm90DQorICog ICBwcm92aWRlZCBpbiBydGVfcmVnZXhfZGV2X2NvbmZpZzo6cnVsZV9kYiBmb3INCnJ0ZV9yZWdl eF9kZXZfY29uZmlndXJlKCkNCisgKiAgIGFuZC9vciBhcHBsaWNhdGlvbiBuZWVkcyB0byB1cGRh dGUgcnVsZSBkYXRhYmFzZS4NCisgKiAtIENyZWF0ZSBvciByZXVzZSBleGl0aW5nIG1lbXBvb2wg Zm9yICpydGVfcmVnZXhfb3BzKiBvYmplY3RzLg0KKyAqIC0gcnRlX3JlZ2V4X2Rldl9zdGFydCgp DQorICogLSBydGVfcmVnZXhfZW5xdWV1ZV9idXJzdCgpDQorICogLSBydGVfcmVnZXhfZGVxdWV1 ZV9idXJzdCgpDQorICoNCisgKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMi IHsNCisjZW5kaWYNCisNCisjaW5jbHVkZSA8cnRlX2NvbW1vbi5oPg0KKyNpbmNsdWRlIDxydGVf Y29uZmlnLmg+DQorI2luY2x1ZGUgPHJ0ZV9kZXYuaD4NCisjaW5jbHVkZSA8cnRlX2Vycm5vLmg+ DQorI2luY2x1ZGUgPHJ0ZV9tZW1vcnkuaD4NCisNCisvKioNCisgKiBHZXQgdGhlIHRvdGFsIG51 bWJlciBvZiBSZWdFeCBkZXZpY2VzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseQ0KKyAqIGlu aXRpYWxpc2VkLg0KKyAqDQorICogQHJldHVybg0KKyAqICAgVGhlIHRvdGFsIG51bWJlciBvZiB1 c2FibGUgUmVnRXggZGV2aWNlcy4NCisgKi8NCit1aW50OF90DQorcnRlX3JlZ2V4X2Rldl9jb3Vu dCh2b2lkKTsNCisNCisvKioNCisgKiBHZXQgdGhlIGRldmljZSBpZGVudGlmaWVyIGZvciB0aGUg bmFtZWQgUmVnRXggZGV2aWNlLg0KKyAqDQorICogQHBhcmFtIG5hbWUNCisgKiAgIFJlZ0V4IGRl dmljZSBuYW1lIHRvIHNlbGVjdCB0aGUgUmVnRXggZGV2aWNlIGlkZW50aWZpZXIuDQorICoNCisg KiBAcmV0dXJuDQorICogICBSZXR1cm5zIFJlZ0V4IGRldmljZSBpZGVudGlmaWVyIG9uIHN1Y2Nl c3MuDQorICogICAtIDwwOiBGYWlsdXJlIHRvIGZpbmQgbmFtZWQgUmVnRXggZGV2aWNlLg0KKyAq Lw0KK2ludA0KK3J0ZV9yZWdleF9kZXZfZ2V0X2Rldl9pZChjb25zdCBjaGFyICpuYW1lKTsNCisN CisvKiBFbnVtZXJhdGVzIFJlZ0V4IGRldmljZSBjYXBhYmlsaXRpZXMgKi8NCisjZGVmaW5lIFJU RV9SRUdFWF9ERVZfQ0FQQV9SVU5USU1FX0NPTVBJTEFUSU9OX0YgKDFVTEwgPDwgMCkNCisvKio8 IFJlZ0V4IGRldmljZSBkb2VzIHN1cHBvcnQgY29tcGlsaW5nIHRoZSBydWxlcyBhdCBydW50aW1l IHVubGlrZQ0KKyAqIGxvYWRpbmcgb25seSB0aGUgcHJlLWJ1aWx0IHJ1bGUgZGF0YWJhc2UgdXNp bmcNCisgKiBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9jb25maWc6OnJ1bGVfZGIgaW4gcnRlX3JlZ2V4 X2Rldl9jb25maWd1cmUoKQ0KKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfY29uZmlnOjpy dWxlX2RiLCBydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgpDQorICogQHNlZSBzdHJ1Y3QgcnRlX3Jl Z2V4X2Rldl9pbmZvOjpyZWdleF9kZXZfY2FwYQ0KKyAqLw0KKw0KKw0KKy8qIEVudW1lcmF0ZXMg dW5zdXBwb3J0ZWQgUENSRSBmZWF0dXJlcyBmb3IgdGhlIFJlZ0V4IGRldmljZSAqLw0KKyNkZWZp bmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQX1NUQVJUX0FOQ0hPUl9GICgxVUxMIDw8IDApDQor LyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBDUkUgQW5jaG9yIHRvIHN0YXJ0IG9m IG1hdGNoIGZsYWcuDQorICogRXhhbXBsZSBSZWdFeCBpcyAnL1xHZm9vXGQvJy4gSGVyZSAnXEcn IGFzc2VydHMgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiB0aGUNCisgKiBwcmV2aW91cyBtYXRjaCBv ciB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyBmb3IgdGhlIGZpcnN0IG1hdGNoLg0KKyAqIFRoaXMg cG9zaXRpb24gd2lsbCBjaGFuZ2UgZWFjaCB0aW1lIHRoZSBSZWdFeCBpcyBhcHBsaWVkIHRvIHRo ZSBzdWJqZWN0DQorICogc3RyaW5nLiBJZiB0aGUgUmVnRXggaXMgYXBwbGllZCB0byAnZm9vMWZv bzJaZm9vMycgdGhlIGZpcnN0IHR3byBtYXRjaGVzIHdpbGwNCisgKiBiZSBzdWNjZXNzZnVsIGZv ciAnZm9vMWZvbzInIGFuZCBmYWlsIGZvciAnWmZvbzMnLg0KKyAqIEBzZWUgc3RydWN0IHJ0ZV9y ZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KKyAqLw0KKw0KKyNkZWZpbmUgUlRFX1JF R0VYX0RFVl9QQ1JFX1VOU1VQX0FUT01JQ19HUk9VUElOR19GICgxVUxMIDw8DQoxKQ0KKy8qKjwg UmVnRXggZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQQ1JFIEF0b21pYyBncm91cGluZy4NCisgKiBB dG9taWMgZ3JvdXBzIGFyZSByZXByZXNlbnRlZCBieSAnKD8+KScuIEFuIGF0b21pYyBncm91cCBp cyBhIGdyb3VwIHRoYXQsDQorICogd2hlbiB0aGUgUmVnRXggZW5naW5lIGV4aXRzIGZyb20gaXQs IGF1dG9tYXRpY2FsbHkgdGhyb3dzIGF3YXkgYWxsDQorICogYmFja3RyYWNraW5nIHBvc2l0aW9u cyByZW1lbWJlcmVkIGJ5IGFueSB0b2tlbnMgaW5zaWRlIHRoZSBncm91cC4NCisgKiBFeGFtcGxl IFJlZ0V4IGlzICdhKD8+YmN8YiljJyBpZiB0aGUgZ2l2ZW4gcGF0dGVybnMgYXJlICdhYmMnIGFu ZCAnYWJjYycNCnRoZW4NCisgKiAnYShiY3xiKWMnIG1hdGNoZXMgYm90aCB3aGVyZSBhcyAnYSg/ PmJjfGIpYycgbWF0Y2hlcyBvbmx5IGFiY2MgYmVjYXVzZQ0KKyAqIGF0b21pYyBncm91cHMgZG9u J3QgYWxsb3cgYmFja3RyYWNpbmcgYmFjayB0byAnYicuDQorICogQHNlZSBzdHJ1Y3QgcnRlX3Jl Z2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3VwX2ZsYWdzDQorICovDQorDQorI2RlZmluZSBSVEVfUkVH RVhfREVWX1BDUkVfVU5TVVBfQkFDS1RSQUNLSU5HX0NUUkxfRiAoMVVMTCA8PA0KMikNCisvKio8 IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgUENSRSBiYWNrdHJhY2tpbmcgY29udHJvbCB2 ZXJicy4NCisgKiBTb21lIGV4YW1wbGVzIG9mIGJhY2t0cmFjaW5nIHZlcmJzIGFyZSAoKkNPTU1J VCksICgqQUNDRVBUKSwgKCpGQUlMKSwNCisgKiAoKlNLSVApLCAoKlBSVU5FKS4NCisgKiBAc2Vl IHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCisgKi8NCisNCisj ZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9DQUxMT1VUU19GICgxVUxMIDw8IDMpDQor LyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBDUkUgY2FsbG91dHMuDQorICogUENS RSBzdXBwb3J0cyBjYWxsaW5nIGV4dGVybmFsIGZ1bmN0aW9uIGluIGJldHdlZW4gbWF0Y2hlcyBi eSB1c2luZw0KJyg/QyknLg0KKyAqIEV4YW1wbGUgUmVnRXggJ0FCQyg/QylEJyBpZiBhIGdpdmVu IHBhdHRlciBpcyAnQUJDRCcgdGhlbiB0aGUgUmVnRXgNCmVuZ2luZQ0KKyAqIHdpbGwgcGFyc2Ug QUJDIHBlcmZvcm0gYSB1c2VyZGVmaW5lZCBjYWxsb3V0IGFuZCByZXR1cm4gYSBzdWNjZXNzZnVs DQptYXRjaCBhdA0KKyAqIEQuDQorICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpw Y3JlX3Vuc3VwX2ZsYWdzDQorICovDQorDQorI2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5T VVBfQkFDS1JFRkVSRU5DRV9GICgxVUxMIDw8IDQpDQorLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24n dCBzdXBwb3J0IFBDUkUgYmFja3JlZmVyZW5jZS4NCisgKiBFeGFtcGxlIFJlZ0V4IGlzICcoXDJB QkN8KEdISSkpKycgXDIgbWF0Y2hlcyB0aGUgc2FtZSB0ZXh0IGFzIG1vc3QNCnJlY2VudGx5DQor ICogbWF0Y2hlZCBieSB0aGUgMm5kIGNhcHR1cmluZyBncm91cCBpLmUuICdHSEknLg0KKyAqIEBz ZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KKyAqLw0KKw0K KyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQX0dSRUVEWV9GICgxVUxMIDw8IDUpDQor LyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBDUkUgR3JlZWR5IG1vZGUuDQorICog Rm9yIGV4YW1wbGUgaWYgdGhlIFJlZ0V4IGlzICdBQlxkKj8nIHRoZW4gJyo/JyByZXByZXNlbnRz IHplcm8gb3INCnVubGltaXRlZA0KKyAqIG1hdGNoZXMuIEluIGdyZWVkeSBtb2RlIHRoZSBwYXR0 ZXJuICdBQjEyMzQ1JyB3aWxsIGJlIG1hdGNoZWQNCmNvbXBsZXRlbHkNCisgKiB3aGVyZSBhcyB0 aGUgdW5ncmVlZHkgbW9kZSAnQUInIHdpbGwgYmUgcmV0dXJuZWQgYXMgdGhlIG1hdGNoLg0KKyAq IEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KKyAqLw0K Kw0KKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQX0xPT0tBUk9VTkRfQVNSVF9GICgx VUxMIDw8DQo2KQ0KKy8qKjwgUmVnRXggZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQQ1JFIExvb2th cm91bmQgYXNzZXJ0aW9ucw0KKyAqIChaZXJvLXdpZHRoIGFzc2VydGlvbnMpLiBFeGFtcGxlIFJl Z0V4IGlzICdbYS16XStcZCsoPz0hezMsfSknIGlmDQorICogdGhlIGdpdmVuIHBhdHRlcm4gaXMg J2R3YWQxMjM0IScgdGhlIFJlZ0V4IGVuZ2luZSBkb2Vzbid0IHJlcG9ydCBhbnkNCm1hdGNoZXMN CisgKiBiZWNhdXNlIHRoZSBhc3NlcnQgJyg/PSF7Myx9KScgZmFpbHMuIFRoZSBwYXR0ZXJuICdk d2FkMTIzISEhJyB3b3VsZCByZXR1cm4NCmENCisgKiBzdWNjZXNzZnVsIG1hdGNoLg0KKyAqIEBz ZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KKyAqLw0KKw0K KyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQX01BVENIX1BPSU5UX1JTVF9GICgxVUxM IDw8DQo3KQ0KKy8qKjwgUmVnRXggZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQQ1JFIG1hdGNoIHBv aW50IHJlc2V0IGRpcmVjdGl2ZS4NCisgKiBFeGFtcGxlIFJlZ0V4IGlzICdbYS16XStcS1xkKycg aWYgdGhlIHBhdHRlcm4gaXMgJ2R3YWQxMjMnDQorICogdGhlbiBldmVuIHRob3VnaCB0aGUgZW50 aXJlIHBhdHRlcm4gbWF0Y2hlcyBvbmx5ICcxMjMnDQorICogaXMgcmVwb3J0ZWQgYXMgYSBtYXRj aC4NCisgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MN CisgKi8NCisNCisjZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9ORVdMSU5FX0NPTlZF TlRJT05TX0YNCigxVUxMIDw8IDgpDQorLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0 IFBDUkUgbmV3bGluZSBjb252ZW50aW9uLg0KKyAqIE5ld2xpbmUgY29udmVudGlvbnMgYXJlIHJl cHJlc2VudGVkIGFzIGZvbGxvd3M6DQorICogKCpDUikgICAgICAgIGNhcnJpYWdlIHJldHVybg0K KyAqICgqTEYpICAgICAgICBsaW5lZmVlZA0KKyAqICgqQ1JMRikgICAgICBjYXJyaWFnZSByZXR1 cm4sIGZvbGxvd2VkIGJ5IGxpbmVmZWVkDQorICogKCpBTllDUkxGKSAgIGFueSBvZiB0aGUgdGhy ZWUgYWJvdmUNCisgKiAoKkFOWSkgICAgICAgYWxsIFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZXMN CisgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCisg Ki8NCisNCisjZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9ORVdMSU5FX1NFUV9GICgx VUxMIDw8IDkpDQorLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBDUkUgbmV3bGlu ZSBzZXF1ZW5jZS4NCisgKiBUaGUgZXNjYXBlIHNlcXVlbmNlICdcUicgd2lsbCBtYXRjaCBhbnkg bmV3bGluZSBzZXF1ZW5jZS4NCisgKiBJdCBpcyBlcXVpdmFsZW50IHRvOiAnKD8+XHJcbnxcbnxc eDBifFxmfFxyfFx4ODUpJy4NCisgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBj cmVfdW5zdXBfZmxhZ3MNCisgKi8NCisNCisjZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9VTlNV UF9QT1NTRVNTSVZFX1FVQUxJRklFUlNfRiAoMVVMTA0KPDwgMTApDQorLyoqPCBSZWdFeCBkZXZp Y2UgZG9lc24ndCBzdXBwb3J0IFBDUkUgcG9zc2Vzc2l2ZSBxdWFsaWZpZXJzLg0KKyAqIEV4YW1w bGUgUmVnRXggcG9zc2Vzc2l2ZSBxdWFsaWZpZXJzICcqKycsICcrKycsICc/KycsICd7bSxufSsn Lg0KKyAqIFBvc3Nlc3NpdmUgcXVhbnRpZmllciByZXBlYXRzIHRoZSB0b2tlbiBhcyBtYW55IHRp bWVzIGFzIHBvc3NpYmxlIGFuZCBpdA0KZG9lcw0KKyAqIG5vdCBnaXZlIHVwIG1hdGNoZXMgYXMg dGhlIGVuZ2luZSBiYWNrdHJhY2tzLiBXaXRoIGEgcG9zc2Vzc2l2ZQ0KcXVhbnRpZmllciwNCisg KiB0aGUgZGVhbCBpcyBhbGwgb3Igbm90aGluZy4NCisgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhf ZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCisgKi8NCisNCisjZGVmaW5lIFJURV9SRUdFWF9E RVZfUENSRV9VTlNVUF9TVUJST1VUSU5FX1JFRkVSRU5DRVNfRg0KKDFVTEwgPDwgMTEpDQorLyoq PCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBDUkUgU3Vicm91dGluZSByZWZlcmVuY2Vz Lg0KKyAqIFBDUkUgU3Vicm91dGluZSByZWZlcmVuY2VzIGFsbG93IGZvciBzdWIgcGF0dGVybnMg dG8gYmUgYXNzZXNzZWQNCisgKiBhcyBwYXJ0IG9mIHRoZSBSZWdFeC4gRXhhbXBsZSBSZWdFeCBp cyAnKGZvb3xmdXp6KVxnPDE+K2JhcicgbWF0Y2hlcyB0aGUNCisgKiBwYXR0ZXJuICdmb29mb29m dXp6Zm9vZnV6emJhcicuDQorICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3Jl X3Vuc3VwX2ZsYWdzDQorICovDQorDQorI2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBf VVRGXzhfRiAoMVVMTCA8PCAxMikNCisvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQg VVRGLTggY2hhcmFjdGVyIGVuY29kaW5nLg0KKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZf aW5mbzo6cGNyZV91bnN1cF9mbGFncw0KKyAqLw0KKw0KKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9Q Q1JFX1VOU1VQX1VURl8xNl9GICgxVUxMIDw8IDEzKQ0KKy8qKjwgUmVnRXggZGV2aWNlIGRvZXNu J3Qgc3VwcG9ydCBVVEYtMTYgY2hhcmFjdGVyIGVuY29kaW5nLg0KKyAqIEBzZWUgc3RydWN0IHJ0 ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KKyAqLw0KKw0KKyNkZWZpbmUgUlRF X1JFR0VYX0RFVl9QQ1JFX1VOU1VQX1VURl8zMl9GICgxVUxMIDw8IDE0KQ0KKy8qKjwgUmVnRXgg ZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBVVEYtMzIgY2hhcmFjdGVyIGVuY29kaW5nLg0KKyAqIEBz ZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KKyAqLw0KKw0K KyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQX1dPUkRfQk9VTkRBUllfRiAoMVVMTCA8 PA0KMTUpDQorLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHdvcmQgYm91bmRhcmll cy4NCisgKiBUaGUgbWV0YSBjaGFyYWN0ZXIgJ1xiJyByZXByZXNlbnRzIHdvcmQgYm91bmRhcnkg YW5jaG9yLg0KKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9m bGFncw0KKyAqLw0KKw0KKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQX0ZPUldBUkRf UkVGRVJFTkNFU19GICgxVUxMDQo8PCAxNikNCisvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1 cHBvcnQgRm9yd2FyZCByZWZlcmVuY2VzLg0KKyAqIEZvcndhcmQgcmVmZXJlbmNlcyBhbGxvdyB5 b3UgdG8gdXNlIGEgYmFjayByZWZlcmVuY2UgdG8gYSBncm91cCB0aGF0DQphcHBlYXJzDQorICog bGF0ZXIgaW4gdGhlIFJlZ0V4LiBFeGFtcGxlIFJlZ0V4IGlzICcoXDNBQkN8KERFRnwoR0hJKSkp KycgbWF0Y2hlcyB0aGUNCisgKiBmb2xsb3dpbmcgc3RyaW5nICdHSElHSElBQkNERUYnLg0KKyAq IEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KKyAqLw0K Kw0KKy8qIEVudW1lcmF0ZXMgUENSRSBydWxlIGZsYWdzICovDQorI2RlZmluZSBSVEVfUkVHRVhf UENSRV9SVUxFX0FMTE9XX0VNUFRZX0YgKDFVTEwgPDwgMCkNCisvKio8IFdoZW4gdGhpcyBmbGFn IGlzIHNldCwgdGhlIHBhdHRlcm4gdGhhdCBjYW4gbWF0Y2ggYWdhaW5zdCBhbiBlbXB0eQ0Kc3Ry aW5nLA0KKyAqIHN1Y2ggYXMgJy4qJyBhcmUgYWxsb3dlZC4NCisgKiBAc2VlIHN0cnVjdCBydGVf cmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KcnRlX3JlZ2V4X3J1bGU6OnJ1bGVf ZmxhZ3MNCisgKi8NCisNCisjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JVTEVfQU5DSE9SRURfRiAo MVVMTCA8PCAxKQ0KKy8qKjwgV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUgcGF0dGVybiBpcyBm b3JjZWQgdG8gYmUgImFuY2hvcmVkIiwgdGhhdCBpcywgaXQNCisgKiBpcyBjb25zdHJhaW5lZCB0 byBtYXRjaCBvbmx5IGF0IHRoZSBmaXJzdCBtYXRjaGluZyBwb2ludCBpbiB0aGUgc3RyaW5nIHRo YXQNCisgKiBpcyBiZWluZyBzZWFyY2hlZC4gU2ltaWxhciB0byAnXicgYW5kIHJlcHJlc2VudGVk IGJ5IFxBLg0KKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVsZV9mbGFncywg c3RydWN0DQpydGVfcmVnZXhfcnVsZTo6cnVsZV9mbGFncw0KKyAqLw0KKw0KKyNkZWZpbmUgUlRF X1JFR0VYX1BDUkVfUlVMRV9DQVNFTEVTU19GICgxVUxMIDw8IDIpDQorLyoqPCBXaGVuIHRoaXMg ZmxhZyBpcyBzZXQsIGxldHRlcnMgaW4gdGhlIHBhdHRlcm4gbWF0Y2ggYm90aCB1cHBlciBhbmQN Cmxvd2VyDQorICogY2FzZSBsZXR0ZXJzIGluIHRoZSBzdWJqZWN0Lg0KKyAqIEBzZWUgc3RydWN0 IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVsZV9mbGFncywgc3RydWN0DQpydGVfcmVnZXhfcnVsZTo6 cnVsZV9mbGFncw0KKyAqLw0KKw0KKyNkZWZpbmUgUlRFX1JFR0VYX1BDUkVfUlVMRV9ET1RBTExf RiAoMVVMTCA8PCAzKQ0KKy8qKjwgV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCBhIGRvdCBtZXRhY2hh cmFjdGVyIGluIHRoZSBwYXR0ZXJuIG1hdGNoZXMgYW55DQorICogY2hhcmFjdGVyLCBpbmNsdWRp bmcgb25lIHRoYXQgaW5kaWNhdGVzIGEgbmV3bGluZS4NCisgKiBAc2VlIHN0cnVjdCBydGVfcmVn ZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KcnRlX3JlZ2V4X3J1bGU6OnJ1bGVfZmxh Z3MNCisgKi8NCisNCisjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JVTEVfRFVQTkFNRVNfRiAoMVVM TCA8PCA0KQ0KKy8qKjwgV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCBuYW1lcyB1c2VkIHRvIGlkZW50 aWZ5IGNhcHR1cmUgZ3JvdXBzIG5lZWQgbm90DQpiZQ0KKyAqIHVuaXF1ZS4NCisgKiBAc2VlIHN0 cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KcnRlX3JlZ2V4X3J1 bGU6OnJ1bGVfZmxhZ3MNCisgKi8NCisNCisjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JVTEVfRVhU RU5ERURfRiAoMVVMTCA8PCA1KQ0KKy8qKjwgV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCBtb3N0IHdo aXRlIHNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4gYXJlDQorICogdG90YWxseSBpZ25v cmVkIGV4Y2VwdCB3aGVuIGVzY2FwZWQgb3IgaW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLg0KKyAq IEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVsZV9mbGFncywgc3RydWN0DQpydGVf cmVnZXhfcnVsZTo6cnVsZV9mbGFncw0KKyAqLw0KKw0KKyNkZWZpbmUgUlRFX1JFR0VYX1BDUkVf UlVMRV9NQVRDSF9VTlNFVF9CQUNLUkVGX0YgKDFVTEwgPDwgNikNCisvKio8IFdoZW4gdGhpcyBm bGFnIGlzIHNldCwgYSBiYWNrcmVmZXJlbmNlIHRvIGFuIHVuc2V0IGNhcHR1cmUgZ3JvdXANCm1h dGNoZXMgYW4NCisgKiBlbXB0eSBzdHJpbmcuDQorICogQHNlZSBSVEVfUkVHRVhfREVWX1BDUkVf VU5TVVBfRk9SV0FSRF9SRUZFUkVOQ0VTX0YNCisgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2 X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KcnRlX3JlZ2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCisg Ki8NCisNCisjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JVTEVfTVVMVElMSU5FX0YgKDFVTEwgPDwg NykNCisvKio8IFdoZW4gdGhpcyBmbGFnICBpcyBzZXQsIHRoZSAnXicgYW5kICckJyBjb25zdHJ1 Y3RzIG1hdGNoIGltbWVkaWF0ZWx5DQorICogZm9sbG93aW5nIG9yIGltbWVkaWF0ZWx5IGJlZm9y ZSBpbnRlcm5hbCBuZXdsaW5lcyBpbiB0aGUgc3ViamVjdCBzdHJpbmcsDQorICogcmVzcGVjdGl2 ZWx5LCBhcyB3ZWxsIGFzIGF0IHRoZSB2ZXJ5IHN0YXJ0IGFuZCBlbmQuDQorICogQHNlZSBzdHJ1 Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLCBzdHJ1Y3QNCnJ0ZV9yZWdleF9ydWxl OjpydWxlX2ZsYWdzDQorICovDQorDQorI2RlZmluZSBSVEVfUkVHRVhfUENSRV9SVUxFX05PX0FV VE9fQ0FQVFVSRV9GICgxVUxMIDw8IDgpDQorLyoqPCBXaGVuIHRoaXMgRmxhZyBpcyBzZXQsIGl0 IGRpc2FibGVzIHRoZSB1c2Ugb2YgbnVtYmVyZWQgY2FwdHVyaW5nDQorICogcGFyZW50aGVzZXMg aW4gdGhlIHBhdHRlcm4uIFJlZmVyZW5jZXMgdG8gY2FwdHVyZSBncm91cHMNCihiYWNrcmVmZXJl bmNlcyBvcg0KKyAqIHJlY3Vyc2lvbi9zdWJyb3V0aW5lIGNhbGxzKSBtYXkgb25seSByZWZlciB0 byBuYW1lZCBncm91cHMsIHRob3VnaCB0aGUNCisgKiByZWZlcmVuY2UgY2FuIGJlIGJ5IG5hbWUg b3IgYnkgbnVtYmVyLg0KKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVsZV9m bGFncywgc3RydWN0DQpydGVfcmVnZXhfcnVsZTo6cnVsZV9mbGFncw0KKyAqLw0KKw0KKyNkZWZp bmUgUlRFX1JFR0VYX1BDUkVfUlVMRV9VQ1BfRiAoMVVMTCA8PCA5KQ0KKy8qKjwgQnkgZGVmYXVs dCwgb25seSBBU0NJSSBjaGFyYWN0ZXJzIGFyZSByZWNvZ25pemVkLCBXaGVuIHRoaXMgZmxhZyBp cyBzZXQsDQorICogVW5pY29kZSBwcm9wZXJ0aWVzIGFyZSB1c2VkIGluc3RlYWQgdG8gY2xhc3Np ZnkgY2hhcmFjdGVycy4NCisgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnJ1bGVf ZmxhZ3MsIHN0cnVjdA0KcnRlX3JlZ2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCisgKi8NCisNCisjZGVm aW5lIFJURV9SRUdFWF9QQ1JFX1JVTEVfVU5HUkVFRFlfRiAoMVVMTCA8PCAxMCkNCisvKio8IFdo ZW4gdGhpcyBmbGFnIGlzIHNldCwgdGhlICJncmVlZGluZXNzIiBvZiB0aGUgcXVhbnRpZmllcnMg aXMgaW52ZXJ0ZWQNCisgKiBzbyB0aGF0IHRoZXkgYXJlIG5vdCBncmVlZHkgYnkgZGVmYXVsdCwg YnV0IGJlY29tZSBncmVlZHkgaWYgZm9sbG93ZWQgYnkNCisgKiAnPycuDQorICogQHNlZSBzdHJ1 Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLCBzdHJ1Y3QNCnJ0ZV9yZWdleF9ydWxl OjpydWxlX2ZsYWdzDQorICovDQorDQorI2RlZmluZSBSVEVfUkVHRVhfUENSRV9SVUxFX1VURl9G ICgxVUxMIDw8IDExKQ0KKy8qKjwgV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCBSZWdFeCBlbmdpbmUg aGFzIHRvIHJlZ2FyZCBib3RoIHRoZSBwYXR0ZXJuIGFuZA0KdGhlDQorICogc3ViamVjdCBzdHJp bmdzIHRoYXQgYXJlIHN1YnNlcXVlbnRseSBwcm9jZXNzZWQgYXMgc3RyaW5ncyBvZiBVVEYNCmNo YXJhY3RlcnMNCisgKiBpbnN0ZWFkIG9mIHNpbmdsZS1jb2RlLXVuaXQgc3RyaW5ncy4NCisgKiBA c2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KcnRlX3Jl Z2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCisgKi8NCisNCisjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JV TEVfTkVWRVJfQkFDS1NMQVNIX0NfRiAoMVVMTCA8PCAxMikNCisvKio8IFRoaXMgRmxhZyBsb2Nr cyBvdXQgdGhlIHVzZSBvZiAnXEMnIGluIHRoZSBwYXR0ZXJuIHRoYXQgaXMgYmVpbmcgY29tcGls ZWQuDQorICogVGhpcyBlc2NhcGUgbWF0Y2hlcyBvbmUgZGF0YSB1bml0LCBldmVuIGluIFVURiBt b2RlIHdoaWNoIGNhbiBjYXVzZQ0KKyAqIHVucHJlZGljdGFibGUgYmVoYXZpb3IgaW4gVVRGLTgg b3IgVVRGLTE2IG1vZGVzLCBiZWNhdXNlIGl0IG1heSBsZWF2ZQ0KdGhlDQorICogY3VycmVudCBt YXRjaGluZyBwb2ludCBpbiB0aGUgbWlkZGxlIG9mIGEgbXVsdGktY29kZS11bml0IGNoYXJhY3Rl ci4NCisgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVj dA0KcnRlX3JlZ2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCisgKi8NCisNCisNCisvKioNCisgKiBSZWdF eCBkZXZpY2UgaW5mb3JtYXRpb24NCisgKi8NCitzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvIHsN CisgICAgY29uc3QgY2hhciAqZHJpdmVyX25hbWU7IC8qKjwgUmVnRXggZHJpdmVyIG5hbWUgKi8N CisgICAgc3RydWN0IHJ0ZV9kZXZpY2UgKmRldjsgICAgLyoqPCBEZXZpY2UgaW5mb3JtYXRpb24g Ki8NCisgICAgdWludDhfdCBtYXhfbWF0Y2hlczsNCisgICAgLyoqPCBNYXhpbXVtIG1hdGNoZXMg cGVyIHNjYW4gc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlICovDQorICAgIHVpbnQxNl90IG1heF9x dWV1ZV9wYWlyczsNCisgICAgLyoqPCBNYXhpbXVtIHF1ZXVlIHBhaXJzIHN1cHBvcnRlZCBieSB0 aGlzIGRldmljZSAqLw0KKyAgICB1aW50MTZfdCBtYXhfcGF5bG9hZF9zaXplOw0KKyAgICAvKio8 IE1heGltdW0gcGF5bG9hZCBzaXplIGZvciBhIHBhdHRlcm4gbWF0Y2ggcmVxdWVzdCBvciBzY2Fu Lg0KKyAgICAgKiBAc2VlIFJURV9SRUdFWF9ERVZfQ0ZHX0NST1NTX0JVRkZFUl9TQ0FOX0YNCisg ICAgICovDQorICAgIHVpbnQxNl90IG1heF9ydWxlc19wZXJfZ3JvdXA7DQorICAgIC8qKjwgTWF4 aW11bSBydWxlcyBzdXBwb3J0ZWQgcGVyIGdyb3VwIGJ5IHRoaXMgZGV2aWNlICovDQorICAgIHVp bnQxNl90IG1heF9ncm91cHM7DQorICAgIC8qKjwgTWF4aW11bSBncm91cCBzdXBwb3J0ZWQgYnkg dGhpcyBkZXZpY2UgKi8NCisgICAgdWludDMyX3QgcmVnZXhfZGV2X2NhcGE7DQorICAgIC8qKjwg UmVnRXggZGV2aWNlIGNhcGFiaWxpdGllcy4gQHNlZSBSVEVfUkVHRVhfREVWX0NBUEFfKiAqLw0K KyAgICB1aW50NjRfdCBydWxlX2ZsYWdzOw0KKyAgICAvKio8IFN1cHBvcnRlZCBjb21waWxlciBy dWxlIGZsYWdzLg0KKyAgICAgKiBAc2VlIFJURV9SRUdFWF9QQ1JFX1JVTEVfKiwgc3RydWN0IHJ0 ZV9yZWdleF9ydWxlOjpydWxlX2ZsYWdzDQorICAgICAqLw0KKyAgICB1aW50NjRfdCBwY3JlX3Vu c3VwX2ZsYWdzOw0KKyAgICAvKio8IFVuc3VwcG9ydGVkIFBDUkUgZmVhdHVyZXMgZm9yIHRoaXMg UmVnRXggZGV2aWNlLg0KKyAgICAgKiBAc2VlIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF8qDQor ICAgICAqLw0KK307DQorDQorLyoqDQorICogUmV0cmlldmUgdGhlIGNvbnRleHR1YWwgaW5mb3Jt YXRpb24gb2YgYSBSZWdFeCBkZXZpY2UuDQorICoNCisgKiBAcGFyYW0gZGV2X2lkDQorICogICBU aGUgaWRlbnRpZmllciBvZiB0aGUgZGV2aWNlLg0KKyAqDQorICogQHBhcmFtW291dF0gZGV2X2lu Zm8NCisgKiAgIEEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSBvZiB0eXBlICpydGVfcmVnZXhfZGV2 X2luZm8qIHRvIGJlIGZpbGxlZCB3aXRoDQp0aGUNCisgKiAgIGNvbnRleHR1YWwgaW5mb3JtYXRp b24gb2YgdGhlIGRldmljZS4NCisgKg0KKyAqIEByZXR1cm4NCisgKiAgIC0gMDogU3VjY2Vzcywg ZHJpdmVyIHVwZGF0ZXMgdGhlIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gb2YgdGhlIFJlZ0V4DQpk ZXZpY2UNCisgKiAgIC0gPDA6IEVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIGRyaXZlciBpbmZv IGdldCBmdW5jdGlvbi4NCisgKg0KKyAqLw0KK2ludA0KK3J0ZV9yZWdleF9kZXZfaW5mb19nZXQo dWludDhfdCBkZXZfaWQsIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm8NCipkZXZfaW5mbyk7DQor DQorLyogRW51bWVyYXRlcyBSZWdFeCBkZXZpY2UgY29uZmlndXJhdGlvbiBmbGFncyAqLw0KKyNk ZWZpbmUgUlRFX1JFR0VYX0RFVl9DRkdfQ1JPU1NfQlVGRkVSX1NDQU5fRiAoMVVMTCA8PCAwKQ0K Ky8qKjwgQ3Jvc3MgYnVmZmVyIHNjYW4gcmVmZXJzIHRvIHRoZSBhYmlsaXR5IHRvIGJlIGFibGUg dG8gZGV0ZWN0DQorICogbWF0Y2hlcyB0aGF0IG9jY3VyIGFjcm9zcyBidWZmZXIgYm91bmRhcmll cywgd2hlcmUgdGhlIGJ1ZmZlcnMgYXJlDQpyZWxhdGVkDQorICogdG8gZWFjaCBvdGhlciBpbiBz b21lIHdheS4gRW5hYmxlIHRoaXMgZmxhZyB3aGVuIHRvIHNjYW4gcGF5bG9hZCBzaXplDQorICog Z3JlYXRlciBzdHJ1Y3Qgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6bWF4X3BheWxvYWRfc2l6 ZSBhbmQvb3INCisgKiBtYXRjaGVzIGNhbiBwcmVzZW50IGFjcm9zcyBzY2FuIGJ1ZmZlciBib3Vu ZGFyaWVzLg0KKyAqDQorICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjptYXhfcGF5 bG9hZF9zaXplDQorICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9jb25maWc6OmRldl9jZmdf ZmxhZ3MsDQpydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgpDQorICogQHNlZSBSVEVfUkVHRVhfT1BT X1JTUF9QTUlfU09KX0YNCisgKiBAc2VlIFJURV9SRUdFWF9PUFNfUlNQX1BNSV9FT0pfRg0KKyAq Lw0KKw0KKy8qKiBSZWdFeCBkZXZpY2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8NCitzdHJ1 Y3QgcnRlX3JlZ2V4X2Rldl9jb25maWcgew0KKyAgICB1aW50OF90IG5iX21heF9tYXRjaGVzOw0K KyAgICAvKio8IE1heGltdW0gbWF0Y2hlcyBwZXIgc2NhbiBjb25maWd1cmVkIG9uIHRoaXMgZGV2 aWNlLg0KKyAgICAgKiBUaGlzIHZhbHVlIGNhbm5vdCBleGNlZWQgdGhlICptYXhfbWF0Y2hlcyoN CisgICAgICogd2hpY2ggcHJldmlvdXNseSBwcm92aWRlZCBpbiBydGVfcmVnZXhfZGV2X2luZm9f Z2V0KCkuDQorICAgICAqIFRoZSB2YWx1ZSAwIGlzIGFsbG93ZWQsIGluIHdoaWNoIGNhc2UsIHZh bHVlIDEgdXNlZC4NCisgICAgICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjptYXhf bWF0Y2hlcw0KKyAgICAgKi8NCisgICAgdWludDE2X3QgbmJfcXVldWVfcGFpcnM7DQorICAgIC8q KjwgTnVtYmVyIG9mIFJlZ0V4IHF1ZXVlIHBhaXJzIHRvIGNvbmZpZ3VyZSBvbiB0aGlzIGRldmlj ZS4NCisgICAgICogVGhpcyB2YWx1ZSBjYW5ub3QgZXhjZWVkIHRoZSAqbWF4X3F1ZXVlX3BhaXJz KiB3aGljaA0KcHJldmlvdXNseQ0KKyAgICAgKiBwcm92aWRlZCBpbiBydGVfcmVnZXhfZGV2X2lu Zm9fZ2V0KCkuDQorICAgICAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6bWF4X3F1 ZXVlX3BhaXJzDQorICAgICAqLw0KKyAgICB1aW50MTZfdCBuYl9ydWxlc19wZXJfZ3JvdXA7DQor ICAgIC8qKjwgTnVtYmVyIG9mIHJ1bGVzIHBlciBncm91cCB0byBjb25maWd1cmUgb24gdGhpcyBk ZXZpY2UuDQorICAgICAqIFRoaXMgdmFsdWUgY2Fubm90IGV4Y2VlZCB0aGUgKm1heF9ydWxlc19w ZXJfZ3JvdXAqDQorICAgICAqIHdoaWNoIHByZXZpb3VzbHkgcHJvdmlkZWQgaW4gcnRlX3JlZ2V4 X2Rldl9pbmZvX2dldCgpLg0KKyAgICAgKiBUaGUgdmFsdWUgMCBpcyBhbGxvd2VkLCBpbiB3aGlj aCBjYXNlLA0KKyAgICAgKiBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjptYXhfcnVsZXNfcGVy X2dyb3VwIHVzZWQuDQorICAgICAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6bWF4 X3J1bGVzX3Blcl9ncm91cA0KKyAgICAgKi8NCisgICAgdWludDE2X3QgbmJfZ3JvdXBzOw0KKyAg ICAvKio8IE51bWJlciBvZiBncm91cHMgdG8gY29uZmlndXJlIG9uIHRoaXMgZGV2aWNlLg0KKyAg ICAgKiBUaGlzIHZhbHVlIGNhbm5vdCBleGNlZWQgdGhlICptYXhfZ3JvdXBzKg0KKyAgICAgKiB3 aGljaCBwcmV2aW91c2x5IHByb3ZpZGVkIGluIHJ0ZV9yZWdleF9kZXZfaW5mb19nZXQoKS4NCisg ICAgICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjptYXhfZ3JvdXBzDQorICAgICAq Lw0KKyAgICBjb25zdCBjaGFyICpydWxlX2RiOw0KKyAgICAvKio8IEltcG9ydCBpbml0aWFsIHNl dCBvZiBwcmVidWlsdCBydWxlIGRhdGFiYXNlIG9uIHRoaXMgZGV2aWNlLg0KKyAgICAgKiBUaGUg dmFsdWUgTlVMTCBpcyBhbGxvd2VkLCBpbiB3aGljaCBjYXNlLCB0aGUgZGV2aWNlIHdpbGwgbm90 DQorICAgICAqIGJlIGNvbmZpZ3VyZWQgcHJlYnVpbHQgcnVsZSBkYXRhYmFzZS4gQXBwbGljYXRp b24gbWF5IHVzZQ0KKyAgICAgKiBydGVfcmVnZXhfcnVsZV9kYl91cGRhdGUoKSBvciBydGVfcmVn ZXhfcnVsZV9kYl9pbXBvcnQoKSBBUEkNCisgICAgICogdG8gdXBkYXRlIG9yIGltcG9ydCBydWxl IGRhdGFiYXNlIGFmdGVyIHRoZQ0KKyAgICAgKiBydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgpLg0K KyAgICAgKiBAc2VlIHJ0ZV9yZWdleF9ydWxlX2RiX3VwZGF0ZSgpLCBydGVfcmVnZXhfcnVsZV9k Yl9pbXBvcnQoKQ0KKyAgICAgKi8NCisgICAgdWludDMyX3QgcnVsZV9kYl9sZW47DQorICAgIC8q KjwgTGVuZ3RoIG9mICpydWxlX2RiKiBidWZmZXIuICovDQorICAgIHVpbnQzMl90IGRldl9jZmdf ZmxhZ3M7DQorICAgIC8qKjwgUmVnRXggZGV2aWNlIGNvbmZpZ3VyYXRpb24gZmxhZ3MsIFNlZSBS VEVfUkVHRVhfREVWX0NGR18qDQoqLw0KK307DQorDQorLyoqDQorICogQ29uZmlndXJlIGEgUmVn RXggZGV2aWNlLg0KKyAqDQorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGludm9rZWQgZmlyc3Qg YmVmb3JlIGFueSBvdGhlciBmdW5jdGlvbiBpbiB0aGUNCisgKiBBUEkuIFRoaXMgZnVuY3Rpb24g Y2FuIGFsc28gYmUgcmUtaW52b2tlZCB3aGVuIGEgZGV2aWNlIGlzIGluIHRoZQ0KKyAqIHN0b3Bw ZWQgc3RhdGUuDQorICoNCisgKiBUaGUgY2FsbGVyIG1heSB1c2UgcnRlX3JlZ2V4X2Rldl9pbmZv X2dldCgpIHRvIGdldCB0aGUgY2FwYWJpbGl0eSBvZiBlYWNoDQorICogcmVzb3VyY2VzIGF2YWls YWJsZSBmb3IgdGhpcyByZWdleCBkZXZpY2UuDQorICoNCisgKiBAcGFyYW0gZGV2X2lkDQorICog ICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGV2aWNlIHRvIGNvbmZpZ3VyZS4NCisgKiBAcGFyYW0g Y2ZnDQorICogICBUaGUgUmVnRXggZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLg0KKyAq DQorICogQHJldHVybg0KKyAqICAgLSAwOiBTdWNjZXNzLCBkZXZpY2UgY29uZmlndXJlZC4NCisg KiAgIC0gPDA6IEVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIGRyaXZlciBjb25maWd1cmF0aW9u IGZ1bmN0aW9uLg0KKyAqLw0KK2ludA0KK3J0ZV9yZWdleF9kZXZfY29uZmlndXJlKHVpbnQ4X3Qg ZGV2X2lkLCBjb25zdCBzdHJ1Y3QNCnJ0ZV9yZWdleF9kZXZfY29uZmlnICpjZmcpOw0KKw0KKy8q IEVudW1lcmF0ZXMgUmVnRXggcXVldWUgcGFpciBjb25maWd1cmF0aW9uIGZsYWdzICovDQorI2Rl ZmluZSBSVEVfUkVHRVhfUVVFVUVfUEFJUl9DRkdfT09TX0YgKDFVTEwgPDwgMCkNCisvKio8IE91 dCBvZiBvcmRlciBzY2FuLCBJZiBub3Qgc2V0LCBhIHNjYW4gbXVzdCByZXRpcmUgYWZ0ZXIgcHJl dmlvdXNseSBpc3N1ZWQNCisgKiBpbi1vcmRlciBzY2FucyB0byB0aGlzIHF1ZXVlIHBhaXIuIElm IHNldCwgdGhpcyBzY2FuIGNhbiBiZSByZXRpcmVkIGFzIHNvb24NCisgKiBhcyBkZXZpY2UgcmV0 dXJucyBjb21wbGV0aW9uLiBBcHBsaWNhdGlvbiBzaG91bGQgbm90IHNldCBvdXQgb2Ygb3JkZXIg c2Nhbg0KKyAqIGZsYWcgaWYgaXQgbmVlZHMgdG8gbWFpbnRhaW4gdGhlIGluZ3Jlc3Mgb3JkZXIg b2Ygc2NhbiByZXF1ZXN0Lg0KKyAqDQorICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X3FwX2NvbmY6 OnFwX2NvbmZfZmxhZ3MsDQpydGVfcmVnZXhfcXVldWVfcGFpcl9zZXR1cCgpDQorICovDQorDQor c3RydWN0IHJ0ZV9yZWdleF9vcHM7DQordHlwZWRlZiB2b2lkICgqcmVnZXhkZXZfc3RvcF9mbHVz aF90KSh1aW50OF90IGRldl9pZCwgdWludDE2X3QgcXBfaWQsDQorICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBydGVfcmVnZXhfb3BzICpvcCk7DQorLyoqPCBDYWxsYmFjayBmdW5jdGlvbiBj YWxsZWQgZHVyaW5nIHJ0ZV9yZWdleF9kZXZfc3RvcCgpLCBpbnZva2VkIG9uY2UNCnBlcg0KKyAq IGZsdXNoZWQgUmVnRXggb3AuDQorICovDQorDQorLyoqIFJlZ0V4IHF1ZXVlIHBhaXIgY29uZmln dXJhdGlvbiBzdHJ1Y3R1cmUgKi8NCitzdHJ1Y3QgcnRlX3JlZ2V4X3FwX2NvbmYgew0KKyAgICB1 aW50MzJfdCBxcF9jb25mX2ZsYWdzOw0KKyAgICAvKio8IFF1ZXVlIHBhaXIgY29uZmlnIGZsYWdz LCBTZWUgUlRFX1JFR0VYX1FVRVVFX1BBSVJfQ0ZHXyoNCiovDQorICAgIHVpbnQxNl90IG5iX2Rl c2M7DQorICAgIC8qKjwgVGhlIG51bWJlciBvZiBkZXNjcmlwdG9ycyB0byBhbGxvY2F0ZSBmb3Ig dGhpcyBxdWV1ZSBwYWlyLiAqLw0KKyAgICByZWdleGRldl9zdG9wX2ZsdXNoX3QgY2I7DQorICAg IC8qKjwgQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGR1cmluZyBydGVfcmVnZXhfZGV2X3N0b3Ao KSwgaW52b2tlZA0KKyAgICAgKiBvbmNlIHBlciBmbHVzaGVkIHJlZ2V4IG9wLiBWYWx1ZSBOVUxM IGlzIGFsbG93ZWQsIGluIHdoaWNoIGNhc2UNCisgICAgICogY2FsbGJhY2sgd2lsbCBub3QgYmUg aW52b2tlZC4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBwcm9wZXJseQ0KKyAgICAgKiBk aXNwb3NlIG9mIG91dHN0YW5kaW5nIHJlZ2V4IG9wcyBmcm9tIHJlc3BvbnNlIHF1ZXVlLA0KKyAg ICAgKiBmb3IgZXhhbXBsZSBvcHMgY29udGFpbmluZyBtZW1vcnkgcG9pbnRlcnMuDQorICAgICAq IEBzZWUgcnRlX3JlZ2V4X2Rldl9zdG9wKCkNCisgICAgICovDQorfTsNCisNCisvKioNCisgKiBB bGxvY2F0ZSBhbmQgc2V0IHVwIGEgUmVnRXggcXVldWUgcGFpciBmb3IgYSBSZWdFeCBkZXZpY2Uu DQorICoNCisgKiBAcGFyYW0gZGV2X2lkDQorICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGV2 aWNlLg0KKyAqIEBwYXJhbSBxdWV1ZV9wYWlyX2lkDQorICogICBUaGUgaW5kZXggb2YgdGhlIFJl Z0V4IHF1ZXVlIHBhaXIgdG8gc2V0dXAuIFRoZSB2YWx1ZSBtdXN0IGJlIGluIHRoZQ0KcmFuZ2UN CisgKiAgIFswLCBuYl9xdWV1ZV9wYWlycyAtIDFdIHByZXZpb3VzbHkgc3VwcGxpZWQgdG8NCnJ0 ZV9yZWdleF9kZXZfY29uZmlndXJlKCkuDQorICogQHBhcmFtIHFwX2NvbmYNCisgKiAgIFRoZSBw b2ludGVyIHRvIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIFJlZ0V4 IHF1ZXVlDQpwYWlyLg0KKyAqICAgTlVMTCB2YWx1ZSBpcyBhbGxvd2VkLCBpbiB3aGljaCBjYXNl IGRlZmF1bHQgY29uZmlndXJhdGlvbiAgICB1c2VkLg0KKyAqDQorICogQHJldHVybg0KKyAqICAg LSAwOiBTdWNjZXNzLCBSZWdFeCBxdWV1ZSBwYWlyIGNvcnJlY3RseSBzZXQgdXAuDQorICogICAt IDwwOiBSZWdFeCBxdWV1ZSBjb25maWd1cmF0aW9uIGZhaWxlZA0KKyAqLw0KK2ludA0KK3J0ZV9y ZWdleF9xdWV1ZV9wYWlyX3NldHVwKHVpbnQ4X3QgZGV2X2lkLCB1aW50OF90IHF1ZXVlX3BhaXJf aWQsDQorICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9yZWdleF9xcF9jb25mICpxcF9j b25mKTsNCisNCisvKioNCisgKiBTdGFydCBhIFJlZ0V4IGRldmljZS4NCisgKg0KKyAqIFRoZSBk ZXZpY2Ugc3RhcnQgc3RlcCBpcyB0aGUgbGFzdCBvbmUgYW5kIGNvbnNpc3RzIG9mIHNldHRpbmcg dGhlIFJlZ0V4DQorICogcXVldWVzIHRvIHN0YXJ0IGFjY2VwdGluZyB0aGUgcGF0dGVybiBtYXRj aGluZyBzY2FuIHJlcXVlc3RzLg0KKyAqDQorICogT24gc3VjY2VzcywgYWxsIGJhc2ljIGZ1bmN0 aW9ucyBleHBvcnRlZCBieSB0aGUgQVBJIChSZWdFeCBlbnF1ZXVlLA0KKyAqIFJlZ0V4IGRlcXVl dWUgYW5kIHNvIG9uKSBjYW4gYmUgaW52b2tlZC4NCisgKg0KKyAqIEBwYXJhbSBkZXZfaWQNCisg KiAgIFJlZ0V4IGRldmljZSBpZGVudGlmaWVyDQorICogQHJldHVybg0KKyAqICAgLSAwOiBTdWNj ZXNzLCBkZXZpY2Ugc3RhcnRlZC4NCisgKiAgIC0gPDA6IERldmljZSBzdGFydCBmYWlsZWQuDQor ICovDQoraW50DQorcnRlX3JlZ2V4X2Rldl9zdGFydCh1aW50OF90IGRldl9pZCk7DQorDQorLyoq DQorICogU3RvcCBhIFJlZ0V4IGRldmljZS4NCisgKg0KKyAqIFN0b3AgYSBSZWdFeCBkZXZpY2Uu IFRoZSBkZXZpY2UgY2FuIGJlIHJlc3RhcnRlZCB3aXRoIGEgY2FsbCB0bw0KKyAqIHJ0ZV9yZWdl eF9kZXZfc3RhcnQoKS4NCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gY2F1c2VzIGFsbCBxdWV1ZWQg cmVzcG9uc2UgcmVnZXggb3BzIHRvIGJlIGRyYWluZWQgaW4gdGhlDQorICogcmVzcG9uc2UgcXVl dWUuIFdoaWxlIGRyYWluaW5nIG9wcyBvdXQgb2YgdGhlIGRldmljZSwNCisgKiBzdHJ1Y3QgcnRl X3JlZ2V4X3FwX2NvbmY6OmNiIHdpbGwgYmUgaW52b2tlZCBmb3IgZWFjaCBvcHMuDQorICoNCisg KiBAcGFyYW0gZGV2X2lkDQorICogICBSZWdFeCBkZXZpY2UgaWRlbnRpZmllci4NCisgKg0KKyAq IEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9xcF9jb25mOjpjYiwgcnRlX3JlZ2V4X3F1ZXVlX3BhaXJf c2V0dXAoKQ0KKyAqLw0KK3ZvaWQNCitydGVfcmVnZXhfZGV2X3N0b3AodWludDhfdCBkZXZfaWQp Ow0KKw0KKy8qKg0KKyAqIENsb3NlIGEgUmVnRXggZGV2aWNlLiBUaGUgZGV2aWNlIGNhbm5vdCBi ZSByZXN0YXJ0ZWQhDQorICoNCisgKiBAcGFyYW0gZGV2X2lkDQorICogICBSZWdFeCBkZXZpY2Ug aWRlbnRpZmllcg0KKyAqDQorICogQHJldHVybg0KKyAqICAtIDAgb24gc3VjY2Vzc2Z1bGx5IGNs b3NlZCB0aGUgZGV2aWNlLg0KKyAqICAtIDwwIG9uIGZhaWx1cmUgdG8gY2xvc2UgdGhlIGRldmlj ZS4NCisgKi8NCitpbnQNCitydGVfcmVnZXhfZGV2X2Nsb3NlKHVpbnQ4X3QgZGV2X2lkKTsNCisN CisvKiBEZXZpY2UgZ2V0L3NldCBhdHRyaWJ1dGVzICovDQorDQorLyoqIEVudW1lcmF0ZXMgUmVn RXggZGV2aWNlIGF0dHJpYnV0ZSBpZGVudGlmaWVyICovDQorZW51bSBydGVfcmVnZXhfZGV2X2F0 dHJfaWQgew0KKyAgICBSVEVfUkVHRVhfREVWX0FUVFJfU09DS0VUX0lELA0KKyAgICAvKio8IFRo ZSBOVU1BIHNvY2tldCBpZCB0byB3aGljaCB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCBvcg0KKyAg ICAgKiBhIGRlZmF1bHQgb2YgemVybyBpZiB0aGUgc29ja2V0IGNvdWxkIG5vdCBiZSBkZXRlcm1p bmVkLg0KKyAgICAgKiBkYXRhdHlwZTogKmludCoNCisgICAgICogb3BlcmF0aW9uOiAqZ2V0Kg0K KyAgICAgKi8NCisgICAgUlRFX1JFR0VYX0RFVl9BVFRSX01BWF9NQVRDSEVTLA0KKyAgICAvKio8 IE1heGltdW0gbnVtYmVyIG9mIG1hdGNoZXMgcGVyIHNjYW4uDQorICAgICAqIGRhdGF0eXBlOiAq dWludDhfdCoNCisgICAgICogb3BlcmF0aW9uOiAqZ2V0KiBhbmQgKnNldCoNCisgICAgICoNCisg ICAgICogQHNlZSBSVEVfUkVHRVhfT1BTX1JTUF9NQVhfTUFUQ0hfRg0KKyAgICAgKi8NCisgICAg UlRFX1JFR0VYX0RFVl9BVFRSX01BWF9TQ0FOX1RJTUVPVVQsDQorICAgIC8qKjwgVXBwZXIgYm91 bmQgc2NhbiB0aW1lIGluIG5zLg0KKyAgICAgKiBkYXRhdHlwZTogKnVpbnQxNl90Kg0KKyAgICAg KiBvcGVyYXRpb246ICpnZXQqIGFuZCAqc2V0Kg0KKyAgICAgKg0KKyAgICAgKiBAc2VlIFJURV9S RUdFWF9PUFNfUlNQX01BWF9TQ0FOX1RJTUVPVVRfRg0KKyAgICAgKi8NCisgICAgUlRFX1JFR0VY X0RFVl9BVFRSX01BWF9QUkVGSVgsDQorICAgIC8qKjwgTWF4aW11bSBudW1iZXIgb2YgcHJlZml4 IGRldGVjdGVkIHBlciBzY2FuLg0KKyAgICAgKiBUaGlzIHdvdWxkIGJlIHVzZWZ1bCBmb3IgZGVu aWFsIG9mIHNlcnZpY2UgZGV0ZWN0aW9uLg0KKyAgICAgKiBkYXRhdHlwZTogKnVpbnQxNl90Kg0K KyAgICAgKiBvcGVyYXRpb246ICpnZXQqIGFuZCAqc2V0Kg0KKyAgICAgKg0KKyAgICAgKiBAc2Vl IFJURV9SRUdFWF9PUFNfUlNQX01BWF9QUkVGSVhfRg0KKyAgICAgKi8NCit9Ow0KKw0KKy8qKg0K KyAqIEdldCBhbiBhdHRyaWJ1dGUgZnJvbSBhIFJlZ0V4IGRldmljZS4NCisgKg0KKyAqIEBwYXJh bSBkZXZfaWQgUmVnRXggZGV2aWNlIGlkZW50aWZpZXINCisgKiBAcGFyYW0gYXR0cl9pZCBUaGUg YXR0cmlidXRlIElEIHRvIHJldHJpZXZlDQorICogQHBhcmFtW291dF0gYXR0cl92YWx1ZSBBIHBv aW50ZXIgdGhhdCB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIHRoZSBhdHRyaWJ1dGUNCisgKiAgICAg ICAgICAgICB2YWx1ZSBpZiBzdWNjZXNzZnVsLg0KKyAqDQorICogQHJldHVybg0KKyAqICAgLSAw OiBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIGF0dHJpYnV0ZSB2YWx1ZS4NCisgKiAgIC0gLUVJTlZB TDogSW52YWxpZCBkZXZpY2Ugb3IgICphdHRyX2lkKiBwcm92aWRlZCwgb3IgKmF0dHJfdmFsdWUq IGlzIE5VTEwuDQorICogICAtIC1FTk9UU1VQOiBpZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9y dCBzcGVjaWZpYyAqYXR0cl9pZCouDQorICovDQoraW50DQorcnRlX3JlZ2V4X2Rldl9hdHRyX2dl dCh1aW50OF90IGRldl9pZCwgZW51bSBydGVfcmVnZXhfZGV2X2F0dHJfaWQNCmF0dHJfaWQsDQor ICAgICAgICAgICAgICAgdm9pZCAqYXR0cl92YWx1ZSk7DQorDQorLyoqDQorICogU2V0IGFuIGF0 dHJpYnV0ZSB0byBhIFJlZ0V4IGRldmljZS4NCisgKg0KKyAqIEBwYXJhbSBkZXZfaWQgUmVnRXgg ZGV2aWNlIGlkZW50aWZpZXINCisgKiBAcGFyYW0gYXR0cl9pZCBUaGUgYXR0cmlidXRlIElEIHRv IHJldHJpZXZlDQorICogQHBhcmFtIGF0dHJfdmFsdWUgQSBwb2ludGVyIHRoYXQgd2lsbCBiZSBm aWxsZWQgaW4gd2l0aCB0aGUgYXR0cmlidXRlIHZhbHVlDQorICogICAgICAgICAgICAgICAgICAg YnkgdGhlIGFwcGxpY2F0aW9uDQorICoNCisgKiBAcmV0dXJuDQorICogICAtIDA6IFN1Y2Nlc3Nm dWxseSBhcHBsaWVkIHRoZSBhdHRyaWJ1dGUgdmFsdWUuDQorICogICAtIC1FSU5WQUw6IEludmFs aWQgZGV2aWNlIG9yICAqYXR0cl9pZCogcHJvdmlkZWQsIG9yICphdHRyX3ZhbHVlKiBpcyBOVUxM Lg0KKyAqICAgLSAtRU5PVFNVUDogaWYgdGhlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgc3BlY2lm aWMgKmF0dHJfaWQqLg0KKyAqLw0KK2ludA0KK3J0ZV9yZWdleF9kZXZfYXR0cl9zZXQodWludDhf dCBkZXZfaWQsIGVudW0gcnRlX3JlZ2V4X2Rldl9hdHRyX2lkDQphdHRyX2lkLA0KKyAgICAgICAg ICAgICAgIGNvbnN0IHZvaWQgKmF0dHJfdmFsdWUpOw0KKw0KKy8qIFJ1bGUgcmVsYXRlZCBBUElz ICovDQorLyoqIEVudW1lcmF0ZXMgUmVnRXggcnVsZSBvcGVyYXRpb24gKi8NCitlbnVtIHJ0ZV9y ZWdleF9ydWxlX29wIHsNCisgICAgUlRFX1JFR0VYX1JVTEVfT1BfQURELA0KKyAgICAvKio8IEFk ZCBSZWdFeCBydWxlIHRvIHJ1bGUgZGF0YWJhc2UgKi8NCisgICAgUlRFX1JFR0VYX1JVTEVfT1Bf UkVNT1ZFDQorICAgIC8qKjwgUmVtb3ZlIFJlZ0V4IHJ1bGUgZnJvbSBydWxlIGRhdGFiYXNlICov DQorfTsNCisNCisvKiogU3RydWN0dXJlIHRvIGhvbGQgYSBSZWdFeCBydWxlIGF0dHJpYnV0ZXMg Ki8NCitzdHJ1Y3QgcnRlX3JlZ2V4X3J1bGUgew0KKyAgICBlbnVtIHJ0ZV9yZWdleF9ydWxlX29w IG9wOw0KKyAgICAvKio8IE9QIHR5cGUgb2YgdGhlIHJ1bGUgZWl0aGVyIGEgT1BfQUREIG9yIE9Q X0RFTEVURSAqLw0KKyAgICB1aW50MTZfdCBncm91cF9pZDsNCisgICAgLyoqPCBHcm91cCBpZGVu dGlmaWVyIHRvIHdoaWNoIHRoZSBydWxlIGJlbG9uZ3MgdG8uICovDQorICAgIHVpbnQzMl90IHJ1 bGVfaWQ7DQorICAgIC8qKjwgUnVsZSBpZGVudGlmaWVyIHdoaWNoIGlzIHJldHVybmVkIG9uIHN1 Y2Nlc3NmdWwgbWF0Y2guICovDQorICAgIGNvbnN0IGNoYXIgKnBjcmVfcnVsZTsNCisgICAgLyoq PCBCdWZmZXIgdG8gaG9sZCB0aGUgUENSRSBydWxlLiAqLw0KKyAgICB1aW50MTZfdCBwY3JlX3J1 bGVfbGVuOw0KKyAgICAvKio8IExlbmd0aCBvZiB0aGUgUENSRSBydWxlKi8NCisgICAgdWludDY0 X3QgcnVsZV9mbGFnczsNCisgICAgLyogUENSRSBydWxlIGZsYWdzLiBTdXBwb3J0ZWQgZGV2aWNl IHNwZWNpZmljIFBDUkUgcnVsZXMgZW51bWVyYXRlZA0KKyAgICAgKiBpbiBzdHJ1Y3QgcnRlX3Jl Z2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLiBGb3Igc3VjY2Vzc2Z1bCBydWxlDQorICAgICAqIGRh dGFiYXNlIHVwZGF0ZSwgYXBwbGljYXRpb24gbmVlZHMgdG8gcHJvdmlkZSBvbmx5IHN1cHBvcnRl ZA0KKyAgICAgKiBydWxlIGZsYWdzLg0KKyAgICAgKiBAU2VlIFJURV9SRUdFWF9QQ1JFX1JVTEVf Kiwgc3RydWN0DQpydGVfcmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MNCisgICAgICovDQorfTsN CisNCisvKioNCisgKiBVcGRhdGUgdGhlIHJ1bGUgZGF0YWJhc2Ugb2YgYSBSZWdFeCBkZXZpY2Uu DQorICoNCisgKiBAcGFyYW0gZGV2X2lkIFJlZ0V4IGRldmljZSBpZGVudGlmaWVyDQorICogQHBh cmFtIHJ1bGVzDQorICogICBQb2ludHMgdG8gYW4gYXJyYXkgb2YgKm5iX3J1bGVzKiBvYmplY3Rz IG9mIHR5cGUgKnJ0ZV9yZWdleF9ydWxlKg0Kc3RydWN0dXJlDQorICogICB3aGljaCBjb250YWlu IHRoZSByZWdleCBydWxlcyBhdHRyaWJ1dGVzIHRvIGJlIHVwZGF0ZWQgaW4gcnVsZSBkYXRhYmFz ZS4NCisgKiBAcGFyYW0gbmJfcnVsZXMNCisgKiAgIFRoZSBudW1iZXIgb2YgUENSRSBydWxlcyB0 byB1cGRhdGUgdGhlIHJ1bGUgZGF0YWJhc2UuDQorICoNCisgKiBAcmV0dXJuDQorICogICBUaGUg bnVtYmVyIG9mIHJlZ2V4IHJ1bGVzIGFjdHVhbGx5IHVwZGF0ZWQgb24gdGhlIHJlZ2V4IGRldmlj ZSdzIHJ1bGUNCisgKiAgIGRhdGFiYXNlLiBUaGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBsZXNzIHRo YW4gdGhlIHZhbHVlIG9mIHRoZSAqbmJfcnVsZXMqDQorICogICBwYXJhbWV0ZXIgd2hlbiB0aGUg cmVnZXggZGV2aWNlcyBmYWlscyB0byB1cGRhdGUgdGhlIHJ1bGUgZGF0YWJhc2Ugb3INCisgKiAg IGlmIGludmFsaWQgcGFyYW1ldGVycyBhcmUgc3BlY2lmaWVkIGluIGEgKnJ0ZV9yZWdleF9ydWxl Ki4NCisgKiAgIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbGVzcyB0aGFuICpuYl9ydWxlcyosIHRo ZSByZW1haW5pbmcgUENSRSBydWxlcw0KKyAqICAgYXQgdGhlIGVuZCBvZiAqcnVsZXMqIGFyZSBu b3QgY29uc3VtZWQgYW5kIHRoZSBjYWxsZXIgaGFzIHRvIHRha2UNCisgKiAgIGNhcmUgb2YgdGhl bSBhbmQgcnRlX2Vycm5vIGlzIHNldCBhY2NvcmRpbmdseS4NCisgKiAgIFBvc3NpYmxlIGVycm5v IHZhbHVlcyBpbmNsdWRlOg0KKyAqICAgLSAtRUlOVkFMOiAgSW52YWxpZCBkZXZpY2UgSUQgb3Ig cnVsZXMgaXMgTlVMTA0KKyAqICAgLSAtRU5PVFNVUDogVGhlIGxhc3QgcHJvY2Vzc2VkIHJ1bGUg aXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGRldmljZS4NCisgKiAgIC0gLUVOT1NQQzogTm8gc3Bh Y2UgYXZhaWxhYmxlIGluIHJ1bGUgZGF0YWJhc2UuDQorICoNCisgKiBAc2VlIHJ0ZV9yZWdleF9y dWxlX2RiX2ltcG9ydCgpLCBydGVfcmVnZXhfcnVsZV9kYl9leHBvcnQoKQ0KKyAqLw0KK3VpbnQx Nl90DQorcnRlX3JlZ2V4X3J1bGVfZGJfdXBkYXRlKHVpbnQ4X3QgZGV2X2lkLCBjb25zdCBzdHJ1 Y3QgcnRlX3JlZ2V4X3J1bGUNCipydWxlcywNCisgICAgICAgICAgICAgdWludDE2X3QgbmJfcnVs ZXMpOw0KDQpJIHRoaW5rIHRoZSBmdW5jdGlvbiBuYW1lIGlzIG5vdCB0b28gaW5mb3JtYXRpdmUu IElmIHRoaXMgZnVuY3Rpb24gbWVhbnQgdG8gY29tcGlsZSB0aGUgcnVsZSB0aGVuIGl0IHNob3Vs ZCBiZSBleHBsaWNpdCBvbiB0aGUgZnVuY3Rpb24gbmFtZS4NCg0KKw0KKy8qKg0KKyAqIEltcG9y dCBhIHByZWJ1aWx0IHJ1bGUgZGF0YWJhc2UgZnJvbSBhIGJ1ZmZlciB0byBhIFJlZ0V4IGRldmlj ZS4NCisgKg0KKyAqIEBwYXJhbSBkZXZfaWQgUmVnRXggZGV2aWNlIGlkZW50aWZpZXINCisgKiBA cGFyYW0gcnVsZV9kYg0KKyAqICAgUG9pbnRzIHRvIHByZWJ1aWx0IHJ1bGUgZGF0YWJhc2UuDQor ICogQHBhcmFtIHJ1bGVfZGJfbGVuDQorICogICBMZW5ndGggb2YgdGhlIHJ1bGUgZGF0YWJhc2Uu DQorICoNCisgKiBAcmV0dXJuDQorICogICAtIDA6IFN1Y2Nlc3NmdWxseSB1cGRhdGVkIHRoZSBw cmVidWlsdCBydWxlIGRhdGFiYXNlLg0KKyAqICAgLSAtRUlOVkFMOiAgSW52YWxpZCBkZXZpY2Ug SUQgb3IgcnVsZV9kYiBpcyBOVUxMDQorICogICAtIC1FTk9UU1VQOiBSdWxlIGRhdGFiYXNlIGlt cG9ydCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlLg0KKyAqICAgLSAtRU5PU1BDOiBO byBzcGFjZSBhdmFpbGFibGUgaW4gcnVsZSBkYXRhYmFzZS4NCisgKg0KKyAqIEBzZWUgcnRlX3Jl Z2V4X3J1bGVfZGJfdXBkYXRlKCksIHJ0ZV9yZWdleF9ydWxlX2RiX2V4cG9ydCgpDQorICovDQor aW50DQorcnRlX3JlZ2V4X3J1bGVfZGJfaW1wb3J0KHVpbnQ4X3QgZGV2X2lkLCBjb25zdCBjaGFy ICpydWxlX2RiLA0KKyAgICAgICAgICAgICB1aW50MzJfdCBydWxlX2RiX2xlbik7DQorDQorLyoq DQorICogRXhwb3J0IHRoZSBwcmVidWlsdCBydWxlIGRhdGFiYXNlIGZyb20gYSBSZWdFeCBkZXZp Y2UgdG8gdGhlIGJ1ZmZlci4NCisgKg0KKyAqIEBwYXJhbSBkZXZfaWQgUmVnRXggZGV2aWNlIGlk ZW50aWZpZXINCisgKiBAcGFyYW1bb3V0XSBydWxlX2RiDQorICogICBCbG9jayBvZiBtZW1vcnkg dG8gaW5zZXJ0IHRoZSBydWxlIGRhdGFiYXNlLiBNdXN0IGJlIGF0IGxlYXN0IHNpemUgaW4NCisg KiAgIGNhcGFjaXR5LiBJZiBzZXQgdG8gTlVMTCwgZnVuY3Rpb24gcmV0dXJucyByZXF1aXJlZCBj YXBhY2l0eS4NCisgKg0KKyAqIEByZXR1cm4NCisgKiAgIC0gMDogU3VjY2Vzc2Z1bGx5IGV4cG9y dGVkIHRoZSBwcmVidWlsdCBydWxlIGRhdGFiYXNlLg0KKyAqICAgLSBzaXplOiBJZiBydWxlX2Ri IHNldCB0byBOVUxMIHRoZW4gcmVxdWlyZWQgY2FwYWNpdHkgZm9yICpydWxlX2RiKg0KKyAqICAg LSAtRUlOVkFMOiAgSW52YWxpZCBkZXZpY2UgSUQNCisgKiAgIC0gLUVOT1RTVVA6IFJ1bGUgZGF0 YWJhc2UgZXhwb3J0IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UuDQorICoNCisgKiBA c2VlIHJ0ZV9yZWdleF9ydWxlX2RiX3VwZGF0ZSgpLCBydGVfcmVnZXhfcnVsZV9kYl9pbXBvcnQo KQ0KKyAqLw0KK2ludA0KK3J0ZV9yZWdleF9ydWxlX2RiX2V4cG9ydCh1aW50OF90IGRldl9pZCwg Y2hhciAqcnVsZV9kYik7DQorDQorLyogRXh0ZW5kZWQgc3RhdGlzdGljcyAqLw0KKy8qKiBNYXhp bXVtIG5hbWUgbGVuZ3RoIGZvciBleHRlbmRlZCBzdGF0aXN0aWNzIGNvdW50ZXJzICovDQorI2Rl ZmluZSBSVEVfUkVHRVhfREVWX1hTVEFUU19OQU1FX1NJWkUgNjQNCisNCisvKioNCisgKiBBIG5h bWUta2V5IGxvb2t1cCBlbGVtZW50IGZvciBleHRlbmRlZCBzdGF0aXN0aWNzLg0KKyAqDQorICog VGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBtYXAgYmV0d2VlbiBuYW1lcyBhbmQgSUQgbnVtYmVy cw0KKyAqIGZvciBleHRlbmRlZCBSZWdFeCBkZXZpY2Ugc3RhdGlzdGljcy4NCisgKi8NCitzdHJ1 Y3QgcnRlX3JlZ2V4X2Rldl94c3RhdHNfbWFwIHsNCisgICAgdWludDE2X3QgaWQ7DQorICAgIC8q KjwgeHN0YXQgaWRlbnRpZmllciAqLw0KKyAgICBjaGFyIG5hbWVbUlRFX1JFR0VYX0RFVl9YU1RB VFNfTkFNRV9TSVpFXTsNCisgICAgLyoqPCB4c3RhdCBuYW1lICovDQorfTsNCisNCisvKioNCisg KiBSZXRyaWV2ZSBuYW1lcyBvZiBleHRlbmRlZCBzdGF0aXN0aWNzIG9mIGEgcmVnZXggZGV2aWNl Lg0KKyAqDQorICogQHBhcmFtIGRldl9pZA0KKyAqICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHJl Z2V4IGRldmljZS4NCisgKiBAcGFyYW1bb3V0XSB4c3RhdHNfbWFwDQorICogICBCbG9jayBvZiBt ZW1vcnkgdG8gaW5zZXJ0IGlkIGFuZCBuYW1lcyBpbnRvLiBNdXN0IGJlIGF0IGxlYXN0IHNpemUg aW4NCisgKiAgIGNhcGFjaXR5LiBJZiBzZXQgdG8gTlVMTCwgZnVuY3Rpb24gcmV0dXJucyByZXF1 aXJlZCBjYXBhY2l0eS4NCisgKiBAcmV0dXJuDQorICogICAtIHBvc2l0aXZlIHZhbHVlIG9uIHN1 Y2Nlc3M6DQorICogICAgICAgIC1UaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgZW50 cmllcyBmaWxsZWQgaW4gdGhlIHN0YXRzIG1hcC4NCisgKiAgICAgICAgLUlmIHhzdGF0c19tYXAg c2V0IHRvIE5VTEwgdGhlbiByZXF1aXJlZCBjYXBhY2l0eSBmb3IgeHN0YXRzX21hcC4NCisgKiAg IC0gbmVnYXRpdmUgdmFsdWUgb24gZXJyb3I6DQorICogICAgICAtRU5PREVWIGZvciBpbnZhbGlk ICpkZXZfaWQqDQorICogICAgICAtRU5PVFNVUCBpZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9y dCB0aGlzIGZ1bmN0aW9uLg0KKyAqLw0KK2ludA0KK3J0ZV9yZWdleF9kZXZfeHN0YXRzX25hbWVz X2dldCh1aW50OF90IGRldl9pZCwNCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0ZV9yZWdl eF9kZXZfeHN0YXRzX21hcCAqeHN0YXRzX21hcCk7DQorDQorLyoqDQorICogUmV0cmlldmUgZXh0 ZW5kZWQgc3RhdGlzdGljcyBvZiBhbiByZWdleCBkZXZpY2UuDQorICoNCisgKiBAcGFyYW0gZGV2 X2lkDQorICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGV2aWNlLg0KKyAqIEBwYXJhbSBpZHMN CisgKiAgIFRoZSBpZCBudW1iZXJzIG9mIHRoZSBzdGF0cyB0byBnZXQuIFRoZSBpZHMgY2FuIGJl IGdvdCBmcm9tIHRoZSBzdGF0DQorICogICBwb3NpdGlvbiBpbiB0aGUgc3RhdCBsaXN0IGZyb20g cnRlX3JlZ2V4X2Rldl94c3RhdHNfbmFtZXNfZ2V0KCksIG9yDQorICogICBieSB1c2luZyBydGVf cmVnZXhfZGV2X3hzdGF0c19ieV9uYW1lX2dldCgpLg0KKyAqIEBwYXJhbVtvdXRdIHZhbHVlcw0K KyAqICAgVGhlIHZhbHVlcyBmb3IgZWFjaCBzdGF0cyByZXF1ZXN0IGJ5IElELg0KKyAqIEBwYXJh bSBuDQorICogICBUaGUgbnVtYmVyIG9mIHN0YXRzIHJlcXVlc3RlZA0KKyAqIEByZXR1cm4NCisg KiAgIC0gcG9zaXRpdmUgdmFsdWU6IG51bWJlciBvZiBzdGF0IGVudHJpZXMgZmlsbGVkIGludG8g dGhlIHZhbHVlcyBhcnJheQ0KKyAqICAgLSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvcjoNCisgKiAg ICAgIC1FTk9ERVYgZm9yIGludmFsaWQgKmRldl9pZCoNCisgKiAgICAgIC1FTk9UU1VQIGlmIHRo ZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHRoaXMgZnVuY3Rpb24uDQorICovDQoraW50DQorcnRl X3JlZ2V4X2Rldl94c3RhdHNfZ2V0KHVpbnQ4X3QgZGV2X2lkLCBjb25zdCB1aW50MTZfdCBpZHNb XSwNCisgICAgICAgICAgICAgdWludDY0X3QgdmFsdWVzW10sIHVpbnQxNl90IG4pOw0KKw0KKy8q Kg0KKyAqIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiBhIHNpbmdsZSBzdGF0IGJ5IHJlcXVlc3Rpbmcg aXQgYnkgbmFtZS4NCisgKg0KKyAqIEBwYXJhbSBkZXZfaWQNCisgKiAgIFRoZSBpZGVudGlmaWVy IG9mIHRoZSBkZXZpY2UNCisgKiBAcGFyYW0gbmFtZQ0KKyAqICAgVGhlIHN0YXQgbmFtZSB0byBy ZXRyaWV2ZQ0KKyAqIEBwYXJhbVtvdXRdIGlkDQorICogICBJZiBub24tTlVMTCwgdGhlIG51bWVy aWNhbCBpZCBvZiB0aGUgc3RhdCB3aWxsIGJlIHJldHVybmVkLCBzbyB0aGF0IGZ1cnRoZXINCisg KiAgIHJlcXVlc3RzIGZvciB0aGUgc3RhdCBjYW4gYmUgZ290IHVzaW5nIHJ0ZV9yZWdleF9kZXZf eHN0YXRzX2dldCwgd2hpY2gNCndpbGwNCisgKiAgIGJlIGZhc3RlciBhcyBpdCBkb2Vzbid0IG5l ZWQgdG8gc2NhbiBhIGxpc3Qgb2YgbmFtZXMgZm9yIHRoZSBzdGF0Lg0KKyAqIEBwYXJhbVtvdXRd IHZhbHVlDQorICogICBNdXN0IGJlIG5vbi1OVUxMLCByZXRyaWV2ZWQgeHN0YXQgdmFsdWUgd2ls bCBiZSBzdG9yZWQgaW4gdGhpcyBhZGRyZXNzLg0KKyAqDQorICogQHJldHVybg0KKyAqICAgLSAw OiBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHhzdGF0IHZhbHVlLg0KKyAqICAgLSAtRUlOVkFMOiBp bnZhbGlkIHBhcmFtZXRlcnMNCisgKiAgIC0gLUVOT1RTVVA6IGlmIG5vdCBzdXBwb3J0ZWQuDQor ICovDQoraW50DQorcnRlX3JlZ2V4X2Rldl94c3RhdHNfYnlfbmFtZV9nZXQodWludDhfdCBkZXZf aWQsIGNvbnN0IGNoYXIgKm5hbWUsDQorICAgICAgICAgICAgICAgICB1aW50MTZfdCAqaWQsIHVp bnQ2NF90ICp2YWx1ZSk7DQorDQorLyoqDQorICogUmVzZXQgdGhlIHZhbHVlcyBvZiB0aGUgeHN0 YXRzIG9mIHRoZSBzZWxlY3RlZCBjb21wb25lbnQgaW4gdGhlIGRldmljZS4NCisgKg0KKyAqIEBw YXJhbSBkZXZfaWQNCisgKiAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXZpY2UNCisgKiBAcGFy YW0gaWRzDQorICogICBTZWxlY3RzIHNwZWNpZmljIHN0YXRpc3RpY3MgdG8gYmUgcmVzZXQuIFdo ZW4gTlVMTCwgYWxsIHN0YXRpc3RpY3Mgd2lsbCBiZQ0KKyAqICAgcmVzZXQuIElmIG5vbi1OVUxM LCBtdXN0IHBvaW50IHRvIGFycmF5IG9mIGF0IGxlYXN0ICpuYl9pZHMqIHNpemUuDQorICogQHBh cmFtIG5iX2lkcw0KKyAqICAgVGhlIG51bWJlciBvZiBpZHMgYXZhaWxhYmxlIGZyb20gdGhlICpp ZHMqIGFycmF5LiBJZ25vcmVkIHdoZW4gaWRzIGlzDQpOVUxMLg0KKyAqIEByZXR1cm4NCisgKiAg IC0gMDogU3VjY2Vzc2Z1bGx5IHJlc2V0IHRoZSBzdGF0aXN0aWNzIHRvIHplcm8uDQorICogICAt IC1FSU5WQUw6IGludmFsaWQgcGFyYW1ldGVycw0KKyAqICAgLSAtRU5PVFNVUDogaWYgbm90IHN1 cHBvcnRlZC4NCisgKi8NCitpbnQNCitydGVfcmVnZXhfZGV2X3hzdGF0c19yZXNldCh1aW50OF90 IGRldl9pZCwgY29uc3QgdWludDE2X3QgaWRzW10sDQorICAgICAgICAgICAgICAgdWludDE2X3Qg bmJfaWRzKTsNCisNCisvKioNCisgKiBUcmlnZ2VyIHRoZSBSZWdFeCBkZXZpY2Ugc2VsZiB0ZXN0 Lg0KKyAqDQorICogQHBhcmFtIGRldl9pZA0KKyAqICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGRl dmljZQ0KKyAqIEByZXR1cm4NCisgKiAgIC0gMDogU2VsZnRlc3Qgc3VjY2Vzc2Z1bA0KKyAqICAg LSAtRU5PVFNVUCBpZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBzZWxmdGVzdA0KKyAqICAg LSBvdGhlciB2YWx1ZXMgPCAwIG9uIGZhaWx1cmUuDQorICovDQoraW50IHJ0ZV9yZWdleF9kZXZf c2VsZnRlc3QodWludDhfdCBkZXZfaWQpOw0KKw0KKy8qKg0KKyAqIER1bXAgaW50ZXJuYWwgaW5m b3JtYXRpb24gYWJvdXQgKmRldl9pZCogdG8gdGhlIEZJTEUqIHByb3ZpZGVkIGluICpmKi4NCisg Kg0KKyAqIEBwYXJhbSBkZXZfaWQNCisgKiAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXZpY2Uu DQorICoNCisgKiBAcGFyYW0gZg0KKyAqICAgQSBwb2ludGVyIHRvIGEgZmlsZSBmb3Igb3V0cHV0 DQorICoNCisgKiBAcmV0dXJuDQorICogICAtIDA6IG9uIHN1Y2Nlc3MNCisgKiAgIC0gPDA6IG9u IGZhaWx1cmUuDQorICovDQoraW50DQorcnRlX3JlZ2V4X2Rldl9kdW1wKHVpbnQ4X3QgZGV2X2lk LCBGSUxFICpmKTsNCisNCisvKiBGYXN0IHBhdGggQVBJcyAqLw0KKw0KKy8qKg0KKyAqIFRoZSBn ZW5lcmljICpydGVfcmVnZXhfbWF0Y2gqIHN0cnVjdHVyZSB0byBob2xkIHRoZSBSZWdFeCBtYXRj aA0KYXR0cmlidXRlcy4NCisgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfb3BzOjptYXRjaGVzDQor ICovDQorc3RydWN0IHJ0ZV9yZWdleF9tYXRjaCB7DQorICAgIFJURV9TVERfQzExDQorICAgIHVu aW9uIHsNCisgICAgICAgIHVpbnQ2NF90IHU2NDsNCisgICAgICAgIHN0cnVjdCB7DQorICAgICAg ICAgICAgdWludDMyX3QgcnVsZV9pZDoyMDsNCisgICAgICAgICAgICAvKio8IFJ1bGUgaWRlbnRp ZmllciB0byB3aGljaCB0aGUgcGF0dGVybiBtYXRjaGVkLg0KKyAgICAgICAgICAgICAqIEBzZWUg c3RydWN0IHJ0ZV9yZWdleF9ydWxlOjpydWxlX2lkDQorICAgICAgICAgICAgICovDQorICAgICAg ICAgICAgdWludDMyX3QgZ3JvdXBfaWQ6MTI7DQorICAgICAgICAgICAgLyoqPCBHcm91cCBpZGVu dGlmaWVyIG9mIHRoZSBydWxlIHdoaWNoIHRoZSBwYXR0ZXJuDQorICAgICAgICAgICAgICogbWF0 Y2hlZC4gQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X3J1bGU6Omdyb3VwX2lkDQorICAgICAgICAgICAg ICovDQorICAgICAgICAgICAgdWludDE2X3Qgb2Zmc2V0Ow0KKyAgICAgICAgICAgIC8qKjwgU3Rh cnRpbmcgQnl0ZSBQb3NpdGlvbiBmb3IgbWF0Y2hlZCBydWxlLiAqLw0KKyAgICAgICAgICAgIHVp bnQxNl90IGxlbjsNCisgICAgICAgICAgICAvKio8IExlbmd0aCBvZiBtYXRjaCBpbiBieXRlcyAq Lw0KKyAgICAgICAgfTsNCisgICAgfTsNCit9Ow0KKw0KKy8qIEVudW1lcmF0ZXMgUmVnRXggcmVx dWVzdCBmbGFncy4gKi8NCisjZGVmaW5lIFJURV9SRUdFWF9PUFNfUkVRX0dST1VQX0lEMV9WQUxJ RF9GICgxIDw8IDApDQorLyoqPCBTZXQgd2hlbiBzdHJ1Y3QgcnRlX3JlZ2V4X3J1bGU6Omdyb3Vw X2lkMSB2YWxpZCAqLw0KKw0KKyNkZWZpbmUgUlRFX1JFR0VYX09QU19SRVFfR1JPVVBfSUQyX1ZB TElEX0YgKDEgPDwgMSkNCisvKio8IFNldCB3aGVuIHN0cnVjdCBydGVfcmVnZXhfcnVsZTo6Z3Jv dXBfaWQyIHZhbGlkICovDQorDQorI2RlZmluZSBSVEVfUkVHRVhfT1BTX1JFUV9HUk9VUF9JRDNf VkFMSURfRiAoMSA8PCAyKQ0KKy8qKjwgU2V0IHdoZW4gc3RydWN0IHJ0ZV9yZWdleF9ydWxlOjpn cm91cF9pZDMgdmFsaWQgKi8NCisNCisjZGVmaW5lIFJURV9SRUdFWF9PUFNfUkVRX1NUT1BfT05f TUFUQ0hfRiAoMSA8PCA0KQ0KKy8qKjwgVGhlIFJlZ0V4IGVuZ2luZSB3aWxsIHN0b3Agc2Nhbm5p bmcgYW5kIHJldHVybiB0aGUgZmlyc3QgbWF0Y2guICovDQorDQorI2RlZmluZSBSVEVfUkVHRVhf T1BTX1JFUV9NQVRDSF9ISUdIX1BSSU9SSVRZX0YgKDEgPDwgNSkNCisvKio8IEluIEhpZ2ggUHJp b3JpdHkgbW9kZSBhIG1heGltdW0gb2Ygb25lIG1hdGNoIHdpbGwgYmUgcmV0dXJuZWQgcGVyDQpz Y2FuIHRvDQorICogcmVkdWNlIHRoZSBwb3N0LXByb2Nlc3NpbmcgcmVxdWlyZWQgYnkgdGhlIGFw cGxpY2F0aW9uLiBUaGUgbWF0Y2ggd2l0aA0KdGhlDQorICogbG93ZXN0IFJ1bGUgaWQsIGxvd2Vz dCBzdGFydCBwb2ludGVyIGFuZCBsb3dlc3QgbWF0Y2ggbGVuZ3RoIHdpbGwgYmUNCisgKiByZXR1 cm5lZC4NCisgKg0KKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9vcHM6Om5iX2FjdHVhbF9tYXRj aGVzDQorICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X29wczo6bmJfbWF0Y2hlcw0KKyAqLw0KKw0K Kw0KKy8qIEVudW1lcmF0ZXMgUmVnRXggcmVzcG9uc2UgZmxhZ3MuICovDQorI2RlZmluZSBSVEVf UkVHRVhfT1BTX1JTUF9QTUlfU09KX0YgKDEgPDwgMCkNCisvKio8IEluZGljYXRlcyB0aGF0IHRo ZSBSZWdFeCBkZXZpY2UgaGFzIGVuY291bnRlcmVkIGEgcGFydGlhbCBtYXRjaCBhdCB0aGUNCisg KiBzdGFydCBvZiBzY2FuIGluIHRoZSBnaXZlbiBidWZmZXIuDQorICoNCisgKiBAc2VlIFJURV9S RUdFWF9ERVZfQ0ZHX0NST1NTX0JVRkZFUl9TQ0FOX0YNCisgKi8NCisNCisjZGVmaW5lIFJURV9S RUdFWF9PUFNfUlNQX1BNSV9FT0pfRiAoMSA8PCAxKQ0KKy8qKjwgSW5kaWNhdGVzIHRoYXQgdGhl IFJlZ0V4IGRldmljZSBoYXMgZW5jb3VudGVyZWQgYSBwYXJ0aWFsIG1hdGNoIGF0IHRoZQ0KKyAq IGVuZCBvZiBzY2FuIGluIHRoZSBnaXZlbiBidWZmZXIuDQorICoNCisgKiBAc2VlIFJURV9SRUdF WF9ERVZfQ0ZHX0NST1NTX0JVRkZFUl9TQ0FOX0YNCisgKi8NCisNCisjZGVmaW5lIFJURV9SRUdF WF9PUFNfUlNQX01BWF9TQ0FOX1RJTUVPVVRfRiAoMSA8PCAyKQ0KKy8qKjwgSW5kaWNhdGVzIHRo YXQgdGhlIFJlZ0V4IGRldmljZSBoYXMgZXhjZWVkZWQgdGhlIG1heCB0aW1lb3V0IHdoaWxlDQor ICogc2Nhbm5pbmcgdGhlIGdpdmVuIGJ1ZmZlci4NCisgKg0KKyAqIEBzZWUgUlRFX1JFR0VYX0RF Vl9BVFRSX01BWF9TQ0FOX1RJTUVPVVQNCisgKi8NCisNCisjZGVmaW5lIFJURV9SRUdFWF9PUFNf UlNQX01BWF9NQVRDSF9GICgxIDw8IDMpDQorLyoqPCBJbmRpY2F0ZXMgdGhhdCB0aGUgUmVnRXgg ZGV2aWNlIGhhcyBleGNlZWRlZCB0aGUgbWF4IG1hdGNoZXMgd2hpbGUNCisgKiBzY2FubmluZyB0 aGUgZ2l2ZW4gYnVmZmVyLg0KKyAqDQorICogQHNlZSBSVEVfUkVHRVhfREVWX0FUVFJfTUFYX01B VENIRVMNCisgKi8NCisNCisjZGVmaW5lIFJURV9SRUdFWF9PUFNfUlNQX01BWF9QUkVGSVhfRiAo MSA8PCA0KQ0KKy8qKjwgSW5kaWNhdGVzIHRoYXQgdGhlIFJlZ0V4IGRldmljZSBoYXMgcmVhY2hl ZCB0aGUgbWF4IGFsbG93ZWQgcHJlZml4DQpsZW5ndGgNCisgKiB3aGlsZSBzY2FubmluZyB0aGUg Z2l2ZW4gYnVmZmVyLg0KKyAqDQorICogQHNlZSBSVEVfUkVHRVhfREVWX0FUVFJfTUFYX1BSRUZJ WA0KKyAqLw0KKw0KKy8qKg0KKyAqIFRoZSBnZW5lcmljICpydGVfcmVnZXhfb3BzKiBzdHJ1Y3R1 cmUgdG8gaG9sZCB0aGUgUmVnRXggYXR0cmlidXRlcw0KKyAqIGZvciBlbnF1ZXVlIGFuZCBkZXF1 ZXVlIG9wZXJhdGlvbi4NCisgKi8NCitzdHJ1Y3QgcnRlX3JlZ2V4X29wcyB7DQorICAgIC8qIFcw ICovDQorICAgIHVpbnQxNl90IHJlcV9mbGFnczsNCisgICAgLyoqPCBSZXF1ZXN0IGZsYWdzIGZv ciB0aGUgUmVnRXggb3BzLg0KKyAgICAgKiBAc2VlIFJURV9SRUdFWF9PUFNfUkVRXyoNCisgICAg ICovDQorICAgIHVpbnQxNl90IHNjYW5fc2l6ZTsNCisgICAgLyoqPCBTY2FuIHNpemUgb2YgdGhl IGJ1ZmZlciB0byBiZSBzY2FubmVkIGluIGJ5dGVzLiAqLw0KKyAgICB1aW50MTZfdCByc3BfZmxh Z3M7DQorICAgIC8qKjwgUmVzcG9uc2UgZmxhZ3MgZm9yIHRoZSBSZWdFeCBvcHMuDQorICAgICAq IEBzZWUgUlRFX1JFR0VYX09QU19SU1BfKg0KKyAgICAgKi8NCisgICAgdWludDhfdCBuYl9hY3R1 YWxfbWF0Y2hlczsNCisgICAgLyoqPCBUaGUgdG90YWwgbnVtYmVyIG9mIGFjdHVhbCBtYXRjaGVz IGRldGVjdGVkIGJ5IHRoZSBSZWdleA0KZGV2aWNlLiovDQorICAgIHVpbnQ4X3QgbmJfbWF0Y2hl czsNCisgICAgLyoqPCBUaGUgdG90YWwgbnVtYmVyIG9mIG1hdGNoZXMgcmV0dXJuZWQgYnkgdGhl IFJlZ0V4IGRldmljZSBmb3INCnRoaXMNCisgICAgICogc2Nhbi4gVGhlIHNpemUgb2YgKnJ0ZV9y ZWdleF9vcHM6Om1hdGNoZXMqIHplcm8gbGVuZ3RoIGFycmF5IHdpbGwNCmJlDQorICAgICAqIHRo aXMgdmFsdWUuDQorICAgICAqDQorICAgICAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9vcHM6Om1h dGNoZXMsIHN0cnVjdCBydGVfcmVnZXhfbWF0Y2gNCisgICAgICovDQorDQorICAgIC8qIFcxICov DQorICAgIFJURV9TVERfQzExDQorICAgIHVuaW9uIHsNCisgICAgICAgIHVpbnQ2NF90IHU2NDsN CisgICAgICAgIC8qKjwgIEFsbG93IDgtYnl0ZSByZXNlcnZlZCBvbiAzMi1iaXQgc3lzdGVtICov DQorICAgICAgICB2b2lkICpidWZfYWRkcjsNCisgICAgICAgIC8qKjwgVmlydHVhbCBhZGRyZXNz IG9mIHRoZSBwYXR0ZXJuIHRvIGJlIG1hdGNoZWQuICovDQorICAgIH07DQorDQorICAgIC8qIFcy ICovDQorICAgIHJ0ZV9pb3ZhX3QgYnVmX2lvdmE7DQorICAgIC8qKjwgSU9WQSBhZGRyZXNzIG9m IHRoZSBwYXR0ZXJuIHRvIGJlIG1hdGNoZWQuICovDQorDQorICAgIC8qIFczICovDQorICAgIHVp bnQxNl90IGdyb3VwX2lkMDsNCisgICAgLyoqPCBGaXJzdCBncm91cF9pZCB0byBtYXRjaCB0aGUg cnVsZSBhZ2FpbnN0LiBNaW5pbXVtIG9uZSBncm91cCBpZA0KKyAgICAgKiBtdXN0IGJlIHByb3Zp ZGVkIGJ5IGFwcGxpY2F0aW9uLg0KKyAgICAgKiBXaGVuIFJURV9SRUdFWF9PUFNfUkVRX0dST1VQ X0lEMV9WQUxJRF9GIHNldCB0aGVuDQpncm91cF9pZDENCisgICAgICogaXMgdmFsaWQsIHJlc3Bl Y3RpdmVseSBzaW1pbGFyIGZsYWdzIGZvciBncm91cF9pZDIgYW5kIGdyb3VwX2lkMy4NCisgICAg ICogVXBvbiB0aGUgbWF0Y2gsIHN0cnVjdCBydGVfcmVnZXhfbWF0Y2g6Omdyb3VwX2lkIHNoYWxs IGJlDQp1cGRhdGVkDQorICAgICAqIHdpdGggbWF0Y2hpbmcgZ3JvdXAgSUQgYnkgdGhlIGRldmlj ZS4gR3JvdXAgSUQgc2NoZW1lIHByb3ZpZGVzDQorICAgICAqIHJ1bGUgaXNvbGF0aW9uIGFuZCBl ZmZlY3RpdmUgcGF0dGVybiBtYXRjaGluZy4NCisgICAgICovDQorICAgIHVpbnQxNl90IGdyb3Vw X2lkMTsNCisgICAgLyoqPCBTZWNvbmQgZ3JvdXBfaWQgdG8gbWF0Y2ggdGhlIHJ1bGUgYWdhaW5z dC4NCisgICAgICoNCisgICAgICogQHNlZSBSVEVfUkVHRVhfT1BTX1JFUV9HUk9VUF9JRDFfVkFM SURfRg0KKyAgICAgKi8NCisgICAgdWludDE2X3QgZ3JvdXBfaWQyOw0KKyAgICAvKio8IFRoaXJk IGdyb3VwX2lkIHRvIG1hdGNoIHRoZSBydWxlIGFnYWluc3QuDQorICAgICAqDQorICAgICAqIEBz ZWUgUlRFX1JFR0VYX09QU19SRVFfR1JPVVBfSUQyX1ZBTElEX0YNCisgICAgICovDQorICAgIHVp bnQxNl90IGdyb3VwX2lkMzsNCisgICAgLyoqPCBGb3J0aCBncm91cF9pZCB0byBtYXRjaCB0aGUg cnVsZSBhZ2FpbnN0Lg0KKyAgICAgKg0KKyAgICAgKiBAc2VlIFJURV9SRUdFWF9PUFNfUkVRX0dS T1VQX0lEM19WQUxJRF9GDQorICAgICAqLw0KKw0KKyAgICAvKiBXNCAqLw0KKyAgICBSVEVfU1RE X0MxMQ0KKyAgICB1bmlvbiB7DQorICAgICAgICB1aW50NjRfdCB1c2VyX2lkOw0KKyAgICAgICAg LyoqPCBBcHBsaWNhdGlvbiBzcGVjaWZpYyBvcGFxdWUgdmFsdWUuIEFuIGFwcGxpY2F0aW9uIG1h eQ0KdXNlDQorICAgICAgICAgKiB0aGlzIGZpZWxkIHRvIGhvbGQgYXBwbGljYXRpb24gc3BlY2lm aWMgdmFsdWUgdG8gc2hhcmUNCisgICAgICAgICAqIGJldHdlZW4gZGVxdWV1ZSBhbmQgZW5xdWV1 ZSBvcGVyYXRpb24uDQorICAgICAgICAgKiBJbXBsZW1lbnRhdGlvbiBzaG91bGQgbm90IG1vZGlm eSB0aGlzIGZpZWxkLg0KKyAgICAgICAgICovDQorICAgICAgICB2b2lkICp1c2VyX3B0cjsNCisg ICAgICAgIC8qKjwgUG9pbnRlciByZXByZXNlbnRhdGlvbiBvZiAqdXNlcl9pZCogKi8NCisgICAg fTsNCg0KU2luY2Ugd2UgdGFyZ2V0IHRoZSByZWdleCBzdWJzeXN0ZW0gZm9yIGJvdGggcmVnZXgg YW5kIERQSSBJIHRoaW5rIGl0IHdpbGwgYmUgZ29vZCB0byBhZGQgYW5vdGhlciB1aW50NjRfdCBm aWVsZCBjYWxsZWQgY29ubmVjdGlvbl9pZC4NCkRldmljZSB0aGF0IHN1cHBvcnQgRFBJIGNhbiBy ZWZlciB0byBpdCBhcyBhbm90aGVyIG1hdGNoIGFibGUgZmllbGQgd2hlbiBsb29raW5nIHVwIGZv ciBtYXRjaGVzIG9uIHRoZSBnaXZlbiBidWZmZXIuDQoNClRoaXMgZmllbGQgaXMgZGlmZmVyZW50 IGZyb20gdGhlIHVzZXJfaWQsIGFzIGl0IGlzIG5vdCBvcGFxdWUgZm9yIHRoZSBkZXZpY2UuDQoN CisNCisgICAgLyogVzUgKi8NCisgICAgc3RydWN0IHJ0ZV9yZWdleF9tYXRjaCBtYXRjaGVzW107 DQorICAgIC8qKjwgWmVybyBsZW5ndGggYXJyYXkgdG8gaG9sZCB0aGUgbWF0Y2ggdHVwbGVzLg0K KyAgICAgKiBUaGUgc3RydWN0IHJ0ZV9yZWdleF9vcHM6Om5iX21hdGNoZXMgdmFsdWUgaG9sZHMg dGhlIG51bWJlciBvZg0KKyAgICAgKiBlbGVtZW50cyBpbiB0aGlzIGFycmF5Lg0KKyAgICAgKg0K KyAgICAgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfb3BzOjpuYl9tYXRjaGVzDQorICAgICAqLw0K K307DQorDQorLyoqDQorICogRW5xdWV1ZSBhIGJ1cnN0IG9mIHNjYW4gcmVxdWVzdCBvbiBhIFJl Z0V4IGRldmljZS4NCisgKg0KKyAqIFRoZSBydGVfcmVnZXhfZW5xdWV1ZV9idXJzdCgpIGZ1bmN0 aW9uIGlzIGludm9rZWQgdG8gcGxhY2UNCisgKiByZWdleCBvcGVyYXRpb25zIG9uIHRoZSBxdWV1 ZSAqcXBfaWQqIG9mIHRoZSBkZXZpY2UgZGVzaWduYXRlZCBieQ0KKyAqIGl0cyAqZGV2X2lkKi4N CisgKg0KKyAqIFRoZSAqbmJfb3BzKiBwYXJhbWV0ZXIgaXMgdGhlIG51bWJlciBvZiBvcGVyYXRp b25zIHRvIHByb2Nlc3Mgd2hpY2gNCmFyZQ0KKyAqIHN1cHBsaWVkIGluIHRoZSAqb3BzKiBhcnJh eSBvZiAqcnRlX3JlZ2V4X29wKiBzdHJ1Y3R1cmVzLg0KKyAqDQorICogVGhlIHJ0ZV9yZWdleF9l bnF1ZXVlX2J1cnN0KCkgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mDQorICogb3BlcmF0 aW9ucyBpdCBhY3R1YWxseSBlbnF1ZXVlZCBmb3IgcHJvY2Vzc2luZy4gQSByZXR1cm4gdmFsdWUg ZXF1YWwgdG8NCisgKiAqbmJfb3BzKiBtZWFucyB0aGF0IGFsbCBwYWNrZXRzIGhhdmUgYmVlbiBl bnF1ZXVlZC4NCisgKg0KKyAqIEBwYXJhbSBkZXZfaWQNCisgKiAgIFRoZSBpZGVudGlmaWVyIG9m IHRoZSBkZXZpY2UuDQorICogQHBhcmFtIHFwX2lkDQorICogICBUaGUgaW5kZXggb2YgdGhlIHF1 ZXVlIHBhaXIgd2hpY2ggcGFja2V0cyBhcmUgdG8gYmUgZW5xdWV1ZWQgZm9yDQorICogICBwcm9j ZXNzaW5nLiBUaGUgdmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIG5iX3F1ZXVlX3BhaXJz IC0gMV0NCisgKiAgIHByZXZpb3VzbHkgc3VwcGxpZWQgdG8gcnRlX3JlZ2V4X2Rldl9jb25maWd1 cmUoKS4NCisgKiBAcGFyYW0gb3BzDQorICogICBUaGUgYWRkcmVzcyBvZiBhbiBhcnJheSBvZiAq bmJfb3BzKiBwb2ludGVycyB0byAqcnRlX3JlZ2V4X29wKg0Kc3RydWN0dXJlcw0KKyAqICAgd2hp Y2ggY29udGFpbiB0aGUgcmVnZXggb3BlcmF0aW9ucyB0byBiZSBwcm9jZXNzZWQuDQorICogQHBh cmFtIG5iX29wcw0KKyAqICAgVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIHRvIHByb2Nlc3MuDQor ICoNCisgKiBAcmV0dXJuDQorICogICBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgYWN0dWFsbHkg ZW5xdWV1ZWQgb24gdGhlIHJlZ2V4IGRldmljZS4gVGhlDQpyZXR1cm4NCisgKiAgIHZhbHVlIGNh biBiZSBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIHRoZSAqbmJfb3BzKiBwYXJhbWV0ZXIgd2hlbiB0 aGUNCisgKiAgIHJlZ2V4IGRldmljZXMgcXVldWUgaXMgZnVsbCBvciBpZiBpbnZhbGlkIHBhcmFt ZXRlcnMgYXJlIHNwZWNpZmllZCBpbg0KKyAqICAgYSAqcnRlX3JlZ2V4X29wKi4gSWYgdGhlIHJl dHVybiB2YWx1ZSBpcyBsZXNzIHRoYW4gKm5iX29wcyosIHRoZQ0KcmVtYWluaW5nDQorICogICBv cHMgYXQgdGhlIGVuZCBvZiAqb3BzKiBhcmUgbm90IGNvbnN1bWVkIGFuZCB0aGUgY2FsbGVyIGhh cyB0byB0YWtlDQpjYXJlDQorICogICBvZiB0aGVtLg0KKyAqLw0KK3VpbnQxNl90DQorcnRlX3Jl Z2V4X2VucXVldWVfYnVyc3QodWludDhfdCBkZXZfaWQsIHVpbnQxNl90IHFwX2lkLA0KKyAgICAg ICAgICAgIHN0cnVjdCBydGVfcmVnZXhfb3BzICoqb3BzLCB1aW50MTZfdCBuYl9vcHMpOw0KKw0K Ky8qKg0KKyAqDQorICogRGVxdWV1ZSBhIGJ1cnN0IG9mIHNjYW4gcmVzcG9uc2UgZnJvbSBhIHF1 ZXVlIG9uIHRoZSBSZWdFeCBkZXZpY2UuDQorICogVGhlIGRlcXVldWVkIG9wZXJhdGlvbiBhcmUg c3RvcmVkIGluICpydGVfcmVnZXhfb3AqIHN0cnVjdHVyZXMNCisgKiB3aG9zZSBwb2ludGVycyBh cmUgc3VwcGxpZWQgaW4gdGhlICpvcHMqIGFycmF5Lg0KKyAqDQorICogVGhlIHJ0ZV9yZWdleF9k ZXF1ZXVlX2J1cnN0KCkgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIG9wcw0KKyAqIGFj dHVhbGx5IGRlcXVldWVkLCB3aGljaCBpcyB0aGUgbnVtYmVyIG9mICpydGVfcmVnZXhfb3AqIGRh dGENCnN0cnVjdHVyZXMNCisgKiBlZmZlY3RpdmVseSBzdXBwbGllZCBpbnRvIHRoZSAqb3BzKiBh cnJheS4NCisgKg0KKyAqIEEgcmV0dXJuIHZhbHVlIGVxdWFsIHRvICpuYl9vcHMqIGluZGljYXRl cyB0aGF0IHRoZSBxdWV1ZSBjb250YWluZWQNCisgKiBhdCBsZWFzdCAqbmJfb3BzKiBvcGVyYXRp b25zLCBhbmQgdGhpcyBpcyBsaWtlbHkgdG8gc2lnbmlmeSB0aGF0IG90aGVyDQorICogcHJvY2Vz c2VkIG9wZXJhdGlvbnMgcmVtYWluIGluIHRoZSBkZXZpY2VzIG91dHB1dCBxdWV1ZS4gQXBwbGlj YXRpb25zDQorICogaW1wbGVtZW50aW5nIGEgInJldHJpZXZlIGFzIG1hbnkgcHJvY2Vzc2VkIG9w ZXJhdGlvbnMgYXMgcG9zc2libGUiDQpwb2xpY3kNCisgKiBjYW4gY2hlY2sgdGhpcyBzcGVjaWZp YyBjYXNlIGFuZCBrZWVwIGludm9raW5nIHRoZQ0KKyAqIHJ0ZV9yZWdleF9kZXF1ZXVlX2J1cnN0 KCkgZnVuY3Rpb24gdW50aWwgYSB2YWx1ZSBsZXNzIHRoYW4NCisgKiAqbmJfb3BzKiBpcyByZXR1 cm5lZC4NCisgKg0KKyAqIFRoZSBydGVfcmVnZXhfZGVxdWV1ZV9idXJzdCgpIGZ1bmN0aW9uIGRv ZXMgbm90IHByb3ZpZGUgYW55IGVycm9yDQorICogbm90aWZpY2F0aW9uIHRvIGF2b2lkIHRoZSBj b3JyZXNwb25kaW5nIG92ZXJoZWFkLg0KKyAqDQorICogQHBhcmFtIGRldl9pZA0KKyAqICAgVGhl IFJlZ0V4IGRldmljZSBpZGVudGlmaWVyDQorICogQHBhcmFtIHFwX2lkDQorICogICBUaGUgaW5k ZXggb2YgdGhlIHF1ZXVlIHBhaXIgZnJvbSB3aGljaCB0byByZXRyaWV2ZSBwcm9jZXNzZWQgcGFj a2V0cy4NCisgKiAgIFRoZSB2YWx1ZSBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCwgbmJfcXVldWVf cGFpcnMgLSAxXSBwcmV2aW91c2x5DQorICogICBzdXBwbGllZCB0byBydGVfcmVnZXhfZGV2X2Nv bmZpZ3VyZSgpLg0KKyAqIEBwYXJhbSBvcHMNCisgKiAgIFRoZSBhZGRyZXNzIG9mIGFuIGFycmF5 IG9mIHBvaW50ZXJzIHRvICpydGVfcmVnZXhfb3AqIHN0cnVjdHVyZXMgdGhhdA0KbXVzdA0KKyAq ICAgYmUgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlICpuYl9vcHMqIHBvaW50ZXJzIGluIGl0Lg0KKyAq IEBwYXJhbSBuYl9vcHMNCisgKiAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVyYXRpb25zIHRv IGRlcXVldWUuDQorICoNCisgKiBAcmV0dXJuDQorICogICBUaGUgbnVtYmVyIG9mIG9wZXJhdGlv bnMgYWN0dWFsbHkgZGVxdWV1ZWQsIHdoaWNoIGlzIHRoZSBudW1iZXINCisgKiAgIG9mIHBvaW50 ZXJzIHRvICpydGVfcmVnZXhfb3AqIHN0cnVjdHVyZXMgZWZmZWN0aXZlbHkgc3VwcGxpZWQgdG8g dGhlDQorICogICAqb3BzKiBhcnJheS4gSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBsZXNzIHRoYW4g Km5iX29wcyosIHRoZSByZW1haW5pbmcNCisgKiAgIG9wcyBhdCB0aGUgZW5kIG9mICpvcHMqIGFy ZSBub3QgY29uc3VtZWQgYW5kIHRoZSBjYWxsZXIgaGFzIHRvIHRha2UNCmNhcmUNCisgKiAgIG9m IHRoZW0uDQorICovDQordWludDE2X3QNCitydGVfcmVnZXhfZGVxdWV1ZV9idXJzdCh1aW50OF90 IGRldl9pZCwgdWludDE2X3QgcXBfaWQsDQorICAgICAgICAgICAgc3RydWN0IHJ0ZV9yZWdleF9v cHMgKipvcHMsIHVpbnQxNl90IG5iX29wcyk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0K KyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfUlRFX1JFR0VYREVWX0hfICovDQoNCg0K