Received: by 10.223.148.5 with SMTP id 5csp7570063wrq; Thu, 18 Jan 2018 06:59:52 -0800 (PST) X-Google-Smtp-Source: ACJfBotA0GJWuD2i8ryBilJBD7iraH302gFHyzrE3mol3IJUOoYjgFbND597ZmWj4XNRaFFAjNGw X-Received: by 10.98.147.7 with SMTP id b7mr42123466pfe.236.1516287592686; Thu, 18 Jan 2018 06:59:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516287592; cv=none; d=google.com; s=arc-20160816; b=Wgar5GrMFPyutwjiV0CYvATQh67sBO+tzeyTMcoqc8dPJtQ8rvfjYluPwhFhadi7xG gYTQVRERDr2wClA7SGutCZjoadKPYjwOfmBWwru9lpPvLBvuOc+Fvgnz/iDX9jT4ted3 +Ibuexg3j0DbTBUkt0Rf4KzCQBx5SsT46JhLW9tfHD+raKVV5Hv9qDnvhpjVqQ1D9KnM 25jaqPICkVFgL/N0OYol5W6fmyALjtU6iQIBK2IMHog04Qvjy93Q2AjUnyT8oXY4us20 9FDv9bsXmhr7bvFITk8mNFEFkrmHvm21V/mxDiJM/eOzLqy3Ncuvsa3o3i839f8shYnY qYrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from :arc-authentication-results; bh=R9sH9Jr5qH8cOau/LYZIqb/nk9QKo/LXVC9/WvUK7mc=; b=RM2B1BsFgFn2gosNVAXVzyXc2zbRF+gIHdX++i17QOVGecC4C4xoj+MN3trKJ40mFW 8xuiqKElC3zDjGqUcev9E+SFSG4wl6ScnkNSoEpey0fvtD8lSAJoBW0MwkgFzz+HQWFM ZmCNDFdb8QyEy863EI0s/DZF+xptrmv3IC1dOFwqFoEskNVnMCIW3DFGmIqzBmEiml39 1aDAHvlVC6Qhe7TdRuMVF+L/KQ5XsfGWdgcpqxBPhWgqIkW62gJAPLI6FcUEgDJiuyG1 yG1AsWsJ2jSqk3g5Rmh08wXwdWA8McofdybMDKtizNEswVyDA152NLs/rlXNkch2lr0x nH7g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r17si6274639pgu.809.2018.01.18.06.59.38; Thu, 18 Jan 2018 06:59:52 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756109AbeARNNg (ORCPT + 99 others); Thu, 18 Jan 2018 08:13:36 -0500 Received: from mg.richtek.com ([220.130.44.152]:60262 "EHLO mg.richtek.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754927AbeARNNe (ORCPT ); Thu, 18 Jan 2018 08:13:34 -0500 X-MailGates: (flag:4,DYNAMIC,BADHELO,RELAY,NOHOST:PASS)(compute_score:DE LIVER,40,3) Received: from 192.168.8.44 by mg.richtek.com with MailGates ESMTP Server V5.0(15863:0:AUTH_RELAY) (envelope-from ); Thu, 18 Jan 2018 21:13:17 +0800 (CST) Received: from ex1.rt.l (192.168.8.44) by ex1.rt.l (192.168.8.44) with Microsoft SMTP Server (TLS) id 15.0.1076.9; Thu, 18 Jan 2018 21:13:15 +0800 Received: from ex1.rt.l ([fe80::557d:30f0:a3f8:3efc]) by ex1.rt.l ([fe80::557d:30f0:a3f8:3efc%15]) with mapi id 15.00.1076.000; Thu, 18 Jan 2018 21:13:15 +0800 From: =?big5?B?c2h1ZmFuX2xlZSin9a7Rpnwp?= To: 'Greg KH' , ShuFanLee CC: "heikki.krogerus@linux.intel.com" , =?big5?B?Y3lfaHVhbmcotsCx0q3sKQ==?= , "linux-kernel@vger.kernel.org" , "linux-usb@vger.kernel.org" Subject: RE: [PATCH] USB TYPEC: RT1711H Type-C Chip Driver Thread-Topic: [PATCH] USB TYPEC: RT1711H Type-C Chip Driver Thread-Index: AQHTieCLFd+d5p/wz0qymBaVQ9+cLaN3mB+AgAH+JaA= Date: Thu, 18 Jan 2018 13:13:15 +0000 Message-ID: References: <1515567552-7692-1-git-send-email-leechu729@gmail.com> <20180117134219.GE3188@kroah.com> In-Reply-To: <20180117134219.GE3188@kroah.com> Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [192.168.92.54] Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RGVhciBHZXJnLA0KDQogIE1hbnkgdGhhbmtzIHRvIHlvdXIgY29tbWVudC4NCiAgSSd2ZSBjaGVj a2VkIGFsbCBvZiB0aGVtIGFuZCBoZXJlIGFyZSBzb21lIHF1ZXN0aW9ucyBuZWVkIHlvdXIgaGVs cC4NCg0KPiArRXhhbXBsZToNCj4gK3J0MTcxMWhANGUgew0KPiArc3RhdHVzID0gIm9rIjsNCj4g K2NvbXBhdGlibGUgPSAicmljaHRlayx0eXBlY19ydDE3MTFoIjsNCj4gK3JlZyA9IDwweDRlPjsN Cj4gK3J0LGludHJfZ3BpbyA9IDwmZ3BpbzI2IDAgMHgwPjsNCj4gK3J0LG5hbWUgPSAicnQxNzEx aCI7DQo+ICtydCxwb3J0X3R5cGUgPSA8Mj47IC8qIDA6IERGUCwgMTogVUZQLCAyOiBEUlAgKi8N Cj4gK3J0LGRlZl9yb2xlID0gPDA+OyAvKiAwOiBTTkssIDE6IFNSQywgLTE6IFRZUEVDX05PX1BS RUZFUlJFRF9ST0xFICovDQo+ICt9Ow0KDQpkdHMgc3R1ZmYgbmVlZHMgdG8gYWx3YXlzIGJlIGlu IGEgc2VwYXJhdGUgZmlsZSBzbyB0aGUgRFQgbWFpbnRhaW5lcnMgY2FuIHJldmlldy9hY2sgaXQu ICBTcGxpdCB0aGlzIHBhdGNoIHVwIGludG8gc21hbGxlciBwaWVjZXMgcGxlYXNlLg0KDQpPaywg SSdsbCBzcGxpdCBpdCBpbnRvIHR3byBwYXRjaGVzLCBvbmUgZm9yIHNvdXJjZSBjb2RlIGFuZCBv bmNlIGZvciBkdHMgcmVsYXRlZCBmaWxlcy4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3VzYi90eXBlYy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3R5cGVjL01ha2Vm aWxlDQo+IGluZGV4IGJiMzEzOGEuLmUzYWFmM2MgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvdXNi L3R5cGVjL01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL01ha2VmaWxlDQo+IEBA IC0yLDYgKzIsNyBAQA0KPiAgb2JqLSQoQ09ORklHX1RZUEVDKSs9IHR5cGVjLm8NCj4gIG9iai0k KENPTkZJR19UWVBFQ19UQ1BNKSs9IHRjcG0ubw0KPiAgb2JqLXkrPSBmdXNiMzAyLw0KPiArb2Jq LSQoQ09ORklHX1RZUEVDX1JUMTcxMUgpKz0gcnQxNzExaC8NCg0KV2h5IGRvIHlvdSBuZWVkIGEg d2hvbGUgZGlyZWN0b3J5IGZvciBvbmUgZmlsZT8NCg0KSXMgdGhlIHN1Z2dlc3Rpb24gdG8gbW92 ZSBydDE3MTFoLmMgdG8gdGhlIHNhbWUgZGlyZWN0b3J5IGxldmVsIGFzIHRjcG0/IGkuZS4gZHJp dmVycy91c2IvdHlwZWMvcnQxNzExaC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KPiArPHVhcGkvbGlu dXgvc2NoZWQvdHlwZXMuaD4NCg0KVGhpcyBsYXN0ICNpbmNsdWRlIHNob3VsZCBub3QgYmUgbmVl ZGVkLiAgSWYgaXQgZG9lcywgeW91IGFyZSBkb2luZyBzb21ldGhpbmcgcmVhbGx5IHdyb25nLi4u DQoNCk9rLCB0aGlzICNpbmNsdWRlIHdpbGwgYmUgcmVtb3ZlZA0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoN Cj4gKw0KPiArI2luY2x1ZGUgInJ0MTcxMWguaCINCg0KV2h5IGEgLmggZmlsZSBmb3IgYSBzaW5n bGUgLmMgZmlsZT8NCg0KSXMgdGhlIHN1Z2dlc3Rpb24gdG8gbW92ZSBhbGwgY29udGVudCBpbiBy dDE3MTFoLmggaW50byBydDE3MTFoLmM/DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KPiArDQo+ICsjZGVm aW5lIFJUMTcxMUhfRFJWX1ZFUlNJT04iMS4wLjMiDQoNCldoZW4gY29kZSBpcyBpbiB0aGUga2Vy bmVsIHRyZWUsIHZlcnNpb25zIG1lYW4gbm90aGluZywgeW91IHdpbGwgbm90ZSB0aGF0IG5vIG90 aGVyIFVTQiBkcml2ZXIgaGFzIHRoZW0sIHJpZ2h0PyAgUGxlYXNlIHJlbW92ZS4NCg0KT2ssIHRo aXMgd2lsbCBiZSByZW1vdmVkLg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCmtlcm5lbCB0eXBlcyBhcmUg dTE2LCB1MzIsIHU4LCBhbmQgdGhlIGxpa2UsIG5vdCB1aW50MTZfdCwgdGhvc2UgYXJlIGZvciB1 c2Vyc3BhY2UgY29kZSBvbmx5Lg0KWWVhaCwgb3RoZXIgZHJpdmVycyBkbyBpdCwgYnV0IHlvdSBz aG91bGRuJ3QgOikNCg0KT2ssIEknbGwgdXNlIHUxNiwgdTMyIGFuZCB1OCBpbnN0ZWFkIG9mIHVp bnQxNl90LCB1aW50MzJfdCBhbmQgdWludDhfdA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCj4gKy8qIElS USAqLw0KPiArc3RydWN0IGt0aHJlYWRfd29ya2VyIGlycV93b3JrZXI7DQo+ICtzdHJ1Y3Qga3Ro cmVhZF93b3JrIGlycV93b3JrOw0KPiArc3RydWN0IHRhc2tfc3RydWN0ICppcnFfd29ya2VyX3Rh c2s7DQoNCjMgdGhpbmdzIGZvciBhbiBpcnEgaGFuZGxlcj8gIFRoYXQgZmVlbHMgd3JvbmcuDQoN Cj4gK2F0b21pY190IHBvbGxfY291bnQ7DQoNCkxpa2UgSSBzYWlkIGJlZm9yZSwgd2h5IGlzIHRo aXMgYW4gYXRvbWljPw0KDQpJJ2xsIHVzZSB0aHJlYWRlZF9pcnEgaW5zdGVhZCwgdGhlIGFib3Zl IHRoaW5ncyB3aWxsIGJlIHJlbW92ZWQuDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KPiArLyogSTJDICov DQo+ICthdG9taWNfdCBpMmNfYnVzeTsNCj4gK2F0b21pY190IHBtX3N1c3BlbmQ7DQoNCldoeSBh cmUgdGhlc2UgYXRvbWljPyAgWW91IGtub3cgdGhhdCBkb2Vzbid0IG1lYW4gdGhleSBkbyBub3Qg bmVlZCBsb2NraW5nLCByaWdodD8NCg0KRm9yIG15IHVuZGVyc3RhbmRpbmcsIGEgc2luZ2xlIG9w ZXJhdGlvbiBvbiBhdG9taWNfdCBkb2Vzbid0IG5lZWQgbG9jaywgbGlrZSBhIHNpbmdsZSBhdG9t aWNfc2V0Lg0KQnV0IHR3byBjb25zZWN1dGl2ZSBvcGVyYXRpb25zIGRvZXNuJ3QgZ3VhcmFudGVl IGFueXRoaW5nLiBMaWtlIGF0b21pY19zZXQgZm9sbG93ZWQgYnkgYW4gYXRvbWljX3JlYWQuDQpU aGlzIHBhcnQgaXMgcmVmZXJlbmNlZCBmcm9tIGZ1c2IzMDIgdXNlZCB0byBtYWtlIHN1cmUgSTJD IGlzIGlkbGUgYmVmb3JlIHN5c3RlbSBzdXNwZW5kcy4NCkl0IG9ubHkgbmVlZHMgdG8gZ3VhcmFu dGVlIGEgc2luZ2xlIHJlYWQvd3JpdGUgb24gdGhlc2UgdmFyaWFibGUgaXMgYXRvbWljIG9wZXJh dGlvbiwgc28gYXRvbWljIGlzIHVzZWQuDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KPiArfTsNCj4gKw0K PiArLyoNCj4gKyAqIExvZ2dpbmcgJiBkZWJ1Z2dpbmcNCj4gKyAqLw0KPiArDQo+ICsjaWZkZWYg Q09ORklHX0RFQlVHX0ZTDQo+ICsNCj4gK3N0YXRpYyBpbnQgcnQxNzExaF9yZWdfYmxvY2tfcmVh ZChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCB1aW50OF90IHJlZywNCj4gK2ludCBsZW4sIHVp bnQ4X3QgKmRhdGEpOw0KPiArc3RhdGljIGludCBydDE3MTFoX3JlZ19ibG9ja193cml0ZShzdHJ1 Y3QgcnQxNzExaF9jaGlwICpjaGlwLCB1aW50OF90IHJlZywNCj4gK2ludCBsZW4sIGNvbnN0IHVp bnQ4X3QgKmRhdGEpOw0KPiArDQo+ICtzdHJ1Y3QgcmVnX2Rlc2Mgew0KPiArdWludDhfdCBhZGRy Ow0KPiArdWludDhfdCBzaXplOw0KPiArfTsNCj4gKyNkZWZpbmUgREVDTF9SRUcoX2FkZHIsIF9z aXplKSB7LmFkZHIgPSBfYWRkciwgLnNpemUgPSBfc2l6ZX0NCj4gKw0KPiArc3RhdGljIHN0cnVj dCByZWdfZGVzYyBydDE3MTFoX3JlZ19kZXNjW10gPSB7DQo+ICtERUNMX1JFRyhSVDE3MTFIX1JF R19WSUQsIDIpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfUElELCAyKSwNCj4gK0RFQ0xfUkVH KFJUMTcxMUhfUkVHX0RJRCwgMiksDQo+ICtERUNMX1JFRyhSVDE3MTFIX1JFR19UWVBFQ19SRVYs IDIpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfUERfUkVWLCAyKSwNCj4gK0RFQ0xfUkVHKFJU MTcxMUhfUkVHX1BESUZfUkVWLCAyKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0FMRVJULCAy KSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0FMRVJUX01BU0ssIDIpLA0KPiArREVDTF9SRUco UlQxNzExSF9SRUdfUE9XRVJfU1RBVFVTX01BU0ssIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9S RUdfRkFVTFRfU1RBVFVTX01BU0ssIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfVENQQ19D VFJMLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1JPTEVfQ1RSTCwgMSksDQo+ICtERUNM X1JFRyhSVDE3MTFIX1JFR19GQVVMVF9DVFJMLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVH X1BPV0VSX0NUUkwsIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfQ0NfU1RBVFVTLCAxKSwN Cj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1BPV0VSX1NUQVRVUywgMSksDQo+ICtERUNMX1JFRyhS VDE3MTFIX1JFR19GQVVMVF9TVEFUVVMsIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfQ09N TUFORCwgMSksDQo+ICtERUNMX1JFRyhSVDE3MTFIX1JFR19NU0dfSERSX0lORk8sIDEpLA0KPiAr REVDTF9SRUcoUlQxNzExSF9SRUdfUlhfREVURUNULCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhf UkVHX1JYX0JZVEVfQ05ULCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1JYX0JVRl9GUkFN RV9UWVBFLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1JYX0hEUiwgMiksDQo+ICtERUNM X1JFRyhSVDE3MTFIX1JFR19SWF9EQVRBLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1RS QU5TTUlULCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1RYX0JZVEVfQ05ULCAxKSwNCj4g K0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1RYX0hEUiwgMiksDQo+ICtERUNMX1JFRyhSVDE3MTFIX1JF R19UWF9EQVRBLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0NMS19DVFJMMiwgMSksDQo+ ICtERUNMX1JFRyhSVDE3MTFIX1JFR19DTEtfQ1RSTDMsIDEpLA0KPiArREVDTF9SRUcoUlQxNzEx SF9SRUdfQk1DX0NUUkwsIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfQk1DSU9fUlhEWlNF TCwgMSksDQo+ICtERUNMX1JFRyhSVDE3MTFIX1JFR19WQ09OTl9DTElNSVRFTiwgMSksDQo+ICtE RUNMX1JFRyhSVDE3MTFIX1JFR19SVF9TVEFUVVMsIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9S RUdfUlRfSU5ULCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1JUX01BU0ssIDEpLA0KPiAr REVDTF9SRUcoUlQxNzExSF9SRUdfSURMRV9DVFJMLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhf UkVHX0lOVFJTVF9DVFJMLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1dBVENIRE9HX0NU UkwsIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfSTJDUlNUX0NUUkwsIDEpLA0KPiArREVD TF9SRUcoUlQxNzExSF9SRUdfU1dSRVNFVCwgMSksDQo+ICtERUNMX1JFRyhSVDE3MTFIX1JFR19U VENQQ19GSUxURVIsIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfRFJQX1RPR0dMRV9DWUNM RSwgMSksDQo+ICtERUNMX1JFRyhSVDE3MTFIX1JFR19EUlBfRFVUWV9DVFJMLCAxKSwNCj4gK0RF Q0xfUkVHKFJUMTcxMUhfUkVHX0JNQ0lPX1JYRFpFTiwgMSksIH07DQo+ICsNCj4gK3N0YXRpYyBj b25zdCBjaGFyICpydDE3MTFoX2RiZ19maWxlbmFtZVtSVDE3MTFIX0RCR19NQVhdID0gew0KPiAr ImxvZyIsICJyZWdzIiwgInJlZ19hZGRyIiwgImRhdGEiLA0KPiArfTsNCj4gKw0KPiArc3RhdGlj IGJvb2wgcnQxNzExaF9sb2dfZnVsbChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKSB7DQo+ICty ZXR1cm4gY2hpcC0+bG9nYnVmZmVyX3RhaWwgPT0NCj4gKyhjaGlwLT5sb2didWZmZXJfaGVhZCAr IDEpICUgTE9HX0JVRkZFUl9FTlRSSUVTOyB9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIF9ydDE3MTFo X2xvZyhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCBjb25zdCBjaGFyICpmbXQsDQo+ICsgdmFf bGlzdCBhcmdzKQ0KPiArew0KPiArY2hhciB0bXBidWZmZXJbTE9HX0JVRkZFUl9FTlRSWV9TSVpF XTsNCj4gK3U2NCB0c19uc2VjID0gbG9jYWxfY2xvY2soKTsNCj4gK3Vuc2lnbmVkIGxvbmcgcmVt X25zZWM7DQo+ICsNCj4gK2lmICghY2hpcC0+bG9nYnVmZmVyW2NoaXAtPmxvZ2J1ZmZlcl9oZWFk XSkgew0KPiArY2hpcC0+bG9nYnVmZmVyW2NoaXAtPmxvZ2J1ZmZlcl9oZWFkXSA9DQo+ICtkZXZt X2t6YWxsb2MoY2hpcC0+ZGV2LCBMT0dfQlVGRkVSX0VOVFJZX1NJWkUsIEdGUF9LRVJORUwpOw0K PiAraWYgKCFjaGlwLT5sb2didWZmZXJbY2hpcC0+bG9nYnVmZmVyX2hlYWRdKQ0KPiArcmV0dXJu Ow0KPiArfQ0KPiArDQo+ICt2c25wcmludGYodG1wYnVmZmVyLCBzaXplb2YodG1wYnVmZmVyKSwg Zm10LCBhcmdzKTsNCj4gKw0KPiArbXV0ZXhfbG9jaygmY2hpcC0+bG9nYnVmZmVyX2xvY2spOw0K PiArDQo+ICtpZiAocnQxNzExaF9sb2dfZnVsbChjaGlwKSkgew0KPiArY2hpcC0+bG9nYnVmZmVy X2hlYWQgPSBtYXgoY2hpcC0+bG9nYnVmZmVyX2hlYWQgLSAxLCAwKTsNCj4gK3N0cmxjcHkodG1w YnVmZmVyLCAib3ZlcmZsb3ciLCBzaXplb2YodG1wYnVmZmVyKSk7DQo+ICt9DQo+ICsNCj4gK2lm IChjaGlwLT5sb2didWZmZXJfaGVhZCA8IDAgfHwNCj4gK2NoaXAtPmxvZ2J1ZmZlcl9oZWFkID49 IExPR19CVUZGRVJfRU5UUklFUykgew0KPiArZGV2X3dhcm4oY2hpcC0+ZGV2LCAiJXMgYmFkIGxv ZyBidWZmZXIgaW5kZXggJWRcbiIsIF9fZnVuY19fLA0KPiArY2hpcC0+bG9nYnVmZmVyX2hlYWQp Ow0KPiArZ290byBhYm9ydDsNCj4gK30NCj4gKw0KPiAraWYgKCFjaGlwLT5sb2didWZmZXJbY2hp cC0+bG9nYnVmZmVyX2hlYWRdKSB7DQo+ICtkZXZfd2FybihjaGlwLT5kZXYsICIlcyBsb2cgYnVm ZmVyIGluZGV4ICVkIGlzIE5VTExcbiIsDQo+ICtfX2Z1bmNfXywgY2hpcC0+bG9nYnVmZmVyX2hl YWQpOw0KPiArZ290byBhYm9ydDsNCj4gK30NCj4gKw0KPiArcmVtX25zZWMgPSBkb19kaXYodHNf bnNlYywgMTAwMDAwMDAwMCk7DQo+ICtzY25wcmludGYoY2hpcC0+bG9nYnVmZmVyW2NoaXAtPmxv Z2J1ZmZlcl9oZWFkXSwgTE9HX0JVRkZFUl9FTlRSWV9TSVpFLA0KPiArIlslNWx1LiUwNmx1XSAl cyIsICh1bnNpZ25lZCBsb25nKXRzX25zZWMsIHJlbV9uc2VjIC8gMTAwMCwNCj4gKyAgdG1wYnVm ZmVyKTsNCj4gK2NoaXAtPmxvZ2J1ZmZlcl9oZWFkID0gKGNoaXAtPmxvZ2J1ZmZlcl9oZWFkICsg MSkgJQ0KPiArTE9HX0JVRkZFUl9FTlRSSUVTOw0KPiArDQo+ICthYm9ydDoNCj4gK211dGV4X3Vu bG9jaygmY2hpcC0+bG9nYnVmZmVyX2xvY2spOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBy dDE3MTFoX2xvZyhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLA0KPiArY29uc3QgY2hhciAqZm10 LCAuLi4pDQo+ICt7DQo+ICt2YV9saXN0IGFyZ3M7DQo+ICsNCj4gK3ZhX3N0YXJ0KGFyZ3MsIGZt dCk7DQo+ICtfcnQxNzExaF9sb2coY2hpcCwgZm10LCBhcmdzKTsNCj4gK3ZhX2VuZChhcmdzKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBydDE3MTFoX2xvZ19zaG93KHN0cnVjdCBydDE3MTFo X2NoaXAgKmNoaXAsIHN0cnVjdA0KPiArc2VxX2ZpbGUgKnMpIHsNCj4gK2ludCB0YWlsOw0KPiAr DQo+ICttdXRleF9sb2NrKCZjaGlwLT5sb2didWZmZXJfbG9jayk7DQo+ICt0YWlsID0gY2hpcC0+ bG9nYnVmZmVyX3RhaWw7DQo+ICt3aGlsZSAodGFpbCAhPSBjaGlwLT5sb2didWZmZXJfaGVhZCkg ew0KPiArc2VxX3ByaW50ZihzLCAiJXMiLCBjaGlwLT5sb2didWZmZXJbdGFpbF0pOw0KPiArdGFp bCA9ICh0YWlsICsgMSkgJSBMT0dfQlVGRkVSX0VOVFJJRVM7DQo+ICt9DQo+ICtpZiAoIXNlcV9o YXNfb3ZlcmZsb3dlZChzKSkNCj4gK2NoaXAtPmxvZ2J1ZmZlcl90YWlsID0gdGFpbDsNCj4gK211 dGV4X3VubG9jaygmY2hpcC0+bG9nYnVmZmVyX2xvY2spOw0KPiArDQo+ICtyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBydDE3MTFoX3JlZ3Nfc2hvdyhzdHJ1Y3QgcnQxNzExaF9j aGlwICpjaGlwLCBzdHJ1Y3QNCj4gK3NlcV9maWxlICpzKSB7DQo+ICtpbnQgcmV0ID0gMDsNCj4g K2ludCBpID0gMCwgaiA9IDA7DQo+ICtzdHJ1Y3QgcmVnX2Rlc2MgKmRlc2MgPSBOVUxMOw0KPiAr dWludDhfdCByZWd2YWxbMl0gPSB7MH07DQo+ICsNCj4gK2ZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKHJ0MTcxMWhfcmVnX2Rlc2MpOyBpKyspIHsNCj4gK2Rlc2MgPSAmcnQxNzExaF9yZWdfZGVz Y1tpXTsNCj4gK3JldCA9IHJ0MTcxMWhfcmVnX2Jsb2NrX3JlYWQoY2hpcCwgZGVzYy0+YWRkciwg ZGVzYy0+c2l6ZSwNCj4gK3JlZ3ZhbCk7DQo+ICtpZiAocmV0IDwgMCkgew0KPiArZGV2X2Vycihj aGlwLT5kZXYsICIlcyByZWFkIHJlZzB4JTAyWCBmYWlsXG4iLA0KPiArX19mdW5jX18sIGRlc2Mt PmFkZHIpOw0KPiArY29udGludWU7DQo+ICt9DQo+ICsNCj4gK3NlcV9wcmludGYocywgInJlZzB4 JTAyeDoweCIsIGRlc2MtPmFkZHIpOw0KPiArZm9yIChqID0gMDsgaiA8IGRlc2MtPnNpemU7IGor KykNCj4gK3NlcV9wcmludGYocywgIiUwMngsIiwgcmVndmFsW2pdKTsNCj4gK3NlcV9wdXRzKHMs ICJcbiIpOw0KPiArfQ0KPiArDQo+ICtyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu bGluZSBpbnQgcnQxNzExaF9yZWdfYWRkcl9zaG93KHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAs DQo+ICtzdHJ1Y3Qgc2VxX2ZpbGUgKnMpDQo+ICt7DQo+ICtzdHJ1Y3QgcmVnX2Rlc2MgKmRlc2Mg PSAmcnQxNzExaF9yZWdfZGVzY1tjaGlwLT5kYmdfcmVnaWR4XTsNCj4gKw0KPiArc2VxX3ByaW50 ZihzLCAiMHglMDJ4XG4iLCBkZXNjLT5hZGRyKTsNCj4gK3JldHVybiAwOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW5saW5lIGludCBydDE3MTFoX2RhdGFfc2hvdyhzdHJ1Y3QgcnQxNzExaF9jaGlw ICpjaGlwLA0KPiArc3RydWN0IHNlcV9maWxlICpzKQ0KPiArew0KPiAraW50IHJldCA9IDAsIGkg PSAwOw0KPiArc3RydWN0IHJlZ19kZXNjICpkZXNjID0gJnJ0MTcxMWhfcmVnX2Rlc2NbY2hpcC0+ ZGJnX3JlZ2lkeF07DQo+ICt1aW50OF90IHJlZ3ZhbFsyXSA9IHswfTsNCj4gKw0KPiArcmV0ID0g cnQxNzExaF9yZWdfYmxvY2tfcmVhZChjaGlwLCBkZXNjLT5hZGRyLCBkZXNjLT5zaXplLCByZWd2 YWwpOw0KPiAraWYgKHJldCA8IDApDQo+ICtyZXR1cm4gcmV0Ow0KPiArDQo+ICtzZXFfcHJpbnRm KHMsICJyZWcweCUwMng9MHgiLCBkZXNjLT5hZGRyKTsNCj4gK2ZvciAoaSA9IDA7IGkgPCBkZXNj LT5zaXplOyBpKyspDQo+ICtzZXFfcHJpbnRmKHMsICIlMDJ4LCIsIHJlZ3ZhbFtpXSk7DQo+ICtz ZXFfcHV0cyhzLCAiXG4iKTsNCj4gK3JldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50 IHJ0MTcxMWhfZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KSB7DQo+ICtpbnQg cmV0ID0gMDsNCj4gK3N0cnVjdCBydDE3MTFoX2RiZ19pbmZvICppbmZvID0gKHN0cnVjdCBydDE3 MTFoX2RiZ19pbmZvICopcy0+cHJpdmF0ZTsNCj4gK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAg PSBpbmZvLT5jaGlwOw0KPiArDQo+ICttdXRleF9sb2NrKCZjaGlwLT5kYmdvcHNfbG9jayk7DQo+ ICtzd2l0Y2ggKGluZm8tPmlkKSB7DQo+ICtjYXNlIFJUMTcxMUhfREJHX0xPRzoNCj4gK3JldCA9 IHJ0MTcxMWhfbG9nX3Nob3coY2hpcCwgcyk7DQo+ICticmVhazsNCj4gK2Nhc2UgUlQxNzExSF9E QkdfUkVHUzoNCj4gK3JldCA9IHJ0MTcxMWhfcmVnc19zaG93KGNoaXAsIHMpOw0KPiArYnJlYWs7 DQo+ICtjYXNlIFJUMTcxMUhfREJHX1JFR19BRERSOg0KPiArcmV0ID0gcnQxNzExaF9yZWdfYWRk cl9zaG93KGNoaXAsIHMpOw0KPiArYnJlYWs7DQo+ICtjYXNlIFJUMTcxMUhfREJHX0RBVEE6DQo+ ICtyZXQgPSBydDE3MTFoX2RhdGFfc2hvdyhjaGlwLCBzKTsNCj4gK2JyZWFrOw0KPiArZGVmYXVs dDoNCj4gK3JldCA9IC1FSU5WQUw7DQo+ICticmVhazsNCj4gK30NCj4gKw0KPiArbXV0ZXhfdW5s b2NrKCZjaGlwLT5kYmdvcHNfbG9jayk7DQo+ICtyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW50IHJ0MTcxMWhfZGJnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZp bGUgKmZpbGUpIHsNCj4gK2lmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQ0KPiArcmV0dXJu IHNpbmdsZV9vcGVuKGZpbGUsIHJ0MTcxMWhfZGJnX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOw0K PiArZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsNCj4gK3JldHVybiAwOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGdldF9wYXJhbWV0ZXJzKGNoYXIgKmJ1ZiwgbG9uZyBp bnQgKnBhcmFtMSwgaW50DQo+ICtudW1fb2ZfcGFyKSB7DQo+ICtjaGFyICp0b2tlbjsNCj4gK2lu dCBiYXNlLCBjbnQ7DQo+ICsNCj4gK3Rva2VuID0gc3Ryc2VwKCZidWYsICIgIik7DQo+ICsNCj4g K2ZvciAoY250ID0gMDsgY250IDwgbnVtX29mX3BhcjsgY250KyspIHsNCj4gK2lmICh0b2tlbiAh PSBOVUxMKSB7DQo+ICtpZiAoKHRva2VuWzFdID09ICd4JykgfHwgKHRva2VuWzFdID09ICdYJykp DQo+ICtiYXNlID0gMTY7DQo+ICtlbHNlDQo+ICtiYXNlID0gMTA7DQo+ICsNCj4gK2lmIChrc3Ry dG91bCh0b2tlbiwgYmFzZSwgJnBhcmFtMVtjbnRdKSAhPSAwKQ0KPiArcmV0dXJuIC1FSU5WQUw7 DQo+ICsNCj4gK3Rva2VuID0gc3Ryc2VwKCZidWYsICIgIik7DQo+ICt9IGVsc2UNCj4gK3JldHVy biAtRUlOVkFMOw0KPiArfQ0KPiArcmV0dXJuIDA7DQo+ICt9DQoNCldoYXQgaXMgdGhpcyBmdW5j dGlvbiBkb2luZz8gIFdoYXQgaXMgeW91ciBkZWJ1Z2ZzIGZpbGVzIGZvcj8NCg0KVGhlcmUgYXJl IDQgZGVidWcgZmlsZXMuDQpGaXJzdChsb2cpIGlzIGZvciBsb2dnaW5nIHdoaWNoIG5lZWRzIGEg bG9jayBmb3IgbG9nIGJ1ZmZlci4gVGhlIHdheSB0byBsb2cgaXMgcmVmZXJlbmNlZCBmcm9tIGZ1 c2IzMDIgYW5kIHRjcG0uDQpTZWNvbmQocmVncykgaXMgdXNlZCB0byBkdW1wIGFsbCByZWdpc3Rl ciBvZiBydDE3MTFoLg0KVGhpcmQocmVnX2FkZHIpJkZvcnRoKGRhdGEpIGFyZSB1c2VkIHRvIHdy aXRlL3JlYWQgYSByZWdpc3RlciBzcGVjaWZpZWQgaW4gcmVnX2FkZHIuDQpUaGUgcmVhc29uIHRv IGNyZWF0ZSB0aGVzZSBkZWJ1ZyBmaWxlcyBpcyB0byBtYWtlIGlzc3VlIHN1cHBvcnQgZWFzaWVy Lg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQoNCj4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMNCj4gK3N0cnVj dCBkZW50cnkgKmRiZ2RpcjsNCj4gK3N0cnVjdCBydDE3MTFoX2RiZ19pbmZvIGRiZ19pbmZvW1JU MTcxMUhfREJHX01BWF07DQo+ICtzdHJ1Y3QgZGVudHJ5ICpkYmdfZmlsZXNbUlQxNzExSF9EQkdf TUFYXTsNCj4gK2ludCBkYmdfcmVnaWR4Ow0KPiArc3RydWN0IG11dGV4IGRiZ29wc19sb2NrOw0K PiArLyogbG9jayBmb3IgbG9nIGJ1ZmZlciBhY2Nlc3MgKi8NCj4gK3N0cnVjdCBtdXRleCBsb2di dWZmZXJfbG9jazsNCj4gK2ludCBsb2didWZmZXJfaGVhZDsNCj4gK2ludCBsb2didWZmZXJfdGFp bDsNCj4gK3U4ICpsb2didWZmZXJbTE9HX0JVRkZFUl9FTlRSSUVTXTsNCj4gKyNlbmRpZiAvKiBD T05GSUdfREVCVUdfRlMgKi8NCg0KVGhhdCdzIGEgbG90IG9mIHN0dWZmIGpzdXQgZm9yIGRlYnVn ZnMuICBXaHkgZG8geW91IGNhcmUgYWJvdXQgI2RlZmluZSBhdCBhbGw/ICBUaGUgY29kZSBzaG91 bGQgbm90Lg0KDQpJcyB0aGUgc3VnZ2VzdGlvbiB0byByZW1vdmUgI2lmZGVmIENPTkZJR19ERUJV R19GUz8NCg0KQW5kIGFub3RoZXIgMiBsb2Nrcz8gIEljaywgbm8uDQoNCmRiZ29wc19sb2NrIGlz IHVzZWQgdG8gcHJldmVudCB1c2VyIGZyb20gYWNjZXNzaW5nIGRpZmZlcmVudCBkZWJ1ZyBmaWxl cyBzaW11bHRhbmVvdXNseS4NCklzIHRoZSBzdWdnZXN0aW9uIHRvIHVzZSB0aGUgbG9jayBvZiB0 aGUgZm9sbG93aW5nIG9uZT8NCj4gKy8qIGxvY2sgZm9yIHNoYXJpbmcgY2hpcCBzdGF0ZXMgKi8N Cj4gK3N0cnVjdCBtdXRleCBsb2NrOw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCj4gK3NucHJpbnRmKGRp cm5hbWUsIGxlbiArIDksICJydDE3MTFoLSVzIiwgZGV2X25hbWUoY2hpcC0+ZGV2KSk7DQo+ICtp ZiAoIWNoaXAtPmRiZ2Rpcikgew0KPiArY2hpcC0+ZGJnZGlyID0gZGVidWdmc19jcmVhdGVfZGly KGRpcm5hbWUsIE5VTEwpOw0KPiAraWYgKCFjaGlwLT5kYmdkaXIpDQo+ICtyZXR1cm4gLUVOT01F TTsNCg0KTm8gbmVlZCB0byBldmVyIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgZGVidWdmc18g Y2FsbHMsIHlvdSBzaG91bGQgbm90IGNhcmUgYW5kIGNhbiBhbHdheXMgdXNlIHRoZSB2YWx1ZSB0 byBhbnkgZnV0dXJlIGRlYnVnZnMgY2FsbHMsIGlmIHlvdSByZWFsbHkgbmVlZCBpdC4NCg0KSWYg aXQgaXMgTlVMTCB3aXRob3V0IGNoZWNraW5nIGFuZCB3ZSB1c2UgaXQgaW4gZGVidWdmc19jcmVh dGVfZmlsZSwgYWxsIHRoZSBkZWJ1ZyBmaWxlcyB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIHJvb3Qg b2YgdGhlIGRlYnVnZnMgZmlsZXN5c3RlbS4NCklzIHRoaXMgY29ycmVjdD8NCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KDQo+ICtmb3IgKGkgPSAwOyBpIDwgUlQxNzExSF9EQkdfTUFYOyBpKyspIHsNCj4gK2lu Zm8gPSAmY2hpcC0+ZGJnX2luZm9baV07DQoNCnN0YXRpYyBhcnJheSBvZiBkZWJ1ZyBpbmZvPyAg VGhhdCBmZWVscyBvZGQuDQoNCklzIHRoZSBzdWdnZXN0aW9uIHRvIHVzZSBwb2ludGVyIG9mIGFy cmF5IGFuZCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaXQ/DQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KTGlr ZSBoZXJlLCB5b3UgZG9uJ3QgbmVlZCB0aGlzLCBhbmQgeW91IGRvbid0IG5lZWQgdG8gY2FyZSBh Ym91dCB0aGUgcmV0dXJuIHZhbHVlLg0KDQo+ICtnb3RvIGVycjsNCj4gK30NCj4gK30NCj4gKw0K PiArcmV0dXJuIDA7DQo+ICtlcnI6DQo+ICtkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2hpcC0+ ZGJnZGlyKTsNCj4gK3JldHVybiByZXQ7DQoNCldoeSBkbyB5b3UgY2FyZSBhYm91dCBhbiBlcnJv ciBoZXJlPyAgWW91ciBjb2RlIHNob3VsZCBub3QgZG8gYW55dGhpbmcgZGlmZmVyZW50IGlmIGRl YnVnZnMgc3R1ZmYgZG9lcyBub3Qgd29yayBvciBpZiBpdCBkb2VzLiAgSXQncyBkZWJ1Z2dpbmcg b25seS4NCk9rLCB0aGlzIHdpbGwgYmUgcmVtb3ZlZC4NCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpCZXN0 IFJlZ2FyZHMsDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KU2h1LUZhbiBMZWUNClJp Y2h0ZWsgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbg0KVEVMOiArODg2LTMtNTUyNjc4OSAjMjM1OQ0K RkFYOiArODg2LTMtNTUyNjYxMg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCg0KLS0t LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IEdyZWcgS0ggW21haWx0bzpncmVnQGtyb2Fo LmNvbV0NClNlbnQ6IFdlZG5lc2RheSwgSmFudWFyeSAxNywgMjAxOCA5OjQyIFBNDQpUbzogU2h1 RmFuTGVlDQpDYzogaGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbTsgY3lfaHVhbmcotsCx 0q3sKTsgc2h1ZmFuX2xlZSin9a7RpnwpOyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBs aW51eC11c2JAdmdlci5rZXJuZWwub3JnDQpTdWJqZWN0OiBSZTogW1BBVENIXSBVU0IgVFlQRUM6 IFJUMTcxMUggVHlwZS1DIENoaXAgRHJpdmVyDQoNCk9uIFdlZCwgSmFuIDEwLCAyMDE4IGF0IDAy OjU5OjEyUE0gKzA4MDAsIFNodUZhbkxlZSB3cm90ZToNCj4gRnJvbTogU2h1RmFuTGVlIDxzaHVm YW5fbGVlQHJpY2h0ZWsuY29tPg0KPg0KPiBSaWNodGVrIFJUMTcxMUggVHlwZS1DIGNoaXAgZHJp dmVyIHRoYXQgd29ya3Mgd2l0aCBUeXBlLUMgUG9ydA0KPiBDb250cm9sbGVyIE1hbmFnZXIgdG8g cHJvdmlkZSBVU0IgUEQgYW5kIFVTQiBUeXBlLUMgZnVuY3Rpb25hbGl0aWVzLg0KPg0KPiBTaWdu ZWQtb2ZmLWJ5OiBTaHVGYW5MZWUgPHNodWZhbl9sZWVAcmljaHRlay5jb20+DQoNCk1pbm9yIHJl dmlldyBvZiB5b3VyIG1haW4gc3RydWN0dXJlIGFuZCB5b3VyIGRlYnVnZnMgY29kZSBhbmQgb3Ro ZXIgc3R1ZmYsIGFsbCBvZiB3aGljaCBuZWVkIHdvcms6DQoNCj4gLS0tDQo+ICAuLi4vZGV2aWNl dHJlZS9iaW5kaW5ncy91c2IvcmljaHRlayxydDE3MTFoLnR4dCAgICB8ICAgMzggKw0KPiAgYXJj aC9hcm02NC9ib290L2R0cy9oaXNpbGljb24vcnQxNzExaC5kdHNpICAgICAgICAgfCAgIDExICsN Cj4gIGRyaXZlcnMvdXNiL3R5cGVjL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMiArDQo+ICBkcml2ZXJzL3VzYi90eXBlYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgIDEgKw0KPiAgZHJpdmVycy91c2IvdHlwZWMvcnQxNzExaC9LY29uZmlnICAgICAg ICAgICAgICAgICAgfCAgICA3ICsNCj4gIGRyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgvTWFrZWZp bGUgICAgICAgICAgICAgICAgIHwgICAgMiArDQo+ICBkcml2ZXJzL3VzYi90eXBlYy9ydDE3MTFo L3J0MTcxMWguYyAgICAgICAgICAgICAgICB8IDIyNDEgKysrKysrKysrKysrKysrKysrKysNCj4g IGRyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgvcnQxNzExaC5oICAgICAgICAgICAgICAgIHwgIDMw MCArKysNCj4gIDggZmlsZXMgY2hhbmdlZCwgMjYwMiBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQNCj4gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9yaWNo dGVrLHJ0MTcxMWgudHh0DQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm02NC9ib290L2R0 cy9oaXNpbGljb24vcnQxNzExaC5kdHNpDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91 c2IvdHlwZWMvcnQxNzExaC9LY29uZmlnICBjcmVhdGUgbW9kZQ0KPiAxMDA2NDQgZHJpdmVycy91 c2IvdHlwZWMvcnQxNzExaC9NYWtlZmlsZQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv dXNiL3R5cGVjL3J0MTcxMWgvcnQxNzExaC5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy91c2IvdHlwZWMvcnQxNzExaC9ydDE3MTFoLmgNCj4NCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvcmljaHRlayxydDE3MTFoLnR4dA0KPiBiL0Rv Y3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvcmljaHRlayxydDE3MTFoLnR4dA0K PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi5jMjgyOTljDQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9y aWNodGVrLHJ0MTcxMWgudHh0DQo+IEBAIC0wLDAgKzEsMzggQEANCj4gK1JpY2h0ZWsgUlQxNzEx SCBUeXBlLUMgUG9ydCBDb250cm9sbGVyLg0KPiArDQo+ICtSZXF1aXJlZCBwcm9wZXJ0aWVzOg0K PiArLSBjb21wYXRpYmxlIDogTXVzdCBiZSAicmljaHRlayx0eXBlY19ydDE3MTFoIjsNCj4gKy0g cmVnIDogTXVzdCBiZSAweDRlLCBpdCdzIGRlZmF1bHQgc2xhdmUgYWRkcmVzcyBvZiBSVDE3MTFI Lg0KPiArLSBydCxpbnRyX2dwaW8gOiBJUlEgR1BJTyBwaW4gdGhhdCdzIGNvbm5lY3RlZCB0byBS VDE3MTFIIGludGVycnVwdC4NCj4gKw0KPiArT3B0aW9uYWwgbm9kZToNCj4gKy0gcnQsbmFtZSA6 IE5hbWUgdXNlZCBmb3IgcmVnaXN0ZXJpbmcgSVJRIGFuZCBjcmVhdGluZyBrdGhyZWFkLg0KPiAr ICAgIElmIHRoaXMgcHJvcGVydHkgaXMgbm90IHNwZWNpZmllZCwgImRlZmF1bHQiIHdpbGwgYmUg YXBwbGllZC4NCj4gKy0gcnQsZGVmX3JvbGUgOiBEZWZhdWx0IHBvcnQgcm9sZSAoVFlQRUNfU0lO SygwKSBvciBUWVBFQ19TT1VSQ0UoMSkpLg0KPiArU2V0IHRvIFRZUEVDX05PX1BSRUZFUlJFRF9S T0xFKC0xKSBpZiBubyBkZWZhdWx0IHJvbGUuDQo+ICtJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBz cGVjaWZpZWQsIFRZUEVDX1NJTksgd2lsbCBiZSBhcHBsaWVkLg0KPiArLSBydCxwb3J0X3R5cGUg OiBQb3J0IHR5cGUgKFRZUEVDX1BPUlRfREZQKDApLCBUWVBFQ19QT1JUX1VGUCgxKSwNCj4gKyBv ciBUWVBFQ19QT1JUX0RSUCgyKSkuIElmIHRoaXMgcHJvcGVydHkgaXMgbm90IHNwZWNpZmllZCwN Cj4gKyBUWVBFQ19QT1JUX0RSUCB3aWxsIGJlIGFwcGxpZWQuDQo+ICstIHJ0LG1heF9zbmtfbXYg OiBNYXhpbXVtIGFjY2VwdGFibGUgc2luayB2b2x0YWdlIGluIG1WLg0KPiArICBJZiB0aGlzIHBy b3BlcnR5IGlzIG5vdCBzcGVjaWZpZWQsIDUwMDBtViB3aWxsIGJlIGFwcGxpZWQuDQo+ICstIHJ0 LG1heF9zbmtfbWEgOiBNYXhpbXVtIHNpbmsgY3VycmVudCBpbiBtQS4NCj4gKyAgSWYgdGhpcyBw cm9wZXJ0eSBpcyBub3Qgc3BlY2lmaWVkLCAzMDAwbUEgd2lsbCBiZSBhcHBsaWVkLg0KPiArLSBy dCxtYXhfc25rX213IDogTWF4aW11bSByZXF1aXJlZCBzaW5rIHBvd2VyIGluIG1XLg0KPiArICBJ ZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBzcGVjaWZpZWQsIDE1MDAwbVcgd2lsbCBiZSBhcHBsaWVk Lg0KPiArLSBydCxvcGVyYXRpbmdfc25rX213IDogUmVxdWlyZWQgb3BlcmF0aW5nIHNpbmsgcG93 ZXIgaW4gbVcuDQo+ICtJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBzcGVjaWZpZWQsDQo+ICsyNTAw bVcgd2lsbCBiZSBhcHBsaWVkLg0KPiArLSBydCx0cnlfcm9sZV9odyA6IFRydWUgaWYgdHJ5LntT cmMsU25rfSBpcyBpbXBsZW1lbnRlZCBpbiBoYXJkd2FyZS4NCj4gKyAgIElmIHRoaXMgcHJvcGVy dHkgaXMgbm90IHNwZWNpZmllZCwgRmFsc2Ugd2lsbCBiZSBhcHBsaWVkLg0KPiArDQo+ICtFeGFt cGxlOg0KPiArcnQxNzExaEA0ZSB7DQo+ICtzdGF0dXMgPSAib2siOw0KPiArY29tcGF0aWJsZSA9 ICJyaWNodGVrLHR5cGVjX3J0MTcxMWgiOw0KPiArcmVnID0gPDB4NGU+Ow0KPiArcnQsaW50cl9n cGlvID0gPCZncGlvMjYgMCAweDA+Ow0KPiArcnQsbmFtZSA9ICJydDE3MTFoIjsNCj4gK3J0LHBv cnRfdHlwZSA9IDwyPjsgLyogMDogREZQLCAxOiBVRlAsIDI6IERSUCAqLw0KPiArcnQsZGVmX3Jv bGUgPSA8MD47IC8qIDA6IFNOSywgMTogU1JDLCAtMTogVFlQRUNfTk9fUFJFRkVSUkVEX1JPTEUg Ki8NCj4gK307DQoNCmR0cyBzdHVmZiBuZWVkcyB0byBhbHdheXMgYmUgaW4gYSBzZXBhcmF0ZSBm aWxlIHNvIHRoZSBEVCBtYWludGFpbmVycyBjYW4gcmV2aWV3L2FjayBpdC4gIFNwbGl0IHRoaXMg cGF0Y2ggdXAgaW50byBzbWFsbGVyIHBpZWNlcyBwbGVhc2UuDQoNCg0KPiBkaWZmIC0tZ2l0IGEv YXJjaC9hcm02NC9ib290L2R0cy9oaXNpbGljb24vcnQxNzExaC5kdHNpDQo+IGIvYXJjaC9hcm02 NC9ib290L2R0cy9oaXNpbGljb24vcnQxNzExaC5kdHNpDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAuLjQxOTZjYzANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9hcmNo L2FybTY0L2Jvb3QvZHRzL2hpc2lsaWNvbi9ydDE3MTFoLmR0c2kNCj4gQEAgLTAsMCArMSwxMSBA QA0KPiArJmkyYzcgew0KPiArcnQxNzExaEA0ZSB7DQo+ICtzdGF0dXMgPSAib2siOw0KPiArY29t cGF0aWJsZSA9ICJyaWNodGVrLHR5cGVjX3J0MTcxMWgiOw0KPiArcmVnID0gPDB4NGU+Ow0KPiAr cnQsaW50cl9ncGlvID0gPCZncGlvMjYgMCAweDA+Ow0KPiArcnQsbmFtZSA9ICJydDE3MTFoIjsN Cj4gK3J0LHBvcnRfdHlwZSA9IDwyPjsgLyogMDogREZQLCAxOiBVRlAsIDI6IERSUCAqLw0KPiAr cnQsZGVmX3JvbGUgPSA8MD47IC8qIDA6IFNOSywgMTogU1JDICovDQo+ICt9Ow0KPiArfTsNCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL0tjb25maWcgYi9kcml2ZXJzL3VzYi90eXBl Yy9LY29uZmlnDQo+IGluZGV4IGJjYjI3NDQuLjdiZWRlMGIgMTAwNjQ0DQo+IC0tLSBhL2RyaXZl cnMvdXNiL3R5cGVjL0tjb25maWcNCj4gKysrIGIvZHJpdmVycy91c2IvdHlwZWMvS2NvbmZpZw0K PiBAQCAtNTYsNiArNTYsOCBAQCBpZiBUWVBFQ19UQ1BNDQo+DQo+ICBzb3VyY2UgImRyaXZlcnMv dXNiL3R5cGVjL2Z1c2IzMDIvS2NvbmZpZyINCj4NCj4gK3NvdXJjZSAiZHJpdmVycy91c2IvdHlw ZWMvcnQxNzExaC9LY29uZmlnIg0KPiArDQo+ICBjb25maWcgVFlQRUNfV0NPVkUNCj4gIHRyaXN0 YXRlICJJbnRlbCBXaGlza2V5Q292ZSBQTUlDIFVTQiBUeXBlLUMgUEhZIGRyaXZlciINCj4gIGRl cGVuZHMgb24gQUNQSQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvTWFrZWZpbGUg Yi9kcml2ZXJzL3VzYi90eXBlYy9NYWtlZmlsZQ0KPiBpbmRleCBiYjMxMzhhLi5lM2FhZjNjIDEw MDY0NA0KPiAtLS0gYS9kcml2ZXJzL3VzYi90eXBlYy9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJz L3VzYi90eXBlYy9NYWtlZmlsZQ0KPiBAQCAtMiw2ICsyLDcgQEANCj4gIG9iai0kKENPTkZJR19U WVBFQykrPSB0eXBlYy5vDQo+ICBvYmotJChDT05GSUdfVFlQRUNfVENQTSkrPSB0Y3BtLm8NCj4g IG9iai15Kz0gZnVzYjMwMi8NCj4gK29iai0kKENPTkZJR19UWVBFQ19SVDE3MTFIKSs9IHJ0MTcx MWgvDQoNCldoeSBkbyB5b3UgbmVlZCBhIHdob2xlIGRpcmVjdG9yeSBmb3Igb25lIGZpbGU/DQoN Cg0KPiAgb2JqLSQoQ09ORklHX1RZUEVDX1dDT1ZFKSs9IHR5cGVjX3djb3ZlLm8NCj4gIG9iai0k KENPTkZJR19UWVBFQ19VQ1NJKSs9IHVjc2kvDQo+ICBvYmotJChDT05GSUdfVFlQRUNfVFBTNjU5 OFgpKz0gdHBzNjU5OHgubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvcnQxNzEx aC9LY29uZmlnDQo+IGIvZHJpdmVycy91c2IvdHlwZWMvcnQxNzExaC9LY29uZmlnDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjJmYmZmZjUNCj4gLS0tIC9kZXYvbnVs bA0KPiArKysgYi9kcml2ZXJzL3VzYi90eXBlYy9ydDE3MTFoL0tjb25maWcNCj4gQEAgLTAsMCAr MSw3IEBADQo+ICtjb25maWcgVFlQRUNfUlQxNzExSA0KPiArdHJpc3RhdGUgIlJpY2h0ZWsgUlQx NzExSCBUeXBlLUMgY2hpcCBkcml2ZXIiDQo+ICtkZXBlbmRzIG9uIEkyQyAmJiBQT1dFUl9TVVBQ TFkNCj4gK2hlbHANCj4gKyAgVGhlIFJpY2h0ZWsgUlQxNzExSCAgIFR5cGUtQyBjaGlwIGRyaXZl ciB0aGF0IHdvcmtzIHdpdGgNCj4gKyAgVHlwZS1DIFBvcnQgQ29udHJvbGxlciBNYW5hZ2VyIHRv IHByb3ZpZGUgVVNCIFBEIGFuZCBVU0INCj4gKyAgVHlwZS1DIGZ1bmN0aW9uYWxpdGllcy4NCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgvTWFrZWZpbGUNCj4gYi9kcml2 ZXJzL3VzYi90eXBlYy9ydDE3MTFoL01ha2VmaWxlDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ IGluZGV4IDAwMDAwMDAuLjVmYWI4YWUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJz L3VzYi90eXBlYy9ydDE3MTFoL01ha2VmaWxlDQo+IEBAIC0wLDAgKzEsMiBAQA0KPiArIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiArb2JqLSQoQ09ORklHX1RZUEVDX1JUMTcx MUgpKz0gcnQxNzExaC5vDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy9ydDE3MTFo L3J0MTcxMWguYw0KPiBiL2RyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgvcnQxNzExaC5jDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjFhZWYzZTgNCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9kcml2ZXJzL3VzYi90eXBlYy9ydDE3MTFoL3J0MTcxMWguYw0KPiBAQCAt MCwwICsxLDIyNDEgQEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKw0K PiArLyoNCj4gKyAqIENvcHlyaWdodCAyMDE3IFJpY2h0ZWsgVGVjaG5vbG9naCBDb3JwLg0KPiAr ICoNCj4gKyAqIFJpY2h0ZWsgUlQxNzExSCBUeXBlLUMgQ2hpcCBEcml2ZXIgICovDQo+ICsNCj4g KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4N Cj4gKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+ DQo+ICsjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1 bnRpbWUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC91 c2IvdHlwZWMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC91c2IvdGNwbS5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L3VzYi9wZC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4NCj4gKyNpbmNs dWRlIDxsaW51eC9vZi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ICsjaW5jbHVk ZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1 bWVyLmg+ICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9leHRjb24uaD4gI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPiAjaW5jbHVkZQ0KPiArPGxp bnV4L2t0aHJlYWQuaD4gI2luY2x1ZGUgPGxpbnV4L2NwdS5oPiAjaW5jbHVkZQ0KPiArPGxpbnV4 L2FsYXJtdGltZXIuaD4gI2luY2x1ZGUgPGxpbnV4L3NjaGVkL2Nsb2NrLmg+ICNpbmNsdWRlDQo+ ICs8dWFwaS9saW51eC9zY2hlZC90eXBlcy5oPg0KDQpUaGlzIGxhc3QgI2luY2x1ZGUgc2hvdWxk IG5vdCBiZSBuZWVkZWQuICBJZiBpdCBkb2VzLCB5b3UgYXJlIGRvaW5nIHNvbWV0aGluZyByZWFs bHkgd3JvbmcuLi4NCg0KPiArDQo+ICsjaW5jbHVkZSAicnQxNzExaC5oIg0KDQpXaHkgYSAuaCBm aWxlIGZvciBhIHNpbmdsZSAuYyBmaWxlPw0KDQo+ICsNCj4gKyNkZWZpbmUgUlQxNzExSF9EUlZf VkVSU0lPTiIxLjAuMyINCg0KV2hlbiBjb2RlIGlzIGluIHRoZSBrZXJuZWwgdHJlZSwgdmVyc2lv bnMgbWVhbiBub3RoaW5nLCB5b3Ugd2lsbCBub3RlIHRoYXQgbm8gb3RoZXIgVVNCIGRyaXZlciBo YXMgdGhlbSwgcmlnaHQ/ICBQbGVhc2UgcmVtb3ZlLg0KDQoNCj4gKw0KPiArI2RlZmluZSBMT0df QlVGRkVSX0VOVFJJRVMxMDI0DQo+ICsjZGVmaW5lIExPR19CVUZGRVJfRU5UUllfU0laRTEyOCAv KiAxMjggY2hhciBwZXIgbGluZSAqLw0KPiArDQo+ICtlbnVtIHsNCj4gK1JUMTcxMUhfREJHX0xP RyA9IDAsDQo+ICtSVDE3MTFIX0RCR19SRUdTLA0KPiArUlQxNzExSF9EQkdfUkVHX0FERFIsDQo+ ICtSVDE3MTFIX0RCR19EQVRBLA0KPiArUlQxNzExSF9EQkdfTUFYLA0KPiArfTsNCj4gKw0KPiAr c3RydWN0IHJ0MTcxMWhfZGJnX2luZm8gew0KPiArc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcDsN Cj4gK2ludCBpZDsNCj4gK307DQo+ICsNCj4gKw0KPiArc3RydWN0IHJ0MTcxMWhfY2hpcCB7DQo+ ICtzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjOw0KPiArc3RydWN0IGRldmljZSAqZGV2Ow0KPiArdWlu dDE2X3QgZGlkOw0KDQprZXJuZWwgdHlwZXMgYXJlIHUxNiwgdTMyLCB1OCwgYW5kIHRoZSBsaWtl LCBub3QgdWludDE2X3QsIHRob3NlIGFyZSBmb3IgdXNlcnNwYWNlIGNvZGUgb25seS4NCg0KWWVh aCwgb3RoZXIgZHJpdmVycyBkbyBpdCwgYnV0IHlvdSBzaG91bGRuJ3QgOikNCg0KDQo+ICtpbnQg aXJxX2dwaW87DQo+ICtpbnQgaXJxOw0KPiArY2hhciAqbmFtZTsNCj4gK3N0cnVjdCB0Y3BjX2Rl diB0Y3BjX2RldjsNCj4gK3N0cnVjdCB0Y3BjX2NvbmZpZyB0Y3BjX2NmZzsNCj4gK3N0cnVjdCB0 Y3BtX3BvcnQgKnRjcG1fcG9ydDsNCj4gK3N0cnVjdCByZWd1bGF0b3IgKnZidXM7DQo+ICtzdHJ1 Y3QgZXh0Y29uX2RldiAqZXh0Y29uOw0KPiArDQo+ICsvKiBJUlEgKi8NCj4gK3N0cnVjdCBrdGhy ZWFkX3dvcmtlciBpcnFfd29ya2VyOw0KPiArc3RydWN0IGt0aHJlYWRfd29yayBpcnFfd29yazsN Cj4gK3N0cnVjdCB0YXNrX3N0cnVjdCAqaXJxX3dvcmtlcl90YXNrOw0KDQozIHRoaW5ncyBmb3Ig YW4gaXJxIGhhbmRsZXI/ICBUaGF0IGZlZWxzIHdyb25nLg0KDQo+ICthdG9taWNfdCBwb2xsX2Nv dW50Ow0KDQpMaWtlIEkgc2FpZCBiZWZvcmUsIHdoeSBpcyB0aGlzIGFuIGF0b21pYz8NCg0KPiAr c3RydWN0IGRlbGF5ZWRfd29yayBwb2xsX3dvcms7DQo+ICsNCj4gKy8qIExQTSAqLw0KPiArc3Ry dWN0IGRlbGF5ZWRfd29yayB3YWtldXBfd29yazsNCj4gK3N0cnVjdCBhbGFybSB3YWtldXBfdGlt ZXI7DQo+ICtzdHJ1Y3QgbXV0ZXggd2FrZXVwX2xvY2s7DQo+ICtlbnVtIHR5cGVjX2NjX3B1bGwg bHBtX3B1bGw7DQo+ICtib29sIHdha2V1cF9vbmNlOw0KPiArYm9vbCBsb3dfcnBfZHV0eV9jbnRk b3duOw0KPiArYm9vbCBjYWJsZV9vbmx5Ow0KPiArYm9vbCBscG07DQo+ICsNCj4gKy8qIEkyQyAq Lw0KPiArYXRvbWljX3QgaTJjX2J1c3k7DQo+ICthdG9taWNfdCBwbV9zdXNwZW5kOw0KDQpXaHkg YXJlIHRoZXNlIGF0b21pYz8gIFlvdSBrbm93IHRoYXQgZG9lc24ndCBtZWFuIHRoZXkgZG8gbm90 IG5lZWQgbG9ja2luZywgcmlnaHQ/DQoNCj4gKw0KPiArLyogcHN5ICsgcHN5IHN0YXR1cyAqLw0K PiArc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5Ow0KPiArdTMyIGN1cnJlbnRfbGltaXQ7DQo+ICt1 MzIgc3VwcGx5X3ZvbHRhZ2U7DQo+ICsNCj4gKy8qIGxvY2sgZm9yIHNoYXJpbmcgY2hpcCBzdGF0 ZXMgKi8NCj4gK3N0cnVjdCBtdXRleCBsb2NrOw0KDQpIb3cgbWFueSBsb2NrcyBkbyB5b3UgaGF2 ZSBpbiB0aGlzIHN0cnVjdHVyZT8gIFlvdSBzaG91bGQgb25seSBuZWVkIDEuDQoNCj4gKw0KPiAr LyogcG9ydCBzdGF0dXMgKi8NCj4gK2Jvb2wgdmNvbm5fb247DQo+ICtib29sIHZidXNfb247DQo+ ICtib29sIGNoYXJnZV9vbjsNCj4gK2Jvb2wgdmJ1c19wcmVzZW50Ow0KPiArZW51bSB0eXBlY19j Y19wb2xhcml0eSBwb2xhcml0eTsNCj4gK2VudW0gdHlwZWNfY2Nfc3RhdHVzIGNjMTsNCj4gK2Vu dW0gdHlwZWNfY2Nfc3RhdHVzIGNjMjsNCj4gK2VudW0gdHlwZWNfcm9sZSBwd3Jfcm9sZTsNCj4g K2Jvb2wgZHJwX3RvZ2dsaW5nOw0KPiArDQo+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTDQo+ICtz dHJ1Y3QgZGVudHJ5ICpkYmdkaXI7DQo+ICtzdHJ1Y3QgcnQxNzExaF9kYmdfaW5mbyBkYmdfaW5m b1tSVDE3MTFIX0RCR19NQVhdOw0KPiArc3RydWN0IGRlbnRyeSAqZGJnX2ZpbGVzW1JUMTcxMUhf REJHX01BWF07DQo+ICtpbnQgZGJnX3JlZ2lkeDsNCj4gK3N0cnVjdCBtdXRleCBkYmdvcHNfbG9j azsNCj4gKy8qIGxvY2sgZm9yIGxvZyBidWZmZXIgYWNjZXNzICovDQo+ICtzdHJ1Y3QgbXV0ZXgg bG9nYnVmZmVyX2xvY2s7DQo+ICtpbnQgbG9nYnVmZmVyX2hlYWQ7DQo+ICtpbnQgbG9nYnVmZmVy X3RhaWw7DQo+ICt1OCAqbG9nYnVmZmVyW0xPR19CVUZGRVJfRU5UUklFU107DQo+ICsjZW5kaWYg LyogQ09ORklHX0RFQlVHX0ZTICovDQoNClRoYXQncyBhIGxvdCBvZiBzdHVmZiBqc3V0IGZvciBk ZWJ1Z2ZzLiAgV2h5IGRvIHlvdSBjYXJlIGFib3V0ICNkZWZpbmUgYXQgYWxsPyAgVGhlIGNvZGUg c2hvdWxkIG5vdC4NCg0KQW5kIGFub3RoZXIgMiBsb2Nrcz8gIEljaywgbm8uDQoNCg0KPiArfTsN Cj4gKw0KPiArLyoNCj4gKyAqIExvZ2dpbmcgJiBkZWJ1Z2dpbmcNCj4gKyAqLw0KPiArDQo+ICsj aWZkZWYgQ09ORklHX0RFQlVHX0ZTDQo+ICsNCj4gK3N0YXRpYyBpbnQgcnQxNzExaF9yZWdfYmxv Y2tfcmVhZChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCB1aW50OF90IHJlZywNCj4gK2ludCBs ZW4sIHVpbnQ4X3QgKmRhdGEpOw0KPiArc3RhdGljIGludCBydDE3MTFoX3JlZ19ibG9ja193cml0 ZShzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCB1aW50OF90IHJlZywNCj4gK2ludCBsZW4sIGNv bnN0IHVpbnQ4X3QgKmRhdGEpOw0KPiArDQo+ICtzdHJ1Y3QgcmVnX2Rlc2Mgew0KPiArdWludDhf dCBhZGRyOw0KPiArdWludDhfdCBzaXplOw0KPiArfTsNCj4gKyNkZWZpbmUgREVDTF9SRUcoX2Fk ZHIsIF9zaXplKSB7LmFkZHIgPSBfYWRkciwgLnNpemUgPSBfc2l6ZX0NCj4gKw0KPiArc3RhdGlj IHN0cnVjdCByZWdfZGVzYyBydDE3MTFoX3JlZ19kZXNjW10gPSB7DQo+ICtERUNMX1JFRyhSVDE3 MTFIX1JFR19WSUQsIDIpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfUElELCAyKSwNCj4gK0RF Q0xfUkVHKFJUMTcxMUhfUkVHX0RJRCwgMiksDQo+ICtERUNMX1JFRyhSVDE3MTFIX1JFR19UWVBF Q19SRVYsIDIpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfUERfUkVWLCAyKSwNCj4gK0RFQ0xf UkVHKFJUMTcxMUhfUkVHX1BESUZfUkVWLCAyKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0FM RVJULCAyKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0FMRVJUX01BU0ssIDIpLA0KPiArREVD TF9SRUcoUlQxNzExSF9SRUdfUE9XRVJfU1RBVFVTX01BU0ssIDEpLA0KPiArREVDTF9SRUcoUlQx NzExSF9SRUdfRkFVTFRfU1RBVFVTX01BU0ssIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdf VENQQ19DVFJMLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1JPTEVfQ1RSTCwgMSksDQo+ ICtERUNMX1JFRyhSVDE3MTFIX1JFR19GQVVMVF9DVFJMLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcx MUhfUkVHX1BPV0VSX0NUUkwsIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfQ0NfU1RBVFVT LCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1BPV0VSX1NUQVRVUywgMSksDQo+ICtERUNM X1JFRyhSVDE3MTFIX1JFR19GQVVMVF9TVEFUVVMsIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9S RUdfQ09NTUFORCwgMSksDQo+ICtERUNMX1JFRyhSVDE3MTFIX1JFR19NU0dfSERSX0lORk8sIDEp LA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfUlhfREVURUNULCAxKSwNCj4gK0RFQ0xfUkVHKFJU MTcxMUhfUkVHX1JYX0JZVEVfQ05ULCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1JYX0JV Rl9GUkFNRV9UWVBFLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1JYX0hEUiwgMiksDQo+ ICtERUNMX1JFRyhSVDE3MTFIX1JFR19SWF9EQVRBLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhf UkVHX1RSQU5TTUlULCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1RYX0JZVEVfQ05ULCAx KSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1RYX0hEUiwgMiksDQo+ICtERUNMX1JFRyhSVDE3 MTFIX1JFR19UWF9EQVRBLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0NMS19DVFJMMiwg MSksDQo+ICtERUNMX1JFRyhSVDE3MTFIX1JFR19DTEtfQ1RSTDMsIDEpLA0KPiArREVDTF9SRUco UlQxNzExSF9SRUdfQk1DX0NUUkwsIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfQk1DSU9f UlhEWlNFTCwgMSksDQo+ICtERUNMX1JFRyhSVDE3MTFIX1JFR19WQ09OTl9DTElNSVRFTiwgMSks DQo+ICtERUNMX1JFRyhSVDE3MTFIX1JFR19SVF9TVEFUVVMsIDEpLA0KPiArREVDTF9SRUcoUlQx NzExSF9SRUdfUlRfSU5ULCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1JUX01BU0ssIDEp LA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfSURMRV9DVFJMLCAxKSwNCj4gK0RFQ0xfUkVHKFJU MTcxMUhfUkVHX0lOVFJTVF9DVFJMLCAxKSwNCj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1dBVENI RE9HX0NUUkwsIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfSTJDUlNUX0NUUkwsIDEpLA0K PiArREVDTF9SRUcoUlQxNzExSF9SRUdfU1dSRVNFVCwgMSksDQo+ICtERUNMX1JFRyhSVDE3MTFI X1JFR19UVENQQ19GSUxURVIsIDEpLA0KPiArREVDTF9SRUcoUlQxNzExSF9SRUdfRFJQX1RPR0dM RV9DWUNMRSwgMSksDQo+ICtERUNMX1JFRyhSVDE3MTFIX1JFR19EUlBfRFVUWV9DVFJMLCAxKSwN Cj4gK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0JNQ0lPX1JYRFpFTiwgMSksIH07DQo+ICsNCj4gK3N0 YXRpYyBjb25zdCBjaGFyICpydDE3MTFoX2RiZ19maWxlbmFtZVtSVDE3MTFIX0RCR19NQVhdID0g ew0KPiArImxvZyIsICJyZWdzIiwgInJlZ19hZGRyIiwgImRhdGEiLA0KPiArfTsNCj4gKw0KPiAr c3RhdGljIGJvb2wgcnQxNzExaF9sb2dfZnVsbChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKSB7 DQo+ICtyZXR1cm4gY2hpcC0+bG9nYnVmZmVyX3RhaWwgPT0NCj4gKyhjaGlwLT5sb2didWZmZXJf aGVhZCArIDEpICUgTE9HX0JVRkZFUl9FTlRSSUVTOyB9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIF9y dDE3MTFoX2xvZyhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCBjb25zdCBjaGFyICpmbXQsDQo+ ICsgdmFfbGlzdCBhcmdzKQ0KPiArew0KPiArY2hhciB0bXBidWZmZXJbTE9HX0JVRkZFUl9FTlRS WV9TSVpFXTsNCj4gK3U2NCB0c19uc2VjID0gbG9jYWxfY2xvY2soKTsNCj4gK3Vuc2lnbmVkIGxv bmcgcmVtX25zZWM7DQo+ICsNCj4gK2lmICghY2hpcC0+bG9nYnVmZmVyW2NoaXAtPmxvZ2J1ZmZl cl9oZWFkXSkgew0KPiArY2hpcC0+bG9nYnVmZmVyW2NoaXAtPmxvZ2J1ZmZlcl9oZWFkXSA9DQo+ ICtkZXZtX2t6YWxsb2MoY2hpcC0+ZGV2LCBMT0dfQlVGRkVSX0VOVFJZX1NJWkUsIEdGUF9LRVJO RUwpOw0KPiAraWYgKCFjaGlwLT5sb2didWZmZXJbY2hpcC0+bG9nYnVmZmVyX2hlYWRdKQ0KPiAr cmV0dXJuOw0KPiArfQ0KPiArDQo+ICt2c25wcmludGYodG1wYnVmZmVyLCBzaXplb2YodG1wYnVm ZmVyKSwgZm10LCBhcmdzKTsNCj4gKw0KPiArbXV0ZXhfbG9jaygmY2hpcC0+bG9nYnVmZmVyX2xv Y2spOw0KPiArDQo+ICtpZiAocnQxNzExaF9sb2dfZnVsbChjaGlwKSkgew0KPiArY2hpcC0+bG9n YnVmZmVyX2hlYWQgPSBtYXgoY2hpcC0+bG9nYnVmZmVyX2hlYWQgLSAxLCAwKTsNCj4gK3N0cmxj cHkodG1wYnVmZmVyLCAib3ZlcmZsb3ciLCBzaXplb2YodG1wYnVmZmVyKSk7DQo+ICt9DQo+ICsN Cj4gK2lmIChjaGlwLT5sb2didWZmZXJfaGVhZCA8IDAgfHwNCj4gK2NoaXAtPmxvZ2J1ZmZlcl9o ZWFkID49IExPR19CVUZGRVJfRU5UUklFUykgew0KPiArZGV2X3dhcm4oY2hpcC0+ZGV2LCAiJXMg YmFkIGxvZyBidWZmZXIgaW5kZXggJWRcbiIsIF9fZnVuY19fLA0KPiArY2hpcC0+bG9nYnVmZmVy X2hlYWQpOw0KPiArZ290byBhYm9ydDsNCj4gK30NCj4gKw0KPiAraWYgKCFjaGlwLT5sb2didWZm ZXJbY2hpcC0+bG9nYnVmZmVyX2hlYWRdKSB7DQo+ICtkZXZfd2FybihjaGlwLT5kZXYsICIlcyBs b2cgYnVmZmVyIGluZGV4ICVkIGlzIE5VTExcbiIsDQo+ICtfX2Z1bmNfXywgY2hpcC0+bG9nYnVm ZmVyX2hlYWQpOw0KPiArZ290byBhYm9ydDsNCj4gK30NCj4gKw0KPiArcmVtX25zZWMgPSBkb19k aXYodHNfbnNlYywgMTAwMDAwMDAwMCk7DQo+ICtzY25wcmludGYoY2hpcC0+bG9nYnVmZmVyW2No aXAtPmxvZ2J1ZmZlcl9oZWFkXSwgTE9HX0JVRkZFUl9FTlRSWV9TSVpFLA0KPiArIlslNWx1LiUw Nmx1XSAlcyIsICh1bnNpZ25lZCBsb25nKXRzX25zZWMsIHJlbV9uc2VjIC8gMTAwMCwNCj4gKyAg dG1wYnVmZmVyKTsNCj4gK2NoaXAtPmxvZ2J1ZmZlcl9oZWFkID0gKGNoaXAtPmxvZ2J1ZmZlcl9o ZWFkICsgMSkgJQ0KPiArTE9HX0JVRkZFUl9FTlRSSUVTOw0KPiArDQo+ICthYm9ydDoNCj4gK211 dGV4X3VubG9jaygmY2hpcC0+bG9nYnVmZmVyX2xvY2spOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBydDE3MTFoX2xvZyhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLA0KPiArY29uc3QgY2hh ciAqZm10LCAuLi4pDQo+ICt7DQo+ICt2YV9saXN0IGFyZ3M7DQo+ICsNCj4gK3ZhX3N0YXJ0KGFy Z3MsIGZtdCk7DQo+ICtfcnQxNzExaF9sb2coY2hpcCwgZm10LCBhcmdzKTsNCj4gK3ZhX2VuZChh cmdzKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBydDE3MTFoX2xvZ19zaG93KHN0cnVjdCBy dDE3MTFoX2NoaXAgKmNoaXAsIHN0cnVjdA0KPiArc2VxX2ZpbGUgKnMpIHsNCj4gK2ludCB0YWls Ow0KPiArDQo+ICttdXRleF9sb2NrKCZjaGlwLT5sb2didWZmZXJfbG9jayk7DQo+ICt0YWlsID0g Y2hpcC0+bG9nYnVmZmVyX3RhaWw7DQo+ICt3aGlsZSAodGFpbCAhPSBjaGlwLT5sb2didWZmZXJf aGVhZCkgew0KPiArc2VxX3ByaW50ZihzLCAiJXMiLCBjaGlwLT5sb2didWZmZXJbdGFpbF0pOw0K PiArdGFpbCA9ICh0YWlsICsgMSkgJSBMT0dfQlVGRkVSX0VOVFJJRVM7DQo+ICt9DQo+ICtpZiAo IXNlcV9oYXNfb3ZlcmZsb3dlZChzKSkNCj4gK2NoaXAtPmxvZ2J1ZmZlcl90YWlsID0gdGFpbDsN Cj4gK211dGV4X3VubG9jaygmY2hpcC0+bG9nYnVmZmVyX2xvY2spOw0KPiArDQo+ICtyZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBydDE3MTFoX3JlZ3Nfc2hvdyhzdHJ1Y3QgcnQx NzExaF9jaGlwICpjaGlwLCBzdHJ1Y3QNCj4gK3NlcV9maWxlICpzKSB7DQo+ICtpbnQgcmV0ID0g MDsNCj4gK2ludCBpID0gMCwgaiA9IDA7DQo+ICtzdHJ1Y3QgcmVnX2Rlc2MgKmRlc2MgPSBOVUxM Ow0KPiArdWludDhfdCByZWd2YWxbMl0gPSB7MH07DQo+ICsNCj4gK2ZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKHJ0MTcxMWhfcmVnX2Rlc2MpOyBpKyspIHsNCj4gK2Rlc2MgPSAmcnQxNzExaF9y ZWdfZGVzY1tpXTsNCj4gK3JldCA9IHJ0MTcxMWhfcmVnX2Jsb2NrX3JlYWQoY2hpcCwgZGVzYy0+ YWRkciwgZGVzYy0+c2l6ZSwNCj4gK3JlZ3ZhbCk7DQo+ICtpZiAocmV0IDwgMCkgew0KPiArZGV2 X2VycihjaGlwLT5kZXYsICIlcyByZWFkIHJlZzB4JTAyWCBmYWlsXG4iLA0KPiArX19mdW5jX18s IGRlc2MtPmFkZHIpOw0KPiArY29udGludWU7DQo+ICt9DQo+ICsNCj4gK3NlcV9wcmludGYocywg InJlZzB4JTAyeDoweCIsIGRlc2MtPmFkZHIpOw0KPiArZm9yIChqID0gMDsgaiA8IGRlc2MtPnNp emU7IGorKykNCj4gK3NlcV9wcmludGYocywgIiUwMngsIiwgcmVndmFsW2pdKTsNCj4gK3NlcV9w dXRzKHMsICJcbiIpOw0KPiArfQ0KPiArDQo+ICtyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGlubGluZSBpbnQgcnQxNzExaF9yZWdfYWRkcl9zaG93KHN0cnVjdCBydDE3MTFoX2NoaXAg KmNoaXAsDQo+ICtzdHJ1Y3Qgc2VxX2ZpbGUgKnMpDQo+ICt7DQo+ICtzdHJ1Y3QgcmVnX2Rlc2Mg KmRlc2MgPSAmcnQxNzExaF9yZWdfZGVzY1tjaGlwLT5kYmdfcmVnaWR4XTsNCj4gKw0KPiArc2Vx X3ByaW50ZihzLCAiMHglMDJ4XG4iLCBkZXNjLT5hZGRyKTsNCj4gK3JldHVybiAwOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW5saW5lIGludCBydDE3MTFoX2RhdGFfc2hvdyhzdHJ1Y3QgcnQxNzEx aF9jaGlwICpjaGlwLA0KPiArc3RydWN0IHNlcV9maWxlICpzKQ0KPiArew0KPiAraW50IHJldCA9 IDAsIGkgPSAwOw0KPiArc3RydWN0IHJlZ19kZXNjICpkZXNjID0gJnJ0MTcxMWhfcmVnX2Rlc2Nb Y2hpcC0+ZGJnX3JlZ2lkeF07DQo+ICt1aW50OF90IHJlZ3ZhbFsyXSA9IHswfTsNCj4gKw0KPiAr cmV0ID0gcnQxNzExaF9yZWdfYmxvY2tfcmVhZChjaGlwLCBkZXNjLT5hZGRyLCBkZXNjLT5zaXpl LCByZWd2YWwpOw0KPiAraWYgKHJldCA8IDApDQo+ICtyZXR1cm4gcmV0Ow0KPiArDQo+ICtzZXFf cHJpbnRmKHMsICJyZWcweCUwMng9MHgiLCBkZXNjLT5hZGRyKTsNCj4gK2ZvciAoaSA9IDA7IGkg PCBkZXNjLT5zaXplOyBpKyspDQo+ICtzZXFfcHJpbnRmKHMsICIlMDJ4LCIsIHJlZ3ZhbFtpXSk7 DQo+ICtzZXFfcHV0cyhzLCAiXG4iKTsNCj4gK3JldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50IHJ0MTcxMWhfZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KSB7DQo+ ICtpbnQgcmV0ID0gMDsNCj4gK3N0cnVjdCBydDE3MTFoX2RiZ19pbmZvICppbmZvID0gKHN0cnVj dCBydDE3MTFoX2RiZ19pbmZvICopcy0+cHJpdmF0ZTsNCj4gK3N0cnVjdCBydDE3MTFoX2NoaXAg KmNoaXAgPSBpbmZvLT5jaGlwOw0KPiArDQo+ICttdXRleF9sb2NrKCZjaGlwLT5kYmdvcHNfbG9j ayk7DQo+ICtzd2l0Y2ggKGluZm8tPmlkKSB7DQo+ICtjYXNlIFJUMTcxMUhfREJHX0xPRzoNCj4g K3JldCA9IHJ0MTcxMWhfbG9nX3Nob3coY2hpcCwgcyk7DQo+ICticmVhazsNCj4gK2Nhc2UgUlQx NzExSF9EQkdfUkVHUzoNCj4gK3JldCA9IHJ0MTcxMWhfcmVnc19zaG93KGNoaXAsIHMpOw0KPiAr YnJlYWs7DQo+ICtjYXNlIFJUMTcxMUhfREJHX1JFR19BRERSOg0KPiArcmV0ID0gcnQxNzExaF9y ZWdfYWRkcl9zaG93KGNoaXAsIHMpOw0KPiArYnJlYWs7DQo+ICtjYXNlIFJUMTcxMUhfREJHX0RB VEE6DQo+ICtyZXQgPSBydDE3MTFoX2RhdGFfc2hvdyhjaGlwLCBzKTsNCj4gK2JyZWFrOw0KPiAr ZGVmYXVsdDoNCj4gK3JldCA9IC1FSU5WQUw7DQo+ICticmVhazsNCj4gK30NCj4gKw0KPiArbXV0 ZXhfdW5sb2NrKCZjaGlwLT5kYmdvcHNfbG9jayk7DQo+ICtyZXR1cm4gcmV0Ow0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW50IHJ0MTcxMWhfZGJnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IGZpbGUgKmZpbGUpIHsNCj4gK2lmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQ0KPiAr cmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0MTcxMWhfZGJnX3Nob3csIGlub2RlLT5pX3ByaXZh dGUpOw0KPiArZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsNCj4gK3JldHVy biAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGdldF9wYXJhbWV0ZXJzKGNoYXIgKmJ1Ziwg bG9uZyBpbnQgKnBhcmFtMSwgaW50DQo+ICtudW1fb2ZfcGFyKSB7DQo+ICtjaGFyICp0b2tlbjsN Cj4gK2ludCBiYXNlLCBjbnQ7DQo+ICsNCj4gK3Rva2VuID0gc3Ryc2VwKCZidWYsICIgIik7DQo+ ICsNCj4gK2ZvciAoY250ID0gMDsgY250IDwgbnVtX29mX3BhcjsgY250KyspIHsNCj4gK2lmICh0 b2tlbiAhPSBOVUxMKSB7DQo+ICtpZiAoKHRva2VuWzFdID09ICd4JykgfHwgKHRva2VuWzFdID09 ICdYJykpDQo+ICtiYXNlID0gMTY7DQo+ICtlbHNlDQo+ICtiYXNlID0gMTA7DQo+ICsNCj4gK2lm IChrc3RydG91bCh0b2tlbiwgYmFzZSwgJnBhcmFtMVtjbnRdKSAhPSAwKQ0KPiArcmV0dXJuIC1F SU5WQUw7DQo+ICsNCj4gK3Rva2VuID0gc3Ryc2VwKCZidWYsICIgIik7DQo+ICt9IGVsc2UNCj4g K3JldHVybiAtRUlOVkFMOw0KPiArfQ0KPiArcmV0dXJuIDA7DQo+ICt9DQoNCldoYXQgaXMgdGhp cyBmdW5jdGlvbiBkb2luZz8gIFdoYXQgaXMgeW91ciBkZWJ1Z2ZzIGZpbGVzIGZvcj8NCg0KPiAr DQo+ICtzdGF0aWMgaW50IGdldF9kYXRhcyhjb25zdCBjaGFyICpidWYsIGNvbnN0IGludCBsZW5n dGgsDQo+ICt1bnNpZ25lZCBjaGFyICpkYXRhX2J1ZmZlciwgdW5zaWduZWQgY2hhciBkYXRhX2xl bmd0aCkgew0KPiAraW50IGksIHB0cjsNCj4gK2xvbmcgaW50IHZhbHVlOw0KPiArY2hhciB0b2tl bls1XTsNCj4gKw0KPiArdG9rZW5bMF0gPSAnMCc7DQo+ICt0b2tlblsxXSA9ICd4JzsNCj4gK3Rv a2VuWzRdID0gMDsNCj4gK2lmIChidWZbMF0gIT0gJzAnIHx8IGJ1ZlsxXSAhPSAneCcpDQo+ICty ZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArcHRyID0gMjsNCj4gK2ZvciAoaSA9IDA7IChpIDwgZGF0 YV9sZW5ndGgpICYmIChwdHIgKyAyIDw9IGxlbmd0aCk7IGkrKykgew0KPiArdG9rZW5bMl0gPSBi dWZbcHRyKytdOw0KPiArdG9rZW5bM10gPSBidWZbcHRyKytdOw0KPiArcHRyKys7DQo+ICtpZiAo a3N0cnRvdWwodG9rZW4sIDE2LCAmdmFsdWUpICE9IDApDQo+ICtyZXR1cm4gLUVJTlZBTDsNCj4g K2RhdGFfYnVmZmVyW2ldID0gdmFsdWU7DQo+ICt9DQo+ICtyZXR1cm4gMDsNCj4gK30NCj4gKw0K PiArc3RhdGljIGludCBydDE3MTFoX3JlZ2FkZHIyaWR4KHVpbnQ4X3QgcmVnX2FkZHIpIHsNCj4g K2ludCBpID0gMDsNCj4gK3N0cnVjdCByZWdfZGVzYyAqZGVzYyA9IE5VTEw7DQo+ICsNCj4gK2Zv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0MTcxMWhfcmVnX2Rlc2MpOyBpKyspIHsNCj4gK2Rl c2MgPSAmcnQxNzExaF9yZWdfZGVzY1tpXTsNCj4gK2lmIChkZXNjLT5hZGRyID09IHJlZ19hZGRy KQ0KPiArcmV0dXJuIGk7DQo+ICt9DQo+ICtyZXR1cm4gLUVJTlZBTDsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHNzaXplX3QgcnQxNzExaF9kYmdfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0 IGNoYXIgX191c2VyICp1YnVmLA0KPiArc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQo+ICt7 DQo+ICtpbnQgcmV0ID0gMDsNCj4gK3N0cnVjdCBydDE3MTFoX2RiZ19pbmZvICppbmZvID0NCj4g KyhzdHJ1Y3QgcnQxNzExaF9kYmdfaW5mbyAqKWZpbGUtPnByaXZhdGVfZGF0YTsNCj4gK3N0cnVj dCBydDE3MTFoX2NoaXAgKmNoaXAgPSBpbmZvLT5jaGlwOw0KPiArc3RydWN0IHJlZ19kZXNjICpk ZXNjID0gTlVMTDsNCj4gK2NoYXIgbGJ1ZlsxMjhdOw0KPiArbG9uZyBpbnQgcGFyYW1bNV07DQo+ ICt1bnNpZ25lZCBjaGFyIHJlZ19kYXRhWzJdID0gezB9Ow0KPiArDQo+ICtpZiAoY291bnQgPiBz aXplb2YobGJ1ZikgLSAxKQ0KPiArcmV0dXJuIC1FRkFVTFQ7DQo+ICsNCj4gK3JldCA9IGNvcHlf ZnJvbV91c2VyKGxidWYsIHVidWYsIGNvdW50KTsNCj4gK2lmIChyZXQpDQo+ICtyZXR1cm4gLUVG QVVMVDsNCj4gK2xidWZbY291bnRdID0gJ1wwJzsNCj4gKw0KPiArbXV0ZXhfbG9jaygmY2hpcC0+ ZGJnb3BzX2xvY2spOw0KPiArc3dpdGNoIChpbmZvLT5pZCkgew0KPiArY2FzZSBSVDE3MTFIX0RC R19SRUdfQUREUjoNCj4gK3JldCA9IGdldF9wYXJhbWV0ZXJzKGxidWYsIHBhcmFtLCAxKTsNCj4g K2lmIChyZXQgPCAwKSB7DQo+ICtkZXZfZXJyKGNoaXAtPmRldiwgIiVzIGdldCBwYXJhbSBmYWls XG4iLCBfX2Z1bmNfXyk7DQo+ICtyZXQgPSAtRUlOVkFMOw0KPiArZ290byBvdXQ7DQo+ICt9DQo+ ICtyZXQgPSBydDE3MTFoX3JlZ2FkZHIyaWR4KHBhcmFtWzBdKTsNCj4gK2lmIChyZXQgPCAwKSB7 DQo+ICtkZXZfZXJyKGNoaXAtPmRldiwgIiVzIGFkZHIyaWR4IGZhaWxcbiIsIF9fZnVuY19fKTsN Cj4gK3JldCA9IC1FSU5WQUw7DQo+ICtnb3RvIG91dDsNCj4gK30NCj4gK2NoaXAtPmRiZ19yZWdp ZHggPSByZXQ7DQo+ICticmVhazsNCj4gK2Nhc2UgUlQxNzExSF9EQkdfREFUQToNCj4gK2Rlc2Mg PSAmcnQxNzExaF9yZWdfZGVzY1tjaGlwLT5kYmdfcmVnaWR4XTsNCj4gK2lmICgoZGVzYy0+c2l6 ZSAtIDEpICogMyArIDUgIT0gY291bnQpIHsNCj4gK2Rldl9lcnIoY2hpcC0+ZGV2LCAiJXMgaW5j b3JyZWN0IGlucHV0IGxlbmd0aFxuIiwNCj4gK19fZnVuY19fKTsNCj4gK3JldCA9IC1FSU5WQUw7 DQo+ICtnb3RvIG91dDsNCj4gK30NCj4gK3JldCA9IGdldF9kYXRhcygoY2hhciAqKXVidWYsIGNv dW50LCByZWdfZGF0YSwgZGVzYy0+c2l6ZSk7DQo+ICtpZiAocmV0IDwgMCkgew0KPiArZGV2X2Vy cihjaGlwLT5kZXYsICIlcyBnZXQgZGF0YSBmYWlsXG4iLCBfX2Z1bmNfXyk7DQo+ICtyZXQgPSAt RUlOVkFMOw0KPiArZ290byBvdXQ7DQo+ICt9DQo+ICtyZXQgPSBydDE3MTFoX3JlZ19ibG9ja193 cml0ZShjaGlwLCBkZXNjLT5hZGRyLCBkZXNjLT5zaXplLA0KPiArcmVnX2RhdGEpOw0KPiArYnJl YWs7DQo+ICtkZWZhdWx0Og0KPiArcmV0ID0gLUVJTlZBTDsNCj4gK2JyZWFrOw0KPiArfQ0KPiAr DQo+ICtvdXQ6DQo+ICttdXRleF91bmxvY2soJmNoaXAtPmRiZ29wc19sb2NrKTsNCj4gK3JldHVy biByZXQgPCAwID8gcmV0IDogY291bnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgcnQxNzEx aF9kYmdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZQ0KPiArKmZpbGUp IHsNCj4gK2lmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQ0KPiArcmV0dXJuIHNpbmdsZV9y ZWxlYXNlKGlub2RlLCBmaWxlKTsNCj4gK3JldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydDE3MTFoX2RiZ19vcHMgPSB7DQo+ICsub3Bl bj0gcnQxNzExaF9kYmdfb3BlbiwNCj4gKy5sbHNlZWs9IHNlcV9sc2VlaywNCj4gKy5yZWFkPSBz ZXFfcmVhZCwNCj4gKy53cml0ZT0gcnQxNzExaF9kYmdfd3JpdGUsDQo+ICsucmVsZWFzZT0gcnQx NzExaF9kYmdfcmVsZWFzZSwNCj4gK307DQo+ICsNCj4gKw0KPiArc3RhdGljIGludCBydDE3MTFo X2RlYnVnZnNfaW5pdChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKSB7DQo+ICtpbnQgcmV0ID0g MCwgaSA9IDA7DQo+ICtzdHJ1Y3QgcnQxNzExaF9kYmdfaW5mbyAqaW5mbyA9IE5VTEw7DQo+ICtp bnQgbGVuID0gMDsNCj4gK2NoYXIgKmRpcm5hbWUgPSBOVUxMOw0KPiArDQo+ICttdXRleF9pbml0 KCZjaGlwLT5sb2didWZmZXJfbG9jayk7DQo+ICttdXRleF9pbml0KCZjaGlwLT5kYmdvcHNfbG9j ayk7DQo+ICtsZW4gPSBzdHJsZW4oZGV2X25hbWUoY2hpcC0+ZGV2KSk7DQo+ICtkaXJuYW1lID0g ZGV2bV9remFsbG9jKGNoaXAtPmRldiwgbGVuICsgOSwgR0ZQX0tFUk5FTCk7DQo+ICtpZiAoIWRp cm5hbWUpDQo+ICtyZXR1cm4gLUVOT01FTTsNCj4gK3NucHJpbnRmKGRpcm5hbWUsIGxlbiArIDks ICJydDE3MTFoLSVzIiwgZGV2X25hbWUoY2hpcC0+ZGV2KSk7DQo+ICtpZiAoIWNoaXAtPmRiZ2Rp cikgew0KPiArY2hpcC0+ZGJnZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIE5VTEwp Ow0KPiAraWYgKCFjaGlwLT5kYmdkaXIpDQo+ICtyZXR1cm4gLUVOT01FTTsNCg0KTm8gbmVlZCB0 byBldmVyIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgZGVidWdmc18gY2FsbHMsIHlvdSBzaG91 bGQgbm90IGNhcmUgYW5kIGNhbiBhbHdheXMgdXNlIHRoZSB2YWx1ZSB0byBhbnkgZnV0dXJlIGRl YnVnZnMgY2FsbHMsIGlmIHlvdSByZWFsbHkgbmVlZCBpdC4NCg0KPiArfQ0KPiArDQo+ICtmb3Ig KGkgPSAwOyBpIDwgUlQxNzExSF9EQkdfTUFYOyBpKyspIHsNCj4gK2luZm8gPSAmY2hpcC0+ZGJn X2luZm9baV07DQoNCnN0YXRpYyBhcnJheSBvZiBkZWJ1ZyBpbmZvPyAgVGhhdCBmZWVscyBvZGQu DQoNCj4gK2luZm8tPmNoaXAgPSBjaGlwOw0KPiAraW5mby0+aWQgPSBpOw0KPiArY2hpcC0+ZGJn X2ZpbGVzW2ldID0gZGVidWdmc19jcmVhdGVfZmlsZSgNCj4gK3J0MTcxMWhfZGJnX2ZpbGVuYW1l W2ldLCBTX0lGUkVHIHwgMDQ0NCwNCj4gK2NoaXAtPmRiZ2RpciwgaW5mbywgJnJ0MTcxMWhfZGJn X29wcyk7DQo+ICtpZiAoIWNoaXAtPmRiZ19maWxlc1tpXSkgew0KPiArcmV0ID0gLUVJTlZBTDsN Cg0KTGlrZSBoZXJlLCB5b3UgZG9uJ3QgbmVlZCB0aGlzLCBhbmQgeW91IGRvbid0IG5lZWQgdG8g Y2FyZSBhYm91dCB0aGUgcmV0dXJuIHZhbHVlLg0KDQo+ICtnb3RvIGVycjsNCj4gK30NCj4gK30N Cj4gKw0KPiArcmV0dXJuIDA7DQo+ICtlcnI6DQo+ICtkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUo Y2hpcC0+ZGJnZGlyKTsNCj4gK3JldHVybiByZXQ7DQoNCldoeSBkbyB5b3UgY2FyZSBhYm91dCBh biBlcnJvciBoZXJlPyAgWW91ciBjb2RlIHNob3VsZCBub3QgZG8gYW55dGhpbmcgZGlmZmVyZW50 IGlmIGRlYnVnZnMgc3R1ZmYgZG9lcyBub3Qgd29yayBvciBpZiBpdCBkb2VzLiAgSXQncyBkZWJ1 Z2dpbmcgb25seS4NCg0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBydDE3MTFoX2RlYnVnZnNf ZXhpdChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKSB7DQo+ICtkZWJ1Z2ZzX3JlbW92ZV9yZWN1 cnNpdmUoY2hpcC0+ZGJnZGlyKTsNCg0KU2VlLCB5b3UgZGlkbid0IG5lZWQgdGhvc2UgZmlsZSBo YW5kbGVzIDopDQoNCnRoYW5rcywNCg0KZ3JlZyBrLWgNCioqKioqKioqKioqKiogRW1haWwgQ29u ZmlkZW50aWFsaXR5IE5vdGljZSAqKioqKioqKioqKioqKioqKioqKg0KDQpUaGUgaW5mb3JtYXRp b24gY29udGFpbmVkIGluIHRoaXMgZS1tYWlsIG1lc3NhZ2UgKGluY2x1ZGluZyBhbnkgYXR0YWNo bWVudHMpIG1heSBiZSBjb25maWRlbnRpYWwsIHByb3ByaWV0YXJ5LCBwcml2aWxlZ2VkLCBvciBv dGhlcndpc2UgZXhlbXB0IGZyb20gZGlzY2xvc3VyZSB1bmRlciBhcHBsaWNhYmxlIGxhd3MuIEl0 IGlzIGludGVuZGVkIHRvIGJlIGNvbnZleWVkIG9ubHkgdG8gdGhlIGRlc2lnbmF0ZWQgcmVjaXBp ZW50KHMpLiBBbnkgdXNlLCBkaXNzZW1pbmF0aW9uLCBkaXN0cmlidXRpb24sIHByaW50aW5nLCBy ZXRhaW5pbmcgb3IgY29weWluZyBvZiB0aGlzIGUtbWFpbCAoaW5jbHVkaW5nIGl0cyBhdHRhY2ht ZW50cykgYnkgdW5pbnRlbmRlZCByZWNpcGllbnQocykgaXMgc3RyaWN0bHkgcHJvaGliaXRlZCBh bmQgbWF5IGJlIHVubGF3ZnVsLiBJZiB5b3UgYXJlIG5vdCBhbiBpbnRlbmRlZCByZWNpcGllbnQg b2YgdGhpcyBlLW1haWwsIG9yIGJlbGlldmUgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIGUt bWFpbCBpbiBlcnJvciwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IChieSBy ZXBseWluZyB0byB0aGlzIGUtbWFpbCksIGRlbGV0ZSBhbnkgYW5kIGFsbCBjb3BpZXMgb2YgdGhp cyBlLW1haWwgKGluY2x1ZGluZyBhbnkgYXR0YWNobWVudHMpIGZyb20geW91ciBzeXN0ZW0sIGFu ZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnQgb2YgdGhpcyBlLW1haWwgdG8gYW55IG90aGVy IHBlcnNvbi4gVGhhbmsgeW91IQ0K