Received: by 2002:a05:7412:8d1c:b0:fa:4c10:6cad with SMTP id bj28csp278935rdb; Wed, 17 Jan 2024 01:22:14 -0800 (PST) X-Google-Smtp-Source: AGHT+IFI1VUHwmO0wEVm2KPQOmqf9ooF3gg33o1JyfTs6Dyc/xmCRESzZtyCKK/A1ImQZBp8ptxh X-Received: by 2002:a17:907:a783:b0:a2e:4a25:b7d7 with SMTP id vx3-20020a170907a78300b00a2e4a25b7d7mr1104254ejc.206.1705483334061; Wed, 17 Jan 2024 01:22:14 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1705483334; cv=pass; d=google.com; s=arc-20160816; b=g/5hwE1HYoDsQ17flFOzngLW1I4/PnvYYE2RwB/hnceNOb4AUm3SqsPFyrRCHFwTlo a/EcuQg59gGyTtlcJnoEuw30/Xgy7Zft5kmT2CM0dKtwuMyDUpDQ9nxjsohcI7CI6sKw JysZI7ib3casQ5bEWWat1Tnk66AyoEQ0V/E2dIMR3cP+lhEZUd0MTh8g+arWvEFExkoA /n/1BxhrmYc0Fc0ZNNkliBymbSQekmYNH5vMtk+aAshl5soK3TYuPbEUEo43jxczOlh7 aWTJ2eZgAn6MtGiuMb8OZG5SAbYdySkcRDxqyTKYWWq8+4cbm+XWMXzfmoY0gQGM+W8U vVAg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :user-agent:content-transfer-encoding:references:in-reply-to:date:cc :to:from:subject:message-id:dkim-signature; bh=9FwsAOigXQKkO0on4m0hnoijvRaFGHxPBHev5+c2dIE=; fh=HMtqNPS4n3fGdtPkhHgKWKxLlxVPR9ivbNMSc1fbUAI=; b=pFTg/6anSdmLM5IO0CKW3aa0JiBcdbslbHRhVdlyyvWnZvlEZBvxfsaa5INq4+lzHm 0hW1PsyCMMO1U/+UN9fVINf52fjSG74IfYRupnHf8npOEcyH9i9u8PaNDLra8Tmrid7f xSD6Ujju628jn10W4Xd5QfEYYYgLuAEGP27RJRJ58KKkUUJYEZVe3+lsKjfyn8hlQ+lh uWh0L1VfTP20HtjHsGvX38dDgAr9JgmGylWBYm3337EtrufqPK5dqPvExVnuPqKmGzoK DmRNrqvT9wzLpZ4ByNNacjX+1eMNU1izUu7Dgi3w49PBsOi/Af5PsDFC6WoRBQvWTdu8 rtcA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=YJHwYt4k; arc=pass (i=1 spf=pass spfdomain=redhat.com dkim=pass dkdomain=redhat.com dmarc=pass fromdomain=redhat.com); spf=pass (google.com: domain of linux-kernel+bounces-28714-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-28714-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id hg9-20020a170906f34900b00a2bfae2ab4asi5619297ejb.572.2024.01.17.01.22.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jan 2024 01:22:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-28714-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=YJHwYt4k; arc=pass (i=1 spf=pass spfdomain=redhat.com dkim=pass dkdomain=redhat.com dmarc=pass fromdomain=redhat.com); spf=pass (google.com: domain of linux-kernel+bounces-28714-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-28714-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 9F5AA1F245DA for ; Wed, 17 Jan 2024 09:22:13 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9F27C14AB0; Wed, 17 Jan 2024 09:21:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="YJHwYt4k" Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1746614AA1 for ; Wed, 17 Jan 2024 09:21:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705483286; cv=none; b=CXxt5mM8ywppiljKbfRaFLZ+40NvaTcy4cu0bgNJEU+mTuHeEKcAammiMQbVhxTFDhDctMIdaEIa20gS0776vBJM0p//wZywhanFbFJzeZi6FuymW6usIELaBjciOYDaqIfP54JF/zAyW4zcAYgtj06e14EaPp8aa8w6+CPtYz0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705483286; c=relaxed/simple; bh=9FwsAOigXQKkO0on4m0hnoijvRaFGHxPBHev5+c2dIE=; h=DKIM-Signature:Received:X-MC-Unique:Received: X-Google-DKIM-Signature:X-Gm-Message-State:X-Received: X-Google-Smtp-Source:X-Received:Received:Message-ID:Subject:From: To:Cc:Date:In-Reply-To:References:Content-Type: Content-Transfer-Encoding:User-Agent:MIME-Version; b=i37S1IZXPc4ZDvlTIYrRAL/DqgG8QS17b3xdp2odqMQxH3vWPuRl58IDd+/k5RjvRzL9Bf1s91FqpgdpjZOti8RVx4VHyue/r7xZdP0pH0kz7rm6X/26LthCvQZbvR2z00c6WrvMRAAstASbRl6nGk2kvnYrwu+EkS7+ePOT9Ns= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=YJHwYt4k; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1705483283; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9FwsAOigXQKkO0on4m0hnoijvRaFGHxPBHev5+c2dIE=; b=YJHwYt4k6QDnpgASXVkmv5YNiYvMB74eHvnQmuDnBMC2XEaD8O2ncjjMox2Bme11Cjod1e GKydfVHHsD8rfErUYMx+cKpx+eC9gCRiFzIhbYo5JJiLWI1l+A5J31xDDcL5G7uC1z9mwZ Y+KKU7VE8CspwFifeAcXOU5V46t2STA= Received: from mail-vs1-f71.google.com (mail-vs1-f71.google.com [209.85.217.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-377-HYcx85cjOd-uGhDBphdxhQ-1; Wed, 17 Jan 2024 04:21:16 -0500 X-MC-Unique: HYcx85cjOd-uGhDBphdxhQ-1 Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-467bde7e850so993868137.0 for ; Wed, 17 Jan 2024 01:21:13 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705483273; x=1706088073; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=9FwsAOigXQKkO0on4m0hnoijvRaFGHxPBHev5+c2dIE=; b=wwttS3TsRlHmO51RJFGd/o1oUfQdeTHi4AALA+1dmtJmmgSoOLX+q+ukztJWxcjrMz JxEApJAgo1fte3DfvsUkDE8OjCF6puQpuihF6gTDK3SQkkGTjEXgQlcbF1KKuLx+dd7O fRVP2CDaS8A+ktRxcz+rdkEXdBGvcVIey6JW8ZRbPz9BmqtAap0YLc4gtA3gU5PxsTAs p0ygW+4E0qHSK0SJM7C1fQStCBemIRP3UE/zmWIni8ufQay6X4aKFsV0K6j6Lb+ougkZ Z1kCvpMhS5NS3c6Dtv23As1ARxMIR1hEVOeEWz2tLCaZWWWx7iYFmI0N8WN95tzZd9// Ep8A== X-Gm-Message-State: AOJu0YyRP4H5bFjHpGQtqMHKMYIyE1StiPnGyCnYG20w+Yw9HfdysYZ+ h5OAm3WcJ1u+ediDtP8UlJmI8B/0AZvNf4PnGouJbBLJ6QohqCcd9Ao6WyM9fuP9frxHk5bLmYf C4zV0jzMWTfgxry1vWCdvZYn3WLesnz7K X-Received: by 2002:a05:6102:f8f:b0:469:5ae1:6e4f with SMTP id e15-20020a0561020f8f00b004695ae16e4fmr6470688vsv.2.1705483272676; Wed, 17 Jan 2024 01:21:12 -0800 (PST) X-Received: by 2002:a05:6102:f8f:b0:469:5ae1:6e4f with SMTP id e15-20020a0561020f8f00b004695ae16e4fmr6470676vsv.2.1705483272359; Wed, 17 Jan 2024 01:21:12 -0800 (PST) Received: from pstanner-thinkpadt14sgen1.remote.csb (nat-pool-muc-t.redhat.com. [149.14.88.26]) by smtp.gmail.com with ESMTPSA id cp8-20020a05622a420800b00429aba4a360sm5605725qtb.81.2024.01.17.01.21.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jan 2024 01:21:12 -0800 (PST) Message-ID: <3b430d0fd8a9c8bb3cc60a15a2bf40b3abbebe1b.camel@redhat.com> Subject: Re: [PATCH 01/10] pci: add new set of devres functions From: Philipp Stanner To: andy.shevchenko@gmail.com Cc: Jonathan Corbet , Hans de Goede , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Bjorn Helgaas , Sam Ravnborg , dakr@redhat.com, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-pci@vger.kernel.org Date: Wed, 17 Jan 2024 10:21:08 +0100 In-Reply-To: References: <20240115144655.32046-2-pstanner@redhat.com> <20240115144655.32046-3-pstanner@redhat.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.48.4 (3.48.4-1.fc38) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 T24gVHVlLCAyMDI0LTAxLTE2IGF0IDIzOjE1ICswMjAwLCBhbmR5LnNoZXZjaGVua29AZ21haWwu Y29tIHdyb3RlOgo+IE1vbiwgSmFuIDE1LCAyMDI0IGF0IDAzOjQ2OjEyUE0gKzAxMDAsIFBoaWxp cHAgU3Rhbm5lciBraXJqb2l0dGk6Cj4gPiBQQ0kncyBkZXZyZXMgQVBJIGlzIG5vdCBleHRlbnNp YmxlIHRvIHJhbmdlZCBtYXBwaW5ncyBhbmQgaGFzCj4gPiBidWctcHJvdm9raW5nIGZlYXR1cmVz LiBJbXByb3ZlIHRoYXQgYnkgcHJvdmlkaW5nIGJldHRlcgo+ID4gYWx0ZXJuYXRpdmVzLgo+ID4g Cj4gPiBXaGVuIHRoZSBvcmlnaW5hbCBkZXZyZXMgQVBJIGZvciBQQ0kgd2FzIGltcGxlbWVudGVk LCBwcmlvcml0eSB3YXMKPiA+IGdpdmVuCj4gPiB0byB0aGUgY3JlYXRpb24gb2YgYSBzZXQgb2Yg InB1cmFsIGZ1bmN0aW9ucyIgc3VjaCBhcwo+ID4gcGNpbV9yZXF1ZXN0X3JlZ2lvbnMoKS4gVGhl c2UgZnVuY3Rpb25zIGhhdmUgYml0IG1hc2tzIGFzCj4gPiBwYXJhbWV0ZXJzIHRvCj4gPiBzcGVj aWZ5IHdoaWNoIEJBUnMgc2hhbGwgZ2V0IG1hcHBlZC4gTW9zdCB1c2VycywgaG93ZXZlciwgb25s eSB1c2UKPiA+IHRob3NlCj4gPiB0byBtYXBwIDEtMyBCQVJzLgo+ID4gQSBjb21wbGV0ZSBzZXQg b2YgInNpbmd1bGFyIGZ1bmN0aW9ucyIgZG9lcyBub3QgZXhpc3QuCj4gPiAKPiA+IEFzIGZ1bmN0 aW9ucyBtYXBwaW5nIC8gcmVxdWVzdGluZyBtdWx0aXBsZSBCQVJzIGF0IG9uY2UgaGF2ZQo+ID4g KGFsbW9zdCkgbm8KPiA+IG1lY2hhbmlzbSBpbiBDIHRvIHJldHVybiB0aGUgcmVzb3VyY2VzIHRv IHRoZSBjYWxsZXIgb2YgdGhlIHBsdXJhbAo+ID4gZnVuY3Rpb24sIHRoZSBkZXZyZXMgQVBJIHV0 aWxpemVzIHRoZSBpb21hcC10YWJsZSBhZG1pbmlzdHJhdGVkIGJ5Cj4gPiB0aGUKPiA+IGZ1bmN0 aW9uIHBjaW1faW9tYXBfdGFibGUoKS4KPiA+IAo+ID4gVGhlIGVudGlyZSBQQ0kgZGV2cmVzIGlt cGxlbWVudGF0aW9uIHdhcyBzdHJvbmdseSB0aWVkIHRvIHRoYXQKPiA+IHRhYmxlCj4gPiB3aGlj aCBvbmx5IGFsbG93cyBmb3IgbWFwcGluZyB3aG9sZSwgY29tcGxldGUgQkFScywgYXMgdGhlIEJB UidzCj4gPiBpbmRleAo+ID4gaXMgdXNlZCBhcyB0YWJsZSBpbmRleC4gQ29uc2VxdWVudGx5LCBp dCdzIG5vdCBwb3NzaWJsZSB0bywgZS5nLiwKPiA+IGhhdmUgYQo+ID4gcGNpbV9pb21hcF9yYW5n ZSgpIGZ1bmN0aW9uIHdpdGggdGhhdCBtZWNoYW5pc20uCj4gPiAKPiA+IEFuIGFkZGl0aW9uYWwg cHJvYmxlbSBpcyB0aGF0IHBjaS1kZXZyZXMgaGFzIGJlZW4gaXBtbGVtZW50ZWQgaW4gYQo+ID4g c29ydAo+ID4gb2YgImh5YnJpZC1tb2RlIjogU29tZSB1bm1hbmFnZWQgZnVuY3Rpb25zIGhhdmUg bWFuYWdlZAo+ID4gY291bnRlcnBhcnRzCj4gPiAoZS5nLjogcGNpX2lvbWFwKCkgPC0+IHBjaW1f aW9tYXAoKSksIG1ha2luZyB0aGVpciBtYW5hZ2VkIG5hdHVyZQo+ID4gb2J2aW91cyB0byB0aGUg cHJvZ3JhbW1lci4gSG93ZXZlciwgdGhlIHJlZ2lvbi1yZXF1ZXN0IGZ1bmN0aW9ucyBpbgo+ID4g cGNpLmMsIHByZWZpeGVkIHdpdGggcGNpXywgYmVoYXZlIGVpdGhlciBtYW5hZ2VkIG9yIHVubWFu YWdlZCwKPiA+IGRlcGVuZGluZwo+ID4gb24gd2hldGhlciBwY2lfZW5hYmxlX2RldmljZSgpIG9y IHBjaW1fZW5hYmxlX2RldmljZSgpIGhhcyBiZWVuCj4gPiBjYWxsZWQKPiA+IGluIGFkdmFuY2Uu Cj4gPiAKPiA+IFRoaXMgaHlicmlkIEFQSSBpcyBjb25mdXNpbmcgYW5kIHNob3VsZCBiZSBtb3Jl IGNsZWFubHkgc2VwYXJhdGVkCj4gPiBieQo+ID4gcHJvdmlkaW5nIGFsd2F5cy1tYW5hZ2VkIGZ1 bmN0aW9ucyBwcmVmaXhlZCB3aXRoIHBjaW1fLgo+ID4gCj4gPiBUaHVzLCB0aGUgZXhpc3Rpbmcg ZGV2cmVzIEFQSSBpcyBub3QgZGVzaXJhYmxlIGJlY2F1c2U6Cj4gPiDCoMKgwqDCoMKgwqDCoMKg YSkgVGhlIHZhc3QgbWFqb3JpdHkgb2YgdGhlIHVzZXJzIG9mIHRoZSBwbHVyYWwgZnVuY3Rpb25z Cj4gPiBvbmx5Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBldmVyIHNldHMgYSBzaW5nbGUgYml0 IGluIHRoZSBiaXQgbWFzaywgY29uc2VxdWVudGx5Cj4gPiBtYWtpbmcKPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgIHRoZW0gc2luZ3VsYXIgZnVuY3Rpb25zIGFueXdheXMuCj4gPiDCoMKgwqDCoMKg wqDCoMKgYikgVGhlcmUgaXMgbm8gbWVjaGFuaXNtIHRvIHJlcXVlc3QgLyBpb21hcCBvbmx5IHBh cnQgb2YgYQo+ID4gQkFSLgo+ID4gwqDCoMKgwqDCoMKgwqDCoGMpIFRoZSBpb21hcC10YWJsZSBt ZWNoYW5pc20gaXMgb3Zlci1lbmdpbmVlcmVkLAo+ID4gY29tcGxpY2F0ZWQgYW5kCj4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjYW4gYnkgZGVmaW5pdGlvbiBub3QgcGVyZm9ybSBib3VuZHMgY2hl Y2tzLCB0aHVzLAo+ID4gcHJvdm9raW5nCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW1vcnkg ZmF1bHRzOiBwY2ltX2lvbWFwX3RhYmxlKHBkZXYpWzQyXQo+ID4gwqDCoMKgwqDCoMKgwqDCoGQp IHJlZ2lvbi1yZXF1ZXN0IGZ1bmN0aW9ucyBiZWluZyBzb21ldGltZXMgbWFuYWdlZCBhbmQKPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNvbWV0aW1lcyBub3QgaXMgYnVnLXByb3Zva2luZy4KPiA+ IAo+ID4gSW1wbGVtZW50IGEgc2V0IG9mIHNpbmd1bGFyIHBjaW1fIGZ1bmN0aW9ucyB0aGF0IHVz ZSBkZXZyZXMKPiA+IGRpcmVjdGx5Cj4gPiBhbmQgYnlwYXNzIHRoZSBsZWdhY3kgaW9tYXAgdGFi bGUgbWVjaGFuaXNtLgo+ID4gQWRkIGRldnJlcy5jIHRvIGRyaXZlci1hcGkgZG9jdW1lbnRhdGlv bi4KPiAKPiAuLi4KPiAKPiA+ICtzdHJ1Y3QgcGNpbV9hZGRyX2RldnJlcyB7Cj4gPiArwqDCoMKg wqDCoMKgwqBlbnVtIHBjaW1fYWRkcl9kZXZyZXNfdHlwZSB0eXBlOwo+ID4gK8KgwqDCoMKgwqDC oMKgdm9pZCBfX2lvbWVtICpiYXNlYWRkcjsKPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxv bmcgb2Zmc2V0Owo+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBsZW47Cj4gPiArwqDC oMKgwqDCoMKgwqBzaG9ydCBiYXI7Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIHZv aWQgcGNpbV9hZGRyX2RldnJlc19jbGVhcihzdHJ1Y3QgcGNpbV9hZGRyX2RldnJlcwo+ID4gKnJl cykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXMtPnR5cGUgPSBQQ0lNX0FERFJfREVWUkVT X1RZUEVfSU5WQUxJRDsKPiA+ICvCoMKgwqDCoMKgwqDCoHJlcy0+YmFyID0gLTE7Cj4gPiArwqDC oMKgwqDCoMKgwqByZXMtPmJhc2VhZGRyID0gTlVMTDsKPiA+ICvCoMKgwqDCoMKgwqDCoHJlcy0+ b2Zmc2V0ID0gMDsKPiA+ICvCoMKgwqDCoMKgwqDCoHJlcy0+bGVuID0gMDsKPiAKPiBNb3JlIHJv YnVzdCAoaW4gY2FzZSB0aGUgZGF0YSB0eXBlIGdldHMgZXh0ZW5kZWQpIGlzIG1lbXNldCgpICsK PiBpbmRpdmlkdWFsCj4gKG5vbi0wKSBzZXRzLgoKQUNLCgo+IAo+ID4gK30KPiAKPiAuLi4KPiAK PiA+ICtzdGF0aWMgaW50IF9fcGNpbV9yZXF1ZXN0X3JlZ2lvbl9yYW5nZShzdHJ1Y3QgcGNpX2Rl diAqcGRldiwgaW50Cj4gPiBiYXIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbWF4bGVuLAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKm5hbWUsIGludCBleGNsdXNpdmUpCj4g PiArewo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcGNpX3Jlc291 cmNlX3N0YXJ0KHBkZXYsIGJhcik7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXNvdXJjZV9zaXplX3Qg bGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdW5z aWduZWQgbG9uZyBmbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpOwo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0YXJ0ID09IDAgfHwgbGVuID09IDApIC8qIHRoYXQncyBh biB1bnVzZWQgQkFSLiAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAwOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGxlbiA8PSBvZmZzZXQpCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuwqAgLUVJTlZBTDsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoHN0YXJ0ICs9IG9mZnNldDsKPiA+ICvCoMKgwqDCoMKgwqDCoGxlbiAtPSBvZmZzZXQ7 Cj4gCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAobGVuID4gbWF4bGVuICYmIG1heGxlbiAhPSAwKQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlbiA9IG1heGxlbjsKPiAKPiDCoMKg wqDCoMKgwqDCoMKgaWYgKG1heGxlbiAmJiAuLi4pCj4gCj4gPwoKSSB2ZXJ5IG11Y2ggZGlzbGlr ZSB0aGlzIHN0eWxlLCBhbHRob3VnaCBJJ20gYXdhcmUgaXQncyB1c2VkIGluIG1hbnkKKGJ1dCBu b3QgYWxsKSByZWdpb25zIG9mIHRoZSBrZXJuZWwuCgpJdCBtYWtlcyB5b3VyIHN0eWxlIGluY29u c2lzdGVudCwgYmVjYXVzZSBzb21ldGltZXMgeW91IGRvIGluZGVlZCBjaGVjawpmb3Igc29tZXRo aW5nIGxhcmdlciBvciBzbWFsbGVyIHRoYW4gMC4KClBsdXMsIGJ5IGNoZWNraW5nIGZvciBhIG51 bWJlciwgZXZlcnlvbmUgaW1tZWRpYXRlbHkgc2VlcyB0aGF0IHRoaXMgaXMKYW4gaW50ZWdlciwg bm90IGEgcG9pbnRlciwgd2hpY2ggaW1wcm92ZXMgcmVhZGFiaWxpdHkgYXQgMCBjb3N0LgoKPiAK PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChmbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXJlcXVlc3RfcmVnaW9uKHN0YXJ0LCBsZW4s IG5hbWUpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gLUVCVVNZOwo+ID4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChmbGFncyAmIElP UkVTT1VSQ0VfTUVNKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFf X3JlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCwgbGVuLCBuYW1lLAo+ID4gZXhjbHVzaXZlKSkKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F QlVTWTsKPiA+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgLyogVGhhdCdzIG5vdCBhIGRldmljZSB3ZSBjYW4gcmVxdWVzdCBhbnl0aGlu ZyBvbi4KPiA+ICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F Tk9ERVY7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gCj4gSG1tLi4uIE5vdCBzdXJlLCBidXQgdGhl IHN3aXRjaC1jYXNlIGFnYWluc3QgdHlwZSBtaWdodCBiZQo+IGNvbnNpZGVyZWQ6Cj4gCj4gwqDC oMKgwqDCoMKgwqDCoHN3aXRjaCAocmVzb3VyY2VfdHlwZSguLi4pKSB7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAuLi4KPiDCoMKgwqDCoMKgwqDCoMKgfQoKWW91IG1lYW4gcmVz b3VyY2VfdHlwZSgpIGZyb20gaW9wb3J0Lmg/IEhvdyB3b3VsZCB0aGF0IGJlIHVzZWZ1bCBoZXJl PwpXb3VsZCB5b3Ugd2FudCB0byB3cml0ZSBhIHNpbWlsYXIgZnVuY3Rpb24/CkknZCBzYXkgdGhh dCAgc3dpdGNoIChyZXMtPnR5cGUpICAncyBtZWFuaW5nIGlzIHZlcnkgb2J2aW91cwoKPiAKPiA+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gK30KPiAKPiA+ICtzdGF0aWMgdm9pZCBfX3Bj aW1fcmVsZWFzZV9yZWdpb25fcmFuZ2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludAo+ID4gYmFy LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgb2Zmc2V0 LCB1bnNpZ25lZCBsb25nIG1heGxlbikKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXNvdXJj ZV9zaXplX3Qgc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKTsKPiA+ICvCoMKg wqDCoMKgwqDCoHJlc291cmNlX3NpemVfdCBsZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJh cik7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIGZsYWdzID0gcGNpX3Jlc291cmNl X2ZsYWdzKHBkZXYsIGJhcik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAobGVuIDw9IG9m ZnNldCB8fCBzdGFydCA9PSAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybjsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChsZW4gPT0gMCB8fCBtYXhsZW4gPT0g MCkgLyogVGhpcyBhbiB1bnVzZWQgQkFSLiBEbwo+ID4gbm90aGluZy4gKi8KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBz dGFydCArPSBvZmZzZXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBsZW4gLT0gb2Zmc2V0Owo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGxlbiA+IG1heGxlbikKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBsZW4gPSBtYXhsZW47Cj4gCj4gVGhpcyBwYXJ0IGlzIHF1aXRlIGEgZHVw bGljYXRpb24gb2YgdGhlIGFib3ZlIGZ1bmN0aW9uLCBubz8KClllcy4KSSBvbmNlIGhhZCBhIHdy YXBwZXIgZm9yIHRoYXQgaW4gbWluZCwgYnV0IHN1Y2ggYSB3cmFwcGVyIGFsc28gZ2V0cwpxdWl0 ZSBjb21wbGljYXRlZCBxdWlja2x5LiBSZWFzb24gYmVpbmcgdGhhdCB5b3UgZG9uJ3QganVzdCBj aGVjaywgeW91CmFsc28gbW9kaWZ5IHRoZSBwYXJhbWV0ZXJzLgoKWW91J2QgaGF2ZSBzdGggbGlr ZSAKCmludCBfX3BjaW1fY2hlY2tfYWRqdXN0X3JlZ2lvbl9yYW5nZV9wYXJhbXModW5zaWduZWQg bG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmxlbik7CgphbmQgdGhlbiB5b3UnZCBoYXZlIHRv IHJldHVybiBlaXRoZXIgLUVJTlZBTCBvciAwIGFuZCAqY2hlY2sqIGZvciB0aG9zZQphZ2FpbiBp biB0aGUgY2FsbGluZyBmdW5jdGlvbi4KVGhhdCdzIHdoeSBJIHJlbW92ZWQgdGhlIHdyYXBwZXIg YWdhaW4gYW5kIGp1c3QgY29waWVkIHRoZSBjb2RlLApiZWNhdXNlIEkgdGhvdWdodCB0aGF0J3Mg Y2hlYXBlciwgdWx0aW1hdGVseS4KCj4gCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoZmxhZ3MgJiBJ T1JFU09VUkNFX0lPKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlbGVhc2Vf cmVnaW9uKHN0YXJ0LCBsZW4pOwo+ID4gK8KgwqDCoMKgwqDCoMKgZWxzZSBpZiAoZmxhZ3MgJiBJ T1JFU09VUkNFX01FTSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWxlYXNl X21lbV9yZWdpb24oc3RhcnQsIGxlbik7Cj4gPiArfQo+IAo+IC4uLgo+IAo+ID4gK3N0YXRpYyBp bnQgX19wY2ltX3JlcXVlc3RfcmVnaW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKm5hbWUsIGludCBl eGNsdXNpdmUpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgY29uc3QgdW5zaWduZWQgbG9uZyBv ZmZzZXQgPSAwOwo+ID4gK8KgwqDCoMKgwqDCoMKgY29uc3QgdW5zaWduZWQgbG9uZyBsZW4gPSBw Y2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcik7Cj4gCj4gSG93IGNvbnN0IGFueWhvdyB1c2VmdWwg aGVyZT8KPiBEaXR0byBmb3Igb3RoZXIgcGxhY2VzIGxpa2UgdGhpcy4KClllYWgsIHdlIGNhbiBv bWl0IHRob3NlCgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIF9fcGNpbV9yZXF1ZXN0X3Jl Z2lvbl9yYW5nZShwZGV2LCBiYXIsIG9mZnNldCwgbGVuLAo+ID4gbmFtZSwgZXhjbHVzaXZlKTsK PiA+ICt9Cj4gCj4gLi4uCj4gCj4gPiArc3RhdGljIGludCBwY2ltX2FkZHJfcmVzb3VyY2VzX21h dGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZAo+ID4gKmFfcmF3LCB2b2lkICpiX3JhdykKPiA+ ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGNpbV9hZGRyX2RldnJlcyAqYSwgKmI7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqBhID0gYV9yYXc7Cj4gPiArwqDCoMKgwqDCoMKgwqBiID0g Yl9yYXc7Cj4gCj4gPiArwqDCoMKgwqDCoMKgwqAodm9pZClkZXY7IC8qIHVudXNlZC4gKi8KPiAK PiBXaHkgZG8gd2UgbmVlZCB0aGlzPwoKT2xkIGluc3RpbmN0IGZyb20gYW5vdGhlciBwcm9qZWN0 IHdoZXJlIHRoZSBjb21waWxlciBwdW5jaGVkIHlvdSBmb3IKdW51c2VkIHZhcmlhYmxlcyBhbmQg ZnVuY3Rpb24gcGFyYW1ldGVycy4KQ2FuIHJlbW92ZSBpdC4KCj4gCj4gPiArwqDCoMKgwqDCoMKg wqBpZiAoYS0+dHlwZSAhPSBiLT50eXBlKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiAwOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3dpdGNoIChhLT50eXBlKSB7 Cj4gPiArwqDCoMKgwqDCoMKgwqBjYXNlIFBDSU1fQUREUl9ERVZSRVNfVFlQRV9SRUdJT046Cj4g PiArwqDCoMKgwqDCoMKgwqBjYXNlIFBDSU1fQUREUl9ERVZSRVNfVFlQRV9SRUdJT05fTUFQUElO RzoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gYS0+YmFyID09IGIt PmJhcjsKPiA+ICvCoMKgwqDCoMKgwqDCoGNhc2UgUENJTV9BRERSX0RFVlJFU19UWVBFX01BUFBJ Tkc6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGEtPmJhc2VhZGRy ID09IGItPmJhc2VhZGRyOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2FzZSBQQ0lNX0FERFJfREVWUkVT X1RZUEVfUkVHSU9OX1JBTkdFX01BUFBJTkc6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIGEtPmJhciA9PSBiLT5iYXIgJiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYS0+b2Zmc2V0ID09IGItPm9mZnNldCAmJiBhLT5s ZW4gPT0gYi0+bGVuOwo+IAo+IEluZGVudGF0aW9uIG9yIG1hZGUgaXQgYSBzaW5nbGUgbGluZS4K CkhvdyBkbyB5b3Ugd2FudCBzdWNoIGFuIGluZGVudGF0aW9uIHRvIGJlIHBlcmZvcm1lZC4gVGFi cyBtaXhlZCB3aXRoCnNwYWNlcz8KCj4gCj4gPiArwqDCoMKgwqDCoMKgwqBkZWZhdWx0Ogo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gK8KgwqDCoMKgwqDCoMKg fQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gCj4gcmV0dXJuIGRpcmVjdGx5 IGZyb20gZGVmYXVsdCBjYXNlLgo+IAo+ID4gK30KPiAKPiAuLi4KPiAKPiA+ICsvKioKPiA+ICsg KiBwY2ltX2lvbWFwX3JlZ2lvbiAtIFJlcXVlc3QgYW5kIGlvbWFwIGEgUENJIEJBUgo+ID4gKyAq IEBwZGV2OiBQQ0kgZGV2aWNlIHRvIG1hcCBJTyByZXNvdXJjZXMgZm9yCj4gPiArICogQGJhcjog SW5kZXggb2YgYSBCQVIgdG8gbWFwCj4gPiArICogQG5hbWU6IE5hbWUgYXNzb2NpYXRlZCB3aXRo IHRoZSByZXF1ZXN0Cj4gPiArICoKPiA+ICsgKiBSZXR1cm5zIF9faW9tZW0gcG9pbnRlciBvbiBz dWNjZXNzLCBhbiBJT01FTV9FUlJfUFRSIG9uCj4gPiBmYWlsdXJlLgo+IAo+IFBsZWFzZSwgbWFr ZSBzdXJlIHRoZSBrZXJuZWwtZG9jIHdvbid0IGNvbXBsYWluCj4gCj4gwqDCoMKgwqDCoMKgwqDC oHNjcmlwdHMva2VybmVsLWRvYyAtdiAtbm9uZSAtV2FsbCAuLi4KCkknbGwgaGF2ZSBhIGxvb2sK Cj4gCj4gPiArICogTWFwcGluZyBhbmQgcmVnaW9uIHdpbGwgZ2V0IGF1dG9tYXRpY2FsbHkgcmVs ZWFzZWQgb24gZHJpdmVyCj4gPiBkZXRhY2guIElmCj4gPiArICogZGVzaXJlZCwgcmVsZWFzZSBt YW51YWxseSBvbmx5IHdpdGggcGNpbV9pb3VubWFwX3JlZ2lvbigpLgo+ID4gKyAqLwo+ID4gK3Zv aWQgX19pb21lbSAqcGNpbV9pb21hcF9yZWdpb24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBi YXIsCj4gPiBjb25zdCBjaGFyICpuYW1lKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoGludCBy ZXQgPSAwOwo+IAo+IFJlZHVuZGFudCBhc3NpZ25tZW50LgoKSSBndWVzcyB3ZSBjYW4gcmVtb3Zl IGl0LCBidXQgZG8geW91IHRoaW5rIGl0J3Mgbm90IGp1c3QgdXNlbGVzcywgYnV0CmFjdHVhbGx5 IGJhZD8KQWZ0ZXIgYWxsLCBwZW9wbGUgbGlrZSB0aGUgUnVzdCBmb2xrcyBmcmVxdWVudGx5IGNv bXBsYWluIGFib3V0IHRoZQoncHJvYmxlbScgaW4gQyBvZiB2YXJpYWJsZXMgbm90IGJlaW5nIGlu aXRpYWxpemVkLgoKSSdtIG5ldXRyYWwgYWJvdXQgdGhpcywgd2UgY2FuIGtlZXAgb3IgcmVtb3Zl IGl0LgoKPiAKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwY2ltX2FkZHJfZGV2cmVzICpyZXM7 Cj4gCj4gUGVyaGFwcyByZXZlcnNlZCB4bWFzIHRyZWUgb3JkZXI/CgpXaGF0IGRvIHlvdSBtZWFu PyBUaGUgc3RydWN0J3MgbmFtZT8gVGhlIGZ1bmN0aW9uJ3Mgc3RydWN0dXJlPwoKPiAKPiA+ICvC oMKgwqDCoMKgwqDCoHJlcyA9IHBjaW1fYWRkcl9kZXZyZXNfYWxsb2MocGRldik7Cj4gPiArwqDC oMKgwqDCoMKgwqBpZiAoIXJlcykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gSU9NRU1fRVJSX1BUUigtRU5PTUVNKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJl cy0+dHlwZSA9IFBDSU1fQUREUl9ERVZSRVNfVFlQRV9SRUdJT05fTUFQUElORzsKPiA+ICvCoMKg wqDCoMKgwqDCoHJlcy0+YmFyID0gYmFyOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0g X19wY2ltX3JlcXVlc3RfcmVnaW9uKHBkZXYsIGJhciwgbmFtZSwgMCk7Cj4gPiArwqDCoMKgwqDC oMKgwqBpZiAocmV0ICE9IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290 byBlcnJfcmVnaW9uOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzLT5iYXNlYWRkciA9IHBj aV9pb21hcChwZGV2LCBiYXIsIDApOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFyZXMtPmJhc2Vh ZGRyKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gLUVJTlZBTDsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycl9pb21hcDsKPiA+ICvC oMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGRldnJlc19hZGQoJnBkZXYt PmRldiwgcmVzKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXMtPmJhc2VhZGRyOwo+ID4g Kwo+ID4gK2Vycl9pb21hcDoKPiA+ICvCoMKgwqDCoMKgwqDCoF9fcGNpbV9yZWxlYXNlX3JlZ2lv bihwZGV2LCBiYXIpOwo+ID4gK2Vycl9yZWdpb246Cj4gPiArwqDCoMKgwqDCoMKgwqBwY2ltX2Fk ZHJfZGV2cmVzX2ZyZWUocmVzKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBJT01F TV9FUlJfUFRSKHJldCk7Cj4gPiArfQo+IAo+IC4uLgo+IAo+ID4gK3N0YXRpYyBpbnQgX3BjaW1f cmVxdWVzdF9yZWdpb24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsCj4gPiBjb25zdCBj aGFyICpuYW1lLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCByZXF1ZXN0 X2ZsYWdzKQo+IAo+IEluZGVudGF0aW9uPwo+IAo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoGlu dCByZXQgPSAwOwo+IAo+IFVubmVkZWQgYXNzaWdubWVudC4gQWxzbyBmaXggdGhpcyBpbiBvdGhl ciBwbGFjZXMuCj4gCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGNpbV9hZGRyX2RldnJlcyAq cmVzOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzID0gcGNpbV9hZGRyX2RldnJlc19hbGxv YyhwZGV2KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghcmVzKQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVzLT50 eXBlID0gUENJTV9BRERSX0RFVlJFU19UWVBFX1JFR0lPTjsKPiA+ICvCoMKgwqDCoMKgwqDCoHJl cy0+YmFyID0gYmFyOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gX19wY2ltX3JlcXVl c3RfcmVnaW9uKHBkZXYsIGJhciwgbmFtZSwKPiA+IHJlcXVlc3RfZmxhZ3MpOwo+ID4gK8KgwqDC oMKgwqDCoMKgaWYgKHJldCAhPSAwKSB7Cj4gCj4gwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4g Cj4gQWxzbyBmaXggdGhpcyBpbiBvdGhlciBwbGFjZXMuCgpTZWUgYWJvdmUuCgoKClRoeCBmb3Ig dGhlIHJldmlldywKUC4KCgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBj aW1fYWRkcl9kZXZyZXNfZnJlZShyZXMpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiByZXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBkZXZyZXNfYWRkKCZwZGV2LT5kZXYsIHJlcyk7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsKPiA+ICt9Cj4gCgo=