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 107634549E for ; Mon, 30 Jan 2023 17:12:13 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AB48668BDBA; Mon, 30 Jan 2023 19:12:11 +0200 (EET) Received: from mail-vs1-f54.google.com (mail-vs1-f54.google.com [209.85.217.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C5A5568BDAC for ; Mon, 30 Jan 2023 19:12:04 +0200 (EET) Received: by mail-vs1-f54.google.com with SMTP id k6so13249898vsk.1 for ; Mon, 30 Jan 2023 09:12:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=g0tb9E7EjGrY8KOk1DSfVT/IoqFypZq7X2shO+OVHl8=; b=OK+wttPgeLmpd9pO7n25qUkz09NUrUtessXJJ80diIibGVaZcQWl1nuP7KoJwn/h8n G7dU9brYhAbCqCW1MQhVvfwCYQfawg1SdSwENPY/t58wlT+C0BDh8B7orGjpu1ER/S2J 0/3+Rwgbs4G5b7PvFqJE+btNeOCdhsTVXzZi7gjL/vuGzba1vsPKqW8cKr043k2Y/uxH /lzN6wQA6tVA5wuge4unhGfQb7WkKI094Ye4su2AFINFfgo2AjVLPoVhGpUEYwASSKyH 04CYX7cbLnoP98NXcX4wRkjEvtsDc+YvuoRN4KQgjvidFfNPBgIQJ8Qj/63vACqaEEFj zifQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g0tb9E7EjGrY8KOk1DSfVT/IoqFypZq7X2shO+OVHl8=; b=skM4wUBgIZhv7TB1TGu28B+ithA5KLLl5YL4Oy9HpxBmFXpiMogpOR8LxgRwcP03bT RT2xzUKF5AZZEeSg+aSQITh0eEjUzaPqenbDbpHqTuUPHiyEFhoDqCw3zMrktvkXs1rO BVIrNTwnjpbAUC98bSzrWEAKC18BceYaHuKIEy51vNaxyYHeDf7lRPsFe2ke/qzyhO+m UVU6SifVh0QKmnZ2IjYRBQKRUd0tp/r0nmi5MKDYQitLgoji/0yg/i6sp0lNrWNT1muQ ZRzk7TGw6qGSq4WUWWa/5UC1W060K/SoWpQIU0rm87AF89xfgy+nHTiAn92RyNm4egAV 9G/Q== X-Gm-Message-State: AO0yUKWXzKIKcXgYyALGClKa5DlTs309qND9FtGcERnVRHFJCQVdP2rf F/49DGmY/1XXsD/+WIDv0cQvUa9/BchsPC2IcJxlZCDs X-Google-Smtp-Source: AK7set8lLBYGb5nTakEzQvyOs6kyPIiX2JSusWCAc4hZ1qcexBfnCkcVzeK8Kw13ODgHVq9sTd1IGzSVwWka5fK4G9A= X-Received: by 2002:a05:6102:408:b0:3f1:32b7:7185 with SMTP id d8-20020a056102040800b003f132b77185mr1305870vsq.61.1675098723088; Mon, 30 Jan 2023 09:12:03 -0800 (PST) MIME-Version: 1.0 Received: by 2002:a05:612c:2428:b0:32a:5eaa:92e4 with HTTP; Mon, 30 Jan 2023 09:12:02 -0800 (PST) In-Reply-To: References: <167499051601.4503.13329354060075233079@lain.khirnov.net> <20230130165010.3156-1-leo.izen@gmail.com> From: Paul B Mahol Date: Mon, 30 Jan 2023 18:12:02 +0100 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH v2] avutil/{color_utils, csp}: merge color_utils into csp and expose API 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 Cc: Leo Izen 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: T24gMS8zMC8yMywgWmhhbyBaaGlsaSA8cXVpbmtibGFja0Bmb3htYWlsLmNvbT4gd3JvdGU6Cj4K Pgo+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiBmZm1wZWctZGV2ZWwgPGZm bXBlZy1kZXZlbC1ib3VuY2VzQGZmbXBlZy5vcmc+IE9uIEJlaGFsZiBPZiBMZW8gSXplbgo+PiBT ZW50OiAyMDIz5bm0MeaciDMx5pelIDA6NTAKPj4gVG86IGZmbXBlZy1kZXZlbEBmZm1wZWcub3Jn Cj4+IENjOiBMZW8gSXplbiA8bGVvLml6ZW5AZ21haWwuY29tPgo+PiBTdWJqZWN0OiBbRkZtcGVn LWRldmVsXSBbUEFUQ0ggdjJdIGF2dXRpbC97Y29sb3JfdXRpbHMsIGNzcH06IG1lcmdlCj4+IGNv bG9yX3V0aWxzIGludG8gY3NwIGFuZCBleHBvc2UgQVBJCj4+Cj4+IGxpYmF2dXRpbC9jb2xvcl91 dGlscyBjb250YWlucyBzb21lIGF2cHJpdl8gc3ltYm9scyB0aGF0IG1hcAo+PiBlbnVtIEFWVHJh bnNmZXJDaGFyYWN0ZXJpc3RpYyB2YWx1ZXMgdG8gZ2FtbWEtY3VydmUgYXBwcm94aW1hdGlvbnMg YW5kCj4+IHRvIHRoZSBhY3R1YWwgdHJhbnNmZXIgZnVuY3Rpb25zIHRvIGludmVydCB0aGVtIChp LmUuIC0+IGxpbmVhcikuCj4+Cj4+IFRoZXJlJ3MgdHdvIGlzc3VlcyB3aXRoIHRoaXM6Cj4+ICgx KSBhdnByaXYgaXMgZXZpbCBhbmQgc2hvdWxkIGJlIGF2b2lkZWQgd2hlbmV2ZXIgcG9zc2libGUK Pj4gKDIpIGxpYmF2dXRpbC9jc3AuaCBleHBvc2VzIGEgcHVibGljIEFQSSBmb3IgaGFuZGxpbmcg Y29sb3IgdGhhdAo+PiAgICAgYWxyZWFkeSBoYW5kbGVzIHByaW1hcmllcyBhbmQgbWF0cmljaWVz Cj4+Cj4+IEkgZG9uJ3Qgc2VlIGFueSByZWFzb24gdGhpcyBBUEkgaGFzIHRvIGJlIHByaXZhdGUs IHNvIHRoaXMgY29tbWl0IHRha2VzCj4+IHRoZSBmdW5jdGlvbmFsaXR5IGZyb20gYXZ1dGlsL2Nv bG9yX3V0aWxzIGFuZCBtZXJnZXMgaXQgaW50byBhdnV0aWwvY3NwCj4+IHdpdGggYW4gZXhwb3Nl ZCBhdl8gQVBJIHJhdGhlciB0aGFuIHRoZSBwcmV2aW91cyBhdnByaXZfIEFQSS4KPj4KPj4gRXZl cnkgcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBBUEkgaGFzIGJlZW4gdXBkYXRlZCB0byBwb2lu dCB0byB0aGUKPj4gbmV3IG9uZS4gY29sb3JfdXRpbHMuaCBoYXMgYmVlbiBkZWxldGVkIGFzIHdl bGwuIFRoaXMgc2hvdWxkIG5vdCBicmVhawo+PiBhbnkgYXBwbGljYXRpb25zIGFzIGl0IG9ubHkg Y29udGFpbmVkIGF2cHJpdl8gc3ltYm9scyBpbiB0aGUgZmlyc3QKPj4gcGxhY2UsIHNvIG5vdGhp bmcgaW4gdGhhdCBoZWFkZXIgY291bGQgYmUgcmVmZXJlbmNlZCBieSBvdGhlcgo+PiBhcHBsaWNh dGlvbnMuCj4KPiBJc24ndCBpdCBicmVhayBvbGQgbGliYXZjb2RlYyB3aGljaCBsaW5rZWQgdG8g dGhlIG5ldyBsaWJhdnV0aWw/CgpZZXMgaXQgaXMsIHRoYXRzIHdoeSBhY2NvcmRpbmcgdG8gQW50 b24gaXQgY2FuIG5vdCBiZSBwdXNoZWQgYXMgaXMuCgo+Cj4+Cj4+IFNpZ25lZC1vZmYtYnk6IExl byBJemVuIDxsZW8uaXplbkBnbWFpbC5jb20+Cj4+IC0tLQo+PiAgZG9jL0FQSWNoYW5nZXMgICAg ICAgICAgICAgICAgfCAgIDQgKwo+PiAgbGliYXZjb2RlYy9leHIuYyAgICAgICAgICAgICAgfCAg IDggKy0KPj4gIGxpYmF2Y29kZWMvZmZsY21zMi5jICAgICAgICAgIHwgICAxIC0KPj4gIGxpYmF2 Y29kZWMvcG5nZW5jLmMgICAgICAgICAgIHwgICAzICstCj4+ICBsaWJhdmZvcm1hdC9tb3ZlbmMu YyAgICAgICAgICB8ICAgNyArLQo+PiAgbGliYXZ1dGlsL01ha2VmaWxlICAgICAgICAgICAgfCAg IDEgLQo+PiAgbGliYXZ1dGlsL2NvbG9yX3V0aWxzLmMgICAgICAgfCAyMzQgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+PiAgbGliYXZ1dGlsL2NvbG9yX3V0aWxzLmggICAgICAg fCAgNTYgLS0tLS0tLS0KPj4gIGxpYmF2dXRpbC9jc3AuYyAgICAgICAgICAgICAgIHwgMTcyICsr KysrKysrKysrKysrKysrKysrKysrKysKPj4gIGxpYmF2dXRpbC9jc3AuaCAgICAgICAgICAgICAg IHwgIDM5ICsrKysrKwo+PiAgbGliYXZ1dGlsL3Rlc3RzL2NvbG9yX3V0aWxzLmMgfCAgIDQgKy0K Pj4gIDExIGZpbGVzIGNoYW5nZWQsIDIyNSBpbnNlcnRpb25zKCspLCAzMDQgZGVsZXRpb25zKC0p Cj4+ICBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZ1dGlsL2NvbG9yX3V0aWxzLmMKPj4gIGRlbGV0 ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvY29sb3JfdXRpbHMuaAo+Pgo+PiBkaWZmIC0tZ2l0IGEv ZG9jL0FQSWNoYW5nZXMgYi9kb2MvQVBJY2hhbmdlcwo+PiBpbmRleCBiYzUyYTA3OTY0Li5mMjhl YjU5ZWQzIDEwMDY0NAo+PiAtLS0gYS9kb2MvQVBJY2hhbmdlcwo+PiArKysgYi9kb2MvQVBJY2hh bmdlcwo+PiBAQCAtMTQsNiArMTQsMTAgQEAgbGliYXZ1dGlsOiAgICAgMjAyMS0wNC0yNwo+Pgo+ PiAgQVBJIGNoYW5nZXMsIG1vc3QgcmVjZW50IGZpcnN0Ogo+Pgo+PiArMjAyMy0wMS0zMCAtIHh4 eHh4eHh4eHggLSBsYXZ1IDU3LjQ0LjEwMCAtIGNzcC5oCj4+ICsgIEFkZCBhdl9jc3BfYXBwcm94 aW1hdGVfdHJjX2dhbW1hKCkgYW5kIGF2X2NzcF90cmNfZnVuY19mcm9tX2lkKCkuCj4+ICsgIEFk ZCBhdl9jc3BfdHJjX2Z1bmN0aW9uLgo+PiArCj4+ICAyMDIzLTAxLTI5IC0geHh4eHh4eHh4eCAt IGxhdmMgNTkuNTkuMTAwIC0gYXZjb2RlYy5oCj4+ICAgIEFkZCBBVl9DT0RFQ19GTEFHX0NPUFlf T1BBUVVFIGFuZCBBVl9DT0RFQ19GTEFHX0ZSQU1FX0RVUkFUSU9OLgo+Pgo+PiBkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy9leHIuYyBiL2xpYmF2Y29kZWMvZXhyLmMKPj4gaW5kZXggNmEwYWY5NmNl NC4uMmYxNzY2YzE3YiAxMDA2NDQKPj4gLS0tIGEvbGliYXZjb2RlYy9leHIuYwo+PiArKysgYi9s aWJhdmNvZGVjL2V4ci5jCj4+IEBAIC0zNiwxMSArMzYsMTEgQEAKPj4KPj4gICNpbmNsdWRlICJs aWJhdnV0aWwvYXZhc3NlcnQuaCIKPj4gICNpbmNsdWRlICJsaWJhdnV0aWwvY29tbW9uLmgiCj4+ ICsjaW5jbHVkZSAibGliYXZ1dGlsL2NzcC5oIgo+PiAgI2luY2x1ZGUgImxpYmF2dXRpbC9pbWd1 dGlscy5oIgo+PiAgI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRmbG9hdC5oIgo+PiAgI2luY2x1ZGUg ImxpYmF2dXRpbC9hdnN0cmluZy5oIgo+PiAgI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPj4g LSNpbmNsdWRlICJsaWJhdnV0aWwvY29sb3JfdXRpbHMuaCIKPj4gICNpbmNsdWRlICJsaWJhdnV0 aWwvaGFsZjJmbG9hdC5oIgo+Pgo+PiAgI2luY2x1ZGUgImF2Y29kZWMuaCIKPj4gQEAgLTExODks NyArMTE4OSw3IEBAIHN0YXRpYyBpbnQgZGVjb2RlX2Jsb2NrKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwgdm9pZAo+PiAqdGRhdGEsCj4+ICAgICAgaW50IGksIHgsIGJ1Zl9zaXplID0gcy0+YnVmX3Np emU7Cj4+ICAgICAgaW50IGMsIHJnYl9jaGFubmVsX2NvdW50Owo+PiAgICAgIGZsb2F0IG9uZV9n YW1tYSA9IDEuMGYgLyBzLT5nYW1tYTsKPj4gLSAgICBhdnByaXZfdHJjX2Z1bmN0aW9uIHRyY19m dW5jID0KPj4gYXZwcml2X2dldF90cmNfZnVuY3Rpb25fZnJvbV90cmMocy0+YXBwbHlfdHJjX3R5 cGUpOwo+PiArICAgIGF2X2NzcF90cmNfZnVuY3Rpb24gdHJjX2Z1bmMgPQo+PiBhdl9jc3BfdHJj X2Z1bmNfZnJvbV9pZChzLT5hcHBseV90cmNfdHlwZSk7Cj4+ICAgICAgaW50IHJldDsKPj4KPj4g ICAgICBsaW5lX29mZnNldCA9IEFWX1JMNjQocy0+Z2IuYnVmZmVyICsgam9ibnIgKiA4KTsKPj4g QEAgLTIyMTUsNyArMjIxNSw3IEBAIHN0YXRpYyBhdl9jb2xkIGludCBkZWNvZGVfaW5pdChBVkNv ZGVjQ29udGV4dAo+PiAqYXZjdHgpCj4+ICAgICAgdWludDMyX3QgaTsKPj4gICAgICB1bmlvbiBh dl9pbnRmbG9hdDMyIHQ7Cj4+ICAgICAgZmxvYXQgb25lX2dhbW1hID0gMS4wZiAvIHMtPmdhbW1h Owo+PiAtICAgIGF2cHJpdl90cmNfZnVuY3Rpb24gdHJjX2Z1bmMgPSBOVUxMOwo+PiArICAgIGF2 X2NzcF90cmNfZnVuY3Rpb24gdHJjX2Z1bmMgPSBOVUxMOwo+Pgo+PiAgICAgIGZmX2luaXRfaGFs ZjJmbG9hdF90YWJsZXMoJnMtPmgyZl90YWJsZXMpOwo+Pgo+PiBAQCAtMjIyNyw3ICsyMjI3LDcg QEAgc3RhdGljIGF2X2NvbGQgaW50IGRlY29kZV9pbml0KEFWQ29kZWNDb250ZXh0Cj4+ICphdmN0 eCkKPj4gICAgICBmZl9ic3dhcGRzcF9pbml0KCZzLT5iYmRzcCk7Cj4+ICAjZW5kaWYKPj4KPj4g LSAgICB0cmNfZnVuYyA9IGF2cHJpdl9nZXRfdHJjX2Z1bmN0aW9uX2Zyb21fdHJjKHMtPmFwcGx5 X3RyY190eXBlKTsKPj4gKyAgICB0cmNfZnVuYyA9IGF2X2NzcF90cmNfZnVuY19mcm9tX2lkKHMt PmFwcGx5X3RyY190eXBlKTsKPj4gICAgICBpZiAodHJjX2Z1bmMpIHsKPj4gICAgICAgICAgZm9y IChpID0gMDsgaSA8IDY1NTM2OyArK2kpIHsKPj4gICAgICAgICAgICAgIHQuaSA9IGhhbGYyZmxv YXQoaSwgJnMtPmgyZl90YWJsZXMpOwo+PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9mZmxjbXMy LmMgYi9saWJhdmNvZGVjL2ZmbGNtczIuYwo+PiBpbmRleCBmZDM3MGZiMzEwLi41NDQzZjE3OGJj IDEwMDY0NAo+PiAtLS0gYS9saWJhdmNvZGVjL2ZmbGNtczIuYwo+PiArKysgYi9saWJhdmNvZGVj L2ZmbGNtczIuYwo+PiBAQCAtMTcsNyArMTcsNiBAQAo+PiAgICogRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQo+PiAwMjExMC0xMzAx IFVTQQo+PiAgICovCj4+Cj4+IC0jaW5jbHVkZSAibGliYXZ1dGlsL2NvbG9yX3V0aWxzLmgiCj4+ ICAjaW5jbHVkZSAibGliYXZ1dGlsL2NzcC5oIgo+Pgo+PiAgI2luY2x1ZGUgImZmbGNtczIuaCIK Pj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvcG5nZW5jLmMgYi9saWJhdmNvZGVjL3BuZ2VuYy5j Cj4+IGluZGV4IDIzOTMxNjFjM2IuLmFjMjdlZWJmM2EgMTAwNjQ0Cj4+IC0tLSBhL2xpYmF2Y29k ZWMvcG5nZW5jLmMKPj4gKysrIGIvbGliYXZjb2RlYy9wbmdlbmMuYwo+PiBAQCAtMjksNyArMjks NiBAQAo+PiAgI2luY2x1ZGUgInpsaWJfd3JhcHBlci5oIgo+Pgo+PiAgI2luY2x1ZGUgImxpYmF2 dXRpbC9hdmFzc2VydC5oIgo+PiAtI2luY2x1ZGUgImxpYmF2dXRpbC9jb2xvcl91dGlscy5oIgo+ PiAgI2luY2x1ZGUgImxpYmF2dXRpbC9jcmMuaCIKPj4gICNpbmNsdWRlICJsaWJhdnV0aWwvY3Nw LmgiCj4+ICAjaW5jbHVkZSAibGliYXZ1dGlsL2xpYm0uaCIKPj4gQEAgLTMxNyw3ICszMTYsNyBA QCBzdGF0aWMgaW50IHBuZ19nZXRfY2hybShlbnVtIEFWQ29sb3JQcmltYXJpZXMgcHJpbSwKPj4g dWludDhfdCAqYnVmKQo+Pgo+PiAgc3RhdGljIGludCBwbmdfZ2V0X2dhbWEoZW51bSBBVkNvbG9y VHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyB0cmMsIHVpbnQ4X3QKPj4gKmJ1ZikKPj4gIHsKPj4gLSAg ICBkb3VibGUgZ2FtbWEgPSBhdnByaXZfZ2V0X2dhbW1hX2Zyb21fdHJjKHRyYyk7Cj4+ICsgICAg ZG91YmxlIGdhbW1hID0gYXZfY3NwX2FwcHJveGltYXRlX3RyY19nYW1tYSh0cmMpOwo+PiAgICAg IGlmIChnYW1tYSA8PSAxZS02KQo+PiAgICAgICAgICByZXR1cm4gMDsKPj4KPj4gZGlmZiAtLWdp dCBhL2xpYmF2Zm9ybWF0L21vdmVuYy5jIGIvbGliYXZmb3JtYXQvbW92ZW5jLmMKPj4gaW5kZXgg OGQzMTMxNzgzOC4uNjE4MmRjN2Y1OCAxMDA2NDQKPj4gLS0tIGEvbGliYXZmb3JtYXQvbW92ZW5j LmMKPj4gKysrIGIvbGliYXZmb3JtYXQvbW92ZW5jLmMKPj4gQEAgLTQ3LDYgKzQ3LDcgQEAKPj4g ICNpbmNsdWRlICJpbnRlcm5hbC5oIgo+PiAgI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5o Igo+PiAgI2luY2x1ZGUgImxpYmF2dXRpbC9jaGFubmVsX2xheW91dC5oIgo+PiArI2luY2x1ZGUg ImxpYmF2dXRpbC9jc3AuaCIKPj4gICNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZmxvYXQuaCIKPj4g ICNpbmNsdWRlICJsaWJhdnV0aWwvbWF0aGVtYXRpY3MuaCIKPj4gICNpbmNsdWRlICJsaWJhdnV0 aWwvbGlibS5oIgo+PiBAQCAtNTYsNyArNTcsNiBAQAo+PiAgI2luY2x1ZGUgImxpYmF2dXRpbC9z dGVyZW8zZC5oIgo+PiAgI2luY2x1ZGUgImxpYmF2dXRpbC90aW1lY29kZS5oIgo+PiAgI2luY2x1 ZGUgImxpYmF2dXRpbC9kb3ZpX21ldGEuaCIKPj4gLSNpbmNsdWRlICJsaWJhdnV0aWwvY29sb3Jf dXRpbHMuaCIKPj4gICNpbmNsdWRlICJsaWJhdnV0aWwvdXVpZC5oIgo+PiAgI2luY2x1ZGUgImhl dmMuaCIKPj4gICNpbmNsdWRlICJydHBlbmMuaCIKPj4gQEAgLTIwMTEsOSArMjAxMSw4IEBAIHN0 YXRpYyBpbnQgbW92X3dyaXRlX3Bhc3BfdGFnKEFWSU9Db250ZXh0ICpwYiwKPj4gTU9WVHJhY2sg KnRyYWNrKQo+PiAgc3RhdGljIGludCBtb3Zfd3JpdGVfZ2FtYV90YWcoQVZGb3JtYXRDb250ZXh0 ICpzLCBBVklPQ29udGV4dCAqcGIsCj4+IE1PVlRyYWNrICp0cmFjaywgZG91YmxlIGdhbW1hKQo+ PiAgewo+PiAgICAgIHVpbnQzMl90IGdhbWEgPSAwOwo+PiAtICAgIGlmIChnYW1tYSA8PSAwLjAp IHsKPj4gLSAgICAgICAgZ2FtbWEgPSBhdnByaXZfZ2V0X2dhbW1hX2Zyb21fdHJjKHRyYWNrLT5w YXItPmNvbG9yX3RyYyk7Cj4+IC0gICAgfQo+PiArICAgIGlmIChnYW1tYSA8PSAwLjApCj4+ICsg ICAgICAgIGdhbW1hID0gYXZfY3NwX2FwcHJveGltYXRlX3RyY19nYW1tYSh0cmFjay0+cGFyLT5j b2xvcl90cmMpOwo+PiAgICAgIGF2X2xvZyhzLCBBVl9MT0dfREVCVUcsICJnYW1tYSB2YWx1ZSAl Z1xuIiwgZ2FtbWEpOwo+Pgo+PiAgICAgIGlmIChnYW1tYSA+IDFlLTYpIHsKPj4gZGlmZiAtLWdp dCBhL2xpYmF2dXRpbC9NYWtlZmlsZSBiL2xpYmF2dXRpbC9NYWtlZmlsZQo+PiBpbmRleCAyOWIw NjY2NWY1Li5kYzkwMTJmOWE4IDEwMDY0NAo+PiAtLS0gYS9saWJhdnV0aWwvTWFrZWZpbGUKPj4g KysrIGIvbGliYXZ1dGlsL01ha2VmaWxlCj4+IEBAIC0xMTQsNyArMTE0LDYgQEAgT0JKUyA9IGFk bGVyMzIubwo+PiAgICAgICAgICAgICAgICAgIFwKPj4gICAgICAgICBjYXN0NS5vICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gICAg ICAgICBjYW1lbGxpYS5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPj4gICAgICAgICBjaGFubmVsX2xheW91dC5vICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICBjb2xvcl91dGls cy5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK Pj4gICAgICAgICBjcHUubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPj4gICAgICAgICBjcmMubyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gICAgICAgICBjc3Au byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKPj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9jb2xvcl91dGlscy5jIGIvbGliYXZ1dGls L2NvbG9yX3V0aWxzLmMKPj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDVlMjIx ZmI3OTguLjAwMDAwMDAwMDAKPj4gLS0tIGEvbGliYXZ1dGlsL2NvbG9yX3V0aWxzLmMKPj4gKysr IC9kZXYvbnVsbAo+PiBAQCAtMSwyMzQgKzAsMCBAQAo+PiAtLyoKPj4gLSAqIENvcHlyaWdodCAo YykgMjAxNSBLZXZpbiBXaGVhdGxleSA8a2V2aW4uai53aGVhdGxleUBnbWFpbC5jb20+Cj4+IC0g Kgo+PiAtICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+PiAtICoKPj4gLSAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPj4gLSAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKPj4gLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlcgo+PiAtICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+IC0gKgo+PiAtICogRkZtcGVnIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+IC0gKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zgo+PiAtICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKPj4gLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCj4+IC0gKgo+PiAtICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+PiAtICogTGljZW5zZSBhbG9u ZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+PiAtICog Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u LCBNQQo+PiAwMjExMC0xMzAxIFVTQQo+PiAtICovCj4+IC0KPj4gLSNpbmNsdWRlIDxzdGRkZWYu aD4KPj4gLSNpbmNsdWRlIDxtYXRoLmg+Cj4+IC0KPj4gLSNpbmNsdWRlICJsaWJhdnV0aWwvY29s b3JfdXRpbHMuaCIKPj4gLSNpbmNsdWRlICJsaWJhdnV0aWwvcGl4Zm10LmgiCj4+IC0KPj4gLWRv dWJsZSBhdnByaXZfZ2V0X2dhbW1hX2Zyb21fdHJjKGVudW0gQVZDb2xvclRyYW5zZmVyQ2hhcmFj dGVyaXN0aWMgdHJjKQo+PiAtewo+PiAtICAgIGRvdWJsZSBnYW1tYTsKPj4gLSAgICBzd2l0Y2gg KHRyYykgewo+PiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19CVDcwOToKPj4gLSAgICAgICAgY2Fz ZSBBVkNPTF9UUkNfU01QVEUxNzBNOgo+PiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19TTVBURTI0 ME06Cj4+IC0gICAgICAgIGNhc2UgQVZDT0xfVFJDX0JUMTM2MV9FQ0c6Cj4+IC0gICAgICAgIGNh c2UgQVZDT0xfVFJDX0JUMjAyMF8xMDoKPj4gLSAgICAgICAgY2FzZSBBVkNPTF9UUkNfQlQyMDIw XzEyOgo+PiAtICAgICAgICAgICAgLyogdGhlc2Ugc2hhcmUgYSBzZWdtZW50ZWQgVFJDLCBidXQg Z2FtbWEgMS45NjEgaXMgYSBjbG9zZQo+PiAtICAgICAgICAgICAgICBhcHByb3hpbWF0aW9uLCBh bmQgYWxzbyBtb3JlIGNvcnJlY3QgZm9yIGRlY29kaW5nIGNvbnRlbnQKPj4gKi8KPj4gLSAgICAg ICAgICAgIGdhbW1hID0gMS45NjE7Cj4+IC0gICAgICAgICAgICBicmVhazsKPj4gLSAgICAgICAg Y2FzZSBBVkNPTF9UUkNfR0FNTUEyMjoKPj4gLSAgICAgICAgY2FzZSBBVkNPTF9UUkNfSUVDNjE5 NjZfMl8xOgo+PiAtICAgICAgICAgICAgZ2FtbWEgPSAyLjI7Cj4+IC0gICAgICAgICAgICBicmVh azsKPj4gLSAgICAgICAgY2FzZSBBVkNPTF9UUkNfR0FNTUEyODoKPj4gLSAgICAgICAgICAgIGdh bW1hID0gMi44Owo+PiAtICAgICAgICAgICAgYnJlYWs7Cj4+IC0gICAgICAgIGNhc2UgQVZDT0xf VFJDX0xJTkVBUjoKPj4gLSAgICAgICAgICAgIGdhbW1hID0gMS4wOwo+PiAtICAgICAgICAgICAg YnJlYWs7Cj4+IC0gICAgICAgIGRlZmF1bHQ6Cj4+IC0gICAgICAgICAgICBnYW1tYSA9IDAuMDsg Ly8gVW5rbm93biB2YWx1ZSByZXByZXNlbnRhdGlvbgo+PiAtICAgIH0KPj4gLSAgICByZXR1cm4g Z2FtbWE7Cj4+IC19Cj4+IC0KPj4gLSNkZWZpbmUgQlQ3MDlfYWxwaGEgMS4wOTkyOTY4MjY4MDk0 NDIKPj4gLSNkZWZpbmUgQlQ3MDlfYmV0YSAwLjAxODA1Mzk2ODUxMDgwNwo+PiAtCj4+IC1zdGF0 aWMgZG91YmxlIGF2cHJpdl90cmNfYnQ3MDkoZG91YmxlIExjKQo+PiAtewo+PiAtICAgIGNvbnN0 IGRvdWJsZSBhID0gQlQ3MDlfYWxwaGE7Cj4+IC0gICAgY29uc3QgZG91YmxlIGIgPSBCVDcwOV9i ZXRhOwo+PiAtCj4+IC0gICAgcmV0dXJuICgwLjAgPiBMYykgPyAwLjAKPj4gLSAgICAgICAgIDog KCAgYiA+IExjKSA/IDQuNTAwICogTGMKPj4gLSAgICAgICAgIDogICAgICAgICAgICAgIGEgKiBw b3coTGMsIDAuNDUpIC0gKGEgLSAxLjApOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgZG91YmxlIGF2 cHJpdl90cmNfZ2FtbWEyMihkb3VibGUgTGMpCj4+IC17Cj4+IC0gICAgcmV0dXJuICgwLjAgPiBM YykgPyAwLjAgOiBwb3coTGMsIDEuMC8gMi4yKTsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGRvdWJs ZSBhdnByaXZfdHJjX2dhbW1hMjgoZG91YmxlIExjKQo+PiAtewo+PiAtICAgIHJldHVybiAoMC4w ID4gTGMpID8gMC4wIDogcG93KExjLCAxLjAvIDIuOCk7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBk b3VibGUgYXZwcml2X3RyY19zbXB0ZTI0ME0oZG91YmxlIExjKQo+PiAtewo+PiAtICAgIGNvbnN0 IGRvdWJsZSBhID0gMS4xMTE1Owo+PiAtICAgIGNvbnN0IGRvdWJsZSBiID0gMC4wMjI4Owo+PiAt Cj4+IC0gICAgcmV0dXJuICgwLjAgPiBMYykgPyAwLjAKPj4gLSAgICAgICAgIDogKCAgYiA+IExj KSA/IDQuMDAwICogTGMKPj4gLSAgICAgICAgIDogICAgICAgICAgICAgIGEgKiBwb3coTGMsIDAu NDUpIC0gKGEgLSAxLjApOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgZG91YmxlIGF2cHJpdl90cmNf bGluZWFyKGRvdWJsZSBMYykKPj4gLXsKPj4gLSAgICByZXR1cm4gTGM7Cj4+IC19Cj4+IC0KPj4g LXN0YXRpYyBkb3VibGUgYXZwcml2X3RyY19sb2coZG91YmxlIExjKQo+PiAtewo+PiAtICAgIHJl dHVybiAoMC4wMSA+IExjKSA/IDAuMCA6IDEuMCArIGxvZzEwKExjKSAvIDIuMDsKPj4gLX0KPj4g LQo+PiAtc3RhdGljIGRvdWJsZSBhdnByaXZfdHJjX2xvZ19zcXJ0KGRvdWJsZSBMYykKPj4gLXsK Pj4gLSAgICAvLyBzcXJ0KDEwKSAvIDEwMDAKPj4gLSAgICByZXR1cm4gKDAuMDAzMTYyMjc3NjYg PiBMYykgPyAwLjAgOiAxLjAgKyBsb2cxMChMYykgLyAyLjU7Cj4+IC19Cj4+IC0KPj4gLXN0YXRp YyBkb3VibGUgYXZwcml2X3RyY19pZWM2MTk2Nl8yXzQoZG91YmxlIExjKQo+PiAtewo+PiAtICAg IGNvbnN0IGRvdWJsZSBhID0gQlQ3MDlfYWxwaGE7Cj4+IC0gICAgY29uc3QgZG91YmxlIGIgPSBC VDcwOV9iZXRhOwo+PiAtCj4+IC0gICAgcmV0dXJuICgtYiA+PSBMYykgPyAtYSAqIHBvdygtTGMs IDAuNDUpICsgKGEgLSAxLjApCj4+IC0gICAgICAgICA6ICggYiA+ICBMYykgPyA0LjUwMCAqIExj Cj4+IC0gICAgICAgICA6ICAgICAgICAgICAgICAgYSAqIHBvdyggTGMsIDAuNDUpIC0gKGEgLSAx LjApOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgZG91YmxlIGF2cHJpdl90cmNfYnQxMzYxKGRvdWJs ZSBMYykKPj4gLXsKPj4gLSAgICBjb25zdCBkb3VibGUgYSA9IEJUNzA5X2FscGhhOwo+PiAtICAg IGNvbnN0IGRvdWJsZSBiID0gQlQ3MDlfYmV0YTsKPj4gLQo+PiAtICAgIHJldHVybiAoLTAuMDA0 NSA+PSBMYykgPyAtKGEgKiBwb3coLTQuMCAqIExjLCAwLjQ1KSArIChhIC0gMS4wKSkgLwo+PiA0 LjAKPj4gLSAgICAgICAgIDogKCBiID4gIExjKSA/IDQuNTAwICogTGMKPj4gLSAgICAgICAgIDog ICAgICAgICAgICAgICBhICogcG93KCBMYywgMC40NSkgLSAoYSAtIDEuMCk7Cj4+IC19Cj4+IC0K Pj4gLXN0YXRpYyBkb3VibGUgYXZwcml2X3RyY19pZWM2MTk2Nl8yXzEoZG91YmxlIExjKQo+PiAt ewo+PiAtICAgIGNvbnN0IGRvdWJsZSBhID0gMS4wNTU7Cj4+IC0gICAgY29uc3QgZG91YmxlIGIg PSAwLjAwMzEzMDg7Cj4+IC0KPj4gLSAgICByZXR1cm4gKDAuMCA+IExjKSA/IDAuMAo+PiAtICAg ICAgICAgOiAoICBiID4gTGMpID8gMTIuOTIgKiBMYwo+PiAtICAgICAgICAgOiAgICAgICAgICAg ICAgYSAqIHBvdyhMYywgMS4wICAvIDIuNCkgLSAoYSAtIDEuMCk7Cj4+IC19Cj4+IC0KPj4gLXN0 YXRpYyBkb3VibGUgYXZwcml2X3RyY19zbXB0ZV9zdDIwODQoZG91YmxlIExjKQo+PiAtewo+PiAt ICAgIGNvbnN0IGRvdWJsZSBjMSA9ICAgICAgICAgMzQyNC4wIC8gNDA5Ni4wOyAvLyBjMy1jMiAr IDEKPj4gLSAgICBjb25zdCBkb3VibGUgYzIgPSAgMzIuMCAqIDI0MTMuMCAvIDQwOTYuMDsKPj4g LSAgICBjb25zdCBkb3VibGUgYzMgPSAgMzIuMCAqIDIzOTIuMCAvIDQwOTYuMDsKPj4gLSAgICBj b25zdCBkb3VibGUgbSAgPSAxMjguMCAqIDI1MjMuMCAvIDQwOTYuMDsKPj4gLSAgICBjb25zdCBk b3VibGUgbiAgPSAgMC4yNSAqIDI2MTAuMCAvIDQwOTYuMDsKPj4gLSAgICBjb25zdCBkb3VibGUg TCAgPSBMYyAvIDEwMDAwLjA7Cj4+IC0gICAgY29uc3QgZG91YmxlIExuID0gcG93KEwsIG4pOwo+ PiAtCj4+IC0gICAgcmV0dXJuICgwLjAgPiBMYykgPyAwLjAKPj4gLSAgICAgICAgIDogICAgICAg ICAgICAgIHBvdygoYzEgKyBjMiAqIExuKSAvICgxLjAgKyBjMyAqIExuKSwgbSk7Cj4+IC0KPj4g LX0KPj4gLQo+PiAtc3RhdGljIGRvdWJsZSBhdnByaXZfdHJjX3NtcHRlX3N0NDI4XzEoZG91Ymxl IExjKQo+PiAtewo+PiAtICAgIHJldHVybiAoMC4wID4gTGMpID8gMC4wCj4+IC0gICAgICAgICA6 ICAgICAgICAgICAgICBwb3coNDguMCAqIExjIC8gNTIuMzcsIDEuMCAvIDIuNik7Cj4+IC19Cj4+ IC0KPj4gLQo+PiAtc3RhdGljIGRvdWJsZSBhdnByaXZfdHJjX2FyaWJfc3RkX2I2Nyhkb3VibGUg TGMpIHsKPj4gLSAgICAvLyBUaGUgZnVuY3Rpb24gdXNlcyB0aGUgZGVmaW5pdGlvbiBmcm9tIEhF VkMsIHdoaWNoIGFzc3VtZXMgdGhhdCB0aGUKPj4gcGVhawo+PiAtICAgIC8vIHdoaXRlIGlzIGlu cHV0IGxldmVsID0gMS4gKHRoaXMgaXMgZXF1aXZhbGVudCB0byBzY2FsaW5nIEUgPSBMYyAqCj4+ IDEyIGFuZAo+PiAtICAgIC8vIHVzaW5nIHRoZSBkZWZpbml0aW9uIGZyb20gdGhlIEFSSUIgU1RE LUI2NyBzcGVjKQo+PiAtICAgIGNvbnN0IGRvdWJsZSBhID0gMC4xNzg4MzI3NzsKPj4gLSAgICBj b25zdCBkb3VibGUgYiA9IDAuMjg0NjY4OTI7Cj4+IC0gICAgY29uc3QgZG91YmxlIGMgPSAwLjU1 OTkxMDczOwo+PiAtICAgIHJldHVybiAoMC4wID4gTGMpID8gMC4wIDoKPj4gLSAgICAgICAgKExj IDw9IDEuMCAvIDEyLjAgPyBzcXJ0KDMuMCAqIExjKSA6IGEgKiBsb2coMTIuMCAqIExjIC0gYikg KyBjKTsKPj4gLX0KPj4gLQo+PiAtYXZwcml2X3RyY19mdW5jdGlvbiBhdnByaXZfZ2V0X3RyY19m dW5jdGlvbl9mcm9tX3RyYyhlbnVtCj4+IEFWQ29sb3JUcmFuc2ZlckNoYXJhY3RlcmlzdGljIHRy YykKPj4gLXsKPj4gLSAgICBhdnByaXZfdHJjX2Z1bmN0aW9uIGZ1bmMgPSBOVUxMOwo+PiAtICAg IHN3aXRjaCAodHJjKSB7Cj4+IC0gICAgICAgIGNhc2UgQVZDT0xfVFJDX0JUNzA5Ogo+PiAtICAg ICAgICBjYXNlIEFWQ09MX1RSQ19TTVBURTE3ME06Cj4+IC0gICAgICAgIGNhc2UgQVZDT0xfVFJD X0JUMjAyMF8xMDoKPj4gLSAgICAgICAgY2FzZSBBVkNPTF9UUkNfQlQyMDIwXzEyOgo+PiAtICAg ICAgICAgICAgZnVuYyA9IGF2cHJpdl90cmNfYnQ3MDk7Cj4+IC0gICAgICAgICAgICBicmVhazsK Pj4gLQo+PiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19HQU1NQTIyOgo+PiAtICAgICAgICAgICAg ZnVuYyA9IGF2cHJpdl90cmNfZ2FtbWEyMjsKPj4gLSAgICAgICAgICAgIGJyZWFrOwo+PiAtICAg ICAgICBjYXNlIEFWQ09MX1RSQ19HQU1NQTI4Ogo+PiAtICAgICAgICAgICAgZnVuYyA9IGF2cHJp dl90cmNfZ2FtbWEyODsKPj4gLSAgICAgICAgICAgIGJyZWFrOwo+PiAtCj4+IC0gICAgICAgIGNh c2UgQVZDT0xfVFJDX1NNUFRFMjQwTToKPj4gLSAgICAgICAgICAgIGZ1bmMgPSBhdnByaXZfdHJj X3NtcHRlMjQwTTsKPj4gLSAgICAgICAgICAgIGJyZWFrOwo+PiAtCj4+IC0gICAgICAgIGNhc2Ug QVZDT0xfVFJDX0xJTkVBUjoKPj4gLSAgICAgICAgICAgIGZ1bmMgPSBhdnByaXZfdHJjX2xpbmVh cjsKPj4gLSAgICAgICAgICAgIGJyZWFrOwo+PiAtCj4+IC0gICAgICAgIGNhc2UgQVZDT0xfVFJD X0xPRzoKPj4gLSAgICAgICAgICAgIGZ1bmMgPSBhdnByaXZfdHJjX2xvZzsKPj4gLSAgICAgICAg ICAgIGJyZWFrOwo+PiAtCj4+IC0gICAgICAgIGNhc2UgQVZDT0xfVFJDX0xPR19TUVJUOgo+PiAt ICAgICAgICAgICAgZnVuYyA9IGF2cHJpdl90cmNfbG9nX3NxcnQ7Cj4+IC0gICAgICAgICAgICBi cmVhazsKPj4gLQo+PiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19JRUM2MTk2Nl8yXzQ6Cj4+IC0g ICAgICAgICAgICBmdW5jID0gYXZwcml2X3RyY19pZWM2MTk2Nl8yXzQ7Cj4+IC0gICAgICAgICAg ICBicmVhazsKPj4gLQo+PiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19CVDEzNjFfRUNHOgo+PiAt ICAgICAgICAgICAgZnVuYyA9IGF2cHJpdl90cmNfYnQxMzYxOwo+PiAtICAgICAgICAgICAgYnJl YWs7Cj4+IC0KPj4gLSAgICAgICAgY2FzZSBBVkNPTF9UUkNfSUVDNjE5NjZfMl8xOgo+PiAtICAg ICAgICAgICAgZnVuYyA9IGF2cHJpdl90cmNfaWVjNjE5NjZfMl8xOwo+PiAtICAgICAgICAgICAg YnJlYWs7Cj4+IC0KPj4gLSAgICAgICAgY2FzZSBBVkNPTF9UUkNfU01QVEVTVDIwODQ6Cj4+IC0g ICAgICAgICAgICBmdW5jID0gYXZwcml2X3RyY19zbXB0ZV9zdDIwODQ7Cj4+IC0gICAgICAgICAg ICBicmVhazsKPj4gLQo+PiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19TTVBURVNUNDI4XzE6Cj4+ IC0gICAgICAgICAgICBmdW5jID0gYXZwcml2X3RyY19zbXB0ZV9zdDQyOF8xOwo+PiAtICAgICAg ICAgICAgYnJlYWs7Cj4+IC0KPj4gLSAgICAgICAgY2FzZSBBVkNPTF9UUkNfQVJJQl9TVERfQjY3 Ogo+PiAtICAgICAgICAgICAgZnVuYyA9IGF2cHJpdl90cmNfYXJpYl9zdGRfYjY3Owo+PiAtICAg ICAgICAgICAgYnJlYWs7Cj4+IC0KPj4gLSAgICAgICAgY2FzZSBBVkNPTF9UUkNfUkVTRVJWRUQw Ogo+PiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19VTlNQRUNJRklFRDoKPj4gLSAgICAgICAgY2Fz ZSBBVkNPTF9UUkNfUkVTRVJWRUQ6Cj4+IC0gICAgICAgIGRlZmF1bHQ6Cj4+IC0gICAgICAgICAg ICBicmVhazsKPj4gLSAgICB9Cj4+IC0gICAgcmV0dXJuIGZ1bmM7Cj4+IC19Cj4+IGRpZmYgLS1n aXQgYS9saWJhdnV0aWwvY29sb3JfdXRpbHMuaCBiL2xpYmF2dXRpbC9jb2xvcl91dGlscy5oCj4+ IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCA5NTI5MDA2NDUyLi4wMDAwMDAwMDAw Cj4+IC0tLSBhL2xpYmF2dXRpbC9jb2xvcl91dGlscy5oCj4+ICsrKyAvZGV2L251bGwKPj4gQEAg LTEsNTYgKzAsMCBAQAo+PiAtLyoKPj4gLSAqIENvcHlyaWdodCAoYykgMjAxNSBLZXZpbiBXaGVh dGxleSA8a2V2aW4uai53aGVhdGxleUBnbWFpbC5jb20+Cj4+IC0gKgo+PiAtICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgo+PiAtICoKPj4gLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPj4gLSAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4gLSAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+PiAt ICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCj4+IC0gKgo+PiAtICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+IC0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiAtICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK Pj4gLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ IC0gKgo+PiAtICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYwo+PiAtICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+PiAtICogRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQo+PiAwMjExMC0xMzAx IFVTQQo+PiAtICovCj4+IC0KPj4gLSNpZm5kZWYgQVZVVElMX0NPTE9SX1VUSUxTX0gKPj4gLSNk ZWZpbmUgQVZVVElMX0NPTE9SX1VUSUxTX0gKPj4gLQo+PiAtCj4+IC0jaW5jbHVkZSAibGliYXZ1 dGlsL3BpeGZtdC5oIgo+PiAtCj4+IC0vKioKPj4gLSAqIERldGVybWluZSBhIHN1aXRhYmxlICdn YW1tYScgdmFsdWUgdG8gbWF0Y2ggdGhlIHN1cHBsaWVkCj4+IC0gKiBBVkNvbG9yVHJhbnNmZXJD aGFyYWN0ZXJpc3RpYy4KPj4gLSAqCj4+IC0gKiBTZWUgQXBwbGUgVGVjaG5pY2FsIE5vdGUgVE4y MjU3Cj4+IChodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9tYWMvdGVjaG5vdGVz L3RuMjI1Ny9faW5kZXguaHRtbCkKPj4gLSAqCj4+IC0gKiBAcmV0dXJuIFdpbGwgcmV0dXJuIGFu IGFwcHJveGltYXRpb24gdG8gdGhlIHNpbXBsZSBnYW1tYSBmdW5jdGlvbgo+PiBtYXRjaGluZwo+ PiAtICogICAgICAgICB0aGUgc3VwcGxpZWQgVHJhbnNmZXIgQ2hhcmFjdGVyaXN0aWMsIFdpbGwg cmV0dXJuIDAuMCBmb3IgYW55Cj4+IC0gKiAgICAgICAgIHdlIGNhbm5vdCByZWFzb25hYmx5IG1h dGNoIGFnYWluc3QuCj4+IC0gKi8KPj4gLWRvdWJsZSBhdnByaXZfZ2V0X2dhbW1hX2Zyb21fdHJj KGVudW0gQVZDb2xvclRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMgdHJjKTsKPj4gLQo+PiAtCj4+IC10 eXBlZGVmIGRvdWJsZSAoKmF2cHJpdl90cmNfZnVuY3Rpb24pKGRvdWJsZSk7Cj4+IC0KPj4gLS8q Kgo+PiAtICogRGV0ZXJtaW5lIHRoZSBmdW5jdGlvbiBuZWVkZWQgdG8gYXBwbHkgdGhlIGdpdmVu Cj4+IC0gKiBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyB0byBsaW5lYXIgaW5wdXQuCj4+ IC0gKgo+PiAtICogVGhlIGZ1bmN0aW9uIHJldHVybmVkIHNob3VsZCBleHBlY3QgYSBub21pbmFs IGRvbWFpbiBhbmQgcmFuZ2Ugb2YKPj4gWzAuMC0xLjBdCj4+IC0gKiB2YWx1ZXMgb3V0c2lkZSBv ZiB0aGlzIHJhbmdlIG1heWJlIHZhbGlkIGRlcGVuZGluZyBvbiB0aGUgY2hvc2VuCj4+IC0gKiBj aGFyYWN0ZXJpc3RpYyBmdW5jdGlvbi4KPj4gLSAqCj4+IC0gKiBAcmV0dXJuIFdpbGwgcmV0dXJu IHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIG1hdGNoaW5nIHRoZQo+PiAtICogICAgICAgICBzdXBw bGllZCBUcmFuc2ZlciBDaGFyYWN0ZXJpc3RpYy4gSWYgdW5zcGVjaWZpZWQgd2lsbAo+PiAtICog ICAgICAgICByZXR1cm4gTlVMTDoKPj4gLSAqLwo+PiAtYXZwcml2X3RyY19mdW5jdGlvbiBhdnBy aXZfZ2V0X3RyY19mdW5jdGlvbl9mcm9tX3RyYyhlbnVtCj4+IEFWQ29sb3JUcmFuc2ZlckNoYXJh Y3RlcmlzdGljIHRyYyk7Cj4+IC0KPj4gLSNlbmRpZgo+PiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGls L2NzcC5jIGIvbGliYXZ1dGlsL2NzcC5jCj4+IGluZGV4IDk4ZmM4M2MxZGEuLjdlZjgyMmM2MGIg MTAwNjQ0Cj4+IC0tLSBhL2xpYmF2dXRpbC9jc3AuYwo+PiArKysgYi9saWJhdnV0aWwvY3NwLmMK Pj4gQEAgLTEsNSArMSw4IEBACj4+ICAvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDE1IEtldmlu IFdoZWF0bGV5IDxrZXZpbi5qLndoZWF0bGV5QGdtYWlsLmNvbT4KPj4gICAqIENvcHlyaWdodCAo YykgMjAxNiBSb25hbGQgUy4gQnVsdGplIDxyc2J1bHRqZUBnbWFpbC5jb20+Cj4+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMjMgTGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KPj4gKyAqCj4+ICAg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4+ICAgKgo+PiAgICogRkZtcGVnIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+PiBAQCAtMjEsOSAr MjQsMTEgQEAKPj4gICAqIEBmaWxlIENvbG9yc3BhY2UgZnVuY3Rpb25zIGZvciBsaWJhdnV0aWwK Pj4gICAqIEBhdXRob3IgUm9uYWxkIFMuIEJ1bHRqZSA8cnNidWx0amVAZ21haWwuY29tPgo+PiAg ICogQGF1dGhvciBMZW8gSXplbiA8bGVvLml6ZW5AZ21haWwuY29tPgo+PiArICogQGF1dGhvciBL ZXZpbiBXaGVhdGxleSA8a2V2aW4uai53aGVhdGxleUBnbWFpbC5jb20+Cj4+ICAgKi8KPj4KPj4g ICNpbmNsdWRlIDxzdGRsaWIuaD4KPj4gKyNpbmNsdWRlIDxtYXRoLmg+Cj4+Cj4+ICAjaW5jbHVk ZSAiYXR0cmlidXRlcy5oIgo+PiAgI2luY2x1ZGUgImNzcC5oIgo+PiBAQCAtMTI2LDMgKzEzMSwx NzAgQEAgZW51bSBBVkNvbG9yUHJpbWFyaWVzCj4+IGF2X2NzcF9wcmltYXJpZXNfaWRfZnJvbV9k ZXNjKGNvbnN0IEFWQ29sb3JQcmltYXJpZXNEZXNjICoKPj4KPj4gICAgICByZXR1cm4gQVZDT0xf UFJJX1VOU1BFQ0lGSUVEOwo+PiAgfQo+PiArCj4+ICtzdGF0aWMgY29uc3QgZG91YmxlIGFwcHJv eGltYXRlX2dhbW1hW0FWQ09MX1RSQ19OQl0gPSB7Cj4+ICsgICAgW0FWQ09MX1RSQ19CVDcwOV0g PSAxLjk2MSwKPj4gKyAgICBbQVZDT0xfVFJDX1NNUFRFMTcwTV0gPSAxLjk2MSwKPj4gKyAgICBb QVZDT0xfVFJDX1NNUFRFMjQwTV0gPSAxLjk2MSwKPj4gKyAgICBbQVZDT0xfVFJDX0JUMTM2MV9F Q0ddID0gMS45NjEsCj4+ICsgICAgW0FWQ09MX1RSQ19CVDIwMjBfMTBdID0gMS45NjEsCj4+ICsg ICAgW0FWQ09MX1RSQ19CVDIwMjBfMTJdID0gMS45NjEsCj4+ICsgICAgW0FWQ09MX1RSQ19HQU1N QTIyXSA9IDIuMiwKPj4gKyAgICBbQVZDT0xfVFJDX0lFQzYxOTY2XzJfMV0gPSAyLjIsCj4+ICsg ICAgW0FWQ09MX1RSQ19HQU1NQTI4XSA9IDIuOCwKPj4gKyAgICBbQVZDT0xfVFJDX0xJTkVBUl0g PSAxLjAsCj4+ICsgICAgW0FWQ09MX1RSQ19TTVBURTQyOF0gPSAyLjYsCj4+ICt9Owo+PiArCj4+ ICtkb3VibGUgYXZfY3NwX2FwcHJveGltYXRlX3RyY19nYW1tYShlbnVtIEFWQ29sb3JUcmFuc2Zl ckNoYXJhY3RlcmlzdGljCj4+IHRyYykKPj4gK3sKPj4gKyAgICBkb3VibGUgZ2FtbWE7Cj4+ICsg ICAgaWYgKHRyYyA+PSBBVkNPTF9UUkNfTkIpCj4+ICsgICAgICAgIHJldHVybiAwLjA7Cj4+ICsg ICAgZ2FtbWEgPSBhcHByb3hpbWF0ZV9nYW1tYVt0cmNdOwo+PiArICAgIGlmIChnYW1tYSA+IDAp Cj4+ICsgICAgICAgIHJldHVybiBnYW1tYTsKPj4gKyAgICByZXR1cm4gMC4wOwo+PiArfQo+PiAr Cj4+ICsjZGVmaW5lIEJUNzA5X2FscGhhIDEuMDk5Mjk2ODI2ODA5NDQyCj4+ICsjZGVmaW5lIEJU NzA5X2JldGEgMC4wMTgwNTM5Njg1MTA4MDcKPj4gKwo+PiArc3RhdGljIGRvdWJsZSB0cmNfYnQ3 MDkoZG91YmxlIExjKQo+PiArewo+PiArICAgIGNvbnN0IGRvdWJsZSBhID0gQlQ3MDlfYWxwaGE7 Cj4+ICsgICAgY29uc3QgZG91YmxlIGIgPSBCVDcwOV9iZXRhOwo+PiArCj4+ICsgICAgcmV0dXJu ICgwLjAgPiBMYykgPyAwLjAKPj4gKyAgICAgICAgIDogKCAgYiA+IExjKSA/IDQuNTAwICogTGMK Pj4gKyAgICAgICAgIDogICAgICAgICAgICAgIGEgKiBwb3coTGMsIDAuNDUpIC0gKGEgLSAxLjAp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgZG91YmxlIHRyY19nYW1tYTIyKGRvdWJsZSBMYykKPj4g K3sKPj4gKyAgICByZXR1cm4gKDAuMCA+IExjKSA/IDAuMCA6IHBvdyhMYywgMS4wLyAyLjIpOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgZG91YmxlIHRyY19nYW1tYTI4KGRvdWJsZSBMYykKPj4gK3sK Pj4gKyAgICByZXR1cm4gKDAuMCA+IExjKSA/IDAuMCA6IHBvdyhMYywgMS4wLyAyLjgpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgZG91YmxlIHRyY19zbXB0ZTI0ME0oZG91YmxlIExjKQo+PiArewo+ PiArICAgIGNvbnN0IGRvdWJsZSBhID0gMS4xMTE1Owo+PiArICAgIGNvbnN0IGRvdWJsZSBiID0g MC4wMjI4Owo+PiArCj4+ICsgICAgcmV0dXJuICgwLjAgPiBMYykgPyAwLjAKPj4gKyAgICAgICAg IDogKCAgYiA+IExjKSA/IDQuMDAwICogTGMKPj4gKyAgICAgICAgIDogICAgICAgICAgICAgIGEg KiBwb3coTGMsIDAuNDUpIC0gKGEgLSAxLjApOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgZG91Ymxl IHRyY19saW5lYXIoZG91YmxlIExjKQo+PiArewo+PiArICAgIHJldHVybiBMYzsKPj4gK30KPj4g Kwo+PiArc3RhdGljIGRvdWJsZSB0cmNfbG9nKGRvdWJsZSBMYykKPj4gK3sKPj4gKyAgICByZXR1 cm4gKDAuMDEgPiBMYykgPyAwLjAgOiAxLjAgKyBsb2cxMChMYykgLyAyLjA7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBkb3VibGUgdHJjX2xvZ19zcXJ0KGRvdWJsZSBMYykKPj4gK3sKPj4gKyAgICAv LyBzcXJ0KDEwKSAvIDEwMDAKPj4gKyAgICByZXR1cm4gKDAuMDAzMTYyMjc3NjYgPiBMYykgPyAw LjAgOiAxLjAgKyBsb2cxMChMYykgLyAyLjU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBkb3VibGUg dHJjX2llYzYxOTY2XzJfNChkb3VibGUgTGMpCj4+ICt7Cj4+ICsgICAgY29uc3QgZG91YmxlIGEg PSBCVDcwOV9hbHBoYTsKPj4gKyAgICBjb25zdCBkb3VibGUgYiA9IEJUNzA5X2JldGE7Cj4+ICsK Pj4gKyAgICByZXR1cm4gKC1iID49IExjKSA/IC1hICogcG93KC1MYywgMC40NSkgKyAoYSAtIDEu MCkKPj4gKyAgICAgICAgIDogKCBiID4gIExjKSA/IDQuNTAwICogTGMKPj4gKyAgICAgICAgIDog ICAgICAgICAgICAgICBhICogcG93KCBMYywgMC40NSkgLSAoYSAtIDEuMCk7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBkb3VibGUgdHJjX2J0MTM2MShkb3VibGUgTGMpCj4+ICt7Cj4+ICsgICAgY29u c3QgZG91YmxlIGEgPSBCVDcwOV9hbHBoYTsKPj4gKyAgICBjb25zdCBkb3VibGUgYiA9IEJUNzA5 X2JldGE7Cj4+ICsKPj4gKyAgICByZXR1cm4gKC0wLjAwNDUgPj0gTGMpID8gLShhICogcG93KC00 LjAgKiBMYywgMC40NSkgKyAoYSAtIDEuMCkpIC8KPj4gNC4wCj4+ICsgICAgICAgICA6ICggYiA+ ICBMYykgPyA0LjUwMCAqIExjCj4+ICsgICAgICAgICA6ICAgICAgICAgICAgICAgYSAqIHBvdygg TGMsIDAuNDUpIC0gKGEgLSAxLjApOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgZG91YmxlIHRyY19p ZWM2MTk2Nl8yXzEoZG91YmxlIExjKQo+PiArewo+PiArICAgIGNvbnN0IGRvdWJsZSBhID0gMS4w NTU7Cj4+ICsgICAgY29uc3QgZG91YmxlIGIgPSAwLjAwMzEzMDg7Cj4+ICsKPj4gKyAgICByZXR1 cm4gKDAuMCA+IExjKSA/IDAuMAo+PiArICAgICAgICAgOiAoICBiID4gTGMpID8gMTIuOTIgKiBM Ywo+PiArICAgICAgICAgOiAgICAgICAgICAgICAgYSAqIHBvdyhMYywgMS4wICAvIDIuNCkgLSAo YSAtIDEuMCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBkb3VibGUgdHJjX3NtcHRlX3N0MjA4NChk b3VibGUgTGMpCj4+ICt7Cj4+ICsgICAgY29uc3QgZG91YmxlIGMxID0gICAgICAgICAzNDI0LjAg LyA0MDk2LjA7IC8vIGMzLWMyICsgMQo+PiArICAgIGNvbnN0IGRvdWJsZSBjMiA9ICAzMi4wICog MjQxMy4wIC8gNDA5Ni4wOwo+PiArICAgIGNvbnN0IGRvdWJsZSBjMyA9ICAzMi4wICogMjM5Mi4w IC8gNDA5Ni4wOwo+PiArICAgIGNvbnN0IGRvdWJsZSBtICA9IDEyOC4wICogMjUyMy4wIC8gNDA5 Ni4wOwo+PiArICAgIGNvbnN0IGRvdWJsZSBuICA9ICAwLjI1ICogMjYxMC4wIC8gNDA5Ni4wOwo+ PiArICAgIGNvbnN0IGRvdWJsZSBMICA9IExjIC8gMTAwMDAuMDsKPj4gKyAgICBjb25zdCBkb3Vi bGUgTG4gPSBwb3coTCwgbik7Cj4+ICsKPj4gKyAgICByZXR1cm4gKDAuMCA+IExjKSA/IDAuMAo+ PiArICAgICAgICAgOiAgICAgICAgICAgICAgcG93KChjMSArIGMyICogTG4pIC8gKDEuMCArIGMz ICogTG4pLCBtKTsKPj4gKwo+PiArfQo+PiArCj4+ICtzdGF0aWMgZG91YmxlIHRyY19zbXB0ZV9z dDQyOF8xKGRvdWJsZSBMYykKPj4gK3sKPj4gKyAgICByZXR1cm4gKDAuMCA+IExjKSA/IDAuMAo+ PiArICAgICAgICAgOiAgICAgICAgICAgICAgcG93KDQ4LjAgKiBMYyAvIDUyLjM3LCAxLjAgLyAy LjYpOwo+PiArfQo+PiArCj4+ICsKPj4gK3N0YXRpYyBkb3VibGUgdHJjX2FyaWJfc3RkX2I2Nyhk b3VibGUgTGMpIHsKPj4gKyAgICAvLyBUaGUgZnVuY3Rpb24gdXNlcyB0aGUgZGVmaW5pdGlvbiBm cm9tIEhFVkMsIHdoaWNoIGFzc3VtZXMgdGhhdCB0aGUKPj4gcGVhawo+PiArICAgIC8vIHdoaXRl IGlzIGlucHV0IGxldmVsID0gMS4gKHRoaXMgaXMgZXF1aXZhbGVudCB0byBzY2FsaW5nIEUgPSBM YyAqCj4+IDEyIGFuZAo+PiArICAgIC8vIHVzaW5nIHRoZSBkZWZpbml0aW9uIGZyb20gdGhlIEFS SUIgU1RELUI2NyBzcGVjKQo+PiArICAgIGNvbnN0IGRvdWJsZSBhID0gMC4xNzg4MzI3NzsKPj4g KyAgICBjb25zdCBkb3VibGUgYiA9IDAuMjg0NjY4OTI7Cj4+ICsgICAgY29uc3QgZG91YmxlIGMg PSAwLjU1OTkxMDczOwo+PiArICAgIHJldHVybiAoMC4wID4gTGMpID8gMC4wIDoKPj4gKyAgICAg ICAgKExjIDw9IDEuMCAvIDEyLjAgPyBzcXJ0KDMuMCAqIExjKSA6IGEgKiBsb2coMTIuMCAqIExj IC0gYikgKyBjKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IGF2X2NzcF90cmNfZnVuY3Rp b24gdHJjX2Z1bmNzW0FWQ09MX1RSQ19OQl0gPSB7Cj4+ICsgICAgW0FWQ09MX1RSQ19CVDcwOV0g PSB0cmNfYnQ3MDksCj4+ICsgICAgW0FWQ09MX1RSQ19HQU1NQTIyXSA9IHRyY19nYW1tYTIyLAo+ PiArICAgIFtBVkNPTF9UUkNfR0FNTUEyOF0gPSB0cmNfZ2FtbWEyOCwKPj4gKyAgICBbQVZDT0xf VFJDX1NNUFRFMTcwTV0gPSB0cmNfYnQ3MDksCj4+ICsgICAgW0FWQ09MX1RSQ19TTVBURTI0ME1d ID0gdHJjX3NtcHRlMjQwTSwKPj4gKyAgICBbQVZDT0xfVFJDX0xJTkVBUl0gPSB0cmNfbGluZWFy LAo+PiArICAgIFtBVkNPTF9UUkNfTE9HXSA9IHRyY19sb2csCj4+ICsgICAgW0FWQ09MX1RSQ19M T0dfU1FSVF0gPSB0cmNfbG9nX3NxcnQsCj4+ICsgICAgW0FWQ09MX1RSQ19JRUM2MTk2Nl8yXzRd ID0gdHJjX2llYzYxOTY2XzJfNCwKPj4gKyAgICBbQVZDT0xfVFJDX0JUMTM2MV9FQ0ddID0gdHJj X2J0MTM2MSwKPj4gKyAgICBbQVZDT0xfVFJDX0lFQzYxOTY2XzJfMV0gPSB0cmNfaWVjNjE5NjZf Ml8xLAo+PiArICAgIFtBVkNPTF9UUkNfQlQyMDIwXzEwXSA9IHRyY19idDcwOSwKPj4gKyAgICBb QVZDT0xfVFJDX0JUMjAyMF8xMl0gPSB0cmNfYnQ3MDksCj4+ICsgICAgW0FWQ09MX1RSQ19TTVBU RTIwODRdID0gdHJjX3NtcHRlX3N0MjA4NCwKPj4gKyAgICBbQVZDT0xfVFJDX1NNUFRFNDI4XSA9 IHRyY19zbXB0ZV9zdDQyOF8xLAo+PiArICAgIFtBVkNPTF9UUkNfQVJJQl9TVERfQjY3XSA9IHRy Y19hcmliX3N0ZF9iNjcsCj4+ICt9Owo+PiArCj4+ICthdl9jc3BfdHJjX2Z1bmN0aW9uIGF2X2Nz cF90cmNfZnVuY19mcm9tX2lkKGVudW0KPj4gQVZDb2xvclRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMg dHJjKQo+PiArewo+PiArICAgIGF2X2NzcF90cmNfZnVuY3Rpb24gZnVuYzsKPj4gKyAgICBpZiAo dHJjID49IEFWQ09MX1RSQ19OQikKPj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4+ICsgICAgZnVu YyA9IHRyY19mdW5jc1t0cmNdOwo+PiArICAgIGlmICghZnVuYykKPj4gKyAgICAgICAgcmV0dXJu IE5VTEw7Cj4+ICsgICAgcmV0dXJuIGZ1bmM7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9saWJhdnV0 aWwvY3NwLmggYi9saWJhdnV0aWwvY3NwLmgKPj4gaW5kZXggMThlZjIwOGFkZi4uNzNiY2U1MmJj MCAxMDA2NDQKPj4gLS0tIGEvbGliYXZ1dGlsL2NzcC5oCj4+ICsrKyBiL2xpYmF2dXRpbC9jc3Au aAo+PiBAQCAtMSw1ICsxLDggQEAKPj4gIC8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgS2V2 aW4gV2hlYXRsZXkgPGtldmluLmoud2hlYXRsZXlAZ21haWwuY29tPgo+PiAgICogQ29weXJpZ2h0 IChjKSAyMDE2IFJvbmFsZCBTLiBCdWx0amUgPHJzYnVsdGplQGdtYWlsLmNvbT4KPj4gKyAqIENv cHlyaWdodCAoYykgMjAyMyBMZW8gSXplbiA8bGVvLml6ZW5AZ21haWwuY29tPgo+PiArICoKPj4g ICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPj4gICAqCj4+ICAgKiBGRm1wZWcgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4+IEBAIC0yOSw2 ICszMiw3IEBACj4+ICAgKiBAaW5ncm91cCBsYXZ1X21hdGhfY3NwCj4+ICAgKiBAYXV0aG9yIFJv bmFsZCBTLiBCdWx0amUgPHJzYnVsdGplQGdtYWlsLmNvbT4KPj4gICAqIEBhdXRob3IgTGVvIEl6 ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KPj4gKyAqIEBhdXRob3IgS2V2aW4gV2hlYXRsZXkgPGtl dmluLmoud2hlYXRsZXlAZ21haWwuY29tPgo+PiAgICovCj4+Cj4+ICAvKioKPj4gQEAgLTc2LDYg KzgwLDEyIEBAIHR5cGVkZWYgc3RydWN0IEFWQ29sb3JQcmltYXJpZXNEZXNjIHsKPj4gICAgICBB VlByaW1hcnlDb2VmZmljaWVudHMgcHJpbTsKPj4gIH0gQVZDb2xvclByaW1hcmllc0Rlc2M7Cj4+ Cj4+ICsvKioKPj4gKyAqIEZ1bmN0aW9uIHBvaW50ZXIgcmVwcmVzZW50aW5nIGEgZG91YmxlIC0+ IGRvdWJsZSB0cmFuc2ZlciBmdW5jdGlvbgo+PiB0aGF0IHBlcmZvcm1zCj4+ICsgKiBhbiBFT1RG IHRyYW5zZmVyIGludmVyc2lvbi4gVGhpcyBmdW5jdGlvbiBvdXRwdXRzIGxpbmVhciBsaWdodC4K Pj4gKyAqLwo+PiArdHlwZWRlZiBkb3VibGUgKCphdl9jc3BfdHJjX2Z1bmN0aW9uKShkb3VibGUp Owo+PiArCj4+ICAvKioKPj4gICAqIFJldHJpZXZlcyB0aGUgTHVtYSBjb2VmZmljaWVudHMgbmVj ZXNzYXJ5IHRvIGNvbnN0cnVjdCBhIGNvbnZlcnNpb24KPj4gbWF0cml4Cj4+ICAgKiBmcm9tIGFu IGVudW0gY29uc3RhbnQgZGVzY3JpYmluZyB0aGUgY29sb3JzcGFjZS4KPj4gQEAgLTEwNCw2ICsx MTQsMzUgQEAgY29uc3QgQVZDb2xvclByaW1hcmllc0Rlc2MKPj4gKmF2X2NzcF9wcmltYXJpZXNf ZGVzY19mcm9tX2lkKGVudW0gQVZDb2xvclByaW1hcmllcwo+PiAgICovCj4+ICBlbnVtIEFWQ29s b3JQcmltYXJpZXMgYXZfY3NwX3ByaW1hcmllc19pZF9mcm9tX2Rlc2MoY29uc3QKPj4gQVZDb2xv clByaW1hcmllc0Rlc2MgKnBybSk7Cj4+Cj4+ICsvKioKPj4gKyAqIERldGVybWluZSBhIHN1aXRh YmxlICdnYW1tYScgdmFsdWUgdG8gbWF0Y2ggdGhlIHN1cHBsaWVkCj4+ICsgKiBBVkNvbG9yVHJh bnNmZXJDaGFyYWN0ZXJpc3RpYy4KPj4gKyAqCj4+ICsgKiBTZWUgQXBwbGUgVGVjaG5pY2FsIE5v dGUgVE4yMjU3Cj4+IChodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9tYWMvdGVj aG5vdGVzL3RuMjI1Ny9faW5kZXguaHRtbCkKPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHJl dHVybnMgdGhlIGdhbW1hIGV4cG9uZW50IGZvciB0aGUgT0VURi4gRm9yIGV4YW1wbGUsCj4+IHNS R0IgaXMgYXBwcm94aW1hdGVkCj4+ICsgKiBieSBnYW1tYSAyLjIsIG5vdCBieSBnYW1tYSAwLjQ1 NDU1Lgo+PiArICoKPj4gKyAqIEByZXR1cm4gV2lsbCByZXR1cm4gYW4gYXBwcm94aW1hdGlvbiB0 byB0aGUgc2ltcGxlIGdhbW1hIGZ1bmN0aW9uCj4+IG1hdGNoaW5nCj4+ICsgKiAgICAgICAgIHRo ZSBzdXBwbGllZCBUcmFuc2ZlciBDaGFyYWN0ZXJpc3RpYywgV2lsbCByZXR1cm4gMC4wIGZvciBh bnkKPj4gKyAqICAgICAgICAgd2UgY2Fubm90IHJlYXNvbmFibHkgbWF0Y2ggYWdhaW5zdC4KPj4g KyAqLwo+PiArZG91YmxlIGF2X2NzcF9hcHByb3hpbWF0ZV90cmNfZ2FtbWEoZW51bSBBVkNvbG9y VHJhbnNmZXJDaGFyYWN0ZXJpc3RpYwo+PiB0cmMpOwo+PiArCj4+ICsvKioKPj4gKyAqIERldGVy bWluZSB0aGUgZnVuY3Rpb24gbmVlZGVkIHRvIGFwcGx5IHRoZSBnaXZlbgo+PiArICogQVZDb2xv clRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMgdG8gbGluZWFyIGlucHV0Lgo+PiArICoKPj4gKyAqIFRo ZSBmdW5jdGlvbiByZXR1cm5lZCBzaG91bGQgZXhwZWN0IGEgbm9taW5hbCBkb21haW4gYW5kIHJh bmdlIG9mCj4+IFswLjAtMS4wXQo+PiArICogdmFsdWVzIG91dHNpZGUgb2YgdGhpcyByYW5nZSBt YXliZSB2YWxpZCBkZXBlbmRpbmcgb24gdGhlIGNob3Nlbgo+PiArICogY2hhcmFjdGVyaXN0aWMg ZnVuY3Rpb24uCj4+ICsgKgo+PiArICogQHJldHVybiBXaWxsIHJldHVybiBwb2ludGVyIHRvIHRo ZSBmdW5jdGlvbiBtYXRjaGluZyB0aGUKPj4gKyAqICAgICAgICAgc3VwcGxpZWQgVHJhbnNmZXIg Q2hhcmFjdGVyaXN0aWMuIElmIHVuc3BlY2lmaWVkIHdpbGwKPj4gKyAqICAgICAgICAgcmV0dXJu IE5VTEw6Cj4+ICsgKi8KPj4gK2F2X2NzcF90cmNfZnVuY3Rpb24gYXZfY3NwX3RyY19mdW5jX2Zy b21faWQoZW51bQo+PiBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyB0cmMpOwo+PiArCj4+ ICAvKioKPj4gICAqIEB9Cj4+ICAgKi8KPj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC90ZXN0cy9j b2xvcl91dGlscy5jIGIvbGliYXZ1dGlsL3Rlc3RzL2NvbG9yX3V0aWxzLmMKPj4gaW5kZXggNGJk YzU1MDMzMC4uOTVmYjNjMWQ1NiAxMDA2NDQKPj4gLS0tIGEvbGliYXZ1dGlsL3Rlc3RzL2NvbG9y X3V0aWxzLmMKPj4gKysrIGIvbGliYXZ1dGlsL3Rlc3RzL2NvbG9yX3V0aWxzLmMKPj4gQEAgLTE5 LDcgKzE5LDcgQEAKPj4gICAqLwo+Pgo+PiAgI2luY2x1ZGUgPHN0ZGlvLmg+Cj4+IC0jaW5jbHVk ZSAibGliYXZ1dGlsL2NvbG9yX3V0aWxzLmMiCj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2NzcC5o Igo+PiAgI2luY2x1ZGUgImxpYmF2dXRpbC9tYWNyb3MuaCIKPj4KPj4gIGludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCj4+IEBAIC0zMiw3ICszMiw3IEBAIGludCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCj4+ICAgIH07Cj4+Cj4+ICAgIGZvcihpID0gMDsgaSA8IEFWQ09MX1RS Q19OQjsgaSsrKSB7Cj4+IC0gICAgICBhdnByaXZfdHJjX2Z1bmN0aW9uIGZ1bmMgPSBhdnByaXZf Z2V0X3RyY19mdW5jdGlvbl9mcm9tX3RyYyhpKTsKPj4gKyAgICAgIGF2X2NzcF90cmNfZnVuY3Rp b24gZnVuYyA9IGF2X2NzcF90cmNfZnVuY19mcm9tX2lkKGkpOwo+PiAgICAgICAgZm9yKGogPSAw OyBqIDwgRkZfQVJSQVlfRUxFTVModGVzdF9kYXRhKTsgaisrKSB7Cj4+ICAgICAgICAgICAgaWYo ZnVuYyAhPSBOVUxMKSB7Cj4+ICAgICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSBmdW5jKHRl c3RfZGF0YVtqXSk7Cj4+IC0tCj4+IDIuMzkuMQo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0Cj4+ IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4+IGh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ZmbXBlZy1kZXZlbAo+Pgo+PiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92 ZSwgb3IgZW1haWwKPj4gZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1Ympl Y3QgInVuc3Vic2NyaWJlIi4KPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBm Zm1wZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRl dmVsCj4KPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKPiBmZm1w ZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo+ Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1k ZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcu b3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQg bGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRo IHN1YmplY3QgInVuc3Vic2NyaWJlIi4K