Received: by 2002:a05:7412:31a9:b0:e2:908c:2ebd with SMTP id et41csp3228316rdb; Wed, 13 Sep 2023 06:12:33 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGPqm3WPIPdzqScmFmG88qk7fBxDA4Pq1FDsffUJuNObzicG+HOjyPmVa2cqEY1LJGw36/7 X-Received: by 2002:a05:6a21:7889:b0:13e:99c0:fe7f with SMTP id bf9-20020a056a21788900b0013e99c0fe7fmr2612416pzc.11.1694610752834; Wed, 13 Sep 2023 06:12:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694610752; cv=none; d=google.com; s=arc-20160816; b=DSQW6mn4yFUAFuQ6XgZ9n7lh/o+6ZOaa0Vl8+09aOYSGqGnmbKUkTxW1xYnziLCeh/ MLX/gAvdplyxWoBCLijgFjhO+p5zhq4Q66kXia2GFs3PxYfgA8TLqVlYWf6T4FaxRLdg zw9lmhicw3Rh1z9mypB6NxSUUIT1TwkqZfO5mcAT4n+ddJgXTQOgDwY5wrJnW42V6Cm5 U4zZYg0BWORNlobC0hWpHtXYUApW7qqh/iXHhsQcQ2furRklVaJoOooUSin16JvTllQf luaZAxCLy/ApBgIbxz4YRmbSKPhla203GWeSiqXmvbKqZJqO16WkVQmRfsLaEJLOggLh DVhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent :content-transfer-encoding:organization:references:in-reply-to:date :cc:to:from:subject:message-id:dkim-signature; bh=oG3Xgn0qqklcKHyYoc2L4LWX3+3T3UzA4KS7MUT9a8M=; fh=yWmRpKIWIw5F4+VlUYq1cqlV7y6vh1Q4ItRc70Hs08g=; b=SW8SRNhVj8hPWOwBqdgXr499VT/3dW9rAJT6MoLvNuDOGsHZXHVDXfAeZRcprIipWH Q/LDNfm4nHT6lESh4iFDg10HX0jBE1PXW4QGF3J07/5jGeBCWXcltpazuSiUjSuBWcrV IaqjEd7NTQdk/J28am7QMbtwiWIrXL6Gv91sqIQCSHQbGByTnqpPa0+VaT+9p3YjycIb goO9V8q1/Evo54VukNuMq3D99H6KUbudp+xgbeZQm5cES0+48Ij6aVYWA+ehgjxhoiOb R6OsJr1jn+RFJAZ+/n52Qw85ZCHgAuyo7ze30qFO7bl7P0VQJWtCvraOM5QT51jH/JM1 lhWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=TT9tpJpi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id d1-20020a63f241000000b00573fffb12a6si9676567pgk.793.2023.09.13.06.12.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Sep 2023 06:12:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=TT9tpJpi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id BFD778039851; Wed, 13 Sep 2023 02:16:12 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239202AbjIMJP4 (ORCPT + 99 others); Wed, 13 Sep 2023 05:15:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44122 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239428AbjIMJPe (ORCPT ); Wed, 13 Sep 2023 05:15:34 -0400 Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D234319AA for ; Wed, 13 Sep 2023 02:14:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1694596493; x=1726132493; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=oG3Xgn0qqklcKHyYoc2L4LWX3+3T3UzA4KS7MUT9a8M=; b=TT9tpJpia45TLe4zCVhE69SnIM7MQ482Kbuz1gpHSFp9dXvbyA0OOFa5 qK5G8l5uRv4Ue/qIGTWm9ejxuWEaaEEFu0p5hxIBCVwKFxhj3pHSXQWCn gcDslwL9FTr41pzS1RXOUOcOHLmdxa/UJ7zsipB2layIC7s9gnwiNtkCn WKKgMTdXOPzq9eJCgeA6eRPFiWjYP6bjl6vQM2b0ljHdubZJZ/AaXxLrZ r09j/s9ID6sO3DXcROqyjDsUemmOX+16iBOYnkbvZAb6GxGHUlc4kcDn7 6zYMYQP3ECv7ud40L4x/+FOF8UshIMVc2qFZqrDEYANarG0CjJIBK/W7n A==; X-IronPort-AV: E=McAfee;i="6600,9927,10831"; a="375939453" X-IronPort-AV: E=Sophos;i="6.02,142,1688454000"; d="scan'208";a="375939453" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Sep 2023 02:14:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10831"; a="867712688" X-IronPort-AV: E=Sophos;i="6.02,142,1688454000"; d="scan'208";a="867712688" Received: from olindum-mobl1.ger.corp.intel.com (HELO [10.249.254.211]) ([10.249.254.211]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Sep 2023 02:14:48 -0700 Message-ID: Subject: Re: [PATCH drm-misc-next v3 6/7] drm/gpuvm: generalize dma_resv/extobj handling and GEM validation From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: Danilo Krummrich Cc: airlied@gmail.com, daniel@ffwll.ch, matthew.brost@intel.com, sarah.walker@imgtec.com, donald.robson@imgtec.com, boris.brezillon@collabora.com, christian.koenig@amd.com, faith.ekstrand@collabora.com, dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org Date: Wed, 13 Sep 2023 11:14:46 +0200 In-Reply-To: References: <20230909153125.30032-1-dakr@redhat.com> <20230909153125.30032-7-dakr@redhat.com> <701dfead-e240-b3fb-422c-d49fc7e04595@linux.intel.com> Organization: Intel Sweden AB, Registration Number: 556189-6027 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.4 (3.46.4-1.fc37) MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Wed, 13 Sep 2023 02:16:12 -0700 (PDT) SGkhCgpPbiBXZWQsIDIwMjMtMDktMTMgYXQgMDE6MzYgKzAyMDAsIERhbmlsbyBLcnVtbXJpY2gg d3JvdGU6Cj4gT24gVHVlLCBTZXAgMTIsIDIwMjMgYXQgMDk6MjM6MDhQTSArMDIwMCwgVGhvbWFz IEhlbGxzdHLDtm0gd3JvdGU6Cj4gPiAKPiA+IE9uIDkvMTIvMjMgMTg6NTAsIERhbmlsbyBLcnVt bXJpY2ggd3JvdGU6Cj4gPiA+IE9uIFR1ZSwgU2VwIDEyLCAyMDIzIGF0IDA2OjIwOjMyUE0gKzAy MDAsIFRob21hcyBIZWxsc3Ryw7ZtIHdyb3RlOgo+ID4gPiA+IEhpLCBEYW5pbG8sCj4gPiA+ID4g Cj4gPiA+ID4gT24gOS85LzIzIDE3OjMxLCBEYW5pbG8gS3J1bW1yaWNoIHdyb3RlOgo+ID4gPiA+ ID4gU28gZmFyIHRoZSBEUk0gR1BVVkEgbWFuYWdlciBvZmZlcnMgY29tbW9uIGluZnJhc3RydWN0 dXJlIHRvCj4gPiA+ID4gPiB0cmFjayBHUFUgVkEKPiA+ID4gPiA+IGFsbG9jYXRpb25zIGFuZCBt YXBwaW5ncywgZ2VuZXJpY2FsbHkgY29ubmVjdCBHUFUgVkEgbWFwcGluZ3MKPiA+ID4gPiA+IHRv IHRoZWlyCj4gPiA+ID4gPiBiYWNraW5nIGJ1ZmZlcnMgYW5kIHBlcmZvcm0gbW9yZSBjb21wbGV4 IG1hcHBpbmcgb3BlcmF0aW9ucwo+ID4gPiA+ID4gb24gdGhlIEdQVSBWQQo+ID4gPiA+ID4gc3Bh Y2UuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEhvd2V2ZXIsIHRoZXJlIGFyZSBtb3JlIGRlc2lnbiBw YXR0ZXJucyBjb21tb25seSB1c2VkIGJ5Cj4gPiA+ID4gPiBkcml2ZXJzLCB3aGljaAo+ID4gPiA+ ID4gY2FuIHBvdGVudGlhbGx5IGJlIGdlbmVyYWxpemVkIGluIG9yZGVyIHRvIG1ha2UgdGhlIERS TSBHUFVWQQo+ID4gPiA+ID4gbWFuYWdlcgo+ID4gPiA+ID4gcmVwcmVzZW50IGEgYmFzaWMgR1BV LVZNIGltcGxlbWVudGF0aW9uLiBJbiB0aGlzIGNvbnRleHQsCj4gPiA+ID4gPiB0aGlzIHBhdGNo IGFpbXMKPiA+ID4gPiA+IGF0IGdlbmVyYWxpemluZyB0aGUgZm9sbG93aW5nIGVsZW1lbnRzLgo+ ID4gPiA+ID4gCj4gPiA+ID4gPiAxKSBQcm92aWRlIGEgY29tbW9uIGRtYS1yZXN2IGZvciBHRU0g b2JqZWN0cyBub3QgYmVpbmcgdXNlZAo+ID4gPiA+ID4gb3V0c2lkZSBvZgo+ID4gPiA+ID4gwqDC oMKgwqAgdGhpcyBHUFUtVk0uCj4gPiA+ID4gPiAKPiA+ID4gPiA+IDIpIFByb3ZpZGUgdHJhY2tp bmcgb2YgZXh0ZXJuYWwgR0VNIG9iamVjdHMgKEdFTSBvYmplY3RzCj4gPiA+ID4gPiB3aGljaCBh cmUKPiA+ID4gPiA+IMKgwqDCoMKgIHNoYXJlZCB3aXRoIG90aGVyIEdQVS1WTXMpLgo+ID4gPiA+ ID4gCj4gPiA+ID4gPiAzKSBQcm92aWRlIGZ1bmN0aW9ucyB0byBlZmZpY2llbnRseSBsb2NrIGFs bCBHRU0gb2JqZWN0cyBkbWEtCj4gPiA+ID4gPiByZXN2IHRoZQo+ID4gPiA+ID4gwqDCoMKgwqAg R1BVLVZNIGNvbnRhaW5zIG1hcHBpbmdzIG9mLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiA0KSBQcm92 aWRlIHRyYWNraW5nIG9mIGV2aWN0ZWQgR0VNIG9iamVjdHMgdGhlIEdQVS1WTQo+ID4gPiA+ID4g Y29udGFpbnMgbWFwcGluZ3MKPiA+ID4gPiA+IMKgwqDCoMKgIG9mLCBzdWNoIHRoYXQgdmFsaWRh dGlvbiBvZiBldmljdGVkIEdFTSBvYmplY3RzIGlzCj4gPiA+ID4gPiBhY2NlbGVyYXRlZC4KPiA+ ID4gPiA+IAo+ID4gPiA+ID4gNSkgUHJvdmlkZSBzb21lIGNvbnZpbmllbmNlIGZ1bmN0aW9ucyBm b3IgY29tbW9uIHBhdHRlcm5zLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBSYXRoZXIgdGhhbiBiZWlu ZyBkZXNpZ25lZCBhcyBhICJmcmFtZXdvcmsiLCB0aGUgdGFyZ2V0IGlzIHRvCj4gPiA+ID4gPiBt YWtlIGFsbAo+ID4gPiA+ID4gZmVhdHVyZXMgYXBwZWFyIGFzIGEgY29sbGVjdGlvbiBvZiBvcHRp b25hbCBoZWxwZXIgZnVuY3Rpb25zLAo+ID4gPiA+ID4gc3VjaCB0aGF0Cj4gPiA+ID4gPiBkcml2 ZXJzIGFyZSBmcmVlIHRvIG1ha2UgdXNlIG9mIHRoZSBEUk0gR1BVVkEgbWFuYWdlcnMgYmFzaWMK PiA+ID4gPiA+IGZ1bmN0aW9uYWxpdHkgYW5kIG9wdC1pbiBmb3Igb3RoZXIgZmVhdHVyZXMgd2l0 aG91dCBzZXR0aW5nCj4gPiA+ID4gPiBhbnkgZmVhdHVyZQo+ID4gPiA+ID4gZmxhZ3MsIGp1c3Qg YnkgbWFraW5nIHVzZSBvZiB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMuCj4gPiA+ID4gPiAK PiA+ID4gPiA+IEJpZyBrdWRvcyB0byBCb3JpcyBCcmV6aWxsb24gZm9yIGhpcyBoZWxwIHRvIGZp Z3VyZSBvdXQKPiA+ID4gPiA+IGxvY2tpbmcgZm9yIGRyaXZlcnMKPiA+ID4gPiA+IHVwZGF0aW5n IHRoZSBHUFUgVkEgc3BhY2Ugd2l0aGluIHRoZSBmZW5jZSBzaWduYWxsaW5nIHBhdGguCj4gPiA+ ID4gPiAKPiA+ID4gPiA+IFN1Z2dlc3RlZC1ieTogTWF0dGhldyBCcm9zdCA8bWF0dGhldy5icm9z dEBpbnRlbC5jb20+Cj4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBEYW5pbG8gS3J1bW1yaWNoIDxk YWtyQHJlZGhhdC5jb20+Cj4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+IMKgwqAgZHJpdmVycy9ncHUv ZHJtL2RybV9ncHV2bS5jIHwgNTE2Cj4gPiA+ID4gPiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiA+ID4gPiA+IMKgwqAgaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmjCoMKgwqDC oCB8IDE5NyArKysrKysrKysrKysrKwo+ID4gPiA+ID4gwqDCoCAyIGZpbGVzIGNoYW5nZWQsIDcx MyBpbnNlcnRpb25zKCspCj4gPiA+ID4gPiAKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZHJtX2dwdXZtLmMKPiA+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2 bS5jCj4gPiA+ID4gPiBpbmRleCBmNDQxMTA0N2RiYjMuLjhlNjJhMDQzZjcxOSAxMDA2NDQKPiA+ ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1dm0uYwo+ID4gPiA+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9ncHV2bS5jCj4gPiA+ID4gPiBAQCAtNzMsNiArNzMsMjEgQEAK PiA+ID4gPiA+IMKgwqDCoCAqICZkcm1fZ2VtX29iamVjdCBsaXN0IG9mICZkcm1fZ3B1dm1fYm9z IGZvciBhbiBleGlzdGluZwo+ID4gPiA+ID4gaW5zdGFuY2Ugb2YgdGhpcwo+ID4gPiA+ID4gwqDC oMKgICogcGFydGljdWxhciBjb21iaW5hdGlvbi4gSWYgbm90IGV4aXN0ZW50IGEgbmV3IGluc3Rh bmNlCj4gPiA+ID4gPiBpcyBjcmVhdGVkIGFuZCBsaW5rZWQKPiA+ID4gPiA+IMKgwqDCoCAqIHRv IHRoZSAmZHJtX2dlbV9vYmplY3QuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiAmZHJtX2dw dXZtX2JvIHN0cnVjdHVyZXMsIHNpbmNlIHVuaXF1ZSBmb3IgYSBnaXZlbgo+ID4gPiA+ID4gJmRy bV9ncHV2bSwgYXJlIGFsc28gdXNlZAo+ID4gPiA+ID4gKyAqIGFzIGVudHJ5IGZvciB0aGUgJmRy bV9ncHV2bSdzIGxpc3RzIG9mIGV4dGVybmFsIGFuZAo+ID4gPiA+ID4gZXZpY3RlZCBvYmplY3Rz LiBUaG9zZQo+ID4gPiA+ID4gKyAqIGxpc3QgYXJlIG1haW50YWluZWQgaW4gb3JkZXIgdG8gYWNj ZWxlcmF0ZSBsb2NraW5nIG9mCj4gPiA+ID4gPiBkbWEtcmVzdiBsb2NrcyBhbmQKPiA+ID4gPiA+ ICsgKiB2YWxpZGF0aW9uIG9mIGV2aWN0ZWQgb2JqZWN0cyBib3VuZCBpbiBhICZkcm1fZ3B1dm0u IEZvcgo+ID4gPiA+ID4gaW5zdGFuY2UgdGhlIGFsbAo+ID4gPiA+ID4gKyAqICZkcm1fZ2VtX29i amVjdCdzICZkbWFfcmVzdiBvZiBhIGdpdmVuICZkcm1fZ3B1dm0gY2FuIGJlCj4gPiA+ID4gPiBs b2NrZWQgYnkgY2FsbGluZwo+ID4gPiA+ID4gKyAqIGRybV9ncHV2bV9leGVjX2xvY2soKS4gT25j ZSBsb2NrZWQgZHJpdmVycyBjYW4gY2FsbAo+ID4gPiA+ID4gZHJtX2dwdXZtX3ZhbGlkYXRlKCkg aW4KPiA+ID4gPiA+ICsgKiBvcmRlciB0byB2YWxpZGF0ZSBhbGwgZXZpY3RlZCAmZHJtX2dlbV9v YmplY3RzLiBJdCBpcwo+ID4gPiA+ID4gYWxzbyBwb3NzaWJsZSB0byBsb2NrCj4gPiA+ID4gPiAr ICogYWRkaXRpb25hbCAmZHJtX2dlbV9vYmplY3RzIGJ5IHByb3ZpZGluZyB0aGUKPiA+ID4gPiA+ IGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVycyB0bwo+ID4gPiA+ID4gKyAqIGRybV9ncHV2bV9leGVj X2xvY2soKSBhcyB3ZWxsIGFzIG9wZW4gY29kZSB0aGUgJmRybV9leGVjCj4gPiA+ID4gPiBsb29w IHdoaWxlIG1ha2luZwo+ID4gPiA+ID4gKyAqIHVzZSBvZiBoZWxwZXIgZnVuY3Rpb25zIHN1Y2gg YXMgZHJtX2dwdXZtX3ByZXBhcmVfcmFuZ2UoKQo+ID4gPiA+ID4gb3IKPiA+ID4gPiA+ICsgKiBk cm1fZ3B1dm1fcHJlcGFyZV9vYmplY3RzKCkuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBF dmVyeSBib3VuZCAmZHJtX2dlbV9vYmplY3QgaXMgdHJlYXRlZCBhcyBleHRlcm5hbCBvYmplY3QK PiA+ID4gPiA+IHdoZW4gaXRzICZkbWFfcmVzdgo+ID4gPiA+ID4gKyAqIHN0cnVjdHVyZSBpcyBk aWZmZXJlbnQgdGhhbiB0aGUgJmRybV9ncHV2bSdzIGNvbW1vbgo+ID4gPiA+ID4gJmRtYV9yZXN2 IHN0cnVjdHVyZS4KPiA+ID4gPiA+IMKgwqDCoCAqLwo+ID4gPiA+ID4gwqDCoCAvKioKPiA+ID4g PiA+IEBAIC00MjAsNiArNDM1LDIwIEBACj4gPiA+ID4gPiDCoMKgwqAgKiBTdWJzZXF1ZW50IGNh bGxzIHRvIGRybV9ncHV2bV9ib19vYnRhaW4oKSBmb3IgdGhlIHNhbWUKPiA+ID4gPiA+ICZkcm1f Z3B1dm0gYW5kCj4gPiA+ID4gPiDCoMKgwqAgKiAmZHJtX2dlbV9vYmplY3QgbXVzdCBiZSBhYmxl IHRvIG9ic2VydmUgcHJldmlvdXMKPiA+ID4gPiA+IGNyZWF0aW9ucyBhbmQgZGVzdHJ1Y3Rpb25z Cj4gPiA+ID4gPiDCoMKgwqAgKiBvZiAmZHJtX2dwdXZtX2JvcyBpbiBvcmRlciB0byBrZWVwIGlu c3RhbmNlcyB1bmlxdWUuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBUaGUgJmRybV9ncHV2 bSdzIGxpc3RzIGZvciBrZWVwaW5nIHRyYWNrIG9mIGV4dGVybmFsIGFuZAo+ID4gPiA+ID4gZXZp Y3RlZCBvYmplY3RzIGFyZQo+ID4gPiA+ID4gKyAqIHByb3RlY3RlZCBhZ2FpbnN0IGNvbmN1cnJl bnQgaW5zZXJ0aW9uIC8gcmVtb3ZhbCBhbmQKPiA+ID4gPiA+IGl0ZXJhdGlvbiBpbnRlcm5hbGx5 Lgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogSG93ZXZlciwgZHJpdmVycyBzdGlsbCBuZWVk IGVuc3VyZSB0byBwcm90ZWN0IGNvbmN1cnJlbnQKPiA+ID4gPiA+IGNhbGxzIHRvIGZ1bmN0aW9u cwo+ID4gPiA+ID4gKyAqIGl0ZXJhdGluZyB0aG9zZSBsaXN0cywgc3VjaCBhcyBkcm1fZ3B1dm1f dmFsaWRhdGUoKSBhbmQKPiA+ID4gPiA+ICsgKiBkcm1fZ3B1dm1fcHJlcGFyZV9vYmplY3RzKCku IEV2ZXJ5IHN1Y2ggZnVuY3Rpb24gY29udGFpbnMKPiA+ID4gPiA+IGEgcGFydGljdWxhcgo+ID4g PiA+ID4gKyAqIGNvbW1lbnQgYW5kIGxvY2tkZXAgY2hlY2tzIGlmIHBvc3NpYmxlLgo+ID4gPiA+ ID4gKyAqCj4gPiA+ID4gPiArICogRnVuY3Rpb25zIGFkZGluZyBvciByZW1vdmluZyBlbnRyaWVz IGZyb20gdGhvc2UgbGlzdHMsCj4gPiA+ID4gPiBzdWNoIGFzCj4gPiA+ID4gPiArICogZHJtX2dw dXZtX2JvX2V2aWN0KCkgb3IgZHJtX2dwdXZtX2JvX2V4dG9ial9hZGQoKSBtYXkgYmUKPiA+ID4g PiA+IGNhbGxlZCB3aXRoIGV4dGVybmFsCj4gPiA+ID4gPiArICogbG9ja3MgYmVpbmcgaGVsZCwg ZS5nLiBpbiBvcmRlciB0byBhdm9pZCB0aGUKPiA+ID4gPiA+IGNvcnJlc3BvbmRpbmcgbGlzdCB0 byBiZQo+ID4gPiA+ID4gKyAqIChzYWZlbHkpIG1vZGlmaWVkIHdoaWxlIHBvdGVudGlhbGx5IGJl aW5nIGl0ZXJuYXRlZCBieQo+ID4gPiA+ID4gb3RoZXIgQVBJIGZ1bmN0aW9ucy4KPiA+ID4gPiA+ ICsgKiBIb3dldmVyLCB0aGlzIGlzIGVudGlyZWx5IG9wdGlvbmFsLgo+ID4gPiA+ID4gwqDCoMKg ICovCj4gPiA+ID4gPiDCoMKgIC8qKgo+ID4gPiA+ID4gQEAgLTYzMiw2ICs2NjEsMTMxIEBACj4g PiA+ID4gPiDCoMKgwqAgKsKgwqDCoH0KPiA+ID4gPiA+IMKgwqDCoCAqLwo+ID4gPiA+ID4gKy8q Kgo+ID4gPiA+ID4gKyAqIGdldF9uZXh0X3ZtX2JvX2Zyb21fbGlzdCgpIC0gZ2V0IHRoZSBuZXh0 IHZtX2JvIGVsZW1lbnQKPiA+ID4gPiA+ICsgKiBAX19ncHV2bTogVGhlIEdQVSBWTQo+ID4gPiA+ ID4gKyAqIEBfX2xpc3RfbmFtZTogVGhlIG5hbWUgb2YgdGhlIGxpc3Qgd2UncmUgaXRlcmF0aW5n IG9uCj4gPiA+ID4gPiArICogQF9fbG9jYWxfbGlzdDogQSBwb2ludGVyIHRvIHRoZSBsb2NhbCBs aXN0IHVzZWQgdG8gc3RvcmUKPiA+ID4gPiA+IGFscmVhZHkgaXRlcmF0ZWQgaXRlbXMKPiA+ID4g PiA+ICsgKiBAX19wcmV2X3ZtX2JvOiBUaGUgcHJldmlvdXMgZWxlbWVudCB3ZSBnb3QgZnJvbQo+ ID4gPiA+ID4gZHJtX2dwdXZtX2dldF9uZXh0X2NhY2hlZF92bV9ibygpCj4gPiA+ID4gPiArICoK PiA+ID4gPiA+ICsgKiBUaGlzIGhlbHBlciBpcyBoZXJlIHRvIHByb3ZpZGUgbG9ja2xlc3MgbGlz dCBpdGVyYXRpb24uCj4gPiA+ID4gPiBMb2NrbGVzcyBhcyBpbiwgdGhlCj4gPiA+ID4gPiArICog aXRlcmF0b3IgcmVsZWFzZXMgdGhlIGxvY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgcGlja2luZyB0aGUK PiA+ID4gPiA+IGZpcnN0IGVsZW1lbnQgZnJvbQo+ID4gPiA+ID4gKyAqIHRoZSBsaXN0LCBzbyBs aXN0IGluc2VydGlvbiBkZWxldGlvbiBjYW4gaGFwcGVuCj4gPiA+ID4gPiBjb25jdXJyZW50bHku Cj4gPiA+ID4gQXJlIHRoZSBsaXN0IHNwaW5sb2NrcyBuZWVkZWQgZm9yIHRoYXQgYXN5bmMgc3Rh dGUgdXBkYXRlIGZyb20KPiA+ID4gPiB3aXRoaW4gdGhlCj4gPiA+ID4gZG1hLWZlbmNlIGNyaXRp Y2FsIHNlY3Rpb24gd2UndmUgZGlzY3Vzc2VkIHByZXZpb3VzbHk/Cj4gPiA+IFllcywgYnV0IGFs c28gZm9yIG90aGVyIHJlYXNvbnMsIHNlZSBiZWxvdy4KPiA+ID4gCj4gPiA+ID4gT3RoZXJ3aXNl IGl0IHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIHByb3RlY3QgdGhlIGxpc3RzIHdpdGggdGhlCj4g PiA+ID4gZ3B1dm0ncyByZXN2Cj4gPiA+ID4gKG9yIGZvciB0aGUgZXh0b2JqIGxpc3Qgd2l0aCBh biBvdXRlciBsb2NrKS4KPiA+ID4gPiAKPiA+ID4gPiBJZiB0aG9zZSBzcGlubG9ja3MgYXJlIHN0 aWxsIG5lZWRlZCBpbiBzb21lIHNpdHVhdGlvbnMsIHBlcmhhcHMKPiA+ID4gPiBjb3VsZCB3ZQo+ ID4gPiA+IGhhdmUgYW4gb3B0aW9uIHRvIHNldCB0aGVtIHRvIE5VTEwgKExpa2UgSUlSQyB0aGUg bWFwbGUgdHJlZQo+ID4gPiA+IGFsbG93cyBmb3IpPwo+ID4gPiBUaGUgZXZpY3Qgc3BpbmxvY2sg aXMgbmVlZGVkIGluIGFueSBjYXNlLCBzaW5jZSBpbgo+ID4gPiBkcm1fZ3B1dm1fYm9fZXZpY3Qo KSB3ZSdyZQo+ID4gPiBob2xkaW5nIG9ubHkgdGhlIGRtYS1yZXN2IGxvY2sgZnJvbSB0aGUgQk8g dGhpcyBmdW5jdGlvbiBnZXRzCj4gPiA+IGNhbGxlZCBmb3IuIEhlbmNlLAo+ID4gPiB0aGUgc3Bp bmxvY2sgcHJvdGVjdHMgY29uY3VycmVudCBkcm1fZ3B1dm1fYm9fZXZpY3QoKSBjYWxscyB3aXRo Cj4gPiA+IGRpZmZlcmVudCBCT3MuCj4gPiBOby4gT25seSBpZiB5b3UgdHJ5IHRvIGFkZCBleHRl cm5hbCBvYmplY3RzIHRvIHRoZSB2bSdzIGV2aWN0IGxpc3QKPiA+IGZyb20KPiA+IHdpdGhpbiB0 aGUgZXZpY3QgY29kZS4gVGhhdCdzIG5vdCBuZWNlc3Nhcnkgc2luY2UgeW91IGxvb3AgdGhyb3Vn aAo+ID4gYWxsCj4gPiBleHRlcm5hbCBvYmplY3RzIGFueXdheSB3aGVuIGxvY2tpbmcgdGhlbSBz byBhbiAiZXZpY3RlZCIgYm9vbCBpbgo+ID4gdGhlIHZtX2JvLAo+ID4gcHJvdGVjdGVkIGJ5IHRo ZSBibyByZXN2IHdvdWxkIGJlIHN1ZmZpY2llbnQuIFRoZSBleHRvYmogbG9ja2luZwo+ID4gbG9v cCBjYW4KPiA+IHRoZW4gYWRkIHRoZSBibyB0byB0aGUgZXZpY3RlZCBsaXN0Lgo+IAo+IEFuZCB2 YWxpZGF0ZSgpIGNhbiByZW1vdmUgaXQgd2hpbGUgc3RpbGwgaG9sZGluZyBhbGwgZG1hLXJlc3Yg bG9ja3MsCj4gbmVhdCEKPiBIb3dldmVyLCB3aGF0IGlmIHR3byB0YXNrcyBhcmUgdHJ5aW5nIHRv IGxvY2sgdGhlIFZBIHNwYWNlCj4gY29uY3VycmVudGx5PyBXaGF0Cj4gZG8gd2UgZG8gd2hlbiB0 aGUgZHJtX2dwdXZtX2JvJ3MgcmVmY291bnQgZHJvcHMgdG8gemVybyBpbgo+IGRybV9ncHV2YV91 bmxpbmsoKT8KPiBBcmUgd2UgZ3VhcmFudGVlZCB0aGF0IGF0IHRoaXMgcG9pbnQgb2YgdGltZSB0 aGUgZHJtX2dwdXZtX2JvIGlzIG5vdAo+IG9uIHRoZQo+IGV2aWN0ZWQgbGlzdD8gQmVjYXVzZSBv dGhlcndpc2Ugd2Ugd291bGQgY2FsbCBkcm1fZ3B1dm1fYm9fZGVzdHJveSgpCj4gd2l0aCB0aGUK PiBkbWEtcmVzdiBsb2NrIGhlbGQsIHdoaWNoIHdvdWxkbid0IGJlIGFsbG93ZWQsIHNpbmNlCj4g ZHJtX2dwdXZtX2JvX2Rlc3Ryb3koKQo+IG1pZ2h0IGRyb3AgdGhlIGxhc3QgcmVmZXJlbmNlIHRv IHRoZSBkcm1fZ2VtX29iamVjdCBhbmQgaGVuY2Ugd2UnZAo+IHBvdGVudGlhbGx5Cj4gZnJlZSB0 aGUgZG1hLXJlc3YgbG9jayB3aGlsZSBob2xkaW5nIGl0LCBhdCBsZWFzdCBpZiBpdCdzIGFuIGV4 dGVybmFsCj4gb2JqZWN0LgoKRWFzaWVzdCB3YXkgaW4gdGhpcyBzY2hlbWUgaXMgdG8gdGhpbmsg b2YgdGhlIGxpc3RzIGFzIGJlaW5nIHByb3RlY3RlZApieSB0aGUgdm0ncyByZXN2IGxvY2suIFRo YXQgbWVhbnMgYW55Ym9keSBjYWxsaW5nIHVubGluaygpIG11c3QgYWxzbwpob2xkIHRoZSB2bSdz IHJlc3YgbG9jay4gKFdoaWNoIGlzIE9LIGZyb20gYW4gVUFGIHBvaW50IG9mIHZpZXcsIGJ1dApw ZXJoYXBzIG5vdCBmcm9tIGEgbG9ja2luZyBpbnZlcnNpb24gUE9XIGZyb20gYW4gYXN5bmMgbGlz dCB1cGRhdGUpLgoKPiAKPiA+ID4gCj4gPiA+IEZvciBleHRvYmpzIGFuIG91dGVyIGxvY2sgd291 bGQgYmUgZW5vdWdoIGluIGNhc2Ugb2YgWGUsIGJ1dCBJCj4gPiA+IHJlYWxseSB3b3VsZCBub3QK PiA+ID4gbGlrZSB0byBhZGQgZXZlbiBtb3JlIGNvbXBsZXhpdHkganVzdCB0byBnZXQgdGhlIHNw aW5sb2NrIG91dCBvZgo+ID4gPiB0aGUgd2F5IGluIGNhc2UKPiA+ID4gdGhlIGRyaXZlciBhbHJl YWR5IGhhcyBhbiBvdXRlciBsb2NrIHByb3RlY3RpbmcgdGhpcyBwYXRoLgo+ID4gCj4gPiBJIG11 c3QgZGlzYWdyZWUgaGVyZS4gVGhlc2Ugc3BpbmxvY2tzIGFuZCBhdG9taWMgb3BlcmF0aW9ucyBh cmUKPiA+IHByZXR0eQo+ID4gY29zdGx5IGFuZCBhcyBkaXNjdXNzZWQgZWFybGllciB0aGlzIHR5 cGUgb2YgbG9ja2luZyB3YXMgdGhlIHJlYXNvbgo+ID4gKGF0Cj4gPiBsZWFzdCBhY2NvcmRpbmcg dG8gdGhlIGNvbW1pdCBtZXNzYWdlKSB0aGF0IG1hZGUgQ2hyaXN0aWFuIGRyb3AgdGhlCj4gPiBY QXJyYXkKPiA+IHVzZSBpbiBkcm1fZXhlYyBmb3IgdGhlIHNhbWUgc2V0IG9mIG9iamVjdHM6ICJU aGUgbG9ja2luZyBvdmVyaGVhZAo+ID4gaXMKPiA+IHVuZWNlc3NhcnkgYW5kIG1lYXN1cmFibGUi LiBJTUhPIHRoZSBzcGlubG9jayBpcyB0aGUgYWRkZWQKPiA+IGNvbXBsZXhpdHkgYW5kIGEKPiA+ IHNpbmdsZSB3aWRlIGxvY2sgZm9sbG93aW5nIHRoZSBkcm0gbG9ja2luZyBndWlkZWxpbmVzIHNl dCBvdXQgYnkKPiA+IERhbmllbCBhbmQKPiA+IERhdmlkIHNob3VsZCByZWFsbHkgYmUgdGhlIGRl ZmF1bHQgY2hvaWNlIHdpdGggYW4gb3B0LWluIGZvciBhCj4gPiBzcGlubG9jayBpZgo+ID4gbmVl ZGVkIGZvciBhc3luYyBhbmQgcHVzaGluZyBvdXQgdG8gYSB3cSBpcyBub3QgYW4gb3B0aW9uLgo+ IAo+IEZvciB0aGUgZXh0ZXJuYWwgb2JqZWN0IGxpc3QgYW4gb3V0ZXIgbG9jayB3b3VsZCB3b3Jr IGFzIGxvbmcgYXMgaXQncwo+IG5vdCB0aGUKPiBkbWEtcmVzdiBsb2NrIG9mIHRoZSBjb3JyZXNw b25kaW5nIEdFTSBvYmplY3QsIHNpbmNlIGhlcmUgd2UgYWN0dWFsbHkKPiBuZWVkIHRvCj4gcmVt b3ZlIHRoZSBsaXN0IGVudHJ5IGZyb20gdGhlIGV4dGVybmFsIG9iamVjdCBsaXN0IG9uCj4gZHJt X2dwdXZtX2JvX2Rlc3Ryb3koKS4KPiBJdCdzIGp1c3QgYSBiaXQgd2VpcmQgZGVzaWduIHdpc2Ug dGhhdCBkcml2ZXJzIHdvdWxkIG5lZWQgdG8gdGFrZQo+IHRoaXMgb3V0ZXIKPiBsb2NrIG9uOgo+ IAo+IC0gZHJtX2dwdXZtX2JvX2V4dG9ial9hZGQoKQo+IC0gZHJtX2dwdXZtX2JvX2Rlc3Ryb3ko KcKgwqDCoMKgwqDCoMKgwqAoYW5kIGhlbmNlIGFsc28gZHJtX2dwdXZtX2JvX3B1dCgpKQo+IC0g ZHJtX2dwdXZhX3VubGluaygpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKGJlY2F1c2UgaXQgbmVl ZHMgdG8gY2FsbAo+IGRybV9ncHV2bV9ib19wdXQoKSkKPiAtIGRybV9ncHV2bV9leGVjX2xvY2so KQo+IC0gZHJtX2dwdXZtX2V4ZWNfbG9ja19hcnJheSgpCj4gLSBkcm1fZ3B1dm1fcHJlcGFyZV9y YW5nZSgpCj4gCj4gR2l2ZW4gdGhhdCBpdCBzZWVtcyByZWFzb25hYmxlIHRvIGRvIGFsbCB0aGUg cmVxdWlyZWQgbG9ja2luZwo+IGludGVybmFsbHkuCgpGcm9tIGEgZGVzaWduIFBPVywgdGhlcmUg aGFzIGJlZW4gYSBjbGVhciBkaXJlY3Rpb24gaW4gWEUgdG8gbWFrZQp0aGluZ3Mgc2ltaWxhciB0 byBtbWFwKCkgLyBtdW5tYXAoKSwgc28gdGhpcyBvdXRlciBsb2NrLCB3aGljaCBpbiBYZSBpcwph biByd3NlbSwgaXMgdXNlZCBpbiBhIHNpbWlsYXIgd2F5IGFzIHRoZSBtbWFwX2xvY2suIEl0J3Mg cHJvdGVjdGluZwp0aGUgcGFnZS10YWJsZSBzdHJ1Y3R1cmVzIGFuZCB2bWEgcmIgdHJlZSwgdGhl IHVzZXJwdHIgc3RydWN0dXJlcyBhbmQKdGhlIGV4dG9iaiBsaXN0LiBCYXNpY2FsbHkgaXQncyB0 YWtlbiBlYXJseSBpbiB0aGUgZXhlYyBJT0NUTCwgdGhlClZNX0JJTkQgaW9jdGwsIHRoZSBjb21w dXRlIHJlYmluZCB3b3JrZXIgYW5kIHRoZSBwYWdlZmF1bHQgaGFuZGxlciwgc28KYWxsIG9mIHRo ZSBhYm92ZSBhcmUganVzdCBhc3NlcnRpbmcgdGhhdCBpdCBpcyB0YWtlbiBpbiB0aGUgY29ycmVj dAptb2RlLgoKQnV0IHN0cmljdGx5IHdpdGggdGhpcyBzY2hlbWUgb25lIGNvdWxkIGFsc28gdXNl IHRoZSB2bSdzIGRtYV9yZXN2IGZvcgp0aGUgZXh0b2JqIGxpc3Qgc2luY2Ugd2l0aCBkcm1fZXhl YywgaXQncyBsb2NrZWQgYmVmb3JlIHRyYXZlcnNpbmcgdGhlCmxpc3QuCgpUaGUgd2hvbGUgcG9p bnQgb2YgdGhpcyBzY2hlbWUgaXMgdG8gcmVseSBvbiBsb2NrcyB0aGF0IHlvdSBhbHJlYWR5IGFy ZQpzdXBwb3NlZCB0byBiZSBob2xkaW5nIGZvciB2YXJpb3VzIHJlYXNvbnMgYW5kIGlzIHNpbXBs ZSB0byBjb21wcmVoZW5kLgoKPiAKPiBJbiBvcmRlciB0byBhdCBsZWFzdCBwbGFjZSBsb2NrZGVw IGNoZWNrcywgdGhlIGRyaXZlciB3b3VsZCBuZWVkIHRvCj4gc3VwcGx5IHRoZQo+IGNvcnJlc3Bv bmRpbmcgbG9jaydzIGxvY2tkZXBfbWFwLCBiZWNhdXNlIHRoZSBHUFVWTSBvdGhlcndpc2UgZG9l c24ndAo+IGtub3cgYWJvdXQKPiB0aGUgbG9jay4KClllcywgdGhhdCBzb3VuZHMgcmVhc29uYWJs ZS4gT25lIGxvY2tkZXAgbWFwIHBlciBsaXN0LgoKPiAKPiBPdXQgb2YgY3VyaW9zaXR5LCB3aGF0 IGlzIHRoZSBvdmVyaGVhZCBvZiBhIHNwaW5fbG9jaygpIHRoYXQgZG9lc24ndAo+IG5lZWQgdG8K PiBzcGluPyAKCkkgZ3Vlc3MgaXQncyBoYXJkIHRvIHRlbGwgZXhhY3RseSwgYnV0IGl0IGlzIG11 Y2ggbG93ZXIgb24gbW9kZXJuIHg4Ngp0aGFuIHdoYXQgaXQgdXNlZCB0byBiZS4gTm90IHN1cmUg YWJvdXQgQVJNLCB3aGljaCBpcyB0aGUgb3RoZXIKYXJjaGl0ZWN0dXJlIGltcG9ydGFudCB0byB1 cy4gSSBmaWd1cmUgaWYgdGhlcmUgaXMgbGl0dGxlIGNhY2hlLWxpbmUKYm91bmNpbmcgdGhlIG1h aW4gb3ZlcmhlYWQgY29tZXMgZnJvbSB0aGUgaW1wbGllZCBiYXJyaWVycy4KCj4gCj4gPiAKPiA+ IEEgcHJldHR5IHNpbXBsZSB3YXkgdGhhdCB3b3VsZCBub3QgYWRkIG11Y2ggY29kZSB3b3VsZCBi ZQo+ID4gCj4gPiBzdGF0aWMgdm9pZCBncHV2bV9jb25kX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3Qg ZHJtX2dwdXZtICpncHV2bSwKPiA+IHNwaW5sb2NrX3QKPiA+ICpsb2NrKQo+ID4gCj4gPiB7Cj4g PiAKPiA+IMKgwqDCoCBpZiAoIWdwdXZtLT5yZXN2X3Byb3RlY3RlZF9saXN0cykKPiA+IMKgwqDC oCDCoMKgwqAgc3Bpbl9sb2NrKGxvY2spOwo+ID4gCj4gPiB9Cj4gPiAKPiA+ID4gPiBGb3Igc3Vj aCBkcml2ZXJzLCB0aGF0IHdvdWxkIHJlcXVpcmUgYW55Ym9keSBjYWxsaW5nIHVubGluayB0bwo+ ID4gPiA+IGhvbGQgdGhlIHZtJ3MKPiA+ID4gPiByZXN2LCB0aG91Z2guCj4gPiA+IEluIFY0IEkg d2FudCB0byBnbyBiYWNrIHRvIGhhdmluZyBhIGRlZGljYXRlZCBsb2NrIGZvciB0aGUgR0VNcwo+ ID4gPiBncHV2YSBsaXN0IChvcgo+ID4gPiBWTV9CTyBsaXN0IHRvIGJlIG1vcmUgcHJlY2lzZSku IFdlIGNhbid0IGp1c3QgdXNlIHRoZSBkbWEtcmVzdgo+ID4gPiBsb2NrIGZvciB0aGF0Cj4gPiA+ IHdpdGggVk1fQk8gYWJzdHJhY3Rpb25zLCBiZWNhdXNlIG9uIGRlc3RydWN0aW9uIG9mIGEgVk1f Qk8gd2UKPiA+ID4gb3RoZXJ3aXNlIHdvdWxkbid0Cj4gPiA+IGJlIGFsbG93ZWQgdG8gYWxyZWFk eSBob2xkIHRoZSBkbWEtcmVzdiBsb2NrLiBUaGF0J3MgdGhlIGZpeCBJCj4gPiA+IHdhcyByZWZl cnJpbmcgdG8KPiA+ID4gZWFybGllci4KPiA+IAo+ID4gWWVhaCwgSSBjYW4gc2VlIHRoZSBuZWVk IGZvciBhIGRlZGljYXRlZCBsb2NrIGZvciB0aGUgR0VNJ3MgZ3B1dmEKPiA+IGxpc3QsIGJ1dAo+ ID4gaG9sZGluZyB0aGUgdm0ncyBkbWEtcmVzdiBsb2NrIGFjcm9zcyB0aGUgdW5saW5rIHNob3Vs ZG4ndCBiZSBhCj4gPiBwcm9ibGVtLiBXZQo+ID4gbWF5IGZyZWUgdGhlIG9iamVjdCBhbmQgYSBw b2ludGVyIHRvIHRoZSB2bSdzIHJlc3YgZHVyaW5nIHVubGluawo+ID4gYnV0IHdlCj4gPiBkb24n dCBmcmVlIHRoZSB2bSdzIHJlc3YuwqAgSXQnZCBiZSBhIG1hdHRlciBvZiBlbnN1cmluZyB0aGF0 IGFueQo+ID4gY2FsbHMgdG8KPiA+IHVubGluayBmcm9tICp3aXRoaW4qIGRybV9ncHV2bSBhbGxv d3MgaXQgdG8gYmUgaGVsZC4KPiAKPiBEcml2ZXJzIGNhbGxpbmcgdW5saW5rKCkgZnJvbSB0aGUg ZmVuY2Ugc2lnbmFsaW5nIHBhdGggY2FuJ3QgdXNlIHRoZQo+IFZNJ3MKPiBkbWEtcmVzdiBsb2Nr LgoKWWVzLCB0aGF0IG1hZGUgbWUgYSBiaXQgY3VyaW91cyBiZWNhdXNlIGluIHRoZSBjdXJyZW50 IHZlcnNpb24gdGhlIGNvZGUKcmVxdWlyZWQgdGhlIG9iamVjdCdzIGRtYV9yZXN2IGZvciB1bmxp bmsoKSB3aGljaCBjYW4ndCBiZSBncmFiYmVkCmVpdGhlciBmcm9tIHRoZSBmZW5jZSBzaWduYWxp bmcgcGF0aC4gU28gYXJlIHRoZXJlIGFueSBkcml2ZXJzIGFjdHVhbGx5CndhbnRpbmcgdG8gZG8g dGhhdD8gSWYgc28sIHRoZXkgd2lsbCBlaXRoZXIgbmVlZCB0byByZXNvcnQgdG8gdGhlCmN1cnJl bnQgc3BpbmxvY2sgc29sdXRpb24gb3IgdGhleSB3aWxsIG5lZWQgdG8gY2FsbCB1bmxpbmsgZnJv bSBhCndvcmtxdWV1ZSBpdGVtLiAKPiAKPiBBbHNvLCB3aGF0IGlmIHRoZSBvYmplY3QgaXMgYW4g ZXh0ZXJuYWwgb2JqZWN0PyBXZSBjYW4ndCB1c2UgdGhlIFZNJ3MKPiBkbWEtcmVzdgo+IGxvY2sg aGVyZS4KCldoeT8gVHlwaWNhbGx5IChzeW5jKSB1bmxpbmsgaXMgb25seSBldmVyIGNhbGxlZCBm cm9tIGFuIHVuYmluZC1saWtlCm9wZXJhdGlvbiB3aGVyZSBpdCBzaG91bGQgYmUgdHJpdmlhbCB0 byBncmFiIHRoZSB2bSdzIHJlc3YuIE9yLCBmb3IKdGhhdCBtYXR0ZXIgYW55IG91dGVyIGxvY2sg cHJvdGVjdGluZyB0aGUgZXh0b2JqIGxpc3QuIFJ1bGUgd291bGQgYmUKdGhlIGRybV9ncHV2bV9i bzo6ZW50cnk6OmV4dG9iaiAgYW5kIGRybV9ncHV2bV9ibzo6ZW50cnk6OmV2aWN0IHdvdWxkCmJl IHByb3RlY3RlZCBieSBlaXRoZXIgdGhlIHZtJ3MgZG1hX3Jlc3YgKG9yIHBvc3NpYmx5IGFuIG91 dGVyIGxvY2sgaW4KdGhlIGNhc2Ugb2YgdGhlIGV4dG9iaiBsaXN0KS4KCj4gIEFuZCB3ZSBjYW4n dCBoYXZlIHRoZSBHRU0gb2JqcyBkbWEtcmVzdiBsb2NrIGhlbGQgd2hlbiBjYWxsaW5nCj4gdW5s aW5rKCksIHNpbmNlIHVubGluaygpIGNhbGxzIGRybV9ncHV2bV9ib19wdXQoKSwgd2hpY2ggaWYg dGhlCj4gcmVmY291bnQgZHJvcHMKPiB0byB6ZXJvIGNhbGxzIGRybV9ncHV2bV9ib19kZXN0cm95 KCkgYW5kIGRybV9ncHV2bV9ib19kZXN0cm95KCkgbWlnaHQKPiBkcm9wIHRoZQo+IGxhc3QgcmVm ZXJlbmNlIG9mIHRoZSBHRU0gb2JqZWN0LgoKWWVzLCBidXQgdGhpcyBpcyBhIGRpZmZlcmVudCBw cm9ibGVtIGFzIHRvIHdoYXQgZXhhY3RseSBwcm90ZWN0cwpkcm1fZ3B1dm1fYm86OmVudHJ5Ojpn ZW0uIEVpdGhlciBhcyB5b3Ugc3VnZ2VzdCBhbiBpbnRlcm5hbCBwZXIgYm8gbGlzdApsb2NrLCBv ciBpZiB3ZSB3YW50IHRvIGtlZXAgdGhlIGJvJ3MgZG1hX3Jlc3Ygd2UgbmVlZCB0byBlbnN1cmUg dGhhdAp0aGUgY2FsbGVyIG9mIGRtYV9yZXN2X3VubG9jayhvYmotPnJlc3YpIGFjdHVhbGx5IHJl ZmNvdW50cyBpdHMgb2JqCnBvaW50ZXIsIGFuZCBkb2Vzbid0IGltcGxpY2l0bHkgcmVseSBvbiB0 aGUgZ3B1dm1fYm8ncyByZWZjb3VudCAoSSBrbm93CkJvcmlzIGRpZG4ndCBsaWtlIHRoYXQsIGJ1 dCByZXF1aXJpbmcgYW4gZXhwbGljaXQgcmVmY291bnQgZm9yIGEKcG9pbnRlciB5b3UgZGVyZWZl cmVuY2UgdW5sZXNzIHlvdSdyZSB1bmRlciBhIGxvY2sgdGhhdCBlbnN1cmVzIGtlZXBpbmcKdGhl IG9iamVjdCBhbGl2ZSBpcyBwcmV0dHkgbXVjaCByZXF1aXJlZD8pIEJ1dCBhbnl3YXkgZm9yIHRo ZQpkcm1fZ3B1dm1fYm86OmVudHJ5OjpnZW0gbGlzdCBwcm90ZWN0aW9uIChibyByZXN2IG9yIGlu dGVybmFsIHNwaW5sb2NrKQpJIGRvbid0IGhhdmUgYSBzdHJvbmcgcHJlZmVyZW5jZS4KCj4gIEFs bCB0aG9zZSBwcm9ibGVtcyBnbyBhd2F5IHdpdGggYSBkZWRpY2F0ZWQKPiBHRU0gZ3B1dmEgbGlz dCBsb2NrLgoKSSBkb24ndCB0aGluayB0aGVzZSBhcmUgcmVhbCBwcm9ibGVtcy4KV2l0aCB0aGUg ZXhjZXB0b24gb2YgdGhlIGV2aWN0aW9uIGxpc3QgInRyaWNrIiB3aGVyZSB3ZSBjdXJyZW50bHkg aGF2ZQpzbGlnaHRseSBkaWZmZXJlbnQgYXBwcm9hY2ggdG8gY29sbGVjdCBleHRlcm5hbCBib3Mg bmVlZGluZyByZWJpbmRpbmcsCndlIGhhdmUgdGhpcyB3b3JraW5nIGZpbmUuCgpUQkggSSB0aGlu ayBwcmV0dHkgbXVjaCB0aGUgb25seSBzaXR1YXRpb24gd2hlcmUgdGhlIHNwaW5sb2NrIGlzIG5l ZWRlZAppcyBmb3IgYXN5bmMgdXBkYXRlcyBvZiB0aGVzZSBsaXN0cywgdW5sZXNzIGEgd3EgaXRl bSBjYW4gYmUgdXNlZCBmb3IKdGhhdCwgYnV0IGl0IGRvZXNuJ3QgcmVhbGx5IHNlZW0gbGlrZSB0 aGUgY3VycmVudCBjb2RlIGFsbG93cyBmb3Igc3VjaAp1cGRhdGVzIGFueXdheT8gSXQgY29tcGxp Y2F0ZXMgdGhlIGNvZGUgYSBsb3QsIGFkZHMgb3ZlcmhlYWQgYW5kIGFsc28KYWRkcyB0aGUgcmVx dWlyZW1lbnQgZm9yIHJlZmNvdW50aW5nIGR1cmluZyBsaXN0IHRyYXZlcnNhbC4KCi9UaG9tYXMK Cj4gCj4gPiAKPiA+IC9UaG9tYXMKPiA+IAo+ID4gCj4gPiA+ID4gSXQgc2VlbXMgdGhhdCB3aXRo IHRoYXQgYWxzbyB0aGUgcmVmY291bnQgY291bGQgYmUgbWFrZSBub24tCj4gPiA+ID4gYXRvbWlj Lgo+ID4gPiA+IAo+ID4gPiA+IEFsbCBpbiB0aGUgc3Bpcml0IG9mIHRoZSBkcm0gbG9ja2luZyBn dWlkZWxpbmVzICJ1c2UgYmlnIGxvY2tzCj4gPiA+ID4gd2hlbgo+ID4gPiA+IHBvc3NpYmxlIi4K PiA+ID4gPiBMb3dlciBsZXZlbCBsb2NrcyBvbmx5IHdoZW4gbmVjZXNzYXJ5IGZvciBwZXJmb3Jt YW5jZSBvcgo+ID4gPiA+IGxvY2tpbmcgaW52ZXJzaW9uPwo+ID4gPiA+IAo+ID4gPiA+IC9UaG9t YXMKPiA+ID4gPiAKPiA+ID4gPiAKPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIEVsZW1lbnRz IHBvcHBlZCBmcm9tIHRoZSBvcmlnaW5hbCBsaXN0IGFyZSBrZXB0IGluIGEKPiA+ID4gPiA+IGxv Y2FsIGxpc3QsIHNvIHJlbW92YWwKPiA+ID4gPiA+ICsgKiBhbmQgaXNfZW1wdHkgY2hlY2tzIGNh biBzdGlsbCBoYXBwZW4gd2hpbGUgd2UncmUKPiA+ID4gPiA+IGl0ZXJhdGluZyB0aGUgbGlzdC4K PiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICsjZGVmaW5lIGdldF9uZXh0X3ZtX2JvX2Zyb21fbGlz dChfX2dwdXZtLCBfX2xpc3RfbmFtZSwKPiA+ID4gPiA+IF9fbG9jYWxfbGlzdCwgX19wcmV2X3Zt X2JvKcKgwqDCoMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAoe8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ3B1dm1fYm8KPiA+ID4gPiA+ICpf X3ZtX2JvO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9ncHV2 bV9ib19wdXQoX19wcmV2X3ZtX2JvKTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiA+ ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3Bpbl9sb2NrKCYoX19ncHV2bSktCj4gPiA+ID4gPiA+X19saXN0X25h bWUubG9jayk7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB3aGlsZSAoIWxpc3RfZW1wdHkoJihfX2dwdXZtKS0KPiA+ID4gPiA+ID5fX2xpc3RfbmFtZS5s aXN0KSkge8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX192bV9i byA9Cj4gPiA+ID4gPiBsaXN0X2ZpcnN0X2VudHJ5KCYoX19ncHV2bSktPl9fbGlzdF9uYW1lLmxp c3QswqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QKPiA+ID4gPiA+IGRybV9ncHV2bV9ibyzCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiA+ID4gPiBsaXN0LmVudHJ5Ll9fbGlzdF9uYW1lKTvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYKPiA+ID4gPiA+IChkcm1fZ3B1dm1fYm9fZ2V0 X3VubGVzc196ZXJvKF9fdm1fYm8pKQo+ID4gPiA+ID4ge8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X21vdmVfdGFpbCgmKF9fdm1f Ym8pLQo+ID4gPiA+ID4gPmxpc3QuZW50cnkuX19saXN0X25hbWUswqDCoMKgwqDCoMKgXAo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gPiA+ID4gX19sb2Nh bF9saXN0KTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgCj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZQo+ID4gPiA+ID4ge8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBsaXN0X2RlbF9pbml0KCYoX192bV9ibyktCj4gPiA+ID4gPiA+bGlzdC5lbnRyeS5fX2xp c3RfbmFtZSk7wqDCoMKgwqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX192bV9ibyA9Cj4gPiA+ID4g PiBOVUxMO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+ID4g PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oFwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHNwaW5fdW5sb2NrKCYoX19ncHV2bSktCj4gPiA+ID4gPiA+X19saXN0X25h bWUubG9jayk7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9fdm1fYm87wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+ID4g PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oFwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0pCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoq Cj4gPiA+ID4gPiArICogZm9yX2VhY2hfdm1fYm9faW5fbGlzdCgpIC0gaW50ZXJuYWwgdm1fYm8g bGlzdCBpdGVyYXRvcgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogVGhpcyBoZWxwZXIgaXMg aGVyZSB0byBwcm92aWRlIGxvY2tsZXNzIGxpc3QgaXRlcmF0aW9uLgo+ID4gPiA+ID4gTG9ja2xl c3MgYXMgaW4sIHRoZQo+ID4gPiA+ID4gKyAqIGl0ZXJhdG9yIHJlbGVhc2VzIHRoZSBsb2NrIGlt bWVkaWF0ZWx5IGFmdGVyIHBpY2tpbmcgdGhlCj4gPiA+ID4gPiBmaXJzdCBlbGVtZW50IGZyb20g dGhlCj4gPiA+ID4gPiArICogbGlzdCwgc28gbGlzdCBpbnNlcnRpb24gYW5kIGRlbGV0aW9uIGNh biBoYXBwZW4KPiA+ID4gPiA+IGNvbmN1cnJlbnRseS4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4g KyAqIFR5cGljYWwgdXNlOgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICrCoMKgwqDCoMKgc3Ry dWN0IGRybV9ncHV2bV9ibyAqdm1fYm87Cj4gPiA+ID4gPiArICrCoMKgwqDCoMKgTElTVF9IRUFE KG15X2xvY2FsX2xpc3QpOwo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICrCoMKgwqDCoMKgcmV0 ID0gMDsKPiA+ID4gPiA+ICsgKsKgwqDCoMKgwqBkcm1fZ3B1dm1fZm9yX2VhY2hfdm1fYm8oZ3B1 dm0sIDxsaXN0X25hbWU+LAo+ID4gPiA+ID4gJm15X2xvY2FsX2xpc3QsIHZtX2JvKSB7Cj4gPiA+ ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGRvX3NvbWV0aGluZ193aXRo X3ZtX2JvKC4uLiwgdm1fYm8pOwo+ID4gPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAocmV0KQo+ID4gPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgYnJlYWs7Cj4gPiA+ID4gPiArICrCoMKgwqDCoMKgfQo+ID4gPiA+ID4gKyAqwqDC oMKgwqDCoGRybV9ncHV2bV9ib19wdXQodm1fYm8pOwo+ID4gPiA+ID4gKyAqwqDCoMKgwqDCoGRy bV9ncHV2bV9yZXN0b3JlX3ZtX2JvX2xpc3QoZ3B1dm0sIDxsaXN0X25hbWU+LAo+ID4gPiA+ID4g Jm15X2xvY2FsX2xpc3QpOwo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsg KiBPbmx5IHVzZWQgZm9yIGludGVybmFsIGxpc3QgaXRlcmF0aW9ucywgbm90IG1lYW50IHRvIGJl Cj4gPiA+ID4gPiBleHBvc2VkIHRvIHRoZSBvdXRzaWRlCj4gPiA+ID4gPiArICogd29ybGQuCj4g PiA+ID4gPiArICovCj4gPiA+ID4gPiArI2RlZmluZSBmb3JfZWFjaF92bV9ib19pbl9saXN0KF9f Z3B1dm0sIF9fbGlzdF9uYW1lLAo+ID4gPiA+ID4gX19sb2NhbF9saXN0LCBfX3ZtX2JvKcKgwqDC oMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZm9yIChfX3ZtX2JvID0gZ2V0X25leHRfdm1f Ym9fZnJvbV9saXN0KF9fZ3B1dm0sCj4gPiA+ID4gPiBfX2xpc3RfbmFtZSzCoMKgwqDCoMKgwqDC oMKgwqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBfX2xvY2FsX2xpc3QsCj4gPiA+ID4gPiBOVUxMKTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBc Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gPiA+ID4gX192bV9ibzvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiA+ID4gPiDC oMKgwqDCoMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX3ZtX2JvID0g Z2V0X25leHRfdm1fYm9fZnJvbV9saXN0KF9fZ3B1dm0sCj4gPiA+ID4gPiBfX2xpc3RfbmFtZSzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBfX2xvY2FsX2xpc3QsCj4gPiA+ID4gPiBfX3ZtX2JvKSnCoMKgwqDCoMKg wqDCoMKgwqBcCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiArICogcmVzdG9y ZV92bV9ib19saXN0KCkgLSBtb3ZlIHZtX2JvIGVsZW1lbnRzIGJhY2sgdG8gdGhlaXIKPiA+ID4g PiA+IG9yaWdpbmFsIGxpc3QKPiA+ID4gPiA+ICsgKiBAX19ncHV2bTogVGhlIEdQVSBWTQo+ID4g PiA+ID4gKyAqIEBfX2xpc3RfbmFtZTogVGhlIG5hbWUgb2YgdGhlIGxpc3Qgd2UncmUgaXRlcmF0 aW5nIG9uCj4gPiA+ID4gPiArICogQF9fbG9jYWxfbGlzdDogQSBwb2ludGVyIHRvIHRoZSBsb2Nh bCBsaXN0IHVzZWQgdG8gc3RvcmUKPiA+ID4gPiA+IGFscmVhZHkgaXRlcmF0ZWQgaXRlbXMKPiA+ ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFdoZW4gd2UncmUgZG9uZSBpdGVyYXRpbmcgYSB2bV9i byBsaXN0LCB3ZSBzaG91bGQgY2FsbAo+ID4gPiA+ID4gcmVzdG9yZV92bV9ib19saXN0KCkKPiA+ ID4gPiA+ICsgKiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBzdGF0ZSBhbmQgbGV0IG5ldyBpdGVy YXRpb25zIHRha2UKPiA+ID4gPiA+IHBsYWNlLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gKyNk ZWZpbmUgcmVzdG9yZV92bV9ib19saXN0KF9fZ3B1dm0sIF9fbGlzdF9uYW1lLAo+ID4gPiA+ID4g X19sb2NhbF9saXN0KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZG8KPiA+ID4gPiA+IHvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+ ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIE1lcmdlIGJhY2sgdGhlIHR3byBsaXN0cywgbW92 aW5nIGxvY2FsCj4gPiA+ID4gPiBsaXN0IGVsZW1lbnRzIHRvIHRoZcKgwqDCoMKgwqDCoMKgwqDC oMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGhlYWQgdG8g cHJlc2VydmUgcHJldmlvdXMgb3JkZXJpbmcsIGluCj4gPiA+ID4gPiBjYXNlIGl0IG1hdHRlcnMu wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAKPiA+ID4gPiA+ICovwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Bpbl9sb2Nr KCYoX19ncHV2bSktCj4gPiA+ID4gPiA+X19saXN0X25hbWUubG9jayk7wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X3NwbGljZShfX2xvY2FsX2xp c3QsICYoX19ncHV2bSktCj4gPiA+ID4gPiA+X19saXN0X25hbWUubGlzdCk7wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc3Bpbl91bmxvY2soJihfX2dwdXZtKS0KPiA+ID4gPiA+ID5fX2xpc3RfbmFtZS5sb2Nr KTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9IHdoaWxlICgwKQo+ID4gPiA+ID4gKy8q Kgo+ID4gPiA+ID4gKyAqIGRybV9ncHV2bV9ib19saXN0X2FkZCgpIC0gaW5zZXJ0IGEgdm1fYm8g aW50byB0aGUgZ2l2ZW4KPiA+ID4gPiA+IGxpc3QKPiA+ID4gPiA+ICsgKiBAX192bV9ibzogdGhl ICZkcm1fZ3B1dm1fYm8KPiA+ID4gPiA+ICsgKiBAX19saXN0X25hbWU6IHRoZSBuYW1lIG9mIHRo ZSBsaXN0IHRvIGluc2VydCBpbnRvCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBJbnNlcnRz IHRoZSBnaXZlbiBAX192bV9ibyBpbnRvIHRoZSBsaXN0IHNwZWNpZmllZCBieQo+ID4gPiA+ID4g QF9fbGlzdF9uYW1lIGFuZAo+ID4gPiA+ID4gKyAqIGluY3JlYXNlcyB0aGUgdm1fYm8ncyByZWZl cmVuY2UgY291bnQuCj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiArI2RlZmluZSBkcm1fZ3B1dm1f Ym9fbGlzdF9hZGQoX192bV9ibywKPiA+ID4gPiA+IF9fbGlzdF9uYW1lKcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgZG8KPiA+ID4gPiA+IHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKg wqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Bpbl9sb2NrKCYo X192bV9ibyktPnZtLQo+ID4gPiA+ID4gPl9fbGlzdF9uYW1lLmxvY2spO8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKGxpc3RfZW1wdHkoJihfX3ZtX2JvKS0KPiA+ID4gPiA+ID5saXN0LmVu dHJ5Ll9fbGlzdF9uYW1lKSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGlzdF9hZGRfdGFp bCgmKF9fdm1fYm8pLQo+ID4gPiA+ID4gPmxpc3QuZW50cnkuX19saXN0X25hbWUswqDCoMKgwqDC oMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYoX192bV9ibyktPnZtLQo+ID4gPiA+ ID4gPl9fbGlzdF9uYW1lLmxpc3QpO8KgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Bpbl91bmxvY2soJihfX3ZtX2JvKS0+dm0tCj4gPiA+ ID4gPiA+X19saXN0X25hbWUubG9jayk7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfSB3aGlsZSAoMCkKPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBkcm1fZ3B1dm1fYm9fbGlzdF9kZWwoKSAtIHJlbW92 ZSBhIHZtX2JvIGZyb20gdGhlIGdpdmVuCj4gPiA+ID4gPiBsaXN0Cj4gPiA+ID4gPiArICogQF9f dm1fYm86IHRoZSAmZHJtX2dwdXZtX2JvCj4gPiA+ID4gPiArICogQF9fbGlzdF9uYW1lOiB0aGUg bmFtZSBvZiB0aGUgbGlzdCB0byBpbnNlcnQgaW50bwo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiAr ICogUmVtb3ZlcyB0aGUgZ2l2ZW4gQF9fdm1fYm8gZnJvbSB0aGUgbGlzdCBzcGVjaWZpZWQgYnkK PiA+ID4gPiA+IEBfX2xpc3RfbmFtZSBhbmQKPiA+ID4gPiA+ICsgKiBkZWNyZWFzZXMgdGhlIHZt X2JvJ3MgcmVmZXJlbmNlIGNvdW50Lgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gKyNkZWZpbmUg ZHJtX2dwdXZtX2JvX2xpc3RfZGVsKF9fdm1fYm8sCj4gPiA+ID4gPiBfX2xpc3RfbmFtZSnCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRvCj4gPiA+ID4gPiB7wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiA+ID4gPiDCoMKg wqDCoMKgwqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNw aW5fbG9jaygmKF9fdm1fYm8pLT52bS0KPiA+ID4gPiA+ID5fX2xpc3RfbmFtZS5sb2NrKTvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghbGlzdF9lbXB0eSgmKF9fdm1fYm8pLQo+ID4gPiA+ ID4gPmxpc3QuZW50cnkuX19saXN0X25hbWUpKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGlz dF9kZWxfaW5pdCgmKF9fdm1fYm8pLQo+ID4gPiA+ID4gPmxpc3QuZW50cnkuX19saXN0X25hbWUp O8KgwqDCoMKgwqDCoFwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz cGluX3VubG9jaygmKF9fdm1fYm8pLT52bS0KPiA+ID4gPiA+ID5fX2xpc3RfbmFtZS5sb2NrKTvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqB9IHdoaWxlICgwKQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgX19tdXN0 X2NoZWNrCj4gPiA+ID4gPiArZHJtX2dwdXZtX2JvX2dldF91bmxlc3NfemVybyhzdHJ1Y3QgZHJt X2dwdXZtX2JvICp2bV9ibyk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiDCoMKgICNkZWZpbmUgdG9f ZHJtX2dwdXZhKF9fbm9kZSnCoGNvbnRhaW5lcl9vZigoX19ub2RlKSwgc3RydWN0Cj4gPiA+ID4g PiBkcm1fZ3B1dmEsIHJiLm5vZGUpCj4gPiA+ID4gPiDCoMKgICNkZWZpbmUgR1BVVkFfU1RBUlQo bm9kZSkgKChub2RlKS0+dmEuYWRkcikKPiA+ID4gPiA+IEBAIC03MTMsNiArODY3LDEyIEBAIGRy bV9ncHV2bV9pbml0KHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLAo+ID4gPiA+ID4gc3RydWN0IGRy bV9kZXZpY2UgKmRybSwKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqBncHV2bS0+cmIudHJlZSA9 IFJCX1JPT1RfQ0FDSEVEOwo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoElOSVRfTElTVF9IRUFE KCZncHV2bS0+cmIubGlzdCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBJTklUX0xJU1RfSEVB RCgmZ3B1dm0tPmV4dG9iai5saXN0KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHNwaW5fbG9j a19pbml0KCZncHV2bS0+ZXh0b2JqLmxvY2spOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgSU5JVF9MSVNUX0hFQUQoJmdwdXZtLT5ldmljdC5saXN0KTsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoHNwaW5fbG9ja19pbml0KCZncHV2bS0+ZXZpY3QubG9jayk7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgZHJtX2dwdXZhX2NoZWNrX292ZXJmbG93KHN0 YXJ0X29mZnNldCwgcmFuZ2UpOwo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoGdwdXZtLT5tbV9z dGFydCA9IHN0YXJ0X29mZnNldDsKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqBncHV2bS0+bW1f cmFuZ2UgPSByYW5nZTsKPiA+ID4gPiA+IEBAIC03NTQsMTAgKzkxNCwzMDIgQEAgZHJtX2dwdXZt X2Rlc3Ryb3koc3RydWN0IGRybV9ncHV2bQo+ID4gPiA+ID4gKmdwdXZtKQo+ID4gPiA+ID4gwqDC oMKgwqDCoMKgwqDCoFdBUk4oIVJCX0VNUFRZX1JPT1QoJmdwdXZtLT5yYi50cmVlLnJiX3Jvb3Qp LAo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJHUFVWQSB0cmVlIGlzIG5vdCBl bXB0eSwgcG90ZW50aWFsbHkgbGVha2luZwo+ID4gPiA+ID4gbWVtb3J5LlxuIik7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqBXQVJOKCFsaXN0X2VtcHR5KCZncHV2bS0+ZXh0b2JqLmxpc3QpLCAi RXh0b2JqIGxpc3QKPiA+ID4gPiA+IHNob3VsZCBiZSBlbXB0eS5cbiIpOwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgV0FSTighbGlzdF9lbXB0eSgmZ3B1dm0tPmV2aWN0Lmxpc3QpLCAiRXZpY3Qg bGlzdAo+ID4gPiA+ID4gc2hvdWxkIGJlIGVtcHR5LlxuIik7Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiDCoMKgwqDCoMKgwqDCoMKgZHJtX2dlbV9wcml2YXRlX29iamVjdF9maW5pKCZncHV2bS0+ZF9v YmopOwo+ID4gPiA+ID4gwqDCoCB9Cj4gPiA+ID4gPiDCoMKgIEVYUE9SVF9TWU1CT0xfR1BMKGRy bV9ncHV2bV9kZXN0cm95KTsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBkcm1fZ3B1dm1f cHJlcGFyZV9vYmplY3RzKCkgLSBwcmVwYXJlIGFsbCBhc3NvaWNpYXRlZCBCT3MKPiA+ID4gPiA+ ICsgKiBAZ3B1dm06IHRoZSAmZHJtX2dwdXZtCj4gPiA+ID4gPiArICogQGV4ZWM6IHRoZSAmZHJt X2V4ZWMgbG9ja2luZyBjb250ZXh0Cj4gPiA+ID4gPiArICogQG51bV9mZW5jZXM6IHRoZSBhbW91 bnQgb2YgJmRtYV9mZW5jZXMgdG8gcmVzZXJ2ZQo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICog Q2FsbHMgZHJtX2V4ZWNfcHJlcGFyZV9vYmooKSBmb3IgYWxsICZkcm1fZ2VtX29iamVjdHMgdGhl Cj4gPiA+ID4gPiBnaXZlbgo+ID4gPiA+ID4gKyAqICZkcm1fZ3B1dm0gY29udGFpbnMgbWFwcGlu Z3Mgb2YuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBVc2luZyB0aGlzIGZ1bmN0aW9uIGRp cmVjdGx5LCBpdCBpcyB0aGUgZHJpdmVycwo+ID4gPiA+ID4gcmVzcG9uc2liaWxpdHkgdG8gY2Fs bAo+ID4gPiA+ID4gKyAqIGRybV9leGVjX2luaXQoKSBhbmQgZHJtX2V4ZWNfZmluaSgpIGFjY29y ZGluZ2x5Lgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogTm90ZTogVGhpcyBmdW5jdGlvbiBp cyBzYWZlIGFnYWluc3QgY29uY3VycmVudCBpbnNlcnRpb24KPiA+ID4gPiA+IGFuZCByZW1vdmFs IG9mCj4gPiA+ID4gPiArICogZXh0ZXJuYWwgb2JqZWN0cywgaG93ZXZlciBpdCBpcyBub3Qgc2Fm ZSBhZ2FpbnN0Cj4gPiA+ID4gPiBjb25jdXJyZW50IHVzYWdlIGl0c2VsZi4KPiA+ID4gPiA+ICsg Kgo+ID4gPiA+ID4gKyAqIERyaXZlcnMgbmVlZCB0byBtYWtlIHN1cmUgdG8gcHJvdGVjdCB0aGlz IGNhc2Ugd2l0aAo+ID4gPiA+ID4gZWl0aGVyIGFuIG91dGVyIFZNIGxvY2sKPiA+ID4gPiA+ICsg KiBvciBieSBjYWxsaW5nIGRybV9ncHV2bV9wcmVwYXJlX3ZtKCkgYmVmb3JlIHRoaXMgZnVuY3Rp b24KPiA+ID4gPiA+IHdpdGhpbiB0aGUKPiA+ID4gPiA+ICsgKiBkcm1fZXhlY191bnRpbF9hbGxf bG9ja2VkKCkgbG9vcCwgc3VjaCB0aGF0IHRoZSBHUFVWTSdzCj4gPiA+ID4gPiBkbWEtcmVzdiBs b2NrIGVuc3VyZXMKPiA+ID4gPiA+ICsgKiBtdXR1YWwgZXhjbHVzaW9uLgo+ID4gPiA+ID4gKyAq Cj4gPiA+ID4gPiArICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2Rl IG9uIGZhaWx1cmUuCj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiAraW50Cj4gPiA+ID4gPiArZHJt X2dwdXZtX3ByZXBhcmVfb2JqZWN0cyhzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGRybV9leGVjICpleGVjLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgbnVtX2ZlbmNlcykKPiA+ID4gPiA+ICt7 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoExJU1RfSEVBRChleHRvYmpzKTsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoGludCByZXQgPSAwOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgZm9yX2VhY2hfdm1fYm9faW5fbGlzdChncHV2bSwgZXh0b2JqLCAmZXh0b2JqcywKPiA+ID4g PiA+IHZtX2JvKSB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 ID0gZHJtX2V4ZWNfcHJlcGFyZV9vYmooZXhlYywgdm1fYm8tPm9iaiwKPiA+ID4gPiA+IG51bV9m ZW5jZXMpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQp Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJyZWFrOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgLyogRHJvcCByZWYgaW4gY2FzZSB3ZSBicmVhayBvdXQgb2YgdGhlIGxvb3AuICovCj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fYm9fcHV0KHZtX2JvKTsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoHJlc3RvcmVfdm1fYm9fbGlzdChncHV2bSwgZXh0b2JqLCAmZXh0b2Jqcyk7 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gPiA+ ID4gK30KPiA+ID4gPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fcHJlcGFyZV9vYmpl Y3RzKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBkcm1fZ3B1dm1f cHJlcGFyZV9yYW5nZSgpIC0gcHJlcGFyZSBhbGwgQk9zIG1hcHBlZCB3aXRoaW4KPiA+ID4gPiA+ IGEgZ2l2ZW4gcmFuZ2UKPiA+ID4gPiA+ICsgKiBAZ3B1dm06IHRoZSAmZHJtX2dwdXZtCj4gPiA+ ID4gPiArICogQGV4ZWM6IHRoZSAmZHJtX2V4ZWMgbG9ja2luZyBjb250ZXh0Cj4gPiA+ID4gPiAr ICogQGFkZHI6IHRoZSBzdGFydCBhZGRyZXNzIHdpdGhpbiB0aGUgVkEgc3BhY2UKPiA+ID4gPiA+ ICsgKiBAcmFuZ2U6IHRoZSByYW5nZSB0byBpdGVyYXRlIHdpdGhpbiB0aGUgVkEgc3BhY2UKPiA+ ID4gPiA+ICsgKiBAbnVtX2ZlbmNlczogdGhlIGFtb3VudCBvZiAmZG1hX2ZlbmNlcyB0byByZXNl cnZlCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBDYWxscyBkcm1fZXhlY19wcmVwYXJlX29i aigpIGZvciBhbGwgJmRybV9nZW1fb2JqZWN0cwo+ID4gPiA+ID4gbWFwcGVkIGJldHdlZW4gQGFk ZHIKPiA+ID4gPiA+ICsgKiBhbmQgQGFkZHIgKyBAcmFuZ2UuCj4gPiA+ID4gPiArICoKPiA+ID4g PiA+ICsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFp bHVyZS4KPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtpbnQKPiA+ID4gPiA+ICtkcm1fZ3B1dm1f cHJlcGFyZV9yYW5nZShzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwgc3RydWN0Cj4gPiA+ID4gPiBk cm1fZXhlYyAqZXhlYywKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdTY0IGFkZHIsIHU2NCByYW5nZSwgdW5zaWduZWQgaW50Cj4gPiA+ID4g PiBudW1fZmVuY2VzKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBkcm1fZ3B1dmEgKnZhOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTY0IGVuZCA9IGFkZHIg KyByYW5nZTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fZm9yX2VhY2hfdmFfcmFuZ2UodmEsIGdw dXZtLCBhZGRyLCBlbmQpIHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHZhLT5nZW0ub2JqOwo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGRybV9leGVjX3By ZXBhcmVfb2JqKGV4ZWMsIG9iaiwKPiA+ID4gPiA+IG51bV9mZW5jZXMpOwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gMDsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dw dXZtX3ByZXBhcmVfcmFuZ2UpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4g KyAqIGRybV9ncHV2bV9leGVjX2xvY2soKSAtIGxvY2sgYWxsIGRtYS1yZXN2IG9mIGFsbAo+ID4g PiA+ID4gYXNzb2ljaWF0ZWQgQk9zCj4gPiA+ID4gPiArICogQHZtX2V4ZWM6IHRoZSAmZHJtX2dw dXZtX2V4ZWMgYWJzdHJhY3Rpb24KPiA+ID4gPiA+ICsgKiBAbnVtX2ZlbmNlczogdGhlIGFtb3Vu dCBvZiAmZG1hX2ZlbmNlcyB0byByZXNlcnZlCj4gPiA+ID4gPiArICogQGludGVycnVwdGlibGU6 IHNsZWVwIGludGVycnVwdGlibGUgaWYgd2FpdGluZwo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiAr ICogQWNxdWlyZXMgYWxsIGRtYS1yZXN2IGxvY2tzIG9mIGFsbCAmZHJtX2dlbV9vYmplY3RzIHRo ZQo+ID4gPiA+ID4gZ2l2ZW4KPiA+ID4gPiA+ICsgKiAmZHJtX2dwdXZtIGNvbnRhaW5zIG1hcHBp bmdzIG9mLgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogQWRkaW9uYWxseSwgd2hlbiBjYWxs aW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBzdHJ1Y3QKPiA+ID4gPiA+IGRybV9ncHV2bV9leGVjOjpl eHRyYQo+ID4gPiA+ID4gKyAqIGJlaW5nIHNldCB0aGUgZHJpdmVyIHJlY2VpdmVzIHRoZSBnaXZl biBAZm4gY2FsbGJhY2sgdG8KPiA+ID4gPiA+IGxvY2sgYWRkaXRpb25hbAo+ID4gPiA+ID4gKyAq IGRtYS1yZXN2IGluIHRoZSBjb250ZXh0IG9mIHRoZSAmZHJtX2dwdXZtX2V4ZWMgaW5zdGFuY2Uu Cj4gPiA+ID4gPiBUeXBpY2FsbHksIGRyaXZlcnMKPiA+ID4gPiA+ICsgKiB3b3VsZCBjYWxsIGRy bV9leGVjX3ByZXBhcmVfb2JqKCkgZnJvbSB3aXRoaW4gdGhpcwo+ID4gPiA+ID4gY2FsbGJhY2su Cj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0 aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtpbnQK PiA+ID4gPiA+ICtkcm1fZ3B1dm1fZXhlY19sb2NrKHN0cnVjdCBkcm1fZ3B1dm1fZXhlYyAqdm1f ZXhlYywKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5z aWduZWQgaW50IG51bV9mZW5jZXMsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJvb2wgaW50ZXJydXB0aWJsZSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSA9IHZtX2V4ZWMtPnZtOwo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9leGVjICpleGVjID0gJnZtX2V4ZWMtPmV4 ZWM7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1aW50MzJfdCBmbGFnczsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBmbGFncyA9IGludGVycnVwdGlibGUgPyBEUk1fRVhFQ19JTlRFUlJVUFRJQkxFX1dBSVQgOgo+ ID4gPiA+ID4gMCB8Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJN X0VYRUNfSUdOT1JFX0RVUExJQ0FURVM7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqBkcm1fZXhlY19pbml0KGV4ZWMsIGZsYWdzKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoGRybV9leGVjX3VudGlsX2FsbF9sb2NrZWQoZXhlYykgewo+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGRybV9ncHV2bV9wcmVwYXJlX3Zt KGdwdXZtLCBleGVjLAo+ID4gPiA+ID4gbnVtX2ZlbmNlcyk7Cj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2V4ZWNfcmV0cnlfb25fY29udGVudGlvbihleGVjKTsK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVy cjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXQgPSBkcm1fZ3B1dm1fcHJlcGFyZV9vYmplY3RzKGdwdXZtLCBleGVjLAo+ID4gPiA+ID4gbnVt X2ZlbmNlcyk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2V4 ZWNfcmV0cnlfb25fY29udGVudGlvbihleGVjKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodm1fZXhlYy0+ZXh0cmEuZm4pIHsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 ID0gdm1fZXhlYy0+ZXh0cmEuZm4odm1fZXhlYywKPiA+ID4gPiA+IG51bV9mZW5jZXMpOwo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1f ZXhlY19yZXRyeV9vbl9jb250ZW50aW9uKGV4ZWMpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Z290byBlcnI7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgcmV0dXJuIDA7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArZXJyOgo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgZHJtX2V4ZWNfZmluaShleGVjKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiByZXQ7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9n cHV2bV9leGVjX2xvY2spOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBpbnQKPiA+ID4g PiA+ICtmbl9sb2NrX2FycmF5KHN0cnVjdCBkcm1fZ3B1dm1fZXhlYyAqdm1fZXhlYywgdW5zaWdu ZWQgaW50Cj4gPiA+ID4gPiBudW1fZmVuY2VzKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqb2JqczsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgbnVtX29ianM7Cj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqB9ICphcmdzID0gdm1fZXhlYy0+ZXh0cmEucHJpdjsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBkcm1fZXhlY19wcmVwYXJlX2FycmF5KCZ2bV9leGVj LT5leGVjLCBhcmdzLQo+ID4gPiA+ID4gPm9ianMsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGFyZ3MtPm51bV9vYmpzLAo+ID4gPiA+ID4gbnVtX2ZlbmNlcyk7Cj4gPiA+ID4gPiArfQo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGRybV9ncHV2bV9leGVjX2xvY2tf YXJyYXkoKSAtIGxvY2sgYWxsIGRtYS1yZXN2IG9mIGFsbAo+ID4gPiA+ID4gYXNzb2ljaWF0ZWQg Qk9zCj4gPiA+ID4gPiArICogQHZtX2V4ZWM6IHRoZSAmZHJtX2dwdXZtX2V4ZWMgYWJzdHJhY3Rp b24KPiA+ID4gPiA+ICsgKiBAb2JqczogYWRkaXRpb25hbCAmZHJtX2dlbV9vYmplY3RzIHRvIGxv Y2sKPiA+ID4gPiA+ICsgKiBAbnVtX29ianM6IHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCAmZHJt X2dlbV9vYmplY3RzIHRvCj4gPiA+ID4gPiBsb2NrCj4gPiA+ID4gPiArICogQG51bV9mZW5jZXM6 IHRoZSBhbW91bnQgb2YgJmRtYV9mZW5jZXMgdG8gcmVzZXJ2ZQo+ID4gPiA+ID4gKyAqIEBpbnRl cnJ1cHRpYmxlOiBzbGVlcCBpbnRlcnJ1cHRpYmxlIGlmIHdhaXRpbmcKPiA+ID4gPiA+ICsgKgo+ ID4gPiA+ID4gKyAqIEFjcXVpcmVzIGFsbCBkbWEtcmVzdiBsb2NrcyBvZiBhbGwgJmRybV9nZW1f b2JqZWN0cyB0aGUKPiA+ID4gPiA+IGdpdmVuICZkcm1fZ3B1dm0KPiA+ID4gPiA+ICsgKiBjb250 YWlucyBtYXBwaW5ncyBvZiwgcGx1cyB0aGUgb25lcyBnaXZlbiB0aHJvdWdoIEBvYmpzLgo+ID4g PiA+ID4gKyAqCj4gPiA+ID4gPiArICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBl cnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiAraW50Cj4gPiA+ ID4gPiArZHJtX2dwdXZtX2V4ZWNfbG9ja19hcnJheShzdHJ1Y3QgZHJtX2dwdXZtX2V4ZWMgKnZt X2V4ZWMsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9ianMsCj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBu dW1fb2JqcywKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IG51bV9mZW5jZXMsCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJvb2wgaW50ZXJydXB0aWJs ZSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgewo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq Km9ianM7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5zaWduZWQg aW50IG51bV9vYmpzOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfSBhcmdzOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgYXJncy5vYmpzID0gb2JqczsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoGFyZ3MubnVtX29ianMgPSBudW1fb2JqczsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoHZtX2V4ZWMtPmV4dHJhLmZuID0gZm5fbG9ja19hcnJheTsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHZtX2V4ZWMtPmV4dHJhLnByaXYgPSAmYXJnczsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBkcm1fZ3B1dm1fZXhlY19sb2Nr KHZtX2V4ZWMsIG51bV9mZW5jZXMsCj4gPiA+ID4gPiBpbnRlcnJ1cHRpYmxlKTsKPiA+ID4gPiA+ ICt9Cj4gPiA+ID4gPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX2V4ZWNfbG9ja19hcnJh eSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiArICogZHJtX2dwdXZtX2V4 ZWNfbG9ja19yYW5nZSgpIC0gcHJlcGFyZSBhbGwgQk9zIG1hcHBlZAo+ID4gPiA+ID4gd2l0aGlu IGEgZ2l2ZW4gcmFuZ2UKPiA+ID4gPiA+ICsgKiBAdm1fZXhlYzogdGhlICZkcm1fZ3B1dm1fZXhl YyBhYnN0cmFjdGlvbgo+ID4gPiA+ID4gKyAqIEBhZGRyOiB0aGUgc3RhcnQgYWRkcmVzcyB3aXRo aW4gdGhlIFZBIHNwYWNlCj4gPiA+ID4gPiArICogQHJhbmdlOiB0aGUgcmFuZ2UgdG8gaXRlcmF0 ZSB3aXRoaW4gdGhlIFZBIHNwYWNlCj4gPiA+ID4gPiArICogQG51bV9mZW5jZXM6IHRoZSBhbW91 bnQgb2YgJmRtYV9mZW5jZXMgdG8gcmVzZXJ2ZQo+ID4gPiA+ID4gKyAqIEBpbnRlcnJ1cHRpYmxl OiBzbGVlcCBpbnRlcnJ1cHRpYmxlIGlmIHdhaXRpbmcKPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4g KyAqIEFjcXVpcmVzIGFsbCBkbWEtcmVzdiBsb2NrcyBvZiBhbGwgJmRybV9nZW1fb2JqZWN0cwo+ ID4gPiA+ID4gbWFwcGVkIGJldHdlZW4gQGFkZHIgYW5kCj4gPiA+ID4gPiArICogQGFkZHIgKyBA cmFuZ2UuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3Ms IG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ ICtpbnQKPiA+ID4gPiA+ICtkcm1fZ3B1dm1fZXhlY19sb2NrX3JhbmdlKHN0cnVjdCBkcm1fZ3B1 dm1fZXhlYyAqdm1fZXhlYywKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0IGFkZHIsIHU2NCByYW5nZSwKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50 IG51bV9mZW5jZXMsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJvb2wgaW50ZXJydXB0aWJsZSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSA9IHZtX2V4ZWMtPnZtOwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9leGVjICpleGVjID0gJnZtX2V4ZWMt PmV4ZWM7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1aW50MzJfdCBmbGFnczsKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqBmbGFncyA9IGludGVycnVwdGlibGUgPyBEUk1fRVhFQ19JTlRFUlJVUFRJQkxFX1dBSVQg Ogo+ID4gPiA+ID4gMCB8Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg RFJNX0VYRUNfSUdOT1JFX0RVUExJQ0FURVM7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqBkcm1fZXhlY19pbml0KGV4ZWMsIGZsYWdzKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoGRybV9leGVjX3VudGlsX2FsbF9sb2NrZWQoZXhlYykgewo+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGRybV9ncHV2bV9wcmVwYXJl X3JhbmdlKGdwdXZtLCBleGVjLAo+ID4gPiA+ID4gYWRkciwgcmFuZ2UsCj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBudW1fZmVuY2VzKTsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZXhlY19yZXRyeV9vbl9jb250ZW50aW9uKGV4 ZWMpOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdv dG8gZXJyOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtlcnI6Cj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fZXhlY19maW5pKGV4ZWMpOwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArRVhQT1JUX1NZ TUJPTF9HUEwoZHJtX2dwdXZtX2V4ZWNfbG9ja19yYW5nZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArLyoqCj4gPiA+ID4gPiArICogZHJtX2dwdXZtX3ZhbGlkYXRlKCkgLSB2YWxpZGF0ZSBhbGwg Qk9zIG1hcmtlZCBhcyBldmljdGVkCj4gPiA+ID4gPiArICogQGdwdXZtOiB0aGUgJmRybV9ncHV2 bSB0byB2YWxpZGF0ZSBldmljdGVkIEJPcwo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogQ2Fs bHMgdGhlICZkcm1fZ3B1dm1fb3BzLmJvX3ZhbGlkYXRlIGNhbGxiYWNrIGZvciBhbGwKPiA+ID4g PiA+IGV2aWN0ZWQgYnVmZmVyCj4gPiA+ID4gPiArICogb2JqZWN0cyBiZWluZyBtYXBwZWQgaW4g dGhlIGdpdmVuICZkcm1fZ3B1dm0uCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBSZXR1cm5z OiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ID4gPiA+ ICsgKi8KPiA+ID4gPiA+ICtpbnQKPiA+ID4gPiA+ICtkcm1fZ3B1dm1fdmFsaWRhdGUoc3RydWN0 IGRybV9ncHV2bSAqZ3B1dm0pCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg Y29uc3Qgc3RydWN0IGRybV9ncHV2bV9vcHMgKm9wcyA9IGdwdXZtLT5vcHM7Cj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2dwdXZtX2JvICp2bV9ibzsKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoExJU1RfSEVBRChldmljdCk7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQg cmV0ID0gMDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh1bmxpa2Vs eSghb3BzIHx8ICFvcHMtPmJvX3ZhbGlkYXRlKSkKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT1RTVVBQOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgZm9yX2VhY2hfdm1fYm9faW5fbGlzdChncHV2bSwgZXZpY3QsICZldmljdCwg dm1fYm8pIHsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkbWFfcmVz dl9hc3NlcnRfaGVsZCh2bV9iby0+b2JqLT5yZXN2KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXQgPSBvcHMtPmJvX3ZhbGlkYXRlKHZtX2JvLT5vYmopOwo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogRHJvcCBy ZWYgaW4gY2FzZSB3ZSBicmVhayBvdXQgb2YgdGhlIGxvb3AuICovCj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqBkcm1fZ3B1dm1fYm9fcHV0KHZtX2JvKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oHJlc3RvcmVfdm1fYm9fbGlzdChncHV2bSwgZXZpY3QsICZldmljdCk7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1dm1fdmFsaWRhdGUpOwo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGRybV9ncHV2bV9yZXN2X2FkZF9mZW5jZSAtIGFkZCBm ZW5jZSB0byBwcml2YXRlIGFuZCBhbGwKPiA+ID4gPiA+IGV4dG9iago+ID4gPiA+ID4gKyAqIGRt YS1yZXN2Cj4gPiA+ID4gPiArICogQGdwdXZtOiB0aGUgJmRybV9ncHV2bSB0byBhZGQgYSBmZW5j ZSB0bwo+ID4gPiA+ID4gKyAqIEBleGVjOiB0aGUgJmRybV9leGVjIGxvY2tpbmcgY29udGV4dAo+ ID4gPiA+ID4gKyAqIEBmZW5jZTogZmVuY2UgdG8gYWRkCj4gPiA+ID4gPiArICogQHByaXZhdGVf dXNhZ2U6IHByaXZhdGUgZG1hLXJlc3YgdXNhZ2UKPiA+ID4gPiA+ICsgKiBAZXh0b2JqX3VzYWdl OiBleHRvYmogZG1hLXJlc3YgdXNhZ2UKPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICt2b2lkCj4g PiA+ID4gPiArZHJtX2dwdXZtX3Jlc3ZfYWRkX2ZlbmNlKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZt LAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGRybV9leGVjICpleGVjLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsCj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVt IGRtYV9yZXN2X3VzYWdlIHByaXZhdGVfdXNhZ2UsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIGRtYV9yZXN2X3VzYWdlIGV4dG9i al91c2FnZSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iajsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcg aW5kZXg7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBkcm1fZXhlY19mb3Jf ZWFjaF9sb2NrZWRfb2JqZWN0KGV4ZWMsIGluZGV4LCBvYmopIHsKPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkbWFfcmVzdl9hc3NlcnRfaGVsZChvYmotPnJlc3YpOwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRtYV9yZXN2X2FkZF9mZW5j ZShvYmotPnJlc3YsIGZlbmNlLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1fZ3B1dm1faXNfZXh0 b2JqKGdwdXZtLAo+ID4gPiA+ID4gb2JqKSA/Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByaXZhdGVf dXNhZ2UgOgo+ID4gPiA+ID4gZXh0b2JqX3VzYWdlKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oH0KPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXZtX3Jl c3ZfYWRkX2ZlbmNlKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+IMKgwqAgLyoqCj4gPiA+ID4gPiDC oMKgwqAgKiBkcm1fZ3B1dm1fYm9fY3JlYXRlKCkgLSBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2Yg c3RydWN0Cj4gPiA+ID4gPiBkcm1fZ3B1dm1fYm8KPiA+ID4gPiA+IMKgwqDCoCAqIEBncHV2bTog VGhlICZkcm1fZ3B1dm0gdGhlIEBvYmogaXMgbWFwcGVkIGluLgo+ID4gPiA+ID4gQEAgLTc5MCw2 ICsxMjQyLDkgQEAgZHJtX2dwdXZtX2JvX2NyZWF0ZShzdHJ1Y3QgZHJtX2dwdXZtCj4gPiA+ID4g PiAqZ3B1dm0sCj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgSU5JVF9MSVNUX0hFQUQoJnZtX2Jv LT5saXN0LmdwdXZhKTsKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqBJTklUX0xJU1RfSEVBRCgm dm1fYm8tPmxpc3QuZW50cnkuZ2VtKTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoElOSVRfTElT VF9IRUFEKCZ2bV9iby0+bGlzdC5lbnRyeS5leHRvYmopOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgSU5JVF9MSVNUX0hFQUQoJnZtX2JvLT5saXN0LmVudHJ5LmV2aWN0KTsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqBkcm1fZ2VtX29iamVjdF9nZXQob2JqKTsKPiA+ID4g PiA+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdm1fYm87Cj4gPiA+ID4gPiBAQCAtODA3LDYgKzEy NjIsMTQgQEAgZHJtX2dwdXZtX2JvX2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCj4gPiA+ID4g PiDCoMKgwqDCoMKgwqDCoMKgZHJtX2dlbV9ncHV2YV9hc3NlcnRfbG9ja19oZWxkKHZtX2JvLT5v YmopOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3Bpbl9sb2NrKCZncHV2bS0+ZXh0b2JqLmxv Y2spOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgbGlzdF9kZWwoJnZtX2JvLT5saXN0LmVudHJ5 LmV4dG9iaik7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzcGluX3VubG9jaygmZ3B1dm0tPmV4 dG9iai5sb2NrKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHNwaW5fbG9j aygmZ3B1dm0tPmV2aWN0LmxvY2spOwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgbGlzdF9kZWwo JnZtX2JvLT5saXN0LmVudHJ5LmV2aWN0KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHNwaW5f dW5sb2NrKCZncHV2bS0+ZXZpY3QubG9jayk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiDCoMKgwqDC oMKgwqDCoMKgbGlzdF9kZWwoJnZtX2JvLT5saXN0LmVudHJ5LmdlbSk7Cj4gPiA+ID4gPiDCoMKg wqDCoMKgwqDCoMKgZHJtX2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gPiA+ID4gPiBAQCAtODIyLDYg KzEyODUsMTEgQEAgZHJtX2dwdXZtX2JvX2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCj4gPiA+ ID4gPiDCoMKgwqAgKiBAdm1fYm86IHRoZSAmZHJtX2dwdXZtX2JvIHRvIHJlbGVhc2UgdGhlIHJl ZmVyZW5jZSBvZgo+ID4gPiA+ID4gwqDCoMKgICoKPiA+ID4gPiA+IMKgwqDCoCAqIFRoaXMgcmVs ZWFzZXMgYSByZWZlcmVuY2UgdG8gQHZtX2JvLgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICog SWYgdGhlIHJlZmVyZW5jZSBjb3VudCBkcm9wcyB0byB6ZXJvLCB0aGUgJmdwdXZtX2JvIGlzCj4g PiA+ID4gPiBkZXN0cm95ZWQsIHdoaWNoCj4gPiA+ID4gPiArICogaW5jbHVkZXMgcmVtb3Zpbmcg aXQgZnJvbSB0aGUgR0VNcyBncHV2YSBsaXN0LiBIZW5jZSwgaWYKPiA+ID4gPiA+IGEgY2FsbCB0 byB0aGlzCj4gPiA+ID4gPiArICogZnVuY3Rpb24gY2FuIHBvdGVudGlhbGx5IGxldCB0aGUgcmVm ZXJlbmNlIGNvdW50IHRvIHplcm8KPiA+ID4gPiA+IHRoZSBjYWxsZXIgbXVzdAo+ID4gPiA+ID4g KyAqIGhvbGQgdGhlIGRtYS1yZXN2IG9yIGRyaXZlciBzcGVjaWZpYyBHRU0gZ3B1dmEgbG9jay4K PiA+ID4gPiA+IMKgwqDCoCAqLwo+ID4gPiA+ID4gwqDCoCB2b2lkCj4gPiA+ID4gPiDCoMKgIGRy bV9ncHV2bV9ib19wdXQoc3RydWN0IGRybV9ncHV2bV9ibyAqdm1fYm8pCj4gPiA+ID4gPiBAQCAt ODMxLDYgKzEyOTksMTIgQEAgZHJtX2dwdXZtX2JvX3B1dChzdHJ1Y3QgZHJtX2dwdXZtX2JvCj4g PiA+ID4gPiAqdm1fYm8pCj4gPiA+ID4gPiDCoMKgIH0KPiA+ID4gPiA+IMKgwqAgRVhQT1JUX1NZ TUJPTF9HUEwoZHJtX2dwdXZtX2JvX3B1dCk7Cj4gPiA+ID4gPiArc3RhdGljIGludCBfX211c3Rf Y2hlY2sKPiA+ID4gPiA+ICtkcm1fZ3B1dm1fYm9fZ2V0X3VubGVzc196ZXJvKHN0cnVjdCBkcm1f Z3B1dm1fYm8gKnZtX2JvKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiBrcmVmX2dldF91bmxlc3NfemVybygmdm1fYm8tPmtyZWYpOwo+ID4gPiA+ID4gK30KPiA+ ID4gPiA+ICsKPiA+ID4gPiA+IMKgwqAgc3RhdGljIHN0cnVjdCBkcm1fZ3B1dm1fYm8gKgo+ID4g PiA+ID4gwqDCoCBfX2RybV9ncHV2bV9ib19maW5kKHN0cnVjdCBkcm1fZ3B1dm0gKmdwdXZtLAo+ ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpvYmopCj4gPiA+ID4gPiBAQCAtOTM4LDYgKzE0MTIsNDggQEAgZHJtX2dw dXZtX2JvX29idGFpbl9wcmVhbGxvYyhzdHJ1Y3QKPiA+ID4gPiA+IGRybV9ncHV2bV9ibyAqX192 bV9ibykKPiA+ID4gPiA+IMKgwqAgfQo+ID4gPiA+ID4gwqDCoCBFWFBPUlRfU1lNQk9MX0dQTChk cm1fZ3B1dm1fYm9fb2J0YWluX3ByZWFsbG9jKTsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsg KiBkcm1fZ3B1dm1fYm9fZXh0b2JqX2FkZCgpIC0gYWRkcyB0aGUgJmRybV9ncHV2bV9ibyB0byBp dHMKPiA+ID4gPiA+ICZkcm1fZ3B1dm0ncwo+ID4gPiA+ID4gKyAqIGV4dG9iaiBsaXN0Cj4gPiA+ ID4gPiArICogQHZtX2JvOiBUaGUgJmRybV9ncHV2bV9ibyB0byBhZGQgdG8gaXRzICZkcm1fZ3B1 dm0ncyB0aGUKPiA+ID4gPiA+IGV4dG9iaiBsaXN0Lgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiAr ICogQWRkcyB0aGUgZ2l2ZW4gQHZtX2JvIHRvIGl0cyAmZHJtX2dwdXZtJ3MgZXh0b2JqIGxpc3Qg aWYKPiA+ID4gPiA+IG5vdCBvbiB0aGUgbGlzdAo+ID4gPiA+ID4gKyAqIGFscmVhZHkgYW5kIGlm IHRoZSBjb3JyZXNwb25kaW5nICZkcm1fZ2VtX29iamVjdCBpcyBhbgo+ID4gPiA+ID4gZXh0ZXJu YWwgb2JqZWN0LAo+ID4gPiA+ID4gKyAqIGFjdHVhbGx5Lgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ ID4gK3ZvaWQKPiA+ID4gPiA+ICtkcm1fZ3B1dm1fYm9fZXh0b2JqX2FkZChzdHJ1Y3QgZHJtX2dw dXZtX2JvICp2bV9ibykKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgZHJtX2dwdXZtICpncHV2bSA9IHZtX2JvLT52bTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoGlmIChkcm1fZ3B1dm1faXNfZXh0b2JqKGdwdXZtLCB2bV9iby0+b2JqKSkK PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fYm9fbGlz dF9hZGQodm1fYm8sIGV4dG9iaik7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gK0VYUE9SVF9TWU1C T0xfR1BMKGRybV9ncHV2bV9ib19leHRvYmpfYWRkKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsv KioKPiA+ID4gPiA+ICsgKiBkcm1fZ3B1dm1fYm9fZXZpY3QoKSAtIGFkZCAvIHJlbW92ZSBhICZk cm1fZ2VtX29iamVjdCB0bwo+ID4gPiA+ID4gLyBmcm9tIGEKPiA+ID4gPiA+ICsgKiAmZHJtX2dw dXZtcyBldmljdGVkIGxpc3QKPiA+ID4gPiA+ICsgKiBAb2JqOiB0aGUgJmRybV9nZW1fb2JqZWN0 IHRvIGFkZCBvciByZW1vdmUKPiA+ID4gPiA+ICsgKiBAZXZpY3Q6IGluZGljYXRlcyB3aGV0aGVy IHRoZSBvYmplY3QgaXMgZXZpY3RlZAo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogQWRkcyBh ICZkcm1fZ2VtX29iamVjdCB0byBvciByZW1vdmVzIGl0IGZyb20gYWxsCj4gPiA+ID4gPiAmZHJt X2dwdXZtcyBldmljdGVkCj4gPiA+ID4gPiArICogbGlzdCBjb250YWluaW5nIGEgbWFwcGluZyBv ZiB0aGlzICZkcm1fZ2VtX29iamVjdC4KPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICt2b2lkCj4g PiA+ID4gPiArZHJtX2dwdXZtX2JvX2V2aWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBi b29sIGV2aWN0KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBk cm1fZ3B1dm1fYm8gKnZtX2JvOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg ZHJtX2dlbV9mb3JfZWFjaF9ncHV2bV9ibyh2bV9ibywgb2JqKSB7Cj4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGV2aWN0KQo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZ3B1dm1fYm9fbGlzdF9hZGQo dm1fYm8sIGV2aWN0KTsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBl bHNlCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRybV9ncHV2bV9ib19saXN0X2RlbCh2bV9ibywgZXZpY3QpOwo+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgfQo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1f Z3B1dm1fYm9fZXZpY3QpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gwqDCoCBzdGF0aWMgaW50Cj4g PiA+ID4gPiDCoMKgIF9fZHJtX2dwdXZhX2luc2VydChzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwK PiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJt X2dwdXZhICp2YSkKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ3B1dm0u aAo+ID4gPiA+ID4gYi9pbmNsdWRlL2RybS9kcm1fZ3B1dm0uaAo+ID4gPiA+ID4gaW5kZXggYWZh NTBiOTA1OWEyLi44MzRiYjZkNjYxN2UgMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9pbmNsdWRlL2Ry bS9kcm1fZ3B1dm0uaAo+ID4gPiA+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2dwdXZtLmgKPiA+ ID4gPiA+IEBAIC0yNiwxMCArMjYsMTIgQEAKPiA+ID4gPiA+IMKgwqDCoCAqLwo+ID4gPiA+ID4g wqDCoCAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9k bWEtcmVzdi5oPgo+ID4gPiA+ID4gwqDCoCAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Cj4gPiA+ ID4gPiDCoMKgICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ID4gPiA+ID4gwqDCoCAjaW5jbHVk ZSA8ZHJtL2RybV9nZW0uaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9leGVjLmg+Cj4g PiA+ID4gPiDCoMKgIHN0cnVjdCBkcm1fZ3B1dm07Cj4gPiA+ID4gPiDCoMKgIHN0cnVjdCBkcm1f Z3B1dm1fYm87Cj4gPiA+ID4gPiBAQCAtMjU5LDYgKzI2MSwzOCBAQCBzdHJ1Y3QgZHJtX2dwdXZt IHsKPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqAgKiBzcGFjZQo+ID4gPiA+ID4gwqDCoMKgwqDC oMKgwqDCoCAqLwo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkbWFfcmVzdiAqcmVz djsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgICogQGV4dG9iajogc3RydWN0dXJlIGhvbGRpbmcgdGhlIGV4dG9iaiBsaXN0 Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoqCj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQGxpc3Q6ICZsaXN0X2hlYWQg c3RvcmluZyAmZHJtX2dwdXZtX2Jvcwo+ID4gPiA+ID4gc2VydmluZyBhcwo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGV4dGVybmFsIG9iamVjdAo+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKioKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBAbG9jazogc3BpbmxvY2sgdG8gcHJvdGVjdCB0 aGUgZXh0b2JqIGxpc3QKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Ki8KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzcGlubG9ja190IGxv Y2s7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9IGV4dG9iajsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICogQGV2aWN0 OiBzdHJ1Y3R1cmUgaG9sZGluZyB0aGUgZXZpY3QgbGlzdCBhbmQgZXZpY3QKPiA+ID4gPiA+IGxp c3QgbG9jawo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3Qgewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8q Kgo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIEBsaXN0OiAmbGlz dF9oZWFkIHN0b3JpbmcgJmRybV9ncHV2bV9ib3MKPiA+ID4gPiA+IGN1cnJlbnRseSBiZWluZwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGV2aWN0ZWQKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoqCj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQGxvY2s6IHNwaW5sb2NrIHRvIHByb3Rl Y3QgdGhlIGV2aWN0IGxpc3QKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKi8KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzcGlubG9ja190 IGxvY2s7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9IGV2aWN0Owo+ID4gPiA+ID4gwqDCoCB9 Owo+ID4gPiA+ID4gwqDCoCB2b2lkIGRybV9ncHV2bV9pbml0KHN0cnVjdCBkcm1fZ3B1dm0gKmdw dXZtLCBzdHJ1Y3QKPiA+ID4gPiA+IGRybV9kZXZpY2UgKmRybSwKPiA+ID4gPiA+IEBAIC0yNjgs NiArMzAyLDIxIEBAIHZvaWQgZHJtX2dwdXZtX2luaXQoc3RydWN0IGRybV9ncHV2bQo+ID4gPiA+ ID4gKmdwdXZtLCBzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ID4gPiA+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGRybV9ncHV2bV9vcHMgKm9w cyk7Cj4gPiA+ID4gPiDCoMKgIHZvaWQgZHJtX2dwdXZtX2Rlc3Ryb3koc3RydWN0IGRybV9ncHV2 bSAqZ3B1dm0pOwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGRybV9ncHV2bV9pc19leHRv YmooKSAtIGluZGljYXRlcyB3aGV0aGVyIHRoZSBnaXZlbgo+ID4gPiA+ID4gJmRybV9nZW1fb2Jq ZWN0IGlzIGFuCj4gPiA+ID4gPiArICogZXh0ZXJuYWwgb2JqZWN0Cj4gPiA+ID4gPiArICogQGdw dXZtOiB0aGUgJmRybV9ncHV2bSB0byBjaGVjawo+ID4gPiA+ID4gKyAqIEBvYmo6IHRoZSAmZHJt X2dlbV9vYmplY3QgdG8gY2hlY2sKPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFJldHVybnM6 IHRydWUgaWYgdGhlICZkcm1fZ2VtX29iamVjdCAmZG1hX3Jlc3YgZGlmZmVycwo+ID4gPiA+ID4g ZnJvbSB0aGUKPiA+ID4gPiA+ICsgKiAmZHJtX2dwdXZtcyAmZG1hX3Jlc3YsIGZhbHNlIG90aGVy d2lzZQo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbCBkcm1fZ3B1 dm1faXNfZXh0b2JqKHN0cnVjdCBkcm1fZ3B1dm0KPiA+ID4gPiA+ICpncHV2bSwKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QKPiA+ID4gPiA+ICpvYmop Cj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIG9iaiAmJiBvYmot PnJlc3YgIT0gZ3B1dm0tPnJlc3Y7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g wqDCoCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fZ3B1dmEgKgo+ID4gPiA+ID4gwqDCoCBfX2Ry bV9ncHV2YV9uZXh0KHN0cnVjdCBkcm1fZ3B1dmEgKnZhKQo+ID4gPiA+ID4gwqDCoCB7Cj4gPiA+ ID4gPiBAQCAtMzQ2LDYgKzM5NSwxMjggQEAgX19kcm1fZ3B1dmFfbmV4dChzdHJ1Y3QgZHJtX2dw dXZhICp2YSkKPiA+ID4gPiA+IMKgwqAgI2RlZmluZSBkcm1fZ3B1dm1fZm9yX2VhY2hfdmFfc2Fm ZSh2YV9fLCBuZXh0X18sIGdwdXZtX18pCj4gPiA+ID4gPiBcCj4gPiA+ID4gPiDCoMKgwqDCoMKg wqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZhX18sIG5leHRfXywgJihncHV2bV9fKS0K PiA+ID4gPiA+ID5yYi5saXN0LCByYi5lbnRyeSkKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsg KiBzdHJ1Y3QgZHJtX2dwdXZtX2V4ZWMgLSAmZHJtX2dwdXZtIGFic3RyYWN0aW9uIG9mCj4gPiA+ ID4gPiAmZHJtX2V4ZWMKPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFRoaXMgc3RydWN0dXJl IHNob3VsZCBiZSBjcmVhdGVkIG9uIHRoZSBzdGFjayBhcwo+ID4gPiA+ID4gJmRybV9leGVjIHNo b3VsZCBiZS4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIE9wdGlvbmFsbHksIEBleHRyYSBj YW4gYmUgc2V0IGluIG9yZGVyIHRvIGxvY2sgYWRkaXRpb25hbAo+ID4gPiA+ID4gJmRybV9nZW1f b2JqZWN0cy4KPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtzdHJ1Y3QgZHJtX2dwdXZtX2V4ZWMg ewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAg KiBAZXhlYzogdGhlICZkcm1fZXhlYyBzdHJ1Y3R1cmUKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oCAqLwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9leGVjIGV4ZWM7Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAvKioKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoCAqIEB2bTogdGhlICZkcm1fZ3B1dm0gdG8gbG9jayBpdHMgRE1BIHJlc2VydmF0aW9ucwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgZHJtX2dwdXZtICp2bTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC8q Kgo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICogQGV4dHJhOiBDYWxsYmFjayBhbmQgY29ycmVz cG9uZGluZyBwcml2YXRlIGRhdGEKPiA+ID4gPiA+IGZvciB0aGUgZHJpdmVyIHRvCj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqAgKiBsb2NrIGFyYml0cmFyeSBhZGRpdGlvbmFsICZkcm1fZ2VtX29i amVjdHMuCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCB7Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoq Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQGZuOiBUaGUgZHJp dmVyIGNhbGxiYWNrIHRvIGxvY2sKPiA+ID4gPiA+IGFkZGl0aW9uYWwgJmRybV9nZW1fb2JqZWN0 cy4KPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgKCpmbikoc3RydWN0IGRybV9ncHV2 bV9leGVjICp2bV9leGVjLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgbnVtX2ZlbmNlcyk7Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoqCj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQHByaXY6IGRyaXZlciBwcml2YXRlIGRh dGEgZm9yIHRoZSBAZm4KPiA+ID4gPiA+IGNhbGxiYWNrCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICovCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdm9pZCAqcHJpdjsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0gZXh0cmE7Cj4gPiA+ ID4gPiArfTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBkcm1fZ3B1 dm1fcHJlcGFyZV92bSgpIC0gcHJlcGFyZSB0aGUgR1BVVk1zIGNvbW1vbiBkbWEtCj4gPiA+ID4g PiByZXN2Cj4gPiA+ID4gPiArICogQGdwdXZtOiB0aGUgJmRybV9ncHV2bQo+ID4gPiA+ID4gKyAq IEBleGVjOiB0aGUgJmRybV9leGVjIGNvbnRleHQKPiA+ID4gPiA+ICsgKiBAbnVtX2ZlbmNlczog dGhlIGFtb3VudCBvZiAmZG1hX2ZlbmNlcyB0byByZXNlcnZlCj4gPiA+ID4gPiArICoKPiA+ID4g PiA+ICsgKiBDYWxscyBkcm1fZXhlY19wcmVwYXJlX29iaigpIGZvciB0aGUgR1BVVk1zIGR1bW15 Cj4gPiA+ID4gPiAmZHJtX2dlbV9vYmplY3QuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBV c2luZyB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5LCBpdCBpcyB0aGUgZHJpdmVycwo+ID4gPiA+ID4g cmVzcG9uc2liaWxpdHkgdG8gY2FsbAo+ID4gPiA+ID4gKyAqIGRybV9leGVjX2luaXQoKSBhbmQg ZHJtX2V4ZWNfZmluaSgpIGFjY29yZGluZ2x5Lgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICog UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4g PiA+ID4gPiArICovCj4gPiA+ID4gPiArc3RhdGljIGlubGluZSBpbnQKPiA+ID4gPiA+ICtkcm1f Z3B1dm1fcHJlcGFyZV92bShzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2V4ZWMgKmV4ZWMs Cj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWdu ZWQgaW50IG51bV9mZW5jZXMpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIGRybV9leGVjX3ByZXBhcmVfb2JqKGV4ZWMsICZncHV2bS0+ZF9vYmosCj4gPiA+ID4g PiBudW1fZmVuY2VzKTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAraW50IGRy bV9ncHV2bV9wcmVwYXJlX29iamVjdHMoc3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGRybV9leGVjICpleGVjLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBudW1fZmVu Y2VzKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtpbnQgZHJtX2dwdXZtX3ByZXBhcmVfcmFuZ2Uo c3RydWN0IGRybV9ncHV2bSAqZ3B1dm0sCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2V4ZWMgKmV4ZWMsCj4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB1NjQgYWRkciwgdTY0IHJhbmdlLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IG51bV9mZW5jZXMp Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK2ludCBkcm1fZ3B1dm1fZXhlY19sb2NrKHN0cnVjdCBk cm1fZ3B1dm1fZXhlYyAqdm1fZXhlYywKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IG51bV9mZW5jZXMsCj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wgaW50 ZXJydXB0aWJsZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAraW50IGRybV9ncHV2bV9leGVjX2xv Y2tfYXJyYXkoc3RydWN0IGRybV9ncHV2bV9leGVjCj4gPiA+ID4gPiAqdm1fZXhlYywKPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipvYmpzLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGlu dCBudW1fb2JqcywKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgbnVtX2ZlbmNlcywKPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBib29sIGludGVycnVwdGlibGUpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK2ludCBkcm1fZ3B1 dm1fZXhlY19sb2NrX3JhbmdlKHN0cnVjdCBkcm1fZ3B1dm1fZXhlYwo+ID4gPiA+ID4gKnZtX2V4 ZWMsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdTY0IGFkZHIsIHU2NCByYW5nZSwKPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBp bnQgbnVtX2ZlbmNlcywKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sIGludGVycnVwdGlibGUpOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGRybV9ncHV2bV9sb2NrKCkgLSBsb2NrIGFs bCBkbWEtcmVzdiBvZiBhbGwgYXNzb2ljaWF0ZWQKPiA+ID4gPiA+IEJPcwo+ID4gPiA+ID4gKyAq IEBncHV2bTogdGhlICZkcm1fZ3B1dm0KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFJlbGVh c2VzIGFsbCBkbWEtcmVzdiBsb2NrcyBvZiBhbGwgJmRybV9nZW1fb2JqZWN0cwo+ID4gPiA+ID4g cHJldmlvdXNseSBhY3F1aXJlZAo+ID4gPiA+ID4gKyAqIHRocm91Z2ggZHJtX2dwdXZtX2xvY2so KSBvciBpdHMgdmFyaWFudHMuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBSZXR1cm5zOiAw IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ID4gPiA+ICsg Ki8KPiA+ID4gPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQKPiA+ID4gPiA+ICtkcm1fZ3B1dm1fZXhl Y191bmxvY2soc3RydWN0IGRybV9ncHV2bV9leGVjICp2bV9leGVjKQo+ID4gPiA+ID4gK3sKPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRybV9leGVjX2ZpbmkoJnZtX2V4ZWMtPmV4ZWMpOwo+ID4g PiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtpbnQgZHJtX2dwdXZtX3ZhbGlkYXRlKHN0 cnVjdCBkcm1fZ3B1dm0gKmdwdXZtKTsKPiA+ID4gPiA+ICt2b2lkIGRybV9ncHV2bV9yZXN2X2Fk ZF9mZW5jZShzdHJ1Y3QgZHJtX2dwdXZtICpncHV2bSwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2V4 ZWMgKmV4ZWMsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsCj4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZW51bSBkbWFfcmVzdl91c2FnZQo+ID4gPiA+ID4gcHJpdmF0ZV91c2FnZSwKPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBl bnVtIGRtYV9yZXN2X3VzYWdlCj4gPiA+ID4gPiBleHRvYmpfdXNhZ2UpOwo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGRybV9ncHV2bV9leGVjX3Jlc3ZfYWRkX2ZlbmNl KCkKPiA+ID4gPiA+ICsgKiBAdm1fZXhlYzogdGhlICZkcm1fZ3B1dm1fZXhlYyBhYnN0cmFjdGlv bgo+ID4gPiA+ID4gKyAqIEBmZW5jZTogZmVuY2UgdG8gYWRkCj4gPiA+ID4gPiArICogQHByaXZh dGVfdXNhZ2U6IHByaXZhdGUgZG1hLXJlc3YgdXNhZ2UKPiA+ID4gPiA+ICsgKiBAZXh0b2JqX3Vz YWdlOiBleHRvYmogZG1hLXJlc3YgdXNhZ2UKPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFNl ZSBkcm1fZ3B1dm1fcmVzdl9hZGRfZmVuY2UoKS4KPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtz dGF0aWMgaW5saW5lIHZvaWQKPiA+ID4gPiA+ICtkcm1fZ3B1dm1fZXhlY19yZXN2X2FkZF9mZW5j ZShzdHJ1Y3QgZHJtX2dwdXZtX2V4ZWMKPiA+ID4gPiA+ICp2bV9leGVjLAo+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlLAo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gZG1hX3Jlc3ZfdXNhZ2UKPiA+ ID4gPiA+IHByaXZhdGVfdXNhZ2UsCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBkbWFfcmVzdl91c2FnZQo+ID4g PiA+ID4gZXh0b2JqX3VzYWdlKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oGRybV9ncHV2bV9yZXN2X2FkZF9mZW5jZSh2bV9leGVjLT52bSwgJnZtX2V4ZWMtPmV4ZWMsCj4g PiA+ID4gPiBmZW5jZSwKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcml2YXRlX3VzYWdlLAo+ID4gPiA+ID4g ZXh0b2JqX3VzYWdlKTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiDCoMKgIC8q Kgo+ID4gPiA+ID4gwqDCoMKgICogc3RydWN0IGRybV9ncHV2bV9ibyAtIHN0cnVjdHVyZSByZXBy ZXNlbnRpbmcgYQo+ID4gPiA+ID4gJmRybV9ncHV2bSBhbmQKPiA+ID4gPiA+IMKgwqDCoCAqICZk cm1fZ2VtX29iamVjdCBjb21iaW5hdGlvbgo+ID4gPiA+ID4gQEAgLTM5OCw2ICs1NjksMTggQEAg c3RydWN0IGRybV9ncHV2bV9ibyB7Cj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBncHV2YSBsaXN0Lgo+ID4gPiA+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4gPiA+ID4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGlzdF9o ZWFkIGdlbTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoqCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIEBldmljdDogTGlzdCBlbnRyeSB0byBhdHRhY2gg dG8KPiA+ID4gPiA+IHRoZSAmZHJtX2dwdXZtcwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBleHRvYmogbGlzdC4KPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBs aXN0X2hlYWQgZXh0b2JqOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKioKPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogQGV2aWN0OiBMaXN0IGVudHJ5IHRv IGF0dGFjaCB0bwo+ID4gPiA+ID4gdGhlICZkcm1fZ3B1dm1zIGV2aWN0Cj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGxpc3QuCj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgbGlzdF9oZWFkIGV2aWN0Owo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9IGVudHJ5Owo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoH0gbGlzdDsKPiA+ID4g PiA+IMKgwqAgfTsKPiA+ID4gPiA+IEBAIC00MzIsNiArNjE1LDkgQEAgc3RydWN0IGRybV9ncHV2 bV9ibyAqCj4gPiA+ID4gPiDCoMKgIGRybV9ncHV2bV9ib19maW5kKHN0cnVjdCBkcm1fZ3B1dm0g KmdwdXZtLAo+ID4gPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gPiA+ID4gPiArdm9pZCBkcm1fZ3B1dm1fYm9fZXZp Y3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGJvb2wKPiA+ID4gPiA+IGV2aWN0KTsKPiA+ ID4gPiA+ICt2b2lkIGRybV9ncHV2bV9ib19leHRvYmpfYWRkKHN0cnVjdCBkcm1fZ3B1dm1fYm8g KnZtX2JvKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+IMKgwqAgLyoqCj4gPiA+ID4gPiDCoMKgwqAg KiBkcm1fZ3B1dm1fYm9fZm9yX2VhY2hfdmEoKSAtIGl0ZXJhdG9yIHRvIHdhbGsgb3ZlciBhCj4g PiA+ID4gPiBsaXN0IG9mICZkcm1fZ3B1dmEKPiA+ID4gPiA+IMKgwqDCoCAqIEB2YV9fOiAmZHJt X2dwdXZhIHN0cnVjdHVyZSB0byBhc3NpZ24gdG8gaW4gZWFjaAo+ID4gPiA+ID4gaXRlcmF0aW9u IHN0ZXAKPiA+ID4gPiA+IEBAIC04MzcsNiArMTAyMywxNyBAQCBzdHJ1Y3QgZHJtX2dwdXZtX29w cyB7Cj4gPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgICogdXNlZC4KPiA+ID4gPiA+IMKgwqDCoMKg wqDCoMKgwqAgKi8KPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqBpbnQgKCpzbV9zdGVwX3VubWFw KShzdHJ1Y3QgZHJtX2dwdXZhX29wICpvcCwgdm9pZAo+ID4gPiA+ID4gKnByaXYpOwo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqAgKiBAYm9fdmFsaWRhdGU6IGNhbGxlZCBmcm9tIGRybV9ncHV2bV92YWxpZGF0ZSgpCj4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqAgKgo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICogRHJpdmVy cyByZWNlaXZlIHRoaXMgY2FsbGJhY2sgZm9yIGV2ZXJ5IGV2aWN0ZWQKPiA+ID4gPiA+ICZkcm1f Z2VtX29iamVjdCBiZWluZwo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICogbWFwcGVkIGluIHRo ZSBjb3JyZXNwb25kaW5nICZkcm1fZ3B1dm0uCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgKgo+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICogVHlwaWNhbGx5LCBkcml2ZXJzIHdvdWxkIGNhbGwg dGhlaXIgZHJpdmVyCj4gPiA+ID4gPiBzcGVjaWZpYyB2YXJpYW50IG9mCj4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqAgKiB0dG1fYm9fdmFsaWRhdGUoKSBmcm9tIHdpdGhpbiB0aGlzIGNhbGxiYWNr Lgo+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBp bnQgKCpib192YWxpZGF0ZSkoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ID4gPiA+ID4g wqDCoCB9Owo+ID4gPiA+ID4gwqDCoCBpbnQgZHJtX2dwdXZtX3NtX21hcChzdHJ1Y3QgZHJtX2dw dXZtICpncHV2bSwgdm9pZCAqcHJpdiwKPiA+IAo+IAoK