From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 16C0DC7618D for ; Mon, 20 Mar 2023 10:14:45 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6600110E2EB; Mon, 20 Mar 2023 10:14:45 +0000 (UTC) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 82FEC10E2EB for ; Mon, 20 Mar 2023 10:14:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1679307283; x=1710843283; h=from:to:subject:in-reply-to:references:date:message-id: mime-version:content-transfer-encoding; bh=LVpScxZllxTF3r+ITwT1IVcMOdVCpHYbi1+2XDWCTy8=; b=Yxu+iNd98JSVWQVBfSgBV4sja9OwflFQ4b0Aad4nFuEjbIfVCmUoHDQF wG4GzKX6O5xhtBh6p3gwrNiZYZb4JAydGe7F2TrLIHcnZX6+Eaotf1wd9 MG2GM3HPtvv5ZdmrNoMf4ghwBpRyf29LZRCtTE8OaEc3CaY34QHVtGF1T 5LFlxDpt6iadEOE2U2zAO33Xu7LAmHMZ2UHZEW+yGqP5yEI3e72/ZgQx3 Kwmew1R02y9E6OySs4vWcLJpfsh4LK7HxrQoNB+alH4LzkLDufjgMJM3w rrbHcMyZSc+2YDv5TnMBMdSd7ep6GHdVwptVKjJ8CbKw1EcAnUeFyqJFH Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10654"; a="326993830" X-IronPort-AV: E=Sophos;i="5.98,274,1673942400"; d="scan'208";a="326993830" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Mar 2023 03:14:42 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10654"; a="681023684" X-IronPort-AV: E=Sophos;i="5.98,274,1673942400"; d="scan'208";a="681023684" Received: from mseifert-mobl1.ger.corp.intel.com (HELO localhost) ([10.252.61.180]) by orsmga002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Mar 2023 03:14:37 -0700 From: Jani Nikula To: "Hogander, Jouni" , "intel-gfx@lists.freedesktop.org" In-Reply-To: Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20230317134144.223936-1-jani.nikula@intel.com> Date: Mon, 20 Mar 2023 12:14:30 +0200 Message-ID: <87edpjafw9.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 Subject: Re: [Intel-gfx] [PATCH 1/3] drm/i915/psr: move PSR debugfs to intel_psr.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gTW9uLCAyMCBNYXIgMjAyMywgIkhvZ2FuZGVyLCBKb3VuaSIgPGpvdW5pLmhvZ2FuZGVyQGlu dGVsLmNvbT4gd3JvdGU6DQo+IE9uIEZyaSwgMjAyMy0wMy0xNyBhdCAxNTo0MSArMDIwMCwgSmFu aSBOaWt1bGEgd3JvdGU6DQo+PiBNb3ZlIHRoZSBkZWJ1Z2ZzIG5leHQgdG8gdGhlIGltcGxlbWVu dGF0aW9uLg0KPj4gDQo+DQo+IFJldmlld2VkLWJ5OiBKb3VuaSBIw7ZnYW5kZXIgPGpvdW5pLmhv Z2FuZGVyQGludGVsLmNvbT4NCg0KVGhhbmtzLCBwdXNoZWQgdGhlIHNlcmllcyB0byBkaW4uDQoN CkJSLA0KSmFuaS4NCg0KPg0KPj4gQ2M6IEpvdW5pIEjDtmdhbmRlciA8am91bmkuaG9nYW5kZXJA aW50ZWwuY29tPg0KPj4gU2lnbmVkLW9mZi1ieTogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGlu dGVsLmNvbT4NCj4+IC0tLQ0KPj4gwqAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 X2RlYnVnZnMuY8KgIHwgMjg4ICstLS0tLS0tLS0tLS0tLS0NCj4+IC0NCj4+IMKgZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuY8KgwqDCoMKgwqAgfCAzMDINCj4+ICsrKysr KysrKysrKysrKysrKw0KPj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bz ci5owqDCoMKgwqDCoCB8wqDCoCAzICsNCj4+IMKgMyBmaWxlcyBjaGFuZ2VkLCAzMDggaW5zZXJ0 aW9ucygrKSwgMjg1IGRlbGV0aW9ucygtKQ0KPj4gDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X2RlYnVnZnMuYw0KPj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfZGVidWdmcy5jDQo+PiBpbmRleCA2 NTU4NWYxOWM2YzguLjRkOGViZjNmZWQxMSAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmMNCj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmMNCj4+IEBAIC0xNDIs MjY5ICsxNDIsNiBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX2ZyYW1lYnVmZmVyX2luZm8oc3RydWN0 DQo+PiBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkNCj4+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g MDsNCj4+IMKgfQ0KPj4gwqANCj4+IC1zdGF0aWMgaW50IGk5MTVfcHNyX3Npbmtfc3RhdHVzX3No b3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQ0KPj4gLXsNCj4+IC3CoMKgwqDCoMKg wqDCoHU4IHZhbDsNCj4+IC3CoMKgwqDCoMKgwqDCoHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qg c2lua19zdGF0dXNbXSA9IHsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiaW5h Y3RpdmUiLA0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJ0cmFuc2l0aW9uIHRv IGFjdGl2ZSwgY2FwdHVyZSBhbmQgZGlzcGxheSIsDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgImFjdGl2ZSwgZGlzcGxheSBmcm9tIFJGQiIsDQo+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgImFjdGl2ZSwgY2FwdHVyZSBhbmQgZGlzcGxheSBvbiBzaW5rIGRldmlj ZSB0aW1pbmdzIiwNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAidHJhbnNpdGlv biB0byBpbmFjdGl2ZSwgY2FwdHVyZSBhbmQgZGlzcGxheSwgdGltaW5nDQo+PiByZS1zeW5jIiwN Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAicmVzZXJ2ZWQiLA0KPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJyZXNlcnZlZCIsDQo+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgInNpbmsgaW50ZXJuYWwgZXJyb3IiLA0KPj4gLcKgwqDCoMKgwqDCoMKg fTsNCj4+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBt LT5wcml2YXRlOw0KPj4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9 DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfYXR0YWNoZWRfZHAodG9f aW50ZWxfY29ubmVjdG9yKGNvbm5lY3RvcikpOw0KPj4gLcKgwqDCoMKgwqDCoMKgaW50IHJldDsN Cj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoGlmICghQ0FOX1BTUihpbnRlbF9kcCkpIHsNCj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHV0cyhtLCAiUFNSIFVuc3VwcG9ydGVk XG4iKTsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT0RFVjsN Cj4+IC3CoMKgwqDCoMKgwqDCoH0NCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoGlmIChjb25uZWN0 b3ItPnN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkNCj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT0RFVjsNCj4+IC0NCj4+IC3CoMKgwqDCoMKg wqDCoHJldCA9IGRybV9kcF9kcGNkX3JlYWRiKCZpbnRlbF9kcC0+YXV4LCBEUF9QU1JfU1RBVFVT LCAmdmFsKTsNCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoGlmIChyZXQgPT0gMSkgew0KPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKnN0ciA9ICJ1bmtub3duIjsN Cj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgJj0gRFBfUFNSX1NJ TktfU1RBVEVfTUFTSzsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodmFs IDwgQVJSQVlfU0laRShzaW5rX3N0YXR1cykpDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0ciA9IHNpbmtfc3RhdHVzW3ZhbF07DQo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihtLCAiU2luayBQU1Igc3RhdHVzOiAw eCV4IFslc11cbiIsIHZhbCwNCj4+IHN0cik7DQo+PiAtwqDCoMKgwqDCoMKgwqB9IGVsc2Ugew0K Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+PiAtwqDCoMKg wqDCoMKgwqB9DQo+PiAtDQo+PiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4+IC19DQo+PiAt REVGSU5FX1NIT1dfQVRUUklCVVRFKGk5MTVfcHNyX3Npbmtfc3RhdHVzKTsNCj4+IC0NCj4+IC1z dGF0aWMgdm9pZA0KPj4gLXBzcl9zb3VyY2Vfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAsIHN0cnVjdCBzZXFfZmlsZSAqbSkNCj4+IC17DQo+PiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4+IC3C oMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKnN0YXR1cyA9ICJ1bmtub3duIjsNCj4+IC3CoMKgwqDC oMKgwqDCoHUzMiB2YWwsIHN0YXR1c192YWw7DQo+PiAtDQo+PiAtwqDCoMKgwqDCoMKgwqBpZiAo aW50ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQpIHsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxpdmVfc3RhdHVzW10gPSB7DQo+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJJRExFIiwNCj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkNBUFRVUkUi LA0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiQ0FQ VFVSRV9GUyIsDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCJTTEVFUCIsDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCJCVUZPTl9GVyIsDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCJNTF9VUCIsDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCJTVV9TVEFOREJZIiwNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkZBU1RfU0xFRVAiLA0KPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiREVFUF9TTEVFUCIsDQo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJCVUZfT04iLA0KPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiVEdfT04iDQo+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfTsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LA0KPj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEVEUF9QU1IyX1NUQVRVUyhpbnRlbF9kcC0NCj4+ID5wc3IudHJhbnNjb2RlcikpOw0KPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0YXR1c192YWwgPQ0KPj4gUkVHX0ZJRUxEX0dF VChFRFBfUFNSMl9TVEFUVVNfU1RBVEVfTUFTSywgdmFsKTsNCj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAoc3RhdHVzX3ZhbCA8IEFSUkFZX1NJWkUobGl2ZV9zdGF0dXMpKQ0K Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdGF0dXMg PSBsaXZlX3N0YXR1c1tzdGF0dXNfdmFsXTsNCj4+IC3CoMKgwqDCoMKgwqDCoH0gZWxzZSB7DQo+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25z dCBsaXZlX3N0YXR1c1tdID0gew0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAiSURMRSIsDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCJTUkRPTkFDSyIsDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJTUkRFTlQiLA0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiQlVGT0ZGIiwNCj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkJVRk9OIiwNCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkFVWEFDSyIsDQo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJTUkRPRkZBQ0siLA0KPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiU1JERU5UX09OIiwN Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Ow0KPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRURQX1BTUl9TVEFUVVMoaW50ZWxfZHAtDQo+PiA+cHNyLnRyYW5zY29kZXIpKTsNCj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdGF0dXNfdmFsID0gKHZhbCAmIEVEUF9Q U1JfU1RBVFVTX1NUQVRFX01BU0spID4+DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUl9TVEFUVVNfU1RBVEVfU0hJRlQ7 DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHN0YXR1c192YWwgPCBBUlJB WV9TSVpFKGxpdmVfc3RhdHVzKSkNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3RhdHVzID0gbGl2ZV9zdGF0dXNbc3RhdHVzX3ZhbF07DQo+PiAtwqDC oMKgwqDCoMKgwqB9DQo+PiAtDQo+PiAtwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKG0sICJTb3Vy Y2UgUFNSIHN0YXR1czogJXMgWzB4JTA4eF1cbiIsIHN0YXR1cywNCj4+IHZhbCk7DQo+PiAtfQ0K Pj4gLQ0KPj4gLXN0YXRpYyBpbnQgaW50ZWxfcHNyX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0s IHN0cnVjdCBpbnRlbF9kcA0KPj4gKmludGVsX2RwKQ0KPj4gLXsNCj4+IC3CoMKgwqDCoMKgwqDC oHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHAp Ow0KPj4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX3BzciAqcHNyID0gJmludGVsX2RwLT5w c3I7DQo+PiAtwqDCoMKgwqDCoMKgwqBpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsNCj4+IC3CoMKg wqDCoMKgwqDCoGNvbnN0IGNoYXIgKnN0YXR1czsNCj4+IC3CoMKgwqDCoMKgwqDCoGJvb2wgZW5h YmxlZDsNCj4+IC3CoMKgwqDCoMKgwqDCoHUzMiB2YWw7DQo+PiAtDQo+PiAtwqDCoMKgwqDCoMKg wqBzZXFfcHJpbnRmKG0sICJTaW5rIHN1cHBvcnQ6ICVzIiwgc3RyX3llc19ubyhwc3ItDQo+PiA+ c2lua19zdXBwb3J0KSk7DQo+PiAtwqDCoMKgwqDCoMKgwqBpZiAocHNyLT5zaW5rX3N1cHBvcnQp DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihtLCAiIFsweCUw MnhdIiwgaW50ZWxfZHAtPnBzcl9kcGNkWzBdKTsNCj4+IC3CoMKgwqDCoMKgwqDCoHNlcV9wdXRz KG0sICJcbiIpOw0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFwc3ItPnNpbmtfc3VwcG9y dCkNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4+IC0NCj4+ IC3CoMKgwqDCoMKgwqDCoHdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldCgmZGV2X3ByaXYt PnJ1bnRpbWVfcG0pOw0KPj4gLcKgwqDCoMKgwqDCoMKgbXV0ZXhfbG9jaygmcHNyLT5sb2NrKTsN Cj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoGlmIChwc3ItPmVuYWJsZWQpDQo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RhdHVzID0gcHNyLT5wc3IyX2VuYWJsZWQgPyAiUFNSMiBl bmFibGVkIiA6ICJQU1IxDQo+PiBlbmFibGVkIjsNCj4+IC3CoMKgwqDCoMKgwqDCoGVsc2UNCj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdGF0dXMgPSAiZGlzYWJsZWQiOw0KPj4g LcKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihtLCAiUFNSIG1vZGU6ICVzXG4iLCBzdGF0dXMpOw0K Pj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFwc3ItPmVuYWJsZWQpIHsNCj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKG0sICJQU1Igc2luayBub3QgcmVsaWFi bGU6ICVzXG4iLA0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cl95ZXNfbm8ocHNyLT5zaW5rX25vdF9yZWxpYWJsZSkpOw0KPj4gLQ0KPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gdW5sb2NrOw0KPj4gLcKgwqDCoMKg wqDCoMKgfQ0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKgaWYgKHBzci0+cHNyMl9lbmFibGVkKSB7 DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsID0gaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFRFBfUFNSMl9DVEwoaW50ZWxfZHAtDQo+PiA+cHNy LnRyYW5zY29kZXIpKTsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbmFibGVk ID0gdmFsICYgRURQX1BTUjJfRU5BQkxFOw0KPj4gLcKgwqDCoMKgwqDCoMKgfSBlbHNlIHsNCj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9w cml2LA0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVEUF9QU1JfQ1RMKGludGVsX2RwLQ0KPj4gPnBzci50cmFu c2NvZGVyKSk7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5hYmxlZCA9IHZh bCAmIEVEUF9QU1JfRU5BQkxFOw0KPj4gLcKgwqDCoMKgwqDCoMKgfQ0KPj4gLcKgwqDCoMKgwqDC oMKgc2VxX3ByaW50ZihtLCAiU291cmNlIFBTUiBjdGw6ICVzIFsweCUwOHhdXG4iLA0KPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RyX2VuYWJsZWRfZGlzYWJsZWQoZW5h YmxlZCksIHZhbCk7DQo+PiAtwqDCoMKgwqDCoMKgwqBwc3Jfc291cmNlX3N0YXR1cyhpbnRlbF9k cCwgbSk7DQo+PiAtwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKG0sICJCdXN5IGZyb250YnVmZmVy IGJpdHM6IDB4JTA4eFxuIiwNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHBzci0+YnVzeV9mcm9udGJ1ZmZlcl9iaXRzKTsNCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoC8q DQo+PiAtwqDCoMKgwqDCoMKgwqAgKiBTS0wrIFBlcmYgY291bnRlciBpcyByZXNldCB0byAwIGV2 ZXJ5dGltZSBEQyBzdGF0ZSBpcw0KPj4gZW50ZXJlZA0KPj4gLcKgwqDCoMKgwqDCoMKgICovDQo+ PiAtwqDCoMKgwqDCoMKgwqBpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxM KGRldl9wcml2KSkgew0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUl9QRVJGX0NOVChp bnRlbF9kcC0NCj4+ID5wc3IudHJhbnNjb2RlcikpOw0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHZhbCAmPSBFRFBfUFNSX1BFUkZfQ05UX01BU0s7DQo+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihtLCAiUGVyZm9ybWFuY2UgY291bnRlcjogJXVc biIsIHZhbCk7DQo+PiAtwqDCoMKgwqDCoMKgwqB9DQo+PiAtDQo+PiAtwqDCoMKgwqDCoMKgwqBp ZiAocHNyLT5kZWJ1ZyAmIEk5MTVfUFNSX0RFQlVHX0lSUSkgew0KPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYobSwgIkxhc3QgYXR0ZW1wdGVkIGVudHJ5IGF0OiAl bGxkXG4iLA0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHBzci0+bGFzdF9lbnRyeV9hdHRlbXB0KTsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzZXFfcHJpbnRmKG0sICJMYXN0IGV4aXQgYXQ6ICVsbGRcbiIsIHBzci0NCj4+ ID5sYXN0X2V4aXQpOw0KPj4gLcKgwqDCoMKgwqDCoMKgfQ0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDC oMKgaWYgKHBzci0+cHNyMl9lbmFibGVkKSB7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdTMyIHN1X2ZyYW1lc192YWxbM107DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaW50IGZyYW1lOw0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogUmVhZGluZyBhbGwgMyBy ZWdpc3RlcnMgYmVmb3JlIGhhbmQgdG8gbWluaW1pemUNCj4+IGNyb3NzaW5nIGENCj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBmcmFtZSBib3VuZGFyeSBiZXR3ZWVuIHJlZ2lz dGVyIHJlYWRzDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovDQo+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yIChmcmFtZSA9IDA7IGZyYW1lIDwgUFNSMl9T VV9TVEFUVVNfRlJBTUVTOyBmcmFtZQ0KPj4gKz0gMykgew0KPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2 LA0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBQU1IyX1NVX1NUQVRVUyhpbnRlbF9k cC0NCj4+ID5wc3IudHJhbnNjb2RlciwgZnJhbWUpKTsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3VfZnJhbWVzX3ZhbFtmcmFtZSAvIDNdID0gdmFs Ow0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4+IC0NCj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHV0cyhtLCAiRnJhbWU6XHRQU1IyIFNVIGJsb2Nr czpcbiIpOw0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoZnJh bWUgPSAwOyBmcmFtZSA8IFBTUjJfU1VfU1RBVFVTX0ZSQU1FUzsNCj4+IGZyYW1lKyspIHsNCj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTMyIHN1X2Js b2NrczsNCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc3VfYmxvY2tzID0gc3VfZnJhbWVzX3ZhbFtmcmFtZSAvIDNdICYNCj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBQU1IyX1NVX1NUQVRVU19NQVNLKGZyYW1lKTsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3VfYmxvY2tzID0gc3VfYmxvY2tzID4+DQo+PiBQ U1IyX1NVX1NUQVRVU19TSElGVChmcmFtZSk7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYobSwgIiVkXHQlZFxuIiwgZnJhbWUsIHN1 X2Jsb2Nrcyk7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPj4gLQ0KPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYobSwgIlBTUjIgc2VsZWN0 aXZlIGZldGNoOiAlc1xuIiwNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJfZW5hYmxlZF9kaXNhYmxlZChwc3ItDQo+PiA+cHNyMl9zZWxf ZmV0Y2hfZW5hYmxlZCkpOw0KPj4gLcKgwqDCoMKgwqDCoMKgfQ0KPj4gLQ0KPj4gLXVubG9jazoN Cj4+IC3CoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmcHNyLT5sb2NrKTsNCj4+IC3CoMKgwqDC oMKgwqDCoGludGVsX3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJl Zik7DQo+PiAtDQo+PiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4+IC19DQo+PiAtDQo+PiAt c3RhdGljIGludCBpOTE1X2VkcF9wc3Jfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAq ZGF0YSkNCj4+IC17DQo+PiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7DQo+PiAtwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gTlVMTDsNCj4+IC3CoMKgwqDCoMKgwqDCoHN0cnVj dCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOw0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFI QVNfUFNSKGRldl9wcml2KSkNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gLUVOT0RFVjsNCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoC8qIEZpbmQgdGhlIGZpcnN0IEVE UCB3aGljaCBzdXBwb3J0cyBQU1IgKi8NCj4+IC3CoMKgwqDCoMKgwqDCoGZvcl9lYWNoX2ludGVs X2VuY29kZXJfd2l0aF9wc3IoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsNCj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVy KTsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4+IC3CoMKgwqDC oMKgwqDCoH0NCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoGlmICghaW50ZWxfZHApDQo+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9ERVY7DQo+PiAtDQo+PiAtwqDC oMKgwqDCoMKgwqByZXR1cm4gaW50ZWxfcHNyX3N0YXR1cyhtLCBpbnRlbF9kcCk7DQo+PiAtfQ0K Pj4gLQ0KPj4gLXN0YXRpYyBpbnQNCj4+IC1pOTE1X2VkcF9wc3JfZGVidWdfc2V0KHZvaWQgKmRh dGEsIHU2NCB2YWwpDQo+PiAtew0KPj4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGF0YTsNCj4+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyOw0KPj4gLcKgwqDCoMKgwqDCoMKgaW50ZWxfd2FrZXJlZl90IHdha2Vy ZWY7DQo+PiAtwqDCoMKgwqDCoMKgwqBpbnQgcmV0ID0gLUVOT0RFVjsNCj4+IC0NCj4+IC3CoMKg wqDCoMKgwqDCoGlmICghSEFTX1BTUihkZXZfcHJpdikpDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoGZvcl9lYWNo X2ludGVsX2VuY29kZXJfd2l0aF9wc3IoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsNCj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0g ZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOw0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiU2V0dGluZyBQU1IgZGVidWcg dG8NCj4+ICVsbHhcbiIsIHZhbCk7DQo+PiAtDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0KCZkZXZfcHJpdi0NCj4+ID5ydW50 aW1lX3BtKTsNCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvLyBUT0RP OiBzcGxpdCB0byBlYWNoIHRyYW5zY29kZXIncyBQU1IgZGVidWcgc3RhdGUNCj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBpbnRlbF9wc3JfZGVidWdfc2V0KGludGVsX2Rw LCB2YWwpOw0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX3J1 bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJlZik7DQo+PiAtwqDCoMKg wqDCoMKgwqB9DQo+PiAtDQo+PiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPj4gLX0NCj4+ IC0NCj4+IC1zdGF0aWMgaW50DQo+PiAtaTkxNV9lZHBfcHNyX2RlYnVnX2dldCh2b2lkICpkYXRh LCB1NjQgKnZhbCkNCj4+IC17DQo+PiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkYXRhOw0KPj4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2Vu Y29kZXIgKmVuY29kZXI7DQo+PiAtDQo+PiAtwqDCoMKgwqDCoMKgwqBpZiAoIUhBU19QU1IoZGV2 X3ByaXYpKQ0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PREVW Ow0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKgZm9yX2VhY2hfaW50ZWxfZW5jb2Rlcl93aXRoX3Bz cigmZGV2X3ByaXYtPmRybSwgZW5jb2Rlcikgew0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rl cik7DQo+PiAtDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLy8gVE9ETzogc3Bs aXQgdG8gZWFjaCB0cmFuc2NvZGVyJ3MgUFNSIGRlYnVnIHN0YXRlDQo+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgKnZhbCA9IFJFQURfT05DRShpbnRlbF9kcC0+cHNyLmRlYnVnKTsN Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4+IC3CoMKgwqDC oMKgwqDCoH0NCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PREVWOw0KPj4gLX0N Cj4+IC0NCj4+IC1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShpOTE1X2VkcF9wc3JfZGVidWdfZm9w cywNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaTkx NV9lZHBfcHNyX2RlYnVnX2dldCwNCj4+IGk5MTVfZWRwX3Bzcl9kZWJ1Z19zZXQsDQo+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCIlbGx1XG4iKTsNCj4+ IC0NCj4+IMKgc3RhdGljIGludCBpOTE1X3Bvd2VyX2RvbWFpbl9pbmZvKHN0cnVjdCBzZXFfZmls ZSAqbSwgdm9pZCAqdW51c2VkKQ0KPj4gwqB7DQo+PiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBub2RlX3RvX2k5MTUobS0+cHJpdmF0ZSk7DQo+PiBAQCAt MTMyMCw3ICsxMDU3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faW5mb19saXN0DQo+PiBp bnRlbF9kaXNwbGF5X2RlYnVnZnNfbGlzdFtdID0gew0KPj4gwqDCoMKgwqDCoMKgwqDCoHsiaTkx NV9vcHJlZ2lvbiIsIGk5MTVfb3ByZWdpb24sIDB9LA0KPj4gwqDCoMKgwqDCoMKgwqDCoHsiaTkx NV92YnQiLCBpOTE1X3ZidCwgMH0sDQo+PiDCoMKgwqDCoMKgwqDCoMKgeyJpOTE1X2dlbV9mcmFt ZWJ1ZmZlciIsIGk5MTVfZ2VtX2ZyYW1lYnVmZmVyX2luZm8sIDB9LA0KPj4gLcKgwqDCoMKgwqDC oMKgeyJpOTE1X2VkcF9wc3Jfc3RhdHVzIiwgaTkxNV9lZHBfcHNyX3N0YXR1cywgMH0sDQo+PiDC oMKgwqDCoMKgwqDCoMKgeyJpOTE1X3Bvd2VyX2RvbWFpbl9pbmZvIiwgaTkxNV9wb3dlcl9kb21h aW5faW5mbywgMH0sDQo+PiDCoMKgwqDCoMKgwqDCoMKgeyJpOTE1X2Rpc3BsYXlfaW5mbyIsIGk5 MTVfZGlzcGxheV9pbmZvLCAwfSwNCj4+IMKgwqDCoMKgwqDCoMKgwqB7Imk5MTVfc2hhcmVkX2Rw bGxzX2luZm8iLCBpOTE1X3NoYXJlZF9kcGxsc19pbmZvLCAwfSwNCj4+IEBAIC0xMzM3LDcgKzEw NzMsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHsNCj4+IMKgwqDCoMKgwqDCoMKgwqB7Imk5MTVf ZHBfdGVzdF9kYXRhIiwgJmk5MTVfZGlzcGxheXBvcnRfdGVzdF9kYXRhX2ZvcHN9LA0KPj4gwqDC oMKgwqDCoMKgwqDCoHsiaTkxNV9kcF90ZXN0X3R5cGUiLCAmaTkxNV9kaXNwbGF5cG9ydF90ZXN0 X3R5cGVfZm9wc30sDQo+PiDCoMKgwqDCoMKgwqDCoMKgeyJpOTE1X2RwX3Rlc3RfYWN0aXZlIiwg Jmk5MTVfZGlzcGxheXBvcnRfdGVzdF9hY3RpdmVfZm9wc30sDQo+PiAtwqDCoMKgwqDCoMKgwqB7 Imk5MTVfZWRwX3Bzcl9kZWJ1ZyIsICZpOTE1X2VkcF9wc3JfZGVidWdfZm9wc30sDQo+PiDCoH07 DQo+PiDCoA0KPj4gwqB2b2lkIGludGVsX2Rpc3BsYXlfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkNCj4+IEBAIC0xMzYxLDYgKzEwOTYsNyBAQCB2b2lkIGlu dGVsX2Rpc3BsYXlfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QNCj4+IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUpDQo+PiDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfZG1jX2RlYnVnZnNfcmVnaXN0ZXIoaTkx NSk7DQo+PiDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfZmJjX2RlYnVnZnNfcmVnaXN0ZXIoaTkxNSk7 DQo+PiDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfaHBkX2RlYnVnZnNfcmVnaXN0ZXIoaTkxNSk7DQo+ PiArwqDCoMKgwqDCoMKgwqBpbnRlbF9wc3JfZGVidWdmc19yZWdpc3RlcihpOTE1KTsNCj4+IMKg wqDCoMKgwqDCoMKgwqBpbnRlbF93bV9kZWJ1Z2ZzX3JlZ2lzdGVyKGk5MTUpOw0KPj4gwqB9DQo+ PiDCoA0KPj4gQEAgLTE0MTMsMTYgKzExNDksNiBAQCBzdGF0aWMgaW50DQo+PiBpOTE1X2hkY3Bf c2lua19jYXBhYmlsaXR5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQ0KPj4g wqB9DQo+PiDCoERFRklORV9TSE9XX0FUVFJJQlVURShpOTE1X2hkY3Bfc2lua19jYXBhYmlsaXR5 KTsNCj4+IMKgDQo+PiAtc3RhdGljIGludCBpOTE1X3Bzcl9zdGF0dXNfc2hvdyhzdHJ1Y3Qgc2Vx X2ZpbGUgKm0sIHZvaWQgKmRhdGEpDQo+PiAtew0KPj4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IG0tPnByaXZhdGU7DQo+PiAtwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0NCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpbnRlbF9hdHRhY2hlZF9kcCh0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKSk7DQo+ PiAtDQo+PiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gaW50ZWxfcHNyX3N0YXR1cyhtLCBpbnRlbF9k cCk7DQo+PiAtfQ0KPj4gLURFRklORV9TSE9XX0FUVFJJQlVURShpOTE1X3Bzcl9zdGF0dXMpOw0K Pj4gLQ0KPj4gwqBzdGF0aWMgaW50IGk5MTVfbHBzcF9jYXBhYmlsaXR5X3Nob3coc3RydWN0IHNl cV9maWxlICptLCB2b2lkICpkYXRhKQ0KPj4gwqB7DQo+PiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IG0tPnByaXZhdGU7DQo+PiBAQCAtMTY3NSwxOSAr MTQwMSwxMSBAQCB2b2lkIGludGVsX2Nvbm5lY3Rvcl9kZWJ1Z2ZzX2FkZChzdHJ1Y3QNCj4+IGlu dGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yKQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm47DQo+PiDCoA0KPj4gwqDCoMKgwqDCoMKgwqDCoGludGVsX2RycnNf Y29ubmVjdG9yX2RlYnVnZnNfYWRkKGludGVsX2Nvbm5lY3Rvcik7DQo+PiArwqDCoMKgwqDCoMKg wqBpbnRlbF9wc3JfY29ubmVjdG9yX2RlYnVnZnNfYWRkKGludGVsX2Nvbm5lY3Rvcik7DQo+PiDC oA0KPj4gLcKgwqDCoMKgwqDCoMKgaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJN X01PREVfQ09OTkVDVE9SX2VEUCkgew0KPj4gK8KgwqDCoMKgwqDCoMKgaWYgKGNvbm5lY3Rvci0+ Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkNCj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGVidWdmc19jcmVhdGVfZmlsZSgiaTkxNV9wYW5lbF90aW1p bmdzIiwgU19JUlVHTywNCj4+IHJvb3QsDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbm5lY3RvciwgJmk5 MTVfcGFuZWxfZm9wcyk7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGVidWdm c19jcmVhdGVfZmlsZSgiaTkxNV9wc3Jfc2lua19zdGF0dXMiLCBTX0lSVUdPLA0KPj4gcm9vdCwN Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb25uZWN0b3IsDQo+PiAmaTkxNV9wc3Jfc2lua19zdGF0dXNfZm9w cyk7DQo+PiAtwqDCoMKgwqDCoMKgwqB9DQo+PiAtDQo+PiAtwqDCoMKgwqDCoMKgwqBpZiAoSEFT X1BTUihkZXZfcHJpdikgJiYNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25uZWN0b3ItPmNv bm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApIHsNCj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpOTE1X3Bzcl9zdGF0dXMi LCAwNDQ0LCByb290LA0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbm5lY3RvciwNCj4+ICZpOTE1X3Bzcl9z dGF0dXNfZm9wcyk7DQo+PiAtwqDCoMKgwqDCoMKgwqB9DQo+PiDCoA0KPj4gwqDCoMKgwqDCoMKg wqDCoGlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09DQo+PiBEUk1fTU9ERV9DT05ORUNU T1JfRGlzcGxheVBvcnQgfHwNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29ubmVjdG9yLT5j b25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEgfHwNCj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5jDQo+PiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmMNCj4+IGluZGV4IDQ0NjEwYjIwY2Qy OS4uOWQzMjA1ZDk5YjU0IDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9wc3IuYw0KPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9wc3IuYw0KPj4gQEAgLTI2NDQsMyArMjY0NCwzMDUgQEAgdm9pZCBpbnRlbF9wc3JfdW5s b2NrKGNvbnN0IHN0cnVjdA0KPj4gaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkNCj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+PiDCoMKgwqDCoMKgwqDCoMKg fQ0KPj4gwqB9DQo+PiArDQo+PiArc3RhdGljIHZvaWQNCj4+ICtwc3Jfc291cmNlX3N0YXR1cyhz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pDQo+PiArew0KPj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9f aTkxNShpbnRlbF9kcCk7DQo+PiArwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpzdGF0dXMgPSAi dW5rbm93biI7DQo+PiArwqDCoMKgwqDCoMKgwqB1MzIgdmFsLCBzdGF0dXNfdmFsOw0KPj4gKw0K Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7DQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBs aXZlX3N0YXR1c1tdID0gew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAiSURMRSIsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCJDQVBUVVJFIiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIkNBUFRVUkVfRlMiLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiU0xFRVAiLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiQlVGT05fRlciLA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiTUxfVVAiLA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiU1VfU1RBTkRCWSIsDQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJGQVNUX1NMRUVQ IiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkRF RVBfU0xFRVAiLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAiQlVGX09OIiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIlRHX09OIg0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH07DQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsID0gaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFRFBfUFNSMl9TVEFUVVMoaW50ZWxfZHAtDQo+PiA+cHNy LnRyYW5zY29kZXIpKTsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdGF0dXNf dmFsID0NCj4+IFJFR19GSUVMRF9HRVQoRURQX1BTUjJfU1RBVFVTX1NUQVRFX01BU0ssIHZhbCk7 DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHN0YXR1c192YWwgPCBBUlJB WV9TSVpFKGxpdmVfc3RhdHVzKSkNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3RhdHVzID0gbGl2ZV9zdGF0dXNbc3RhdHVzX3ZhbF07DQo+PiArwqDC oMKgwqDCoMKgwqB9IGVsc2Ugew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0 YXRpYyBjb25zdCBjaGFyICogY29uc3QgbGl2ZV9zdGF0dXNbXSA9IHsNCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIklETEUiLA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiU1JET05BQ0siLA0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiU1JERU5UIiwNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkJVRk9GRiIs DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJCVUZP TiIsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJB VVhBQ0siLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAiU1JET0ZGQUNLIiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIlNSREVOVF9PTiIsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fTsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVEUF9QU1JfU1RBVFVTKGludGVsX2RwLQ0KPj4g PnBzci50cmFuc2NvZGVyKSk7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Rh dHVzX3ZhbCA9ICh2YWwgJiBFRFBfUFNSX1NUQVRVU19TVEFURV9NQVNLKSA+Pg0KPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVEUF9Q U1JfU1RBVFVTX1NUQVRFX1NISUZUOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChzdGF0dXNfdmFsIDwgQVJSQVlfU0laRShsaXZlX3N0YXR1cykpDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0YXR1cyA9IGxpdmVfc3RhdHVz W3N0YXR1c192YWxdOw0KPj4gK8KgwqDCoMKgwqDCoMKgfQ0KPj4gKw0KPj4gK8KgwqDCoMKgwqDC oMKgc2VxX3ByaW50ZihtLCAiU291cmNlIFBTUiBzdGF0dXM6ICVzIFsweCUwOHhdXG4iLCBzdGF0 dXMsDQo+PiB2YWwpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGludGVsX3Bzcl9zdGF0 dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaW50ZWxfZHANCj4+ICppbnRlbF9kcCkNCj4+ ICt7DQo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9w c3IgKnBzciA9ICZpbnRlbF9kcC0+cHNyOw0KPj4gK8KgwqDCoMKgwqDCoMKgaW50ZWxfd2FrZXJl Zl90IHdha2VyZWY7DQo+PiArwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpzdGF0dXM7DQo+PiAr wqDCoMKgwqDCoMKgwqBib29sIGVuYWJsZWQ7DQo+PiArwqDCoMKgwqDCoMKgwqB1MzIgdmFsOw0K Pj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihtLCAiU2luayBzdXBwb3J0OiAlcyIs IHN0cl95ZXNfbm8ocHNyLQ0KPj4gPnNpbmtfc3VwcG9ydCkpOw0KPj4gK8KgwqDCoMKgwqDCoMKg aWYgKHBzci0+c2lua19zdXBwb3J0KQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHNlcV9wcmludGYobSwgIiBbMHglMDJ4XSIsIGludGVsX2RwLT5wc3JfZHBjZFswXSk7DQo+PiAr wqDCoMKgwqDCoMKgwqBzZXFfcHV0cyhtLCAiXG4iKTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDC oGlmICghcHNyLT5zaW5rX3N1cHBvcnQpDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIDA7DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqB3YWtlcmVmID0gaW50ZWxfcnVu dGltZV9wbV9nZXQoJmRldl9wcml2LT5ydW50aW1lX3BtKTsNCj4+ICvCoMKgwqDCoMKgwqDCoG11 dGV4X2xvY2soJnBzci0+bG9jayk7DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqBpZiAocHNyLT5l bmFibGVkKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0YXR1cyA9IHBzci0+ cHNyMl9lbmFibGVkID8gIlBTUjIgZW5hYmxlZCIgOiAiUFNSMQ0KPj4gZW5hYmxlZCI7DQo+PiAr wqDCoMKgwqDCoMKgwqBlbHNlDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Rh dHVzID0gImRpc2FibGVkIjsNCj4+ICvCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYobSwgIlBTUiBt b2RlOiAlc1xuIiwgc3RhdHVzKTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoGlmICghcHNyLT5l bmFibGVkKSB7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50Ziht LCAiUFNSIHNpbmsgbm90IHJlbGlhYmxlOiAlc1xuIiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJfeWVzX25vKHBzci0+c2lua19ub3Rf cmVsaWFibGUpKTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3Rv IHVubG9jazsNCj4+ICvCoMKgwqDCoMKgwqDCoH0NCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoGlm IChwc3ItPnBzcjJfZW5hYmxlZCkgew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUjJf Q1RMKGludGVsX2RwLQ0KPj4gPnBzci50cmFuc2NvZGVyKSk7DQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZW5hYmxlZCA9IHZhbCAmIEVEUF9QU1IyX0VOQUJMRTsNCj4+ICvCoMKg wqDCoMKgwqDCoH0gZWxzZSB7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFs ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFRFBfUFNSX0NUTChp bnRlbF9kcC0NCj4+ID5wc3IudHJhbnNjb2RlcikpOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGVuYWJsZWQgPSB2YWwgJiBFRFBfUFNSX0VOQUJMRTsNCj4+ICvCoMKgwqDCoMKg wqDCoH0NCj4+ICvCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYobSwgIlNvdXJjZSBQU1IgY3RsOiAl cyBbMHglMDh4XVxuIiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cl9lbmFibGVkX2Rpc2FibGVkKGVuYWJsZWQpLCB2YWwpOw0KPj4gK8KgwqDCoMKgwqDCoMKgcHNy X3NvdXJjZV9zdGF0dXMoaW50ZWxfZHAsIG0pOw0KPj4gK8KgwqDCoMKgwqDCoMKgc2VxX3ByaW50 ZihtLCAiQnVzeSBmcm9udGJ1ZmZlciBiaXRzOiAweCUwOHhcbiIsDQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwc3ItPmJ1c3lfZnJvbnRidWZmZXJfYml0cyk7DQo+PiAr DQo+PiArwqDCoMKgwqDCoMKgwqAvKg0KPj4gK8KgwqDCoMKgwqDCoMKgICogU0tMKyBQZXJmIGNv dW50ZXIgaXMgcmVzZXQgdG8gMCBldmVyeXRpbWUgREMgc3RhdGUgaXMNCj4+IGVudGVyZWQNCj4+ ICvCoMKgwqDCoMKgwqDCoCAqLw0KPj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0hBU1dFTEwoZGV2 X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEVEUF9QU1JfUEVSRl9DTlQoaW50ZWxfZHAtDQo+PiA+cHNyLnRyYW5zY29kZXIpKTsNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgJj0gRURQX1BTUl9QRVJGX0NOVF9N QVNLOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYobSwgIlBl cmZvcm1hbmNlIGNvdW50ZXI6ICV1XG4iLCB2YWwpOw0KPj4gK8KgwqDCoMKgwqDCoMKgfQ0KPj4g Kw0KPj4gK8KgwqDCoMKgwqDCoMKgaWYgKHBzci0+ZGVidWcgJiBJOTE1X1BTUl9ERUJVR19JUlEp IHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKG0sICJMYXN0 IGF0dGVtcHRlZCBlbnRyeSBhdDogJWxsZFxuIiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwc3ItPmxhc3RfZW50cnlfYXR0ZW1wdCk7DQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihtLCAiTGFzdCBleGl0 IGF0OiAlbGxkXG4iLCBwc3ItDQo+PiA+bGFzdF9leGl0KTsNCj4+ICvCoMKgwqDCoMKgwqDCoH0N Cj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoGlmIChwc3ItPnBzcjJfZW5hYmxlZCkgew0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiBzdV9mcmFtZXNfdmFsWzNdOw0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBmcmFtZTsNCj4+ICsNCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKg0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAqIFJlYWRpbmcgYWxsIDMgcmVnaXN0ZXJzIGJlZm9yZSBoYW5kIHRvIG1pbmltaXplDQo+ PiBjcm9zc2luZyBhDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogZnJhbWUg Ym91bmRhcnkgYmV0d2VlbiByZWdpc3RlciByZWFkcw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAqLw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoZnJh bWUgPSAwOyBmcmFtZSA8IFBTUjJfU1VfU1RBVFVTX0ZSQU1FUzsgZnJhbWUNCj4+ICs9IDMpIHsN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg UFNSMl9TVV9TVEFUVVMoaW50ZWxfZHAtDQo+PiA+cHNyLnRyYW5zY29kZXIsIGZyYW1lKSk7DQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN1X2ZyYW1l c192YWxbZnJhbWUgLyAzXSA9IHZhbDsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB9DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3B1dHMobSwg IkZyYW1lOlx0UFNSMiBTVSBibG9ja3M6XG4iKTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBmb3IgKGZyYW1lID0gMDsgZnJhbWUgPCBQU1IyX1NVX1NUQVRVU19GUkFN RVM7DQo+PiBmcmFtZSsrKSB7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHUzMiBzdV9ibG9ja3M7DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN1X2Jsb2NrcyA9IHN1X2ZyYW1lc192YWxbZnJh bWUgLyAzXSAmDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUFNSMl9TVV9TVEFUVVNfTUFTSyhmcmFtZSk7DQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN1X2Jsb2Nr cyA9IHN1X2Jsb2NrcyA+Pg0KPj4gUFNSMl9TVV9TVEFUVVNfU0hJRlQoZnJhbWUpOw0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKG0s ICIlZFx0JWRcbiIsIGZyYW1lLCBzdV9ibG9ja3MpOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0NCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFf cHJpbnRmKG0sICJQU1IyIHNlbGVjdGl2ZSBmZXRjaDogJXNcbiIsDQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RyX2VuYWJsZWRfZGlzYWJs ZWQocHNyLQ0KPj4gPnBzcjJfc2VsX2ZldGNoX2VuYWJsZWQpKTsNCj4+ICvCoMKgwqDCoMKgwqDC oH0NCj4+ICsNCj4+ICt1bmxvY2s6DQo+PiArwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJnBz ci0+bG9jayk7DQo+PiArwqDCoMKgwqDCoMKgwqBpbnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3By aXYtPnJ1bnRpbWVfcG0sIHdha2VyZWYpOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJu IDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaTkxNV9lZHBfcHNyX3N0YXR1c19zaG93 KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkNCj4+ICt7DQo+PiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBtLT5wcml2YXRlOw0KPj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IE5VTEw7DQo+PiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsNCj4+ICsNCj4+ICvCoMKgwqDC oMKgwqDCoGlmICghSEFTX1BTUihkZXZfcHJpdikpDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIC1FTk9ERVY7DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqAvKiBGaW5k IHRoZSBmaXJzdCBFRFAgd2hpY2ggc3VwcG9ydHMgUFNSICovDQo+PiArwqDCoMKgwqDCoMKgwqBm b3JfZWFjaF9pbnRlbF9lbmNvZGVyX3dpdGhfcHNyKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7 DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfZHAgPSBlbmNfdG9faW50 ZWxfZHAoZW5jb2Rlcik7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7 DQo+PiArwqDCoMKgwqDCoMKgwqB9DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqBpZiAoIWludGVs X2RwKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PREVWOw0K Pj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGludGVsX3Bzcl9zdGF0dXMobSwgaW50ZWxf ZHApOw0KPj4gK30NCj4+ICtERUZJTkVfU0hPV19BVFRSSUJVVEUoaTkxNV9lZHBfcHNyX3N0YXR1 cyk7DQo+PiArDQo+PiArc3RhdGljIGludA0KPj4gK2k5MTVfZWRwX3Bzcl9kZWJ1Z19zZXQodm9p ZCAqZGF0YSwgdTY0IHZhbCkNCj4+ICt7DQo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkYXRhOw0KPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXI7DQo+PiArwqDCoMKgwqDCoMKgwqBpbnRlbF93YWtlcmVmX3Qg d2FrZXJlZjsNCj4+ICvCoMKgwqDCoMKgwqDCoGludCByZXQgPSAtRU5PREVWOw0KPj4gKw0KPj4g K8KgwqDCoMKgwqDCoMKgaWYgKCFIQVNfUFNSKGRldl9wcml2KSkNCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgZm9y X2VhY2hfaW50ZWxfZW5jb2Rlcl93aXRoX3BzcigmZGV2X3ByaXYtPmRybSwgZW5jb2Rlcikgew0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJTZXR0aW5nIFBTUiBk ZWJ1ZyB0bw0KPj4gJWxseFxuIiwgdmFsKTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJmRldl9wcml2LQ0KPj4g PnJ1bnRpbWVfcG0pOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8v IFRPRE86IHNwbGl0IHRvIGVhY2ggdHJhbnNjb2RlcidzIFBTUiBkZWJ1ZyBzdGF0ZQ0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGludGVsX3Bzcl9kZWJ1Z19zZXQoaW50 ZWxfZHAsIHZhbCk7DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50 ZWxfcnVudGltZV9wbV9wdXQoJmRldl9wcml2LT5ydW50aW1lX3BtLCB3YWtlcmVmKTsNCj4+ICvC oMKgwqDCoMKgwqDCoH0NCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQNCj4+ICtpOTE1X2VkcF9wc3JfZGVidWdfZ2V0KHZvaWQg KmRhdGEsIHU2NCAqdmFsKQ0KPj4gK3sNCj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRhdGE7DQo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50 ZWxfZW5jb2RlciAqZW5jb2RlcjsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoGlmICghSEFTX1BT UihkZXZfcHJpdikpDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F Tk9ERVY7DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqBmb3JfZWFjaF9pbnRlbF9lbmNvZGVyX3dp dGhfcHNyKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChl bmNvZGVyKTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvLyBUT0RP OiBzcGxpdCB0byBlYWNoIHRyYW5zY29kZXIncyBQU1IgZGVidWcgc3RhdGUNCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqdmFsID0gUkVBRF9PTkNFKGludGVsX2RwLT5wc3IuZGVi dWcpOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPj4gK8Kg wqDCoMKgwqDCoMKgfQ0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9ERVY7DQo+ PiArfQ0KPj4gKw0KPj4gK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGk5MTVfZWRwX3Bzcl9kZWJ1 Z19mb3BzLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpOTE1X2VkcF9wc3JfZGVidWdfZ2V0LA0KPj4gaTkxNV9lZHBfcHNyX2RlYnVnX3NldCwNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIiVsbHVcbiIp Ow0KPj4gKw0KPj4gK3ZvaWQgaW50ZWxfcHNyX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpDQo+PiArew0KPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9t aW5vciAqbWlub3IgPSBpOTE1LT5kcm0ucHJpbWFyeTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDC oGRlYnVnZnNfY3JlYXRlX2ZpbGUoImk5MTVfZWRwX3Bzcl9kZWJ1ZyIsIDA2NDQsIG1pbm9yLQ0K Pj4gPmRlYnVnZnNfcm9vdCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGk5MTUsICZpOTE1X2VkcF9wc3JfZGVidWdfZm9wcyk7DQo+PiAr DQo+PiArwqDCoMKgwqDCoMKgwqBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpOTE1X2VkcF9wc3Jfc3Rh dHVzIiwgMDQ0NCwgbWlub3ItDQo+PiA+ZGVidWdmc19yb290LA0KPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaTkxNSwgJmk5MTVfZWRwX3Bz cl9zdGF0dXNfZm9wcyk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgaTkxNV9wc3Jfc2lu a19zdGF0dXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpDQo+PiArew0KPj4g K8KgwqDCoMKgwqDCoMKgdTggdmFsOw0KPj4gK8KgwqDCoMKgwqDCoMKgc3RhdGljIGNvbnN0IGNo YXIgKiBjb25zdCBzaW5rX3N0YXR1c1tdID0gew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCJpbmFjdGl2ZSIsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgInRy YW5zaXRpb24gdG8gYWN0aXZlLCBjYXB0dXJlIGFuZCBkaXNwbGF5IiwNCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAiYWN0aXZlLCBkaXNwbGF5IGZyb20gUkZCIiwNCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiYWN0aXZlLCBjYXB0dXJlIGFuZCBkaXNwbGF5IG9u IHNpbmsgZGV2aWNlIHRpbWluZ3MiLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCJ0cmFuc2l0aW9uIHRvIGluYWN0aXZlLCBjYXB0dXJlIGFuZCBkaXNwbGF5LCB0aW1pbmcNCj4+ IHJlLXN5bmMiLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJyZXNlcnZlZCIs DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgInJlc2VydmVkIiwNCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAic2luayBpbnRlcm5hbCBlcnJvciIsDQo+PiArwqDC oMKgwqDCoMKgwqB9Ow0KPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciA9IG0tPnByaXZhdGU7DQo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwID0NCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9hdHRh Y2hlZF9kcCh0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKSk7DQo+PiArwqDCoMKgwqDCoMKg wqBpbnQgcmV0Ow0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFDQU5fUFNSKGludGVsX2Rw KSkgew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcV9wdXRzKG0sICJQU1Ig VW5zdXBwb3J0ZWRcbiIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAtRU5PREVWOw0KPj4gK8KgwqDCoMKgwqDCoMKgfQ0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKg aWYgKGNvbm5lY3Rvci0+c3RhdHVzICE9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQ0KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PREVWOw0KPj4gKw0KPj4g K8KgwqDCoMKgwqDCoMKgcmV0ID0gZHJtX2RwX2RwY2RfcmVhZGIoJmludGVsX2RwLT5hdXgsIERQ X1BTUl9TVEFUVVMsICZ2YWwpOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA9PSAx KSB7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqc3RyID0g InVua25vd24iOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCAm PSBEUF9QU1JfU0lOS19TVEFURV9NQVNLOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmICh2YWwgPCBBUlJBWV9TSVpFKHNpbmtfc3RhdHVzKSkNCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RyID0gc2lua19zdGF0dXNbdmFsXTsN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKG0sICJTaW5rIFBT UiBzdGF0dXM6IDB4JXggWyVzXVxuIiwgdmFsLA0KPj4gc3RyKTsNCj4+ICvCoMKgwqDCoMKgwqDC oH0gZWxzZSB7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsN Cj4+ICvCoMKgwqDCoMKgwqDCoH0NCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0K Pj4gK30NCj4+ICtERUZJTkVfU0hPV19BVFRSSUJVVEUoaTkxNV9wc3Jfc2lua19zdGF0dXMpOw0K Pj4gKw0KPj4gK3N0YXRpYyBpbnQgaTkxNV9wc3Jfc3RhdHVzX3Nob3coc3RydWN0IHNlcV9maWxl ICptLCB2b2lkICpkYXRhKQ0KPj4gK3sNCj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IgPSBtLT5wcml2YXRlOw0KPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCA9DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aW50ZWxfYXR0YWNoZWRfZHAodG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3RvcikpOw0KPj4gKw0K Pj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGludGVsX3Bzcl9zdGF0dXMobSwgaW50ZWxfZHApOw0K Pj4gK30NCj4+ICtERUZJTkVfU0hPV19BVFRSSUJVVEUoaTkxNV9wc3Jfc3RhdHVzKTsNCj4+ICsN Cj4+ICt2b2lkIGludGVsX3Bzcl9jb25uZWN0b3JfZGVidWdmc19hZGQoc3RydWN0IGludGVsX2Nv bm5lY3Rvcg0KPj4gKmludGVsX2Nvbm5lY3RvcikNCj4+ICt7DQo+PiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJmludGVsX2Nvbm5lY3Rvci0+YmFzZTsN Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkx NShjb25uZWN0b3ItPmRldik7DQo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGVudHJ5ICpyb290 ID0gY29ubmVjdG9yLT5kZWJ1Z2ZzX2VudHJ5Ow0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgaWYg KGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47DQo+PiArDQo+PiArwqDCoMKg wqDCoMKgwqBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpOTE1X3Bzcl9zaW5rX3N0YXR1cyIsIDA0NDQs IHJvb3QsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjb25uZWN0b3IsICZpOTE1X3Bzcl9zaW5rX3N0YXR1c19mb3BzKTsNCj4+ICsNCj4+ ICvCoMKgwqDCoMKgwqDCoGlmIChIQVNfUFNSKGk5MTUpKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRlYnVnZnNfY3JlYXRlX2ZpbGUoImk5MTVfcHNyX3N0YXR1cyIsIDA0NDQs IHJvb3QsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29ubmVjdG9yLA0KPj4gJmk5MTVfcHNyX3N0YXR1c19m b3BzKTsNCj4+ICt9DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9wc3IuaA0KPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bz ci5oDQo+PiBpbmRleCA3YTM4YTllN2ZhNWIuLjBiOTVlOGFhNjE1ZiAxMDA2NDQNCj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmgNCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmgNCj4+IEBAIC0xMyw2ICsxMyw3IEBA IHN0cnVjdCBkcm1fY29ubmVjdG9yOw0KPj4gwqBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZTsN Cj4+IMKgc3RydWN0IGRybV9pOTE1X3ByaXZhdGU7DQo+PiDCoHN0cnVjdCBpbnRlbF9hdG9taWNf c3RhdGU7DQo+PiArc3RydWN0IGludGVsX2Nvbm5lY3RvcjsNCj4+IMKgc3RydWN0IGludGVsX2Ny dGM7DQo+PiDCoHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlOw0KPj4gwqBzdHJ1Y3QgaW50ZWxfZHA7 DQo+PiBAQCAtNjEsNSArNjIsNyBAQCB2b2lkIGludGVsX3Bzcl9yZXN1bWUoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCk7DQo+PiDCoA0KPj4gwqB2b2lkIGludGVsX3Bzcl9sb2NrKGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsNCj4+IMKgdm9pZCBpbnRlbF9wc3Jf dW5sb2NrKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKTsNCj4+ICt2 b2lkIGludGVsX3Bzcl9jb25uZWN0b3JfZGVidWdmc19hZGQoc3RydWN0IGludGVsX2Nvbm5lY3Rv cg0KPj4gKmNvbm5lY3Rvcik7DQo+PiArdm9pZCBpbnRlbF9wc3JfZGVidWdmc19yZWdpc3Rlcihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7DQo+PiDCoA0KPj4gwqAjZW5kaWYgLyogX19J TlRFTF9QU1JfSF9fICovDQo+DQoNCi0tIA0KSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNl IEdyYXBoaWNzIENlbnRlcg0K