Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp2238736ybi; Thu, 20 Jun 2019 11:24:15 -0700 (PDT) X-Google-Smtp-Source: APXvYqxXun3aLn3/uZUHAc1WAF5r3x0EFFDPj39voqYveiLCMuJxoftzXWrZ9OoefRFVuwqSh/nu X-Received: by 2002:a62:d149:: with SMTP id t9mr112583077pfl.173.1561055055585; Thu, 20 Jun 2019 11:24:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561055055; cv=none; d=google.com; s=arc-20160816; b=gIImD4bT/minvhxgBLW6qo+Y+CD5SbCCoRNksxaRObzMDRqHu4I79uGe4A7xpcEHI3 N1ynCwAjf2kp1mj5HZ0s0s/l26ikKNE/JHSYmnJndMZ6hbQ++39n4y42LCGXQzDWo4TD TNBEUHt9Weh9VV3w5vwD74aok/p3ZDEh3Jvqo8bqun3ipBtOp9pFUQ+agByFigqInYyB rA1OrKbDwhamQwfDSOHm49yjeKeWiEekhZIDItOgfYY0kyzwiEK5ZB03CJLZRHGC2Y0m uXJguHdGju8sixs+kUn1Tg6ChXXFX4LsAVZCaTz6PAQwjFgXo+25++uYA7wMVczxZBt6 xjAA== 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-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from; bh=jpTtPeSuR56TuNHSYshf1V8J0iJojMHN/xxE+p2vQYU=; b=HDerZ8QgA4Vb2bEX1Pd4+0BDAny42VrDii543h5XqpwhzSL8K/DrteDzenfXG5wmNG w8pP4cC4xra1vAr6ZJ90mEY26lQRZNqFn4P4fpkLTKWVOY2hKIpttE5mGnbIRfCv5yCC NpOdzbz22M+5eaypS+82TxGpAWZ0GeyP2Z/0M36Hq0bwOdtsteOb4UDJ/kig4bDAwhnD 1KtGJMrHES6UW79zupBRe7WQtivpSClk+KmlbWqdgHlCgF2odNR635d+0krXQZCXgMaw 2jtK0U0cymvVKkZ/EfQyFlx81Lse91nUiuSKckXVGU8JVPYxRqY+x3JATzYt/Brwir33 DOig== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d1si151598pgv.552.2019.06.20.11.23.51; Thu, 20 Jun 2019 11:24:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-bluetooth-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-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726401AbfFTSXu (ORCPT + 99 others); Thu, 20 Jun 2019 14:23:50 -0400 Received: from mga18.intel.com ([134.134.136.126]:25892 "EHLO mga18.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726852AbfFTSXu (ORCPT ); Thu, 20 Jun 2019 14:23:50 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Jun 2019 11:23:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,397,1557212400"; d="scan'208";a="358625723" Received: from orsmsx103.amr.corp.intel.com ([10.22.225.130]) by fmsmga005.fm.intel.com with ESMTP; 20 Jun 2019 11:23:47 -0700 Received: from orsmsx158.amr.corp.intel.com (10.22.240.20) by ORSMSX103.amr.corp.intel.com (10.22.225.130) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 20 Jun 2019 11:23:47 -0700 Received: from orsmsx103.amr.corp.intel.com ([169.254.5.135]) by ORSMSX158.amr.corp.intel.com ([169.254.10.128]) with mapi id 14.03.0439.000; Thu, 20 Jun 2019 11:23:47 -0700 From: "Gix, Brian" To: "michal.lowas-rzechonek@silvair.com" , "linux-bluetooth@vger.kernel.org" CC: "Stotland, Inga" Subject: Re: [PATCH BlueZ v2 1/2] mesh: Move HCI handling to mesh-io-generic Thread-Topic: [PATCH BlueZ v2 1/2] mesh: Move HCI handling to mesh-io-generic Thread-Index: AQHVJpGriE4TFm7/8U6QHSVGeqMP8qalUssA Date: Thu, 20 Jun 2019 18:23:46 +0000 Message-ID: <1561055024.4417.21.camel@intel.com> References: <20190619112503.3398-1-michal.lowas-rzechonek@silvair.com> <20190619112503.3398-2-michal.lowas-rzechonek@silvair.com> In-Reply-To: <20190619112503.3398-2-michal.lowas-rzechonek@silvair.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.254.184.211] Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org SGkgTWljaGHFgiwNCg0KU29ycnkgZm9yIG1pc3NpbmcgdGhpcyB3aGVuIEkgcmV2aWV3ZWQgeW91 ciBwcmlvciBvbmUuLi4gICBJdCBjYW4gYmUgaWdub3JlZCBub3cuLi4NCg0KDQpPbiBXZWQsIDIw MTktMDYtMTkgYXQgMTM6MjUgKzAyMDAsIE1pY2hhxYIgTG93YXMtUnplY2hvbmVrIHdyb3RlOg0K PiBUaGlzIHBhdGNoIHNlcGFyYXRlcyAnbWVzaCcgbW9kdWxlIGZyb20gJ21lc2hfaW8nLCBwYXJ0 aWN1bGFybHkNCj4gcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLg0K PiANCj4gTWFpbiBjb2RlIGlzIG5vIGxvbmdlciBhd2FyZSBvZiBNR01UIGFuZCBIQ0kgdXNhZ2Ug LSBxdWVyeWluZyBhdmFpbGFibGUNCj4gSENJIGludGVyZmFjZXMgbm93IGhhcHBlbnMgaW4gbWVz aC1pby1nZW5lcmljLg0KPiANCj4gTUdNVCBjb2RlIGlzIG5vdyBleHRyYWN0ZWQgaW50byBtZXNo LW1nbXQgbW9kdWxlLCB3aGljaCBtZXNoLWlvLWdlbmVyaWMNCj4gdXNlcyB0byBxdWVyeSBpbnRl cmZhY2VzLg0KPiAtLS0NCj4gIE1ha2VmaWxlLm1lc2ggICAgICAgICAgfCAgIDEgKw0KPiAgbWVz aC9tYWluLmMgICAgICAgICAgICB8ICAgNCArLQ0KPiAgbWVzaC9tZXNoLWlvLWFwaS5oICAgICB8 ICAgMyArLQ0KPiAgbWVzaC9tZXNoLWlvLWdlbmVyaWMuYyB8ICA2MyArKysrKysrKy0tLS0tDQo+ ICBtZXNoL21lc2gtaW8uYyAgICAgICAgIHwgIDE3ICsrLS0NCj4gIG1lc2gvbWVzaC1pby5oICAg ICAgICAgfCAgIDIgKy0NCj4gIG1lc2gvbWVzaC1tZ210LmMgICAgICAgfCAyMDcgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIG1lc2gvbWVzaC1tZ210LmggICAg ICAgfCAgMjMgKysrKysNCj4gIG1lc2gvbWVzaC5jICAgICAgICAgICAgfCAxODkgKysrLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAgbWVzaC9tZXNoLmggICAgICAgICAgICB8 ICAgNCArLQ0KPiAgMTAgZmlsZXMgY2hhbmdlZCwgMjk5IGluc2VydGlvbnMoKyksIDIxNCBkZWxl dGlvbnMoLSkNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBtZXNoL21lc2gtbWdtdC5jDQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgbWVzaC9tZXNoLW1nbXQuaA0KPiANCj4gZGlmZiAtLWdpdCBhL01ha2Vm aWxlLm1lc2ggYi9NYWtlZmlsZS5tZXNoDQo+IGluZGV4IGIxZjE0ZTQ3Ny4uMWFjZTUwN2FmIDEw MDY0NA0KPiAtLS0gYS9NYWtlZmlsZS5tZXNoDQo+ICsrKyBiL01ha2VmaWxlLm1lc2gNCj4gQEAg LTEyLDYgKzEyLDcgQEAgZW5kaWYNCj4gIG1lc2hfc291cmNlcyA9IG1lc2gvbWVzaC5oIG1lc2gv bWVzaC5jIFwNCj4gIAkJCQltZXNoL25ldC1rZXlzLmggbWVzaC9uZXQta2V5cy5jIFwNCj4gIAkJ CQltZXNoL21lc2gtaW8uaCBtZXNoL21lc2gtaW8uYyBcDQo+ICsJCQkJbWVzaC9tZXNoLW1nbXQu YyBtZXNoL21lc2gtbWdtdC5oIFwNCj4gIAkJCQltZXNoL2Vycm9yLmggbWVzaC9tZXNoLWlvLWFw aS5oIFwNCj4gIAkJCQltZXNoL21lc2gtaW8tZ2VuZXJpYy5oIFwNCj4gIAkJCQltZXNoL21lc2gt aW8tZ2VuZXJpYy5jIFwNCj4gZGlmZiAtLWdpdCBhL21lc2gvbWFpbi5jIGIvbWVzaC9tYWluLmMN Cj4gaW5kZXggM2NlY2Q4ZmJmLi4yNjJlM2RhNDggMTAwNjQ0DQo+IC0tLSBhL21lc2gvbWFpbi5j DQo+ICsrKyBiL21lc2gvbWFpbi5jDQo+IEBAIC0zNSw2ICszNSw3IEBADQo+ICANCj4gICNpbmNs dWRlICJtZXNoL21lc2guaCINCj4gICNpbmNsdWRlICJtZXNoL2RidXMuaCINCj4gKyNpbmNsdWRl ICJtZXNoL21lc2gtaW8uaCINCj4gIA0KPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbWFp bl9vcHRpb25zW10gPSB7DQo+ICAJeyAiaW5kZXgiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwg J2knIH0sDQo+IEBAIC0xNjYsNyArMTY3LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkNCj4gIAkJfQ0KPiAgCX0NCj4gIA0KPiAtCWlmICghbWVzaF9pbml0KGluZGV4LCBjb25m aWdfZGlyKSkgew0KPiArDQo+ICsJaWYgKCFtZXNoX2luaXQoY29uZmlnX2RpciwgTUVTSF9JT19U WVBFX0dFTkVSSUMsICZpbmRleCkpIHsNCj4gIAkJbF9lcnJvcigiRmFpbGVkIHRvIGluaXRpYWxp emUgbWVzaCIpOw0KPiAgCQlzdGF0dXMgPSBFWElUX0ZBSUxVUkU7DQo+ICAJCWdvdG8gZG9uZTsN Cj4gZGlmZiAtLWdpdCBhL21lc2gvbWVzaC1pby1hcGkuaCBiL21lc2gvbWVzaC1pby1hcGkuaA0K PiBpbmRleCBhY2YxMjQ0NWQuLjRjZGYxZjgwYSAxMDA2NDQNCj4gLS0tIGEvbWVzaC9tZXNoLWlv LWFwaS5oDQo+ICsrKyBiL21lc2gvbWVzaC1pby1hcGkuaA0KPiBAQCAtMTksNyArMTksNyBAQA0K PiAgDQo+ICBzdHJ1Y3QgbWVzaF9pb19wcml2YXRlOw0KPiAgDQo+IC10eXBlZGVmIGJvb2wgKCpt ZXNoX2lvX2luaXRfdCkodWludDE2X3QgaW5kZXgsIHN0cnVjdCBtZXNoX2lvICppbyk7DQo+ICt0 eXBlZGVmIGJvb2wgKCptZXNoX2lvX2luaXRfdCkoc3RydWN0IG1lc2hfaW8gKmlvLCB2b2lkICpv cHRzKTsNCj4gIHR5cGVkZWYgYm9vbCAoKm1lc2hfaW9fZGVzdHJveV90KShzdHJ1Y3QgbWVzaF9p byAqaW8pOw0KPiAgdHlwZWRlZiBib29sICgqbWVzaF9pb19jYXBzX3QpKHN0cnVjdCBtZXNoX2lv ICppbywgc3RydWN0IG1lc2hfaW9fY2FwcyAqY2Fwcyk7DQo+ICB0eXBlZGVmIGJvb2wgKCptZXNo X2lvX3NlbmRfdCkoc3RydWN0IG1lc2hfaW8gKmlvLA0KPiBAQCAtNDcsNyArNDcsNiBAQCBzdHJ1 Y3QgbWVzaF9pb19hcGkgew0KPiAgDQo+ICBzdHJ1Y3QgbWVzaF9pbyB7DQo+ICAJZW51bSBtZXNo X2lvX3R5cGUJCXR5cGU7DQo+IC0JdWludDE2X3QJCQlpbmRleDsNCj4gIAljb25zdCBzdHJ1Y3Qg bWVzaF9pb19hcGkJKmFwaTsNCj4gIAlzdHJ1Y3QgbWVzaF9pb19wcml2YXRlCQkqcHZ0Ow0KPiAg fTsNCj4gZGlmZiAtLWdpdCBhL21lc2gvbWVzaC1pby1nZW5lcmljLmMgYi9tZXNoL21lc2gtaW8t Z2VuZXJpYy5jDQo+IGluZGV4IDc1NmRjZWFiYy4uNDJhYWEwOTQ3IDEwMDY0NA0KPiAtLS0gYS9t ZXNoL21lc2gtaW8tZ2VuZXJpYy5jDQo+ICsrKyBiL21lc2gvbWVzaC1pby1nZW5lcmljLmMNCj4g QEAgLTI2LDcgKzI2LDEwIEBADQo+ICANCj4gICNpbmNsdWRlICJtb25pdG9yL2J0LmgiDQo+ICAj aW5jbHVkZSAic3JjL3NoYXJlZC9oY2kuaCINCj4gKyNpbmNsdWRlICJsaWIvYmx1ZXRvb3RoLmgi DQo+ICsjaW5jbHVkZSAibGliL21nbXQuaCINCj4gIA0KPiArI2luY2x1ZGUgIm1lc2gvbWVzaC1t Z210LmgiDQo+ICAjaW5jbHVkZSAibWVzaC9tZXNoLWlvLmgiDQo+ICAjaW5jbHVkZSAibWVzaC9t ZXNoLWlvLWFwaS5oIg0KPiAgI2luY2x1ZGUgIm1lc2gvbWVzaC1pby1nZW5lcmljLmgiDQo+IEBA IC0yNzgsNDAgKzI4MSw1MiBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVfaGNpKHN0cnVjdCBtZXNo X2lvX3ByaXZhdGUgKmlvKQ0KPiAgCQkJCXNpemVvZihjbWQpLCBoY2lfZ2VuZXJpY19jYWxsYmFj aywgTlVMTCwgTlVMTCk7DQo+ICB9DQo+ICANCj4gLXN0YXRpYyBib29sIGRldl9pbml0KHVpbnQx Nl90IGluZGV4LCBzdHJ1Y3QgbWVzaF9pbyAqaW8pDQo+ICtzdGF0aWMgYm9vbCBoY2lfaW5pdChz dHJ1Y3QgbWVzaF9pbyAqaW8pDQo+ICB7DQo+IC0Jc3RydWN0IG1lc2hfaW9fcHJpdmF0ZSAqdG1w Ow0KPiAtDQo+IC0JaWYgKCFpbyB8fCBpby0+cHZ0KQ0KPiArCWlvLT5wdnQtPmhjaSA9IGJ0X2hj aV9uZXdfdXNlcl9jaGFubmVsKGlvLT5wdnQtPmluZGV4KTsNCj4gKwlpZiAoIWlvLT5wdnQtPmhj aSkgew0KPiArCQlsX2Vycm9yKCJGYWlsZWQgdG8gc3RhcnQgbWVzaCBpbyAoaGNpICV1KSIsIGlv LT5wdnQtPmluZGV4KTsNCj4gIAkJcmV0dXJuIGZhbHNlOw0KPiArCX0NCj4gIA0KPiAtCXRtcCA9 IGxfbmV3KHN0cnVjdCBtZXNoX2lvX3ByaXZhdGUsIDEpOw0KPiArCWNvbmZpZ3VyZV9oY2koaW8t PnB2dCk7DQo+ICANCj4gLQlpZiAodG1wID09IE5VTEwpDQo+IC0JCXJldHVybiBmYWxzZTsNCj4g KwlidF9oY2lfcmVnaXN0ZXIoaW8tPnB2dC0+aGNpLCBCVF9IQ0lfRVZUX0xFX01FVEFfRVZFTlQs DQo+ICsJCQkJCQlldmVudF9jYWxsYmFjaywgaW8sIE5VTEwpOw0KPiArDQo+ICsJbF9kZWJ1Zygi U3RhcnRlZCBtZXNoIG9uIGhjaSAldSIsIGlvLT5wdnQtPmluZGV4KTsNCj4gKwlyZXR1cm4gdHJ1 ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgcmVhZF9pbmZvKGludCBpbmRleCwgdm9pZCAq dXNlcl9kYXRhKQ0KPiArew0KPiArCXN0cnVjdCBtZXNoX2lvICppbyA9IHVzZXJfZGF0YTsNCj4g IA0KPiAtCXRtcC0+cnhfcmVncyA9IGxfcXVldWVfbmV3KCk7DQo+IC0JdG1wLT50eF9wa3RzID0g bF9xdWV1ZV9uZXcoKTsNCj4gLQlpZiAoIXRtcC0+cnhfcmVncyB8fCAhdG1wLT50eF9wa3RzKQ0K PiAtCQlnb3RvIGZhaWw7DQo+ICsJaWYgKGlvLT5wdnQtPmluZGV4ICE9IE1HTVRfSU5ERVhfTk9O RSAmJg0KPiArCQkJCQlpbmRleCAhPSBpby0+cHZ0LT5pbmRleCkgew0KPiArCQlsX2RlYnVnKCJJ Z25vcmUgaW5kZXggJWQiLCBpbmRleCk7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICANCj4gLQl0 bXAtPmhjaSA9IGJ0X2hjaV9uZXdfdXNlcl9jaGFubmVsKGluZGV4KTsNCj4gLQlpZiAoIXRtcC0+ aGNpKQ0KPiAtCQlnb3RvIGZhaWw7DQo+ICsJaW8tPnB2dC0+aW5kZXggPSBpbmRleDsNCj4gKwlo Y2lfaW5pdChpbyk7DQo+ICt9DQo+ICANCj4gLQljb25maWd1cmVfaGNpKHRtcCk7DQo+ICtzdGF0 aWMgYm9vbCBkZXZfaW5pdChzdHJ1Y3QgbWVzaF9pbyAqaW8sIHZvaWQgKm9wdHMpDQo+ICt7DQo+ ICsJaWYgKCFpbyB8fCBpby0+cHZ0KQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICANCj4gLQlidF9o Y2lfcmVnaXN0ZXIodG1wLT5oY2ksIEJUX0hDSV9FVlRfTEVfTUVUQV9FVkVOVCwNCj4gLQkJCQkJ CWV2ZW50X2NhbGxiYWNrLCBpbywgTlVMTCk7DQo+ICsJaW8tPnB2dCA9IGxfbmV3KHN0cnVjdCBt ZXNoX2lvX3ByaXZhdGUsIDEpOw0KPiArCWlvLT5wdnQtPmluZGV4ID0gKihpbnQgKilvcHRzOw0K PiAgDQo+IC0JaW8tPnB2dCA9IHRtcDsNCj4gLQlyZXR1cm4gdHJ1ZTsNCj4gKwlpby0+cHZ0LT5y eF9yZWdzID0gbF9xdWV1ZV9uZXcoKTsNCj4gKwlpby0+cHZ0LT50eF9wa3RzID0gbF9xdWV1ZV9u ZXcoKTsNCj4gIA0KPiAtZmFpbDoNCj4gLQlsX3F1ZXVlX2Rlc3Ryb3kodG1wLT5yeF9yZWdzLCBs X2ZyZWUpOw0KPiAtCWxfcXVldWVfZGVzdHJveSh0bXAtPnR4X3BrdHMsIGxfZnJlZSk7DQo+IC0J bF9mcmVlKHRtcCk7DQo+IC0JcmV0dXJuIGZhbHNlOw0KPiArCWlmIChpby0+cHZ0LT5pbmRleCA9 PSBNR01UX0lOREVYX05PTkUpDQo+ICsJCXJldHVybiBtZXNoX21nbXRfbGlzdChyZWFkX2luZm8s IGlvKTsNCj4gKwllbHNlDQo+ICsJCXJldHVybiBoY2lfaW5pdChpbyk7DQo+ICB9DQo+ICANCj4g IHN0YXRpYyBib29sIGRldl9kZXN0cm95KHN0cnVjdCBtZXNoX2lvICppbykNCj4gZGlmZiAtLWdp dCBhL21lc2gvbWVzaC1pby5jIGIvbWVzaC9tZXNoLWlvLmMNCj4gaW5kZXggMzcxNTNlYTlkLi5i NmFkMmY5OTUgMTAwNjQ0DQo+IC0tLSBhL21lc2gvbWVzaC1pby5jDQo+ICsrKyBiL21lc2gvbWVz aC1pby5jDQo+IEBAIC0zOSwyNiArMzksMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZXNoX2lv X3RhYmxlIHRhYmxlW10gPSB7DQo+ICANCj4gIHN0YXRpYyBzdHJ1Y3QgbF9xdWV1ZSAqaW9fbGlz dDsNCj4gIA0KPiArDQoNClN0eWxlIEd1aWRlOiByZW1vdmUgZXh0cmEgYmxhbmsgbGluZQ0KDQo+ ICBzdGF0aWMgYm9vbCBtYXRjaF9ieV9pbyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQ0K PiAgew0KPiAgCXJldHVybiBhID09IGI7DQo+ICB9DQo+ICANCj4gLXN0YXRpYyBib29sIG1hdGNo X2J5X2luZGV4KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpDQo+ICtzdGF0aWMgYm9vbCBt YXRjaF9ieV90eXBlKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpDQo+ICB7DQo+ICAJY29u c3Qgc3RydWN0IG1lc2hfaW8gKmlvID0gYTsNCj4gKwljb25zdCBlbnVtIG1lc2hfaW9fdHlwZSAq dHlwZSA9IGI7DQo+ICANCj4gLQlyZXR1cm4gaW8tPmluZGV4ID09IExfUFRSX1RPX1VJTlQoYik7 DQo+ICsJcmV0dXJuIGlvLT50eXBlID09ICp0eXBlOw0KPiAgfQ0KDQpUaGlzIGlzIGFuIGlycmVn dWxhciB1c2Ugb2YgdGhlICJtYXRjaF9ieSIgY29udmVudGlvbi4uLg0KDQpUcnkgdXNpbmcgc29t ZXRoaW5nIGxpa2U6DQplbnVtIG1lc2hfaW9fdHlwZSB0eXBlID0gKGVudW0gbWVzaF9pb190eXBl KSBMX1BUUl9UT19VSU5UKGIpOw0KDQpyZXR1cm4gaW8tPnR5cGUgPT0gdHlwZS4NCg0KVGhlbiBi ZWxvdyB3aGVuIGl0IGlzIHVzZWQsIHBhc3MgdGhlIHR5cGUgYXMgTF9VSU5UX1RPX1BUUih0eXBl KS4gIEkgYW0gbm90IGNlcnRhaW4gaXQgd2lsbCB3b3JrLCBidXQgaXQgc2hvdWxkDQpiZSB0cmll ZC4NCg0KPiAgDQo+IC1zdHJ1Y3QgbWVzaF9pbyAqbWVzaF9pb19uZXcodWludDE2X3QgaW5kZXgs IGVudW0gbWVzaF9pb190eXBlIHR5cGUpDQo+ICtzdHJ1Y3QgbWVzaF9pbyAqbWVzaF9pb19uZXco ZW51bSBtZXNoX2lvX3R5cGUgdHlwZSwgdm9pZCAqb3B0cykNCj4gIHsNCj4gIAljb25zdCBzdHJ1 Y3QgbWVzaF9pb19hcGkgKmFwaSA9IE5VTEw7DQo+ICAJc3RydWN0IG1lc2hfaW8gKmlvOw0KPiAg CXVpbnQxNl90IGk7DQo+ICANCj4gLQlsX2luZm8oIiVzICVkXG4iLCBfX2Z1bmNfXywgdHlwZSk7 DQo+IC0NCj4gIAlmb3IgKGkgPSAwOyBpIDwgTF9BUlJBWV9TSVpFKHRhYmxlKTsgaSsrKSB7DQo+ ICAJCWlmICh0YWJsZVtpXS50eXBlID09IHR5cGUpIHsNCj4gIAkJCWFwaSA9IHRhYmxlW2ldLmFw aTsNCj4gQEAgLTY2LDcgKzY2LDggQEAgc3RydWN0IG1lc2hfaW8gKm1lc2hfaW9fbmV3KHVpbnQx Nl90IGluZGV4LCBlbnVtIG1lc2hfaW9fdHlwZSB0eXBlKQ0KPiAgCQl9DQo+ICAJfQ0KPiAgDQo+ IC0JaW8gPSBsX3F1ZXVlX2ZpbmQoaW9fbGlzdCwgbWF0Y2hfYnlfaW5kZXgsIExfVUlOVF9UT19Q VFIoaW5kZXgpKTsNCj4gKw0KPiArCWlvID0gbF9xdWV1ZV9maW5kKGlvX2xpc3QsIG1hdGNoX2J5 X3R5cGUsICZ0eXBlKTsNCj4gIA0KPiAgCWlmICghYXBpIHx8ICFhcGktPmluaXQgfHwgaW8pDQo+ ICAJCXJldHVybiBOVUxMOw0KPiBAQCAtNzcsOSArNzgsOSBAQCBzdHJ1Y3QgbWVzaF9pbyAqbWVz aF9pb19uZXcodWludDE2X3QgaW5kZXgsIGVudW0gbWVzaF9pb190eXBlIHR5cGUpDQo+ICAJCXJl dHVybiBOVUxMOw0KPiAgDQo+ICAJaW8tPnR5cGUgPSB0eXBlOw0KPiAtCWlvLT5pbmRleCA9IGlu ZGV4Ow0KPiArDQo+ICAJaW8tPmFwaSA9IGFwaTsNCj4gLQlpZiAoIWFwaS0+aW5pdChpbmRleCwg aW8pKQ0KPiArCWlmICghYXBpLT5pbml0KGlvLCBvcHRzKSkNCj4gIAkJZ290byBmYWlsOw0KPiAg DQo+ICAJaWYgKCFpb19saXN0KQ0KPiBkaWZmIC0tZ2l0IGEvbWVzaC9tZXNoLWlvLmggYi9tZXNo L21lc2gtaW8uaA0KPiBpbmRleCA3MWQzY2I5ODAuLjY1ODUyMDVjNyAxMDA2NDQNCj4gLS0tIGEv bWVzaC9tZXNoLWlvLmgNCj4gKysrIGIvbWVzaC9tZXNoLWlvLmgNCj4gQEAgLTgwLDcgKzgwLDcg QEAgdHlwZWRlZiB2b2lkICgqbWVzaF9pb19yZWN2X2Z1bmNfdCkodm9pZCAqdXNlcl9kYXRhLA0K PiAgdHlwZWRlZiB2b2lkICgqbWVzaF9pb19zdGF0dXNfZnVuY190KSh2b2lkICp1c2VyX2RhdGEs IGludCBzdGF0dXMsDQo+ICAJCQkJCQkJdWludDhfdCBmaWx0ZXJfaWQpOw0KPiAgDQo+IC1zdHJ1 Y3QgbWVzaF9pbyAqbWVzaF9pb19uZXcodWludDE2X3QgaW5kZXgsIGVudW0gbWVzaF9pb190eXBl IHR5cGUpOw0KPiArc3RydWN0IG1lc2hfaW8gKm1lc2hfaW9fbmV3KGVudW0gbWVzaF9pb190eXBl IHR5cGUsIHZvaWQgKm9wdHMpOw0KPiAgdm9pZCBtZXNoX2lvX2Rlc3Ryb3koc3RydWN0IG1lc2hf aW8gKmlvKTsNCj4gIA0KPiAgYm9vbCBtZXNoX2lvX2dldF9jYXBzKHN0cnVjdCBtZXNoX2lvICpp bywgc3RydWN0IG1lc2hfaW9fY2FwcyAqY2Fwcyk7DQo+IGRpZmYgLS1naXQgYS9tZXNoL21lc2gt bWdtdC5jIGIvbWVzaC9tZXNoLW1nbXQuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRl eCAwMDAwMDAwMDAuLmI3MzRkZjkyOQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL21lc2gvbWVz aC1tZ210LmMNCj4gQEAgLTAsMCArMSwyMDcgQEANCj4gKy8qDQo+ICsgKg0KPiArICogIEJsdWVa IC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eA0KPiArICoNCj4gKyAqICBDb3B5 cmlnaHQgKEMpIDIwMTkgIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0K DQpUaGFuayB5b3UgZm9yIHlvdXIgY29udHJpYnV0aW9ucywgYnV0IGlmIHlvdSBtYWtlIG5ldyBm aWxlcyB5b3UgY2FuJ3QgZW50aXJlbHkgDQpibGFtZSBJbnRlbCBmb3IgdGhlbS4uLiA7LSkNCg0K PiArICoNCj4gKyAqDQo+ICsgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPiArICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCj4gKyAqICBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCj4gKyAqICB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4NCj4gKyAqDQo+ICsgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo+ICsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gKyAqICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQ0KPiArICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuDQo+ICsgKg0KPiArICovDQo+ICsNCj4gKyNpZmRlZiBIQVZFX0NPTkZJR19IDQo+ICsjaW5j bHVkZSA8Y29uZmlnLmg+DQo+ICsjZW5kaWYNCj4gKw0KPiArI2luY2x1ZGUgIm1lc2gvbWVzaC1t Z210LmgiDQoNClRoZSAiTWVzaCIgc3BlY2lmaWMgaGVhZGVycyBzaG91bGQgZ28gbGFzdA0KDQo+ ICsNCj4gKyNpbmNsdWRlICJsaWIvYmx1ZXRvb3RoLmgiDQo+ICsjaW5jbHVkZSAibGliL21nbXQu aCINCj4gKyNpbmNsdWRlICJzcmMvc2hhcmVkL21nbXQuaCINCj4gKw0KPiArI2luY2x1ZGUgImVs bC9xdWV1ZS5oIg0KPiArI2luY2x1ZGUgImVsbC9sb2cuaCINCj4gKyNpbmNsdWRlICJlbGwvdXRp bC5oIg0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGxfcXVldWUgKmNvbnRyb2xsZXJzOw0KPiArc3Rh dGljIHN0cnVjdCBtZ210ICptZ210X21lc2g7DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgbF9xdWV1 ZSAqcmVhZF9pbmZvX3JlZ3M7DQoNCkdyb3VwIHN0YXRpYyB2YXJpYWJsZSBhZnRlciBsb2NhbCBz dHJ1Y3QgZGVjbGFyYXRpb25zLi4uIGFuZCBtYXliZSByZW1vdmUgZXh0cmEgYmxhbmsgbGluZQ0K DQo+ICsNCj4gK3N0cnVjdCByZWFkX2luZm9fcmVnIHsNCj4gKwltZXNoX21nbXRfcmVhZF9pbmZv X2Z1bmNfdCBjYjsNCj4gKwl2b2lkICp1c2VyX2RhdGE7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3Qg cmVhZF9pbmZvX3JlcSB7DQo+ICsJaW50IGluZGV4Ow0KPiArCXN0cnVjdCBtZXNoX2lvICppbzsN Cj4gK307DQo+ICsNCj4gK3N0YXRpYyBib29sIHNpbXBsZV9tYXRjaChjb25zdCB2b2lkICphLCBj b25zdCB2b2lkICpiKQ0KPiArew0KPiArCXJldHVybiBhID09IGI7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIHByb2Nlc3NfcmVhZF9pbmZvX3JlcSh2b2lkICpkYXRhLCB2b2lkICp1c2VyX2Rh dGEpDQo+ICt7DQo+ICsJc3RydWN0IHJlYWRfaW5mb19yZWcgKnJlZyA9IGRhdGE7DQo+ICsJaW50 IGluZGV4ID0gTF9QVFJfVE9fVUlOVCh1c2VyX2RhdGEpOw0KPiArDQo+ICsJcmVnLT5jYihpbmRl eCwgcmVnLT51c2VyX2RhdGEpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCByZWFkX2luZm9f Y2IodWludDhfdCBzdGF0dXMsIHVpbnQxNl90IGxlbmd0aCwNCj4gKwkJCQkJY29uc3Qgdm9pZCAq cGFyYW0sIHZvaWQgKnVzZXJfZGF0YSkNCj4gK3sNCj4gKwlpbnQgaW5kZXggPSBMX1BUUl9UT19V SU5UKHVzZXJfZGF0YSk7DQo+ICsJY29uc3Qgc3RydWN0IG1nbXRfcnBfcmVhZF9pbmZvICpycCA9 IHBhcmFtOw0KPiArCXVpbnQzMl90IGN1cnJlbnRfc2V0dGluZ3MsIHN1cHBvcnRlZF9zZXR0aW5n czsNCj4gKw0KPiArCWxfZGVidWcoImhjaSAldSBzdGF0dXMgMHglMDJ4IiwgaW5kZXgsIHN0YXR1 cyk7DQo+ICsNCj4gKwlpZiAoc3RhdHVzICE9IE1HTVRfU1RBVFVTX1NVQ0NFU1MpIHsNCj4gKwkJ bF9lcnJvcigiRmFpbGVkIHRvIHJlYWQgaW5mbyBmb3IgaGNpIGluZGV4ICV1OiAlcyAoMHglMDJ4 KSIsDQo+ICsJCQkJaW5kZXgsIG1nbXRfZXJyc3RyKHN0YXR1cyksIHN0YXR1cyk7DQo+ICsJCXJl dHVybjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAobGVuZ3RoIDwgc2l6ZW9mKCpycCkpIHsNCj4gKwkJ bF9lcnJvcigiUmVhZCBpbmZvIHJlc3BvbnNlIHRvbyBzaG9ydCIpOw0KPiArCQlyZXR1cm47DQo+ ICsJfQ0KPiArDQo+ICsJY3VycmVudF9zZXR0aW5ncyA9IGJ0b2hsKHJwLT5jdXJyZW50X3NldHRp bmdzKTsNCj4gKwlzdXBwb3J0ZWRfc2V0dGluZ3MgPSBidG9obChycC0+c3VwcG9ydGVkX3NldHRp bmdzKTsNCj4gKw0KPiArCWxfZGVidWcoInNldHRpbmdzOiBzdXBwICU4Ljh4IGN1cnIgJTguOHgi LA0KPiArCQkJCQlzdXBwb3J0ZWRfc2V0dGluZ3MsIGN1cnJlbnRfc2V0dGluZ3MpOw0KPiArDQo+ ICsJaWYgKGN1cnJlbnRfc2V0dGluZ3MgJiBNR01UX1NFVFRJTkdfUE9XRVJFRCkgew0KPiArCQls X2luZm8oIkNvbnRyb2xsZXIgaGNpICV1IGlzIGluIHVzZSIsIGluZGV4KTsNCj4gKwkJcmV0dXJu Ow0KPiArCX0NCj4gKw0KPiArCWlmICghKHN1cHBvcnRlZF9zZXR0aW5ncyAmIE1HTVRfU0VUVElO R19MRSkpIHsNCj4gKwkJbF9pbmZvKCJDb250cm9sbGVyIGhjaSAldSBkb2VzIG5vdCBzdXBwb3J0 IExFIiwgaW5kZXgpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJbF9xdWV1ZV9mb3Jl YWNoKHJlYWRfaW5mb19yZWdzLCBwcm9jZXNzX3JlYWRfaW5mb19yZXEsDQo+ICsJCQkJCQkJTF9V SU5UX1RPX1BUUihpbmRleCkpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpbmRleF9hZGRl ZCh1aW50MTZfdCBpbmRleCwgdWludDE2X3QgbGVuZ3RoLCBjb25zdCB2b2lkICpwYXJhbSwNCj4g KwkJCQkJCQl2b2lkICp1c2VyX2RhdGEpDQo+ICt7DQo+ICsJaWYgKGxfcXVldWVfZmluZChjb250 cm9sbGVycywgc2ltcGxlX21hdGNoLCBMX1VJTlRfVE9fUFRSKGluZGV4KSkpDQo+ICsJCXJldHVy bjsNCj4gKw0KPiArCWxfcXVldWVfcHVzaF90YWlsKGNvbnRyb2xsZXJzLCBMX1VJTlRfVE9fUFRS KGluZGV4KSk7DQo+ICsNCj4gKwlpZiAobWdtdF9zZW5kKG1nbXRfbWVzaCwgTUdNVF9PUF9SRUFE X0lORk8sIGluZGV4LCAwLCBOVUxMLA0KPiArCQkJcmVhZF9pbmZvX2NiLCBMX1VJTlRfVE9fUFRS KGluZGV4KSwgTlVMTCkgIT0gMCkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJbF9xdWV1ZV9yZW1v dmUoY29udHJvbGxlcnMsIExfVUlOVF9UT19QVFIoaW5kZXgpKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgaW5kZXhfcmVtb3ZlZCh1aW50MTZfdCBpbmRleCwgdWludDE2X3QgbGVuZ3RoLCBj b25zdCB2b2lkICpwYXJhbSwNCj4gKwkJCQkJCQl2b2lkICp1c2VyX2RhdGEpDQo+ICt7DQo+ICsJ bF93YXJuKCJIY2kgZGV2ICU0LjR4IHJlbW92ZWQiLCBpbmRleCk7DQo+ICsJbF9xdWV1ZV9yZW1v dmUoY29udHJvbGxlcnMsIExfVUlOVF9UT19QVFIoaW5kZXgpKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgcmVhZF9pbmRleF9saXN0X2NiKHVpbnQ4X3Qgc3RhdHVzLCB1aW50MTZfdCBsZW5n dGgsDQo+ICsJCQkJCWNvbnN0IHZvaWQgKnBhcmFtLCB2b2lkICp1c2VyX2RhdGEpDQo+ICt7DQo+ ICsJY29uc3Qgc3RydWN0IG1nbXRfcnBfcmVhZF9pbmRleF9saXN0ICpycCA9IHBhcmFtOw0KPiAr CXVpbnQxNl90IG51bTsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWlmIChzdGF0dXMgIT0gTUdNVF9T VEFUVVNfU1VDQ0VTUykgew0KPiArCQlsX2Vycm9yKCJGYWlsZWQgdG8gcmVhZCBpbmRleCBsaXN0 OiAlcyAoMHglMDJ4KSIsDQo+ICsJCQkJCQltZ210X2VycnN0cihzdGF0dXMpLCBzdGF0dXMpOw0K PiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGxlbmd0aCA8IHNpemVvZigqcnApKSB7 DQo+ICsJCWxfZXJyb3IoIlJlYWQgaW5kZXggbGlzdCByZXNwb25zZSBzaXhlIHRvbyBzaG9ydCIp Ow0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJbnVtID0gYnRvaHMocnAtPm51bV9jb250 cm9sbGVycyk7DQo+ICsNCj4gKwlsX2RlYnVnKCJOdW1iZXIgb2YgY29udHJvbGxlcnM6ICV1Iiwg bnVtKTsNCj4gKw0KPiArCWlmIChudW0gKiBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKCpycCkg IT0gbGVuZ3RoKSB7DQo+ICsJCWxfZXJyb3IoIkluY29ycmVjdCBwYWNrZXQgc2l6ZSBmb3IgaW5k ZXggbGlzdCByZXNwb25zZSIpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJZm9yIChp ID0gMDsgaSA8IG51bTsgaSsrKSB7DQo+ICsJCXVpbnQxNl90IGluZGV4Ow0KPiArDQo+ICsJCWlu ZGV4ID0gYnRvaHMocnAtPmluZGV4W2ldKTsNCj4gKwkJaW5kZXhfYWRkZWQoaW5kZXgsIDAsIE5V TEwsIHVzZXJfZGF0YSk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBtZXNoX21n bXRfaW5pdCh2b2lkKQ0KPiArew0KPiArCWlmICghY29udHJvbGxlcnMpDQo+ICsJCWNvbnRyb2xs ZXJzID0gbF9xdWV1ZV9uZXcoKTsNCj4gKw0KPiArCWlmICghcmVhZF9pbmZvX3JlZ3MpDQo+ICsJ CXJlYWRfaW5mb19yZWdzID0gbF9xdWV1ZV9uZXcoKTsNCj4gKw0KPiArCWlmICghbWdtdF9tZXNo KSB7DQo+ICsJCW1nbXRfbWVzaCA9IG1nbXRfbmV3X2RlZmF1bHQoKTsNCj4gKw0KPiArCQlpZiAo IW1nbXRfbWVzaCkgew0KPiArCQkJbF9lcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgbWVzaCBt YW5hZ2VtZW50Iik7DQo+ICsJCQlyZXR1cm4gZmFsc2U7DQo+ICsJCX0NCj4gKw0KPiArCQltZ210 X3JlZ2lzdGVyKG1nbXRfbWVzaCwgTUdNVF9FVl9JTkRFWF9BRERFRCwNCj4gKwkJCQlNR01UX0lO REVYX05PTkUsIGluZGV4X2FkZGVkLCBOVUxMLCBOVUxMKTsNCj4gKwkJbWdtdF9yZWdpc3Rlciht Z210X21lc2gsIE1HTVRfRVZfSU5ERVhfUkVNT1ZFRCwNCj4gKwkJCQlNR01UX0lOREVYX05PTkUs IGluZGV4X3JlbW92ZWQsIE5VTEwsIE5VTEwpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiB0cnVl Ow0KPiArfQ0KPiArDQo+ICtib29sIG1lc2hfbWdtdF9saXN0KG1lc2hfbWdtdF9yZWFkX2luZm9f ZnVuY190IGNiLCB2b2lkICp1c2VyX2RhdGEpDQo+ICt7DQo+ICsJc3RydWN0IHJlYWRfaW5mb19y ZWcgKnJlZzsNCj4gKw0KPiArCWlmICghbWVzaF9tZ210X2luaXQoKSkNCj4gKwkJcmV0dXJuIGZh bHNlOw0KPiArDQo+ICsJcmVnID0gbF9uZXcoc3RydWN0IHJlYWRfaW5mb19yZWcsIDEpOw0KPiAr CXJlZy0+Y2IgPSBjYjsNCj4gKwlyZWctPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsNCj4gKw0KPiAr CWxfcXVldWVfcHVzaF90YWlsKHJlYWRfaW5mb19yZWdzLCByZWcpOw0KPiArDQo+ICsJLyogVXNl IE1HTVQgdG8gZmluZCBhIGNhbmRpZGF0ZSBjb250cm9sbGVyICovDQo+ICsJbF9kZWJ1Zygic2Vu ZCByZWFkIGluZGV4X2xpc3QiKTsNCj4gKwlpZiAobWdtdF9zZW5kKG1nbXRfbWVzaCwgTUdNVF9P UF9SRUFEX0lOREVYX0xJU1QsDQo+ICsJCQkJCU1HTVRfSU5ERVhfTk9ORSwgMCwgTlVMTCwNCj4g KwkJCQkJcmVhZF9pbmRleF9saXN0X2NiLCBOVUxMLCBOVUxMKSA8PSAwKQ0KPiArCQlyZXR1cm4g ZmFsc2U7DQo+ICsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gKw0KPiArDQo+ICt9DQo+IGRpZmYgLS1n aXQgYS9tZXNoL21lc2gtbWdtdC5oIGIvbWVzaC9tZXNoLW1nbXQuaA0KPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAuLmVhN2E2MjNjMw0KPiAtLS0gL2Rldi9udWxsDQo+ ICsrKyBiL21lc2gvbWVzaC1tZ210LmgNCj4gQEAgLTAsMCArMSwyMyBAQA0KPiArLyoNCj4gKyAq DQo+ICsgKiAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4DQo+ICsg Kg0KPiArICogIENvcHlyaWdodCAoQykgMjAxOC0yMDE5ICBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4NCg0KU2FtZTogIENyZWF0ZSB5b3VyIG93biBjb3B5cmlnaHQgbGlu ZSBwZXIgeW91ciBvd24gY29tcGFuaWVzIHBvbGljaWVzDQoNCj4gKyAqDQo+ICsgKg0KPiArICog IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3INCj4gKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljDQo+ICsgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQo+ICsgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQo+ICsgKg0KPiAr ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLA0KPiArICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQo+ICsgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCj4gKyAqICBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KPiArICoNCj4gKyAqLw0K PiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCj4gKw0KPiArdHlwZWRlZiB2b2lkICgqbWVzaF9tZ210 X3JlYWRfaW5mb19mdW5jX3QpKGludCBpbmRleCwgdm9pZCAqdXNlcl9kYXRhKTsNCj4gKw0KPiAr Ym9vbCBtZXNoX21nbXRfbGlzdChtZXNoX21nbXRfcmVhZF9pbmZvX2Z1bmNfdCBjYiwgdm9pZCAq dXNlcl9kYXRhKTsNCj4gZGlmZiAtLWdpdCBhL21lc2gvbWVzaC5jIGIvbWVzaC9tZXNoLmMNCj4g aW5kZXggMjMxYTZiY2E0Li4yNmFjZmQ0ZGMgMTAwNjQ0DQo+IC0tLSBhL21lc2gvbWVzaC5jDQo+ ICsrKyBiL21lc2gvbWVzaC5jDQo+IEBAIC0yNCwxMSArMjQsNiBAQA0KPiAgI2RlZmluZSBfR05V X1NPVVJDRQ0KPiAgI2luY2x1ZGUgPGVsbC9lbGwuaD4NCj4gIA0KPiAtI2luY2x1ZGUgImxpYi9i bHVldG9vdGguaCINCj4gLSNpbmNsdWRlICJsaWIvbWdtdC5oIg0KPiAtDQo+IC0jaW5jbHVkZSAi c3JjL3NoYXJlZC9tZ210LmgiDQo+IC0NCj4gICNpbmNsdWRlICJtZXNoL21lc2gtaW8uaCINCj4g ICNpbmNsdWRlICJtZXNoL25vZGUuaCINCj4gICNpbmNsdWRlICJtZXNoL25ldC5oIg0KPiBAQCAt NzYsOSArNzEsNiBAQCBzdHJ1Y3Qgam9pbl9kYXRhew0KPiAgfTsNCj4gIA0KPiAgc3RhdGljIHN0 cnVjdCBidF9tZXNoIG1lc2g7DQo+IC1zdGF0aWMgc3RydWN0IGxfcXVldWUgKmNvbnRyb2xsZXJz Ow0KPiAtc3RhdGljIHN0cnVjdCBtZ210ICptZ210X21lc2g7DQo+IC1zdGF0aWMgYm9vbCBpbml0 aWFsaXplZDsNCj4gIA0KPiAgLyogV2UgYWxsb3cgb25seSBvbmUgb3V0c3RhbmRpbmcgSm9pbiBy ZXF1ZXN0ICovDQo+ICBzdGF0aWMgc3RydWN0IGpvaW5fZGF0YSAqam9pbl9wZW5kaW5nOw0KPiBA QCAtOTEsMjkgKzgzLDYgQEAgc3RhdGljIGJvb2wgc2ltcGxlX21hdGNoKGNvbnN0IHZvaWQgKmEs IGNvbnN0IHZvaWQgKmIpDQo+ICAJcmV0dXJuIGEgPT0gYjsNCj4gIH0NCj4gIA0KPiAtc3RhdGlj IHZvaWQgc3RhcnRfaW8odWludDE2X3QgaW5kZXgpDQo+IC17DQo+IC0Jc3RydWN0IG1lc2hfaW8g KmlvOw0KPiAtCXN0cnVjdCBtZXNoX2lvX2NhcHMgY2FwczsNCj4gLQ0KPiAtCWxfZGVidWcoIlN0 YXJ0aW5nIG1lc2ggb24gaGNpICV1IiwgaW5kZXgpOw0KPiAtDQo+IC0JaW8gPSBtZXNoX2lvX25l dyhpbmRleCwgTUVTSF9JT19UWVBFX0dFTkVSSUMpOw0KPiAtCWlmICghaW8pIHsNCj4gLQkJbF9l cnJvcigiRmFpbGVkIHRvIHN0YXJ0IG1lc2ggaW8gKGhjaSAldSkiLCBpbmRleCk7DQo+IC0JCXJl dHVybjsNCj4gLQl9DQo+IC0NCj4gLQltZXNoX2lvX2dldF9jYXBzKGlvLCAmY2Fwcyk7DQo+IC0J bWVzaC5tYXhfZmlsdGVycyA9IGNhcHMubWF4X251bV9maWx0ZXJzOw0KPiAtDQo+IC0JbWVzaC5p byA9IGlvOw0KPiAtDQo+IC0JbF9kZWJ1ZygiU3RhcnRlZCBtZXNoIChpbyAlcCkgb24gaGNpICV1 IiwgbWVzaC5pbywgaW5kZXgpOw0KPiAtDQo+IC0Jbm9kZV9hdHRhY2hfaW9fYWxsKGlvKTsNCj4g LX0NCj4gLQ0KPiAgLyogVXNlZCBmb3IgYW55IG91dGJvdW5kIHRyYWZmaWMgdGhhdCBkb2Vzbid0 IGhhdmUgRnJpZW5kc2hpcCBDb25zdHJhaW50cyAqLw0KPiAgLyogVGhpcyBpbmNsdWRlcyBCZWFj b25zLCBQcm92aXNpb25pbmcgYW5kIHVucmVzdHJpY3RlZCBOZXR3b3JrIFRyYWZmaWMgKi8NCj4g IGJvb2wgbWVzaF9zZW5kX3BrdCh1aW50OF90IGNvdW50LCB1aW50MTZfdCBpbnRlcnZhbCwNCj4g QEAgLTE2NywxNDMgKzEzNiwxMyBAQCB2b2lkIG1lc2hfdW5yZWdfcHJvdl9yeChwcm92X3J4X2Ni X3QgY2IpDQo+ICAJbWVzaF9pb19kZXJlZ2lzdGVyX3JlY3ZfY2IobWVzaC5pbywgTUVTSF9JT19G SUxURVJfUFJPVik7DQo+ICB9DQo+ICANCj4gLXN0YXRpYyB2b2lkIHJlYWRfaW5mb19jYih1aW50 OF90IHN0YXR1cywgdWludDE2X3QgbGVuZ3RoLA0KPiAtCQkJCQljb25zdCB2b2lkICpwYXJhbSwg dm9pZCAqdXNlcl9kYXRhKQ0KPiArYm9vbCBtZXNoX2luaXQoY29uc3QgY2hhciAqY29uZmlnX2Rp ciwgZW51bSBtZXNoX2lvX3R5cGUgdHlwZSwgdm9pZCAqb3B0cykNCj4gIHsNCj4gLQl1aW50MTZf dCBpbmRleCA9IExfUFRSX1RPX1VJTlQodXNlcl9kYXRhKTsNCj4gLQljb25zdCBzdHJ1Y3QgbWdt dF9ycF9yZWFkX2luZm8gKnJwID0gcGFyYW07DQo+IC0JdWludDMyX3QgY3VycmVudF9zZXR0aW5n cywgc3VwcG9ydGVkX3NldHRpbmdzOw0KPiArCXN0cnVjdCBtZXNoX2lvX2NhcHMgY2FwczsNCj4g IA0KPiAgCWlmIChtZXNoLmlvKQ0KPiAtCQkvKiBBbHJlYWR5IGluaXRpYWxpemVkICovDQo+IC0J CXJldHVybjsNCj4gLQ0KPiAtCWxfZGVidWcoImhjaSAldSBzdGF0dXMgMHglMDJ4IiwgaW5kZXgs IHN0YXR1cyk7DQo+IC0NCj4gLQlpZiAoc3RhdHVzICE9IE1HTVRfU1RBVFVTX1NVQ0NFU1MpIHsN Cj4gLQkJbF9lcnJvcigiRmFpbGVkIHRvIHJlYWQgaW5mbyBmb3IgaGNpIGluZGV4ICV1OiAlcyAo MHglMDJ4KSIsDQo+IC0JCQkJCWluZGV4LCBtZ210X2VycnN0cihzdGF0dXMpLCBzdGF0dXMpOw0K PiAtCQlyZXR1cm47DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKGxlbmd0aCA8IHNpemVvZigqcnApKSB7 DQo+IC0JCWxfZXJyb3IoIlJlYWQgaW5mbyByZXNwb25zZSB0b28gc2hvcnQiKTsNCj4gLQkJcmV0 dXJuOw0KPiAtCX0NCj4gLQ0KPiAtCWN1cnJlbnRfc2V0dGluZ3MgPSBidG9obChycC0+Y3VycmVu dF9zZXR0aW5ncyk7DQo+IC0Jc3VwcG9ydGVkX3NldHRpbmdzID0gYnRvaGwocnAtPnN1cHBvcnRl ZF9zZXR0aW5ncyk7DQo+IC0NCj4gLQlsX2RlYnVnKCJzZXR0aW5nczogc3VwcCAlOC44eCBjdXJy ICU4Ljh4IiwNCj4gLQkJCQkJc3VwcG9ydGVkX3NldHRpbmdzLCBjdXJyZW50X3NldHRpbmdzKTsN Cj4gLQ0KPiAtCWlmIChjdXJyZW50X3NldHRpbmdzICYgTUdNVF9TRVRUSU5HX1BPV0VSRUQpIHsN Cj4gLQkJbF9pbmZvKCJDb250cm9sbGVyIGhjaSAldSBpcyBpbiB1c2UiLCBpbmRleCk7DQo+IC0J CXJldHVybjsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoIShzdXBwb3J0ZWRfc2V0dGluZ3MgJiBNR01U X1NFVFRJTkdfTEUpKSB7DQo+IC0JCWxfaW5mbygiQ29udHJvbGxlciBoY2kgJXUgZG9lcyBub3Qg c3VwcG9ydCBMRSIsIGluZGV4KTsNCj4gLQkJcmV0dXJuOw0KPiAtCX0NCj4gLQ0KPiAtCXN0YXJ0 X2lvKGluZGV4KTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgaW5kZXhfYWRkZWQodWludDE2 X3QgaW5kZXgsIHVpbnQxNl90IGxlbmd0aCwgY29uc3Qgdm9pZCAqcGFyYW0sDQo+IC0JCQkJCQkJ dm9pZCAqdXNlcl9kYXRhKQ0KPiAtew0KPiAtCWxfZGVidWcoImhjaSBkZXZpY2UgJXUiLCBpbmRl eCk7DQo+IC0NCj4gLQlpZiAobWVzaC5yZXFfaW5kZXggIT0gTUdNVF9JTkRFWF9OT05FICYmDQo+ IC0JCQkJCWluZGV4ICE9IG1lc2gucmVxX2luZGV4KSB7DQo+IC0JCWxfZGVidWcoIklnbm9yZSBp bmRleCAlZCIsIGluZGV4KTsNCj4gLQkJcmV0dXJuOw0KPiAtCX0NCj4gLQ0KPiAtCWlmIChsX3F1 ZXVlX2ZpbmQoY29udHJvbGxlcnMsIHNpbXBsZV9tYXRjaCwgTF9VSU5UX1RPX1BUUihpbmRleCkp KQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlsX3F1ZXVlX3B1c2hfdGFpbChjb250cm9sbGVycywg TF9VSU5UX1RPX1BUUihpbmRleCkpOw0KPiAtDQo+IC0JaWYgKG1nbXRfc2VuZChtZ210X21lc2gs IE1HTVRfT1BfUkVBRF9JTkZPLCBpbmRleCwgMCwgTlVMTCwNCj4gLQkJCXJlYWRfaW5mb19jYiwg TF9VSU5UX1RPX1BUUihpbmRleCksIE5VTEwpID4gMCkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0J bF9xdWV1ZV9yZW1vdmUoY29udHJvbGxlcnMsIExfVUlOVF9UT19QVFIoaW5kZXgpKTsNCj4gLX0N Cj4gLQ0KPiAtc3RhdGljIHZvaWQgaW5kZXhfcmVtb3ZlZCh1aW50MTZfdCBpbmRleCwgdWludDE2 X3QgbGVuZ3RoLCBjb25zdCB2b2lkICpwYXJhbSwNCj4gLQkJCQkJCQl2b2lkICp1c2VyX2RhdGEp DQo+IC17DQo+IC0JbF93YXJuKCJIY2kgZGV2ICU0LjR4IHJlbW92ZWQiLCBpbmRleCk7DQo+IC0J bF9xdWV1ZV9yZW1vdmUoY29udHJvbGxlcnMsIExfVUlOVF9UT19QVFIoaW5kZXgpKTsNCj4gLX0N Cj4gLQ0KPiAtc3RhdGljIHZvaWQgcmVhZF9pbmRleF9saXN0X2NiKHVpbnQ4X3Qgc3RhdHVzLCB1 aW50MTZfdCBsZW5ndGgsDQo+IC0JCQkJCWNvbnN0IHZvaWQgKnBhcmFtLCB2b2lkICp1c2VyX2Rh dGEpDQo+IC17DQo+IC0JY29uc3Qgc3RydWN0IG1nbXRfcnBfcmVhZF9pbmRleF9saXN0ICpycCA9 IHBhcmFtOw0KPiAtCXVpbnQxNl90IG51bTsNCj4gLQlpbnQgaTsNCj4gLQ0KPiAtCWlmIChzdGF0 dXMgIT0gTUdNVF9TVEFUVVNfU1VDQ0VTUykgew0KPiAtCQlsX2Vycm9yKCJGYWlsZWQgdG8gcmVh ZCBpbmRleCBsaXN0OiAlcyAoMHglMDJ4KSIsDQo+IC0JCQkJCQltZ210X2VycnN0cihzdGF0dXMp LCBzdGF0dXMpOw0KPiAtCQlyZXR1cm47DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKGxlbmd0aCA8IHNp emVvZigqcnApKSB7DQo+IC0JCWxfZXJyb3IoIlJlYWQgaW5kZXggbGlzdCByZXNwb25zZSBzaXhl IHRvbyBzaG9ydCIpOw0KPiAtCQlyZXR1cm47DQo+IC0JfQ0KPiAtDQo+IC0JbnVtID0gYnRvaHMo cnAtPm51bV9jb250cm9sbGVycyk7DQo+IC0NCj4gLQlsX2RlYnVnKCJOdW1iZXIgb2YgY29udHJv bGxlcnM6ICV1IiwgbnVtKTsNCj4gLQ0KPiAtCWlmIChudW0gKiBzaXplb2YodWludDE2X3QpICsg c2l6ZW9mKCpycCkgIT0gbGVuZ3RoKSB7DQo+IC0JCWxfZXJyb3IoIkluY29ycmVjdCBwYWNrZXQg c2l6ZSBmb3IgaW5kZXggbGlzdCByZXNwb25zZSIpOw0KPiAtCQlyZXR1cm47DQo+IC0JfQ0KPiAt DQo+IC0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7DQo+IC0JCXVpbnQxNl90IGluZGV4Ow0K PiAtDQo+IC0JCWluZGV4ID0gYnRvaHMocnAtPmluZGV4W2ldKTsNCj4gLQkJaW5kZXhfYWRkZWQo aW5kZXgsIDAsIE5VTEwsIHVzZXJfZGF0YSk7DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMg Ym9vbCBpbml0X21nbXQodm9pZCkNCj4gLXsNCj4gLQltZ210X21lc2ggPSBtZ210X25ld19kZWZh dWx0KCk7DQo+IC0JaWYgKCFtZ210X21lc2gpDQo+IC0JCXJldHVybiBmYWxzZTsNCj4gLQ0KPiAt CWNvbnRyb2xsZXJzID0gbF9xdWV1ZV9uZXcoKTsNCj4gLQlpZiAoIWNvbnRyb2xsZXJzKQ0KPiAt CQlyZXR1cm4gZmFsc2U7DQo+IC0NCj4gLQltZ210X3JlZ2lzdGVyKG1nbXRfbWVzaCwgTUdNVF9F Vl9JTkRFWF9BRERFRCwgTUdNVF9JTkRFWF9OT05FLA0KPiAtCQkJCQkJaW5kZXhfYWRkZWQsIE5V TEwsIE5VTEwpOw0KPiAtCW1nbXRfcmVnaXN0ZXIobWdtdF9tZXNoLCBNR01UX0VWX0lOREVYX1JF TU9WRUQsIE1HTVRfSU5ERVhfTk9ORSwNCj4gLQkJCQkJCWluZGV4X3JlbW92ZWQsIE5VTEwsIE5V TEwpOw0KPiAtCXJldHVybiB0cnVlOw0KPiAtfQ0KPiAtDQo+IC1ib29sIG1lc2hfaW5pdCh1aW50 MTZfdCBpbmRleCwgY29uc3QgY2hhciAqY29uZmlnX2RpcikNCj4gLXsNCj4gLQlpZiAoaW5pdGlh bGl6ZWQpDQo+ICAJCXJldHVybiB0cnVlOw0KPiAgDQo+IC0JaWYgKGluZGV4ID09IE1HTVRfSU5E RVhfTk9ORSAmJiAhaW5pdF9tZ210KCkpIHsNCj4gLQkJbF9lcnJvcigiRmFpbGVkIHRvIGluaXRp YWxpemUgbWVzaCBtYW5hZ2VtZW50Iik7DQo+IC0JCXJldHVybiBmYWxzZTsNCj4gLQl9DQo+IC0N Cj4gLQltZXNoLnJlcV9pbmRleCA9IGluZGV4Ow0KPiAtDQo+ICAJbWVzaF9tb2RlbF9pbml0KCk7 DQo+ICAJbWVzaF9hZ2VudF9pbml0KCk7DQo+ICANCj4gQEAgLTMxOSwxOCArMTU4LDE2IEBAIGJv b2wgbWVzaF9pbml0KHVpbnQxNl90IGluZGV4LCBjb25zdCBjaGFyICpjb25maWdfZGlyKQ0KPiAg CWlmICghc3RvcmFnZV9sb2FkX25vZGVzKGNvbmZpZ19kaXIpKQ0KPiAgCQlyZXR1cm4gZmFsc2U7 DQo+ICANCj4gLQlpZiAoaW5kZXggPT0gTUdNVF9JTkRFWF9OT05FKSB7DQo+IC0JCS8qIFVzZSBN R01UIHRvIGZpbmQgYSBjYW5kaWRhdGUgY29udHJvbGxlciAqLw0KPiAtCQlsX2RlYnVnKCJzZW5k IHJlYWQgaW5kZXhfbGlzdCIpOw0KPiAtCQlpZiAobWdtdF9zZW5kKG1nbXRfbWVzaCwgTUdNVF9P UF9SRUFEX0lOREVYX0xJU1QsDQo+IC0JCQkJCU1HTVRfSU5ERVhfTk9ORSwgMCwgTlVMTCwNCj4g LQkJCQkJcmVhZF9pbmRleF9saXN0X2NiLCBOVUxMLCBOVUxMKSA8PSAwKQ0KPiAtCQkJcmV0dXJu IGZhbHNlOw0KPiAtCX0gZWxzZSB7DQo+IC0JCS8qIE9wZW4gc3BlY2lmaWVkIGNvbnRyb2xsZXIg d2l0aG91dCBzZWFyY2hpbmcgKi8NCj4gLQkJc3RhcnRfaW8obWVzaC5yZXFfaW5kZXgpOw0KPiAt CQlyZXR1cm4gbWVzaC5pbyAhPSBOVUxMOw0KPiAtCX0NCj4gKwltZXNoLmlvID0gbWVzaF9pb19u ZXcodHlwZSwgb3B0cyk7DQo+ICsJaWYgKCFtZXNoLmlvKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ ICsNCj4gKwlsX2RlYnVnKCJpbyAlcCIsIG1lc2guaW8pOw0KPiArCW1lc2hfaW9fZ2V0X2NhcHMo bWVzaC5pbywgJmNhcHMpOw0KPiArCW1lc2gubWF4X2ZpbHRlcnMgPSBjYXBzLm1heF9udW1fZmls dGVyczsNCj4gKw0KPiArCW5vZGVfYXR0YWNoX2lvX2FsbChtZXNoLmlvKTsNCj4gKw0KPiAgCXJl dHVybiB0cnVlOw0KPiAgfQ0KPiAgDQo+IEBAIC0zNjYsNyArMjAzLDYgQEAgdm9pZCBtZXNoX2Ns ZWFudXAodm9pZCkNCj4gIAlzdHJ1Y3QgbF9kYnVzX21lc3NhZ2UgKnJlcGx5Ow0KPiAgDQo+ICAJ bWVzaF9pb19kZXN0cm95KG1lc2guaW8pOw0KPiAtCW1nbXRfdW5yZWYobWdtdF9tZXNoKTsNCj4g IA0KPiAgCWlmIChqb2luX3BlbmRpbmcpIHsNCj4gIA0KPiBAQCAtMzg0LDcgKzIyMCw2IEBAIHZv aWQgbWVzaF9jbGVhbnVwKHZvaWQpDQo+ICAJbm9kZV9jbGVhbnVwX2FsbCgpOw0KPiAgCW1lc2hf bW9kZWxfY2xlYW51cCgpOw0KPiAgDQo+IC0JbF9xdWV1ZV9kZXN0cm95KGNvbnRyb2xsZXJzLCBO VUxMKTsNCj4gIAlsX2RidXNfb2JqZWN0X3JlbW92ZV9pbnRlcmZhY2UoZGJ1c19nZXRfYnVzKCks IEJMVUVaX01FU0hfUEFUSCwNCj4gIAkJCQkJCQlNRVNIX05FVFdPUktfSU5URVJGQUNFKTsNCj4g IAlsX2RidXNfdW5yZWdpc3Rlcl9pbnRlcmZhY2UoZGJ1c19nZXRfYnVzKCksIE1FU0hfTkVUV09S S19JTlRFUkZBQ0UpOw0KPiBkaWZmIC0tZ2l0IGEvbWVzaC9tZXNoLmggYi9tZXNoL21lc2guaA0K PiBpbmRleCAzMjBhMTA4ZWQuLjE0YjFmYjUxNyAxMDA2NDQNCj4gLS0tIGEvbWVzaC9tZXNoLmgN Cj4gKysrIGIvbWVzaC9tZXNoLmgNCj4gQEAgLTI4LDkgKzI4LDExIEBADQo+ICAjZGVmaW5lIE1F U0hfUFJPVklTSU9ORVJfSU5URVJGQUNFICJvcmcuYmx1ZXoubWVzaC5Qcm92aXNpb25lcjEiDQo+ ICAjZGVmaW5lIEVSUk9SX0lOVEVSRkFDRSAib3JnLmJsdWV6Lm1lc2guRXJyb3IiDQo+ICANCj4g K2VudW0gbWVzaF9pb190eXBlOw0KPiArDQo+ICB0eXBlZGVmIHZvaWQgKCpwcm92X3J4X2NiX3Qp KHZvaWQgKnVzZXJfZGF0YSwgY29uc3QgdWludDhfdCAqZGF0YSwNCj4gIAkJCQkJCQkJdWludDE2 X3QgbGVuKTsNCj4gLWJvb2wgbWVzaF9pbml0KHVpbnQxNl90IGluZGV4LCBjb25zdCBjaGFyICpp bl9jb25maWdfbmFtZSk7DQo+ICtib29sIG1lc2hfaW5pdChjb25zdCBjaGFyICppbl9jb25maWdf bmFtZSwgZW51bSBtZXNoX2lvX3R5cGUgdHlwZSwgdm9pZCAqb3B0cyk7DQo+ICB2b2lkIG1lc2hf Y2xlYW51cCh2b2lkKTsNCj4gIGJvb2wgbWVzaF9kYnVzX2luaXQoc3RydWN0IGxfZGJ1cyAqZGJ1 cyk7DQo+ICANCg0KQXMgQmVmb3JlOg0KT3RoZXJ3aXNlLCBJIGxpa2UgaXQgYSBsb3QuLi4uICBN YWtlIHN1cmUgaXQgY29udGludWVzIHRvIHdvcms6DQoxLiBPbiBwbGF0Zm9ybXMgd2l0aCBtdWx0 aXBsZSBjb250cm9sbGVycywgd2l0aCB0aGUgLWkgaGNpWCBvcHRpb24gYnlwYXNzaW5nIHRoZSBN R01UIGNhbGxzDQoyLiBPbiBwbGF0Zm9ybXMgd2l0aCBtdWx0aXBsZSBjb250cm9sbGVycyB3aXRo b3V0IHRoZSAtaSwgd2hlcmUgTUdNVCBpbnRlcmZhY2UgcGlja3Mgb25lDQozLiBPbiBzaW5nbGUg YW5kIFplcm8gY29udHJvbGxlciBzeXN0ZW1zIHdpdGggYm90aCBjYXNlcyAxIGFuZCAyIGFib3Zl Lg0KDQpCZXN0IFJlZ2FyZHMsIA0KQnJpYW4NCg==