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 1134A40AE1 for ; Mon, 27 Dec 2021 00:50:12 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8041868B0B1; Mon, 27 Dec 2021 02:50:11 +0200 (EET) Received: from mail-io1-f47.google.com (mail-io1-f47.google.com [209.85.166.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1F7CF68AE47 for ; Mon, 27 Dec 2021 02:50:05 +0200 (EET) Received: by mail-io1-f47.google.com with SMTP id x6so17142175iol.13 for ; Sun, 26 Dec 2021 16:50:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sandflow-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :content-transfer-encoding; bh=XOY2+ASmUEzSLXW+QKVPu8N98Bh+saz610CnHY/op0U=; b=cz8EMG9+yzRF1s/A3UQ69FxNsfqy08e304jydq0K64QFtQKFMQb44ihvi8i2Mh1e0h b/Enlgrg2YRjARZUCn+31jU8YVkrHneybjZt0plOpBR+3uy49de7zoxpxVmXcPXnqy/c Gm4l4BWVLGrh8jQD2GP+nCYpTwRvwqXfLNaquJwbIOImZVPPnRhjeO95cqVuHgsA9jtp dyMcMnCJYaMuvyXZKP3TYh5RMKFqEBXqAyHIV5BMC1dCqSn8ovpwkVcqLLglBKzHdIxK 8YEyOKKfrsz1BrsID6yL+BM6sW616iw5t6hiL9ppM8CWZSuV5tUQ0PSiBIflQ7mFlCZk RzCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:content-transfer-encoding; bh=XOY2+ASmUEzSLXW+QKVPu8N98Bh+saz610CnHY/op0U=; b=6MiZPHn96UTgr9NgW1gB6VfWltcC6CL3VvL8jWZ/2z3YZ9UYGgKG8ftqwj2qebuv2J Fp9aMTU0SFtvYdKX7y10VptMuwedE3zPdJjeicdhnn5ajaZ3yeVGcRt4kZai/nZ1fASN 6fLf5CjP2pbzbS8iKjjbl8Mxtu6ctGxuNhlv/BjF8HDSEwI5BAqPSebfZkrn1sLf+hbP 5JxmMXKgNVlWfOiLQWJEsm9/8j09Lz9iNC1e9640KETT8IhRfvVSRQxGWhrXSHMcLl8E 5obxafSNowJj86AxF26hK8pCTdKvAaniZv0yxNau49v/FHtGxkMS3dK0LPW1X9DYYLPP KyqQ== X-Gm-Message-State: AOAM533r0U6vACJfRer+frPp3fHVkpZc6s0TE4vJJJGFDhwQlNl4eM2h UUcGyr2jOn7cdFcnGsyxohzkJe/ZAdcuGg== X-Google-Smtp-Source: ABdhPJweZhKEkGyX66Bdwb+bvdjs37cX6MGkysf6QRLLQOMKYFNA4fkuvRx7Lt49w4oQ0Jn2F1yQ/Q== X-Received: by 2002:a05:6602:1484:: with SMTP id a4mr6497071iow.35.1640566202945; Sun, 26 Dec 2021 16:50:02 -0800 (PST) Received: from mail-io1-f47.google.com (mail-io1-f47.google.com. [209.85.166.47]) by smtp.gmail.com with ESMTPSA id j3sm9530290ilu.64.2021.12.26.16.50.02 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 26 Dec 2021 16:50:02 -0800 (PST) Received: by mail-io1-f47.google.com with SMTP id h23so7180451iol.11 for ; Sun, 26 Dec 2021 16:50:02 -0800 (PST) X-Received: by 2002:a02:cf11:: with SMTP id q17mr6612545jar.304.1640566202043; Sun, 26 Dec 2021 16:50:02 -0800 (PST) MIME-Version: 1.0 References: <20211221184209.6570-1-pal@sandflow.com> <3075570.A1OQHQNYeR@morningstar> In-Reply-To: <3075570.A1OQHQNYeR@morningstar> From: Pierre-Anthony Lemieux Date: Sun, 26 Dec 2021 16:49:50 -0800 X-Gmail-Original-Message-ID: Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH v14 1/2] avformat/imf: Demuxer 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: T24gRnJpLCBEZWMgMjQsIDIwMjEgYXQgNDowOCBQTSBaYW5lIHZhbiBJcGVyZW4gPHphbmVAemFu ZXZhbmlwZXJlbi5jb20+IHdyb3RlOgo+Cj4gTG9va3MgbW9zdGx5IGFscmlnaHQsIGp1c3Qgc29t ZSBzdHlsZSBuaXRzLiBPbmNlIHRoZXkncmUgZml4ZWQsIGxndG0uCj4KPiBPbiBXZWRuZXNkYXks IDIyIERlY2VtYmVyIDIwMjEgNDo0MjowOCBBTSBBRVNUIHBhbEBzYW5kZmxvdy5jb20gd3JvdGU6 Cj4KPiA+ICsKPiA+ICtpbnQgZmZfaW1mX3htbF9yZWFkX3V1aWQoeG1sTm9kZVB0ciBlbGVtZW50 LCB1aW50OF90IHV1aWRbMTZdKQo+ID4gK3sKPiA+ICsgICAgeG1sQ2hhciAqZWxlbWVudF90ZXh0 ID0gTlVMTDsKPiA+ICsgICAgaW50IHNjYW5mX3JldDsKPiA+ICsgICAgaW50IHJldCA9IDA7Cj4g PiArCj4gPiArICAgIGVsZW1lbnRfdGV4dCA9IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGVsZW1lbnQt PmRvYywgZWxlbWVudC0+eG1sQ2hpbGRyZW5Ob2RlLCAxKTsKPiA+ICsgICAgc2NhbmZfcmV0ID0g c3NjYW5mKGVsZW1lbnRfdGV4dCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIEZGX0lNRl9V VUlEX0ZPUk1BVCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICZ1dWlkWzBdLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgJnV1aWRbMV0sCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAmdXVpZFsyXSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICZ1dWlkWzNdLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgJnV1aWRbNF0sCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAmdXVpZFs1XSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICZ1dWlkWzZdLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgJnV1aWRbN10sCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAmdXVpZFs4XSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICZ1dWlkWzldLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgJnV1aWRbMTBdLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgJnV1aWRbMTFdLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgJnV1aWRbMTJdLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgJnV1aWRbMTNdLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgJnV1aWRbMTRdLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgJnV1aWRbMTVdKTsK Pgo+IEknbSBub3QgdGhlIGJpZ2dlc3QgZmFuIG9mIHRoaXMsIGJ1dCBpZiB5b3UncmUgZG9pbmcg dGhlIGxpYnV1aWQgcmVmYWN0b3JpbmcgYWZ0ZXJ3YXJkcywgdGhlbiBJJ20gaW5jbGluZWQKPiB0 byBsZXQgaXQgYmUuCgpZZXMsIEkgcGxhbiB0byB0YWNrbGUgdGhlIGxpYnV1aWQgcmVmYWN0b3Jp bmcgYWZ0ZXJ3YXJkcy4KCj4KPiA+ICtzdGF0aWMgaW50IGZpbGxfYmFzZV9yZXNvdXJjZSh4bWxO b2RlUHRyIHJlc291cmNlX2VsZW0sIEZGSU1GQmFzZVJlc291cmNlICpyZXNvdXJjZSwgRkZJTUZD UEwgKmNwbCkKPiA+ICt7Cj4gPiArICAgIHhtbE5vZGVQdHIgZWxlbWVudCA9IE5VTEw7Cj4gPiAr ICAgIGludCByZXQgPSAwOwo+ID4gKwo+ID4gKyAgICAvKiByZWFkIEVkaXRSYXRlICovCj4gPiAr ICAgIGlmICghKGVsZW1lbnQgPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUo cmVzb3VyY2VfZWxlbSwgIkVkaXRSYXRlIikpKSB7Cj4gPiArICAgICAgICByZXNvdXJjZS0+ZWRp dF9yYXRlID0gY3BsLT5lZGl0X3JhdGU7Cj4gPiArICAgIH0gZWxzZSBpZiAocmV0ID0gZmZfaW1m X3htbF9yZWFkX3JhdGlvbmFsKGVsZW1lbnQsICZyZXNvdXJjZS0+ZWRpdF9yYXRlKSkgewo+Cj4g V2hlbiBkb2luZyBpbmxpbmUgYXNzaWdubWVudHMsIHVzZSBhbiBleHRyYSAoKSwgZS5nLgo+IGlm ICgocmV0ID0gZmZfaW1mX3htbF9yZWFkX3JhdGlvbmFsKGVsZW1lbnQsICZyZXNvdXJjZS0+ZWRp dF9yYXRlKSkpCgpBZGRyZXNzZWQgYnkgdjE1LgoKCj4KPiA+ICsgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIEVkaXRSYXRlIGVsZW1lbnQgZm91bmQgaW4gYSBSZXNv dXJjZVxuIik7Cj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICB9Cj4gPiArCj4gPiAr ICAgIC8qIHJlYWQgRW50cnlQb2ludCAqLwo+ID4gKyAgICBpZiAoZWxlbWVudCA9IGZmX2ltZl94 bWxfZ2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShyZXNvdXJjZV9lbGVtLCAiRW50cnlQb2ludCIp KSB7Cj4gPiArICAgICAgICBpZiAocmV0ID0gZmZfaW1mX3htbF9yZWFkX3VpbnQzMihlbGVtZW50 LCAmcmVzb3VyY2UtPmVudHJ5X3BvaW50KSkgewo+Cj4gKCkKPgo+ID4gKyAgICAgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIEVudHJ5UG9pbnQgZWxlbWVudCBmb3Vu ZCBpbiBhIFJlc291cmNlXG4iKTsKPiA+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAg ICAgICAgfQo+ID4gKyAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgcmVzb3VyY2UtPmVudHJ5X3Bv aW50ID0gMDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICAvKiByZWFkIEludHJpbnNpY0R1cmF0 aW9uICovCj4gPiArICAgIGlmICghKGVsZW1lbnQgPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVt ZW50X2J5X25hbWUocmVzb3VyY2VfZWxlbSwgIkludHJpbnNpY0R1cmF0aW9uIikpKSB7Cj4gPiAr ICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW50cmluc2ljRHVyYXRpb24gZWxl bWVudCBtaXNzaW5nIGZyb20gUmVzb3VyY2VcbiIpOwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gPiArICAgIH0KPiA+ICsgICAgaWYgKHJldCA9IGZmX2ltZl94bWxf cmVhZF91aW50MzIoZWxlbWVudCwgJnJlc291cmNlLT5kdXJhdGlvbikpIHsKPgo+ICgpCj4KPiA+ ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIEludHJpbnNpY0R1 cmF0aW9uIGVsZW1lbnQgZm91bmQgaW4gYSBSZXNvdXJjZVxuIik7Cj4gPiArICAgICAgICByZXR1 cm4gcmV0Owo+ID4gKyAgICB9Cj4gPiArICAgIHJlc291cmNlLT5kdXJhdGlvbiAtPSByZXNvdXJj ZS0+ZW50cnlfcG9pbnQ7Cj4gPiArCj4gPiArICAgIC8qIHJlYWQgU291cmNlRHVyYXRpb24gKi8K PiA+ICsgICAgaWYgKGVsZW1lbnQgPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25h bWUocmVzb3VyY2VfZWxlbSwgIlNvdXJjZUR1cmF0aW9uIikpIHsKPgo+ICgpCj4KPiA+ICsgICAg ICAgIGlmIChyZXQgPSBmZl9pbWZfeG1sX3JlYWRfdWludDMyKGVsZW1lbnQsICZyZXNvdXJjZS0+ ZHVyYXRpb24pKSB7Cj4KPiAoKQo+Cj4gPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19FUlJPUiwgIlNvdXJjZUR1cmF0aW9uIGVsZW1lbnQgbWlzc2luZyBmcm9tIFJlc291cmNlXG4i KTsKPiA+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9 Cj4gPiArCj4gPiArICAgIC8qIHJlYWQgUmVwZWF0Q291bnQgKi8KPiA+ICsgICAgaWYgKGVsZW1l bnQgPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUocmVzb3VyY2VfZWxlbSwg IlJlcGVhdENvdW50IikpCj4KPiAoKQo+Cj4gPiArICAgICAgICByZXQgPSBmZl9pbWZfeG1sX3Jl YWRfdWludDMyKGVsZW1lbnQsICZyZXNvdXJjZS0+cmVwZWF0X2NvdW50KTsKPiA+ICsKPiA+ICsg ICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBmaWxsX3RyYWNrZmls ZV9yZXNvdXJjZSh4bWxOb2RlUHRyIHRmX3Jlc291cmNlX2VsZW0sCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGRklNRlRyYWNrRmlsZVJlc291cmNlICp0Zl9yZXNvdXJj ZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGSU1GQ1BMICpjcGwp Cj4gPiArewo+ID4gKyAgICB4bWxOb2RlUHRyIGVsZW1lbnQgPSBOVUxMOwo+ID4gKyAgICBpbnQg cmV0ID0gMDsKPiA+ICsKPiA+ICsgICAgaWYgKHJldCA9IGZpbGxfYmFzZV9yZXNvdXJjZSh0Zl9y ZXNvdXJjZV9lbGVtLCAoRkZJTUZCYXNlUmVzb3VyY2UgKil0Zl9yZXNvdXJjZSwgY3BsKSkKPgo+ ICgpCj4KPiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArICAgIC8qIHJlYWQgVHJh Y2tGaWxlSWQgKi8KPiA+ICsgICAgaWYgKGVsZW1lbnQgPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9l bGVtZW50X2J5X25hbWUodGZfcmVzb3VyY2VfZWxlbSwgIlRyYWNrRmlsZUlkIikpIHsKPiA+ICsg ICAgICAgIGlmIChyZXQgPSBmZl9pbWZfeG1sX3JlYWRfdXVpZChlbGVtZW50LCB0Zl9yZXNvdXJj ZS0+dHJhY2tfZmlsZV91dWlkKSkgewo+Cj4gKCkKPgo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIFRyYWNrRmlsZUlkIGVsZW1lbnQgZm91bmQgaW4g UmVzb3VyY2VcbiIpOwo+ID4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgICAgICB9 Cj4gPiArICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiVHJhY2tGaWxlSWQgZWxlbWVudCBtaXNzaW5nIGZyb20gUmVzb3VyY2VcbiIpOwo+ID4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsg ICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBmaWxsX21hcmtlcl9y ZXNvdXJjZSh4bWxOb2RlUHRyIG1hcmtlcl9yZXNvdXJjZV9lbGVtLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRkZJTUZNYXJrZXJSZXNvdXJjZSAqbWFya2VyX3Jlc291cmNl LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZJTUZDUEwgKmNwbCkKPiA+ ICt7Cj4gPiArICAgIHhtbE5vZGVQdHIgZWxlbWVudCA9IE5VTEw7Cj4gPiArICAgIGludCByZXQg PSAwOwo+ID4gKwo+ID4gKyAgICBpZiAocmV0ID0gZmlsbF9iYXNlX3Jlc291cmNlKG1hcmtlcl9y ZXNvdXJjZV9lbGVtLCAoRkZJTUZCYXNlUmVzb3VyY2UgKiltYXJrZXJfcmVzb3VyY2UsIGNwbCkp Cj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4gKwo+ID4gKyAgICAvKiByZWFkIG1hcmtlcnMg Ki8KPiA+ICsgICAgZWxlbWVudCA9IHhtbEZpcnN0RWxlbWVudENoaWxkKG1hcmtlcl9yZXNvdXJj ZV9lbGVtKTsKPiA+ICsgICAgd2hpbGUgKGVsZW1lbnQpIHsKPiA+ICsgICAgICAgIGlmICh4bWxT dHJjbXAoZWxlbWVudC0+bmFtZSwgIk1hcmtlciIpID09IDApIHsKPiA+ICsgICAgICAgICAgICB2 b2lkICp0bXA7Cj4gPiArCj4gPiArICAgICAgICAgICAgaWYgKG1hcmtlcl9yZXNvdXJjZS0+bWFy a2VyX2NvdW50ID09IFVJTlQzMl9NQVgpCj4gPiArICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7Cj4gPiArICAgICAgICAgICAgdG1wID0gYXZfcmVhbGxvY19hcnJheShtYXJr ZXJfcmVzb3VyY2UtPm1hcmtlcnMsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYXJrZXJfcmVzb3VyY2UtPm1hcmtlcl9jb3VudCArIDEsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoRkZJTUZNYXJrZXIpKTsKPiA+ICsgICAgICAg ICAgICBpZiAoIXRtcCkKPiA+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKPiA+ICsgICAgICAgICAgICBtYXJrZXJfcmVzb3VyY2UtPm1hcmtlcnMgPSB0bXA7Cj4gPiAr Cj4gPiArICAgICAgICAgICAgaW1mX21hcmtlcl9pbml0KCZtYXJrZXJfcmVzb3VyY2UtPm1hcmtl cnNbbWFya2VyX3Jlc291cmNlLT5tYXJrZXJfY291bnRdKTsKPiA+ICsgICAgICAgICAgICByZXQg PSBmaWxsX21hcmtlcihlbGVtZW50LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZtYXJrZXJfcmVzb3VyY2UtPm1hcmtlcnNbbWFya2VyX3Jlc291cmNlLT5tYXJrZXJfY291bnRd KTsKPiA+ICsgICAgICAgICAgICBtYXJrZXJfcmVzb3VyY2UtPm1hcmtlcl9jb3VudCsrOwo+ID4g KyAgICAgICAgICAgIGlmIChyZXQpCj4gPiArICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4g PiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBlbGVtZW50ID0geG1sTmV4dEVsZW1lbnRT aWJsaW5nKGVsZW1lbnQpOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiByZXQ7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgcHVzaF9tYXJrZXJfc2VxdWVuY2UoeG1sTm9kZVB0 ciBtYXJrZXJfc2VxdWVuY2VfZWxlbSwgRkZJTUZDUEwgKmNwbCkKPiA+ICt7Cj4gPiArICAgIGlu dCByZXQgPSAwOwo+ID4gKyAgICB1aW50OF90IHV1aWRbMTZdOwo+ID4gKyAgICB4bWxOb2RlUHRy IHJlc291cmNlX2xpc3RfZWxlbSA9IE5VTEw7Cj4gPiArICAgIHhtbE5vZGVQdHIgcmVzb3VyY2Vf ZWxlbSA9IE5VTEw7Cj4gPiArICAgIHhtbE5vZGVQdHIgdHJhY2tfaWRfZWxlbSA9IE5VTEw7Cj4g PiArICAgIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VfZWxlbV9jb3VudDsKPiA+ICsgICAgdm9pZCAq dG1wOwo+ID4gKwo+ID4gKyAgICAvKiByZWFkIFRyYWNrSUQgZWxlbWVudCAqLwo+ID4gKyAgICBp ZiAoISh0cmFja19pZF9lbGVtID0gZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1l KG1hcmtlcl9zZXF1ZW5jZV9lbGVtLCAiVHJhY2tJZCIpKSkgewo+ID4gKyAgICAgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19FUlJPUiwgIlRyYWNrSWQgZWxlbWVudCBtaXNzaW5nIGZyb20gU2VxdWVu Y2VcbiIpOwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAg IH0KPiA+ICsgICAgaWYgKHJldCA9IGZmX2ltZl94bWxfcmVhZF91dWlkKHRyYWNrX2lkX2VsZW0s IHV1aWQpKSB7Cj4KPiAoKQo+IE9yIGlmIHRoZSByZXR1cm4gdmFsdWUgaXNuJ3QgYWN0dWFsbHkg dXNlZCwganVzdCByZW1vdmUgdGhlIGFzc2lnbm1lbnQuCj4KPiA+ICsgICAgICAgIGF2X2xvZyhO VUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIFRyYWNrSWQgZWxlbWVudCBmb3VuZCBpbiBTZXF1 ZW5jZVxuIik7Cj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiA+ICsg ICAgfQo+ID4gKyAgICBhdl9sb2coTlVMTCwKPiA+ICsgICAgICAgICAgIEFWX0xPR19ERUJVRywK PiA+ICsgICAgICAgICAgICJQcm9jZXNzaW5nIElNRiBDUEwgTWFya2VyIFNlcXVlbmNlIGZvciBW aXJ0dWFsIFRyYWNrICIgRkZfSU1GX1VVSURfRk9STUFUICJcbiIsCj4gPiArICAgICAgICAgICBV SURfQVJHKHV1aWQpKTsKPiA+ICsKPiA+ICsgICAgLyogY3JlYXRlIG1haW4gbWFya2VyIHZpcnR1 YWwgdHJhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QgKi8KPiA+ICsgICAgaWYgKCFjcGwtPm1haW5f bWFya2Vyc190cmFjaykgewo+ID4gKyAgICAgICAgY3BsLT5tYWluX21hcmtlcnNfdHJhY2sgPSBh dl9tYWxsb2Moc2l6ZW9mKEZGSU1GTWFya2VyVmlydHVhbFRyYWNrKSk7Cj4gPiArICAgICAgICBp ZiAoIWNwbC0+bWFpbl9tYXJrZXJzX3RyYWNrKQo+ID4gKyAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7Cj4gPiArICAgICAgICBpbWZfbWFya2VyX3ZpcnR1YWxfdHJhY2tfaW5pdChj cGwtPm1haW5fbWFya2Vyc190cmFjayk7Cj4gPiArICAgICAgICBtZW1jcHkoY3BsLT5tYWluX21h cmtlcnNfdHJhY2stPmJhc2UuaWRfdXVpZCwgdXVpZCwgc2l6ZW9mKHV1aWQpKTsKPiA+ICsKPiA+ ICsgICAgfSBlbHNlIGlmIChtZW1jbXAoY3BsLT5tYWluX21hcmtlcnNfdHJhY2stPmJhc2UuaWRf dXVpZCwgdXVpZCwgc2l6ZW9mKHV1aWQpKSAhPSAwKSB7Cj4gPiArICAgICAgICBhdl9sb2coTlVM TCwgQVZfTE9HX0VSUk9SLCAiTXVsdGlwbGUgbWFya2VyIHZpcnR1YWwgdHJhY2tzIHdlcmUgZm91 bmRcbiIpOwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAg IH0KPiA+ICsKPiA+ICsgICAgLyogcHJvY2VzcyByZXNvdXJjZXMgKi8KPiA+ICsgICAgcmVzb3Vy Y2VfbGlzdF9lbGVtID0gZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKG1hcmtl cl9zZXF1ZW5jZV9lbGVtLCAiUmVzb3VyY2VMaXN0Iik7Cj4gPiArICAgIGlmICghcmVzb3VyY2Vf bGlzdF9lbGVtKQo+ID4gKyAgICAgICAgcmV0dXJuIDA7Cj4gPiArCj4gPiArICAgIHJlc291cmNl X2VsZW1fY291bnQgPSB4bWxDaGlsZEVsZW1lbnRDb3VudChyZXNvdXJjZV9saXN0X2VsZW0pOwo+ ID4gKyAgICBpZiAocmVzb3VyY2VfZWxlbV9jb3VudCA+IFVJTlQzMl9NQVgKPiA+ICsgICAgICAg IHx8IGNwbC0+bWFpbl9tYXJrZXJzX3RyYWNrLT5yZXNvdXJjZV9jb3VudCA+IFVJTlQzMl9NQVgg LSByZXNvdXJjZV9lbGVtX2NvdW50KQo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKPiA+ICsgICAgdG1wID0gYXZfcmVhbGxvY19hcnJheShjcGwtPm1haW5fbWFya2Vyc190cmFj ay0+cmVzb3VyY2VzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwbC0+bWFpbl9t YXJrZXJzX3RyYWNrLT5yZXNvdXJjZV9jb3VudCArIHJlc291cmNlX2VsZW1fY291bnQsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEZGSU1GTWFya2VyUmVzb3VyY2UpKTsK PiA+ICsgICAgaWYgKCF0bXApIHsKPiA+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJS T1IsICJDYW5ub3QgYWxsb2NhdGUgTWFya2VyIFJlc291cmNlc1xuIik7Cj4gPiArICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4gKyAgICB9Cj4gPiArICAgIGNwbC0+bWFpbl9tYXJr ZXJzX3RyYWNrLT5yZXNvdXJjZXMgPSB0bXA7Cj4gPiArCj4gPiArICAgIHJlc291cmNlX2VsZW0g PSB4bWxGaXJzdEVsZW1lbnRDaGlsZChyZXNvdXJjZV9saXN0X2VsZW0pOwo+ID4gKyAgICB3aGls ZSAocmVzb3VyY2VfZWxlbSkgewo+ID4gKyAgICAgICAgaW1mX21hcmtlcl9yZXNvdXJjZV9pbml0 KCZjcGwtPm1haW5fbWFya2Vyc190cmFjay0+cmVzb3VyY2VzW2NwbC0+bWFpbl9tYXJrZXJzX3Ry YWNrLT5yZXNvdXJjZV9jb3VudF0pOwo+ID4gKyAgICAgICAgcmV0ID0gZmlsbF9tYXJrZXJfcmVz b3VyY2UocmVzb3VyY2VfZWxlbSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZjcGwtPm1haW5fbWFya2Vyc190cmFjay0+cmVzb3VyY2VzW2NwbC0+bWFpbl9tYXJrZXJz X3RyYWNrLT5yZXNvdXJjZV9jb3VudF0sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjcGwpOwo+ID4gKyAgICAgICAgY3BsLT5tYWluX21hcmtlcnNfdHJhY2stPnJlc291 cmNlX2NvdW50Kys7Cj4gPiArICAgICAgICBpZiAocmV0KQo+ID4gKyAgICAgICAgICAgIHJldHVy biByZXQ7Cj4gPiArCj4gPiArICAgICAgICByZXNvdXJjZV9lbGVtID0geG1sTmV4dEVsZW1lbnRT aWJsaW5nKHJlc291cmNlX2VsZW0pOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiBy ZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaGFzX3N0ZXJlb19yZXNvdXJjZXMoeG1s Tm9kZVB0ciBlbGVtZW50KQo+ID4gK3sKPiA+ICsgICAgaWYgKHhtbFN0cmNtcChlbGVtZW50LT5u YW1lLCAiTGVmdCIpID09IDAgfHwgeG1sU3RyY21wKGVsZW1lbnQtPm5hbWUsICJSaWdodCIpID09 IDApCj4gPiArICAgICAgICByZXR1cm4gMTsKPiA+ICsKPiA+ICsgICAgZWxlbWVudCA9IHhtbEZp cnN0RWxlbWVudENoaWxkKGVsZW1lbnQpOwo+ID4gKyAgICB3aGlsZSAoZWxlbWVudCkgewo+ID4g KyAgICAgICAgaWYgKGhhc19zdGVyZW9fcmVzb3VyY2VzKGVsZW1lbnQpKQo+ID4gKyAgICAgICAg ICAgIHJldHVybiAxOwo+ID4gKwo+ID4gKyAgICAgICAgZWxlbWVudCA9IHhtbE5leHRFbGVtZW50 U2libGluZyhlbGVtZW50KTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBwdXNoX21haW5fYXVkaW9fc2VxdWVuY2UoeG1sTm9k ZVB0ciBhdWRpb19zZXF1ZW5jZV9lbGVtLCBGRklNRkNQTCAqY3BsKQo+ID4gK3sKPiA+ICsgICAg aW50IHJldCA9IDA7Cj4gPiArICAgIHVpbnQ4X3QgdXVpZFsxNl07Cj4gPiArICAgIHhtbE5vZGVQ dHIgcmVzb3VyY2VfbGlzdF9lbGVtID0gTlVMTDsKPiA+ICsgICAgeG1sTm9kZVB0ciByZXNvdXJj ZV9lbGVtID0gTlVMTDsKPiA+ICsgICAgeG1sTm9kZVB0ciB0cmFja19pZF9lbGVtID0gTlVMTDsK PiA+ICsgICAgdW5zaWduZWQgbG9uZyByZXNvdXJjZV9lbGVtX2NvdW50Owo+ID4gKyAgICBGRklN RlRyYWNrRmlsZVZpcnR1YWxUcmFjayAqdnQgPSBOVUxMOwo+ID4gKyAgICB2b2lkICp0bXA7Cj4g PiArCj4gPiArICAgIC8qIHJlYWQgVHJhY2tJRCBlbGVtZW50ICovCj4gPiArICAgIGlmICghKHRy YWNrX2lkX2VsZW0gPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUoYXVkaW9f c2VxdWVuY2VfZWxlbSwgIlRyYWNrSWQiKSkpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfRVJST1IsICJUcmFja0lkIGVsZW1lbnQgbWlzc2luZyBmcm9tIGF1ZGlvIHNlcXVlbmNl XG4iKTsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICB9 Cj4gPiArICAgIGlmIChyZXQgPSBmZl9pbWZfeG1sX3JlYWRfdXVpZCh0cmFja19pZF9lbGVtLCB1 dWlkKSkgewo+Cj4gKCkKPgo+ID4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwg IkludmFsaWQgVHJhY2tJZCBlbGVtZW50IGZvdW5kIGluIGF1ZGlvIHNlcXVlbmNlXG4iKTsKPiA+ ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgIH0KPiA+ICsgICAgYXZfbG9nKE5VTEwsCj4g PiArICAgICAgICAgICBBVl9MT0dfREVCVUcsCj4gPiArICAgICAgICAgICAiUHJvY2Vzc2luZyBJ TUYgQ1BMIEF1ZGlvIFNlcXVlbmNlIGZvciBWaXJ0dWFsIFRyYWNrICIgRkZfSU1GX1VVSURfRk9S TUFUICJcbiIsCj4gPiArICAgICAgICAgICBVSURfQVJHKHV1aWQpKTsKPiA+ICsKPiA+ICsgICAg LyogZ2V0IHRoZSBtYWluIGF1ZGlvIHZpcnR1YWwgdHJhY2sgY29ycmVzcG9uZGluZyB0byB0aGUg c2VxdWVuY2UgKi8KPiA+ICsgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNwbC0+bWFpbl9h dWRpb190cmFja19jb3VudDsgaSsrKSB7Cj4gPiArICAgICAgICBpZiAobWVtY21wKGNwbC0+bWFp bl9hdWRpb190cmFja3NbaV0uYmFzZS5pZF91dWlkLCB1dWlkLCBzaXplb2YodXVpZCkpID09IDAp IHsKPiA+ICsgICAgICAgICAgICB2dCA9ICZjcGwtPm1haW5fYXVkaW9fdHJhY2tzW2ldOwo+ID4g KyAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiAr ICAgIC8qIGNyZWF0ZSBhIG1haW4gYXVkaW8gdmlydHVhbCB0cmFjayBpZiBub25lIGV4aXN0cyBm b3IgdGhlIHNlcXVlbmNlICovCj4gPiArICAgIGlmICghdnQpIHsKPiA+ICsgICAgICAgIGlmIChj cGwtPm1haW5fYXVkaW9fdHJhY2tfY291bnQgPT0gVUlOVDMyX01BWCkKPiA+ICsgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4gKyAgICAgICAgdG1wID0gYXZfcmVhbGxvY19h cnJheShjcGwtPm1haW5fYXVkaW9fdHJhY2tzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjcGwtPm1haW5fYXVkaW9fdHJhY2tfY291bnQgKyAxLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2YoRkZJTUZUcmFja0ZpbGVWaXJ0dWFsVHJhY2spKTsK PiA+ICsgICAgICAgIGlmICghdG1wKQo+ID4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7Cj4gPiArCj4gPiArICAgICAgICBjcGwtPm1haW5fYXVkaW9fdHJhY2tzID0gdG1wOwo+ ID4gKyAgICAgICAgdnQgPSAmY3BsLT5tYWluX2F1ZGlvX3RyYWNrc1tjcGwtPm1haW5fYXVkaW9f dHJhY2tfY291bnRdOwo+ID4gKyAgICAgICAgaW1mX3RyYWNrZmlsZV92aXJ0dWFsX3RyYWNrX2lu aXQodnQpOwo+ID4gKyAgICAgICAgY3BsLT5tYWluX2F1ZGlvX3RyYWNrX2NvdW50Kys7Cj4gPiAr ICAgICAgICBtZW1jcHkodnQtPmJhc2UuaWRfdXVpZCwgdXVpZCwgc2l6ZW9mKHV1aWQpKTsKPiA+ ICsgICAgfQo+ID4gKwo+ID4gKyAgICAvKiBwcm9jZXNzIHJlc291cmNlcyAqLwo+ID4gKyAgICBy ZXNvdXJjZV9saXN0X2VsZW0gPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUo YXVkaW9fc2VxdWVuY2VfZWxlbSwgIlJlc291cmNlTGlzdCIpOwo+ID4gKyAgICBpZiAoIXJlc291 cmNlX2xpc3RfZWxlbSkKPiA+ICsgICAgICAgIHJldHVybiAwOwo+ID4gKwo+ID4gKyAgICByZXNv dXJjZV9lbGVtX2NvdW50ID0geG1sQ2hpbGRFbGVtZW50Q291bnQocmVzb3VyY2VfbGlzdF9lbGVt KTsKPiA+ICsgICAgaWYgKHJlc291cmNlX2VsZW1fY291bnQgPiBVSU5UMzJfTUFYCj4gPiArICAg ICAgICB8fCB2dC0+cmVzb3VyY2VfY291bnQgPiBVSU5UMzJfTUFYIC0gcmVzb3VyY2VfZWxlbV9j b3VudCkKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgIHRtcCA9 IGF2X2Zhc3RfcmVhbGxvYyh2dC0+cmVzb3VyY2VzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgJnZ0LT5yZXNvdXJjZXNfYWxsb2Nfc3osCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAodnQtPnJlc291cmNlX2NvdW50ICsgcmVzb3VyY2VfZWxlbV9jb3VudCkKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZihGRklNRlRyYWNrRmlsZVJlc291cmNl KSk7Cj4gPiArICAgIGlmICghdG1wKSB7Cj4gPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0VSUk9SLCAiQ2Fubm90IGFsbG9jYXRlIE1haW4gQXVkaW8gUmVzb3VyY2VzXG4iKTsKPiA+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgIH0KPiA+ICsgICAgdnQtPnJl c291cmNlcyA9IHRtcDsKPiA+ICsKPiA+ICsgICAgcmVzb3VyY2VfZWxlbSA9IHhtbEZpcnN0RWxl bWVudENoaWxkKHJlc291cmNlX2xpc3RfZWxlbSk7Cj4gPiArICAgIHdoaWxlIChyZXNvdXJjZV9l bGVtKSB7Cj4gPiArICAgICAgICBpbWZfdHJhY2tmaWxlX3Jlc291cmNlX2luaXQoJnZ0LT5yZXNv dXJjZXNbdnQtPnJlc291cmNlX2NvdW50XSk7Cj4gPiArICAgICAgICByZXQgPSBmaWxsX3RyYWNr ZmlsZV9yZXNvdXJjZShyZXNvdXJjZV9lbGVtLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnZ0LT5yZXNvdXJjZXNbdnQtPnJlc291cmNlX2NvdW50XSwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwbCk7Cj4gPiArICAgICAgICB2 dC0+cmVzb3VyY2VfY291bnQrKzsKPiA+ICsgICAgICAgIGlmIChyZXQpIHsKPiA+ICsgICAgICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBSZXNvdXJjZVxuIik7Cj4g PiArICAgICAgICAgICAgY29udGludWU7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAg ICByZXNvdXJjZV9lbGVtID0geG1sTmV4dEVsZW1lbnRTaWJsaW5nKHJlc291cmNlX2VsZW0pOwo+ ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQgcHVzaF9tYWluX2ltYWdlXzJkX3NlcXVlbmNlKHhtbE5vZGVQdHIgaW1hZ2Vfc2Vx dWVuY2VfZWxlbSwgRkZJTUZDUEwgKmNwbCkKPiA+ICt7Cj4gPiArICAgIGludCByZXQgPSAwOwo+ ID4gKyAgICB1aW50OF90IHV1aWRbMTZdOwo+ID4gKyAgICB4bWxOb2RlUHRyIHJlc291cmNlX2xp c3RfZWxlbSA9IE5VTEw7Cj4gPiArICAgIHhtbE5vZGVQdHIgcmVzb3VyY2VfZWxlbSA9IE5VTEw7 Cj4gPiArICAgIHhtbE5vZGVQdHIgdHJhY2tfaWRfZWxlbSA9IE5VTEw7Cj4gPiArICAgIHZvaWQg KnRtcDsKPiA+ICsgICAgdW5zaWduZWQgbG9uZyByZXNvdXJjZV9lbGVtX2NvdW50Owo+ID4gKwo+ ID4gKyAgICAvKiBza2lwIHN0ZXJlb3Njb3BpYyByZXNvdXJjZXMgKi8KPiA+ICsgICAgaWYgKGhh c19zdGVyZW9fcmVzb3VyY2VzKGltYWdlX3NlcXVlbmNlX2VsZW0pKSB7Cj4gPiArICAgICAgICBh dl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiU3RlcmVvc2NvcGljIDNEIGltYWdlIHZpcnR1YWwg dHJhY2tzIG5vdCBzdXBwb3J0ZWRcbiIpOwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFU Q0hXRUxDT01FOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIC8qIHJlYWQgVHJhY2tJZCBlbGVt ZW50Ki8KPgo+IE5pdDogTWlzc2luZyBhIHNwYWNlLgo+Cj4gPiArICAgIGlmICghKHRyYWNrX2lk X2VsZW0gPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUoaW1hZ2Vfc2VxdWVu Y2VfZWxlbSwgIlRyYWNrSWQiKSkpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df RVJST1IsICJUcmFja0lkIGVsZW1lbnQgbWlzc2luZyBmcm9tIGF1ZGlvIHNlcXVlbmNlXG4iKTsK PiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICB9Cj4gPiAr ICAgIGlmIChyZXQgPSBmZl9pbWZfeG1sX3JlYWRfdXVpZCh0cmFja19pZF9lbGVtLCB1dWlkKSkg ewo+ID4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgVHJhY2tJ ZCBlbGVtZW50IGZvdW5kIGluIGF1ZGlvIHNlcXVlbmNlXG4iKTsKPiA+ICsgICAgICAgIHJldHVy biByZXQ7Cj4gPiArICAgIH0KPiA+ICsKPgo+ICgpCj4KPiA+ICsgICAgLyogY3JlYXRlIG1haW4g aW1hZ2UgdmlydHVhbCB0cmFjayBpZiBvbmUgZG9lcyBub3QgZXhpc3QgKi8KPiA+ICsgICAgaWYg KCFjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2spIHsKPiA+ICsgICAgICAgIGNwbC0+bWFpbl9pbWFn ZV8yZF90cmFjayA9IGF2X21hbGxvYyhzaXplb2YoRkZJTUZUcmFja0ZpbGVWaXJ0dWFsVHJhY2sp KTsKPiA+ICsgICAgICAgIGlmICghY3BsLT5tYWluX2ltYWdlXzJkX3RyYWNrKQo+ID4gKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgICAgICBpbWZfdHJhY2tmaWxl X3ZpcnR1YWxfdHJhY2tfaW5pdChjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2spOwo+ID4gKyAgICAg ICAgbWVtY3B5KGNwbC0+bWFpbl9pbWFnZV8yZF90cmFjay0+YmFzZS5pZF91dWlkLCB1dWlkLCBz aXplb2YodXVpZCkpOwo+ID4gKwo+ID4gKyAgICB9IGVsc2UgaWYgKG1lbWNtcChjcGwtPm1haW5f aW1hZ2VfMmRfdHJhY2stPmJhc2UuaWRfdXVpZCwgdXVpZCwgc2l6ZW9mKHV1aWQpKSAhPSAwKSB7 Cj4gPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiTXVsdGlwbGUgTWFpbklt YWdlIHZpcnR1YWwgdHJhY2tzIGZvdW5kXG4iKTsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwo+ID4gKyAgICB9Cj4gPiArICAgIGF2X2xvZyhOVUxMLAo+ID4gKyAgICAg ICAgICAgQVZfTE9HX0RFQlVHLAo+ID4gKyAgICAgICAgICAgIlByb2Nlc3NpbmcgSU1GIENQTCBN YWluIEltYWdlIFNlcXVlbmNlIGZvciBWaXJ0dWFsIFRyYWNrICIgRkZfSU1GX1VVSURfRk9STUFU ICJcbiIsCj4gPiArICAgICAgICAgICBVSURfQVJHKHV1aWQpKTsKPiA+ICsKPiA+ICsgICAgLyog cHJvY2VzcyByZXNvdXJjZXMgKi8KPiA+ICsgICAgcmVzb3VyY2VfbGlzdF9lbGVtID0gZmZfaW1m X3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKGltYWdlX3NlcXVlbmNlX2VsZW0sICJSZXNv dXJjZUxpc3QiKTsKPiA+ICsgICAgaWYgKCFyZXNvdXJjZV9saXN0X2VsZW0pCj4gPiArICAgICAg ICByZXR1cm4gMDsKPiA+ICsKPiA+ICsgICAgcmVzb3VyY2VfZWxlbV9jb3VudCA9IHhtbENoaWxk RWxlbWVudENvdW50KHJlc291cmNlX2xpc3RfZWxlbSk7Cj4gPiArICAgIGlmIChyZXNvdXJjZV9l bGVtX2NvdW50ID4gVUlOVDMyX01BWAo+ID4gKyAgICAgICAgfHwgY3BsLT5tYWluX2ltYWdlXzJk X3RyYWNrLT5yZXNvdXJjZV9jb3VudCA+IFVJTlQzMl9NQVggLSByZXNvdXJjZV9lbGVtX2NvdW50 Cj4gPiArICAgICAgICB8fCAoY3BsLT5tYWluX2ltYWdlXzJkX3RyYWNrLT5yZXNvdXJjZV9jb3Vu dCArIHJlc291cmNlX2VsZW1fY291bnQpCj4gPiArICAgICAgICAgICAgPiBJTlRfTUFYIC8gc2l6 ZW9mKEZGSU1GVHJhY2tGaWxlUmVzb3VyY2UpKQo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKPiA+ICsgICAgdG1wID0gYXZfZmFzdF9yZWFsbG9jKGNwbC0+bWFpbl9pbWFnZV8y ZF90cmFjay0+cmVzb3VyY2VzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwbC0+ bWFpbl9pbWFnZV8yZF90cmFjay0+cmVzb3VyY2VzX2FsbG9jX3N6LAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNwbC0+bWFpbl9pbWFnZV8yZF90cmFjay0+cmVzb3VyY2VfY291bnQg KyByZXNvdXJjZV9lbGVtX2NvdW50KQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICogc2l6ZW9mKEZGSU1GVHJhY2tGaWxlUmVzb3VyY2UpKTsKPiA+ICsgICAgaWYgKCF0bXApIHsK PiA+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJDYW5ub3QgYWxsb2NhdGUg TWFpbiBJbWFnZSBSZXNvdXJjZXNcbiIpOwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5P TUVNKTsKPiA+ICsgICAgfQo+ID4gKyAgICBjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2stPnJlc291 cmNlcyA9IHRtcDsKPiA+ICsKPiA+ICsgICAgcmVzb3VyY2VfZWxlbSA9IHhtbEZpcnN0RWxlbWVu dENoaWxkKHJlc291cmNlX2xpc3RfZWxlbSk7Cj4gPiArICAgIHdoaWxlIChyZXNvdXJjZV9lbGVt KSB7Cj4gPiArICAgICAgICBpbWZfdHJhY2tmaWxlX3Jlc291cmNlX2luaXQoCj4gPiArICAgICAg ICAgICAgJmNwbC0+bWFpbl9pbWFnZV8yZF90cmFjay0+cmVzb3VyY2VzW2NwbC0+bWFpbl9pbWFn ZV8yZF90cmFjay0+cmVzb3VyY2VfY291bnRdKTsKPiA+ICsgICAgICAgIHJldCA9IGZpbGxfdHJh Y2tmaWxlX3Jlc291cmNlKHJlc291cmNlX2VsZW0sCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmY3BsLT5tYWluX2ltYWdlXzJkX3RyYWNrLT5yZXNvdXJjZXNbY3Bs LT5tYWluX2ltYWdlXzJkX3RyYWNrLT5yZXNvdXJjZV9jb3VudF0sCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjcGwpOwo+ID4gKyAgICAgICAgY3BsLT5tYWluX2lt YWdlXzJkX3RyYWNrLT5yZXNvdXJjZV9jb3VudCsrOwo+ID4gKyAgICAgICAgaWYgKHJldCkgewo+ ID4gKyAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIFJlc291 cmNlXG4iKTsKPiA+ICsgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsgICAgICAgIH0KPiA+ICsK PiA+ICsgICAgICAgIHJlc291cmNlX2VsZW0gPSB4bWxOZXh0RWxlbWVudFNpYmxpbmcocmVzb3Vy Y2VfZWxlbSk7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgZmlsbF92aXJ0dWFsX3RyYWNrcyh4bWxOb2RlUHRyIGNwbF9lbGVt ZW50LCBGRklNRkNQTCAqY3BsKQo+ID4gK3sKPiA+ICsgICAgaW50IHJldCA9IDA7Cj4gPiArICAg IHhtbE5vZGVQdHIgc2VnbWVudF9saXN0X2VsZW0gPSBOVUxMOwo+ID4gKyAgICB4bWxOb2RlUHRy IHNlZ21lbnRfZWxlbSA9IE5VTEw7Cj4gPiArICAgIHhtbE5vZGVQdHIgc2VxdWVuY2VfbGlzdF9l bGVtID0gTlVMTDsKPiA+ICsgICAgeG1sTm9kZVB0ciBzZXF1ZW5jZV9lbGVtID0gTlVMTDsKPiA+ ICsKPiA+ICsgICAgaWYgKCEoc2VnbWVudF9saXN0X2VsZW0gPSBmZl9pbWZfeG1sX2dldF9jaGls ZF9lbGVtZW50X2J5X25hbWUoY3BsX2VsZW1lbnQsICJTZWdtZW50TGlzdCIpKSkgewo+ID4gKyAg ICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlNlZ21lbnRMaXN0IGVsZW1lbnQgbWlz c2luZ1xuIik7Cj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiA+ICsg ICAgfQo+ID4gKwo+ID4gKyAgICAvKiBwcm9jZXNzIHNlcXVlbmNlcyAqLwo+ID4gKyAgICBzZWdt ZW50X2VsZW0gPSB4bWxGaXJzdEVsZW1lbnRDaGlsZChzZWdtZW50X2xpc3RfZWxlbSk7Cj4gPiAr ICAgIHdoaWxlIChzZWdtZW50X2VsZW0pIHsKPiA+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfREVCVUcsICJQcm9jZXNzaW5nIElNRiBDUEwgU2VnbWVudFxuIik7Cj4gPiArCj4gPiArICAg ICAgICBzZXF1ZW5jZV9saXN0X2VsZW0gPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5 X25hbWUoc2VnbWVudF9lbGVtLCAiU2VxdWVuY2VMaXN0Iik7Cj4gPiArICAgICAgICBpZiAoIXNl Z21lbnRfbGlzdF9lbGVtKQo+ID4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKwo+ID4gKyAg ICAgICAgc2VxdWVuY2VfZWxlbSA9IHhtbEZpcnN0RWxlbWVudENoaWxkKHNlcXVlbmNlX2xpc3Rf ZWxlbSk7Cj4gPiArICAgICAgICB3aGlsZSAoc2VxdWVuY2VfZWxlbSkgewo+ID4gKyAgICAgICAg ICAgIGlmICh4bWxTdHJjbXAoc2VxdWVuY2VfZWxlbS0+bmFtZSwgIk1hcmtlclNlcXVlbmNlIikg PT0gMCkKPiA+ICsgICAgICAgICAgICAgICAgcmV0ID0gcHVzaF9tYXJrZXJfc2VxdWVuY2Uoc2Vx dWVuY2VfZWxlbSwgY3BsKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICBlbHNlIGlmICh4bWxTdHJj bXAoc2VxdWVuY2VfZWxlbS0+bmFtZSwgIk1haW5JbWFnZVNlcXVlbmNlIikgPT0gMCkKPiA+ICsg ICAgICAgICAgICAgICAgcmV0ID0gcHVzaF9tYWluX2ltYWdlXzJkX3NlcXVlbmNlKHNlcXVlbmNl X2VsZW0sIGNwbCk7Cj4gPiArCj4gPiArICAgICAgICAgICAgZWxzZSBpZiAoeG1sU3RyY21wKHNl cXVlbmNlX2VsZW0tPm5hbWUsICJNYWluQXVkaW9TZXF1ZW5jZSIpID09IDApCj4gPiArICAgICAg ICAgICAgICAgIHJldCA9IHB1c2hfbWFpbl9hdWRpb19zZXF1ZW5jZShzZXF1ZW5jZV9lbGVtLCBj cGwpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgIGVsc2UKPiA+ICsgICAgICAgICAgICAgICAgYXZf bG9nKE5VTEwsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBBVl9MT0dfSU5GTywKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICJUaGUgZm9sbG93aW5nIFNlcXVlbmNlIGlzIG5vdCBzdXBw b3J0ZWQgYW5kIGlzIGlnbm9yZWQ6ICVzXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg c2VxdWVuY2VfZWxlbS0+bmFtZSk7Cj4gPiArCj4gPiArICAgICAgICAgICAgLyogYWJvcnQgcGFy c2luZyBvbmx5IGlmIG1lbW9yeSBlcnJvciBvY2N1cnJlZCAqLwo+ID4gKyAgICAgICAgICAgIGlm IChyZXQgPT0gQVZFUlJPUihFTk9NRU0pKQo+ID4gKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0 Owo+ID4gKwo+ID4gKyAgICAgICAgICAgIHNlcXVlbmNlX2VsZW0gPSB4bWxOZXh0RWxlbWVudFNp Ymxpbmcoc2VxdWVuY2VfZWxlbSk7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBz ZWdtZW50X2VsZW0gPSB4bWxOZXh0RWxlbWVudFNpYmxpbmcoc2VnbWVudF9lbGVtKTsKPiA+ICsg ICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtpbnQgZmZf aW1mX3BhcnNlX2NwbF9mcm9tX3htbF9kb20oeG1sRG9jUHRyIGRvYywgRkZJTUZDUEwgKipjcGwp Cj4gPiArewo+ID4gKyAgICBpbnQgcmV0ID0gMDsKPiA+ICsgICAgeG1sTm9kZVB0ciBjcGxfZWxl bWVudCA9IE5VTEw7Cj4gPiArCj4gPiArICAgICpjcGwgPSBmZl9pbWZfY3BsX2FsbG9jKCk7Cj4g PiArICAgIGlmICghKmNwbCkgewo+ID4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ ID4gKyAgICAgICAgZ290byBjbGVhbnVwOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGNwbF9l bGVtZW50ID0geG1sRG9jR2V0Um9vdEVsZW1lbnQoZG9jKTsKPiA+ICsgICAgaWYgKHhtbFN0cmNt cChjcGxfZWxlbWVudC0+bmFtZSwgIkNvbXBvc2l0aW9uUGxheWxpc3QiKSkgewo+ID4gKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIlRoZSByb290IGVsZW1lbnQgb2YgdGhlIENQ TCBpcyBub3QgQ29tcG9zaXRpb25QbGF5bGlzdFxuIik7Cj4gPiArICAgICAgICByZXQgPSBBVkVS Uk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICAgICAgZ290byBjbGVhbnVwOwo+ID4gKyAgICB9Cj4g PiArCj4gPiArICAgIGlmIChyZXQgPSBmaWxsX2NvbnRlbnRfdGl0bGUoY3BsX2VsZW1lbnQsICpj cGwpKQo+ID4gKyAgICAgICAgZ290byBjbGVhbnVwOwo+ID4gKyAgICBpZiAocmV0ID0gZmlsbF9p ZChjcGxfZWxlbWVudCwgKmNwbCkpCj4gPiArICAgICAgICBnb3RvIGNsZWFudXA7Cj4gPiArICAg IGlmIChyZXQgPSBmaWxsX2VkaXRfcmF0ZShjcGxfZWxlbWVudCwgKmNwbCkpCj4gPiArICAgICAg ICBnb3RvIGNsZWFudXA7Cj4gPiArICAgIGlmIChyZXQgPSBmaWxsX3ZpcnR1YWxfdHJhY2tzKGNw bF9lbGVtZW50LCAqY3BsKSkKPiA+ICsgICAgICAgIGdvdG8gY2xlYW51cDsKPiA+ICsKPiA+ICtj bGVhbnVwOgo+ID4gKyAgICBpZiAoKmNwbCAmJiByZXQpIHsKPiA+ICsgICAgICAgIGZmX2ltZl9j cGxfZnJlZSgqY3BsKTsKPiA+ICsgICAgICAgICpjcGwgPSBOVUxMOwo+ID4gKyAgICB9Cj4gPiAr ICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGltZl9tYXJrZXJf ZnJlZShGRklNRk1hcmtlciAqbWFya2VyKQo+ID4gK3sKPiA+ICsgICAgaWYgKCFtYXJrZXIpCj4g PiArICAgICAgICByZXR1cm47Cj4gPiArICAgIHhtbEZyZWUobWFya2VyLT5sYWJlbF91dGY4KTsK PiA+ICsgICAgeG1sRnJlZShtYXJrZXItPnNjb3BlX3V0ZjgpOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgdm9pZCBpbWZfbWFya2VyX3Jlc291cmNlX2ZyZWUoRkZJTUZNYXJrZXJSZXNvdXJjZSAq cnNyYykKPiA+ICt7Cj4gPiArICAgIGlmICghcnNyYykKPiA+ICsgICAgICAgIHJldHVybjsKPiA+ ICsgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHJzcmMtPm1hcmtlcl9jb3VudDsgaSsrKQo+ ID4gKyAgICAgICAgaW1mX21hcmtlcl9mcmVlKCZyc3JjLT5tYXJrZXJzW2ldKTsKPiA+ICsgICAg YXZfZnJlZXAoJnJzcmMtPm1hcmtlcnMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBp bWZfbWFya2VyX3ZpcnR1YWxfdHJhY2tfZnJlZShGRklNRk1hcmtlclZpcnR1YWxUcmFjayAqdnQp Cj4gPiArewo+ID4gKyAgICBpZiAoIXZ0KQo+ID4gKyAgICAgICAgcmV0dXJuOwo+ID4gKyAgICBm b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgdnQtPnJlc291cmNlX2NvdW50OyBpKyspCj4gPiArICAg ICAgICBpbWZfbWFya2VyX3Jlc291cmNlX2ZyZWUoJnZ0LT5yZXNvdXJjZXNbaV0pOwo+ID4gKyAg ICBhdl9mcmVlcCgmdnQtPnJlc291cmNlcyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IGltZl90cmFja2ZpbGVfdmlydHVhbF90cmFja19mcmVlKEZGSU1GVHJhY2tGaWxlVmlydHVhbFRy YWNrICp2dCkKPiA+ICt7Cj4gPiArICAgIGlmICghdnQpCj4gPiArICAgICAgICByZXR1cm47Cj4g PiArICAgIGF2X2ZyZWVwKCZ2dC0+cmVzb3VyY2VzKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IHZvaWQgaW1mX2NwbF9pbml0KEZGSU1GQ1BMICpjcGwpCj4gPiArewo+ID4gKyAgICBtZW1zZXQo Y3BsLT5pZF91dWlkLCAwLCBzaXplb2YoY3BsLT5pZF91dWlkKSk7Cj4gPiArICAgIGNwbC0+Y29u dGVudF90aXRsZV91dGY4ID0gTlVMTDsKPiA+ICsgICAgY3BsLT5lZGl0X3JhdGUgPSBhdl9tYWtl X3EoMCwgMSk7Cj4gPiArICAgIGNwbC0+bWFpbl9tYXJrZXJzX3RyYWNrID0gTlVMTDsKPiA+ICsg ICAgY3BsLT5tYWluX2ltYWdlXzJkX3RyYWNrID0gTlVMTDsKPiA+ICsgICAgY3BsLT5tYWluX2F1 ZGlvX3RyYWNrX2NvdW50ID0gMDsKPiA+ICsgICAgY3BsLT5tYWluX2F1ZGlvX3RyYWNrcyA9IE5V TEw7Cj4gPiArfQo+ID4gKwo+ID4gK0ZGSU1GQ1BMICpmZl9pbWZfY3BsX2FsbG9jKHZvaWQpCj4g PiArewo+ID4gKyAgICBGRklNRkNQTCAqY3BsOwo+ID4gKwo+ID4gKyAgICBjcGwgPSBhdl9tYWxs b2Moc2l6ZW9mKEZGSU1GQ1BMKSk7Cj4gPiArICAgIGlmICghY3BsKQo+ID4gKyAgICAgICAgcmV0 dXJuIE5VTEw7Cj4gPiArICAgIGltZl9jcGxfaW5pdChjcGwpOwo+ID4gKyAgICByZXR1cm4gY3Bs Owo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIGZmX2ltZl9jcGxfZnJlZShGRklNRkNQTCAqY3BsKQo+ ID4gK3sKPiA+ICsgICAgaWYgKCFjcGwpCj4gPiArICAgICAgICByZXR1cm47Cj4gPiArCj4gPiAr ICAgIHhtbEZyZWUoY3BsLT5jb250ZW50X3RpdGxlX3V0ZjgpOwo+ID4gKwo+ID4gKyAgICBpbWZf bWFya2VyX3ZpcnR1YWxfdHJhY2tfZnJlZShjcGwtPm1haW5fbWFya2Vyc190cmFjayk7Cj4gPiAr Cj4gPiArICAgIGlmIChjcGwtPm1haW5fbWFya2Vyc190cmFjaykKPiA+ICsgICAgICAgIGF2X2Zy ZWVwKCZjcGwtPm1haW5fbWFya2Vyc190cmFjayk7Cj4gPiArCj4gPiArICAgIGltZl90cmFja2Zp bGVfdmlydHVhbF90cmFja19mcmVlKGNwbC0+bWFpbl9pbWFnZV8yZF90cmFjayk7Cj4gPiArCj4g PiArICAgIGlmIChjcGwtPm1haW5faW1hZ2VfMmRfdHJhY2spCj4gPiArICAgICAgICBhdl9mcmVl cCgmY3BsLT5tYWluX2ltYWdlXzJkX3RyYWNrKTsKPiA+ICsKPiA+ICsgICAgZm9yICh1aW50MzJf dCBpID0gMDsgaSA8IGNwbC0+bWFpbl9hdWRpb190cmFja19jb3VudDsgaSsrKQo+ID4gKyAgICAg ICAgaW1mX3RyYWNrZmlsZV92aXJ0dWFsX3RyYWNrX2ZyZWUoJmNwbC0+bWFpbl9hdWRpb190cmFj a3NbaV0pOwo+ID4gKwo+ID4gKyAgICBpZiAoY3BsLT5tYWluX2F1ZGlvX3RyYWNrcykKPiA+ICsg ICAgICAgIGF2X2ZyZWVwKCZjcGwtPm1haW5fYXVkaW9fdHJhY2tzKTsKPiA+ICsKPiA+ICsgICAg YXZfZnJlZXAoJmNwbCk7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBmZl9pbWZfcGFyc2VfY3BsKEFW SU9Db250ZXh0ICppbiwgRkZJTUZDUEwgKipjcGwpCj4gPiArewo+ID4gKyAgICBBVkJQcmludCBi dWY7Cj4gPiArICAgIHhtbERvYyAqZG9jID0gTlVMTDsKPiA+ICsgICAgaW50IHJldCA9IDA7Cj4g PiArICAgIGludDY0X3QgZmlsZXNpemUgPSAwOwo+ID4gKwo+ID4gKyAgICBmaWxlc2l6ZSA9IGF2 aW9fc2l6ZShpbik7Cj4gPiArICAgIGZpbGVzaXplID0gZmlsZXNpemUgPiAwID8gZmlsZXNpemUg OiA4MTkyOwo+ID4gKyAgICBhdl9icHJpbnRfaW5pdCgmYnVmLCBmaWxlc2l6ZSArIDEsIEFWX0JQ UklOVF9TSVpFX1VOTElNSVRFRCk7Cj4gPiArICAgIHJldCA9IGF2aW9fcmVhZF90b19icHJpbnQo aW4sICZidWYsIFVJTlRfTUFYIC0gMSk7Cj4gPiArICAgIGlmIChyZXQgPCAwIHx8ICFhdmlvX2Zl b2YoaW4pIHx8IGJ1Zi5sZW4gPT0gMCkgewo+ID4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19FUlJPUiwgIkNhbm5vdCByZWFkIElNRiBDUExcbiIpOwo+ID4gKyAgICAgICAgaWYgKHJldCA9 PSAwKQo+ID4gKyAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAg IH0gZWxzZSB7Cj4gPiArICAgICAgICBMSUJYTUxfVEVTVF9WRVJTSU9OCj4gPiArCj4gPiArICAg ICAgICBmaWxlc2l6ZSA9IGJ1Zi5sZW47Cj4gPiArICAgICAgICBkb2MgPSB4bWxSZWFkTWVtb3J5 KGJ1Zi5zdHIsIGZpbGVzaXplLCBOVUxMLCBOVUxMLCAwKTsKPiA+ICsgICAgICAgIGlmICghZG9j KSB7Cj4gPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsCj4gPiArICAgICAgICAgICAgICAgICAg IEFWX0xPR19FUlJPUiwKPiA+ICsgICAgICAgICAgICAgICAgICAgIlhNTCBwYXJzaW5nIGZhaWxl ZCB3aGVuIHJlYWRpbmcgdGhlIElNRiBDUExcbiIpOwo+ID4gKyAgICAgICAgICAgIHJldCA9IEFW RVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBpZiAo cmV0ID0gZmZfaW1mX3BhcnNlX2NwbF9mcm9tX3htbF9kb20oZG9jLCBjcGwpKSB7Cj4KPiAoKQo+ Cj4gPiArICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBwYXJz ZSBJTUYgQ1BMXG4iKTsKPiA+ICsgICAgICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICAgICAgYXZf bG9nKE5VTEwsCj4gPiArICAgICAgICAgICAgICAgICAgIEFWX0xPR19JTkZPLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAiSU1GIENQTCBDb250ZW50VGl0bGU6ICVzXG4iLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAoKmNwbCktPmNvbnRlbnRfdGl0bGVfdXRmOCk7Cj4gPiArICAgICAgICAgICAg YXZfbG9nKE5VTEwsCj4gPiArICAgICAgICAgICAgICAgICAgIEFWX0xPR19JTkZPLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAiSU1GIENQTCBJZDogIiBGRl9JTUZfVVVJRF9GT1JNQVQgIlxuIiwK PiA+ICsgICAgICAgICAgICAgICAgICAgVUlEX0FSRygoKmNwbCktPmlkX3V1aWQpKTsKPiA+ICsg ICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIHhtbEZyZWVEb2MoZG9jKTsKPiA+ICsgICAgfQo+ ID4gKwo+ID4gKyAgICBhdl9icHJpbnRfZmluYWxpemUoJmJ1ZiwgTlVMTCk7Cj4gPiArCj4gPiAr ICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2ltZmRl Yy5jIGIvbGliYXZmb3JtYXQvaW1mZGVjLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBp bmRleCAwMDAwMDAwMDAwLi42MTRiZjZhYjFmCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9s aWJhdmZvcm1hdC9pbWZkZWMuYwo+ID4gQEAgLTAsMCArMSw4OTkgQEAKPiA+ICsvKgo+ID4gKyAq IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiA+ICsgKgo+ID4gKyAqIEZGbXBlZyBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiA+ICsgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4g PiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCj4gPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gPiArICoKPiA+ICsgKiBGRm1wZWcgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+ICsgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zgo+ID4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCj4gPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KPiA+ICsgKgo+ID4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiA+ICsgKiBMaWNlbnNl IGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4g PiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ID4gKyAqLwo+ID4gKwo+ID4gKy8qCj4gPiArICoK PiA+ICsgKiBDb3B5cmlnaHQgKGMpIFNhbmRmbG93IENvbnN1bHRpbmcgTExDCj4gPiArICoKPiA+ ICsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKPiA+ICsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKPiA+ICsgKgo+ID4gKyAq ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlLCB0aGlzCj4gPiArICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KPiA+ICsgKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKPiA+ICsg KiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlIGRvY3VtZW50YXRpb24KPiA+ICsgKiAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgo+ID4gKyAqCj4gPiArICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAi QVMgSVMiCj4gPiArICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+ID4gKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF Cj4gPiArICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQo+ID4gKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPiA+ICsgKiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRgo+ID4gKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwo+ID4gKyAqIElOVEVSUlVQVElPTikgSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCj4g PiArICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKPiA+ICsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+ID4gKyAqIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+ID4gKyAqLwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAq IERlbXV4ZXMgYW4gSU1GIENvbXBvc2l0aW9uCj4gPiArICoKPiA+ICsgKiBSZWZlcmVuY2VzCj4g PiArICogT1YgMjA2Ny0wOjIwMTggLSBTTVBURSBPdmVydmlldyBEb2N1bWVudCAtIEludGVyb3Bl cmFibGUgTWFzdGVyIEZvcm1hdAo+ID4gKyAqIFNUIDIwNjctMjoyMDIwIC0gU01QVEUgU3RhbmRh cmQgLSBJbnRlcm9wZXJhYmxlIE1hc3RlciBGb3JtYXQg4oCUIENvcmUgQ29uc3RyYWludHMKPiA+ ICsgKiBTVCAyMDY3LTM6MjAyMCAtIFNNUFRFIFN0YW5kYXJkIC0gSW50ZXJvcGVyYWJsZSBNYXN0 ZXIgRm9ybWF0IOKAlCBDb21wb3NpdGlvbiBQbGF5bGlzdAo+ID4gKyAqIFNUIDIwNjctNToyMDIw IC0gU01QVEUgU3RhbmRhcmQgLSBJbnRlcm9wZXJhYmxlIE1hc3RlciBGb3JtYXQg4oCUIEVzc2Vu Y2UgQ29tcG9uZW50Cj4gPiArICogU1QgMjA2Ny0yMDoyMDE2IC0gU01QVEUgU3RhbmRhcmQgLSBJ bnRlcm9wZXJhYmxlIE1hc3RlciBGb3JtYXQg4oCUIEFwcGxpY2F0aW9uICMyCj4gPiArICogU1Qg MjA2Ny0yMToyMDIwIC0gU01QVEUgU3RhbmRhcmQgLSBJbnRlcm9wZXJhYmxlIE1hc3RlciBGb3Jt YXQg4oCUIEFwcGxpY2F0aW9uICMyIEV4dGVuZGVkCj4gPiArICogU1QgMjA2Ny0xMDI6MjAxNyAt IFNNUFRFIFN0YW5kYXJkIC0gSW50ZXJvcGVyYWJsZSBNYXN0ZXIgRm9ybWF0IOKAlCBDb21tb24g SW1hZ2UgUGl4ZWwgQ29sb3IgU2NoZW1lcwo+ID4gKyAqIFNUIDQyOS05OjIwMDcgLSBTTVBURSBT dGFuZGFyZCAtIEQtQ2luZW1hIFBhY2thZ2luZyDigJQgQXNzZXQgTWFwcGluZyBhbmQgRmlsZSBT ZWdtZW50YXRpb24KPiA+ICsgKgo+ID4gKyAqIEBhdXRob3IgTWFyYy1BbnRvaW5lIEFybmF1ZAo+ ID4gKyAqIEBhdXRob3IgVmFsZW50aW4gTm9lbAo+ID4gKyAqIEBhdXRob3IgTmljaG9sYXMgVmFu ZGVyendldAo+ID4gKyAqIEBmaWxlCj4gPiArICogQGluZ3JvdXAgbGF2dV9pbWYKPiA+ICsgKi8K PiA+ICsKPiA+ICsjaW5jbHVkZSAiYXZpb19pbnRlcm5hbC5oIgo+ID4gKyNpbmNsdWRlICJpbWYu aCIKPiA+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2 c3RyaW5nLmgiCj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9icHJpbnQuaCIKPiA+ICsjaW5jbHVk ZSAibGliYXZ1dGlsL29wdC5oIgo+ID4gKyNpbmNsdWRlICJteGYuaCIKPiA+ICsjaW5jbHVkZSAi dXJsLmgiCj4gPiArI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gPiArI2luY2x1ZGUgPGxpYnhtbC9w YXJzZXIuaD4KPiA+ICsKPiA+ICsjZGVmaW5lIE1BWF9CUFJJTlRfUkVBRF9TSVpFIChVSU5UX01B WCAtIDEpCj4gPiArI2RlZmluZSBERUZBVUxUX0FTU0VUTUFQX1NJWkUgOCAqIDEwMjQKPiA+ICsj ZGVmaW5lIEFWUkFUSU9OQUxfRk9STUFUICIlZC8lZCIKPiA+ICsjZGVmaW5lIEFWUkFUSU9OQUxf QVJHKHJhdGlvbmFsKSByYXRpb25hbC5udW0sIHJhdGlvbmFsLmRlbgo+ID4gKwo+ID4gKy8qKgo+ ID4gKyAqIElNRiBBc3NldCBsb2NhdG9yCj4gPiArICovCj4gPiArdHlwZWRlZiBzdHJ1Y3QgSU1G QXNzZXRMb2NhdG9yIHsKPiA+ICsgICAgRkZJTUZVVUlEIHV1aWQ7Cj4gPiArICAgIGNoYXIgKmFi c29sdXRlX3VyaTsKPiA+ICt9IElNRkFzc2V0TG9jYXRvcjsKPiA+ICsKPiA+ICsvKioKPiA+ICsg KiBJTUYgQXNzZXQgbG9jYXRvciBtYXAKPiA+ICsgKiBSZXN1bHRzIGZyb20gdGhlIHBhcnNpbmcg b2Ygb25lIG9yIG1vcmUgQVNTRVRNQVAgWE1MIGZpbGVzCj4gPiArICovCj4gPiArdHlwZWRlZiBz dHJ1Y3QgSU1GQXNzZXRMb2NhdG9yTWFwIHsKPiA+ICsgICAgdWludDMyX3QgYXNzZXRfY291bnQ7 Cj4gPiArICAgIElNRkFzc2V0TG9jYXRvciAqYXNzZXRzOwo+ID4gK30gSU1GQXNzZXRMb2NhdG9y TWFwOwo+ID4gKwo+ID4gK3R5cGVkZWYgc3RydWN0IElNRlZpcnR1YWxUcmFja1Jlc291cmNlUGxh eWJhY2tDdHggewo+ID4gKyAgICBJTUZBc3NldExvY2F0b3IgKmxvY2F0b3I7Cj4gPiArICAgIEZG SU1GVHJhY2tGaWxlUmVzb3VyY2UgKnJlc291cmNlOwo+ID4gKyAgICBBVkZvcm1hdENvbnRleHQg KmN0eDsKPiA+ICt9IElNRlZpcnR1YWxUcmFja1Jlc291cmNlUGxheWJhY2tDdHg7Cj4gPiArCj4g PiArdHlwZWRlZiBzdHJ1Y3QgSU1GVmlydHVhbFRyYWNrUGxheWJhY2tDdHggewo+ID4gKyAgICBp bnQzMl90IGluZGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVHJhY2sg aW5kZXggaW4gcGxheWxpc3QgKi8KPiA+ICsgICAgQVZSYXRpb25hbCBjdXJyZW50X3RpbWVzdGFt cDsgICAgICAgICAgICAgICAgICAvKio8IEN1cnJlbnQgdGVtcG9yYWwgcG9zaXRpb24gKi8KPiA+ ICsgICAgQVZSYXRpb25hbCBkdXJhdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8 IE92ZXJhbGwgZHVyYXRpb24gKi8KPiA+ICsgICAgdWludDMyX3QgcmVzb3VyY2VfY291bnQ7ICAg ICAgICAgICAgICAgICAgICAgICAvKio8IE51bWJlciBvZiByZXNvdXJjZXMgKi8KPiA+ICsgICAg dW5zaWduZWQgaW50IHJlc291cmNlc19hbGxvY19zejsgICAgICAgICAgICAgICAvKio8IFNpemUg b2YgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZSByZXNvdXJjZSAqLwo+ID4gKyAgICBJTUZWaXJ0dWFs VHJhY2tSZXNvdXJjZVBsYXliYWNrQ3R4ICpyZXNvdXJjZXM7IC8qKjwgQnVmZmVyIGhvbGRpbmcg dGhlIHJlc291cmNlcyAqLwo+ID4gKyAgICB1aW50MzJfdCBjdXJyZW50X3Jlc291cmNlX2luZGV4 OyAgICAgICAgICAgICAgIC8qKjwgQ3VycmVudCByZXNvdXJjZSAqLwo+ID4gKyAgICBpbnQ2NF90 IGxhc3RfcHRzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTGFzdCB0aW1lc3Rh bXAgKi8KPiA+ICt9IElNRlZpcnR1YWxUcmFja1BsYXliYWNrQ3R4Owo+ID4gKwo+ID4gK3R5cGVk ZWYgc3RydWN0IElNRkNvbnRleHQgewo+ID4gKyAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKPiA+ ICsgICAgY29uc3QgY2hhciAqYmFzZV91cmw7Cj4gPiArICAgIGNoYXIgKmFzc2V0X21hcF9wYXRo czsKPiA+ICsgICAgQVZJT0ludGVycnVwdENCICppbnRlcnJ1cHRfY2FsbGJhY2s7Cj4gPiArICAg IEFWRGljdGlvbmFyeSAqYXZpb19vcHRzOwo+ID4gKyAgICBGRklNRkNQTCAqY3BsOwo+ID4gKyAg ICBJTUZBc3NldExvY2F0b3JNYXAgYXNzZXRfbG9jYXRvcl9tYXA7Cj4gPiArICAgIHVpbnQzMl90 IHRyYWNrX2NvdW50Owo+ID4gKyAgICBJTUZWaXJ0dWFsVHJhY2tQbGF5YmFja0N0eCAqKnRyYWNr czsKPiA+ICt9IElNRkNvbnRleHQ7Cj4gPiArCj4gPiArc3RhdGljIGludCBpbWZfdXJpX2lzX3Vy bChjb25zdCBjaGFyICpzdHJpbmcpCj4gPiArewo+ID4gKyAgICByZXR1cm4gc3Ryc3RyKHN0cmlu ZywgIjovLyIpICE9IE5VTEw7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaW1mX3VyaV9p c191bml4X2Fic19wYXRoKGNvbnN0IGNoYXIgKnN0cmluZykKPiA+ICt7Cj4gPiArICAgIHJldHVy biBzdHJpbmdbMF0gPT0gJy8nOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGltZl91cmlf aXNfZG9zX2Fic19wYXRoKGNvbnN0IGNoYXIgKnN0cmluZykKPiA+ICt7Cj4gPiArICAgIC8qIEFi c29sdXRlIHBhdGggY2FzZTogYEM6XHBhdGhcdG9cc29td2hlcmVgICovCj4gPiArICAgIGlmIChz dHJpbmdbMV0gPT0gJzonICYmIHN0cmluZ1syXSA9PSAnXFwnKQo+ID4gKyAgICAgICAgcmV0dXJu IDE7Cj4gPiArCj4gPiArICAgIC8qIEFic29sdXRlIHBhdGggY2FzZTogYEM6L3BhdGgvdG8vc29t d2hlcmVgICovCj4gPiArICAgIGlmIChzdHJpbmdbMV0gPT0gJzonICYmIHN0cmluZ1syXSA9PSAn LycpCj4gPiArICAgICAgICByZXR1cm4gMTsKPiA+ICsKPiA+ICsgICAgLyogTmV0d29yayBwYXRo IGNhc2U6IGBcXHBhdGhcdG9cc29td2hlcmVgICovCj4gPiArICAgIGlmIChzdHJpbmdbMF0gPT0g J1xcJyAmJiBzdHJpbmdbMV0gPT0gJ1xcJykKPiA+ICsgICAgICAgIHJldHVybiAxOwo+ID4gKwo+ ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogUGFyc2UgYSBB U1NFVE1BUCBYTUwgZmlsZSB0byBleHRyYWN0IHRoZSBVVUlELVVSSSBtYXBwaW5nIG9mIGFzc2V0 cy4KPiA+ICsgKiBAcGFyYW0gcyB0aGUgY3VycmVudCBmb3JtYXQgY29udGV4dCwgaWYgYW55IChj YW4gYmUgTlVMTCkuCj4gPiArICogQHBhcmFtIGRvYyB0aGUgWE1MIGRvY3VtZW50IHRvIGJlIHBh cnNlZC4KPiA+ICsgKiBAcGFyYW0gYXNzZXRfbWFwIHBvaW50ZXIgb24gdGhlIElNRkFzc2V0TG9j YXRvck1hcCB0byBmaWxsLgo+ID4gKyAqIEBwYXJhbSBiYXNlX3VybCB0aGUgdXJsIG9mIHRoZSBh c3NldCBtYXAgWE1MIGZpbGUsIGlmIGFueSAoY2FuIGJlIE5VTEwpLgo+ID4gKyAqIEByZXR1cm4g YSBuZWdhdGl2ZSB2YWx1ZSBpbiBjYXNlIG9mIGVycm9yLCAwIG90aGVyd2lzZS4KPiA+ICsgKi8K PiA+ICtzdGF0aWMgaW50IHBhcnNlX2ltZl9hc3NldF9tYXBfZnJvbV94bWxfZG9tKEFWRm9ybWF0 Q29udGV4dCAqcywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHhtbERvY1B0ciBkb2MsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJTUZBc3NldExvY2F0b3JNYXAgKmFzc2V0X21hcCwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhc2VfdXJsKQo+ ID4gK3sKPiA+ICsgICAgeG1sTm9kZVB0ciBhc3NldF9tYXBfZWxlbWVudCA9IE5VTEw7Cj4gPiAr ICAgIHhtbE5vZGVQdHIgbm9kZSA9IE5VTEw7Cj4gPiArICAgIHhtbE5vZGVQdHIgYXNzZXRfZWxl bWVudCA9IE5VTEw7Cj4gPiArICAgIHVuc2lnbmVkIGxvbmcgZWxlbV9jb3VudDsKPiA+ICsgICAg Y2hhciAqdXJpOwo+ID4gKyAgICBpbnQgcmV0ID0gMDsKPiA+ICsgICAgSU1GQXNzZXRMb2NhdG9y ICphc3NldCA9IE5VTEw7Cj4gPiArICAgIHZvaWQgKnRtcDsKPiA+ICsKPiA+ICsgICAgYXNzZXRf bWFwX2VsZW1lbnQgPSB4bWxEb2NHZXRSb290RWxlbWVudChkb2MpOwo+ID4gKwo+ID4gKyAgICBp ZiAoIWFzc2V0X21hcF9lbGVtZW50KSB7Cj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VS Uk9SLCAiVW5hYmxlIHRvIHBhcnNlIGFzc2V0IG1hcCBYTUwgLSBtaXNzaW5nIHJvb3Qgbm9kZVxu Iik7Cj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiA+ICsgICAgfQo+ ID4gKwo+ID4gKyAgICBpZiAoYXNzZXRfbWFwX2VsZW1lbnQtPnR5cGUgIT0gWE1MX0VMRU1FTlRf Tk9ERSB8fCBhdl9zdHJjYXNlY21wKGFzc2V0X21hcF9lbGVtZW50LT5uYW1lLCAiQXNzZXRNYXAi KSkgewo+ID4gKyAgICAgICAgYXZfbG9nKHMsCj4gPiArICAgICAgICAgICAgICAgQVZfTE9HX0VS Uk9SLAo+ID4gKyAgICAgICAgICAgICAgICJVbmFibGUgdG8gcGFyc2UgYXNzZXQgbWFwIFhNTCAt IHdyb25nIHJvb3Qgbm9kZSBuYW1lWyVzXSB0eXBlWyVkXVxuIiwKPiA+ICsgICAgICAgICAgICAg ICBhc3NldF9tYXBfZWxlbWVudC0+bmFtZSwKPiA+ICsgICAgICAgICAgICAgICAoaW50KWFzc2V0 X21hcF9lbGVtZW50LT50eXBlKTsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIC8qIHBhcnNlIGFzc2V0IGxvY2F0b3JzICov Cj4gPiArICAgIGlmICghKG5vZGUgPSBmZl9pbWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25h bWUoYXNzZXRfbWFwX2VsZW1lbnQsICJBc3NldExpc3QiKSkpIHsKPiA+ICsgICAgICAgIGF2X2xv ZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gcGFyc2UgYXNzZXQgbWFwIFhNTCAtIG1pc3Np bmcgQXNzZXRMaXN0IG5vZGVcbiIpOwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7Cj4gPiArICAgIH0KPiA+ICsgICAgZWxlbV9jb3VudCA9IHhtbENoaWxkRWxlbWVudENv dW50KG5vZGUpOwo+ID4gKyAgICBpZiAoZWxlbV9jb3VudCA+IFVJTlQzMl9NQVgKPiA+ICsgICAg ICAgIHx8IGFzc2V0X21hcC0+YXNzZXRfY291bnQgPiBVSU5UMzJfTUFYIC0gZWxlbV9jb3VudCkK PiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgIHRtcCA9IGF2X3Jl YWxsb2NfYXJyYXkoYXNzZXRfbWFwLT5hc3NldHMsCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgZWxlbV9jb3VudCArIGFzc2V0X21hcC0+YXNzZXRfY291bnQsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZW9mKElNRkFzc2V0TG9jYXRvcikpOwo+ID4gKyAgICBpZiAo IXRtcCkgewo+ID4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBh bGxvY2F0ZSBJTUYgYXNzZXQgbG9jYXRvcnNcbiIpOwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1IoRU5PTUVNKTsKPiA+ICsgICAgfQo+ID4gKyAgICBhc3NldF9tYXAtPmFzc2V0cyA9IHRtcDsK PiA+ICsKPiA+ICsgICAgYXNzZXRfZWxlbWVudCA9IHhtbEZpcnN0RWxlbWVudENoaWxkKG5vZGUp Owo+ID4gKyAgICB3aGlsZSAoYXNzZXRfZWxlbWVudCkgewo+ID4gKyAgICAgICAgaWYgKGF2X3N0 cmNhc2VjbXAoYXNzZXRfZWxlbWVudC0+bmFtZSwgIkFzc2V0IikgIT0gMCkKPiA+ICsgICAgICAg ICAgICBjb250aW51ZTsKPiA+ICsKPiA+ICsgICAgICAgIGFzc2V0ID0gJihhc3NldF9tYXAtPmFz c2V0c1thc3NldF9tYXAtPmFzc2V0X2NvdW50XSk7Cj4gPiArCj4gPiArICAgICAgICBpZiAoZmZf aW1mX3htbF9yZWFkX3V1aWQoZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9uYW1lKGFz c2V0X2VsZW1lbnQsICJJZCIpLCBhc3NldC0+dXVpZCkpIHsKPiA+ICsgICAgICAgICAgICBhdl9s b2cocywgQVZfTE9HX0VSUk9SLCAiQ291bGQgbm90IHBhcnNlIFVVSUQgZnJvbSBhc3NldCBpbiBh c3NldCBtYXAuXG4iKTsKPiA+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfREVC VUcsICJGb3VuZCBhc3NldCBpZDogIiBGRl9JTUZfVVVJRF9GT1JNQVQgIlxuIiwgVUlEX0FSRyhh c3NldC0+dXVpZCkpOwo+ID4gKwo+ID4gKyAgICAgICAgaWYgKCEobm9kZSA9IGZmX2ltZl94bWxf Z2V0X2NoaWxkX2VsZW1lbnRfYnlfbmFtZShhc3NldF9lbGVtZW50LCAiQ2h1bmtMaXN0IikpKSB7 Cj4gPiArICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBwYXJz ZSBhc3NldCBtYXAgWE1MIC0gbWlzc2luZyBDaHVua0xpc3Qgbm9kZVxuIik7Cj4gPiArICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArICAgICAgICB9Cj4gPiArCj4g PiArICAgICAgICBpZiAoIShub2RlID0gZmZfaW1mX3htbF9nZXRfY2hpbGRfZWxlbWVudF9ieV9u YW1lKG5vZGUsICJDaHVuayIpKSkgewo+ID4gKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0df RVJST1IsICJVbmFibGUgdG8gcGFyc2UgYXNzZXQgbWFwIFhNTCAtIG1pc3NpbmcgQ2h1bmsgbm9k ZVxuIik7Cj4gPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiAr ICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICB1cmkgPSB4bWxOb2RlR2V0Q29udGVudChmZl9p bWZfeG1sX2dldF9jaGlsZF9lbGVtZW50X2J5X25hbWUobm9kZSwgIlBhdGgiKSk7Cj4gPiArICAg ICAgICBpZiAoIWltZl91cmlfaXNfdXJsKHVyaSkgJiYgIWltZl91cmlfaXNfdW5peF9hYnNfcGF0 aCh1cmkpICYmICFpbWZfdXJpX2lzX2Rvc19hYnNfcGF0aCh1cmkpKQo+ID4gKyAgICAgICAgICAg IGFzc2V0LT5hYnNvbHV0ZV91cmkgPSBhdl9hcHBlbmRfcGF0aF9jb21wb25lbnQoYmFzZV91cmws IHVyaSk7Cj4gPiArICAgICAgICBlbHNlCj4gPiArICAgICAgICAgICAgYXNzZXQtPmFic29sdXRl X3VyaSA9IGF2X3N0cmR1cCh1cmkpOwo+ID4gKyAgICAgICAgeG1sRnJlZSh1cmkpOwo+ID4gKyAg ICAgICAgaWYgKCFhc3NldC0+YWJzb2x1dGVfdXJpKQo+ID4gKyAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7Cj4gPiArCj4gPiArICAgICAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVH LCAiRm91bmQgYXNzZXQgYWJzb2x1dGUgVVJJOiAlc1xuIiwgYXNzZXQtPmFic29sdXRlX3VyaSk7 Cj4gPiArCj4gPiArICAgICAgICBhc3NldF9tYXAtPmFzc2V0X2NvdW50Kys7Cj4gPiArICAgICAg ICBhc3NldF9lbGVtZW50ID0geG1sTmV4dEVsZW1lbnRTaWJsaW5nKGFzc2V0X2VsZW1lbnQpOwo+ ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gKy8q Kgo+ID4gKyAqIEluaXRpYWxpemVzIGFuIElNRkFzc2V0TG9jYXRvck1hcCBzdHJ1Y3R1cmUuCj4g PiArICovCj4gPiArc3RhdGljIHZvaWQgaW1mX2Fzc2V0X2xvY2F0b3JfbWFwX2luaXQoSU1GQXNz ZXRMb2NhdG9yTWFwICphc3NldF9tYXApCj4gPiArewo+ID4gKyAgICBhc3NldF9tYXAtPmFzc2V0 cyA9IE5VTEw7Cj4gPiArICAgIGFzc2V0X21hcC0+YXNzZXRfY291bnQgPSAwOwo+ID4gK30KPiA+ ICsKPiA+ICsvKioKPiA+ICsgKiBGcmVlIGEgSU1GQXNzZXRMb2NhdG9yTWFwIHBvaW50ZXIuCj4g PiArICovCj4gPiArc3RhdGljIHZvaWQgaW1mX2Fzc2V0X2xvY2F0b3JfbWFwX2RlaW5pdChJTUZB c3NldExvY2F0b3JNYXAgKmFzc2V0X21hcCkKPiA+ICt7Cj4gPiArICAgIGZvciAodWludDMyX3Qg aSA9IDA7IGkgPCBhc3NldF9tYXAtPmFzc2V0X2NvdW50OyArK2kpCj4gPiArICAgICAgICBhdl9m cmVlcCgmYXNzZXRfbWFwLT5hc3NldHNbaV0uYWJzb2x1dGVfdXJpKTsKPiA+ICsKPiA+ICsgICAg YXZfZnJlZXAoJmFzc2V0X21hcC0+YXNzZXRzKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlu dCBwYXJzZV9hc3NldG1hcChBVkZvcm1hdENvbnRleHQgKnMsIGNvbnN0IGNoYXIgKnVybCkKPiA+ ICt7Cj4gPiArICAgIElNRkNvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Cj4gPiArICAgIEFWSU9D b250ZXh0ICppbiA9IE5VTEw7Cj4gPiArICAgIHN0cnVjdCBBVkJQcmludCBidWY7Cj4gPiArICAg IEFWRGljdGlvbmFyeSAqb3B0cyA9IE5VTEw7Cj4gPiArICAgIHhtbERvYyAqZG9jID0gTlVMTDsK PiA+ICsgICAgY29uc3QgY2hhciAqYmFzZV91cmw7Cj4gPiArICAgIGNoYXIgKnRtcF9zdHIgPSBO VUxMOwo+ID4gKyAgICBpbnQgcmV0Owo+ID4gKyAgICBpbnQ2NF90IGZpbGVzaXplOwo+ID4gKwo+ ID4gKyAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiQXNzZXQgTWFwIFVSTDogJXNcbiIsIHVy bCk7Cj4gPiArCj4gPiArICAgIGF2X2RpY3RfY29weSgmb3B0cywgYy0+YXZpb19vcHRzLCAwKTsK PiA+ICsgICAgcmV0ID0gcy0+aW9fb3BlbihzLCAmaW4sIHVybCwgQVZJT19GTEFHX1JFQUQsICZv cHRzKTsKPiA+ICsgICAgYXZfZGljdF9mcmVlKCZvcHRzKTsKPiA+ICsgICAgaWYgKHJldCA8IDAp Cj4gPiArICAgICAgICByZXR1cm4gcmV0Owo+ID4gKwo+ID4gKyAgICBmaWxlc2l6ZSA9IGF2aW9f c2l6ZShpbik7Cj4gPiArICAgIGZpbGVzaXplID0gZmlsZXNpemUgPiAwID8gZmlsZXNpemUgOiBE RUZBVUxUX0FTU0VUTUFQX1NJWkU7Cj4gPiArCj4gPiArICAgIGF2X2JwcmludF9pbml0KCZidWYs IGZpbGVzaXplICsgMSwgQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVEKTsKPiA+ICsKPiA+ICsgICAg cmV0ID0gYXZpb19yZWFkX3RvX2JwcmludChpbiwgJmJ1ZiwgTUFYX0JQUklOVF9SRUFEX1NJWkUp Owo+ID4gKyAgICBpZiAocmV0IDwgMCB8fCAhYXZpb19mZW9mKGluKSB8fCBidWYubGVuID09IDAp IHsKPiA+ICsgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gcmVhZCB0 byBhc3NldCBtYXAgJyVzJ1xuIiwgdXJsKTsKPiA+ICsgICAgICAgIGlmIChyZXQgPT0gMCkKPiA+ ICsgICAgICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4gKyAgICAgICAgZ290 byBjbGVhbl91cDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBMSUJYTUxfVEVTVF9WRVJTSU9O Cj4gPiArCj4gPiArICAgIHRtcF9zdHIgPSBhdl9zdHJkdXAodXJsKTsKPiA+ICsgICAgaWYgKCF0 bXBfc3RyKSB7Cj4gPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4gPiArICAgICAg ICBnb3RvIGNsZWFuX3VwOwo+ID4gKyAgICB9Cj4gPiArICAgIGJhc2VfdXJsID0gYXZfZGlybmFt ZSh0bXBfc3RyKTsKPiA+ICsKPiA+ICsgICAgZmlsZXNpemUgPSBidWYubGVuOwo+ID4gKyAgICBk b2MgPSB4bWxSZWFkTWVtb3J5KGJ1Zi5zdHIsIGZpbGVzaXplLCB1cmwsIE5VTEwsIDApOwo+ID4g Kwo+ID4gKyAgICByZXQgPSBwYXJzZV9pbWZfYXNzZXRfbWFwX2Zyb21feG1sX2RvbShzLCBkb2Ms ICZjLT5hc3NldF9sb2NhdG9yX21hcCwgYmFzZV91cmwpOwo+ID4gKyAgICBpZiAoIXJldCkKPiA+ ICsgICAgICAgIGF2X2xvZyhzLAo+ID4gKyAgICAgICAgICAgICAgIEFWX0xPR19ERUJVRywKPiA+ ICsgICAgICAgICAgICAgICAiRm91bmQgJWQgYXNzZXRzIGZyb20gJXNcbiIsCj4gPiArICAgICAg ICAgICAgICAgYy0+YXNzZXRfbG9jYXRvcl9tYXAuYXNzZXRfY291bnQsCj4gPiArICAgICAgICAg ICAgICAgdXJsKTsKPiA+ICsKPiA+ICsgICAgeG1sRnJlZURvYyhkb2MpOwo+ID4gKwo+ID4gK2Ns ZWFuX3VwOgo+ID4gKyAgICBpZiAodG1wX3N0cikKPiA+ICsgICAgICAgIGF2X2ZyZWVwKCZ0bXBf c3RyKTsKPiA+ICsgICAgZmZfZm9ybWF0X2lvX2Nsb3NlKHMsICZpbik7Cj4gPiArICAgIGF2X2Jw cmludF9maW5hbGl6ZSgmYnVmLCBOVUxMKTsKPiA+ICsgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIElNRkFzc2V0TG9jYXRvciAqZmluZF9hc3NldF9tYXBfbG9jYXRvcihJ TUZBc3NldExvY2F0b3JNYXAgKmFzc2V0X21hcCwgRkZJTUZVVUlEIHV1aWQpCj4gPiArewo+ID4g KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYXNzZXRfbWFwLT5hc3NldF9jb3VudDsgKytp KSB7Cj4gPiArICAgICAgICBpZiAobWVtY21wKGFzc2V0X21hcC0+YXNzZXRzW2ldLnV1aWQsIHV1 aWQsIDE2KSA9PSAwKQo+ID4gKyAgICAgICAgICAgIHJldHVybiAmKGFzc2V0X21hcC0+YXNzZXRz W2ldKTsKPiA+ICsgICAgfQo+ID4gKyAgICByZXR1cm4gTlVMTDsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIGludCBvcGVuX3RyYWNrX3Jlc291cmNlX2NvbnRleHQoQVZGb3JtYXRDb250ZXh0ICpz LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNRlZpcnR1YWxU cmFja1Jlc291cmNlUGxheWJhY2tDdHggKnRyYWNrX3Jlc291cmNlKQo+ID4gK3sKPiA+ICsgICAg SU1GQ29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKPiA+ICsgICAgaW50IHJldCA9IDA7Cj4gPiAr ICAgIGludDY0X3QgZW50cnlfcG9pbnQ7Cj4gPiArICAgIEFWRGljdGlvbmFyeSAqb3B0cyA9IE5V TEw7Cj4gPiArCj4gPiArICAgIGlmICh0cmFja19yZXNvdXJjZS0+Y3R4KSB7Cj4gPiArICAgICAg ICBhdl9sb2cocywKPiA+ICsgICAgICAgICAgICAgICBBVl9MT0dfREVCVUcsCj4gPiArICAgICAg ICAgICAgICAgIklucHV0IGNvbnRleHQgYWxyZWFkeSBvcGVuZWQgZm9yICVzLlxuIiwKPiA+ICsg ICAgICAgICAgICAgICB0cmFja19yZXNvdXJjZS0+bG9jYXRvci0+YWJzb2x1dGVfdXJpKTsKPiA+ ICsgICAgICAgIHJldHVybiAwOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHRyYWNrX3Jlc291 cmNlLT5jdHggPSBhdmZvcm1hdF9hbGxvY19jb250ZXh0KCk7Cj4gPiArICAgIGlmICghdHJhY2tf cmVzb3VyY2UtPmN0eCkKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPiAr Cj4gPiArICAgIHRyYWNrX3Jlc291cmNlLT5jdHgtPmlvX29wZW4gPSBzLT5pb19vcGVuOwo+ID4g KyAgICB0cmFja19yZXNvdXJjZS0+Y3R4LT5pb19jbG9zZSA9IHMtPmlvX2Nsb3NlOwo+ID4gKyAg ICB0cmFja19yZXNvdXJjZS0+Y3R4LT5pb19jbG9zZTIgPSBzLT5pb19jbG9zZTI7Cj4gPiArICAg IHRyYWNrX3Jlc291cmNlLT5jdHgtPmZsYWdzIHw9IHMtPmZsYWdzICYgfkFWRk1UX0ZMQUdfQ1VT VE9NX0lPOwo+ID4gKwo+ID4gKyAgICBpZiAoKHJldCA9IGZmX2NvcHlfd2hpdGVibGFja2xpc3Rz KHRyYWNrX3Jlc291cmNlLT5jdHgsIHMpKSA8IDApCj4gPiArICAgICAgICBnb3RvIGNsZWFudXA7 Cj4gPiArCj4gPiArICAgIGlmIChyZXQgPSBhdl9vcHRfc2V0KHRyYWNrX3Jlc291cmNlLT5jdHgs ICJmb3JtYXRfd2hpdGVsaXN0IiwgIm14ZiIsIDApKQo+Cj4gKCkKPgo+IEkgc3RvcHBlZCBoZXJl LCB0aGVyZSdzIHByb2JhYmx5IG1vcmUuCj4KPgo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZmZt cGVnLWRldmVsQGZmbXBlZy5vcmcKPiBodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5m by9mZm1wZWctZGV2ZWwKPgo+IFRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBl bWFpbAo+IGZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1 YnNjcmliZSIuCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6 Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmli ZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVn Lm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K