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 E879CA046B for ; Mon, 19 Aug 2019 05:09:47 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id AED2A2BF1; Mon, 19 Aug 2019 05:09:46 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id E97DF1DBD for ; Mon, 19 Aug 2019 05:09:44 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id x7J35LGg031026; Sun, 18 Aug 2019 20:09:34 -0700 Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-0016f401.pphosted.com with ESMTP id 2ueh3hvgp8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 18 Aug 2019 20:09:33 -0700 Received: from m0045851.ppops.net (m0045851.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id x7J35rFZ031607; Sun, 18 Aug 2019 20:09:33 -0700 Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0b-0016f401.pphosted.com with ESMTP id 2ueh3hvgp5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Sun, 18 Aug 2019 20:09:33 -0700 Received: from SC-EXCH02.marvell.com (10.93.176.82) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Sun, 18 Aug 2019 20:09:30 -0700 Received: from NAM04-CO1-obe.outbound.protection.outlook.com (104.47.45.54) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1367.3 via Frontend Transport; Sun, 18 Aug 2019 20:09:30 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fNN94fAULXjjkdq8LQ63fOowy+DBgTE/PR2+fxHvqNOAXXJq55YT7YXLHBk8B8ptJUBiW8XTUfypQCCO0vr+3IzVwAOYAJtr5H07tVUAIPXKbF4TEQ+ch7WsnNmXXRAW7vpAosHsVLLSNW/wyXqCFG9S/LQZeqHxrtyz9xUfJ3v3bnK+wzs2tvLPAEWUA/zozI/K7WPw6VIiNO0DERUH/TiwOG3cH0Xy/K8MC2FBC4EH1Uon6VOH5Z9YaFdmadJtt5AKYOG4B/mFi+dC2ZJsODYQmCgCJunmTrBshgCM0oIK+wHVXn0YjOgWniGssqnkTue5DIaLxwiUt6OGuMuwKg== 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=vRcIKhpEb92dDaII6IUdQnpZsSirJMq+w/8KgtWNJI4=; b=hb4Z6e++aiPDlqEDUSlulvAXcBNdMqe72uV96jR1BmgT1GoSq/w6sRbFMbGWbVPa3nhAdDxi9JJZYUMHTYtGxK25qBvyATthCo0pdU3if9ARnSOMndVGZRiJojhisDwZ75UC4ZU5TcnPXWSKAOFlN7i80NFbC8e3BRQ6M4EVN8rfMTQi/qoxecZVOBwSRxVhgkcUJbz4j9+skS8KM5rSxyUY+vHLgi78aQAivDAyFoqbptRZvK/DESXD80zvz35h0EK73lY28wfb3lzjciHXLg20B+x8/BBM7b3dhSwn8Y1YNmyZMwQocHFRumPyPCsOQO6LtNu2PqSTJ/YGnX2rQQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector2-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vRcIKhpEb92dDaII6IUdQnpZsSirJMq+w/8KgtWNJI4=; b=i474gd9rreEEdehpwJf03GTfJ0CajNkIGtUZQxLriE2gAoj3rXw3+iOCOMY9DPbyn6tAi4+FEQBUNfKOtWGaQE5LHyBkixcElrTTivN7HlJpTRst1y0gbleNmft2O2U1wMzR732qlSr4qbJAs1Fq8PB8IVsgjXinpoa4eH8kWAs= Received: from BYAPR18MB2424.namprd18.prod.outlook.com (20.179.91.149) by BYAPR18MB2791.namprd18.prod.outlook.com (20.179.57.94) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.18; Mon, 19 Aug 2019 03:09:27 +0000 Received: from BYAPR18MB2424.namprd18.prod.outlook.com ([fe80::5877:72b7:40cf:2013]) by BYAPR18MB2424.namprd18.prod.outlook.com ([fe80::5877:72b7:40cf:2013%3]) with mapi id 15.20.2178.018; Mon, 19 Aug 2019 03:09:27 +0000 From: Jerin Jacob Kollanukkaran To: Thomas Monjalon , "dev@dpdk.org" CC: Pavan Nikhilesh Bhagavatula , Shahaf Shuler , 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" , "j.bromhead@titan-ic.com" , "deri@ntop.org" , "fc@napatech.com" , "arthur.su@lionic.com" , Guy Kaneti , Smadar Fuks , Liron Himi Thread-Topic: [dpdk-dev] [RFC PATCH v1] regexdev: introduce regexdev subsystem Thread-Index: AQHVU11rzFGXGDb9TEWOWcBbu1ajBKcBxiXA Date: Mon, 19 Aug 2019 03:09:27 +0000 Message-ID: References: <20190627155036.56940-1-jerinj@marvell.com> <8285913.8xKIzI91KM@xps> <1922242.dABWq9CbNQ@xps> In-Reply-To: <1922242.dABWq9CbNQ@xps> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [223.226.105.92] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 29cb981d-6788-4003-ac59-08d72452a560 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020); SRVR:BYAPR18MB2791; x-ms-traffictypediagnostic: BYAPR18MB2791: x-ms-exchange-purlcount: 2 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2887; x-forefront-prvs: 0134AD334F x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(346002)(376002)(136003)(396003)(39850400004)(366004)(13464003)(189003)(199004)(53754006)(186003)(55016002)(4326008)(81156014)(54906003)(110136005)(81166006)(6436002)(71190400001)(64756008)(66446008)(26005)(66556008)(66476007)(256004)(8676002)(53546011)(66946007)(9686003)(316002)(6506007)(71200400001)(8936002)(86362001)(6306002)(55236004)(3846002)(53946003)(229853002)(6116002)(33656002)(53936002)(76116006)(102836004)(7736002)(99286004)(486006)(2501003)(476003)(305945005)(5660300002)(6246003)(30864003)(25786009)(76176011)(7416002)(2906002)(11346002)(66066001)(7696005)(107886003)(74316002)(478600001)(14454004)(966005)(14444005)(446003)(52536014)(91820200001)(567584001)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR18MB2791; H:BYAPR18MB2424.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: uxVo8aBlpZUBiXfcSPtOxJcxUUcGpgpaVZa0dYmwp3/V3Wxsh/w23weOGKpeqsmlU+kdsPUTRSnAgRikgJekzKwzt42F8/G1sMaFf5TaS6ObsqqZlQX81x9Zhoqu3BUJHr1a7gJIR62nTm8Lj/K1AMvS6OIBktyRpLK+ueP1+DAxbu1R0PxMRzMIgFEX/pzbkSPfBi+N7RtDoDLNXOcYMGm8Dtm2s2fbTxIVVz3BmTshCv45V5ngVHXLoX/J+YKL1VAvP98/6ZHnscTHkul2Ac21duUShNfjK/2ruPhArE33WppWw74C+NrKxss6EburQ2uqFKD5aa2J7izFsvKvV+HO/uB94cXznO5L43+MQBJp63PZofw81gX7feh/MYqNh/wk0xFK1L0q2fyx97KFtNwA/AGiXauANorF+v+lKRU= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 29cb981d-6788-4003-ac59-08d72452a560 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Aug 2019 03:09:27.3250 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: GFbS5yorivfUSCDKiAR9sio9VBo85apMvWSDitCr7Jq+f6JZhkC4alGinHS0tgZgUibO4bC87iGuWHP2OGCB6A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR18MB2791 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:5.22.84,1.0.8 definitions=2019-08-19_01:2019-08-16,2019-08-19 signatures=0 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" UmVwbHkgdG8gWGlhbmcncyBxdWVyaWVzIGluIG1haW4gdGhyZWFkOg0KDQpIaSBhbGwsDQoNClNv bWUgcXVlc3Rpb25zIHJlZ2FyZGluZyBBUElzLiBDb3VsZCB5b3UgcGxlYXNlIGdpdmUgbW9yZSBp bnNpZ2h0cz8NCg0KMSkgcnRlX3JlZ2V4X29wcw0KICAgICAgYSkgcnNwX2ZsYWdzDQogICAgICBU aGVzZSB0d28gZmxhZ3MgUlRFX1JFR0VYX09QU19SU1BfUE1JX1NPSl9GIGFuZCBSVEVfUkVHRVhf T1BTX1JTUF9QTUlfRU9KX0YgYXJlIHVzZWQgZm9yIGNyb3NzIGJ1ZmZlciBzY2FuLg0KICAgICAg UlRFX1JFR0VYX09QU19SU1BfUE1JX0VPSl9GIHRlbGxzIHdoZXRoZXIgd2UgaGF2ZSBhIHBhcnRp YWwgbWF0Y2ggYXQgdGhlIGVuZCBvZiBjdXJyZW50IGJ1ZmZlciBhZnRlciBzY2FuLg0KICAgICAg V2hhdCdzIHRoZSBwdXJwb3NlIG9mIGhhdmluZyBSVEVfUkVHRVhfT1BTX1JTUF9QTUlfU09KX0Y/ DQoNCltKZXJpbl0gU2luY2Ugd2UgbmVlZCB0aHJlZSBzdGF0ZXMgdG8gcmVwcmVzZW50IHBhcnRp YWwgbWF0Y2ggYnVmZmVyLCBSVEVfUkVHRVhfT1BTX1JTUF9QTUlfU09KX0YgdG8NCnJlcHJlc2Vu dCBzdGFydCBvZiB0aGUgYnVmZmVyLCBpbnRlcm1lZGlhdGUgYnVmZmVycyB3aXRoIG5vIGZsYWcs IGFuZCBlbmQgb2YgdGhlIGJ1ZmZlciB3aXRoIFJURV9SRUdFWF9PUFNfUlNQX1BNSV9FT0oNCg0K ICAgICAgUlRFX1JFR0VYX09QU19SU1BfTUFYX1BSRUZJWF9GOiBUaGlzIGxvb2tzIGxpa2UgYSBk ZWZpbml0aW9uIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uLiBJIGFtIHdv bmRlcmluZyB3aGF0IHRoaXMgUFJFRklYIHJlZmVycyB0bzopPw0KDQpbSmVyaW5dIFllcy4gTG9v a3MgbGlrZSBpdCBpcyBmb3IgaGFyZHdhcmUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEludHJv ZHVjZWQgcnRlX3JlZ2V4X2Rldl9hdHRyX3NldC9nZXQgZnVuY3Rpb25zIHRvIG1ha2UgaXQgcG9y dGFibGUgYW5kDQpUbyBhZGQgbmV3IGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGZpZWxkcy4NCkZv ciBleGFtcGxlLCBpZiBhIHJ1bGUgaXMNCi9BQkNERUYuKlhZWi8sIEFCQ0QgaXMgY29uc2lkZXJl ZCB0aGUgcHJlZml4LCBhbmQgRUYuKlhZWiBpcyBjb25zaWRlcmVkIHRoZSBmYWN0b3IuIFRoZSBw cmVmaXggaXMgYSBsaXRlcmFsDQpzdHJpbmcsIHdoaWxlIHRoZSBmYWN0b3IgY2FuIGNvbnRhaW4g Y29tcGxleCByZWd1bGFyIGV4cHJlc3Npb24gY29uc3RydWN0cy4gQXMgYSByZXN1bHQsIHJ1bGUg bWF0Y2hpbmcgb2NjdXJzIGluDQp0d28gc3RhZ2VzOiBwcmVmaXggbWF0Y2hpbmcgYW5kIGZhY3Rv ciBtYXRjaGluZy4NCiANCiAgICAgIGIpICB1c2VyX2lkIG9yIHVzZXJfcHRyDQogICAgICBVbmRl ciB3aGF0IGtpbmQgb2YgY2lyY3Vtc3RhbmNlcyBzaG91bGQgYW4gYXBwbGljYXRpb24gcGFzcyB2 YWx1ZSBpbnRvIHRoZXNlIHZhcmlhYmxlcyBmb3IgZW5xdWV1ZSBhbmQgZGVxdWV1ZXIgb3BlcmF0 aW9ucz8NCg0KW0plcmluXSBKdXN0IGxpa2UgcnRlX2NyeXB0b19vcHMsIHN0cnVjdCBydGVfcmVn ZXhfb3BzIGFsc28gYWxsb2NhdGVkIHVzaW5nIG1lbXBvb2wgbm9ybWFsbHksIG9uIGVucXVldWUs IHVzZXIgY2FuIHNwZWNpZnkgdXNlcl9pZA0KSWYgbmVlZGVkIHRvIGluIG9yZGVyIGlkZW50aWZ5 IHRoZSBvcCBvbiBkZXF1ZXVlIGlmIHJlcXVpcmVkLiBUaGUgdXNlIGNhc2UgY291bGQgYmUgdG8g c3RvcmUgdGhlIHNlcXVlbmNlIG51bWJlciBmcm9tIGFwcGxpY2F0aW9uDQpQT1Ygb3Igc3Rvcmlu ZyB0aGUgbWJ1ZiBwdHIgaW4gd2hpY2ggcGF0dGVybiBpcyByZXF1ZXN0ZWQgZXRjLg0KIA0KDQog MikgcnRlX3JlZ2V4X21hdGNoDQogICAgICBhKSBvZmZzZXQ7IC8qKjwgU3RhcnRpbmcgQnl0ZSBQ b3NpdGlvbiBmb3IgbWF0Y2hlZCBydWxlLiAqLyBhbmQgIHVpbnQxNl90IGxlbjsgLyoqPCBMZW5n dGggb2YgbWF0Y2ggaW4gYnl0ZXMgKi8NCiAgICAgIExvb2tzIGxpa2UgdGhlIG1hdGNoaW5nIG9m ZnNldCBpcyBkZWZpbmVkIGFzICpzdGFydGluZyBtYXRjaGluZyBvZmZzZXQqIGluc3RlYWQgb2Yg KmVuZCBtYXRjaGluZyBvZmZzZXQqLCBlLmcuIHJlcG9ydCB0aGUgb2Zmc2V0IG9mICJhIiBpbnN0 ZWFkIG9mICJjIiBmb3IgcGF0dGVybiAiYWJjIi4gDQogICAgICBJZiBzbywgdGhpcyBtYWtlcyBp dCBoYXJkIHRvIGludGVncmF0ZSBzb2Z0d2FyZSByZWdleCBsaWJyYXJpZXMgc3VjaCBhcyBIeXBl cnNjYW4gYW5kIFJFMiBhcyB0aGV5IG9ubHkgcmVwb3J0ICplbmQgbWF0Y2hpbmcgb2Zmc2V0KiB3 aXRob3V0IGxlbmd0aCBvZiBtYXRjaC4gDQogICAgICBBbHRob3VnaCBIeXBlcnNjYW4gaGFzIEFQ SSBmb3IgKnN0YXJ0aW5nIG1hdGNoaW5nIG9mZnNldCosIGl0IG9ubHkgZGVsaXZlcnMgcGFydGlh bCBzeW50YXggc3VwcG9ydC4gU28gSSB0aGluayB3ZSBoYXZlIHRvIGRlZmluZSAqZW5kIG9mIG1h dGNoaW5nIG9mZnNldCogZm9yIHNvZnR3YXJlIHNvbHV0aW9ucy4NCg0KW0plcmluXSBJIHVuZGVy c3RhbmQgdGhlIGh5cGVyc2NhbidzIEhTX0ZMQUdfU09NX0xFRlRNT1NUIHRyYWRlb2Zmcy4gSSB0 aG91Z2h0IGFwcGxpY2F0aW9uIHdvdWxkIG5lZWQgYWx3YXlzIHRoZSBsZW5ndGggb2YgdGhlIG1h dGNoLg0KUHJvYmFibHkgd2Ugd2lsbCBzZWUgaG93IG90aGVyIEhXIGltcGxlbWVudGF0aW9uIChm cm9tIE1lbGxhbm94KSBldGMuIFdlIHdpbGwgdHJ5IHRvIGFic3RyYWN0IGl0LCBwcm9iYWJseSB3 ZSBjYW4gbWFrZSBpdCBhcyBmdW5jdGlvbiBvZiAidXNlciByZXF1ZXN0ZWQiLg0KDQozKSAgcnRl X3JlZ2V4X3J1bGVfZGJfdXBkYXRlKCkNCiAgICBEb2VzIHRoaXMgbWVhbiB3ZSBjYW4gZHluYW1p Y2FsbHkgYWRkIG9yIGRlbGV0ZSBydWxlcyBmb3IgYW4gYWxyZWFkeSBnZW5lcmF0ZWQgZGF0YWJh c2Ugd2l0aG91dCByZWNvbXBpbGUgZnJvbSBzY3JhdGNoIGZvciBoYXJkd2FyZSBSZWdleCBpbXBs ZW1lbnRhdGlvbj8gDQogICAgSWYgc28sIHRoaXMgaXNuJ3QgcG9zc2libGUgZm9yIHNvZnR3YXJl IHNvbHV0aW9ucyBhcyB0aGV5IGRvbid0IHN1cHBvcnQgZHluYW1pYyBkYXRhYmFzZSB1cGRhdGUg YW5kIHJlcXVpcmUgcmVjb21waWxlLiANCg0KW0plcmluXSBydGVfcmVnZXhfcnVsZV9kYl91cGRh dGUoKSBpbnRlcm5hbGx5IGl0IHdvdWxkIGNhbGwgcmVjb21waWxlIGZ1bmN0aW9uIGZvciBib3Ro IEhXIGFuZCBTVy4NClNlZSBydGVfcmVnZXhfZGV2X2NvbmZpZzo6cnVsZV9kYiBpbiBydGVfcmVn ZXhfZGV2X2NvbmZpZ3VyZSgpIGZvciBwcmVjb21waWxlZCBydWxlIGRhdGFiYXNlIGNhc2UuDQoN CjQpIHJ0ZV9yZWdleF9ydWxlX2RiX2ltcG9ydCgpIGFuZCBydGVfcmVnZXhfcnVsZV9kYl9leHBv cnQoKQ0KICAgICBXaGF0J3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGZvciBpbXBvcnQgYW5kIGV4 cG9ydCBvcGVyYXRpb25zPyBXaWxsIHdlIGNyZWF0ZSBhbm90aGVyIGNvcHkgb2YgZGF0YWJhc2Ug d2hlbiBjYWxsaW5nIHRoZW0/IA0KDQpbSmVyaW5dIERvZXMgaXQgcmVxdWlyZSBjb3B5IG9yIG5v dCBpdCBpcyBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiBNYXJ2ZWxsJ3MgSFcgaW1wbGVtZW50YXRp b24gaGFzIGNlbnRyYWxpemVkIHJ1bGUgZGF0YWJhc2UNCnBlciBkZXZpY2UuDQoNClRoYW5rcywN ClhpYW5nDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogVGhvbWFzIE1v bmphbG9uIDx0aG9tYXNAbW9uamFsb24ubmV0Pg0KPiBTZW50OiBUaHVyc2RheSwgQXVndXN0IDE1 LCAyMDE5IDU6MDQgUE0NCj4gVG86IGRldkBkcGRrLm9yZw0KPiBDYzogSmVyaW4gSmFjb2IgS29s bGFudWtrYXJhbiA8amVyaW5qQG1hcnZlbGwuY29tPjsgUGF2YW4gTmlraGlsZXNoDQo+IEJoYWdh dmF0dWxhIDxwYmhhZ2F2YXR1bGFAbWFydmVsbC5jb20+OyBTaGFoYWYgU2h1bGVyDQo+IDxzaGFo YWZzQG1lbGxhbm94LmNvbT47IEhlbWFudCBBZ3Jhd2FsIDxoZW1hbnQuYWdyYXdhbEBueHAuY29t PjsNCj4gT3BoZXIgUmV2aXYgPG9waGVyQG1lbGxhbm94LmNvbT47IEFsZXggUm9zZW5iYXVtDQo+ IDxhbGV4ckBtZWxsYW5veC5jb20+OyBEb3ZyYXQgWmlmcm9uaSA8ZG92cmF0QG1hcnZlbGwuY29t PjsgUHJhc3VuDQo+IEthcG9vciA8cGthcG9vckBtYXJ2ZWxsLmNvbT47IE5pcHVuIEd1cHRhIDxu aXB1bi5ndXB0YUBueHAuY29tPjsNCj4gV2FuZywgWGlhbmcgVyA8eGlhbmcudy53YW5nQGludGVs LmNvbT47IFJpY2hhcmRzb24sIEJydWNlDQo+IDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47 IHlhbmcuYS5ob25nQGludGVsLmNvbTsNCj4gaGFycnkuY2hhbmdAaW50ZWwuY29tOyBndS5qaWFu MUB6dGUuY29tLmNuOyBzaGFuamlhbmdoQGNoaW5hdGVsZWNvbS5jbjsNCj4gemhhbmd5Lnl1bkBj aGluYXRlbGVjb20uY247IGxpeGluZ2Z1QGh1YWNoZW50ZWwuY29tOw0KPiB3dXNodWFpQGluc3B1 ci5jb207IHl1eWluZ3hpYUB5eGxpbmsuY29tOw0KPiBmYW5jaGVuZ2dhbmdAc3VueWFpbmZvLmNv bTsgZGF2aWRmZ2FvQHRlbmNlbnQuY29tOw0KPiBsaXV6aG9uZzFAY2hpbmF1bmljb20uY247IHpo YW95b25nMTFAaHVhd2VpLmNvbTsgb2NAeXVuaWZ5LmNvbTsNCj4gamltQG5ldGdhdGUuY29tOyBo b25nanVuLm5pQGludGVsLmNvbTsgai5icm9taGVhZEB0aXRhbi1pYy5jb207DQo+IGRlcmlAbnRv cC5vcmc7IGZjQG5hcGF0ZWNoLmNvbTsgYXJ0aHVyLnN1QGxpb25pYy5jb20NCj4gU3ViamVjdDog UmU6IFtkcGRrLWRldl0gW1JGQyBQQVRDSCB2MV0gcmVnZXhkZXY6IGludHJvZHVjZSByZWdleGRl dg0KPiBzdWJzeXN0ZW0NCj4gDQo+ICtDYyBtb3JlDQo+IA0KPiAtLS0tLS0tLS0tLS0NCj4gDQo+ IEZyb206IEplcmluIEphY29iIDxqZXJpbmpAbWFydmVsbC5jb20+DQo+IA0KPiBFdmVuIHRob3Vn aCB0aGVyZSBhcmUgc29tZSB2ZW5kb3JzIHdoaWNoIG9mZmVyIFJlZ2V4IEhXIG9mZmxvYWQsIGR1 ZSB0bw0KPiBsYWNrIG9mIHN0YW5kYXJkIEFQSSwgSXQgaXMgZGlmZmN1bHQgZm9yIERQREsgY29u c3VtZXIgdG8gdXNlIHRoZW0NCj4gaW4gYSBwb3J0YWJsZSB3YXkuDQo+IA0KPiBUaGlzIF9SRkNf IGF0dGVtcHRzIHRvIHN0YW5kYXJkaXplIHRoZSBSZWdFeC9EUEkgb2ZmbG9hZCBBUElzIGZvciBE UERLLg0KPiANCj4gVGhlIERveHlnZW4gZ2VuZXJhdGVkIFJGQyBBUEkgZG9jdW1lbnRhdGlvbiBh dmFpbGFibGUgaGVyZToNCj4gaHR0cHM6Ly9kcmVhbXktbm9ldGhlci0yMjc3N2UubmV0bGlmeS5j b20vcnRlX19yZWdleGRldl84aC5odG1sDQo+IA0KPiBUaGlzIFJGQyBjcmFmdGVkIGJhc2VkIG9u IFNXIFJlZ2V4IEFQSSBmcmFtZXdvcmtzIHN1Y2ggYXMgbGlicGNyZSBhbmQNCj4gaHlwZXJzY2Fu IGFuZCBhIGZldyBvZiB0aGUgUmVnRXggSFcgSVBzIHdoaWNoIEkgYW0gYXdhcmUgb2YuDQo+IA0K PiBSZWdFeCBwYXR0ZXJuIG1hdGNoaW5nIGFwcGxpY2F0aW9uczoNCj4g4oCiIE5leHQgR2VuZXJh dGlvbiBGaXJld2FsbHMgKE5HRlcpDQo+IOKAoiBEZWVwIFBhY2tldCBhbmQgRmxvdyBJbnNwZWN0 aW9uIChEUEkpDQo+IOKAoiBJbnRydXNpb24gUHJldmVudGlvbiBTeXN0ZW1zIChJUFMpDQo+IOKA oiBERG9TIE1pdGlnYXRpb24NCj4g4oCiIE5ldHdvcmsgTW9uaXRvcmluZw0KPiDigKIgRGF0YSBM b3NzIFByZXZlbnRpb24gKERMUCkNCj4g4oCiIFNtYXJ0IE5JQ3MNCj4g4oCiIEdyYW1tYXIgYmFz ZWQgY29udGVudCBwcm9jZXNzaW5nDQo+IOKAoiBVUkwsIHNwYW0gYW5kIGFkd2FyZSBmaWx0ZXJp bmcNCj4g4oCiIEFkdmFuY2VkIGF1ZGl0aW5nIGFuZCBwb2xpY2luZyBvZiB1c2VyL2FwcGxpY2F0 aW9uIHNlY3VyaXR5IHBvbGljaWVzDQo+IOKAoiBGaW5hbmNpYWwgZGF0YSBtaW5pbmcgLSBwYXJz aW5nIG9mIHN0cmVhbWVkIGZpbmFuY2lhbCBmZWVkcw0KPiANCj4gUmVxdWVzdCB0byByZXZpZXcg ZnJvbSBIVyBhbmQgU1cgUmVnRXggdmVuZG9ycyBhbmQgUmVnRXggYXBwbGljYXRpb24NCj4gdXNl cnMNCj4gdG8gaGF2ZSBwb3J0YWJsZSBEUERLIEFQSSBmb3IgUmVnRXguDQo+IA0KPiBUaGUgQVBJ IHNjaGVtYXRpY3MgYXJlIGJhc2VkIGNyeXB0b2RldiwgZXZlbnRkZXYgYW5kIGV0aGRldiBleGlz dGluZw0KPiBkZXZpY2UgQVBJLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogSmVyaW4gSmFjb2IgPGpl cmluakBtYXJ2ZWxsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogUGF2YW4gTmlraGlsZXNoIDxwYmhh Z2F2YXR1bGFAbWFydmVsbC5jb20+DQo+IC0tLQ0KPiANCj4gUlRFIFJlZ0V4IERldmljZSBBUEkN Cj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gDQo+IERlZmluZXMgUlRFIFJlZ0V4IERldmljZSBB UElzIGZvciBSZWdFeCBvcGVyYXRpb25zIGFuZCBpdHMgcHJvdmlzaW9uaW5nLg0KPiANCj4gVGhl IFJlZ0V4IERldmljZSBBUEkgaXMgY29tcG9zZWQgb2YgdHdvIHBhcnRzOg0KPiANCj4gLSBUaGUg YXBwbGljYXRpb24tb3JpZW50ZWQgUmVnRXggQVBJIHRoYXQgaW5jbHVkZXMgZnVuY3Rpb25zIHRv IHNldHVwDQo+IGEgUmVnRXggZGV2aWNlIChjb25maWd1cmUgaXQsIHNldHVwIGl0cyBxdWV1ZSBw YWlycyBhbmQgc3RhcnQgaXQpLA0KPiB1cGRhdGUgdGhlIHJ1bGUgZGF0YWJhc2UgYW5kIHNvIG9u Lg0KPiANCj4gLSBUaGUgZHJpdmVyLW9yaWVudGVkIFJlZ0V4IEFQSSB0aGF0IGV4cG9ydHMgYSBm dW5jdGlvbiBhbGxvd2luZw0KPiBhIFJlZ0V4IHBvbGwgTW9kZSBEcml2ZXIgKFBNRCkgdG8gc2lt dWx0YW5lb3VzbHkgcmVnaXN0ZXIgaXRzZWxmIGFzDQo+IGEgUmVnRXggZGV2aWNlIGRyaXZlci4N Cj4gDQo+IFJlZ0V4IGRldmljZSBjb21wb25lbnRzIGFuZCBkZWZpbml0aW9uczoNCj4gDQo+ICAg ICArLS0tLS0tLS0tLS0tLS0tLS0rDQo+ICAgICB8ICAgICAgICAgICAgICAgICB8DQo+ICAgICB8 ICAgICAgICAgICAgICAgICBvLS0tLS0tLS0tKyAgICBydGVfcmVnZXhfW2VufGRlXXF1ZXVlX2J1 cnN0KCkNCj4gICAgIHwgICBQQ1JFIGJhc2VkICAgIG8tLS0tLS0rICB8ICAgICAgICAgICAgICAg fA0KPiAgICAgfCAgUmVnRXggcGF0dGVybiAgfCAgICAgIHwgIHwgICstLS0tLS0tLSsgICB8DQo+ ICAgICB8IG1hdGNoaW5nIGVuZ2luZSBvLS0tLS0tKy0tKy0tbyAgICAgICAgfCAgIHwgICAgKy0t LS0tLSsNCj4gICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICB8ICB8ICB8IHF1ZXVlICB8PD09 bz09PT58Q29yZSAwfA0KPiAgICAgfCAgICAgICAgICAgICAgICAgby0tLS0rIHwgIHwgIHwgcGFp ciAwIHwgICAgICAgIHwgICAgICB8DQo+ICAgICB8ICAgICAgICAgICAgICAgICB8ICAgIHwgfCAg fCAgKy0tLS0tLS0tKyAgICAgICAgKy0tLS0tLSsNCj4gICAgICstLS0tLS0tLS0tLS0tLS0tLSsg ICAgfCB8ICB8DQo+ICAgICAgICAgICAgXiAgICAgICAgICAgICAgIHwgfCAgfCAgKy0tLS0tLS0t Kw0KPiAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8IHwgIHwgIHwgICAgICAgIHwgICAgICAg ICstLS0tLS0rDQo+ICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgKy0tKy0tbyBxdWV1ZSAg fDw9PT09PT0+fENvcmUgMXwNCj4gICAgICAgIFJ1bGV8RGF0YWJhc2UgICAgICAgfCAgICB8ICB8 IHBhaXIgMSB8ICAgICAgICB8ICAgICAgfA0KPiAgICAgKy0tLS0tLSstLS0tLS0tLS0tKyAgICB8 ICAgIHwgICstLS0tLS0tLSsgICAgICAgICstLS0tLS0rDQo+ICAgICB8ICAgICBHcm91cCAwICAg ICB8ICAgIHwgICAgfA0KPiAgICAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICB8ICAgIHwgICstLS0t LS0tLSsgICAgICAgICstLS0tLS0rDQo+ICAgICB8IHwgUnVsZXMgMC4ubiAgfCB8ICAgIHwgICAg fCAgfCAgICAgICAgfCAgICAgICAgfENvcmUgMnwNCj4gICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwg ICAgfCAgICArLS1vIHF1ZXVlICB8PD09PT09PT58ICAgICAgfA0KPiAgICAgfCAgICAgR3JvdXAg MSAgICAgfCAgICB8ICAgICAgIHwgcGFpciAyIHwgICAgICAgICstLS0tLS0rDQo+ICAgICB8ICst LS0tLS0tLS0tLS0tKyB8ICAgIHwgICAgICAgKy0tLS0tLS0tKw0KPiAgICAgfCB8IFJ1bGVzIDAu Lm4gIHwgfCAgICB8DQo+ICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgIHwgICAgICAgKy0tLS0t LS0tKw0KPiAgICAgfCAgICAgR3JvdXAgMiAgICAgfCAgICB8ICAgICAgIHwgICAgICAgIHwgICAg ICAgICstLS0tLS0rDQo+ICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgIHwgICAgICAgfCBxdWV1 ZSAgfDw9PT09PT0+fENvcmUgbnwNCj4gICAgIHwgfCBSdWxlcyAwLi5uICB8IHwgICAgKy0tLS0t LS1vIHBhaXIgbiB8ICAgICAgICB8ICAgICAgfA0KPiAgICAgfCArLS0tLS0tLS0tLS0tLSsgfCAg ICAgICAgICAgICstLS0tLS0tLSsgICAgICAgICstLS0tLS0rDQo+ICAgICB8ICAgICBHcm91cCBu ICAgICB8DQo+ICAgICB8ICstLS0tLS0tLS0tLS0tKyB8PC0tLS0tLS1ydGVfcmVnZXhfcnVsZV9k Yl91cGRhdGUoKQ0KPiAgICAgfCB8IFJ1bGVzIDAuLm4gIHwgfDwtLS0tLS0tcnRlX3JlZ2V4X3J1 bGVfZGJfaW1wb3J0KCkNCj4gICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwtLS0tLS0tPnJ0ZV9yZWdl eF9ydWxlX2RiX2V4cG9ydCgpDQo+ICAgICArLS0tLS0tLS0tLS0tLS0tLS0rDQo+IA0KPiBSZWdF eDogQSByZWd1bGFyIGV4cHJlc3Npb24gaXMgYSBjb25jaXNlIGFuZCBmbGV4aWJsZSBtZWFucyBm b3IgbWF0Y2hpbmcNCj4gc3RyaW5ncyBvZiB0ZXh0LCBzdWNoIGFzIHBhcnRpY3VsYXIgY2hhcmFj dGVycywgd29yZHMsIG9yIHBhdHRlcm5zIG9mDQo+IGNoYXJhY3RlcnMuIEEgY29tbW9uIGFiYnJl dmlhdGlvbiBmb3IgdGhpcyBpcyDigJxSZWdFeOKAnS4NCj4gDQo+IFJlZ0V4IGRldmljZTogQSBo YXJkd2FyZSBvciBzb2Z0d2FyZS1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBSZWdFeA0KPiBkZXZp Y2UgQVBJIGZvciBQQ1JFIGJhc2VkIHBhdHRlcm4gbWF0Y2hpbmcgc3ludGF4IGFuZCBzZW1hbnRp Y3MuDQo+IA0KPiBQQ1JFIFJlZ0V4IHN5bnRheCBhbmQgc2VtYW50aWNzIHNwZWNpZmljYXRpb246 DQo+IGh0dHA6Ly9yZWdleGtpdC5zb3VyY2Vmb3JnZS5uZXQvRG9jdW1lbnRhdGlvbi9wY3JlL3Bj cmVwYXR0ZXJuLmh0bWwNCj4gDQo+IFJlZ0V4IHF1ZXVlIHBhaXI6IEVhY2ggUmVnRXggZGV2aWNl IHNob3VsZCBoYXZlIG9uZSBvciBtb3JlIHF1ZXVlIHBhaXIgdG8NCj4gdHJhbnNtaXQgYSBidXJz dCBvZiBwYXR0ZXJuIG1hdGNoaW5nIHJlcXVlc3QgYW5kIHJlY2VpdmUgYSBidXJzdCBvZg0KPiBy ZWNlaXZlIHRoZSBwYXR0ZXJuIG1hdGNoaW5nIHJlc3BvbnNlLiBUaGUgcGF0dGVybiBtYXRjaGlu Zw0KPiByZXF1ZXN0L3Jlc3BvbnNlDQo+IGVtYmVkZGVkIGluICpydGVfcmVnZXhfb3BzKiBzdHJ1 Y3R1cmUuDQo+IA0KPiBSdWxlOiBBIHBhdHRlcm4gbWF0Y2hpbmcgcnVsZSBleHByZXNzZWQgaW4g UENSRSBSZWdFeCBzeW50YXggYWxvbmcgd2l0aA0KPiBNYXRjaCBJRCBhbmQgR3JvdXAgSUQgdG8g aWRlbnRpZnkgdGhlIHJ1bGUgdXBvbiB0aGUgbWF0Y2guDQo+IA0KPiBSdWxlIGRhdGFiYXNlOiBU aGUgUmVnRXggZGV2aWNlIGFjY2VwdHMgcmVndWxhciBleHByZXNzaW9ucyBhbmQgY29udmVydHMN Cj4gdGhlbQ0KPiBpbnRvIGEgY29tcGlsZWQgcnVsZSBkYXRhYmFzZSB0aGF0IGNhbiB0aGVuIGJl IHVzZWQgdG8gc2NhbiBkYXRhLg0KPiBDb21waWxhdGlvbiBhbGxvd3MgdGhlIGRldmljZSB0byBh bmFseXplIHRoZSBnaXZlbiBwYXR0ZXJuKHMpIGFuZA0KPiBwcmUtZGV0ZXJtaW5lIGhvdyB0byBz Y2FuIGZvciB0aGVzZSBwYXR0ZXJucyBpbiBhbiBvcHRpbWl6ZWQgZmFzaGlvbiB0aGF0DQo+IHdv dWxkIGJlIGZhciB0b28gZXhwZW5zaXZlIHRvIGNvbXB1dGUgYXQgcnVuLXRpbWUuIEEgcnVsZSBk YXRhYmFzZSBjb250YWlucw0KPiBhIHNldCBvZiBydWxlcyB0aGF0IGNvbXBpbGVkIGluIGRldmlj ZSBzcGVjaWZpYyBiaW5hcnkgZm9ybS4NCj4gDQo+IE1hdGNoIElEIG9yIFJ1bGUgSUQ6IEEgdW5p cXVlIGlkZW50aWZpZXIgcHJvdmlkZWQgYXQgdGhlIHRpbWUgb2YgcnVsZQ0KPiBjcmVhdGlvbiBm b3IgdGhlIGFwcGxpY2F0aW9uIHRvIGlkZW50aWZ5IHRoZSBydWxlIHVwb24gbWF0Y2guDQo+IA0K PiBHcm91cCBJRDogR3JvdXAgb2YgcnVsZXMgY2FuIGJlIGdyb3VwZWQgdW5kZXIgb25lIGdyb3Vw IElEIHRvIGVuYWJsZQ0KPiBydWxlIGlzb2xhdGlvbiBhbmQgZWZmZWN0aXZlIHBhdHRlcm4gbWF0 Y2hpbmcuIEEgdW5pcXVlIGdyb3VwIGlkZW50aWZpZXINCj4gcHJvdmlkZWQgYXQgdGhlIHRpbWUg b2YgcnVsZSBjcmVhdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGlkZW50aWZ5IHRoZQ0KPiBy dWxlIHVwb24gbWF0Y2guDQo+IA0KPiBTY2FuOiBBIHBhdHRlcm4gbWF0Y2hpbmcgcmVxdWVzdCB0 aHJvdWdoICplbnF1ZXVlKiBBUEkuDQo+IA0KPiBJdCBtYXkgcG9zc2libGUgdGhhdCBhIGdpdmVu IFJlZ0V4IGRldmljZSBtYXkgbm90IHN1cHBvcnQgYWxsIHRoZSBmZWF0dXJlcw0KPiBvZiBQQ1JF LiBUaGUgYXBwbGljYXRpb24gbWF5IHByb2JlIHVuc3VwcG9ydGVkIGZlYXR1cmVzIHRocm91Z2gN Cj4gc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KPiANCj4gQnkg ZGVmYXVsdCwgYWxsIHRoZSBmdW5jdGlvbnMgb2YgdGhlIFJlZ0V4IERldmljZSBBUEkgZXhwb3J0 ZWQgYnkgYSBQTUQNCj4gYXJlIGxvY2stZnJlZSBmdW5jdGlvbnMgd2hpY2ggYXNzdW1lIHRvIG5v dCBiZSBpbnZva2VkIGluIHBhcmFsbGVsIG9uDQo+IGRpZmZlcmVudCBsb2dpY2FsIGNvcmVzIHRv IHdvcmsgb24gdGhlIHNhbWUgdGFyZ2V0IG9iamVjdC4gRm9yIGluc3RhbmNlLA0KPiB0aGUgZGVx dWV1ZSBmdW5jdGlvbiBvZiBhIFBNRCBjYW5ub3QgYmUgaW52b2tlZCBpbiBwYXJhbGxlbCBvbiB0 d28gbG9naWNhbA0KPiBjb3JlcyB0byBvcGVyYXRlcyBvbiBzYW1lIFJlZ0V4IHF1ZXVlIHBhaXIu IE9mIGNvdXJzZSwgdGhpcyBmdW5jdGlvbg0KPiBjYW4gYmUgaW52b2tlZCBpbiBwYXJhbGxlbCBi eSBkaWZmZXJlbnQgbG9naWNhbCBjb3JlIG9uIGRpZmZlcmVudCBxdWV1ZSBwYWlyLg0KPiBJdCBp cyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHVwcGVyIGxldmVsIGFwcGxpY2F0aW9uIHRvIGVu Zm9yY2UgdGhpcyBydWxlLg0KPiANCj4gSW4gYWxsIGZ1bmN0aW9ucyBvZiB0aGUgUmVnRXggQVBJ LCB0aGUgUmVnRXggZGV2aWNlIGlzDQo+IGRlc2lnbmF0ZWQgYnkgYW4gaW50ZWdlciA+PSAwIG5h bWVkIHRoZSBkZXZpY2UgaWRlbnRpZmllciAqZGV2X2lkKg0KPiANCj4gQXQgdGhlIFJlZ0V4IGRy aXZlciBsZXZlbCwgUmVnRXggZGV2aWNlcyBhcmUgcmVwcmVzZW50ZWQgYnkgYSBnZW5lcmljDQo+ IGRhdGEgc3RydWN0dXJlIG9mIHR5cGUgKnJ0ZV9yZWdleF9kZXYqLg0KPiANCj4gUmVnRXggZGV2 aWNlcyBhcmUgZHluYW1pY2FsbHkgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIFBDSS9Tb0MgZGV2aWNl IHByb2JpbmcNCj4gcGhhc2UgcGVyZm9ybWVkIGF0IEVBTCBpbml0aWFsaXphdGlvbiB0aW1lLg0K PiBXaGVuIGEgUmVnRXggZGV2aWNlIGlzIGJlaW5nIHByb2JlZCwgYSAqcnRlX3JlZ2V4X2Rldiog c3RydWN0dXJlIGFuZA0KPiBhIG5ldyBkZXZpY2UgaWRlbnRpZmllciBhcmUgYWxsb2NhdGVkIGZv ciB0aGF0IGRldmljZS4gVGhlbiwgdGhlDQo+IHJlZ2V4X2Rldl9pbml0KCkgZnVuY3Rpb24gc3Vw cGxpZWQgYnkgdGhlIFJlZ0V4IGRyaXZlciBtYXRjaGluZyB0aGUgcHJvYmVkDQo+IGRldmljZSBp cyBpbnZva2VkIHRvIHByb3Blcmx5IGluaXRpYWxpemUgdGhlIGRldmljZS4NCj4gDQo+IFRoZSBy b2xlIG9mIHRoZSBkZXZpY2UgaW5pdCBmdW5jdGlvbiBjb25zaXN0cyBvZiByZXNldHRpbmcgdGhl IGhhcmR3YXJlIG9yDQo+IHNvZnR3YXJlIFJlZ0V4IGRyaXZlciBpbXBsZW1lbnRhdGlvbnMuDQo+ IA0KPiBJZiB0aGUgZGV2aWNlIGluaXQgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoZSBjb3Jy ZXNwb25kZW5jZSBiZXR3ZWVuDQo+IHRoZSBkZXZpY2UgaWRlbnRpZmllciBhc3NpZ25lZCB0byB0 aGUgbmV3IGRldmljZSBhbmQgaXRzIGFzc29jaWF0ZWQNCj4gKnJ0ZV9yZWdleF9kZXYqIHN0cnVj dHVyZSBpcyBlZmZlY3RpdmVseSByZWdpc3RlcmVkLg0KPiBPdGhlcndpc2UsIGJvdGggdGhlICpy dGVfcmVnZXhfZGV2KiBzdHJ1Y3R1cmUgYW5kIHRoZSBkZXZpY2UgaWRlbnRpZmllciBhcmUNCj4g ZnJlZWQuDQo+IA0KPiBUaGUgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBS ZWdFeCBBUEkgdG8gc2V0dXAgYSBkZXZpY2UNCj4gZGVzaWduYXRlZCBieSBpdHMgZGV2aWNlIGlk ZW50aWZpZXIgbXVzdCBiZSBpbnZva2VkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6DQo+IC0gcnRl X3JlZ2V4X2Rldl9jb25maWd1cmUoKQ0KPiAtIHJ0ZV9yZWdleF9xdWV1ZV9wYWlyX3NldHVwKCkN Cj4gLSBydGVfcmVnZXhfZGV2X3N0YXJ0KCkNCj4gDQo+IFRoZW4sIHRoZSBhcHBsaWNhdGlvbiBj YW4gaW52b2tlLCBpbiBhbnkgb3JkZXIsIHRoZSBmdW5jdGlvbnMNCj4gZXhwb3J0ZWQgYnkgdGhl IFJlZ0V4IEFQSSB0byBlbnF1ZXVlIHBhdHRlcm4gbWF0Y2hpbmcgam9iLCBkZXF1ZXVlDQo+IHBh dHRlcm4NCj4gbWF0Y2hpbmcgcmVzcG9uc2UsIGdldCB0aGUgc3RhdHMsIHVwZGF0ZSB0aGUgcnVs ZSBkYXRhYmFzZSwNCj4gZ2V0L3NldCBkZXZpY2UgYXR0cmlidXRlcyBhbmQgc28gb24NCj4gDQo+ IElmIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gKGku ZS4gY2FsbA0KPiBydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgpIG9yIHJ0ZV9yZWdleF9xdWV1ZV9w YWlyX3NldHVwKCkpLCBpdCBtdXN0IGNhbGwNCj4gcnRlX3JlZ2V4X2Rldl9zdG9wKCkgZmlyc3Qg dG8gc3RvcCB0aGUgZGV2aWNlIGFuZCB0aGVuIGRvIHRoZQ0KPiByZWNvbmZpZ3VyYXRpb24NCj4g YmVmb3JlIGNhbGxpbmcgcnRlX3JlZ2V4X2Rldl9zdGFydCgpIGFnYWluLiBUaGUgZW5xdWV1ZSBh bmQgZGVxdWV1ZQ0KPiBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIHdoZW4gdGhlIGRl dmljZSBpcyBzdG9wcGVkLg0KPiANCj4gRmluYWxseSwgYW4gYXBwbGljYXRpb24gY2FuIGNsb3Nl IGEgUmVnRXggZGV2aWNlIGJ5IGludm9raW5nIHRoZQ0KPiBydGVfcmVnZXhfZGV2X2Nsb3NlKCkg ZnVuY3Rpb24uDQo+IA0KPiBFYWNoIGZ1bmN0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbiBSZWdFeCBB UEkgaW52b2tlcyBhIHNwZWNpZmljIGZ1bmN0aW9uDQo+IG9mIHRoZSBQTUQgdGhhdCBjb250cm9s cyB0aGUgdGFyZ2V0IGRldmljZSBkZXNpZ25hdGVkIGJ5IGl0cyBkZXZpY2UNCj4gaWRlbnRpZmll ci4NCj4gDQo+IEZvciB0aGlzIHB1cnBvc2UsIGFsbCBkZXZpY2Utc3BlY2lmaWMgZnVuY3Rpb25z IG9mIGEgUmVnRXggZHJpdmVyIGFyZQ0KPiBzdXBwbGllZCB0aHJvdWdoIGEgc2V0IG9mIHBvaW50 ZXJzIGNvbnRhaW5lZCBpbiBhIGdlbmVyaWMgc3RydWN0dXJlIG9mIHR5cGUNCj4gKnJlZ2V4X2Rl dl9vcHMqLg0KPiBUaGUgYWRkcmVzcyBvZiB0aGUgKnJlZ2V4X2Rldl9vcHMqIHN0cnVjdHVyZSBp cyBzdG9yZWQgaW4gdGhlDQo+ICpydGVfcmVnZXhfZGV2Kg0KPiBzdHJ1Y3R1cmUgYnkgdGhlIGRl dmljZSBpbml0IGZ1bmN0aW9uIG9mIHRoZSBSZWdFeCBkcml2ZXIsIHdoaWNoIGlzDQo+IGludm9r ZWQgZHVyaW5nIHRoZSBQQ0kvU29DIGRldmljZSBwcm9iaW5nIHBoYXNlLCBhcyBleHBsYWluZWQg ZWFybGllci4NCj4gDQo+IEluIG90aGVyIHdvcmRzLCBlYWNoIGZ1bmN0aW9uIG9mIHRoZSBSZWdF eCBBUEkgc2ltcGx5IHJldHJpZXZlcyB0aGUNCj4gKnJ0ZV9yZWdleF9kZXYqIHN0cnVjdHVyZSBh c3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSBpZGVudGlmaWVyIGFuZA0KPiBwZXJmb3JtcyBhbiBp bmRpcmVjdCBpbnZvY2F0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBmdW5jdGlvbg0K PiBzdXBwbGllZCBpbiB0aGUgKnJlZ2V4X2Rldl9vcHMqIHN0cnVjdHVyZSBvZiB0aGUgKnJ0ZV9y ZWdleF9kZXYqDQo+IHN0cnVjdHVyZS4NCj4gDQo+IEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0 aGUgYWRkcmVzcyBvZiB0aGUgZmFzdC1wYXRoIGZ1bmN0aW9ucyBvZiB0aGUNCj4gUmVnRXggZHJp dmVyIGlzIG5vdCBjb250YWluZWQgaW4gdGhlICpyZWdleF9kZXZfb3BzKiBzdHJ1Y3R1cmUuDQo+ IEluc3RlYWQsIHRoZXkgYXJlIGRpcmVjdGx5IHN0b3JlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo ZSAqcnRlX3JlZ2V4X2RldioNCj4gc3RydWN0dXJlIHRvIGF2b2lkIGFuIGV4dHJhIGluZGlyZWN0 IG1lbW9yeSBhY2Nlc3MgZHVyaW5nIHRoZWlyIGludm9jYXRpb24uDQo+IA0KPiBSVEUgUmVnRXgg ZGV2aWNlIGRyaXZlcnMgZG8gbm90IHVzZSBpbnRlcnJ1cHRzIGZvciBlbnF1ZXVlIG9yIGRlcXVl dWUNCj4gb3BlcmF0aW9uLiBJbnN0ZWFkLCBSZWdFeCBkcml2ZXJzIGV4cG9ydCBQb2xsLU1vZGUg ZW5xdWV1ZSBhbmQgZGVxdWV1ZQ0KPiBmdW5jdGlvbnMgdG8gYXBwbGljYXRpb25zLg0KPiANCj4g VGhlICplbnF1ZXVlKiBvcGVyYXRpb24gc3VibWl0cyBhIGJ1cnN0IG9mIFJlZ0V4IHBhdHRlcm4g bWF0Y2hpbmcNCj4gcmVxdWVzdA0KPiB0byB0aGUgUmVnRXggZGV2aWNlIGFuZCB0aGUgKmRlcXVl dWUqIG9wZXJhdGlvbiBnZXRzIGEgYnVyc3Qgb2YgcGF0dGVybg0KPiBtYXRjaGluZyByZXNwb25z ZSBmb3IgdGhlIG9uZXMgc3VibWl0dGVkIHRocm91Z2ggKmVucXVldWUqIG9wZXJhdGlvbi4NCj4g DQo+IFR5cGljYWwgYXBwbGljYXRpb24gdXRpbGlzYXRpb24gb2YgdGhlIFJlZ0V4IGRldmljZSBB UEkgd2lsbCBmb2xsb3cgdGhlDQo+IGZvbGxvd2luZyBwcm9ncmFtbWluZyBmbG93Lg0KPiANCj4g LSBydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgpDQo+IC0gcnRlX3JlZ2V4X3F1ZXVlX3BhaXJfc2V0 dXAoKQ0KPiAtIHJ0ZV9yZWdleF9ydWxlX2RiX3VwZGF0ZSgpIE5lZWRzIHRvIGludm9rZSBpZiBw cmVjb21waWxlZCBydWxlIGRhdGFiYXNlDQo+IG5vdA0KPiBwcm92aWRlZCBpbiBydGVfcmVnZXhf ZGV2X2NvbmZpZzo6cnVsZV9kYiBmb3IgcnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKQ0KPiBhbmQv b3IgYXBwbGljYXRpb24gbmVlZHMgdG8gdXBkYXRlIHJ1bGUgZGF0YWJhc2UuDQo+IC0gQ3JlYXRl IG9yIHJldXNlIGV4aXRpbmcgbWVtcG9vbCBmb3IgKnJ0ZV9yZWdleF9vcHMqIG9iamVjdHMuDQo+ IC0gcnRlX3JlZ2V4X2Rldl9zdGFydCgpDQo+IC0gcnRlX3JlZ2V4X2VucXVldWVfYnVyc3QoKQ0K PiAtIHJ0ZV9yZWdleF9kZXF1ZXVlX2J1cnN0KCkNCj4gDQo+IC0tLQ0KPiANCj4gY29uZmlnL2Nv bW1vbl9iYXNlICAgICAgICAgICAgICAgICB8ICAgIDUgKw0KPiBkb2MvYXBpL2RveHktYXBpLWlu ZGV4Lm1kICAgICAgICAgIHwgICAgMSArDQo+IGRvYy9hcGkvZG94eS1hcGkuY29uZi5pbiAgICAg ICAgICAgfCAgICAxICsNCj4gbGliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAg IDIgKw0KPiBsaWIvbGlicnRlX3JlZ2V4ZGV2L01ha2VmaWxlICAgICAgIHwgICAyMyArDQo+IGxp Yi9saWJydGVfcmVnZXhkZXYvcnRlX3JlZ2V4ZGV2LmMgfCAgICA1ICsNCj4gbGliL2xpYnJ0ZV9y ZWdleGRldi9ydGVfcmVnZXhkZXYuaCB8IDEyNDcNCj4gKysrKysrKysrKysrKysrKysrKysrKysr KysrKw0KPiA3IGZpbGVzIGNoYW5nZWQsIDEyODQgaW5zZXJ0aW9ucygrKQ0KPiBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliL2xpYnJ0ZV9yZWdleGRldi9NYWtlZmlsZQ0KPiBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliL2xpYnJ0ZV9yZWdleGRldi9ydGVfcmVnZXhkZXYuYw0KPiBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliL2xpYnJ0ZV9yZWdleGRldi9ydGVfcmVnZXhkZXYuaA0KPiANCj4gZGlmZiAtLWdpdCBh L2NvbmZpZy9jb21tb25fYmFzZSBiL2NvbmZpZy9jb21tb25fYmFzZQ0KPiBpbmRleCBlNDA2ZTc4 MzYuLjk4NjA5M2Q2ZSAxMDA2NDQNCj4gLS0tIGEvY29uZmlnL2NvbW1vbl9iYXNlDQo+ICsrKyBi L2NvbmZpZy9jb21tb25fYmFzZQ0KPiBAQCAtNzQ2LDYgKzc0NiwxMSBAQA0KPiBDT05GSUdfUlRF X0xJQlJURV9QTURfRFBBQTJfUURNQV9SQVdERVY9bg0KPiAjDQo+IENPTkZJR19SVEVfTElCUlRF X1BNRF9JRlBHQV9SQVdERVY9eQ0KPiANCj4gKyMNCj4gKyMgQ29tcGlsZSByZWdleCBkZXZpY2Ug c3VwcG9ydA0KPiArIw0KPiArQ09ORklHX1JURV9MSUJSVEVfUkVHRVhERVY9eQ0KPiArDQo+ICMN Cj4gIyBDb21waWxlIGxpYnJ0ZV9yaW5nDQo+ICMNCj4gZGlmZiAtLWdpdCBhL2RvYy9hcGkvZG94 eS1hcGktaW5kZXgubWQgYi9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kDQo+IGluZGV4IDcxNTI0 OGRkMS4uYTBiYzI3YWU0IDEwMDY0NA0KPiAtLS0gYS9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1k DQo+ICsrKyBiL2RvYy9hcGkvZG94eS1hcGktaW5kZXgubWQNCj4gQEAgLTI2LDYgKzI2LDcgQEAg VGhlIHB1YmxpYyBBUEkgaGVhZGVycyBhcmUgZ3JvdXBlZCBieSB0b3BpY3M6DQo+IFtldmVudF90 aW1lcl9hZGFwdGVyXSAgICAoQHJlZiBydGVfZXZlbnRfdGltZXJfYWRhcHRlci5oKSwNCj4gW2V2 ZW50X2NyeXB0b19hZGFwdGVyXSAgIChAcmVmIHJ0ZV9ldmVudF9jcnlwdG9fYWRhcHRlci5oKSwN Cj4gW3Jhd2Rldl0gICAgICAgICAgICAgKEByZWYgcnRlX3Jhd2Rldi5oKSwNCj4gKyAgW3JlZ2V4 ZGV2XSAgICAgICAgICAgKEByZWYgcnRlX3JlZ2V4ZGV2LmgpLA0KPiBbbWV0cmljc10gICAgICAg ICAgICAoQHJlZiBydGVfbWV0cmljcy5oKSwNCj4gW2JpdHJhdGVdICAgICAgICAgICAgKEByZWYg cnRlX2JpdHJhdGUuaCksDQo+IFtsYXRlbmN5XSAgICAgICAgICAgIChAcmVmIHJ0ZV9sYXRlbmN5 c3RhdHMuaCksDQo+IGRpZmYgLS1naXQgYS9kb2MvYXBpL2RveHktYXBpLmNvbmYuaW4gYi9kb2Mv YXBpL2RveHktYXBpLmNvbmYuaW4NCj4gaW5kZXggYjk4OTZjYjYzLi43YWRiODIxYmIgMTAwNjQ0 DQo+IC0tLSBhL2RvYy9hcGkvZG94eS1hcGkuY29uZi5pbg0KPiArKysgYi9kb2MvYXBpL2RveHkt YXBpLmNvbmYuaW4NCj4gQEAgLTUzLDYgKzUzLDcgQEAgSU5QVVQgICAgICAgICAgICAgICAgICAg PSBAVE9QRElSQC9kb2MvYXBpL2RveHktYXBpLQ0KPiBpbmRleC5tZCBcDQo+IEBUT1BESVJAL2xp Yi9saWJydGVfcmF3ZGV2IFwNCj4gQFRPUERJUkAvbGliL2xpYnJ0ZV9yY3UgXA0KPiBAVE9QRElS QC9saWIvbGlicnRlX3Jlb3JkZXIgXA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBAVE9Q RElSQC9saWIvbGlicnRlX3JlZ2V4ZGV2IFwNCj4gQFRPUERJUkAvbGliL2xpYnJ0ZV9yaW5nIFwN Cj4gQFRPUERJUkAvbGliL2xpYnJ0ZV9zY2hlZCBcDQo+IEBUT1BESVJAL2xpYi9saWJydGVfc2Vj dXJpdHkgXA0KPiBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlDQo+IGlu ZGV4IDc5MWUwZDk5MS4uNTdkZTk2OTFhIDEwMDY0NA0KPiAtLS0gYS9saWIvTWFrZWZpbGUNCj4g KysrIGIvbGliL01ha2VmaWxlDQo+IEBAIC00NCw2ICs0NCw4IEBAIERFUERJUlMtbGlicnRlX2V2 ZW50ZGV2IDo9IGxpYnJ0ZV9lYWwgbGlicnRlX3JpbmcNCj4gbGlicnRlX2V0aGRldiBsaWJydGVf aGFzaCBcDQo+IGxpYnJ0ZV9tZW1wb29sIGxpYnJ0ZV90aW1lciBsaWJydGVfY3J5cHRvZGV2DQo+ IERJUlMtJChDT05GSUdfUlRFX0xJQlJURV9SQVdERVYpICs9IGxpYnJ0ZV9yYXdkZXYNCj4gREVQ RElSUy1saWJydGVfcmF3ZGV2IDo9IGxpYnJ0ZV9lYWwgbGlicnRlX2V0aGRldg0KPiArRElSUy0k KENPTkZJR19SVEVfTElCUlRFX1JFR0VYREVWKSArPSBsaWJydGVfcmVnZXhkZXYNCj4gK0RFUERJ UlMtbGlicnRlX3JlZ2V4ZGV2IDo9IGxpYnJ0ZV9lYWwNCj4gRElSUy0kKENPTkZJR19SVEVfTElC UlRFX1ZIT1NUKSArPSBsaWJydGVfdmhvc3QNCj4gREVQRElSUy1saWJydGVfdmhvc3QgOj0gbGli cnRlX2VhbCBsaWJydGVfbWVtcG9vbCBsaWJydGVfbWJ1Zg0KPiBsaWJydGVfZXRoZGV2IFwNCj4g CQkJbGlicnRlX25ldA0KPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yZWdleGRldi9NYWtlZmls ZSBiL2xpYi9saWJydGVfcmVnZXhkZXYvTWFrZWZpbGUNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gaW5kZXggMDAwMDAwMDAwLi43MjNiNGIyOGMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9s aWIvbGlicnRlX3JlZ2V4ZGV2L01ha2VmaWxlDQo+IEBAIC0wLDAgKzEsMjMgQEANCj4gKyMgU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiArIyBDb3B5cmlnaHQoQykgMjAx OSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KPiArIw0KPiArDQo+ICtpbmNsdWRlICQoUlRF X1NESykvbWsvcnRlLnZhcnMubWsNCj4gKw0KPiArIyBsaWJyYXJ5IG5hbWUNCj4gK0xJQiA9IGxp YnJ0ZV9yZWdleGRldi5hDQo+ICsNCj4gKyMgbGlicmFyeSB2ZXJzaW9uDQo+ICtMSUJBQklWRVIg Oj0gMQ0KPiArDQo+ICsjIGJ1aWxkIGZsYWdzDQo+ICtDRkxBR1MgKz0gLU8zDQo+ICtDRkxBR1Mg Kz0gJChXRVJST1JfRkxBR1MpDQo+ICsNCj4gKyMgbGlicmFyeSBzb3VyY2UgZmlsZXMNCj4gK1NS Q1MteSArPSBydGVfcmVnZXhkZXYuYw0KPiArDQo+ICsjIGV4cG9ydCBpbmNsdWRlIGZpbGVzDQo+ ICtTWU1MSU5LLXktaW5jbHVkZSArPSBydGVfcmVnZXhkZXYuaA0KPiArDQo+ICtpbmNsdWRlICQo UlRFX1NESykvbWsvcnRlLmxpYi5taw0KPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yZWdleGRl di9ydGVfcmVnZXhkZXYuYw0KPiBiL2xpYi9saWJydGVfcmVnZXhkZXYvcnRlX3JlZ2V4ZGV2LmMN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwLi5lNWJlMGYyOWMNCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9saWIvbGlicnRlX3JlZ2V4ZGV2L3J0ZV9yZWdleGRldi5j DQo+IEBAIC0wLDAgKzEsNSBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0z LUNsYXVzZQ0KPiArICogQ29weXJpZ2h0KEMpIDIwMTkgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0 ZC4NCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX3JlZ2V4ZGV2Lmg+DQo+IGRpZmYgLS1n aXQgYS9saWIvbGlicnRlX3JlZ2V4ZGV2L3J0ZV9yZWdleGRldi5oDQo+IGIvbGliL2xpYnJ0ZV9y ZWdleGRldi9ydGVfcmVnZXhkZXYuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAw MDAwMDAwMDAuLjc2NWRhNGFhYQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYi9saWJydGVf cmVnZXhkZXYvcnRlX3JlZ2V4ZGV2LmgNCj4gQEAgLTAsMCArMSwxMjQ3IEBADQo+ICsvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoQykgMjAx OSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX1JU RV9SRUdFWERFVl9IXw0KPiArI2RlZmluZSBfUlRFX1JFR0VYREVWX0hfDQo+ICsNCj4gKy8qKg0K PiArICogQGZpbGUNCj4gKyAqDQo+ICsgKiBSVEUgUmVnRXggRGV2aWNlIEFQSQ0KPiArICoNCj4g KyAqIERlZmluZXMgUlRFIFJlZ0V4IERldmljZSBBUElzIGZvciBSZWdFeCBvcGVyYXRpb25zIGFu ZCBpdHMgcHJvdmlzaW9uaW5nLg0KPiArICoNCj4gKyAqIFRoZSBSZWdFeCBEZXZpY2UgQVBJIGlz IGNvbXBvc2VkIG9mIHR3byBwYXJ0czoNCj4gKyAqDQo+ICsgKiAtIFRoZSBhcHBsaWNhdGlvbi1v cmllbnRlZCBSZWdFeCBBUEkgdGhhdCBpbmNsdWRlcyBmdW5jdGlvbnMgdG8gc2V0dXANCj4gKyAq ICAgYSBSZWdFeCBkZXZpY2UgKGNvbmZpZ3VyZSBpdCwgc2V0dXAgaXRzIHF1ZXVlIHBhaXJzIGFu ZCBzdGFydCBpdCksDQo+ICsgKiAgIHVwZGF0ZSB0aGUgcnVsZSBkYXRhYmFzZSBhbmQgc28gb24u DQo+ICsgKg0KPiArICogLSBUaGUgZHJpdmVyLW9yaWVudGVkIFJlZ0V4IEFQSSB0aGF0IGV4cG9y dHMgYSBmdW5jdGlvbiBhbGxvd2luZw0KPiArICogICBhIFJlZ0V4IHBvbGwgTW9kZSBEcml2ZXIg KFBNRCkgdG8gc2ltdWx0YW5lb3VzbHkgcmVnaXN0ZXIgaXRzZWxmIGFzDQo+ICsgKiAgIGEgUmVn RXggZGV2aWNlIGRyaXZlci4NCj4gKyAqDQo+ICsgKiBSZWdFeCBkZXZpY2UgY29tcG9uZW50cyBh bmQgZGVmaW5pdGlvbnM6DQo+ICsgKg0KPiArICogICAgICstLS0tLS0tLS0tLS0tLS0tLSsNCj4g KyAqICAgICB8ICAgICAgICAgICAgICAgICB8DQo+ICsgKiAgICAgfCAgICAgICAgICAgICAgICAg by0tLS0tLS0tLSsgICAgcnRlX3JlZ2V4X1tlbnxkZV1xdWV1ZV9idXJzdCgpDQo+ICsgKiAgICAg fCAgIFBDUkUgYmFzZWQgICAgby0tLS0tLSsgIHwgICAgICAgICAgICAgICB8DQo+ICsgKiAgICAg fCAgUmVnRXggcGF0dGVybiAgfCAgICAgIHwgIHwgICstLS0tLS0tLSsgICB8DQo+ICsgKiAgICAg fCBtYXRjaGluZyBlbmdpbmUgby0tLS0tLSstLSstLW8gICAgICAgIHwgICB8ICAgICstLS0tLS0r DQo+ICsgKiAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgIHwgIHwgIHwgcXVldWUgIHw8PT1v PT09PnxDb3JlIDB8DQo+ICsgKiAgICAgfCAgICAgICAgICAgICAgICAgby0tLS0rIHwgIHwgIHwg cGFpciAwIHwgICAgICAgIHwgICAgICB8DQo+ICsgKiAgICAgfCAgICAgICAgICAgICAgICAgfCAg ICB8IHwgIHwgICstLS0tLS0tLSsgICAgICAgICstLS0tLS0rDQo+ICsgKiAgICAgKy0tLS0tLS0t LS0tLS0tLS0tKyAgICB8IHwgIHwNCj4gKyAqICAgICAgICAgICAgXiAgICAgICAgICAgICAgIHwg fCAgfCAgKy0tLS0tLS0tKw0KPiArICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCB8ICB8 ICB8ICAgICAgICB8ICAgICAgICArLS0tLS0tKw0KPiArICogICAgICAgICAgICB8ICAgICAgICAg ICAgICAgfCArLS0rLS1vIHF1ZXVlICB8PD09PT09PT58Q29yZSAxfA0KPiArICogICAgICAgIFJ1 bGV8RGF0YWJhc2UgICAgICAgfCAgICB8ICB8IHBhaXIgMSB8ICAgICAgICB8ICAgICAgfA0KPiAr ICogICAgICstLS0tLS0rLS0tLS0tLS0tLSsgICAgfCAgICB8ICArLS0tLS0tLS0rICAgICAgICAr LS0tLS0tKw0KPiArICogICAgIHwgICAgIEdyb3VwIDAgICAgIHwgICAgfCAgICB8DQo+ICsgKiAg ICAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICB8ICAgIHwgICstLS0tLS0tLSsgICAgICAgICstLS0t LS0rDQo+ICsgKiAgICAgfCB8IFJ1bGVzIDAuLm4gIHwgfCAgICB8ICAgIHwgIHwgICAgICAgIHwg ICAgICAgIHxDb3JlIDJ8DQo+ICsgKiAgICAgfCArLS0tLS0tLS0tLS0tLSsgfCAgICB8ICAgICst LW8gcXVldWUgIHw8PT09PT09PnwgICAgICB8DQo+ICsgKiAgICAgfCAgICAgR3JvdXAgMSAgICAg fCAgICB8ICAgICAgIHwgcGFpciAyIHwgICAgICAgICstLS0tLS0rDQo+ICsgKiAgICAgfCArLS0t LS0tLS0tLS0tLSsgfCAgICB8ICAgICAgICstLS0tLS0tLSsNCj4gKyAqICAgICB8IHwgUnVsZXMg MC4ubiAgfCB8ICAgIHwNCj4gKyAqICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgIHwgICAgICAg Ky0tLS0tLS0tKw0KPiArICogICAgIHwgICAgIEdyb3VwIDIgICAgIHwgICAgfCAgICAgICB8ICAg ICAgICB8ICAgICAgICArLS0tLS0tKw0KPiArICogICAgIHwgKy0tLS0tLS0tLS0tLS0rIHwgICAg fCAgICAgICB8IHF1ZXVlICB8PD09PT09PT58Q29yZSBufA0KPiArICogICAgIHwgfCBSdWxlcyAw Li5uICB8IHwgICAgKy0tLS0tLS1vIHBhaXIgbiB8ICAgICAgICB8ICAgICAgfA0KPiArICogICAg IHwgKy0tLS0tLS0tLS0tLS0rIHwgICAgICAgICAgICArLS0tLS0tLS0rICAgICAgICArLS0tLS0t Kw0KPiArICogICAgIHwgICAgIEdyb3VwIG4gICAgIHwNCj4gKyAqICAgICB8ICstLS0tLS0tLS0t LS0tKyB8PC0tLS0tLS1ydGVfcmVnZXhfcnVsZV9kYl91cGRhdGUoKQ0KPiArICogICAgIHwgfCBS dWxlcyAwLi5uICB8IHw8LS0tLS0tLXJ0ZV9yZWdleF9ydWxlX2RiX2ltcG9ydCgpDQo+ICsgKiAg ICAgfCArLS0tLS0tLS0tLS0tLSsgfC0tLS0tLS0+cnRlX3JlZ2V4X3J1bGVfZGJfZXhwb3J0KCkN Cj4gKyAqICAgICArLS0tLS0tLS0tLS0tLS0tLS0rDQo+ICsgKg0KPiArICogUmVnRXg6IEEgcmVn dWxhciBleHByZXNzaW9uIGlzIGEgY29uY2lzZSBhbmQgZmxleGlibGUgbWVhbnMgZm9yIG1hdGNo aW5nDQo+ICsgKiBzdHJpbmdzIG9mIHRleHQsIHN1Y2ggYXMgcGFydGljdWxhciBjaGFyYWN0ZXJz LCB3b3Jkcywgb3IgcGF0dGVybnMgb2YNCj4gKyAqIGNoYXJhY3RlcnMuIEEgY29tbW9uIGFiYnJl dmlhdGlvbiBmb3IgdGhpcyBpcyDigJxSZWdFeOKAnS4NCj4gKyAqDQo+ICsgKiBSZWdFeCBkZXZp Y2U6IEEgaGFyZHdhcmUgb3Igc29mdHdhcmUtYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgUmVnRXgN Cj4gKyAqIGRldmljZSBBUEkgZm9yIFBDUkUgYmFzZWQgcGF0dGVybiBtYXRjaGluZyBzeW50YXgg YW5kIHNlbWFudGljcy4NCj4gKyAqDQo+ICsgKiBQQ1JFIFJlZ0V4IHN5bnRheCBhbmQgc2VtYW50 aWNzIHNwZWNpZmljYXRpb246DQo+ICsgKiBodHRwOi8vcmVnZXhraXQuc291cmNlZm9yZ2UubmV0 L0RvY3VtZW50YXRpb24vcGNyZS9wY3JlcGF0dGVybi5odG1sDQo+ICsgKg0KPiArICogUmVnRXgg cXVldWUgcGFpcjogRWFjaCBSZWdFeCBkZXZpY2Ugc2hvdWxkIGhhdmUgb25lIG9yIG1vcmUgcXVl dWUNCj4gcGFpciB0bw0KPiArICogdHJhbnNtaXQgYSBidXJzdCBvZiBwYXR0ZXJuIG1hdGNoaW5n IHJlcXVlc3QgYW5kIHJlY2VpdmUgYSBidXJzdCBvZg0KPiArICogcmVjZWl2ZSB0aGUgcGF0dGVy biBtYXRjaGluZyByZXNwb25zZS4gVGhlIHBhdHRlcm4gbWF0Y2hpbmcNCj4gcmVxdWVzdC9yZXNw b25zZQ0KPiArICogZW1iZWRkZWQgaW4gKnJ0ZV9yZWdleF9vcHMqIHN0cnVjdHVyZS4NCj4gKyAq DQo+ICsgKiBSdWxlOiBBIHBhdHRlcm4gbWF0Y2hpbmcgcnVsZSBleHByZXNzZWQgaW4gUENSRSBS ZWdFeCBzeW50YXggYWxvbmcgd2l0aA0KPiArICogTWF0Y2ggSUQgYW5kIEdyb3VwIElEIHRvIGlk ZW50aWZ5IHRoZSBydWxlIHVwb24gdGhlIG1hdGNoLg0KPiArICoNCj4gKyAqIFJ1bGUgZGF0YWJh c2U6IFRoZSBSZWdFeCBkZXZpY2UgYWNjZXB0cyByZWd1bGFyIGV4cHJlc3Npb25zIGFuZA0KPiBj b252ZXJ0cyB0aGVtDQo+ICsgKiBpbnRvIGEgY29tcGlsZWQgcnVsZSBkYXRhYmFzZSB0aGF0IGNh biB0aGVuIGJlIHVzZWQgdG8gc2NhbiBkYXRhLg0KPiArICogQ29tcGlsYXRpb24gYWxsb3dzIHRo ZSBkZXZpY2UgdG8gYW5hbHl6ZSB0aGUgZ2l2ZW4gcGF0dGVybihzKSBhbmQNCj4gKyAqIHByZS1k ZXRlcm1pbmUgaG93IHRvIHNjYW4gZm9yIHRoZXNlIHBhdHRlcm5zIGluIGFuIG9wdGltaXplZCBm YXNoaW9uDQo+IHRoYXQNCj4gKyAqIHdvdWxkIGJlIGZhciB0b28gZXhwZW5zaXZlIHRvIGNvbXB1 dGUgYXQgcnVuLXRpbWUuIEEgcnVsZSBkYXRhYmFzZQ0KPiBjb250YWlucw0KPiArICogYSBzZXQg b2YgcnVsZXMgdGhhdCBjb21waWxlZCBpbiBkZXZpY2Ugc3BlY2lmaWMgYmluYXJ5IGZvcm0uDQo+ ICsgKg0KPiArICogTWF0Y2ggSUQgb3IgUnVsZSBJRDogQSB1bmlxdWUgaWRlbnRpZmllciBwcm92 aWRlZCBhdCB0aGUgdGltZSBvZiBydWxlDQo+ICsgKiBjcmVhdGlvbiBmb3IgdGhlIGFwcGxpY2F0 aW9uIHRvIGlkZW50aWZ5IHRoZSBydWxlIHVwb24gbWF0Y2guDQo+ICsgKg0KPiArICogR3JvdXAg SUQ6IEdyb3VwIG9mIHJ1bGVzIGNhbiBiZSBncm91cGVkIHVuZGVyIG9uZSBncm91cCBJRCB0byBl bmFibGUNCj4gKyAqIHJ1bGUgaXNvbGF0aW9uIGFuZCBlZmZlY3RpdmUgcGF0dGVybiBtYXRjaGlu Zy4gQSB1bmlxdWUgZ3JvdXAgaWRlbnRpZmllcg0KPiArICogcHJvdmlkZWQgYXQgdGhlIHRpbWUg b2YgcnVsZSBjcmVhdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGlkZW50aWZ5IHRoZQ0KPiAr ICogcnVsZSB1cG9uIG1hdGNoLg0KPiArICoNCj4gKyAqIFNjYW46IEEgcGF0dGVybiBtYXRjaGlu ZyByZXF1ZXN0IHRocm91Z2ggKmVucXVldWUqIEFQSS4NCj4gKyAqDQo+ICsgKiBJdCBtYXkgcG9z c2libGUgdGhhdCBhIGdpdmVuIFJlZ0V4IGRldmljZSBtYXkgbm90IHN1cHBvcnQgYWxsIHRoZSBm ZWF0dXJlcw0KPiArICogb2YgUENSRS4gVGhlIGFwcGxpY2F0aW9uIG1heSBwcm9iZSB1bnN1cHBv cnRlZCBmZWF0dXJlcyB0aHJvdWdoDQo+ICsgKiBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpw Y3JlX3Vuc3VwX2ZsYWdzDQo+ICsgKg0KPiArICogQnkgZGVmYXVsdCwgYWxsIHRoZSBmdW5jdGlv bnMgb2YgdGhlIFJlZ0V4IERldmljZSBBUEkgZXhwb3J0ZWQgYnkgYSBQTUQNCj4gKyAqIGFyZSBs b2NrLWZyZWUgZnVuY3Rpb25zIHdoaWNoIGFzc3VtZSB0byBub3QgYmUgaW52b2tlZCBpbiBwYXJh bGxlbCBvbg0KPiArICogZGlmZmVyZW50IGxvZ2ljYWwgY29yZXMgdG8gd29yayBvbiB0aGUgc2Ft ZSB0YXJnZXQgb2JqZWN0LiBGb3IgaW5zdGFuY2UsDQo+ICsgKiB0aGUgZGVxdWV1ZSBmdW5jdGlv biBvZiBhIFBNRCBjYW5ub3QgYmUgaW52b2tlZCBpbiBwYXJhbGxlbCBvbiB0d28NCj4gbG9naWNh bA0KPiArICogY29yZXMgdG8gb3BlcmF0ZXMgb24gc2FtZSBSZWdFeCBxdWV1ZSBwYWlyLiBPZiBj b3Vyc2UsIHRoaXMgZnVuY3Rpb24NCj4gKyAqIGNhbiBiZSBpbnZva2VkIGluIHBhcmFsbGVsIGJ5 IGRpZmZlcmVudCBsb2dpY2FsIGNvcmUgb24gZGlmZmVyZW50IHF1ZXVlDQo+IHBhaXIuDQo+ICsg KiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHVwcGVyIGxldmVsIGFwcGxpY2F0aW9u IHRvIGVuZm9yY2UgdGhpcyBydWxlLg0KPiArICoNCj4gKyAqIEluIGFsbCBmdW5jdGlvbnMgb2Yg dGhlIFJlZ0V4IEFQSSwgdGhlIFJlZ0V4IGRldmljZSBpcw0KPiArICogZGVzaWduYXRlZCBieSBh biBpbnRlZ2VyID49IDAgbmFtZWQgdGhlIGRldmljZSBpZGVudGlmaWVyICpkZXZfaWQqDQo+ICsg Kg0KPiArICogQXQgdGhlIFJlZ0V4IGRyaXZlciBsZXZlbCwgUmVnRXggZGV2aWNlcyBhcmUgcmVw cmVzZW50ZWQgYnkgYSBnZW5lcmljDQo+ICsgKiBkYXRhIHN0cnVjdHVyZSBvZiB0eXBlICpydGVf cmVnZXhfZGV2Ki4NCj4gKyAqDQo+ICsgKiBSZWdFeCBkZXZpY2VzIGFyZSBkeW5hbWljYWxseSBy ZWdpc3RlcmVkIGR1cmluZyB0aGUgUENJL1NvQyBkZXZpY2UNCj4gcHJvYmluZw0KPiArICogcGhh c2UgcGVyZm9ybWVkIGF0IEVBTCBpbml0aWFsaXphdGlvbiB0aW1lLg0KPiArICogV2hlbiBhIFJl Z0V4IGRldmljZSBpcyBiZWluZyBwcm9iZWQsIGEgKnJ0ZV9yZWdleF9kZXYqIHN0cnVjdHVyZSBh bmQNCj4gKyAqIGEgbmV3IGRldmljZSBpZGVudGlmaWVyIGFyZSBhbGxvY2F0ZWQgZm9yIHRoYXQg ZGV2aWNlLiBUaGVuLCB0aGUNCj4gKyAqIHJlZ2V4X2Rldl9pbml0KCkgZnVuY3Rpb24gc3VwcGxp ZWQgYnkgdGhlIFJlZ0V4IGRyaXZlciBtYXRjaGluZyB0aGUNCj4gcHJvYmVkDQo+ICsgKiBkZXZp Y2UgaXMgaW52b2tlZCB0byBwcm9wZXJseSBpbml0aWFsaXplIHRoZSBkZXZpY2UuDQo+ICsgKg0K PiArICogVGhlIHJvbGUgb2YgdGhlIGRldmljZSBpbml0IGZ1bmN0aW9uIGNvbnNpc3RzIG9mIHJl c2V0dGluZyB0aGUgaGFyZHdhcmUgb3INCj4gKyAqIHNvZnR3YXJlIFJlZ0V4IGRyaXZlciBpbXBs ZW1lbnRhdGlvbnMuDQo+ICsgKg0KPiArICogSWYgdGhlIGRldmljZSBpbml0IG9wZXJhdGlvbiBp cyBzdWNjZXNzZnVsLCB0aGUgY29ycmVzcG9uZGVuY2UgYmV0d2Vlbg0KPiArICogdGhlIGRldmlj ZSBpZGVudGlmaWVyIGFzc2lnbmVkIHRvIHRoZSBuZXcgZGV2aWNlIGFuZCBpdHMgYXNzb2NpYXRl ZA0KPiArICogKnJ0ZV9yZWdleF9kZXYqIHN0cnVjdHVyZSBpcyBlZmZlY3RpdmVseSByZWdpc3Rl cmVkLg0KPiArICogT3RoZXJ3aXNlLCBib3RoIHRoZSAqcnRlX3JlZ2V4X2Rldiogc3RydWN0dXJl IGFuZCB0aGUgZGV2aWNlIGlkZW50aWZpZXINCj4gYXJlDQo+ICsgKiBmcmVlZC4NCj4gKyAqDQo+ ICsgKiBUaGUgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBSZWdFeCBBUEkg dG8gc2V0dXAgYSBkZXZpY2UNCj4gKyAqIGRlc2lnbmF0ZWQgYnkgaXRzIGRldmljZSBpZGVudGlm aWVyIG11c3QgYmUgaW52b2tlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOg0KPiArICogICAgIC0g cnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKQ0KPiArICogICAgIC0gcnRlX3JlZ2V4X3F1ZXVlX3Bh aXJfc2V0dXAoKQ0KPiArICogICAgIC0gcnRlX3JlZ2V4X2Rldl9zdGFydCgpDQo+ICsgKg0KPiAr ICogVGhlbiwgdGhlIGFwcGxpY2F0aW9uIGNhbiBpbnZva2UsIGluIGFueSBvcmRlciwgdGhlIGZ1 bmN0aW9ucw0KPiArICogZXhwb3J0ZWQgYnkgdGhlIFJlZ0V4IEFQSSB0byBlbnF1ZXVlIHBhdHRl cm4gbWF0Y2hpbmcgam9iLCBkZXF1ZXVlDQo+IHBhdHRlcm4NCj4gKyAqIG1hdGNoaW5nIHJlc3Bv bnNlLCBnZXQgdGhlIHN0YXRzLCB1cGRhdGUgdGhlIHJ1bGUgZGF0YWJhc2UsDQo+ICsgKiBnZXQv c2V0IGRldmljZSBhdHRyaWJ1dGVzIGFuZCBzbyBvbg0KPiArICoNCj4gKyAqIElmIHRoZSBhcHBs aWNhdGlvbiB3YW50cyB0byBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gKGkuZS4gY2FsbA0KPiAr ICogcnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKSBvciBydGVfcmVnZXhfcXVldWVfcGFpcl9zZXR1 cCgpKSwgaXQgbXVzdA0KPiBjYWxsDQo+ICsgKiBydGVfcmVnZXhfZGV2X3N0b3AoKSBmaXJzdCB0 byBzdG9wIHRoZSBkZXZpY2UgYW5kIHRoZW4gZG8gdGhlDQo+IHJlY29uZmlndXJhdGlvbg0KPiAr ICogYmVmb3JlIGNhbGxpbmcgcnRlX3JlZ2V4X2Rldl9zdGFydCgpIGFnYWluLiBUaGUgZW5xdWV1 ZSBhbmQgZGVxdWV1ZQ0KPiArICogZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgaW52b2tlZCB3aGVu IHRoZSBkZXZpY2UgaXMgc3RvcHBlZC4NCj4gKyAqDQo+ICsgKiBGaW5hbGx5LCBhbiBhcHBsaWNh dGlvbiBjYW4gY2xvc2UgYSBSZWdFeCBkZXZpY2UgYnkgaW52b2tpbmcgdGhlDQo+ICsgKiBydGVf cmVnZXhfZGV2X2Nsb3NlKCkgZnVuY3Rpb24uDQo+ICsgKg0KPiArICogRWFjaCBmdW5jdGlvbiBv ZiB0aGUgYXBwbGljYXRpb24gUmVnRXggQVBJIGludm9rZXMgYSBzcGVjaWZpYyBmdW5jdGlvbg0K PiArICogb2YgdGhlIFBNRCB0aGF0IGNvbnRyb2xzIHRoZSB0YXJnZXQgZGV2aWNlIGRlc2lnbmF0 ZWQgYnkgaXRzIGRldmljZQ0KPiArICogaWRlbnRpZmllci4NCj4gKyAqDQo+ICsgKiBGb3IgdGhp cyBwdXJwb3NlLCBhbGwgZGV2aWNlLXNwZWNpZmljIGZ1bmN0aW9ucyBvZiBhIFJlZ0V4IGRyaXZl ciBhcmUNCj4gKyAqIHN1cHBsaWVkIHRocm91Z2ggYSBzZXQgb2YgcG9pbnRlcnMgY29udGFpbmVk IGluIGEgZ2VuZXJpYyBzdHJ1Y3R1cmUgb2YgdHlwZQ0KPiArICogKnJlZ2V4X2Rldl9vcHMqLg0K PiArICogVGhlIGFkZHJlc3Mgb2YgdGhlICpyZWdleF9kZXZfb3BzKiBzdHJ1Y3R1cmUgaXMgc3Rv cmVkIGluIHRoZQ0KPiAqcnRlX3JlZ2V4X2RldioNCj4gKyAqIHN0cnVjdHVyZSBieSB0aGUgZGV2 aWNlIGluaXQgZnVuY3Rpb24gb2YgdGhlIFJlZ0V4IGRyaXZlciwgd2hpY2ggaXMNCj4gKyAqIGlu dm9rZWQgZHVyaW5nIHRoZSBQQ0kvU29DIGRldmljZSBwcm9iaW5nIHBoYXNlLCBhcyBleHBsYWlu ZWQgZWFybGllci4NCj4gKyAqDQo+ICsgKiBJbiBvdGhlciB3b3JkcywgZWFjaCBmdW5jdGlvbiBv ZiB0aGUgUmVnRXggQVBJIHNpbXBseSByZXRyaWV2ZXMgdGhlDQo+ICsgKiAqcnRlX3JlZ2V4X2Rl diogc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlIGlkZW50aWZpZXIgYW5kDQo+ ICsgKiBwZXJmb3JtcyBhbiBpbmRpcmVjdCBpbnZvY2F0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5n IGRyaXZlciBmdW5jdGlvbg0KPiArICogc3VwcGxpZWQgaW4gdGhlICpyZWdleF9kZXZfb3BzKiBz dHJ1Y3R1cmUgb2YgdGhlICpydGVfcmVnZXhfZGV2Kg0KPiBzdHJ1Y3R1cmUuDQo+ICsgKg0KPiAr ICogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHRoZSBhZGRyZXNzIG9mIHRoZSBmYXN0LXBhdGgg ZnVuY3Rpb25zIG9mIHRoZQ0KPiArICogUmVnRXggZHJpdmVyIGlzIG5vdCBjb250YWluZWQgaW4g dGhlICpyZWdleF9kZXZfb3BzKiBzdHJ1Y3R1cmUuDQo+ICsgKiBJbnN0ZWFkLCB0aGV5IGFyZSBk aXJlY3RseSBzdG9yZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgKnJ0ZV9yZWdleF9kZXYqDQo+ ICsgKiBzdHJ1Y3R1cmUgdG8gYXZvaWQgYW4gZXh0cmEgaW5kaXJlY3QgbWVtb3J5IGFjY2VzcyBk dXJpbmcgdGhlaXINCj4gaW52b2NhdGlvbi4NCj4gKyAqDQo+ICsgKiBSVEUgUmVnRXggZGV2aWNl IGRyaXZlcnMgZG8gbm90IHVzZSBpbnRlcnJ1cHRzIGZvciBlbnF1ZXVlIG9yIGRlcXVldWUNCj4g KyAqIG9wZXJhdGlvbi4gSW5zdGVhZCwgUmVnRXggZHJpdmVycyBleHBvcnQgUG9sbC1Nb2RlIGVu cXVldWUgYW5kDQo+IGRlcXVldWUNCj4gKyAqIGZ1bmN0aW9ucyB0byBhcHBsaWNhdGlvbnMuDQo+ ICsgKg0KPiArICogVGhlICplbnF1ZXVlKiBvcGVyYXRpb24gc3VibWl0cyBhIGJ1cnN0IG9mIFJl Z0V4IHBhdHRlcm4gbWF0Y2hpbmcNCj4gcmVxdWVzdA0KPiArICogdG8gdGhlIFJlZ0V4IGRldmlj ZSBhbmQgdGhlICpkZXF1ZXVlKiBvcGVyYXRpb24gZ2V0cyBhIGJ1cnN0IG9mIHBhdHRlcm4NCj4g KyAqIG1hdGNoaW5nIHJlc3BvbnNlIGZvciB0aGUgb25lcyBzdWJtaXR0ZWQgdGhyb3VnaCAqZW5x dWV1ZSoNCj4gb3BlcmF0aW9uLg0KPiArICoNCj4gKyAqIFR5cGljYWwgYXBwbGljYXRpb24gdXRp bGlzYXRpb24gb2YgdGhlIFJlZ0V4IGRldmljZSBBUEkgd2lsbCBmb2xsb3cgdGhlDQo+ICsgKiBm b2xsb3dpbmcgcHJvZ3JhbW1pbmcgZmxvdy4NCj4gKyAqDQo+ICsgKiAtIHJ0ZV9yZWdleF9kZXZf Y29uZmlndXJlKCkNCj4gKyAqIC0gcnRlX3JlZ2V4X3F1ZXVlX3BhaXJfc2V0dXAoKQ0KPiArICog LSBydGVfcmVnZXhfcnVsZV9kYl91cGRhdGUoKSBOZWVkcyB0byBpbnZva2UgaWYgcHJlY29tcGls ZWQgcnVsZQ0KPiBkYXRhYmFzZSBub3QNCj4gKyAqICAgcHJvdmlkZWQgaW4gcnRlX3JlZ2V4X2Rl dl9jb25maWc6OnJ1bGVfZGIgZm9yDQo+IHJ0ZV9yZWdleF9kZXZfY29uZmlndXJlKCkNCj4gKyAq ICAgYW5kL29yIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHVwZGF0ZSBydWxlIGRhdGFiYXNlLg0KPiAr ICogLSBDcmVhdGUgb3IgcmV1c2UgZXhpdGluZyBtZW1wb29sIGZvciAqcnRlX3JlZ2V4X29wcyog b2JqZWN0cy4NCj4gKyAqIC0gcnRlX3JlZ2V4X2Rldl9zdGFydCgpDQo+ICsgKiAtIHJ0ZV9yZWdl eF9lbnF1ZXVlX2J1cnN0KCkNCj4gKyAqIC0gcnRlX3JlZ2V4X2RlcXVldWVfYnVyc3QoKQ0KPiAr ICoNCj4gKyAqLw0KPiArDQo+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gK2V4dGVybiAiQyIgew0K PiArI2VuZGlmDQo+ICsNCj4gKyNpbmNsdWRlIDxydGVfY29tbW9uLmg+DQo+ICsjaW5jbHVkZSA8 cnRlX2NvbmZpZy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9kZXYuaD4NCj4gKyNpbmNsdWRlIDxydGVf ZXJybm8uaD4NCj4gKyNpbmNsdWRlIDxydGVfbWVtb3J5Lmg+DQo+ICsNCj4gKy8qKg0KPiArICog R2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgUmVnRXggZGV2aWNlcyB0aGF0IGhhdmUgYmVlbiBzdWNj ZXNzZnVsbHkNCj4gKyAqIGluaXRpYWxpc2VkLg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAq ICAgVGhlIHRvdGFsIG51bWJlciBvZiB1c2FibGUgUmVnRXggZGV2aWNlcy4NCj4gKyAqLw0KPiAr dWludDhfdA0KPiArcnRlX3JlZ2V4X2Rldl9jb3VudCh2b2lkKTsNCj4gKw0KPiArLyoqDQo+ICsg KiBHZXQgdGhlIGRldmljZSBpZGVudGlmaWVyIGZvciB0aGUgbmFtZWQgUmVnRXggZGV2aWNlLg0K PiArICoNCj4gKyAqIEBwYXJhbSBuYW1lDQo+ICsgKiAgIFJlZ0V4IGRldmljZSBuYW1lIHRvIHNl bGVjdCB0aGUgUmVnRXggZGV2aWNlIGlkZW50aWZpZXIuDQo+ICsgKg0KPiArICogQHJldHVybg0K PiArICogICBSZXR1cm5zIFJlZ0V4IGRldmljZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MuDQo+ICsg KiAgIC0gPDA6IEZhaWx1cmUgdG8gZmluZCBuYW1lZCBSZWdFeCBkZXZpY2UuDQo+ICsgKi8NCj4g K2ludA0KPiArcnRlX3JlZ2V4X2Rldl9nZXRfZGV2X2lkKGNvbnN0IGNoYXIgKm5hbWUpOw0KPiAr DQo+ICsvKiBFbnVtZXJhdGVzIFJlZ0V4IGRldmljZSBjYXBhYmlsaXRpZXMgKi8NCj4gKyNkZWZp bmUgUlRFX1JFR0VYX0RFVl9DQVBBX1JVTlRJTUVfQ09NUElMQVRJT05fRiAoMVVMTCA8PCAwKQ0K PiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lcyBzdXBwb3J0IGNvbXBpbGluZyB0aGUgcnVsZXMgYXQg cnVudGltZSB1bmxpa2UNCj4gKyAqIGxvYWRpbmcgb25seSB0aGUgcHJlLWJ1aWx0IHJ1bGUgZGF0 YWJhc2UgdXNpbmcNCj4gKyAqIHN0cnVjdCBydGVfcmVnZXhfZGV2X2NvbmZpZzo6cnVsZV9kYiBp biBydGVfcmVnZXhfZGV2X2NvbmZpZ3VyZSgpDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhf ZGV2X2NvbmZpZzo6cnVsZV9kYiwgcnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKQ0KPiArICogQHNl ZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpyZWdleF9kZXZfY2FwYQ0KPiArICovDQo+ICsN Cj4gKw0KPiArLyogRW51bWVyYXRlcyB1bnN1cHBvcnRlZCBQQ1JFIGZlYXR1cmVzIGZvciB0aGUg UmVnRXggZGV2aWNlICovDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9TVEFS VF9BTkNIT1JfRiAoMVVMTCA8PCAwKQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBw b3J0IFBDUkUgQW5jaG9yIHRvIHN0YXJ0IG9mIG1hdGNoIGZsYWcuDQo+ICsgKiBFeGFtcGxlIFJl Z0V4IGlzICcvXEdmb29cZC8nLiBIZXJlICdcRycgYXNzZXJ0cyBwb3NpdGlvbiBhdCB0aGUgZW5k IG9mIHRoZQ0KPiArICogcHJldmlvdXMgbWF0Y2ggb3IgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcg Zm9yIHRoZSBmaXJzdCBtYXRjaC4NCj4gKyAqIFRoaXMgcG9zaXRpb24gd2lsbCBjaGFuZ2UgZWFj aCB0aW1lIHRoZSBSZWdFeCBpcyBhcHBsaWVkIHRvIHRoZSBzdWJqZWN0DQo+ICsgKiBzdHJpbmcu IElmIHRoZSBSZWdFeCBpcyBhcHBsaWVkIHRvICdmb28xZm9vMlpmb28zJyB0aGUgZmlyc3QgdHdv IG1hdGNoZXMgd2lsbA0KPiArICogYmUgc3VjY2Vzc2Z1bCBmb3IgJ2ZvbzFmb28yJyBhbmQgZmFp bCBmb3IgJ1pmb28zJy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNy ZV91bnN1cF9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JF X1VOU1VQX0FUT01JQ19HUk9VUElOR19GICgxVUxMIDw8DQo+IDEpDQo+ICsvKio8IFJlZ0V4IGRl dmljZSBkb2Vzbid0IHN1cHBvcnQgUENSRSBBdG9taWMgZ3JvdXBpbmcuDQo+ICsgKiBBdG9taWMg Z3JvdXBzIGFyZSByZXByZXNlbnRlZCBieSAnKD8+KScuIEFuIGF0b21pYyBncm91cCBpcyBhIGdy b3VwIHRoYXQsDQo+ICsgKiB3aGVuIHRoZSBSZWdFeCBlbmdpbmUgZXhpdHMgZnJvbSBpdCwgYXV0 b21hdGljYWxseSB0aHJvd3MgYXdheSBhbGwNCj4gKyAqIGJhY2t0cmFja2luZyBwb3NpdGlvbnMg cmVtZW1iZXJlZCBieSBhbnkgdG9rZW5zIGluc2lkZSB0aGUgZ3JvdXAuDQo+ICsgKiBFeGFtcGxl IFJlZ0V4IGlzICdhKD8+YmN8YiljJyBpZiB0aGUgZ2l2ZW4gcGF0dGVybnMgYXJlICdhYmMnIGFu ZCAnYWJjYycNCj4gdGhlbg0KPiArICogJ2EoYmN8YiljJyBtYXRjaGVzIGJvdGggd2hlcmUgYXMg J2EoPz5iY3xiKWMnIG1hdGNoZXMgb25seSBhYmNjIGJlY2F1c2UNCj4gKyAqIGF0b21pYyBncm91 cHMgZG9uJ3QgYWxsb3cgYmFja3RyYWNpbmcgYmFjayB0byAnYicuDQo+ICsgKiBAc2VlIHN0cnVj dCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsj ZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9CQUNLVFJBQ0tJTkdfQ1RSTF9GICgxVUxM IDw8DQo+IDIpDQo+ICsvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgUENSRSBiYWNr dHJhY2tpbmcgY29udHJvbCB2ZXJicy4NCj4gKyAqIFNvbWUgZXhhbXBsZXMgb2YgYmFja3RyYWNp bmcgdmVyYnMgYXJlICgqQ09NTUlUKSwgKCpBQ0NFUFQpLCAoKkZBSUwpLA0KPiArICogKCpTS0lQ KSwgKCpQUlVORSkuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVf dW5zdXBfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9V TlNVUF9DQUxMT1VUU19GICgxVUxMIDw8IDMpDQo+ICsvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0 IHN1cHBvcnQgUENSRSBjYWxsb3V0cy4NCj4gKyAqIFBDUkUgc3VwcG9ydHMgY2FsbGluZyBleHRl cm5hbCBmdW5jdGlvbiBpbiBiZXR3ZWVuIG1hdGNoZXMgYnkgdXNpbmcNCj4gJyg/QyknLg0KPiAr ICogRXhhbXBsZSBSZWdFeCAnQUJDKD9DKUQnIGlmIGEgZ2l2ZW4gcGF0dGVyIGlzICdBQkNEJyB0 aGVuIHRoZSBSZWdFeA0KPiBlbmdpbmUNCj4gKyAqIHdpbGwgcGFyc2UgQUJDIHBlcmZvcm0gYSB1 c2VyZGVmaW5lZCBjYWxsb3V0IGFuZCByZXR1cm4gYSBzdWNjZXNzZnVsDQo+IG1hdGNoIGF0DQo+ ICsgKiBELg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3Vw X2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBf QkFDS1JFRkVSRU5DRV9GICgxVUxMIDw8IDQpDQo+ICsvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0 IHN1cHBvcnQgUENSRSBiYWNrcmVmZXJlbmNlLg0KPiArICogRXhhbXBsZSBSZWdFeCBpcyAnKFwy QUJDfChHSEkpKSsnIFwyIG1hdGNoZXMgdGhlIHNhbWUgdGV4dCBhcyBtb3N0DQo+IHJlY2VudGx5 DQo+ICsgKiBtYXRjaGVkIGJ5IHRoZSAybmQgY2FwdHVyaW5nIGdyb3VwIGkuZS4gJ0dISScuDQo+ ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4g KyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9HUkVFRFlfRiAo MVVMTCA8PCA1KQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBDUkUgR3Jl ZWR5IG1vZGUuDQo+ICsgKiBGb3IgZXhhbXBsZSBpZiB0aGUgUmVnRXggaXMgJ0FCXGQqPycgdGhl biAnKj8nIHJlcHJlc2VudHMgemVybyBvcg0KPiB1bmxpbWl0ZWQNCj4gKyAqIG1hdGNoZXMuIElu IGdyZWVkeSBtb2RlIHRoZSBwYXR0ZXJuICdBQjEyMzQ1JyB3aWxsIGJlIG1hdGNoZWQNCj4gY29t cGxldGVseQ0KPiArICogd2hlcmUgYXMgdGhlIHVuZ3JlZWR5IG1vZGUgJ0FCJyB3aWxsIGJlIHJl dHVybmVkIGFzIHRoZSBtYXRjaC4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5m bzo6cGNyZV91bnN1cF9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RF Vl9QQ1JFX1VOU1VQX0xPT0tBUk9VTkRfQVNSVF9GICgxVUxMIDw8DQo+IDYpDQo+ICsvKio8IFJl Z0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgUENSRSBMb29rYXJvdW5kIGFzc2VydGlvbnMNCj4g KyAqIChaZXJvLXdpZHRoIGFzc2VydGlvbnMpLiBFeGFtcGxlIFJlZ0V4IGlzICdbYS16XStcZCso Pz0hezMsfSknIGlmDQo+ICsgKiB0aGUgZ2l2ZW4gcGF0dGVybiBpcyAnZHdhZDEyMzQhJyB0aGUg UmVnRXggZW5naW5lIGRvZXNuJ3QgcmVwb3J0IGFueQ0KPiBtYXRjaGVzDQo+ICsgKiBiZWNhdXNl IHRoZSBhc3NlcnQgJyg/PSF7Myx9KScgZmFpbHMuIFRoZSBwYXR0ZXJuICdkd2FkMTIzISEhJyB3 b3VsZCByZXR1cm4NCj4gYQ0KPiArICogc3VjY2Vzc2Z1bCBtYXRjaC4NCj4gKyAqIEBzZWUgc3Ry dWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KPiArICovDQo+ICsNCj4g KyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQX01BVENIX1BPSU5UX1JTVF9GICgxVUxM IDw8DQo+IDcpDQo+ICsvKio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgUENSRSBtYXRj aCBwb2ludCByZXNldCBkaXJlY3RpdmUuDQo+ICsgKiBFeGFtcGxlIFJlZ0V4IGlzICdbYS16XStc S1xkKycgaWYgdGhlIHBhdHRlcm4gaXMgJ2R3YWQxMjMnDQo+ICsgKiB0aGVuIGV2ZW4gdGhvdWdo IHRoZSBlbnRpcmUgcGF0dGVybiBtYXRjaGVzIG9ubHkgJzEyMycNCj4gKyAqIGlzIHJlcG9ydGVk IGFzIGEgbWF0Y2guDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVf dW5zdXBfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9V TlNVUF9ORVdMSU5FX0NPTlZFTlRJT05TX0YNCj4gKDFVTEwgPDwgOCkNCj4gKy8qKjwgUmVnRXgg ZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBQQ1JFIG5ld2xpbmUgY29udmVudGlvbi4NCj4gKyAqIE5l d2xpbmUgY29udmVudGlvbnMgYXJlIHJlcHJlc2VudGVkIGFzIGZvbGxvd3M6DQo+ICsgKiAoKkNS KSAgICAgICAgY2FycmlhZ2UgcmV0dXJuDQo+ICsgKiAoKkxGKSAgICAgICAgbGluZWZlZWQNCj4g KyAqICgqQ1JMRikgICAgICBjYXJyaWFnZSByZXR1cm4sIGZvbGxvd2VkIGJ5IGxpbmVmZWVkDQo+ ICsgKiAoKkFOWUNSTEYpICAgYW55IG9mIHRoZSB0aHJlZSBhYm92ZQ0KPiArICogKCpBTlkpICAg ICAgIGFsbCBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2VzDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVf cmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5l IFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9ORVdMSU5FX1NFUV9GICgxVUxMIDw8IDkpDQo+ICsv Kio8IFJlZ0V4IGRldmljZSBkb2Vzbid0IHN1cHBvcnQgUENSRSBuZXdsaW5lIHNlcXVlbmNlLg0K PiArICogVGhlIGVzY2FwZSBzZXF1ZW5jZSAnXFInIHdpbGwgbWF0Y2ggYW55IG5ld2xpbmUgc2Vx dWVuY2UuDQo+ICsgKiBJdCBpcyBlcXVpdmFsZW50IHRvOiAnKD8+XHJcbnxcbnxceDBifFxmfFxy fFx4ODUpJy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1 cF9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQ X1BPU1NFU1NJVkVfUVVBTElGSUVSU19GICgxVUxMDQo+IDw8IDEwKQ0KPiArLyoqPCBSZWdFeCBk ZXZpY2UgZG9lc24ndCBzdXBwb3J0IFBDUkUgcG9zc2Vzc2l2ZSBxdWFsaWZpZXJzLg0KPiArICog RXhhbXBsZSBSZWdFeCBwb3NzZXNzaXZlIHF1YWxpZmllcnMgJyorJywgJysrJywgJz8rJywgJ3tt LG59KycuDQo+ICsgKiBQb3NzZXNzaXZlIHF1YW50aWZpZXIgcmVwZWF0cyB0aGUgdG9rZW4gYXMg bWFueSB0aW1lcyBhcyBwb3NzaWJsZSBhbmQgaXQNCj4gZG9lcw0KPiArICogbm90IGdpdmUgdXAg bWF0Y2hlcyBhcyB0aGUgZW5naW5lIGJhY2t0cmFja3MuIFdpdGggYSBwb3NzZXNzaXZlDQo+IHF1 YW50aWZpZXIsDQo+ICsgKiB0aGUgZGVhbCBpcyBhbGwgb3Igbm90aGluZy4NCj4gKyAqIEBzZWUg c3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KPiArICovDQo+ICsN Cj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VOU1VQX1NVQlJPVVRJTkVfUkVGRVJFTkNF U19GDQo+ICgxVUxMIDw8IDExKQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0 IFBDUkUgU3Vicm91dGluZSByZWZlcmVuY2VzLg0KPiArICogUENSRSBTdWJyb3V0aW5lIHJlZmVy ZW5jZXMgYWxsb3cgZm9yIHN1YiBwYXR0ZXJucyB0byBiZSBhc3Nlc3NlZA0KPiArICogYXMgcGFy dCBvZiB0aGUgUmVnRXguIEV4YW1wbGUgUmVnRXggaXMgJyhmb298ZnV6eilcZzwxPitiYXInIG1h dGNoZXMgdGhlDQo+ICsgKiBwYXR0ZXJuICdmb29mb29mdXp6Zm9vZnV6emJhcicuDQo+ICsgKiBA c2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4gKyAqLw0K PiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9VVEZfOF9GICgxVUxMIDw8 IDEyKQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFVURi04IGNoYXJhY3Rl ciBlbmNvZGluZy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91 bnN1cF9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9QQ1JFX1VO U1VQX1VURl8xNl9GICgxVUxMIDw8IDEzKQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBz dXBwb3J0IFVURi0xNiBjaGFyYWN0ZXIgZW5jb2RpbmcuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVf cmVnZXhfZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5l IFJURV9SRUdFWF9ERVZfUENSRV9VTlNVUF9VVEZfMzJfRiAoMVVMTCA8PCAxNCkNCj4gKy8qKjwg UmVnRXggZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBVVEYtMzIgY2hhcmFjdGVyIGVuY29kaW5nLg0K PiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpwY3JlX3Vuc3VwX2ZsYWdzDQo+ ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfV09SRF9CT1VO REFSWV9GICgxVUxMIDw8DQo+IDE1KQ0KPiArLyoqPCBSZWdFeCBkZXZpY2UgZG9lc24ndCBzdXBw b3J0IHdvcmQgYm91bmRhcmllcy4NCj4gKyAqIFRoZSBtZXRhIGNoYXJhY3RlciAnXGInIHJlcHJl c2VudHMgd29yZCBib3VuZGFyeSBhbmNob3IuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhf ZGV2X2luZm86OnBjcmVfdW5zdXBfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9S RUdFWF9ERVZfUENSRV9VTlNVUF9GT1JXQVJEX1JFRkVSRU5DRVNfRiAoMVVMTA0KPiA8PCAxNikN Cj4gKy8qKjwgUmVnRXggZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBGb3J3YXJkIHJlZmVyZW5jZXMu DQo+ICsgKiBGb3J3YXJkIHJlZmVyZW5jZXMgYWxsb3cgeW91IHRvIHVzZSBhIGJhY2sgcmVmZXJl bmNlIHRvIGEgZ3JvdXAgdGhhdA0KPiBhcHBlYXJzDQo+ICsgKiBsYXRlciBpbiB0aGUgUmVnRXgu IEV4YW1wbGUgUmVnRXggaXMgJyhcM0FCQ3woREVGfChHSEkpKSkrJyBtYXRjaGVzIHRoZQ0KPiAr ICogZm9sbG93aW5nIHN0cmluZyAnR0hJR0hJQUJDREVGJy4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0 ZV9yZWdleF9kZXZfaW5mbzo6cGNyZV91bnN1cF9mbGFncw0KPiArICovDQo+ICsNCj4gKy8qIEVu dW1lcmF0ZXMgUENSRSBydWxlIGZsYWdzICovDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JV TEVfQUxMT1dfRU1QVFlfRiAoMVVMTCA8PCAwKQ0KPiArLyoqPCBXaGVuIHRoaXMgZmxhZyBpcyBz ZXQsIHRoZSBwYXR0ZXJuIHRoYXQgY2FuIG1hdGNoIGFnYWluc3QgYW4gZW1wdHkNCj4gc3RyaW5n LA0KPiArICogc3VjaCBhcyAnLionIGFyZSBhbGxvd2VkLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRl X3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLCBzdHJ1Y3QNCj4gcnRlX3JlZ2V4X3J1bGU6OnJ1 bGVfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JVTEVfQU5D SE9SRURfRiAoMVVMTCA8PCAxKQ0KPiArLyoqPCBXaGVuIHRoaXMgZmxhZyBpcyBzZXQsIHRoZSBw YXR0ZXJuIGlzIGZvcmNlZCB0byBiZSAiYW5jaG9yZWQiLCB0aGF0IGlzLCBpdA0KPiArICogaXMg Y29uc3RyYWluZWQgdG8gbWF0Y2ggb25seSBhdCB0aGUgZmlyc3QgbWF0Y2hpbmcgcG9pbnQgaW4g dGhlIHN0cmluZyB0aGF0DQo+ICsgKiBpcyBiZWluZyBzZWFyY2hlZC4gU2ltaWxhciB0byAnXicg YW5kIHJlcHJlc2VudGVkIGJ5IFxBLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9p bmZvOjpydWxlX2ZsYWdzLCBzdHJ1Y3QNCj4gcnRlX3JlZ2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCj4g KyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JVTEVfQ0FTRUxFU1NfRiAoMVVM TCA8PCAyKQ0KPiArLyoqPCBXaGVuIHRoaXMgZmxhZyBpcyBzZXQsIGxldHRlcnMgaW4gdGhlIHBh dHRlcm4gbWF0Y2ggYm90aCB1cHBlciBhbmQNCj4gbG93ZXINCj4gKyAqIGNhc2UgbGV0dGVycyBp biB0aGUgc3ViamVjdC4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVs ZV9mbGFncywgc3RydWN0DQo+IHJ0ZV9yZWdleF9ydWxlOjpydWxlX2ZsYWdzDQo+ICsgKi8NCj4g Kw0KPiArI2RlZmluZSBSVEVfUkVHRVhfUENSRV9SVUxFX0RPVEFMTF9GICgxVUxMIDw8IDMpDQo+ ICsvKio8IFdoZW4gdGhpcyBmbGFnIGlzIHNldCwgYSBkb3QgbWV0YWNoYXJhY3RlciBpbiB0aGUg cGF0dGVybiBtYXRjaGVzIGFueQ0KPiArICogY2hhcmFjdGVyLCBpbmNsdWRpbmcgb25lIHRoYXQg aW5kaWNhdGVzIGEgbmV3bGluZS4NCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5m bzo6cnVsZV9mbGFncywgc3RydWN0DQo+IHJ0ZV9yZWdleF9ydWxlOjpydWxlX2ZsYWdzDQo+ICsg Ki8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfUENSRV9SVUxFX0RVUE5BTUVTX0YgKDFVTEwg PDwgNCkNCj4gKy8qKjwgV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCBuYW1lcyB1c2VkIHRvIGlkZW50 aWZ5IGNhcHR1cmUgZ3JvdXBzIG5lZWQgbm90DQo+IGJlDQo+ICsgKiB1bmlxdWUuDQo+ICsgKiBA c2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KPiBydGVf cmVnZXhfcnVsZTo6cnVsZV9mbGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VY X1BDUkVfUlVMRV9FWFRFTkRFRF9GICgxVUxMIDw8IDUpDQo+ICsvKio8IFdoZW4gdGhpcyBmbGFn IGlzIHNldCwgbW9zdCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuIGFyZQ0K PiArICogdG90YWxseSBpZ25vcmVkIGV4Y2VwdCB3aGVuIGVzY2FwZWQgb3IgaW5zaWRlIGEgY2hh cmFjdGVyIGNsYXNzLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxl X2ZsYWdzLCBzdHJ1Y3QNCj4gcnRlX3JlZ2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCj4gKyAqLw0KPiAr DQo+ICsjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JVTEVfTUFUQ0hfVU5TRVRfQkFDS1JFRl9GICgx VUxMIDw8IDYpDQo+ICsvKio8IFdoZW4gdGhpcyBmbGFnIGlzIHNldCwgYSBiYWNrcmVmZXJlbmNl IHRvIGFuIHVuc2V0IGNhcHR1cmUgZ3JvdXANCj4gbWF0Y2hlcyBhbg0KPiArICogZW1wdHkgc3Ry aW5nLg0KPiArICogQHNlZSBSVEVfUkVHRVhfREVWX1BDUkVfVU5TVVBfRk9SV0FSRF9SRUZFUkVO Q0VTX0YNCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbzo6cnVsZV9mbGFncywg c3RydWN0DQo+IHJ0ZV9yZWdleF9ydWxlOjpydWxlX2ZsYWdzDQo+ICsgKi8NCj4gKw0KPiArI2Rl ZmluZSBSVEVfUkVHRVhfUENSRV9SVUxFX01VTFRJTElORV9GICgxVUxMIDw8IDcpDQo+ICsvKio8 IFdoZW4gdGhpcyBmbGFnICBpcyBzZXQsIHRoZSAnXicgYW5kICckJyBjb25zdHJ1Y3RzIG1hdGNo IGltbWVkaWF0ZWx5DQo+ICsgKiBmb2xsb3dpbmcgb3IgaW1tZWRpYXRlbHkgYmVmb3JlIGludGVy bmFsIG5ld2xpbmVzIGluIHRoZSBzdWJqZWN0IHN0cmluZywNCj4gKyAqIHJlc3BlY3RpdmVseSwg YXMgd2VsbCBhcyBhdCB0aGUgdmVyeSBzdGFydCBhbmQgZW5kLg0KPiArICogQHNlZSBzdHJ1Y3Qg cnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLCBzdHJ1Y3QNCj4gcnRlX3JlZ2V4X3J1bGU6 OnJ1bGVfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JVTEVf Tk9fQVVUT19DQVBUVVJFX0YgKDFVTEwgPDwgOCkNCj4gKy8qKjwgV2hlbiB0aGlzIEZsYWcgaXMg c2V0LCBpdCBkaXNhYmxlcyB0aGUgdXNlIG9mIG51bWJlcmVkIGNhcHR1cmluZw0KPiArICogcGFy ZW50aGVzZXMgaW4gdGhlIHBhdHRlcm4uIFJlZmVyZW5jZXMgdG8gY2FwdHVyZSBncm91cHMNCj4g KGJhY2tyZWZlcmVuY2VzIG9yDQo+ICsgKiByZWN1cnNpb24vc3Vicm91dGluZSBjYWxscykgbWF5 IG9ubHkgcmVmZXIgdG8gbmFtZWQgZ3JvdXBzLCB0aG91Z2ggdGhlDQo+ICsgKiByZWZlcmVuY2Ug Y2FuIGJlIGJ5IG5hbWUgb3IgYnkgbnVtYmVyLg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4 X2Rldl9pbmZvOjpydWxlX2ZsYWdzLCBzdHJ1Y3QNCj4gcnRlX3JlZ2V4X3J1bGU6OnJ1bGVfZmxh Z3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9QQ1JFX1JVTEVfVUNQX0YgKDFV TEwgPDwgOSkNCj4gKy8qKjwgQnkgZGVmYXVsdCwgb25seSBBU0NJSSBjaGFyYWN0ZXJzIGFyZSBy ZWNvZ25pemVkLCBXaGVuIHRoaXMgZmxhZyBpcyBzZXQsDQo+ICsgKiBVbmljb2RlIHByb3BlcnRp ZXMgYXJlIHVzZWQgaW5zdGVhZCB0byBjbGFzc2lmeSBjaGFyYWN0ZXJzLg0KPiArICogQHNlZSBz dHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLCBzdHJ1Y3QNCj4gcnRlX3JlZ2V4 X3J1bGU6OnJ1bGVfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9QQ1JF X1JVTEVfVU5HUkVFRFlfRiAoMVVMTCA8PCAxMCkNCj4gKy8qKjwgV2hlbiB0aGlzIGZsYWcgaXMg c2V0LCB0aGUgImdyZWVkaW5lc3MiIG9mIHRoZSBxdWFudGlmaWVycyBpcyBpbnZlcnRlZA0KPiAr ICogc28gdGhhdCB0aGV5IGFyZSBub3QgZ3JlZWR5IGJ5IGRlZmF1bHQsIGJ1dCBiZWNvbWUgZ3Jl ZWR5IGlmIGZvbGxvd2VkIGJ5DQo+ICsgKiAnPycuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVn ZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KPiBydGVfcmVnZXhfcnVsZTo6cnVsZV9m bGFncw0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX1BDUkVfUlVMRV9VVEZfRiAo MVVMTCA8PCAxMSkNCj4gKy8qKjwgV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCBSZWdFeCBlbmdpbmUg aGFzIHRvIHJlZ2FyZCBib3RoIHRoZSBwYXR0ZXJuIGFuZA0KPiB0aGUNCj4gKyAqIHN1YmplY3Qg c3RyaW5ncyB0aGF0IGFyZSBzdWJzZXF1ZW50bHkgcHJvY2Vzc2VkIGFzIHN0cmluZ3Mgb2YgVVRG DQo+IGNoYXJhY3RlcnMNCj4gKyAqIGluc3RlYWQgb2Ygc2luZ2xlLWNvZGUtdW5pdCBzdHJpbmdz Lg0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLCBzdHJ1 Y3QNCj4gcnRlX3JlZ2V4X3J1bGU6OnJ1bGVfZmxhZ3MNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5l IFJURV9SRUdFWF9QQ1JFX1JVTEVfTkVWRVJfQkFDS1NMQVNIX0NfRiAoMVVMTCA8PCAxMikNCj4g Ky8qKjwgVGhpcyBGbGFnIGxvY2tzIG91dCB0aGUgdXNlIG9mICdcQycgaW4gdGhlIHBhdHRlcm4g dGhhdCBpcyBiZWluZyBjb21waWxlZC4NCj4gKyAqIFRoaXMgZXNjYXBlIG1hdGNoZXMgb25lIGRh dGEgdW5pdCwgZXZlbiBpbiBVVEYgbW9kZSB3aGljaCBjYW4gY2F1c2UNCj4gKyAqIHVucHJlZGlj dGFibGUgYmVoYXZpb3IgaW4gVVRGLTggb3IgVVRGLTE2IG1vZGVzLCBiZWNhdXNlIGl0IG1heSBs ZWF2ZQ0KPiB0aGUNCj4gKyAqIGN1cnJlbnQgbWF0Y2hpbmcgcG9pbnQgaW4gdGhlIG1pZGRsZSBv ZiBhIG11bHRpLWNvZGUtdW5pdCBjaGFyYWN0ZXIuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVn ZXhfZGV2X2luZm86OnJ1bGVfZmxhZ3MsIHN0cnVjdA0KPiBydGVfcmVnZXhfcnVsZTo6cnVsZV9m bGFncw0KPiArICovDQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgKiBSZWdFeCBkZXZpY2UgaW5mb3Jt YXRpb24NCj4gKyAqLw0KPiArc3RydWN0IHJ0ZV9yZWdleF9kZXZfaW5mbyB7DQo+ICsJY29uc3Qg Y2hhciAqZHJpdmVyX25hbWU7IC8qKjwgUmVnRXggZHJpdmVyIG5hbWUgKi8NCj4gKwlzdHJ1Y3Qg cnRlX2RldmljZSAqZGV2OwkvKio8IERldmljZSBpbmZvcm1hdGlvbiAqLw0KPiArCXVpbnQ4X3Qg bWF4X21hdGNoZXM7DQo+ICsJLyoqPCBNYXhpbXVtIG1hdGNoZXMgcGVyIHNjYW4gc3VwcG9ydGVk IGJ5IHRoaXMgZGV2aWNlICovDQo+ICsJdWludDE2X3QgbWF4X3F1ZXVlX3BhaXJzOw0KPiArCS8q KjwgTWF4aW11bSBxdWV1ZSBwYWlycyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UgKi8NCj4gKwl1 aW50MTZfdCBtYXhfcGF5bG9hZF9zaXplOw0KPiArCS8qKjwgTWF4aW11bSBwYXlsb2FkIHNpemUg Zm9yIGEgcGF0dGVybiBtYXRjaCByZXF1ZXN0IG9yIHNjYW4uDQo+ICsJICogQHNlZSBSVEVfUkVH RVhfREVWX0NGR19DUk9TU19CVUZGRVJfU0NBTl9GDQo+ICsJICovDQo+ICsJdWludDE2X3QgbWF4 X3J1bGVzX3Blcl9ncm91cDsNCj4gKwkvKio8IE1heGltdW0gcnVsZXMgc3VwcG9ydGVkIHBlciBn cm91cCBieSB0aGlzIGRldmljZSAqLw0KPiArCXVpbnQxNl90IG1heF9ncm91cHM7DQo+ICsJLyoq PCBNYXhpbXVtIGdyb3VwIHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSAqLw0KPiArCXVpbnQzMl90 IHJlZ2V4X2Rldl9jYXBhOw0KPiArCS8qKjwgUmVnRXggZGV2aWNlIGNhcGFiaWxpdGllcy4gQHNl ZSBSVEVfUkVHRVhfREVWX0NBUEFfKiAqLw0KPiArCXVpbnQ2NF90IHJ1bGVfZmxhZ3M7DQo+ICsJ LyoqPCBTdXBwb3J0ZWQgY29tcGlsZXIgcnVsZSBmbGFncy4NCj4gKwkgKiBAc2VlIFJURV9SRUdF WF9QQ1JFX1JVTEVfKiwgc3RydWN0IHJ0ZV9yZWdleF9ydWxlOjpydWxlX2ZsYWdzDQo+ICsJICov DQo+ICsJdWludDY0X3QgcGNyZV91bnN1cF9mbGFnczsNCj4gKwkvKio8IFVuc3VwcG9ydGVkIFBD UkUgZmVhdHVyZXMgZm9yIHRoaXMgUmVnRXggZGV2aWNlLg0KPiArCSAqIEBzZWUgUlRFX1JFR0VY X0RFVl9QQ1JFX1VOU1VQXyoNCj4gKwkgKi8NCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogUmV0 cmlldmUgdGhlIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gb2YgYSBSZWdFeCBkZXZpY2UuDQo+ICsg Kg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGV2 aWNlLg0KPiArICoNCj4gKyAqIEBwYXJhbVtvdXRdIGRldl9pbmZvDQo+ICsgKiAgIEEgcG9pbnRl ciB0byBhIHN0cnVjdHVyZSBvZiB0eXBlICpydGVfcmVnZXhfZGV2X2luZm8qIHRvIGJlIGZpbGxl ZCB3aXRoDQo+IHRoZQ0KPiArICogICBjb250ZXh0dWFsIGluZm9ybWF0aW9uIG9mIHRoZSBkZXZp Y2UuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogICAtIDA6IFN1Y2Nlc3MsIGRyaXZlciB1 cGRhdGVzIHRoZSBjb250ZXh0dWFsIGluZm9ybWF0aW9uIG9mIHRoZSBSZWdFeA0KPiBkZXZpY2UN Cj4gKyAqICAgLSA8MDogRXJyb3IgY29kZSByZXR1cm5lZCBieSB0aGUgZHJpdmVyIGluZm8gZ2V0 IGZ1bmN0aW9uLg0KPiArICoNCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfZGV2X2luZm9f Z2V0KHVpbnQ4X3QgZGV2X2lkLCBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvDQo+ICpkZXZfaW5m byk7DQo+ICsNCj4gKy8qIEVudW1lcmF0ZXMgUmVnRXggZGV2aWNlIGNvbmZpZ3VyYXRpb24gZmxh Z3MgKi8NCj4gKyNkZWZpbmUgUlRFX1JFR0VYX0RFVl9DRkdfQ1JPU1NfQlVGRkVSX1NDQU5fRiAo MVVMTCA8PCAwKQ0KPiArLyoqPCBDcm9zcyBidWZmZXIgc2NhbiByZWZlcnMgdG8gdGhlIGFiaWxp dHkgdG8gYmUgYWJsZSB0byBkZXRlY3QNCj4gKyAqIG1hdGNoZXMgdGhhdCBvY2N1ciBhY3Jvc3Mg YnVmZmVyIGJvdW5kYXJpZXMsIHdoZXJlIHRoZSBidWZmZXJzIGFyZQ0KPiByZWxhdGVkDQo+ICsg KiB0byBlYWNoIG90aGVyIGluIHNvbWUgd2F5LiBFbmFibGUgdGhpcyBmbGFnIHdoZW4gdG8gc2Nh biBwYXlsb2FkIHNpemUNCj4gKyAqIGdyZWF0ZXIgc3RydWN0IHN0cnVjdCBydGVfcmVnZXhfZGV2 X2luZm86Om1heF9wYXlsb2FkX3NpemUgYW5kL29yDQo+ICsgKiBtYXRjaGVzIGNhbiBwcmVzZW50 IGFjcm9zcyBzY2FuIGJ1ZmZlciBib3VuZGFyaWVzLg0KPiArICoNCj4gKyAqIEBzZWUgc3RydWN0 IHJ0ZV9yZWdleF9kZXZfaW5mbzo6bWF4X3BheWxvYWRfc2l6ZQ0KPiArICogQHNlZSBzdHJ1Y3Qg cnRlX3JlZ2V4X2Rldl9jb25maWc6OmRldl9jZmdfZmxhZ3MsDQo+IHJ0ZV9yZWdleF9kZXZfY29u ZmlndXJlKCkNCj4gKyAqIEBzZWUgUlRFX1JFR0VYX09QU19SU1BfUE1JX1NPSl9GDQo+ICsgKiBA c2VlIFJURV9SRUdFWF9PUFNfUlNQX1BNSV9FT0pfRg0KPiArICovDQo+ICsNCj4gKy8qKiBSZWdF eCBkZXZpY2UgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8NCj4gK3N0cnVjdCBydGVfcmVnZXhf ZGV2X2NvbmZpZyB7DQo+ICsJdWludDhfdCBuYl9tYXhfbWF0Y2hlczsNCj4gKwkvKio8IE1heGlt dW0gbWF0Y2hlcyBwZXIgc2NhbiBjb25maWd1cmVkIG9uIHRoaXMgZGV2aWNlLg0KPiArCSAqIFRo aXMgdmFsdWUgY2Fubm90IGV4Y2VlZCB0aGUgKm1heF9tYXRjaGVzKg0KPiArCSAqIHdoaWNoIHBy ZXZpb3VzbHkgcHJvdmlkZWQgaW4gcnRlX3JlZ2V4X2Rldl9pbmZvX2dldCgpLg0KPiArCSAqIFRo ZSB2YWx1ZSAwIGlzIGFsbG93ZWQsIGluIHdoaWNoIGNhc2UsIHZhbHVlIDEgdXNlZC4NCj4gKwkg KiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86Om1heF9tYXRjaGVzDQo+ICsJICovDQo+ ICsJdWludDE2X3QgbmJfcXVldWVfcGFpcnM7DQo+ICsJLyoqPCBOdW1iZXIgb2YgUmVnRXggcXVl dWUgcGFpcnMgdG8gY29uZmlndXJlIG9uIHRoaXMgZGV2aWNlLg0KPiArCSAqIFRoaXMgdmFsdWUg Y2Fubm90IGV4Y2VlZCB0aGUgKm1heF9xdWV1ZV9wYWlycyogd2hpY2gNCj4gcHJldmlvdXNseQ0K PiArCSAqIHByb3ZpZGVkIGluIHJ0ZV9yZWdleF9kZXZfaW5mb19nZXQoKS4NCj4gKwkgKiBAc2Vl IHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86Om1heF9xdWV1ZV9wYWlycw0KPiArCSAqLw0KPiAr CXVpbnQxNl90IG5iX3J1bGVzX3Blcl9ncm91cDsNCj4gKwkvKio8IE51bWJlciBvZiBydWxlcyBw ZXIgZ3JvdXAgdG8gY29uZmlndXJlIG9uIHRoaXMgZGV2aWNlLg0KPiArCSAqIFRoaXMgdmFsdWUg Y2Fubm90IGV4Y2VlZCB0aGUgKm1heF9ydWxlc19wZXJfZ3JvdXAqDQo+ICsJICogd2hpY2ggcHJl dmlvdXNseSBwcm92aWRlZCBpbiBydGVfcmVnZXhfZGV2X2luZm9fZ2V0KCkuDQo+ICsJICogVGhl IHZhbHVlIDAgaXMgYWxsb3dlZCwgaW4gd2hpY2ggY2FzZSwNCj4gKwkgKiBzdHJ1Y3QgcnRlX3Jl Z2V4X2Rldl9pbmZvOjptYXhfcnVsZXNfcGVyX2dyb3VwIHVzZWQuDQo+ICsJICogQHNlZSBzdHJ1 Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjptYXhfcnVsZXNfcGVyX2dyb3VwDQo+ICsJICovDQo+ICsJ dWludDE2X3QgbmJfZ3JvdXBzOw0KPiArCS8qKjwgTnVtYmVyIG9mIGdyb3VwcyB0byBjb25maWd1 cmUgb24gdGhpcyBkZXZpY2UuDQo+ICsJICogVGhpcyB2YWx1ZSBjYW5ub3QgZXhjZWVkIHRoZSAq bWF4X2dyb3VwcyoNCj4gKwkgKiB3aGljaCBwcmV2aW91c2x5IHByb3ZpZGVkIGluIHJ0ZV9yZWdl eF9kZXZfaW5mb19nZXQoKS4NCj4gKwkgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfZGV2X2luZm86 Om1heF9ncm91cHMNCj4gKwkgKi8NCj4gKwljb25zdCBjaGFyICpydWxlX2RiOw0KPiArCS8qKjwg SW1wb3J0IGluaXRpYWwgc2V0IG9mIHByZWJ1aWx0IHJ1bGUgZGF0YWJhc2Ugb24gdGhpcyBkZXZp Y2UuDQo+ICsJICogVGhlIHZhbHVlIE5VTEwgaXMgYWxsb3dlZCwgaW4gd2hpY2ggY2FzZSwgdGhl IGRldmljZSB3aWxsIG5vdA0KPiArCSAqIGJlIGNvbmZpZ3VyZWQgcHJlYnVpbHQgcnVsZSBkYXRh YmFzZS4gQXBwbGljYXRpb24gbWF5IHVzZQ0KPiArCSAqIHJ0ZV9yZWdleF9ydWxlX2RiX3VwZGF0 ZSgpIG9yIHJ0ZV9yZWdleF9ydWxlX2RiX2ltcG9ydCgpIEFQSQ0KPiArCSAqIHRvIHVwZGF0ZSBv ciBpbXBvcnQgcnVsZSBkYXRhYmFzZSBhZnRlciB0aGUNCj4gKwkgKiBydGVfcmVnZXhfZGV2X2Nv bmZpZ3VyZSgpLg0KPiArCSAqIEBzZWUgcnRlX3JlZ2V4X3J1bGVfZGJfdXBkYXRlKCksIHJ0ZV9y ZWdleF9ydWxlX2RiX2ltcG9ydCgpDQo+ICsJICovDQo+ICsJdWludDMyX3QgcnVsZV9kYl9sZW47 DQo+ICsJLyoqPCBMZW5ndGggb2YgKnJ1bGVfZGIqIGJ1ZmZlci4gKi8NCj4gKwl1aW50MzJfdCBk ZXZfY2ZnX2ZsYWdzOw0KPiArCS8qKjwgUmVnRXggZGV2aWNlIGNvbmZpZ3VyYXRpb24gZmxhZ3Ms IFNlZSBSVEVfUkVHRVhfREVWX0NGR18qDQo+ICovDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAq IENvbmZpZ3VyZSBhIFJlZ0V4IGRldmljZS4NCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIG11 c3QgYmUgaW52b2tlZCBmaXJzdCBiZWZvcmUgYW55IG90aGVyIGZ1bmN0aW9uIGluIHRoZQ0KPiAr ICogQVBJLiBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHJlLWludm9rZWQgd2hlbiBhIGRldmlj ZSBpcyBpbiB0aGUNCj4gKyAqIHN0b3BwZWQgc3RhdGUuDQo+ICsgKg0KPiArICogVGhlIGNhbGxl ciBtYXkgdXNlIHJ0ZV9yZWdleF9kZXZfaW5mb19nZXQoKSB0byBnZXQgdGhlIGNhcGFiaWxpdHkg b2YgZWFjaA0KPiArICogcmVzb3VyY2VzIGF2YWlsYWJsZSBmb3IgdGhpcyByZWdleCBkZXZpY2Uu DQo+ICsgKg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgaWRlbnRpZmllciBvZiB0 aGUgZGV2aWNlIHRvIGNvbmZpZ3VyZS4NCj4gKyAqIEBwYXJhbSBjZmcNCj4gKyAqICAgVGhlIFJl Z0V4IGRldmljZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJu DQo+ICsgKiAgIC0gMDogU3VjY2VzcywgZGV2aWNlIGNvbmZpZ3VyZWQuDQo+ICsgKiAgIC0gPDA6 IEVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIGRyaXZlciBjb25maWd1cmF0aW9uIGZ1bmN0aW9u Lg0KPiArICovDQo+ICtpbnQNCj4gK3J0ZV9yZWdleF9kZXZfY29uZmlndXJlKHVpbnQ4X3QgZGV2 X2lkLCBjb25zdCBzdHJ1Y3QNCj4gcnRlX3JlZ2V4X2Rldl9jb25maWcgKmNmZyk7DQo+ICsNCj4g Ky8qIEVudW1lcmF0ZXMgUmVnRXggcXVldWUgcGFpciBjb25maWd1cmF0aW9uIGZsYWdzICovDQo+ ICsjZGVmaW5lIFJURV9SRUdFWF9RVUVVRV9QQUlSX0NGR19PT1NfRiAoMVVMTCA8PCAwKQ0KPiAr LyoqPCBPdXQgb2Ygb3JkZXIgc2NhbiwgSWYgbm90IHNldCwgYSBzY2FuIG11c3QgcmV0aXJlIGFm dGVyIHByZXZpb3VzbHkgaXNzdWVkDQo+ICsgKiBpbi1vcmRlciBzY2FucyB0byB0aGlzIHF1ZXVl IHBhaXIuIElmIHNldCwgdGhpcyBzY2FuIGNhbiBiZSByZXRpcmVkIGFzIHNvb24NCj4gKyAqIGFz IGRldmljZSByZXR1cm5zIGNvbXBsZXRpb24uIEFwcGxpY2F0aW9uIHNob3VsZCBub3Qgc2V0IG91 dCBvZiBvcmRlciBzY2FuDQo+ICsgKiBmbGFnIGlmIGl0IG5lZWRzIHRvIG1haW50YWluIHRoZSBp bmdyZXNzIG9yZGVyIG9mIHNjYW4gcmVxdWVzdC4NCj4gKyAqDQo+ICsgKiBAc2VlIHN0cnVjdCBy dGVfcmVnZXhfcXBfY29uZjo6cXBfY29uZl9mbGFncywNCj4gcnRlX3JlZ2V4X3F1ZXVlX3BhaXJf c2V0dXAoKQ0KPiArICovDQo+ICsNCj4gK3N0cnVjdCBydGVfcmVnZXhfb3BzOw0KPiArdHlwZWRl ZiB2b2lkICgqcmVnZXhkZXZfc3RvcF9mbHVzaF90KSh1aW50OF90IGRldl9pZCwgdWludDE2X3Qg cXBfaWQsDQo+ICsJCQkJICAgICAgc3RydWN0IHJ0ZV9yZWdleF9vcHMgKm9wKTsNCj4gKy8qKjwg Q2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGR1cmluZyBydGVfcmVnZXhfZGV2X3N0b3AoKSwgaW52 b2tlZCBvbmNlDQo+IHBlcg0KPiArICogZmx1c2hlZCBSZWdFeCBvcC4NCj4gKyAqLw0KPiArDQo+ ICsvKiogUmVnRXggcXVldWUgcGFpciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLw0KPiArc3Ry dWN0IHJ0ZV9yZWdleF9xcF9jb25mIHsNCj4gKwl1aW50MzJfdCBxcF9jb25mX2ZsYWdzOw0KPiAr CS8qKjwgUXVldWUgcGFpciBjb25maWcgZmxhZ3MsIFNlZSBSVEVfUkVHRVhfUVVFVUVfUEFJUl9D RkdfKg0KPiAqLw0KPiArCXVpbnQxNl90IG5iX2Rlc2M7DQo+ICsJLyoqPCBUaGUgbnVtYmVyIG9m IGRlc2NyaXB0b3JzIHRvIGFsbG9jYXRlIGZvciB0aGlzIHF1ZXVlIHBhaXIuICovDQo+ICsJcmVn ZXhkZXZfc3RvcF9mbHVzaF90IGNiOw0KPiArCS8qKjwgQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVk IGR1cmluZyBydGVfcmVnZXhfZGV2X3N0b3AoKSwgaW52b2tlZA0KPiArCSAqIG9uY2UgcGVyIGZs dXNoZWQgcmVnZXggb3AuIFZhbHVlIE5VTEwgaXMgYWxsb3dlZCwgaW4gd2hpY2ggY2FzZQ0KPiAr CSAqIGNhbGxiYWNrIHdpbGwgbm90IGJlIGludm9rZWQuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVz ZWQgdG8gcHJvcGVybHkNCj4gKwkgKiBkaXNwb3NlIG9mIG91dHN0YW5kaW5nIHJlZ2V4IG9wcyBm cm9tIHJlc3BvbnNlIHF1ZXVlLA0KPiArCSAqIGZvciBleGFtcGxlIG9wcyBjb250YWluaW5nIG1l bW9yeSBwb2ludGVycy4NCj4gKwkgKiBAc2VlIHJ0ZV9yZWdleF9kZXZfc3RvcCgpDQo+ICsJICov DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIEFsbG9jYXRlIGFuZCBzZXQgdXAgYSBSZWdFeCBx dWV1ZSBwYWlyIGZvciBhIFJlZ0V4IGRldmljZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZGV2X2lk DQo+ICsgKiAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXZpY2UuDQo+ICsgKiBAcGFyYW0gcXVl dWVfcGFpcl9pZA0KPiArICogICBUaGUgaW5kZXggb2YgdGhlIFJlZ0V4IHF1ZXVlIHBhaXIgdG8g c2V0dXAuIFRoZSB2YWx1ZSBtdXN0IGJlIGluIHRoZQ0KPiByYW5nZQ0KPiArICogICBbMCwgbmJf cXVldWVfcGFpcnMgLSAxXSBwcmV2aW91c2x5IHN1cHBsaWVkIHRvDQo+IHJ0ZV9yZWdleF9kZXZf Y29uZmlndXJlKCkuDQo+ICsgKiBAcGFyYW0gcXBfY29uZg0KPiArICogICBUaGUgcG9pbnRlciB0 byB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBSZWdFeCBxdWV1ZQ0K PiBwYWlyLg0KPiArICogICBOVUxMIHZhbHVlIGlzIGFsbG93ZWQsIGluIHdoaWNoIGNhc2UgZGVm YXVsdCBjb25maWd1cmF0aW9uCXVzZWQuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogICAt IDA6IFN1Y2Nlc3MsIFJlZ0V4IHF1ZXVlIHBhaXIgY29ycmVjdGx5IHNldCB1cC4NCj4gKyAqICAg LSA8MDogUmVnRXggcXVldWUgY29uZmlndXJhdGlvbiBmYWlsZWQNCj4gKyAqLw0KPiAraW50DQo+ ICtydGVfcmVnZXhfcXVldWVfcGFpcl9zZXR1cCh1aW50OF90IGRldl9pZCwgdWludDhfdCBxdWV1 ZV9wYWlyX2lkLA0KPiArCQkJICAgY29uc3Qgc3RydWN0IHJ0ZV9yZWdleF9xcF9jb25mICpxcF9j b25mKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBTdGFydCBhIFJlZ0V4IGRldmljZS4NCj4gKyAqDQo+ ICsgKiBUaGUgZGV2aWNlIHN0YXJ0IHN0ZXAgaXMgdGhlIGxhc3Qgb25lIGFuZCBjb25zaXN0cyBv ZiBzZXR0aW5nIHRoZSBSZWdFeA0KPiArICogcXVldWVzIHRvIHN0YXJ0IGFjY2VwdGluZyB0aGUg cGF0dGVybiBtYXRjaGluZyBzY2FuIHJlcXVlc3RzLg0KPiArICoNCj4gKyAqIE9uIHN1Y2Nlc3Ms IGFsbCBiYXNpYyBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhlIEFQSSAoUmVnRXggZW5xdWV1ZSwN Cj4gKyAqIFJlZ0V4IGRlcXVldWUgYW5kIHNvIG9uKSBjYW4gYmUgaW52b2tlZC4NCj4gKyAqDQo+ ICsgKiBAcGFyYW0gZGV2X2lkDQo+ICsgKiAgIFJlZ0V4IGRldmljZSBpZGVudGlmaWVyDQo+ICsg KiBAcmV0dXJuDQo+ICsgKiAgIC0gMDogU3VjY2VzcywgZGV2aWNlIHN0YXJ0ZWQuDQo+ICsgKiAg IC0gPDA6IERldmljZSBzdGFydCBmYWlsZWQuDQo+ICsgKi8NCj4gK2ludA0KPiArcnRlX3JlZ2V4 X2Rldl9zdGFydCh1aW50OF90IGRldl9pZCk7DQo+ICsNCj4gKy8qKg0KPiArICogU3RvcCBhIFJl Z0V4IGRldmljZS4NCj4gKyAqDQo+ICsgKiBTdG9wIGEgUmVnRXggZGV2aWNlLiBUaGUgZGV2aWNl IGNhbiBiZSByZXN0YXJ0ZWQgd2l0aCBhIGNhbGwgdG8NCj4gKyAqIHJ0ZV9yZWdleF9kZXZfc3Rh cnQoKS4NCj4gKyAqDQo+ICsgKiBUaGlzIGZ1bmN0aW9uIGNhdXNlcyBhbGwgcXVldWVkIHJlc3Bv bnNlIHJlZ2V4IG9wcyB0byBiZSBkcmFpbmVkIGluIHRoZQ0KPiArICogcmVzcG9uc2UgcXVldWUu IFdoaWxlIGRyYWluaW5nIG9wcyBvdXQgb2YgdGhlIGRldmljZSwNCj4gKyAqIHN0cnVjdCBydGVf cmVnZXhfcXBfY29uZjo6Y2Igd2lsbCBiZSBpbnZva2VkIGZvciBlYWNoIG9wcy4NCj4gKyAqDQo+ ICsgKiBAcGFyYW0gZGV2X2lkDQo+ICsgKiAgIFJlZ0V4IGRldmljZSBpZGVudGlmaWVyLg0KPiAr ICoNCj4gKyAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9xcF9jb25mOjpjYiwgcnRlX3JlZ2V4X3F1 ZXVlX3BhaXJfc2V0dXAoKQ0KPiArICovDQo+ICt2b2lkDQo+ICtydGVfcmVnZXhfZGV2X3N0b3Ao dWludDhfdCBkZXZfaWQpOw0KPiArDQo+ICsvKioNCj4gKyAqIENsb3NlIGEgUmVnRXggZGV2aWNl LiBUaGUgZGV2aWNlIGNhbm5vdCBiZSByZXN0YXJ0ZWQhDQo+ICsgKg0KPiArICogQHBhcmFtIGRl dl9pZA0KPiArICogICBSZWdFeCBkZXZpY2UgaWRlbnRpZmllcg0KPiArICoNCj4gKyAqIEByZXR1 cm4NCj4gKyAqICAtIDAgb24gc3VjY2Vzc2Z1bGx5IGNsb3NlZCB0aGUgZGV2aWNlLg0KPiArICog IC0gPDAgb24gZmFpbHVyZSB0byBjbG9zZSB0aGUgZGV2aWNlLg0KPiArICovDQo+ICtpbnQNCj4g K3J0ZV9yZWdleF9kZXZfY2xvc2UodWludDhfdCBkZXZfaWQpOw0KPiArDQo+ICsvKiBEZXZpY2Ug Z2V0L3NldCBhdHRyaWJ1dGVzICovDQo+ICsNCj4gKy8qKiBFbnVtZXJhdGVzIFJlZ0V4IGRldmlj ZSBhdHRyaWJ1dGUgaWRlbnRpZmllciAqLw0KPiArZW51bSBydGVfcmVnZXhfZGV2X2F0dHJfaWQg ew0KPiArCVJURV9SRUdFWF9ERVZfQVRUUl9TT0NLRVRfSUQsDQo+ICsJLyoqPCBUaGUgTlVNQSBz b2NrZXQgaWQgdG8gd2hpY2ggdGhlIGRldmljZSBpcyBjb25uZWN0ZWQgb3INCj4gKwkgKiBhIGRl ZmF1bHQgb2YgemVybyBpZiB0aGUgc29ja2V0IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLg0KPiAr CSAqIGRhdGF0eXBlOiAqaW50Kg0KPiArCSAqIG9wZXJhdGlvbjogKmdldCoNCj4gKwkgKi8NCj4g KwlSVEVfUkVHRVhfREVWX0FUVFJfTUFYX01BVENIRVMsDQo+ICsJLyoqPCBNYXhpbXVtIG51bWJl ciBvZiBtYXRjaGVzIHBlciBzY2FuLg0KPiArCSAqIGRhdGF0eXBlOiAqdWludDhfdCoNCj4gKwkg KiBvcGVyYXRpb246ICpnZXQqIGFuZCAqc2V0Kg0KPiArCSAqDQo+ICsJICogQHNlZSBSVEVfUkVH RVhfT1BTX1JTUF9NQVhfTUFUQ0hfRg0KPiArCSAqLw0KPiArCVJURV9SRUdFWF9ERVZfQVRUUl9N QVhfU0NBTl9USU1FT1VULA0KPiArCS8qKjwgVXBwZXIgYm91bmQgc2NhbiB0aW1lIGluIG5zLg0K PiArCSAqIGRhdGF0eXBlOiAqdWludDE2X3QqDQo+ICsJICogb3BlcmF0aW9uOiAqZ2V0KiBhbmQg KnNldCoNCj4gKwkgKg0KPiArCSAqIEBzZWUgUlRFX1JFR0VYX09QU19SU1BfTUFYX1NDQU5fVElN RU9VVF9GDQo+ICsJICovDQo+ICsJUlRFX1JFR0VYX0RFVl9BVFRSX01BWF9QUkVGSVgsDQo+ICsJ LyoqPCBNYXhpbXVtIG51bWJlciBvZiBwcmVmaXggZGV0ZWN0ZWQgcGVyIHNjYW4uDQo+ICsJICog VGhpcyB3b3VsZCBiZSB1c2VmdWwgZm9yIGRlbmlhbCBvZiBzZXJ2aWNlIGRldGVjdGlvbi4NCj4g KwkgKiBkYXRhdHlwZTogKnVpbnQxNl90Kg0KPiArCSAqIG9wZXJhdGlvbjogKmdldCogYW5kICpz ZXQqDQo+ICsJICoNCj4gKwkgKiBAc2VlIFJURV9SRUdFWF9PUFNfUlNQX01BWF9QUkVGSVhfRg0K PiArCSAqLw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBHZXQgYW4gYXR0cmlidXRlIGZyb20g YSBSZWdFeCBkZXZpY2UuDQo+ICsgKg0KPiArICogQHBhcmFtIGRldl9pZCBSZWdFeCBkZXZpY2Ug aWRlbnRpZmllcg0KPiArICogQHBhcmFtIGF0dHJfaWQgVGhlIGF0dHJpYnV0ZSBJRCB0byByZXRy aWV2ZQ0KPiArICogQHBhcmFtW291dF0gYXR0cl92YWx1ZSBBIHBvaW50ZXIgdGhhdCB3aWxsIGJl IGZpbGxlZCBpbiB3aXRoIHRoZSBhdHRyaWJ1dGUNCj4gKyAqICAgICAgICAgICAgIHZhbHVlIGlm IHN1Y2Nlc3NmdWwuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogICAtIDA6IFN1Y2Nlc3Nm dWxseSByZXRyaWV2ZWQgYXR0cmlidXRlIHZhbHVlLg0KPiArICogICAtIC1FSU5WQUw6IEludmFs aWQgZGV2aWNlIG9yICAqYXR0cl9pZCogcHJvdmlkZWQsIG9yICphdHRyX3ZhbHVlKiBpcyBOVUxM Lg0KPiArICogICAtIC1FTk9UU1VQOiBpZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBzcGVj aWZpYyAqYXR0cl9pZCouDQo+ICsgKi8NCj4gK2ludA0KPiArcnRlX3JlZ2V4X2Rldl9hdHRyX2dl dCh1aW50OF90IGRldl9pZCwgZW51bSBydGVfcmVnZXhfZGV2X2F0dHJfaWQNCj4gYXR0cl9pZCwN Cj4gKwkJICAgICAgIHZvaWQgKmF0dHJfdmFsdWUpOw0KPiArDQo+ICsvKioNCj4gKyAqIFNldCBh biBhdHRyaWJ1dGUgdG8gYSBSZWdFeCBkZXZpY2UuDQo+ICsgKg0KPiArICogQHBhcmFtIGRldl9p ZCBSZWdFeCBkZXZpY2UgaWRlbnRpZmllcg0KPiArICogQHBhcmFtIGF0dHJfaWQgVGhlIGF0dHJp YnV0ZSBJRCB0byByZXRyaWV2ZQ0KPiArICogQHBhcmFtIGF0dHJfdmFsdWUgQSBwb2ludGVyIHRo YXQgd2lsbCBiZSBmaWxsZWQgaW4gd2l0aCB0aGUgYXR0cmlidXRlIHZhbHVlDQo+ICsgKiAgICAg ICAgICAgICAgICAgICBieSB0aGUgYXBwbGljYXRpb24NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ ICsgKiAgIC0gMDogU3VjY2Vzc2Z1bGx5IGFwcGxpZWQgdGhlIGF0dHJpYnV0ZSB2YWx1ZS4NCj4g KyAqICAgLSAtRUlOVkFMOiBJbnZhbGlkIGRldmljZSBvciAgKmF0dHJfaWQqIHByb3ZpZGVkLCBv ciAqYXR0cl92YWx1ZSogaXMgTlVMTC4NCj4gKyAqICAgLSAtRU5PVFNVUDogaWYgdGhlIGRldmlj ZSBkb2Vzbid0IHN1cHBvcnQgc3BlY2lmaWMgKmF0dHJfaWQqLg0KPiArICovDQo+ICtpbnQNCj4g K3J0ZV9yZWdleF9kZXZfYXR0cl9zZXQodWludDhfdCBkZXZfaWQsIGVudW0gcnRlX3JlZ2V4X2Rl dl9hdHRyX2lkDQo+IGF0dHJfaWQsDQo+ICsJCSAgICAgICBjb25zdCB2b2lkICphdHRyX3ZhbHVl KTsNCj4gKw0KPiArLyogUnVsZSByZWxhdGVkIEFQSXMgKi8NCj4gKy8qKiBFbnVtZXJhdGVzIFJl Z0V4IHJ1bGUgb3BlcmF0aW9uICovDQo+ICtlbnVtIHJ0ZV9yZWdleF9ydWxlX29wIHsNCj4gKwlS VEVfUkVHRVhfUlVMRV9PUF9BREQsDQo+ICsJLyoqPCBBZGQgUmVnRXggcnVsZSB0byBydWxlIGRh dGFiYXNlICovDQo+ICsJUlRFX1JFR0VYX1JVTEVfT1BfUkVNT1ZFDQo+ICsJLyoqPCBSZW1vdmUg UmVnRXggcnVsZSBmcm9tIHJ1bGUgZGF0YWJhc2UgKi8NCj4gK307DQo+ICsNCj4gKy8qKiBTdHJ1 Y3R1cmUgdG8gaG9sZCBhIFJlZ0V4IHJ1bGUgYXR0cmlidXRlcyAqLw0KPiArc3RydWN0IHJ0ZV9y ZWdleF9ydWxlIHsNCj4gKwllbnVtIHJ0ZV9yZWdleF9ydWxlX29wIG9wOw0KPiArCS8qKjwgT1Ag dHlwZSBvZiB0aGUgcnVsZSBlaXRoZXIgYSBPUF9BREQgb3IgT1BfREVMRVRFICovDQo+ICsJdWlu dDE2X3QgZ3JvdXBfaWQ7DQo+ICsJLyoqPCBHcm91cCBpZGVudGlmaWVyIHRvIHdoaWNoIHRoZSBy dWxlIGJlbG9uZ3MgdG8uICovDQo+ICsJdWludDMyX3QgcnVsZV9pZDsNCj4gKwkvKio8IFJ1bGUg aWRlbnRpZmllciB3aGljaCBpcyByZXR1cm5lZCBvbiBzdWNjZXNzZnVsIG1hdGNoLiAqLw0KPiAr CWNvbnN0IGNoYXIgKnBjcmVfcnVsZTsNCj4gKwkvKio8IEJ1ZmZlciB0byBob2xkIHRoZSBQQ1JF IHJ1bGUuICovDQo+ICsJdWludDE2X3QgcGNyZV9ydWxlX2xlbjsNCj4gKwkvKio8IExlbmd0aCBv ZiB0aGUgUENSRSBydWxlKi8NCj4gKwl1aW50NjRfdCBydWxlX2ZsYWdzOw0KPiArCS8qIFBDUkUg cnVsZSBmbGFncy4gU3VwcG9ydGVkIGRldmljZSBzcGVjaWZpYyBQQ1JFIHJ1bGVzIGVudW1lcmF0 ZWQNCj4gKwkgKiBpbiBzdHJ1Y3QgcnRlX3JlZ2V4X2Rldl9pbmZvOjpydWxlX2ZsYWdzLiBGb3Ig c3VjY2Vzc2Z1bCBydWxlDQo+ICsJICogZGF0YWJhc2UgdXBkYXRlLCBhcHBsaWNhdGlvbiBuZWVk cyB0byBwcm92aWRlIG9ubHkgc3VwcG9ydGVkDQo+ICsJICogcnVsZSBmbGFncy4NCj4gKwkgKiBA U2VlIFJURV9SRUdFWF9QQ1JFX1JVTEVfKiwgc3RydWN0DQo+IHJ0ZV9yZWdleF9kZXZfaW5mbzo6 cnVsZV9mbGFncw0KPiArCSAqLw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBVcGRhdGUgdGhl IHJ1bGUgZGF0YWJhc2Ugb2YgYSBSZWdFeCBkZXZpY2UuDQo+ICsgKg0KPiArICogQHBhcmFtIGRl dl9pZCBSZWdFeCBkZXZpY2UgaWRlbnRpZmllcg0KPiArICogQHBhcmFtIHJ1bGVzDQo+ICsgKiAg IFBvaW50cyB0byBhbiBhcnJheSBvZiAqbmJfcnVsZXMqIG9iamVjdHMgb2YgdHlwZSAqcnRlX3Jl Z2V4X3J1bGUqDQo+IHN0cnVjdHVyZQ0KPiArICogICB3aGljaCBjb250YWluIHRoZSByZWdleCBy dWxlcyBhdHRyaWJ1dGVzIHRvIGJlIHVwZGF0ZWQgaW4gcnVsZSBkYXRhYmFzZS4NCj4gKyAqIEBw YXJhbSBuYl9ydWxlcw0KPiArICogICBUaGUgbnVtYmVyIG9mIFBDUkUgcnVsZXMgdG8gdXBkYXRl IHRoZSBydWxlIGRhdGFiYXNlLg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgVGhlIG51 bWJlciBvZiByZWdleCBydWxlcyBhY3R1YWxseSB1cGRhdGVkIG9uIHRoZSByZWdleCBkZXZpY2Un cyBydWxlDQo+ICsgKiAgIGRhdGFiYXNlLiBUaGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBsZXNzIHRo YW4gdGhlIHZhbHVlIG9mIHRoZSAqbmJfcnVsZXMqDQo+ICsgKiAgIHBhcmFtZXRlciB3aGVuIHRo ZSByZWdleCBkZXZpY2VzIGZhaWxzIHRvIHVwZGF0ZSB0aGUgcnVsZSBkYXRhYmFzZSBvcg0KPiAr ICogICBpZiBpbnZhbGlkIHBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCBpbiBhICpydGVfcmVnZXhf cnVsZSouDQo+ICsgKiAgIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbGVzcyB0aGFuICpuYl9ydWxl cyosIHRoZSByZW1haW5pbmcgUENSRSBydWxlcw0KPiArICogICBhdCB0aGUgZW5kIG9mICpydWxl cyogYXJlIG5vdCBjb25zdW1lZCBhbmQgdGhlIGNhbGxlciBoYXMgdG8gdGFrZQ0KPiArICogICBj YXJlIG9mIHRoZW0gYW5kIHJ0ZV9lcnJubyBpcyBzZXQgYWNjb3JkaW5nbHkuDQo+ICsgKiAgIFBv c3NpYmxlIGVycm5vIHZhbHVlcyBpbmNsdWRlOg0KPiArICogICAtIC1FSU5WQUw6ICBJbnZhbGlk IGRldmljZSBJRCBvciBydWxlcyBpcyBOVUxMDQo+ICsgKiAgIC0gLUVOT1RTVVA6IFRoZSBsYXN0 IHByb2Nlc3NlZCBydWxlIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UuDQo+ICsgKiAg IC0gLUVOT1NQQzogTm8gc3BhY2UgYXZhaWxhYmxlIGluIHJ1bGUgZGF0YWJhc2UuDQo+ICsgKg0K PiArICogQHNlZSBydGVfcmVnZXhfcnVsZV9kYl9pbXBvcnQoKSwgcnRlX3JlZ2V4X3J1bGVfZGJf ZXhwb3J0KCkNCj4gKyAqLw0KPiArdWludDE2X3QNCj4gK3J0ZV9yZWdleF9ydWxlX2RiX3VwZGF0 ZSh1aW50OF90IGRldl9pZCwgY29uc3Qgc3RydWN0IHJ0ZV9yZWdleF9ydWxlDQo+ICpydWxlcywN Cj4gKwkJCSB1aW50MTZfdCBuYl9ydWxlcyk7DQo+ICsNCj4gKy8qKg0KPiArICogSW1wb3J0IGEg cHJlYnVpbHQgcnVsZSBkYXRhYmFzZSBmcm9tIGEgYnVmZmVyIHRvIGEgUmVnRXggZGV2aWNlLg0K PiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQgUmVnRXggZGV2aWNlIGlkZW50aWZpZXINCj4gKyAq IEBwYXJhbSBydWxlX2RiDQo+ICsgKiAgIFBvaW50cyB0byBwcmVidWlsdCBydWxlIGRhdGFiYXNl Lg0KPiArICogQHBhcmFtIHJ1bGVfZGJfbGVuDQo+ICsgKiAgIExlbmd0aCBvZiB0aGUgcnVsZSBk YXRhYmFzZS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0gMDogU3VjY2Vzc2Z1bGx5 IHVwZGF0ZWQgdGhlIHByZWJ1aWx0IHJ1bGUgZGF0YWJhc2UuDQo+ICsgKiAgIC0gLUVJTlZBTDog IEludmFsaWQgZGV2aWNlIElEIG9yIHJ1bGVfZGIgaXMgTlVMTA0KPiArICogICAtIC1FTk9UU1VQ OiBSdWxlIGRhdGFiYXNlIGltcG9ydCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlLg0K PiArICogICAtIC1FTk9TUEM6IE5vIHNwYWNlIGF2YWlsYWJsZSBpbiBydWxlIGRhdGFiYXNlLg0K PiArICoNCj4gKyAqIEBzZWUgcnRlX3JlZ2V4X3J1bGVfZGJfdXBkYXRlKCksIHJ0ZV9yZWdleF9y dWxlX2RiX2V4cG9ydCgpDQo+ICsgKi8NCj4gK2ludA0KPiArcnRlX3JlZ2V4X3J1bGVfZGJfaW1w b3J0KHVpbnQ4X3QgZGV2X2lkLCBjb25zdCBjaGFyICpydWxlX2RiLA0KPiArCQkJIHVpbnQzMl90 IHJ1bGVfZGJfbGVuKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBFeHBvcnQgdGhlIHByZWJ1aWx0IHJ1 bGUgZGF0YWJhc2UgZnJvbSBhIFJlZ0V4IGRldmljZSB0byB0aGUgYnVmZmVyLg0KPiArICoNCj4g KyAqIEBwYXJhbSBkZXZfaWQgUmVnRXggZGV2aWNlIGlkZW50aWZpZXINCj4gKyAqIEBwYXJhbVtv dXRdIHJ1bGVfZGINCj4gKyAqICAgQmxvY2sgb2YgbWVtb3J5IHRvIGluc2VydCB0aGUgcnVsZSBk YXRhYmFzZS4gTXVzdCBiZSBhdCBsZWFzdCBzaXplIGluDQo+ICsgKiAgIGNhcGFjaXR5LiBJZiBz ZXQgdG8gTlVMTCwgZnVuY3Rpb24gcmV0dXJucyByZXF1aXJlZCBjYXBhY2l0eS4NCj4gKyAqDQo+ ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0gMDogU3VjY2Vzc2Z1bGx5IGV4cG9ydGVkIHRoZSBwcmVi dWlsdCBydWxlIGRhdGFiYXNlLg0KPiArICogICAtIHNpemU6IElmIHJ1bGVfZGIgc2V0IHRvIE5V TEwgdGhlbiByZXF1aXJlZCBjYXBhY2l0eSBmb3IgKnJ1bGVfZGIqDQo+ICsgKiAgIC0gLUVJTlZB TDogIEludmFsaWQgZGV2aWNlIElEDQo+ICsgKiAgIC0gLUVOT1RTVVA6IFJ1bGUgZGF0YWJhc2Ug ZXhwb3J0IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UuDQo+ICsgKg0KPiArICogQHNl ZSBydGVfcmVnZXhfcnVsZV9kYl91cGRhdGUoKSwgcnRlX3JlZ2V4X3J1bGVfZGJfaW1wb3J0KCkN Cj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfcnVsZV9kYl9leHBvcnQodWludDhfdCBkZXZf aWQsIGNoYXIgKnJ1bGVfZGIpOw0KPiArDQo+ICsvKiBFeHRlbmRlZCBzdGF0aXN0aWNzICovDQo+ ICsvKiogTWF4aW11bSBuYW1lIGxlbmd0aCBmb3IgZXh0ZW5kZWQgc3RhdGlzdGljcyBjb3VudGVy cyAqLw0KPiArI2RlZmluZSBSVEVfUkVHRVhfREVWX1hTVEFUU19OQU1FX1NJWkUgNjQNCj4gKw0K PiArLyoqDQo+ICsgKiBBIG5hbWUta2V5IGxvb2t1cCBlbGVtZW50IGZvciBleHRlbmRlZCBzdGF0 aXN0aWNzLg0KPiArICoNCj4gKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gbWFwIGJldHdl ZW4gbmFtZXMgYW5kIElEIG51bWJlcnMNCj4gKyAqIGZvciBleHRlbmRlZCBSZWdFeCBkZXZpY2Ug c3RhdGlzdGljcy4NCj4gKyAqLw0KPiArc3RydWN0IHJ0ZV9yZWdleF9kZXZfeHN0YXRzX21hcCB7 DQo+ICsJdWludDE2X3QgaWQ7DQo+ICsJLyoqPCB4c3RhdCBpZGVudGlmaWVyICovDQo+ICsJY2hh ciBuYW1lW1JURV9SRUdFWF9ERVZfWFNUQVRTX05BTUVfU0laRV07DQo+ICsJLyoqPCB4c3RhdCBu YW1lICovDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIFJldHJpZXZlIG5hbWVzIG9mIGV4dGVu ZGVkIHN0YXRpc3RpY3Mgb2YgYSByZWdleCBkZXZpY2UuDQo+ICsgKg0KPiArICogQHBhcmFtIGRl dl9pZA0KPiArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcmVnZXggZGV2aWNlLg0KPiArICog QHBhcmFtW291dF0geHN0YXRzX21hcA0KPiArICogICBCbG9jayBvZiBtZW1vcnkgdG8gaW5zZXJ0 IGlkIGFuZCBuYW1lcyBpbnRvLiBNdXN0IGJlIGF0IGxlYXN0IHNpemUgaW4NCj4gKyAqICAgY2Fw YWNpdHkuIElmIHNldCB0byBOVUxMLCBmdW5jdGlvbiByZXR1cm5zIHJlcXVpcmVkIGNhcGFjaXR5 Lg0KPiArICogQHJldHVybg0KPiArICogICAtIHBvc2l0aXZlIHZhbHVlIG9uIHN1Y2Nlc3M6DQo+ ICsgKiAgICAgICAgLVRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGZp bGxlZCBpbiB0aGUgc3RhdHMgbWFwLg0KPiArICogICAgICAgIC1JZiB4c3RhdHNfbWFwIHNldCB0 byBOVUxMIHRoZW4gcmVxdWlyZWQgY2FwYWNpdHkgZm9yIHhzdGF0c19tYXAuDQo+ICsgKiAgIC0g bmVnYXRpdmUgdmFsdWUgb24gZXJyb3I6DQo+ICsgKiAgICAgIC1FTk9ERVYgZm9yIGludmFsaWQg KmRldl9pZCoNCj4gKyAqICAgICAgLUVOT1RTVVAgaWYgdGhlIGRldmljZSBkb2Vzbid0IHN1cHBv cnQgdGhpcyBmdW5jdGlvbi4NCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfZGV2X3hzdGF0 c19uYW1lc19nZXQodWludDhfdCBkZXZfaWQsDQo+ICsJCQkgICAgICAgc3RydWN0IHJ0ZV9yZWdl eF9kZXZfeHN0YXRzX21hcCAqeHN0YXRzX21hcCk7DQo+ICsNCj4gKy8qKg0KPiArICogUmV0cmll dmUgZXh0ZW5kZWQgc3RhdGlzdGljcyBvZiBhbiByZWdleCBkZXZpY2UuDQo+ICsgKg0KPiArICog QHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGV2aWNlLg0KPiAr ICogQHBhcmFtIGlkcw0KPiArICogICBUaGUgaWQgbnVtYmVycyBvZiB0aGUgc3RhdHMgdG8gZ2V0 LiBUaGUgaWRzIGNhbiBiZSBnb3QgZnJvbSB0aGUgc3RhdA0KPiArICogICBwb3NpdGlvbiBpbiB0 aGUgc3RhdCBsaXN0IGZyb20gcnRlX3JlZ2V4X2Rldl94c3RhdHNfbmFtZXNfZ2V0KCksIG9yDQo+ ICsgKiAgIGJ5IHVzaW5nIHJ0ZV9yZWdleF9kZXZfeHN0YXRzX2J5X25hbWVfZ2V0KCkuDQo+ICsg KiBAcGFyYW1bb3V0XSB2YWx1ZXMNCj4gKyAqICAgVGhlIHZhbHVlcyBmb3IgZWFjaCBzdGF0cyBy ZXF1ZXN0IGJ5IElELg0KPiArICogQHBhcmFtIG4NCj4gKyAqICAgVGhlIG51bWJlciBvZiBzdGF0 cyByZXF1ZXN0ZWQNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgLSBwb3NpdGl2ZSB2YWx1ZTogbnVt YmVyIG9mIHN0YXQgZW50cmllcyBmaWxsZWQgaW50byB0aGUgdmFsdWVzIGFycmF5DQo+ICsgKiAg IC0gbmVnYXRpdmUgdmFsdWUgb24gZXJyb3I6DQo+ICsgKiAgICAgIC1FTk9ERVYgZm9yIGludmFs aWQgKmRldl9pZCoNCj4gKyAqICAgICAgLUVOT1RTVVAgaWYgdGhlIGRldmljZSBkb2Vzbid0IHN1 cHBvcnQgdGhpcyBmdW5jdGlvbi4NCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfZGV2X3hz dGF0c19nZXQodWludDhfdCBkZXZfaWQsIGNvbnN0IHVpbnQxNl90IGlkc1tdLA0KPiArCQkJIHVp bnQ2NF90IHZhbHVlc1tdLCB1aW50MTZfdCBuKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBSZXRyaWV2 ZSB0aGUgdmFsdWUgb2YgYSBzaW5nbGUgc3RhdCBieSByZXF1ZXN0aW5nIGl0IGJ5IG5hbWUuDQo+ ICsgKg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUg ZGV2aWNlDQo+ICsgKiBAcGFyYW0gbmFtZQ0KPiArICogICBUaGUgc3RhdCBuYW1lIHRvIHJldHJp ZXZlDQo+ICsgKiBAcGFyYW1bb3V0XSBpZA0KPiArICogICBJZiBub24tTlVMTCwgdGhlIG51bWVy aWNhbCBpZCBvZiB0aGUgc3RhdCB3aWxsIGJlIHJldHVybmVkLCBzbyB0aGF0IGZ1cnRoZXINCj4g KyAqICAgcmVxdWVzdHMgZm9yIHRoZSBzdGF0IGNhbiBiZSBnb3QgdXNpbmcgcnRlX3JlZ2V4X2Rl dl94c3RhdHNfZ2V0LCB3aGljaA0KPiB3aWxsDQo+ICsgKiAgIGJlIGZhc3RlciBhcyBpdCBkb2Vz bid0IG5lZWQgdG8gc2NhbiBhIGxpc3Qgb2YgbmFtZXMgZm9yIHRoZSBzdGF0Lg0KPiArICogQHBh cmFtW291dF0gdmFsdWUNCj4gKyAqICAgTXVzdCBiZSBub24tTlVMTCwgcmV0cmlldmVkIHhzdGF0 IHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoaXMgYWRkcmVzcy4NCj4gKyAqDQo+ICsgKiBAcmV0 dXJuDQo+ICsgKiAgIC0gMDogU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCB4c3RhdCB2YWx1ZS4NCj4g KyAqICAgLSAtRUlOVkFMOiBpbnZhbGlkIHBhcmFtZXRlcnMNCj4gKyAqICAgLSAtRU5PVFNVUDog aWYgbm90IHN1cHBvcnRlZC4NCj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfZGV2X3hzdGF0 c19ieV9uYW1lX2dldCh1aW50OF90IGRldl9pZCwgY29uc3QgY2hhciAqbmFtZSwNCj4gKwkJCQkg dWludDE2X3QgKmlkLCB1aW50NjRfdCAqdmFsdWUpOw0KPiArDQo+ICsvKioNCj4gKyAqIFJlc2V0 IHRoZSB2YWx1ZXMgb2YgdGhlIHhzdGF0cyBvZiB0aGUgc2VsZWN0ZWQgY29tcG9uZW50IGluIHRo ZSBkZXZpY2UuDQo+ICsgKg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgaWRlbnRp ZmllciBvZiB0aGUgZGV2aWNlDQo+ICsgKiBAcGFyYW0gaWRzDQo+ICsgKiAgIFNlbGVjdHMgc3Bl Y2lmaWMgc3RhdGlzdGljcyB0byBiZSByZXNldC4gV2hlbiBOVUxMLCBhbGwgc3RhdGlzdGljcyB3 aWxsIGJlDQo+ICsgKiAgIHJlc2V0LiBJZiBub24tTlVMTCwgbXVzdCBwb2ludCB0byBhcnJheSBv ZiBhdCBsZWFzdCAqbmJfaWRzKiBzaXplLg0KPiArICogQHBhcmFtIG5iX2lkcw0KPiArICogICBU aGUgbnVtYmVyIG9mIGlkcyBhdmFpbGFibGUgZnJvbSB0aGUgKmlkcyogYXJyYXkuIElnbm9yZWQg d2hlbiBpZHMgaXMNCj4gTlVMTC4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgLSAwOiBTdWNjZXNz ZnVsbHkgcmVzZXQgdGhlIHN0YXRpc3RpY3MgdG8gemVyby4NCj4gKyAqICAgLSAtRUlOVkFMOiBp bnZhbGlkIHBhcmFtZXRlcnMNCj4gKyAqICAgLSAtRU5PVFNVUDogaWYgbm90IHN1cHBvcnRlZC4N Cj4gKyAqLw0KPiAraW50DQo+ICtydGVfcmVnZXhfZGV2X3hzdGF0c19yZXNldCh1aW50OF90IGRl dl9pZCwgY29uc3QgdWludDE2X3QgaWRzW10sDQo+ICsJCQkgICB1aW50MTZfdCBuYl9pZHMpOw0K PiArDQo+ICsvKioNCj4gKyAqIFRyaWdnZXIgdGhlIFJlZ0V4IGRldmljZSBzZWxmIHRlc3QuDQo+ ICsgKg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUg ZGV2aWNlDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIC0gMDogU2VsZnRlc3Qgc3VjY2Vzc2Z1bA0K PiArICogICAtIC1FTk9UU1VQIGlmIHRoZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHNlbGZ0ZXN0 DQo+ICsgKiAgIC0gb3RoZXIgdmFsdWVzIDwgMCBvbiBmYWlsdXJlLg0KPiArICovDQo+ICtpbnQg cnRlX3JlZ2V4X2Rldl9zZWxmdGVzdCh1aW50OF90IGRldl9pZCk7DQo+ICsNCj4gKy8qKg0KPiAr ICogRHVtcCBpbnRlcm5hbCBpbmZvcm1hdGlvbiBhYm91dCAqZGV2X2lkKiB0byB0aGUgRklMRSog cHJvdmlkZWQgaW4gKmYqLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAqICAgVGhl IGlkZW50aWZpZXIgb2YgdGhlIGRldmljZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gZg0KPiArICog ICBBIHBvaW50ZXIgdG8gYSBmaWxlIGZvciBvdXRwdXQNCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ ICsgKiAgIC0gMDogb24gc3VjY2Vzcw0KPiArICogICAtIDwwOiBvbiBmYWlsdXJlLg0KPiArICov DQo+ICtpbnQNCj4gK3J0ZV9yZWdleF9kZXZfZHVtcCh1aW50OF90IGRldl9pZCwgRklMRSAqZik7 DQo+ICsNCj4gKy8qIEZhc3QgcGF0aCBBUElzICovDQo+ICsNCj4gKy8qKg0KPiArICogVGhlIGdl bmVyaWMgKnJ0ZV9yZWdleF9tYXRjaCogc3RydWN0dXJlIHRvIGhvbGQgdGhlIFJlZ0V4IG1hdGNo DQo+IGF0dHJpYnV0ZXMuDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfb3BzOjptYXRjaGVz DQo+ICsgKi8NCj4gK3N0cnVjdCBydGVfcmVnZXhfbWF0Y2ggew0KPiArCVJURV9TVERfQzExDQo+ ICsJdW5pb24gew0KPiArCQl1aW50NjRfdCB1NjQ7DQo+ICsJCXN0cnVjdCB7DQo+ICsJCQl1aW50 MzJfdCBydWxlX2lkOjIwOw0KPiArCQkJLyoqPCBSdWxlIGlkZW50aWZpZXIgdG8gd2hpY2ggdGhl IHBhdHRlcm4gbWF0Y2hlZC4NCj4gKwkJCSAqIEBzZWUgc3RydWN0IHJ0ZV9yZWdleF9ydWxlOjpy dWxlX2lkDQo+ICsJCQkgKi8NCj4gKwkJCXVpbnQzMl90IGdyb3VwX2lkOjEyOw0KPiArCQkJLyoq PCBHcm91cCBpZGVudGlmaWVyIG9mIHRoZSBydWxlIHdoaWNoIHRoZSBwYXR0ZXJuDQo+ICsJCQkg KiBtYXRjaGVkLiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfcnVsZTo6Z3JvdXBfaWQNCj4gKwkJCSAq Lw0KPiArCQkJdWludDE2X3Qgb2Zmc2V0Ow0KPiArCQkJLyoqPCBTdGFydGluZyBCeXRlIFBvc2l0 aW9uIGZvciBtYXRjaGVkIHJ1bGUuICovDQo+ICsJCQl1aW50MTZfdCBsZW47DQo+ICsJCQkvKio8 IExlbmd0aCBvZiBtYXRjaCBpbiBieXRlcyAqLw0KPiArCQl9Ow0KPiArCX07DQo+ICt9Ow0KPiAr DQo+ICsvKiBFbnVtZXJhdGVzIFJlZ0V4IHJlcXVlc3QgZmxhZ3MuICovDQo+ICsjZGVmaW5lIFJU RV9SRUdFWF9PUFNfUkVRX0dST1VQX0lEMV9WQUxJRF9GICgxIDw8IDApDQo+ICsvKio8IFNldCB3 aGVuIHN0cnVjdCBydGVfcmVnZXhfcnVsZTo6Z3JvdXBfaWQxIHZhbGlkICovDQo+ICsNCj4gKyNk ZWZpbmUgUlRFX1JFR0VYX09QU19SRVFfR1JPVVBfSUQyX1ZBTElEX0YgKDEgPDwgMSkNCj4gKy8q KjwgU2V0IHdoZW4gc3RydWN0IHJ0ZV9yZWdleF9ydWxlOjpncm91cF9pZDIgdmFsaWQgKi8NCj4g Kw0KPiArI2RlZmluZSBSVEVfUkVHRVhfT1BTX1JFUV9HUk9VUF9JRDNfVkFMSURfRiAoMSA8PCAy KQ0KPiArLyoqPCBTZXQgd2hlbiBzdHJ1Y3QgcnRlX3JlZ2V4X3J1bGU6Omdyb3VwX2lkMyB2YWxp ZCAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9PUFNfUkVRX1NUT1BfT05fTUFUQ0hfRiAo MSA8PCA0KQ0KPiArLyoqPCBUaGUgUmVnRXggZW5naW5lIHdpbGwgc3RvcCBzY2FubmluZyBhbmQg cmV0dXJuIHRoZSBmaXJzdCBtYXRjaC4gKi8NCj4gKw0KPiArI2RlZmluZSBSVEVfUkVHRVhfT1BT X1JFUV9NQVRDSF9ISUdIX1BSSU9SSVRZX0YgKDEgPDwgNSkNCj4gKy8qKjwgSW4gSGlnaCBQcmlv cml0eSBtb2RlIGEgbWF4aW11bSBvZiBvbmUgbWF0Y2ggd2lsbCBiZSByZXR1cm5lZCBwZXINCj4g c2NhbiB0bw0KPiArICogcmVkdWNlIHRoZSBwb3N0LXByb2Nlc3NpbmcgcmVxdWlyZWQgYnkgdGhl IGFwcGxpY2F0aW9uLiBUaGUgbWF0Y2ggd2l0aA0KPiB0aGUNCj4gKyAqIGxvd2VzdCBSdWxlIGlk LCBsb3dlc3Qgc3RhcnQgcG9pbnRlciBhbmQgbG93ZXN0IG1hdGNoIGxlbmd0aCB3aWxsIGJlDQo+ ICsgKiByZXR1cm5lZC4NCj4gKyAqDQo+ICsgKiBAc2VlIHN0cnVjdCBydGVfcmVnZXhfb3BzOjpu Yl9hY3R1YWxfbWF0Y2hlcw0KPiArICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X29wczo6bmJfbWF0 Y2hlcw0KPiArICovDQo+ICsNCj4gKw0KPiArLyogRW51bWVyYXRlcyBSZWdFeCByZXNwb25zZSBm bGFncy4gKi8NCj4gKyNkZWZpbmUgUlRFX1JFR0VYX09QU19SU1BfUE1JX1NPSl9GICgxIDw8IDAp DQo+ICsvKio8IEluZGljYXRlcyB0aGF0IHRoZSBSZWdFeCBkZXZpY2UgaGFzIGVuY291bnRlcmVk IGEgcGFydGlhbCBtYXRjaCBhdCB0aGUNCj4gKyAqIHN0YXJ0IG9mIHNjYW4gaW4gdGhlIGdpdmVu IGJ1ZmZlci4NCj4gKyAqDQo+ICsgKiBAc2VlIFJURV9SRUdFWF9ERVZfQ0ZHX0NST1NTX0JVRkZF Ul9TQ0FOX0YNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdFWF9PUFNfUlNQX1BNSV9F T0pfRiAoMSA8PCAxKQ0KPiArLyoqPCBJbmRpY2F0ZXMgdGhhdCB0aGUgUmVnRXggZGV2aWNlIGhh cyBlbmNvdW50ZXJlZCBhIHBhcnRpYWwgbWF0Y2ggYXQgdGhlDQo+ICsgKiBlbmQgb2Ygc2NhbiBp biB0aGUgZ2l2ZW4gYnVmZmVyLg0KPiArICoNCj4gKyAqIEBzZWUgUlRFX1JFR0VYX0RFVl9DRkdf Q1JPU1NfQlVGRkVSX1NDQU5fRg0KPiArICovDQo+ICsNCj4gKyNkZWZpbmUgUlRFX1JFR0VYX09Q U19SU1BfTUFYX1NDQU5fVElNRU9VVF9GICgxIDw8IDIpDQo+ICsvKio8IEluZGljYXRlcyB0aGF0 IHRoZSBSZWdFeCBkZXZpY2UgaGFzIGV4Y2VlZGVkIHRoZSBtYXggdGltZW91dCB3aGlsZQ0KPiAr ICogc2Nhbm5pbmcgdGhlIGdpdmVuIGJ1ZmZlci4NCj4gKyAqDQo+ICsgKiBAc2VlIFJURV9SRUdF WF9ERVZfQVRUUl9NQVhfU0NBTl9USU1FT1VUDQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBSVEVf UkVHRVhfT1BTX1JTUF9NQVhfTUFUQ0hfRiAoMSA8PCAzKQ0KPiArLyoqPCBJbmRpY2F0ZXMgdGhh dCB0aGUgUmVnRXggZGV2aWNlIGhhcyBleGNlZWRlZCB0aGUgbWF4IG1hdGNoZXMgd2hpbGUNCj4g KyAqIHNjYW5uaW5nIHRoZSBnaXZlbiBidWZmZXIuDQo+ICsgKg0KPiArICogQHNlZSBSVEVfUkVH RVhfREVWX0FUVFJfTUFYX01BVENIRVMNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIFJURV9SRUdF WF9PUFNfUlNQX01BWF9QUkVGSVhfRiAoMSA8PCA0KQ0KPiArLyoqPCBJbmRpY2F0ZXMgdGhhdCB0 aGUgUmVnRXggZGV2aWNlIGhhcyByZWFjaGVkIHRoZSBtYXggYWxsb3dlZCBwcmVmaXgNCj4gbGVu Z3RoDQo+ICsgKiB3aGlsZSBzY2FubmluZyB0aGUgZ2l2ZW4gYnVmZmVyLg0KPiArICoNCj4gKyAq IEBzZWUgUlRFX1JFR0VYX0RFVl9BVFRSX01BWF9QUkVGSVgNCj4gKyAqLw0KPiArDQo+ICsvKioN Cj4gKyAqIFRoZSBnZW5lcmljICpydGVfcmVnZXhfb3BzKiBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUg UmVnRXggYXR0cmlidXRlcw0KPiArICogZm9yIGVucXVldWUgYW5kIGRlcXVldWUgb3BlcmF0aW9u Lg0KPiArICovDQo+ICtzdHJ1Y3QgcnRlX3JlZ2V4X29wcyB7DQo+ICsJLyogVzAgKi8NCj4gKwl1 aW50MTZfdCByZXFfZmxhZ3M7DQo+ICsJLyoqPCBSZXF1ZXN0IGZsYWdzIGZvciB0aGUgUmVnRXgg b3BzLg0KPiArCSAqIEBzZWUgUlRFX1JFR0VYX09QU19SRVFfKg0KPiArCSAqLw0KPiArCXVpbnQx Nl90IHNjYW5fc2l6ZTsNCj4gKwkvKio8IFNjYW4gc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHNj YW5uZWQgaW4gYnl0ZXMuICovDQo+ICsJdWludDE2X3QgcnNwX2ZsYWdzOw0KPiArCS8qKjwgUmVz cG9uc2UgZmxhZ3MgZm9yIHRoZSBSZWdFeCBvcHMuDQo+ICsJICogQHNlZSBSVEVfUkVHRVhfT1BT X1JTUF8qDQo+ICsJICovDQo+ICsJdWludDhfdCBuYl9hY3R1YWxfbWF0Y2hlczsNCj4gKwkvKio8 IFRoZSB0b3RhbCBudW1iZXIgb2YgYWN0dWFsIG1hdGNoZXMgZGV0ZWN0ZWQgYnkgdGhlIFJlZ2V4 DQo+IGRldmljZS4qLw0KPiArCXVpbnQ4X3QgbmJfbWF0Y2hlczsNCj4gKwkvKio8IFRoZSB0b3Rh bCBudW1iZXIgb2YgbWF0Y2hlcyByZXR1cm5lZCBieSB0aGUgUmVnRXggZGV2aWNlIGZvcg0KPiB0 aGlzDQo+ICsJICogc2Nhbi4gVGhlIHNpemUgb2YgKnJ0ZV9yZWdleF9vcHM6Om1hdGNoZXMqIHpl cm8gbGVuZ3RoIGFycmF5IHdpbGwNCj4gYmUNCj4gKwkgKiB0aGlzIHZhbHVlLg0KPiArCSAqDQo+ ICsJICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X29wczo6bWF0Y2hlcywgc3RydWN0IHJ0ZV9yZWdl eF9tYXRjaA0KPiArCSAqLw0KPiArDQo+ICsJLyogVzEgKi8NCj4gKwlSVEVfU1REX0MxMQ0KPiAr CXVuaW9uIHsNCj4gKwkJdWludDY0X3QgdTY0Ow0KPiArCQkvKio8ICBBbGxvdyA4LWJ5dGUgcmVz ZXJ2ZWQgb24gMzItYml0IHN5c3RlbSAqLw0KPiArCQl2b2lkICpidWZfYWRkcjsNCj4gKwkJLyoq PCBWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHBhdHRlcm4gdG8gYmUgbWF0Y2hlZC4gKi8NCj4gKwl9 Ow0KPiArDQo+ICsJLyogVzIgKi8NCj4gKwlydGVfaW92YV90IGJ1Zl9pb3ZhOw0KPiArCS8qKjwg SU9WQSBhZGRyZXNzIG9mIHRoZSBwYXR0ZXJuIHRvIGJlIG1hdGNoZWQuICovDQo+ICsNCj4gKwkv KiBXMyAqLw0KPiArCXVpbnQxNl90IGdyb3VwX2lkMDsNCj4gKwkvKio8IEZpcnN0IGdyb3VwX2lk IHRvIG1hdGNoIHRoZSBydWxlIGFnYWluc3QuIE1pbmltdW0gb25lIGdyb3VwIGlkDQo+ICsJICog bXVzdCBiZSBwcm92aWRlZCBieSBhcHBsaWNhdGlvbi4NCj4gKwkgKiBXaGVuIFJURV9SRUdFWF9P UFNfUkVRX0dST1VQX0lEMV9WQUxJRF9GIHNldCB0aGVuDQo+IGdyb3VwX2lkMQ0KPiArCSAqIGlz IHZhbGlkLCByZXNwZWN0aXZlbHkgc2ltaWxhciBmbGFncyBmb3IgZ3JvdXBfaWQyIGFuZCBncm91 cF9pZDMuDQo+ICsJICogVXBvbiB0aGUgbWF0Y2gsIHN0cnVjdCBydGVfcmVnZXhfbWF0Y2g6Omdy b3VwX2lkIHNoYWxsIGJlDQo+IHVwZGF0ZWQNCj4gKwkgKiB3aXRoIG1hdGNoaW5nIGdyb3VwIElE IGJ5IHRoZSBkZXZpY2UuIEdyb3VwIElEIHNjaGVtZSBwcm92aWRlcw0KPiArCSAqIHJ1bGUgaXNv bGF0aW9uIGFuZCBlZmZlY3RpdmUgcGF0dGVybiBtYXRjaGluZy4NCj4gKwkgKi8NCj4gKwl1aW50 MTZfdCBncm91cF9pZDE7DQo+ICsJLyoqPCBTZWNvbmQgZ3JvdXBfaWQgdG8gbWF0Y2ggdGhlIHJ1 bGUgYWdhaW5zdC4NCj4gKwkgKg0KPiArCSAqIEBzZWUgUlRFX1JFR0VYX09QU19SRVFfR1JPVVBf SUQxX1ZBTElEX0YNCj4gKwkgKi8NCj4gKwl1aW50MTZfdCBncm91cF9pZDI7DQo+ICsJLyoqPCBU aGlyZCBncm91cF9pZCB0byBtYXRjaCB0aGUgcnVsZSBhZ2FpbnN0Lg0KPiArCSAqDQo+ICsJICog QHNlZSBSVEVfUkVHRVhfT1BTX1JFUV9HUk9VUF9JRDJfVkFMSURfRg0KPiArCSAqLw0KPiArCXVp bnQxNl90IGdyb3VwX2lkMzsNCj4gKwkvKio8IEZvcnRoIGdyb3VwX2lkIHRvIG1hdGNoIHRoZSBy dWxlIGFnYWluc3QuDQo+ICsJICoNCj4gKwkgKiBAc2VlIFJURV9SRUdFWF9PUFNfUkVRX0dST1VQ X0lEM19WQUxJRF9GDQo+ICsJICovDQo+ICsNCj4gKwkvKiBXNCAqLw0KPiArCVJURV9TVERfQzEx DQo+ICsJdW5pb24gew0KPiArCQl1aW50NjRfdCB1c2VyX2lkOw0KPiArCQkvKio8IEFwcGxpY2F0 aW9uIHNwZWNpZmljIG9wYXF1ZSB2YWx1ZS4gQW4gYXBwbGljYXRpb24gbWF5DQo+IHVzZQ0KPiAr CQkgKiB0aGlzIGZpZWxkIHRvIGhvbGQgYXBwbGljYXRpb24gc3BlY2lmaWMgdmFsdWUgdG8gc2hh cmUNCj4gKwkJICogYmV0d2VlbiBkZXF1ZXVlIGFuZCBlbnF1ZXVlIG9wZXJhdGlvbi4NCj4gKwkJ ICogSW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBtb2RpZnkgdGhpcyBmaWVsZC4NCj4gKwkJICov DQo+ICsJCXZvaWQgKnVzZXJfcHRyOw0KPiArCQkvKio8IFBvaW50ZXIgcmVwcmVzZW50YXRpb24g b2YgKnVzZXJfaWQqICovDQo+ICsJfTsNCj4gKw0KPiArCS8qIFc1ICovDQo+ICsJc3RydWN0IHJ0 ZV9yZWdleF9tYXRjaCBtYXRjaGVzW107DQo+ICsJLyoqPCBaZXJvIGxlbmd0aCBhcnJheSB0byBo b2xkIHRoZSBtYXRjaCB0dXBsZXMuDQo+ICsJICogVGhlIHN0cnVjdCBydGVfcmVnZXhfb3BzOjpu Yl9tYXRjaGVzIHZhbHVlIGhvbGRzIHRoZSBudW1iZXIgb2YNCj4gKwkgKiBlbGVtZW50cyBpbiB0 aGlzIGFycmF5Lg0KPiArCSAqDQo+ICsJICogQHNlZSBzdHJ1Y3QgcnRlX3JlZ2V4X29wczo6bmJf bWF0Y2hlcw0KPiArCSAqLw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBFbnF1ZXVlIGEgYnVy c3Qgb2Ygc2NhbiByZXF1ZXN0IG9uIGEgUmVnRXggZGV2aWNlLg0KPiArICoNCj4gKyAqIFRoZSBy dGVfcmVnZXhfZW5xdWV1ZV9idXJzdCgpIGZ1bmN0aW9uIGlzIGludm9rZWQgdG8gcGxhY2UNCj4g KyAqIHJlZ2V4IG9wZXJhdGlvbnMgb24gdGhlIHF1ZXVlICpxcF9pZCogb2YgdGhlIGRldmljZSBk ZXNpZ25hdGVkIGJ5DQo+ICsgKiBpdHMgKmRldl9pZCouDQo+ICsgKg0KPiArICogVGhlICpuYl9v cHMqIHBhcmFtZXRlciBpcyB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgdG8gcHJvY2VzcyB3aGlj aA0KPiBhcmUNCj4gKyAqIHN1cHBsaWVkIGluIHRoZSAqb3BzKiBhcnJheSBvZiAqcnRlX3JlZ2V4 X29wKiBzdHJ1Y3R1cmVzLg0KPiArICoNCj4gKyAqIFRoZSBydGVfcmVnZXhfZW5xdWV1ZV9idXJz dCgpIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZg0KPiArICogb3BlcmF0aW9ucyBpdCBh Y3R1YWxseSBlbnF1ZXVlZCBmb3IgcHJvY2Vzc2luZy4gQSByZXR1cm4gdmFsdWUgZXF1YWwgdG8N Cj4gKyAqICpuYl9vcHMqIG1lYW5zIHRoYXQgYWxsIHBhY2tldHMgaGF2ZSBiZWVuIGVucXVldWVk Lg0KPiArICoNCj4gKyAqIEBwYXJhbSBkZXZfaWQNCj4gKyAqICAgVGhlIGlkZW50aWZpZXIgb2Yg dGhlIGRldmljZS4NCj4gKyAqIEBwYXJhbSBxcF9pZA0KPiArICogICBUaGUgaW5kZXggb2YgdGhl IHF1ZXVlIHBhaXIgd2hpY2ggcGFja2V0cyBhcmUgdG8gYmUgZW5xdWV1ZWQgZm9yDQo+ICsgKiAg IHByb2Nlc3NpbmcuIFRoZSB2YWx1ZSBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCwgbmJfcXVldWVf cGFpcnMgLSAxXQ0KPiArICogICBwcmV2aW91c2x5IHN1cHBsaWVkIHRvIHJ0ZV9yZWdleF9kZXZf Y29uZmlndXJlKCkuDQo+ICsgKiBAcGFyYW0gb3BzDQo+ICsgKiAgIFRoZSBhZGRyZXNzIG9mIGFu IGFycmF5IG9mICpuYl9vcHMqIHBvaW50ZXJzIHRvICpydGVfcmVnZXhfb3AqDQo+IHN0cnVjdHVy ZXMNCj4gKyAqICAgd2hpY2ggY29udGFpbiB0aGUgcmVnZXggb3BlcmF0aW9ucyB0byBiZSBwcm9j ZXNzZWQuDQo+ICsgKiBAcGFyYW0gbmJfb3BzDQo+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb3BlcmF0 aW9ucyB0byBwcm9jZXNzLg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgVGhlIG51bWJl ciBvZiBvcGVyYXRpb25zIGFjdHVhbGx5IGVucXVldWVkIG9uIHRoZSByZWdleCBkZXZpY2UuIFRo ZQ0KPiByZXR1cm4NCj4gKyAqICAgdmFsdWUgY2FuIGJlIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2Yg dGhlICpuYl9vcHMqIHBhcmFtZXRlciB3aGVuIHRoZQ0KPiArICogICByZWdleCBkZXZpY2VzIHF1 ZXVlIGlzIGZ1bGwgb3IgaWYgaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZpZWQgaW4NCj4g KyAqICAgYSAqcnRlX3JlZ2V4X29wKi4gSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBsZXNzIHRoYW4g Km5iX29wcyosIHRoZQ0KPiByZW1haW5pbmcNCj4gKyAqICAgb3BzIGF0IHRoZSBlbmQgb2YgKm9w cyogYXJlIG5vdCBjb25zdW1lZCBhbmQgdGhlIGNhbGxlciBoYXMgdG8gdGFrZQ0KPiBjYXJlDQo+ ICsgKiAgIG9mIHRoZW0uDQo+ICsgKi8NCj4gK3VpbnQxNl90DQo+ICtydGVfcmVnZXhfZW5xdWV1 ZV9idXJzdCh1aW50OF90IGRldl9pZCwgdWludDE2X3QgcXBfaWQsDQo+ICsJCQlzdHJ1Y3QgcnRl X3JlZ2V4X29wcyAqKm9wcywgdWludDE2X3QgbmJfb3BzKTsNCj4gKw0KPiArLyoqDQo+ICsgKg0K PiArICogRGVxdWV1ZSBhIGJ1cnN0IG9mIHNjYW4gcmVzcG9uc2UgZnJvbSBhIHF1ZXVlIG9uIHRo ZSBSZWdFeCBkZXZpY2UuDQo+ICsgKiBUaGUgZGVxdWV1ZWQgb3BlcmF0aW9uIGFyZSBzdG9yZWQg aW4gKnJ0ZV9yZWdleF9vcCogc3RydWN0dXJlcw0KPiArICogd2hvc2UgcG9pbnRlcnMgYXJlIHN1 cHBsaWVkIGluIHRoZSAqb3BzKiBhcnJheS4NCj4gKyAqDQo+ICsgKiBUaGUgcnRlX3JlZ2V4X2Rl cXVldWVfYnVyc3QoKSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygb3BzDQo+ICsgKiBh Y3R1YWxseSBkZXF1ZXVlZCwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiAqcnRlX3JlZ2V4X29wKiBk YXRhDQo+IHN0cnVjdHVyZXMNCj4gKyAqIGVmZmVjdGl2ZWx5IHN1cHBsaWVkIGludG8gdGhlICpv cHMqIGFycmF5Lg0KPiArICoNCj4gKyAqIEEgcmV0dXJuIHZhbHVlIGVxdWFsIHRvICpuYl9vcHMq IGluZGljYXRlcyB0aGF0IHRoZSBxdWV1ZSBjb250YWluZWQNCj4gKyAqIGF0IGxlYXN0ICpuYl9v cHMqIG9wZXJhdGlvbnMsIGFuZCB0aGlzIGlzIGxpa2VseSB0byBzaWduaWZ5IHRoYXQgb3RoZXIN Cj4gKyAqIHByb2Nlc3NlZCBvcGVyYXRpb25zIHJlbWFpbiBpbiB0aGUgZGV2aWNlcyBvdXRwdXQg cXVldWUuIEFwcGxpY2F0aW9ucw0KPiArICogaW1wbGVtZW50aW5nIGEgInJldHJpZXZlIGFzIG1h bnkgcHJvY2Vzc2VkIG9wZXJhdGlvbnMgYXMgcG9zc2libGUiDQo+IHBvbGljeQ0KPiArICogY2Fu IGNoZWNrIHRoaXMgc3BlY2lmaWMgY2FzZSBhbmQga2VlcCBpbnZva2luZyB0aGUNCj4gKyAqIHJ0 ZV9yZWdleF9kZXF1ZXVlX2J1cnN0KCkgZnVuY3Rpb24gdW50aWwgYSB2YWx1ZSBsZXNzIHRoYW4N Cj4gKyAqICpuYl9vcHMqIGlzIHJldHVybmVkLg0KPiArICoNCj4gKyAqIFRoZSBydGVfcmVnZXhf ZGVxdWV1ZV9idXJzdCgpIGZ1bmN0aW9uIGRvZXMgbm90IHByb3ZpZGUgYW55IGVycm9yDQo+ICsg KiBub3RpZmljYXRpb24gdG8gYXZvaWQgdGhlIGNvcnJlc3BvbmRpbmcgb3ZlcmhlYWQuDQo+ICsg Kg0KPiArICogQHBhcmFtIGRldl9pZA0KPiArICogICBUaGUgUmVnRXggZGV2aWNlIGlkZW50aWZp ZXINCj4gKyAqIEBwYXJhbSBxcF9pZA0KPiArICogICBUaGUgaW5kZXggb2YgdGhlIHF1ZXVlIHBh aXIgZnJvbSB3aGljaCB0byByZXRyaWV2ZSBwcm9jZXNzZWQgcGFja2V0cy4NCj4gKyAqICAgVGhl IHZhbHVlIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCBuYl9xdWV1ZV9wYWlycyAtIDFdIHByZXZp b3VzbHkNCj4gKyAqICAgc3VwcGxpZWQgdG8gcnRlX3JlZ2V4X2Rldl9jb25maWd1cmUoKS4NCj4g KyAqIEBwYXJhbSBvcHMNCj4gKyAqICAgVGhlIGFkZHJlc3Mgb2YgYW4gYXJyYXkgb2YgcG9pbnRl cnMgdG8gKnJ0ZV9yZWdleF9vcCogc3RydWN0dXJlcyB0aGF0DQo+IG11c3QNCj4gKyAqICAgYmUg bGFyZ2UgZW5vdWdoIHRvIHN0b3JlICpuYl9vcHMqIHBvaW50ZXJzIGluIGl0Lg0KPiArICogQHBh cmFtIG5iX29wcw0KPiArICogICBUaGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlcmF0aW9ucyB0byBk ZXF1ZXVlLg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgVGhlIG51bWJlciBvZiBvcGVy YXRpb25zIGFjdHVhbGx5IGRlcXVldWVkLCB3aGljaCBpcyB0aGUgbnVtYmVyDQo+ICsgKiAgIG9m IHBvaW50ZXJzIHRvICpydGVfcmVnZXhfb3AqIHN0cnVjdHVyZXMgZWZmZWN0aXZlbHkgc3VwcGxp ZWQgdG8gdGhlDQo+ICsgKiAgICpvcHMqIGFycmF5LiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGxl c3MgdGhhbiAqbmJfb3BzKiwgdGhlIHJlbWFpbmluZw0KPiArICogICBvcHMgYXQgdGhlIGVuZCBv ZiAqb3BzKiBhcmUgbm90IGNvbnN1bWVkIGFuZCB0aGUgY2FsbGVyIGhhcyB0byB0YWtlDQo+IGNh cmUNCj4gKyAqICAgb2YgdGhlbS4NCj4gKyAqLw0KPiArdWludDE2X3QNCj4gK3J0ZV9yZWdleF9k ZXF1ZXVlX2J1cnN0KHVpbnQ4X3QgZGV2X2lkLCB1aW50MTZfdCBxcF9pZCwNCj4gKwkJCXN0cnVj dCBydGVfcmVnZXhfb3BzICoqb3BzLCB1aW50MTZfdCBuYl9vcHMpOw0KPiArDQo+ICsjaWZkZWYg X19jcGx1c3BsdXMNCj4gK30NCj4gKyNlbmRpZg0KPiArDQo+ICsjZW5kaWYgLyogX1JURV9SRUdF WERFVl9IXyAqLw0KPiANCg0K