From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 4E3D8493EE for ; Fri, 9 Feb 2024 17:57:24 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D5AF868D048; Fri, 9 Feb 2024 19:57:21 +0200 (EET) Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1698068B6F9 for ; Fri, 9 Feb 2024 19:57:14 +0200 (EET) Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-2866b15b013so298342a91.0 for ; Fri, 09 Feb 2024 09:57:14 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707501433; x=1708106233; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kKjhxE3nWAadfpHD2Tvjdm07cvlpb9hqjGy9Z3Mhg64=; b=tTxdWbWGZVNy84HAbbe3rdjBHxeUHX2eudrjmwwcwasH9hcyQfCx+fUwjmLe3xnZ9+ J4F/wb+MbwlAyauO64W1zaREK2cPlVd9sSFR+7vIOEM7MJdqQIP/zvuSyxtlwT01zpT6 lNeuy2qCoTVyi3rquds2z/FjAZBUBqtvMRrlICKvGikSaRCAmsheDxMrunfPHje/kQPs WCiP4sHZt7yHqzNE5p6yOj1jFygotDn/zF7h+pObY2CJTOtfjsoiuGLizS9DF27dnsha bH/4wRlSC7OEYkdgMGgy6IoMPWnyYA08UxTVP3EEw5j8kafSXsqokn5VATgn8JlIBfrT fr/g== X-Gm-Message-State: AOJu0YxWW+0DBz2iIPcl3de96w28TzZXwaRmtiH7pTl7RMrAHIsbHdA3 CTIPPNTURWwCoqm/DTzeObIRmfTMoaJLDdyrkwJ3bFtpOQ7oxs75h5PnkKk8TM2myQyjTTxRm3m OAA/VMpM+bQuj/jOGmeOuJhOyyOaYSXaaMSOOL57xb4GAjEuF X-Google-Smtp-Source: AGHT+IHuDxttAW0PFaBHxSzsR2nso1UueffKZMRxnWFQHMX7njUxjl7yPNxoU5fVfEONMQ2AL1pDjsSH/1STManzSJw= X-Received: by 2002:a17:90a:2dcd:b0:296:a64c:b665 with SMTP id q13-20020a17090a2dcd00b00296a64cb665mr2061121pjm.1.1707501430702; Fri, 09 Feb 2024 09:57:10 -0800 (PST) MIME-Version: 1.0 References: <20240209072446.1513009-1-marth64@proxyid.net> In-Reply-To: From: Marth64 Date: Fri, 9 Feb 2024 11:56:59 -0600 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v10 1/2] libavformat: add DVD-Video demuxer, powered by libdvdnav and libdvdread X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: U29sdXRpb24gaXMgb24gdGhlIHdheS4gVGhhbmtzIQoKT24gRnJpLCBGZWIgOSwgMjAyNCBhdCA0 OjQz4oCvQU0gQW5kcmVhcyBSaGVpbmhhcmR0IDwKYW5kcmVhcy5yaGVpbmhhcmR0QG91dGxvb2su Y29tPiB3cm90ZToKCj4gTWFydGg2NDoKPiA+IFBsZWFzZSBpZ25vcmUgdjksIEkgc2NyZXdlZCB1 cCB0aGUgZW1haWwgc3ViamVjdCAoY29udGVudHMgYXJlIHRoZQo+IHNhbWUpLiBTb3JyeSBmb2xr cy4KPiA+Cj4gPiBBZGRyZXNzZXMgYWxsIHByaW9yIGZlZWRiYWNrIHRvIG15IGtub3dsZWRnZS4g SG9wZWZ1bGx5IHRoaXMgaGFzIGEKPiBjaGFuY2UgZm9yIDcuMCwKPiA+IGFzIEkgYW0gc3RhcnRp bmcgdG8gYmVsaWV2ZSB0aGVyZSBhcmUgbm90IGdyZWF0IGFsdGVybmF0aXZlcyB0byB0aGlzCj4g ZGVtdXhlciBvdXQgdGhlcmUuCj4gPgo+ID4gVGhhbmsgeW91IHRvIGFsbCB0aGUgcmV2aWV3ZXJz IGZvciB5b3VyIHRpbWUuCj4gPgo+ID4gW1JlbWFpbmluZyBRdWVzdGlvbnNdCj4gPgo+ID4gQW5k cmVhcyBSOgo+ID4+IFRoaXMgbWFrZXMgdGhpcyBjb2RlIGFkZCBhbiBBVlN0cmVhbSB0byB0aGUg Y2hpbGQgQVZGb3JtYXRDb250ZXh0LiBUaGlzCj4gPj4gaXMgbm90IGhvdyBpdCBpcyBzdXBwb3Nl ZCB0byBiZS4gWW91IG1heSBub3QgYWRkIEFWU3RyZWFtcyBiZWhpbmQgYW4KPiA+PiBpbnB1dCBB VkZvcm1hdENvbnRleHQncyBiYWNrLgo+ID4gVGhlIGludGVudCBoZXJlIGlzIHRoYXQgSSBuZWVk IHRvIHRlbGwgdGhlIHN1YmRlbXV4ZXIgd2hpY2ggc3RyZWFtcyB0bwo+IGV4cGVjdCwKPiA+IGhl bmNlIHdoeSBJIGRvbid0IGNhbGwgZmluZF9zdHJlYW1faW5mbygpIG9uIGl0IG9yIGxldCBpdCBw cm9iZSBvbiBpdCdzCj4gb3duLgo+ID4gVGhlIERWRCBJRk8gaGVhZGVycyBnaXZlIG1lIGFsbCBv ZiB0aGUgaW5mb3JtYXRpb24gaW4gYWR2YW5jZS4KPiA+IFRoaXMgaXMgcmVxdWlyZWQgQUZBSUsg YmVjYXVzZSB0aGVyZSBtaWdodCBiZSBmb3JjZWQgc3VidGl0bGUgdHJhY2tzCj4gdGhhdCBkbyBu b3QKPiA+IHN0YXJ0IHVudGlsIG1pZC1wbGF5YmFjay4gQWZ0ZXIgZnVydGhlciBkaXNjdXNzaW9u IHdpdGggcmV2aWV3ZXIsCj4gPiBpdCBhcHBlYXJzIHRoZSBjb25jZXJuIGlzIG1vcmUgYWJvdXQg bG9uZyB0ZXJtIG1haW50YWluYWJpbGl0eToKPiA+PiBTb21lIChkZSltdXhlcnMgKGkuZS4gdGhl IGF2aSBkZW11eGVyKSB1c2UgQVZTdHJlYW0ucHJpdl9kYXRhIHRvIHN0b3JlCj4gc29tZSBwZXIt c3RyZWFtIGRhdGEuCj4gPj4gVGhleSBhbGxvY2F0ZSB0aGlzIGltbWVkaWF0ZWx5IGFmdGVyIGhh dmluZyBhZGRlZCB0aGUgc3RyZWFtLgo+ID4+IEltYWdpbmUgc29tZW9uZSBjaGFuZ2luZyB0aGUg bXBlZ3BzIGRlbXV4ZXIgaW4gdGhpcyB3YXkuCj4gPj4gVGhlbiBpdCB3b3VsZCBjcmFzaCB3aGVu IGl0IHRyaWVkIHRvIGFjY2VzcyB0aGUgc3RyZWFtJ3MgcHJpdmF0ZSBkYXRhCj4gPj4gaW4gY2Fz ZSB0aGUgc3RyZWFtIGhhcyBiZWVuIGFkZGVkIGJ5IGFuIG91dHNpZGUgZGVtdXhlci4iCj4gPiBJ IHJlc3BlY3QgdGhpcyBmZWVkYmFjaywgbWFrZXMgc2Vuc2UuIEknbSBub3Qgc3VyZSBpZiB0aGlz IGlzIGEgc2hvdwo+IHN0b3BwZXIgb3Igbm90Cj4gPiBidXQgdGhvdWdodCB0byB0YWtlIHRoZSBj b21tdW5pdHkncyBvdmVyYWxsIG9waW5pb24gb24gYSBzb2x1dGlvbiAoaWYKPiBhbnkpPwo+ID4K Pgo+IElmIHlvdSBkb24ndCBjcmVhdGUgdGhlIHN0cmVhbSwgdGhlIG1wZWdwcyBkZW11eGVyIHdp bGwgY3JlYXRlIG9uZS4KPiBDYW4ndCB5b3Ugc2ltcGx5IG1hcCB0aGUgaW50ZXJuYWwgc3RyZWFt cyB0byB0aGUgb3V0ZXIgb25lcyBieSB1c2luZyB0aGUKPiBzdHJlYW0ncyBpZCAoYW5kIGFsc28g Y2hlY2sgdGhhdCB0aGUgY29kZWNfdHlwZSwgY29kZWNfaWQgYXJlIHdoYXQgeW91Cj4gZXhwZWN0 IHRoZW0gdG8gYmUpPwo+IChZb3VyIGN1cnJlbnQgY29kZSB3b3VsZCBidHcgbm90IHdvcmsgaWYg dGhlIG1wZWdwcyBkZW11eGVyIGNyZWF0ZWQKPiBzdHJlYW1zIG9uIGl0cyBvd24gaW4gaXRzIHJl YWRfaGVhZGVyIGNhbGxiYWNrLikKPgo+ID4+IEdpdmVuIHRoYXQgdGhpcyBjb2RlIGhlcmUgaXMg YWJzb2x1dGVseSBub3Qgc3BlZWQgcmVsZXZhbnQsIHRoZSBMVVQKPiA+PiBjYW4gYmUgYXZvaWRl ZCBieSB1c2luZyBhdl9jbGlwX3VpbnQ4KHZhbHVlIC0gMTAyNCkuIFtBbmRyZWFzIFIuXQo+ID4g SSBoYWQgYSBoYXJkIHRpbWUgdHJ5aW5nIHRvIG1ha2UgdGhpcyB3b3JrIHdpdGggWVVWX1RPX1JH QjJfQ0NJUigpIHdoaWNoCj4gPiBzZWVtcyB0byBleHBlY3QgdGhlIExVVC4gSGFwcHkgdG8gcmVt b3ZlIGl0IGlmIHBvc3NpYmxlLCBqdXN0IGEgbGl0dGxlCj4gc3R1Y2sgb24gdGhpcy4KPgo+IERv bid0IHVzZSBZVVZfVE9fUkdCMl9DQ0lSIHRoZW4uCj4KPiA+IFRoYW5rIHlvdS4KPiA+Cj4gPiBb QWRkcmVzc2VkXQo+ID4KPiA+IC0gRG9jdW1lbnRhdGlvbiBmaXhlcwo+ID4gLSBSb2J1c3QgbG9n Z2luZyBtZXNzYWdlcyAoYWxzbyBwcmludGluZyBleHBsaWNpdCBlcnJvciByZWFzb24gZnJvbQo+ IGR2ZG5hdikKPiA+IC0gU3RydWN0dXJlIGZpeGVzICh1c2luZyBjb25zdCwgZXRjLikKPiA+IC0g Q29uZGVuc2VkIGxpYmR2ZG5hdi9saWJkdmRyZWFkIGxvZ2dpbmcgY2FsbGJhY2tzCj4gPiAtIE1v dmVkIHNvbWUgdmFyaWFibGVzIHRvIHRoZSBzdGFjayAoYW5kIHJlbW92ZWQgdW5jaGVja2VkIGFs bG9jYXRpb25zLAo+IHRpcmVkIGV5ZXMsIHRoeCkKPiA+IC0gRm9ybWF0dGluZyBjb21wbGlhbmNl IChiZXN0IGVmZm9ydCwgcGxlYXNlIGxldCBtZSBrbm93IGlmIGZ1cnRoZXIKPiBuZWVkZWQgLSB0 aHgpCj4gPgo+ID4gW0FkZHJlc3NlZCwgd2l0aCByZXNwb25zZV0KPiA+Cj4gPiBTdGVmYW5vIFM6 Cj4gPj4gdW5yZWxhdGVkLCBidXQgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGhhdmUgYSAtbGlzdC10 aXRsZXMgb3B0aW9uCj4gPiBBZ3JlZWQgOi0pIFRoaXMgZmVhdHVyZSBpcyBzdGlsbCBhIHdvcmsg aW4gcHJvZ3Jlc3MgYXMgaXQgaXMgbm90IGEKPiBzdHJhaWdodGZvcndhcmQgam9iCj4gPiBhbmQg dGhlcmUgYXJlIGdvb2QgYWx0ZXJuYXRpdmUgdG9vbHMsIHNvIEkgaGFkIHRvIGRlcHJpb3JpdGl6 ZQo+IChjdXJyZW50bHkgaW4gdGlua2VyaW5nIHBoYXNlKS4KPiA+IEhvcGVmdWxseSB0aGlzIGlz IGZhaXIsIHRoYW5rcy4KPiA+Cj4gPiBBbmRyZWFzIFI6Cj4gPj4gV2hhdCBpcyB0aGlzIGhlYWRl ciB1c2VkIGZvcj8KPiA+IGF2Y29kZWMuYyAtIHVzZWQgdG8gYWNjZXNzIGF2Y3R4IGFuZCBzZXQK PiBGRl9DT0RFQ19QUk9QRVJUWV9DTE9TRURfQ0FQVElPTlMKPiA+IEludGVudCB3YXMgdG8gZGVj bGFyZSBhdmFpbGFiaWxpdHkgb2YgRUlBNjA4IENDLCBhcyB0aGlzIGlzIGtub3duIGF0IHRoZQo+ IGNvbnRhaW5lciBsZXZlbC4KPiA+Cj4gPiB1cmwuaCAtIHVzZWQgZm9yIGZmX2NoZWNrX2ludGVy cnVwdCgpIC0gVGhpcyBpcyBpbiBteSBhc3N1bXB0aW9uIHRvCj4gZW5zdXJlIGEKPiA+IHNhZmUg Y2FuY2VsbGF0aW9uIHBhdGggd2hpbGUgdXNpbmcgdGhlICJwcmVpbmRleCIgb3B0aW9uLCB3aGlj aCByZXF1aXJlcwo+ID4gYSBmdWxsIHJlYWQgb2YgdGhlIGRpc2MgdG8gZGV0ZXJtaW5lIGNvcnJl Y3QgY2hhcHRlciBtYXJrZXJzLgo+ID4KPiA+PiAgV2h5IG5vdD8gV2UgaGF2ZSBBVl9ESVNQT1NJ VElPTl9LQVJBT0tFLgo+ID4gVGhhbmtzIC0gYWRkZWQgdGhlIGRpc3Bvc2l0aW9uIGFuZCBhbHNv IGNsZWFyZWQgdXAgdGhlIHBvaW50IG9mIHRoZQo+IG1lc3NhZ2UsCj4gPiB3aGljaCBpcyB0byBz YXkgdGhhdCBrYXJhb2tlIHRyYWNrcyBoYXZlIGFkZGl0aW9uYWwgZXh0ZW5zaW9uIG1ldGFkYXRh Cj4gPiBsb2NhdGVkIGluIHRoZSBJRk8gaGVhZGVycy4gSSBoYXZlIG5vdCBzdHVkaWVkIGhvdyB0 byBwYXJzZSBpdCBhdCB0aGlzCj4gdGltZS4KPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBNYXJ0aDY0 IDxtYXJ0aDY0QHByb3h5aWQubmV0Pgo+ID4gLS0tCj4gPiAgQ2hhbmdlbG9nICAgICAgICAgICAg ICAgICB8ICAgIDIgKwo+ID4gIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgfCAgICA4ICsKPiA+ ICBkb2MvZGVtdXhlcnMudGV4aSAgICAgICAgIHwgIDEzMCArKysrCj4gPiAgbGliYXZmb3JtYXQv TWFrZWZpbGUgICAgICB8ICAgIDEgKwo+ID4gIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyAgfCAg ICAxICsKPiA+ICBsaWJhdmZvcm1hdC9kdmR2aWRlb2RlYy5jIHwgMTQxOSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgNiBmaWxlcyBjaGFuZ2VkLCAxNTYxIGluc2Vy dGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvZHZkdmlkZW9kZWMu Ywo+ID4KPiA+IGRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cKPiA+IGluZGV4IGM1 ZmIyMWQxOTguLjg4NjUzYmM2ZDMgMTAwNjQ0Cj4gPiAtLS0gYS9DaGFuZ2Vsb2cKPiA+ICsrKyBi L0NoYW5nZWxvZwo+ID4gQEAgLTI0LDYgKzI0LDggQEAgdmVyc2lvbiA8bmV4dD46Cj4gPiAgLSBm Zm1wZWcgQ0xJIG9wdGlvbnMgbWF5IG5vdyBiZSB1c2VkIGFzIC0vb3B0IDxwYXRoPiwgd2hpY2gg aXMKPiBlcXVpdmFsZW50Cj4gPiAgICB0byAtb3B0IDxjb250ZW50cyBvZiBmaWxlIDxwYXRoPj4K PiA+ICAtIHNob3dpbmZvIGJpdHN0cmVhbSBmaWx0ZXIKPiA+ICstIERWRC1WaWRlbyBkZW11eGVy LCBwb3dlcmVkIGJ5IGxpYmR2ZG5hdiBhbmQgbGliZHZkcmVhZAo+ID4gKwo+ID4KPiA+ICB2ZXJz aW9uIDYuMToKPiA+ICAtIGxpYmFyaWJjYXB0aW9uIGRlY29kZXIKPiA+IGRpZmYgLS1naXQgYS9j b25maWd1cmUgYi9jb25maWd1cmUKPiA+IGluZGV4IGY3MjUzM2I3ZDIuLjgzMWI5ZjZjYjYgMTAw NzU1Cj4gPiAtLS0gYS9jb25maWd1cmUKPiA+ICsrKyBiL2NvbmZpZ3VyZQo+ID4gQEAgLTIyNyw2 ICsyMjcsOCBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6Cj4gPiAgICAtLWVuYWJsZS1saWJk YXZzMiAgICAgICAgZW5hYmxlIEFWUzIgZGVjb2RpbmcgdmlhIGxpYmRhdnMyIFtub10KPiA+ICAg IC0tZW5hYmxlLWxpYmRjMTM5NCAgICAgICBlbmFibGUgSUlEQy0xMzk0IGdyYWJiaW5nIHVzaW5n IGxpYmRjMTM5NAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsaWJyYXcxMzk0 IFtub10KPiA+ICsgIC0tZW5hYmxlLWxpYmR2ZG5hdiAgICAgICBlbmFibGUgbGliZHZkbmF2LCBu ZWVkZWQgZm9yIERWRCBkZW11eGluZwo+IFtub10KPiA+ICsgIC0tZW5hYmxlLWxpYmR2ZHJlYWQg ICAgICBlbmFibGUgbGliZHZkcmVhZCwgbmVlZGVkIGZvciBEVkQgZGVtdXhpbmcKPiBbbm9dCj4g PiAgICAtLWVuYWJsZS1saWJmZGstYWFjICAgICAgZW5hYmxlIEFBQyBkZS9lbmNvZGluZyB2aWEg bGliZmRrLWFhYyBbbm9dCj4gPiAgICAtLWVuYWJsZS1saWJmbGl0ZSAgICAgICAgZW5hYmxlIGZs aXRlICh2b2ljZSBzeW50aGVzaXMpIHN1cHBvcnQgdmlhCj4gbGliZmxpdGUgW25vXQo+ID4gICAg LS1lbmFibGUtbGliZm9udGNvbmZpZyAgIGVuYWJsZSBsaWJmb250Y29uZmlnLCB1c2VmdWwgZm9y IGRyYXd0ZXh0Cj4gZmlsdGVyIFtub10KPiA+IEBAIC0xODA2LDYgKzE4MDgsOCBAQCBFWFRFUk5B TF9MSUJSQVJZX0dQTF9MSVNUPSIKPiA+ICAgICAgZnJlaTByCj4gPiAgICAgIGxpYmNkaW8KPiA+ ICAgICAgbGliZGF2czIKPiA+ICsgICAgbGliZHZkbmF2Cj4gPiArICAgIGxpYmR2ZHJlYWQKPiA+ ICAgICAgbGlicnViYmVyYmFuZAo+ID4gICAgICBsaWJ2aWRzdGFiCj4gPiAgICAgIGxpYngyNjQK PiA+IEBAIC0zNTIzLDYgKzM1MjcsOCBAQCBkdHNfZGVtdXhlcl9zZWxlY3Q9ImRjYV9wYXJzZXIi Cj4gPiAgZHRzaGRfZGVtdXhlcl9zZWxlY3Q9ImRjYV9wYXJzZXIiCj4gPiAgZHZfZGVtdXhlcl9z ZWxlY3Q9ImR2cHJvZmlsZSIKPiA+ICBkdl9tdXhlcl9zZWxlY3Q9ImR2cHJvZmlsZSIKPiA+ICtk dmR2aWRlb19kZW11eGVyX3NlbGVjdD0ibXBlZ3BzX2RlbXV4ZXIiCj4gPiArZHZkdmlkZW9fZGVt dXhlcl9kZXBzPSJsaWJkdmRuYXYgbGliZHZkcmVhZCIKPiA+ICBkeGFfZGVtdXhlcl9zZWxlY3Q9 InJpZmZkZWMiCj4gPiAgZWFjM19kZW11eGVyX3NlbGVjdD0iYWMzX3BhcnNlciIKPiA+ICBldmNf ZGVtdXhlcl9zZWxlY3Q9ImV2Y19mcmFtZV9tZXJnZV9ic2YgZXZjX3BhcnNlciIKPiA+IEBAIC02 NzcxLDYgKzY3NzcsOCBAQCBlbmFibGVkIGxpYmRhdjFkICAgICAgICAgICYmIHJlcXVpcmVfcGtn X2NvbmZpZwo+IGxpYmRhdjFkICJkYXYxZCA+PSAwLjUuMCIgImRhdjFkCj4gPiAgZW5hYmxlZCBs aWJkYXZzMiAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGliZGF2czIgImRhdnMyID49 Cj4gMS42LjAiIGRhdnMyLmggZGF2czJfZGVjb2Rlcl9vcGVuCj4gPiAgZW5hYmxlZCBsaWJkYzEz OTQgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGliZGMxMzk0IGxpYmRjMTM5NC0yCj4g ZGMxMzk0L2RjMTM5NC5oIGRjMTM5NF9uZXcKPiA+ICBlbmFibGVkIGxpYmRybSAgICAgICAgICAg ICYmIGNoZWNrX3BrZ19jb25maWcgbGliZHJtIGxpYmRybSB4Zjg2ZHJtLmgKPiBkcm1HZXRWZXJz aW9uCj4gPiArZW5hYmxlZCBsaWJkdmRuYXYgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcg bGliZHZkbmF2ICJkdmRuYXYgPj0KPiA2LjEuMSIgZHZkbmF2L2R2ZG5hdi5oIGR2ZG5hdl9vcGVu Mgo+ID4gK2VuYWJsZWQgbGliZHZkcmVhZCAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxp YmR2ZHJlYWQgImR2ZHJlYWQgPj0KPiA2LjEuMiIgZHZkcmVhZC9kdmRfcmVhZGVyLmggRFZET3Bl bjIgLWxkdmRyZWFkCj4gPiAgZW5hYmxlZCBsaWJmZGtfYWFjICAgICAgICAmJiB7IGNoZWNrX3Br Z19jb25maWcgbGliZmRrX2FhYyBmZGstYWFjCj4gImZkay1hYWMvYWFjZW5jX2xpYi5oIiBhYWNF bmNPcGVuIHx8Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmVxdWlyZSBs aWJmZGtfYWFjCj4gZmRrLWFhYy9hYWNlbmNfbGliLmggYWFjRW5jT3BlbiAtbGZkay1hYWMgJiYK PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuICJ1c2luZyBsaWJmZGsg d2l0aG91dAo+IHBrZy1jb25maWciOyB9IH0KPiA+IGRpZmYgLS1naXQgYS9kb2MvZGVtdXhlcnMu dGV4aSBiL2RvYy9kZW11eGVycy50ZXhpCj4gPiBpbmRleCBlNGM1YjU2MGE2Li4wNjJlYTJlYTQy IDEwMDY0NAo+ID4gLS0tIGEvZG9jL2RlbXV4ZXJzLnRleGkKPiA+ICsrKyBiL2RvYy9kZW11eGVy cy50ZXhpCj4gPiBAQCAtMjg1LDYgKzI4NSwxMzYgQEAgVGhpcyBkZW11eGVyIGFjY2VwdHMgdGhl IGZvbGxvd2luZyBvcHRpb246Cj4gPgo+ID4gIEBlbmQgdGFibGUKPiA+Cj4gPiArQHNlY3Rpb24g ZHZkdmlkZW8KPiA+ICsKPiA+ICtEVkQtVmlkZW8gZGVtdXhlciwgcG93ZXJlZCBieSBsaWJkdmRu YXYgYW5kIGxpYmR2ZHJlYWQuCj4gPiArCj4gPiArQ2FuIGRpcmVjdGx5IGluZ2VzdCBEVkQgdGl0 bGVzLCBzcGVjaWZpY2FsbHkgc2VxdWVudGlhbCBQR0NzLAo+ID4gK2ludG8gYSBjb252ZXJzaW9u IHBpcGVsaW5lLiBNZW51cyBhbmQgc2Vla2luZyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzCj4g dGltZS4KPiA+ICsKPiA+ICtCbG9jayBkZXZpY2VzIChEVkQgZHJpdmVzKSwgSVNPIGZpbGVzLCBh bmQgZGlyZWN0b3J5IHN0cnVjdHVyZXMgYXJlCj4gYWNjZXB0ZWQuCj4gPiArQWN0aXZhdGUgd2l0 aCBAY29kZXstZiBkdmR2aWRlb30gaW4gZnJvbnQgb2Ygb25lIG9mIHRoZXNlIGlucHV0cy4KPiA+ ICsKPiA+ICtVbmRlcmx5aW5nIHBsYXliYWNrIGlzIGhhbmRsZWQgYnkgbGliZHZkbmF2LCBhbmQg c3RydWN0dXJlIHBhcnNpbmcgYnkKPiBsaWJkdmRyZWFkLgo+ID4gK0ZGbXBlZyBtdXN0IGJlIGJ1 aWx0IHdpdGggR1BMIGxpYnJhcnkgc3VwcG9ydCBhdmFpbGFibGUgYXMgd2VsbCBhcyB0aGUKPiA+ ICtjb25maWd1cmUgc3dpdGNoZXMgQGNvZGV7LS1lbmFibGUtbGliZHZkbmF2fSBhbmQKPiBAY29k ZXstLWVuYWJsZS1saWJkdmRyZWFkfS4KPiA+ICsKPiA+ICtZb3Ugd2lsbCBuZWVkIHRvIHByb3Zp ZGUgZWl0aGVyIHRoZSBkZXNpcmVkICJ0aXRsZSBudW1iZXIiIG9yIGV4YWN0Cj4gUEdDL1BHIGNv b3JkaW5hdGVzLgo+ID4gK01hbnkgb3Blbi1zb3VyY2UgRFZEIHBsYXllcnMgYW5kIHRvb2xzIGNh biBhaWQgaW4gcHJvdmlkaW5nIHRoaXMKPiBpbmZvcm1hdGlvbi4KPiA+ICtJZiBub3Qgc3BlY2lm aWVkLCB0aGUgZGVtdXhlciB3aWxsIGRlZmF1bHQgdG8gdGl0bGUgMSB3aGljaCB3b3JrcyBmb3IK PiBtYW55IGRpc2NzLgo+ID4gK0hvd2V2ZXIsIGR1ZSB0byB0aGUgZmxleGliaWxpdHkgb2YgdGhl IGZvcm1hdCwgaXQgaXMgcmVjb21tZW5kZWQgdG8KPiBjaGVjayBtYW51YWxseS4KPiA+ICtUaGVy ZSBhcmUgbWFueSBkaXNjcyB0aGF0IGFyZSBhdXRob3JlZCBzdHJhbmdlbHkgb3Igd2l0aCBpbnZh bGlkCj4gaGVhZGVycy4KPiA+ICsKPiA+ICtJZiB0aGUgaW5wdXQgaXMgYSByZWFsIERWRCBkcml2 ZSwgcGxlYXNlIG5vdGUgdGhhdCB0aGVyZSBhcmUgc29tZQo+IGRyaXZlcyB3aGljaCBtYXkKPiA+ ICtzaWxlbnRseSBmYWlsIG9uIHJlYWRpbmcgYmFkIHNlY3RvcnMgZnJvbSB0aGUgZGlzYywgcmV0 dXJuaW5nIHJhbmRvbQo+IGJpdHMgaW5zdGVhZAo+ID4gK3doaWNoIGlzIGVmZmVjdGl2ZWx5IGNv cnJ1cHQgZGF0YS4gVGhpcyBpcyBlc3BlY2lhbGx5IHByb21pbmVudCBvbgo+IGFnaW5nIG9yIHJv dHRpbmcgZGlzY3MuCj4gPiArQSBzZWNvbmQgcGFzcyBhbmQgaW50ZWdyaXR5IGNoZWNrcyB3b3Vs ZCBiZSBuZWVkZWQgdG8gZGV0ZWN0IHRoZQo+IGNvcnJ1cHRpb24uCj4gPiArVGhpcyBpcyBub3Qg YW4gRkZtcGVnIGlzc3VlLgo+ID4gKwo+ID4gK0BzdWJzZWN0aW9uIEJhY2tncm91bmQKPiA+ICsK PiA+ICtEVkQtVmlkZW8gaXMgbm90IGEgZGlyZWN0bHkgYWNjZXNzaWJsZSwgbGluZWFyIGNvbnRh aW5lciBmb3JtYXQgaW4gdGhlCj4gPiArdHJhZGl0aW9uYWwgc2Vuc2UuIEluc3RlYWQsIGl0IGFs bG93cyBmb3IgY29tcGxleCBhbmQgcHJvZ3JhbW1hdGljCj4gcGxheWJhY2sgb2YKPiA+ICtjYXJl ZnVsbHkgbXV4ZWQgTVBFRy1QUyBzdHJlYW1zIHRoYXQgYXJlIHN0b3JlZCBpbiBoZWFkZXJsZXNz IFZPQiBmaWxlcy4KPiA+ICtUbyB0aGUgZW5kLXVzZXIsIHRoZXNlIHN0cmVhbXMgYXJlIGtub3du IHNpbXBseSBhcyAidGl0bGVzIiwgYnV0IHRoZQo+IGFjdHVhbAo+ID4gK2xvZ2ljYWwgcGxheWJh Y2sgc2VxdWVuY2UgaXMgZGVmaW5lZCBieSBvbmUgb3IgbW9yZSAiUEdDcyIsIG9yIFByb2dyYW0K PiBHcm91cCBDaGFpbnMsCj4gPiArd2l0aGluIHRoZSB0aXRsZS4gVGhlIFBHQyBpcyBpbiB0dXJu IGNvbXByaXNlZCBvZiBtdWx0aXBsZSAiUEdzIiwgb3IKPiBQcm9ncmFtcyIsCj4gPiArd2hpY2gg YXJlIHRoZSBhY3R1YWwgdmlkZW8gc2VnbWVudHMgKGFuZCBmb3IgYSB0eXBpY2FsIHZpZGVvIGZl YXR1cmUsCj4gc2VxdWVudGlhbGx5Cj4gPiArb3JkZXJlZCkuIFRoZSBQR0Mgc3RydWN0dXJlLCBh bG9uZyB3aXRoIHN0cmVhbSBsYXlvdXQgYW5kIG1ldGFkYXRhLCBhcmUKPiBzdG9yZWQgaW4KPiA+ ICtJRk8gZmlsZXMgdGhhdCBuZWVkIHRvIGJlIHBhcnNlZC4gUEdDcyBjYW4gYmUgdGhvdWdodCBv ZiBhcyBwbGF5bGlzdHMKPiBpbiBlYXNpZXIgdGVybXMuCj4gPiArCj4gPiArQW4gYWN0dWFsIERW RCBwbGF5ZXIgcmVsaWVzIG9uIHVzZXIgR1VJIGludGVyYWN0aW9uIHZpYSBtZW51cyBhbmQgYW4K PiBpbnRlcm5hbCBWTQo+ID4gK3RvIGRyaXZlIHRoZSBkaXJlY3Rpb24gb2YgZGVtdXhpbmcuIEdl bmVyYWxseSwgdGhlIHVzZXIgd291bGQgZWl0aGVyCj4gbmF2aWdhdGUgKHZpYSBtZW51cykKPiA+ ICtvciBhdXRvbWF0aWNhbGx5IGJlIHJlZGlyZWN0ZWQgdG8gdGhlIFBHQyBvZiB0aGVpciBjaG9p Y2UuIER1cmluZyB0aGlzCj4gcHJvY2VzcyBhbmQKPiA+ICt0aGUgc3Vic2VxdWVudCBwbGF5YmFj aywgdGhlIERWRCBwbGF5ZXIncyBpbnRlcm5hbCBWTSBhbHNvIG1haW50YWlucyBhCj4gc3RhdGUg YW5kCj4gPiArZXhlY3V0ZXMgaW5zdHJ1Y3Rpb25zIHRoYXQgY2FuIGNyZWF0ZSBqdW1wcyB0byBk aWZmZXJlbnQgc2VjdG9ycyBkdXJpbmcKPiBwbGF5YmFjay4KPiA+ICtUaGlzIGlzIHdoeSBsaWJk dmRuYXYgaXMgaW52b2x2ZWQsIGFzIGEgbGluZWFyIHJlYWQgb2YgdGhlIE1QRUctUFMKPiBibG9i cyBvbiB0aGUKPiA+ICtkaXNjIChWT0JzKSBpcyBub3QgZW5vdWdoIHRvIHByb2R1Y2UgdGhlIHJp Z2h0IHNlcXVlbmNlIGluIG1hbnkgY2FzZXMuCj4gPiArCj4gPiArVGhlcmUgYXJlIG1hbnkgb3Ro ZXIgRFZEIHN0cnVjdHVyZXMgKGEgbG9uZyBzdWJqZWN0KSB0aGF0IHdpbGwgbm90IGJlCj4gZGlz Y3Vzc2VkIGhlcmUuCj4gPiArTkFWIHBhY2tldHMsIGluIHBhcnRpY3VsYXIsIGFyZSBoYW5kbGVk IGJ5IHRoaXMgZGVtdXhlciB0byBidWlsZAo+IGFjY3VyYXRlIHRpbWluZwo+ID4gK2J1dCBub3Qg ZW1pdHRlZCBhcyBhIHN0cmVhbS4gRm9yIGEgZ29vZCBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcs IHJlZmVyCj4gdG86Cj4gPiArQHVybHsKPiBodHRwczovL2NvZGUudmlkZW9sYW4ub3JnL3ZpZGVv bGFuL2xpYmR2ZG5hdi8tL2Jsb2IvbWFzdGVyL2RvYy9kdmRfc3RydWN0dXJlcwo+IH0KPiA+ICsK PiA+ICtAc3Vic2VjdGlvbiBPcHRpb25zCj4gPiArCj4gPiArVGhpcyBkZW11eGVyIGFjY2VwdHMg dGhlIGZvbGxvd2luZyBvcHRpb25zOgo+ID4gKwo+ID4gK0B0YWJsZSBAb3B0aW9uCj4gPiArCj4g PiArQGl0ZW0gdGl0bGUgQHZhcntpbnR9Cj4gPiArVGhlIHRpdGxlIG51bWJlciB0byBwbGF5LiBN dXN0IGJlIHNldCBpZiBAb3B0aW9ue3BnY30gYW5kIEBvcHRpb257cGd9Cj4gYXJlIG5vdCBzZXQu Cj4gPiArRGVmYXVsdCBpcyAwIChhdXRvKSwgd2hpY2ggY3VycmVudGx5IG9ubHkgc2VsZWN0cyB0 aGUgZmlyc3QgYXZhaWxhYmxlCj4gdGl0bGUgKHRpdGxlIDEpCj4gPiArYW5kIG5vdGlmaWVzIHRo ZSB1c2VyIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuCj4gPiArCj4gPiArQGl0ZW0gY2hhcHRlcl9z dGFydCBAdmFye2ludH0KPiA+ICtUaGUgY2hhcHRlciwgb3IgUFRUIChwYXJ0LW9mLXRpdGxlKSwg bnVtYmVyIHRvIHN0YXJ0IGF0LiBEZWZhdWx0IGlzIDEuCj4gPiArCj4gPiArQGl0ZW0gY2hhcHRl cl9lbmQgQHZhcntpbnR9Cj4gPiArVGhlIGNoYXB0ZXIsIG9yIFBUVCAocGFydC1vZi10aXRsZSks IG51bWJlciB0byBlbmQgYXQuIERlZmF1bHQgaXMgMCwKPiA+ICt3aGljaCBpcyBhIHNwZWNpYWwg dmFsdWUgdG8gc2lnbmFsIGVuZCBhdCB0aGUgbGFzdCBwb3NzaWJsZSBjaGFwdGVyLgo+ID4gKwo+ ID4gK0BpdGVtIGFuZ2xlIEB2YXJ7aW50fQo+ID4gK1RoZSB2aWRlbyBhbmdsZSBudW1iZXIsIHJl ZmVycmluZyB0byB3aGF0IGlzIGVzc2VudGlhbGx5IGFuIGFkZGl0aW9uYWwKPiA+ICt2aWRlbyBz dHJlYW0gdGhhdCBpcyBjb21wb3NlZCBmcm9tIGFsdGVybmF0ZSBmcmFtZXMgaW50ZXJsZWF2ZWQg aW4gdGhlCj4gVk9Ccy4KPiA+ICtEZWZhdWx0IGlzIDEuCj4gPiArCj4gPiArQGl0ZW0gcmVnaW9u IEB2YXJ7aW50fQo+ID4gK1RoZSByZWdpb24gY29kZSB0byB1c2UgZm9yIHBsYXliYWNrLiBTb21l IGRpc2NzIG1heSB1c2UgdGhpcyB0byBkZWZhdWx0Cj4gcGxheWJhY2sKPiA+ICthdCBhIHBhcnRp Y3VsYXIgYW5nbGUgaW4gZGlmZmVyZW50IHJlZ2lvbnMuIFRoaXMgb3B0aW9uIHdpbGwgbm90IGFm ZmVjdAo+IHRoZSByZWdpb24gY29kZQo+ID4gK29mIGEgcmVhbCBEVkQgZHJpdmUsIGlmIHVzZWQg YXMgYW4gaW5wdXQuIERlZmF1bHQgaXMgMCwgIndvcmxkIi4KPiA+ICsKPiA+ICtAaXRlbSBwZ2Mg QHZhcntpbnR9Cj4gPiArVGhlIGVudHJ5IFBHQyB0byBzdGFydCBwbGF5YmFjaywgaW4gY29uanVu Y3Rpb24gd2l0aCBAb3B0aW9ue3BnfS4KPiA+ICtBbHRlcm5hdGl2ZSB0byBzZXR0aW5nIEBvcHRp b257dGl0bGV9Lgo+ID4gK0NoYXB0ZXIgbWFya2VycyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlz IHRpbWUuCj4gPiArRGVmYXVsdCBpcyAwLCBhdXRvbWF0aWNhbGx5IHJlc29sdmUgZnJvbSB2YWx1 ZSBvZiBAb3B0aW9ue3RpdGxlfS4KPiA+ICsKPiA+ICtAaXRlbSBwZyBAdmFye2ludH0KPiA+ICtU aGUgZW50cnkgUEcgdG8gc3RhcnQgcGxheWJhY2ssIGluIGNvbmp1bmN0aW9uIHdpdGggQG9wdGlv bntwZ2N9Lgo+ID4gK0FsdGVybmF0aXZlIHRvIHNldHRpbmcgQG9wdGlvbnt0aXRsZX0uCj4gPiAr Q2hhcHRlciBtYXJrZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4KPiA+ICtEZWZh dWx0IGlzIDAsIGF1dG9tYXRpY2FsbHkgcmVzb2x2ZSBmcm9tIHZhbHVlIG9mIEBvcHRpb257dGl0 bGV9Lgo+ID4gKwo+ID4gK0BpdGVtIHByZWluZGV4IEB2YXJ7Ym9vbH0KPiA+ICtFbmFibGUgdGhp cyB0byBoYXZlIGFjY3VyYXRlIGNoYXB0ZXIgKFBUVCkgbWFya2VycyBhbmQgZHVyYXRpb24KPiBt ZWFzdXJlbWVudCwKPiA+ICt3aGljaCByZXF1aXJlcyBhIHNsb3cgc2Vjb25kIHBhc3MgcmVhZCBp biBvcmRlciB0byBpbmRleCB0aGUgY2hhcHRlcgo+IG1hcmtlcgo+ID4gK3RpbWVzdGFtcHMgZnJv bSBOQVYgcGFja2V0cy4gVGhpcyBpcyBub24taWRlYWwgZXh0cmEgd29yayBmb3IgcmVhbAo+IG9w dGljYWwgZHJpdmVzLgo+ID4gK0l0IGlzIHJlY29tbWVuZGVkIGFuZCBmYXN0ZXIgdG8gdXNlIHRo aXMgb3B0aW9uIHdpdGggYSBiYWNrdXAgb2YgdGhlCj4gRFZEIHN0cnVjdHVyZQo+ID4gK3N0b3Jl ZCBvbiBhIGhhcmQgZHJpdmUuIE5vdCBjb21wYXRpYmxlIHdpdGggQG9wdGlvbntwZ2N9IGFuZAo+ IEBvcHRpb257cGd9Lgo+ID4gK0RlZmF1bHQgaXMgMCwgZmFsc2UuCj4gPiArCj4gPiArQGl0ZW0g dHJpbSBAdmFye2Jvb2x9Cj4gPiArU2tpcCBwYWRkaW5nIGNlbGxzIChpLmUuIGNlbGxzIHNob3J0 ZXIgdGhhbiAxIHNlY29uZCkgZnJvbSB0aGUKPiBiZWdpbm5pbmcuCj4gPiArVGhlcmUgZXhpc3Qg bWFueSBkaXNjcyB3aXRoIGZpbGxlciBzZWdtZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBQ R0MsCj4gPiArb2Z0ZW4gd2l0aCBqdW5rIGRhdGEgaW50ZW5kZWQgZm9yIGNvbnRyb2xsaW5nIGEg cmVhbCBEVkQgcGxheWVyJ3MKPiA+ICtidWZmZXJpbmcgc3BlZWQgYW5kIHdpdGggbm8gb3RoZXIg bWF0ZXJpYWwgZGF0YSB2YWx1ZS4KPiA+ICtEZWZhdWx0IGlzIDEsIHRydWUuCj4gPiArCj4gPiAr QGVuZCB0YWJsZQo+ID4gKwo+ID4gK0BzdWJzZWN0aW9uIEV4YW1wbGVzCj4gPiArCj4gPiArQGl0 ZW1pemUKPiA+ICtAaXRlbQo+ID4gK09wZW4gdGl0bGUgMyBmcm9tIGEgZ2l2ZW4gRFZEIHN0cnVj dHVyZToKPiA+ICtAZXhhbXBsZQo+ID4gK2ZmbXBlZyAtZiBkdmR2aWRlbyAtdGl0bGUgMyAtaSA8 cGF0aCB0byBEVkQ+IC4uLgo+ID4gK0BlbmQgZXhhbXBsZQo+ID4gKwo+ID4gK0BpdGVtCj4gPiAr T3BlbiBjaGFwdGVycyAzLTYgZnJvbSB0aXRsZSAxIGZyb20gYSBnaXZlbiBEVkQgc3RydWN0dXJl Ogo+ID4gK0BleGFtcGxlCj4gPiArZmZtcGVnIC1mIGR2ZHZpZGVvIC1jaGFwdGVyX3N0YXJ0IDMg LWNoYXB0ZXJfZW5kIDYgLXRpdGxlIDEgLWkgPHBhdGggdG8KPiBEVkQ+IC4uLgo+ID4gK0BlbmQg ZXhhbXBsZQo+ID4gKwo+ID4gK0BpdGVtCj4gPiArT3BlbiBvbmx5IGNoYXB0ZXIgNSBmcm9tIHRp dGxlIDEgZnJvbSBhIGdpdmVuIERWRCBzdHJ1Y3R1cmU6Cj4gPiArQGV4YW1wbGUKPiA+ICtmZm1w ZWcgLWYgZHZkdmlkZW8gLWNoYXB0ZXJfc3RhcnQgNSAtY2hhcHRlcl9lbmQgNSAtdGl0bGUgMSAt aSA8cGF0aCB0bwo+IERWRD4gLi4uCj4gPiArQGVuZCBleGFtcGxlCj4gPiArQGVuZCBpdGVtaXpl Cj4gPiArCj4gPiAgQHNlY3Rpb24gZWEKPiA+Cj4gPiAgRWxlY3Ryb25pYyBBcnRzIE11bHRpbWVk aWEgZm9ybWF0IGRlbXV4ZXIuCj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUg Yi9saWJhdmZvcm1hdC9NYWtlZmlsZQo+ID4gaW5kZXggMDViOWI4YTExNS4uZGY2OTczNDg3NyAx MDA2NDQKPiA+IC0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gPiArKysgYi9saWJhdmZvcm1h dC9NYWtlZmlsZQo+ID4gQEAgLTE5Miw2ICsxOTIsNyBAQCBPQkpTLSQoQ09ORklHX0RUU19NVVhF UikgICAgICAgICAgICAgICAgICs9IHJhd2VuYy5vCj4gPiAgT0JKUy0kKENPTkZJR19EVl9NVVhF UikgICAgICAgICAgICAgICAgICArPSBkdmVuYy5vCj4gPiAgT0JKUy0kKENPTkZJR19EVkJTVUJf REVNVVhFUikgICAgICAgICAgICArPSBkdmJzdWIubyByYXdkZWMubwo+ID4gIE9CSlMtJChDT05G SUdfRFZCVFhUX0RFTVVYRVIpICAgICAgICAgICAgKz0gZHZidHh0Lm8gcmF3ZGVjLm8KPiA+ICtP QkpTLSQoQ09ORklHX0RWRFZJREVPX0RFTVVYRVIpICAgICAgICAgICs9IGR2ZHZpZGVvZGVjLm8K PiA+ICBPQkpTLSQoQ09ORklHX0RYQV9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IGR4YS5vCj4g PiAgT0JKUy0kKENPTkZJR19FQV9DREFUQV9ERU1VWEVSKSAgICAgICAgICArPSBlYWNkYXRhLm8K PiA+ICBPQkpTLSQoQ09ORklHX0VBX0RFTVVYRVIpICAgICAgICAgICAgICAgICs9IGVsZWN0cm9u aWNhcnRzLm8KPiA+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMgYi9saWJh dmZvcm1hdC9hbGxmb3JtYXRzLmMKPiA+IGluZGV4IGIwNGI0M2NhYjMuLjNlOTA1YzIzZjggMTAw NjQ0Cj4gPiAtLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKPiA+ICsrKyBiL2xpYmF2Zm9y bWF0L2FsbGZvcm1hdHMuYwo+ID4gQEAgLTE1MCw2ICsxNTAsNyBAQCBleHRlcm4gY29uc3QgQVZJ bnB1dEZvcm1hdCAgZmZfZHZfZGVtdXhlcjsKPiA+ICBleHRlcm4gY29uc3QgRkZPdXRwdXRGb3Jt YXQgZmZfZHZfbXV4ZXI7Cj4gPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2R2YnN1 Yl9kZW11eGVyOwo+ID4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9kdmJ0eHRfZGVt dXhlcjsKPiA+ICtleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZHZkdmlkZW9fZGVtdXhl cjsKPiA+ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfZHhhX2RlbXV4ZXI7Cj4gPiAg ZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX2VhX2RlbXV4ZXI7Cj4gPiAgZXh0ZXJuIGNv bnN0IEFWSW5wdXRGb3JtYXQgIGZmX2VhX2NkYXRhX2RlbXV4ZXI7Cj4gPiBkaWZmIC0tZ2l0IGEv bGliYXZmb3JtYXQvZHZkdmlkZW9kZWMuYyBiL2xpYmF2Zm9ybWF0L2R2ZHZpZGVvZGVjLmMKPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi5jODYyODYwOWM5Cj4g PiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9saWJhdmZvcm1hdC9kdmR2aWRlb2RlYy5jCj4gPiBA QCAtMCwwICsxLDE0MTkgQEAKPiA+ICsvKgo+ID4gKyAqIERWRC1WaWRlbyBkZW11eGVyLCBwb3dl cmVkIGJ5IGxpYmR2ZG5hdiBhbmQgbGliZHZkcmVhZAo+ID4gKyAqCj4gPiArICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgo+ID4gKyAqCj4gPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ID4gKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiA+ICsgKiBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK PiA+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KPiA+ICsgKgo+ID4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4gKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPiArICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKPiA+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgo+ID4gKyAqCj4gPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0 aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiA+ICsgKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B Cj4gMDIxMTAtMTMwMSBVU0EKPiA+ICsgKi8KPiA+ICsKPiA+ICsvKgo+ID4gKyAqIFNlZSBkb2Mv ZGVtdXhlcnMudGV4aSBmb3IgYSBoaWdoLWxldmVsIG92ZXJ2aWV3Lgo+ID4gKyAqCj4gPiArICog VGhlIHRhY3RpY2FsIGFwcHJvYWNoIGlzIGFzIGZvbGxvd3M6Cj4gPiArICogMSkgT3BlbiB0aGUg dm9sdW1lIHdpdGggZHZkcmVhZAo+ID4gKyAqIDIpIEFuYWx5emUgdGhlIHVzZXItcmVxdWVzdGVk IHRpdGxlIGFuZCBQR0MgY29vcmRpbmF0ZXMgaW4gdGhlIElGTwo+IHN0cnVjdHVyZXMKPiA+ICsg KiAzKSBSZXF1ZXN0IHBsYXliYWNrIGF0IHRoZSBjb29yZGluYXRlcyBhbmQgY2hvc2VuIGFuZ2xl IHdpdGggZHZkbmF2Cj4gPiArICogNSkgQmVnaW4gdGhlIHBsYXliYWNrIChyZWFkaW5nIGFuZCBk ZW11eGluZykgb2YgTVBFRy1QUyBibG9ja3MKPiA+ICsgKiA2KSBFbmQgcGxheWJhY2sgaWYgbmF2 aWdhdGlvbiBnb2VzIGJhY2t3YXJkcywgdG8gYSBtZW51LCBvciBhCj4gZGlmZmVyZW50IFBHQyBv ciBhbmdsZQo+ID4gKyAqIDcpIENsb3NlIHRoZSBkdmRuYXYgVk0sIGFuZCBmcmVlIGR2ZHJlYWQn cyBJRk8gc3RydWN0dXJlcwo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxkdmRuYXYvZHZk bmF2Lmg+Cj4gPiArI2luY2x1ZGUgPGR2ZHJlYWQvZHZkX3JlYWRlci5oPgo+ID4gKyNpbmNsdWRl IDxkdmRyZWFkL2lmb19yZWFkLmg+Cj4gPiArI2luY2x1ZGUgPGR2ZHJlYWQvaWZvX3R5cGVzLmg+ Cj4gPiArI2luY2x1ZGUgPGR2ZHJlYWQvbmF2X3JlYWQuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAi bGliYXZjb2RlYy9hdmNvZGVjLmgiCj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5o Igo+ID4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZ1dGlsLmgiCj4gPiArI2luY2x1ZGUgImxpYmF2 dXRpbC9pbnRyZWFkd3JpdGUuaCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+ID4g KyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9zYW1w bGVmbXQuaCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3RpbWUuaCIKPiA+ICsjaW5jbHVkZSAi bGliYXZ1dGlsL3RpbWVzdGFtcC5oIgo+ID4gKwo+ID4gKyNpbmNsdWRlICJhdmZvcm1hdC5oIgo+ ID4gKyNpbmNsdWRlICJhdmlvX2ludGVybmFsLmgiCj4gPiArI2luY2x1ZGUgImF2bGFuZ3VhZ2Uu aCIKPiA+ICsjaW5jbHVkZSAiZGVtdXguaCIKPiA+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiA+ ICsjaW5jbHVkZSAidXJsLmgiCj4gPiArCj4gPiArI2RlZmluZSBEVkRWSURFT19NQVhfUFNfU0VB UkNIX0JMT0NLUyAgICAgICAgICAgICAgICAgICAxMjgKPiA+ICsjZGVmaW5lIERWRFZJREVPX0JM T0NLX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwNDgKPiA+ICsjZGVmaW5lIERW RFZJREVPX1RJTUVfQkFTRV9RICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBVlJhdGlvbmFs KSB7Cj4gMSwgOTAwMDAgfQo+ID4gKyNkZWZpbmUgRFZEVklERU9fUFRTX1dSQVBfQklUUyAgICAg ICAgICAgICAgICAgICAgICAgICAgNjQgLyogVk9CVXMgdXNlCj4gMzIgKFBFUyBhbGxvd3MgMzMp ICovCj4gPiArCj4gPiArI2RlZmluZSBEVkRWSURFT19MSUJEVkRYX0xPR19CVUZGRVJfU0laRSAg ICAgICAgICAgICAgICAxMDI0Cj4gPiArCj4gPiArZW51bSBEVkRWaWRlb1N1YnBpY3R1cmVWaWV3 cG9ydCB7Cj4gPiArICAgIERWRFZJREVPX1NVQlBfVklFV1BPUlRfRlVMTFNDUkVFTiwKPiA+ICsg ICAgRFZEVklERU9fU1VCUF9WSUVXUE9SVF9XSURFU0NSRUVOLAo+ID4gKyAgICBEVkRWSURFT19T VUJQX1ZJRVdQT1JUX0xFVFRFUkJPWCwKPiA+ICsgICAgRFZEVklERU9fU1VCUF9WSUVXUE9SVF9Q QU5TQ0FOCj4gPiArfTsKPiA+ICtzdGF0aWMgY29uc3QgY2hhciBkdmR2aWRlb19zdWJwX3ZpZXdw b3J0X2xhYmVsc1s0XVsxM10gPSB7Cj4gPiArICAgICJGdWxsc2NyZWVuIiwgIldpZGVzY3JlZW4i LCAiTGV0dGVyYm94IiwgIlBhbiBhbmQgU2NhbiIKPiA+ICt9Owo+ID4gKwo+ID4gK3R5cGVkZWYg c3RydWN0IERWRFZpZGVvVlRTVmlkZW9TdHJlYW1FbnRyeSB7Cj4gPiArICAgIGludCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Y29kZTsKPiA+ICsgICAgZW51bSBBVkNvZGVj SUQgICAgICAgICAgICAgICAgICAgICAgY29kZWNfaWQ7Cj4gPiArICAgIGludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBoZWlnaHQ7Cj4gPiArICAgIEFWUmF0aW9uYWwgICAgICAgICAgICAg ICAgICAgICAgICAgIGRhcjsKPiA+ICsgICAgQVZSYXRpb25hbCAgICAgICAgICAgICAgICAgICAg ICAgICAgZnJhbWVyYXRlOwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBoYXNfY2M7Cj4gPiArfSBEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFtRW50cnk7Cj4gPiArCj4g PiArdHlwZWRlZiBzdHJ1Y3QgRFZEVmlkZW9QR0NBdWRpb1N0cmVhbUVudHJ5IHsKPiA+ICsgICAg aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRjb2RlOwo+ID4gKyAgICBl bnVtIEFWQ29kZWNJRCAgICAgICAgICAgICAgICAgICAgICBjb2RlY19pZDsKPiA+ICsgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX2ZtdDsKPiA+ICsgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Cj4gPiArICAgIGlu dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF9kZXB0aDsKPiA+ICsgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJfY2hhbm5lbHM7Cj4gPiArICAgIEFW Q2hhbm5lbExheW91dCAgICAgICAgICAgICAgICAgICAgIGNoX2xheW91dDsKPiA+ICsgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb247Cj4gPiArICAgIGNv bnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICpsYW5nX2lzbzsKPiA+ICt9IERWRFZp ZGVvUEdDQXVkaW9TdHJlYW1FbnRyeTsKPiA+ICsKPiA+ICt0eXBlZGVmIHN0cnVjdCBEVkRWaWRl b1BHQ1N1YnRpdGxlU3RyZWFtRW50cnkgewo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdGFydGNvZGU7Cj4gPiArICAgIGVudW0gRFZEVmlkZW9TdWJwaWN0dXJl Vmlld3BvcnQgICAgIHZpZXdwb3J0Owo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkaXNwb3NpdGlvbjsKPiA+ICsgICAgY29uc3QgY2hhciAgICAgICAgICAgICAg ICAgICAgICAgICAgKmxhbmdfaXNvOwo+ID4gK30gRFZEVmlkZW9QR0NTdWJ0aXRsZVN0cmVhbUVu dHJ5Owo+ID4gKwo+ID4gK3R5cGVkZWYgc3RydWN0IERWRFZpZGVvUGxheWJhY2tTdGF0ZSB7Cj4g PiArICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsbjsgICAgICAgICAgICAgIC8q IElEIG9mIHRoZSBhY3RpdmUKPiBjZWxsICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAg ICAgICAgICBlbnRyeV9wZ247ICAgICAgICAgIC8qIElEIG9mIHRoZSBQRyB3ZQo+IGFyZSBzdGFy dGluZyBpbiAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgaW5fcGdjOyAg ICAgICAgICAgICAvKiBpZiBvdXIgbmF2aWdhdG9yCj4gaXMgaW4gdGhlIFBHQyAqLwo+ID4gKyAg ICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgaW5fcHM7ICAgICAgICAgICAgICAvKiBpZiBv dXIgbmF2aWdhdG9yCj4gaXMgaW4gdGhlIHByb2dyYW0gc3RyZWFtICovCj4gPiArICAgIGludCAg ICAgICAgICAgICAgICAgICAgICAgICBpbl92dHM7ICAgICAgICAgICAgIC8qIGlmIG91ciBuYXZp Z2F0b3IKPiBpcyBpbiB0aGUgVlRTICovCj4gPiArICAgIGludDY0X3QgICAgICAgICAgICAgICAg ICAgICBuYXZfcHRzOyAgICAgICAgICAgIC8qIFBUUyBhY2NvcmRpbmcgdG8KPiBJRk8sIG5vdCBm cmFtZS1hY2N1cmF0ZSAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgbmJf Y2VsbHNfcGxheWVkOyAgICAvKiBudW1iZXIgb2YgY2VsbHMKPiBwbGF5ZWQgYmFjayBzbyBmYXIg Ki8KPiA+ICsgICAgdWludDY0X3QgICAgICAgICAgICAgICAgICAgIHBnY19kdXJhdGlvbl9lc3Q7 ICAgLyogZXN0aW1hdGVkCj4gZHVyYXRpb24gYXMgcmVwb3J0ZWQgYnkgSUZPICovCj4gPiArICAg IHVpbnQ2NF90ICAgICAgICAgICAgICAgICAgICBwZ2NfZWxhcHNlZDsgICAgICAgIC8qIHRoZSBl bGFwc2VkIHRpbWUKPiBvZiB0aGUgUEdDLCBjZWxsLXJlbGF0aXZlICovCj4gPiArICAgIGludCAg ICAgICAgICAgICAgICAgICAgICAgICBwZ2NfbmJfcGdfZXN0OyAgICAgIC8qIG51bWJlciBvZiBQ R3MgYXMKPiByZXBvcnRlZCBieSBJRk9zICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAg ICAgICAgICBwZ2NuOyAgICAgICAgICAgICAgIC8qIElEIG9mIHRoZSBQR0Mgd2UKPiBhcmUgcGxh eWluZyAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcGduOyAgICAgICAg ICAgICAgICAvKiBJRCBvZiB0aGUgUEcgd2UKPiBhcmUgaW4gbm93ICovCj4gPiArICAgIGludCAg ICAgICAgICAgICAgICAgICAgICAgICBwdHQ7ICAgICAgICAgICAgICAgIC8qIElEIG9mIHRoZQo+ IGNoYXB0ZXIgd2UgYXJlIGluIG5vdyAqLwo+ID4gKyAgICBpbnQ2NF90ICAgICAgICAgICAgICAg ICAgICAgdHNfb2Zmc2V0OyAgICAgICAgICAvKiBQVFMKPiBkaXNjb250aW51aXR5IG9mZnNldCAo ZXguIFZPQiBjaGFuZ2UpICovCj4gPiArICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICB2 b2J1X2R1cmF0aW9uOyAgICAgIC8qIGR1cmF0aW9uIG9mIHRoZQo+IGN1cnJlbnQgVk9CVSAqLwo+ ID4gKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgdm9idV9lX3B0bTsgICAgICAgICAv KiBlbmQgUFRTIG9mIHRoZQo+IGN1cnJlbnQgVk9CVSAqLwo+ID4gKyAgICBpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgdnRzbjsgICAgICAgICAgICAgICAvKiBJRCBvZiB0aGUgYWN0aXZlCj4g VlRTICh2aWRlbyB0aXRsZSBzZXQpICovCj4gPiArICAgIHVpbnQ2NF90ICAgICAgICAgICAgICAg ICAgICAqcGdjX3BnX3RpbWVzX2VzdDsgIC8qIFBHIHN0YXJ0IHRpbWVzCj4gYXMgcmVwb3J0ZWQg YnkgSUZPICovCj4gPiArICAgIHBnY190ICAgICAgICAgICAgICAgICAgICAgICAqcGdjOyAgICAg ICAgICAgICAgIC8qIGhhbmRsZSB0byB0aGUKPiBhY3RpdmUgUEdDICovCj4gPiArICAgIGR2ZG5h dl90ICAgICAgICAgICAgICAgICAgICAqZHZkbmF2OyAgICAgICAgICAgIC8qIGhhbmRsZSB0bwo+ IGxpYmR2ZG5hdiAqLwo+ID4gK30gRFZEVmlkZW9QbGF5YmFja1N0YXRlOwo+ID4gKwo+ID4gK3R5 cGVkZWYgc3RydWN0IERWRFZpZGVvRGVtdXhDb250ZXh0IHsKPiA+ICsgICAgY29uc3QgQVZDbGFz cyAgICAgICAgICAgICAgICpjbGFzczsKPiA+ICsKPiA+ICsgICAgLyogb3B0aW9ucyAqLwo+ID4g KyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2FuZ2xlOyAgICAgICAgICAvKiB0 aGUKPiB1c2VyLXByb3ZpZGVkIGFuZ2xlIG51bWJlciAoMS1pbmRleGVkKSAqLwo+ID4gKyAgICBp bnQgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2NoYXB0ZXJfZW5kOyAgICAvKiB0aGUKPiB1 c2VyLXByb3ZpZGVkIGV4aXQgUFRUICgwIGZvciBsYXN0KSAqLwo+ID4gKyAgICBpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgb3B0X2NoYXB0ZXJfc3RhcnQ7ICAvKiB0aGUKPiB1c2VyLXByb3Zp ZGVkIGVudHJ5IFBUVCAoMS1pbmRleGVkKSAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAg ICAgICAgICAgb3B0X3BnOyAgICAgICAgICAgICAvKiB0aGUKPiB1c2VyLXByb3ZpZGVkIFBHIG51 bWJlciAoMS1pbmRleGVkKSAqLwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAg b3B0X3BnYzsgICAgICAgICAgICAvKiB0aGUKPiB1c2VyLXByb3ZpZGVkIFBHQyBudW1iZXIgKDEt aW5kZXhlZCkgKi8KPiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9wcmVp bmRleDsgICAgICAgLyogcHJlLWluZGV4aW5nCj4gbW9kZSAoMi1wYXNzIHJlYWQpICovCj4gPiAr ICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcmVnaW9uOyAgICAgICAgIC8qIHRo ZQo+IHVzZXItcHJvdmlkZWQgcmVnaW9uIGRpZ2l0ICovCj4gPiArICAgIGludCAgICAgICAgICAg ICAgICAgICAgICAgICBvcHRfdGl0bGU7ICAgICAgICAgIC8qIHRoZQo+IHVzZXItcHJvdmlkZWQg dGl0bGUgbnVtYmVyICgxLWluZGV4ZWQpICovCj4gPiArICAgIGludCAgICAgICAgICAgICAgICAg ICAgICAgICBvcHRfdHJpbTsgICAgICAgICAgIC8qIHRyaW0gcGFkZGluZwo+IGNlbGxzIGF0IGJl Z2lubmluZyAqLwo+ID4gKwo+ID4gKyAgICAvKiBzdWJkZW11eCAqLwo+ID4gKyAgICBjb25zdCBB VklucHV0Rm9ybWF0ICAgICAgICAgKm1wZWdfZm10OyAgICAgICAgICAvKiBpbm5lciBNUEVHLVBT Cj4gKFZPQikgZGVtdXhlciAqLwo+ID4gKyAgICBBVkZvcm1hdENvbnRleHQgICAgICAgICAgICAg Km1wZWdfY3R4OyAgICAgICAgICAvKiBjb250ZXh0IGZvcgo+IGlubmVyIGRlbXV4ZXIgKi8KPiA+ ICsgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICptcGVnX2J1ZjsgICAgICAgICAgLyog YnVmZmVyIGZvciBpbm5lcgo+IGRlbXV4ZXIgKi8KPiA+ICsgICAgRkZJT0NvbnRleHQgICAgICAg ICAgICAgICAgIG1wZWdfcGI7ICAgICAgICAgICAgLyogYnVmZmVyIGNvbnRleHQKPiBmb3IgaW5u ZXIgZGVtdXhlciAqLwo+ID4gKwo+ID4gKyAgICAvKiB2b2x1bWUgKi8KPiA+ICsgICAgZHZkX3Jl YWRlcl90ICAgICAgICAgICAgICAgICpkdmRyZWFkOyAgICAgICAgICAgLyogaGFuZGxlIHRvCj4g bGliZHZkcmVhZCAqLwo+ID4gKyAgICBpZm9faGFuZGxlX3QgICAgICAgICAgICAgICAgKnZtZ19p Zm87ICAgICAgICAgICAvKiBoYW5kbGUgdG8gdGhlCj4gVk1HIChWSURFT19UUy5JRk8pICovCj4g PiArICAgIGlmb19oYW5kbGVfdCAgICAgICAgICAgICAgICAqdnRzX2lmbzsgICAgICAgICAgIC8q IGhhbmRsZSB0byB0aGUKPiBhY3RpdmUgVlRTIChWVFNfbm5fbi5JRk8pICovCj4gPiArCj4gPiAr ICAgIC8qIHBsYXliYWNrIGNvbnRyb2wgKi8KPiA+ICsgICAgaW50NjRfdCAgICAgICAgICAgICAg ICAgICAgIGZpcnN0X3B0czsgICAgICAgICAgLyogdGhlIHN0YXJ0aW5nIFBUUwo+IG9mZnNldCBv ZiB0aGUgUEdDICovCj4gPiArICAgIHVpbnQ2NF90ICAgICAgICAgICAgICAgICAgICBkdXJhdGlv bl9wdG07ICAgICAgIC8qIHRvdGFsIGR1cmF0aW9uCj4gaW4gRFZEIE1QRUcgdGltZWJhc2UgKi8K PiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlfZW5kOyAgICAgICAgICAg Lyogc2lnbmFsIEVPRiB0bwo+IHRoZSBwYXJlbnQgZGVtdXhlciAqLwo+ID4gKyAgICBEVkRWaWRl b1BsYXliYWNrU3RhdGUgICAgICAgcGxheV9zdGF0ZTsgICAgICAgICAvKiB0aGUgYWN0aXZlCj4g cGxheWJhY2sgc3RhdGUgKi8KPiA+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHBs YXlfc3RhcnRlZDsgICAgICAgLyogc2lnbmFsIHRoYXQKPiBwbGF5YmFjayBoYXMgc3RhcnRlZCAq Lwo+ID4gKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudF9zdGFydGVkOyAg ICAvKiBzaWduYWwgdGhhdAo+IHN1YmRlbXV4ZXIgaXMgb24gYSBzZWdtZW50ICovCj4gPiArfSBE VkRWaWRlb0RlbXV4Q29udGV4dDsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkdmR2aWRlb19saWJk dmRyZWFkX2xvZyh2b2lkICpvcGFxdWUsIGR2ZF9sb2dnZXJfbGV2ZWxfdAo+IGxldmVsLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZywgdmFf bGlzdCBtc2dfdmEpCj4gPiArewo+ID4gKyAgICBBVkZvcm1hdENvbnRleHQgKnMgPSBvcGFxdWU7 Cj4gPiArICAgIGNoYXIgbXNnX2J1ZltEVkRWSURFT19MSUJEVkRYX0xPR19CVUZGRVJfU0laRV07 Cj4gPiArICAgIGludCBsYXZ1X2xldmVsID0gQVZfTE9HX0RFQlVHOwo+ID4gKwo+ID4gKyAgICB2 c25wcmludGYobXNnX2J1Ziwgc2l6ZW9mKG1zZ19idWYpLCBtc2csIG1zZ192YSk7Cj4gPiArCj4g PiArICAgIGlmIChsZXZlbCA9PSBEVkRfTE9HR0VSX0xFVkVMX0VSUk9SKQo+ID4gKyAgICAgICAg bGF2dV9sZXZlbCA9IEFWX0xPR19FUlJPUjsKPiA+ICsgICAgZWxzZSBpZiAobGV2ZWwgPT0gRFZE X0xPR0dFUl9MRVZFTF9XQVJOKQo+ID4gKyAgICAgICAgbGF2dV9sZXZlbCA9IEFWX0xPR19XQVJO SU5HOwo+ID4gKwo+ID4gKyAgICBhdl9sb2cocywgbGF2dV9sZXZlbCwgImxpYmR2ZHJlYWQ6ICVz XG4iLCBtc2dfYnVmKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHZkdmlkZW9fbGli ZHZkbmF2X2xvZyh2b2lkICpvcGFxdWUsIGR2ZG5hdl9sb2dnZXJfbGV2ZWxfdAo+IGxldmVsLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnLCB2 YV9saXN0IG1zZ192YSkKPiA+ICt7Cj4gPiArICAgIEFWRm9ybWF0Q29udGV4dCAqcyA9IG9wYXF1 ZTsKPiA+ICsgICAgY2hhciBtc2dfYnVmW0RWRFZJREVPX0xJQkRWRFhfTE9HX0JVRkZFUl9TSVpF XTsKPiA+ICsgICAgaW50IGxhdnVfbGV2ZWwgPSBBVl9MT0dfREVCVUc7Cj4gPiArCj4gPiArICAg IHZzbnByaW50Zihtc2dfYnVmLCBzaXplb2YobXNnX2J1ZiksIG1zZywgbXNnX3ZhKTsKPiA+ICsK PiA+ICsgICAgaWYgKGxldmVsID09IERWRE5BVl9MT0dHRVJfTEVWRUxfRVJST1IpCj4gPiArICAg ICAgICBsYXZ1X2xldmVsID0gQVZfTE9HX0VSUk9SOwo+ID4gKyAgICAvKiBzb21lIGRpc2NzIGhh dmUgaW52YWxpZCBsYW5ndWFnZSBjb2RlcyBzZXQgZm9yIG1lbnVzLCB3aGljaAo+IHRocm93cyBu b2lzeSB3YXJuaW5ncyAqLwo+ID4gKyAgICBlbHNlIGlmIChsZXZlbCA9PSBEVkROQVZfTE9HR0VS X0xFVkVMX1dBUk4gJiYgIWF2X3N0cnN0YXJ0KG1zZywKPiAiTGFuZ3VhZ2UiLCBOVUxMKSkKPiA+ ICsgICAgICAgIGxhdnVfbGV2ZWwgPSBBVl9MT0dfV0FSTklORzsKPiA+ICsKPiA+ICsgICAgYXZf bG9nKHMsIGxhdnVfbGV2ZWwsICJsaWJkdmRuYXY6ICVzXG4iLCBtc2dfYnVmKTsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgZHZkdmlkZW9faWZvX2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAq cykKPiA+ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRh Owo+ID4gKwo+ID4gKyAgICBpZiAoYy0+dnRzX2lmbykKPiA+ICsgICAgICAgIGlmb0Nsb3NlKGMt PnZ0c19pZm8pOwo+ID4gKwo+ID4gKyAgICBpZiAoYy0+dm1nX2lmbykKPiA+ICsgICAgICAgIGlm b0Nsb3NlKGMtPnZtZ19pZm8pOwo+ID4gKwo+ID4gKyAgICBpZiAoYy0+ZHZkcmVhZCkKPiA+ICsg ICAgICAgIERWRENsb3NlKGMtPmR2ZHJlYWQpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50 IGR2ZHZpZGVvX2lmb19vcGVuKEFWRm9ybWF0Q29udGV4dCAqcykKPiA+ICt7Cj4gPiArICAgIERW RFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4gKyAgICBkdmRf bG9nZ2VyX2NiIGR2ZHJlYWRfbG9nX2NiOwo+ID4gKyAgICB0aXRsZV9pbmZvX3QgdGl0bGVfaW5m bzsKPiA+ICsKPiA+ICsgICAgZHZkcmVhZF9sb2dfY2IgPSAoZHZkX2xvZ2dlcl9jYikgeyAucGZf bG9nID0KPiBkdmR2aWRlb19saWJkdmRyZWFkX2xvZyB9Owo+ID4gKyAgICBjLT5kdmRyZWFkID0g RFZET3BlbjIocywgJmR2ZHJlYWRfbG9nX2NiLCBzLT51cmwpOwo+ID4gKwo+ID4gKyAgICBpZiAo IWMtPmR2ZHJlYWQpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gb3BlbiB0aGUgRFZELVZpZGVvCj4gc3RydWN0dXJlXG4iKTsKPiA+ICsKPiA+ICsgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlm ICghKGMtPnZtZ19pZm8gPSBpZm9PcGVuKGMtPmR2ZHJlYWQsIDApKSkgewo+ID4gKyAgICAgICAg YXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBvcGVuIHRoZSBWTUcKPiAoVklERU9f VFMuSUZPKVxuIik7Cj4gPiArCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsK PiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoYy0+b3B0X3RpdGxlID4gYy0+dm1nX2lmby0+ dHRfc3JwdC0+bnJfb2Zfc3JwdHMpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJS T1IsICJUaXRsZSAlZCBub3QgZm91bmRcbiIsIGMtPm9wdF90aXRsZSk7Cj4gPiArCj4gPiArICAg ICAgICByZXR1cm4gQVZFUlJPUl9TVFJFQU1fTk9UX0ZPVU5EOwo+ID4gKyAgICB9Cj4gPiArCj4g PiArICAgIHRpdGxlX2luZm8gPSBjLT52bWdfaWZvLT50dF9zcnB0LT50aXRsZVtjLT5vcHRfdGl0 bGUgLSAxXTsKPiA+ICsgICAgaWYgKGMtPm9wdF9hbmdsZSA+IHRpdGxlX2luZm8ubnJfb2ZfYW5n bGVzKSB7Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiQW5nbGUgJWQgbm90 IGZvdW5kXG4iLCBjLT5vcHRfYW5nbGUpOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfU1RSRUFNX05PVF9GT1VORDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAodGl0bGVf aW5mby5ucl9vZl9wdHRzIDwgMSkgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwgIlRpdGxlICVkIGhhcyBpbnZhbGlkIGhlYWRlcnMgKG5vIFBUVHMKPiBmb3VuZClcbiIsIGMt Pm9wdF90aXRsZSk7Cj4gPiArCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBpZiAoYy0+b3B0X2NoYXB0ZXJfc3RhcnQgPiB0 aXRsZV9pbmZvLm5yX29mX3B0dHMgfHwKPiA+ICsgICAgICAgKGMtPm9wdF9jaGFwdGVyX2VuZCA+ IDAgJiYgYy0+b3B0X2NoYXB0ZXJfZW5kID4KPiB0aXRsZV9pbmZvLm5yX29mX3B0dHMpKSB7Cj4g PiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiQ2hhcHRlciAoUFRUKSByYW5nZSBb JWQsICVkXSBpcwo+IGludmFsaWRcbiIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjLT5vcHRfY2hhcHRlcl9zdGFydCwKPiBjLT5vcHRfY2hhcHRlcl9lbmQpOwo+ID4gKwo+ ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAgIH0KPiA+ICsK PiA+ICsgICAgaWYgKCEoYy0+dnRzX2lmbyA9IGlmb09wZW4oYy0+ZHZkcmVhZCwgdGl0bGVfaW5m by50aXRsZV9zZXRfbnIpKSkgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwg IlVuYWJsZSB0byBwcm9jZXNzIElGTyBzdHJ1Y3R1cmUgZm9yCj4gVlRTICVkXG4iLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVfaW5mby50aXRsZV9zZXRfbnIpOwo+ ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gPiArICAgIH0KPiA+ ICsKPiA+ICsgICAgaWYgKHRpdGxlX2luZm8udnRzX3R0biA8IDEgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHx8Cj4gPiArICAgICAgICB0aXRsZV9pbmZvLnZ0c190dG4gPiA5 OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAo+ID4gKyAgICAgICAgdGl0 bGVfaW5mby52dHNfdHRuID4gYy0+dnRzX2lmby0+dnRzX3B0dF9zcnB0LT5ucl9vZl9zcnB0cyAg fHwKPiA+ICsgICAgICAgIGMtPnZ0c19pZm8tPnZ0c2lfbWF0LT5ucl9vZl92dHNfYXVkaW9fc3Ry ZWFtcyA+IDggICAgICAgICAgIHx8Cj4gPiArICAgICAgICBjLT52dHNfaWZvLT52dHNpX21hdC0+ bnJfb2ZfdnRzX3N1YnBfc3RyZWFtcyA+IDMyKSB7Cj4gPiArCj4gPiArICAgICAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiVGl0bGUgJWQgaGFzIGludmFsaWQgaGVhZGVycyBpbgo+IFZUU1xu IiwgYy0+b3B0X3RpdGxlKTsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50IGR2ZHZpZGVvX2lzX2NlbGxfcHJvbWlzaW5nKEFWRm9ybWF0Q29udGV4dCAqcywg cGdjX3QgKnBnYywKPiBpbnQgY2VsbG4pCj4gPiArewo+ID4gKyAgICBkdmRfdGltZV90IGNlbGxf ZHVyYXRpb24gPSBwZ2MtPmNlbGxfcGxheWJhY2tbY2VsbG4gLQo+IDFdLnBsYXliYWNrX3RpbWU7 Cj4gPiArCj4gPiArICAgIHJldHVybiBjZWxsX2R1cmF0aW9uLnNlY29uZCA+PSAxIHx8IGNlbGxf ZHVyYXRpb24ubWludXRlID49IDEgfHwKPiBjZWxsX2R1cmF0aW9uLmhvdXIgPj0gMTsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19pc19wZ2NfcHJvbWlzaW5nKEFWRm9ybWF0 Q29udGV4dCAqcywgcGdjX3QgKnBnYykKPiA+ICt7Cj4gPiArICAgIGZvciAoaW50IGkgPSAxOyBp IDw9IHBnYy0+bnJfb2ZfY2VsbHM7IGkrKykKPiA+ICsgICAgICAgIGlmIChkdmR2aWRlb19pc19j ZWxsX3Byb21pc2luZyhzLCBwZ2MsIGkpKQo+ID4gKyAgICAgICAgICAgIHJldHVybiAxOwo+ID4g Kwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHZkdmlk ZW9fcGxheV9jbG9zZShBVkZvcm1hdENvbnRleHQgKnMsCj4gRFZEVmlkZW9QbGF5YmFja1N0YXRl ICpzdGF0ZSkKPiA+ICt7Cj4gPiArICAgIGlmICghc3RhdGUtPmR2ZG5hdikKPiA+ICsgICAgICAg IHJldHVybjsKPiA+ICsKPiA+ICsgICAgLyogbm90IGFsbG9jYXRlZCBieSBhdl9tYWxsb2MoKSAq Lwo+ID4gKyAgICBpZiAoc3RhdGUtPnBnY19wZ190aW1lc19lc3QpCj4gPiArICAgICAgICBmcmVl KHN0YXRlLT5wZ2NfcGdfdGltZXNfZXN0KTsKPiA+ICsKPiA+ICsgICAgaWYgKGR2ZG5hdl9jbG9z ZShzdGF0ZS0+ZHZkbmF2KSAhPSBEVkROQVZfU1RBVFVTX09LKQo+ID4gKyAgICAgICAgYXZfbG9n KHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBjbG9zZSBkdmRuYXYgc3VjY2Vzc2Z1bGx5LAo+ IGR2ZG5hdiBlcnJvcjogJXNcbiIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkdmRuYXZfZXJyX3RvX3N0cmluZyhzdGF0ZS0+ZHZkbmF2KSk7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBpbnQgZHZkdmlkZW9fcGxheV9vcGVuKEFWRm9ybWF0Q29udGV4dCAqcywgRFZEVmlk ZW9QbGF5YmFja1N0YXRlCj4gKnN0YXRlKQo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9EZW11eENv bnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4gPiArICAgIGR2ZG5hdl9sb2dnZXJfY2Ig ZHZkbmF2X2xvZ19jYjsKPiA+ICsgICAgZHZkbmF2X3N0YXR1c190IGR2ZG5hdl9vcGVuX3N0YXR1 czsKPiA+ICsgICAgaW50MzJfdCBkaXNjX3JlZ2lvbl9tYXNrOwo+ID4gKyAgICBpbnQzMl90IHBs YXllcl9yZWdpb25fbWFzazsKPiA+ICsgICAgaW50IGN1cl90aXRsZSwgY3VyX3BnY24sIGN1cl9w Z247Cj4gPiArICAgIHBnY190ICpwZ2M7Cj4gPiArCj4gPiArICAgIGR2ZG5hdl9sb2dfY2IgPSAo ZHZkbmF2X2xvZ2dlcl9jYikgeyAucGZfbG9nID0KPiBkdmR2aWRlb19saWJkdmRuYXZfbG9nIH07 Cj4gPiArICAgIGR2ZG5hdl9vcGVuX3N0YXR1cyA9IGR2ZG5hdl9vcGVuMigmc3RhdGUtPmR2ZG5h diwgcywKPiAmZHZkbmF2X2xvZ19jYiwgcy0+dXJsKTsKPiA+ICsKPiA+ICsgICAgaWYgKCFzdGF0 ZS0+ZHZkbmF2Cj4gICAgICAgICB8fAo+ID4gKyAgICAgICAgZHZkbmF2X29wZW5fc3RhdHVzICE9 IERWRE5BVl9TVEFUVVNfT0sKPiAgICAgICAgIHx8Cj4gPiArICAgICAgICBkdmRuYXZfc2V0X3Jl YWRhaGVhZF9mbGFnKHN0YXRlLT5kdmRuYXYsIDApICE9Cj4gRFZETkFWX1NUQVRVU19PSyAgICAg ICAgIHx8Cj4gPiArICAgICAgICBkdmRuYXZfc2V0X1BHQ19wb3NpdGlvbmluZ19mbGFnKHN0YXRl LT5kdmRuYXYsIDEpICE9Cj4gRFZETkFWX1NUQVRVU19PSyAgIHx8Cj4gPiArICAgICAgICBkdmRu YXZfZ2V0X3JlZ2lvbl9tYXNrKHN0YXRlLT5kdmRuYXYsICZkaXNjX3JlZ2lvbl9tYXNrKSAhPQo+ IERWRE5BVl9TVEFUVVNfT0spIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1Is ICJVbmFibGUgdG8gb3BlbiB0aGUgRFZEIGZvcgo+IHBsYXliYWNrXG4iKTsKPiA+ICsKPiA+ICsg ICAgICAgIGdvdG8gZW5kX2R2ZG5hdl9lcnJvcjsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBw bGF5ZXJfcmVnaW9uX21hc2sgPSBjLT5vcHRfcmVnaW9uID4gMCA/ICgxIDw8IChjLT5vcHRfcmVn aW9uIC0gMSkpCj4gOiBkaXNjX3JlZ2lvbl9tYXNrOwo+ID4gKyAgICBpZiAoZHZkbmF2X3NldF9y ZWdpb25fbWFzayhzdGF0ZS0+ZHZkbmF2LCBwbGF5ZXJfcmVnaW9uX21hc2spICE9Cj4gRFZETkFW X1NUQVRVU19PSykgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJs ZSB0byBzZXQgdGhlIHBsYXliYWNrIHJlZ2lvbiBjb2RlCj4gJWRcbiIsIGMtPm9wdF9yZWdpb24p Owo+ID4gKwo+ID4gKyAgICAgICAgZ290byBlbmRfZHZkbmF2X2Vycm9yOwo+ID4gKyAgICB9Cj4g PiArCj4gPiArICAgIGlmIChjLT5vcHRfcGdjID4gMCAmJiBjLT5vcHRfcGcgPiAwKSB7Cj4gPiAr ICAgICAgICBpZiAoZHZkbmF2X3Byb2dyYW1fcGxheShzdGF0ZS0+ZHZkbmF2LCBjLT5vcHRfdGl0 bGUsCj4gYy0+b3B0X3BnYywgYy0+b3B0X3BnKSAhPSBEVkROQVZfU1RBVFVTX09LKSB7Cj4gPiAr ICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBzdGFydCBwbGF5 YmFjayBhdCB0aXRsZQo+ICVkLCBQR0MgJWQsIFBHICVkXG4iLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGMtPm9wdF90aXRsZSwgYy0+b3B0X3BnYywKPiBjLT5vcHRf cGcpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIGdvdG8gZW5kX2R2ZG5hdl9lcnJvcjsKPiA+ICsg ICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIHN0YXRlLT5wZ2NuID0gYy0+b3B0X3BnYzsKPiA+ ICsgICAgICAgIHN0YXRlLT5lbnRyeV9wZ24gPSBjLT5vcHRfcGc7Cj4gPiArICAgIH0gZWxzZSB7 Cj4gPiArICAgICAgICBpZiAoZHZkbmF2X3BhcnRfcGxheShzdGF0ZS0+ZHZkbmF2LCBjLT5vcHRf dGl0bGUsCj4gYy0+b3B0X2NoYXB0ZXJfc3RhcnQpICE9IERWRE5BVl9TVEFUVVNfT0sgfHwKPiA+ ICsgICAgICAgICAgICBkdmRuYXZfY3VycmVudF90aXRsZV9wcm9ncmFtKHN0YXRlLT5kdmRuYXYs ICZjdXJfdGl0bGUsCj4gJmN1cl9wZ2NuLCAmY3VyX3BnbikgIT0gRFZETkFWX1NUQVRVU19PSykg ewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gc3Rh cnQgcGxheWJhY2sgYXQgdGl0bGUKPiAlZCwgY2hhcHRlciAoUFRUKSAlZFxuIiwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5vcHRfdGl0bGUsIGMtPm9wdF9jaGFw dGVyX3N0YXJ0KTsKPiA+ICsKPiA+ICsgICAgICAgICAgICBnb3RvIGVuZF9kdmRuYXZfZXJyb3I7 Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBzdGF0ZS0+cGdjbiA9IGN1cl9wZ2Nu Owo+ID4gKyAgICAgICAgc3RhdGUtPmVudHJ5X3BnbiA9IGN1cl9wZ247Cj4gPiArICAgIH0KPiA+ ICsKPiA+ICsgICAgcGdjID0gYy0+dnRzX2lmby0+dnRzX3BnY2l0LT5wZ2NpX3NycFtzdGF0ZS0+ cGdjbiAtIDFdLnBnYzsKPiA+ICsKPiA+ICsgICAgaWYgKHBnYy0+cGdfcGxheWJhY2tfbW9kZSAh PSAwKSB7Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiTm9uLXNlcXVlbnRp YWwgUEdDcywgc3VjaCBhcyBzaHVmZmxlcywKPiBhcmUgbm90IHN1cHBvcnRlZFxuIik7Cj4gPiAr Cj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cj4gPiArICAgIH0KPiA+ ICsKPiA+ICsgICAgaWYgKGMtPm9wdF90cmltICYmICFkdmR2aWRlb19pc19wZ2NfcHJvbWlzaW5n KHMsIHBnYykpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJUaXRsZSAl ZCwgUEdDICVkIGxvb2tzIGVtcHR5IChtYXkKPiBjb25zaXN0IG9mIHBhZGRpbmcgY2VsbHMpLCAi Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWYgeW91IHdhbnQgdG8gdHJ5 IGFueXdheSwgZGlzYWJsZSB0aGUKPiAtdHJpbSBvcHRpb25cbiIsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjLT5vcHRfdGl0bGUsIHN0YXRlLT5wZ2NuKTsKPiA+ICsKPiA+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICB9Cj4gPiArCj4g PiArICAgIGlmIChkdmRuYXZfYW5nbGVfY2hhbmdlKHN0YXRlLT5kdmRuYXYsIGMtPm9wdF9hbmds ZSkgIT0KPiBEVkROQVZfU1RBVFVTX09LKSB7Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9H X0VSUk9SLCAiVW5hYmxlIHRvIHN0YXJ0IHBsYXliYWNrIGF0IGFuZ2xlCj4gJWRcbiIsIGMtPm9w dF9hbmdsZSk7Cj4gPiArCj4gPiArICAgICAgICBnb3RvIGVuZF9kdmRuYXZfZXJyb3I7Cj4gPiAr ICAgIH0KPiA+ICsKPiA+ICsgICAgLyogZHZkbmF2X2Rlc2NyaWJlX3RpdGxlX2NoYXB0ZXJzKCkg cGVyZm9ybXMgc2V2ZXJhbCB2YWxpZGF0aW9ucyBvbgo+IHRoZSB0aXRsZSBzdHJ1Y3R1cmUgKi8K PiA+ICsgICAgLyogdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBzaWRlIGVmZmVjdCB0byBpbmNyZWFz ZSBjaGFuY2VzIG9mIGEgc2FmZQo+IG5hdmlnYXRpb24gcGF0aCAqLwo+ID4gKyAgICBzdGF0ZS0+ cGdjX25iX3BnX2VzdCA9Cj4gZHZkbmF2X2Rlc2NyaWJlX3RpdGxlX2NoYXB0ZXJzKHN0YXRlLT5k dmRuYXYsIGMtPm9wdF90aXRsZSwKPiA+ICsKPiAmc3RhdGUtPnBnY19wZ190aW1lc19lc3QsCj4g PiArCj4gJnN0YXRlLT5wZ2NfZHVyYXRpb25fZXN0KTsKPiA+ICsKPiA+ICsgICAgLyogZHZkbmF2 IHJldHVybmluZyAwIFBHcyBpcyBkb2N1bWVudGVkIGFzIGFuIGVycm9yIGNvbmRpdGlvbiAqLwo+ ID4gKyAgICBpZiAoIXN0YXRlLT5wZ2NfbmJfcGdfZXN0KSB7Cj4gPiArICAgICAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIHJlYWQgY2hhcHRlciBpbmZvcm1hdGlvbiBmb3IK PiB0aXRsZSAlZFxuIiwgYy0+b3B0X3RpdGxlKTsKPiA+ICsKPiA+ICsgICAgICAgIGdvdG8gZW5k X2R2ZG5hdl9lcnJvcjsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBzdGF0ZS0+bmF2X3B0cyA9 IGR2ZG5hdl9nZXRfY3VycmVudF90aW1lKHN0YXRlLT5kdmRuYXYpOwo+ID4gKyAgICBzdGF0ZS0+ dnRzbiA9IGMtPnZtZ19pZm8tPnR0X3NycHQtPnRpdGxlW2MtPm9wdF90aXRsZSAtCj4gMV0udGl0 bGVfc2V0X25yOwo+ID4gKyAgICBzdGF0ZS0+cGdjID0gcGdjOwo+ID4gKwo+ID4gKyAgICByZXR1 cm4gMDsKPiA+ICsKPiA+ICtlbmRfZHZkbmF2X2Vycm9yOgo+ID4gKyAgICBpZiAoc3RhdGUtPmR2 ZG5hdikKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJkdmRuYXYgZXJyb3I6 ICVzXG4iLAo+IGR2ZG5hdl9lcnJfdG9fc3RyaW5nKHN0YXRlLT5kdmRuYXYpKTsKPiA+ICsgICAg ZWxzZQo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgImR2ZG5hdiBjb3VsZCBu b3QgYmUgaW5pdGlhbGl6ZWRcbiIpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gQVZFUlJPUl9FWFRF Uk5BTDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19wbGF5X25leHRfcHNf YmxvY2soQVZGb3JtYXRDb250ZXh0ICpzLAo+IERWRFZpZGVvUGxheWJhY2tTdGF0ZSAqc3RhdGUs Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVm LCBpbnQgYnVmX3NpemUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50ICpwX25hdl9ldmVudCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICgqZmx1c2hfY2IpKEFWRm9ybWF0Q29udGV4dAo+ICpzKSkKPiA+ICt7Cj4g PiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4g KyAgICB1aW50OF90IG5hdl9idWZbRFZEVklERU9fQkxPQ0tfU0laRV0gPSB7MH07Cj4gPiArICAg IGludCBuYXZfZXZlbnQ7Cj4gPiArICAgIGludCBuYXZfbGVuOwo+ID4gKwo+ID4gKyAgICBkdmRu YXZfdnRzX2NoYW5nZV9ldmVudF90ICplX3Z0czsKPiA+ICsgICAgZHZkbmF2X2NlbGxfY2hhbmdl X2V2ZW50X3QgKmVfY2VsbDsKPiA+ICsgICAgaW50IGN1cl90aXRsZSwgY3VyX3BnY24sIGN1cl9w Z24sIGN1cl9hbmdsZSwgY3VyX3RpdGxlX3VudXNlZCwKPiBjdXJfcHR0LCBjdXJfbmJfYW5nbGVz Owo+ID4gKyAgICBpbnQgaXNfY2VsbF9wcm9taXNpbmcgPSAwOwo+ID4gKyAgICBwY2lfdCAqZV9w Y2k7Cj4gPiArICAgIGRzaV90ICplX2RzaTsKPiA+ICsKPiA+ICsgICAgaWYgKGJ1Zl9zaXplICE9 IERWRFZJREVPX0JMT0NLX1NJWkUpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJS T1IsICJJbnZhbGlkIGJ1ZmZlciBzaXplIChleHBlY3RlZD0lZAo+IGFjdHVhbD0lZClcbiIsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVkRWSURFT19CTE9DS19TSVpFLCBi dWZfc2l6ZSk7Cj4gPiArCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ID4g KyAgICB9Cj4gPiArCj4gPiArICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRFZEVklERU9fTUFYX1BT X1NFQVJDSF9CTE9DS1M7IGkrKykgewo+ID4gKyAgICAgICAgaWYgKGZmX2NoZWNrX2ludGVycnVw dCgmcy0+aW50ZXJydXB0X2NhbGxiYWNrKSkKPiA+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9FWElUOwo+ID4gKwo+ID4gKyAgICAgICAgaWYgKGR2ZG5hdl9nZXRfbmV4dF9ibG9jayhzdGF0 ZS0+ZHZkbmF2LCBuYXZfYnVmLCAmbmF2X2V2ZW50LAo+ICZuYXZfbGVuKSAhPSBEVkROQVZfU1RB VFVTX09LKSB7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJs ZSB0byByZWFkIG5leHQgYmxvY2sgb2YKPiBQR0NcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAg IGdvdG8gZW5kX2R2ZG5hdl9lcnJvcjsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAg IC8qIHNvbWUgZGlzY3MgZm9sbG93IE5PUHMgd2l0aCBhIHByZW1hdHVyZSBzdG9wIGV2ZW50ICov Cj4gPiArICAgICAgICBpZiAobmF2X2V2ZW50ID09IERWRE5BVl9TVE9QKQo+ID4gKyAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiA+ICsKPiA+ICsgICAgICAgIGlmIChuYXZfbGVuID4g RFZEVklERU9fQkxPQ0tfU0laRSkgewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0df RVJST1IsICJJbnZhbGlkIGJsb2NrIHNpemUgKGV4cGVjdGVkPD0lZAo+IGFjdHVhbD0lZClcbiIs Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFZEVklERU9fQkxPQ0tf U0laRSwgbmF2X2xlbik7Cj4gPiArCj4gPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBpZiAoZHZkbmF2X2N1 cnJlbnRfdGl0bGVfaW5mbyhzdGF0ZS0+ZHZkbmF2LCAmY3VyX3RpdGxlLAo+ICZjdXJfcHR0KSAh PSBEVkROQVZfU1RBVFVTX09LKSB7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19F UlJPUiwgIlVuYWJsZSB0byBkZXRlcm1pbmUgY3VycmVudCB0aXRsZQo+IGNvb3JkaW5hdGVzXG4i KTsKPiA+ICsKPiA+ICsgICAgICAgICAgICBnb3RvIGVuZF9kdmRuYXZfZXJyb3I7Cj4gPiArICAg ICAgICB9Cj4gPiArCj4gPiArICAgICAgICAvKiB3ZSBzb21laG93IG5hdmlnYXRlZCB0byBhIG1l bnUgKi8KPiA+ICsgICAgICAgIGlmIChjdXJfdGl0bGUgPT0gMCB8fCAhZHZkbmF2X2lzX2RvbWFp bl92dHMoc3RhdGUtPmR2ZG5hdikpCj4gPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9G Owo+ID4gKwo+ID4gKyAgICAgICAgaWYgKGR2ZG5hdl9jdXJyZW50X3RpdGxlX3Byb2dyYW0oc3Rh dGUtPmR2ZG5hdiwKPiAmY3VyX3RpdGxlX3VudXNlZCwgJmN1cl9wZ2NuLCAmY3VyX3BnbikgIT0g RFZETkFWX1NUQVRVU19PSykgewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJS T1IsICJVbmFibGUgdG8gZGV0ZXJtaW5lIGN1cnJlbnQgUEdDCj4gY29vcmRpbmF0ZXNcbiIpOwo+ ID4gKwo+ID4gKyAgICAgICAgICAgIGdvdG8gZW5kX2R2ZG5hdl9lcnJvcjsKPiA+ICsgICAgICAg IH0KPiA+ICsKPiA+ICsgICAgICAgIC8qIHdlIHNvbWVob3cgbGVmdCB0aGUgUEdDICovCj4gPiAr ICAgICAgICBpZiAoc3RhdGUtPmluX3BnYyAmJiBjdXJfcGdjbiAhPSBzdGF0ZS0+cGdjbikKPiA+ ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gPiArCj4gPiArICAgICAgICBpZiAo ZHZkbmF2X2dldF9hbmdsZV9pbmZvKHN0YXRlLT5kdmRuYXYsICZjdXJfYW5nbGUsCj4gJmN1cl9u Yl9hbmdsZXMpICE9IERWRE5BVl9TVEFUVVNfT0spIHsKPiA+ICsgICAgICAgICAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGRldGVybWluZSBjdXJyZW50IHZpZGVvCj4gYW5n bGVcbiIpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIGdvdG8gZW5kX2R2ZG5hdl9lcnJvcjsKPiA+ ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBuYXZfZXZlbnQgPT0gRFZE TkFWX0JMT0NLX09LID8gQVZfTE9HX1RSQUNFIDoKPiBBVl9MT0dfREVCVUcsCj4gPiArICAgICAg ICAgICAgICAgIm5ldyBibG9jazogaT0lZCBuYXZfZXZlbnQ9JWQgbmF2X2xlbj0lZCBjdXJfdGl0 bGU9JWQgIgo+ID4gKyAgICAgICAgICAgICAgICJjdXJfcHR0PSVkIGN1cl9hbmdsZT0lZCBjdXJf Y2VsbG49JWQgY3VyX3BnY249JWQKPiBjdXJfcGduPSVkICIKPiA+ICsgICAgICAgICAgICAgICAi cGxheV9pbl92dHM9JWQgcGxheV9pbl9wZ2M9JWQgcGxheV9pbl9wcz0lZFxuIiwKPiA+ICsgICAg ICAgICAgICAgICBpLCBuYXZfZXZlbnQsIG5hdl9sZW4sIGN1cl90aXRsZSwKPiA+ICsgICAgICAg ICAgICAgICBjdXJfcHR0LCBjdXJfYW5nbGUsIHN0YXRlLT5jZWxsbiwgY3VyX3BnY24sIGN1cl9w Z24sCj4gPiArICAgICAgICAgICAgICAgc3RhdGUtPmluX3Z0cywgc3RhdGUtPmluX3BnYywgc3Rh dGUtPmluX3BzKTsKPiA+ICsKPiA+ICsgICAgICAgIHN3aXRjaCAobmF2X2V2ZW50KSB7Cj4gPiAr ICAgICAgICAgICAgY2FzZSBEVkROQVZfVlRTX0NIQU5HRToKPiA+ICsgICAgICAgICAgICAgICAg aWYgKHN0YXRlLT5pbl92dHMpCj4gPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9FT0Y7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGVfdnRzID0gKGR2ZG5hdl92dHNfY2hh bmdlX2V2ZW50X3QgKikgbmF2X2J1ZjsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgaWYgKGVf dnRzLT5uZXdfdnRzTiA9PSBzdGF0ZS0+dnRzbiAmJiBlX3Z0cy0+bmV3X2RvbWFpbgo+ID09IERW RF9ET01BSU5fVlRTVGl0bGUpCj4gPiArICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aW5fdnRz ID0gMTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiArICAgICAgICAg ICAgY2FzZSBEVkROQVZfQ0VMTF9DSEFOR0U6Cj4gPiArICAgICAgICAgICAgICAgIGlmICghc3Rh dGUtPmluX3Z0cykKPiA+ICsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKwo+ID4g KyAgICAgICAgICAgICAgICBlX2NlbGwgPSAoZHZkbmF2X2NlbGxfY2hhbmdlX2V2ZW50X3QgKikg bmF2X2J1ZjsKPiA+ICsgICAgICAgICAgICAgICAgaXNfY2VsbF9wcm9taXNpbmcgPSAhYy0+b3B0 X3RyaW0gfHwKPiBkdmR2aWRlb19pc19jZWxsX3Byb21pc2luZyhzLCBzdGF0ZS0+cGdjLCBlX2Nl bGwtPmNlbGxOKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19E RUJVRywgIm5ldyBjZWxsOiBwcmV2PSVkIG5ldz0lZAo+IHByb21pc2luZz0lZFxuIiwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmNlbGxuLCBlX2Nl bGwtPmNlbGxOLAo+IGlzX2NlbGxfcHJvbWlzaW5nKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAg ICAgaWYgKCFzdGF0ZS0+aW5fcHMgJiYgIXN0YXRlLT5pbl9wZ2MpIHsKPiA+ICsgICAgICAgICAg ICAgICAgICAgIGlmIChjdXJfdGl0bGUgPT0gYy0+b3B0X3RpdGxlICAgICAgICYmCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgY3VyX3B0dCA9PSBjLT5vcHRfY2hhcHRlcl9zdGFydCAmJgo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9wZ2NuID09IHN0YXRlLT5wZ2NuICAgICAg ICAgJiYKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBjdXJfcGduID09IHN0YXRlLT5lbnRy eV9wZ24gICAgICYmCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgaXNfY2VsbF9wcm9taXNp bmcpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aW5fcGdjID0gMTsKPiA+ ICsgICAgICAgICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGlm IChjLT5vcHRfdHJpbSAmJiAhaXNfY2VsbF9wcm9taXNpbmcpCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19JTkZPLCAiU2tpcHBpbmcgcGFkZGluZyBjZWxsCj4g IyVkXG4iLCBlX2NlbGwtPmNlbGxOKTsKPiA+ICsgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChz dGF0ZS0+Y2VsbG4gPj0gZV9jZWxsLT5jZWxsTiB8fCBzdGF0ZS0+cGduCj4gPiBjdXJfcGduKSB7 Cj4gPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gPiArICAgICAg ICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgc3RhdGUtPmNlbGxuID0gZV9j ZWxsLT5jZWxsTjsKPiA+ICsgICAgICAgICAgICAgICAgc3RhdGUtPnB0dCA9IGN1cl9wdHQ7Cj4g PiArICAgICAgICAgICAgICAgIHN0YXRlLT5wZ24gPSBjdXJfcGduOwo+ID4gKyAgICAgICAgICAg ICAgICBzdGF0ZS0+bmJfY2VsbHNfcGxheWVkKys7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAg IGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgIGNhc2UgRFZETkFWX05BVl9QQUNLRVQ6Cj4gPiAr ICAgICAgICAgICAgICAgIGlmICghc3RhdGUtPmluX3BnYykKPiA+ICsgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBpZiAoKHN0YXRlLT5wdHQg PiAwICYmIHN0YXRlLT5wdHQgPiBjdXJfcHR0KSB8fAo+ID4gKyAgICAgICAgICAgICAgICAgICAg KGMtPm9wdF9jaGFwdGVyX2VuZCA+IDAgJiYgY3VyX3B0dCA+Cj4gYy0+b3B0X2NoYXB0ZXJfZW5k KSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ID4gKyAg ICAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGVfcGNpID0gZHZkbmF2 X2dldF9jdXJyZW50X25hdl9wY2koc3RhdGUtPmR2ZG5hdik7Cj4gPiArICAgICAgICAgICAgICAg IGVfZHNpID0gZHZkbmF2X2dldF9jdXJyZW50X25hdl9kc2koc3RhdGUtPmR2ZG5hdik7Cj4gPiAr Cj4gPiArICAgICAgICAgICAgICAgIGlmIChlX3BjaSA9PSBOVUxMIHx8IGVfZHNpID09IE5VTEwg fHwKPiA+ICsgICAgICAgICAgICAgICAgICAgIGVfcGNpLT5wY2lfZ2kudm9idV9zX3B0bSA+Cj4g ZV9wY2ktPnBjaV9naS52b2J1X2VfcHRtKSB7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAg ICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBOQVYgcGFja2V0XG4iKTsKPiA+ICsg ICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICAg ICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIHN0YXRlLT52b2J1X2R1cmF0 aW9uID0gZV9wY2ktPnBjaV9naS52b2J1X2VfcHRtIC0KPiBlX3BjaS0+cGNpX2dpLnZvYnVfc19w dG07Cj4gPiArICAgICAgICAgICAgICAgIHN0YXRlLT5wZ2NfZWxhcHNlZCArPSBzdGF0ZS0+dm9i dV9kdXJhdGlvbjsKPiA+ICsgICAgICAgICAgICAgICAgc3RhdGUtPm5hdl9wdHMgPSBkdmRuYXZf Z2V0X2N1cnJlbnRfdGltZShzdGF0ZS0+ZHZkbmF2KTsKPiA+ICsgICAgICAgICAgICAgICAgc3Rh dGUtPnB0dCA9IGN1cl9wdHQ7Cj4gPiArICAgICAgICAgICAgICAgIHN0YXRlLT5wZ24gPSBjdXJf cGduOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIk5BViBwYWNrOiBzX3B0bT0lZCBlX3B0bT0lZCAi Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAic2NyPSVkIGxibj0lZCB2b2J1X2R1cmF0aW9u PSVkIG5hdl9wdHM9JWxkXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZV9wY2ktPnBj aV9naS52b2J1X3NfcHRtLAo+IGVfcGNpLT5wY2lfZ2kudm9idV9lX3B0bSwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGVfZHNpLT5kc2lfZ2kubnZfcGNrX3NjciwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGVfcGNpLT5wY2lfZ2kubnZfcGNrX2xibiwgc3RhdGUtPnZvYnVfZHVyYXRp b24sCj4gc3RhdGUtPm5hdl9wdHMpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBpZiAoIXN0 YXRlLT5pbl9wcykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19E RUJVRywgIm5hdmlnYXRpb246IGxvY2tlZCB0bwo+IHByb2dyYW0gc3RyZWFtXG4iKTsKPiA+ICsK PiA+ICsgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5pbl9wcyA9IDE7Cj4gPiArICAgICAgICAg ICAgICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPnZvYnVf ZV9wdG0gIT0gZV9wY2ktPnBjaV9naS52b2J1X3NfcHRtKSB7Cj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGZsdXNoX2NiKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBm bHVzaF9jYihzKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+dHNf b2Zmc2V0ICs9IHN0YXRlLT52b2J1X2VfcHRtIC0KPiBlX3BjaS0+cGNpX2dpLnZvYnVfc19wdG07 Cj4gPiArICAgICAgICAgICAgICAgICAgICB9Cj4gPiArICAgICAgICAgICAgICAgIH0KPiA+ICsK PiA+ICsgICAgICAgICAgICAgICAgc3RhdGUtPnZvYnVfZV9wdG0gPSBlX3BjaS0+cGNpX2dpLnZv YnVfZV9wdG07Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICgqcF9uYXZfZXZlbnQpID0gbmF2 X2V2ZW50Owo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICByZXR1cm4gbmF2X2xlbjsKPiA+ICsg ICAgICAgICAgICBjYXNlIERWRE5BVl9CTE9DS19PSzoKPiA+ICsgICAgICAgICAgICAgICAgaWYg KCFzdGF0ZS0+aW5fcHMpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+aW5f cGdjKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOyAvKiBuZWNlc3NhcnkgaW4g Y2FzZSB3ZSBhcmUgc2tpcHBpbmcKPiBqdW5rIGNlbGxzIGF0IHRoZSBiZWdpbm5pbmcgKi8KPiA+ ICsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgICAgICB9Cj4g PiArCj4gPiArICAgICAgICAgICAgICAgIGlmIChuYXZfbGVuICE9IERWRFZJREVPX0JMT0NLX1NJ WkUpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJJ bnZhbGlkIE1QRUcgYmxvY2sgc2l6ZQo+IChleHBlY3RlZD0lZCBhY3R1YWw9JWQpXG4iLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFZEVklERU9fQkxP Q0tfU0laRSwKPiBuYXZfbGVuKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICAgICAgICAgICAgICB9Cj4gPiArCj4gPiAr ICAgICAgICAgICAgICAgIGlmIChjdXJfYW5nbGUgIT0gYy0+b3B0X2FuZ2xlKSB7Cj4gPiArICAg ICAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5leHBlY3RlZCBhbmds ZSBjaGFuZ2UKPiAoZXhwZWN0ZWQ9JWQgbmV3PSVkKVxuIiwKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPm9wdF9hbmdsZSwgY3VyX2FuZ2xlKTsKPiA+ ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOUFVUX0NIQU5HRUQ7 Cj4gPiArICAgICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgbWVtY3B5 KGJ1ZiwgJm5hdl9idWYsIG5hdl9sZW4pOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICAvKiBp biBjYXNlIE5BViBwYWNrZXQgaXMgbWlzc2VkICovCj4gPiArICAgICAgICAgICAgICAgIHN0YXRl LT5wdHQgPSBjdXJfcHR0Owo+ID4gKyAgICAgICAgICAgICAgICBzdGF0ZS0+cGduID0gY3VyX3Bn bjsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgKCpwX25hdl9ldmVudCkgPSBuYXZfZXZlbnQ7 Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIHJldHVybiBuYXZfbGVuOwo+ID4gKyAgICAgICAg ICAgIGNhc2UgRFZETkFWX1NUSUxMX0ZSQU1FOgo+ID4gKyAgICAgICAgICAgIGNhc2UgRFZETkFW X1dBSVQ6Cj4gPiArICAgICAgICAgICAgY2FzZSBEVkROQVZfSE9QX0NIQU5ORUw6Cj4gPiArICAg ICAgICAgICAgY2FzZSBEVkROQVZfSElHSExJR0hUOgo+ID4gKyAgICAgICAgICAgICAgICBpZiAo c3RhdGUtPmluX3BzKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9G Owo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBpZiAobmF2X2V2ZW50ID09IERWRE5BVl9TVElM TF9GUkFNRSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgaWYgKGR2ZG5hdl9zdGlsbF9za2lw KHN0YXRlLT5kdmRuYXYpICE9Cj4gRFZETkFWX1NUQVRVU19PSykgewo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gc2tpcCBzdGls bAo+IGltYWdlXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVu ZF9kdmRuYXZfZXJyb3I7Cj4gPiArICAgICAgICAgICAgICAgICAgICB9Cj4gPiArICAgICAgICAg ICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgaWYgKG5hdl9ldmVudCA9PSBEVkRO QVZfV0FJVCkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgaWYgKGR2ZG5hdl93YWl0X3NraXAo c3RhdGUtPmR2ZG5hdikgIT0KPiBEVkROQVZfU1RBVFVTX09LKSB7Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBza2lwIFdBSVQK PiBldmVudFxuIik7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmRf ZHZkbmF2X2Vycm9yOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAg ICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAg ICAgIGNhc2UgRFZETkFWX1NUT1A6Cj4gPiArICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0VPRjsKPiA+ICsgICAgICAgICAgICBkZWZhdWx0Ogo+ID4gKyAgICAgICAgICAgICAgICBjb250 aW51ZTsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBhdl9sb2cocywg QVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGZpbmQgbmV4dCBwcm9ncmFtIHN0cmVhbQo+IGJsb2Nr XG4iKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArCj4g PiArZW5kX2R2ZG5hdl9lcnJvcjoKPiA+ICsgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgImR2 ZG5hdiBlcnJvciAodGl0bGU9JWQgcGdjPSVkIHBnPSVkCj4gY2VsbD0lZCk6ICVzXG4iLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfdGl0bGUsIGN1cl9wZ2NuLCBjdXJfcGdu LCBzdGF0ZS0+Y2VsbG4sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR2ZG5hdl9l cnJfdG9fc3RyaW5nKHN0YXRlLT5kdmRuYXYpKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIEFWRVJS T1JfRVhURVJOQUw7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fcGdjX3By ZWluZGV4KEFWRm9ybWF0Q29udGV4dCAqcykKPiA+ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhD b250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4gKyAgICBpbnQgcmV0ID0gMCwgaW50 ZXJydXB0ID0gMDsKPiA+ICsgICAgaW50IG5iX2NoYXB0ZXJzID0gMCwgbGFzdF9wdHQgPSBjLT5v cHRfY2hhcHRlcl9zdGFydDsKPiA+ICsgICAgdWludDY0X3QgY3VyX2NoYXB0ZXJfb2Zmc2V0ID0g MCwgY3VyX2NoYXB0ZXJfZHVyYXRpb24gPSAwOwo+ID4gKyAgICBEVkRWaWRlb1BsYXliYWNrU3Rh dGUgc3RhdGUgPSB7MH07Cj4gPiArCj4gPiArICAgIHVpbnQ4X3QgbmF2X2J1ZltEVkRWSURFT19C TE9DS19TSVpFXTsKPiA+ICsgICAgaW50IG5hdl9ldmVudDsKPiA+ICsKPiA+ICsgICAgaWYgKGMt Pm9wdF9jaGFwdGVyX3N0YXJ0ID09IGMtPm9wdF9jaGFwdGVyX2VuZCkKPiA+ICsgICAgICAgIHJl dHVybiByZXQ7Cj4gPiArCj4gPiArICAgIGF2X2xvZyhzLCBBVl9MT0dfSU5GTywKPiA+ICsgICAg ICAgICAgICJJbmRleGluZyBjaGFwdGVyIG1hcmtlcnMsIHRoaXMgd2lsbCB0YWtlIGEgbG9uZyB0 aW1lLgo+IFBsZWFzZSB3YWl0Li4uXG4iKTsKPiA+ICsKPiA+ICsgICAgaWYgKChyZXQgPSBkdmR2 aWRlb19wbGF5X29wZW4ocywgJnN0YXRlKSkgPCAwIHx8Cj4gc3RhdGUucGdjLT5ucl9vZl9wcm9n cmFtcyA9PSAxKQo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsgICAgd2hpbGUg KCEoaW50ZXJydXB0ID0gZmZfY2hlY2tfaW50ZXJydXB0KCZzLT5pbnRlcnJ1cHRfY2FsbGJhY2sp KSkgewo+ID4gKyAgICAgICAgcmV0ID0gZHZkdmlkZW9fcGxheV9uZXh0X3BzX2Jsb2NrKHMsICZz dGF0ZSwgbmF2X2J1ZiwKPiBEVkRWSURFT19CTE9DS19TSVpFLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYXZfZXZlbnQsIE5VTEwpOwo+ID4gKyAgICAg ICAgaWYgKHJldCA8IDAgJiYgcmV0ICE9IEFWRVJST1JfRU9GKQo+ID4gKyAgICAgICAgICAgIGdv dG8gZW5kX2Nsb3NlOwo+ID4gKwo+ID4gKyAgICAgICAgaWYgKG5hdl9ldmVudCAhPSBEVkROQVZf TkFWX1BBQ0tFVCAmJiByZXQgIT0gQVZFUlJPUl9FT0YpCj4gPiArICAgICAgICAgICAgY29udGlu dWU7Cj4gPiArCj4gPiArICAgICAgICBpZiAoc3RhdGUucHR0ID09IGxhc3RfcHR0KSB7Cj4gPiAr ICAgICAgICAgICAgY3VyX2NoYXB0ZXJfZHVyYXRpb24gKz0gc3RhdGUudm9idV9kdXJhdGlvbjsK PiA+ICsgICAgICAgICAgICAvKiBlbnN1cmUgd2UgYWRkIHRoZSBsYXN0IGNoYXB0ZXIgKi8KPiA+ ICsgICAgICAgICAgICBpZiAocmV0ICE9IEFWRVJST1JfRU9GKQo+ID4gKyAgICAgICAgICAgICAg ICBjb250aW51ZTsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIGlmICghYXZwcml2 X25ld19jaGFwdGVyKHMsIG5iX2NoYXB0ZXJzLCBEVkRWSURFT19USU1FX0JBU0VfUSwKPiBjdXJf Y2hhcHRlcl9vZmZzZXQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJf Y2hhcHRlcl9vZmZzZXQgKwo+IGN1cl9jaGFwdGVyX2R1cmF0aW9uLCBOVUxMKSkgewo+ID4gKyAg ICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPiA+ICsgICAgICAgICAgICBnb3RvIGVu ZF9jbG9zZTsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIG5iX2NoYXB0ZXJzKys7 Cj4gPiArICAgICAgICBjdXJfY2hhcHRlcl9vZmZzZXQgKz0gY3VyX2NoYXB0ZXJfZHVyYXRpb247 Cj4gPiArICAgICAgICBjdXJfY2hhcHRlcl9kdXJhdGlvbiA9IHN0YXRlLnZvYnVfZHVyYXRpb247 Cj4gPiArICAgICAgICBsYXN0X3B0dCA9IHN0YXRlLnB0dDsKPiA+ICsKPiA+ICsgICAgICAgIGlm IChyZXQgPT0gQVZFUlJPUl9FT0YpCj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgIH0K PiA+ICsKPiA+ICsgICAgaWYgKGludGVycnVwdCkgewo+ID4gKyAgICAgICAgcmV0ID0gQVZFUlJP Ul9FWElUOwo+ID4gKyAgICAgICAgZ290byBlbmRfY2xvc2U7Cj4gPiArICAgIH0KPiA+ICsKPiA+ ICsgICAgaWYgKHJldCA8IDAgJiYgcmV0ICE9IEFWRVJST1JfRU9GKQo+ID4gKyAgICAgICAgZ290 byBlbmRfY2xvc2U7Cj4gPiArCj4gPiArICAgIHMtPmR1cmF0aW9uID0gYXZfcmVzY2FsZV9xKHN0 YXRlLnBnY19lbGFwc2VkLCBEVkRWSURFT19USU1FX0JBU0VfUSwKPiBBVl9USU1FX0JBU0VfUSk7 Cj4gPiArICAgIGMtPmR1cmF0aW9uX3B0bSA9IHN0YXRlLnBnY19lbGFwc2VkOwo+ID4gKwo+ID4g KyAgICBhdl9sb2cocywgQVZfTE9HX0lORk8sICJDaGFwdGVyIG1hcmtlciBpbmRleGluZyBjb21w bGV0ZVxuIik7Cj4gPiArICAgIHJldCA9IDA7Cj4gPiArCj4gPiArZW5kX2Nsb3NlOgo+ID4gKyAg ICBkdmR2aWRlb19wbGF5X2Nsb3NlKHMsICZzdGF0ZSk7Cj4gPiArCj4gPiArICAgIHJldHVybiBy ZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fcGdjX2NoYXB0ZXJzX3Nl dHVwKEFWRm9ybWF0Q29udGV4dCAqcykKPiA+ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250 ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4gKyAgICB1aW50NjRfdCB0aW1lX3ByZXYg PSAwOwo+ID4gKyAgICBpbnQ2NF90IHRvdGFsX2R1cmF0aW9uID0gMDsKPiA+ICsKPiA+ICsgICAg aW50IGNoYXB0ZXJfc3RhcnQgPSBjLT5vcHRfY2hhcHRlcl9zdGFydCAtIDE7Cj4gPiArICAgIGlu dCBjaGFwdGVyX2VuZCA9IGMtPm9wdF9jaGFwdGVyX2VuZCA+IDAgPyBjLT5vcHRfY2hhcHRlcl9l bmQgOgo+IGMtPnBsYXlfc3RhdGUucGdjX25iX3BnX2VzdCAtIDE7Cj4gPiArCj4gPiArICAgIGlm IChjaGFwdGVyX3N0YXJ0ID09IGNoYXB0ZXJfZW5kIHx8IGMtPnBsYXlfc3RhdGUucGdjX25iX3Bn X2VzdCA9PQo+IDEpIHsKPiA+ICsgICAgICAgIHMtPmR1cmF0aW9uID0gYXZfcmVzY2FsZV9xKGMt PnBsYXlfc3RhdGUucGdjX2R1cmF0aW9uX2VzdCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERWRFZJREVPX1RJTUVfQkFTRV9RLAo+IEFWX1RJTUVfQkFTRV9RKTsKPiA+ ICsgICAgICAgIHJldHVybiAwOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGZvciAoaW50IGkg PSBjaGFwdGVyX3N0YXJ0OyBpIDwgY2hhcHRlcl9lbmQ7IGkrKykgewo+ID4gKyAgICAgICAgdWlu dDY0X3QgdGltZV9lZmZlY3RpdmUgPSBjLT5wbGF5X3N0YXRlLnBnY19wZ190aW1lc19lc3RbaV0g LQo+IGMtPnBsYXlfc3RhdGUubmF2X3B0czsKPiA+ICsKPiA+ICsgICAgICAgIGlmICghYXZwcml2 X25ld19jaGFwdGVyKHMsIGksIERWRFZJREVPX1RJTUVfQkFTRV9RLCB0aW1lX3ByZXYsCj4gdGlt ZV9lZmZlY3RpdmUsIE5VTEwpKQo+ID4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7Cj4gPiArCj4gPiArICAgICAgICB0aW1lX3ByZXYgPSB0aW1lX2VmZmVjdGl2ZTsKPiA+ICsg ICAgICAgIHRvdGFsX2R1cmF0aW9uID0gdGltZV9lZmZlY3RpdmU7Cj4gPiArICAgIH0KPiA+ICsK PiA+ICsgICAgaWYgKGMtPm9wdF9jaGFwdGVyX3N0YXJ0ID09IDEgJiYgYy0+b3B0X2NoYXB0ZXJf ZW5kID09IDApCj4gPiArICAgICAgICBzLT5kdXJhdGlvbiA9IGF2X3Jlc2NhbGVfcShjLT5wbGF5 X3N0YXRlLnBnY19kdXJhdGlvbl9lc3QsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEVkRWSURFT19USU1FX0JBU0VfUSwKPiBBVl9USU1FX0JBU0VfUSk7Cj4gPiArICAg IGVsc2UKPiA+ICsgICAgICAgIHMtPmR1cmF0aW9uID0gYXZfcmVzY2FsZV9xKHRvdGFsX2R1cmF0 aW9uLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFZEVklERU9fVElN RV9CQVNFX1EsCj4gQVZfVElNRV9CQVNFX1EpOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb192aWRlb19zdHJlYW1fYW5hbHl6ZShB VkZvcm1hdENvbnRleHQgKnMsCj4gdmlkZW9fYXR0cl90IHZpZGVvX2F0dHIsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEVkRWaWRlb1ZUU1ZpZGVvU3RyZWFt RW50cnkKPiAqZW50cnkpCj4gPiArewo+ID4gKyAgICBBVlJhdGlvbmFsIGZyYW1lcmF0ZTsKPiA+ ICsgICAgaW50IGhlaWdodCA9IDA7Cj4gPiArICAgIGludCB3aWR0aCA9IDA7Cj4gPiArICAgIGlu dCBpc19wYWwgPSB2aWRlb19hdHRyLnZpZGVvX2Zvcm1hdCA9PSAxOwo+ID4gKwo+ID4gKyAgICBm cmFtZXJhdGUgPSBpc19wYWwgPyAoQVZSYXRpb25hbCkgeyAyNSwgMSB9IDogKEFWUmF0aW9uYWwp IHsgMzAwMDAsCj4gMTAwMSB9Owo+ID4gKyAgICBoZWlnaHQgPSBpc19wYWwgPyA1NzYgOiA0ODA7 Cj4gPiArCj4gPiArICAgIGlmIChoZWlnaHQgPiAwKSB7Cj4gPiArICAgICAgICBzd2l0Y2ggKHZp ZGVvX2F0dHIucGljdHVyZV9zaXplKSB7Cj4gPiArICAgICAgICAgICAgY2FzZSAwOiAvKiBEMSAq Lwo+ID4gKyAgICAgICAgICAgICAgICB3aWR0aCA9IDcyMDsKPiA+ICsgICAgICAgICAgICAgICAg YnJlYWs7Cj4gPiArICAgICAgICAgICAgY2FzZSAxOiAvKiA0Q0lGICovCj4gPiArICAgICAgICAg ICAgICAgIHdpZHRoID0gNzA0Owo+ID4gKyAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAg ICAgICAgICBjYXNlIDI6IC8qIEhhbGYgRDEgKi8KPiA+ICsgICAgICAgICAgICAgICAgd2lkdGgg PSAzNTI7Cj4gPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAgIGNhc2Ug MzogLyogQ0lGICovCj4gPiArICAgICAgICAgICAgICAgIHdpZHRoID0gMzUyOwo+ID4gKyAgICAg ICAgICAgICAgICBoZWlnaHQgLz0gMjsKPiA+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiAr ICAgICAgICB9Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0 KSB7Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCB2aWRlbyBz dHJlYW0gcGFyYW1ldGVycyBpbiB0aGUKPiBJRk8gaGVhZGVycywgIgo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgInRoaXMgY291bGQgYmUgYW4gYXV0aG9yaW5nIGVycm9yIG9y Cj4gZW1wdHkgdGl0bGUgIgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIih2 aWRlb19mb3JtYXQ9JWQgcGljdHVyZV9zaXplPSVkKVxuIiwKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZpZGVvX2F0dHIudmlkZW9fZm9ybWF0LAo+IHZpZGVvX2F0dHIucGlj dHVyZV9zaXplKTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGVudHJ5LT5zdGFydGNvZGUgPSAweDFFMDsKPiA+ ICsgICAgZW50cnktPmNvZGVjX2lkID0gIXZpZGVvX2F0dHIubXBlZ192ZXJzaW9uID8gQVZfQ09E RUNfSURfTVBFRzFWSURFTwo+IDogQVZfQ09ERUNfSURfTVBFRzJWSURFTzsKPiA+ICsgICAgZW50 cnktPndpZHRoID0gd2lkdGg7Cj4gPiArICAgIGVudHJ5LT5oZWlnaHQgPSBoZWlnaHQ7Cj4gPiAr ICAgIGVudHJ5LT5kYXIgPSB2aWRlb19hdHRyLmRpc3BsYXlfYXNwZWN0X3JhdGlvID8gKEFWUmF0 aW9uYWwpIHsgMTYsIDkKPiB9IDogKEFWUmF0aW9uYWwpIHsgNCwgMyB9Owo+ID4gKyAgICBlbnRy eS0+ZnJhbWVyYXRlID0gZnJhbWVyYXRlOwo+ID4gKyAgICBlbnRyeS0+aGFzX2NjID0gIWlzX3Bh bCAmJiAodmlkZW9fYXR0ci5saW5lMjFfY2NfMSB8fAo+IHZpZGVvX2F0dHIubGluZTIxX2NjXzIp Owo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBk dmR2aWRlb192aWRlb19zdHJlYW1fYWRkKEFWRm9ybWF0Q29udGV4dCAqcywKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFZEVmlkZW9WVFNWaWRlb1N0cmVhbUVudHJ5 ICplbnRyeSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBB VlN0cmVhbVBhcnNlVHlwZQo+IG5lZWRfcGFyc2luZykKPiA+ICt7Cj4gPiArICAgIEFWU3RyZWFt ICpzdDsKPiA+ICsgICAgRkZTdHJlYW0gKnN0aTsKPiA+ICsKPiA+ICsgICAgc3QgPSBhdmZvcm1h dF9uZXdfc3RyZWFtKHMsIE5VTEwpOwo+ID4gKyAgICBpZiAoIXN0KQo+ID4gKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKPiA+ICsKPiA+ICsgICAgc3QtPmlkID0gZW50cnktPnN0YXJ0 Y29kZTsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlID0gQVZNRURJQV9UWVBFX1ZJ REVPOwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkID0gZW50cnktPmNvZGVjX2lkOwo+ ID4gKyAgICBzdC0+Y29kZWNwYXItPndpZHRoID0gZW50cnktPndpZHRoOwo+ID4gKyAgICBzdC0+ Y29kZWNwYXItPmhlaWdodCA9IGVudHJ5LT5oZWlnaHQ7Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+ Zm9ybWF0ID0gQVZfUElYX0ZNVF9ZVVY0MjBQOwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmNvbG9y X3JhbmdlID0gQVZDT0xfUkFOR0VfTVBFRzsKPiA+ICsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5m cmFtZXJhdGUgPSBlbnRyeS0+ZnJhbWVyYXRlOwo+ID4gKyNpZiBGRl9BUElfUl9GUkFNRV9SQVRF Cj4gPiArICAgIHN0LT5yX2ZyYW1lX3JhdGUgPSBlbnRyeS0+ZnJhbWVyYXRlOwo+ID4gKyNlbmRp Zgo+ID4gKyAgICBzdC0+YXZnX2ZyYW1lX3JhdGUgPSBlbnRyeS0+ZnJhbWVyYXRlOwo+ID4gKwo+ ID4gKyAgICBzdGkgPSBmZnN0cmVhbShzdCk7Cj4gPiArICAgIHN0aS0+cmVxdWVzdF9wcm9iZSA9 IDA7Cj4gPiArICAgIHN0aS0+bmVlZF9wYXJzaW5nID0gbmVlZF9wYXJzaW5nOwo+ID4gKyAgICBz dGktPmRpc3BsYXlfYXNwZWN0X3JhdGlvID0gZW50cnktPmRhcjsKPiA+ICsgICAgc3RpLT5hdmN0 eC0+ZnJhbWVyYXRlID0gZW50cnktPmZyYW1lcmF0ZTsKPiA+ICsKPiA+ICsgICAgaWYgKGVudHJ5 LT5oYXNfY2MpCj4gPiArICAgICAgICBzdGktPmF2Y3R4LT5wcm9wZXJ0aWVzIHw9IEZGX0NPREVD X1BST1BFUlRZX0NMT1NFRF9DQVBUSU9OUzsKPiA+ICsKPiA+ICsgICAgYXZwcml2X3NldF9wdHNf aW5mbyhzdCwgRFZEVklERU9fUFRTX1dSQVBfQklUUywKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICBEVkRWSURFT19USU1FX0JBU0VfUS5udW0sCj4gRFZEVklERU9fVElNRV9CQVNFX1EuZGVu KTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg ZHZkdmlkZW9fdmlkZW9fc3RyZWFtX3NldHVwKEFWRm9ybWF0Q29udGV4dCAqcykKPiA+ICt7Cj4g PiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4g KyAgICBpbnQgcmV0ID0gMDsKPiA+ICsgICAgRFZEVmlkZW9WVFNWaWRlb1N0cmVhbUVudHJ5IGVu dHJ5ID0gezB9Owo+ID4gKwo+ID4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3ZpZGVvX3N0cmVh bV9hbmFseXplKHMsCj4gYy0+dnRzX2lmby0+dnRzaV9tYXQtPnZ0c192aWRlb19hdHRyLCAmZW50 cnkpKSA8IDAgfHwKPiA+ICsgICAgICAgIChyZXQgPSBkdmR2aWRlb192aWRlb19zdHJlYW1fYWRk KGMtPm1wZWdfY3R4LCAmZW50cnksCj4gQVZTVFJFQU1fUEFSU0VfRlVMTCkpIDwgMCB8fAo+ID4g KyAgICAgICAgKHJldCA9IGR2ZHZpZGVvX3ZpZGVvX3N0cmVhbV9hZGQocywgJmVudHJ5LAo+IEFW U1RSRUFNX1BBUlNFX0hFQURFUlMpKSA8IDApIHsKPiA+ICsKPiA+ICsgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gYWRkIHZpZGVvIHN0cmVhbVxuIik7Cj4gPiArICAg ICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiByZXQ7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9fYXVkaW9fc3RyZWFtX2FuYWx5emUo QVZGb3JtYXRDb250ZXh0ICpzLAo+IGF1ZGlvX2F0dHJfdCBhdWRpb19hdHRyLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYXVkaW9fY29udHJv bCwKPiBEVkRWaWRlb1BHQ0F1ZGlvU3RyZWFtRW50cnkgKmVudHJ5KQo+ID4gK3sKPiA+ICsgICAg aW50IHN0YXJ0Y29kZSA9IDA7Cj4gPiArICAgIGVudW0gQVZDb2RlY0lEIGNvZGVjX2lkID0gQVZf Q09ERUNfSURfTk9ORTsKPiA+ICsgICAgaW50IHNhbXBsZV9mbXQgPSBBVl9TQU1QTEVfRk1UX05P TkU7Cj4gPiArICAgIGludCBzYW1wbGVfcmF0ZSA9IDA7Cj4gPiArICAgIGludCBiaXRfZGVwdGgg PSAwOwo+ID4gKyAgICBpbnQgbmJfY2hhbm5lbHMgPSAwOwo+ID4gKyAgICBBVkNoYW5uZWxMYXlv dXQgY2hfbGF5b3V0ID0gKEFWQ2hhbm5lbExheW91dCkgezB9Owo+ID4gKyAgICBjaGFyIGxhbmdf ZHZkWzNdID0gezB9Owo+ID4gKwo+ID4gKyAgICBpbnQgcG9zaXRpb24gPSAoYXVkaW9fY29udHJv bCAmIDB4N0YwMCkgPj4gODsKPiA+ICsKPiA+ICsgICAgLyogWFhYKFBBVENIV0VMQ09NRSk6IFNE RFMgaXMgbm90IHN1cHBvcnRlZCBkdWUgdG8gbGFjayBvZiBzYW1wbGUKPiBtYXRlcmlhbCAqLwo+ ID4gKyAgICBzd2l0Y2ggKGF1ZGlvX2F0dHIuYXVkaW9fZm9ybWF0KSB7Cj4gPiArICAgICAgICBj YXNlIDA6IC8qIEFDMyAqLwo+ID4gKyAgICAgICAgICAgIGNvZGVjX2lkID0gQVZfQ09ERUNfSURf QUMzOwo+ID4gKyAgICAgICAgICAgIHNhbXBsZV9mbXQgPSBBVl9TQU1QTEVfRk1UX0ZMVFA7Cj4g PiArICAgICAgICAgICAgc2FtcGxlX3JhdGUgPSA0ODAwMDsKPiA+ICsgICAgICAgICAgICBzdGFy dGNvZGUgPSAweDgwICsgcG9zaXRpb247Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAg ICAgICBjYXNlIDI6IC8qIE1QMSAqLwo+ID4gKyAgICAgICAgICAgIGNvZGVjX2lkID0gQVZfQ09E RUNfSURfTVAxOwo+ID4gKyAgICAgICAgICAgIHNhbXBsZV9mbXQgPSBhdWRpb19hdHRyLnF1YW50 aXphdGlvbiA/IEFWX1NBTVBMRV9GTVRfUzMyIDoKPiBBVl9TQU1QTEVfRk1UX1MxNjsKPiA+ICsg ICAgICAgICAgICBzYW1wbGVfcmF0ZSA9IDQ4MDAwOwo+ID4gKyAgICAgICAgICAgIGJpdF9kZXB0 aCA9IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID8gMjAgOiAxNjsKPiA+ICsgICAgICAgICAgICBz dGFydGNvZGUgPSAweDFDMCArIHBvc2l0aW9uOwo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4g KyAgICAgICAgY2FzZSAzOiAvKiBNUDIgKi8KPiA+ICsgICAgICAgICAgICBjb2RlY19pZCA9IEFW X0NPREVDX0lEX01QMjsKPiA+ICsgICAgICAgICAgICBzYW1wbGVfZm10ID0gYXVkaW9fYXR0ci5x dWFudGl6YXRpb24gPyBBVl9TQU1QTEVfRk1UX1MzMiA6Cj4gQVZfU0FNUExFX0ZNVF9TMTY7Cj4g PiArICAgICAgICAgICAgc2FtcGxlX3JhdGUgPSA0ODAwMDsKPiA+ICsgICAgICAgICAgICBiaXRf ZGVwdGggPSBhdWRpb19hdHRyLnF1YW50aXphdGlvbiA/IDIwIDogMTY7Cj4gPiArICAgICAgICAg ICAgc3RhcnRjb2RlID0gMHgxQzAgKyBwb3NpdGlvbjsKPiA+ICsgICAgICAgICAgICBicmVhazsK PiA+ICsgICAgICAgIGNhc2UgNDogLyogRFZEIFBDTSAqLwo+ID4gKyAgICAgICAgICAgIGNvZGVj X2lkID0gQVZfQ09ERUNfSURfUENNX0RWRDsKPiA+ICsgICAgICAgICAgICBzYW1wbGVfZm10ID0g YXVkaW9fYXR0ci5xdWFudGl6YXRpb24gPyBBVl9TQU1QTEVfRk1UX1MzMiA6Cj4gQVZfU0FNUExF X0ZNVF9TMTY7Cj4gPiArICAgICAgICAgICAgc2FtcGxlX3JhdGUgPSBhdWRpb19hdHRyLnNhbXBs ZV9mcmVxdWVuY3kgPyA5NjAwMCA6IDQ4MDAwOwo+ID4gKyAgICAgICAgICAgIGJpdF9kZXB0aCA9 IGF1ZGlvX2F0dHIucXVhbnRpemF0aW9uID09IDIgPyAyNCA6Cj4gKGF1ZGlvX2F0dHIucXVhbnRp emF0aW9uID8gMjAgOiAxNik7Cj4gPiArICAgICAgICAgICAgc3RhcnRjb2RlID0gMHhBMCArIHBv c2l0aW9uOwo+ID4gKyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgY2FzZSA2OiAvKiBE Q0EgKi8KPiA+ICsgICAgICAgICAgICBjb2RlY19pZCA9IEFWX0NPREVDX0lEX0RUUzsKPiA+ICsg ICAgICAgICAgICBzYW1wbGVfZm10ID0gQVZfU0FNUExFX0ZNVF9GTFRQOwo+ID4gKyAgICAgICAg ICAgIHNhbXBsZV9yYXRlID0gNDgwMDA7Cj4gPiArICAgICAgICAgICAgYml0X2RlcHRoID0gYXVk aW9fYXR0ci5xdWFudGl6YXRpb24gPT0gMiA/IDI0IDoKPiAoYXVkaW9fYXR0ci5xdWFudGl6YXRp b24gPyAyMCA6IDE2KTsKPiA+ICsgICAgICAgICAgICBzdGFydGNvZGUgPSAweDg4ICsgcG9zaXRp b247Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgbmJf Y2hhbm5lbHMgPSBhdWRpb19hdHRyLmNoYW5uZWxzICsgMTsKPiA+ICsKPiA+ICsgICAgaWYgKGNv ZGVjX2lkID09IEFWX0NPREVDX0lEX05PTkUgICAgICAgICB8fAo+ID4gKyAgICAgICAgICAgIHN0 YXJ0Y29kZSA9PSAwICAgICAgICAgICAgICAgICAgIHx8Cj4gPiArICAgICAgICAgICAgc2FtcGxl X2ZtdCA9PSBBVl9TQU1QTEVfRk1UX05PTkUgfHwKPiA+ICsgICAgICAgICAgICBzYW1wbGVfcmF0 ZSA9PSAwICAgICAgICAgICAgICAgICB8fAo+ID4gKyAgICAgICAgICAgIG5iX2NoYW5uZWxzID09 IDApIHsKPiA+ICsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJJbnZhbGlk IGF1ZGlvIHN0cmVhbSBwYXJhbWV0ZXJzIGluIHRoZQo+IElGTyBoZWFkZXJzLCAiCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBjb3VsZCBiZSBhbiBhdXRob3Jpbmcg ZXJyb3Igb3IKPiBkdW1teSB0aXRsZSAiCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiKHN0cmVhbSBwb3NpdGlvbiAlZCBpbiBJRk8pXG4iLAo+IHBvc2l0aW9uKTsKPiA+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICB9Cj4gPiArCj4gPiAr ICAgIGlmIChuYl9jaGFubmVscyA9PSAyKQo+ID4gKyAgICAgICAgY2hfbGF5b3V0ID0gKEFWQ2hh bm5lbExheW91dCkgQVZfQ0hBTk5FTF9MQVlPVVRfU1RFUkVPOwo+ID4gKyAgICBlbHNlIGlmIChu Yl9jaGFubmVscyA9PSA2KQo+ID4gKyAgICAgICAgY2hfbGF5b3V0ID0gKEFWQ2hhbm5lbExheW91 dCkgQVZfQ0hBTk5FTF9MQVlPVVRfNVBPSU5UMTsKPiA+ICsgICAgZWxzZSBpZiAobmJfY2hhbm5l bHMgPT0gNykKPiA+ICsgICAgICAgIGNoX2xheW91dCA9IChBVkNoYW5uZWxMYXlvdXQpIEFWX0NI QU5ORUxfTEFZT1VUXzZQT0lOVDE7Cj4gPiArICAgIGVsc2UgaWYgKG5iX2NoYW5uZWxzID09IDgp Cj4gPiArICAgICAgICBjaF9sYXlvdXQgPSAoQVZDaGFubmVsTGF5b3V0KSBBVl9DSEFOTkVMX0xB WU9VVF83UE9JTlQxOwo+ID4gKwo+ID4gKwo+ID4gKyAgICBpZiAoYXVkaW9fYXR0ci5hcHBsaWNh dGlvbl9tb2RlID09IDEpIHsKPiA+ICsgICAgICAgIGVudHJ5LT5kaXNwb3NpdGlvbiB8PSBBVl9E SVNQT1NJVElPTl9LQVJBT0tFOwo+ID4gKwo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19X QVJOSU5HLCAiRXh0ZW5kZWQga2FyYW9rZSBtZXRhZGF0YSBpcyBub3QKPiBzdXBwb3J0ZWQgYXQg dGhpcyB0aW1lICIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzdHJl YW0gaWQ9JWQpXG4iLCBzdGFydGNvZGUpOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmIChh dWRpb19hdHRyLmNvZGVfZXh0ZW5zaW9uID09IDIpCj4gPiArICAgICAgICBlbnRyeS0+ZGlzcG9z aXRpb24gfD0gQVZfRElTUE9TSVRJT05fVklTVUFMX0lNUEFJUkVEOwo+ID4gKyAgICBpZiAoYXVk aW9fYXR0ci5jb2RlX2V4dGVuc2lvbiA9PSAzIHx8IGF1ZGlvX2F0dHIuY29kZV9leHRlbnNpb24g PT0KPiA0KQo+ID4gKyAgICAgICAgZW50cnktPmRpc3Bvc2l0aW9uIHw9IEFWX0RJU1BPU0lUSU9O X0NPTU1FTlQ7Cj4gPiArCj4gPiArICAgIEFWX1dCMTYobGFuZ19kdmQsIGF1ZGlvX2F0dHIubGFu Z19jb2RlKTsKPiA+ICsKPiA+ICsgICAgZW50cnktPnN0YXJ0Y29kZSA9IHN0YXJ0Y29kZTsKPiA+ ICsgICAgZW50cnktPmNvZGVjX2lkID0gY29kZWNfaWQ7Cj4gPiArICAgIGVudHJ5LT5zYW1wbGVf cmF0ZSA9IHNhbXBsZV9yYXRlOwo+ID4gKyAgICBlbnRyeS0+Yml0X2RlcHRoID0gYml0X2RlcHRo Owo+ID4gKyAgICBlbnRyeS0+bmJfY2hhbm5lbHMgPSBuYl9jaGFubmVsczsKPiA+ICsgICAgZW50 cnktPmNoX2xheW91dCA9IGNoX2xheW91dDsKPiA+ICsgICAgZW50cnktPmxhbmdfaXNvID0gZmZf Y29udmVydF9sYW5nX3RvKGxhbmdfZHZkLAo+IEFWX0xBTkdfSVNPNjM5XzJfQklCTCk7Cj4gPiAr Cj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVv X2F1ZGlvX3N0cmVhbV9hZGQoQVZGb3JtYXRDb250ZXh0ICpzLAo+IERWRFZpZGVvUEdDQXVkaW9T dHJlYW1FbnRyeSAqZW50cnksCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVudW0gQVZTdHJlYW1QYXJzZVR5cGUKPiBuZWVkX3BhcnNpbmcpCj4gPiArewo+ID4gKyAg ICBBVlN0cmVhbSAqc3Q7Cj4gPiArICAgIEZGU3RyZWFtICpzdGk7Cj4gPiArCj4gPiArICAgIHN0 ID0gYXZmb3JtYXRfbmV3X3N0cmVhbShzLCBOVUxMKTsKPiA+ICsgICAgaWYgKCFzdCkKPiA+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiArCj4gPiArICAgIHN0LT5pZCA9IGVu dHJ5LT5zdGFydGNvZGU7Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVE SUFfVFlQRV9BVURJTzsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IGVudHJ5LT5j b2RlY19pZDsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5mb3JtYXQgPSBlbnRyeS0+c2FtcGxlX2Zt dDsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5zYW1wbGVfcmF0ZSA9IGVudHJ5LT5zYW1wbGVfcmF0 ZTsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5iaXRzX3Blcl9jb2RlZF9zYW1wbGUgPSBlbnRyeS0+ Yml0X2RlcHRoOwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmJpdHNfcGVyX3Jhd19zYW1wbGUgPSBl bnRyeS0+Yml0X2RlcHRoOwo+ID4gKyAgICBzdC0+Y29kZWNwYXItPmNoX2xheW91dCA9IGVudHJ5 LT5jaF9sYXlvdXQ7Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxz ID0gZW50cnktPm5iX2NoYW5uZWxzOwo+ID4gKyAgICBzdC0+ZGlzcG9zaXRpb24gPSBlbnRyeS0+ ZGlzcG9zaXRpb247Cj4gPiArCj4gPiArICAgIGlmIChlbnRyeS0+bGFuZ19pc28pCj4gPiArICAg ICAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBlbnRyeS0+bGFuZ19p c28sIDApOwo+ID4gKwo+ID4gKyAgICBzdGkgPSBmZnN0cmVhbShzdCk7Cj4gPiArICAgIHN0aS0+ cmVxdWVzdF9wcm9iZSA9IDA7Cj4gPiArICAgIHN0aS0+bmVlZF9wYXJzaW5nID0gbmVlZF9wYXJz aW5nOwo+ID4gKwo+ID4gKyAgICBhdnByaXZfc2V0X3B0c19pbmZvKHN0LCBEVkRWSURFT19QVFNf V1JBUF9CSVRTLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIERWRFZJREVPX1RJTUVfQkFT RV9RLm51bSwKPiBEVkRWSURFT19USU1FX0JBU0VfUS5kZW4pOwo+ID4gKwo+ID4gKyAgICByZXR1 cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19hdWRpb19zdHJlYW1f YWRkX2FsbChBVkZvcm1hdENvbnRleHQgKnMpCj4gPiArewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4 Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgaW50IHJldCA9IDA7Cj4g PiArCj4gPiArICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYy0+dnRzX2lmby0+dnRzaV9tYXQtPm5y X29mX3Z0c19hdWRpb19zdHJlYW1zOwo+IGkrKykgewo+ID4gKyAgICAgICAgRFZEVmlkZW9QR0NB dWRpb1N0cmVhbUVudHJ5IGVudHJ5ID0gezB9Owo+ID4gKwo+ID4gKyAgICAgICAgaWYgKCEoYy0+ cGxheV9zdGF0ZS5wZ2MtPmF1ZGlvX2NvbnRyb2xbaV0gJiAweDgwMDApKQo+ID4gKyAgICAgICAg ICAgIGNvbnRpbnVlOwo+ID4gKwo+ID4gKyAgICAgICAgaWYgKChyZXQgPSBkdmR2aWRlb19hdWRp b19zdHJlYW1fYW5hbHl6ZShzLAo+IGMtPnZ0c19pZm8tPnZ0c2lfbWF0LT52dHNfYXVkaW9fYXR0 cltpXSwKPiA+ICsKPiAgYy0+cGxheV9zdGF0ZS5wZ2MtPmF1ZGlvX2NvbnRyb2xbaV0sICZlbnRy eSkpIDwgMCkKPiA+ICsgICAgICAgICAgICBnb3RvIGJyZWFrX2Vycm9yOwo+ID4gKwo+ID4gKyAg ICAgICAgLyogSUZPIHN0cnVjdHVyZXMgY2FuIGRlY2xhcmUgZHVwbGljYXRlIGVudHJpZXMgZm9y IHRoZSBzYW1lCj4gc3RhcnRjb2RlICovCj4gPiArICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IHMtPm5iX3N0cmVhbXM7IGorKykKPiA+ICsgICAgICAgICAgICBpZiAocy0+c3RyZWFtc1tqXS0+ aWQgPT0gZW50cnkuc3RhcnRjb2RlKQo+ID4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ ICsKPiA+ICsgICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9fYXVkaW9fc3RyZWFtX2FkZChjLT5t cGVnX2N0eCwgJmVudHJ5LAo+IEFWU1RSRUFNX1BBUlNFX0ZVTEwpKSA8IDAgfHwKPiA+ICsgICAg ICAgICAgICAocmV0ID0gZHZkdmlkZW9fYXVkaW9fc3RyZWFtX2FkZChzLCAmZW50cnksCj4gQVZT VFJFQU1fUEFSU0VfSEVBREVSUykpIDwgMCkKPiA+ICsgICAgICAgICAgICBnb3RvIGJyZWFrX2Vy cm9yOwo+ID4gKwo+ID4gKyAgICAgICAgY29udGludWU7Cj4gPiArCj4gPiArYnJlYWtfZXJyb3I6 Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFkZCBhdWRp byBzdHJlYW0gYXQgcG9zaXRpb24KPiAlZFxuIiwgaSk7Cj4gPiArICAgICAgICByZXR1cm4gcmV0 Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBpbnQgZHZkdmlkZW9fc3VicF9zdHJlYW1fYW5hbHl6ZShBVkZvcm1hdENvbnRleHQg KnMsIHVpbnQzMl90Cj4gb2Zmc2V0LCBzdWJwX2F0dHJfdCBzdWJwX2F0dHIsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERWRFZpZGVvUEdDU3VidGl0bGVTdHJl YW1FbnRyeQo+ICplbnRyeSkKPiA+ICt7Cj4gPiArICAgIGNoYXIgbGFuZ19kdmRbM10gPSB7MH07 Cj4gPiArCj4gPiArICAgIGVudHJ5LT5zdGFydGNvZGUgPSAweDIwICsgKG9mZnNldCAmIDB4MUYp Owo+ID4gKwo+ID4gKyAgICBpZiAoc3VicF9hdHRyLmxhbmdfZXh0ZW5zaW9uID09IDkpCj4gPiAr ICAgICAgICBlbnRyeS0+ZGlzcG9zaXRpb24gfD0gQVZfRElTUE9TSVRJT05fRk9SQ0VEOwo+ID4g Kwo+ID4gKyAgICBBVl9XQjE2KGxhbmdfZHZkLCBzdWJwX2F0dHIubGFuZ19jb2RlKTsKPiA+ICsg ICAgZW50cnktPmxhbmdfaXNvID0gZmZfY29udmVydF9sYW5nX3RvKGxhbmdfZHZkLAo+IEFWX0xB TkdfSVNPNjM5XzJfQklCTCk7Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgaW50IGR2ZHZpZGVvX3N1YnBfc3RyZWFtX2FkZChBVkZvcm1hdENvbnRleHQg KnMsCj4gRFZEVmlkZW9QR0NTdWJ0aXRsZVN0cmVhbUVudHJ5ICplbnRyeSwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWU3RyZWFtUGFyc2VUeXBlIG5lZWRf cGFyc2luZykKPiA+ICt7Cj4gPiArICAgIEFWU3RyZWFtICpzdDsKPiA+ICsgICAgRkZTdHJlYW0g KnN0aTsKPiA+ICsgICAgaW50IHJldCA9IDA7Cj4gPiArCj4gPiArICAgIHN0ID0gYXZmb3JtYXRf bmV3X3N0cmVhbShzLCBOVUxMKTsKPiA+ICsgICAgaWYgKCFzdCkKPiA+ICsgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7Cj4gPiArCj4gPiArICAgIHN0LT5pZCA9IGVudHJ5LT5zdGFydGNv ZGU7Cj4gPiArICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9TVUJU SVRMRTsKPiA+ICsgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFWX0NPREVDX0lEX0RWRF9T VUJUSVRMRTsKPiA+ICsKPiA+ICsgICAgaWYgKGVudHJ5LT5sYW5nX2lzbykKPiA+ICsgICAgICAg IGF2X2RpY3Rfc2V0KCZzdC0+bWV0YWRhdGEsICJsYW5ndWFnZSIsIGVudHJ5LT5sYW5nX2lzbywg MCk7Cj4gPiArCj4gPiArICAgIGF2X2RpY3Rfc2V0KCZzdC0+bWV0YWRhdGEsICJWSUVXUE9SVCIs Cj4gZHZkdmlkZW9fc3VicF92aWV3cG9ydF9sYWJlbHNbZW50cnktPnZpZXdwb3J0XSwgMCk7Cj4g PiArCj4gPiArICAgIHN0LT5kaXNwb3NpdGlvbiA9IGVudHJ5LT5kaXNwb3NpdGlvbjsKPiA+ICsK PiA+ICsgICAgc3RpID0gZmZzdHJlYW0oc3QpOwo+ID4gKyAgICBzdGktPnJlcXVlc3RfcHJvYmUg PSAwOwo+ID4gKyAgICBzdGktPm5lZWRfcGFyc2luZyA9IG5lZWRfcGFyc2luZzsKPiA+ICsKPiA+ ICsgICAgYXZwcml2X3NldF9wdHNfaW5mbyhzdCwgRFZEVklERU9fUFRTX1dSQVBfQklUUywKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICBEVkRWSURFT19USU1FX0JBU0VfUS5udW0sCj4gRFZE VklERU9fVElNRV9CQVNFX1EuZGVuKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIHJldDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19zdWJwX3N0cmVhbV9hZGRfaW50ZXJuYWwo QVZGb3JtYXRDb250ZXh0ICpzLAo+IHVpbnQzMl90IG9mZnNldCwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwX2F0dHJfdCBzdWJwX2F0dHIsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bQo+IERW RFZpZGVvU3VicGljdHVyZVZpZXdwb3J0IHZpZXdwb3J0KQo+ID4gK3sKPiA+ICsgICAgRFZEVmlk ZW9EZW11eENvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArCj4gPiArICAgIGludCByZXQg PSAwOwo+ID4gKyAgICBEVkRWaWRlb1BHQ1N1YnRpdGxlU3RyZWFtRW50cnkgZW50cnkgPSB7MH07 Cj4gPiArCj4gPiArICAgIGVudHJ5LnZpZXdwb3J0ID0gdmlld3BvcnQ7Cj4gPiArCj4gPiArICAg IGlmICgocmV0ID0gZHZkdmlkZW9fc3VicF9zdHJlYW1fYW5hbHl6ZShzLCBvZmZzZXQsIHN1YnBf YXR0ciwKPiAmZW50cnkpKSA8IDApCj4gPiArICAgICAgICBnb3RvIGVuZF9lcnJvcjsKPiA+ICsK PiA+ICsgICAgLyogSUZPIHN0cnVjdHVyZXMgY2FuIGRlY2xhcmUgZHVwbGljYXRlIGVudHJpZXMg Zm9yIHRoZSBzYW1lCj4gc3RhcnRjb2RlICovCj4gPiArICAgIGZvciAoaW50IGkgPSAwOyBpIDwg cy0+bmJfc3RyZWFtczsgaSsrKQo+ID4gKyAgICAgICAgaWYgKHMtPnN0cmVhbXNbaV0tPmlkID09 IGVudHJ5LnN0YXJ0Y29kZSkKPiA+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPiA+ICsKPiA+ICsg ICAgaWYgKChyZXQgPSBkdmR2aWRlb19zdWJwX3N0cmVhbV9hZGQoYy0+bXBlZ19jdHgsICZlbnRy eSwKPiBBVlNUUkVBTV9QQVJTRV9GVUxMKSkgPCAwIHx8Cj4gPiArICAgICAgICAocmV0ID0gZHZk dmlkZW9fc3VicF9zdHJlYW1fYWRkKHMsICZlbnRyeSwKPiBBVlNUUkVBTV9QQVJTRV9IRUFERVJT KSkgPCAwKQo+ID4gKyAgICAgICAgZ290byBlbmRfZXJyb3I7Cj4gPiArCj4gPiArICAgIGdvdG8g ZW5kOwo+ID4gKwo+ID4gK2VuZF9lcnJvcjoKPiA+ICsgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwgIlVuYWJsZSB0byBhZGQgc3VidGl0bGUgc3RyZWFtXG4iKTsKPiA+ICsKPiA+ICtlbmQ6Cj4g PiArICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHZkdmlkZW9f c3VicF9zdHJlYW1fYWRkX2FsbChBVkZvcm1hdENvbnRleHQgKnMpCj4gPiArewo+ID4gKyAgICBE VkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgaWYg KCFjLT52dHNfaWZvLT52dHNpX21hdC0+bnJfb2ZfdnRzX3N1YnBfc3RyZWFtcykKPiA+ICsgICAg ICAgIHJldHVybiAwOwo+ID4gKwo+ID4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGMtPnZ0c19p Zm8tPnZ0c2lfbWF0LT5ucl9vZl92dHNfc3VicF9zdHJlYW1zOwo+IGkrKykgewo+ID4gKyAgICAg ICAgaW50IHJldCA9IDA7Cj4gPiArICAgICAgICB1aW50MzJfdCBzdWJwX2NvbnRyb2w7Cj4gPiAr ICAgICAgICBzdWJwX2F0dHJfdCBzdWJwX2F0dHI7Cj4gPiArICAgICAgICB2aWRlb19hdHRyX3Qg dmlkZW9fYXR0cjsKPiA+ICsKPiA+ICsgICAgICAgIHN1YnBfY29udHJvbCA9IGMtPnBsYXlfc3Rh dGUucGdjLT5zdWJwX2NvbnRyb2xbaV07Cj4gPiArICAgICAgICBpZiAoIShzdWJwX2NvbnRyb2wg JiAweDgwMDAwMDAwKSkKPiA+ICsgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsKPiA+ICsgICAg ICAgIC8qIHRoZXJlIGNhbiBiZSBzZXZlcmFsIHByZXNlbnRhdGlvbnMgZm9yIG9uZSBTUFUgKi8K PiA+ICsgICAgICAgIC8qIHRoZSBEQVIgY2hlY2sgaXMgZmxleGlibGUgaW4gb3JkZXIgdG8gc3Vw cG9ydCB3ZWlyZAo+IGF1dGhvcmluZyAqLwo+ID4gKyAgICAgICAgdmlkZW9fYXR0ciA9IGMtPnZ0 c19pZm8tPnZ0c2lfbWF0LT52dHNfdmlkZW9fYXR0cjsKPiA+ICsgICAgICAgIHN1YnBfYXR0ciA9 IGMtPnZ0c19pZm8tPnZ0c2lfbWF0LT52dHNfc3VicF9hdHRyW2ldOwo+ID4gKwo+ID4gKyAgICAg ICAgLyogNDozICovCj4gPiArICAgICAgICBpZiAoIXZpZGVvX2F0dHIuZGlzcGxheV9hc3BlY3Rf cmF0aW8pIHsKPiA+ICsgICAgICAgICAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3N1YnBfc3RyZWFt X2FkZF9pbnRlcm5hbChzLAo+IHN1YnBfY29udHJvbCA+PiAyNCwgc3VicF9hdHRyLAo+ID4gKwo+ ICBEVkRWSURFT19TVUJQX1ZJRVdQT1JUX0ZVTExTQ1JFRU4pKSA8IDApCj4gPiArICAgICAgICAg ICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArICAgICAgICAgICAgY29udGludWU7Cj4gPiAr ICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAvKiAxNjo5ICovCj4gPiArICAgICAgICBpZiAo KCAgICByZXQgPSBkdmR2aWRlb19zdWJwX3N0cmVhbV9hZGRfaW50ZXJuYWwocywKPiBzdWJwX2Nv bnRyb2wgPj4gMTYsIHN1YnBfYXR0ciwKPiA+ICsKPiAgRFZEVklERU9fU1VCUF9WSUVXUE9SVF9X SURFU0NSRUVOKSkgPCAwKQo+ID4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiAr ICAgICAgICAvKiAxNjo5IGxldHRlcmJveCAqLwo+ID4gKyAgICAgICAgaWYgKHZpZGVvX2F0dHIu cGVybWl0dGVkX2RmID09IDIgfHwgdmlkZW9fYXR0ci5wZXJtaXR0ZWRfZGYgPT0KPiAwKQo+ID4g KyAgICAgICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9fc3VicF9zdHJlYW1fYWRkX2ludGVybmFs KHMsCj4gc3VicF9jb250cm9sID4+IDgsIHN1YnBfYXR0ciwKPiA+ICsKPiAgRFZEVklERU9fU1VC UF9WSUVXUE9SVF9MRVRURVJCT1gpKSA8IDApCj4gPiArICAgICAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4gPiArCj4gPiArICAgICAgICAvKiAxNjo5IHBhbi1hbmQtc2NhbiAqLwo+ID4gKyAgICAg ICAgaWYgKHZpZGVvX2F0dHIucGVybWl0dGVkX2RmID09IDEgfHwgdmlkZW9fYXR0ci5wZXJtaXR0 ZWRfZGYgPT0KPiAwKQo+ID4gKyAgICAgICAgICAgIGlmICgocmV0ID0gZHZkdmlkZW9fc3VicF9z dHJlYW1fYWRkX2ludGVybmFsKHMsCj4gc3VicF9jb250cm9sLCBzdWJwX2F0dHIsCj4gPiArCj4g IERWRFZJREVPX1NVQlBfVklFV1BPUlRfUEFOU0NBTikpIDwgMCkKPiA+ICsgICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHZkdmlkZW9fc3ViZGVtdXhfZmx1c2goQVZGb3JtYXRD b250ZXh0ICpzKQo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMgPSBzLT5w cml2X2RhdGE7Cj4gPiArCj4gPiArICAgIGlmICghYy0+c2VnbWVudF9zdGFydGVkKQo+ID4gKyAg ICAgICAgcmV0dXJuOwo+ID4gKwo+ID4gKyAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiZmx1 c2hpbmcgc3ViLWRlbXV4ZXJcbiIpOwo+ID4gKyAgICBhdmlvX2ZsdXNoKCZjLT5tcGVnX3BiLnB1 Yik7Cj4gPiArICAgIGZmX3JlYWRfZnJhbWVfZmx1c2goYy0+bXBlZ19jdHgpOwo+ID4gKyAgICBj LT5zZWdtZW50X3N0YXJ0ZWQgPSAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGR2ZHZp ZGVvX3N1YmRlbXV4X3JlYWRfZGF0YSh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgKmJ1ZiwgaW50Cj4g YnVmX3NpemUpCj4gPiArewo+ID4gKyAgICBBVkZvcm1hdENvbnRleHQgKnMgPSBvcGFxdWU7Cj4g PiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ID4gKwo+ID4g KyAgICBpbnQgcmV0ID0gMDsKPiA+ICsgICAgaW50IG5hdl9ldmVudDsKPiA+ICsKPiA+ICsgICAg aWYgKGMtPnBsYXlfZW5kKQo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ID4gKwo+ ID4gKyAgICByZXQgPSBkdmR2aWRlb19wbGF5X25leHRfcHNfYmxvY2sob3BhcXVlLCAmYy0+cGxh eV9zdGF0ZSwgYnVmLAo+IGJ1Zl9zaXplLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJm5hdl9ldmVudCwKPiBkdmR2aWRlb19zdWJkZW11eF9mbHVzaCk7Cj4gPiAr Cj4gPiArICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YpIHsKPiA+ICsgICAgICAgIGMtPm1wZWdf cGIucHViLmVvZl9yZWFjaGVkID0gMTsKPiA+ICsgICAgICAgIGMtPnBsYXlfZW5kID0gMTsKPiA+ ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiA+ICsgICAgfQo+ID4gKwo+ID4g KyAgICBpZiAocmV0ID49IDAgJiYgbmF2X2V2ZW50ID09IERWRE5BVl9OQVZfUEFDS0VUKQo+ID4g KyAgICAgICAgcmV0dXJuIEZGRVJST1JfUkVETzsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIHJldDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHZkdmlkZW9fc3ViZGVtdXhfY2xvc2UoQVZG b3JtYXRDb250ZXh0ICpzKQo+ID4gK3sKPiA+ICsgICAgRFZEVmlkZW9EZW11eENvbnRleHQgKmMg PSBzLT5wcml2X2RhdGE7Cj4gPiArCj4gPiArICAgIGF2X2ZyZWVwKCZjLT5tcGVnX3BiLnB1Yi5i dWZmZXIpOwo+ID4gKyAgICBhdl9mcmVlcCgmYy0+bXBlZ19wYik7Cj4gPiArICAgIGF2Zm9ybWF0 X2Nsb3NlX2lucHV0KCZjLT5tcGVnX2N0eCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg ZHZkdmlkZW9fc3ViZGVtdXhfb3BlbihBVkZvcm1hdENvbnRleHQgKnMpCj4gPiArewo+ID4gKyAg ICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAg aW50IHJldCA9IDA7Cj4gPiArCj4gPiArICAgIGlmICghKGMtPm1wZWdfZm10ID0gYXZfZmluZF9p bnB1dF9mb3JtYXQoIm1wZWciKSkpCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9ERU1VWEVS X05PVF9GT1VORDsKPiA+ICsKPiA+ICsgICAgaWYgKCEoYy0+bXBlZ19jdHggPSBhdmZvcm1hdF9h bGxvY19jb250ZXh0KCkpKQo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiA+ ICsKPiA+ICsgICAgaWYgKCEoYy0+bXBlZ19idWYgPSBhdl9tYWxsb2N6KERWRFZJREVPX0JMT0NL X1NJWkUpKSkgewo+ID4gKyAgICAgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KGMtPm1wZWdfY3R4 KTsKPiA+ICsgICAgICAgIGMtPm1wZWdfY3R4ID0gTlVMTDsKPiA+ICsKPiA+ICsgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgZmZpb19pbml0 X2NvbnRleHQoJmMtPm1wZWdfcGIsIGMtPm1wZWdfYnVmLCBEVkRWSURFT19CTE9DS19TSVpFLCAw LAo+IHMsCj4gPiArICAgICAgICAgICAgICAgICAgICAgIGR2ZHZpZGVvX3N1YmRlbXV4X3JlYWRf ZGF0YSwgTlVMTCwgTlVMTCk7Cj4gPiArICAgIGMtPm1wZWdfcGIucHViLnNlZWthYmxlID0gMDsK PiA+ICsKPiA+ICsgICAgaWYgKChyZXQgPSBmZl9jb3B5X3doaXRlYmxhY2tsaXN0cyhjLT5tcGVn X2N0eCwgcykpIDwgMCkgewo+ID4gKyAgICAgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KGMtPm1w ZWdfY3R4KTsKPiA+ICsgICAgICAgIGMtPm1wZWdfY3R4ID0gTlVMTDsKPiA+ICsKPiA+ICsgICAg ICAgIHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgYy0+bXBlZ19jdHgtPmZs YWdzID0gQVZGTVRfRkxBR19DVVNUT01fSU8gfCBBVkZNVF9GTEFHX0dFTlBUUzsKPiA+ICsgICAg Yy0+bXBlZ19jdHgtPmN0eF9mbGFncyB8PSBBVkZNVENUWF9VTlNFRUtBQkxFOwo+ID4gKyAgICBj LT5tcGVnX2N0eC0+cHJvYmVzaXplID0gMDsKPiA+ICsgICAgYy0+bXBlZ19jdHgtPm1heF9hbmFs eXplX2R1cmF0aW9uID0gMDsKPiA+ICsgICAgYy0+bXBlZ19jdHgtPmludGVycnVwdF9jYWxsYmFj ayA9IHMtPmludGVycnVwdF9jYWxsYmFjazsKPiA+ICsgICAgYy0+bXBlZ19jdHgtPnBiID0gJmMt Pm1wZWdfcGIucHViOwo+ID4gKyAgICBjLT5tcGVnX2N0eC0+aW9fb3BlbiA9IE5VTEw7Cj4gPiAr Cj4gPiArICAgIGlmICgocmV0ID0gYXZmb3JtYXRfb3Blbl9pbnB1dCgmYy0+bXBlZ19jdHgsICIi LCBjLT5tcGVnX2ZtdCwKPiBOVUxMKSkgPCAwKQo+ID4gKyAgICAgICAgYy0+bXBlZ19jdHggPSBO VUxMOwo+Cj4gVW5uZWNlc3NhcnksIGMtPm1wZWdfY3R4IHdpbGwgYmUgc2V0IHRvIE5VTEwgYnkg YXZmb3JtYXRfb3Blbl9pbnB1dCgpIG9uCj4gZXJyb3IuCj4KPiA+ICsKPiA+ICsgICAgcmV0dXJu IHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19yZWFkX2hlYWRlcihB VkZvcm1hdENvbnRleHQgKnMpCj4gPiArewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAq YyA9IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgaW50IHJldCA9IDA7Cj4gPiArCj4gPiAr ICAgIGlmIChjLT5vcHRfdGl0bGUgPT0gMCkgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsIEFWX0xP R19JTkZPLCAiRGVmYXVsdGluZyB0byB0aXRsZSAjMS4gIgo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiVGhpcyBpcyBub3QgYWx3YXlzIHRoZSBtYWluIGZlYXR1cmUsCj4gdmFs aWRhdGlvbiBzdWdnZXN0ZWQuXG4iKTsKPiA+ICsKPiA+ICsgICAgICAgIGMtPm9wdF90aXRsZSA9 IDE7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaWYgKGMtPm9wdF9wZ2MpIHsKPiA+ICsgICAg ICAgIGlmIChjLT5vcHRfcGcgPT0gMCkKPiA+ICsgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9H X0VSUk9SLCAiSW52YWxpZCBjb29yZGluYXRlcy4gSWYgLXBnYyBpcwo+IHNldCwgLXBnIG11c3Qg YmUgc2V0IHRvby5cbiIpOwo+ID4gKyAgICAgICAgZWxzZSBpZiAoYy0+b3B0X2NoYXB0ZXJfc3Rh cnQgPiAxIHx8IGMtPm9wdF9jaGFwdGVyX2VuZCA+IDAgfHwKPiBjLT5vcHRfcHJlaW5kZXgpCj4g PiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIi1wZ2MgaXMgbm90IGNvbXBh dGlibGUgd2l0aCB0aGUKPiAtcHJlaW5kZXggb3IgIgo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICItY2hhcHRlcl9zdGFydC8tY2hhcHRlcl9lbmQKPiBvcHRpb25zXG4i KTsKPiA+ICsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gPiArICAgIH0K PiA+ICsKPiA+ICsgICAgaWYgKChyZXQgPSBkdmR2aWRlb19pZm9fb3BlbihzKSkgPCAwKQo+ID4g KyAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsgICAgaWYgKGMtPm9wdF9wcmVpbmRleCAm JiAocmV0ID0gZHZkdmlkZW9fcGdjX3ByZWluZGV4KHMpKSA8IDApCj4gPiArICAgICAgICByZXR1 cm4gcmV0Owo+ID4gKwo+ID4gKyAgICBpZiAoKHJldCA9IGR2ZHZpZGVvX3BsYXlfb3BlbihzLCAm Yy0+cGxheV9zdGF0ZSkpIDwgMCAgIHx8Cj4gPiArICAgICAgICAocmV0ID0gZHZkdmlkZW9fc3Vi ZGVtdXhfb3BlbihzKSkgPCAwICAgICAgICAgICAgICAgfHwKPiA+ICsgICAgICAgIChyZXQgPSBk dmR2aWRlb192aWRlb19zdHJlYW1fc2V0dXAocykpIDwgMCAgICAgICAgICB8fAo+ID4gKyAgICAg ICAgKHJldCA9IGR2ZHZpZGVvX2F1ZGlvX3N0cmVhbV9hZGRfYWxsKHMpKSA8IDAgICAgICAgIHx8 Cj4gPiArICAgICAgICAocmV0ID0gZHZkdmlkZW9fc3VicF9zdHJlYW1fYWRkX2FsbChzKSkgPCAw KQo+ID4gKyAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsgICAgaWYgKCFjLT5vcHRfcHJl aW5kZXgpCj4gPiArICAgICAgICByZXR1cm4gZHZkdmlkZW9fcGdjX2NoYXB0ZXJzX3NldHVwKHMp Owo+ID4gKwo+ID4gKyAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50 IGR2ZHZpZGVvX3JlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkK PiA+ICt7Cj4gPiArICAgIERWRFZpZGVvRGVtdXhDb250ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwo+ ID4gKwo+ID4gKyAgICBpbnQgcmV0Owo+ID4gKyAgICBlbnVtIEFWTWVkaWFUeXBlIHN0X3R5cGU7 Cj4gPiArICAgIGludDY0X3QgY3VyX2RlbHRhID0gMDsKPiA+ICsKPiA+ICsgICAgaWYgKGMtPnBs YXlfZW5kKQo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+ID4gKwo+ID4gKyAgICBy ZXQgPSBhdl9yZWFkX2ZyYW1lKGMtPm1wZWdfY3R4LCBwa3QpOwo+ID4gKwo+ID4gKyAgICBpZiAo cmV0IDwgMCkKPiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArICAgIGlmICghYy0+ c2VnbWVudF9zdGFydGVkKQo+ID4gKyAgICAgICAgYy0+c2VnbWVudF9zdGFydGVkID0gMTsKPiA+ ICsKPiA+ICsgICAgaWYgKHBrdC0+c3RyZWFtX2luZGV4ID49IHMtPm5iX3N0cmVhbXMpIHsKPiA+ ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJkaXNjYXJkaW5nIGZyYW1lIHdpdGgg c3RyZWFtIHRoYXQgd2FzCj4gbm90IGluIElGTyBoZWFkZXJzICIKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICIoaW5kZXg9JWQpXG4iLCBwa3QtPnN0cmVhbV9pbmRleCk7Cj4g PiArCj4gPiArICAgICAgICByZXR1cm4gRkZFUlJPUl9SRURPOwo+ID4gKyAgICB9Cj4gPiArCj4g PiArICAgIHN0X3R5cGUgPQo+IGMtPm1wZWdfY3R4LT5zdHJlYW1zW3BrdC0+c3RyZWFtX2luZGV4 XS0+Y29kZWNwYXItPmNvZGVjX3R5cGU7Cj4gPiArCj4gPiArICAgIGlmICghYy0+cGxheV9zdGFy dGVkKSB7Cj4gPiArICAgICAgICBpZiAoc3RfdHlwZSAhPSBBVk1FRElBX1RZUEVfVklERU8gfHwg cGt0LT5wdHMgPT0gQVZfTk9QVFNfVkFMVUUKPiB8fAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBrdC0+ZHRzID09IEFWX05PUFRTX1ZBTFVFCj4gfHwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKHBrdC0+ ZmxhZ3MgJgo+IEFWX1BLVF9GTEFHX0tFWSkpIHsKPiA+ICsgICAgICAgICAgICBhdl9sb2cocywg QVZfTE9HX1ZFUkJPU0UsICJkaXNjYXJkaW5nIHBhY2tldCB3aGljaCBpcyBub3QgYQo+IHZpZGVv IGtleWZyYW1lIG9yICIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJ3aXRoIHVuc2V0IFBUUy9EVFMgYXQgc3RhcnRcbiIpOwo+ID4gKyAgICAgICAgICAgIHJldHVy biBGRkVSUk9SX1JFRE87Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBjLT5maXJz dF9wdHMgPSBwa3QtPnB0czsKPiA+ICsgICAgICAgIGMtPnBsYXlfc3RhcnRlZCA9IDE7Cj4gPiAr Cj4gPiArICAgICAgICBwa3QtPnB0cyA9IDA7Cj4gPiArICAgICAgICBwa3QtPmR0cyA9IGMtPnBs YXlfc3RhdGUudHNfb2Zmc2V0IC0gcGt0LT5wdHM7Cj4gPiArICAgIH0gZWxzZSB7Cj4gPiArICAg ICAgICBjdXJfZGVsdGEgPSBjLT5wbGF5X3N0YXRlLnRzX29mZnNldCAtIGMtPmZpcnN0X3B0czsK PiA+ICsKPiA+ICsgICAgICAgIGlmIChjLT5wbGF5X3N0YXRlLm5iX2NlbGxzX3BsYXllZCA9PSAx ICYmIChwa3QtPnB0cyA9PQo+IEFWX05PUFRTX1ZBTFVFIHx8Cj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGt0LT5kdHMgPT0KPiBBVl9OT1BU U19WQUxVRSB8fAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChwa3QtPnB0cyArCj4gY3VyX2RlbHRhKSA8IDApKSB7Cj4gPiArICAgICAgICAg ICAgYXZfbG9nKHMsIEFWX0xPR19WRVJCT1NFLCAiZGlzY2FyZGluZyBwYWNrZXQgd2l0aCBuZWdh dGl2ZQo+IFBUUyBvciB1bnNldCBQVFMvRFRTICIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIodGhpcyBpcyBPSyBhdCB0aGUgc3RhcnQgb2YgdGhlCj4gZmlyc3Qg cGxheWJhY2sgY2VsbClcbiIpOwo+ID4gKyAgICAgICAgICAgIHJldHVybiBGRkVSUk9SX1JFRE87 Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBpZiAocGt0LT5wdHMgIT0gQVZfTk9Q VFNfVkFMVUUpCj4gPiArICAgICAgICAgICAgcGt0LT5wdHMgKz0gY3VyX2RlbHRhOwo+ID4gKyAg ICAgICAgaWYgKHBrdC0+ZHRzICE9IEFWX05PUFRTX1ZBTFVFKQo+ID4gKyAgICAgICAgICAgIHBr dC0+ZHRzICs9IGN1cl9kZWx0YTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBhdl9sb2cocywg QVZfTE9HX1RSQUNFLCAic3Q9JWQgcHRzPSVsZCBkdHM9JWxkIHRzX29mZnNldD0lbGQKPiBmaXJz dF9wdHM9JWxkXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa3QtPnN0cmVh bV9pbmRleCwgcGt0LT5wdHMsIHBrdC0+ZHRzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjLT5wbGF5X3N0YXRlLnRzX29mZnNldCwgYy0+Zmlyc3RfcHRzKTsKPiA+ICsgICAgaWYg KHBrdC0+cHRzIDwgMCkKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfV0FSTklORywgIklu dmFsaWQgZnJhbWUgUFRTIEAgc3Q9JWQgcHRzPSVsZAo+IGR0cz0lbGRcbiIsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdC0+c3RyZWFtX2luZGV4LCBwa3QtPnB0cywK PiBwa3QtPmR0cyk7Cj4gPiArCj4gPiArICAgIHJldHVybiBjLT5wbGF5X2VuZCA/IEFWRVJST1Jf RU9GIDogMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkdmR2aWRlb19jbG9zZShBVkZv cm1hdENvbnRleHQgKnMpCj4gPiArewo+ID4gKyAgICBEVkRWaWRlb0RlbXV4Q29udGV4dCAqYyA9 IHMtPnByaXZfZGF0YTsKPiA+ICsKPiA+ICsgICAgZHZkdmlkZW9fc3ViZGVtdXhfY2xvc2Uocyk7 Cj4gPiArICAgIGR2ZHZpZGVvX3BsYXlfY2xvc2UocywgJmMtPnBsYXlfc3RhdGUpOwo+ID4gKyAg ICBkdmR2aWRlb19pZm9fY2xvc2Uocyk7Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihEVkRWaWRlb0RlbXV4Q29udGV4 dCwgeCkKPiA+ICtzdGF0aWMgY29uc3QgQVZPcHRpb24gZHZkdmlkZW9fb3B0aW9uc1tdID0gewo+ ID4gKyAgICB7ImFuZ2xlIiwgICAgICAgICAgICJwbGF5YmFjayBhbmdsZSBudW1iZXIiLAo+ICAg ICAgICAgICAgIE9GRlNFVChvcHRfYW5nbGUpLCAgICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAg IHsgLmk2ND0xIH0sCj4gIDEsICAgICAgICAgIDksICAgICAgICAgQVZfT1BUX0ZMQUdfREVDT0RJ TkdfUEFSQU0gfSwKPiA+ICsgICAgeyJjaGFwdGVyX2VuZCIsICAgICAiZXhpdCBjaGFwdGVyIChQ VFQpIG51bWJlciAoMD1lbmQpIiwKPiAgICAgICAgICAgICBPRkZTRVQob3B0X2NoYXB0ZXJfZW5k KSwgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7IC5pNjQ9MCB9LAo+ICAwLCAgICAgICAgICA5OSwg ICAgICAgIEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCj4gPiArICAgIHsiY2hhcHRlcl9z dGFydCIsICAgImVudHJ5IGNoYXB0ZXIgKFBUVCkgbnVtYmVyIiwKPiAgICAgICAgICAgICAgT0ZG U0VUKG9wdF9jaGFwdGVyX3N0YXJ0KSwgIEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0PTEgfSwK PiAgMSwgICAgICAgICAgOTksICAgICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ ID4gKyAgICB7InBnIiwgICAgICAgICAgICAgICJlbnRyeSBQRyBudW1iZXIgKDA9YXV0bykiLAo+ ICAgICAgICAgICAgICBPRkZTRVQob3B0X3BnKSwgICAgICAgICAgICAgQVZfT1BUX1RZUEVfSU5U LCAgICB7IC5pNjQ9MCB9LAo+ICAwLCAgICAgICAgICAyNTUsICAgICAgIEFWX09QVF9GTEFHX0RF Q09ESU5HX1BBUkFNIH0sCj4gPiArICAgIHsicGdjIiwgICAgICAgICAgICAgImVudHJ5IFBHQyBu dW1iZXIgKDA9YXV0bykiLAo+ICAgICAgICAgICAgIE9GRlNFVChvcHRfcGdjKSwgICAgICAgICAg ICBBVl9PUFRfVFlQRV9JTlQsICAgIHsgLmk2ND0wIH0sCj4gIDAsICAgICAgICAgIDk5OSwgICAg ICAgQVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKPiA+ICsgICAgeyJwcmVpbmRleCIsICAg ICAgICAiZW5hYmxlIGZvciBhY2N1cmF0ZSBjaGFwdGVyIG1hcmtlcnMsIHNsb3cKPiAoMi1wYXNz IHJlYWQpIiwgIE9GRlNFVChvcHRfcHJlaW5kZXgpLCAgICAgICBBVl9PUFRfVFlQRV9CT09MLCAg IHsgLmk2ND0wCj4gfSwgICAgIDAsICAgICAgICAgIDEsICAgICAgICAgQVZfT1BUX0ZMQUdfREVD T0RJTkdfUEFSQU0gfSwKPiA+ICsgICAgeyJyZWdpb24iLCAgICAgICAgICAicGxheWJhY2sgcmVn aW9uIG51bWJlciAoMD1mcmVlKSIsCj4gICAgICAgICAgICAgT0ZGU0VUKG9wdF9yZWdpb24pLCAg ICAgICAgIEFWX09QVF9UWVBFX0lOVCwgICAgeyAuaTY0PTAgfSwKPiAgMCwgICAgICAgICAgOCwg ICAgICAgICBBVl9PUFRfRkxBR19ERUNPRElOR19QQVJBTSB9LAo+ID4gKyAgICB7InRpdGxlIiwg ICAgICAgICAgICJ0aXRsZSBudW1iZXIgKDA9YXV0bykiLAo+ICAgICAgICAgICAgIE9GRlNFVChv cHRfdGl0bGUpLCAgICAgICAgICBBVl9PUFRfVFlQRV9JTlQsICAgIHsgLmk2ND0wIH0sCj4gIDAs ICAgICAgICAgIDk5LCAgICAgICAgQVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKPiA+ICsg ICAgeyJ0cmltIiwgICAgICAgICAgICAidHJpbSBwYWRkaW5nIGNlbGxzIGZyb20gc3RhcnQiLAo+ ICAgICAgICAgICAgIE9GRlNFVChvcHRfdHJpbSksICAgICAgICAgICBBVl9PUFRfVFlQRV9CT09M LCAgIHsgLmk2ND0xIH0sCj4gIDAsICAgICAgICAgIDEsICAgICAgICAgQVZfT1BUX0ZMQUdfREVD T0RJTkdfUEFSQU0gfSwKPiA+ICsgICAge05VTEx9Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMg Y29uc3QgQVZDbGFzcyBkdmR2aWRlb19jbGFzcyA9IHsKPiA+ICsgICAgLmNsYXNzX25hbWUgPSAi RFZELVZpZGVvIGRlbXV4ZXIiLAo+ID4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRl bV9uYW1lLAo+ID4gKyAgICAub3B0aW9uICAgICA9IGR2ZHZpZGVvX29wdGlvbnMsCj4gPiArICAg IC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5UCj4gPiArfTsKPiA+ICsKPiA+ICtj b25zdCBBVklucHV0Rm9ybWF0IGZmX2R2ZHZpZGVvX2RlbXV4ZXIgPSB7Cj4gPiArICAgIC5uYW1l ICAgICAgICAgICA9ICJkdmR2aWRlbyIsCj4gPiArICAgIC5sb25nX25hbWUgICAgICA9IE5VTExf SUZfQ09ORklHX1NNQUxMKCJEVkQtVmlkZW8iKSwKPiA+ICsgICAgLnByaXZfY2xhc3MgICAgID0g JmR2ZHZpZGVvX2NsYXNzLAo+ID4gKyAgICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoRFZEVmlk ZW9EZW11eENvbnRleHQpLAo+ID4gKyAgICAuZmxhZ3MgICAgICAgICAgPSBBVkZNVF9OT0ZJTEUg fCBBVkZNVF9TSE9XX0lEUyB8IEFWRk1UX1RTX0RJU0NPTlQKPiB8IEFWRk1UX05PX0JZVEVfU0VF SyB8IEFWRk1UX05PR0VOU0VBUkNIIHwgQVZGTVRfTk9CSU5TRUFSQ0gsCj4gPiArICAgIC5mbGFn c19pbnRlcm5hbCA9IEZGX0ZNVF9JTklUX0NMRUFOVVAsCj4gPiArICAgIC5yZWFkX2Nsb3NlICAg ICA9IGR2ZHZpZGVvX2Nsb3NlLAo+ID4gKyAgICAucmVhZF9oZWFkZXIgICAgPSBkdmR2aWRlb19y ZWFkX2hlYWRlciwKPiA+ICsgICAgLnJlYWRfcGFja2V0ICAgID0gZHZkdmlkZW9fcmVhZF9wYWNr ZXQKPiA+ICt9Owo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KPiBmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZmZtcGVnLWRldmVsQGZmbXBlZy5v cmcKPiBodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKPgo+ IFRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbAo+IGZmbXBlZy1kZXZl bC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCj4KX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1h aWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFp bG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFi b3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVj dCAidW5zdWJzY3JpYmUiLgo=