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 ESMTPS id 1E6CE4EE06 for ; Wed, 14 May 2025 02:55:21 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 69C4468BD13; Wed, 14 May 2025 05:55:17 +0300 (EEST) Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D4907687D4A for ; Wed, 14 May 2025 05:55:09 +0300 (EEST) Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-22e8461d872so61231515ad.3 for ; Tue, 13 May 2025 19:55:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747191308; x=1747796108; darn=ffmpeg.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=c27SBTONxWKzJC0N42a1hx4b28bNaCLhzylfairyefQ=; b=Kt7i2yxhpKDLQBvn9vSScth3V0eVgnI1mu4Uaq6Hy7Chi3vdQ+kdENgL5qU/V0Uxxq RUTWB8VwGj1szAqxrgxLqTRSLg5ttUfstil2NumWatDV9+r99IaIhcPsC/wEJebL/QDD lATReHx2d2lJETHW0VO1dNdSoNHLcyFjFvP5bOuTxHnFADkV2L2z97VXFzBrBf9e0958 +3FutKP3IXh0GDrIt5LdprLg0zkuSX+yBh6m02lltHTI7Yw45TrdtNjXaIWGYjjvDzdA 5hyXTnEf+MN+YfH6hFSuw3kS4gwf0whNCBZh2kCoPDjvQr0dBbTN2yDGAvsmScTNMvht ctDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747191308; x=1747796108; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=c27SBTONxWKzJC0N42a1hx4b28bNaCLhzylfairyefQ=; b=t+HpFhzi7BzrvLN9h0CwyChcoiDvuPxe+3kZEMjnS+XCvuZ3j15Fh1nqEHW8aSdilP CA1achd+BTjHqwfvDGmeN7oXzhLRvj1Z9QVyBnNk2gLbW5GvCTM8HUnhpOHgB/nay+9u f6+k13PSkrcB/pdHyfyIndxtzceKrdow6HiE0KmqvL8NFhB/3z4Jf4hJH9X6ZIHNeXY4 c76RaN77zgnVOcuj9hgxbx7UKsfchFPPan91HhQ2swJemBh7N09O1sspjo1vpVaP5XxI Nxs3qCRoNuc+vTvGRmulJBlaVDnpjqpjy4XvnVCK5/hjiFwLgbir6kriL3W0eSsceNjN dr+A== X-Gm-Message-State: AOJu0YweAKJkPWvN3XHg16bVT+X56s0vpoZ9pMhHFbGTvQnpVoWonOWb 0uJTEPQMluZpbdzP/imMKDY8dYlCxgpNzxH//omGcBfwtwKi61pKPY3G+toBkBebctWi1+wblOq 1eyhdCCuaT5dolXB3gjLHS0lKUEX+/+Wu X-Gm-Gg: ASbGncvSDHSMExgBqHYiQY+Y0xV+wSTXwnIo5mmCbmiByivsU22ILz+ZdqIJcJUi5ek 8n5DcVCMXLFIJ6NzktiCjzkW3xEt+kkKUyjhOZu8HR/Tgs6wHt6YKyG1rV4EA0bSfWwm0umHkt1 Shjrci2i7AihcjhK2bdXxfS0olrVAIHv3IAuo= X-Google-Smtp-Source: AGHT+IFFYy4rj+bu2TsWtMXcWo4EbOU26Yyr0cBQ8Bq6YiZdV9MusVceR4F5XL9+R6oKmxzcqsQssRHlOvSaPwE6tgo= X-Received: by 2002:a17:902:d4d0:b0:22e:68c4:2602 with SMTP id d9443c01a7336-231981a85c1mr24070355ad.33.1747191307080; Tue, 13 May 2025 19:55:07 -0700 (PDT) MIME-Version: 1.0 References: <20250505232710.3840135-1-michael@niedermayer.cc> <20250505232710.3840135-2-michael@niedermayer.cc> In-Reply-To: From: Andrew Randrianasulu Date: Wed, 14 May 2025 05:54:54 +0300 X-Gm-Features: AX0GCFvT1CtcNt2fqjMFkXy72glW7bbNkDOJvhxe_we86MWGsazkb2NMKQcqOEc Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH 1/2] Remove libpostproc 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: "michael@niedermayer.cc" , "Cinelerra.GG" , Phyllis Smith 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: 0YHRgCwgMTQg0LzQsNGPIDIwMjUg0LMuLCAwMzo1NSBBbmRyZXcgUmFuZHJpYW5hc3VsdSA8cmFu ZHJpYW5hc3VsdUBnbWFpbC5jb20+OgoKPgo+Cj4g0LLRgiwgNiDQvNCw0Y8gMjAyNSDQsy4sIDAy OjI3IE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hhZWxAbmllZGVybWF5ZXIuY2M+Ogo+Cj4+IFRo aXMgd2lsbCBiZSBhdmFpbGFibGUgaW4gaHR0cHM6Ly9naXRodWIuY29tL21pY2hhZWxuaS9saWJw b3N0cHJvYwo+PiBlaXRoZXIgYXMgYSBzZXBhcmF0ZSBsaWJyYXJ5IG9yIGEgZmZtcGVnIHNvdXJj ZSBwbHVnaW4gd2hhdGV2ZXIgdHVybnMKPj4gb3V0IG1vcmUgY29udmVuaWVudCB0byBtYWludGFp bgo+Pgo+Cj4KPgo+IENvbmdyYXR1bGF0aW9ucywgeW91IGJyb2tlICBidWlsZGluZyBjaW5lbGVy cmEtZ2cgd2l0aCBmZm1wZWcuZ2l0IGRlc3BpdGUKPiBvdXIgYmVzdCBlZmZvcnRzIDovCj4KPiBX aHkgYWxsIHRoaXMgY29kZSBtb3ZlbWVudD8hCj4KPiBGb3Igd2hvbSBpdCAic2ltcGxlIj8KPgoK CkZvciBzb21lIHJlYXNvbiB0aGlzIG1haWwgbm90IGFycml2ZWQgaW50byBteSBpbmJveCAoc3Bh bSBmaWx0ZXIgYXRlIGl0PykKCmh0dHBzOi8vZmZtcGVnLm9yZy9waXBlcm1haWwvZmZtcGVnLWRl dmVsLzIwMjUtTWF5LzM0MzE5Mi5odG1sCgo9PT09PQoKVGhlIGlkZWEgb2YgY291cnNlIGhlcmUg aXMgdG8gZXhwYW5kIHRoaXMgdG8gZmlsdGVycyBhbmQgb3RoZXIKdGhpbmdzLiBXaGljaCBhZ2Fp biBpcyB0cml2aWFsLCBub3RoaW5nIHJlYWxseSBpcyBuZWVkZWQgZXhjZXB0CnBlb3BsZSBzaW1w bHkgZm9sbG93aW5nIHRoaXMgc3R5bGUgb2YgYSBzb3VyY2UgcGx1Z2luCgoKPT09PT0KCkkgZm91 bmQgdGhpcyBjb25jZXJuaW5nLiBCZWNhdXNlIGRvZXMgdGhpcyBtZWFuIGZmbXBlZyB3aWxsIGJl IGZyYWdtZW50ZWQKbGlrZSBQeXRob24gb3IgUnVzdCBpbnRvIG1pbGxpb24gcGllY2VzIHVzZXJz IHN1cHBvc2VkIHRvIGhlbGQgdG9nZXRoZXI/CgoKCj4+IFNwb25zb3JlZC1ieTogU292ZXJlaWdu IFRlY2ggRnVuZAo+PiBTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVs QG5pZWRlcm1heWVyLmNjPgo+PiAtLS0KPj4gIExJQ0VOU0UubWQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgIDIgLQo+PiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgMiAtCj4+ICBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDEzICstCj4+ICBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgMTc1IC0tCj4+ICBmZnRvb2xzL2ZmcHJvYmUuYyAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAzIC0KPj4gIGZmdG9vbHMvb3B0X2NvbW1vbi5jICAgICAgICAgICAg ICAgICAgICAgICB8ICAgIDMgLQo+PiAgbGliYXZmaWx0ZXIvTWFrZWZpbGUgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgMSAtCj4+ICBsaWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMgICAgICAgICAg ICAgICAgICAgfCAgICAxIC0KPj4gIGxpYmF2ZmlsdGVyL3ZmX3BwLmMgICAgICAgICAgICAgICAg ICAgICAgICB8ICAxOTEgLS0KPj4gIGxpYmF2dXRpbC9hdnV0aWwuaCAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDEgLQo+PiAgbGlicG9zdHByb2MvTWFrZWZpbGUgICAgICAgICAgICAgICAg ICAgICAgIHwgICAyMyAtCj4+ICBsaWJwb3N0cHJvYy9saWJwb3N0cHJvYy52ICAgICAgICAgICAg ICAgICAgfCAgICA3IC0KPj4gIGxpYnBvc3Rwcm9jL3Bvc3Rwcm9jZXNzLmMgICAgICAgICAgICAg ICAgICB8ICA5OTIgLS0tLS0tCj4+ICBsaWJwb3N0cHJvYy9wb3N0cHJvY2Vzcy5oICAgICAgICAg ICAgICAgICAgfCAgMTA5IC0KPj4gIGxpYnBvc3Rwcm9jL3Bvc3Rwcm9jZXNzX2FsdGl2ZWNfdGVt cGxhdGUuYyB8IDEyMTQgLS0tLS0tLS0KPj4gIGxpYnBvc3Rwcm9jL3Bvc3Rwcm9jZXNzX2ludGVy bmFsLmggICAgICAgICB8ICAxODUgLS0KPj4gIGxpYnBvc3Rwcm9jL3Bvc3Rwcm9jZXNzX3RlbXBs YXRlLmMgICAgICAgICB8IDMyOTMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4gIGxpYnBvc3Rwcm9j L3Bvc3Rwcm9jcmVzLnJjICAgICAgICAgICAgICAgICB8ICAgNTUgLQo+PiAgbGlicG9zdHByb2Mv dGVzdHMvLmdpdGlnbm9yZSAgICAgICAgICAgICAgIHwgICAgMyAtCj4+ICBsaWJwb3N0cHJvYy90 ZXN0cy9ibG9ja3Rlc3QuYyAgICAgICAgICAgICAgfCAgMTEzIC0KPj4gIGxpYnBvc3Rwcm9jL3Rl c3RzL3N0cmlwZXRlc3QuYyAgICAgICAgICAgICB8ICAxMTUgLQo+PiAgbGlicG9zdHByb2MvdGVz dHMvdGVtcHRlc3QuYyAgICAgICAgICAgICAgIHwgIDEwNiAtCj4+ICBsaWJwb3N0cHJvYy90ZXN0 cy90ZXN0X3V0aWxzLmMgICAgICAgICAgICAgfCAgIDM4IC0KPj4gIGxpYnBvc3Rwcm9jL3Rlc3Rz L3Rlc3RfdXRpbHMuaCAgICAgICAgICAgICB8ICAgMjcgLQo+PiAgbGlicG9zdHByb2MvdmVyc2lv bi5jICAgICAgICAgICAgICAgICAgICAgIHwgICA0NSAtCj4+ICBsaWJwb3N0cHJvYy92ZXJzaW9u LmggICAgICAgICAgICAgICAgICAgICAgfCAgIDQ4IC0KPj4gIGxpYnBvc3Rwcm9jL3ZlcnNpb25f bWFqb3IuaCAgICAgICAgICAgICAgICB8ICAgMzMgLQo+PiAgdGVzdHMvTWFrZWZpbGUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAtCj4+ICB0ZXN0cy9mYXRlL2ZpbHRlci12aWRl by5tYWsgICAgICAgICAgICAgICAgfCAgIDE2IC0KPj4gIHRlc3RzL2ZhdGUvbGlicG9zdHByb2Mu bWFrICAgICAgICAgICAgICAgICB8ICAgMTQgLQo+PiAgdGVzdHMvcmVmL2ZhdGUvYmxvY2t0ZXN0 ICAgICAgICAgICAgICAgICAgIHwgMTgwMCAtLS0tLS0tLS0tLQo+PiAgdGVzdHMvcmVmL2ZhdGUv ZmlsdGVyLXBwICAgICAgICAgICAgICAgICAgIHwgICAxMCAtCj4+ICB0ZXN0cy9yZWYvZmF0ZS9m aWx0ZXItcHAxICAgICAgICAgICAgICAgICAgfCAgICAxIC0KPj4gIHRlc3RzL3JlZi9mYXRlL2Zp bHRlci1wcDIgICAgICAgICAgICAgICAgICB8ICAgIDEgLQo+PiAgdGVzdHMvcmVmL2ZhdGUvZmls dGVyLXBwMyAgICAgICAgICAgICAgICAgIHwgICAgMSAtCj4+ICB0ZXN0cy9yZWYvZmF0ZS9maWx0 ZXItcHA0ICAgICAgICAgICAgICAgICAgfCAgICAxIC0KPj4gIHRlc3RzL3JlZi9mYXRlL2ZpbHRl ci1wcDUgICAgICAgICAgICAgICAgICB8ICAgIDEgLQo+PiAgdGVzdHMvcmVmL2ZhdGUvZmlsdGVy LXBwNiAgICAgICAgICAgICAgICAgIHwgICAgMSAtCj4+ICB0ZXN0cy9yZWYvZmF0ZS9maWx0ZXIt cXAgICAgICAgICAgICAgICAgICAgfCAgICAxIC0KPj4gIHRlc3RzL3JlZi9mYXRlL3N0cmlwZXRl c3QgICAgICAgICAgICAgICAgICB8ICAzNjAgLS0tCj4+ICB0ZXN0cy9yZWYvZmF0ZS90ZW1wdGVz dCAgICAgICAgICAgICAgICAgICAgfCAgMzM2IC0tCj4+ICB0b29scy9nZW4tcmMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAxIC0KPj4gIDQyIGZpbGVzIGNoYW5nZWQsIDEgaW5z ZXJ0aW9uKCspLCA5MzQyIGRlbGV0aW9ucygtKQo+PiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2 ZmlsdGVyL3ZmX3BwLmMKPj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJwb3N0cHJvYy9NYWtlZmls ZQo+PiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYnBvc3Rwcm9jL2xpYnBvc3Rwcm9jLnYKPj4gIGRl bGV0ZSBtb2RlIDEwMDY0NCBsaWJwb3N0cHJvYy9wb3N0cHJvY2Vzcy5jCj4+ICBkZWxldGUgbW9k ZSAxMDA2NDQgbGlicG9zdHByb2MvcG9zdHByb2Nlc3MuaAo+PiAgZGVsZXRlIG1vZGUgMTAwNjQ0 IGxpYnBvc3Rwcm9jL3Bvc3Rwcm9jZXNzX2FsdGl2ZWNfdGVtcGxhdGUuYwo+PiAgZGVsZXRlIG1v ZGUgMTAwNjQ0IGxpYnBvc3Rwcm9jL3Bvc3Rwcm9jZXNzX2ludGVybmFsLmgKPj4gIGRlbGV0ZSBt b2RlIDEwMDY0NCBsaWJwb3N0cHJvYy9wb3N0cHJvY2Vzc190ZW1wbGF0ZS5jCj4+ICBkZWxldGUg bW9kZSAxMDA2NDQgbGlicG9zdHByb2MvcG9zdHByb2NyZXMucmMKPj4gIGRlbGV0ZSBtb2RlIDEw MDY0NCBsaWJwb3N0cHJvYy90ZXN0cy8uZ2l0aWdub3JlCj4+ICBkZWxldGUgbW9kZSAxMDA2NDQg bGlicG9zdHByb2MvdGVzdHMvYmxvY2t0ZXN0LmMKPj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJw b3N0cHJvYy90ZXN0cy9zdHJpcGV0ZXN0LmMKPj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJwb3N0 cHJvYy90ZXN0cy90ZW1wdGVzdC5jCj4+ICBkZWxldGUgbW9kZSAxMDA2NDQgbGlicG9zdHByb2Mv dGVzdHMvdGVzdF91dGlscy5jCj4+ICBkZWxldGUgbW9kZSAxMDA2NDQgbGlicG9zdHByb2MvdGVz dHMvdGVzdF91dGlscy5oCj4+ICBkZWxldGUgbW9kZSAxMDA2NDQgbGlicG9zdHByb2MvdmVyc2lv bi5jCj4+ICBkZWxldGUgbW9kZSAxMDA2NDQgbGlicG9zdHByb2MvdmVyc2lvbi5oCj4+ICBkZWxl dGUgbW9kZSAxMDA2NDQgbGlicG9zdHByb2MvdmVyc2lvbl9tYWpvci5oCj4+ICBkZWxldGUgbW9k ZSAxMDA2NDQgdGVzdHMvZmF0ZS9saWJwb3N0cHJvYy5tYWsKPj4gIGRlbGV0ZSBtb2RlIDEwMDY0 NCB0ZXN0cy9yZWYvZmF0ZS9ibG9ja3Rlc3QKPj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9y ZWYvZmF0ZS9maWx0ZXItcHAKPj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9yZWYvZmF0ZS9m aWx0ZXItcHAxCj4+ICBkZWxldGUgbW9kZSAxMDA2NDQgdGVzdHMvcmVmL2ZhdGUvZmlsdGVyLXBw Mgo+PiAgZGVsZXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3JlZi9mYXRlL2ZpbHRlci1wcDMKPj4gIGRl bGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9yZWYvZmF0ZS9maWx0ZXItcHA0Cj4+ICBkZWxldGUgbW9k ZSAxMDA2NDQgdGVzdHMvcmVmL2ZhdGUvZmlsdGVyLXBwNQo+PiAgZGVsZXRlIG1vZGUgMTAwNjQ0 IHRlc3RzL3JlZi9mYXRlL2ZpbHRlci1wcDYKPj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9y ZWYvZmF0ZS9maWx0ZXItcXAKPj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9yZWYvZmF0ZS9z dHJpcGV0ZXN0Cj4+ICBkZWxldGUgbW9kZSAxMDA2NDQgdGVzdHMvcmVmL2ZhdGUvdGVtcHRlc3QK Pj4KPj4gZGlmZiAtLWdpdCBhL0xJQ0VOU0UubWQgYi9MSUNFTlNFLm1kCj4+IGluZGV4IDYxMzA3 MGUxYjYzLi4zNzFiMDkxM2NlNyAxMDA2NDQKPj4gLS0tIGEvTElDRU5TRS5tZAo+PiArKysgYi9M SUNFTlNFLm1kCj4+IEBAIC0xMiw3ICsxMiw2IEBAIGNvbmZpZ3VyZSB0byBhY3RpdmF0ZSB0aGVt LiBJbiB0aGlzIGNhc2UsIEZGbXBlZydzCj4+IGxpY2Vuc2UgY2hhbmdlcyB0byBHUEwgdjIrLgo+ Pgo+PiAgU3BlY2lmaWNhbGx5LCB0aGUgR1BMIHBhcnRzIG9mIEZGbXBlZyBhcmU6Cj4+Cj4+IC0t IGxpYnBvc3Rwcm9jCj4+ICAtIG9wdGlvbmFsIHg4NiBvcHRpbWl6YXRpb24gaW4gdGhlIGZpbGVz Cj4+ICAgICAgLSBgbGliYXZjb2RlYy94ODYvZmxhY19kc3BfZ3BsLmFzbWAKPj4gICAgICAtIGBs aWJhdmNvZGVjL3g4Ni9pZGN0X21teC5jYAo+PiBAQCAtNDUsNyArNDQsNiBAQCBTcGVjaWZpY2Fs bHksIHRoZSBHUEwgcGFydHMgb2YgRkZtcGVnIGFyZToKPj4gICAgICAtIGB2Zl9vd2Rlbm9pc2Uu Y2AKPj4gICAgICAtIGB2Zl9wZXJzcGVjdGl2ZS5jYAo+PiAgICAgIC0gYHZmX3BoYXNlLmNgCj4+ IC0gICAgLSBgdmZfcHAuY2AKPj4gICAgICAtIGB2Zl9wcDcuY2AKPj4gICAgICAtIGB2Zl9wdWxs dXAuY2AKPj4gICAgICAtIGB2Zl9yZXBlYXRmaWVsZHMuY2AKPj4gZGlmZiAtLWdpdCBhL01BSU5U QUlORVJTIGIvTUFJTlRBSU5FUlMKPj4gaW5kZXggZjU4OTM2ZGI2MTkuLjdmN2ZhYTA1OTU5IDEw MDY0NAo+PiAtLS0gYS9NQUlOVEFJTkVSUwo+PiArKysgYi9NQUlOVEFJTkVSUwo+PiBAQCAtMTM0 LDggKzEzNCw2IEBAIEdlbmVyaWMgUGFydHM6Cj4+ICAgICAgcmF0ZWNvbnRyb2wuYyAgICAgICAg ICAgICAgICAgICBbMl0gTWljaGFlbCBOaWVkZXJtYXllcgo+PiAgICBzaW1wbGUgSURDVDoKPj4g ICAgICBzaW1wbGVfaWRjdC5jLCBzaW1wbGVfaWRjdC5oICAgIFsyXSBNaWNoYWVsIE5pZWRlcm1h eWVyCj4+IC0gIHBvc3Rwcm9jZXNzaW5nOgo+PiAtICAgIGxpYnBvc3Rwcm9jLyogICAgICAgICAg ICAgICAgICAgWzJdIE1pY2hhZWwgTmllZGVybWF5ZXIKPj4gICAgdGFibGUgZ2VuZXJhdGlvbjoK Pj4gICAgICB0YWJsZXByaW50LmMsIHRhYmxlcHJpbnQuaCAgICAgICAgICBSZWltYXIgRG9lZmZp bmdlcgo+PiAgICBmaXhlZCBwb2ludCBGRlQ6Cj4+IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9j b25maWd1cmUKPj4gaW5kZXggNmMyM2EzOGJlMWYuLjJlNjliM2M1NmMzIDEwMDc1NQo+PiAtLS0g YS9jb25maWd1cmUKPj4gKysrIGIvY29uZmlndXJlCj4+IEBAIC0xMzAsNyArMTMwLDYgQEAgQ29t cG9uZW50IG9wdGlvbnM6Cj4+ICAgIC0tZGlzYWJsZS1hdmZvcm1hdCAgICAgICBkaXNhYmxlIGxp YmF2Zm9ybWF0IGJ1aWxkCj4+ICAgIC0tZGlzYWJsZS1zd3Jlc2FtcGxlICAgICBkaXNhYmxlIGxp YnN3cmVzYW1wbGUgYnVpbGQKPj4gICAgLS1kaXNhYmxlLXN3c2NhbGUgICAgICAgIGRpc2FibGUg bGlic3dzY2FsZSBidWlsZAo+PiAtICAtLWRpc2FibGUtcG9zdHByb2MgICAgICAgZGlzYWJsZSBs aWJwb3N0cHJvYyBidWlsZAo+PiAgICAtLWRpc2FibGUtYXZmaWx0ZXIgICAgICAgZGlzYWJsZSBs aWJhdmZpbHRlciBidWlsZAo+PiAgICAtLWRpc2FibGUtcHRocmVhZHMgICAgICAgZGlzYWJsZSBw dGhyZWFkcyBbYXV0b2RldGVjdF0KPj4gICAgLS1kaXNhYmxlLXczMnRocmVhZHMgICAgIGRpc2Fi bGUgV2luMzIgdGhyZWFkcyBbYXV0b2RldGVjdF0KPj4gQEAgLTIwNzIsNyArMjA3MSw2IEBAIExJ QlJBUllfTElTVD0iCj4+ICAgICAgYXZkZXZpY2UKPj4gICAgICBhdmZpbHRlcgo+PiAgICAgIHN3 c2NhbGUKPj4gLSAgICBwb3N0cHJvYwo+PiAgICAgIGF2Zm9ybWF0Cj4+ICAgICAgYXZjb2RlYwo+ PiAgICAgIHN3cmVzYW1wbGUKPj4gQEAgLTM5NjksNyArMzk2Nyw2IEBAIHBhbl9maWx0ZXJfZGVw cz0ic3dyZXNhbXBsZSIKPj4gIHBlcnNwZWN0aXZlX2ZpbHRlcl9kZXBzPSJncGwiCj4+ICBwaGFz ZV9maWx0ZXJfZGVwcz0iZ3BsIgo+PiAgcHA3X2ZpbHRlcl9kZXBzPSJncGwiCj4+IC1wcF9maWx0 ZXJfZGVwcz0iZ3BsIHBvc3Rwcm9jIgo+PiAgcHJld2l0dF9vcGVuY2xfZmlsdGVyX2RlcHM9Im9w ZW5jbCIKPj4gIHByb2NhbXBfdmFhcGlfZmlsdGVyX2RlcHM9InZhYXBpIgo+PiAgcHJvZ3JhbV9v cGVuY2xfZmlsdGVyX2RlcHM9Im9wZW5jbCIKPj4gQEAgLTQwODYsOCArNDA4Myw2IEBAIGF2Zmls dGVyX3N1Z2dlc3Q9ImxpYm0gc3RkYXRvbWljIHNwaXJ2X2NvbXBpbGVyIgo+PiAgYXZmb3JtYXRf ZGVwcz0iYXZjb2RlYyBhdnV0aWwiCj4+ICBhdmZvcm1hdF9zdWdnZXN0PSJsaWJtIG5ldHdvcmsg emxpYiBzdGRhdG9taWMiCj4+ICBhdnV0aWxfc3VnZ2VzdD0iY2xvY2tfZ2V0dGltZSBmZm52Y29k ZWMgZ2NyeXB0IGxpYm0gbGliZHJtIGxpYm1meCBvcGVuY2wKPj4gb3BlbnNzbCB1c2VyMzIgdmFh cGkgdnVsa2FuIHZpZGVvdG9vbGJveCBjb3JlZm91bmRhdGlvbiBjb3JldmlkZW8gY29yZW1lZGlh Cj4+IGJjcnlwdCBzdGRhdG9taWMiCj4+IC1wb3N0cHJvY19kZXBzPSJhdnV0aWwgZ3BsIgo+PiAt cG9zdHByb2Nfc3VnZ2VzdD0ibGlibSBzdGRhdG9taWMiCj4+ICBzd3Jlc2FtcGxlX2RlcHM9ImF2 dXRpbCIKPj4gIHN3cmVzYW1wbGVfc3VnZ2VzdD0ibGlibSBsaWJzb3hyIHN0ZGF0b21pYyIKPj4g IHN3c2NhbGVfZGVwcz0iYXZ1dGlsIgo+PiBAQCAtNzUzMyw3ICs3NTI4LDcgQEAgdm9pZCAoXmJs b2NrKSh2b2lkKTsKPj4gIEVPRgo+Pgo+PiAgIyBhZGQgc29tZSBsaW5rZXIgZmxhZ3MKPj4gLWNo ZWNrX2xkZmxhZ3MKPj4gLVdsLC1ycGF0aC1saW5rPTpsaWJwb3N0cHJvYzpsaWJzd3Jlc2FtcGxl OmxpYnN3c2NhbGU6bGliYXZmaWx0ZXI6bGliYXZkZXZpY2U6bGliYXZmb3JtYXQ6bGliYXZjb2Rl YzpsaWJhdnV0aWwKPj4gK2NoZWNrX2xkZmxhZ3MKPj4gLVdsLC1ycGF0aC1saW5rPTpsaWJzd3Jl c2FtcGxlOmxpYnN3c2NhbGU6bGliYXZmaWx0ZXI6bGliYXZkZXZpY2U6bGliYXZmb3JtYXQ6bGli YXZjb2RlYzpsaWJhdnV0aWwKPj4gIGVuYWJsZWQgcnBhdGggJiYgYWRkX2xkZXhlZmxhZ3MgLVds LC1ycGF0aCwkbGliZGlyICYmIGFkZF9sZHNvZmxhZ3MKPj4gLVdsLC1ycGF0aCwkbGliZGlyCj4+ ICB0ZXN0X2xkZmxhZ3MgLVdsLC1Cc3ltYm9saWMgJiYgYXBwZW5kIFNIRkxBR1MgLVdsLC1Cc3lt Ym9saWMKPj4KPj4gQEAgLTc4OTgsNyArNzg5Myw2IEBAIGVuYWJsZWQgZnN5bmNfZmlsdGVyICAg ICAgICAmJiBwcmVwZW5kCj4+IGF2ZmlsdGVyX2RlcHMgImF2Zm9ybWF0Igo+PiAgZW5hYmxlZCBt Y2RlaW50X2ZpbHRlciAgICAgICYmIHByZXBlbmQgYXZmaWx0ZXJfZGVwcyAiYXZjb2RlYyIKPj4g IGVuYWJsZWQgbW92aWVfZmlsdGVyICAgICAgICAmJiBwcmVwZW5kIGF2ZmlsdGVyX2RlcHMgImF2 Zm9ybWF0IGF2Y29kZWMiCj4+ICBlbmFibGVkIHBhbl9maWx0ZXIgICAgICAgICAgJiYgcHJlcGVu ZCBhdmZpbHRlcl9kZXBzICJzd3Jlc2FtcGxlIgo+PiAtZW5hYmxlZCBwcF9maWx0ZXIgICAgICAg ICAgICYmIHByZXBlbmQgYXZmaWx0ZXJfZGVwcyAicG9zdHByb2MiCj4+ICBlbmFibGVkIHFyZW5j b2RlX2ZpbHRlciAgICAgJiYgcHJlcGVuZCBhdmZpbHRlcl9kZXBzICJzd3NjYWxlIgo+PiAgZW5h YmxlZCBxcmVuY29kZXNyY19maWx0ZXIgICYmIHByZXBlbmQgYXZmaWx0ZXJfZGVwcyAic3dzY2Fs ZSIKPj4gIGVuYWJsZWQgcmVtb3ZlbG9nb19maWx0ZXIgICAmJiBwcmVwZW5kIGF2ZmlsdGVyX2Rl cHMgImF2Zm9ybWF0IGF2Y29kZWMKPj4gc3dzY2FsZSIKPj4gQEAgLTc5NTAsOSArNzk0NCw2IEBA IGV4cGFuZF9kZXBzKCl7Cj4+ICAgICAgcmVvcmRlcl9ieSAkezF9X2RlcHMgTElCUkFSWV9MSVNU ICAjIGxpbmtpbmcgb3JkZXIgaXMgZXhwZWN0ZWQgbGF0ZXIKPj4gIH0KPj4KPj4gLSN3ZSBoYXZl IHRvIHJlbW92ZSBncGwgZnJvbSB0aGUgZGVwcyBoZXJlIGFzIHNvbWUgY29kZSBhc3N1bWVzIGFs bCBsaWIKPj4gZGVwcyBhcmUgbGlicwo+PiAtcG9zdHByb2NfZGVwcz0iJChmaWx0ZXJfb3V0ICdn cGwnICRwb3N0cHJvY19kZXBzKSIKPj4gLQo+PiAgbWFwICdleHBhbmRfZGVwcyAkdicgJExJQlJB UllfTElTVAo+Pgo+PiAgaWYgdGVzdCAiJHF1aWV0IiAhPSAieWVzIjsgdGhlbgo+PiBAQCAtODA0 Myw3ICs4MDM0LDYgQEAgZWNobyAib3B0aW1pemUgZm9yIHNpemUgICAgICAgICAke3NtYWxsLW5v fSIKPj4gIGVjaG8gIm9wdGltaXphdGlvbnMgICAgICAgICAgICAgJHtvcHRpbWl6YXRpb25zLW5v fSIKPj4gIGVjaG8gInN0YXRpYyAgICAgICAgICAgICAgICAgICAgJHtzdGF0aWMtbm99Igo+PiAg ZWNobyAic2hhcmVkICAgICAgICAgICAgICAgICAgICAke3NoYXJlZC1ub30iCj4+IC1lY2hvICJw b3N0cHJvY2Vzc2luZyBzdXBwb3J0ICAgICR7cG9zdHByb2Mtbm99Igo+PiAgZWNobyAibmV0d29y ayBzdXBwb3J0ICAgICAgICAgICAke25ldHdvcmstbm99Igo+PiAgZWNobyAidGhyZWFkaW5nIHN1 cHBvcnQgICAgICAgICAke3RocmVhZF90eXBlLW5vfSIKPj4gIGVjaG8gInNhZmUgYml0c3RyZWFt IHJlYWRlciAgICAgJHtzYWZlX2JpdHN0cmVhbV9yZWFkZXItbm99Igo+PiBAQCAtODQyMCw3ICs4 NDEwLDYgQEAgZXh0cmFsaWJzX2F2Y29kZWM9IiRhdmNvZGVjX2V4dHJhbGlicyIKPj4gIGV4dHJh bGlic19hdmZvcm1hdD0iJGF2Zm9ybWF0X2V4dHJhbGlicyIKPj4gIGV4dHJhbGlic19hdmRldmlj ZT0iJGF2ZGV2aWNlX2V4dHJhbGlicyIKPj4gIGV4dHJhbGlic19hdmZpbHRlcj0iJGF2ZmlsdGVy X2V4dHJhbGlicyIKPj4gLWV4dHJhbGlic19wb3N0cHJvYz0iJHBvc3Rwcm9jX2V4dHJhbGlicyIK Pj4gIGV4dHJhbGlic19zd3NjYWxlPSIkc3dzY2FsZV9leHRyYWxpYnMiCj4+ICBleHRyYWxpYnNf c3dyZXNhbXBsZT0iJHN3cmVzYW1wbGVfZXh0cmFsaWJzIgo+PiAgRU9GCj4+IGRpZmYgLS1naXQg YS9kb2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQo+PiBpbmRleCBhOWVjMDc3ZWYw NC4uNjc5YjcxZjI5MDYgMTAwNjQ0Cj4+IC0tLSBhL2RvYy9maWx0ZXJzLnRleGkKPj4gKysrIGIv ZG9jL2ZpbHRlcnMudGV4aQo+PiBAQCAtMTkzODcsMTgxICsxOTM4Nyw2IEBAIFNldCB3aW5kb3cg WSBwb3NpdGlvbiwgcmVsYXRpdmUgb2Zmc2V0IG9uIFkKPj4gYXhpcy4KPj4KPj4gIFRoaXMgZmls dGVyIHN1cHBvcnRzIHNhbWUgQHJlZntjb21tYW5kc30gYXMgb3B0aW9ucy4KPj4KPj4gLUBzZWN0 aW9uIHBwCj4+IC0KPj4gLUVuYWJsZSB0aGUgc3BlY2lmaWVkIGNoYWluIG9mIHBvc3Rwcm9jZXNz aW5nIHN1YmZpbHRlcnMgdXNpbmcKPj4gbGlicG9zdHByb2MuIFRoaXMKPj4gLWxpYnJhcnkgc2hv dWxkIGJlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgd2l0aCBhIEdQTCBidWlsZAo+PiAoQGNvZGV7 LS1lbmFibGUtZ3BsfSkuCj4+IC1TdWJmaWx0ZXJzIG11c3QgYmUgc2VwYXJhdGVkIGJ5ICcvJyBh bmQgY2FuIGJlIGRpc2FibGVkIGJ5IHByZXBlbmRpbmcgYQo+PiAnLScuCj4+IC1FYWNoIHN1YmZp bHRlciBhbmQgc29tZSBvcHRpb25zIGhhdmUgYSBzaG9ydCBhbmQgYSBsb25nIG5hbWUgdGhhdCBj YW4gYmUKPj4gdXNlZAo+PiAtaW50ZXJjaGFuZ2VhYmx5LCBpLmUuIGRyL2RlcmluZyBhcmUgdGhl IHNhbWUuCj4+IC0KPj4gLVRoZSBmaWx0ZXJzIGFjY2VwdCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6 Cj4+IC0KPj4gLUB0YWJsZSBAb3B0aW9uCj4+IC1AaXRlbSBzdWJmaWx0ZXJzCj4+IC1TZXQgcG9z dHByb2Nlc3Npbmcgc3ViZmlsdGVycyBzdHJpbmcuCj4+IC1AZW5kIHRhYmxlCj4+IC0KPj4gLUFs bCBzdWJmaWx0ZXJzIHNoYXJlIGNvbW1vbiBvcHRpb25zIHRvIGRldGVybWluZSB0aGVpciBzY29w ZToKPj4gLQo+PiAtQHRhYmxlIEBvcHRpb24KPj4gLUBpdGVtIGEvYXV0b3EKPj4gLUhvbm9yIHRo ZSBxdWFsaXR5IGNvbW1hbmRzIGZvciB0aGlzIHN1YmZpbHRlci4KPj4gLQo+PiAtQGl0ZW0gYy9j aHJvbQo+PiAtRG8gY2hyb21pbmFuY2UgZmlsdGVyaW5nLCB0b28gKGRlZmF1bHQpLgo+PiAtCj4+ IC1AaXRlbSB5L25vY2hyb20KPj4gLURvIGx1bWEgZmlsdGVyaW5nIG9ubHkgKG5vIGNocm9taW5h bmNlKS4KPj4gLQo+PiAtQGl0ZW0gbi9ub2x1bWEKPj4gLURvIGNocm9taW5hbmNlIGZpbHRlcmlu ZyBvbmx5IChubyBsdW1hKS4KPj4gLUBlbmQgdGFibGUKPj4gLQo+PiAtVGhlc2Ugb3B0aW9ucyBj YW4gYmUgYXBwZW5kZWQgYWZ0ZXIgdGhlIHN1YmZpbHRlciBuYW1lLCBzZXBhcmF0ZWQgYnkgYQo+ PiAnfCcuCj4+IC0KPj4gLUF2YWlsYWJsZSBzdWJmaWx0ZXJzIGFyZToKPj4gLQo+PiAtQHRhYmxl IEBvcHRpb24KPj4gLUBpdGVtIGhiL2hkZWJsb2NrW3xkaWZmZXJlbmNlW3xmbGF0bmVzc11dCj4+ IC1Ib3Jpem9udGFsIGRlYmxvY2tpbmcgZmlsdGVyCj4+IC1AdGFibGUgQG9wdGlvbgo+PiAtQGl0 ZW0gZGlmZmVyZW5jZQo+PiAtRGlmZmVyZW5jZSBmYWN0b3Igd2hlcmUgaGlnaGVyIHZhbHVlcyBt ZWFuIG1vcmUgZGVibG9ja2luZyAoZGVmYXVsdDoKPj4gQGNvZGV7MzJ9KS4KPj4gLUBpdGVtIGZs YXRuZXNzCj4+IC1GbGF0bmVzcyB0aHJlc2hvbGQgd2hlcmUgbG93ZXIgdmFsdWVzIG1lYW4gbW9y ZSBkZWJsb2NraW5nIChkZWZhdWx0Ogo+PiBAY29kZXszOX0pLgo+PiAtQGVuZCB0YWJsZQo+PiAt Cj4+IC1AaXRlbSB2Yi92ZGVibG9ja1t8ZGlmZmVyZW5jZVt8ZmxhdG5lc3NdXQo+PiAtVmVydGlj YWwgZGVibG9ja2luZyBmaWx0ZXIKPj4gLUB0YWJsZSBAb3B0aW9uCj4+IC1AaXRlbSBkaWZmZXJl bmNlCj4+IC1EaWZmZXJlbmNlIGZhY3RvciB3aGVyZSBoaWdoZXIgdmFsdWVzIG1lYW4gbW9yZSBk ZWJsb2NraW5nIChkZWZhdWx0Ogo+PiBAY29kZXszMn0pLgo+PiAtQGl0ZW0gZmxhdG5lc3MKPj4g LUZsYXRuZXNzIHRocmVzaG9sZCB3aGVyZSBsb3dlciB2YWx1ZXMgbWVhbiBtb3JlIGRlYmxvY2tp bmcgKGRlZmF1bHQ6Cj4+IEBjb2RlezM5fSkuCj4+IC1AZW5kIHRhYmxlCj4+IC0KPj4gLUBpdGVt IGhhL2hhZGVibG9ja1t8ZGlmZmVyZW5jZVt8ZmxhdG5lc3NdXQo+PiAtQWNjdXJhdGUgaG9yaXpv bnRhbCBkZWJsb2NraW5nIGZpbHRlcgo+PiAtQHRhYmxlIEBvcHRpb24KPj4gLUBpdGVtIGRpZmZl cmVuY2UKPj4gLURpZmZlcmVuY2UgZmFjdG9yIHdoZXJlIGhpZ2hlciB2YWx1ZXMgbWVhbiBtb3Jl IGRlYmxvY2tpbmcgKGRlZmF1bHQ6Cj4+IEBjb2RlezMyfSkuCj4+IC1AaXRlbSBmbGF0bmVzcwo+ PiAtRmxhdG5lc3MgdGhyZXNob2xkIHdoZXJlIGxvd2VyIHZhbHVlcyBtZWFuIG1vcmUgZGVibG9j a2luZyAoZGVmYXVsdDoKPj4gQGNvZGV7Mzl9KS4KPj4gLUBlbmQgdGFibGUKPj4gLQo+PiAtQGl0 ZW0gdmEvdmFkZWJsb2NrW3xkaWZmZXJlbmNlW3xmbGF0bmVzc11dCj4+IC1BY2N1cmF0ZSB2ZXJ0 aWNhbCBkZWJsb2NraW5nIGZpbHRlcgo+PiAtQHRhYmxlIEBvcHRpb24KPj4gLUBpdGVtIGRpZmZl cmVuY2UKPj4gLURpZmZlcmVuY2UgZmFjdG9yIHdoZXJlIGhpZ2hlciB2YWx1ZXMgbWVhbiBtb3Jl IGRlYmxvY2tpbmcgKGRlZmF1bHQ6Cj4+IEBjb2RlezMyfSkuCj4+IC1AaXRlbSBmbGF0bmVzcwo+ PiAtRmxhdG5lc3MgdGhyZXNob2xkIHdoZXJlIGxvd2VyIHZhbHVlcyBtZWFuIG1vcmUgZGVibG9j a2luZyAoZGVmYXVsdDoKPj4gQGNvZGV7Mzl9KS4KPj4gLUBlbmQgdGFibGUKPj4gLUBlbmQgdGFi bGUKPj4gLQo+PiAtVGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGRlYmxvY2tpbmcgZmlsdGVy cyBzaGFyZSB0aGUgZGlmZmVyZW5jZSBhbmQKPj4gLWZsYXRuZXNzIHZhbHVlcyBzbyB5b3UgY2Fu bm90IHNldCBkaWZmZXJlbnQgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwKPj4gLXRocmVzaG9sZHMu Cj4+IC0KPj4gLUB0YWJsZSBAb3B0aW9uCj4+IC1AaXRlbSBoMS94MWhkZWJsb2NrCj4+IC1FeHBl cmltZW50YWwgaG9yaXpvbnRhbCBkZWJsb2NraW5nIGZpbHRlcgo+PiAtCj4+IC1AaXRlbSB2MS94 MXZkZWJsb2NrCj4+IC1FeHBlcmltZW50YWwgdmVydGljYWwgZGVibG9ja2luZyBmaWx0ZXIKPj4g LQo+PiAtQGl0ZW0gZHIvZGVyaW5nCj4+IC1EZXJpbmdpbmcgZmlsdGVyCj4+IC0KPj4gLUBpdGVt IHRuL3RtcG5vaXNlW3x0aHJlc2hvbGQxW3x0aHJlc2hvbGQyW3x0aHJlc2hvbGQzXV1dLCB0ZW1w b3JhbCBub2lzZQo+PiByZWR1Y2VyCj4+IC1AdGFibGUgQG9wdGlvbgo+PiAtQGl0ZW0gdGhyZXNo b2xkMQo+PiAtbGFyZ2VyIC0+IHN0cm9uZ2VyIGZpbHRlcmluZwo+PiAtQGl0ZW0gdGhyZXNob2xk Mgo+PiAtbGFyZ2VyIC0+IHN0cm9uZ2VyIGZpbHRlcmluZwo+PiAtQGl0ZW0gdGhyZXNob2xkMwo+ PiAtbGFyZ2VyIC0+IHN0cm9uZ2VyIGZpbHRlcmluZwo+PiAtQGVuZCB0YWJsZQo+PiAtCj4+IC1A aXRlbSBhbC9hdXRvbGV2ZWxzWzpmL2Z1bGx5cmFuZ2VdLCBhdXRvbWF0aWMgYnJpZ2h0bmVzcyAv IGNvbnRyYXN0Cj4+IGNvcnJlY3Rpb24KPj4gLUB0YWJsZSBAb3B0aW9uCj4+IC1AaXRlbSBmL2Z1 bGx5cmFuZ2UKPj4gLVN0cmV0Y2ggbHVtYSB0byBAY29kZXswLTI1NX0uCj4+IC1AZW5kIHRhYmxl Cj4+IC0KPj4gLUBpdGVtIGxiL2xpbmJsZW5kZGVpbnQKPj4gLUxpbmVhciBibGVuZCBkZWludGVy bGFjaW5nIGZpbHRlciB0aGF0IGRlaW50ZXJsYWNlcyB0aGUgZ2l2ZW4gYmxvY2sgYnkKPj4gLWZp bHRlcmluZyBhbGwgbGluZXMgd2l0aCBhIEBjb2RleygxIDIgMSl9IGZpbHRlci4KPj4gLQo+PiAt QGl0ZW0gbGkvbGluaXBvbGRlaW50Cj4+IC1MaW5lYXIgaW50ZXJwb2xhdGluZyBkZWludGVybGFj aW5nIGZpbHRlciB0aGF0IGRlaW50ZXJsYWNlcyB0aGUgZ2l2ZW4KPj4gYmxvY2sgYnkKPj4gLWxp bmVhcmx5IGludGVycG9sYXRpbmcgZXZlcnkgc2Vjb25kIGxpbmUuCj4+IC0KPj4gLUBpdGVtIGNp L2N1YmljaXBvbGRlaW50Cj4+IC1DdWJpYyBpbnRlcnBvbGF0aW5nIGRlaW50ZXJsYWNpbmcgZmls dGVyIGRlaW50ZXJsYWNlcyB0aGUgZ2l2ZW4gYmxvY2sgYnkKPj4gLWN1YmljYWxseSBpbnRlcnBv bGF0aW5nIGV2ZXJ5IHNlY29uZCBsaW5lLgo+PiAtCj4+IC1AaXRlbSBtZC9tZWRpYW5kZWludAo+ PiAtTWVkaWFuIGRlaW50ZXJsYWNpbmcgZmlsdGVyIHRoYXQgZGVpbnRlcmxhY2VzIHRoZSBnaXZl biBibG9jayBieQo+PiBhcHBseWluZyBhCj4+IC1tZWRpYW4gZmlsdGVyIHRvIGV2ZXJ5IHNlY29u ZCBsaW5lLgo+PiAtCj4+IC1AaXRlbSBmZC9mZm1wZWdkZWludAo+PiAtRkZtcGVnIGRlaW50ZXJs YWNpbmcgZmlsdGVyIHRoYXQgZGVpbnRlcmxhY2VzIHRoZSBnaXZlbiBibG9jayBieQo+PiBmaWx0 ZXJpbmcgZXZlcnkKPj4gLXNlY29uZCBsaW5lIHdpdGggYSBAY29kZXsoLTEgNCAyIDQgLTEpfSBm aWx0ZXIuCj4+IC0KPj4gLUBpdGVtIGw1L2xvd3Bhc3M1Cj4+IC1WZXJ0aWNhbGx5IGFwcGxpZWQg RklSIGxvd3Bhc3MgZGVpbnRlcmxhY2luZyBmaWx0ZXIgdGhhdCBkZWludGVybGFjZXMKPj4gdGhl IGdpdmVuCj4+IC1ibG9jayBieSBmaWx0ZXJpbmcgYWxsIGxpbmVzIHdpdGggYSBAY29kZXsoLTEg MiA2IDIgLTEpfSBmaWx0ZXIuCj4+IC0KPj4gLUBpdGVtIGZxL2ZvcmNlUXVhbnRbfHF1YW50aXpl cl0KPj4gLU92ZXJyaWRlcyB0aGUgcXVhbnRpemVyIHRhYmxlIGZyb20gdGhlIGlucHV0IHdpdGgg dGhlIGNvbnN0YW50IHF1YW50aXplcgo+PiB5b3UKPj4gLXNwZWNpZnkuCj4+IC1AdGFibGUgQG9w dGlvbgo+PiAtQGl0ZW0gcXVhbnRpemVyCj4+IC1RdWFudGl6ZXIgdG8gdXNlCj4+IC1AZW5kIHRh YmxlCj4+IC0KPj4gLUBpdGVtIGRlL2RlZmF1bHQKPj4gLURlZmF1bHQgcHAgZmlsdGVyIGNvbWJp bmF0aW9uIChAY29kZXtoYnxhLHZifGEsZHJ8YX0pCj4+IC0KPj4gLUBpdGVtIGZhL2Zhc3QKPj4g LUZhc3QgcHAgZmlsdGVyIGNvbWJpbmF0aW9uIChAY29kZXtoMXxhLHYxfGEsZHJ8YX0pCj4+IC0K Pj4gLUBpdGVtIGFjCj4+IC1IaWdoIHF1YWxpdHkgcHAgZmlsdGVyIGNvbWJpbmF0aW9uIChAY29k ZXtoYXxhfDEyOHw3LHZhfGEsZHJ8YX0pCj4+IC1AZW5kIHRhYmxlCj4+IC0KPj4gLUBzdWJzZWN0 aW9uIEV4YW1wbGVzCj4+IC0KPj4gLUBpdGVtaXplCj4+IC1AaXRlbQo+PiAtQXBwbHkgaG9yaXpv bnRhbCBhbmQgdmVydGljYWwgZGVibG9ja2luZywgZGVyaW5naW5nIGFuZCBhdXRvbWF0aWMKPj4g LWJyaWdodG5lc3MvY29udHJhc3Q6Cj4+IC1AZXhhbXBsZQo+PiAtcHA9aGIvdmIvZHIvYWwKPj4g LUBlbmQgZXhhbXBsZQo+PiAtCj4+IC1AaXRlbQo+PiAtQXBwbHkgZGVmYXVsdCBmaWx0ZXJzIHdp dGhvdXQgYnJpZ2h0bmVzcy9jb250cmFzdCBjb3JyZWN0aW9uOgo+PiAtQGV4YW1wbGUKPj4gLXBw PWRlLy1hbAo+PiAtQGVuZCBleGFtcGxlCj4+IC0KPj4gLUBpdGVtCj4+IC1BcHBseSBkZWZhdWx0 IGZpbHRlcnMgYW5kIHRlbXBvcmFsIGRlbm9pc2VyOgo+PiAtQGV4YW1wbGUKPj4gLXBwPWRlZmF1 bHQvdG1wbm9pc2V8MXwyfDMKPj4gLUBlbmQgZXhhbXBsZQo+PiAtCj4+IC1AaXRlbQo+PiAtQXBw bHkgZGVibG9ja2luZyBvbiBsdW1hIG9ubHksIGFuZCBzd2l0Y2ggdmVydGljYWwgZGVibG9ja2lu ZyBvbiBvciBvZmYKPj4gLWF1dG9tYXRpY2FsbHkgZGVwZW5kaW5nIG9uIGF2YWlsYWJsZSBDUFUg dGltZToKPj4gLUBleGFtcGxlCj4+IC1wcD1oYnx5L3ZifGEKPj4gLUBlbmQgZXhhbXBsZQo+PiAt QGVuZCBpdGVtaXplCj4+IC0KPj4gIEBzZWN0aW9uIHBwNwo+PiAgQXBwbHkgUG9zdHByb2Nlc3Np bmcgZmlsdGVyIDcuIEl0IGlzIHZhcmlhbnQgb2YgdGhlIEByZWZ7c3BwfSBmaWx0ZXIsCj4+ICBz aW1pbGFyIHRvIHNwcCA9IDYgd2l0aCA3IHBvaW50IERDVCwgd2hlcmUgb25seSB0aGUgY2VudGVy IHNhbXBsZSBpcwo+PiBkaWZmIC0tZ2l0IGEvZmZ0b29scy9mZnByb2JlLmMgYi9mZnRvb2xzL2Zm cHJvYmUuYwo+PiBpbmRleCBkOTgwZDRlNjRmZS4uZjMzNTMxZmQ4NGMgMTAwNjQ0Cj4+IC0tLSBh L2ZmdG9vbHMvZmZwcm9iZS5jCj4+ICsrKyBiL2ZmdG9vbHMvZmZwcm9iZS5jCj4+IEBAIC02Miw4 ICs2Miw2IEBACj4+ICAjaW5jbHVkZSAibGlic3dzY2FsZS92ZXJzaW9uLmgiCj4+ICAjaW5jbHVk ZSAibGlic3dyZXNhbXBsZS9zd3Jlc2FtcGxlLmgiCj4+ICAjaW5jbHVkZSAibGlic3dyZXNhbXBs ZS92ZXJzaW9uLmgiCj4+IC0jaW5jbHVkZSAibGlicG9zdHByb2MvcG9zdHByb2Nlc3MuaCIKPj4g LSNpbmNsdWRlICJsaWJwb3N0cHJvYy92ZXJzaW9uLmgiCj4+ICAjaW5jbHVkZSAibGliYXZmaWx0 ZXIvdmVyc2lvbi5oIgo+PiAgI2luY2x1ZGUgInRleHRmb3JtYXQvYXZ0ZXh0Zm9ybWF0LmgiCj4+ ICAjaW5jbHVkZSAiY21kdXRpbHMuaCIKPj4gQEAgLTI1NzMsNyArMjU3MSw2IEBAIHN0YXRpYyB2 b2lkCj4+IGZmcHJvYmVfc2hvd19saWJyYXJ5X3ZlcnNpb25zKEFWVGV4dEZvcm1hdENvbnRleHQg KnRmYykKPj4gICAgICBTSE9XX0xJQl9WRVJTSU9OKGF2ZmlsdGVyLCAgIEFWRklMVEVSKTsKPj4g ICAgICBTSE9XX0xJQl9WRVJTSU9OKHN3c2NhbGUsICAgIFNXU0NBTEUpOwo+PiAgICAgIFNIT1df TElCX1ZFUlNJT04oc3dyZXNhbXBsZSwgU1dSRVNBTVBMRSk7Cj4+IC0gICAgU0hPV19MSUJfVkVS U0lPTihwb3N0cHJvYywgICBQT1NUUFJPQyk7Cj4+ICAgICAgYXZ0ZXh0X3ByaW50X3NlY3Rpb25f Zm9vdGVyKHRmYyk7Cj4+ICB9Cj4+Cj4+IGRpZmYgLS1naXQgYS9mZnRvb2xzL29wdF9jb21tb24u YyBiL2ZmdG9vbHMvb3B0X2NvbW1vbi5jCj4+IGluZGV4IDJhYzNmZDRmYjM2Li5jMmY2YjlkZTJh NyAxMDA2NDQKPj4gLS0tIGEvZmZ0b29scy9vcHRfY29tbW9uLmMKPj4gKysrIGIvZmZ0b29scy9v cHRfY29tbW9uLmMKPj4gQEAgLTYwLDggKzYwLDYgQEAKPj4gICNpbmNsdWRlICJsaWJzd3Jlc2Ft cGxlL3N3cmVzYW1wbGUuaCIKPj4gICNpbmNsdWRlICJsaWJzd3Jlc2FtcGxlL3ZlcnNpb24uaCIK Pj4KPj4gLSNpbmNsdWRlICJsaWJwb3N0cHJvYy9wb3N0cHJvY2Vzcy5oIgo+PiAtI2luY2x1ZGUg ImxpYnBvc3Rwcm9jL3ZlcnNpb24uaCIKPj4KPj4gIGVudW0gc2hvd19tdXhkZW11eGVycyB7Cj4+ ICAgICAgU0hPV19ERUZBVUxULAo+PiBAQCAtMTkxLDcgKzE4OSw2IEBAIHN0YXRpYyB2b2lkIHBy aW50X2FsbF9saWJzX2luZm8oaW50IGZsYWdzLCBpbnQgbGV2ZWwpCj4+ICAgICAgUFJJTlRfTElC X0lORk8oYXZmaWx0ZXIsICAgQVZGSUxURVIsICAgZmxhZ3MsIGxldmVsKTsKPj4gICAgICBQUklO VF9MSUJfSU5GTyhzd3NjYWxlLCAgICBTV1NDQUxFLCAgICBmbGFncywgbGV2ZWwpOwo+PiAgICAg IFBSSU5UX0xJQl9JTkZPKHN3cmVzYW1wbGUsIFNXUkVTQU1QTEUsIGZsYWdzLCBsZXZlbCk7Cj4+ IC0gICAgUFJJTlRfTElCX0lORk8ocG9zdHByb2MsICAgUE9TVFBST0MsICAgZmxhZ3MsIGxldmVs KTsKPj4gIH0KPj4KPj4gIHN0YXRpYyB2b2lkIHByaW50X3Byb2dyYW1faW5mbyhpbnQgZmxhZ3Ms IGludCBsZXZlbCkKPj4gZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlIGIvbGliYXZm aWx0ZXIvTWFrZWZpbGUKPj4gaW5kZXggN2MwZDg3OWVjOWMuLjBlZmZlNDEyN2ZmIDEwMDY0NAo+ PiAtLS0gYS9saWJhdmZpbHRlci9NYWtlZmlsZQo+PiArKysgYi9saWJhdmZpbHRlci9NYWtlZmls ZQo+PiBAQCAtNDMxLDcgKzQzMSw2IEBAIE9CSlMtJChDT05GSUdfUEhPVE9TRU5TSVRJVklUWV9G SUxURVIpICAgICAgICs9Cj4+IHZmX3Bob3Rvc2Vuc2l0aXZpdHkubwo+PiAgT0JKUy0kKENPTkZJ R19QSVhERVNDVEVTVF9GSUxURVIpICAgICAgICAgICAgKz0gdmZfcGl4ZGVzY3Rlc3Qubwo+PiAg T0JKUy0kKENPTkZJR19QSVhFTElaRV9GSUxURVIpICAgICAgICAgICAgICAgKz0gdmZfcGl4ZWxp emUubwo+PiAgT0JKUy0kKENPTkZJR19QSVhTQ09QRV9GSUxURVIpICAgICAgICAgICAgICAgKz0g dmZfZGF0YXNjb3BlLm8KPj4gLU9CSlMtJChDT05GSUdfUFBfRklMVEVSKSAgICAgICAgICAgICAg ICAgICAgICs9IHZmX3BwLm8gcXBfdGFibGUubwo+PiAgT0JKUy0kKENPTkZJR19QUDdfRklMVEVS KSAgICAgICAgICAgICAgICAgICAgKz0gdmZfcHA3Lm8gcXBfdGFibGUubwo+PiAgT0JKUy0kKENP TkZJR19QUkVNVUxUSVBMWV9GSUxURVIpICAgICAgICAgICAgKz0gdmZfcHJlbXVsdGlwbHkubwo+ PiBmcmFtZXN5bmMubwo+PiAgT0JKUy0kKENPTkZJR19QUkVXSVRUX0ZJTFRFUikgICAgICAgICAg ICAgICAgKz0gdmZfY29udm9sdXRpb24ubwo+PiBkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvYWxs ZmlsdGVycy5jIGIvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCj4+IGluZGV4IDc0MGQ5YWIyNjVj Li41ZWEzM2NkZjAxYiAxMDA2NDQKPj4gLS0tIGEvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCj4+ ICsrKyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwo+PiBAQCAtNDA0LDcgKzQwNCw2IEBAIGV4 dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9waG90b3NlbnNpdGl2aXR5Owo+PiAgZXh0ZXJuIGNv bnN0IEZGRmlsdGVyIGZmX3ZmX3BpeGRlc2N0ZXN0Owo+PiAgZXh0ZXJuIGNvbnN0IEZGRmlsdGVy IGZmX3ZmX3BpeGVsaXplOwo+PiAgZXh0ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3BpeHNjb3Bl Owo+PiAtZXh0ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3BwOwo+PiAgZXh0ZXJuIGNvbnN0IEZG RmlsdGVyIGZmX3ZmX3BwNzsKPj4gIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9wcmVtdWx0 aXBseTsKPj4gIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9wcmV3aXR0Owo+PiBkaWZmIC0t Z2l0IGEvbGliYXZmaWx0ZXIvdmZfcHAuYyBiL2xpYmF2ZmlsdGVyL3ZmX3BwLmMKPj4gZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDllOTkwM2ViOTc0Li4wMDAwMDAwMDAwMAo+PiAt LS0gYS9saWJhdmZpbHRlci92Zl9wcC5jCj4+ICsrKyAvZGV2L251bGwKPj4gQEAgLTEsMTkxICsw LDAgQEAKPj4gLS8qCj4+IC0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgQSdycGkKPj4gLSAqIENvcHly aWdodCAoQykgMjAxMiBDbMOpbWVudCBCxZNzY2gKPj4gLSAqCj4+IC0gKiBUaGlzIGZpbGUgaXMg cGFydCBvZiBGRm1wZWcuCj4+IC0gKgo+PiAtICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPj4gLSAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4+ IC0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgo+PiAtICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K Pj4gLSAqCj4+IC0gKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKPj4gLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+IC0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+IC0gKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiAtICoKPj4gLSAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl Cj4+IGFsb25nCj4+IC0gKiB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAo+PiAtICogNTEgRnJhbmtsaW4gU3RyZWV0Cj4+IDxo dHRwczovL3d3dy5nb29nbGUuY29tL21hcHMvc2VhcmNoLzUxK0ZyYW5rbGluK1N0cmVldD9lbnRy eT1nbWFpbCZzb3VyY2U9Zz4sCj4+IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBLgo+PiAtICovCj4+IC0KPj4gLS8qKgo+PiAtICogQGZpbGUKPj4gLSAqIGxpYnBvc3Rwcm9j IGZpbHRlciwgcG9ydGVkIGZyb20gTVBsYXllci4KPj4gLSAqLwo+PiAtCj4+IC0jaW5jbHVkZSAi bGliYXZ1dGlsL2F2YXNzZXJ0LmgiCj4+IC0jaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+PiAt I2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPj4gLQo+PiAtI2luY2x1ZGUgImZpbHRlcnMuaCIK Pj4gLSNpbmNsdWRlICJxcF90YWJsZS5oIgo+PiAtI2luY2x1ZGUgInZpZGVvLmgiCj4+IC0KPj4g LSNpbmNsdWRlICJsaWJwb3N0cHJvYy9wb3N0cHJvY2Vzcy5oIgo+PiAtCj4+IC10eXBlZGVmIHN0 cnVjdCBQUEZpbHRlckNvbnRleHQgewo+PiAtICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOwo+PiAt ICAgIGNoYXIgKnN1YmZpbHRlcnM7Cj4+IC0gICAgaW50IG1vZGVfaWQ7Cj4+IC0gICAgcHBfbW9k ZSAqbW9kZXNbUFBfUVVBTElUWV9NQVggKyAxXTsKPj4gLSAgICB2b2lkICpwcF9jdHg7Cj4+IC19 IFBQRmlsdGVyQ29udGV4dDsKPj4gLQo+PiAtI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoUFBG aWx0ZXJDb250ZXh0LCB4KQo+PiAtI2RlZmluZSBGTEFHUyBBVl9PUFRfRkxBR19GSUxURVJJTkdf UEFSQU18QVZfT1BUX0ZMQUdfVklERU9fUEFSQU0KPj4gLXN0YXRpYyBjb25zdCBBVk9wdGlvbiBw cF9vcHRpb25zW10gPSB7Cj4+IC0gICAgeyAic3ViZmlsdGVycyIsICJzZXQgcG9zdHByb2Nlc3Mg c3ViZmlsdGVycyIsIE9GRlNFVChzdWJmaWx0ZXJzKSwKPj4gQVZfT1BUX1RZUEVfU1RSSU5HLCB7 LnN0cj0iZGUifSwgLmZsYWdzID0gRkxBR1MgfSwKPj4gLSAgICB7IE5VTEwgfQo+PiAtfTsKPj4g LQo+PiAtQVZGSUxURVJfREVGSU5FX0NMQVNTKHBwKTsKPj4gLQo+PiAtc3RhdGljIGF2X2NvbGQg aW50IHBwX2luaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCj4+IC17Cj4+IC0gICAgaW50IGk7Cj4+ IC0gICAgUFBGaWx0ZXJDb250ZXh0ICpwcCA9IGN0eC0+cHJpdjsKPj4gLQo+PiAtICAgIGZvciAo aSA9IDA7IGkgPD0gUFBfUVVBTElUWV9NQVg7IGkrKykgewo+PiAtICAgICAgICBwcC0+bW9kZXNb aV0gPSBwcF9nZXRfbW9kZV9ieV9uYW1lX2FuZF9xdWFsaXR5KHBwLT5zdWJmaWx0ZXJzLAo+PiBp KTsKPj4gLSAgICAgICAgaWYgKCFwcC0+bW9kZXNbaV0pCj4+IC0gICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9FWFRFUk5BTDsKPj4gLSAgICB9Cj4+IC0gICAgcHAtPm1vZGVfaWQgPSBQUF9RVUFM SVRZX01BWDsKPj4gLSAgICByZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBwcF9w cm9jZXNzX2NvbW1hbmQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmNtZCwKPj4g Y29uc3QgY2hhciAqYXJncywKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KnJlcywgaW50IHJlc19sZW4sIGludCBmbGFncykKPj4gLXsKPj4gLSAgICBQUEZpbHRlckNvbnRl eHQgKnBwID0gY3R4LT5wcml2Owo+PiAtCj4+IC0gICAgaWYgKCFzdHJjbXAoY21kLCAicXVhbGl0 eSIpKSB7Cj4+IC0gICAgICAgIHBwLT5tb2RlX2lkID0gYXZfY2xpcChzdHJ0b2woYXJncywgTlVM TCwgMTApLCAwLCBQUF9RVUFMSVRZX01BWCk7Cj4+IC0gICAgICAgIHJldHVybiAwOwo+PiAtICAg IH0KPj4gLSAgICByZXR1cm4gQVZFUlJPUihFTk9TWVMpOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMg Y29uc3QgZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXRzW10gPSB7Cj4+IC0gICAgQVZfUElYX0ZN VF9ZVVY0MjBQLCBBVl9QSVhfRk1UX1lVVko0MjBQLAo+PiAtICAgIEFWX1BJWF9GTVRfWVVWNDIy UCwgQVZfUElYX0ZNVF9ZVVZKNDIyUCwKPj4gLSAgICBBVl9QSVhfRk1UX1lVVjQxMVAsCj4+IC0g ICAgQVZfUElYX0ZNVF9HQlJQLAo+PiAtICAgIEFWX1BJWF9GTVRfWVVWNDQ0UCwgQVZfUElYX0ZN VF9ZVVZKNDQ0UCwKPj4gLSAgICBBVl9QSVhfRk1UX1lVVjQ0MFAsIEFWX1BJWF9GTVRfWVVWSjQ0 MFAsCj4+IC0gICAgQVZfUElYX0ZNVF9HUkFZOCwKPj4gLSAgICBBVl9QSVhfRk1UX05PTkUKPj4g LX07Cj4+IC0KPj4gLXN0YXRpYyBpbnQgcHBfY29uZmlnX3Byb3BzKEFWRmlsdGVyTGluayAqaW5s aW5rKQo+PiAtewo+PiAtICAgIGludCBmbGFncyA9IFBQX0NQVV9DQVBTX0FVVE87Cj4+IC0gICAg UFBGaWx0ZXJDb250ZXh0ICpwcCA9IGlubGluay0+ZHN0LT5wcml2Owo+PiAtCj4+IC0gICAgc3dp dGNoIChpbmxpbmstPmZvcm1hdCkgewo+PiAtICAgIGNhc2UgQVZfUElYX0ZNVF9HUkFZODoKPj4g LSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWSjQyMFA6Cj4+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lV VjQyMFA6IGZsYWdzIHw9IFBQX0ZPUk1BVF80MjA7IGJyZWFrOwo+PiAtICAgIGNhc2UgQVZfUElY X0ZNVF9ZVVZKNDIyUDoKPj4gLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDogZmxhZ3MgfD0g UFBfRk9STUFUXzQyMjsgYnJlYWs7Cj4+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQxMVA6IGZs YWdzIHw9IFBQX0ZPUk1BVF80MTE7IGJyZWFrOwo+PiAtICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJQ Ogo+PiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZKNDQ0UDoKPj4gLSAgICBjYXNlIEFWX1BJWF9G TVRfWVVWNDQ0UDogZmxhZ3MgfD0gUFBfRk9STUFUXzQ0NDsgYnJlYWs7Cj4+IC0gICAgY2FzZSBB Vl9QSVhfRk1UX1lVVko0NDBQOgo+PiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDBQOiBmbGFn cyB8PSBQUF9GT1JNQVRfNDQwOyBicmVhazsKPj4gLSAgICBkZWZhdWx0OiBhdl9hc3NlcnQwKDAp Owo+PiAtICAgIH0KPj4gLQo+PiAtICAgIHBwLT5wcF9jdHggPSBwcF9nZXRfY29udGV4dChpbmxp bmstPncsIGlubGluay0+aCwgZmxhZ3MpOwo+PiAtICAgIGlmICghcHAtPnBwX2N0eCkKPj4gLSAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPj4gLSAgICByZXR1cm4gMDsKPj4gLX0KPj4g LQo+PiAtc3RhdGljIGludCBwcF9maWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxpbmssIEFW RnJhbWUgKmluYnVmKQo+PiAtewo+PiAtICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gaW5saW5r LT5kc3Q7Cj4+IC0gICAgUFBGaWx0ZXJDb250ZXh0ICpwcCA9IGN0eC0+cHJpdjsKPj4gLSAgICBB VkZpbHRlckxpbmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07Cj4+IC0gICAgY29uc3QgaW50 IGFsaWduZWRfdyA9IEZGQUxJR04ob3V0bGluay0+dywgOCk7Cj4+IC0gICAgY29uc3QgaW50IGFs aWduZWRfaCA9IEZGQUxJR04ob3V0bGluay0+aCwgOCk7Cj4+IC0gICAgQVZGcmFtZSAqb3V0YnVm Owo+PiAtICAgIGludCBxc3RyaWRlID0gMDsKPj4gLSAgICBpbnQ4X3QgKnFwX3RhYmxlID0gTlVM TDsKPj4gLSAgICBpbnQgcmV0Owo+PiAtCj4+IC0gICAgb3V0YnVmID0gZmZfZ2V0X3ZpZGVvX2J1 ZmZlcihvdXRsaW5rLCBhbGlnbmVkX3csIGFsaWduZWRfaCk7Cj4+IC0gICAgaWYgKCFvdXRidWYp IHsKPj4gLSAgICAgICAgYXZfZnJhbWVfZnJlZSgmaW5idWYpOwo+PiAtICAgICAgICByZXR1cm4g QVZFUlJPUihFTk9NRU0pOwo+PiAtICAgIH0KPj4gLSAgICBhdl9mcmFtZV9jb3B5X3Byb3BzKG91 dGJ1ZiwgaW5idWYpOwo+PiAtICAgIG91dGJ1Zi0+d2lkdGggID0gaW5idWYtPndpZHRoOwo+PiAt ICAgIG91dGJ1Zi0+aGVpZ2h0ID0gaW5idWYtPmhlaWdodDsKPj4gLQo+PiAtICAgIHJldCA9IGZm X3FwX3RhYmxlX2V4dHJhY3QoaW5idWYsICZxcF90YWJsZSwgJnFzdHJpZGUsIE5VTEwsIE5VTEwp Owo+PiAtICAgIGlmIChyZXQgPCAwKSB7Cj4+IC0gICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmluYnVm KTsKPj4gLSAgICAgICAgYXZfZnJhbWVfZnJlZSgmb3V0YnVmKTsKPj4gLSAgICAgICAgcmV0dXJu IHJldDsKPj4gLSAgICB9Cj4+IC0KPj4gLSAgICBwcF9wb3N0cHJvY2VzcygoY29uc3QgdWludDhf dCAqKilpbmJ1Zi0+ZGF0YSwgaW5idWYtPmxpbmVzaXplLAo+PiAtICAgICAgICAgICAgICAgICAg IG91dGJ1Zi0+ZGF0YSwgICAgICAgICAgICAgICAgIG91dGJ1Zi0+bGluZXNpemUsCj4+IC0gICAg ICAgICAgICAgICAgICAgYWxpZ25lZF93LCBvdXRsaW5rLT5oLAo+PiAtICAgICAgICAgICAgICAg ICAgIHFwX3RhYmxlLAo+PiAtICAgICAgICAgICAgICAgICAgIHFzdHJpZGUsCj4+IC0gICAgICAg ICAgICAgICAgICAgcHAtPm1vZGVzW3BwLT5tb2RlX2lkXSwKPj4gLSAgICAgICAgICAgICAgICAg ICBwcC0+cHBfY3R4LAo+PiAtICAgICAgICAgICAgICAgICAgIG91dGJ1Zi0+cGljdF90eXBlIHwg KHFwX3RhYmxlID8gUFBfUElDVF9UWVBFX1FQMiA6Cj4+IDApKTsKPj4gLQo+PiAtICAgIGF2X2Zy YW1lX2ZyZWUoJmluYnVmKTsKPj4gLSAgICBhdl9mcmVlcCgmcXBfdGFibGUpOwo+PiAtICAgIHJl dHVybiBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywgb3V0YnVmKTsKPj4gLX0KPj4gLQo+PiAtc3Rh dGljIGF2X2NvbGQgdm9pZCBwcF91bmluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCj4+IC17Cj4+ IC0gICAgaW50IGk7Cj4+IC0gICAgUFBGaWx0ZXJDb250ZXh0ICpwcCA9IGN0eC0+cHJpdjsKPj4g LQo+PiAtICAgIGZvciAoaSA9IDA7IGkgPD0gUFBfUVVBTElUWV9NQVg7IGkrKykKPj4gLSAgICAg ICAgcHBfZnJlZV9tb2RlKHBwLT5tb2Rlc1tpXSk7Cj4+IC0gICAgaWYgKHBwLT5wcF9jdHgpCj4+ IC0gICAgICAgIHBwX2ZyZWVfY29udGV4dChwcC0+cHBfY3R4KTsKPj4gLX0KPj4gLQo+PiAtc3Rh dGljIGNvbnN0IEFWRmlsdGVyUGFkIHBwX2lucHV0c1tdID0gewo+PiAtICAgIHsKPj4gLSAgICAg ICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0IiwKPj4gLSAgICAgICAgLnR5cGUgICAgICAgICA9 IEFWTUVESUFfVFlQRV9WSURFTywKPj4gLSAgICAgICAgLmNvbmZpZ19wcm9wcyA9IHBwX2NvbmZp Z19wcm9wcywKPj4gLSAgICAgICAgLmZpbHRlcl9mcmFtZSA9IHBwX2ZpbHRlcl9mcmFtZSwKPj4g LSAgICB9LAo+PiAtfTsKPj4gLQo+PiAtY29uc3QgRkZGaWx0ZXIgZmZfdmZfcHAgPSB7Cj4+IC0g ICAgLnAubmFtZSAgICAgICAgICA9ICJwcCIsCj4+IC0gICAgLnAuZGVzY3JpcHRpb24gICA9IE5V TExfSUZfQ09ORklHX1NNQUxMKCJGaWx0ZXIgdmlkZW8gdXNpbmcKPj4gbGlicG9zdHByb2MuIiks Cj4+IC0gICAgLnAucHJpdl9jbGFzcyAgICA9ICZwcF9jbGFzcywKPj4gLSAgICAucC5mbGFncyAg ICAgICAgID0gQVZGSUxURVJfRkxBR19TVVBQT1JUX1RJTUVMSU5FX0dFTkVSSUMsCj4+IC0gICAg LnByaXZfc2l6ZSAgICAgICA9IHNpemVvZihQUEZpbHRlckNvbnRleHQpLAo+PiAtICAgIC5pbml0 ICAgICAgICAgICAgPSBwcF9pbml0LAo+PiAtICAgIC51bmluaXQgICAgICAgICAgPSBwcF91bmlu aXQsCj4+IC0gICAgRklMVEVSX0lOUFVUUyhwcF9pbnB1dHMpLAo+PiAtICAgIEZJTFRFUl9PVVRQ VVRTKGZmX3ZpZGVvX2RlZmF1bHRfZmlsdGVycGFkKSwKPj4gLSAgICBGSUxURVJfUElYRk1UU19B UlJBWShwaXhfZm10cyksCj4+IC0gICAgLnByb2Nlc3NfY29tbWFuZCA9IHBwX3Byb2Nlc3NfY29t bWFuZCwKPj4gLX07Cj4+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvYXZ1dGlsLmggYi9saWJhdnV0 aWwvYXZ1dGlsLmgKPj4gaW5kZXggZWU3MDlmYmIyYWIuLmM4YWUxMTRhYjZmIDEwMDY0NAo+PiAt LS0gYS9saWJhdnV0aWwvYXZ1dGlsLmgKPj4gKysrIGIvbGliYXZ1dGlsL2F2dXRpbC5oCj4+IEBA IC00MSw3ICs0MSw2IEBACj4+ICAgKiBAbGkgQHJlZiBsYXZkICJsaWJhdmRldmljZSIgc3BlY2lh bCBkZXZpY2VzIG11eGluZy9kZW11eGluZyBsaWJyYXJ5Cj4+ICAgKiBAbGkgQHJlZiBsYXZ1ICJs aWJhdnV0aWwiIGNvbW1vbiB1dGlsaXR5IGxpYnJhcnkKPj4gICAqIEBsaSBAcmVmIGxzd3IgImxp YnN3cmVzYW1wbGUiIGF1ZGlvIHJlc2FtcGxpbmcsIGZvcm1hdCBjb252ZXJzaW9uIGFuZAo+PiBt aXhpbmcKPj4gLSAqIEBsaSBAcmVmIGxwcCAgImxpYnBvc3Rwcm9jIiBwb3N0IHByb2Nlc3Npbmcg bGlicmFyeQo+PiAgICogQGxpIEByZWYgbGlic3dzICJsaWJzd3NjYWxlIiBjb2xvciBjb252ZXJz aW9uIGFuZCBzY2FsaW5nIGxpYnJhcnkKPj4gICAqCj4+ICAgKiBAc2VjdGlvbiBmZm1wZWdfdmVy c2lvbmluZyBWZXJzaW9uaW5nIGFuZCBjb21wYXRpYmlsaXR5Cj4+IGRpZmYgLS1naXQgYS9saWJw b3N0cHJvYy9NYWtlZmlsZSBiL2xpYnBvc3Rwcm9jL01ha2VmaWxlCj4+IGRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAo+PiBpbmRleCBkNzhmYzAyNzdmNC4uMDAwMDAwMDAwMDAKPj4gLS0tIGEvbGli cG9zdHByb2MvTWFrZWZpbGUKPj4gKysrIC9kZXYvbnVsbAo+PiBAQCAtMSwyMyArMCwwIEBACj4+ IC1OQU1FID0gcG9zdHByb2MKPj4gLURFU0MgPSBGRm1wZWcgcG9zdHByb2Nlc3NpbmcgbGlicmFy eQo+PiAtRkZMSUJTID0gYXZ1dGlsCj4+IC0KPj4gLUhFQURFUlMgPSBwb3N0cHJvY2Vzcy5oICAg ICAgICBcCj4+IC0gICAgICAgICAgdmVyc2lvbi5oICAgICAgICAgICAgXAo+PiAtICAgICAgICAg IHZlcnNpb25fbWFqb3IuaCAgICAgIFwKPj4gLQo+PiAtT0JKUyA9IHBvc3Rwcm9jZXNzLm8gICAg ICAgICAgIFwKPj4gLSAgICAgICB2ZXJzaW9uLm8gICAgICAgICAgICAgICBcCj4+IC0KPj4gLVRF U1RPQkpTID0gdGVzdHMvdGVzdF91dGlscy5vICAgICAgICBcCj4+IC0KPj4gLSMgV2luZG93cyBy ZXNvdXJjZSBmaWxlCj4+IC1TSExJQk9CSlMtJChIQVZFX0dOVV9XSU5EUkVTKSArPSBwb3N0cHJv Y3Jlcy5vCj4+IC0KPj4gLVRFU1RQUk9HUyA9IGJsb2NrdGVzdCAgICAgICAgICBcCj4+IC0gICAg ICAgICAgICBzdHJpcGV0ZXN0ICAgICAgICAgXAo+PiAtICAgICAgICAgICAgdGVtcHRlc3QgICAg ICAgICAgXAo+PiAtCj4+IC0kKFNVQkRJUil0ZXN0cy9ibG9ja3Rlc3QkKEVYRVNVRik6ICAkKFNV QkRJUil0ZXN0cy90ZXN0X3V0aWxzLm8KPj4gLSQoU1VCRElSKXRlc3RzL3N0cmlwZXRlc3QkKEVY RVNVRik6ICQoU1VCRElSKXRlc3RzL3Rlc3RfdXRpbHMubwo+PiAtJChTVUJESVIpdGVzdHMvdGVt cHRlc3QkKEVYRVNVRik6ICAkKFNVQkRJUil0ZXN0cy90ZXN0X3V0aWxzLm8KPj4gZGlmZiAtLWdp dCBhL2xpYnBvc3Rwcm9jL2xpYnBvc3Rwcm9jLnYgYi9saWJwb3N0cHJvYy9saWJwb3N0cHJvYy52 Cj4+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAyNzM4MWM2YWNhMy4uMDAwMDAw MDAwMDAKPj4gLS0tIGEvbGlicG9zdHByb2MvbGlicG9zdHByb2Mudgo+PiArKysgL2Rldi9udWxs Cj4+IEBAIC0xLDcgKzAsMCBAQAo+PiAtTElCUE9TVFBST0NfTUFKT1Igewo+PiAtICAgIGdsb2Jh bDoKPj4gLSAgICAgICAgcG9zdHByb2NfKjsKPj4gLSAgICAgICAgcHBfKjsKPj4gLSAgICBsb2Nh bDoKPj4gLSAgICAgICAgKjsKPj4gLX07Cj4+IGRpZmYgLS1naXQgYS9saWJwb3N0cHJvYy9wb3N0 cHJvY2Vzcy5jIGIvbGlicG9zdHByb2MvcG9zdHByb2Nlc3MuYwo+PiBkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKPj4gaW5kZXggZWFiMjIyODkxOTIuLjAwMDAwMDAwMDAwCj4+IC0tLSBhL2xpYnBv c3Rwcm9jL3Bvc3Rwcm9jZXNzLmMKPj4gKysrIC9kZXYvbnVsbAo+PiBAQCAtMSw5OTIgKzAsMCBA QAo+PiAtLyoKPj4gLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIE1pY2hhZWwgTmllZGVybWF5 ZXIgKG1pY2hhZWxuaUBnbXguYXQpCj4+IC0gKgo+PiAtICogQWx0aVZlYyBvcHRpbWl6YXRpb25z IChDKSAyMDA0IFJvbWFpbiBEb2xiZWF1IDxyb21haW5AZG9sYmVhdS5vcmc+Cj4+IC0gKgo+PiAt ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+PiAtICoKPj4gLSAqIEZGbXBlZyBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4+IC0g KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQo+PiAtICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPj4gLSAqIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCj4+IC0gKgo+PiAtICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+IC0gKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiAtICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ PiAtICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gLSAq Cj4+IC0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQo+PiAtICogYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUKPj4gLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldAo+PiA8aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3NlYXJjaC81MStGcmFua2xp bitTdHJlZXQ/ZW50cnk9Z21haWwmc291cmNlPWc+LAo+PiBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QSAwMjExMC0xMzAxIFVTQQo+PiAtICovCj4+IC0KPj4gLS8qKgo+PiAtICogQGZpbGUKPj4gLSAq IHBvc3Rwcm9jZXNzaW5nLgo+PiAtICovCj4+IC0KPj4gLS8qCj4+IC0gICAgICAgICAgICAgICAg ICAgICAgICBDICAgICAgIE1NWCAgICAgTU1YMiAgICBBbHRpVmVjCj4+IC1pc1ZlcnREQyAgICAg ICAgICAgICAgICBFYyAgICAgIEVjICAgICAgICAgICAgICBFYwo+PiAtaXNWZXJ0TWluTWF4T2sg ICAgICAgICAgRWMgICAgICBFYyAgICAgICAgICAgICAgRWMKPj4gLWRvVmVydExvd1Bhc3MgICAg ICAgICAgIEUgICAgICAgICAgICAgICBlICAgICAgIEVjCj4+IC1kb1ZlcnREZWZGaWx0ZXIgICAg ICAgICBFYyAgICAgIEVjICAgICAgZSAgICAgICBFYwo+PiAtaXNIb3JpekRDICAgICAgICAgICAg ICAgRWMgICAgICBFYyAgICAgICAgICAgICAgRWMKPj4gLWlzSG9yaXpNaW5NYXhPayAgICAgICAg IGEgICAgICAgRSAgICAgICAgICAgICAgIEVjCj4+IC1kb0hvcml6TG93UGFzcyAgICAgICAgICBF ICAgICAgICAgICAgICAgZSAgICAgICBFYwo+PiAtZG9Ib3JpekRlZkZpbHRlciAgICAgICAgRWMg ICAgICBFYyAgICAgIGUgICAgICAgRWMKPj4gLWRvX2FfZGVibG9jayAgICAgICAgICAgIEVjICAg ICAgRSAgICAgICBFYwo+PiAtZGVSaW5nICAgICAgICAgICAgICAgICAgRSAgICAgICAgICAgICAg IGUgICAgICAgRWNwCj4+IC1WZXJ0aWNhbCBSS0FsZ28xICAgICAgICBFICAgICAgICAgICAgICAg YQo+PiAtSG9yaXpvbnRhbCBSS0FsZ28xICAgICAgICAgICAgICAgICAgICAgIGEKPj4gLVZlcnRp Y2FsIFgxIyAgICAgICAgICAgIGEgICAgICAgICAgICAgICBFCj4+IC1Ib3Jpem9udGFsIFgxIyAg ICAgICAgICBhICAgICAgICAgICAgICAgRQo+PiAtTGluSXBvbERlaW50ZXJsYWNlICAgICAgZSAg ICAgICAgICAgICAgIEUKPj4gLUN1YmljSXBvbERlaW50ZXJsYWNlICAgIGEgICAgICAgICAgICAg ICBlCj4+IC1MaW5CbGVuZERlaW50ZXJsYWNlICAgICBlICAgICAgICAgICAgICAgRQo+PiAtTWVk aWFuRGVpbnRlcmxhY2UjICAgICAgRSAgICAgICBFYyAgICAgIEVjCj4+IC1UZW1wRGVOb2lzZXIj ICAgICAgICAgICBFICAgICAgICAgICAgICAgZSAgICAgICBFYwo+PiAtCj4+IC0jIG1vcmUgb3Ig bGVzcyBzZWxmaW52ZW50ZWQgZmlsdGVycyBzbyB0aGUgZXhhY3RuZXNzIGlzIG5vdCB0b28KPj4g bWVhbmluZ2Z1bAo+PiAtRSA9IEV4YWN0IGltcGxlbWVudGF0aW9uCj4+IC1lID0gYWxtb3N0IGV4 YWN0IGltcGxlbWVudGF0aW9uIChzbGlnaHRseSBkaWZmZXJlbnQgcm91bmRpbmcsLi4uKQo+PiAt YSA9IGFsdGVybmF0aXZlIC8gYXBwcm94aW1hdGUgaW1wbAo+PiAtYyA9IGNoZWNrZWQgYWdhaW5z dCB0aGUgb3RoZXIgaW1wbGVtZW50YXRpb25zICgtdm8gbWQ1KQo+PiAtcCA9IHBhcnRpYWxseSBv cHRpbWl6ZWQsIHN0aWxsIHNvbWUgd29yayB0byBkbwo+PiAtKi8KPj4gLQo+PiAtLyoKPj4gLVRP RE86Cj4+IC1yZWR1Y2UgdGhlIHRpbWUgd2FzdGVkIG9uIHRoZSBtZW0gdHJhbnNmZXIKPj4gLXVu cm9sbCBzdHVmZiBpZiBpbnN0cnVjdGlvbnMgZGVwZW5kIHRvbyBtdWNoIG9uIHRoZSBwcmlvciBv bmUKPj4gLW1vdmUgWVNjYWxlIHRoaW5nIHRvIHRoZSBlbmQgaW5zdGVhZCBvZiBmaXhpbmcgUVAK Pj4gLXdyaXRlIGEgZmFzdGVyIGFuZCBoaWdoZXIgcXVhbGl0eSBkZWJsb2NraW5nIGZpbHRlciA6 KQo+PiAtbWFrZSB0aGUgbWFpbmxvb3AgbW9yZSBmbGV4aWJsZSAodmFyaWFibGUgbnVtYmVyIG9m IGJsb2NrcyBhdCBvbmNlCj4+IC0gICAgICAgICh0aGUgaWYvZWxzZSBzdHVmZiBwZXIgYmxvY2sg aXMgc2xvd2luZyB0aGluZ3MgZG93bikKPj4gLWNvbXBhcmUgdGhlIHF1YWxpdHkgJiBzcGVlZCBv ZiBhbGwgZmlsdGVycwo+PiAtc3BsaXQgdGhpcyBodWdlIGZpbGUKPj4gLW9wdGltaXplIGMgdmVy c2lvbnMKPj4gLXRyeSB0byB1bnJvbGwgaW5uZXIgZm9yKHg9MCAuLi4gbG9vcCB0byBhdm9pZCB0 aGVzZSBkYW1uIGlmKHggLi4uIGNoZWNrcwo+PiAtLi4uCj4+IC0qLwo+PiAtCj4+IC0vL0NoYW5n ZWxvZzogdXNlIGdpdCBsb2cKPj4gLQo+PiAtI2luY2x1ZGUgPHN0ZGRlZi5oPgo+PiAtI2luY2x1 ZGUgPHN0ZGxpYi5oPgo+PiAtI2luY2x1ZGUgPHN0cmluZy5oPgo+PiAtCj4+IC0jaW5jbHVkZSAi Y29uZmlnLmgiCj4+IC0jaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIgo+PiAtI2luY2x1ZGUg ImxpYmF2dXRpbC9jcHUuaCIKPj4gLSNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgi Cj4+IC0jaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+PiAtLy8jdW5kZWYgSEFWRV9NTVhFWFRf SU5MSU5FCj4+IC0vLyN1bmRlZiBIQVZFX01NWF9JTkxJTkUKPj4gLS8vI3VuZGVmIEFSQ0hfWDg2 Cj4+IC0vLyNkZWZpbmUgREVCVUdfQlJJR0hUTkVTUwo+PiAtI2luY2x1ZGUgInBvc3Rwcm9jZXNz LmgiCj4+IC0jaW5jbHVkZSAicG9zdHByb2Nlc3NfaW50ZXJuYWwuaCIKPj4gLSNpbmNsdWRlICJs aWJhdnV0aWwvYXZzdHJpbmcuaCIKPj4gLQo+PiAtI2RlZmluZSBHRVRfTU9ERV9CVUZGRVJfU0la RSA1MDAKPj4gLSNkZWZpbmUgT1BUSU9OU19BUlJBWV9TSVpFIDEwCj4+IC0jZGVmaW5lIEJMT0NL X1NJWkUgOAo+PiAtI2RlZmluZSBURU1QX1NUUklERSA4Cj4+IC0vLyNkZWZpbmUgTlVNX0JMT0NL U19BVF9PTkNFIDE2IC8vbm90IHVzZWQgeWV0Cj4+IC0KPj4gLSNkZWZpbmUgREVSSU5HX1RIUkVT SE9MRCAyMAo+PiAtCj4+IC0jaWYgQVJDSF9YODYgJiYgSEFWRV9JTkxJTkVfQVNNCj4+IC1ERUNM QVJFX0FTTV9DT05TVCg4LCB1aW50NjRfdCwgdzA1KT0gMHgwMDA1MDAwNTAwMDUwMDA1TEw7Cj4+ IC1ERUNMQVJFX0FTTV9DT05TVCg4LCB1aW50NjRfdCwgdzA0KT0gMHgwMDA0MDAwNDAwMDQwMDA0 TEw7Cj4+IC1ERUNMQVJFX0FTTV9DT05TVCg4LCB1aW50NjRfdCwgdzIwKT0gMHgwMDIwMDAyMDAw MjAwMDIwTEw7Cj4+IC1ERUNMQVJFX0FTTV9DT05TVCg4LCB1aW50NjRfdCwgYjAwKT0gMHgwMDAw MDAwMDAwMDAwMDAwTEw7Cj4+IC1ERUNMQVJFX0FTTV9DT05TVCg4LCB1aW50NjRfdCwgYjAxKT0g MHgwMTAxMDEwMTAxMDEwMTAxTEw7Cj4+IC1ERUNMQVJFX0FTTV9DT05TVCg4LCB1aW50NjRfdCwg YjA4KT0gMHgwODA4MDgwODA4MDgwODA4TEw7Cj4+IC1ERUNMQVJFX0FTTV9DT05TVCg4LCB1aW50 NjRfdCwgYjgwKT0gMHg4MDgwODA4MDgwODA4MDgwTEw7Cj4+IC0jZW5kaWYKPj4gLQo+PiAtc3Rh dGljIGNvbnN0IHN0cnVjdCBQUEZpbHRlciBmaWx0ZXJzW109Cj4+IC17Cj4+IC0gICAgeyJoYiIs ICJoZGVibG9jayIsICAgICAgICAgICAgICAxLCAxLCAzLCBIX0RFQkxPQ0t9LAo+PiAtICAgIHsi dmIiLCAidmRlYmxvY2siLCAgICAgICAgICAgICAgMSwgMiwgNCwgVl9ERUJMT0NLfSwKPj4gLS8q ICB7ImhyIiwgInJraGRlYmxvY2siLCAgICAgICAgICAgIDEsIDEsIDMsIEhfUksxX0ZJTFRFUn0s Cj4+IC0gICAgeyJ2ciIsICJya3ZkZWJsb2NrIiwgICAgICAgICAgICAxLCAyLCA0LCBWX1JLMV9G SUxURVJ9LCovCj4+IC0gICAgeyJoMSIsICJ4MWhkZWJsb2NrIiwgICAgICAgICAgICAxLCAxLCAz LCBIX1gxX0ZJTFRFUn0sCj4+IC0gICAgeyJ2MSIsICJ4MXZkZWJsb2NrIiwgICAgICAgICAgICAx LCAyLCA0LCBWX1gxX0ZJTFRFUn0sCj4+IC0gICAgeyJoYSIsICJhaGRlYmxvY2siLCAgICAgICAg ICAgICAxLCAxLCAzLCBIX0FfREVCTE9DS30sCj4+IC0gICAgeyJ2YSIsICJhdmRlYmxvY2siLCAg ICAgICAgICAgICAxLCAyLCA0LCBWX0FfREVCTE9DS30sCj4+IC0gICAgeyJkciIsICJkZXJpbmci LCAgICAgICAgICAgICAgICAxLCA1LCA2LCBERVJJTkd9LAo+PiAtICAgIHsiYWwiLCAiYXV0b2xl dmVscyIsICAgICAgICAgICAgMCwgMSwgMiwgTEVWRUxfRklYfSwKPj4gLSAgICB7ImxiIiwgImxp bmJsZW5kZGVpbnQiLCAgICAgICAgIDEsIDEsIDQsIExJTkVBUl9CTEVORF9ERUlOVF9GSUxURVJ9 LAo+PiAtICAgIHsibGkiLCAibGluaXBvbGRlaW50IiwgICAgICAgICAgMSwgMSwgNCwgTElORUFS X0lQT0xfREVJTlRfRklMVEVSfSwKPj4gLSAgICB7ImNpIiwgImN1YmljaXBvbGRlaW50IiwgICAg ICAgIDEsIDEsIDQsIENVQklDX0lQT0xfREVJTlRfRklMVEVSfSwKPj4gLSAgICB7Im1kIiwgIm1l ZGlhbmRlaW50IiwgICAgICAgICAgIDEsIDEsIDQsIE1FRElBTl9ERUlOVF9GSUxURVJ9LAo+PiAt ICAgIHsiZmQiLCAiZmZtcGVnZGVpbnQiLCAgICAgICAgICAgMSwgMSwgNCwgRkZNUEVHX0RFSU5U X0ZJTFRFUn0sCj4+IC0gICAgeyJsNSIsICJsb3dwYXNzNSIsICAgICAgICAgICAgICAxLCAxLCA0 LCBMT1dQQVNTNV9ERUlOVF9GSUxURVJ9LAo+PiAtICAgIHsidG4iLCAidG1wbm9pc2UiLCAgICAg ICAgICAgICAgMSwgNywgOCwgVEVNUF9OT0lTRV9GSUxURVJ9LAo+PiAtICAgIHsiZnEiLCAiZm9y Y2VxdWFudCIsICAgICAgICAgICAgMSwgMCwgMCwgRk9SQ0VfUVVBTlR9LAo+PiAtICAgIHsiYmUi LCAiYml0ZXhhY3QiLCAgICAgICAgICAgICAgMSwgMCwgMCwgQklURVhBQ1R9LAo+PiAtICAgIHsi dmkiLCAidmlzdWFsaXplIiwgICAgICAgICAgICAgMSwgMCwgMCwgVklTVUFMSVpFfSwKPj4gLSAg ICB7TlVMTCwgTlVMTCwwLDAsMCwwfSAvL0VuZCBNYXJrZXIKPj4gLX07Cj4+IC0KPj4gLXN0YXRp YyBjb25zdCBjaGFyICogY29uc3QgcmVwbGFjZVRhYmxlW109Cj4+IC17Cj4+IC0gICAgImRlZmF1 bHQiLCAgICAgICJoYjphLHZiOmEsZHI6YSIsCj4+IC0gICAgImRlIiwgICAgICAgICAgICJoYjph LHZiOmEsZHI6YSIsCj4+IC0gICAgImZhc3QiLCAgICAgICAgICJoMTphLHYxOmEsZHI6YSIsCj4+ IC0gICAgImZhIiwgICAgICAgICAgICJoMTphLHYxOmEsZHI6YSIsCj4+IC0gICAgImFjIiwgICAg ICAgICAgICJoYTphOjEyODo3LHZhOmEsZHI6YSIsCj4+IC0gICAgTlVMTCAvL0VuZCBNYXJrZXIK Pj4gLX07Cj4+IC0KPj4gLS8qIFRoZSBob3Jpem9udGFsIGZ1bmN0aW9ucyBleGlzdCBvbmx5IGlu IEMgYmVjYXVzZSB0aGUgTU1YCj4+IC0gKiBjb2RlIGlzIGZhc3RlciB3aXRoIHZlcnRpY2FsIGZp bHRlcnMgYW5kIHRyYW5zcG9zaW5nLiAqLwo+PiAtCj4+IC0vKioKPj4gLSAqIENoZWNrIGlmIHRo ZSBnaXZlbiA4eDggQmxvY2sgaXMgbW9zdGx5ICJmbGF0Igo+PiAtICovCj4+IC1zdGF0aWMgaW5s aW5lIGludCBpc0hvcml6RENfQyhjb25zdCB1aW50OF90IHNyY1tdLCBpbnQgc3RyaWRlLCBjb25z dAo+PiBQUENvbnRleHQgKmMpCj4+IC17Cj4+IC0gICAgaW50IG51bUVxPSAwOwo+PiAtICAgIGlu dCB5Owo+PiAtICAgIGNvbnN0IGludCBkY09mZnNldD0gKChjLT5ub25CUVAqYy0+cHBNb2RlLmJh c2VEY0RpZmYpPj44KSArIDE7Cj4+IC0gICAgY29uc3QgaW50IGRjVGhyZXNob2xkPSBkY09mZnNl dCoyICsgMTsKPj4gLQo+PiAtICAgIGZvcih5PTA7IHk8QkxPQ0tfU0laRTsgeSsrKXsKPj4gLSAg ICAgICAgbnVtRXEgKz0gKCh1bnNpZ25lZCkoc3JjWzBdIC0gc3JjWzFdICsgZGNPZmZzZXQpKSA8 IGRjVGhyZXNob2xkOwo+PiAtICAgICAgICBudW1FcSArPSAoKHVuc2lnbmVkKShzcmNbMV0gLSBz cmNbMl0gKyBkY09mZnNldCkpIDwgZGNUaHJlc2hvbGQ7Cj4+IC0gICAgICAgIG51bUVxICs9ICgo dW5zaWduZWQpKHNyY1syXSAtIHNyY1szXSArIGRjT2Zmc2V0KSkgPCBkY1RocmVzaG9sZDsKPj4g LSAgICAgICAgbnVtRXEgKz0gKCh1bnNpZ25lZCkoc3JjWzNdIC0gc3JjWzRdICsgZGNPZmZzZXQp KSA8IGRjVGhyZXNob2xkOwo+PiAtICAgICAgICBudW1FcSArPSAoKHVuc2lnbmVkKShzcmNbNF0g LSBzcmNbNV0gKyBkY09mZnNldCkpIDwgZGNUaHJlc2hvbGQ7Cj4+IC0gICAgICAgIG51bUVxICs9 ICgodW5zaWduZWQpKHNyY1s1XSAtIHNyY1s2XSArIGRjT2Zmc2V0KSkgPCBkY1RocmVzaG9sZDsK Pj4gLSAgICAgICAgbnVtRXEgKz0gKCh1bnNpZ25lZCkoc3JjWzZdIC0gc3JjWzddICsgZGNPZmZz ZXQpKSA8IGRjVGhyZXNob2xkOwo+PiAtICAgICAgICBzcmMrPSBzdHJpZGU7Cj4+IC0gICAgfQo+ PiAtICAgIHJldHVybiBudW1FcSA+IGMtPnBwTW9kZS5mbGF0bmVzc1RocmVzaG9sZDsKPj4gLX0K Pj4gLQo+PiAtLyoqCj4+IC0gKiBDaGVjayBpZiB0aGUgbWlkZGxlIDh4OCBCbG9jayBpbiB0aGUg Z2l2ZW4gOHgxNiBibG9jayBpcyBmbGF0Cj4+IC0gKi8KPj4gLXN0YXRpYyBpbmxpbmUgaW50IGlz VmVydERDX0MoY29uc3QgdWludDhfdCBzcmNbXSwgaW50IHN0cmlkZSwgY29uc3QKPj4gUFBDb250 ZXh0ICpjKQo+PiAtewo+PiAtICAgIGludCBudW1FcT0gMDsKPj4gLSAgICBpbnQgeTsKPj4gLSAg ICBjb25zdCBpbnQgZGNPZmZzZXQ9ICgoYy0+bm9uQlFQKmMtPnBwTW9kZS5iYXNlRGNEaWZmKT4+ OCkgKyAxOwo+PiAtICAgIGNvbnN0IGludCBkY1RocmVzaG9sZD0gZGNPZmZzZXQqMiArIDE7Cj4+ IC0KPj4gLSAgICBzcmMrPSBzdHJpZGUqNDsgLy8gc3JjIHBvaW50cyB0byBiZWdpbiBvZiB0aGUg OHg4IEJsb2NrCj4+IC0gICAgZm9yKHk9MDsgeTxCTE9DS19TSVpFLTE7IHkrKyl7Cj4+IC0gICAg ICAgIG51bUVxICs9ICgodW5zaWduZWQpKHNyY1swXSAtIHNyY1swK3N0cmlkZV0gKyBkY09mZnNl dCkpIDwKPj4gZGNUaHJlc2hvbGQ7Cj4+IC0gICAgICAgIG51bUVxICs9ICgodW5zaWduZWQpKHNy Y1sxXSAtIHNyY1sxK3N0cmlkZV0gKyBkY09mZnNldCkpIDwKPj4gZGNUaHJlc2hvbGQ7Cj4+IC0g ICAgICAgIG51bUVxICs9ICgodW5zaWduZWQpKHNyY1syXSAtIHNyY1syK3N0cmlkZV0gKyBkY09m ZnNldCkpIDwKPj4gZGNUaHJlc2hvbGQ7Cj4+IC0gICAgICAgIG51bUVxICs9ICgodW5zaWduZWQp KHNyY1szXSAtIHNyY1szK3N0cmlkZV0gKyBkY09mZnNldCkpIDwKPj4gZGNUaHJlc2hvbGQ7Cj4+ IC0gICAgICAgIG51bUVxICs9ICgodW5zaWduZWQpKHNyY1s0XSAtIHNyY1s0K3N0cmlkZV0gKyBk Y09mZnNldCkpIDwKPj4gZGNUaHJlc2hvbGQ7Cj4+IC0gICAgICAgIG51bUVxICs9ICgodW5zaWdu ZWQpKHNyY1s1XSAtIHNyY1s1K3N0cmlkZV0gKyBkY09mZnNldCkpIDwKPj4gZGNUaHJlc2hvbGQ7 Cj4+IC0gICAgICAgIG51bUVxICs9ICgodW5zaWduZWQpKHNyY1s2XSAtIHNyY1s2K3N0cmlkZV0g KyBkY09mZnNldCkpIDwKPj4gZGNUaHJlc2hvbGQ7Cj4+IC0gICAgICAgIG51bUVxICs9ICgodW5z aWduZWQpKHNyY1s3XSAtIHNyY1s3K3N0cmlkZV0gKyBkY09mZnNldCkpIDwKPj4gZGNUaHJlc2hv bGQ7Cj4+IC0gICAgICAgIHNyYys9IHN0cmlkZTsKPj4gLSAgICB9Cj4+IC0gICAgcmV0dXJuIG51 bUVxID4gYy0+cHBNb2RlLmZsYXRuZXNzVGhyZXNob2xkOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMg aW5saW5lIGludCBpc0hvcml6TWluTWF4T2tfQyhjb25zdCB1aW50OF90IHNyY1tdLCBpbnQgc3Ry aWRlLCBpbnQKPj4gUVApCj4+IC17Cj4+IC0gICAgaW50IGk7Cj4+IC0gICAgZm9yKGk9MDsgaTwy OyBpKyspewo+PiAtICAgICAgICBpZigodW5zaWduZWQpKHNyY1swXSAtIHNyY1s1XSArIDIqUVAp ID4gNCpRUCkgcmV0dXJuIDA7Cj4+IC0gICAgICAgIHNyYyArPSBzdHJpZGU7Cj4+IC0gICAgICAg IGlmKCh1bnNpZ25lZCkoc3JjWzJdIC0gc3JjWzddICsgMipRUCkgPiA0KlFQKSByZXR1cm4gMDsK Pj4gLSAgICAgICAgc3JjICs9IHN0cmlkZTsKPj4gLSAgICAgICAgaWYoKHVuc2lnbmVkKShzcmNb NF0gLSBzcmNbMV0gKyAyKlFQKSA+IDQqUVApIHJldHVybiAwOwo+PiAtICAgICAgICBzcmMgKz0g c3RyaWRlOwo+PiAtICAgICAgICBpZigodW5zaWduZWQpKHNyY1s2XSAtIHNyY1szXSArIDIqUVAp ID4gNCpRUCkgcmV0dXJuIDA7Cj4+IC0gICAgICAgIHNyYyArPSBzdHJpZGU7Cj4+IC0gICAgfQo+ PiAtICAgIHJldHVybiAxOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW5saW5lIGludCBpc1ZlcnRN aW5NYXhPa19DKGNvbnN0IHVpbnQ4X3Qgc3JjW10sIGludCBzdHJpZGUsIGludAo+PiBRUCkKPj4g LXsKPj4gLSAgICBpbnQgeDsKPj4gLSAgICBzcmMrPSBzdHJpZGUqNDsKPj4gLSAgICBmb3IoeD0w OyB4PEJMT0NLX1NJWkU7IHgrPTQpewo+PiAtICAgICAgICBpZigodW5zaWduZWQpKHNyY1sgIHgg KyAwKnN0cmlkZV0gLSBzcmNbICB4ICsgNSpzdHJpZGVdICsgMipRUCkKPj4gPiA0KlFQKSByZXR1 cm4gMDsKPj4gLSAgICAgICAgaWYoKHVuc2lnbmVkKShzcmNbMSt4ICsgMipzdHJpZGVdIC0gc3Jj WzEreCArIDcqc3RyaWRlXSArIDIqUVApCj4+ID4gNCpRUCkgcmV0dXJuIDA7Cj4+IC0gICAgICAg IGlmKCh1bnNpZ25lZCkoc3JjWzIreCArIDQqc3RyaWRlXSAtIHNyY1syK3ggKyAxKnN0cmlkZV0g KyAyKlFQKQo+PiA+IDQqUVApIHJldHVybiAwOwo+PiAtICAgICAgICBpZigodW5zaWduZWQpKHNy Y1szK3ggKyA2KnN0cmlkZV0gLSBzcmNbMyt4ICsgMypzdHJpZGVdICsgMipRUCkKPj4gPiA0KlFQ KSByZXR1cm4gMDsKPj4gLSAgICB9Cj4+IC0gICAgcmV0dXJuIDE7Cj4+IC19Cj4+IC0KPj4gLXN0 YXRpYyBpbmxpbmUgaW50IGhvcml6Q2xhc3NpZnlfQyhjb25zdCB1aW50OF90IHNyY1tdLCBpbnQg c3RyaWRlLCBjb25zdAo+PiBQUENvbnRleHQgKmMpCj4+IC17Cj4+IC0gICAgaWYoIGlzSG9yaXpE Q19DKHNyYywgc3RyaWRlLCBjKSApewo+PiAtICAgICAgICByZXR1cm4gaXNIb3Jpek1pbk1heE9r X0Moc3JjLCBzdHJpZGUsIGMtPlFQKTsKPj4gLSAgICB9ZWxzZXsKPj4gLSAgICAgICAgcmV0dXJu IDI7Cj4+IC0gICAgfQo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW5saW5lIGludCB2ZXJ0Q2xhc3Np ZnlfQyhjb25zdCB1aW50OF90IHNyY1tdLCBpbnQgc3RyaWRlLCBjb25zdAo+PiBQUENvbnRleHQg KmMpCj4+IC17Cj4+IC0gICAgaWYoIGlzVmVydERDX0Moc3JjLCBzdHJpZGUsIGMpICl7Cj4+IC0g ICAgICAgIHJldHVybiBpc1ZlcnRNaW5NYXhPa19DKHNyYywgc3RyaWRlLCBjLT5RUCk7Cj4+IC0g ICAgfWVsc2V7Cj4+IC0gICAgICAgIHJldHVybiAyOwo+PiAtICAgIH0KPj4gLX0KPj4gLQo+PiAt c3RhdGljIGlubGluZSB2b2lkIGRvSG9yaXpEZWZGaWx0ZXJfQyh1aW50OF90IGRzdFtdLCBpbnQg c3RyaWRlLCBjb25zdAo+PiBQUENvbnRleHQgKmMpCj4+IC17Cj4+IC0gICAgaW50IHk7Cj4+IC0g ICAgZm9yKHk9MDsgeTxCTE9DS19TSVpFOyB5Kyspewo+PiAtICAgICAgICBjb25zdCBpbnQgbWlk ZGxlRW5lcmd5PSA1Kihkc3RbNF0gLSBkc3RbM10pICsgMiooZHN0WzJdIC0KPj4gZHN0WzVdKTsK Pj4gLQo+PiAtICAgICAgICBpZihGRkFCUyhtaWRkbGVFbmVyZ3kpIDwgOCpjLT5RUCl7Cj4+IC0g ICAgICAgICAgICBjb25zdCBpbnQgcT0oZHN0WzNdIC0gZHN0WzRdKS8yOwo+PiAtICAgICAgICAg ICAgY29uc3QgaW50IGxlZnRFbmVyZ3k9ICA1Kihkc3RbMl0gLSBkc3RbMV0pICsgMiooZHN0WzBd IC0KPj4gZHN0WzNdKTsKPj4gLSAgICAgICAgICAgIGNvbnN0IGludCByaWdodEVuZXJneT0gNSoo ZHN0WzZdIC0gZHN0WzVdKSArIDIqKGRzdFs0XSAtCj4+IGRzdFs3XSk7Cj4+IC0KPj4gLSAgICAg ICAgICAgIGludCBkPSBGRkFCUyhtaWRkbGVFbmVyZ3kpIC0gRkZNSU4oIEZGQUJTKGxlZnRFbmVy Z3kpLAo+PiBGRkFCUyhyaWdodEVuZXJneSkgKTsKPj4gLSAgICAgICAgICAgIGQ9IEZGTUFYKGQs IDApOwo+PiAtCj4+IC0gICAgICAgICAgICBkPSAoNSpkICsgMzIpID4+IDY7Cj4+IC0gICAgICAg ICAgICBkKj0gRkZTSUdOKC1taWRkbGVFbmVyZ3kpOwo+PiAtCj4+IC0gICAgICAgICAgICBpZihx PjApCj4+IC0gICAgICAgICAgICB7Cj4+IC0gICAgICAgICAgICAgICAgZCA9IEZGTUFYKGQsIDAp Owo+PiAtICAgICAgICAgICAgICAgIGQgPSBGRk1JTihkLCBxKTsKPj4gLSAgICAgICAgICAgIH0K Pj4gLSAgICAgICAgICAgIGVsc2UKPj4gLSAgICAgICAgICAgIHsKPj4gLSAgICAgICAgICAgICAg ICBkID0gRkZNSU4oZCwgMCk7Cj4+IC0gICAgICAgICAgICAgICAgZCA9IEZGTUFYKGQsIHEpOwo+ PiAtICAgICAgICAgICAgfQo+PiAtCj4+IC0gICAgICAgICAgICBkc3RbM10tPSBkOwo+PiAtICAg ICAgICAgICAgZHN0WzRdKz0gZDsKPj4gLSAgICAgICAgfQo+PiAtICAgICAgICBkc3QrPSBzdHJp ZGU7Cj4+IC0gICAgfQo+PiAtfQo+PiAtCj4+IC0vKioKPj4gLSAqIERvIGEgaG9yaXpvbnRhbCBs b3cgcGFzcyBmaWx0ZXIgb24gdGhlIDEweDggYmxvY2sgKGRzdCBwb2ludHMgdG8KPj4gbWlkZGxl IDh4OCBCbG9jaykKPj4gLSAqIHVzaW5nIHRoZSA5LVRhcCBGaWx0ZXIgKDEsMSwyLDIsNCwyLDIs MSwxKS8xNiAoQyB2ZXJzaW9uKQo+PiAtICovCj4+IC1zdGF0aWMgaW5saW5lIHZvaWQgZG9Ib3Jp ekxvd1Bhc3NfQyh1aW50OF90IGRzdFtdLCBpbnQgc3RyaWRlLCBjb25zdAo+PiBQUENvbnRleHQg KmMpCj4+IC17Cj4+IC0gICAgaW50IHk7Cj4+IC0gICAgZm9yKHk9MDsgeTxCTE9DS19TSVpFOyB5 Kyspewo+PiAtICAgICAgICBjb25zdCBpbnQgZmlyc3Q9IEZGQUJTKGRzdFstMV0gLSBkc3RbMF0p IDwgYy0+UVAgPyBkc3RbLTFdIDoKPj4gZHN0WzBdOwo+PiAtICAgICAgICBjb25zdCBpbnQgbGFz dD0gRkZBQlMoZHN0WzhdIC0gZHN0WzddKSA8IGMtPlFQID8gZHN0WzhdIDogZHN0WzddOwo+PiAt Cj4+IC0gICAgICAgIGludCBzdW1zWzEwXTsKPj4gLSAgICAgICAgc3Vtc1swXSA9IDQqZmlyc3Qg KyBkc3RbMF0gKyBkc3RbMV0gKyBkc3RbMl0gKyA0Owo+PiAtICAgICAgICBzdW1zWzFdID0gc3Vt c1swXSAtIGZpcnN0ICArIGRzdFszXTsKPj4gLSAgICAgICAgc3Vtc1syXSA9IHN1bXNbMV0gLSBm aXJzdCAgKyBkc3RbNF07Cj4+IC0gICAgICAgIHN1bXNbM10gPSBzdW1zWzJdIC0gZmlyc3QgICsg ZHN0WzVdOwo+PiAtICAgICAgICBzdW1zWzRdID0gc3Vtc1szXSAtIGZpcnN0ICArIGRzdFs2XTsK Pj4gLSAgICAgICAgc3Vtc1s1XSA9IHN1bXNbNF0gLSBkc3RbMF0gKyBkc3RbN107Cj4+IC0gICAg ICAgIHN1bXNbNl0gPSBzdW1zWzVdIC0gZHN0WzFdICsgbGFzdDsKPj4gLSAgICAgICAgc3Vtc1s3 XSA9IHN1bXNbNl0gLSBkc3RbMl0gKyBsYXN0Owo+PiAtICAgICAgICBzdW1zWzhdID0gc3Vtc1s3 XSAtIGRzdFszXSArIGxhc3Q7Cj4+IC0gICAgICAgIHN1bXNbOV0gPSBzdW1zWzhdIC0gZHN0WzRd ICsgbGFzdDsKPj4gLQo+PiAtICAgICAgICBkc3RbMF09IChzdW1zWzBdICsgc3Vtc1syXSArIDIq ZHN0WzBdKT4+NDsKPj4gLSAgICAgICAgZHN0WzFdPSAoc3Vtc1sxXSArIHN1bXNbM10gKyAyKmRz dFsxXSk+PjQ7Cj4+IC0gICAgICAgIGRzdFsyXT0gKHN1bXNbMl0gKyBzdW1zWzRdICsgMipkc3Rb Ml0pPj40Owo+PiAtICAgICAgICBkc3RbM109IChzdW1zWzNdICsgc3Vtc1s1XSArIDIqZHN0WzNd KT4+NDsKPj4gLSAgICAgICAgZHN0WzRdPSAoc3Vtc1s0XSArIHN1bXNbNl0gKyAyKmRzdFs0XSk+ PjQ7Cj4+IC0gICAgICAgIGRzdFs1XT0gKHN1bXNbNV0gKyBzdW1zWzddICsgMipkc3RbNV0pPj40 Owo+PiAtICAgICAgICBkc3RbNl09IChzdW1zWzZdICsgc3Vtc1s4XSArIDIqZHN0WzZdKT4+NDsK Pj4gLSAgICAgICAgZHN0WzddPSAoc3Vtc1s3XSArIHN1bXNbOV0gKyAyKmRzdFs3XSk+PjQ7Cj4+ IC0KPj4gLSAgICAgICAgZHN0Kz0gc3RyaWRlOwo+PiAtICAgIH0KPj4gLX0KPj4gLQo+PiAtLyoq Cj4+IC0gKiBFeHBlcmltZW50YWwgRmlsdGVyIDEgKEhvcml6b250YWwpCj4+IC0gKiB3aWxsIG5v dCBkYW1hZ2UgbGluZWFyIGdyYWRpZW50cwo+PiAtICogRmxhdCBibG9ja3Mgc2hvdWxkIGxvb2sg bGlrZSB0aGV5IHdlcmUgcGFzc2VkIHRocm91Z2ggdGhlCj4+ICgxLDEsMiwyLDQsMiwyLDEsMSkg OS1UYXAgZmlsdGVyCj4+IC0gKiBjYW4gb25seSBzbW9vdGggYmxvY2tzIGF0IHRoZSBleHBlY3Rl ZCBsb2NhdGlvbnMgKGl0IGNhbm5vdCBzbW9vdGgKPj4gdGhlbSBpZiB0aGV5IGRpZCBtb3ZlKQo+ PiAtICogTU1YMiB2ZXJzaW9uIGRvZXMgY29ycmVjdCBjbGlwcGluZyBDIHZlcnNpb24gZG9lcyBu b3QKPj4gLSAqIG5vdCBpZGVudGljYWwgd2l0aCB0aGUgdmVydGljYWwgb25lCj4+IC0gKi8KPj4g LXN0YXRpYyBpbmxpbmUgdm9pZCBob3JpelgxRmlsdGVyKHVpbnQ4X3QgKnNyYywgaW50IHN0cmlk ZSwgaW50IFFQKQo+PiAtewo+PiAtICAgIGludCB5Owo+PiAtICAgIHN0YXRpYyB1aW50NjRfdCBs dXRbMjU2XTsKPj4gLSAgICBpZighbHV0WzI1NV0pCj4+IC0gICAgewo+PiAtICAgICAgICBpbnQg aTsKPj4gLSAgICAgICAgZm9yKGk9MDsgaTwyNTY7IGkrKykKPj4gLSAgICAgICAgewo+PiAtICAg ICAgICAgICAgaW50IHY9IGkgPCAxMjggPyAyKmkgOiAyKihpLTI1Nik7Cj4+IC0vKgo+PiAtLy9T aW11bGF0ZSAxMTIyNDIyMTEgOS1UYXAgZmlsdGVyCj4+IC0gICAgICAgICAgICB1aW50NjRfdCBh PSAodi8xNikgICYgMHhGRjsKPj4gLSAgICAgICAgICAgIHVpbnQ2NF90IGI9ICh2LzgpICAgJiAw eEZGOwo+PiAtICAgICAgICAgICAgdWludDY0X3QgYz0gKHYvNCkgICAmIDB4RkY7Cj4+IC0gICAg ICAgICAgICB1aW50NjRfdCBkPSAoMyp2LzgpICYgMHhGRjsKPj4gLSovCj4+IC0vL1NpbXVsYXRl IHBpZWNld2lzZSBsaW5lYXIgaW50ZXJwb2xhdGlvbgo+PiAtICAgICAgICAgICAgdWludDY0X3Qg YT0gKHYvMTYpICAgJiAweEZGOwo+PiAtICAgICAgICAgICAgdWludDY0X3QgYj0gKHYqMy8xNikg JiAweEZGOwo+PiAtICAgICAgICAgICAgdWludDY0X3QgYz0gKHYqNS8xNikgJiAweEZGOwo+PiAt ICAgICAgICAgICAgdWludDY0X3QgZD0gKDcqdi8xNikgJiAweEZGOwo+PiAtICAgICAgICAgICAg dWludDY0X3QgQT0gKDB4MTAwIC0gYSkmMHhGRjsKPj4gLSAgICAgICAgICAgIHVpbnQ2NF90IEI9 ICgweDEwMCAtIGIpJjB4RkY7Cj4+IC0gICAgICAgICAgICB1aW50NjRfdCBDPSAoMHgxMDAgLSBj KSYweEZGOwo+PiAtICAgICAgICAgICAgdWludDY0X3QgRD0gKDB4MTAwIC0gYykmMHhGRjsKPj4g LQo+PiAtICAgICAgICAgICAgbHV0W2ldICAgPSAoYTw8NTYpIHwgKGI8PDQ4KSB8IChjPDw0MCkg fCAoZDw8MzIpIHwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgKEQ8PDI0KSB8IChDPDwxNikg fCAoQjw8OCkgIHwgKEEpOwo+PiAtICAgICAgICAgICAgLy9sdXRbaV0gPSAodjw8MzIpIHwgKHY8 PDI0KTsKPj4gLSAgICAgICAgfQo+PiAtICAgIH0KPj4gLQo+PiAtICAgIGZvcih5PTA7IHk8QkxP Q0tfU0laRTsgeSsrKXsKPj4gLSAgICAgICAgaW50IGE9IHNyY1sxXSAtIHNyY1syXTsKPj4gLSAg ICAgICAgaW50IGI9IHNyY1szXSAtIHNyY1s0XTsKPj4gLSAgICAgICAgaW50IGM9IHNyY1s1XSAt IHNyY1s2XTsKPj4gLQo+PiAtICAgICAgICBpbnQgZD0gRkZNQVgoRkZBQlMoYikgLSAoRkZBQlMo YSkgKyBGRkFCUyhjKSkvMiwgMCk7Cj4+IC0KPj4gLSAgICAgICAgaWYoZCA8IFFQKXsKPj4gLSAg ICAgICAgICAgIGludCB2ID0gZCAqIEZGU0lHTigtYik7Cj4+IC0KPj4gLSAgICAgICAgICAgIHNy Y1sxXSArPXYvODsKPj4gLSAgICAgICAgICAgIHNyY1syXSArPXYvNDsKPj4gLSAgICAgICAgICAg IHNyY1szXSArPTMqdi84Owo+PiAtICAgICAgICAgICAgc3JjWzRdIC09Myp2Lzg7Cj4+IC0gICAg ICAgICAgICBzcmNbNV0gLT12LzQ7Cj4+IC0gICAgICAgICAgICBzcmNbNl0gLT12Lzg7Cj4+IC0g ICAgICAgIH0KPj4gLSAgICAgICAgc3JjKz1zdHJpZGU7Cj4+IC0gICAgfQo+PiAtfQo+PiAtCj4+ IC0vKioKPj4gLSAqIGFjY3VyYXRlIGRlYmxvY2sgZmlsdGVyCj4+IC0gKi8KPj4gLXN0YXRpYyBh dl9hbHdheXNfaW5saW5lIHZvaWQgZG9fYV9kZWJsb2NrX0ModWludDhfdCAqc3JjLCBpbnQgc3Rl cCwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0 cmlkZSwgY29uc3QgUFBDb250ZXh0Cj4+ICpjLCBpbnQgbW9kZSkKPj4gLXsKPj4gLSAgICBpbnQg eTsKPj4gLSAgICBjb25zdCBpbnQgUVA9IGMtPlFQOwo+PiAtICAgIGNvbnN0IGludCBkY09mZnNl dD0gKChjLT5ub25CUVAqYy0+cHBNb2RlLmJhc2VEY0RpZmYpPj44KSArIDE7Cj4+IC0gICAgY29u c3QgaW50IGRjVGhyZXNob2xkPSBkY09mZnNldCoyICsgMTsKPj4gLQo+PiAtICAgIHNyYys9IHN0 ZXAqNDsgLy8gc3JjIHBvaW50cyB0byBiZWdpbiBvZiB0aGUgOHg4IEJsb2NrCj4+IC0gICAgZm9y KHk9MDsgeTw4OyB5Kyspewo+PiAtICAgICAgICBpbnQgbnVtRXE9IDA7Cj4+IC0KPj4gLSAgICAg ICAgbnVtRXEgKz0gKCh1bnNpZ25lZCkoc3JjWy0xKnN0ZXBdIC0gc3JjWzAqc3RlcF0gKyBkY09m ZnNldCkpIDwKPj4gZGNUaHJlc2hvbGQ7Cj4+IC0gICAgICAgIG51bUVxICs9ICgodW5zaWduZWQp KHNyY1sgMCpzdGVwXSAtIHNyY1sxKnN0ZXBdICsgZGNPZmZzZXQpKSA8Cj4+IGRjVGhyZXNob2xk Owo+PiAtICAgICAgICBudW1FcSArPSAoKHVuc2lnbmVkKShzcmNbIDEqc3RlcF0gLSBzcmNbMipz dGVwXSArIGRjT2Zmc2V0KSkgPAo+PiBkY1RocmVzaG9sZDsKPj4gLSAgICAgICAgbnVtRXEgKz0g KCh1bnNpZ25lZCkoc3JjWyAyKnN0ZXBdIC0gc3JjWzMqc3RlcF0gKyBkY09mZnNldCkpIDwKPj4g ZGNUaHJlc2hvbGQ7Cj4+IC0gICAgICAgIG51bUVxICs9ICgodW5zaWduZWQpKHNyY1sgMypzdGVw XSAtIHNyY1s0KnN0ZXBdICsgZGNPZmZzZXQpKSA8Cj4+IGRjVGhyZXNob2xkOwo+PiAtICAgICAg ICBudW1FcSArPSAoKHVuc2lnbmVkKShzcmNbIDQqc3RlcF0gLSBzcmNbNSpzdGVwXSArIGRjT2Zm c2V0KSkgPAo+PiBkY1RocmVzaG9sZDsKPj4gLSAgICAgICAgbnVtRXEgKz0gKCh1bnNpZ25lZCko c3JjWyA1KnN0ZXBdIC0gc3JjWzYqc3RlcF0gKyBkY09mZnNldCkpIDwKPj4gZGNUaHJlc2hvbGQ7 Cj4+IC0gICAgICAgIG51bUVxICs9ICgodW5zaWduZWQpKHNyY1sgNipzdGVwXSAtIHNyY1s3KnN0 ZXBdICsgZGNPZmZzZXQpKSA8Cj4+IGRjVGhyZXNob2xkOwo+PiAtICAgICAgICBudW1FcSArPSAo KHVuc2lnbmVkKShzcmNbIDcqc3RlcF0gLSBzcmNbOCpzdGVwXSArIGRjT2Zmc2V0KSkgPAo+PiBk Y1RocmVzaG9sZDsKPj4gLSAgICAgICAgaWYobnVtRXEgPiBjLT5wcE1vZGUuZmxhdG5lc3NUaHJl c2hvbGQpewo+PiAtICAgICAgICAgICAgaW50IG1pbiwgbWF4LCB4Owo+PiAtCj4+IC0gICAgICAg ICAgICBpZihzcmNbMF0gPiBzcmNbc3RlcF0pewo+PiAtICAgICAgICAgICAgICAgIG1heD0gc3Jj WzBdOwo+PiAtICAgICAgICAgICAgICAgIG1pbj0gc3JjW3N0ZXBdOwo+PiAtICAgICAgICAgICAg fWVsc2V7Cj4+IC0gICAgICAgICAgICAgICAgbWF4PSBzcmNbc3RlcF07Cj4+IC0gICAgICAgICAg ICAgICAgbWluPSBzcmNbMF07Cj4+IC0gICAgICAgICAgICB9Cj4+IC0gICAgICAgICAgICBmb3Io eD0yOyB4PDg7IHgrPTIpewo+PiAtICAgICAgICAgICAgICAgIGlmKHNyY1t4KnN0ZXBdID4gc3Jj Wyh4KzEpKnN0ZXBdKXsKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNyY1t4ICAgICpz dGVwXSA+IG1heCkgbWF4PSBzcmNbIHggICAqc3RlcF07Cj4+IC0gICAgICAgICAgICAgICAgICAg ICAgICBpZihzcmNbKHgrMSkqc3RlcF0gPCBtaW4pIG1pbj0gc3JjWyh4KzEpKnN0ZXBdOwo+PiAt ICAgICAgICAgICAgICAgIH1lbHNlewo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3Jj Wyh4KzEpKnN0ZXBdID4gbWF4KSBtYXg9IHNyY1soeCsxKSpzdGVwXTsKPj4gLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmKHNyY1sgeCAgICpzdGVwXSA8IG1pbikgbWluPSBzcmNbIHggICAqc3Rl cF07Cj4+IC0gICAgICAgICAgICAgICAgfQo+PiAtICAgICAgICAgICAgfQo+PiAtICAgICAgICAg ICAgaWYobWF4LW1pbiA8IDIqUVApewo+PiAtICAgICAgICAgICAgICAgIGNvbnN0IGludCBmaXJz dD0gRkZBQlMoc3JjWy0xKnN0ZXBdIC0gc3JjWzBdKSA8IFFQID8KPj4gc3JjWy0xKnN0ZXBdIDog c3JjWzBdOwo+PiAtICAgICAgICAgICAgICAgIGNvbnN0IGludCBsYXN0PSBGRkFCUyhzcmNbOCpz dGVwXSAtIHNyY1s3KnN0ZXBdKSA8IFFQID8KPj4gc3JjWzgqc3RlcF0gOiBzcmNbNypzdGVwXTsK Pj4gLQo+PiAtICAgICAgICAgICAgICAgIGludCBzdW1zWzEwXTsKPj4gLSAgICAgICAgICAgICAg ICBzdW1zWzBdID0gNCpmaXJzdCArIHNyY1swKnN0ZXBdICsgc3JjWzEqc3RlcF0gKwo+PiBzcmNb MipzdGVwXSArIDQ7Cj4+IC0gICAgICAgICAgICAgICAgc3Vtc1sxXSA9IHN1bXNbMF0gLSBmaXJz dCAgICAgICArIHNyY1szKnN0ZXBdOwo+PiAtICAgICAgICAgICAgICAgIHN1bXNbMl0gPSBzdW1z WzFdIC0gZmlyc3QgICAgICAgKyBzcmNbNCpzdGVwXTsKPj4gLSAgICAgICAgICAgICAgICBzdW1z WzNdID0gc3Vtc1syXSAtIGZpcnN0ICAgICAgICsgc3JjWzUqc3RlcF07Cj4+IC0gICAgICAgICAg ICAgICAgc3Vtc1s0XSA9IHN1bXNbM10gLSBmaXJzdCAgICAgICArIHNyY1s2KnN0ZXBdOwo+PiAt ICAgICAgICAgICAgICAgIHN1bXNbNV0gPSBzdW1zWzRdIC0gc3JjWzAqc3RlcF0gKyBzcmNbNypz dGVwXTsKPj4gLSAgICAgICAgICAgICAgICBzdW1zWzZdID0gc3Vtc1s1XSAtIHNyY1sxKnN0ZXBd ICsgbGFzdDsKPj4gLSAgICAgICAgICAgICAgICBzdW1zWzddID0gc3Vtc1s2XSAtIHNyY1syKnN0 ZXBdICsgbGFzdDsKPj4gLSAgICAgICAgICAgICAgICBzdW1zWzhdID0gc3Vtc1s3XSAtIHNyY1sz KnN0ZXBdICsgbGFzdDsKPj4gLSAgICAgICAgICAgICAgICBzdW1zWzldID0gc3Vtc1s4XSAtIHNy Y1s0KnN0ZXBdICsgbGFzdDsKPj4gLQo+PiAtICAgICAgICAgICAgICAgIGlmIChtb2RlICYgVklT VUFMSVpFKSB7Cj4+IC0gICAgICAgICAgICAgICAgICAgIHNyY1swKnN0ZXBdID0KPj4gLSAgICAg ICAgICAgICAgICAgICAgc3JjWzEqc3RlcF0gPQo+PiAtICAgICAgICAgICAgICAgICAgICBzcmNb MipzdGVwXSA9Cj4+IC0gICAgICAgICAgICAgICAgICAgIHNyY1szKnN0ZXBdID0KPj4gLSAgICAg ICAgICAgICAgICAgICAgc3JjWzQqc3RlcF0gPQo+PiAtICAgICAgICAgICAgICAgICAgICBzcmNb NSpzdGVwXSA9Cj4+IC0gICAgICAgICAgICAgICAgICAgIHNyY1s2KnN0ZXBdID0KPj4gLSAgICAg ICAgICAgICAgICAgICAgc3JjWzcqc3RlcF0gPSAxMjg7Cj4+IC0gICAgICAgICAgICAgICAgfQo+ PiAtICAgICAgICAgICAgICAgIHNyY1swKnN0ZXBdPSAoc3Vtc1swXSArIHN1bXNbMl0gKyAyKnNy Y1swKnN0ZXBdKT4+NDsKPj4gLSAgICAgICAgICAgICAgICBzcmNbMSpzdGVwXT0gKHN1bXNbMV0g KyBzdW1zWzNdICsgMipzcmNbMSpzdGVwXSk+PjQ7Cj4+IC0gICAgICAgICAgICAgICAgc3JjWzIq c3RlcF09IChzdW1zWzJdICsgc3Vtc1s0XSArIDIqc3JjWzIqc3RlcF0pPj40Owo+PiAtICAgICAg ICAgICAgICAgIHNyY1szKnN0ZXBdPSAoc3Vtc1szXSArIHN1bXNbNV0gKyAyKnNyY1szKnN0ZXBd KT4+NDsKPj4gLSAgICAgICAgICAgICAgICBzcmNbNCpzdGVwXT0gKHN1bXNbNF0gKyBzdW1zWzZd ICsgMipzcmNbNCpzdGVwXSk+PjQ7Cj4+IC0gICAgICAgICAgICAgICAgc3JjWzUqc3RlcF09IChz dW1zWzVdICsgc3Vtc1s3XSArIDIqc3JjWzUqc3RlcF0pPj40Owo+PiAtICAgICAgICAgICAgICAg IHNyY1s2KnN0ZXBdPSAoc3Vtc1s2XSArIHN1bXNbOF0gKyAyKnNyY1s2KnN0ZXBdKT4+NDsKPj4g LSAgICAgICAgICAgICAgICBzcmNbNypzdGVwXT0gKHN1bXNbN10gKyBzdW1zWzldICsgMipzcmNb NypzdGVwXSk+PjQ7Cj4+IC0gICAgICAgICAgICB9Cj4+IC0gICAgICAgIH1lbHNlewo+PiAtICAg ICAgICAgICAgY29uc3QgaW50IG1pZGRsZUVuZXJneT0gNSooc3JjWzQqc3RlcF0gLSBzcmNbMypz dGVwXSkgKwo+PiAyKihzcmNbMipzdGVwXSAtIHNyY1s1KnN0ZXBdKTsKPj4gLQo+PiAtICAgICAg ICAgICAgaWYoRkZBQlMobWlkZGxlRW5lcmd5KSA8IDgqUVApewo+PiAtICAgICAgICAgICAgICAg IGNvbnN0IGludCBxPShzcmNbMypzdGVwXSAtIHNyY1s0KnN0ZXBdKS8yOwo+PiAtICAgICAgICAg ICAgICAgIGNvbnN0IGludCBsZWZ0RW5lcmd5PSAgNSooc3JjWzIqc3RlcF0gLSBzcmNbMSpzdGVw XSkgKwo+PiAyKihzcmNbMCpzdGVwXSAtIHNyY1szKnN0ZXBdKTsKPj4gLSAgICAgICAgICAgICAg ICBjb25zdCBpbnQgcmlnaHRFbmVyZ3k9IDUqKHNyY1s2KnN0ZXBdIC0gc3JjWzUqc3RlcF0pICsK Pj4gMiooc3JjWzQqc3RlcF0gLSBzcmNbNypzdGVwXSk7Cj4+IC0KPj4gLSAgICAgICAgICAgICAg ICBpbnQgZD0gRkZBQlMobWlkZGxlRW5lcmd5KSAtIEZGTUlOKCBGRkFCUyhsZWZ0RW5lcmd5KSwK Pj4gRkZBQlMocmlnaHRFbmVyZ3kpICk7Cj4+IC0gICAgICAgICAgICAgICAgZD0gRkZNQVgoZCwg MCk7Cj4+IC0KPj4gLSAgICAgICAgICAgICAgICBkPSAoNSpkICsgMzIpID4+IDY7Cj4+IC0gICAg ICAgICAgICAgICAgZCo9IEZGU0lHTigtbWlkZGxlRW5lcmd5KTsKPj4gLQo+PiAtICAgICAgICAg ICAgICAgIGlmKHE+MCl7Cj4+IC0gICAgICAgICAgICAgICAgICAgIGQgPSBGRk1BWChkLCAwKTsK Pj4gLSAgICAgICAgICAgICAgICAgICAgZCA9IEZGTUlOKGQsIHEpOwo+PiAtICAgICAgICAgICAg ICAgIH1lbHNlewo+PiAtICAgICAgICAgICAgICAgICAgICBkID0gRkZNSU4oZCwgMCk7Cj4+IC0g ICAgICAgICAgICAgICAgICAgIGQgPSBGRk1BWChkLCBxKTsKPj4gLSAgICAgICAgICAgICAgICB9 Cj4+IC0KPj4gLSAgICAgICAgICAgICAgICBpZiAoKG1vZGUgJiBWSVNVQUxJWkUpICYmIGQpIHsK Pj4gLSAgICAgICAgICAgICAgICAgICAgZD0gKGQgPCAwKSA/IDMyIDogLTMyOwo+PiAtICAgICAg ICAgICAgICAgICAgICBzcmNbMypzdGVwXT0gYXZfY2xpcF91aW50OChzcmNbMypzdGVwXSAtIGQp Owo+PiAtICAgICAgICAgICAgICAgICAgICBzcmNbNCpzdGVwXT0gYXZfY2xpcF91aW50OChzcmNb NCpzdGVwXSArIGQpOwo+PiAtICAgICAgICAgICAgICAgICAgICBkID0gMDsKPj4gLSAgICAgICAg ICAgICAgICB9Cj4+IC0KPj4gLSAgICAgICAgICAgICAgICBzcmNbMypzdGVwXS09IGQ7Cj4+IC0g ICAgICAgICAgICAgICAgc3JjWzQqc3RlcF0rPSBkOwo+PiAtICAgICAgICAgICAgfQo+PiAtICAg ICAgICB9Cj4+IC0KPj4gLSAgICAgICAgc3JjICs9IHN0cmlkZTsKPj4gLSAgICB9Cj4+IC19Cj4+ IC0KPj4gLS8vTm90ZTogd2UgaGF2ZSBDIGFuZCBTU0UyIHZlcnNpb24gKHdoaWNoIHVzZXMgTU1Y KEVYVCkgd2hlbgo+PiBhZHZhbnRhZ2VvdXMpCj4+IC0vL1BsYWluIEMgdmVyc2lvbnMKPj4gLS8v d2UgYWx3YXlzIGNvbXBpbGUgQyBmb3IgdGVzdGluZyB3aGljaCBuZWVkcyBiaXRleGFjdG5lc3MK Pj4gLSNkZWZpbmUgVEVNUExBVEVfUFBfQyAxCj4+IC0jaW5jbHVkZSAicG9zdHByb2Nlc3NfdGVt cGxhdGUuYyIKPj4gLQo+PiAtI2lmIEhBVkVfQUxUSVZFQwo+PiAtI2luY2x1ZGUgImxpYmF2dXRp bC9wcGMvdXRpbF9hbHRpdmVjLmgiCj4+IC0KPj4gLSMgICBkZWZpbmUgVEVNUExBVEVfUFBfQUxU SVZFQyAxCj4+IC0jICAgaW5jbHVkZSAicG9zdHByb2Nlc3NfYWx0aXZlY190ZW1wbGF0ZS5jIgo+ PiAtIyAgIGluY2x1ZGUgInBvc3Rwcm9jZXNzX3RlbXBsYXRlLmMiCj4+IC0jZW5kaWYKPj4gLQo+ PiAtI2lmIEFSQ0hfWDg2ICYmIEhBVkVfSU5MSU5FX0FTTQo+PiAtIyAgICBpZiBDT05GSUdfUlVO VElNRV9DUFVERVRFQ1QKPj4gLSMgICAgICAgIGRlZmluZSBURU1QTEFURV9QUF9TU0UyIDEKPj4g LSMgICAgICAgIGluY2x1ZGUgInBvc3Rwcm9jZXNzX3RlbXBsYXRlLmMiCj4+IC0jICAgIGVsc2UK Pj4gLSMgICAgICAgIGlmIEhBVkVfU1NFMl9JTkxJTkUKPj4gLSMgICAgICAgICAgICBkZWZpbmUg VEVNUExBVEVfUFBfU1NFMiAxCj4+IC0jICAgICAgICAgICAgaW5jbHVkZSAicG9zdHByb2Nlc3Nf dGVtcGxhdGUuYyIKPj4gLSMgICAgICAgIGVuZGlmCj4+IC0jICAgIGVuZGlmCj4+IC0jZW5kaWYK Pj4gLQo+PiAtdHlwZWRlZiB2b2lkICgqcHBfZm4pKGNvbnN0IHVpbnQ4X3Qgc3JjW10sIGludCBz cmNTdHJpZGUsIHVpbnQ4X3QgZHN0W10sCj4+IGludCBkc3RTdHJpZGUsIGludCB3aWR0aCwgaW50 IGhlaWdodCwKPj4gLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQ4X3QgUVBzW10sIGlu dCBRUFN0cmlkZSwgaW50IGlzQ29sb3IsCj4+IFBQQ29udGV4dCAqYzIpOwo+PiAtCj4+IC1zdGF0 aWMgaW5saW5lIHZvaWQgcG9zdFByb2Nlc3MoY29uc3QgdWludDhfdCBzcmNbXSwgaW50IHNyY1N0 cmlkZSwKPj4gdWludDhfdCBkc3RbXSwgaW50IGRzdFN0cmlkZSwgaW50IHdpZHRoLCBpbnQgaGVp Z2h0LAo+PiAtICAgICAgICBjb25zdCBpbnQ4X3QgUVBzW10sIGludCBRUFN0cmlkZSwgaW50IGlz Q29sb3IsIHBwX21vZGUgKnZtLAo+PiBwcF9jb250ZXh0ICp2YykKPj4gLXsKPj4gLSAgICBwcF9m biBwcCA9IHBvc3RQcm9jZXNzX0M7Cj4+IC0gICAgUFBDb250ZXh0ICpjPSAoUFBDb250ZXh0ICop dmM7Cj4+IC0gICAgUFBNb2RlICpwcE1vZGU9IChQUE1vZGUgKil2bTsKPj4gLSAgICBjLT5wcE1v ZGU9ICpwcE1vZGU7IC8vRklYTUUKPj4gLQo+PiAtICAgIGlmICghKHBwTW9kZS0+bHVtTW9kZSAm IEJJVEVYQUNUKSkgewo+PiAtI2lmIENPTkZJR19SVU5USU1FX0NQVURFVEVDVAo+PiAtI2lmIEFS Q0hfWDg2ICYmIEhBVkVfSU5MSU5FX0FTTQo+PiAtICAgICAgICAvLyBvcmRlcmVkIHBlciBzcGVl ZCBmYXN0ZXN0IGZpcnN0Cj4+IC0gICAgICAgIGlmICAgICAgKGMtPmNwdUNhcHMgJiBBVl9DUFVf RkxBR19TU0UyKSAgICAgcHAgPQo+PiBwb3N0UHJvY2Vzc19TU0UyOwo+PiAtI2VsaWYgSEFWRV9B TFRJVkVDCj4+IC0gICAgICAgIGlmICAgICAgKGMtPmNwdUNhcHMgJiBBVl9DUFVfRkxBR19BTFRJ VkVDKSAgcHAgPQo+PiBwb3N0UHJvY2Vzc19hbHRpdmVjOwo+PiAtI2VuZGlmCj4+IC0jZWxzZSAv KiBDT05GSUdfUlVOVElNRV9DUFVERVRFQ1QgKi8KPj4gLSNpZiAgICAgSEFWRV9TU0UyX0lOTElO RQo+PiAtICAgICAgICBwcCA9IHBvc3RQcm9jZXNzX1NTRTI7Cj4+IC0jZWxpZiBIQVZFX0FMVElW RUMKPj4gLSAgICAgICAgcHAgPSBwb3N0UHJvY2Vzc19hbHRpdmVjOwo+PiAtI2VuZGlmCj4+IC0j ZW5kaWYgLyogIUNPTkZJR19SVU5USU1FX0NQVURFVEVDVCAqLwo+PiAtICAgIH0KPj4gLQo+PiAt ICAgIHBwKHNyYywgc3JjU3RyaWRlLCBkc3QsIGRzdFN0cmlkZSwgd2lkdGgsIGhlaWdodCwgUVBz LCBRUFN0cmlkZSwKPj4gaXNDb2xvciwgYyk7Cj4+IC19Cj4+IC0KPj4gLS8qIC1wcCBDb21tYW5k IGxpbmUgSGVscAo+PiAtKi8KPj4gLWNvbnN0IGNoYXIgcHBfaGVscFtdID0KPj4gLSJBdmFpbGFi bGUgcG9zdHByb2Nlc3NpbmcgZmlsdGVyczpcbiIKPj4gLSJGaWx0ZXJzICAgICAgICAgICAgICAg ICAgICAgICAgT3B0aW9uc1xuIgo+PiAtInNob3J0ICBsb25nIG5hbWUgICAgICAgc2hvcnQgICBs b25nIG9wdGlvbiAgICAgRGVzY3JpcHRpb25cbiIKPj4gLSIqICAgICAgKiAgICAgICAgICAgICAg IGEgICAgICAgYXV0b3EgICAgICAgICAgIENQVSBwb3dlciBkZXBlbmRlbnQKPj4gZW5hYmxlclxu Igo+PiAtIiAgICAgICAgICAgICAgICAgICAgICAgYyAgICAgICBjaHJvbSAgICAgICAgICAgY2hy b21pbmFuY2UgZmlsdGVyaW5nCj4+IGVuYWJsZWRcbiIKPj4gLSIgICAgICAgICAgICAgICAgICAg ICAgIHkgICAgICAgbm9jaHJvbSAgICAgICAgIGNocm9taW5hbmNlIGZpbHRlcmluZwo+PiBkaXNh YmxlZFxuIgo+PiAtIiAgICAgICAgICAgICAgICAgICAgICAgbiAgICAgICBub2x1bWEgICAgICAg ICAgbHVtYSBmaWx0ZXJpbmcKPj4gZGlzYWJsZWRcbiIKPj4gLSJoYiAgICAgaGRlYmxvY2sgICAg ICAgICgyIHRocmVzaG9sZCkgICAgICAgICAgIGhvcml6b250YWwgZGVibG9ja2luZwo+PiBmaWx0 ZXJcbiIKPj4gLSIgICAgICAgMS4gZGlmZmVyZW5jZSBmYWN0b3I6IGRlZmF1bHQ9MzIsIGhpZ2hl ciAtPiBtb3JlIGRlYmxvY2tpbmdcbiIKPj4gLSIgICAgICAgMi4gZmxhdG5lc3MgdGhyZXNob2xk OiBkZWZhdWx0PTM5LCBsb3dlciAtPiBtb3JlIGRlYmxvY2tpbmdcbiIKPj4gLSIgICAgICAgICAg ICAgICAgICAgICAgIHRoZSBoICYgdiBkZWJsb2NraW5nIGZpbHRlcnMgc2hhcmUgdGhlc2VcbiIK Pj4gLSIgICAgICAgICAgICAgICAgICAgICAgIHNvIHlvdSBjYW4ndCBzZXQgZGlmZmVyZW50IHRo cmVzaG9sZHMgZm9yIGggLwo+PiB2XG4iCj4+IC0idmIgICAgIHZkZWJsb2NrICAgICAgICAoMiB0 aHJlc2hvbGQpICAgICAgICAgICB2ZXJ0aWNhbCBkZWJsb2NraW5nCj4+IGZpbHRlclxuIgo+PiAt ImhhICAgICBoYWRlYmxvY2sgICAgICAgKDIgdGhyZXNob2xkKSAgICAgICAgICAgaG9yaXpvbnRh bCBkZWJsb2NraW5nCj4+IGZpbHRlclxuIgo+PiAtInZhICAgICB2YWRlYmxvY2sgICAgICAgKDIg dGhyZXNob2xkKSAgICAgICAgICAgdmVydGljYWwgZGVibG9ja2luZwo+PiBmaWx0ZXJcbiIKPj4g LSJoMSAgICAgeDFoZGVibG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVyaW1l bnRhbCBoIGRlYmxvY2sKPj4gZmlsdGVyIDFcbiIKPj4gLSJ2MSAgICAgeDF2ZGVibG9jayAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRhbCB2IGRlYmxvY2sKPj4gZmlsdGVy IDFcbiIKPj4gLSJkciAgICAgZGVyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRlcmluZ2luZyBmaWx0ZXJcbiIKPj4gLSJhbCAgICAgYXV0b2xldmVscyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGF1dG9tYXRpYyBicmlnaHRuZXNzIC8KPj4gY29udHJhc3RcbiIKPj4g LSIgICAgICAgICAgICAgICAgICAgICAgIGYgICAgICAgIGZ1bGx5cmFuZ2UgICAgIHN0cmV0Y2gg bHVtaW5hbmNlIHRvCj4+ICgwLi4yNTUpXG4iCj4+IC0ibGIgICAgIGxpbmJsZW5kZGVpbnQgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaW5lYXIgYmxlbmQKPj4gZGVpbnRlcmxhY2VyXG4iCj4+ IC0ibGkgICAgIGxpbmlwb2xkZWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lYXIg aW50ZXJwb2xhdGluZwo+PiBkZWludGVybGFjZVxuIgo+PiAtImNpICAgICBjdWJpY2lwb2xkZWlu dCAgICAgICAgICAgICAgICAgICAgICAgICAgY3ViaWMgaW50ZXJwb2xhdGluZwo+PiBkZWludGVy bGFjZXJcbiIKPj4gLSJtZCAgICAgbWVkaWFuZGVpbnQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1lZGlhbiBkZWludGVybGFjZXJcbiIKPj4gLSJmZCAgICAgZmZtcGVnZGVpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZmbXBlZyBkZWludGVybGFjZXJcbiIKPj4gLSJsNSAgICAg bG93cGFzczUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJUiBsb3dwYXNzCj4+IGRl aW50ZXJsYWNlclxuIgo+PiAtImRlICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaGI6YSx2YjphLGRyOmFcbiIKPj4gLSJmYSAgICAgZmFzdCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGgxOmEsdjE6YSxkcjphXG4iCj4+IC0iYWMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYTphOjEyODo3LHZhOmEsZHI6YVxu Igo+PiAtInRuICAgICB0bXBub2lzZSAgICAgICAgKDMgdGhyZXNob2xkKSAgICAgICAgICAgdGVt cG9yYWwgbm9pc2UgcmVkdWNlclxuIgo+PiAtIiAgICAgICAgICAgICAgICAgICAgIDEuIDw9IDIu IDw9IDMuICAgICAgICAgICAgbGFyZ2VyIC0+IHN0cm9uZ2VyCj4+IGZpbHRlcmluZ1xuIgo+PiAt ImZxICAgICBmb3JjZVF1YW50ICAgICAgPHF1YW50aXplcj4gICAgICAgICAgICAgZm9yY2UgcXVh bnRpemVyXG4iCj4+IC0iVXNhZ2U6XG4iCj4+Cj4+IC0iPGZpbHRlck5hbWU+Wzo8b3B0aW9uPls6 PG9wdGlvbj4uLi5dXVtbLHwvXVstXTxmaWx0ZXJOYW1lPls6PG9wdGlvbj4uLi5dXS4uLlxuIgo+ PiAtImxvbmcgZm9ybSBleGFtcGxlOlxuIgo+PiAtInZkZWJsb2NrOmF1dG9xL2hkZWJsb2NrOmF1 dG9xL2xpbmJsZW5kZGVpbnQgICAgZGVmYXVsdCwtdmRlYmxvY2tcbiIKPj4gLSJzaG9ydCBmb3Jt IGV4YW1wbGU6XG4iCj4+IC0idmI6YS9oYjphL2xiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkZSwtdmJcbiIKPj4gLSJtb3JlIGV4YW1wbGVzOlxuIgo+PiAtInRuOjY0OjEyODoy NTZcbiIKPj4gLSJcbiIKPj4gLTsKPj4gLQo+PiAtcHBfbW9kZSAqcHBfZ2V0X21vZGVfYnlfbmFt ZV9hbmRfcXVhbGl0eShjb25zdCBjaGFyICpuYW1lLCBpbnQgcXVhbGl0eSkKPj4gLXsKPj4gLSAg ICBjaGFyIHRlbXBbR0VUX01PREVfQlVGRkVSX1NJWkVdOwo+PiAtICAgIGNoYXIgKnA9IHRlbXA7 Cj4+IC0gICAgc3RhdGljIGNvbnN0IGNoYXIgZmlsdGVyRGVsaW1pdGVyc1tdID0gIiwvIjsKPj4g LSAgICBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25EZWxpbWl0ZXJzW10gPSAiOnwiOwo+PiAtICAg IHN0cnVjdCBQUE1vZGUgKnBwTW9kZTsKPj4gLSAgICBjaGFyICpmaWx0ZXJUb2tlbjsKPj4gLQo+ PiAtICAgIGlmICghbmFtZSkgIHsKPj4gLSAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJP UiwgInBwOiBNaXNzaW5nIGFyZ3VtZW50XG4iKTsKPj4gLSAgICAgICAgcmV0dXJuIE5VTEw7Cj4+ IC0gICAgfQo+PiAtCj4+IC0gICAgaWYgKCFzdHJjbXAobmFtZSwgImhlbHAiKSkgewo+PiAtICAg ICAgICBjb25zdCBjaGFyICpwOwo+PiAtICAgICAgICBmb3IgKHAgPSBwcF9oZWxwOyBzdHJjaHIo cCwgJ1xuJyk7IHAgPSBzdHJjaHIocCwgJ1xuJykgKyAxKSB7Cj4+IC0gICAgICAgICAgICBhdl9z dHJsY3B5KHRlbXAsIHAsIEZGTUlOKHNpemVvZih0ZW1wKSwgc3RyY2hyKHAsICdcbicpIC0gcAo+ PiArIDIpKTsKPj4gLSAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfSU5GTywgIiVzIiwg dGVtcCk7Cj4+IC0gICAgICAgIH0KPj4gLSAgICAgICAgcmV0dXJuIE5VTEw7Cj4+IC0gICAgfQo+ PiAtCj4+IC0gICAgcHBNb2RlPSBhdl9tYWxsb2Moc2l6ZW9mKFBQTW9kZSkpOwo+PiAtICAgIGlm ICghcHBNb2RlKQo+PiAtICAgICAgICByZXR1cm4gTlVMTDsKPj4gLQo+PiAtICAgIHBwTW9kZS0+ bHVtTW9kZT0gMDsKPj4gLSAgICBwcE1vZGUtPmNocm9tTW9kZT0gMDsKPj4gLSAgICBwcE1vZGUt Pm1heFRtcE5vaXNlWzBdPSA3MDA7Cj4+IC0gICAgcHBNb2RlLT5tYXhUbXBOb2lzZVsxXT0gMTUw MDsKPj4gLSAgICBwcE1vZGUtPm1heFRtcE5vaXNlWzJdPSAzMDAwOwo+PiAtICAgIHBwTW9kZS0+ bWF4QWxsb3dlZFk9IDIzNDsKPj4gLSAgICBwcE1vZGUtPm1pbkFsbG93ZWRZPSAxNjsKPj4gLSAg ICBwcE1vZGUtPmJhc2VEY0RpZmY9IDI1Ni84Owo+PiAtICAgIHBwTW9kZS0+ZmxhdG5lc3NUaHJl c2hvbGQ9IDU2LTE2LTE7Cj4+IC0gICAgcHBNb2RlLT5tYXhDbGlwcGVkVGhyZXNob2xkPSAoQVZS YXRpb25hbCl7MSwxMDB9Owo+PiAtICAgIHBwTW9kZS0+ZXJyb3I9MDsKPj4gLQo+PiAtICAgIG1l bXNldCh0ZW1wLCAwLCBHRVRfTU9ERV9CVUZGRVJfU0laRSk7Cj4+IC0gICAgYXZfc3RybGNweSh0 ZW1wLCBuYW1lLCBHRVRfTU9ERV9CVUZGRVJfU0laRSAtIDEpOwo+PiAtCj4+IC0gICAgYXZfbG9n KE5VTEwsIEFWX0xPR19ERUJVRywgInBwOiAlc1xuIiwgbmFtZSk7Cj4+IC0KPj4gLSAgICBmb3Io Ozspewo+PiAtICAgICAgICBjb25zdCBjaGFyICpmaWx0ZXJOYW1lOwo+PiAtICAgICAgICBpbnQg cT0gMTAwMDAwMDsgLy9QUF9RVUFMSVRZX01BWDsKPj4gLSAgICAgICAgaW50IGNocm9tPS0xOwo+ PiAtICAgICAgICBpbnQgbHVtYT0tMTsKPj4gLSAgICAgICAgY29uc3QgY2hhciAqb3B0aW9uOwo+ PiAtICAgICAgICBjb25zdCBjaGFyICpvcHRpb25zW09QVElPTlNfQVJSQVlfU0laRV07Cj4+IC0g ICAgICAgIGludCBpOwo+PiAtICAgICAgICBpbnQgZmlsdGVyTmFtZU9rPTA7Cj4+IC0gICAgICAg IGludCBudW1PZlVua25vd25PcHRpb25zPTA7Cj4+IC0gICAgICAgIGludCBlbmFibGU9MTsgLy9k b2VzIHRoZSB1c2VyIHdhbnQgdXMgdG8gZW5hYmxlZCBvciBkaXNhYmxlZCB0aGUKPj4gZmlsdGVy Cj4+IC0gICAgICAgIGNoYXIgKnRva3N0YXRlOwo+PiAtCj4+IC0gICAgICAgIGZpbHRlclRva2Vu PSBhdl9zdHJ0b2socCwgZmlsdGVyRGVsaW1pdGVycywgJnRva3N0YXRlKTsKPj4gLSAgICAgICAg aWYoIWZpbHRlclRva2VuKSBicmVhazsKPj4gLSAgICAgICAgcCs9IHN0cmxlbihmaWx0ZXJUb2tl bikgKyAxOyAvLyBwIHBvaW50cyB0byBuZXh0IGZpbHRlclRva2VuCj4+IC0gICAgICAgIGZpbHRl ck5hbWU9IGF2X3N0cnRvayhmaWx0ZXJUb2tlbiwgb3B0aW9uRGVsaW1pdGVycywgJnRva3N0YXRl KTsKPj4gLSAgICAgICAgaWYgKCFmaWx0ZXJOYW1lKSB7Cj4+IC0gICAgICAgICAgICBwcE1vZGUt PmVycm9yKys7Cj4+IC0gICAgICAgICAgICBicmVhazsKPj4gLSAgICAgICAgfQo+PiAtICAgICAg ICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAicHA6ICVzOjolc1xuIiwgZmlsdGVyVG9rZW4s Cj4+IGZpbHRlck5hbWUpOwo+PiAtCj4+IC0gICAgICAgIGlmKCpmaWx0ZXJOYW1lID09ICctJyl7 Cj4+IC0gICAgICAgICAgICBlbmFibGU9MDsKPj4gLSAgICAgICAgICAgIGZpbHRlck5hbWUrKzsK Pj4gLSAgICAgICAgfQo+PiAtCj4+IC0gICAgICAgIGZvcig7Oyl7IC8vZm9yIGFsbCBvcHRpb25z Cj4+IC0gICAgICAgICAgICBvcHRpb249IGF2X3N0cnRvayhOVUxMLCBvcHRpb25EZWxpbWl0ZXJz LCAmdG9rc3RhdGUpOwo+PiAtICAgICAgICAgICAgaWYoIW9wdGlvbikgYnJlYWs7Cj4+IC0KPj4g LSAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJwcDogb3B0aW9uOiAlc1xu Iiwgb3B0aW9uKTsKPj4gLSAgICAgICAgICAgIGlmKCFzdHJjbXAoImF1dG9xIiwgb3B0aW9uKSB8 fCAhc3RyY21wKCJhIiwgb3B0aW9uKSkgcT0KPj4gcXVhbGl0eTsKPj4gLSAgICAgICAgICAgIGVs c2UgaWYoIXN0cmNtcCgibm9jaHJvbSIsIG9wdGlvbikgfHwgIXN0cmNtcCgieSIsIG9wdGlvbikp Cj4+IGNocm9tPTA7Cj4+IC0gICAgICAgICAgICBlbHNlIGlmKCFzdHJjbXAoImNocm9tIiwgb3B0 aW9uKSB8fCAhc3RyY21wKCJjIiwgb3B0aW9uKSkKPj4gY2hyb209MTsKPj4gLSAgICAgICAgICAg IGVsc2UgaWYoIXN0cmNtcCgibm9sdW1hIiwgb3B0aW9uKSB8fCAhc3RyY21wKCJuIiwgb3B0aW9u KSkKPj4gbHVtYT0wOwo+PiAtICAgICAgICAgICAgZWxzZXsKPj4gLSAgICAgICAgICAgICAgICBv cHRpb25zW251bU9mVW5rbm93bk9wdGlvbnNdID0gb3B0aW9uOwo+PiAtICAgICAgICAgICAgICAg IG51bU9mVW5rbm93bk9wdGlvbnMrKzsKPj4gLSAgICAgICAgICAgIH0KPj4gLSAgICAgICAgICAg IGlmKG51bU9mVW5rbm93bk9wdGlvbnMgPj0gT1BUSU9OU19BUlJBWV9TSVpFLTEpIGJyZWFrOwo+ PiAtICAgICAgICB9Cj4+IC0gICAgICAgIG9wdGlvbnNbbnVtT2ZVbmtub3duT3B0aW9uc10gPSBO VUxMOwo+PiAtCj4+IC0gICAgICAgIC8qIHJlcGxhY2Ugc3R1ZmYgZnJvbSB0aGUgcmVwbGFjZSBU YWJsZSAqLwo+PiAtICAgICAgICBmb3IoaT0wOyByZXBsYWNlVGFibGVbMippXTsgaSsrKXsKPj4g LSAgICAgICAgICAgIGlmKCFzdHJjbXAocmVwbGFjZVRhYmxlWzIqaV0sIGZpbHRlck5hbWUpKXsK Pj4gLSAgICAgICAgICAgICAgICBzaXplX3QgbmV3bGVuID0gc3RybGVuKHJlcGxhY2VUYWJsZVsy KmkgKyAxXSk7Cj4+IC0gICAgICAgICAgICAgICAgaW50IHBsZW47Cj4+IC0gICAgICAgICAgICAg ICAgaW50IHNwYWNlTGVmdDsKPj4gLQo+PiAtICAgICAgICAgICAgICAgIHAtLSwgKnA9JywnOwo+ PiAtCj4+IC0gICAgICAgICAgICAgICAgcGxlbj0gc3RybGVuKHApOwo+PiAtICAgICAgICAgICAg ICAgIHNwYWNlTGVmdD0gcCAtIHRlbXAgKyBwbGVuOwo+PiAtICAgICAgICAgICAgICAgIGlmKHNw YWNlTGVmdCArIG5ld2xlbiAgPj0gR0VUX01PREVfQlVGRkVSX1NJWkUgLSAxKXsKPj4gLSAgICAg ICAgICAgICAgICAgICAgcHBNb2RlLT5lcnJvcisrOwo+PiAtICAgICAgICAgICAgICAgICAgICBi cmVhazsKPj4gLSAgICAgICAgICAgICAgICB9Cj4+IC0gICAgICAgICAgICAgICAgbWVtbW92ZShw ICsgbmV3bGVuLCBwLCBwbGVuKzEpOwo+PiAtICAgICAgICAgICAgICAgIG1lbWNweShwLCByZXBs YWNlVGFibGVbMippICsgMV0sIG5ld2xlbik7Cj4+IC0gICAgICAgICAgICAgICAgZmlsdGVyTmFt ZU9rPTE7Cj4+IC0gICAgICAgICAgICB9Cj4+IC0gICAgICAgIH0KPj4gLQo+PiAtICAgICAgICBm b3IoaT0wOyBmaWx0ZXJzW2ldLnNob3J0TmFtZTsgaSsrKXsKPj4gLSAgICAgICAgICAgIGlmKCAg ICFzdHJjbXAoZmlsdGVyc1tpXS5sb25nTmFtZSwgZmlsdGVyTmFtZSkKPj4gLSAgICAgICAgICAg ICAgIHx8ICFzdHJjbXAoZmlsdGVyc1tpXS5zaG9ydE5hbWUsIGZpbHRlck5hbWUpKXsKPj4gLSAg ICAgICAgICAgICAgICBwcE1vZGUtPmx1bU1vZGUgJj0gfmZpbHRlcnNbaV0ubWFzazsKPj4gLSAg ICAgICAgICAgICAgICBwcE1vZGUtPmNocm9tTW9kZSAmPSB+ZmlsdGVyc1tpXS5tYXNrOwo+PiAt Cj4+IC0gICAgICAgICAgICAgICAgZmlsdGVyTmFtZU9rPTE7Cj4+IC0gICAgICAgICAgICAgICAg aWYoIWVuYWJsZSkgYnJlYWs7IC8vIHVzZXIgd2FudHMgdG8gZGlzYWJsZSBpdAo+PiAtCj4+IC0g ICAgICAgICAgICAgICAgaWYocSA+PSBmaWx0ZXJzW2ldLm1pbkx1bVF1YWxpdHkgJiYgbHVtYSkK Pj4gLSAgICAgICAgICAgICAgICAgICAgcHBNb2RlLT5sdW1Nb2RlfD0gZmlsdGVyc1tpXS5tYXNr Owo+PiAtICAgICAgICAgICAgICAgIGlmKGNocm9tPT0xIHx8IChjaHJvbT09LTEgJiYgZmlsdGVy c1tpXS5jaHJvbURlZmF1bHQpKQo+PiAtICAgICAgICAgICAgICAgICAgICBpZihxID49IGZpbHRl cnNbaV0ubWluQ2hyb21RdWFsaXR5KQo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBw TW9kZS0+Y2hyb21Nb2RlfD0gZmlsdGVyc1tpXS5tYXNrOwo+PiAtCj4+IC0gICAgICAgICAgICAg ICAgaWYoZmlsdGVyc1tpXS5tYXNrID09IExFVkVMX0ZJWCl7Cj4+IC0gICAgICAgICAgICAgICAg ICAgIGludCBvOwo+PiAtICAgICAgICAgICAgICAgICAgICBwcE1vZGUtPm1pbkFsbG93ZWRZPSAx NjsKPj4gLSAgICAgICAgICAgICAgICAgICAgcHBNb2RlLT5tYXhBbGxvd2VkWT0gMjM0Owo+PiAt ICAgICAgICAgICAgICAgICAgICBmb3Iobz0wOyBvcHRpb25zW29dOyBvKyspewo+PiAtICAgICAg ICAgICAgICAgICAgICAgICAgaWYoICAhc3RyY21wKG9wdGlvbnNbb10sImZ1bGx5cmFuZ2UiKQo+ PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwhc3RyY21wKG9wdGlvbnNbb10sImYiKSl7 Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBNb2RlLT5taW5BbGxvd2VkWT0gMDsK Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcE1vZGUtPm1heEFsbG93ZWRZPSAyNTU7 Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtT2ZVbmtub3duT3B0aW9ucy0tOwo+ PiAtICAgICAgICAgICAgICAgICAgICAgICAgfQo+PiAtICAgICAgICAgICAgICAgICAgICB9Cj4+ IC0gICAgICAgICAgICAgICAgfQo+PiAtICAgICAgICAgICAgICAgIGVsc2UgaWYoZmlsdGVyc1tp XS5tYXNrID09IFRFTVBfTk9JU0VfRklMVEVSKQo+PiAtICAgICAgICAgICAgICAgIHsKPj4gLSAg ICAgICAgICAgICAgICAgICAgaW50IG87Cj4+IC0gICAgICAgICAgICAgICAgICAgIGludCBudW1P Zk5vaXNlcz0wOwo+PiAtCj4+IC0gICAgICAgICAgICAgICAgICAgIGZvcihvPTA7IG9wdGlvbnNb b107IG8rKyl7Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp0YWlsOwo+PiAtICAg ICAgICAgICAgICAgICAgICAgICAgcHBNb2RlLT5tYXhUbXBOb2lzZVtudW1PZk5vaXNlc109Cj4+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydG9sKG9wdGlvbnNbb10sICZ0YWlsLCAw KTsKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRhaWwhPW9wdGlvbnNbb10pewo+PiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU9mTm9pc2VzKys7Cj4+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnVtT2ZVbmtub3duT3B0aW9ucy0tOwo+PiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmKG51bU9mTm9pc2VzID49IDMpIGJyZWFrOwo+PiAtICAgICAgICAg ICAgICAgICAgICAgICAgfQo+PiAtICAgICAgICAgICAgICAgICAgICB9Cj4+IC0gICAgICAgICAg ICAgICAgfQo+PiAtICAgICAgICAgICAgICAgIGVsc2UgaWYoZmlsdGVyc1tpXS5tYXNrID09IFZf REVCTE9DSyAgIHx8Cj4+IGZpbHRlcnNbaV0ubWFzayA9PSBIX0RFQkxPQ0sKPj4gLSAgICAgICAg ICAgICAgICAgICAgIHx8IGZpbHRlcnNbaV0ubWFzayA9PSBWX0FfREVCTE9DSyB8fAo+PiBmaWx0 ZXJzW2ldLm1hc2sgPT0gSF9BX0RFQkxPQ0spewo+PiAtICAgICAgICAgICAgICAgICAgICBpbnQg bzsKPj4gLQo+PiAtICAgICAgICAgICAgICAgICAgICBmb3Iobz0wOyBvcHRpb25zW29dICYmIG88 MjsgbysrKXsKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRhaWw7Cj4+IC0gICAg ICAgICAgICAgICAgICAgICAgICBpbnQgdmFsPSBzdHJ0b2wob3B0aW9uc1tvXSwgJnRhaWwsIDAp Owo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgaWYodGFpbD09b3B0aW9uc1tvXSkgYnJlYWs7 Cj4+IC0KPj4gLSAgICAgICAgICAgICAgICAgICAgICAgIG51bU9mVW5rbm93bk9wdGlvbnMtLTsK Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKG89PTApIHBwTW9kZS0+YmFzZURjRGlmZj0g dmFsOwo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBwcE1vZGUtPmZsYXRuZXNzVGhy ZXNob2xkPSB2YWw7Cj4+IC0gICAgICAgICAgICAgICAgICAgIH0KPj4gLSAgICAgICAgICAgICAg ICB9Cj4+IC0gICAgICAgICAgICAgICAgZWxzZSBpZihmaWx0ZXJzW2ldLm1hc2sgPT0gRk9SQ0Vf UVVBTlQpewo+PiAtICAgICAgICAgICAgICAgICAgICBpbnQgbzsKPj4gLSAgICAgICAgICAgICAg ICAgICAgcHBNb2RlLT5mb3JjZWRRdWFudD0gMTU7Cj4+IC0KPj4gLSAgICAgICAgICAgICAgICAg ICAgZm9yKG89MDsgb3B0aW9uc1tvXSAmJiBvPDE7IG8rKyl7Cj4+IC0gICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICp0YWlsOwo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbD0g c3RydG9sKG9wdGlvbnNbb10sICZ0YWlsLCAwKTsKPj4gLSAgICAgICAgICAgICAgICAgICAgICAg IGlmKHRhaWw9PW9wdGlvbnNbb10pIGJyZWFrOwo+PiAtCj4+IC0gICAgICAgICAgICAgICAgICAg ICAgICBudW1PZlVua25vd25PcHRpb25zLS07Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgICBw cE1vZGUtPmZvcmNlZFF1YW50PSB2YWw7Cj4+IC0gICAgICAgICAgICAgICAgICAgIH0KPj4gLSAg ICAgICAgICAgICAgICB9Cj4+IC0gICAgICAgICAgICB9Cj4+IC0gICAgICAgIH0KPj4gLSAgICAg ICAgaWYoIWZpbHRlck5hbWVPaykgcHBNb2RlLT5lcnJvcisrOwo+PiAtICAgICAgICBwcE1vZGUt PmVycm9yICs9IG51bU9mVW5rbm93bk9wdGlvbnM7Cj4+IC0gICAgfQo+PiAtCj4+IC0gICAgYXZf bG9nKE5VTEwsIEFWX0xPR19ERUJVRywgInBwOiBsdW1Nb2RlPSVYLCBjaHJvbU1vZGU9JVhcbiIs Cj4+IHBwTW9kZS0+bHVtTW9kZSwgcHBNb2RlLT5jaHJvbU1vZGUpOwo+PiAtICAgIGlmKHBwTW9k ZS0+ZXJyb3Ipewo+PiAtICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9SLCAiJWQgZXJy b3JzIGluIHBvc3Rwcm9jZXNzIHN0cmluZwo+PiBcIiVzXCJcbiIsIHBwTW9kZS0+ZXJyb3IsIG5h bWUpOwo+PiAtICAgICAgICBhdl9mcmVlKHBwTW9kZSk7Cj4+IC0gICAgICAgIHJldHVybiBOVUxM Owo+PiAtICAgIH0KPj4gLSAgICByZXR1cm4gcHBNb2RlOwo+PiAtfQo+PiAtCj4+IC12b2lkIHBw X2ZyZWVfbW9kZShwcF9tb2RlICptb2RlKXsKPj4gLSAgICBhdl9mcmVlKG1vZGUpOwo+PiAtfQo+ PiAtCj4+IC1zdGF0aWMgdm9pZCByZWFsbG9jQWxpZ24odm9pZCAqKnAsIGludCBzaXplKXsKPj4g LSAgICBhdl9mcmVlKCpwKTsKPj4gLSAgICAqcD0gYXZfbWFsbG9jeihzaXplKTsKPj4gLX0KPj4g LQo+PiAtc3RhdGljIHZvaWQgcmVhbGxvY0J1ZmZlcnMoUFBDb250ZXh0ICpjLCBpbnQgd2lkdGgs IGludCBoZWlnaHQsIGludAo+PiBzdHJpZGUsIGludCBxcFN0cmlkZSl7Cj4+IC0gICAgaW50IG1i V2lkdGggPSAod2lkdGgrMTUpPj40Owo+PiAtICAgIGludCBtYkhlaWdodD0gKGhlaWdodCsxNSk+ PjQ7Cj4+IC0gICAgaW50IGk7Cj4+IC0KPj4gLSAgICBjLT5zdHJpZGU9IHN0cmlkZTsKPj4gLSAg ICBjLT5xcFN0cmlkZT0gcXBTdHJpZGU7Cj4+IC0KPj4gLSAgICByZWFsbG9jQWxpZ24oKHZvaWQg KiopJmMtPnRlbXBEc3QsIHN0cmlkZSoyNCszMik7Cj4+IC0gICAgcmVhbGxvY0FsaWduKCh2b2lk ICoqKSZjLT50ZW1wU3JjLCBzdHJpZGUqMjQpOwo+PiAtICAgIHJlYWxsb2NBbGlnbigodm9pZCAq KikmYy0+dGVtcEJsb2NrcywgMioxNio4KTsKPj4gLSAgICByZWFsbG9jQWxpZ24oKHZvaWQgKiop JmMtPnlIaXN0b2dyYW0sIDI1NipzaXplb2YodWludDY0X3QpKTsKPj4gLSAgICBmb3IoaT0wOyBp PDI1NjsgaSsrKQo+PiAtICAgICAgICAgICAgYy0+eUhpc3RvZ3JhbVtpXT0gd2lkdGgqaGVpZ2h0 LzY0KjE1LzI1NjsKPj4gLQo+PiAtICAgIGZvcihpPTA7IGk8MzsgaSsrKXsKPj4gLSAgICAgICAg Ly9Ob3RlOiBUaGUgKzE3KjEwMjQgaXMganVzdCB0aGVyZSBzbyBJIGRvIG5vdCBoYXZlIHRvIHdv cnJ5Cj4+IGFib3V0IHIvdyBvdmVyIHRoZSBlbmQuCj4+IC0gICAgICAgIHJlYWxsb2NBbGlnbigo dm9pZCAqKikmYy0+dGVtcEJsdXJyZWRbaV0sIHN0cmlkZSptYkhlaWdodCoxNiArCj4+IDE3KjEw MjQpOwo+PiAtICAgICAgICByZWFsbG9jQWxpZ24oKHZvaWQgKiopJmMtPnRlbXBCbHVycmVkUGFz dFtpXSwKPj4gMjU2KigoaGVpZ2h0KzcpJih+NykpLzIgKyAxNyoxMDI0KTsvL0ZJWE1FIHNpemUK Pj4gLSAgICB9Cj4+IC0KPj4gLSAgICByZWFsbG9jQWxpZ24oKHZvaWQgKiopJmMtPmRlaW50VGVt cCwgMip3aWR0aCszMik7Cj4+IC0gICAgcmVhbGxvY0FsaWduKCh2b2lkICoqKSZjLT5ub25CUVBU YWJsZSwKPj4gcXBTdHJpZGUqbWJIZWlnaHQqc2l6ZW9mKGludDhfdCkpOwo+PiAtICAgIHJlYWxs b2NBbGlnbigodm9pZCAqKikmYy0+c3RkUVBUYWJsZSwKPj4gcXBTdHJpZGUqbWJIZWlnaHQqc2l6 ZW9mKGludDhfdCkpOwo+PiAtICAgIHJlYWxsb2NBbGlnbigodm9pZCAqKikmYy0+Zm9yY2VkUVBU YWJsZSwgbWJXaWR0aCpzaXplb2YoaW50OF90KSk7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBjb25z dCBjaGFyICogY29udGV4dF90b19uYW1lKHZvaWQgKiBwdHIpIHsKPj4gLSAgICByZXR1cm4gInBv c3Rwcm9jIjsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGNvbnN0IEFWQ2xhc3MgYXZfY29kZWNfY29u dGV4dF9jbGFzcyA9IHsgIlBvc3Rwcm9jIiwKPj4gY29udGV4dF90b19uYW1lLCBOVUxMIH07Cj4+ IC0KPj4gLWF2X2NvbGQgcHBfY29udGV4dCAqcHBfZ2V0X2NvbnRleHQoaW50IHdpZHRoLCBpbnQg aGVpZ2h0LCBpbnQgY3B1Q2Fwcyl7Cj4+IC0gICAgUFBDb250ZXh0ICpjPSBhdl9tYWxsb2N6KHNp emVvZihQUENvbnRleHQpKTsKPj4gLSAgICBpbnQgc3RyaWRlPSBGRkFMSUdOKHdpZHRoLCAxNik7 ICAvL2Fzc3VtZWQgLyB3aWxsIHJlYWxsb2MgaWYgbmVlZGVkCj4+IC0gICAgaW50IHFwU3RyaWRl PSAod2lkdGgrMTUpLzE2ICsgMjsgLy9hc3N1bWVkIC8gd2lsbCByZWFsbG9jIGlmIG5lZWRlZAo+ PiAtCj4+IC0gICAgaWYgKCFjKQo+PiAtICAgICAgICByZXR1cm4gTlVMTDsKPj4gLQo+PiAtICAg IGMtPmF2X2NsYXNzID0gJmF2X2NvZGVjX2NvbnRleHRfY2xhc3M7Cj4+IC0gICAgaWYoY3B1Q2Fw cyZQUF9GT1JNQVQpewo+PiAtICAgICAgICBjLT5oQ2hyb21hU3ViU2FtcGxlPSBjcHVDYXBzJjB4 MzsKPj4gLSAgICAgICAgYy0+dkNocm9tYVN1YlNhbXBsZT0gKGNwdUNhcHM+PjQpJjB4MzsKPj4g LSAgICB9ZWxzZXsKPj4gLSAgICAgICAgYy0+aENocm9tYVN1YlNhbXBsZT0gMTsKPj4gLSAgICAg ICAgYy0+dkNocm9tYVN1YlNhbXBsZT0gMTsKPj4gLSAgICB9Cj4+IC0gICAgaWYgKGNwdUNhcHMg JiBQUF9DUFVfQ0FQU19BVVRPKSB7Cj4+IC0gICAgICAgIGMtPmNwdUNhcHMgPSBhdl9nZXRfY3B1 X2ZsYWdzKCk7Cj4+IC0gICAgfSBlbHNlIHsKPj4gLSAgICAgICAgYy0+Y3B1Q2FwcyA9IDA7Cj4+ IC0gICAgICAgIGlmIChjcHVDYXBzICYgUFBfQ1BVX0NBUFNfQUxUSVZFQykgIGMtPmNwdUNhcHMg fD0KPj4gQVZfQ1BVX0ZMQUdfQUxUSVZFQzsKPj4gLSAgICB9Cj4+IC0KPj4gLSAgICByZWFsbG9j QnVmZmVycyhjLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUsIHFwU3RyaWRlKTsKPj4gLQo+PiAtICAg IGMtPmZyYW1lTnVtPS0xOwo+PiAtCj4+IC0gICAgcmV0dXJuIGM7Cj4+IC19Cj4+IC0KPj4gLWF2 X2NvbGQgdm9pZCBwcF9mcmVlX2NvbnRleHQodm9pZCAqdmMpewo+PiAtICAgIFBQQ29udGV4dCAq YyA9IChQUENvbnRleHQqKXZjOwo+PiAtICAgIGludCBpOwo+PiAtCj4+IC0gICAgZm9yKGk9MDsg aTxGRl9BUlJBWV9FTEVNUyhjLT50ZW1wQmx1cnJlZCk7IGkrKykKPj4gLSAgICAgICAgYXZfZnJl ZShjLT50ZW1wQmx1cnJlZFtpXSk7Cj4+IC0gICAgZm9yKGk9MDsgaTxGRl9BUlJBWV9FTEVNUyhj LT50ZW1wQmx1cnJlZFBhc3QpOyBpKyspCj4+IC0gICAgICAgIGF2X2ZyZWUoYy0+dGVtcEJsdXJy ZWRQYXN0W2ldKTsKPj4gLQo+PiAtICAgIGF2X2ZyZWUoYy0+dGVtcEJsb2Nrcyk7Cj4+IC0gICAg YXZfZnJlZShjLT55SGlzdG9ncmFtKTsKPj4gLSAgICBhdl9mcmVlKGMtPnRlbXBEc3QpOwo+PiAt ICAgIGF2X2ZyZWUoYy0+dGVtcFNyYyk7Cj4+IC0gICAgYXZfZnJlZShjLT5kZWludFRlbXApOwo+ PiAtICAgIGF2X2ZyZWUoYy0+c3RkUVBUYWJsZSk7Cj4+IC0gICAgYXZfZnJlZShjLT5ub25CUVBU YWJsZSk7Cj4+IC0gICAgYXZfZnJlZShjLT5mb3JjZWRRUFRhYmxlKTsKPj4gLQo+PiAtICAgIG1l bXNldChjLCAwLCBzaXplb2YoUFBDb250ZXh0KSk7Cj4+IC0KPj4gLSAgICBhdl9mcmVlKGMpOwo+ PiAtfQo+PiAtCj4+IC12b2lkICBwcF9wb3N0cHJvY2Vzcyhjb25zdCB1aW50OF90ICogc3JjWzNd LCBjb25zdCBpbnQgc3JjU3RyaWRlWzNdLAo+PiAtICAgICAgICAgICAgICAgICAgICAgdWludDhf dCAqIGRzdFszXSwgY29uc3QgaW50IGRzdFN0cmlkZVszXSwKPj4gLSAgICAgICAgICAgICAgICAg ICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwKPj4gLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGludDhfdCAqUVBfc3RvcmUsICBpbnQgUVBTdHJpZGUsCj4+IC0gICAgICAgICAgICAgICAgICAg ICBwcF9tb2RlICp2bSwgIHZvaWQgKnZjLCBpbnQgcGljdF90eXBlKQo+PiAtewo+PiAtICAgIGlu dCBtYldpZHRoID0gKHdpZHRoKzE1KT4+NDsKPj4gLSAgICBpbnQgbWJIZWlnaHQ9IChoZWlnaHQr MTUpPj40Owo+PiAtICAgIFBQTW9kZSAqbW9kZSA9IHZtOwo+PiAtICAgIFBQQ29udGV4dCAqYyA9 IHZjOwo+PiAtICAgIGludCBtaW5TdHJpZGU9IEZGTUFYKEZGQUJTKHNyY1N0cmlkZVswXSksIEZG QUJTKGRzdFN0cmlkZVswXSkpOwo+PiAtICAgIGludCBhYnNRUFN0cmlkZSA9IEZGQUJTKFFQU3Ry aWRlKTsKPj4gLQo+PiAtICAgIGlmICh3aWR0aCA8IDE2IHx8IGhlaWdodCA8IDE2KSB7Cj4+IC0g ICAgICAgIGF2X2xvZyhjLCBBVl9MT0dfRVJST1IsICJQb3N0cHJvYyBpcyBkZXNpZ25lZCB0byBm aWx0ZXIgMTZ4MTYKPj4gbWFjcm9ibG9jayBiYXNlZCBmb3JtYXRzLCB0aGUgbWluaW11bSBzaXpl IGlzIDEgbWFjcm9ibG9ja1xuIik7Cj4+IC0gICAgICAgIHJldHVybjsKPj4gLSAgICB9Cj4+IC0K Pj4gLSAgICAvLyBjLT5zdHJpZGUgYW5kIGMtPlFQU3RyaWRlIGFyZSBhbHdheXMgcG9zaXRpdmUK Pj4gLSAgICBpZihjLT5zdHJpZGUgPCBtaW5TdHJpZGUgfHwgYy0+cXBTdHJpZGUgPCBhYnNRUFN0 cmlkZSkKPj4gLSAgICAgICAgcmVhbGxvY0J1ZmZlcnMoYywgd2lkdGgsIGhlaWdodCwKPj4gLSAg ICAgICAgICAgICAgICAgICAgICAgRkZNQVgobWluU3RyaWRlLCBjLT5zdHJpZGUpLAo+PiAtICAg ICAgICAgICAgICAgICAgICAgICBGRk1BWChjLT5xcFN0cmlkZSwgYWJzUVBTdHJpZGUpKTsKPj4g LQo+PiAtICAgIGlmKCFRUF9zdG9yZSB8fCAobW9kZS0+bHVtTW9kZSAmIEZPUkNFX1FVQU5UKSl7 Cj4+IC0gICAgICAgIGludCBpOwo+PiAtICAgICAgICBRUF9zdG9yZT0gYy0+Zm9yY2VkUVBUYWJs ZTsKPj4gLSAgICAgICAgYWJzUVBTdHJpZGUgPSBRUFN0cmlkZSA9IDA7Cj4+IC0gICAgICAgIGlm KG1vZGUtPmx1bU1vZGUgJiBGT1JDRV9RVUFOVCkKPj4gLSAgICAgICAgICAgIGZvcihpPTA7IGk8 bWJXaWR0aDsgaSsrKSBjLT5mb3JjZWRRUFRhYmxlW2ldPQo+PiBtb2RlLT5mb3JjZWRRdWFudDsK Pj4gLSAgICAgICAgZWxzZQo+PiAtICAgICAgICAgICAgZm9yKGk9MDsgaTxtYldpZHRoOyBpKysp IGMtPmZvcmNlZFFQVGFibGVbaV09IDE7Cj4+IC0gICAgfQo+PiAtCj4+IC0gICAgaWYocGljdF90 eXBlICYgUFBfUElDVF9UWVBFX1FQMil7Cj4+IC0gICAgICAgIGludCBpOwo+PiAtICAgICAgICBj b25zdCBpbnQgY291bnQ9IEZGTUFYKG1iSGVpZ2h0ICogYWJzUVBTdHJpZGUsIG1iV2lkdGgpOwo+ PiAtICAgICAgICBmb3IoaT0wOyBpPChjb3VudD4+Mik7IGkrKyl7Cj4+IC0gICAgICAgICAgICBB Vl9XTjMyKGMtPnN0ZFFQVGFibGUgKyAoaTw8MiksIEFWX1JOMzIoUVBfc3RvcmUgKyAoaTw8Mikp Cj4+ID4+IDEgJiAweDdGN0Y3RjdGKTsKPj4gLSAgICAgICAgfQo+PiAtICAgICAgICBmb3IoaTw8 PTI7IGk8Y291bnQ7IGkrKyl7Cj4+IC0gICAgICAgICAgICBjLT5zdGRRUFRhYmxlW2ldID0gUVBf c3RvcmVbaV0+PjE7Cj4+IC0gICAgICAgIH0KPj4gLSAgICAgICAgUVBfc3RvcmU9IGMtPnN0ZFFQ VGFibGU7Cj4+IC0gICAgICAgIFFQU3RyaWRlPSBhYnNRUFN0cmlkZTsKPj4gLSAgICB9Cj4+IC0K Pj4gLSAgICBpZigwKXsKPj4gLSAgICAgICAgaW50IHgseTsKPj4gLSAgICAgICAgZm9yKHk9MDsg eTxtYkhlaWdodDsgeSsrKXsKPj4gLSAgICAgICAgICAgIGZvcih4PTA7IHg8bWJXaWR0aDsgeCsr KXsKPj4gLSAgICAgICAgICAgICAgICBhdl9sb2coYywgQVZfTE9HX0lORk8sICIlMmQgIiwgUVBf c3RvcmVbeCArIHkqUVBTdHJpZGVdKTsKPj4gLSAgICAgICAgICAgIH0KPj4gLSAgICAgICAgICAg IGF2X2xvZyhjLCBBVl9MT0dfSU5GTywgIlxuIik7Cj4+IC0gICAgICAgIH0KPj4gLSAgICAgICAg YXZfbG9nKGMsIEFWX0xPR19JTkZPLCAiXG4iKTsKPj4gLSAgICB9Cj4+IC0KPj4gLSAgICBpZigo cGljdF90eXBlJjcpIT0zKXsKPj4gLSAgICAgICAgaWYgKFFQU3RyaWRlID49IDApewo+PiAtICAg ICAgICAgICAgaW50IGk7Cj4+IC0gICAgICAgICAgICBjb25zdCBpbnQgY291bnQ9IEZGTUFYKG1i SGVpZ2h0ICogUVBTdHJpZGUsIG1iV2lkdGgpOwo+PiAtICAgICAgICAgICAgZm9yKGk9MDsgaTwo Y291bnQ+PjIpOyBpKyspewo+PiAtICAgICAgICAgICAgICAgIEFWX1dOMzIoYy0+bm9uQlFQVGFi bGUgKyAoaTw8MiksIEFWX1JOMzIoUVBfc3RvcmUgKwo+PiAoaTw8MikpICYgMHgzRjNGM0YzRik7 Cj4+IC0gICAgICAgICAgICB9Cj4+IC0gICAgICAgICAgICBmb3IoaTw8PTI7IGk8Y291bnQ7IGkr Kyl7Cj4+IC0gICAgICAgICAgICAgICAgYy0+bm9uQlFQVGFibGVbaV0gPSBRUF9zdG9yZVtpXSAm IDB4M0Y7Cj4+IC0gICAgICAgICAgICB9Cj4+IC0gICAgICAgIH0gZWxzZSB7Cj4+IC0gICAgICAg ICAgICBpbnQgaSxqOwo+PiAtICAgICAgICAgICAgZm9yKGk9MDsgaTxtYkhlaWdodDsgaSsrKSB7 Cj4+IC0gICAgICAgICAgICAgICAgZm9yKGo9MDsgajxhYnNRUFN0cmlkZTsgaisrKSB7Cj4+IC0g ICAgICAgICAgICAgICAgICAgIGMtPm5vbkJRUFRhYmxlW2kqYWJzUVBTdHJpZGUral0gPQo+PiBR UF9zdG9yZVtpKlFQU3RyaWRlK2pdICYgMHgzRjsKPj4gLSAgICAgICAgICAgICAgICB9Cj4+IC0g ICAgICAgICAgICB9Cj4+IC0gICAgICAgIH0KPj4gLSAgICB9Cj4+IC0KPj4gLSAgICBhdl9sb2co YywgQVZfTE9HX0RFQlVHLCAidXNpbmcgbnBwIGZpbHRlcnMgMHglWC8weCVYXG4iLAo+PiAtICAg ICAgICAgICBtb2RlLT5sdW1Nb2RlLCBtb2RlLT5jaHJvbU1vZGUpOwo+PiAtCj4+IC0gICAgcG9z dFByb2Nlc3Moc3JjWzBdLCBzcmNTdHJpZGVbMF0sIGRzdFswXSwgZHN0U3RyaWRlWzBdLAo+PiAt ICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIFFQX3N0b3JlLCBRUFN0cmlkZSwgMCwgbW9k ZSwgYyk7Cj4+IC0KPj4gLSAgICBpZiAoIShzcmNbMV0gJiYgc3JjWzJdICYmIGRzdFsxXSAmJiBk c3RbMl0pKQo+PiAtICAgICAgICByZXR1cm47Cj4+IC0KPj4gLSAgICB3aWR0aCAgPSAod2lkdGgg KT4+Yy0+aENocm9tYVN1YlNhbXBsZTsKPj4gLSAgICBoZWlnaHQgPSAoaGVpZ2h0KT4+Yy0+dkNo cm9tYVN1YlNhbXBsZTsKPj4gLQo+PiAtICAgIGlmKG1vZGUtPmNocm9tTW9kZSl7Cj4+IC0gICAg ICAgIHBvc3RQcm9jZXNzKHNyY1sxXSwgc3JjU3RyaWRlWzFdLCBkc3RbMV0sIGRzdFN0cmlkZVsx XSwKPj4gLSAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgUVBfc3RvcmUsIFFQU3Ry aWRlLCAxLCBtb2RlLCBjKTsKPj4gLSAgICAgICAgcG9zdFByb2Nlc3Moc3JjWzJdLCBzcmNTdHJp ZGVbMl0sIGRzdFsyXSwgZHN0U3RyaWRlWzJdLAo+PiAtICAgICAgICAgICAgICAgICAgICB3aWR0 aCwgaGVpZ2h0LCBRUF9zdG9yZSwgUVBTdHJpZGUsIDIsIG1vZGUsIGMpOwo+PiAtICAgIH0KPj4g LSAgICBlbHNlIGlmKHNyY1N0cmlkZVsxXSA9PSBkc3RTdHJpZGVbMV0gJiYgc3JjU3RyaWRlWzJd ID09Cj4+IGRzdFN0cmlkZVsyXSl7Cj4+IC0gICAgICAgIGxpbmVjcHkoZHN0WzFdLCBzcmNbMV0s IGhlaWdodCwgc3JjU3RyaWRlWzFdKTsKPj4gLSAgICAgICAgbGluZWNweShkc3RbMl0sIHNyY1sy XSwgaGVpZ2h0LCBzcmNTdHJpZGVbMl0pOwo+PiAtICAgIH1lbHNlewo+PiAtICAgICAgICBpbnQg eTsKPj4gLSAgICAgICAgZm9yKHk9MDsgeTxoZWlnaHQ7IHkrKyl7Cj4+IC0gICAgICAgICAgICBt ZW1jcHkoJihkc3RbMV1beSpkc3RTdHJpZGVbMV1dKSwgJihzcmNbMV1beSpzcmNTdHJpZGVbMV1d KSwKPj4gd2lkdGgpOwo+PiAtICAgICAgICAgICAgbWVtY3B5KCYoZHN0WzJdW3kqZHN0U3RyaWRl WzJdXSksICYoc3JjWzJdW3kqc3JjU3RyaWRlWzJdXSksCj4+IHdpZHRoKTsKPj4gLSAgICAgICAg fQo+PiAtICAgIH0KPj4gLX0KPj4gZGlmZiAtLWdpdCBhL2xpYnBvc3Rwcm9jL3Bvc3Rwcm9jZXNz LmggYi9saWJwb3N0cHJvYy9wb3N0cHJvY2Vzcy5oCj4+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAo+PiBpbmRleCBkMmFkYjZjY2FkNy4uMDAwMDAwMDAwMDAKPj4gLS0tIGEvbGlicG9zdHByb2Mv cG9zdHByb2Nlc3MuaAo+PiArKysgL2Rldi9udWxsCj4+IEBAIC0xLDEwOSArMCwwIEBACj4+IC0v Kgo+PiAtICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgTWljaGFlbCBOaWVkZXJtYXllciAobWlj aGFlbG5pQGdteC5hdCkKPj4gLSAqCj4+IC0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcu Cj4+IC0gKgo+PiAtICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKPj4gLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4+IC0gKiB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+ PiAtICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4gLSAqCj4+IC0gKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK Pj4gLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCj4+IC0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+IC0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiAtICoKPj4gLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4+IC0gKiBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+PiAtICogRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0Cj4+IDxodHRwczovL3d3dy5nb29nbGUu Y29tL21hcHMvc2VhcmNoLzUxK0ZyYW5rbGluK1N0cmVldD9lbnRyeT1nbWFpbCZzb3VyY2U9Zz4s Cj4+IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCj4+IC0gKi8KPj4gLQo+ PiAtI2lmbmRlZiBQT1NUUFJPQ19QT1NUUFJPQ0VTU19ICj4+IC0jZGVmaW5lIFBPU1RQUk9DX1BP U1RQUk9DRVNTX0gKPj4gLQo+PiAtLyoqCj4+IC0gKiBAZmlsZQo+PiAtICogQGluZ3JvdXAgbHBw Cj4+IC0gKiBleHRlcm5hbCBBUEkgaGVhZGVyCj4+IC0gKi8KPj4gLQo+PiAtLyoqCj4+IC0gKiBA ZGVmZ3JvdXAgbHBwIGxpYnBvc3Rwcm9jCj4+IC0gKiBWaWRlbyBwb3N0cHJvY2Vzc2luZyBsaWJy YXJ5Lgo+PiAtICoKPj4gLSAqIEB7Cj4+IC0gKi8KPj4gLQo+PiAtI2luY2x1ZGUgImxpYnBvc3Rw cm9jL3ZlcnNpb25fbWFqb3IuaCIKPj4gLSNpZm5kZWYgSEFWRV9BVl9DT05GSUdfSAo+PiAtLyog V2hlbiBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBmZm1wZWcgYnVpbGQsIG9ubHkgaW5jbHVkZSB0 aGUgbWFqb3IKPj4gdmVyc2lvbgo+PiAtICogdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVidWlsZHMu IFdoZW4gaW5jbHVkZWQgZXh0ZXJuYWxseSwga2VlcAo+PiBpbmNsdWRpbmcKPj4gLSAqIHRoZSBm dWxsIHZlcnNpb24gaW5mb3JtYXRpb24uICovCj4+IC0jaW5jbHVkZSAibGlicG9zdHByb2MvdmVy c2lvbi5oIgo+PiAtI2VuZGlmCj4+IC0KPj4gLS8qKgo+PiAtICogUmV0dXJuIHRoZSBMSUJQT1NU UFJPQ19WRVJTSU9OX0lOVCBjb25zdGFudC4KPj4gLSAqLwo+PiAtdW5zaWduZWQgcG9zdHByb2Nf dmVyc2lvbih2b2lkKTsKPj4gLQo+PiAtLyoqCj4+IC0gKiBSZXR1cm4gdGhlIGxpYnBvc3Rwcm9j IGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbi4KPj4gLSAqLwo+PiAtY29uc3QgY2hhciAqcG9zdHBy b2NfY29uZmlndXJhdGlvbih2b2lkKTsKPj4gLQo+PiAtLyoqCj4+IC0gKiBSZXR1cm4gdGhlIGxp YnBvc3Rwcm9jIGxpY2Vuc2UuCj4+IC0gKi8KPj4gLWNvbnN0IGNoYXIgKnBvc3Rwcm9jX2xpY2Vu c2Uodm9pZCk7Cj4+IC0KPj4gLSNkZWZpbmUgUFBfUVVBTElUWV9NQVggNgo+PiAtCj4+IC0jaW5j bHVkZSA8aW50dHlwZXMuaD4KPj4gLQo+PiAtdHlwZWRlZiB2b2lkIHBwX2NvbnRleHQ7Cj4+IC10 eXBlZGVmIHZvaWQgcHBfbW9kZTsKPj4gLQo+PiAtZXh0ZXJuIGNvbnN0IGNoYXIgcHBfaGVscFtd OyAvLy88IGEgc2ltcGxlIGhlbHAgdGV4dAo+PiAtCj4+IC12b2lkICBwcF9wb3N0cHJvY2Vzcyhj b25zdCB1aW50OF90ICogc3JjWzNdLCBjb25zdCBpbnQgc3JjU3RyaWRlWzNdLAo+PiAtICAgICAg ICAgICAgICAgICAgICAgdWludDhfdCAqIGRzdFszXSwgY29uc3QgaW50IGRzdFN0cmlkZVszXSwK Pj4gLSAgICAgICAgICAgICAgICAgICAgIGludCBob3Jpem9udGFsU2l6ZSwgaW50IHZlcnRpY2Fs U2l6ZSwKPj4gLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDhfdCAqUVBfc3RvcmUsICBp bnQgUVBfc3RyaWRlLAo+PiAtICAgICAgICAgICAgICAgICAgICAgcHBfbW9kZSAqbW9kZSwgcHBf Y29udGV4dCAqcHBDb250ZXh0LCBpbnQKPj4gcGljdF90eXBlKTsKPj4gLQo+PiAtCj4+IC0vKioK Pj4gLSAqIFJldHVybiBhIHBwX21vZGUgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KPj4g LSAqCj4+IC0gKiBAcGFyYW0gbmFtZSAgICB0aGUgc3RyaW5nIGFmdGVyICItcHAiIG9uIHRoZSBj b21tYW5kIGxpbmUKPj4gLSAqIEBwYXJhbSBxdWFsaXR5IGEgbnVtYmVyIGZyb20gMCB0byBQUF9R VUFMSVRZX01BWAo+PiAtICovCj4+IC1wcF9tb2RlICpwcF9nZXRfbW9kZV9ieV9uYW1lX2FuZF9x dWFsaXR5KGNvbnN0IGNoYXIgKm5hbWUsIGludCBxdWFsaXR5KTsKPj4gLXZvaWQgcHBfZnJlZV9t b2RlKHBwX21vZGUgKm1vZGUpOwo+PiAtCj4+IC1wcF9jb250ZXh0ICpwcF9nZXRfY29udGV4dChp bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmbGFncyk7Cj4+IC12b2lkIHBwX2ZyZWVfY29udGV4 dChwcF9jb250ZXh0ICpwcENvbnRleHQpOwo+PiAtCj4+IC0jZGVmaW5lIFBQX0NQVV9DQVBTX01N WCAgIDB4ODAwMDAwMDAKPj4gLSNkZWZpbmUgUFBfQ1BVX0NBUFNfTU1YMiAgMHgyMDAwMDAwMAo+ PiAtI2lmIEZGX0FQSV9QUF9BTURfM0ROT1cKPj4gLSNkZWZpbmUgUFBfQ1BVX0NBUFNfM0ROT1cg MHg0MDAwMDAwMAo+PiAtI2VuZGlmCj4+IC0jZGVmaW5lIFBQX0NQVV9DQVBTX0FMVElWRUMgMHgx MDAwMDAwMAo+PiAtI2RlZmluZSBQUF9DUFVfQ0FQU19BVVRPICAweDAwMDgwMDAwCj4+IC0KPj4g LSNkZWZpbmUgUFBfRk9STUFUICAgICAgICAgMHgwMDAwMDAwOAo+PiAtI2RlZmluZSBQUF9GT1JN QVRfNDIwICAgICgweDAwMDAwMDExfFBQX0ZPUk1BVCkKPj4gLSNkZWZpbmUgUFBfRk9STUFUXzQy MiAgICAoMHgwMDAwMDAwMXxQUF9GT1JNQVQpCj4+IC0jZGVmaW5lIFBQX0ZPUk1BVF80MTEgICAg KDB4MDAwMDAwMDJ8UFBfRk9STUFUKQo+PiAtI2RlZmluZSBQUF9GT1JNQVRfNDQ0ICAgICgweDAw MDAwMDAwfFBQX0ZPUk1BVCkKPj4gLSNkZWZpbmUgUFBfRk9STUFUXzQ0MCAgICAoMHgwMDAwMDAx MHxQUF9GT1JNQVQpCj4+IC0KPj4gLSNkZWZpbmUgUFBfUElDVF9UWVBFX1FQMiAgMHgwMDAwMDAx MCAvLy88IE1QRUcyIHN0eWxlIFFTY2FsZQo+PiAtCj4+IC0vKioKPj4gLSAqIEB9Cj4+IC0gKi8K Pj4gLQo+PiAtI2VuZGlmIC8qIFBPU1RQUk9DX1BPU1RQUk9DRVNTX0ggKi8KPj4gZGlmZiAtLWdp dCBhL2xpYnBvc3Rwcm9jL3Bvc3Rwcm9jZXNzX2FsdGl2ZWNfdGVtcGxhdGUuYwo+PiBiL2xpYnBv c3Rwcm9jL3Bvc3Rwcm9jZXNzX2FsdGl2ZWNfdGVtcGxhdGUuYwo+PiBkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKPj4gaW5kZXggZmVkZGFiNTAzNTYuLjAwMDAwMDAwMDAwCj4+IC0tLSBhL2xpYnBv c3Rwcm9jL3Bvc3Rwcm9jZXNzX2FsdGl2ZWNfdGVtcGxhdGUuYwo+PiArKysgL2Rldi9udWxsCj4+ IEBAIC0xLDEyMTQgKzAsMCBAQAo+PiAtLyoKPj4gLSAqIEFsdGlWZWMgb3B0aW1pemF0aW9ucyAo QykgMjAwNCBSb21haW4gRG9sYmVhdSA8cm9tYWluQGRvbGJlYXUub3JnPgo+PiAtICoKPj4gLSAq IGJhc2VkIG9uIGNvZGUgYnkgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgTWljaGFlbCBOaWVkZXJt YXllciAoCj4+IG1pY2hhZWxuaUBnbXguYXQpCj4+IC0gKgo+PiAtICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgo+PiAtICoKPj4gLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4+IC0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+PiAt ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZSwgb3IKPj4gLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ IC0gKgo+PiAtICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCj4+IC0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiAtICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiAtICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gLSAqCj4+IC0gKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+ PiAtICogYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKPj4gLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEKPj4gMDIxMTAtMTMwMSBVU0EKPj4gLSAqLwo+PiAtCj4+IC0jaW5jbHVk ZSAibGliYXZ1dGlsL2F2dXRpbC5oIgo+PiAtI2luY2x1ZGUgImxpYmF2dXRpbC9tZW1faW50ZXJu YWwuaCIKPj4gLQo+PiAtI2RlZmluZQo+PiBBTFRJVkVDX1RSQU5TUE9TRV84eDhfU0hPUlQoc3Jj X2Esc3JjX2Isc3JjX2Msc3JjX2Qsc3JjX2Usc3JjX2Ysc3JjX2csc3JjX2gpCj4+IFwKPj4gLSAg ICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKPj4gLSAgICAgICAgX190eXBlb2ZfXyhzcmNfYSkgdGVtcEExLCB0ZW1wQjEsIHRl bXBDMSwgdGVtcEQxOyAgICAgICAgIFwKPj4gLSAgICAgICAgX190eXBlb2ZfXyhzcmNfYSkgdGVt cEUxLCB0ZW1wRjEsIHRlbXBHMSwgdGVtcEgxOyAgICAgICAgIFwKPj4gLSAgICAgICAgX190eXBl b2ZfXyhzcmNfYSkgdGVtcEEyLCB0ZW1wQjIsIHRlbXBDMiwgdGVtcEQyOyAgICAgICAgIFwKPj4g LSAgICAgICAgX190eXBlb2ZfXyhzcmNfYSkgdGVtcEUyLCB0ZW1wRjIsIHRlbXBHMiwgdGVtcEgy OyAgICAgICAgIFwKPj4gLSAgICAgICAgdGVtcEExID0gdmVjX21lcmdlaCAoc3JjX2EsIHNyY19l KTsgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgdGVtcEIxID0gdmVjX21lcmdl bCAoc3JjX2EsIHNyY19lKTsgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgdGVt cEMxID0gdmVjX21lcmdlaCAoc3JjX2IsIHNyY19mKTsgICAgICAgICAgICAgICAgICAgICAgIFwK Pj4gLSAgICAgICAgdGVtcEQxID0gdmVjX21lcmdlbCAoc3JjX2IsIHNyY19mKTsgICAgICAgICAg ICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgdGVtcEUxID0gdmVjX21lcmdlaCAoc3JjX2MsIHNy Y19nKTsgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgdGVtcEYxID0gdmVjX21l cmdlbCAoc3JjX2MsIHNyY19nKTsgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAg dGVtcEcxID0gdmVjX21lcmdlaCAoc3JjX2QsIHNyY19oKTsgICAgICAgICAgICAgICAgICAgICAg IFwKPj4gLSAgICAgICAgdGVtcEgxID0gdmVjX21lcmdlbCAoc3JjX2QsIHNyY19oKTsgICAgICAg ICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgdGVtcEEyID0gdmVjX21lcmdlaCAodGVtcEEx LCB0ZW1wRTEpOyAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgdGVtcEIyID0gdmVj X21lcmdlbCAodGVtcEExLCB0ZW1wRTEpOyAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAg ICAgdGVtcEMyID0gdmVjX21lcmdlaCAodGVtcEIxLCB0ZW1wRjEpOyAgICAgICAgICAgICAgICAg ICAgIFwKPj4gLSAgICAgICAgdGVtcEQyID0gdmVjX21lcmdlbCAodGVtcEIxLCB0ZW1wRjEpOyAg ICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgdGVtcEUyID0gdmVjX21lcmdlaCAodGVt cEMxLCB0ZW1wRzEpOyAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgdGVtcEYyID0g dmVjX21lcmdlbCAodGVtcEMxLCB0ZW1wRzEpOyAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAg ICAgICAgdGVtcEcyID0gdmVjX21lcmdlaCAodGVtcEQxLCB0ZW1wSDEpOyAgICAgICAgICAgICAg ICAgICAgIFwKPj4gLSAgICAgICAgdGVtcEgyID0gdmVjX21lcmdlbCAodGVtcEQxLCB0ZW1wSDEp OyAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgc3JjX2EgPSB2ZWNfbWVyZ2VoICh0 ZW1wQTIsIHRlbXBFMik7ICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgc3JjX2Ig PSB2ZWNfbWVyZ2VsICh0ZW1wQTIsIHRlbXBFMik7ICAgICAgICAgICAgICAgICAgICAgIFwKPj4g LSAgICAgICAgc3JjX2MgPSB2ZWNfbWVyZ2VoICh0ZW1wQjIsIHRlbXBGMik7ICAgICAgICAgICAg ICAgICAgICAgIFwKPj4gLSAgICAgICAgc3JjX2QgPSB2ZWNfbWVyZ2VsICh0ZW1wQjIsIHRlbXBG Mik7ICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgc3JjX2UgPSB2ZWNfbWVyZ2Vo ICh0ZW1wQzIsIHRlbXBHMik7ICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgc3Jj X2YgPSB2ZWNfbWVyZ2VsICh0ZW1wQzIsIHRlbXBHMik7ICAgICAgICAgICAgICAgICAgICAgIFwK Pj4gLSAgICAgICAgc3JjX2cgPSB2ZWNfbWVyZ2VoICh0ZW1wRDIsIHRlbXBIMik7ICAgICAgICAg ICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgc3JjX2ggPSB2ZWNfbWVyZ2VsICh0ZW1wRDIsIHRl bXBIMik7ICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICB9IHdoaWxlICgwKQo+PiAtCj4+ IC0KPj4gLXN0YXRpYyBpbmxpbmUgaW50IHZlcnRDbGFzc2lmeV9hbHRpdmVjKHVpbnQ4X3Qgc3Jj W10sIGludCBzdHJpZGUsCj4+IFBQQ29udGV4dCAqYykgewo+PiAtICAgIC8qCj4+IC0gICAgdGhp cyBjb2RlIG1ha2VzIG5vIGFzc3VtcHRpb24gb24gc3JjIG9yIHN0cmlkZS4KPj4gLSAgICBPbmUg Y291bGQgcmVtb3ZlIHRoZSByZWNvbXB1dGF0aW9uIG9mIHRoZSBwZXJtCj4+IC0gICAgdmVjdG9y IGJ5IGFzc3VtaW5nIChzdHJpZGUgJSAxNikgPT0gMCwgdW5mb3J0dW5hdGVseQo+PiAtICAgIHRo aXMgaXMgbm90IGFsd2F5cyB0cnVlLgo+PiAtICAgICovCj4+IC0gICAgc2hvcnQgZGF0YV8wID0g KChjLT5ub25CUVAqYy0+cHBNb2RlLmJhc2VEY0RpZmYpPj44KSArIDE7Cj4+IC0gICAgREVDTEFS RV9BTElHTkVEKDE2LCBzaG9ydCwgZGF0YSlbOF0gPQo+PiAtICAgICAgICAgICAgICAgICAgICB7 Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhXzAsCj4+IC0gICAgICAgICAgICAgICAg ICAgICAgICBkYXRhXzAgKiAyICsgMSwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGMtPlFQ ICogMiwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGMtPlFQICogNAo+PiAtICAgICAgICAg ICAgICAgICAgICB9Owo+PiAtICAgIGludCBudW1FcTsKPj4gLSAgICB1aW50OF90ICpzcmMyID0g c3JjOwo+PiAtICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdl9kY09mZnNldDsKPj4gLSAgICB2ZWN0 b3Igc2lnbmVkIHNob3J0IHYyUVA7Cj4+IC0gICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHY0UVA7 Cj4+IC0gICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZfZGNUaHJlc2hvbGQ7Cj4+IC0gICAgY29u c3QgaW50IHByb3BlclN0cmlkZSA9IChzdHJpZGUgJSAxNik7Cj4+IC0gICAgY29uc3QgaW50IHNy Y0FsaWduID0gKCh1bnNpZ25lZCBsb25nKXNyYzIgJSAxNik7Cj4+IC0gICAgY29uc3QgaW50IHR3 b192ZWN0b3JzID0gKChzcmNBbGlnbiA+IDgpIHx8IHByb3BlclN0cmlkZSkgPyAxIDogMDsKPj4g LSAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIGludCB6ZXJvID0gdmVjX3NwbGF0X3MzMigwKTsKPj4g LSAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IG1hc2sgPSB2ZWNfc3BsYXRfczE2KDEpOwo+ PiAtICAgIHZlY3RvciBzaWduZWQgaW50IHZfbnVtRXEgPSB2ZWNfc3BsYXRfczMyKDApOwo+PiAt ICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdl9kYXRhID0gdmVjX2xkKDAsIGRhdGEpOwo+PiAtICAg IHZlY3RvciBzaWduZWQgc2hvcnQgdl9zcmNBc3MwLCB2X3NyY0FzczEsIHZfc3JjQXNzMiwgdl9z cmNBc3MzLAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgdl9zcmNBc3M0LCB2X3NyY0FzczUs IHZfc3JjQXNzNiwgdl9zcmNBc3M3Owo+PiAtLy9GSVhNRSBhdm9pZCB0aGlzIG1lc3MgaWYgcG9z c2libGUKPj4gLSAgICByZWdpc3RlciBpbnQgajAgPSAwLAo+PiAtICAgICAgICAgICAgICAgICBq MSA9IHN0cmlkZSwKPj4gLSAgICAgICAgICAgICAgICAgajIgPSAyICogc3RyaWRlLAo+PiAtICAg ICAgICAgICAgICAgICBqMyA9IDMgKiBzdHJpZGUsCj4+IC0gICAgICAgICAgICAgICAgIGo0ID0g NCAqIHN0cmlkZSwKPj4gLSAgICAgICAgICAgICAgICAgajUgPSA1ICogc3RyaWRlLAo+PiAtICAg ICAgICAgICAgICAgICBqNiA9IDYgKiBzdHJpZGUsCj4+IC0gICAgICAgICAgICAgICAgIGo3ID0g NyAqIHN0cmlkZTsKPj4gLSAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2X3NyY0EwLCB2X3NyY0Ex LCB2X3NyY0EyLCB2X3NyY0EzLAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgIHZfc3JjQTQs IHZfc3JjQTUsIHZfc3JjQTYsIHZfc3JjQTc7Cj4+IC0KPj4gLSAgICB2X2RjT2Zmc2V0ID0gdmVj X3NwbGF0KHZfZGF0YSwgMCk7Cj4+IC0gICAgdl9kY1RocmVzaG9sZCA9ICh2ZWN0b3IgdW5zaWdu ZWQgc2hvcnQpdmVjX3NwbGF0KHZfZGF0YSwgMSk7Cj4+IC0gICAgdjJRUCA9IHZlY19zcGxhdCh2 X2RhdGEsIDIpOwo+PiAtICAgIHY0UVAgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19zcGxh dCh2X2RhdGEsIDMpOwo+PiAtCj4+IC0gICAgc3JjMiArPSBzdHJpZGUgKiA0Owo+PiAtCj4+IC0j ZGVmaW5lIExPQURfTElORShpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4+IC0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+IC0gICAgdmVjdG9yIHVuc2ln bmVkIGNoYXIgcGVybSMjaSA9IHZlY19sdnNsKGojI2ksIHNyYzIpOyAgICAgICAgICAgICAgICBc Cj4+IC0gICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdl9zcmNBMiMjaTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4+IC0gICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdl9zcmNB MSMjaSA9IHZlY19sZChqIyNpLCBzcmMyKTsgICAgICAgICAgICAgICBcCj4+IC0gICAgaWYgKHR3 b192ZWN0b3JzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCj4+IC0gICAgICAgIHZfc3JjQTIjI2kgPSB2ZWNfbGQoaiMjaSArIDE2LCBzcmMyKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+IC0gICAgdl9zcmNBIyNpID0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+IC0gICAg ICAgIHZlY19wZXJtKHZfc3JjQTEjI2ksIHZfc3JjQTIjI2ksIHBlcm0jI2kpOyAgICAgICAgICAg ICAgICAgICAgICBcCj4+IC0gICAgdl9zcmNBc3MjI2kgPSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+IC0gICAgICAgICh2ZWN0b3Igc2ln bmVkIHNob3J0KXZlY19tZXJnZWgoKHZlY3RvciBzaWduZWQgY2hhcil6ZXJvLCAgICAgICBcCj4+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQg Y2hhcil2X3NyY0EjI2kpOyB9Cj4+IC0KPj4gLSNkZWZpbmUgTE9BRF9MSU5FX0FMSUdORUQoaSkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICB2X3Ny Y0EjI2kgPSB2ZWNfbGQoaiMjaSwgc3JjMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKPj4gLSAgICB2X3NyY0FzcyMjaSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgKHZlY3RvciBzaWduZWQg c2hvcnQpdmVjX21lcmdlaCgodmVjdG9yIHNpZ25lZCBjaGFyKXplcm8sICAgICAgIFwKPj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFy KXZfc3JjQSMjaSkKPj4gLQo+PiAtICAgIC8qIFNwZWNpYWwtY2FzaW5nIHRoZSBhbGlnbmVkIGNh c2UgaXMgd29ydGh3aGlsZSwgYXMgYWxsIGNhbGxzIGZyb20KPj4gLSAgICAgKiB0aGUgKHRyYW5z cG9zZWQpIGhvcml6b250YWJsZSBkZWJsb2NrcyB3aWxsIGJlIGFsaWduZWQsIGluCj4+IGFkZGl0 aW9uCj4+IC0gICAgICogdG8gdGhlIG5hdHVyYWxseSBhbGlnbmVkIHZlcnRpY2FsIGRlYmxvY2tz LiAqLwo+PiAtICAgIGlmIChwcm9wZXJTdHJpZGUgJiYgc3JjQWxpZ24pIHsKPj4gLSAgICAgICAg TE9BRF9MSU5FX0FMSUdORUQoMCk7Cj4+IC0gICAgICAgIExPQURfTElORV9BTElHTkVEKDEpOwo+ PiAtICAgICAgICBMT0FEX0xJTkVfQUxJR05FRCgyKTsKPj4gLSAgICAgICAgTE9BRF9MSU5FX0FM SUdORUQoMyk7Cj4+IC0gICAgICAgIExPQURfTElORV9BTElHTkVEKDQpOwo+PiAtICAgICAgICBM T0FEX0xJTkVfQUxJR05FRCg1KTsKPj4gLSAgICAgICAgTE9BRF9MSU5FX0FMSUdORUQoNik7Cj4+ IC0gICAgICAgIExPQURfTElORV9BTElHTkVEKDcpOwo+PiAtICAgIH0gZWxzZSB7Cj4+IC0gICAg ICAgIExPQURfTElORSgwKTsKPj4gLSAgICAgICAgTE9BRF9MSU5FKDEpOwo+PiAtICAgICAgICBM T0FEX0xJTkUoMik7Cj4+IC0gICAgICAgIExPQURfTElORSgzKTsKPj4gLSAgICAgICAgTE9BRF9M SU5FKDQpOwo+PiAtICAgICAgICBMT0FEX0xJTkUoNSk7Cj4+IC0gICAgICAgIExPQURfTElORSg2 KTsKPj4gLSAgICAgICAgTE9BRF9MSU5FKDcpOwo+PiAtICAgIH0KPj4gLSN1bmRlZiBMT0FEX0xJ TkUKPj4gLSN1bmRlZiBMT0FEX0xJTkVfQUxJR05FRAo+PiAtCj4+IC0jZGVmaW5lIElURVIoaSwg aikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4+IC0gICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB2X2RpZmYjI2kgPSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4+IC0gICAgICAgIHZlY19zdWIodl9zcmNBc3MjI2ksIHZf c3JjQXNzIyNqKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+IC0gICAgY29uc3Qg dmVjdG9yIHNpZ25lZCBzaG9ydCB2X3N1bSMjaSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCj4+IC0gICAgICAgIHZlY19hZGQodl9kaWZmIyNpLCB2X2RjT2Zmc2V0KTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+IC0gICAgY29uc3QgdmVjdG9yIHNpZ25lZCBz aG9ydCB2X2NvbXAjI2kgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+IC0gICAg ICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19jbXBsdCgodmVjdG9yIHVuc2lnbmVkIHNob3J0 KXZfc3VtIyNpLCBcCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 X2RjVGhyZXNob2xkKTsgICAgICAgICAgICAgICAgICBcCj4+IC0gICAgY29uc3QgdmVjdG9yIHNp Z25lZCBzaG9ydCB2X3BhcnQjI2kgPSB2ZWNfYW5kKG1hc2ssIHZfY29tcCMjaSk7Cj4+IC0KPj4g LSAgICB7Cj4+IC0gICAgICAgIElURVIoMCwgMSkKPj4gLSAgICAgICAgSVRFUigxLCAyKQo+PiAt ICAgICAgICBJVEVSKDIsIDMpCj4+IC0gICAgICAgIElURVIoMywgNCkKPj4gLSAgICAgICAgSVRF Uig0LCA1KQo+PiAtICAgICAgICBJVEVSKDUsIDYpCj4+IC0gICAgICAgIElURVIoNiwgNykKPj4g LQo+PiAtICAgICAgICB2X251bUVxID0gdmVjX3N1bTRzKHZfcGFydDAsIHZfbnVtRXEpOwo+PiAt ICAgICAgICB2X251bUVxID0gdmVjX3N1bTRzKHZfcGFydDEsIHZfbnVtRXEpOwo+PiAtICAgICAg ICB2X251bUVxID0gdmVjX3N1bTRzKHZfcGFydDIsIHZfbnVtRXEpOwo+PiAtICAgICAgICB2X251 bUVxID0gdmVjX3N1bTRzKHZfcGFydDMsIHZfbnVtRXEpOwo+PiAtICAgICAgICB2X251bUVxID0g dmVjX3N1bTRzKHZfcGFydDQsIHZfbnVtRXEpOwo+PiAtICAgICAgICB2X251bUVxID0gdmVjX3N1 bTRzKHZfcGFydDUsIHZfbnVtRXEpOwo+PiAtICAgICAgICB2X251bUVxID0gdmVjX3N1bTRzKHZf cGFydDYsIHZfbnVtRXEpOwo+PiAtICAgIH0KPj4gLQo+PiAtI3VuZGVmIElURVIKPj4gLQo+PiAt ICAgIHZfbnVtRXEgPSB2ZWNfc3Vtcyh2X251bUVxLCB6ZXJvKTsKPj4gLQo+PiAtICAgIHZfbnVt RXEgPSB2ZWNfc3BsYXQodl9udW1FcSwgMyk7Cj4+IC0gICAgdmVjX3N0ZSh2X251bUVxLCAwLCAm bnVtRXEpOwo+PiAtCj4+IC0gICAgaWYgKG51bUVxID4gYy0+cHBNb2RlLmZsYXRuZXNzVGhyZXNo b2xkKXsKPj4gLSAgICAgICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbW1vUDEgPSAoY29u c3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIpCj4+IC0gICAgICAgICAgICB7MHgxZiwgMHgxZiwgMHgx ZiwgMHgxZiwgMHgxZiwgMHgxZiwgMHgxZiwgMHgxZiwKPj4gLSAgICAgICAgICAgICAweDAwLCAw eDAxLCAweDEyLCAweDEzLCAweDA4LCAweDA5LCAweDFBLCAweDFCfTsKPj4gLSAgICAgICAgY29u c3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbW1vUDIgPSAoY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNo YXIpCj4+IC0gICAgICAgICAgICB7MHgwNCwgMHgwNSwgMHgxNiwgMHgxNywgMHgwQywgMHgwRCwg MHgxRSwgMHgxRiwKPj4gLSAgICAgICAgICAgICAweDFmLCAweDFmLCAweDFmLCAweDFmLCAweDFm LCAweDFmLCAweDFmLCAweDFmfTsKPj4gLSAgICAgICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNo YXIgbW1vUCA9IChjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhcikKPj4gLSAgICAgICAgICAgIHZl Y19sdnNsKDgsICh1bnNpZ25lZCBjaGFyKikwKTsKPj4gLQo+PiAtICAgICAgICB2ZWN0b3Igc2ln bmVkIHNob3J0IG1tb0wxID0gdmVjX3Blcm0odl9zcmNBc3MwLCB2X3NyY0FzczIsCj4+IG1tb1Ax KTsKPj4gLSAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBtbW9MMiA9IHZlY19wZXJtKHZfc3Jj QXNzNCwgdl9zcmNBc3M2LAo+PiBtbW9QMik7Cj4+IC0gICAgICAgIHZlY3RvciBzaWduZWQgc2hv cnQgbW1vTCA9IHZlY19wZXJtKG1tb0wxLCBtbW9MMiwgbW1vUCk7Cj4+IC0gICAgICAgIHZlY3Rv ciBzaWduZWQgc2hvcnQgbW1vUjEgPSB2ZWNfcGVybSh2X3NyY0FzczUsIHZfc3JjQXNzNywKPj4g bW1vUDEpOwo+PiAtICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IG1tb1IyID0gdmVjX3Blcm0o dl9zcmNBc3MxLCB2X3NyY0FzczMsCj4+IG1tb1AyKTsKPj4gLSAgICAgICAgdmVjdG9yIHNpZ25l ZCBzaG9ydCBtbW9SID0gdmVjX3Blcm0obW1vUjEsIG1tb1IyLCBtbW9QKTsKPj4gLSAgICAgICAg dmVjdG9yIHNpZ25lZCBzaG9ydCBtbW9EaWZmID0gdmVjX3N1YihtbW9MLCBtbW9SKTsKPj4gLSAg ICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IG1tb1N1bSA9ICh2ZWN0b3IgdW5zaWduZWQKPj4g c2hvcnQpdmVjX2FkZChtbW9EaWZmLCB2MlFQKTsKPj4gLQo+PiAtICAgICAgICBpZiAodmVjX2Fu eV9ndChtbW9TdW0sIHY0UVApKQo+PiAtICAgICAgICAgICAgcmV0dXJuIDA7Cj4+IC0gICAgICAg IGVsc2UKPj4gLSAgICAgICAgICAgIHJldHVybiAxOwo+PiAtICAgIH0KPj4gLSAgICBlbHNlIHJl dHVybiAyOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW5saW5lIHZvaWQgZG9WZXJ0TG93UGFzc19h bHRpdmVjKHVpbnQ4X3QgKnNyYywgaW50IHN0cmlkZSwKPj4gUFBDb250ZXh0ICpjKSB7Cj4+IC0g ICAgLyoKPj4gLSAgICB0aGlzIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlvbiBvbiBzcmMgb3Igc3Ry aWRlLgo+PiAtICAgIE9uZSBjb3VsZCByZW1vdmUgdGhlIHJlY29tcHV0YXRpb24gb2YgdGhlIHBl cm0KPj4gLSAgICB2ZWN0b3IgYnkgYXNzdW1pbmcgKHN0cmlkZSAlIDE2KSA9PSAwLCB1bmZvcnR1 bmF0ZWx5Cj4+IC0gICAgdGhpcyBpcyBub3QgYWx3YXlzIHRydWUuIFF1aXRlIGEgbG90IG9mIGxv YWQvc3RvcmVzCj4+IC0gICAgY2FuIGJlIHJlbW92ZWQgYnkgYXNzdW1pbmcgcHJvcGVyIGFsaWdu bWVudCBvZgo+PiAtICAgIHNyYyAmIHN0cmlkZSA6LSgKPj4gLSAgICAqLwo+PiAtICAgIHVpbnQ4 X3QgKnNyYzIgPSBzcmM7Cj4+IC0gICAgY29uc3QgdmVjdG9yIHNpZ25lZCBpbnQgemVybyA9IHZl Y19zcGxhdF9zMzIoMCk7Cj4+IC0gICAgY29uc3QgaW50IHByb3BlclN0cmlkZSA9IChzdHJpZGUg JSAxNik7Cj4+IC0gICAgY29uc3QgaW50IHNyY0FsaWduID0gKCh1bnNpZ25lZCBsb25nKXNyYzIg JSAxNik7Cj4+IC0gICAgREVDTEFSRV9BTElHTkVEKDE2LCBzaG9ydCwgcXApWzhdID0ge2MtPlFQ fTsKPj4gLSAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZxcCA9IHZlY19sZCgwLCBxcCk7Cj4+IC0g ICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2YjAsIHZiMSwgdmIyLCB2YjMsIHZiNCwgdmI1LCB2YjYs IHZiNywgdmI4LCB2Yjk7Cj4+IC0gICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmJBMCwgYXZfdW5p bml0KHZiQTEpLCBhdl91bmluaXQodmJBMiksCj4+IGF2X3VuaW5pdCh2YkEzKSwgYXZfdW5pbml0 KHZiQTQpLCBhdl91bmluaXQodmJBNSksIGF2X3VuaW5pdCh2YkE2KSwKPj4gYXZfdW5pbml0KHZi QTcpLCBhdl91bmluaXQodmJBOCksIHZiQTk7Cj4+IC0gICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIg dmJCMCwgYXZfdW5pbml0KHZiQjEpLCBhdl91bmluaXQodmJCMiksCj4+IGF2X3VuaW5pdCh2YkIz KSwgYXZfdW5pbml0KHZiQjQpLCBhdl91bmluaXQodmJCNSksIGF2X3VuaW5pdCh2YkI2KSwKPj4g YXZfdW5pbml0KHZiQjcpLCBhdl91bmluaXQodmJCOCksIHZiQjk7Cj4+IC0gICAgdmVjdG9yIHVu c2lnbmVkIGNoYXIgdmJUMCwgdmJUMSwgdmJUMiwgdmJUMywgdmJUNCwgdmJUNSwgdmJUNiwgdmJU NywKPj4gdmJUOCwgdmJUOTsKPj4gLSAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBwZXJtbDAsIHBl cm1sMSwgcGVybWwyLCBwZXJtbDMsIHBlcm1sNCwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICBwZXJtbDUsIHBlcm1sNiwgcGVybWw3LCBwZXJtbDgsIHBlcm1sOTsKPj4gLSAgICByZWdpc3Rl ciBpbnQgajAgPSAwLAo+PiAtICAgICAgICAgICAgICAgICBqMSA9IHN0cmlkZSwKPj4gLSAgICAg ICAgICAgICAgICAgajIgPSAyICogc3RyaWRlLAo+PiAtICAgICAgICAgICAgICAgICBqMyA9IDMg KiBzdHJpZGUsCj4+IC0gICAgICAgICAgICAgICAgIGo0ID0gNCAqIHN0cmlkZSwKPj4gLSAgICAg ICAgICAgICAgICAgajUgPSA1ICogc3RyaWRlLAo+PiAtICAgICAgICAgICAgICAgICBqNiA9IDYg KiBzdHJpZGUsCj4+IC0gICAgICAgICAgICAgICAgIGo3ID0gNyAqIHN0cmlkZSwKPj4gLSAgICAg ICAgICAgICAgICAgajggPSA4ICogc3RyaWRlLAo+PiAtICAgICAgICAgICAgICAgICBqOSA9IDkg KiBzdHJpZGU7Cj4+IC0KPj4gLSAgICB2cXAgPSB2ZWNfc3BsYXQodnFwLCAwKTsKPj4gLQo+PiAt ICAgIHNyYzIgKz0gc3RyaWRlKjM7Cj4+IC0KPj4gLSNkZWZpbmUgTE9BRF9MSU5FKGkpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICBw ZXJtbCMjaSA9IHZlY19sdnNsKGkgKiBzdHJpZGUsIHNyYzIpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKPj4gLSAgICB2YkEjI2kgPSB2ZWNfbGQoaSAqIHN0cmlkZSwgc3JjMik7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICB2YkIjI2kgPSB2ZWNfbGQo aSAqIHN0cmlkZSArIDE2LCBzcmMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4g LSAgICB2YlQjI2kgPSB2ZWNfcGVybSh2YkEjI2ksIHZiQiMjaSwgcGVybWwjI2kpOyAgICAgICAg ICAgICAgICAgICAgICAgIFwKPj4gLSAgICB2YiMjaSA9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgKHZlY3Rv ciBzaWduZWQgc2hvcnQpdmVjX21lcmdlaCgodmVjdG9yIHVuc2lnbmVkIGNoYXIpemVybywgICAg IFwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVu c2lnbmVkIGNoYXIpdmJUIyNpKQo+PiAtCj4+IC0jZGVmaW5lIExPQURfTElORV9BTElHTkVEKGkp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+IC0gICAgdmJU IyNpID0gdmVjX2xkKGojI2ksIHNyYzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCj4+IC0gICAgdmIjI2kgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+IC0gICAgICAgICh2ZWN0b3Igc2lnbmVk IHNob3J0KXZlY19tZXJnZWgoKHZlY3RvciBzaWduZWQgY2hhcil6ZXJvLCAgICAgICBcCj4+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hh cil2YlQjI2kpCj4+IC0KPj4gLSAgICAgIC8qIFNwZWNpYWwtY2FzaW5nIHRoZSBhbGlnbmVkIGNh c2UgaXMgd29ydGh3aGlsZSwgYXMgYWxsIGNhbGxzIGZyb20KPj4gLSAgICAgICAqIHRoZSAodHJh bnNwb3NlZCkgaG9yaXpvbnRhYmxlIGRlYmxvY2tzIHdpbGwgYmUgYWxpZ25lZCwgaW4KPj4gYWRk aXRpb24KPj4gLSAgICAgICAqIHRvIHRoZSBuYXR1cmFsbHkgYWxpZ25lZCB2ZXJ0aWNhbCBkZWJs b2Nrcy4gKi8KPj4gLSAgICBpZiAocHJvcGVyU3RyaWRlICYmIHNyY0FsaWduKSB7Cj4+IC0gICAg ICAgICAgTE9BRF9MSU5FX0FMSUdORUQoMCk7Cj4+IC0gICAgICAgICAgTE9BRF9MSU5FX0FMSUdO RUQoMSk7Cj4+IC0gICAgICAgICAgTE9BRF9MSU5FX0FMSUdORUQoMik7Cj4+IC0gICAgICAgICAg TE9BRF9MSU5FX0FMSUdORUQoMyk7Cj4+IC0gICAgICAgICAgTE9BRF9MSU5FX0FMSUdORUQoNCk7 Cj4+IC0gICAgICAgICAgTE9BRF9MSU5FX0FMSUdORUQoNSk7Cj4+IC0gICAgICAgICAgTE9BRF9M SU5FX0FMSUdORUQoNik7Cj4+IC0gICAgICAgICAgTE9BRF9MSU5FX0FMSUdORUQoNyk7Cj4+IC0g ICAgICAgICAgTE9BRF9MSU5FX0FMSUdORUQoOCk7Cj4+IC0gICAgICAgICAgTE9BRF9MSU5FX0FM SUdORUQoOSk7Cj4+IC0gICAgfSBlbHNlIHsKPj4gLSAgICAgICAgICBMT0FEX0xJTkUoMCk7Cj4+ IC0gICAgICAgICAgTE9BRF9MSU5FKDEpOwo+PiAtICAgICAgICAgIExPQURfTElORSgyKTsKPj4g LSAgICAgICAgICBMT0FEX0xJTkUoMyk7Cj4+IC0gICAgICAgICAgTE9BRF9MSU5FKDQpOwo+PiAt ICAgICAgICAgIExPQURfTElORSg1KTsKPj4gLSAgICAgICAgICBMT0FEX0xJTkUoNik7Cj4+IC0g ICAgICAgICAgTE9BRF9MSU5FKDcpOwo+PiAtICAgICAgICAgIExPQURfTElORSg4KTsKPj4gLSAg ICAgICAgICBMT0FEX0xJTkUoOSk7Cj4+IC0gICAgfQo+PiAtI3VuZGVmIExPQURfTElORQo+PiAt I3VuZGVmIExPQURfTElORV9BTElHTkVECj4+IC0gICAgewo+PiAtICAgICAgICBjb25zdCB2ZWN0 b3IgdW5zaWduZWQgc2hvcnQgdl8yID0gdmVjX3NwbGF0X3UxNigyKTsKPj4gLSAgICAgICAgY29u c3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZfNCA9IHZlY19zcGxhdF91MTYoNCk7Cj4+IC0KPj4g LSAgICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB2X2RpZmYwMSA9IHZlY19zdWIodmIw LCB2YjEpOwo+PiAtICAgICAgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdl9jbXAwMSA9 Cj4+IC0gICAgICAgICAgICAoY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0KSB2ZWNfY21wbHQo dmVjX2Ficyh2X2RpZmYwMSksCj4+IHZxcCk7Cj4+IC0gICAgICAgIGNvbnN0IHZlY3RvciBzaWdu ZWQgc2hvcnQgdl9maXJzdCA9IHZlY19zZWwodmIxLCB2YjAsIHZfY21wMDEpOwo+PiAtICAgICAg ICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHZfZGlmZjg5ID0gdmVjX3N1Yih2YjgsIHZiOSk7 Cj4+IC0gICAgICAgIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2X2NtcDg5ID0KPj4gLSAg ICAgICAgICAgIChjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpIHZlY19jbXBsdCh2ZWNfYWJz KHZfZGlmZjg5KSwKPj4gdnFwKTsKPj4gLSAgICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9y dCB2X2xhc3QgPSB2ZWNfc2VsKHZiOCwgdmI5LCB2X2NtcDg5KTsKPj4gLQo+PiAtICAgICAgICBj b25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHRlbXAwMSA9IHZlY19tbGFkZCh2X2ZpcnN0LCAodmVj dG9yCj4+IHNpZ25lZCBzaG9ydCl2XzQsIHZiMSk7Cj4+IC0gICAgICAgIGNvbnN0IHZlY3RvciBz aWduZWQgc2hvcnQgdGVtcDAyID0gdmVjX2FkZCh2YjIsIHZiMyk7Cj4+IC0gICAgICAgIGNvbnN0 IHZlY3RvciBzaWduZWQgc2hvcnQgdGVtcDAzID0gdmVjX2FkZCh0ZW1wMDEsICh2ZWN0b3IKPj4g c2lnbmVkIHNob3J0KXZfNCk7Cj4+IC0gICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQg dl9zdW1zQjAgPSB2ZWNfYWRkKHRlbXAwMiwgdGVtcDAzKTsKPj4gLQo+PiAtICAgICAgICBjb25z dCB2ZWN0b3Igc2lnbmVkIHNob3J0IHRlbXAxMSA9IHZlY19zdWIodl9zdW1zQjAsIHZfZmlyc3Qp Owo+PiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHZfc3Vtc0IxID0gdmVjX2Fk ZCh0ZW1wMTEsIHZiNCk7Cj4+IC0KPj4gLSAgICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9y dCB0ZW1wMjEgPSB2ZWNfc3ViKHZfc3Vtc0IxLCB2X2ZpcnN0KTsKPj4gLSAgICAgICAgY29uc3Qg dmVjdG9yIHNpZ25lZCBzaG9ydCB2X3N1bXNCMiA9IHZlY19hZGQodGVtcDIxLCB2YjUpOwo+PiAt Cj4+IC0gICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgdGVtcDMxID0gdmVjX3N1Yih2 X3N1bXNCMiwgdl9maXJzdCk7Cj4+IC0gICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQg dl9zdW1zQjMgPSB2ZWNfYWRkKHRlbXAzMSwgdmI2KTsKPj4gLQo+PiAtICAgICAgICBjb25zdCB2 ZWN0b3Igc2lnbmVkIHNob3J0IHRlbXA0MSA9IHZlY19zdWIodl9zdW1zQjMsIHZfZmlyc3QpOwo+ PiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHZfc3Vtc0I0ID0gdmVjX2FkZCh0 ZW1wNDEsIHZiNyk7Cj4+IC0KPj4gLSAgICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB0 ZW1wNTEgPSB2ZWNfc3ViKHZfc3Vtc0I0LCB2YjEpOwo+PiAtICAgICAgICBjb25zdCB2ZWN0b3Ig c2lnbmVkIHNob3J0IHZfc3Vtc0I1ID0gdmVjX2FkZCh0ZW1wNTEsIHZiOCk7Cj4+IC0KPj4gLSAg ICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB0ZW1wNjEgPSB2ZWNfc3ViKHZfc3Vtc0I1 LCB2YjIpOwo+PiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHZfc3Vtc0I2ID0g dmVjX2FkZCh0ZW1wNjEsIHZfbGFzdCk7Cj4+IC0KPj4gLSAgICAgICAgY29uc3QgdmVjdG9yIHNp Z25lZCBzaG9ydCB0ZW1wNzEgPSB2ZWNfc3ViKHZfc3Vtc0I2LCB2YjMpOwo+PiAtICAgICAgICBj b25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHZfc3Vtc0I3ID0gdmVjX2FkZCh0ZW1wNzEsIHZfbGFz dCk7Cj4+IC0KPj4gLSAgICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB0ZW1wODEgPSB2 ZWNfc3ViKHZfc3Vtc0I3LCB2YjQpOwo+PiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNo b3J0IHZfc3Vtc0I4ID0gdmVjX2FkZCh0ZW1wODEsIHZfbGFzdCk7Cj4+IC0KPj4gLSAgICAgICAg Y29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB0ZW1wOTEgPSB2ZWNfc3ViKHZfc3Vtc0I4LCB2YjUp Owo+PiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHZfc3Vtc0I5ID0gdmVjX2Fk ZCh0ZW1wOTEsIHZfbGFzdCk7Cj4+IC0KPj4gLSAgICAjZGVmaW5lIENPTVBVVEVfVlIoaSwgaiwg aykKPj4gICAgXAo+PiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHRlbXBzMSMj aSA9Cj4+ICAgIFwKPj4gLSAgICAgICAgICAgIHZlY19hZGQodl9zdW1zQiMjaSwgdl9zdW1zQiMj ayk7Cj4+ICAgICBcCj4+IC0gICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgdGVtcHMy IyNpID0KPj4gICAgXAo+PiAtICAgICAgICAgICAgdmVjX21sYWRkKHZiIyNqLCAodmVjdG9yIHNp Z25lZCBzaG9ydCl2XzIsIHRlbXBzMSMjaSk7Cj4+ICAgICBcCj4+IC0gICAgICAgIGNvbnN0IHZl Y3RvciBzaWduZWQgc2hvcnQgIHZyIyNqID0gdmVjX3NyYSh0ZW1wczIjI2ksIHZfNCkKPj4gLQo+ PiAtICAgICAgICBDT01QVVRFX1ZSKDAsIDEsIDIpOwo+PiAtICAgICAgICBDT01QVVRFX1ZSKDEs IDIsIDMpOwo+PiAtICAgICAgICBDT01QVVRFX1ZSKDIsIDMsIDQpOwo+PiAtICAgICAgICBDT01Q VVRFX1ZSKDMsIDQsIDUpOwo+PiAtICAgICAgICBDT01QVVRFX1ZSKDQsIDUsIDYpOwo+PiAtICAg ICAgICBDT01QVVRFX1ZSKDUsIDYsIDcpOwo+PiAtICAgICAgICBDT01QVVRFX1ZSKDYsIDcsIDgp Owo+PiAtICAgICAgICBDT01QVVRFX1ZSKDcsIDgsIDkpOwo+PiAtCj4+IC0gICAgICAgIGNvbnN0 IHZlY3RvciBzaWduZWQgY2hhciBuZWcxID0gdmVjX3NwbGF0X3M4KC0xKTsKPj4gLSAgICAgICAg Y29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcGVybUhIID0gKGNvbnN0IHZlY3RvciB1bnNpZ25l ZAo+PiBjaGFyKXsweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3 LAo+PiAtCj4+ICAweDE4LCAweDE5LCAweDFBLCAweDFCLCAweDFDLCAweDFELCAweDFFLCAweDFG fTsKPj4gLQo+PiAtI2RlZmluZSBQQUNLX0FORF9TVE9SRShpKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPj4gLXsgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciBw ZXJtcyMjaSA9ICAgICAgICAgICAgICAgICAgICAgICBcCj4+IC0gICAgICAgIHZlY19sdnNyKGkg KiBzdHJpZGUsIHNyYzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiAtICAgIGNv bnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyIHZmIyNpID0gICAgICAgICAgICAgICAgICAgICAgICAg IFwKPj4gLSAgICAgICAgdmVjX3BhY2tzdSh2ciMjaSwgKHZlY3RvciBzaWduZWQgc2hvcnQpemVy byk7ICAgICAgICAgICBcCj4+IC0gICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmcjI2kg PSAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiAtICAgICAgICB2ZWNfcGVybSh2ZiMjaSwg dmJUIyNpLCBwZXJtSEgpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICBjb25zdCB2 ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrIyNpID0gICAgICAgICAgICAgICAgICAgICAgICBcCj4+ IC0gICAgICAgIHZlY19wZXJtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcil6ZXJvLCAodmVjdG9yIHVu c2lnbmVkIGNoYXIpbmVnMSwKPj4gcGVybXMjI2kpOyBcCj4+IC0gICAgY29uc3QgdmVjdG9yIHVu c2lnbmVkIGNoYXIgdmcyIyNpID0gICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiAtICAgICAg ICB2ZWNfcGVybSh2ZyMjaSwgdmcjI2ksIHBlcm1zIyNpKTsgICAgICAgICAgICAgICAgICAgICAg IFwKPj4gLSAgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciBzdkEjI2kgPSAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4+IC0gICAgICAgIHZlY19zZWwodmJBIyNpLCB2ZzIjI2ksIG1hc2sj I2kpOyAgICAgICAgICAgICAgICAgICAgICAgXAo+PiAtICAgIGNvbnN0IHZlY3RvciB1bnNpZ25l ZCBjaGFyIHN2QiMjaSA9ICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgdmVj X3NlbCh2ZzIjI2ksIHZiQiMjaSwgbWFzayMjaSk7ICAgICAgICAgICAgICAgICAgICAgICBcCj4+ IC0gICAgdmVjX3N0KHN2QSMjaSwgaSAqIHN0cmlkZSwgc3JjMik7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+PiAtICAgIHZlY19zdChzdkIjI2ksIGkgKiBzdHJpZGUgKyAxNiwgc3JjMik7 fQo+PiAtCj4+IC0jZGVmaW5lIFBBQ0tfQU5EX1NUT1JFX0FMSUdORUQoaSkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+PiAteyAgIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyIHZm IyNpID0gICAgICAgICAgICAgICAgICAgICAgICAgIFwKPj4gLSAgICAgICAgdmVjX3BhY2tzdSh2 ciMjaSwgKHZlY3RvciBzaWduZWQgc2hvcnQpemVybyk7ICAgICAgICAgICBcCj4+IC0gICAgY29u c3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmcjI2kgPSAgICAgICAgICAgICAgICAgICAgICAgICAg XAo+PiAtICAgICAgICB2ZWNfcGVybSh2ZiMjaSwgdmJUIyNpLCBwZXJtSEgpOyAgICAgICAgICAg ICAgICAgICAgICAgIFwKPj4gLSAgICB2ZWNfc3QodmcjI2ksIGkgKiBzdHJpZGUsIHNyYzIpO30K Pj4gLQo+PiAtICAgICAgICAvKiBTcGVjaWFsLWNhc2luZyB0aGUgYWxpZ25lZCBjYXNlIGlzIHdv cnRod2hpbGUsIGFzIGFsbCBjYWxscwo+PiBmcm9tCj4+IC0gICAgICAgICAqIHRoZSAodHJhbnNw b3NlZCkgaG9yaXpvbnRhYmxlIGRlYmxvY2tzIHdpbGwgYmUgYWxpZ25lZCwgaW4KPj4gYWRkaXRp b24KPj4gLSAgICAgICAgICogdG8gdGhlIG5hdHVyYWxseSBhbGlnbmVkIHZlcnRpY2FsIGRlYmxv Y2tzLiAqLwo+PiAtICAgICAgICBpZiAocHJvcGVyU3RyaWRlICYmIHNyY0FsaWduKSB7Cj4+IC0g ICAgICAgICAgICBQQUNLX0FORF9TVE9SRV9BTElHTkVEKDEpCj4+IC0gICAgICAgICAgICBQQUNL X0FORF9TVE9SRV9BTElHTkVEKDIpCj4+IC0gICAgICAgICAgICBQQUNLX0FORF9TVE9SRV9BTElH TkVEKDMpCj4+IC0gICAgICAgICAgICBQQUNLX0FORF9TVE9SRV9BTElHTkVEKDQpCj4+IC0gICAg ICAgICAgICBQQUNLX0FORF9TVE9SRV9BTElHTkVEKDUpCj4+IC0gICAgICAgICAgICBQQUNLX0FO RF9TVE9SRV9BTElHTkVEKDYpCj4+IC0gICAgICAgICAgICBQQUNLX0FORF9TVE9SRV9BTElHTkVE KDcpCj4+IC0gICAgICAgICAgICBQQUNLX0FORF9TVE9SRV9BTElHTkVEKDgpCj4+IC0gICAgICAg IH0gZWxzZSB7Cj4+IC0gICAgICAgICAgICBQQUNLX0FORF9TVE9SRSgxKQo+PiAtICAgICAgICAg ICAgUEFDS19BTkRfU1RPUkUoMikKPj4gLSAgICAgICAgICAgIFBBQ0tfQU5EX1NUT1JFKDMpCj4+ IC0gICAgICAgICAgICBQQUNLX0FORF9TVE9SRSg0KQo+PiAtICAgICAgICAgICAgUEFDS19BTkRf U1RPUkUoNSkKPj4gLSAgICAgICAgICAgIFBBQ0tfQU5EX1NUT1JFKDYpCj4+IC0gICAgICAgICAg ICBQQUNLX0FORF9TVE9SRSg3KQo+PiAtICAgICAgICAgICAgUEFDS19BTkRfU1RPUkUoOCkKPj4g LSAgICAgICAgfQo+PiAtICAgICN1bmRlZiBQQUNLX0FORF9TVE9SRQo+PiAtICAgICN1bmRlZiBQ QUNLX0FORF9TVE9SRV9BTElHTkVECj4+IC0gICAgfQo+PiAtfQo+PiAtCj4+IC0KPj4gLQo+PiAt c3RhdGljIGlubGluZSB2b2lkIGRvVmVydERlZkZpbHRlcl9hbHRpdmVjKHVpbnQ4X3Qgc3JjW10s IGludCBzdHJpZGUsCj4+IFBQQ29udGV4dCAqYykgewo+PiAtICAgIC8qCj4+IC0gICAgdGhpcyBj b2RlIG1ha2VzIG5vIGFzc3VtcHRpb24gb24gc3JjIG9yIHN0cmlkZS4KPj4gLSAgICBPbmUgY291 bGQgcmVtb3ZlIHRoZSByZWNvbXB1dGF0aW9uIG9mIHQKPgo+Cl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZt cGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8v ZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwK ZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJl Ii4K