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 E16994C466 for ; Wed, 14 May 2025 00:55:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F363D68B7CC; Wed, 14 May 2025 03:55:33 +0300 (EEST) Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 195CD68B77F for ; Wed, 14 May 2025 03:55:27 +0300 (EEST) Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-7423df563d6so4969716b3a.0 for ; Tue, 13 May 2025 17:55:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747184125; x=1747788925; 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=qMPPmuyE8l6FIXyQ8UQOy9Remx3pM7G7W7EwASxtdxo=; b=dG5ywwB+PJlufYIYBgGgzGmjTJjbW51oBtYU8EPSMOq/19Aztwbe9H6eMuAPNnkm5i wIrjnnJpHvK12uZntZGFM6qPXY+FjUpeIix+q6yKBaljCRAaJvqWy/4bL1ASG/VAJKLo 9/eWFx1Vkl1tqoNqiPIAoV4+LZANOXN9X3usqRf1lN89BJUKkgwGh+ezWvxCAAcS+K0F Oehwh5k7qdNaxrBi9kmQQucilmzjYh680aD7DfVH4qM+EB1YM63/blxT7+WoenfES6pa r4abYBi3xHsEs8hhVkmQrN4VVVJLt8OUOrIaceSXgwOzY54CpWEbfFV/QmfcGw2FwfQt X0Nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747184125; x=1747788925; 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=qMPPmuyE8l6FIXyQ8UQOy9Remx3pM7G7W7EwASxtdxo=; b=j9fBcrcTwe+6DR2fGSH+xjNW8e7P8eYwVmpzbkuugl0blx2mX50bsouEhc7jYShctR Apr/yUcm/rvvKkw6KxmMVKt+inXeWtnHOndPG25ZmH2blou1vPwtZvjzfs3G9yzZEFHp 4U+uCgoiyDZQ0JoTybUfT7A3wnz4ZJS+kSyBPGhgOkL2d37Sxh+frwPXJ5nHOHI1XhAa r4tlflHZGv0WZ7zUBurJTy4pLYrzoTjxLZD5Z+thC6D2vqeqlncG1iVsniwZslQn+i5M nj4S5JYIhMTbv9krqJwwaNCEdg49raycBF2q2Hs7u1wBSyJcBauJEkMCGhtByA1tCqqC SsQA== X-Gm-Message-State: AOJu0Yz+7wzpYokj4zzeoRgUpJHiUTbHJ9LCKq6vLWjY+nQKpdlUfX1f i57ZsBODCWNxYNjMbiC+j1lL21jAofbT0AsFrGuJhmX53YdHEpDwXrc9eldJynU4wnZjJnHv81m LMEhcTG0CHqEqbW1R00SqWfEpctJNDwtX X-Gm-Gg: ASbGnct3uJD9wW6R0vSVQjSM4WAyYZLT46S1JjrmcwgCblm7akqSC47WJuzN3pHoas8 3sIHJ3tAfQeeiqZBuRZR7pcrokHdPJWDxQuoqXiXkAANM5/POKebdlP2g6t99HexTnJKcf2u17l ofieuK8Iw06M/rQWP6/JBHuAK6dvl1gmj5888= X-Google-Smtp-Source: AGHT+IHR3n2fCwGfFptBTD9neYwDJoeUDF2WJqQpt5iiI9iVudREkcPndMQmztc3x1WukwkeTrCBUGeMr7e/AyWbGEY= X-Received: by 2002:a17:903:2f88:b0:220:faa2:c917 with SMTP id d9443c01a7336-23198145257mr21617165ad.34.1747184124196; Tue, 13 May 2025 17:55:24 -0700 (PDT) MIME-Version: 1.0 References: <20250505232710.3840135-1-michael@niedermayer.cc> <20250505232710.3840135-2-michael@niedermayer.cc> In-Reply-To: <20250505232710.3840135-2-michael@niedermayer.cc> From: Andrew Randrianasulu Date: Wed, 14 May 2025 03:55:09 +0300 X-Gm-Features: AX0GCFtMhoMGLITDzyvgcEGJYkCn6cv9v8myUYD9Nr0iyjvA5QhtmmeX6JBmGDU 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: "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: 0LLRgiwgNiDQvNCw0Y8gMjAyNSDQsy4sIDAyOjI3IE1pY2hhZWwgTmllZGVybWF5ZXIgPG1pY2hh ZWxAbmllZGVybWF5ZXIuY2M+OgoKPiBUaGlzIHdpbGwgYmUgYXZhaWxhYmxlIGluIGh0dHBzOi8v Z2l0aHViLmNvbS9taWNoYWVsbmkvbGlicG9zdHByb2MKPiBlaXRoZXIgYXMgYSBzZXBhcmF0ZSBs aWJyYXJ5IG9yIGEgZmZtcGVnIHNvdXJjZSBwbHVnaW4gd2hhdGV2ZXIgdHVybnMKPiBvdXQgbW9y ZSBjb252ZW5pZW50IHRvIG1haW50YWluCj4KCgoKQ29uZ3JhdHVsYXRpb25zLCB5b3UgYnJva2Ug IGJ1aWxkaW5nIGNpbmVsZXJyYS1nZyB3aXRoIGZmbXBlZy5naXQgZGVzcGl0ZQpvdXIgYmVzdCBl ZmZvcnRzIDovCgpXaHkgYWxsIHRoaXMgY29kZSBtb3ZlbWVudD8hCgpGb3Igd2hvbSBpdCAic2lt cGxlIj8KCj4KPiBTcG9uc29yZWQtYnk6IFNvdmVyZWlnbiBUZWNoIEZ1bmQKPiBTaWduZWQtb2Zm LWJ5OiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsQG5pZWRlcm1heWVyLmNjPgo+IC0tLQo+ ICBMSUNFTlNFLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyIC0KPiAg TUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiAtCj4gIGNv bmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKy0KPiAgZG9j L2ZpbHRlcnMudGV4aSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE3NSAtLQo+ICBmZnRv b2xzL2ZmcHJvYmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzIC0KPiAgZmZ0b29s cy9vcHRfY29tbW9uLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyAtCj4gIGxpYmF2Zmls dGVyL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgLQo+ICBsaWJhdmZpbHRl ci9hbGxmaWx0ZXJzLmMgICAgICAgICAgICAgICAgICAgfCAgICAxIC0KPiAgbGliYXZmaWx0ZXIv dmZfcHAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE5MSAtLQo+ICBsaWJhdnV0aWwvYXZ1 dGlsLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIC0KPiAgbGlicG9zdHByb2MvTWFr ZWZpbGUgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMyAtCj4gIGxpYnBvc3Rwcm9jL2xpYnBv c3Rwcm9jLnYgICAgICAgICAgICAgICAgICB8ICAgIDcgLQo+ICBsaWJwb3N0cHJvYy9wb3N0cHJv Y2Vzcy5jICAgICAgICAgICAgICAgICAgfCAgOTkyIC0tLS0tLQo+ICBsaWJwb3N0cHJvYy9wb3N0 cHJvY2Vzcy5oICAgICAgICAgICAgICAgICAgfCAgMTA5IC0KPiAgbGlicG9zdHByb2MvcG9zdHBy b2Nlc3NfYWx0aXZlY190ZW1wbGF0ZS5jIHwgMTIxNCAtLS0tLS0tLQo+ICBsaWJwb3N0cHJvYy9w b3N0cHJvY2Vzc19pbnRlcm5hbC5oICAgICAgICAgfCAgMTg1IC0tCj4gIGxpYnBvc3Rwcm9jL3Bv c3Rwcm9jZXNzX3RlbXBsYXRlLmMgICAgICAgICB8IDMyOTMgLS0tLS0tLS0tLS0tLS0tLS0tLS0K PiAgbGlicG9zdHByb2MvcG9zdHByb2NyZXMucmMgICAgICAgICAgICAgICAgIHwgICA1NSAtCj4g IGxpYnBvc3Rwcm9jL3Rlc3RzLy5naXRpZ25vcmUgICAgICAgICAgICAgICB8ICAgIDMgLQo+ICBs aWJwb3N0cHJvYy90ZXN0cy9ibG9ja3Rlc3QuYyAgICAgICAgICAgICAgfCAgMTEzIC0KPiAgbGli cG9zdHByb2MvdGVzdHMvc3RyaXBldGVzdC5jICAgICAgICAgICAgIHwgIDExNSAtCj4gIGxpYnBv c3Rwcm9jL3Rlc3RzL3RlbXB0ZXN0LmMgICAgICAgICAgICAgICB8ICAxMDYgLQo+ICBsaWJwb3N0 cHJvYy90ZXN0cy90ZXN0X3V0aWxzLmMgICAgICAgICAgICAgfCAgIDM4IC0KPiAgbGlicG9zdHBy b2MvdGVzdHMvdGVzdF91dGlscy5oICAgICAgICAgICAgIHwgICAyNyAtCj4gIGxpYnBvc3Rwcm9j L3ZlcnNpb24uYyAgICAgICAgICAgICAgICAgICAgICB8ICAgNDUgLQo+ICBsaWJwb3N0cHJvYy92 ZXJzaW9uLmggICAgICAgICAgICAgICAgICAgICAgfCAgIDQ4IC0KPiAgbGlicG9zdHByb2MvdmVy c2lvbl9tYWpvci5oICAgICAgICAgICAgICAgIHwgICAzMyAtCj4gIHRlc3RzL01ha2VmaWxlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgLQo+ICB0ZXN0cy9mYXRlL2ZpbHRlci12 aWRlby5tYWsgICAgICAgICAgICAgICAgfCAgIDE2IC0KPiAgdGVzdHMvZmF0ZS9saWJwb3N0cHJv Yy5tYWsgICAgICAgICAgICAgICAgIHwgICAxNCAtCj4gIHRlc3RzL3JlZi9mYXRlL2Jsb2NrdGVz dCAgICAgICAgICAgICAgICAgICB8IDE4MDAgLS0tLS0tLS0tLS0KPiAgdGVzdHMvcmVmL2ZhdGUv ZmlsdGVyLXBwICAgICAgICAgICAgICAgICAgIHwgICAxMCAtCj4gIHRlc3RzL3JlZi9mYXRlL2Zp bHRlci1wcDEgICAgICAgICAgICAgICAgICB8ICAgIDEgLQo+ICB0ZXN0cy9yZWYvZmF0ZS9maWx0 ZXItcHAyICAgICAgICAgICAgICAgICAgfCAgICAxIC0KPiAgdGVzdHMvcmVmL2ZhdGUvZmlsdGVy LXBwMyAgICAgICAgICAgICAgICAgIHwgICAgMSAtCj4gIHRlc3RzL3JlZi9mYXRlL2ZpbHRlci1w cDQgICAgICAgICAgICAgICAgICB8ICAgIDEgLQo+ICB0ZXN0cy9yZWYvZmF0ZS9maWx0ZXItcHA1 ICAgICAgICAgICAgICAgICAgfCAgICAxIC0KPiAgdGVzdHMvcmVmL2ZhdGUvZmlsdGVyLXBwNiAg ICAgICAgICAgICAgICAgIHwgICAgMSAtCj4gIHRlc3RzL3JlZi9mYXRlL2ZpbHRlci1xcCAgICAg ICAgICAgICAgICAgICB8ICAgIDEgLQo+ICB0ZXN0cy9yZWYvZmF0ZS9zdHJpcGV0ZXN0ICAgICAg ICAgICAgICAgICAgfCAgMzYwIC0tLQo+ICB0ZXN0cy9yZWYvZmF0ZS90ZW1wdGVzdCAgICAgICAg ICAgICAgICAgICAgfCAgMzM2IC0tCj4gIHRvb2xzL2dlbi1yYyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgIDEgLQo+ICA0MiBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwg OTM0MiBkZWxldGlvbnMoLSkKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL3ZmX3Bw LmMKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYnBvc3Rwcm9jL01ha2VmaWxlCj4gIGRlbGV0ZSBt b2RlIDEwMDY0NCBsaWJwb3N0cHJvYy9saWJwb3N0cHJvYy52Cj4gIGRlbGV0ZSBtb2RlIDEwMDY0 NCBsaWJwb3N0cHJvYy9wb3N0cHJvY2Vzcy5jCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJwb3N0 cHJvYy9wb3N0cHJvY2Vzcy5oCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJwb3N0cHJvYy9wb3N0 cHJvY2Vzc19hbHRpdmVjX3RlbXBsYXRlLmMKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYnBvc3Rw cm9jL3Bvc3Rwcm9jZXNzX2ludGVybmFsLmgKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYnBvc3Rw cm9jL3Bvc3Rwcm9jZXNzX3RlbXBsYXRlLmMKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYnBvc3Rw cm9jL3Bvc3Rwcm9jcmVzLnJjCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJwb3N0cHJvYy90ZXN0 cy8uZ2l0aWdub3JlCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJwb3N0cHJvYy90ZXN0cy9ibG9j a3Rlc3QuYwo+ICBkZWxldGUgbW9kZSAxMDA2NDQgbGlicG9zdHByb2MvdGVzdHMvc3RyaXBldGVz dC5jCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJwb3N0cHJvYy90ZXN0cy90ZW1wdGVzdC5jCj4g IGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJwb3N0cHJvYy90ZXN0cy90ZXN0X3V0aWxzLmMKPiAgZGVs ZXRlIG1vZGUgMTAwNjQ0IGxpYnBvc3Rwcm9jL3Rlc3RzL3Rlc3RfdXRpbHMuaAo+ICBkZWxldGUg bW9kZSAxMDA2NDQgbGlicG9zdHByb2MvdmVyc2lvbi5jCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBs aWJwb3N0cHJvYy92ZXJzaW9uLmgKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYnBvc3Rwcm9jL3Zl cnNpb25fbWFqb3IuaAo+ICBkZWxldGUgbW9kZSAxMDA2NDQgdGVzdHMvZmF0ZS9saWJwb3N0cHJv Yy5tYWsKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3JlZi9mYXRlL2Jsb2NrdGVzdAo+ICBk ZWxldGUgbW9kZSAxMDA2NDQgdGVzdHMvcmVmL2ZhdGUvZmlsdGVyLXBwCj4gIGRlbGV0ZSBtb2Rl IDEwMDY0NCB0ZXN0cy9yZWYvZmF0ZS9maWx0ZXItcHAxCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCB0 ZXN0cy9yZWYvZmF0ZS9maWx0ZXItcHAyCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9yZWYv ZmF0ZS9maWx0ZXItcHAzCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9yZWYvZmF0ZS9maWx0 ZXItcHA0Cj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9yZWYvZmF0ZS9maWx0ZXItcHA1Cj4g IGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9yZWYvZmF0ZS9maWx0ZXItcHA2Cj4gIGRlbGV0ZSBt b2RlIDEwMDY0NCB0ZXN0cy9yZWYvZmF0ZS9maWx0ZXItcXAKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0 IHRlc3RzL3JlZi9mYXRlL3N0cmlwZXRlc3QKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3Jl Zi9mYXRlL3RlbXB0ZXN0Cj4KPiBkaWZmIC0tZ2l0IGEvTElDRU5TRS5tZCBiL0xJQ0VOU0UubWQK PiBpbmRleCA2MTMwNzBlMWI2My4uMzcxYjA5MTNjZTcgMTAwNjQ0Cj4gLS0tIGEvTElDRU5TRS5t ZAo+ICsrKyBiL0xJQ0VOU0UubWQKPiBAQCAtMTIsNyArMTIsNiBAQCBjb25maWd1cmUgdG8gYWN0 aXZhdGUgdGhlbS4gSW4gdGhpcyBjYXNlLCBGRm1wZWcncwo+IGxpY2Vuc2UgY2hhbmdlcyB0byBH UEwgdjIrLgo+Cj4gIFNwZWNpZmljYWxseSwgdGhlIEdQTCBwYXJ0cyBvZiBGRm1wZWcgYXJlOgo+ Cj4gLS0gbGlicG9zdHByb2MKPiAgLSBvcHRpb25hbCB4ODYgb3B0aW1pemF0aW9uIGluIHRoZSBm aWxlcwo+ICAgICAgLSBgbGliYXZjb2RlYy94ODYvZmxhY19kc3BfZ3BsLmFzbWAKPiAgICAgIC0g YGxpYmF2Y29kZWMveDg2L2lkY3RfbW14LmNgCj4gQEAgLTQ1LDcgKzQ0LDYgQEAgU3BlY2lmaWNh bGx5LCB0aGUgR1BMIHBhcnRzIG9mIEZGbXBlZyBhcmU6Cj4gICAgICAtIGB2Zl9vd2Rlbm9pc2Uu Y2AKPiAgICAgIC0gYHZmX3BlcnNwZWN0aXZlLmNgCj4gICAgICAtIGB2Zl9waGFzZS5jYAo+IC0g ICAgLSBgdmZfcHAuY2AKPiAgICAgIC0gYHZmX3BwNy5jYAo+ICAgICAgLSBgdmZfcHVsbHVwLmNg Cj4gICAgICAtIGB2Zl9yZXBlYXRmaWVsZHMuY2AKPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMg Yi9NQUlOVEFJTkVSUwo+IGluZGV4IGY1ODkzNmRiNjE5Li43ZjdmYWEwNTk1OSAxMDA2NDQKPiAt LS0gYS9NQUlOVEFJTkVSUwo+ICsrKyBiL01BSU5UQUlORVJTCj4gQEAgLTEzNCw4ICsxMzQsNiBA QCBHZW5lcmljIFBhcnRzOgo+ICAgICAgcmF0ZWNvbnRyb2wuYyAgICAgICAgICAgICAgICAgICBb Ml0gTWljaGFlbCBOaWVkZXJtYXllcgo+ICAgIHNpbXBsZSBJRENUOgo+ICAgICAgc2ltcGxlX2lk Y3QuYywgc2ltcGxlX2lkY3QuaCAgICBbMl0gTWljaGFlbCBOaWVkZXJtYXllcgo+IC0gIHBvc3Rw cm9jZXNzaW5nOgo+IC0gICAgbGlicG9zdHByb2MvKiAgICAgICAgICAgICAgICAgICBbMl0gTWlj aGFlbCBOaWVkZXJtYXllcgo+ICAgIHRhYmxlIGdlbmVyYXRpb246Cj4gICAgICB0YWJsZXByaW50 LmMsIHRhYmxlcHJpbnQuaCAgICAgICAgICBSZWltYXIgRG9lZmZpbmdlcgo+ICAgIGZpeGVkIHBv aW50IEZGVDoKPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gaW5kZXggNmMy M2EzOGJlMWYuLjJlNjliM2M1NmMzIDEwMDc1NQo+IC0tLSBhL2NvbmZpZ3VyZQo+ICsrKyBiL2Nv bmZpZ3VyZQo+IEBAIC0xMzAsNyArMTMwLDYgQEAgQ29tcG9uZW50IG9wdGlvbnM6Cj4gICAgLS1k aXNhYmxlLWF2Zm9ybWF0ICAgICAgIGRpc2FibGUgbGliYXZmb3JtYXQgYnVpbGQKPiAgICAtLWRp c2FibGUtc3dyZXNhbXBsZSAgICAgZGlzYWJsZSBsaWJzd3Jlc2FtcGxlIGJ1aWxkCj4gICAgLS1k aXNhYmxlLXN3c2NhbGUgICAgICAgIGRpc2FibGUgbGlic3dzY2FsZSBidWlsZAo+IC0gIC0tZGlz YWJsZS1wb3N0cHJvYyAgICAgICBkaXNhYmxlIGxpYnBvc3Rwcm9jIGJ1aWxkCj4gICAgLS1kaXNh YmxlLWF2ZmlsdGVyICAgICAgIGRpc2FibGUgbGliYXZmaWx0ZXIgYnVpbGQKPiAgICAtLWRpc2Fi bGUtcHRocmVhZHMgICAgICAgZGlzYWJsZSBwdGhyZWFkcyBbYXV0b2RldGVjdF0KPiAgICAtLWRp c2FibGUtdzMydGhyZWFkcyAgICAgZGlzYWJsZSBXaW4zMiB0aHJlYWRzIFthdXRvZGV0ZWN0XQo+ IEBAIC0yMDcyLDcgKzIwNzEsNiBAQCBMSUJSQVJZX0xJU1Q9Igo+ICAgICAgYXZkZXZpY2UKPiAg ICAgIGF2ZmlsdGVyCj4gICAgICBzd3NjYWxlCj4gLSAgICBwb3N0cHJvYwo+ICAgICAgYXZmb3Jt YXQKPiAgICAgIGF2Y29kZWMKPiAgICAgIHN3cmVzYW1wbGUKPiBAQCAtMzk2OSw3ICszOTY3LDYg QEAgcGFuX2ZpbHRlcl9kZXBzPSJzd3Jlc2FtcGxlIgo+ICBwZXJzcGVjdGl2ZV9maWx0ZXJfZGVw cz0iZ3BsIgo+ICBwaGFzZV9maWx0ZXJfZGVwcz0iZ3BsIgo+ICBwcDdfZmlsdGVyX2RlcHM9Imdw bCIKPiAtcHBfZmlsdGVyX2RlcHM9ImdwbCBwb3N0cHJvYyIKPiAgcHJld2l0dF9vcGVuY2xfZmls dGVyX2RlcHM9Im9wZW5jbCIKPiAgcHJvY2FtcF92YWFwaV9maWx0ZXJfZGVwcz0idmFhcGkiCj4g IHByb2dyYW1fb3BlbmNsX2ZpbHRlcl9kZXBzPSJvcGVuY2wiCj4gQEAgLTQwODYsOCArNDA4Myw2 IEBAIGF2ZmlsdGVyX3N1Z2dlc3Q9ImxpYm0gc3RkYXRvbWljIHNwaXJ2X2NvbXBpbGVyIgo+ICBh dmZvcm1hdF9kZXBzPSJhdmNvZGVjIGF2dXRpbCIKPiAgYXZmb3JtYXRfc3VnZ2VzdD0ibGlibSBu ZXR3b3JrIHpsaWIgc3RkYXRvbWljIgo+ICBhdnV0aWxfc3VnZ2VzdD0iY2xvY2tfZ2V0dGltZSBm Zm52Y29kZWMgZ2NyeXB0IGxpYm0gbGliZHJtIGxpYm1meCBvcGVuY2wKPiBvcGVuc3NsIHVzZXIz MiB2YWFwaSB2dWxrYW4gdmlkZW90b29sYm94IGNvcmVmb3VuZGF0aW9uIGNvcmV2aWRlbyBjb3Jl bWVkaWEKPiBiY3J5cHQgc3RkYXRvbWljIgo+IC1wb3N0cHJvY19kZXBzPSJhdnV0aWwgZ3BsIgo+ IC1wb3N0cHJvY19zdWdnZXN0PSJsaWJtIHN0ZGF0b21pYyIKPiAgc3dyZXNhbXBsZV9kZXBzPSJh dnV0aWwiCj4gIHN3cmVzYW1wbGVfc3VnZ2VzdD0ibGlibSBsaWJzb3hyIHN0ZGF0b21pYyIKPiAg c3dzY2FsZV9kZXBzPSJhdnV0aWwiCj4gQEAgLTc1MzMsNyArNzUyOCw3IEBAIHZvaWQgKF5ibG9j aykodm9pZCk7Cj4gIEVPRgo+Cj4gICMgYWRkIHNvbWUgbGlua2VyIGZsYWdzCj4gLWNoZWNrX2xk ZmxhZ3MKPiAtV2wsLXJwYXRoLWxpbms9OmxpYnBvc3Rwcm9jOmxpYnN3cmVzYW1wbGU6bGlic3dz Y2FsZTpsaWJhdmZpbHRlcjpsaWJhdmRldmljZTpsaWJhdmZvcm1hdDpsaWJhdmNvZGVjOmxpYmF2 dXRpbAo+ICtjaGVja19sZGZsYWdzCj4gLVdsLC1ycGF0aC1saW5rPTpsaWJzd3Jlc2FtcGxlOmxp YnN3c2NhbGU6bGliYXZmaWx0ZXI6bGliYXZkZXZpY2U6bGliYXZmb3JtYXQ6bGliYXZjb2RlYzps aWJhdnV0aWwKPiAgZW5hYmxlZCBycGF0aCAmJiBhZGRfbGRleGVmbGFncyAtV2wsLXJwYXRoLCRs aWJkaXIgJiYgYWRkX2xkc29mbGFncwo+IC1XbCwtcnBhdGgsJGxpYmRpcgo+ICB0ZXN0X2xkZmxh Z3MgLVdsLC1Cc3ltYm9saWMgJiYgYXBwZW5kIFNIRkxBR1MgLVdsLC1Cc3ltYm9saWMKPgo+IEBA IC03ODk4LDcgKzc4OTMsNiBAQCBlbmFibGVkIGZzeW5jX2ZpbHRlciAgICAgICAgJiYgcHJlcGVu ZCBhdmZpbHRlcl9kZXBzCj4gImF2Zm9ybWF0Igo+ICBlbmFibGVkIG1jZGVpbnRfZmlsdGVyICAg ICAgJiYgcHJlcGVuZCBhdmZpbHRlcl9kZXBzICJhdmNvZGVjIgo+ICBlbmFibGVkIG1vdmllX2Zp bHRlciAgICAgICAgJiYgcHJlcGVuZCBhdmZpbHRlcl9kZXBzICJhdmZvcm1hdCBhdmNvZGVjIgo+ ICBlbmFibGVkIHBhbl9maWx0ZXIgICAgICAgICAgJiYgcHJlcGVuZCBhdmZpbHRlcl9kZXBzICJz d3Jlc2FtcGxlIgo+IC1lbmFibGVkIHBwX2ZpbHRlciAgICAgICAgICAgJiYgcHJlcGVuZCBhdmZp bHRlcl9kZXBzICJwb3N0cHJvYyIKPiAgZW5hYmxlZCBxcmVuY29kZV9maWx0ZXIgICAgICYmIHBy ZXBlbmQgYXZmaWx0ZXJfZGVwcyAic3dzY2FsZSIKPiAgZW5hYmxlZCBxcmVuY29kZXNyY19maWx0 ZXIgICYmIHByZXBlbmQgYXZmaWx0ZXJfZGVwcyAic3dzY2FsZSIKPiAgZW5hYmxlZCByZW1vdmVs b2dvX2ZpbHRlciAgICYmIHByZXBlbmQgYXZmaWx0ZXJfZGVwcyAiYXZmb3JtYXQgYXZjb2RlYwo+ IHN3c2NhbGUiCj4gQEAgLTc5NTAsOSArNzk0NCw2IEBAIGV4cGFuZF9kZXBzKCl7Cj4gICAgICBy ZW9yZGVyX2J5ICR7MX1fZGVwcyBMSUJSQVJZX0xJU1QgICMgbGlua2luZyBvcmRlciBpcyBleHBl Y3RlZCBsYXRlcgo+ICB9Cj4KPiAtI3dlIGhhdmUgdG8gcmVtb3ZlIGdwbCBmcm9tIHRoZSBkZXBz IGhlcmUgYXMgc29tZSBjb2RlIGFzc3VtZXMgYWxsIGxpYgo+IGRlcHMgYXJlIGxpYnMKPiAtcG9z dHByb2NfZGVwcz0iJChmaWx0ZXJfb3V0ICdncGwnICRwb3N0cHJvY19kZXBzKSIKPiAtCj4gIG1h cCAnZXhwYW5kX2RlcHMgJHYnICRMSUJSQVJZX0xJU1QKPgo+ICBpZiB0ZXN0ICIkcXVpZXQiICE9 ICJ5ZXMiOyB0aGVuCj4gQEAgLTgwNDMsNyArODAzNCw2IEBAIGVjaG8gIm9wdGltaXplIGZvciBz aXplICAgICAgICAgJHtzbWFsbC1ub30iCj4gIGVjaG8gIm9wdGltaXphdGlvbnMgICAgICAgICAg ICAgJHtvcHRpbWl6YXRpb25zLW5vfSIKPiAgZWNobyAic3RhdGljICAgICAgICAgICAgICAgICAg ICAke3N0YXRpYy1ub30iCj4gIGVjaG8gInNoYXJlZCAgICAgICAgICAgICAgICAgICAgJHtzaGFy ZWQtbm99Igo+IC1lY2hvICJwb3N0cHJvY2Vzc2luZyBzdXBwb3J0ICAgICR7cG9zdHByb2Mtbm99 Igo+ICBlY2hvICJuZXR3b3JrIHN1cHBvcnQgICAgICAgICAgICR7bmV0d29yay1ub30iCj4gIGVj aG8gInRocmVhZGluZyBzdXBwb3J0ICAgICAgICAgJHt0aHJlYWRfdHlwZS1ub30iCj4gIGVjaG8g InNhZmUgYml0c3RyZWFtIHJlYWRlciAgICAgJHtzYWZlX2JpdHN0cmVhbV9yZWFkZXItbm99Igo+ IEBAIC04NDIwLDcgKzg0MTAsNiBAQCBleHRyYWxpYnNfYXZjb2RlYz0iJGF2Y29kZWNfZXh0cmFs aWJzIgo+ICBleHRyYWxpYnNfYXZmb3JtYXQ9IiRhdmZvcm1hdF9leHRyYWxpYnMiCj4gIGV4dHJh bGlic19hdmRldmljZT0iJGF2ZGV2aWNlX2V4dHJhbGlicyIKPiAgZXh0cmFsaWJzX2F2ZmlsdGVy PSIkYXZmaWx0ZXJfZXh0cmFsaWJzIgo+IC1leHRyYWxpYnNfcG9zdHByb2M9IiRwb3N0cHJvY19l eHRyYWxpYnMiCj4gIGV4dHJhbGlic19zd3NjYWxlPSIkc3dzY2FsZV9leHRyYWxpYnMiCj4gIGV4 dHJhbGlic19zd3Jlc2FtcGxlPSIkc3dyZXNhbXBsZV9leHRyYWxpYnMiCj4gIEVPRgo+IGRpZmYg LS1naXQgYS9kb2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQo+IGluZGV4IGE5ZWMw NzdlZjA0Li42NzliNzFmMjkwNiAxMDA2NDQKPiAtLS0gYS9kb2MvZmlsdGVycy50ZXhpCj4gKysr IGIvZG9jL2ZpbHRlcnMudGV4aQo+IEBAIC0xOTM4NywxODEgKzE5Mzg3LDYgQEAgU2V0IHdpbmRv dyBZIHBvc2l0aW9uLCByZWxhdGl2ZSBvZmZzZXQgb24gWSBheGlzLgo+Cj4gIFRoaXMgZmlsdGVy IHN1cHBvcnRzIHNhbWUgQHJlZntjb21tYW5kc30gYXMgb3B0aW9ucy4KPgo+IC1Ac2VjdGlvbiBw cAo+IC0KPiAtRW5hYmxlIHRoZSBzcGVjaWZpZWQgY2hhaW4gb2YgcG9zdHByb2Nlc3Npbmcgc3Vi ZmlsdGVycyB1c2luZwo+IGxpYnBvc3Rwcm9jLiBUaGlzCj4gLWxpYnJhcnkgc2hvdWxkIGJlIGF1 dG9tYXRpY2FsbHkgc2VsZWN0ZWQgd2l0aCBhIEdQTCBidWlsZAo+IChAY29kZXstLWVuYWJsZS1n cGx9KS4KPiAtU3ViZmlsdGVycyBtdXN0IGJlIHNlcGFyYXRlZCBieSAnLycgYW5kIGNhbiBiZSBk aXNhYmxlZCBieSBwcmVwZW5kaW5nIGEKPiAnLScuCj4gLUVhY2ggc3ViZmlsdGVyIGFuZCBzb21l IG9wdGlvbnMgaGF2ZSBhIHNob3J0IGFuZCBhIGxvbmcgbmFtZSB0aGF0IGNhbiBiZQo+IHVzZWQK PiAtaW50ZXJjaGFuZ2VhYmx5LCBpLmUuIGRyL2RlcmluZyBhcmUgdGhlIHNhbWUuCj4gLQo+IC1U aGUgZmlsdGVycyBhY2NlcHQgdGhlIGZvbGxvd2luZyBvcHRpb25zOgo+IC0KPiAtQHRhYmxlIEBv cHRpb24KPiAtQGl0ZW0gc3ViZmlsdGVycwo+IC1TZXQgcG9zdHByb2Nlc3Npbmcgc3ViZmlsdGVy cyBzdHJpbmcuCj4gLUBlbmQgdGFibGUKPiAtCj4gLUFsbCBzdWJmaWx0ZXJzIHNoYXJlIGNvbW1v biBvcHRpb25zIHRvIGRldGVybWluZSB0aGVpciBzY29wZToKPiAtCj4gLUB0YWJsZSBAb3B0aW9u Cj4gLUBpdGVtIGEvYXV0b3EKPiAtSG9ub3IgdGhlIHF1YWxpdHkgY29tbWFuZHMgZm9yIHRoaXMg c3ViZmlsdGVyLgo+IC0KPiAtQGl0ZW0gYy9jaHJvbQo+IC1EbyBjaHJvbWluYW5jZSBmaWx0ZXJp bmcsIHRvbyAoZGVmYXVsdCkuCj4gLQo+IC1AaXRlbSB5L25vY2hyb20KPiAtRG8gbHVtYSBmaWx0 ZXJpbmcgb25seSAobm8gY2hyb21pbmFuY2UpLgo+IC0KPiAtQGl0ZW0gbi9ub2x1bWEKPiAtRG8g Y2hyb21pbmFuY2UgZmlsdGVyaW5nIG9ubHkgKG5vIGx1bWEpLgo+IC1AZW5kIHRhYmxlCj4gLQo+ IC1UaGVzZSBvcHRpb25zIGNhbiBiZSBhcHBlbmRlZCBhZnRlciB0aGUgc3ViZmlsdGVyIG5hbWUs IHNlcGFyYXRlZCBieSBhCj4gJ3wnLgo+IC0KPiAtQXZhaWxhYmxlIHN1YmZpbHRlcnMgYXJlOgo+ IC0KPiAtQHRhYmxlIEBvcHRpb24KPiAtQGl0ZW0gaGIvaGRlYmxvY2tbfGRpZmZlcmVuY2VbfGZs YXRuZXNzXV0KPiAtSG9yaXpvbnRhbCBkZWJsb2NraW5nIGZpbHRlcgo+IC1AdGFibGUgQG9wdGlv bgo+IC1AaXRlbSBkaWZmZXJlbmNlCj4gLURpZmZlcmVuY2UgZmFjdG9yIHdoZXJlIGhpZ2hlciB2 YWx1ZXMgbWVhbiBtb3JlIGRlYmxvY2tpbmcgKGRlZmF1bHQ6Cj4gQGNvZGV7MzJ9KS4KPiAtQGl0 ZW0gZmxhdG5lc3MKPiAtRmxhdG5lc3MgdGhyZXNob2xkIHdoZXJlIGxvd2VyIHZhbHVlcyBtZWFu IG1vcmUgZGVibG9ja2luZyAoZGVmYXVsdDoKPiBAY29kZXszOX0pLgo+IC1AZW5kIHRhYmxlCj4g LQo+IC1AaXRlbSB2Yi92ZGVibG9ja1t8ZGlmZmVyZW5jZVt8ZmxhdG5lc3NdXQo+IC1WZXJ0aWNh bCBkZWJsb2NraW5nIGZpbHRlcgo+IC1AdGFibGUgQG9wdGlvbgo+IC1AaXRlbSBkaWZmZXJlbmNl Cj4gLURpZmZlcmVuY2UgZmFjdG9yIHdoZXJlIGhpZ2hlciB2YWx1ZXMgbWVhbiBtb3JlIGRlYmxv Y2tpbmcgKGRlZmF1bHQ6Cj4gQGNvZGV7MzJ9KS4KPiAtQGl0ZW0gZmxhdG5lc3MKPiAtRmxhdG5l c3MgdGhyZXNob2xkIHdoZXJlIGxvd2VyIHZhbHVlcyBtZWFuIG1vcmUgZGVibG9ja2luZyAoZGVm YXVsdDoKPiBAY29kZXszOX0pLgo+IC1AZW5kIHRhYmxlCj4gLQo+IC1AaXRlbSBoYS9oYWRlYmxv Y2tbfGRpZmZlcmVuY2VbfGZsYXRuZXNzXV0KPiAtQWNjdXJhdGUgaG9yaXpvbnRhbCBkZWJsb2Nr aW5nIGZpbHRlcgo+IC1AdGFibGUgQG9wdGlvbgo+IC1AaXRlbSBkaWZmZXJlbmNlCj4gLURpZmZl cmVuY2UgZmFjdG9yIHdoZXJlIGhpZ2hlciB2YWx1ZXMgbWVhbiBtb3JlIGRlYmxvY2tpbmcgKGRl ZmF1bHQ6Cj4gQGNvZGV7MzJ9KS4KPiAtQGl0ZW0gZmxhdG5lc3MKPiAtRmxhdG5lc3MgdGhyZXNo b2xkIHdoZXJlIGxvd2VyIHZhbHVlcyBtZWFuIG1vcmUgZGVibG9ja2luZyAoZGVmYXVsdDoKPiBA Y29kZXszOX0pLgo+IC1AZW5kIHRhYmxlCj4gLQo+IC1AaXRlbSB2YS92YWRlYmxvY2tbfGRpZmZl cmVuY2VbfGZsYXRuZXNzXV0KPiAtQWNjdXJhdGUgdmVydGljYWwgZGVibG9ja2luZyBmaWx0ZXIK PiAtQHRhYmxlIEBvcHRpb24KPiAtQGl0ZW0gZGlmZmVyZW5jZQo+IC1EaWZmZXJlbmNlIGZhY3Rv ciB3aGVyZSBoaWdoZXIgdmFsdWVzIG1lYW4gbW9yZSBkZWJsb2NraW5nIChkZWZhdWx0Ogo+IEBj b2RlezMyfSkuCj4gLUBpdGVtIGZsYXRuZXNzCj4gLUZsYXRuZXNzIHRocmVzaG9sZCB3aGVyZSBs b3dlciB2YWx1ZXMgbWVhbiBtb3JlIGRlYmxvY2tpbmcgKGRlZmF1bHQ6Cj4gQGNvZGV7Mzl9KS4K PiAtQGVuZCB0YWJsZQo+IC1AZW5kIHRhYmxlCj4gLQo+IC1UaGUgaG9yaXpvbnRhbCBhbmQgdmVy dGljYWwgZGVibG9ja2luZyBmaWx0ZXJzIHNoYXJlIHRoZSBkaWZmZXJlbmNlIGFuZAo+IC1mbGF0 bmVzcyB2YWx1ZXMgc28geW91IGNhbm5vdCBzZXQgZGlmZmVyZW50IGhvcml6b250YWwgYW5kIHZl cnRpY2FsCj4gLXRocmVzaG9sZHMuCj4gLQo+IC1AdGFibGUgQG9wdGlvbgo+IC1AaXRlbSBoMS94 MWhkZWJsb2NrCj4gLUV4cGVyaW1lbnRhbCBob3Jpem9udGFsIGRlYmxvY2tpbmcgZmlsdGVyCj4g LQo+IC1AaXRlbSB2MS94MXZkZWJsb2NrCj4gLUV4cGVyaW1lbnRhbCB2ZXJ0aWNhbCBkZWJsb2Nr aW5nIGZpbHRlcgo+IC0KPiAtQGl0ZW0gZHIvZGVyaW5nCj4gLURlcmluZ2luZyBmaWx0ZXIKPiAt Cj4gLUBpdGVtIHRuL3RtcG5vaXNlW3x0aHJlc2hvbGQxW3x0aHJlc2hvbGQyW3x0aHJlc2hvbGQz XV1dLCB0ZW1wb3JhbCBub2lzZQo+IHJlZHVjZXIKPiAtQHRhYmxlIEBvcHRpb24KPiAtQGl0ZW0g dGhyZXNob2xkMQo+IC1sYXJnZXIgLT4gc3Ryb25nZXIgZmlsdGVyaW5nCj4gLUBpdGVtIHRocmVz aG9sZDIKPiAtbGFyZ2VyIC0+IHN0cm9uZ2VyIGZpbHRlcmluZwo+IC1AaXRlbSB0aHJlc2hvbGQz Cj4gLWxhcmdlciAtPiBzdHJvbmdlciBmaWx0ZXJpbmcKPiAtQGVuZCB0YWJsZQo+IC0KPiAtQGl0 ZW0gYWwvYXV0b2xldmVsc1s6Zi9mdWxseXJhbmdlXSwgYXV0b21hdGljIGJyaWdodG5lc3MgLyBj b250cmFzdAo+IGNvcnJlY3Rpb24KPiAtQHRhYmxlIEBvcHRpb24KPiAtQGl0ZW0gZi9mdWxseXJh bmdlCj4gLVN0cmV0Y2ggbHVtYSB0byBAY29kZXswLTI1NX0uCj4gLUBlbmQgdGFibGUKPiAtCj4g LUBpdGVtIGxiL2xpbmJsZW5kZGVpbnQKPiAtTGluZWFyIGJsZW5kIGRlaW50ZXJsYWNpbmcgZmls dGVyIHRoYXQgZGVpbnRlcmxhY2VzIHRoZSBnaXZlbiBibG9jayBieQo+IC1maWx0ZXJpbmcgYWxs IGxpbmVzIHdpdGggYSBAY29kZXsoMSAyIDEpfSBmaWx0ZXIuCj4gLQo+IC1AaXRlbSBsaS9saW5p cG9sZGVpbnQKPiAtTGluZWFyIGludGVycG9sYXRpbmcgZGVpbnRlcmxhY2luZyBmaWx0ZXIgdGhh dCBkZWludGVybGFjZXMgdGhlIGdpdmVuCj4gYmxvY2sgYnkKPiAtbGluZWFybHkgaW50ZXJwb2xh dGluZyBldmVyeSBzZWNvbmQgbGluZS4KPiAtCj4gLUBpdGVtIGNpL2N1YmljaXBvbGRlaW50Cj4g LUN1YmljIGludGVycG9sYXRpbmcgZGVpbnRlcmxhY2luZyBmaWx0ZXIgZGVpbnRlcmxhY2VzIHRo ZSBnaXZlbiBibG9jayBieQo+IC1jdWJpY2FsbHkgaW50ZXJwb2xhdGluZyBldmVyeSBzZWNvbmQg bGluZS4KPiAtCj4gLUBpdGVtIG1kL21lZGlhbmRlaW50Cj4gLU1lZGlhbiBkZWludGVybGFjaW5n IGZpbHRlciB0aGF0IGRlaW50ZXJsYWNlcyB0aGUgZ2l2ZW4gYmxvY2sgYnkgYXBwbHlpbmcKPiBh Cj4gLW1lZGlhbiBmaWx0ZXIgdG8gZXZlcnkgc2Vjb25kIGxpbmUuCj4gLQo+IC1AaXRlbSBmZC9m Zm1wZWdkZWludAo+IC1GRm1wZWcgZGVpbnRlcmxhY2luZyBmaWx0ZXIgdGhhdCBkZWludGVybGFj ZXMgdGhlIGdpdmVuIGJsb2NrIGJ5Cj4gZmlsdGVyaW5nIGV2ZXJ5Cj4gLXNlY29uZCBsaW5lIHdp dGggYSBAY29kZXsoLTEgNCAyIDQgLTEpfSBmaWx0ZXIuCj4gLQo+IC1AaXRlbSBsNS9sb3dwYXNz NQo+IC1WZXJ0aWNhbGx5IGFwcGxpZWQgRklSIGxvd3Bhc3MgZGVpbnRlcmxhY2luZyBmaWx0ZXIg dGhhdCBkZWludGVybGFjZXMgdGhlCj4gZ2l2ZW4KPiAtYmxvY2sgYnkgZmlsdGVyaW5nIGFsbCBs aW5lcyB3aXRoIGEgQGNvZGV7KC0xIDIgNiAyIC0xKX0gZmlsdGVyLgo+IC0KPiAtQGl0ZW0gZnEv Zm9yY2VRdWFudFt8cXVhbnRpemVyXQo+IC1PdmVycmlkZXMgdGhlIHF1YW50aXplciB0YWJsZSBm cm9tIHRoZSBpbnB1dCB3aXRoIHRoZSBjb25zdGFudCBxdWFudGl6ZXIKPiB5b3UKPiAtc3BlY2lm eS4KPiAtQHRhYmxlIEBvcHRpb24KPiAtQGl0ZW0gcXVhbnRpemVyCj4gLVF1YW50aXplciB0byB1 c2UKPiAtQGVuZCB0YWJsZQo+IC0KPiAtQGl0ZW0gZGUvZGVmYXVsdAo+IC1EZWZhdWx0IHBwIGZp bHRlciBjb21iaW5hdGlvbiAoQGNvZGV7aGJ8YSx2YnxhLGRyfGF9KQo+IC0KPiAtQGl0ZW0gZmEv ZmFzdAo+IC1GYXN0IHBwIGZpbHRlciBjb21iaW5hdGlvbiAoQGNvZGV7aDF8YSx2MXxhLGRyfGF9 KQo+IC0KPiAtQGl0ZW0gYWMKPiAtSGlnaCBxdWFsaXR5IHBwIGZpbHRlciBjb21iaW5hdGlvbiAo QGNvZGV7aGF8YXwxMjh8Nyx2YXxhLGRyfGF9KQo+IC1AZW5kIHRhYmxlCj4gLQo+IC1Ac3Vic2Vj dGlvbiBFeGFtcGxlcwo+IC0KPiAtQGl0ZW1pemUKPiAtQGl0ZW0KPiAtQXBwbHkgaG9yaXpvbnRh bCBhbmQgdmVydGljYWwgZGVibG9ja2luZywgZGVyaW5naW5nIGFuZCBhdXRvbWF0aWMKPiAtYnJp Z2h0bmVzcy9jb250cmFzdDoKPiAtQGV4YW1wbGUKPiAtcHA9aGIvdmIvZHIvYWwKPiAtQGVuZCBl eGFtcGxlCj4gLQo+IC1AaXRlbQo+IC1BcHBseSBkZWZhdWx0IGZpbHRlcnMgd2l0aG91dCBicmln aHRuZXNzL2NvbnRyYXN0IGNvcnJlY3Rpb246Cj4gLUBleGFtcGxlCj4gLXBwPWRlLy1hbAo+IC1A ZW5kIGV4YW1wbGUKPiAtCj4gLUBpdGVtCj4gLUFwcGx5IGRlZmF1bHQgZmlsdGVycyBhbmQgdGVt cG9yYWwgZGVub2lzZXI6Cj4gLUBleGFtcGxlCj4gLXBwPWRlZmF1bHQvdG1wbm9pc2V8MXwyfDMK PiAtQGVuZCBleGFtcGxlCj4gLQo+IC1AaXRlbQo+IC1BcHBseSBkZWJsb2NraW5nIG9uIGx1bWEg b25seSwgYW5kIHN3aXRjaCB2ZXJ0aWNhbCBkZWJsb2NraW5nIG9uIG9yIG9mZgo+IC1hdXRvbWF0 aWNhbGx5IGRlcGVuZGluZyBvbiBhdmFpbGFibGUgQ1BVIHRpbWU6Cj4gLUBleGFtcGxlCj4gLXBw PWhifHkvdmJ8YQo+IC1AZW5kIGV4YW1wbGUKPiAtQGVuZCBpdGVtaXplCj4gLQo+ICBAc2VjdGlv biBwcDcKPiAgQXBwbHkgUG9zdHByb2Nlc3NpbmcgZmlsdGVyIDcuIEl0IGlzIHZhcmlhbnQgb2Yg dGhlIEByZWZ7c3BwfSBmaWx0ZXIsCj4gIHNpbWlsYXIgdG8gc3BwID0gNiB3aXRoIDcgcG9pbnQg RENULCB3aGVyZSBvbmx5IHRoZSBjZW50ZXIgc2FtcGxlIGlzCj4gZGlmZiAtLWdpdCBhL2ZmdG9v bHMvZmZwcm9iZS5jIGIvZmZ0b29scy9mZnByb2JlLmMKPiBpbmRleCBkOTgwZDRlNjRmZS4uZjMz NTMxZmQ4NGMgMTAwNjQ0Cj4gLS0tIGEvZmZ0b29scy9mZnByb2JlLmMKPiArKysgYi9mZnRvb2xz L2ZmcHJvYmUuYwo+IEBAIC02Miw4ICs2Miw2IEBACj4gICNpbmNsdWRlICJsaWJzd3NjYWxlL3Zl cnNpb24uaCIKPiAgI2luY2x1ZGUgImxpYnN3cmVzYW1wbGUvc3dyZXNhbXBsZS5oIgo+ICAjaW5j bHVkZSAibGlic3dyZXNhbXBsZS92ZXJzaW9uLmgiCj4gLSNpbmNsdWRlICJsaWJwb3N0cHJvYy9w b3N0cHJvY2Vzcy5oIgo+IC0jaW5jbHVkZSAibGlicG9zdHByb2MvdmVyc2lvbi5oIgo+ICAjaW5j bHVkZSAibGliYXZmaWx0ZXIvdmVyc2lvbi5oIgo+ICAjaW5jbHVkZSAidGV4dGZvcm1hdC9hdnRl eHRmb3JtYXQuaCIKPiAgI2luY2x1ZGUgImNtZHV0aWxzLmgiCj4gQEAgLTI1NzMsNyArMjU3MSw2 IEBAIHN0YXRpYyB2b2lkCj4gZmZwcm9iZV9zaG93X2xpYnJhcnlfdmVyc2lvbnMoQVZUZXh0Rm9y bWF0Q29udGV4dCAqdGZjKQo+ICAgICAgU0hPV19MSUJfVkVSU0lPTihhdmZpbHRlciwgICBBVkZJ TFRFUik7Cj4gICAgICBTSE9XX0xJQl9WRVJTSU9OKHN3c2NhbGUsICAgIFNXU0NBTEUpOwo+ICAg ICAgU0hPV19MSUJfVkVSU0lPTihzd3Jlc2FtcGxlLCBTV1JFU0FNUExFKTsKPiAtICAgIFNIT1df TElCX1ZFUlNJT04ocG9zdHByb2MsICAgUE9TVFBST0MpOwo+ICAgICAgYXZ0ZXh0X3ByaW50X3Nl Y3Rpb25fZm9vdGVyKHRmYyk7Cj4gIH0KPgo+IGRpZmYgLS1naXQgYS9mZnRvb2xzL29wdF9jb21t b24uYyBiL2ZmdG9vbHMvb3B0X2NvbW1vbi5jCj4gaW5kZXggMmFjM2ZkNGZiMzYuLmMyZjZiOWRl MmE3IDEwMDY0NAo+IC0tLSBhL2ZmdG9vbHMvb3B0X2NvbW1vbi5jCj4gKysrIGIvZmZ0b29scy9v cHRfY29tbW9uLmMKPiBAQCAtNjAsOCArNjAsNiBAQAo+ICAjaW5jbHVkZSAibGlic3dyZXNhbXBs ZS9zd3Jlc2FtcGxlLmgiCj4gICNpbmNsdWRlICJsaWJzd3Jlc2FtcGxlL3ZlcnNpb24uaCIKPgo+ IC0jaW5jbHVkZSAibGlicG9zdHByb2MvcG9zdHByb2Nlc3MuaCIKPiAtI2luY2x1ZGUgImxpYnBv c3Rwcm9jL3ZlcnNpb24uaCIKPgo+ICBlbnVtIHNob3dfbXV4ZGVtdXhlcnMgewo+ICAgICAgU0hP V19ERUZBVUxULAo+IEBAIC0xOTEsNyArMTg5LDYgQEAgc3RhdGljIHZvaWQgcHJpbnRfYWxsX2xp YnNfaW5mbyhpbnQgZmxhZ3MsIGludCBsZXZlbCkKPiAgICAgIFBSSU5UX0xJQl9JTkZPKGF2Zmls dGVyLCAgIEFWRklMVEVSLCAgIGZsYWdzLCBsZXZlbCk7Cj4gICAgICBQUklOVF9MSUJfSU5GTyhz d3NjYWxlLCAgICBTV1NDQUxFLCAgICBmbGFncywgbGV2ZWwpOwo+ICAgICAgUFJJTlRfTElCX0lO Rk8oc3dyZXNhbXBsZSwgU1dSRVNBTVBMRSwgZmxhZ3MsIGxldmVsKTsKPiAtICAgIFBSSU5UX0xJ Ql9JTkZPKHBvc3Rwcm9jLCAgIFBPU1RQUk9DLCAgIGZsYWdzLCBsZXZlbCk7Cj4gIH0KPgo+ICBz dGF0aWMgdm9pZCBwcmludF9wcm9ncmFtX2luZm8oaW50IGZsYWdzLCBpbnQgbGV2ZWwpCj4gZGlm ZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlIGIvbGliYXZmaWx0ZXIvTWFrZWZpbGUKPiBp bmRleCA3YzBkODc5ZWM5Yy4uMGVmZmU0MTI3ZmYgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmaWx0ZXIv TWFrZWZpbGUKPiArKysgYi9saWJhdmZpbHRlci9NYWtlZmlsZQo+IEBAIC00MzEsNyArNDMxLDYg QEAgT0JKUy0kKENPTkZJR19QSE9UT1NFTlNJVElWSVRZX0ZJTFRFUikgICAgICAgKz0KPiB2Zl9w aG90b3NlbnNpdGl2aXR5Lm8KPiAgT0JKUy0kKENPTkZJR19QSVhERVNDVEVTVF9GSUxURVIpICAg ICAgICAgICAgKz0gdmZfcGl4ZGVzY3Rlc3Qubwo+ICBPQkpTLSQoQ09ORklHX1BJWEVMSVpFX0ZJ TFRFUikgICAgICAgICAgICAgICArPSB2Zl9waXhlbGl6ZS5vCj4gIE9CSlMtJChDT05GSUdfUElY U0NPUEVfRklMVEVSKSAgICAgICAgICAgICAgICs9IHZmX2RhdGFzY29wZS5vCj4gLU9CSlMtJChD T05GSUdfUFBfRklMVEVSKSAgICAgICAgICAgICAgICAgICAgICs9IHZmX3BwLm8gcXBfdGFibGUu bwo+ICBPQkpTLSQoQ09ORklHX1BQN19GSUxURVIpICAgICAgICAgICAgICAgICAgICArPSB2Zl9w cDcubyBxcF90YWJsZS5vCj4gIE9CSlMtJChDT05GSUdfUFJFTVVMVElQTFlfRklMVEVSKSAgICAg ICAgICAgICs9IHZmX3ByZW11bHRpcGx5Lm8KPiBmcmFtZXN5bmMubwo+ICBPQkpTLSQoQ09ORklH X1BSRVdJVFRfRklMVEVSKSAgICAgICAgICAgICAgICArPSB2Zl9jb252b2x1dGlvbi5vCj4gZGlm ZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRl cnMuYwo+IGluZGV4IDc0MGQ5YWIyNjVjLi41ZWEzM2NkZjAxYiAxMDA2NDQKPiAtLS0gYS9saWJh dmZpbHRlci9hbGxmaWx0ZXJzLmMKPiArKysgYi9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKPiBA QCAtNDA0LDcgKzQwNCw2IEBAIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9waG90b3NlbnNp dGl2aXR5Owo+ICBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfcGl4ZGVzY3Rlc3Q7Cj4gIGV4 dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9waXhlbGl6ZTsKPiAgZXh0ZXJuIGNvbnN0IEZGRmls dGVyIGZmX3ZmX3BpeHNjb3BlOwo+IC1leHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfcHA7Cj4g IGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9wcDc7Cj4gIGV4dGVybiBjb25zdCBGRkZpbHRl ciBmZl92Zl9wcmVtdWx0aXBseTsKPiAgZXh0ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3ByZXdp dHQ7Cj4gZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3ZmX3BwLmMgYi9saWJhdmZpbHRlci92Zl9w cC5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggOWU5OTAzZWI5NzQuLjAwMDAw MDAwMDAwCj4gLS0tIGEvbGliYXZmaWx0ZXIvdmZfcHAuYwo+ICsrKyAvZGV2L251bGwKPiBAQCAt MSwxOTEgKzAsMCBAQAo+IC0vKgo+IC0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgQSdycGkKPiAtICog Q29weXJpZ2h0IChDKSAyMDEyIENsw6ltZW50IELFk3NjaAo+IC0gKgo+IC0gKiBUaGlzIGZpbGUg aXMgcGFydCBvZiBGRm1wZWcuCj4gLSAqCj4gLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gLSAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4g LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCj4gLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4g LSAqCj4gLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAo+IC0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+IC0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gLSAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gLSAqCj4gLSAqIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCj4g LSAqIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4sCj4gLSAqIDUxIEZyYW5rbGluIFN0cmVldAo+IDxodHRwczovL3d3dy5nb29n bGUuY29tL21hcHMvc2VhcmNoLzUxK0ZyYW5rbGluK1N0cmVldD9lbnRyeT1nbWFpbCZzb3VyY2U9 Zz4sCj4gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCj4gLSAqLwo+IC0K PiAtLyoqCj4gLSAqIEBmaWxlCj4gLSAqIGxpYnBvc3Rwcm9jIGZpbHRlciwgcG9ydGVkIGZyb20g TVBsYXllci4KPiAtICovCj4gLQo+IC0jaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCj4g LSNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCj4gLSNpbmNsdWRlICJsaWJhdnV0aWwvb3B0Lmgi Cj4gLQo+IC0jaW5jbHVkZSAiZmlsdGVycy5oIgo+IC0jaW5jbHVkZSAicXBfdGFibGUuaCIKPiAt I2luY2x1ZGUgInZpZGVvLmgiCj4gLQo+IC0jaW5jbHVkZSAibGlicG9zdHByb2MvcG9zdHByb2Nl c3MuaCIKPiAtCj4gLXR5cGVkZWYgc3RydWN0IFBQRmlsdGVyQ29udGV4dCB7Cj4gLSAgICBjb25z dCBBVkNsYXNzICpjbGFzczsKPiAtICAgIGNoYXIgKnN1YmZpbHRlcnM7Cj4gLSAgICBpbnQgbW9k ZV9pZDsKPiAtICAgIHBwX21vZGUgKm1vZGVzW1BQX1FVQUxJVFlfTUFYICsgMV07Cj4gLSAgICB2 b2lkICpwcF9jdHg7Cj4gLX0gUFBGaWx0ZXJDb250ZXh0Owo+IC0KPiAtI2RlZmluZSBPRkZTRVQo eCkgb2Zmc2V0b2YoUFBGaWx0ZXJDb250ZXh0LCB4KQo+IC0jZGVmaW5lIEZMQUdTIEFWX09QVF9G TEFHX0ZJTFRFUklOR19QQVJBTXxBVl9PUFRfRkxBR19WSURFT19QQVJBTQo+IC1zdGF0aWMgY29u c3QgQVZPcHRpb24gcHBfb3B0aW9uc1tdID0gewo+IC0gICAgeyAic3ViZmlsdGVycyIsICJzZXQg cG9zdHByb2Nlc3Mgc3ViZmlsdGVycyIsIE9GRlNFVChzdWJmaWx0ZXJzKSwKPiBBVl9PUFRfVFlQ RV9TVFJJTkcsIHsuc3RyPSJkZSJ9LCAuZmxhZ3MgPSBGTEFHUyB9LAo+IC0gICAgeyBOVUxMIH0K PiAtfTsKPiAtCj4gLUFWRklMVEVSX0RFRklORV9DTEFTUyhwcCk7Cj4gLQo+IC1zdGF0aWMgYXZf Y29sZCBpbnQgcHBfaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKPiAtewo+IC0gICAgaW50IGk7 Cj4gLSAgICBQUEZpbHRlckNvbnRleHQgKnBwID0gY3R4LT5wcml2Owo+IC0KPiAtICAgIGZvciAo aSA9IDA7IGkgPD0gUFBfUVVBTElUWV9NQVg7IGkrKykgewo+IC0gICAgICAgIHBwLT5tb2Rlc1tp XSA9IHBwX2dldF9tb2RlX2J5X25hbWVfYW5kX3F1YWxpdHkocHAtPnN1YmZpbHRlcnMsIGkpOwo+ IC0gICAgICAgIGlmICghcHAtPm1vZGVzW2ldKQo+IC0gICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9FWFRFUk5BTDsKPiAtICAgIH0KPiAtICAgIHBwLT5tb2RlX2lkID0gUFBfUVVBTElUWV9NQVg7 Cj4gLSAgICByZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBwcF9wcm9jZXNzX2NvbW1h bmQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmNtZCwKPiBjb25zdCBjaGFyICph cmdzLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpyZXMsIGludCByZXNf bGVuLCBpbnQgZmxhZ3MpCj4gLXsKPiAtICAgIFBQRmlsdGVyQ29udGV4dCAqcHAgPSBjdHgtPnBy aXY7Cj4gLQo+IC0gICAgaWYgKCFzdHJjbXAoY21kLCAicXVhbGl0eSIpKSB7Cj4gLSAgICAgICAg cHAtPm1vZGVfaWQgPSBhdl9jbGlwKHN0cnRvbChhcmdzLCBOVUxMLCAxMCksIDAsIFBQX1FVQUxJ VFlfTUFYKTsKPiAtICAgICAgICByZXR1cm4gMDsKPiAtICAgIH0KPiAtICAgIHJldHVybiBBVkVS Uk9SKEVOT1NZUyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQg cGl4X2ZtdHNbXSA9IHsKPiAtICAgIEFWX1BJWF9GTVRfWVVWNDIwUCwgQVZfUElYX0ZNVF9ZVVZK NDIwUCwKPiAtICAgIEFWX1BJWF9GTVRfWVVWNDIyUCwgQVZfUElYX0ZNVF9ZVVZKNDIyUCwKPiAt ICAgIEFWX1BJWF9GTVRfWVVWNDExUCwKPiAtICAgIEFWX1BJWF9GTVRfR0JSUCwKPiAtICAgIEFW X1BJWF9GTVRfWVVWNDQ0UCwgQVZfUElYX0ZNVF9ZVVZKNDQ0UCwKPiAtICAgIEFWX1BJWF9GTVRf WVVWNDQwUCwgQVZfUElYX0ZNVF9ZVVZKNDQwUCwKPiAtICAgIEFWX1BJWF9GTVRfR1JBWTgsCj4g LSAgICBBVl9QSVhfRk1UX05PTkUKPiAtfTsKPiAtCj4gLXN0YXRpYyBpbnQgcHBfY29uZmlnX3By b3BzKEFWRmlsdGVyTGluayAqaW5saW5rKQo+IC17Cj4gLSAgICBpbnQgZmxhZ3MgPSBQUF9DUFVf Q0FQU19BVVRPOwo+IC0gICAgUFBGaWx0ZXJDb250ZXh0ICpwcCA9IGlubGluay0+ZHN0LT5wcml2 Owo+IC0KPiAtICAgIHN3aXRjaCAoaW5saW5rLT5mb3JtYXQpIHsKPiAtICAgIGNhc2UgQVZfUElY X0ZNVF9HUkFZODoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZKNDIwUDoKPiAtICAgIGNhc2Ug QVZfUElYX0ZNVF9ZVVY0MjBQOiBmbGFncyB8PSBQUF9GT1JNQVRfNDIwOyBicmVhazsKPiAtICAg IGNhc2UgQVZfUElYX0ZNVF9ZVVZKNDIyUDoKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQ OiBmbGFncyB8PSBQUF9GT1JNQVRfNDIyOyBicmVhazsKPiAtICAgIGNhc2UgQVZfUElYX0ZNVF9Z VVY0MTFQOiBmbGFncyB8PSBQUF9GT1JNQVRfNDExOyBicmVhazsKPiAtICAgIGNhc2UgQVZfUElY X0ZNVF9HQlJQOgo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVko0NDRQOgo+IC0gICAgY2FzZSBB Vl9QSVhfRk1UX1lVVjQ0NFA6IGZsYWdzIHw9IFBQX0ZPUk1BVF80NDQ7IGJyZWFrOwo+IC0gICAg Y2FzZSBBVl9QSVhfRk1UX1lVVko0NDBQOgo+IC0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0MFA6 IGZsYWdzIHw9IFBQX0ZPUk1BVF80NDA7IGJyZWFrOwo+IC0gICAgZGVmYXVsdDogYXZfYXNzZXJ0 MCgwKTsKPiAtICAgIH0KPiAtCj4gLSAgICBwcC0+cHBfY3R4ID0gcHBfZ2V0X2NvbnRleHQoaW5s aW5rLT53LCBpbmxpbmstPmgsIGZsYWdzKTsKPiAtICAgIGlmICghcHAtPnBwX2N0eCkKPiAtICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+IC0gICAgcmV0dXJuIDA7Cj4gLX0KPiAtCj4g LXN0YXRpYyBpbnQgcHBfZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGluayAqaW5saW5rLCBBVkZyYW1l ICppbmJ1ZikKPiAtewo+IC0gICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBpbmxpbmstPmRzdDsK PiAtICAgIFBQRmlsdGVyQ29udGV4dCAqcHAgPSBjdHgtPnByaXY7Cj4gLSAgICBBVkZpbHRlckxp bmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07Cj4gLSAgICBjb25zdCBpbnQgYWxpZ25lZF93 ID0gRkZBTElHTihvdXRsaW5rLT53LCA4KTsKPiAtICAgIGNvbnN0IGludCBhbGlnbmVkX2ggPSBG RkFMSUdOKG91dGxpbmstPmgsIDgpOwo+IC0gICAgQVZGcmFtZSAqb3V0YnVmOwo+IC0gICAgaW50 IHFzdHJpZGUgPSAwOwo+IC0gICAgaW50OF90ICpxcF90YWJsZSA9IE5VTEw7Cj4gLSAgICBpbnQg cmV0Owo+IC0KPiAtICAgIG91dGJ1ZiA9IGZmX2dldF92aWRlb19idWZmZXIob3V0bGluaywgYWxp Z25lZF93LCBhbGlnbmVkX2gpOwo+IC0gICAgaWYgKCFvdXRidWYpIHsKPiAtICAgICAgICBhdl9m cmFtZV9mcmVlKCZpbmJ1Zik7Cj4gLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiAt ICAgIH0KPiAtICAgIGF2X2ZyYW1lX2NvcHlfcHJvcHMob3V0YnVmLCBpbmJ1Zik7Cj4gLSAgICBv dXRidWYtPndpZHRoICA9IGluYnVmLT53aWR0aDsKPiAtICAgIG91dGJ1Zi0+aGVpZ2h0ID0gaW5i dWYtPmhlaWdodDsKPiAtCj4gLSAgICByZXQgPSBmZl9xcF90YWJsZV9leHRyYWN0KGluYnVmLCAm cXBfdGFibGUsICZxc3RyaWRlLCBOVUxMLCBOVUxMKTsKPiAtICAgIGlmIChyZXQgPCAwKSB7Cj4g LSAgICAgICAgYXZfZnJhbWVfZnJlZSgmaW5idWYpOwo+IC0gICAgICAgIGF2X2ZyYW1lX2ZyZWUo Jm91dGJ1Zik7Cj4gLSAgICAgICAgcmV0dXJuIHJldDsKPiAtICAgIH0KPiAtCj4gLSAgICBwcF9w b3N0cHJvY2VzcygoY29uc3QgdWludDhfdCAqKilpbmJ1Zi0+ZGF0YSwgaW5idWYtPmxpbmVzaXpl LAo+IC0gICAgICAgICAgICAgICAgICAgb3V0YnVmLT5kYXRhLCAgICAgICAgICAgICAgICAgb3V0 YnVmLT5saW5lc2l6ZSwKPiAtICAgICAgICAgICAgICAgICAgIGFsaWduZWRfdywgb3V0bGluay0+ aCwKPiAtICAgICAgICAgICAgICAgICAgIHFwX3RhYmxlLAo+IC0gICAgICAgICAgICAgICAgICAg cXN0cmlkZSwKPiAtICAgICAgICAgICAgICAgICAgIHBwLT5tb2Rlc1twcC0+bW9kZV9pZF0sCj4g LSAgICAgICAgICAgICAgICAgICBwcC0+cHBfY3R4LAo+IC0gICAgICAgICAgICAgICAgICAgb3V0 YnVmLT5waWN0X3R5cGUgfCAocXBfdGFibGUgPyBQUF9QSUNUX1RZUEVfUVAyIDogMCkpOwo+IC0K PiAtICAgIGF2X2ZyYW1lX2ZyZWUoJmluYnVmKTsKPiAtICAgIGF2X2ZyZWVwKCZxcF90YWJsZSk7 Cj4gLSAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIG91dGJ1Zik7Cj4gLX0KPiAt Cj4gLXN0YXRpYyBhdl9jb2xkIHZvaWQgcHBfdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQo+ IC17Cj4gLSAgICBpbnQgaTsKPiAtICAgIFBQRmlsdGVyQ29udGV4dCAqcHAgPSBjdHgtPnByaXY7 Cj4gLQo+IC0gICAgZm9yIChpID0gMDsgaSA8PSBQUF9RVUFMSVRZX01BWDsgaSsrKQo+IC0gICAg ICAgIHBwX2ZyZWVfbW9kZShwcC0+bW9kZXNbaV0pOwo+IC0gICAgaWYgKHBwLT5wcF9jdHgpCj4g LSAgICAgICAgcHBfZnJlZV9jb250ZXh0KHBwLT5wcF9jdHgpOwo+IC19Cj4gLQo+IC1zdGF0aWMg Y29uc3QgQVZGaWx0ZXJQYWQgcHBfaW5wdXRzW10gPSB7Cj4gLSAgICB7Cj4gLSAgICAgICAgLm5h bWUgICAgICAgICA9ICJkZWZhdWx0IiwKPiAtICAgICAgICAudHlwZSAgICAgICAgID0gQVZNRURJ QV9UWVBFX1ZJREVPLAo+IC0gICAgICAgIC5jb25maWdfcHJvcHMgPSBwcF9jb25maWdfcHJvcHMs Cj4gLSAgICAgICAgLmZpbHRlcl9mcmFtZSA9IHBwX2ZpbHRlcl9mcmFtZSwKPiAtICAgIH0sCj4g LX07Cj4gLQo+IC1jb25zdCBGRkZpbHRlciBmZl92Zl9wcCA9IHsKPiAtICAgIC5wLm5hbWUgICAg ICAgICAgPSAicHAiLAo+IC0gICAgLnAuZGVzY3JpcHRpb24gICA9IE5VTExfSUZfQ09ORklHX1NN QUxMKCJGaWx0ZXIgdmlkZW8gdXNpbmcKPiBsaWJwb3N0cHJvYy4iKSwKPiAtICAgIC5wLnByaXZf Y2xhc3MgICAgPSAmcHBfY2xhc3MsCj4gLSAgICAucC5mbGFncyAgICAgICAgID0gQVZGSUxURVJf RkxBR19TVVBQT1JUX1RJTUVMSU5FX0dFTkVSSUMsCj4gLSAgICAucHJpdl9zaXplICAgICAgID0g c2l6ZW9mKFBQRmlsdGVyQ29udGV4dCksCj4gLSAgICAuaW5pdCAgICAgICAgICAgID0gcHBfaW5p dCwKPiAtICAgIC51bmluaXQgICAgICAgICAgPSBwcF91bmluaXQsCj4gLSAgICBGSUxURVJfSU5Q VVRTKHBwX2lucHV0cyksCj4gLSAgICBGSUxURVJfT1VUUFVUUyhmZl92aWRlb19kZWZhdWx0X2Zp bHRlcnBhZCksCj4gLSAgICBGSUxURVJfUElYRk1UU19BUlJBWShwaXhfZm10cyksCj4gLSAgICAu cHJvY2Vzc19jb21tYW5kID0gcHBfcHJvY2Vzc19jb21tYW5kLAo+IC19Owo+IGRpZmYgLS1naXQg YS9saWJhdnV0aWwvYXZ1dGlsLmggYi9saWJhdnV0aWwvYXZ1dGlsLmgKPiBpbmRleCBlZTcwOWZi YjJhYi4uYzhhZTExNGFiNmYgMTAwNjQ0Cj4gLS0tIGEvbGliYXZ1dGlsL2F2dXRpbC5oCj4gKysr IGIvbGliYXZ1dGlsL2F2dXRpbC5oCj4gQEAgLTQxLDcgKzQxLDYgQEAKPiAgICogQGxpIEByZWYg bGF2ZCAibGliYXZkZXZpY2UiIHNwZWNpYWwgZGV2aWNlcyBtdXhpbmcvZGVtdXhpbmcgbGlicmFy eQo+ICAgKiBAbGkgQHJlZiBsYXZ1ICJsaWJhdnV0aWwiIGNvbW1vbiB1dGlsaXR5IGxpYnJhcnkK PiAgICogQGxpIEByZWYgbHN3ciAibGlic3dyZXNhbXBsZSIgYXVkaW8gcmVzYW1wbGluZywgZm9y bWF0IGNvbnZlcnNpb24gYW5kCj4gbWl4aW5nCj4gLSAqIEBsaSBAcmVmIGxwcCAgImxpYnBvc3Rw cm9jIiBwb3N0IHByb2Nlc3NpbmcgbGlicmFyeQo+ICAgKiBAbGkgQHJlZiBsaWJzd3MgImxpYnN3 c2NhbGUiIGNvbG9yIGNvbnZlcnNpb24gYW5kIHNjYWxpbmcgbGlicmFyeQo+ICAgKgo+ICAgKiBA c2VjdGlvbiBmZm1wZWdfdmVyc2lvbmluZyBWZXJzaW9uaW5nIGFuZCBjb21wYXRpYmlsaXR5Cj4g ZGlmZiAtLWdpdCBhL2xpYnBvc3Rwcm9jL01ha2VmaWxlIGIvbGlicG9zdHByb2MvTWFrZWZpbGUK PiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCBkNzhmYzAyNzdmNC4uMDAwMDAwMDAw MDAKPiAtLS0gYS9saWJwb3N0cHJvYy9NYWtlZmlsZQo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSwy MyArMCwwIEBACj4gLU5BTUUgPSBwb3N0cHJvYwo+IC1ERVNDID0gRkZtcGVnIHBvc3Rwcm9jZXNz aW5nIGxpYnJhcnkKPiAtRkZMSUJTID0gYXZ1dGlsCj4gLQo+IC1IRUFERVJTID0gcG9zdHByb2Nl c3MuaCAgICAgICAgXAo+IC0gICAgICAgICAgdmVyc2lvbi5oICAgICAgICAgICAgXAo+IC0gICAg ICAgICAgdmVyc2lvbl9tYWpvci5oICAgICAgXAo+IC0KPiAtT0JKUyA9IHBvc3Rwcm9jZXNzLm8g ICAgICAgICAgIFwKPiAtICAgICAgIHZlcnNpb24ubyAgICAgICAgICAgICAgIFwKPiAtCj4gLVRF U1RPQkpTID0gdGVzdHMvdGVzdF91dGlscy5vICAgICAgICBcCj4gLQo+IC0jIFdpbmRvd3MgcmVz b3VyY2UgZmlsZQo+IC1TSExJQk9CSlMtJChIQVZFX0dOVV9XSU5EUkVTKSArPSBwb3N0cHJvY3Jl cy5vCj4gLQo+IC1URVNUUFJPR1MgPSBibG9ja3Rlc3QgICAgICAgICAgXAo+IC0gICAgICAgICAg ICBzdHJpcGV0ZXN0ICAgICAgICAgXAo+IC0gICAgICAgICAgICB0ZW1wdGVzdCAgICAgICAgICBc Cj4gLQo+IC0kKFNVQkRJUil0ZXN0cy9ibG9ja3Rlc3QkKEVYRVNVRik6ICAkKFNVQkRJUil0ZXN0 cy90ZXN0X3V0aWxzLm8KPiAtJChTVUJESVIpdGVzdHMvc3RyaXBldGVzdCQoRVhFU1VGKTogJChT VUJESVIpdGVzdHMvdGVzdF91dGlscy5vCj4gLSQoU1VCRElSKXRlc3RzL3RlbXB0ZXN0JChFWEVT VUYpOiAgJChTVUJESVIpdGVzdHMvdGVzdF91dGlscy5vCj4gZGlmZiAtLWdpdCBhL2xpYnBvc3Rw cm9jL2xpYnBvc3Rwcm9jLnYgYi9saWJwb3N0cHJvYy9saWJwb3N0cHJvYy52Cj4gZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMjczODFjNmFjYTMuLjAwMDAwMDAwMDAwCj4gLS0tIGEv bGlicG9zdHByb2MvbGlicG9zdHByb2Mudgo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSw3ICswLDAg QEAKPiAtTElCUE9TVFBST0NfTUFKT1Igewo+IC0gICAgZ2xvYmFsOgo+IC0gICAgICAgIHBvc3Rw cm9jXyo7Cj4gLSAgICAgICAgcHBfKjsKPiAtICAgIGxvY2FsOgo+IC0gICAgICAgICo7Cj4gLX07 Cj4gZGlmZiAtLWdpdCBhL2xpYnBvc3Rwcm9jL3Bvc3Rwcm9jZXNzLmMgYi9saWJwb3N0cHJvYy9w b3N0cHJvY2Vzcy5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggZWFiMjIyODkx OTIuLjAwMDAwMDAwMDAwCj4gLS0tIGEvbGlicG9zdHByb2MvcG9zdHByb2Nlc3MuYwo+ICsrKyAv ZGV2L251bGwKPiBAQCAtMSw5OTIgKzAsMCBAQAo+IC0vKgo+IC0gKiBDb3B5cmlnaHQgKEMpIDIw MDEtMjAwMyBNaWNoYWVsIE5pZWRlcm1heWVyIChtaWNoYWVsbmlAZ214LmF0KQo+IC0gKgo+IC0g KiBBbHRpVmVjIG9wdGltaXphdGlvbnMgKEMpIDIwMDQgUm9tYWluIERvbGJlYXUgPHJvbWFpbkBk b2xiZWF1Lm9yZz4KPiAtICoKPiAtICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+IC0g Kgo+IC0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQo+IC0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+IC0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+IC0gKiAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+IC0gKgo+IC0gKiBGRm1wZWcgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiAtICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK PiAtICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQo+IC0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgo+IC0gKgo+IC0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+IC0gKiBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+IC0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG cmFua2xpbiBTdHJlZXQKPiA8aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3NlYXJjaC81MStG cmFua2xpbitTdHJlZXQ/ZW50cnk9Z21haWwmc291cmNlPWc+LAo+IEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEgVVNBCj4gLSAqLwo+IC0KPiAtLyoqCj4gLSAqIEBmaWxlCj4gLSAq IHBvc3Rwcm9jZXNzaW5nLgo+IC0gKi8KPiAtCj4gLS8qCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgIEMgICAgICAgTU1YICAgICBNTVgyICAgIEFsdGlWZWMKPiAtaXNWZXJ0REMgICAgICAgICAg ICAgICAgRWMgICAgICBFYyAgICAgICAgICAgICAgRWMKPiAtaXNWZXJ0TWluTWF4T2sgICAgICAg ICAgRWMgICAgICBFYyAgICAgICAgICAgICAgRWMKPiAtZG9WZXJ0TG93UGFzcyAgICAgICAgICAg RSAgICAgICAgICAgICAgIGUgICAgICAgRWMKPiAtZG9WZXJ0RGVmRmlsdGVyICAgICAgICAgRWMg ICAgICBFYyAgICAgIGUgICAgICAgRWMKPiAtaXNIb3JpekRDICAgICAgICAgICAgICAgRWMgICAg ICBFYyAgICAgICAgICAgICAgRWMKPiAtaXNIb3Jpek1pbk1heE9rICAgICAgICAgYSAgICAgICBF ICAgICAgICAgICAgICAgRWMKPiAtZG9Ib3Jpekxvd1Bhc3MgICAgICAgICAgRSAgICAgICAgICAg ICAgIGUgICAgICAgRWMKPiAtZG9Ib3JpekRlZkZpbHRlciAgICAgICAgRWMgICAgICBFYyAgICAg IGUgICAgICAgRWMKPiAtZG9fYV9kZWJsb2NrICAgICAgICAgICAgRWMgICAgICBFICAgICAgIEVj Cj4gLWRlUmluZyAgICAgICAgICAgICAgICAgIEUgICAgICAgICAgICAgICBlICAgICAgIEVjcAo+ IC1WZXJ0aWNhbCBSS0FsZ28xICAgICAgICBFICAgICAgICAgICAgICAgYQo+IC1Ib3Jpem9udGFs IFJLQWxnbzEgICAgICAgICAgICAgICAgICAgICAgYQo+IC1WZXJ0aWNhbCBYMSMgICAgICAgICAg ICBhICAgICAgICAgICAgICAgRQo+IC1Ib3Jpem9udGFsIFgxIyAgICAgICAgICBhICAgICAgICAg ICAgICAgRQo+IC1MaW5JcG9sRGVpbnRlcmxhY2UgICAgICBlICAgICAgICAgICAgICAgRQo+IC1D dWJpY0lwb2xEZWludGVybGFjZSAgICBhICAgICAgICAgICAgICAgZQo+IC1MaW5CbGVuZERlaW50 ZXJsYWNlICAgICBlICAgICAgICAgICAgICAgRQo+IC1NZWRpYW5EZWludGVybGFjZSMgICAgICBF ICAgICAgIEVjICAgICAgRWMKPiAtVGVtcERlTm9pc2VyIyAgICAgICAgICAgRSAgICAgICAgICAg ICAgIGUgICAgICAgRWMKPiAtCj4gLSMgbW9yZSBvciBsZXNzIHNlbGZpbnZlbnRlZCBmaWx0ZXJz IHNvIHRoZSBleGFjdG5lc3MgaXMgbm90IHRvbyBtZWFuaW5nZnVsCj4gLUUgPSBFeGFjdCBpbXBs ZW1lbnRhdGlvbgo+IC1lID0gYWxtb3N0IGV4YWN0IGltcGxlbWVudGF0aW9uIChzbGlnaHRseSBk aWZmZXJlbnQgcm91bmRpbmcsLi4uKQo+IC1hID0gYWx0ZXJuYXRpdmUgLyBhcHByb3hpbWF0ZSBp bXBsCj4gLWMgPSBjaGVja2VkIGFnYWluc3QgdGhlIG90aGVyIGltcGxlbWVudGF0aW9ucyAoLXZv IG1kNSkKPiAtcCA9IHBhcnRpYWxseSBvcHRpbWl6ZWQsIHN0aWxsIHNvbWUgd29yayB0byBkbwo+ IC0qLwo+IC0KPiAtLyoKPiAtVE9ETzoKPiAtcmVkdWNlIHRoZSB0aW1lIHdhc3RlZCBvbiB0aGUg bWVtIHRyYW5zZmVyCj4gLXVucm9sbCBzdHVmZiBpZiBpbnN0cnVjdGlvbnMgZGVwZW5kIHRvbyBt dWNoIG9uIHRoZSBwcmlvciBvbmUKPiAtbW92ZSBZU2NhbGUgdGhpbmcgdG8gdGhlIGVuZCBpbnN0 ZWFkIG9mIGZpeGluZyBRUAo+IC13cml0ZSBhIGZhc3RlciBhbmQgaGlnaGVyIHF1YWxpdHkgZGVi bG9ja2luZyBmaWx0ZXIgOikKPiAtbWFrZSB0aGUgbWFpbmxvb3AgbW9yZSBmbGV4aWJsZSAodmFy aWFibGUgbnVtYmVyIG9mIGJsb2NrcyBhdCBvbmNlCj4gLSAgICAgICAgKHRoZSBpZi9lbHNlIHN0 dWZmIHBlciBibG9jayBpcyBzbG93aW5nIHRoaW5ncyBkb3duKQo+IC1jb21wYXJlIHRoZSBxdWFs aXR5ICYgc3BlZWQgb2YgYWxsIGZpbHRlcnMKPiAtc3BsaXQgdGhpcyBodWdlIGZpbGUKPiAtb3B0 aW1pemUgYyB2ZXJzaW9ucwo+IC10cnkgdG8gdW5yb2xsIGlubmVyIGZvcih4PTAgLi4uIGxvb3Ag dG8gYXZvaWQgdGhlc2UgZGFtbiBpZih4IC4uLiBjaGVja3MKPiAtLi4uCj4gLSovCj4gLQo+IC0v L0NoYW5nZWxvZzogdXNlIGdpdCBsb2cKPiAtCj4gLSNpbmNsdWRlIDxzdGRkZWYuaD4KPiAtI2lu Y2x1ZGUgPHN0ZGxpYi5oPgo+IC0jaW5jbHVkZSA8c3RyaW5nLmg+Cj4gLQo+IC0jaW5jbHVkZSAi Y29uZmlnLmgiCj4gLSNpbmNsdWRlICJsaWJhdnV0aWwvY29tbW9uLmgiCj4gLSNpbmNsdWRlICJs aWJhdnV0aWwvY3B1LmgiCj4gLSNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCj4g LSNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCj4gLS8vI3VuZGVmIEhBVkVfTU1YRVhUX0lOTElO RQo+IC0vLyN1bmRlZiBIQVZFX01NWF9JTkxJTkUKPiAtLy8jdW5kZWYgQVJDSF9YODYKPiAtLy8j ZGVmaW5lIERFQlVHX0JSSUdIVE5FU1MKPiAtI2luY2x1ZGUgInBvc3Rwcm9jZXNzLmgiCj4gLSNp bmNsdWRlICJwb3N0cHJvY2Vzc19pbnRlcm5hbC5oIgo+IC0jaW5jbHVkZSAibGliYXZ1dGlsL2F2 c3RyaW5nLmgiCj4gLQo+IC0jZGVmaW5lIEdFVF9NT0RFX0JVRkZFUl9TSVpFIDUwMAo+IC0jZGVm aW5lIE9QVElPTlNfQVJSQVlfU0laRSAxMAo+IC0jZGVmaW5lIEJMT0NLX1NJWkUgOAo+IC0jZGVm aW5lIFRFTVBfU1RSSURFIDgKPiAtLy8jZGVmaW5lIE5VTV9CTE9DS1NfQVRfT05DRSAxNiAvL25v dCB1c2VkIHlldAo+IC0KPiAtI2RlZmluZSBERVJJTkdfVEhSRVNIT0xEIDIwCj4gLQo+IC0jaWYg QVJDSF9YODYgJiYgSEFWRV9JTkxJTkVfQVNNCj4gLURFQ0xBUkVfQVNNX0NPTlNUKDgsIHVpbnQ2 NF90LCB3MDUpPSAweDAwMDUwMDA1MDAwNTAwMDVMTDsKPiAtREVDTEFSRV9BU01fQ09OU1QoOCwg dWludDY0X3QsIHcwNCk9IDB4MDAwNDAwMDQwMDA0MDAwNExMOwo+IC1ERUNMQVJFX0FTTV9DT05T VCg4LCB1aW50NjRfdCwgdzIwKT0gMHgwMDIwMDAyMDAwMjAwMDIwTEw7Cj4gLURFQ0xBUkVfQVNN X0NPTlNUKDgsIHVpbnQ2NF90LCBiMDApPSAweDAwMDAwMDAwMDAwMDAwMDBMTDsKPiAtREVDTEFS RV9BU01fQ09OU1QoOCwgdWludDY0X3QsIGIwMSk9IDB4MDEwMTAxMDEwMTAxMDEwMUxMOwo+IC1E RUNMQVJFX0FTTV9DT05TVCg4LCB1aW50NjRfdCwgYjA4KT0gMHgwODA4MDgwODA4MDgwODA4TEw7 Cj4gLURFQ0xBUkVfQVNNX0NPTlNUKDgsIHVpbnQ2NF90LCBiODApPSAweDgwODA4MDgwODA4MDgw ODBMTDsKPiAtI2VuZGlmCj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IFBQRmlsdGVyIGZpbHRl cnNbXT0KPiAtewo+IC0gICAgeyJoYiIsICJoZGVibG9jayIsICAgICAgICAgICAgICAxLCAxLCAz LCBIX0RFQkxPQ0t9LAo+IC0gICAgeyJ2YiIsICJ2ZGVibG9jayIsICAgICAgICAgICAgICAxLCAy LCA0LCBWX0RFQkxPQ0t9LAo+IC0vKiAgeyJociIsICJya2hkZWJsb2NrIiwgICAgICAgICAgICAx LCAxLCAzLCBIX1JLMV9GSUxURVJ9LAo+IC0gICAgeyJ2ciIsICJya3ZkZWJsb2NrIiwgICAgICAg ICAgICAxLCAyLCA0LCBWX1JLMV9GSUxURVJ9LCovCj4gLSAgICB7ImgxIiwgIngxaGRlYmxvY2si LCAgICAgICAgICAgIDEsIDEsIDMsIEhfWDFfRklMVEVSfSwKPiAtICAgIHsidjEiLCAieDF2ZGVi bG9jayIsICAgICAgICAgICAgMSwgMiwgNCwgVl9YMV9GSUxURVJ9LAo+IC0gICAgeyJoYSIsICJh aGRlYmxvY2siLCAgICAgICAgICAgICAxLCAxLCAzLCBIX0FfREVCTE9DS30sCj4gLSAgICB7InZh IiwgImF2ZGVibG9jayIsICAgICAgICAgICAgIDEsIDIsIDQsIFZfQV9ERUJMT0NLfSwKPiAtICAg IHsiZHIiLCAiZGVyaW5nIiwgICAgICAgICAgICAgICAgMSwgNSwgNiwgREVSSU5HfSwKPiAtICAg IHsiYWwiLCAiYXV0b2xldmVscyIsICAgICAgICAgICAgMCwgMSwgMiwgTEVWRUxfRklYfSwKPiAt ICAgIHsibGIiLCAibGluYmxlbmRkZWludCIsICAgICAgICAgMSwgMSwgNCwgTElORUFSX0JMRU5E X0RFSU5UX0ZJTFRFUn0sCj4gLSAgICB7ImxpIiwgImxpbmlwb2xkZWludCIsICAgICAgICAgIDEs IDEsIDQsIExJTkVBUl9JUE9MX0RFSU5UX0ZJTFRFUn0sCj4gLSAgICB7ImNpIiwgImN1YmljaXBv bGRlaW50IiwgICAgICAgIDEsIDEsIDQsIENVQklDX0lQT0xfREVJTlRfRklMVEVSfSwKPiAtICAg IHsibWQiLCAibWVkaWFuZGVpbnQiLCAgICAgICAgICAgMSwgMSwgNCwgTUVESUFOX0RFSU5UX0ZJ TFRFUn0sCj4gLSAgICB7ImZkIiwgImZmbXBlZ2RlaW50IiwgICAgICAgICAgIDEsIDEsIDQsIEZG TVBFR19ERUlOVF9GSUxURVJ9LAo+IC0gICAgeyJsNSIsICJsb3dwYXNzNSIsICAgICAgICAgICAg ICAxLCAxLCA0LCBMT1dQQVNTNV9ERUlOVF9GSUxURVJ9LAo+IC0gICAgeyJ0biIsICJ0bXBub2lz ZSIsICAgICAgICAgICAgICAxLCA3LCA4LCBURU1QX05PSVNFX0ZJTFRFUn0sCj4gLSAgICB7ImZx IiwgImZvcmNlcXVhbnQiLCAgICAgICAgICAgIDEsIDAsIDAsIEZPUkNFX1FVQU5UfSwKPiAtICAg IHsiYmUiLCAiYml0ZXhhY3QiLCAgICAgICAgICAgICAgMSwgMCwgMCwgQklURVhBQ1R9LAo+IC0g ICAgeyJ2aSIsICJ2aXN1YWxpemUiLCAgICAgICAgICAgICAxLCAwLCAwLCBWSVNVQUxJWkV9LAo+ IC0gICAge05VTEwsIE5VTEwsMCwwLDAsMH0gLy9FbmQgTWFya2VyCj4gLX07Cj4gLQo+IC1zdGF0 aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlcGxhY2VUYWJsZVtdPQo+IC17Cj4gLSAgICAiZGVmYXVs dCIsICAgICAgImhiOmEsdmI6YSxkcjphIiwKPiAtICAgICJkZSIsICAgICAgICAgICAiaGI6YSx2 YjphLGRyOmEiLAo+IC0gICAgImZhc3QiLCAgICAgICAgICJoMTphLHYxOmEsZHI6YSIsCj4gLSAg ICAiZmEiLCAgICAgICAgICAgImgxOmEsdjE6YSxkcjphIiwKPiAtICAgICJhYyIsICAgICAgICAg ICAiaGE6YToxMjg6Nyx2YTphLGRyOmEiLAo+IC0gICAgTlVMTCAvL0VuZCBNYXJrZXIKPiAtfTsK PiAtCj4gLS8qIFRoZSBob3Jpem9udGFsIGZ1bmN0aW9ucyBleGlzdCBvbmx5IGluIEMgYmVjYXVz ZSB0aGUgTU1YCj4gLSAqIGNvZGUgaXMgZmFzdGVyIHdpdGggdmVydGljYWwgZmlsdGVycyBhbmQg dHJhbnNwb3NpbmcuICovCj4gLQo+IC0vKioKPiAtICogQ2hlY2sgaWYgdGhlIGdpdmVuIDh4OCBC bG9jayBpcyBtb3N0bHkgImZsYXQiCj4gLSAqLwo+IC1zdGF0aWMgaW5saW5lIGludCBpc0hvcml6 RENfQyhjb25zdCB1aW50OF90IHNyY1tdLCBpbnQgc3RyaWRlLCBjb25zdAo+IFBQQ29udGV4dCAq YykKPiAtewo+IC0gICAgaW50IG51bUVxPSAwOwo+IC0gICAgaW50IHk7Cj4gLSAgICBjb25zdCBp bnQgZGNPZmZzZXQ9ICgoYy0+bm9uQlFQKmMtPnBwTW9kZS5iYXNlRGNEaWZmKT4+OCkgKyAxOwo+ IC0gICAgY29uc3QgaW50IGRjVGhyZXNob2xkPSBkY09mZnNldCoyICsgMTsKPiAtCj4gLSAgICBm b3IoeT0wOyB5PEJMT0NLX1NJWkU7IHkrKyl7Cj4gLSAgICAgICAgbnVtRXEgKz0gKCh1bnNpZ25l ZCkoc3JjWzBdIC0gc3JjWzFdICsgZGNPZmZzZXQpKSA8IGRjVGhyZXNob2xkOwo+IC0gICAgICAg IG51bUVxICs9ICgodW5zaWduZWQpKHNyY1sxXSAtIHNyY1syXSArIGRjT2Zmc2V0KSkgPCBkY1Ro cmVzaG9sZDsKPiAtICAgICAgICBudW1FcSArPSAoKHVuc2lnbmVkKShzcmNbMl0gLSBzcmNbM10g KyBkY09mZnNldCkpIDwgZGNUaHJlc2hvbGQ7Cj4gLSAgICAgICAgbnVtRXEgKz0gKCh1bnNpZ25l ZCkoc3JjWzNdIC0gc3JjWzRdICsgZGNPZmZzZXQpKSA8IGRjVGhyZXNob2xkOwo+IC0gICAgICAg IG51bUVxICs9ICgodW5zaWduZWQpKHNyY1s0XSAtIHNyY1s1XSArIGRjT2Zmc2V0KSkgPCBkY1Ro cmVzaG9sZDsKPiAtICAgICAgICBudW1FcSArPSAoKHVuc2lnbmVkKShzcmNbNV0gLSBzcmNbNl0g KyBkY09mZnNldCkpIDwgZGNUaHJlc2hvbGQ7Cj4gLSAgICAgICAgbnVtRXEgKz0gKCh1bnNpZ25l ZCkoc3JjWzZdIC0gc3JjWzddICsgZGNPZmZzZXQpKSA8IGRjVGhyZXNob2xkOwo+IC0gICAgICAg IHNyYys9IHN0cmlkZTsKPiAtICAgIH0KPiAtICAgIHJldHVybiBudW1FcSA+IGMtPnBwTW9kZS5m bGF0bmVzc1RocmVzaG9sZDsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIENoZWNrIGlmIHRoZSBtaWRk bGUgOHg4IEJsb2NrIGluIHRoZSBnaXZlbiA4eDE2IGJsb2NrIGlzIGZsYXQKPiAtICovCj4gLXN0 YXRpYyBpbmxpbmUgaW50IGlzVmVydERDX0MoY29uc3QgdWludDhfdCBzcmNbXSwgaW50IHN0cmlk ZSwgY29uc3QKPiBQUENvbnRleHQgKmMpCj4gLXsKPiAtICAgIGludCBudW1FcT0gMDsKPiAtICAg IGludCB5Owo+IC0gICAgY29uc3QgaW50IGRjT2Zmc2V0PSAoKGMtPm5vbkJRUCpjLT5wcE1vZGUu YmFzZURjRGlmZik+PjgpICsgMTsKPiAtICAgIGNvbnN0IGludCBkY1RocmVzaG9sZD0gZGNPZmZz ZXQqMiArIDE7Cj4gLQo+IC0gICAgc3JjKz0gc3RyaWRlKjQ7IC8vIHNyYyBwb2ludHMgdG8gYmVn aW4gb2YgdGhlIDh4OCBCbG9jawo+IC0gICAgZm9yKHk9MDsgeTxCTE9DS19TSVpFLTE7IHkrKyl7 Cj4gLSAgICAgICAgbnVtRXEgKz0gKCh1bnNpZ25lZCkoc3JjWzBdIC0gc3JjWzArc3RyaWRlXSAr IGRjT2Zmc2V0KSkgPAo+IGRjVGhyZXNob2xkOwo+IC0gICAgICAgIG51bUVxICs9ICgodW5zaWdu ZWQpKHNyY1sxXSAtIHNyY1sxK3N0cmlkZV0gKyBkY09mZnNldCkpIDwKPiBkY1RocmVzaG9sZDsK PiAtICAgICAgICBudW1FcSArPSAoKHVuc2lnbmVkKShzcmNbMl0gLSBzcmNbMitzdHJpZGVdICsg ZGNPZmZzZXQpKSA8Cj4gZGNUaHJlc2hvbGQ7Cj4gLSAgICAgICAgbnVtRXEgKz0gKCh1bnNpZ25l ZCkoc3JjWzNdIC0gc3JjWzMrc3RyaWRlXSArIGRjT2Zmc2V0KSkgPAo+IGRjVGhyZXNob2xkOwo+ IC0gICAgICAgIG51bUVxICs9ICgodW5zaWduZWQpKHNyY1s0XSAtIHNyY1s0K3N0cmlkZV0gKyBk Y09mZnNldCkpIDwKPiBkY1RocmVzaG9sZDsKPiAtICAgICAgICBudW1FcSArPSAoKHVuc2lnbmVk KShzcmNbNV0gLSBzcmNbNStzdHJpZGVdICsgZGNPZmZzZXQpKSA8Cj4gZGNUaHJlc2hvbGQ7Cj4g LSAgICAgICAgbnVtRXEgKz0gKCh1bnNpZ25lZCkoc3JjWzZdIC0gc3JjWzYrc3RyaWRlXSArIGRj T2Zmc2V0KSkgPAo+IGRjVGhyZXNob2xkOwo+IC0gICAgICAgIG51bUVxICs9ICgodW5zaWduZWQp KHNyY1s3XSAtIHNyY1s3K3N0cmlkZV0gKyBkY09mZnNldCkpIDwKPiBkY1RocmVzaG9sZDsKPiAt ICAgICAgICBzcmMrPSBzdHJpZGU7Cj4gLSAgICB9Cj4gLSAgICByZXR1cm4gbnVtRXEgPiBjLT5w cE1vZGUuZmxhdG5lc3NUaHJlc2hvbGQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgaW50IGlz SG9yaXpNaW5NYXhPa19DKGNvbnN0IHVpbnQ4X3Qgc3JjW10sIGludCBzdHJpZGUsIGludAo+IFFQ KQo+IC17Cj4gLSAgICBpbnQgaTsKPiAtICAgIGZvcihpPTA7IGk8MjsgaSsrKXsKPiAtICAgICAg ICBpZigodW5zaWduZWQpKHNyY1swXSAtIHNyY1s1XSArIDIqUVApID4gNCpRUCkgcmV0dXJuIDA7 Cj4gLSAgICAgICAgc3JjICs9IHN0cmlkZTsKPiAtICAgICAgICBpZigodW5zaWduZWQpKHNyY1sy XSAtIHNyY1s3XSArIDIqUVApID4gNCpRUCkgcmV0dXJuIDA7Cj4gLSAgICAgICAgc3JjICs9IHN0 cmlkZTsKPiAtICAgICAgICBpZigodW5zaWduZWQpKHNyY1s0XSAtIHNyY1sxXSArIDIqUVApID4g NCpRUCkgcmV0dXJuIDA7Cj4gLSAgICAgICAgc3JjICs9IHN0cmlkZTsKPiAtICAgICAgICBpZigo dW5zaWduZWQpKHNyY1s2XSAtIHNyY1szXSArIDIqUVApID4gNCpRUCkgcmV0dXJuIDA7Cj4gLSAg ICAgICAgc3JjICs9IHN0cmlkZTsKPiAtICAgIH0KPiAtICAgIHJldHVybiAxOwo+IC19Cj4gLQo+ IC1zdGF0aWMgaW5saW5lIGludCBpc1ZlcnRNaW5NYXhPa19DKGNvbnN0IHVpbnQ4X3Qgc3JjW10s IGludCBzdHJpZGUsIGludAo+IFFQKQo+IC17Cj4gLSAgICBpbnQgeDsKPiAtICAgIHNyYys9IHN0 cmlkZSo0Owo+IC0gICAgZm9yKHg9MDsgeDxCTE9DS19TSVpFOyB4Kz00KXsKPiAtICAgICAgICBp ZigodW5zaWduZWQpKHNyY1sgIHggKyAwKnN0cmlkZV0gLSBzcmNbICB4ICsgNSpzdHJpZGVdICsg MipRUCkgPgo+IDQqUVApIHJldHVybiAwOwo+IC0gICAgICAgIGlmKCh1bnNpZ25lZCkoc3JjWzEr eCArIDIqc3RyaWRlXSAtIHNyY1sxK3ggKyA3KnN0cmlkZV0gKyAyKlFQKSA+Cj4gNCpRUCkgcmV0 dXJuIDA7Cj4gLSAgICAgICAgaWYoKHVuc2lnbmVkKShzcmNbMit4ICsgNCpzdHJpZGVdIC0gc3Jj WzIreCArIDEqc3RyaWRlXSArIDIqUVApID4KPiA0KlFQKSByZXR1cm4gMDsKPiAtICAgICAgICBp ZigodW5zaWduZWQpKHNyY1szK3ggKyA2KnN0cmlkZV0gLSBzcmNbMyt4ICsgMypzdHJpZGVdICsg MipRUCkgPgo+IDQqUVApIHJldHVybiAwOwo+IC0gICAgfQo+IC0gICAgcmV0dXJuIDE7Cj4gLX0K PiAtCj4gLXN0YXRpYyBpbmxpbmUgaW50IGhvcml6Q2xhc3NpZnlfQyhjb25zdCB1aW50OF90IHNy Y1tdLCBpbnQgc3RyaWRlLCBjb25zdAo+IFBQQ29udGV4dCAqYykKPiAtewo+IC0gICAgaWYoIGlz SG9yaXpEQ19DKHNyYywgc3RyaWRlLCBjKSApewo+IC0gICAgICAgIHJldHVybiBpc0hvcml6TWlu TWF4T2tfQyhzcmMsIHN0cmlkZSwgYy0+UVApOwo+IC0gICAgfWVsc2V7Cj4gLSAgICAgICAgcmV0 dXJuIDI7Cj4gLSAgICB9Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgaW50IHZlcnRDbGFzc2lm eV9DKGNvbnN0IHVpbnQ4X3Qgc3JjW10sIGludCBzdHJpZGUsIGNvbnN0Cj4gUFBDb250ZXh0ICpj KQo+IC17Cj4gLSAgICBpZiggaXNWZXJ0RENfQyhzcmMsIHN0cmlkZSwgYykgKXsKPiAtICAgICAg ICByZXR1cm4gaXNWZXJ0TWluTWF4T2tfQyhzcmMsIHN0cmlkZSwgYy0+UVApOwo+IC0gICAgfWVs c2V7Cj4gLSAgICAgICAgcmV0dXJuIDI7Cj4gLSAgICB9Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxp bmUgdm9pZCBkb0hvcml6RGVmRmlsdGVyX0ModWludDhfdCBkc3RbXSwgaW50IHN0cmlkZSwgY29u c3QKPiBQUENvbnRleHQgKmMpCj4gLXsKPiAtICAgIGludCB5Owo+IC0gICAgZm9yKHk9MDsgeTxC TE9DS19TSVpFOyB5Kyspewo+IC0gICAgICAgIGNvbnN0IGludCBtaWRkbGVFbmVyZ3k9IDUqKGRz dFs0XSAtIGRzdFszXSkgKyAyKihkc3RbMl0gLSBkc3RbNV0pOwo+IC0KPiAtICAgICAgICBpZihG RkFCUyhtaWRkbGVFbmVyZ3kpIDwgOCpjLT5RUCl7Cj4gLSAgICAgICAgICAgIGNvbnN0IGludCBx PShkc3RbM10gLSBkc3RbNF0pLzI7Cj4gLSAgICAgICAgICAgIGNvbnN0IGludCBsZWZ0RW5lcmd5 PSAgNSooZHN0WzJdIC0gZHN0WzFdKSArIDIqKGRzdFswXSAtCj4gZHN0WzNdKTsKPiAtICAgICAg ICAgICAgY29uc3QgaW50IHJpZ2h0RW5lcmd5PSA1Kihkc3RbNl0gLSBkc3RbNV0pICsgMiooZHN0 WzRdIC0KPiBkc3RbN10pOwo+IC0KPiAtICAgICAgICAgICAgaW50IGQ9IEZGQUJTKG1pZGRsZUVu ZXJneSkgLSBGRk1JTiggRkZBQlMobGVmdEVuZXJneSksCj4gRkZBQlMocmlnaHRFbmVyZ3kpICk7 Cj4gLSAgICAgICAgICAgIGQ9IEZGTUFYKGQsIDApOwo+IC0KPiAtICAgICAgICAgICAgZD0gKDUq ZCArIDMyKSA+PiA2Owo+IC0gICAgICAgICAgICBkKj0gRkZTSUdOKC1taWRkbGVFbmVyZ3kpOwo+ IC0KPiAtICAgICAgICAgICAgaWYocT4wKQo+IC0gICAgICAgICAgICB7Cj4gLSAgICAgICAgICAg ICAgICBkID0gRkZNQVgoZCwgMCk7Cj4gLSAgICAgICAgICAgICAgICBkID0gRkZNSU4oZCwgcSk7 Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgZWxzZQo+IC0gICAgICAgICAgICB7Cj4g LSAgICAgICAgICAgICAgICBkID0gRkZNSU4oZCwgMCk7Cj4gLSAgICAgICAgICAgICAgICBkID0g RkZNQVgoZCwgcSk7Cj4gLSAgICAgICAgICAgIH0KPiAtCj4gLSAgICAgICAgICAgIGRzdFszXS09 IGQ7Cj4gLSAgICAgICAgICAgIGRzdFs0XSs9IGQ7Cj4gLSAgICAgICAgfQo+IC0gICAgICAgIGRz dCs9IHN0cmlkZTsKPiAtICAgIH0KPiAtfQo+IC0KPiAtLyoqCj4gLSAqIERvIGEgaG9yaXpvbnRh bCBsb3cgcGFzcyBmaWx0ZXIgb24gdGhlIDEweDggYmxvY2sgKGRzdCBwb2ludHMgdG8KPiBtaWRk bGUgOHg4IEJsb2NrKQo+IC0gKiB1c2luZyB0aGUgOS1UYXAgRmlsdGVyICgxLDEsMiwyLDQsMiwy LDEsMSkvMTYgKEMgdmVyc2lvbikKPiAtICovCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBkb0hvcml6 TG93UGFzc19DKHVpbnQ4X3QgZHN0W10sIGludCBzdHJpZGUsIGNvbnN0Cj4gUFBDb250ZXh0ICpj KQo+IC17Cj4gLSAgICBpbnQgeTsKPiAtICAgIGZvcih5PTA7IHk8QkxPQ0tfU0laRTsgeSsrKXsK PiAtICAgICAgICBjb25zdCBpbnQgZmlyc3Q9IEZGQUJTKGRzdFstMV0gLSBkc3RbMF0pIDwgYy0+ UVAgPyBkc3RbLTFdIDoKPiBkc3RbMF07Cj4gLSAgICAgICAgY29uc3QgaW50IGxhc3Q9IEZGQUJT KGRzdFs4XSAtIGRzdFs3XSkgPCBjLT5RUCA/IGRzdFs4XSA6IGRzdFs3XTsKPiAtCj4gLSAgICAg ICAgaW50IHN1bXNbMTBdOwo+IC0gICAgICAgIHN1bXNbMF0gPSA0KmZpcnN0ICsgZHN0WzBdICsg ZHN0WzFdICsgZHN0WzJdICsgNDsKPiAtICAgICAgICBzdW1zWzFdID0gc3Vtc1swXSAtIGZpcnN0 ICArIGRzdFszXTsKPiAtICAgICAgICBzdW1zWzJdID0gc3Vtc1sxXSAtIGZpcnN0ICArIGRzdFs0 XTsKPiAtICAgICAgICBzdW1zWzNdID0gc3Vtc1syXSAtIGZpcnN0ICArIGRzdFs1XTsKPiAtICAg ICAgICBzdW1zWzRdID0gc3Vtc1szXSAtIGZpcnN0ICArIGRzdFs2XTsKPiAtICAgICAgICBzdW1z WzVdID0gc3Vtc1s0XSAtIGRzdFswXSArIGRzdFs3XTsKPiAtICAgICAgICBzdW1zWzZdID0gc3Vt c1s1XSAtIGRzdFsxXSArIGxhc3Q7Cj4gLSAgICAgICAgc3Vtc1s3XSA9IHN1bXNbNl0gLSBkc3Rb Ml0gKyBsYXN0Owo+IC0gICAgICAgIHN1bXNbOF0gPSBzdW1zWzddIC0gZHN0WzNdICsgbGFzdDsK PiAtICAgICAgICBzdW1zWzldID0gc3Vtc1s4XSAtIGRzdFs0XSArIGxhc3Q7Cj4gLQo+IC0gICAg ICAgIGRzdFswXT0gKHN1bXNbMF0gKyBzdW1zWzJdICsgMipkc3RbMF0pPj40Owo+IC0gICAgICAg IGRzdFsxXT0gKHN1bXNbMV0gKyBzdW1zWzNdICsgMipkc3RbMV0pPj40Owo+IC0gICAgICAgIGRz dFsyXT0gKHN1bXNbMl0gKyBzdW1zWzRdICsgMipkc3RbMl0pPj40Owo+IC0gICAgICAgIGRzdFsz XT0gKHN1bXNbM10gKyBzdW1zWzVdICsgMipkc3RbM10pPj40Owo+IC0gICAgICAgIGRzdFs0XT0g KHN1bXNbNF0gKyBzdW1zWzZdICsgMipkc3RbNF0pPj40Owo+IC0gICAgICAgIGRzdFs1XT0gKHN1 bXNbNV0gKyBzdW1zWzddICsgMipkc3RbNV0pPj40Owo+IC0gICAgICAgIGRzdFs2XT0gKHN1bXNb Nl0gKyBzdW1zWzhdICsgMipkc3RbNl0pPj40Owo+IC0gICAgICAgIGRzdFs3XT0gKHN1bXNbN10g KyBzdW1zWzldICsgMipkc3RbN10pPj40Owo+IC0KPiAtICAgICAgICBkc3QrPSBzdHJpZGU7Cj4g LSAgICB9Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBFeHBlcmltZW50YWwgRmlsdGVyIDEgKEhvcml6 b250YWwpCj4gLSAqIHdpbGwgbm90IGRhbWFnZSBsaW5lYXIgZ3JhZGllbnRzCj4gLSAqIEZsYXQg YmxvY2tzIHNob3VsZCBsb29rIGxpa2UgdGhleSB3ZXJlIHBhc3NlZCB0aHJvdWdoIHRoZQo+ICgx LDEsMiwyLDQsMiwyLDEsMSkgOS1UYXAgZmlsdGVyCj4gLSAqIGNhbiBvbmx5IHNtb290aCBibG9j a3MgYXQgdGhlIGV4cGVjdGVkIGxvY2F0aW9ucyAoaXQgY2Fubm90IHNtb290aAo+IHRoZW0gaWYg dGhleSBkaWQgbW92ZSkKPiAtICogTU1YMiB2ZXJzaW9uIGRvZXMgY29ycmVjdCBjbGlwcGluZyBD IHZlcnNpb24gZG9lcyBub3QKPiAtICogbm90IGlkZW50aWNhbCB3aXRoIHRoZSB2ZXJ0aWNhbCBv bmUKPiAtICovCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBob3JpelgxRmlsdGVyKHVpbnQ4X3QgKnNy YywgaW50IHN0cmlkZSwgaW50IFFQKQo+IC17Cj4gLSAgICBpbnQgeTsKPiAtICAgIHN0YXRpYyB1 aW50NjRfdCBsdXRbMjU2XTsKPiAtICAgIGlmKCFsdXRbMjU1XSkKPiAtICAgIHsKPiAtICAgICAg ICBpbnQgaTsKPiAtICAgICAgICBmb3IoaT0wOyBpPDI1NjsgaSsrKQo+IC0gICAgICAgIHsKPiAt ICAgICAgICAgICAgaW50IHY9IGkgPCAxMjggPyAyKmkgOiAyKihpLTI1Nik7Cj4gLS8qCj4gLS8v U2ltdWxhdGUgMTEyMjQyMjExIDktVGFwIGZpbHRlcgo+IC0gICAgICAgICAgICB1aW50NjRfdCBh PSAodi8xNikgICYgMHhGRjsKPiAtICAgICAgICAgICAgdWludDY0X3QgYj0gKHYvOCkgICAmIDB4 RkY7Cj4gLSAgICAgICAgICAgIHVpbnQ2NF90IGM9ICh2LzQpICAgJiAweEZGOwo+IC0gICAgICAg ICAgICB1aW50NjRfdCBkPSAoMyp2LzgpICYgMHhGRjsKPiAtKi8KPiAtLy9TaW11bGF0ZSBwaWVj ZXdpc2UgbGluZWFyIGludGVycG9sYXRpb24KPiAtICAgICAgICAgICAgdWludDY0X3QgYT0gKHYv MTYpICAgJiAweEZGOwo+IC0gICAgICAgICAgICB1aW50NjRfdCBiPSAodiozLzE2KSAmIDB4RkY7 Cj4gLSAgICAgICAgICAgIHVpbnQ2NF90IGM9ICh2KjUvMTYpICYgMHhGRjsKPiAtICAgICAgICAg ICAgdWludDY0X3QgZD0gKDcqdi8xNikgJiAweEZGOwo+IC0gICAgICAgICAgICB1aW50NjRfdCBB PSAoMHgxMDAgLSBhKSYweEZGOwo+IC0gICAgICAgICAgICB1aW50NjRfdCBCPSAoMHgxMDAgLSBi KSYweEZGOwo+IC0gICAgICAgICAgICB1aW50NjRfdCBDPSAoMHgxMDAgLSBjKSYweEZGOwo+IC0g ICAgICAgICAgICB1aW50NjRfdCBEPSAoMHgxMDAgLSBjKSYweEZGOwo+IC0KPiAtICAgICAgICAg ICAgbHV0W2ldICAgPSAoYTw8NTYpIHwgKGI8PDQ4KSB8IChjPDw0MCkgfCAoZDw8MzIpIHwKPiAt ICAgICAgICAgICAgICAgICAgICAgICAoRDw8MjQpIHwgKEM8PDE2KSB8IChCPDw4KSAgfCAoQSk7 Cj4gLSAgICAgICAgICAgIC8vbHV0W2ldID0gKHY8PDMyKSB8ICh2PDwyNCk7Cj4gLSAgICAgICAg fQo+IC0gICAgfQo+IC0KPiAtICAgIGZvcih5PTA7IHk8QkxPQ0tfU0laRTsgeSsrKXsKPiAtICAg ICAgICBpbnQgYT0gc3JjWzFdIC0gc3JjWzJdOwo+IC0gICAgICAgIGludCBiPSBzcmNbM10gLSBz cmNbNF07Cj4gLSAgICAgICAgaW50IGM9IHNyY1s1XSAtIHNyY1s2XTsKPiAtCj4gLSAgICAgICAg aW50IGQ9IEZGTUFYKEZGQUJTKGIpIC0gKEZGQUJTKGEpICsgRkZBQlMoYykpLzIsIDApOwo+IC0K PiAtICAgICAgICBpZihkIDwgUVApewo+IC0gICAgICAgICAgICBpbnQgdiA9IGQgKiBGRlNJR04o LWIpOwo+IC0KPiAtICAgICAgICAgICAgc3JjWzFdICs9di84Owo+IC0gICAgICAgICAgICBzcmNb Ml0gKz12LzQ7Cj4gLSAgICAgICAgICAgIHNyY1szXSArPTMqdi84Owo+IC0gICAgICAgICAgICBz cmNbNF0gLT0zKnYvODsKPiAtICAgICAgICAgICAgc3JjWzVdIC09di80Owo+IC0gICAgICAgICAg ICBzcmNbNl0gLT12Lzg7Cj4gLSAgICAgICAgfQo+IC0gICAgICAgIHNyYys9c3RyaWRlOwo+IC0g ICAgfQo+IC19Cj4gLQo+IC0vKioKPiAtICogYWNjdXJhdGUgZGVibG9jayBmaWx0ZXIKPiAtICov Cj4gLXN0YXRpYyBhdl9hbHdheXNfaW5saW5lIHZvaWQgZG9fYV9kZWJsb2NrX0ModWludDhfdCAq c3JjLCBpbnQgc3RlcCwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgc3RyaWRlLCBjb25zdCBQUENvbnRleHQKPiAqYywgaW50IG1vZGUpCj4gLXsKPiAt ICAgIGludCB5Owo+IC0gICAgY29uc3QgaW50IFFQPSBjLT5RUDsKPiAtICAgIGNvbnN0IGludCBk Y09mZnNldD0gKChjLT5ub25CUVAqYy0+cHBNb2RlLmJhc2VEY0RpZmYpPj44KSArIDE7Cj4gLSAg ICBjb25zdCBpbnQgZGNUaHJlc2hvbGQ9IGRjT2Zmc2V0KjIgKyAxOwo+IC0KPiAtICAgIHNyYys9 IHN0ZXAqNDsgLy8gc3JjIHBvaW50cyB0byBiZWdpbiBvZiB0aGUgOHg4IEJsb2NrCj4gLSAgICBm b3IoeT0wOyB5PDg7IHkrKyl7Cj4gLSAgICAgICAgaW50IG51bUVxPSAwOwo+IC0KPiAtICAgICAg ICBudW1FcSArPSAoKHVuc2lnbmVkKShzcmNbLTEqc3RlcF0gLSBzcmNbMCpzdGVwXSArIGRjT2Zm c2V0KSkgPAo+IGRjVGhyZXNob2xkOwo+IC0gICAgICAgIG51bUVxICs9ICgodW5zaWduZWQpKHNy Y1sgMCpzdGVwXSAtIHNyY1sxKnN0ZXBdICsgZGNPZmZzZXQpKSA8Cj4gZGNUaHJlc2hvbGQ7Cj4g LSAgICAgICAgbnVtRXEgKz0gKCh1bnNpZ25lZCkoc3JjWyAxKnN0ZXBdIC0gc3JjWzIqc3RlcF0g KyBkY09mZnNldCkpIDwKPiBkY1RocmVzaG9sZDsKPiAtICAgICAgICBudW1FcSArPSAoKHVuc2ln bmVkKShzcmNbIDIqc3RlcF0gLSBzcmNbMypzdGVwXSArIGRjT2Zmc2V0KSkgPAo+IGRjVGhyZXNo b2xkOwo+IC0gICAgICAgIG51bUVxICs9ICgodW5zaWduZWQpKHNyY1sgMypzdGVwXSAtIHNyY1s0 KnN0ZXBdICsgZGNPZmZzZXQpKSA8Cj4gZGNUaHJlc2hvbGQ7Cj4gLSAgICAgICAgbnVtRXEgKz0g KCh1bnNpZ25lZCkoc3JjWyA0KnN0ZXBdIC0gc3JjWzUqc3RlcF0gKyBkY09mZnNldCkpIDwKPiBk Y1RocmVzaG9sZDsKPiAtICAgICAgICBudW1FcSArPSAoKHVuc2lnbmVkKShzcmNbIDUqc3RlcF0g LSBzcmNbNipzdGVwXSArIGRjT2Zmc2V0KSkgPAo+IGRjVGhyZXNob2xkOwo+IC0gICAgICAgIG51 bUVxICs9ICgodW5zaWduZWQpKHNyY1sgNipzdGVwXSAtIHNyY1s3KnN0ZXBdICsgZGNPZmZzZXQp KSA8Cj4gZGNUaHJlc2hvbGQ7Cj4gLSAgICAgICAgbnVtRXEgKz0gKCh1bnNpZ25lZCkoc3JjWyA3 KnN0ZXBdIC0gc3JjWzgqc3RlcF0gKyBkY09mZnNldCkpIDwKPiBkY1RocmVzaG9sZDsKPiAtICAg ICAgICBpZihudW1FcSA+IGMtPnBwTW9kZS5mbGF0bmVzc1RocmVzaG9sZCl7Cj4gLSAgICAgICAg ICAgIGludCBtaW4sIG1heCwgeDsKPiAtCj4gLSAgICAgICAgICAgIGlmKHNyY1swXSA+IHNyY1tz dGVwXSl7Cj4gLSAgICAgICAgICAgICAgICBtYXg9IHNyY1swXTsKPiAtICAgICAgICAgICAgICAg IG1pbj0gc3JjW3N0ZXBdOwo+IC0gICAgICAgICAgICB9ZWxzZXsKPiAtICAgICAgICAgICAgICAg IG1heD0gc3JjW3N0ZXBdOwo+IC0gICAgICAgICAgICAgICAgbWluPSBzcmNbMF07Cj4gLSAgICAg ICAgICAgIH0KPiAtICAgICAgICAgICAgZm9yKHg9MjsgeDw4OyB4Kz0yKXsKPiAtICAgICAgICAg ICAgICAgIGlmKHNyY1t4KnN0ZXBdID4gc3JjWyh4KzEpKnN0ZXBdKXsKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgaWYoc3JjW3ggICAgKnN0ZXBdID4gbWF4KSBtYXg9IHNyY1sgeCAgICpzdGVw XTsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3JjWyh4KzEpKnN0ZXBdIDwgbWluKSBt aW49IHNyY1soeCsxKSpzdGVwXTsKPiAtICAgICAgICAgICAgICAgIH1lbHNlewo+IC0gICAgICAg ICAgICAgICAgICAgICAgICBpZihzcmNbKHgrMSkqc3RlcF0gPiBtYXgpIG1heD0gc3JjWyh4KzEp KnN0ZXBdOwo+IC0gICAgICAgICAgICAgICAgICAgICAgICBpZihzcmNbIHggICAqc3RlcF0gPCBt aW4pIG1pbj0gc3JjWyB4ICAgKnN0ZXBdOwo+IC0gICAgICAgICAgICAgICAgfQo+IC0gICAgICAg ICAgICB9Cj4gLSAgICAgICAgICAgIGlmKG1heC1taW4gPCAyKlFQKXsKPiAtICAgICAgICAgICAg ICAgIGNvbnN0IGludCBmaXJzdD0gRkZBQlMoc3JjWy0xKnN0ZXBdIC0gc3JjWzBdKSA8IFFQID8K PiBzcmNbLTEqc3RlcF0gOiBzcmNbMF07Cj4gLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGFz dD0gRkZBQlMoc3JjWzgqc3RlcF0gLSBzcmNbNypzdGVwXSkgPCBRUCA/Cj4gc3JjWzgqc3RlcF0g OiBzcmNbNypzdGVwXTsKPiAtCj4gLSAgICAgICAgICAgICAgICBpbnQgc3Vtc1sxMF07Cj4gLSAg ICAgICAgICAgICAgICBzdW1zWzBdID0gNCpmaXJzdCArIHNyY1swKnN0ZXBdICsgc3JjWzEqc3Rl cF0gKwo+IHNyY1syKnN0ZXBdICsgNDsKPiAtICAgICAgICAgICAgICAgIHN1bXNbMV0gPSBzdW1z WzBdIC0gZmlyc3QgICAgICAgKyBzcmNbMypzdGVwXTsKPiAtICAgICAgICAgICAgICAgIHN1bXNb Ml0gPSBzdW1zWzFdIC0gZmlyc3QgICAgICAgKyBzcmNbNCpzdGVwXTsKPiAtICAgICAgICAgICAg ICAgIHN1bXNbM10gPSBzdW1zWzJdIC0gZmlyc3QgICAgICAgKyBzcmNbNSpzdGVwXTsKPiAtICAg ICAgICAgICAgICAgIHN1bXNbNF0gPSBzdW1zWzNdIC0gZmlyc3QgICAgICAgKyBzcmNbNipzdGVw XTsKPiAtICAgICAgICAgICAgICAgIHN1bXNbNV0gPSBzdW1zWzRdIC0gc3JjWzAqc3RlcF0gKyBz cmNbNypzdGVwXTsKPiAtICAgICAgICAgICAgICAgIHN1bXNbNl0gPSBzdW1zWzVdIC0gc3JjWzEq c3RlcF0gKyBsYXN0Owo+IC0gICAgICAgICAgICAgICAgc3Vtc1s3XSA9IHN1bXNbNl0gLSBzcmNb MipzdGVwXSArIGxhc3Q7Cj4gLSAgICAgICAgICAgICAgICBzdW1zWzhdID0gc3Vtc1s3XSAtIHNy Y1szKnN0ZXBdICsgbGFzdDsKPiAtICAgICAgICAgICAgICAgIHN1bXNbOV0gPSBzdW1zWzhdIC0g c3JjWzQqc3RlcF0gKyBsYXN0Owo+IC0KPiAtICAgICAgICAgICAgICAgIGlmIChtb2RlICYgVklT VUFMSVpFKSB7Cj4gLSAgICAgICAgICAgICAgICAgICAgc3JjWzAqc3RlcF0gPQo+IC0gICAgICAg ICAgICAgICAgICAgIHNyY1sxKnN0ZXBdID0KPiAtICAgICAgICAgICAgICAgICAgICBzcmNbMipz dGVwXSA9Cj4gLSAgICAgICAgICAgICAgICAgICAgc3JjWzMqc3RlcF0gPQo+IC0gICAgICAgICAg ICAgICAgICAgIHNyY1s0KnN0ZXBdID0KPiAtICAgICAgICAgICAgICAgICAgICBzcmNbNSpzdGVw XSA9Cj4gLSAgICAgICAgICAgICAgICAgICAgc3JjWzYqc3RlcF0gPQo+IC0gICAgICAgICAgICAg ICAgICAgIHNyY1s3KnN0ZXBdID0gMTI4Owo+IC0gICAgICAgICAgICAgICAgfQo+IC0gICAgICAg ICAgICAgICAgc3JjWzAqc3RlcF09IChzdW1zWzBdICsgc3Vtc1syXSArIDIqc3JjWzAqc3RlcF0p Pj40Owo+IC0gICAgICAgICAgICAgICAgc3JjWzEqc3RlcF09IChzdW1zWzFdICsgc3Vtc1szXSAr IDIqc3JjWzEqc3RlcF0pPj40Owo+IC0gICAgICAgICAgICAgICAgc3JjWzIqc3RlcF09IChzdW1z WzJdICsgc3Vtc1s0XSArIDIqc3JjWzIqc3RlcF0pPj40Owo+IC0gICAgICAgICAgICAgICAgc3Jj WzMqc3RlcF09IChzdW1zWzNdICsgc3Vtc1s1XSArIDIqc3JjWzMqc3RlcF0pPj40Owo+IC0gICAg ICAgICAgICAgICAgc3JjWzQqc3RlcF09IChzdW1zWzRdICsgc3Vtc1s2XSArIDIqc3JjWzQqc3Rl cF0pPj40Owo+IC0gICAgICAgICAgICAgICAgc3JjWzUqc3RlcF09IChzdW1zWzVdICsgc3Vtc1s3 XSArIDIqc3JjWzUqc3RlcF0pPj40Owo+IC0gICAgICAgICAgICAgICAgc3JjWzYqc3RlcF09IChz dW1zWzZdICsgc3Vtc1s4XSArIDIqc3JjWzYqc3RlcF0pPj40Owo+IC0gICAgICAgICAgICAgICAg c3JjWzcqc3RlcF09IChzdW1zWzddICsgc3Vtc1s5XSArIDIqc3JjWzcqc3RlcF0pPj40Owo+IC0g ICAgICAgICAgICB9Cj4gLSAgICAgICAgfWVsc2V7Cj4gLSAgICAgICAgICAgIGNvbnN0IGludCBt aWRkbGVFbmVyZ3k9IDUqKHNyY1s0KnN0ZXBdIC0gc3JjWzMqc3RlcF0pICsKPiAyKihzcmNbMipz dGVwXSAtIHNyY1s1KnN0ZXBdKTsKPiAtCj4gLSAgICAgICAgICAgIGlmKEZGQUJTKG1pZGRsZUVu ZXJneSkgPCA4KlFQKXsKPiAtICAgICAgICAgICAgICAgIGNvbnN0IGludCBxPShzcmNbMypzdGVw XSAtIHNyY1s0KnN0ZXBdKS8yOwo+IC0gICAgICAgICAgICAgICAgY29uc3QgaW50IGxlZnRFbmVy Z3k9ICA1KihzcmNbMipzdGVwXSAtIHNyY1sxKnN0ZXBdKSArCj4gMiooc3JjWzAqc3RlcF0gLSBz cmNbMypzdGVwXSk7Cj4gLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmlnaHRFbmVyZ3k9IDUq KHNyY1s2KnN0ZXBdIC0gc3JjWzUqc3RlcF0pICsKPiAyKihzcmNbNCpzdGVwXSAtIHNyY1s3KnN0 ZXBdKTsKPiAtCj4gLSAgICAgICAgICAgICAgICBpbnQgZD0gRkZBQlMobWlkZGxlRW5lcmd5KSAt IEZGTUlOKCBGRkFCUyhsZWZ0RW5lcmd5KSwKPiBGRkFCUyhyaWdodEVuZXJneSkgKTsKPiAtICAg ICAgICAgICAgICAgIGQ9IEZGTUFYKGQsIDApOwo+IC0KPiAtICAgICAgICAgICAgICAgIGQ9ICg1 KmQgKyAzMikgPj4gNjsKPiAtICAgICAgICAgICAgICAgIGQqPSBGRlNJR04oLW1pZGRsZUVuZXJn eSk7Cj4gLQo+IC0gICAgICAgICAgICAgICAgaWYocT4wKXsKPiAtICAgICAgICAgICAgICAgICAg ICBkID0gRkZNQVgoZCwgMCk7Cj4gLSAgICAgICAgICAgICAgICAgICAgZCA9IEZGTUlOKGQsIHEp Owo+IC0gICAgICAgICAgICAgICAgfWVsc2V7Cj4gLSAgICAgICAgICAgICAgICAgICAgZCA9IEZG TUlOKGQsIDApOwo+IC0gICAgICAgICAgICAgICAgICAgIGQgPSBGRk1BWChkLCBxKTsKPiAtICAg ICAgICAgICAgICAgIH0KPiAtCj4gLSAgICAgICAgICAgICAgICBpZiAoKG1vZGUgJiBWSVNVQUxJ WkUpICYmIGQpIHsKPiAtICAgICAgICAgICAgICAgICAgICBkPSAoZCA8IDApID8gMzIgOiAtMzI7 Cj4gLSAgICAgICAgICAgICAgICAgICAgc3JjWzMqc3RlcF09IGF2X2NsaXBfdWludDgoc3JjWzMq c3RlcF0gLSBkKTsKPiAtICAgICAgICAgICAgICAgICAgICBzcmNbNCpzdGVwXT0gYXZfY2xpcF91 aW50OChzcmNbNCpzdGVwXSArIGQpOwo+IC0gICAgICAgICAgICAgICAgICAgIGQgPSAwOwo+IC0g ICAgICAgICAgICAgICAgfQo+IC0KPiAtICAgICAgICAgICAgICAgIHNyY1szKnN0ZXBdLT0gZDsK PiAtICAgICAgICAgICAgICAgIHNyY1s0KnN0ZXBdKz0gZDsKPiAtICAgICAgICAgICAgfQo+IC0g ICAgICAgIH0KPiAtCj4gLSAgICAgICAgc3JjICs9IHN0cmlkZTsKPiAtICAgIH0KPiAtfQo+IC0K PiAtLy9Ob3RlOiB3ZSBoYXZlIEMgYW5kIFNTRTIgdmVyc2lvbiAod2hpY2ggdXNlcyBNTVgoRVhU KSB3aGVuIGFkdmFudGFnZW91cykKPiAtLy9QbGFpbiBDIHZlcnNpb25zCj4gLS8vd2UgYWx3YXlz IGNvbXBpbGUgQyBmb3IgdGVzdGluZyB3aGljaCBuZWVkcyBiaXRleGFjdG5lc3MKPiAtI2RlZmlu ZSBURU1QTEFURV9QUF9DIDEKPiAtI2luY2x1ZGUgInBvc3Rwcm9jZXNzX3RlbXBsYXRlLmMiCj4g LQo+IC0jaWYgSEFWRV9BTFRJVkVDCj4gLSNpbmNsdWRlICJsaWJhdnV0aWwvcHBjL3V0aWxfYWx0 aXZlYy5oIgo+IC0KPiAtIyAgIGRlZmluZSBURU1QTEFURV9QUF9BTFRJVkVDIDEKPiAtIyAgIGlu Y2x1ZGUgInBvc3Rwcm9jZXNzX2FsdGl2ZWNfdGVtcGxhdGUuYyIKPiAtIyAgIGluY2x1ZGUgInBv c3Rwcm9jZXNzX3RlbXBsYXRlLmMiCj4gLSNlbmRpZgo+IC0KPiAtI2lmIEFSQ0hfWDg2ICYmIEhB VkVfSU5MSU5FX0FTTQo+IC0jICAgIGlmIENPTkZJR19SVU5USU1FX0NQVURFVEVDVAo+IC0jICAg ICAgICBkZWZpbmUgVEVNUExBVEVfUFBfU1NFMiAxCj4gLSMgICAgICAgIGluY2x1ZGUgInBvc3Rw cm9jZXNzX3RlbXBsYXRlLmMiCj4gLSMgICAgZWxzZQo+IC0jICAgICAgICBpZiBIQVZFX1NTRTJf SU5MSU5FCj4gLSMgICAgICAgICAgICBkZWZpbmUgVEVNUExBVEVfUFBfU1NFMiAxCj4gLSMgICAg ICAgICAgICBpbmNsdWRlICJwb3N0cHJvY2Vzc190ZW1wbGF0ZS5jIgo+IC0jICAgICAgICBlbmRp Zgo+IC0jICAgIGVuZGlmCj4gLSNlbmRpZgo+IC0KPiAtdHlwZWRlZiB2b2lkICgqcHBfZm4pKGNv bnN0IHVpbnQ4X3Qgc3JjW10sIGludCBzcmNTdHJpZGUsIHVpbnQ4X3QgZHN0W10sCj4gaW50IGRz dFN0cmlkZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAo+IC0gICAgICAgICAgICAgICAgICAgICAg Y29uc3QgaW50OF90IFFQc1tdLCBpbnQgUVBTdHJpZGUsIGludCBpc0NvbG9yLAo+IFBQQ29udGV4 dCAqYzIpOwo+IC0KPiAtc3RhdGljIGlubGluZSB2b2lkIHBvc3RQcm9jZXNzKGNvbnN0IHVpbnQ4 X3Qgc3JjW10sIGludCBzcmNTdHJpZGUsCj4gdWludDhfdCBkc3RbXSwgaW50IGRzdFN0cmlkZSwg aW50IHdpZHRoLCBpbnQgaGVpZ2h0LAo+IC0gICAgICAgIGNvbnN0IGludDhfdCBRUHNbXSwgaW50 IFFQU3RyaWRlLCBpbnQgaXNDb2xvciwgcHBfbW9kZSAqdm0sCj4gcHBfY29udGV4dCAqdmMpCj4g LXsKPiAtICAgIHBwX2ZuIHBwID0gcG9zdFByb2Nlc3NfQzsKPiAtICAgIFBQQ29udGV4dCAqYz0g KFBQQ29udGV4dCAqKXZjOwo+IC0gICAgUFBNb2RlICpwcE1vZGU9IChQUE1vZGUgKil2bTsKPiAt ICAgIGMtPnBwTW9kZT0gKnBwTW9kZTsgLy9GSVhNRQo+IC0KPiAtICAgIGlmICghKHBwTW9kZS0+ bHVtTW9kZSAmIEJJVEVYQUNUKSkgewo+IC0jaWYgQ09ORklHX1JVTlRJTUVfQ1BVREVURUNUCj4g LSNpZiBBUkNIX1g4NiAmJiBIQVZFX0lOTElORV9BU00KPiAtICAgICAgICAvLyBvcmRlcmVkIHBl ciBzcGVlZCBmYXN0ZXN0IGZpcnN0Cj4gLSAgICAgICAgaWYgICAgICAoYy0+Y3B1Q2FwcyAmIEFW X0NQVV9GTEFHX1NTRTIpICAgICBwcCA9IHBvc3RQcm9jZXNzX1NTRTI7Cj4gLSNlbGlmIEhBVkVf QUxUSVZFQwo+IC0gICAgICAgIGlmICAgICAgKGMtPmNwdUNhcHMgJiBBVl9DUFVfRkxBR19BTFRJ VkVDKSAgcHAgPQo+IHBvc3RQcm9jZXNzX2FsdGl2ZWM7Cj4gLSNlbmRpZgo+IC0jZWxzZSAvKiBD T05GSUdfUlVOVElNRV9DUFVERVRFQ1QgKi8KPiAtI2lmICAgICBIQVZFX1NTRTJfSU5MSU5FCj4g LSAgICAgICAgcHAgPSBwb3N0UHJvY2Vzc19TU0UyOwo+IC0jZWxpZiBIQVZFX0FMVElWRUMKPiAt ICAgICAgICBwcCA9IHBvc3RQcm9jZXNzX2FsdGl2ZWM7Cj4gLSNlbmRpZgo+IC0jZW5kaWYgLyog IUNPTkZJR19SVU5USU1FX0NQVURFVEVDVCAqLwo+IC0gICAgfQo+IC0KPiAtICAgIHBwKHNyYywg c3JjU3RyaWRlLCBkc3QsIGRzdFN0cmlkZSwgd2lkdGgsIGhlaWdodCwgUVBzLCBRUFN0cmlkZSwK PiBpc0NvbG9yLCBjKTsKPiAtfQo+IC0KPiAtLyogLXBwIENvbW1hbmQgbGluZSBIZWxwCj4gLSov Cj4gLWNvbnN0IGNoYXIgcHBfaGVscFtdID0KPiAtIkF2YWlsYWJsZSBwb3N0cHJvY2Vzc2luZyBm aWx0ZXJzOlxuIgo+IC0iRmlsdGVycyAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbnNcbiIK PiAtInNob3J0ICBsb25nIG5hbWUgICAgICAgc2hvcnQgICBsb25nIG9wdGlvbiAgICAgRGVzY3Jp cHRpb25cbiIKPiAtIiogICAgICAqICAgICAgICAgICAgICAgYSAgICAgICBhdXRvcSAgICAgICAg ICAgQ1BVIHBvd2VyIGRlcGVuZGVudAo+IGVuYWJsZXJcbiIKPiAtIiAgICAgICAgICAgICAgICAg ICAgICAgYyAgICAgICBjaHJvbSAgICAgICAgICAgY2hyb21pbmFuY2UgZmlsdGVyaW5nCj4gZW5h YmxlZFxuIgo+IC0iICAgICAgICAgICAgICAgICAgICAgICB5ICAgICAgIG5vY2hyb20gICAgICAg ICBjaHJvbWluYW5jZSBmaWx0ZXJpbmcKPiBkaXNhYmxlZFxuIgo+IC0iICAgICAgICAgICAgICAg ICAgICAgICBuICAgICAgIG5vbHVtYSAgICAgICAgICBsdW1hIGZpbHRlcmluZyBkaXNhYmxlZFxu Igo+IC0iaGIgICAgIGhkZWJsb2NrICAgICAgICAoMiB0aHJlc2hvbGQpICAgICAgICAgICBob3Jp em9udGFsIGRlYmxvY2tpbmcKPiBmaWx0ZXJcbiIKPiAtIiAgICAgICAxLiBkaWZmZXJlbmNlIGZh Y3RvcjogZGVmYXVsdD0zMiwgaGlnaGVyIC0+IG1vcmUgZGVibG9ja2luZ1xuIgo+IC0iICAgICAg IDIuIGZsYXRuZXNzIHRocmVzaG9sZDogZGVmYXVsdD0zOSwgbG93ZXIgLT4gbW9yZSBkZWJsb2Nr aW5nXG4iCj4gLSIgICAgICAgICAgICAgICAgICAgICAgIHRoZSBoICYgdiBkZWJsb2NraW5nIGZp bHRlcnMgc2hhcmUgdGhlc2VcbiIKPiAtIiAgICAgICAgICAgICAgICAgICAgICAgc28geW91IGNh bid0IHNldCBkaWZmZXJlbnQgdGhyZXNob2xkcyBmb3IgaCAvIHZcbiIKPiAtInZiICAgICB2ZGVi bG9jayAgICAgICAgKDIgdGhyZXNob2xkKSAgICAgICAgICAgdmVydGljYWwgZGVibG9ja2luZwo+ IGZpbHRlclxuIgo+IC0iaGEgICAgIGhhZGVibG9jayAgICAgICAoMiB0aHJlc2hvbGQpICAgICAg ICAgICBob3Jpem9udGFsIGRlYmxvY2tpbmcKPiBmaWx0ZXJcbiIKPiAtInZhICAgICB2YWRlYmxv Y2sgICAgICAgKDIgdGhyZXNob2xkKSAgICAgICAgICAgdmVydGljYWwgZGVibG9ja2luZwo+IGZp bHRlclxuIgo+IC0iaDEgICAgIHgxaGRlYmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBleHBlcmltZW50YWwgaCBkZWJsb2NrCj4gZmlsdGVyIDFcbiIKPiAtInYxICAgICB4MXZkZWJs b2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudGFsIHYgZGVibG9jawo+ IGZpbHRlciAxXG4iCj4gLSJkciAgICAgZGVyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRlcmluZ2luZyBmaWx0ZXJcbiIKPiAtImFsICAgICBhdXRvbGV2ZWxzICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljIGJyaWdodG5lc3MgLwo+IGNvbnRyYXN0XG4i Cj4gLSIgICAgICAgICAgICAgICAgICAgICAgIGYgICAgICAgIGZ1bGx5cmFuZ2UgICAgIHN0cmV0 Y2ggbHVtaW5hbmNlIHRvCj4gKDAuLjI1NSlcbiIKPiAtImxiICAgICBsaW5ibGVuZGRlaW50ICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGluZWFyIGJsZW5kCj4gZGVpbnRlcmxhY2VyXG4iCj4g LSJsaSAgICAgbGluaXBvbGRlaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVhciBp bnRlcnBvbGF0aW5nCj4gZGVpbnRlcmxhY2VcbiIKPiAtImNpICAgICBjdWJpY2lwb2xkZWludCAg ICAgICAgICAgICAgICAgICAgICAgICAgY3ViaWMgaW50ZXJwb2xhdGluZwo+IGRlaW50ZXJsYWNl clxuIgo+IC0ibWQgICAgIG1lZGlhbmRlaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt ZWRpYW4gZGVpbnRlcmxhY2VyXG4iCj4gLSJmZCAgICAgZmZtcGVnZGVpbnQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZmbXBlZyBkZWludGVybGFjZXJcbiIKPiAtImw1ICAgICBsb3dwYXNz NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklSIGxvd3Bhc3MKPiBkZWludGVybGFj ZXJcbiIKPiAtImRlICAgICBkZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aGI6YSx2YjphLGRyOmFcbiIKPiAtImZhICAgICBmYXN0ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaDE6YSx2MTphLGRyOmFcbiIKPiAtImFjICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaGE6YToxMjg6Nyx2YTphLGRyOmFcbiIKPiAtInRuICAg ICB0bXBub2lzZSAgICAgICAgKDMgdGhyZXNob2xkKSAgICAgICAgICAgdGVtcG9yYWwgbm9pc2Ug cmVkdWNlclxuIgo+IC0iICAgICAgICAgICAgICAgICAgICAgMS4gPD0gMi4gPD0gMy4gICAgICAg ICAgICBsYXJnZXIgLT4gc3Ryb25nZXIKPiBmaWx0ZXJpbmdcbiIKPiAtImZxICAgICBmb3JjZVF1 YW50ICAgICAgPHF1YW50aXplcj4gICAgICAgICAgICAgZm9yY2UgcXVhbnRpemVyXG4iCj4gLSJV c2FnZTpcbiIKPgo+IC0iPGZpbHRlck5hbWU+Wzo8b3B0aW9uPls6PG9wdGlvbj4uLi5dXVtbLHwv XVstXTxmaWx0ZXJOYW1lPls6PG9wdGlvbj4uLi5dXS4uLlxuIgo+IC0ibG9uZyBmb3JtIGV4YW1w bGU6XG4iCj4gLSJ2ZGVibG9jazphdXRvcS9oZGVibG9jazphdXRvcS9saW5ibGVuZGRlaW50ICAg IGRlZmF1bHQsLXZkZWJsb2NrXG4iCj4gLSJzaG9ydCBmb3JtIGV4YW1wbGU6XG4iCj4gLSJ2Yjph L2hiOmEvbGIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlLC12YlxuIgo+IC0i bW9yZSBleGFtcGxlczpcbiIKPiAtInRuOjY0OjEyODoyNTZcbiIKPiAtIlxuIgo+IC07Cj4gLQo+ IC1wcF9tb2RlICpwcF9nZXRfbW9kZV9ieV9uYW1lX2FuZF9xdWFsaXR5KGNvbnN0IGNoYXIgKm5h bWUsIGludCBxdWFsaXR5KQo+IC17Cj4gLSAgICBjaGFyIHRlbXBbR0VUX01PREVfQlVGRkVSX1NJ WkVdOwo+IC0gICAgY2hhciAqcD0gdGVtcDsKPiAtICAgIHN0YXRpYyBjb25zdCBjaGFyIGZpbHRl ckRlbGltaXRlcnNbXSA9ICIsLyI7Cj4gLSAgICBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25EZWxp bWl0ZXJzW10gPSAiOnwiOwo+IC0gICAgc3RydWN0IFBQTW9kZSAqcHBNb2RlOwo+IC0gICAgY2hh ciAqZmlsdGVyVG9rZW47Cj4gLQo+IC0gICAgaWYgKCFuYW1lKSAgewo+IC0gICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJwcDogTWlzc2luZyBhcmd1bWVudFxuIik7Cj4gLSAgICAg ICAgcmV0dXJuIE5VTEw7Cj4gLSAgICB9Cj4gLQo+IC0gICAgaWYgKCFzdHJjbXAobmFtZSwgImhl bHAiKSkgewo+IC0gICAgICAgIGNvbnN0IGNoYXIgKnA7Cj4gLSAgICAgICAgZm9yIChwID0gcHBf aGVscDsgc3RyY2hyKHAsICdcbicpOyBwID0gc3RyY2hyKHAsICdcbicpICsgMSkgewo+IC0gICAg ICAgICAgICBhdl9zdHJsY3B5KHRlbXAsIHAsIEZGTUlOKHNpemVvZih0ZW1wKSwgc3RyY2hyKHAs ICdcbicpIC0gcCArCj4gMikpOwo+IC0gICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0lO Rk8sICIlcyIsIHRlbXApOwo+IC0gICAgICAgIH0KPiAtICAgICAgICByZXR1cm4gTlVMTDsKPiAt ICAgIH0KPiAtCj4gLSAgICBwcE1vZGU9IGF2X21hbGxvYyhzaXplb2YoUFBNb2RlKSk7Cj4gLSAg ICBpZiAoIXBwTW9kZSkKPiAtICAgICAgICByZXR1cm4gTlVMTDsKPiAtCj4gLSAgICBwcE1vZGUt Pmx1bU1vZGU9IDA7Cj4gLSAgICBwcE1vZGUtPmNocm9tTW9kZT0gMDsKPiAtICAgIHBwTW9kZS0+ bWF4VG1wTm9pc2VbMF09IDcwMDsKPiAtICAgIHBwTW9kZS0+bWF4VG1wTm9pc2VbMV09IDE1MDA7 Cj4gLSAgICBwcE1vZGUtPm1heFRtcE5vaXNlWzJdPSAzMDAwOwo+IC0gICAgcHBNb2RlLT5tYXhB bGxvd2VkWT0gMjM0Owo+IC0gICAgcHBNb2RlLT5taW5BbGxvd2VkWT0gMTY7Cj4gLSAgICBwcE1v ZGUtPmJhc2VEY0RpZmY9IDI1Ni84Owo+IC0gICAgcHBNb2RlLT5mbGF0bmVzc1RocmVzaG9sZD0g NTYtMTYtMTsKPiAtICAgIHBwTW9kZS0+bWF4Q2xpcHBlZFRocmVzaG9sZD0gKEFWUmF0aW9uYWwp ezEsMTAwfTsKPiAtICAgIHBwTW9kZS0+ZXJyb3I9MDsKPiAtCj4gLSAgICBtZW1zZXQodGVtcCwg MCwgR0VUX01PREVfQlVGRkVSX1NJWkUpOwo+IC0gICAgYXZfc3RybGNweSh0ZW1wLCBuYW1lLCBH RVRfTU9ERV9CVUZGRVJfU0laRSAtIDEpOwo+IC0KPiAtICAgIGF2X2xvZyhOVUxMLCBBVl9MT0df REVCVUcsICJwcDogJXNcbiIsIG5hbWUpOwo+IC0KPiAtICAgIGZvcig7Oyl7Cj4gLSAgICAgICAg Y29uc3QgY2hhciAqZmlsdGVyTmFtZTsKPiAtICAgICAgICBpbnQgcT0gMTAwMDAwMDsgLy9QUF9R VUFMSVRZX01BWDsKPiAtICAgICAgICBpbnQgY2hyb209LTE7Cj4gLSAgICAgICAgaW50IGx1bWE9 LTE7Cj4gLSAgICAgICAgY29uc3QgY2hhciAqb3B0aW9uOwo+IC0gICAgICAgIGNvbnN0IGNoYXIg Km9wdGlvbnNbT1BUSU9OU19BUlJBWV9TSVpFXTsKPiAtICAgICAgICBpbnQgaTsKPiAtICAgICAg ICBpbnQgZmlsdGVyTmFtZU9rPTA7Cj4gLSAgICAgICAgaW50IG51bU9mVW5rbm93bk9wdGlvbnM9 MDsKPiAtICAgICAgICBpbnQgZW5hYmxlPTE7IC8vZG9lcyB0aGUgdXNlciB3YW50IHVzIHRvIGVu YWJsZWQgb3IgZGlzYWJsZWQgdGhlCj4gZmlsdGVyCj4gLSAgICAgICAgY2hhciAqdG9rc3RhdGU7 Cj4gLQo+IC0gICAgICAgIGZpbHRlclRva2VuPSBhdl9zdHJ0b2socCwgZmlsdGVyRGVsaW1pdGVy cywgJnRva3N0YXRlKTsKPiAtICAgICAgICBpZighZmlsdGVyVG9rZW4pIGJyZWFrOwo+IC0gICAg ICAgIHArPSBzdHJsZW4oZmlsdGVyVG9rZW4pICsgMTsgLy8gcCBwb2ludHMgdG8gbmV4dCBmaWx0 ZXJUb2tlbgo+IC0gICAgICAgIGZpbHRlck5hbWU9IGF2X3N0cnRvayhmaWx0ZXJUb2tlbiwgb3B0 aW9uRGVsaW1pdGVycywgJnRva3N0YXRlKTsKPiAtICAgICAgICBpZiAoIWZpbHRlck5hbWUpIHsK PiAtICAgICAgICAgICAgcHBNb2RlLT5lcnJvcisrOwo+IC0gICAgICAgICAgICBicmVhazsKPiAt ICAgICAgICB9Cj4gLSAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19ERUJVRywgInBwOiAlczo6 JXNcbiIsIGZpbHRlclRva2VuLAo+IGZpbHRlck5hbWUpOwo+IC0KPiAtICAgICAgICBpZigqZmls dGVyTmFtZSA9PSAnLScpewo+IC0gICAgICAgICAgICBlbmFibGU9MDsKPiAtICAgICAgICAgICAg ZmlsdGVyTmFtZSsrOwo+IC0gICAgICAgIH0KPiAtCj4gLSAgICAgICAgZm9yKDs7KXsgLy9mb3Ig YWxsIG9wdGlvbnMKPiAtICAgICAgICAgICAgb3B0aW9uPSBhdl9zdHJ0b2soTlVMTCwgb3B0aW9u RGVsaW1pdGVycywgJnRva3N0YXRlKTsKPiAtICAgICAgICAgICAgaWYoIW9wdGlvbikgYnJlYWs7 Cj4gLQo+IC0gICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0RFQlVHLCAicHA6IG9wdGlv bjogJXNcbiIsIG9wdGlvbik7Cj4gLSAgICAgICAgICAgIGlmKCFzdHJjbXAoImF1dG9xIiwgb3B0 aW9uKSB8fCAhc3RyY21wKCJhIiwgb3B0aW9uKSkgcT0KPiBxdWFsaXR5Owo+IC0gICAgICAgICAg ICBlbHNlIGlmKCFzdHJjbXAoIm5vY2hyb20iLCBvcHRpb24pIHx8ICFzdHJjbXAoInkiLCBvcHRp b24pKQo+IGNocm9tPTA7Cj4gLSAgICAgICAgICAgIGVsc2UgaWYoIXN0cmNtcCgiY2hyb20iLCBv cHRpb24pIHx8ICFzdHJjbXAoImMiLCBvcHRpb24pKQo+IGNocm9tPTE7Cj4gLSAgICAgICAgICAg IGVsc2UgaWYoIXN0cmNtcCgibm9sdW1hIiwgb3B0aW9uKSB8fCAhc3RyY21wKCJuIiwgb3B0aW9u KSkKPiBsdW1hPTA7Cj4gLSAgICAgICAgICAgIGVsc2V7Cj4gLSAgICAgICAgICAgICAgICBvcHRp b25zW251bU9mVW5rbm93bk9wdGlvbnNdID0gb3B0aW9uOwo+IC0gICAgICAgICAgICAgICAgbnVt T2ZVbmtub3duT3B0aW9ucysrOwo+IC0gICAgICAgICAgICB9Cj4gLSAgICAgICAgICAgIGlmKG51 bU9mVW5rbm93bk9wdGlvbnMgPj0gT1BUSU9OU19BUlJBWV9TSVpFLTEpIGJyZWFrOwo+IC0gICAg ICAgIH0KPiAtICAgICAgICBvcHRpb25zW251bU9mVW5rbm93bk9wdGlvbnNdID0gTlVMTDsKPiAt Cj4gLSAgICAgICAgLyogcmVwbGFjZSBzdHVmZiBmcm9tIHRoZSByZXBsYWNlIFRhYmxlICovCj4g LSAgICAgICAgZm9yKGk9MDsgcmVwbGFjZVRhYmxlWzIqaV07IGkrKyl7Cj4gLSAgICAgICAgICAg IGlmKCFzdHJjbXAocmVwbGFjZVRhYmxlWzIqaV0sIGZpbHRlck5hbWUpKXsKPiAtICAgICAgICAg ICAgICAgIHNpemVfdCBuZXdsZW4gPSBzdHJsZW4ocmVwbGFjZVRhYmxlWzIqaSArIDFdKTsKPiAt ICAgICAgICAgICAgICAgIGludCBwbGVuOwo+IC0gICAgICAgICAgICAgICAgaW50IHNwYWNlTGVm dDsKPiAtCj4gLSAgICAgICAgICAgICAgICBwLS0sICpwPScsJzsKPiAtCj4gLSAgICAgICAgICAg ICAgICBwbGVuPSBzdHJsZW4ocCk7Cj4gLSAgICAgICAgICAgICAgICBzcGFjZUxlZnQ9IHAgLSB0 ZW1wICsgcGxlbjsKPiAtICAgICAgICAgICAgICAgIGlmKHNwYWNlTGVmdCArIG5ld2xlbiAgPj0g R0VUX01PREVfQlVGRkVSX1NJWkUgLSAxKXsKPiAtICAgICAgICAgICAgICAgICAgICBwcE1vZGUt PmVycm9yKys7Cj4gLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gLSAgICAgICAgICAgICAg ICB9Cj4gLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHAgKyBuZXdsZW4sIHAsIHBsZW4rMSk7Cj4g LSAgICAgICAgICAgICAgICBtZW1jcHkocCwgcmVwbGFjZVRhYmxlWzIqaSArIDFdLCBuZXdsZW4p Owo+IC0gICAgICAgICAgICAgICAgZmlsdGVyTmFtZU9rPTE7Cj4gLSAgICAgICAgICAgIH0KPiAt ICAgICAgICB9Cj4gLQo+IC0gICAgICAgIGZvcihpPTA7IGZpbHRlcnNbaV0uc2hvcnROYW1lOyBp Kyspewo+IC0gICAgICAgICAgICBpZiggICAhc3RyY21wKGZpbHRlcnNbaV0ubG9uZ05hbWUsIGZp bHRlck5hbWUpCj4gLSAgICAgICAgICAgICAgIHx8ICFzdHJjbXAoZmlsdGVyc1tpXS5zaG9ydE5h bWUsIGZpbHRlck5hbWUpKXsKPiAtICAgICAgICAgICAgICAgIHBwTW9kZS0+bHVtTW9kZSAmPSB+ ZmlsdGVyc1tpXS5tYXNrOwo+IC0gICAgICAgICAgICAgICAgcHBNb2RlLT5jaHJvbU1vZGUgJj0g fmZpbHRlcnNbaV0ubWFzazsKPiAtCj4gLSAgICAgICAgICAgICAgICBmaWx0ZXJOYW1lT2s9MTsK PiAtICAgICAgICAgICAgICAgIGlmKCFlbmFibGUpIGJyZWFrOyAvLyB1c2VyIHdhbnRzIHRvIGRp c2FibGUgaXQKPiAtCj4gLSAgICAgICAgICAgICAgICBpZihxID49IGZpbHRlcnNbaV0ubWluTHVt UXVhbGl0eSAmJiBsdW1hKQo+IC0gICAgICAgICAgICAgICAgICAgIHBwTW9kZS0+bHVtTW9kZXw9 IGZpbHRlcnNbaV0ubWFzazsKPiAtICAgICAgICAgICAgICAgIGlmKGNocm9tPT0xIHx8IChjaHJv bT09LTEgJiYgZmlsdGVyc1tpXS5jaHJvbURlZmF1bHQpKQo+IC0gICAgICAgICAgICAgICAgICAg IGlmKHEgPj0gZmlsdGVyc1tpXS5taW5DaHJvbVF1YWxpdHkpCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcE1vZGUtPmNocm9tTW9kZXw9IGZpbHRlcnNbaV0ubWFzazsKPiAtCj4gLSAg ICAgICAgICAgICAgICBpZihmaWx0ZXJzW2ldLm1hc2sgPT0gTEVWRUxfRklYKXsKPiAtICAgICAg ICAgICAgICAgICAgICBpbnQgbzsKPiAtICAgICAgICAgICAgICAgICAgICBwcE1vZGUtPm1pbkFs bG93ZWRZPSAxNjsKPiAtICAgICAgICAgICAgICAgICAgICBwcE1vZGUtPm1heEFsbG93ZWRZPSAy MzQ7Cj4gLSAgICAgICAgICAgICAgICAgICAgZm9yKG89MDsgb3B0aW9uc1tvXTsgbysrKXsKPiAt ICAgICAgICAgICAgICAgICAgICAgICAgaWYoICAhc3RyY21wKG9wdGlvbnNbb10sImZ1bGx5cmFu Z2UiKQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICB8fCFzdHJjbXAob3B0aW9uc1tvXSwi ZiIpKXsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwTW9kZS0+bWluQWxsb3dlZFk9 IDA7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcE1vZGUtPm1heEFsbG93ZWRZPSAy NTU7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1PZlVua25vd25PcHRpb25zLS07 Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgICAgICAgICB9Cj4g LSAgICAgICAgICAgICAgICB9Cj4gLSAgICAgICAgICAgICAgICBlbHNlIGlmKGZpbHRlcnNbaV0u bWFzayA9PSBURU1QX05PSVNFX0ZJTFRFUikKPiAtICAgICAgICAgICAgICAgIHsKPiAtICAgICAg ICAgICAgICAgICAgICBpbnQgbzsKPiAtICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZOb2lz ZXM9MDsKPiAtCj4gLSAgICAgICAgICAgICAgICAgICAgZm9yKG89MDsgb3B0aW9uc1tvXTsgbysr KXsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdGFpbDsKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgcHBNb2RlLT5tYXhUbXBOb2lzZVtudW1PZk5vaXNlc109Cj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ0b2wob3B0aW9uc1tvXSwgJnRhaWwsIDApOwo+IC0gICAg ICAgICAgICAgICAgICAgICAgICBpZih0YWlsIT1vcHRpb25zW29dKXsKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG51bU9mTm9pc2VzKys7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBudW1PZlVua25vd25PcHRpb25zLS07Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZihudW1PZk5vaXNlcyA+PSAzKSBicmVhazsKPiAtICAgICAgICAgICAgICAgICAgICAgICAg fQo+IC0gICAgICAgICAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgICAgIH0KPiAtICAgICAg ICAgICAgICAgIGVsc2UgaWYoZmlsdGVyc1tpXS5tYXNrID09IFZfREVCTE9DSyAgIHx8IGZpbHRl cnNbaV0ubWFzawo+ID09IEhfREVCTE9DSwo+IC0gICAgICAgICAgICAgICAgICAgICB8fCBmaWx0 ZXJzW2ldLm1hc2sgPT0gVl9BX0RFQkxPQ0sgfHwgZmlsdGVyc1tpXS5tYXNrCj4gPT0gSF9BX0RF QkxPQ0spewo+IC0gICAgICAgICAgICAgICAgICAgIGludCBvOwo+IC0KPiAtICAgICAgICAgICAg ICAgICAgICBmb3Iobz0wOyBvcHRpb25zW29dICYmIG88MjsgbysrKXsKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqdGFpbDsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZh bD0gc3RydG9sKG9wdGlvbnNbb10sICZ0YWlsLCAwKTsKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgaWYodGFpbD09b3B0aW9uc1tvXSkgYnJlYWs7Cj4gLQo+IC0gICAgICAgICAgICAgICAgICAg ICAgICBudW1PZlVua25vd25PcHRpb25zLS07Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGlm KG89PTApIHBwTW9kZS0+YmFzZURjRGlmZj0gdmFsOwo+IC0gICAgICAgICAgICAgICAgICAgICAg ICBlbHNlIHBwTW9kZS0+ZmxhdG5lc3NUaHJlc2hvbGQ9IHZhbDsKPiAtICAgICAgICAgICAgICAg ICAgICB9Cj4gLSAgICAgICAgICAgICAgICB9Cj4gLSAgICAgICAgICAgICAgICBlbHNlIGlmKGZp bHRlcnNbaV0ubWFzayA9PSBGT1JDRV9RVUFOVCl7Cj4gLSAgICAgICAgICAgICAgICAgICAgaW50 IG87Cj4gLSAgICAgICAgICAgICAgICAgICAgcHBNb2RlLT5mb3JjZWRRdWFudD0gMTU7Cj4gLQo+ IC0gICAgICAgICAgICAgICAgICAgIGZvcihvPTA7IG9wdGlvbnNbb10gJiYgbzwxOyBvKyspewo+ IC0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp0YWlsOwo+IC0gICAgICAgICAgICAgICAg ICAgICAgICBpbnQgdmFsPSBzdHJ0b2wob3B0aW9uc1tvXSwgJnRhaWwsIDApOwo+IC0gICAgICAg ICAgICAgICAgICAgICAgICBpZih0YWlsPT1vcHRpb25zW29dKSBicmVhazsKPiAtCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgIG51bU9mVW5rbm93bk9wdGlvbnMtLTsKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgcHBNb2RlLT5mb3JjZWRRdWFudD0gdmFsOwo+IC0gICAgICAgICAgICAgICAg ICAgIH0KPiAtICAgICAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgfQo+IC0gICAgICAgIH0K PiAtICAgICAgICBpZighZmlsdGVyTmFtZU9rKSBwcE1vZGUtPmVycm9yKys7Cj4gLSAgICAgICAg cHBNb2RlLT5lcnJvciArPSBudW1PZlVua25vd25PcHRpb25zOwo+IC0gICAgfQo+IC0KPiAtICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfREVCVUcsICJwcDogbHVtTW9kZT0lWCwgY2hyb21Nb2RlPSVY XG4iLAo+IHBwTW9kZS0+bHVtTW9kZSwgcHBNb2RlLT5jaHJvbU1vZGUpOwo+IC0gICAgaWYocHBN b2RlLT5lcnJvcil7Cj4gLSAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIiVkIGVy cm9ycyBpbiBwb3N0cHJvY2VzcyBzdHJpbmcKPiBcIiVzXCJcbiIsIHBwTW9kZS0+ZXJyb3IsIG5h bWUpOwo+IC0gICAgICAgIGF2X2ZyZWUocHBNb2RlKTsKPiAtICAgICAgICByZXR1cm4gTlVMTDsK PiAtICAgIH0KPiAtICAgIHJldHVybiBwcE1vZGU7Cj4gLX0KPiAtCj4gLXZvaWQgcHBfZnJlZV9t b2RlKHBwX21vZGUgKm1vZGUpewo+IC0gICAgYXZfZnJlZShtb2RlKTsKPiAtfQo+IC0KPiAtc3Rh dGljIHZvaWQgcmVhbGxvY0FsaWduKHZvaWQgKipwLCBpbnQgc2l6ZSl7Cj4gLSAgICBhdl9mcmVl KCpwKTsKPiAtICAgICpwPSBhdl9tYWxsb2N6KHNpemUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9p ZCByZWFsbG9jQnVmZmVycyhQUENvbnRleHQgKmMsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50 Cj4gc3RyaWRlLCBpbnQgcXBTdHJpZGUpewo+IC0gICAgaW50IG1iV2lkdGggPSAod2lkdGgrMTUp Pj40Owo+IC0gICAgaW50IG1iSGVpZ2h0PSAoaGVpZ2h0KzE1KT4+NDsKPiAtICAgIGludCBpOwo+ IC0KPiAtICAgIGMtPnN0cmlkZT0gc3RyaWRlOwo+IC0gICAgYy0+cXBTdHJpZGU9IHFwU3RyaWRl Owo+IC0KPiAtICAgIHJlYWxsb2NBbGlnbigodm9pZCAqKikmYy0+dGVtcERzdCwgc3RyaWRlKjI0 KzMyKTsKPiAtICAgIHJlYWxsb2NBbGlnbigodm9pZCAqKikmYy0+dGVtcFNyYywgc3RyaWRlKjI0 KTsKPiAtICAgIHJlYWxsb2NBbGlnbigodm9pZCAqKikmYy0+dGVtcEJsb2NrcywgMioxNio4KTsK PiAtICAgIHJlYWxsb2NBbGlnbigodm9pZCAqKikmYy0+eUhpc3RvZ3JhbSwgMjU2KnNpemVvZih1 aW50NjRfdCkpOwo+IC0gICAgZm9yKGk9MDsgaTwyNTY7IGkrKykKPiAtICAgICAgICAgICAgYy0+ eUhpc3RvZ3JhbVtpXT0gd2lkdGgqaGVpZ2h0LzY0KjE1LzI1NjsKPiAtCj4gLSAgICBmb3IoaT0w OyBpPDM7IGkrKyl7Cj4gLSAgICAgICAgLy9Ob3RlOiBUaGUgKzE3KjEwMjQgaXMganVzdCB0aGVy ZSBzbyBJIGRvIG5vdCBoYXZlIHRvIHdvcnJ5Cj4gYWJvdXQgci93IG92ZXIgdGhlIGVuZC4KPiAt ICAgICAgICByZWFsbG9jQWxpZ24oKHZvaWQgKiopJmMtPnRlbXBCbHVycmVkW2ldLCBzdHJpZGUq bWJIZWlnaHQqMTYgKwo+IDE3KjEwMjQpOwo+IC0gICAgICAgIHJlYWxsb2NBbGlnbigodm9pZCAq KikmYy0+dGVtcEJsdXJyZWRQYXN0W2ldLAo+IDI1NiooKGhlaWdodCs3KSYofjcpKS8yICsgMTcq MTAyNCk7Ly9GSVhNRSBzaXplCj4gLSAgICB9Cj4gLQo+IC0gICAgcmVhbGxvY0FsaWduKCh2b2lk ICoqKSZjLT5kZWludFRlbXAsIDIqd2lkdGgrMzIpOwo+IC0gICAgcmVhbGxvY0FsaWduKCh2b2lk ICoqKSZjLT5ub25CUVBUYWJsZSwKPiBxcFN0cmlkZSptYkhlaWdodCpzaXplb2YoaW50OF90KSk7 Cj4gLSAgICByZWFsbG9jQWxpZ24oKHZvaWQgKiopJmMtPnN0ZFFQVGFibGUsCj4gcXBTdHJpZGUq bWJIZWlnaHQqc2l6ZW9mKGludDhfdCkpOwo+IC0gICAgcmVhbGxvY0FsaWduKCh2b2lkICoqKSZj LT5mb3JjZWRRUFRhYmxlLCBtYldpZHRoKnNpemVvZihpbnQ4X3QpKTsKPiAtfQo+IC0KPiAtc3Rh dGljIGNvbnN0IGNoYXIgKiBjb250ZXh0X3RvX25hbWUodm9pZCAqIHB0cikgewo+IC0gICAgcmV0 dXJuICJwb3N0cHJvYyI7Cj4gLX0KPiAtCj4gLXN0YXRpYyBjb25zdCBBVkNsYXNzIGF2X2NvZGVj X2NvbnRleHRfY2xhc3MgPSB7ICJQb3N0cHJvYyIsCj4gY29udGV4dF90b19uYW1lLCBOVUxMIH07 Cj4gLQo+IC1hdl9jb2xkIHBwX2NvbnRleHQgKnBwX2dldF9jb250ZXh0KGludCB3aWR0aCwgaW50 IGhlaWdodCwgaW50IGNwdUNhcHMpewo+IC0gICAgUFBDb250ZXh0ICpjPSBhdl9tYWxsb2N6KHNp emVvZihQUENvbnRleHQpKTsKPiAtICAgIGludCBzdHJpZGU9IEZGQUxJR04od2lkdGgsIDE2KTsg IC8vYXNzdW1lZCAvIHdpbGwgcmVhbGxvYyBpZiBuZWVkZWQKPiAtICAgIGludCBxcFN0cmlkZT0g KHdpZHRoKzE1KS8xNiArIDI7IC8vYXNzdW1lZCAvIHdpbGwgcmVhbGxvYyBpZiBuZWVkZWQKPiAt Cj4gLSAgICBpZiAoIWMpCj4gLSAgICAgICAgcmV0dXJuIE5VTEw7Cj4gLQo+IC0gICAgYy0+YXZf Y2xhc3MgPSAmYXZfY29kZWNfY29udGV4dF9jbGFzczsKPiAtICAgIGlmKGNwdUNhcHMmUFBfRk9S TUFUKXsKPiAtICAgICAgICBjLT5oQ2hyb21hU3ViU2FtcGxlPSBjcHVDYXBzJjB4MzsKPiAtICAg ICAgICBjLT52Q2hyb21hU3ViU2FtcGxlPSAoY3B1Q2Fwcz4+NCkmMHgzOwo+IC0gICAgfWVsc2V7 Cj4gLSAgICAgICAgYy0+aENocm9tYVN1YlNhbXBsZT0gMTsKPiAtICAgICAgICBjLT52Q2hyb21h U3ViU2FtcGxlPSAxOwo+IC0gICAgfQo+IC0gICAgaWYgKGNwdUNhcHMgJiBQUF9DUFVfQ0FQU19B VVRPKSB7Cj4gLSAgICAgICAgYy0+Y3B1Q2FwcyA9IGF2X2dldF9jcHVfZmxhZ3MoKTsKPiAtICAg IH0gZWxzZSB7Cj4gLSAgICAgICAgYy0+Y3B1Q2FwcyA9IDA7Cj4gLSAgICAgICAgaWYgKGNwdUNh cHMgJiBQUF9DUFVfQ0FQU19BTFRJVkVDKSAgYy0+Y3B1Q2FwcyB8PQo+IEFWX0NQVV9GTEFHX0FM VElWRUM7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcmVhbGxvY0J1ZmZlcnMoYywgd2lkdGgsIGhlaWdo dCwgc3RyaWRlLCBxcFN0cmlkZSk7Cj4gLQo+IC0gICAgYy0+ZnJhbWVOdW09LTE7Cj4gLQo+IC0g ICAgcmV0dXJuIGM7Cj4gLX0KPiAtCj4gLWF2X2NvbGQgdm9pZCBwcF9mcmVlX2NvbnRleHQodm9p ZCAqdmMpewo+IC0gICAgUFBDb250ZXh0ICpjID0gKFBQQ29udGV4dCopdmM7Cj4gLSAgICBpbnQg aTsKPiAtCj4gLSAgICBmb3IoaT0wOyBpPEZGX0FSUkFZX0VMRU1TKGMtPnRlbXBCbHVycmVkKTsg aSsrKQo+IC0gICAgICAgIGF2X2ZyZWUoYy0+dGVtcEJsdXJyZWRbaV0pOwo+IC0gICAgZm9yKGk9 MDsgaTxGRl9BUlJBWV9FTEVNUyhjLT50ZW1wQmx1cnJlZFBhc3QpOyBpKyspCj4gLSAgICAgICAg YXZfZnJlZShjLT50ZW1wQmx1cnJlZFBhc3RbaV0pOwo+IC0KPiAtICAgIGF2X2ZyZWUoYy0+dGVt cEJsb2Nrcyk7Cj4gLSAgICBhdl9mcmVlKGMtPnlIaXN0b2dyYW0pOwo+IC0gICAgYXZfZnJlZShj LT50ZW1wRHN0KTsKPiAtICAgIGF2X2ZyZWUoYy0+dGVtcFNyYyk7Cj4gLSAgICBhdl9mcmVlKGMt PmRlaW50VGVtcCk7Cj4gLSAgICBhdl9mcmVlKGMtPnN0ZFFQVGFibGUpOwo+IC0gICAgYXZfZnJl ZShjLT5ub25CUVBUYWJsZSk7Cj4gLSAgICBhdl9mcmVlKGMtPmZvcmNlZFFQVGFibGUpOwo+IC0K PiAtICAgIG1lbXNldChjLCAwLCBzaXplb2YoUFBDb250ZXh0KSk7Cj4gLQo+IC0gICAgYXZfZnJl ZShjKTsKPiAtfQo+IC0KPiAtdm9pZCAgcHBfcG9zdHByb2Nlc3MoY29uc3QgdWludDhfdCAqIHNy Y1szXSwgY29uc3QgaW50IHNyY1N0cmlkZVszXSwKPiAtICAgICAgICAgICAgICAgICAgICAgdWlu dDhfdCAqIGRzdFszXSwgY29uc3QgaW50IGRzdFN0cmlkZVszXSwKPiAtICAgICAgICAgICAgICAg ICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAo+IC0gICAgICAgICAgICAgICAgICAgICBjb25z dCBpbnQ4X3QgKlFQX3N0b3JlLCAgaW50IFFQU3RyaWRlLAo+IC0gICAgICAgICAgICAgICAgICAg ICBwcF9tb2RlICp2bSwgIHZvaWQgKnZjLCBpbnQgcGljdF90eXBlKQo+IC17Cj4gLSAgICBpbnQg bWJXaWR0aCA9ICh3aWR0aCsxNSk+PjQ7Cj4gLSAgICBpbnQgbWJIZWlnaHQ9IChoZWlnaHQrMTUp Pj40Owo+IC0gICAgUFBNb2RlICptb2RlID0gdm07Cj4gLSAgICBQUENvbnRleHQgKmMgPSB2YzsK PiAtICAgIGludCBtaW5TdHJpZGU9IEZGTUFYKEZGQUJTKHNyY1N0cmlkZVswXSksIEZGQUJTKGRz dFN0cmlkZVswXSkpOwo+IC0gICAgaW50IGFic1FQU3RyaWRlID0gRkZBQlMoUVBTdHJpZGUpOwo+ IC0KPiAtICAgIGlmICh3aWR0aCA8IDE2IHx8IGhlaWdodCA8IDE2KSB7Cj4gLSAgICAgICAgYXZf bG9nKGMsIEFWX0xPR19FUlJPUiwgIlBvc3Rwcm9jIGlzIGRlc2lnbmVkIHRvIGZpbHRlciAxNngx Ngo+IG1hY3JvYmxvY2sgYmFzZWQgZm9ybWF0cywgdGhlIG1pbmltdW0gc2l6ZSBpcyAxIG1hY3Jv YmxvY2tcbiIpOwo+IC0gICAgICAgIHJldHVybjsKPiAtICAgIH0KPiAtCj4gLSAgICAvLyBjLT5z dHJpZGUgYW5kIGMtPlFQU3RyaWRlIGFyZSBhbHdheXMgcG9zaXRpdmUKPiAtICAgIGlmKGMtPnN0 cmlkZSA8IG1pblN0cmlkZSB8fCBjLT5xcFN0cmlkZSA8IGFic1FQU3RyaWRlKQo+IC0gICAgICAg IHJlYWxsb2NCdWZmZXJzKGMsIHdpZHRoLCBoZWlnaHQsCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgRkZNQVgobWluU3RyaWRlLCBjLT5zdHJpZGUpLAo+IC0gICAgICAgICAgICAgICAgICAgICAg IEZGTUFYKGMtPnFwU3RyaWRlLCBhYnNRUFN0cmlkZSkpOwo+IC0KPiAtICAgIGlmKCFRUF9zdG9y ZSB8fCAobW9kZS0+bHVtTW9kZSAmIEZPUkNFX1FVQU5UKSl7Cj4gLSAgICAgICAgaW50IGk7Cj4g LSAgICAgICAgUVBfc3RvcmU9IGMtPmZvcmNlZFFQVGFibGU7Cj4gLSAgICAgICAgYWJzUVBTdHJp ZGUgPSBRUFN0cmlkZSA9IDA7Cj4gLSAgICAgICAgaWYobW9kZS0+bHVtTW9kZSAmIEZPUkNFX1FV QU5UKQo+IC0gICAgICAgICAgICBmb3IoaT0wOyBpPG1iV2lkdGg7IGkrKykgYy0+Zm9yY2VkUVBU YWJsZVtpXT0KPiBtb2RlLT5mb3JjZWRRdWFudDsKPiAtICAgICAgICBlbHNlCj4gLSAgICAgICAg ICAgIGZvcihpPTA7IGk8bWJXaWR0aDsgaSsrKSBjLT5mb3JjZWRRUFRhYmxlW2ldPSAxOwo+IC0g ICAgfQo+IC0KPiAtICAgIGlmKHBpY3RfdHlwZSAmIFBQX1BJQ1RfVFlQRV9RUDIpewo+IC0gICAg ICAgIGludCBpOwo+IC0gICAgICAgIGNvbnN0IGludCBjb3VudD0gRkZNQVgobWJIZWlnaHQgKiBh YnNRUFN0cmlkZSwgbWJXaWR0aCk7Cj4gLSAgICAgICAgZm9yKGk9MDsgaTwoY291bnQ+PjIpOyBp Kyspewo+IC0gICAgICAgICAgICBBVl9XTjMyKGMtPnN0ZFFQVGFibGUgKyAoaTw8MiksIEFWX1JO MzIoUVBfc3RvcmUgKyAoaTw8MikpID4+Cj4gMSAmIDB4N0Y3RjdGN0YpOwo+IC0gICAgICAgIH0K PiAtICAgICAgICBmb3IoaTw8PTI7IGk8Y291bnQ7IGkrKyl7Cj4gLSAgICAgICAgICAgIGMtPnN0 ZFFQVGFibGVbaV0gPSBRUF9zdG9yZVtpXT4+MTsKPiAtICAgICAgICB9Cj4gLSAgICAgICAgUVBf c3RvcmU9IGMtPnN0ZFFQVGFibGU7Cj4gLSAgICAgICAgUVBTdHJpZGU9IGFic1FQU3RyaWRlOwo+ IC0gICAgfQo+IC0KPiAtICAgIGlmKDApewo+IC0gICAgICAgIGludCB4LHk7Cj4gLSAgICAgICAg Zm9yKHk9MDsgeTxtYkhlaWdodDsgeSsrKXsKPiAtICAgICAgICAgICAgZm9yKHg9MDsgeDxtYldp ZHRoOyB4Kyspewo+IC0gICAgICAgICAgICAgICAgYXZfbG9nKGMsIEFWX0xPR19JTkZPLCAiJTJk ICIsIFFQX3N0b3JlW3ggKyB5KlFQU3RyaWRlXSk7Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAg ICAgICAgYXZfbG9nKGMsIEFWX0xPR19JTkZPLCAiXG4iKTsKPiAtICAgICAgICB9Cj4gLSAgICAg ICAgYXZfbG9nKGMsIEFWX0xPR19JTkZPLCAiXG4iKTsKPiAtICAgIH0KPiAtCj4gLSAgICBpZigo cGljdF90eXBlJjcpIT0zKXsKPiAtICAgICAgICBpZiAoUVBTdHJpZGUgPj0gMCl7Cj4gLSAgICAg ICAgICAgIGludCBpOwo+IC0gICAgICAgICAgICBjb25zdCBpbnQgY291bnQ9IEZGTUFYKG1iSGVp Z2h0ICogUVBTdHJpZGUsIG1iV2lkdGgpOwo+IC0gICAgICAgICAgICBmb3IoaT0wOyBpPChjb3Vu dD4+Mik7IGkrKyl7Cj4gLSAgICAgICAgICAgICAgICBBVl9XTjMyKGMtPm5vbkJRUFRhYmxlICsg KGk8PDIpLCBBVl9STjMyKFFQX3N0b3JlICsKPiAoaTw8MikpICYgMHgzRjNGM0YzRik7Cj4gLSAg ICAgICAgICAgIH0KPiAtICAgICAgICAgICAgZm9yKGk8PD0yOyBpPGNvdW50OyBpKyspewo+IC0g ICAgICAgICAgICAgICAgYy0+bm9uQlFQVGFibGVbaV0gPSBRUF9zdG9yZVtpXSAmIDB4M0Y7Cj4g LSAgICAgICAgICAgIH0KPiAtICAgICAgICB9IGVsc2Ugewo+IC0gICAgICAgICAgICBpbnQgaSxq Owo+IC0gICAgICAgICAgICBmb3IoaT0wOyBpPG1iSGVpZ2h0OyBpKyspIHsKPiAtICAgICAgICAg ICAgICAgIGZvcihqPTA7IGo8YWJzUVBTdHJpZGU7IGorKykgewo+IC0gICAgICAgICAgICAgICAg ICAgIGMtPm5vbkJRUFRhYmxlW2kqYWJzUVBTdHJpZGUral0gPQo+IFFQX3N0b3JlW2kqUVBTdHJp ZGUral0gJiAweDNGOwo+IC0gICAgICAgICAgICAgICAgfQo+IC0gICAgICAgICAgICB9Cj4gLSAg ICAgICAgfQo+IC0gICAgfQo+IC0KPiAtICAgIGF2X2xvZyhjLCBBVl9MT0dfREVCVUcsICJ1c2lu ZyBucHAgZmlsdGVycyAweCVYLzB4JVhcbiIsCj4gLSAgICAgICAgICAgbW9kZS0+bHVtTW9kZSwg bW9kZS0+Y2hyb21Nb2RlKTsKPiAtCj4gLSAgICBwb3N0UHJvY2VzcyhzcmNbMF0sIHNyY1N0cmlk ZVswXSwgZHN0WzBdLCBkc3RTdHJpZGVbMF0sCj4gLSAgICAgICAgICAgICAgICB3aWR0aCwgaGVp Z2h0LCBRUF9zdG9yZSwgUVBTdHJpZGUsIDAsIG1vZGUsIGMpOwo+IC0KPiAtICAgIGlmICghKHNy Y1sxXSAmJiBzcmNbMl0gJiYgZHN0WzFdICYmIGRzdFsyXSkpCj4gLSAgICAgICAgcmV0dXJuOwo+ IC0KPiAtICAgIHdpZHRoICA9ICh3aWR0aCApPj5jLT5oQ2hyb21hU3ViU2FtcGxlOwo+IC0gICAg aGVpZ2h0ID0gKGhlaWdodCk+PmMtPnZDaHJvbWFTdWJTYW1wbGU7Cj4gLQo+IC0gICAgaWYobW9k ZS0+Y2hyb21Nb2RlKXsKPiAtICAgICAgICBwb3N0UHJvY2VzcyhzcmNbMV0sIHNyY1N0cmlkZVsx XSwgZHN0WzFdLCBkc3RTdHJpZGVbMV0sCj4gLSAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhl aWdodCwgUVBfc3RvcmUsIFFQU3RyaWRlLCAxLCBtb2RlLCBjKTsKPiAtICAgICAgICBwb3N0UHJv Y2VzcyhzcmNbMl0sIHNyY1N0cmlkZVsyXSwgZHN0WzJdLCBkc3RTdHJpZGVbMl0sCj4gLSAgICAg ICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgUVBfc3RvcmUsIFFQU3RyaWRlLCAyLCBtb2Rl LCBjKTsKPiAtICAgIH0KPiAtICAgIGVsc2UgaWYoc3JjU3RyaWRlWzFdID09IGRzdFN0cmlkZVsx XSAmJiBzcmNTdHJpZGVbMl0gPT0gZHN0U3RyaWRlWzJdKXsKPiAtICAgICAgICBsaW5lY3B5KGRz dFsxXSwgc3JjWzFdLCBoZWlnaHQsIHNyY1N0cmlkZVsxXSk7Cj4gLSAgICAgICAgbGluZWNweShk c3RbMl0sIHNyY1syXSwgaGVpZ2h0LCBzcmNTdHJpZGVbMl0pOwo+IC0gICAgfWVsc2V7Cj4gLSAg ICAgICAgaW50IHk7Cj4gLSAgICAgICAgZm9yKHk9MDsgeTxoZWlnaHQ7IHkrKyl7Cj4gLSAgICAg ICAgICAgIG1lbWNweSgmKGRzdFsxXVt5KmRzdFN0cmlkZVsxXV0pLCAmKHNyY1sxXVt5KnNyY1N0 cmlkZVsxXV0pLAo+IHdpZHRoKTsKPiAtICAgICAgICAgICAgbWVtY3B5KCYoZHN0WzJdW3kqZHN0 U3RyaWRlWzJdXSksICYoc3JjWzJdW3kqc3JjU3RyaWRlWzJdXSksCj4gd2lkdGgpOwo+IC0gICAg ICAgIH0KPiAtICAgIH0KPiAtfQo+IGRpZmYgLS1naXQgYS9saWJwb3N0cHJvYy9wb3N0cHJvY2Vz cy5oIGIvbGlicG9zdHByb2MvcG9zdHByb2Nlc3MuaAo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IGQyYWRiNmNjYWQ3Li4wMDAwMDAwMDAwMAo+IC0tLSBhL2xpYnBvc3Rwcm9jL3Bv c3Rwcm9jZXNzLmgKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMTA5ICswLDAgQEAKPiAtLyoKPiAt ICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgTWljaGFlbCBOaWVkZXJtYXllciAobWljaGFlbG5p QGdteC5hdCkKPiAtICoKPiAtICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+IC0gKgo+ IC0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQo+IC0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+IC0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+IC0gKiAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+IC0gKgo+IC0gKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiAtICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiAt ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQo+IC0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz Lgo+IC0gKgo+IC0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+IC0gKiBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+IC0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQKPiA8aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3NlYXJjaC81MStGcmFu a2xpbitTdHJlZXQ/ZW50cnk9Z21haWwmc291cmNlPWc+LAo+IEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEgVVNBCj4gLSAqLwo+IC0KPiAtI2lmbmRlZiBQT1NUUFJPQ19QT1NUUFJP Q0VTU19ICj4gLSNkZWZpbmUgUE9TVFBST0NfUE9TVFBST0NFU1NfSAo+IC0KPiAtLyoqCj4gLSAq IEBmaWxlCj4gLSAqIEBpbmdyb3VwIGxwcAo+IC0gKiBleHRlcm5hbCBBUEkgaGVhZGVyCj4gLSAq Lwo+IC0KPiAtLyoqCj4gLSAqIEBkZWZncm91cCBscHAgbGlicG9zdHByb2MKPiAtICogVmlkZW8g cG9zdHByb2Nlc3NpbmcgbGlicmFyeS4KPiAtICoKPiAtICogQHsKPiAtICovCj4gLQo+IC0jaW5j bHVkZSAibGlicG9zdHByb2MvdmVyc2lvbl9tYWpvci5oIgo+IC0jaWZuZGVmIEhBVkVfQVZfQ09O RklHX0gKPiAtLyogV2hlbiBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBmZm1wZWcgYnVpbGQsIG9u bHkgaW5jbHVkZSB0aGUgbWFqb3IKPiB2ZXJzaW9uCj4gLSAqIHRvIGF2b2lkIHVubmVjZXNzYXJ5 IHJlYnVpbGRzLiBXaGVuIGluY2x1ZGVkIGV4dGVybmFsbHksIGtlZXAgaW5jbHVkaW5nCj4gLSAq IHRoZSBmdWxsIHZlcnNpb24gaW5mb3JtYXRpb24uICovCj4gLSNpbmNsdWRlICJsaWJwb3N0cHJv Yy92ZXJzaW9uLmgiCj4gLSNlbmRpZgo+IC0KPiAtLyoqCj4gLSAqIFJldHVybiB0aGUgTElCUE9T VFBST0NfVkVSU0lPTl9JTlQgY29uc3RhbnQuCj4gLSAqLwo+IC11bnNpZ25lZCBwb3N0cHJvY192 ZXJzaW9uKHZvaWQpOwo+IC0KPiAtLyoqCj4gLSAqIFJldHVybiB0aGUgbGlicG9zdHByb2MgYnVp bGQtdGltZSBjb25maWd1cmF0aW9uLgo+IC0gKi8KPiAtY29uc3QgY2hhciAqcG9zdHByb2NfY29u ZmlndXJhdGlvbih2b2lkKTsKPiAtCj4gLS8qKgo+IC0gKiBSZXR1cm4gdGhlIGxpYnBvc3Rwcm9j IGxpY2Vuc2UuCj4gLSAqLwo+IC1jb25zdCBjaGFyICpwb3N0cHJvY19saWNlbnNlKHZvaWQpOwo+ IC0KPiAtI2RlZmluZSBQUF9RVUFMSVRZX01BWCA2Cj4gLQo+IC0jaW5jbHVkZSA8aW50dHlwZXMu aD4KPiAtCj4gLXR5cGVkZWYgdm9pZCBwcF9jb250ZXh0Owo+IC10eXBlZGVmIHZvaWQgcHBfbW9k ZTsKPiAtCj4gLWV4dGVybiBjb25zdCBjaGFyIHBwX2hlbHBbXTsgLy8vPCBhIHNpbXBsZSBoZWxw IHRleHQKPiAtCj4gLXZvaWQgIHBwX3Bvc3Rwcm9jZXNzKGNvbnN0IHVpbnQ4X3QgKiBzcmNbM10s IGNvbnN0IGludCBzcmNTdHJpZGVbM10sCj4gLSAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qg KiBkc3RbM10sIGNvbnN0IGludCBkc3RTdHJpZGVbM10sCj4gLSAgICAgICAgICAgICAgICAgICAg IGludCBob3Jpem9udGFsU2l6ZSwgaW50IHZlcnRpY2FsU2l6ZSwKPiAtICAgICAgICAgICAgICAg ICAgICAgY29uc3QgaW50OF90ICpRUF9zdG9yZSwgIGludCBRUF9zdHJpZGUsCj4gLSAgICAgICAg ICAgICAgICAgICAgIHBwX21vZGUgKm1vZGUsIHBwX2NvbnRleHQgKnBwQ29udGV4dCwgaW50IHBp Y3RfdHlwZSk7Cj4gLQo+IC0KPiAtLyoqCj4gLSAqIFJldHVybiBhIHBwX21vZGUgb3IgTlVMTCBp ZiBhbiBlcnJvciBvY2N1cnJlZC4KPiAtICoKPiAtICogQHBhcmFtIG5hbWUgICAgdGhlIHN0cmlu ZyBhZnRlciAiLXBwIiBvbiB0aGUgY29tbWFuZCBsaW5lCj4gLSAqIEBwYXJhbSBxdWFsaXR5IGEg bnVtYmVyIGZyb20gMCB0byBQUF9RVUFMSVRZX01BWAo+IC0gKi8KPiAtcHBfbW9kZSAqcHBfZ2V0 X21vZGVfYnlfbmFtZV9hbmRfcXVhbGl0eShjb25zdCBjaGFyICpuYW1lLCBpbnQgcXVhbGl0eSk7 Cj4gLXZvaWQgcHBfZnJlZV9tb2RlKHBwX21vZGUgKm1vZGUpOwo+IC0KPiAtcHBfY29udGV4dCAq cHBfZ2V0X2NvbnRleHQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZmxhZ3MpOwo+IC12b2lk IHBwX2ZyZWVfY29udGV4dChwcF9jb250ZXh0ICpwcENvbnRleHQpOwo+IC0KPiAtI2RlZmluZSBQ UF9DUFVfQ0FQU19NTVggICAweDgwMDAwMDAwCj4gLSNkZWZpbmUgUFBfQ1BVX0NBUFNfTU1YMiAg MHgyMDAwMDAwMAo+IC0jaWYgRkZfQVBJX1BQX0FNRF8zRE5PVwo+IC0jZGVmaW5lIFBQX0NQVV9D QVBTXzNETk9XIDB4NDAwMDAwMDAKPiAtI2VuZGlmCj4gLSNkZWZpbmUgUFBfQ1BVX0NBUFNfQUxU SVZFQyAweDEwMDAwMDAwCj4gLSNkZWZpbmUgUFBfQ1BVX0NBUFNfQVVUTyAgMHgwMDA4MDAwMAo+ IC0KPiAtI2RlZmluZSBQUF9GT1JNQVQgICAgICAgICAweDAwMDAwMDA4Cj4gLSNkZWZpbmUgUFBf Rk9STUFUXzQyMCAgICAoMHgwMDAwMDAxMXxQUF9GT1JNQVQpCj4gLSNkZWZpbmUgUFBfRk9STUFU XzQyMiAgICAoMHgwMDAwMDAwMXxQUF9GT1JNQVQpCj4gLSNkZWZpbmUgUFBfRk9STUFUXzQxMSAg ICAoMHgwMDAwMDAwMnxQUF9GT1JNQVQpCj4gLSNkZWZpbmUgUFBfRk9STUFUXzQ0NCAgICAoMHgw MDAwMDAwMHxQUF9GT1JNQVQpCj4gLSNkZWZpbmUgUFBfRk9STUFUXzQ0MCAgICAoMHgwMDAwMDAx MHxQUF9GT1JNQVQpCj4gLQo+IC0jZGVmaW5lIFBQX1BJQ1RfVFlQRV9RUDIgIDB4MDAwMDAwMTAg Ly8vPCBNUEVHMiBzdHlsZSBRU2NhbGUKPiAtCj4gLS8qKgo+IC0gKiBAfQo+IC0gKi8KPiAtCj4g LSNlbmRpZiAvKiBQT1NUUFJPQ19QT1NUUFJPQ0VTU19IICovCj4gZGlmZiAtLWdpdCBhL2xpYnBv c3Rwcm9jL3Bvc3Rwcm9jZXNzX2FsdGl2ZWNfdGVtcGxhdGUuYwo+IGIvbGlicG9zdHByb2MvcG9z dHByb2Nlc3NfYWx0aXZlY190ZW1wbGF0ZS5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggZmVkZGFiNTAzNTYuLjAwMDAwMDAwMDAwCj4gLS0tIGEvbGlicG9zdHByb2MvcG9zdHBy b2Nlc3NfYWx0aXZlY190ZW1wbGF0ZS5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDEyMTQgKzAs MCBAQAo+IC0vKgo+IC0gKiBBbHRpVmVjIG9wdGltaXphdGlvbnMgKEMpIDIwMDQgUm9tYWluIERv bGJlYXUgPHJvbWFpbkBkb2xiZWF1Lm9yZz4KPiAtICoKPiAtICogYmFzZWQgb24gY29kZSBieSBD b3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBNaWNoYWVsIE5pZWRlcm1heWVyICgKPiBtaWNoYWVsbmlA Z214LmF0KQo+IC0gKgo+IC0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gLSAqCj4g LSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Cj4gLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gLSAqIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gLSAqCj4gLSAqIEZGbXBlZyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+IC0gKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+IC0g KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCj4gLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Cj4gLSAqCj4gLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4gLSAqIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKPiAwMjExMC0xMzAxIFVTQQo+IC0g Ki8KPiAtCj4gLSNpbmNsdWRlICJsaWJhdnV0aWwvYXZ1dGlsLmgiCj4gLSNpbmNsdWRlICJsaWJh dnV0aWwvbWVtX2ludGVybmFsLmgiCj4gLQo+IC0jZGVmaW5lCj4gQUxUSVZFQ19UUkFOU1BPU0Vf OHg4X1NIT1JUKHNyY19hLHNyY19iLHNyY19jLHNyY19kLHNyY19lLHNyY19mLHNyY19nLHNyY19o KQo+IFwKPiAtICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+IC0gICAgICAgIF9fdHlwZW9mX18oc3JjX2EpIHRlbXBBMSwg dGVtcEIxLCB0ZW1wQzEsIHRlbXBEMTsgICAgICAgICBcCj4gLSAgICAgICAgX190eXBlb2ZfXyhz cmNfYSkgdGVtcEUxLCB0ZW1wRjEsIHRlbXBHMSwgdGVtcEgxOyAgICAgICAgIFwKPiAtICAgICAg ICBfX3R5cGVvZl9fKHNyY19hKSB0ZW1wQTIsIHRlbXBCMiwgdGVtcEMyLCB0ZW1wRDI7ICAgICAg ICAgXAo+IC0gICAgICAgIF9fdHlwZW9mX18oc3JjX2EpIHRlbXBFMiwgdGVtcEYyLCB0ZW1wRzIs IHRlbXBIMjsgICAgICAgICBcCj4gLSAgICAgICAgdGVtcEExID0gdmVjX21lcmdlaCAoc3JjX2Es IHNyY19lKTsgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgICB0ZW1wQjEgPSB2ZWNf bWVyZ2VsIChzcmNfYSwgc3JjX2UpOyAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgICAg IHRlbXBDMSA9IHZlY19tZXJnZWggKHNyY19iLCBzcmNfZik7ICAgICAgICAgICAgICAgICAgICAg ICBcCj4gLSAgICAgICAgdGVtcEQxID0gdmVjX21lcmdlbCAoc3JjX2IsIHNyY19mKTsgICAgICAg ICAgICAgICAgICAgICAgIFwKPiAtICAgICAgICB0ZW1wRTEgPSB2ZWNfbWVyZ2VoIChzcmNfYywg c3JjX2cpOyAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgICAgIHRlbXBGMSA9IHZlY19t ZXJnZWwgKHNyY19jLCBzcmNfZyk7ICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAg dGVtcEcxID0gdmVjX21lcmdlaCAoc3JjX2QsIHNyY19oKTsgICAgICAgICAgICAgICAgICAgICAg IFwKPiAtICAgICAgICB0ZW1wSDEgPSB2ZWNfbWVyZ2VsIChzcmNfZCwgc3JjX2gpOyAgICAgICAg ICAgICAgICAgICAgICAgXAo+IC0gICAgICAgIHRlbXBBMiA9IHZlY19tZXJnZWggKHRlbXBBMSwg dGVtcEUxKTsgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAgdGVtcEIyID0gdmVjX21l cmdlbCAodGVtcEExLCB0ZW1wRTEpOyAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgICB0 ZW1wQzIgPSB2ZWNfbWVyZ2VoICh0ZW1wQjEsIHRlbXBGMSk7ICAgICAgICAgICAgICAgICAgICAg XAo+IC0gICAgICAgIHRlbXBEMiA9IHZlY19tZXJnZWwgKHRlbXBCMSwgdGVtcEYxKTsgICAgICAg ICAgICAgICAgICAgICBcCj4gLSAgICAgICAgdGVtcEUyID0gdmVjX21lcmdlaCAodGVtcEMxLCB0 ZW1wRzEpOyAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgICB0ZW1wRjIgPSB2ZWNfbWVy Z2VsICh0ZW1wQzEsIHRlbXBHMSk7ICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgICAgIHRl bXBHMiA9IHZlY19tZXJnZWggKHRlbXBEMSwgdGVtcEgxKTsgICAgICAgICAgICAgICAgICAgICBc Cj4gLSAgICAgICAgdGVtcEgyID0gdmVjX21lcmdlbCAodGVtcEQxLCB0ZW1wSDEpOyAgICAgICAg ICAgICAgICAgICAgIFwKPiAtICAgICAgICBzcmNfYSA9IHZlY19tZXJnZWggKHRlbXBBMiwgdGVt cEUyKTsgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgICAgIHNyY19iID0gdmVjX21lcmdl bCAodGVtcEEyLCB0ZW1wRTIpOyAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAgc3Jj X2MgPSB2ZWNfbWVyZ2VoICh0ZW1wQjIsIHRlbXBGMik7ICAgICAgICAgICAgICAgICAgICAgIFwK PiAtICAgICAgICBzcmNfZCA9IHZlY19tZXJnZWwgKHRlbXBCMiwgdGVtcEYyKTsgICAgICAgICAg ICAgICAgICAgICAgXAo+IC0gICAgICAgIHNyY19lID0gdmVjX21lcmdlaCAodGVtcEMyLCB0ZW1w RzIpOyAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAgc3JjX2YgPSB2ZWNfbWVyZ2Vs ICh0ZW1wQzIsIHRlbXBHMik7ICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgICBzcmNf ZyA9IHZlY19tZXJnZWggKHRlbXBEMiwgdGVtcEgyKTsgICAgICAgICAgICAgICAgICAgICAgXAo+ IC0gICAgICAgIHNyY19oID0gdmVjX21lcmdlbCAodGVtcEQyLCB0ZW1wSDIpOyAgICAgICAgICAg ICAgICAgICAgICBcCj4gLSAgICB9IHdoaWxlICgwKQo+IC0KPiAtCj4gLXN0YXRpYyBpbmxpbmUg aW50IHZlcnRDbGFzc2lmeV9hbHRpdmVjKHVpbnQ4X3Qgc3JjW10sIGludCBzdHJpZGUsCj4gUFBD b250ZXh0ICpjKSB7Cj4gLSAgICAvKgo+IC0gICAgdGhpcyBjb2RlIG1ha2VzIG5vIGFzc3VtcHRp b24gb24gc3JjIG9yIHN0cmlkZS4KPiAtICAgIE9uZSBjb3VsZCByZW1vdmUgdGhlIHJlY29tcHV0 YXRpb24gb2YgdGhlIHBlcm0KPiAtICAgIHZlY3RvciBieSBhc3N1bWluZyAoc3RyaWRlICUgMTYp ID09IDAsIHVuZm9ydHVuYXRlbHkKPiAtICAgIHRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLgo+IC0g ICAgKi8KPiAtICAgIHNob3J0IGRhdGFfMCA9ICgoYy0+bm9uQlFQKmMtPnBwTW9kZS5iYXNlRGNE aWZmKT4+OCkgKyAxOwo+IC0gICAgREVDTEFSRV9BTElHTkVEKDE2LCBzaG9ydCwgZGF0YSlbOF0g PQo+IC0gICAgICAgICAgICAgICAgICAgIHsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgZGF0 YV8wLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhXzAgKiAyICsgMSwKPiAtICAgICAg ICAgICAgICAgICAgICAgICAgYy0+UVAgKiAyLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICBj LT5RUCAqIDQKPiAtICAgICAgICAgICAgICAgICAgICB9Owo+IC0gICAgaW50IG51bUVxOwo+IC0g ICAgdWludDhfdCAqc3JjMiA9IHNyYzsKPiAtICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdl9kY09m ZnNldDsKPiAtICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdjJRUDsKPiAtICAgIHZlY3RvciB1bnNp Z25lZCBzaG9ydCB2NFFQOwo+IC0gICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZfZGNUaHJlc2hv bGQ7Cj4gLSAgICBjb25zdCBpbnQgcHJvcGVyU3RyaWRlID0gKHN0cmlkZSAlIDE2KTsKPiAtICAg IGNvbnN0IGludCBzcmNBbGlnbiA9ICgodW5zaWduZWQgbG9uZylzcmMyICUgMTYpOwo+IC0gICAg Y29uc3QgaW50IHR3b192ZWN0b3JzID0gKChzcmNBbGlnbiA+IDgpIHx8IHByb3BlclN0cmlkZSkg PyAxIDogMDsKPiAtICAgIGNvbnN0IHZlY3RvciBzaWduZWQgaW50IHplcm8gPSB2ZWNfc3BsYXRf czMyKDApOwo+IC0gICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCBtYXNrID0gdmVjX3NwbGF0 X3MxNigxKTsKPiAtICAgIHZlY3RvciBzaWduZWQgaW50IHZfbnVtRXEgPSB2ZWNfc3BsYXRfczMy KDApOwo+IC0gICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2X2RhdGEgPSB2ZWNfbGQoMCwgZGF0YSk7 Cj4gLSAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZfc3JjQXNzMCwgdl9zcmNBc3MxLCB2X3NyY0Fz czIsIHZfc3JjQXNzMywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgdl9zcmNBc3M0LCB2X3Ny Y0FzczUsIHZfc3JjQXNzNiwgdl9zcmNBc3M3Owo+IC0vL0ZJWE1FIGF2b2lkIHRoaXMgbWVzcyBp ZiBwb3NzaWJsZQo+IC0gICAgcmVnaXN0ZXIgaW50IGowID0gMCwKPiAtICAgICAgICAgICAgICAg ICBqMSA9IHN0cmlkZSwKPiAtICAgICAgICAgICAgICAgICBqMiA9IDIgKiBzdHJpZGUsCj4gLSAg ICAgICAgICAgICAgICAgajMgPSAzICogc3RyaWRlLAo+IC0gICAgICAgICAgICAgICAgIGo0ID0g NCAqIHN0cmlkZSwKPiAtICAgICAgICAgICAgICAgICBqNSA9IDUgKiBzdHJpZGUsCj4gLSAgICAg ICAgICAgICAgICAgajYgPSA2ICogc3RyaWRlLAo+IC0gICAgICAgICAgICAgICAgIGo3ID0gNyAq IHN0cmlkZTsKPiAtICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZfc3JjQTAsIHZfc3JjQTEsIHZf c3JjQTIsIHZfc3JjQTMsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICB2X3NyY0E0LCB2X3Ny Y0E1LCB2X3NyY0E2LCB2X3NyY0E3Owo+IC0KPiAtICAgIHZfZGNPZmZzZXQgPSB2ZWNfc3BsYXQo dl9kYXRhLCAwKTsKPiAtICAgIHZfZGNUaHJlc2hvbGQgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0 KXZlY19zcGxhdCh2X2RhdGEsIDEpOwo+IC0gICAgdjJRUCA9IHZlY19zcGxhdCh2X2RhdGEsIDIp Owo+IC0gICAgdjRRUCA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX3NwbGF0KHZfZGF0YSwg Myk7Cj4gLQo+IC0gICAgc3JjMiArPSBzdHJpZGUgKiA0Owo+IC0KPiAtI2RlZmluZSBMT0FEX0xJ TkUoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAo+IC0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBwZXJtIyNp ID0gdmVjX2x2c2woaiMjaSwgc3JjMik7ICAgICAgICAgICAgICAgIFwKPiAtICAgIHZlY3RvciB1 bnNpZ25lZCBjaGFyIHZfc3JjQTIjI2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+IC0gICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdl9zcmNBMSMjaSA9IHZlY19sZChqIyNp LCBzcmMyKTsgICAgICAgICAgICAgICBcCj4gLSAgICBpZiAodHdvX3ZlY3RvcnMpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgICB2 X3NyY0EyIyNpID0gdmVjX2xkKGojI2kgKyAxNiwgc3JjMik7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAo+IC0gICAgdl9zcmNBIyNpID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAgdmVjX3Blcm0odl9zcmNBMSMj aSwgdl9zcmNBMiMjaSwgcGVybSMjaSk7ICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgIHZf c3JjQXNzIyNpID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+IC0gICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19tZXJnZWgoKHZl Y3RvciBzaWduZWQgY2hhcil6ZXJvLCAgICAgICBcCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKXZfc3JjQSMjaSk7IH0KPiAtCj4g LSNkZWZpbmUgTE9BRF9MSU5FX0FMSUdORUQoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKPiAtICAgIHZfc3JjQSMjaSA9IHZlY19sZChqIyNpLCBzcmMyKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgdl9zcmNBc3MjI2kg PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4gLSAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpdmVjX21lcmdlaCgodmVjdG9yIHNpZ25l ZCBjaGFyKXplcm8sICAgICAgIFwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpdl9zcmNBIyNpKQo+IC0KPiAtICAgIC8qIFNwZWNp YWwtY2FzaW5nIHRoZSBhbGlnbmVkIGNhc2UgaXMgd29ydGh3aGlsZSwgYXMgYWxsIGNhbGxzIGZy b20KPiAtICAgICAqIHRoZSAodHJhbnNwb3NlZCkgaG9yaXpvbnRhYmxlIGRlYmxvY2tzIHdpbGwg YmUgYWxpZ25lZCwgaW4gYWRkaXRpb24KPiAtICAgICAqIHRvIHRoZSBuYXR1cmFsbHkgYWxpZ25l ZCB2ZXJ0aWNhbCBkZWJsb2Nrcy4gKi8KPiAtICAgIGlmIChwcm9wZXJTdHJpZGUgJiYgc3JjQWxp Z24pIHsKPiAtICAgICAgICBMT0FEX0xJTkVfQUxJR05FRCgwKTsKPiAtICAgICAgICBMT0FEX0xJ TkVfQUxJR05FRCgxKTsKPiAtICAgICAgICBMT0FEX0xJTkVfQUxJR05FRCgyKTsKPiAtICAgICAg ICBMT0FEX0xJTkVfQUxJR05FRCgzKTsKPiAtICAgICAgICBMT0FEX0xJTkVfQUxJR05FRCg0KTsK PiAtICAgICAgICBMT0FEX0xJTkVfQUxJR05FRCg1KTsKPiAtICAgICAgICBMT0FEX0xJTkVfQUxJ R05FRCg2KTsKPiAtICAgICAgICBMT0FEX0xJTkVfQUxJR05FRCg3KTsKPiAtICAgIH0gZWxzZSB7 Cj4gLSAgICAgICAgTE9BRF9MSU5FKDApOwo+IC0gICAgICAgIExPQURfTElORSgxKTsKPiAtICAg ICAgICBMT0FEX0xJTkUoMik7Cj4gLSAgICAgICAgTE9BRF9MSU5FKDMpOwo+IC0gICAgICAgIExP QURfTElORSg0KTsKPiAtICAgICAgICBMT0FEX0xJTkUoNSk7Cj4gLSAgICAgICAgTE9BRF9MSU5F KDYpOwo+IC0gICAgICAgIExPQURfTElORSg3KTsKPiAtICAgIH0KPiAtI3VuZGVmIExPQURfTElO RQo+IC0jdW5kZWYgTE9BRF9MSU5FX0FMSUdORUQKPiAtCj4gLSNkZWZpbmUgSVRFUihpLCBqKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAt ICAgIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgdl9kaWZmIyNpID0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+IC0gICAgICAgIHZlY19zdWIodl9zcmNBc3MjI2ksIHZfc3JjQXNz IyNqKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICBjb25zdCB2ZWN0b3Ig c2lnbmVkIHNob3J0IHZfc3VtIyNpID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiAtICAgICAgICB2ZWNfYWRkKHZfZGlmZiMjaSwgdl9kY09mZnNldCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+IC0gICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB2X2Nv bXAjI2kgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAgKHZlY3Rv ciBzaWduZWQgc2hvcnQpdmVjX2NtcGx0KCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpdl9zdW0jI2ks IFwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdl9kY1RocmVzaG9s ZCk7ICAgICAgICAgICAgICAgICAgXAo+IC0gICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB2 X3BhcnQjI2kgPSB2ZWNfYW5kKG1hc2ssIHZfY29tcCMjaSk7Cj4gLQo+IC0gICAgewo+IC0gICAg ICAgIElURVIoMCwgMSkKPiAtICAgICAgICBJVEVSKDEsIDIpCj4gLSAgICAgICAgSVRFUigyLCAz KQo+IC0gICAgICAgIElURVIoMywgNCkKPiAtICAgICAgICBJVEVSKDQsIDUpCj4gLSAgICAgICAg SVRFUig1LCA2KQo+IC0gICAgICAgIElURVIoNiwgNykKPiAtCj4gLSAgICAgICAgdl9udW1FcSA9 IHZlY19zdW00cyh2X3BhcnQwLCB2X251bUVxKTsKPiAtICAgICAgICB2X251bUVxID0gdmVjX3N1 bTRzKHZfcGFydDEsIHZfbnVtRXEpOwo+IC0gICAgICAgIHZfbnVtRXEgPSB2ZWNfc3VtNHModl9w YXJ0Miwgdl9udW1FcSk7Cj4gLSAgICAgICAgdl9udW1FcSA9IHZlY19zdW00cyh2X3BhcnQzLCB2 X251bUVxKTsKPiAtICAgICAgICB2X251bUVxID0gdmVjX3N1bTRzKHZfcGFydDQsIHZfbnVtRXEp Owo+IC0gICAgICAgIHZfbnVtRXEgPSB2ZWNfc3VtNHModl9wYXJ0NSwgdl9udW1FcSk7Cj4gLSAg ICAgICAgdl9udW1FcSA9IHZlY19zdW00cyh2X3BhcnQ2LCB2X251bUVxKTsKPiAtICAgIH0KPiAt Cj4gLSN1bmRlZiBJVEVSCj4gLQo+IC0gICAgdl9udW1FcSA9IHZlY19zdW1zKHZfbnVtRXEsIHpl cm8pOwo+IC0KPiAtICAgIHZfbnVtRXEgPSB2ZWNfc3BsYXQodl9udW1FcSwgMyk7Cj4gLSAgICB2 ZWNfc3RlKHZfbnVtRXEsIDAsICZudW1FcSk7Cj4gLQo+IC0gICAgaWYgKG51bUVxID4gYy0+cHBN b2RlLmZsYXRuZXNzVGhyZXNob2xkKXsKPiAtICAgICAgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQg Y2hhciBtbW9QMSA9IChjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhcikKPiAtICAgICAgICAgICAg ezB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsCj4gLSAgICAg ICAgICAgICAweDAwLCAweDAxLCAweDEyLCAweDEzLCAweDA4LCAweDA5LCAweDFBLCAweDFCfTsK PiAtICAgICAgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciBtbW9QMiA9IChjb25zdCB2ZWN0 b3IgdW5zaWduZWQgY2hhcikKPiAtICAgICAgICAgICAgezB4MDQsIDB4MDUsIDB4MTYsIDB4MTcs IDB4MEMsIDB4MEQsIDB4MUUsIDB4MUYsCj4gLSAgICAgICAgICAgICAweDFmLCAweDFmLCAweDFm LCAweDFmLCAweDFmLCAweDFmLCAweDFmLCAweDFmfTsKPiAtICAgICAgICBjb25zdCB2ZWN0b3Ig dW5zaWduZWQgY2hhciBtbW9QID0gKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyKQo+IC0gICAg ICAgICAgICB2ZWNfbHZzbCg4LCAodW5zaWduZWQgY2hhciopMCk7Cj4gLQo+IC0gICAgICAgIHZl Y3RvciBzaWduZWQgc2hvcnQgbW1vTDEgPSB2ZWNfcGVybSh2X3NyY0FzczAsIHZfc3JjQXNzMiwg bW1vUDEpOwo+IC0gICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgbW1vTDIgPSB2ZWNfcGVybSh2 X3NyY0FzczQsIHZfc3JjQXNzNiwgbW1vUDIpOwo+IC0gICAgICAgIHZlY3RvciBzaWduZWQgc2hv cnQgbW1vTCA9IHZlY19wZXJtKG1tb0wxLCBtbW9MMiwgbW1vUCk7Cj4gLSAgICAgICAgdmVjdG9y IHNpZ25lZCBzaG9ydCBtbW9SMSA9IHZlY19wZXJtKHZfc3JjQXNzNSwgdl9zcmNBc3M3LCBtbW9Q MSk7Cj4gLSAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBtbW9SMiA9IHZlY19wZXJtKHZfc3Jj QXNzMSwgdl9zcmNBc3MzLCBtbW9QMik7Cj4gLSAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBt bW9SID0gdmVjX3Blcm0obW1vUjEsIG1tb1IyLCBtbW9QKTsKPiAtICAgICAgICB2ZWN0b3Igc2ln bmVkIHNob3J0IG1tb0RpZmYgPSB2ZWNfc3ViKG1tb0wsIG1tb1IpOwo+IC0gICAgICAgIHZlY3Rv ciB1bnNpZ25lZCBzaG9ydCBtbW9TdW0gPSAodmVjdG9yIHVuc2lnbmVkCj4gc2hvcnQpdmVjX2Fk ZChtbW9EaWZmLCB2MlFQKTsKPiAtCj4gLSAgICAgICAgaWYgKHZlY19hbnlfZ3QobW1vU3VtLCB2 NFFQKSkKPiAtICAgICAgICAgICAgcmV0dXJuIDA7Cj4gLSAgICAgICAgZWxzZQo+IC0gICAgICAg ICAgICByZXR1cm4gMTsKPiAtICAgIH0KPiAtICAgIGVsc2UgcmV0dXJuIDI7Cj4gLX0KPiAtCj4g LXN0YXRpYyBpbmxpbmUgdm9pZCBkb1ZlcnRMb3dQYXNzX2FsdGl2ZWModWludDhfdCAqc3JjLCBp bnQgc3RyaWRlLAo+IFBQQ29udGV4dCAqYykgewo+IC0gICAgLyoKPiAtICAgIHRoaXMgY29kZSBt YWtlcyBubyBhc3N1bXB0aW9uIG9uIHNyYyBvciBzdHJpZGUuCj4gLSAgICBPbmUgY291bGQgcmVt b3ZlIHRoZSByZWNvbXB1dGF0aW9uIG9mIHRoZSBwZXJtCj4gLSAgICB2ZWN0b3IgYnkgYXNzdW1p bmcgKHN0cmlkZSAlIDE2KSA9PSAwLCB1bmZvcnR1bmF0ZWx5Cj4gLSAgICB0aGlzIGlzIG5vdCBh bHdheXMgdHJ1ZS4gUXVpdGUgYSBsb3Qgb2YgbG9hZC9zdG9yZXMKPiAtICAgIGNhbiBiZSByZW1v dmVkIGJ5IGFzc3VtaW5nIHByb3BlciBhbGlnbm1lbnQgb2YKPiAtICAgIHNyYyAmIHN0cmlkZSA6 LSgKPiAtICAgICovCj4gLSAgICB1aW50OF90ICpzcmMyID0gc3JjOwo+IC0gICAgY29uc3QgdmVj dG9yIHNpZ25lZCBpbnQgemVybyA9IHZlY19zcGxhdF9zMzIoMCk7Cj4gLSAgICBjb25zdCBpbnQg cHJvcGVyU3RyaWRlID0gKHN0cmlkZSAlIDE2KTsKPiAtICAgIGNvbnN0IGludCBzcmNBbGlnbiA9 ICgodW5zaWduZWQgbG9uZylzcmMyICUgMTYpOwo+IC0gICAgREVDTEFSRV9BTElHTkVEKDE2LCBz aG9ydCwgcXApWzhdID0ge2MtPlFQfTsKPiAtICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdnFwID0g dmVjX2xkKDAsIHFwKTsKPiAtICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmIwLCB2YjEsIHZiMiwg dmIzLCB2YjQsIHZiNSwgdmI2LCB2YjcsIHZiOCwgdmI5Owo+IC0gICAgdmVjdG9yIHVuc2lnbmVk IGNoYXIgdmJBMCwgYXZfdW5pbml0KHZiQTEpLCBhdl91bmluaXQodmJBMiksCj4gYXZfdW5pbml0 KHZiQTMpLCBhdl91bmluaXQodmJBNCksIGF2X3VuaW5pdCh2YkE1KSwgYXZfdW5pbml0KHZiQTYp LAo+IGF2X3VuaW5pdCh2YkE3KSwgYXZfdW5pbml0KHZiQTgpLCB2YkE5Owo+IC0gICAgdmVjdG9y IHVuc2lnbmVkIGNoYXIgdmJCMCwgYXZfdW5pbml0KHZiQjEpLCBhdl91bmluaXQodmJCMiksCj4g YXZfdW5pbml0KHZiQjMpLCBhdl91bmluaXQodmJCNCksIGF2X3VuaW5pdCh2YkI1KSwgYXZfdW5p bml0KHZiQjYpLAo+IGF2X3VuaW5pdCh2YkI3KSwgYXZfdW5pbml0KHZiQjgpLCB2YkI5Owo+IC0g ICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmJUMCwgdmJUMSwgdmJUMiwgdmJUMywgdmJUNCwgdmJU NSwgdmJUNiwgdmJUNywKPiB2YlQ4LCB2YlQ5Owo+IC0gICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIg cGVybWwwLCBwZXJtbDEsIHBlcm1sMiwgcGVybWwzLCBwZXJtbDQsCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICBwZXJtbDUsIHBlcm1sNiwgcGVybWw3LCBwZXJtbDgsIHBlcm1sOTsKPiAtICAg IHJlZ2lzdGVyIGludCBqMCA9IDAsCj4gLSAgICAgICAgICAgICAgICAgajEgPSBzdHJpZGUsCj4g LSAgICAgICAgICAgICAgICAgajIgPSAyICogc3RyaWRlLAo+IC0gICAgICAgICAgICAgICAgIGoz ID0gMyAqIHN0cmlkZSwKPiAtICAgICAgICAgICAgICAgICBqNCA9IDQgKiBzdHJpZGUsCj4gLSAg ICAgICAgICAgICAgICAgajUgPSA1ICogc3RyaWRlLAo+IC0gICAgICAgICAgICAgICAgIGo2ID0g NiAqIHN0cmlkZSwKPiAtICAgICAgICAgICAgICAgICBqNyA9IDcgKiBzdHJpZGUsCj4gLSAgICAg ICAgICAgICAgICAgajggPSA4ICogc3RyaWRlLAo+IC0gICAgICAgICAgICAgICAgIGo5ID0gOSAq IHN0cmlkZTsKPiAtCj4gLSAgICB2cXAgPSB2ZWNfc3BsYXQodnFwLCAwKTsKPiAtCj4gLSAgICBz cmMyICs9IHN0cmlkZSozOwo+IC0KPiAtI2RlZmluZSBMT0FEX0xJTkUoaSkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgcGVybWwjI2kg PSB2ZWNfbHZzbChpICogc3RyaWRlLCBzcmMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gLSAgICB2YkEjI2kgPSB2ZWNfbGQoaSAqIHN0cmlkZSwgc3JjMik7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgIHZiQiMjaSA9IHZlY19sZChpICogc3RyaWRl ICsgMTYsIHNyYzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgdmJUIyNp ID0gdmVjX3Blcm0odmJBIyNpLCB2YkIjI2ksIHBlcm1sIyNpKTsgICAgICAgICAgICAgICAgICAg ICAgICBcCj4gLSAgICB2YiMjaSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9y dCl2ZWNfbWVyZ2VoKCh2ZWN0b3IgdW5zaWduZWQgY2hhcil6ZXJvLCAgICAgXAo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKXZi VCMjaSkKPiAtCj4gLSNkZWZpbmUgTE9BRF9MSU5FX0FMSUdORUQoaSkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgIHZiVCMjaSA9IHZlY19sZChqIyNp LCBzcmMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAg dmIjI2kgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCj4gLSAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpdmVjX21lcmdlaCgo dmVjdG9yIHNpZ25lZCBjaGFyKXplcm8sICAgICAgIFwKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpdmJUIyNpKQo+IC0KPiAtICAg ICAgLyogU3BlY2lhbC1jYXNpbmcgdGhlIGFsaWduZWQgY2FzZSBpcyB3b3J0aHdoaWxlLCBhcyBh bGwgY2FsbHMgZnJvbQo+IC0gICAgICAgKiB0aGUgKHRyYW5zcG9zZWQpIGhvcml6b250YWJsZSBk ZWJsb2NrcyB3aWxsIGJlIGFsaWduZWQsIGluCj4gYWRkaXRpb24KPiAtICAgICAgICogdG8gdGhl IG5hdHVyYWxseSBhbGlnbmVkIHZlcnRpY2FsIGRlYmxvY2tzLiAqLwo+IC0gICAgaWYgKHByb3Bl clN0cmlkZSAmJiBzcmNBbGlnbikgewo+IC0gICAgICAgICAgTE9BRF9MSU5FX0FMSUdORUQoMCk7 Cj4gLSAgICAgICAgICBMT0FEX0xJTkVfQUxJR05FRCgxKTsKPiAtICAgICAgICAgIExPQURfTElO RV9BTElHTkVEKDIpOwo+IC0gICAgICAgICAgTE9BRF9MSU5FX0FMSUdORUQoMyk7Cj4gLSAgICAg ICAgICBMT0FEX0xJTkVfQUxJR05FRCg0KTsKPiAtICAgICAgICAgIExPQURfTElORV9BTElHTkVE KDUpOwo+IC0gICAgICAgICAgTE9BRF9MSU5FX0FMSUdORUQoNik7Cj4gLSAgICAgICAgICBMT0FE X0xJTkVfQUxJR05FRCg3KTsKPiAtICAgICAgICAgIExPQURfTElORV9BTElHTkVEKDgpOwo+IC0g ICAgICAgICAgTE9BRF9MSU5FX0FMSUdORUQoOSk7Cj4gLSAgICB9IGVsc2Ugewo+IC0gICAgICAg ICAgTE9BRF9MSU5FKDApOwo+IC0gICAgICAgICAgTE9BRF9MSU5FKDEpOwo+IC0gICAgICAgICAg TE9BRF9MSU5FKDIpOwo+IC0gICAgICAgICAgTE9BRF9MSU5FKDMpOwo+IC0gICAgICAgICAgTE9B RF9MSU5FKDQpOwo+IC0gICAgICAgICAgTE9BRF9MSU5FKDUpOwo+IC0gICAgICAgICAgTE9BRF9M SU5FKDYpOwo+IC0gICAgICAgICAgTE9BRF9MSU5FKDcpOwo+IC0gICAgICAgICAgTE9BRF9MSU5F KDgpOwo+IC0gICAgICAgICAgTE9BRF9MSU5FKDkpOwo+IC0gICAgfQo+IC0jdW5kZWYgTE9BRF9M SU5FCj4gLSN1bmRlZiBMT0FEX0xJTkVfQUxJR05FRAo+IC0gICAgewo+IC0gICAgICAgIGNvbnN0 IHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2XzIgPSB2ZWNfc3BsYXRfdTE2KDIpOwo+IC0gICAgICAg IGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2XzQgPSB2ZWNfc3BsYXRfdTE2KDQpOwo+IC0K PiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHZfZGlmZjAxID0gdmVjX3N1Yih2 YjAsIHZiMSk7Cj4gLSAgICAgICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZfY21wMDEg PQo+IC0gICAgICAgICAgICAoY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0KSB2ZWNfY21wbHQo dmVjX2Ficyh2X2RpZmYwMSksCj4gdnFwKTsKPiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVk IHNob3J0IHZfZmlyc3QgPSB2ZWNfc2VsKHZiMSwgdmIwLCB2X2NtcDAxKTsKPiAtICAgICAgICBj b25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHZfZGlmZjg5ID0gdmVjX3N1Yih2YjgsIHZiOSk7Cj4g LSAgICAgICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZfY21wODkgPQo+IC0gICAgICAg ICAgICAoY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0KSB2ZWNfY21wbHQodmVjX2Ficyh2X2Rp ZmY4OSksCj4gdnFwKTsKPiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHZfbGFz dCA9IHZlY19zZWwodmI4LCB2YjksIHZfY21wODkpOwo+IC0KPiAtICAgICAgICBjb25zdCB2ZWN0 b3Igc2lnbmVkIHNob3J0IHRlbXAwMSA9IHZlY19tbGFkZCh2X2ZpcnN0LCAodmVjdG9yCj4gc2ln bmVkIHNob3J0KXZfNCwgdmIxKTsKPiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0 IHRlbXAwMiA9IHZlY19hZGQodmIyLCB2YjMpOwo+IC0gICAgICAgIGNvbnN0IHZlY3RvciBzaWdu ZWQgc2hvcnQgdGVtcDAzID0gdmVjX2FkZCh0ZW1wMDEsICh2ZWN0b3Igc2lnbmVkCj4gc2hvcnQp dl80KTsKPiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHZfc3Vtc0IwID0gdmVj X2FkZCh0ZW1wMDIsIHRlbXAwMyk7Cj4gLQo+IC0gICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQg c2hvcnQgdGVtcDExID0gdmVjX3N1Yih2X3N1bXNCMCwgdl9maXJzdCk7Cj4gLSAgICAgICAgY29u c3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB2X3N1bXNCMSA9IHZlY19hZGQodGVtcDExLCB2YjQpOwo+ IC0KPiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHRlbXAyMSA9IHZlY19zdWIo dl9zdW1zQjEsIHZfZmlyc3QpOwo+IC0gICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQg dl9zdW1zQjIgPSB2ZWNfYWRkKHRlbXAyMSwgdmI1KTsKPiAtCj4gLSAgICAgICAgY29uc3QgdmVj dG9yIHNpZ25lZCBzaG9ydCB0ZW1wMzEgPSB2ZWNfc3ViKHZfc3Vtc0IyLCB2X2ZpcnN0KTsKPiAt ICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHZfc3Vtc0IzID0gdmVjX2FkZCh0ZW1w MzEsIHZiNik7Cj4gLQo+IC0gICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgdGVtcDQx ID0gdmVjX3N1Yih2X3N1bXNCMywgdl9maXJzdCk7Cj4gLSAgICAgICAgY29uc3QgdmVjdG9yIHNp Z25lZCBzaG9ydCB2X3N1bXNCNCA9IHZlY19hZGQodGVtcDQxLCB2YjcpOwo+IC0KPiAtICAgICAg ICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHRlbXA1MSA9IHZlY19zdWIodl9zdW1zQjQsIHZi MSk7Cj4gLSAgICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB2X3N1bXNCNSA9IHZlY19h ZGQodGVtcDUxLCB2YjgpOwo+IC0KPiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0 IHRlbXA2MSA9IHZlY19zdWIodl9zdW1zQjUsIHZiMik7Cj4gLSAgICAgICAgY29uc3QgdmVjdG9y IHNpZ25lZCBzaG9ydCB2X3N1bXNCNiA9IHZlY19hZGQodGVtcDYxLCB2X2xhc3QpOwo+IC0KPiAt ICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHRlbXA3MSA9IHZlY19zdWIodl9zdW1z QjYsIHZiMyk7Cj4gLSAgICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB2X3N1bXNCNyA9 IHZlY19hZGQodGVtcDcxLCB2X2xhc3QpOwo+IC0KPiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2ln bmVkIHNob3J0IHRlbXA4MSA9IHZlY19zdWIodl9zdW1zQjcsIHZiNCk7Cj4gLSAgICAgICAgY29u c3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB2X3N1bXNCOCA9IHZlY19hZGQodGVtcDgxLCB2X2xhc3Qp Owo+IC0KPiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IHRlbXA5MSA9IHZlY19z dWIodl9zdW1zQjgsIHZiNSk7Cj4gLSAgICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB2 X3N1bXNCOSA9IHZlY19hZGQodGVtcDkxLCB2X2xhc3QpOwo+IC0KPiAtICAgICNkZWZpbmUgQ09N UFVURV9WUihpLCBqLCBrKQo+ICAgIFwKPiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNo b3J0IHRlbXBzMSMjaSA9Cj4gICAgXAo+IC0gICAgICAgICAgICB2ZWNfYWRkKHZfc3Vtc0IjI2ks IHZfc3Vtc0IjI2spOwo+ICAgXAo+IC0gICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQg dGVtcHMyIyNpID0KPiAgICBcCj4gLSAgICAgICAgICAgIHZlY19tbGFkZCh2YiMjaiwgKHZlY3Rv ciBzaWduZWQgc2hvcnQpdl8yLCB0ZW1wczEjI2kpOwo+ICAgXAo+IC0gICAgICAgIGNvbnN0IHZl Y3RvciBzaWduZWQgc2hvcnQgIHZyIyNqID0gdmVjX3NyYSh0ZW1wczIjI2ksIHZfNCkKPiAtCj4g LSAgICAgICAgQ09NUFVURV9WUigwLCAxLCAyKTsKPiAtICAgICAgICBDT01QVVRFX1ZSKDEsIDIs IDMpOwo+IC0gICAgICAgIENPTVBVVEVfVlIoMiwgMywgNCk7Cj4gLSAgICAgICAgQ09NUFVURV9W UigzLCA0LCA1KTsKPiAtICAgICAgICBDT01QVVRFX1ZSKDQsIDUsIDYpOwo+IC0gICAgICAgIENP TVBVVEVfVlIoNSwgNiwgNyk7Cj4gLSAgICAgICAgQ09NUFVURV9WUig2LCA3LCA4KTsKPiAtICAg ICAgICBDT01QVVRFX1ZSKDcsIDgsIDkpOwo+IC0KPiAtICAgICAgICBjb25zdCB2ZWN0b3Igc2ln bmVkIGNoYXIgbmVnMSA9IHZlY19zcGxhdF9zOCgtMSk7Cj4gLSAgICAgICAgY29uc3QgdmVjdG9y IHVuc2lnbmVkIGNoYXIgcGVybUhIID0gKGNvbnN0IHZlY3RvciB1bnNpZ25lZAo+IGNoYXIpezB4 MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCj4gLQo+ICAweDE4 LCAweDE5LCAweDFBLCAweDFCLCAweDFDLCAweDFELCAweDFFLCAweDFGfTsKPiAtCj4gLSNkZWZp bmUgUEFDS19BTkRfU1RPUkUoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gLXsgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciBwZXJtcyMjaSA9ICAgICAgICAg ICAgICAgICAgICAgICBcCj4gLSAgICAgICAgdmVjX2x2c3IoaSAqIHN0cmlkZSwgc3JjMik7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQg Y2hhciB2ZiMjaSA9ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAgdmVjX3Bh Y2tzdSh2ciMjaSwgKHZlY3RvciBzaWduZWQgc2hvcnQpemVybyk7ICAgICAgICAgICBcCj4gLSAg ICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZyMjaSA9ICAgICAgICAgICAgICAgICAgICAg ICAgICBcCj4gLSAgICAgICAgdmVjX3Blcm0odmYjI2ksIHZiVCMjaSwgcGVybUhIKTsgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gLSAgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNr IyNpID0gICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAgdmVjX3Blcm0oKHZlY3Rv ciB1bnNpZ25lZCBjaGFyKXplcm8sICh2ZWN0b3IgdW5zaWduZWQgY2hhciluZWcxLAo+IHBlcm1z IyNpKTsgXAo+IC0gICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmcyIyNpID0gICAgICAg ICAgICAgICAgICAgICAgICAgXAo+IC0gICAgICAgIHZlY19wZXJtKHZnIyNpLCB2ZyMjaSwgcGVy bXMjI2kpOyAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgY29uc3QgdmVjdG9yIHVuc2ln bmVkIGNoYXIgc3ZBIyNpID0gICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgICAgIHZl Y19zZWwodmJBIyNpLCB2ZzIjI2ksIG1hc2sjI2kpOyAgICAgICAgICAgICAgICAgICAgICAgXAo+ IC0gICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgc3ZCIyNpID0gICAgICAgICAgICAgICAg ICAgICAgICAgXAo+IC0gICAgICAgIHZlY19zZWwodmcyIyNpLCB2YkIjI2ksIG1hc2sjI2kpOyAg ICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgdmVjX3N0KHN2QSMjaSwgaSAqIHN0cmlkZSwg c3JjMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgdmVjX3N0KHN2QiMjaSwg aSAqIHN0cmlkZSArIDE2LCBzcmMyKTt9Cj4gLQo+IC0jZGVmaW5lIFBBQ0tfQU5EX1NUT1JFX0FM SUdORUQoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC17ICAgY29uc3QgdmVj dG9yIHVuc2lnbmVkIGNoYXIgdmYjI2kgPSAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0g ICAgICAgIHZlY19wYWNrc3UodnIjI2ksICh2ZWN0b3Igc2lnbmVkIHNob3J0KXplcm8pOyAgICAg ICAgICAgXAo+IC0gICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmcjI2kgPSAgICAgICAg ICAgICAgICAgICAgICAgICAgXAo+IC0gICAgICAgIHZlY19wZXJtKHZmIyNpLCB2YlQjI2ksIHBl cm1ISCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAo+IC0gICAgdmVjX3N0KHZnIyNpLCBpICog c3RyaWRlLCBzcmMyKTt9Cj4gLQo+IC0gICAgICAgIC8qIFNwZWNpYWwtY2FzaW5nIHRoZSBhbGln bmVkIGNhc2UgaXMgd29ydGh3aGlsZSwgYXMgYWxsIGNhbGxzCj4gZnJvbQo+IC0gICAgICAgICAq IHRoZSAodHJhbnNwb3NlZCkgaG9yaXpvbnRhYmxlIGRlYmxvY2tzIHdpbGwgYmUgYWxpZ25lZCwg aW4KPiBhZGRpdGlvbgo+IC0gICAgICAgICAqIHRvIHRoZSBuYXR1cmFsbHkgYWxpZ25lZCB2ZXJ0 aWNhbCBkZWJsb2Nrcy4gKi8KPiAtICAgICAgICBpZiAocHJvcGVyU3RyaWRlICYmIHNyY0FsaWdu KSB7Cj4gLSAgICAgICAgICAgIFBBQ0tfQU5EX1NUT1JFX0FMSUdORUQoMSkKPiAtICAgICAgICAg ICAgUEFDS19BTkRfU1RPUkVfQUxJR05FRCgyKQo+IC0gICAgICAgICAgICBQQUNLX0FORF9TVE9S RV9BTElHTkVEKDMpCj4gLSAgICAgICAgICAgIFBBQ0tfQU5EX1NUT1JFX0FMSUdORUQoNCkKPiAt ICAgICAgICAgICAgUEFDS19BTkRfU1RPUkVfQUxJR05FRCg1KQo+IC0gICAgICAgICAgICBQQUNL X0FORF9TVE9SRV9BTElHTkVEKDYpCj4gLSAgICAgICAgICAgIFBBQ0tfQU5EX1NUT1JFX0FMSUdO RUQoNykKPiAtICAgICAgICAgICAgUEFDS19BTkRfU1RPUkVfQUxJR05FRCg4KQo+IC0gICAgICAg IH0gZWxzZSB7Cj4gLSAgICAgICAgICAgIFBBQ0tfQU5EX1NUT1JFKDEpCj4gLSAgICAgICAgICAg IFBBQ0tfQU5EX1NUT1JFKDIpCj4gLSAgICAgICAgICAgIFBBQ0tfQU5EX1NUT1JFKDMpCj4gLSAg ICAgICAgICAgIFBBQ0tfQU5EX1NUT1JFKDQpCj4gLSAgICAgICAgICAgIFBBQ0tfQU5EX1NUT1JF KDUpCj4gLSAgICAgICAgICAgIFBBQ0tfQU5EX1NUT1JFKDYpCj4gLSAgICAgICAgICAgIFBBQ0tf QU5EX1NUT1JFKDcpCj4gLSAgICAgICAgICAgIFBBQ0tfQU5EX1NUT1JFKDgpCj4gLSAgICAgICAg fQo+IC0gICAgI3VuZGVmIFBBQ0tfQU5EX1NUT1JFCj4gLSAgICAjdW5kZWYgUEFDS19BTkRfU1RP UkVfQUxJR05FRAo+IC0gICAgfQo+IC19Cj4gLQo+IC0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdm9p ZCBkb1ZlcnREZWZGaWx0ZXJfYWx0aXZlYyh1aW50OF90IHNyY1tdLCBpbnQgc3RyaWRlLAo+IFBQ Q29udGV4dCAqYykgewo+IC0gICAgLyoKPiAtICAgIHRoaXMgY29kZSBtYWtlcyBubyBhc3N1bXB0 aW9uIG9uIHNyYyBvciBzdHJpZGUuCj4gLSAgICBPbmUgY291bGQgcmVtb3ZlIHRoZSByZWNvbXB1 dGF0aW9uIG9mIHRoZSBwZXJtCj4gLSAgICB2ZWN0b3IgYnkgYXNzdW1pbmcgKHN0cmlkZSAlIDE2 KSA9PSAwLCB1bmZvcnR1bmF0ZWx5Cj4gLSAgICB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZS4gUXVp dGUgYSBsb3Qgb2YgbG9hZC9zdG9yZXMKPiAtICAgIGNhbiBiZSByZW1vdmVkIGJ5IGFzc3VtaW5n IHByb3BlciBhbGlnbm1lbnQgb2YKPiAtICAgIHNyYyAmIHN0cmlkZSA6LSgKPiAtICAgICovCj4g LSAgICB1aW50OF90ICpzcmMyID0gc3JjICsgc3RyaWRlKjM7Cj4gLSAgICBjb25zdCB2ZWN0b3Ig c2lnbmVkIGludCB6ZXJvID0gdmVjX3NwbGF0X3MzMigwKTsKPiAtICAgIERFQ0xBUkVfQUxJR05F RCgxNiwgc2hvcnQsIHFwKVs4XSA9IHs4KmMtPlFQfTsKPiAtICAgIHZlY3RvciBzaWduZWQgc2hv cnQgdnFwID0gdmVjX3NwbGF0KAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2 ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19sZCgwLCBxcCksIDApOwo+IC0KPiAtI2RlZmluZSBMT0FE X0xJTkUoaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+IC0gICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcGVybSMjaSA9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAgdmVjX2x2c2woaSAqIHN0cmlkZSwg c3JjMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgIGNvbnN0 IHZlY3RvciB1bnNpZ25lZCBjaGFyIHZiQSMjaSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAo+IC0gICAgICAgIHZlY19sZChpICogc3RyaWRlLCBzcmMyKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQg Y2hhciB2YkIjI2kgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAg ICB2ZWNfbGQoaSAqIHN0cmlkZSArIDE2LCBzcmMyKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+IC0gICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmJUIyNpID0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gLSAgICAgICAgdmVjX3Blcm0odmJBIyNp LCB2YkIjI2ksIHBlcm0jI2kpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAg IGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgdmIjI2kgPSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+IC0gICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19tZXJnZWgo KHZlY3RvciB1bnNpZ25lZCBjaGFyKXplcm8sICAgICBcCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpdmJUIyNpKQo+IC0KPiAt ICAgICBMT0FEX0xJTkUoMSk7Cj4gLSAgICAgTE9BRF9MSU5FKDIpOwo+IC0gICAgIExPQURfTElO RSgzKTsKPiAtICAgICBMT0FEX0xJTkUoNCk7Cj4gLSAgICAgTE9BRF9MSU5FKDUpOwo+IC0gICAg IExPQURfTElORSg2KTsKPiAtICAgICBMT0FEX0xJTkUoNyk7Cj4gLSAgICAgTE9BRF9MSU5FKDgp Owo+IC0jdW5kZWYgTE9BRF9MSU5FCj4gLQo+IC0gICAgIGNvbnN0IHZlY3RvciBzaWduZWQgc2hv cnQgdl8xID0gdmVjX3NwbGF0X3MxNigxKTsKPiAtICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNo b3J0IHZfMiA9IHZlY19zcGxhdF9zMTYoMik7Cj4gLSAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBz aG9ydCB2XzUgPSB2ZWNfc3BsYXRfczE2KDUpOwo+IC0gICAgIGNvbnN0IHZlY3RvciBzaWduZWQg c2hvcnQgdl8zMiA9IHZlY19zbCh2XzEsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpdl81KTsKPiAtICAgICAvKiBt aWRkbGUgZW5lcmd5ICovCj4gLSAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCBsM21pbnVz bDYgPSB2ZWNfc3ViKHZiMywgdmI2KTsKPiAtICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0 IGw1bWludXNsNCA9IHZlY19zdWIodmI1LCB2YjQpOwo+IC0gICAgIGNvbnN0IHZlY3RvciBzaWdu ZWQgc2hvcnQgdHdvdGltZXNfbDNtaW51c2w2ID0gdmVjX21sYWRkKHZfMiwKPiBsM21pbnVzbDYs ICh2ZWN0b3Igc2lnbmVkIHNob3J0KXplcm8pOwo+IC0gICAgIGNvbnN0IHZlY3RvciBzaWduZWQg c2hvcnQgbUUgPSB2ZWNfbWxhZGQodl81LCBsNW1pbnVzbDQsCj4gdHdvdGltZXNfbDNtaW51c2w2 KTsKPiAtICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IGFic21FID0gdmVjX2FicyhtRSk7 Cj4gLSAgICAgLyogbGVmdCAmIHJpZ2h0IGVuZXJneSAqLwo+IC0gICAgIGNvbnN0IHZlY3RvciBz aWduZWQgc2hvcnQgbDFtaW51c2w0ID0gdmVjX3N1Yih2YjEsIHZiNCk7Cj4gLSAgICAgY29uc3Qg dmVjdG9yIHNpZ25lZCBzaG9ydCBsM21pbnVzbDIgPSB2ZWNfc3ViKHZiMywgdmIyKTsKPiAtICAg ICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IGw1bWludXNsOCA9IHZlY19zdWIodmI1LCB2Yjgp Owo+IC0gICAgIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgbDdtaW51c2w2ID0gdmVjX3N1Yih2 YjcsIHZiNik7Cj4gLSAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB0d290aW1lc19sMW1p bnVzbDQgPSB2ZWNfbWxhZGQodl8yLAo+IGwxbWludXNsNCwgKHZlY3RvciBzaWduZWQgc2hvcnQp emVybyk7Cj4gLSAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCB0d290aW1lc19sNW1pbnVz bDggPSB2ZWNfbWxhZGQodl8yLAo+IGw1bWludXNsOCwgKHZlY3RvciBzaWduZWQgc2hvcnQpemVy byk7Cj4gLSAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCBsRSA9IHZlY19tbGFkZCh2XzUs IGwzbWludXNsMiwKPiB0d290aW1lc19sMW1pbnVzbDQpOwo+IC0gICAgIGNvbnN0IHZlY3RvciBz aWduZWQgc2hvcnQgckUgPSB2ZWNfbWxhZGQodl81LCBsN21pbnVzbDYsCj4gdHdvdGltZXNfbDVt aW51c2w4KTsKPiAtICAgICAvKiBkICovCj4gLSAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9y dCBkZGlmZiA9IHZlY19zdWIoYWJzbUUsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdmVjX21pbih2ZWNfYWJzKGxFKSwKPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19hYnMockUpKSk7Cj4g LSAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCBkZGlmZmNsYW1wID0gdmVjX21heChkZGlm ZiwgKHZlY3RvciBzaWduZWQKPiBzaG9ydCl6ZXJvKTsKPiAtICAgICBjb25zdCB2ZWN0b3Igc2ln bmVkIHNob3J0IGR0aW1lczY0ID0gdmVjX21sYWRkKHZfNSwgZGRpZmZjbGFtcCwKPiB2XzMyKTsK PiAtICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IGQgPSB2ZWNfc3JhKGR0aW1lczY0LCB2 ZWNfc3BsYXRfdTE2KDYpKTsKPiAtICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IG1pbnVz ZCA9IHZlY19zdWIoKHZlY3RvciBzaWduZWQKPiBzaG9ydCl6ZXJvLCBkKTsKPiAtICAgICBjb25z dCB2ZWN0b3Igc2lnbmVkIHNob3J0IGZpbmFsZCA9IHZlY19zZWwobWludXNkLAo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLAo+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfY21wZ3QodmVjX3N1Yigo dmVjdG9yCj4gc2lnbmVkIHNob3J0KXplcm8sIG1FKSwKPiAtCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZt cGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8v ZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwK ZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJl Ii4K