From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id E670E431A1 for ; Thu, 23 Jun 2022 17:43:58 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8E0B068B6D3; Thu, 23 Jun 2022 20:43:55 +0300 (EEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2012.outbound.protection.outlook.com [40.92.90.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EA63668B201 for ; Thu, 23 Jun 2022 20:43:48 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XNUSDkQHsNZEr89sp2auPMYIC2/6yXb9WM1dCl4qpleihKNp2i26lnsPL210Wc1zDY2diEnxkHgLfzhb+ZeNAAXFFVihqRYYXjSPZVe3nkLB97JSinxucgjVtiVp0C7bFtfEJkQlyBrV0HraOHch6vVu2KgOuXEOkQd6zALkgvyrRlihzQsEuwxYWCdDrjZfuVDZW2Y8CAsmY8I1e3JgSbE3mSmrhPG4oluaJxLK61KpSiFVJHKKcStrCQav4/9+QLVqmFu/sGZFASCLWsTd8+yKa5dy+mMRje45jQTOgXoFqKd7SrBbe+Ewm8zxII7M83WGq8qcBkobp+AUaK7oZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Ta7KJppssLkzaP84QffnyLjM9846IB0y3nAW0lnC1p4=; b=l1Pj+a0wdcUPVU3bABZK3eDbxH458pvJGeO+FN6P5o3fSquceE0dPawRI038FW9bfM70tBs1z+4lKTv6Z1FxZX0ayjiMaWeJ3ZkQIImTZpzF+Q0i8UA5+cmOgxiBui4LxTMaEfK2Zvqoyx5zHjDN3OGayUESQrwLQM6sb2ZINLlMm/RRJGHEjOS38kmVIG9lX6/PFTCdsDuhUk1EvJYfGJZzle2rw/bVFHz/CI+dtySRznaJVfKmL+qfOxuEc/IihVCoxFKRYTJ0oklmlyjaivxTC+7eqzokCFCmK5NTdEpOh/Yf5/M9xtbZDywHI1kGv6MjalF9156+P44ATixvAw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ta7KJppssLkzaP84QffnyLjM9846IB0y3nAW0lnC1p4=; b=R2NvwYOJMpnKpTWUZ6QQWLemDAqXwNqMyedZJ0C47xZM9hgwWZsGw/uU1DL/D0KCBiKSxERHXs04BIqfuc9xLfRaGqK1FBHNw1zDL3EhJ6rveVpCPnYl3VwP2mr8ICDHCt+pDYhV5m2VNCzucTcMk9qldec7+n7+p4Hc/cLv54jQ1uGazFuQLXhVOGHoamd2c8BL2qENZP7UHZEC1nGkoAJNfljs9VnaV99gJV6RIFw54GwT46vLIHIjLWNwsb4f988NoISA4tKVyg2Pz/yK0ln3gVYteaOeRStarxGMzTNZAn13FlA9k99hxbvPs4KyHcbeGp48sjjj/11+Ukl+4w== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by VI1PR01MB5038.eurprd01.prod.exchangelabs.com (2603:10a6:803:9e::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Thu, 23 Jun 2022 17:43:46 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c%10]) with mapi id 15.20.5353.022; Thu, 23 Jun 2022 17:43:46 +0000 Message-ID: Date: Thu, 23 Jun 2022 19:43:44 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220623122636.24732-1-anton@khirnov.net> <20220623122636.24732-3-anton@khirnov.net> From: Andreas Rheinhardt In-Reply-To: <20220623122636.24732-3-anton@khirnov.net> X-TMN: [+ucw+kyOykXSJBU+Hwr1teXYthJsJhLw] X-ClientProxiedBy: ZR0P278CA0064.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:21::15) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <137fa3a8-8689-98ec-8b78-9c51708a6f9f@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b49e0f2e-1ccb-4f18-27ae-08da553fec3d X-MS-TrafficTypeDiagnostic: VI1PR01MB5038:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: azAXfxdozpZ4JTRAUDkKXZ/HuKOz1yga4GvBOhoQ1ly0m1oL8sTjUsl3+PYjreKagBp0tZJqlvHkSbQxIOw2OBZvcuOagstBTy8tYZyOkSz8x6r0M8/VfZvCeorBWZP01WyD1JO25piSODw5ujOOwQAubbyJrQLl/vnaDutOd711jMiEtFS1Uqc/fZuOguIgWUvBRSp1RMisxanxp3IiKP+HBeJD6MQ/H1tAvdjxOwxbX6vjKRspmu4+fKoUtjsZuFaSrnVOvO4XfEjMroWJucCklBpLTCHTrL3qw7d2oDFI77Z7iE/zW2EH2oHDVHiaXnaOKpKhMwa167yMgFw+8gzQj4InqfvorJXke7CBNl5oJmJZP4mBcVs88/EkcRLxjiKYjEPl/y9JjOyaJpur2Wo30kxcNIR4IoQA0bo1Hkz8nqRRYFjpAouMktqgk+2FZT7FVxyqMDJz8CHspA5VldPRPTCC3/8dOT60BcplGYn1bbbGHpXf3a9ptuAadtgQHKompesBJSZU5lR5T3YSDJHcTp3dFriCZ9hBtuXtp/cpbx7UEN5CZhzBrnFO5I+pu7y8wRLKHt2jzw71uTVvFwdL7aghmx0SSHTJx9LLEBedczVKJqldqUcUxfpD0wN7AdTsqtB4ITTsbfWNJQGlJA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZCs3RU1NSEE2TmVBa3RyQkx3Ti9kYmhNZFhrVlJqZTBGTlhlZEQvV1owS1JR?= =?utf-8?B?aVJWNG5VcFdVMUpTcHVkcmhEMHdWWVFVbzk4R2l2NXlsUnROWUlIMXFsdmRw?= =?utf-8?B?YUI0UVR4ZFFseFZCK29NSlo5VXlEWU82Vjltalo0LzNXQzZ4UEZlQk1yWDkv?= =?utf-8?B?Rlg2aDVnUEl2M0tORDM0WWNTZGUzMkU5YURkUElxUDVPT2RrNktYNVVtMVVZ?= =?utf-8?B?T0FFUGhwc3MxcUU0NlpZUCsrWHcxMkNaT3p2MkhWMEVXcW91Z0xwL01yb1lx?= =?utf-8?B?bDdxZzhsZlUzMm1BenhqODl4UEhobTBDcVI2ZjdWTGxrMnlSMUpHaWR4Nk8y?= =?utf-8?B?V3lJY01LS0w2dDl5T1Z6aXVJMGZHMnFXdWdsY1dlMW5RT2dsa2NyZWFqcjls?= =?utf-8?B?dGVESW8xejVIc2grNkdxTEJhYTRZS2VhNkI2bHlTOVhlT29kR1phNnU4WENa?= =?utf-8?B?VGthOWF2clkzUnNDd3pEL0RISzVqRkFzMUZDT005NHpkNkhlNSsxTG1YM2FT?= =?utf-8?B?a1UyUGJ3YUhVVWtkN2JkbkRVU3pMaVlBUU1ONFJTLzNaQnNwZWlVd1hTSFhl?= =?utf-8?B?Q0xiaWlBKzJWemdWV3dQemp2aURDbTNUOTE0WWZWZU13YmR2T1pCWEp4OFVY?= =?utf-8?B?emZ3c2dWS3lpaE50VUlJS1B2VlpzQ09vNE5nREdwc2tweWcwMk5lTUxiWEJH?= =?utf-8?B?ampLSWN4dlowY1FqenRTWnlXM2pFczBxZVZSMVhteWN1c1hXN2dtRWJuMmkz?= =?utf-8?B?Lzg2UVhQZEF3cG8rRkd0M0k3NEQzaW9QZVlRVUY4cDlpRTY5OWJsd2JEMTRy?= =?utf-8?B?Q2hrMW9UNDNiQ2NiaWtpblh6cXhsMU4rZzNjLzJSRnVvYkRKQWJYejE5dmJG?= =?utf-8?B?Q2RjdWlqdHgzek9TMXRJZ2VidnFHQzdRa3lyZEU1VHhmRHBjZmNJMEtlQzZt?= =?utf-8?B?SmFkMTRYUGNvaCtMUVVYQ2YyYTJOcFA3dE5ucktnYW0ycWhIckxkRnhxK0NS?= =?utf-8?B?TkZPRjdXejE4SW9pY0VkZ0dybG1MVzFFY2hLOS9EV0lsaENCR2pUUEZvQ25K?= =?utf-8?B?UTJaeEFTWW5iQkpDR0UzbHgxZEQ2ZVh2RzlYd3ZlVzF4WVJMZU1Ua1hsblFm?= =?utf-8?B?RU1icWY0SVFpekN5eEIrYlk4V0NLbUNicGYzY1gxL2o0MVpBNjN2cEVVQm9t?= =?utf-8?B?dGVRazI5WWMwWTk5K3hTWkNwSGlhMFBIbnlrRFlMeWIyZGN5SGdFT1BXWkMy?= =?utf-8?B?OFF5NFJvRUVxcTVseDQ3TUN1SXJCVU4xNjJrTWp4OC9xdnJDS0xBNnhTQ1lv?= =?utf-8?B?My9pVUV4RjdhbE40Nkp0Vyt2UDRDcTd0aGh3cUh1bWNhblU3U0RuR21YYnNz?= =?utf-8?B?OHdtNWVtazBFNHdzQ1lSdnhyeWs4V1pUNm9zZFRCMlhQRDhBelNFVXFSQUdF?= =?utf-8?B?SkM4Zld1YjVMdEwvMGZCRFJWTk1RWUxrcWxxb0lxWDBmaXc0ZUlyTWNtdXoz?= =?utf-8?B?c2h4aTVlMWFNYnBMSmhwT24wN0FOd0s5RWcvYnpENWRMVHR2SEQxbFhZM1ho?= =?utf-8?B?NW5ZN2xMaHZrQm5Uc1FXdnlMNzgxcks3aExieEUrQmEycE9VaUlkLzVaUmNQ?= =?utf-8?B?ZFdYaGtkWXZsdlFUZ212aWh4RnNlQVBhb29NNHE0ZE56cEhjVTdSa0ZhS2Y4?= =?utf-8?B?MXZsVjJzejc1RVFYWXhzNXdEeVZQOUNxWlpUOU5yUmF4S25TM21VRnowNWZa?= =?utf-8?B?NFVtaGM5L1Y0RmFCU3MvTzQ3VUVMSllJdDdUMEhsZmVqMU5UVEkyR1YvanV5?= =?utf-8?B?elVUaklFc3RDWHl5Ym9QdGJBN0tkaS9pS3dWTEZMLzROdFE5dG9nYUh0QlNU?= =?utf-8?B?WlhEaFJMN3BWK3hLQ2lxSTlwTEtidEZoL3pJUmt1aVZ0SEpMUlVjRUZxQ1Vu?= =?utf-8?B?RGtCNENVSHdhQWIvV0I0UDRnN095UUt1Q3p0QzFKajBYNHRrMzlSNkVxVFFD?= =?utf-8?B?TW0wSkdMT3FnPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b49e0f2e-1ccb-4f18-27ae-08da553fec3d X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2022 17:43:46.5452 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR01MB5038 Subject: Re: [FFmpeg-devel] [PATCH 3/4] lavc/bitstream: templatize for BE/LE X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: QW50b24gS2hpcm5vdjoKPiBBbGxvd3MgdXNpbmcgYm90aCBCRSBhbmQgTEUgYml0c3RyZWFtIHJl YWRlcnMgaW4gdGhlIHNhbWUgZmlsZS4KPiAtLS0KPiAgbGliYXZjb2RlYy9iaXRzdHJlYW0uaCAg ICAgICAgICB8IDM3OSArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgbGliYXZjb2Rl Yy9iaXRzdHJlYW1fdGVtcGxhdGUuaCB8IDM5MiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwo+ICB0ZXN0cy9yZWYvZmF0ZS9zb3VyY2UgICAgICAgICAgIHwgICAxICsKPiAgMyBmaWxl cyBjaGFuZ2VkLCA0MTUgaW5zZXJ0aW9ucygrKSwgMzU3IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgbGliYXZjb2RlYy9iaXRzdHJlYW1fdGVtcGxhdGUuaAo+IAo+IGRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL2JpdHN0cmVhbS5oIGIvbGliYXZjb2RlYy9iaXRzdHJlYW0uaAo+IGlu ZGV4IDhhNzEwYmNlY2MuLjNmYTYzNjk1ZDMgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy9iaXRz dHJlYW0uaAo+ICsrKyBiL2xpYmF2Y29kZWMvYml0c3RyZWFtLmgKPiBAQCAtNDksODggKzQ5LDYg QEAgdHlwZWRlZiBzdHJ1Y3QgQml0c3RyZWFtQ29udGV4dCB7Cj4gICAgICB1bnNpZ25lZCBzaXpl X2luX2JpdHM7Cj4gIH0gQml0c3RyZWFtQ29udGV4dDsKCllvdSBhcmUgbm90IHRlbXBsYXRpemlu ZyB0aGUgc3RydWN0IGl0c2VsZi4gV2hhdCBkbyB5b3UgdGhpbmsgb2YgdGhlCmlkZWEgdG8gdXNl IHR3byBkaWZmZXJlbnQgc3RydWN0cyAod2l0aCB0aGUgc2FtZSBsYXlvdXQpIGNhbGxlZApCaXRz dHJlYW1Db250ZXh0TEUvQkUgdG8gZW5hYmxlIHRoZSBjb21waWxlciB0byB3YXJuIHdoZW4gb25l IHVzZXMgYQpmdW5jdGlvbiB3aXRoIHdyb25nIGVuZGlhbm5lc3Mgb24gYSBnaXZlbiBCaXRzdHJl YW1Db250ZXh0PwoKPiAgCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCByZWZpbGxfNjQoQml0c3RyZWFt Q29udGV4dCAqYmMpCj4gLXsKPiAtI2lmICFVTkNIRUNLRURfQklUU1RSRUFNX1JFQURFUgo+IC0g ICAgaWYgKGJjLT5wdHIgPj0gYmMtPmJ1ZmZlcl9lbmQpCj4gLSAgICAgICAgcmV0dXJuOwo+IC0j ZW5kaWYKPiAtCj4gLSNpZmRlZiBCSVRTVFJFQU1fUkVBREVSX0xFCj4gLSAgICBiYy0+Yml0cyAg ICAgICA9IEFWX1JMNjQoYmMtPnB0cik7Cj4gLSNlbHNlCj4gLSAgICBiYy0+Yml0cyAgICAgICA9 IEFWX1JCNjQoYmMtPnB0cik7Cj4gLSNlbmRpZgo+IC0gICAgYmMtPnB0ciAgICAgICArPSA4Owo+ IC0gICAgYmMtPmJpdHNfbGVmdCAgPSA2NDsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB2b2lk IHJlZmlsbF8zMihCaXRzdHJlYW1Db250ZXh0ICpiYykKPiAtewo+IC0jaWYgIVVOQ0hFQ0tFRF9C SVRTVFJFQU1fUkVBREVSCj4gLSAgICBpZiAoYmMtPnB0ciA+PSBiYy0+YnVmZmVyX2VuZCkKPiAt ICAgICAgICByZXR1cm47Cj4gLSNlbmRpZgo+IC0KPiAtI2lmZGVmIEJJVFNUUkVBTV9SRUFERVJf TEUKPiAtICAgIGJjLT5iaXRzICAgICAgID0gKHVpbnQ2NF90KUFWX1JMMzIoYmMtPnB0cikgPDwg YmMtPmJpdHNfbGVmdCB8IGJjLT5iaXRzOwo+IC0jZWxzZQo+IC0gICAgYmMtPmJpdHMgICAgICAg PSBiYy0+Yml0cyB8ICh1aW50NjRfdClBVl9SQjMyKGJjLT5wdHIpIDw8ICgzMiAtIGJjLT5iaXRz X2xlZnQpOwo+IC0jZW5kaWYKPiAtICAgIGJjLT5wdHIgICAgICAgKz0gNDsKPiAtICAgIGJjLT5i aXRzX2xlZnQgKz0gMzI7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBJbml0aWFsaXplIEJpdHN0cmVh bUNvbnRleHQuCj4gLSAqIEBwYXJhbSBidWZmZXIgYml0c3RyZWFtIGJ1ZmZlciwgbXVzdCBiZSBB Vl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFIGJ5dGVzCj4gLSAqICAgICAgICBsYXJnZXIgdGhh biB0aGUgYWN0dWFsIHJlYWQgYml0cyBiZWNhdXNlIHNvbWUgb3B0aW1pemVkIGJpdHN0cmVhbQo+ IC0gKiAgICAgICAgcmVhZGVycyByZWFkIDMyIG9yIDY0IGJpdHMgYXQgb25jZSBhbmQgY291bGQg cmVhZCBvdmVyIHRoZSBlbmQKPiAtICogQHBhcmFtIGJpdF9zaXplIHRoZSBzaXplIG9mIHRoZSBi dWZmZXIgaW4gYml0cwo+IC0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgQVZFUlJPUl9JTlZBTElE REFUQSBpZiB0aGUgYnVmZmVyX3NpemUgd291bGQgb3ZlcmZsb3cuCj4gLSAqLwo+IC1zdGF0aWMg aW5saW5lIGludCBiaXRzdHJlYW1faW5pdChCaXRzdHJlYW1Db250ZXh0ICpiYywgY29uc3QgdWlu dDhfdCAqYnVmZmVyLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgYml0X3NpemUpCj4gLXsKPiAtICAgIHVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsKPiAt Cj4gLSAgICBpZiAoYml0X3NpemUgPiBJTlRfTUFYIC0gNyB8fCAhYnVmZmVyKSB7Cj4gLSAgICAg ICAgYmMtPmJ1ZmZlciAgICA9IE5VTEw7Cj4gLSAgICAgICAgYmMtPnB0ciAgICAgICA9IE5VTEw7 Cj4gLSAgICAgICAgYmMtPmJpdHNfbGVmdCA9IDA7Cj4gLSAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7Cj4gLSAgICB9Cj4gLQo+IC0gICAgYnVmZmVyX3NpemUgPSAoYml0X3NpemUg KyA3KSA+PiAzOwo+IC0KPiAtICAgIGJjLT5idWZmZXIgICAgICAgPSBidWZmZXI7Cj4gLSAgICBi Yy0+YnVmZmVyX2VuZCAgID0gYnVmZmVyICsgYnVmZmVyX3NpemU7Cj4gLSAgICBiYy0+cHRyICAg ICAgICAgID0gYmMtPmJ1ZmZlcjsKPiAtICAgIGJjLT5zaXplX2luX2JpdHMgPSBiaXRfc2l6ZTsK PiAtICAgIGJjLT5iaXRzX2xlZnQgICAgPSAwOwo+IC0gICAgYmMtPmJpdHMgICAgICAgICA9IDA7 Cj4gLQo+IC0gICAgcmVmaWxsXzY0KGJjKTsKPiAtCj4gLSAgICByZXR1cm4gMDsKPiAtfQo+IC0K PiAtLyoqCj4gLSAqIEluaXRpYWxpemUgQml0c3RyZWFtQ29udGV4dC4KPiAtICogQHBhcmFtIGJ1 ZmZlciBiaXRzdHJlYW0gYnVmZmVyLCBtdXN0IGJlIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJ WkUgYnl0ZXMKPiAtICogICAgICAgIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgcmVhZCBiaXRzIGJl Y2F1c2Ugc29tZSBvcHRpbWl6ZWQgYml0c3RyZWFtCj4gLSAqICAgICAgICByZWFkZXJzIHJlYWQg MzIgb3IgNjQgYml0cyBhdCBvbmNlIGFuZCBjb3VsZCByZWFkIG92ZXIgdGhlIGVuZAo+IC0gKiBA cGFyYW0gYnl0ZV9zaXplIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMKPiAtICogQHJl dHVybiAwIG9uIHN1Y2Nlc3MsIEFWRVJST1JfSU5WQUxJRERBVEEgaWYgdGhlIGJ1ZmZlcl9zaXpl IHdvdWxkIG92ZXJmbG93Cj4gLSAqLwo+IC1zdGF0aWMgaW5saW5lIGludCBiaXRzdHJlYW1faW5p dDgoQml0c3RyZWFtQ29udGV4dCAqYmMsIGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwKPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlX3NpemUpCj4gLXsK PiAtICAgIGlmIChieXRlX3NpemUgPiBJTlRfTUFYIC8gOCkKPiAtICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKPiAtICAgIHJldHVybiBiaXRzdHJlYW1faW5pdChiYywgYnVmZmVy LCBieXRlX3NpemUgKiA4KTsKPiAtfQo+IC0KPiAgLyoqCj4gICAqIFJldHVybiBudW1iZXIgb2Yg Yml0cyBhbHJlYWR5IHJlYWQuCj4gICAqLwo+IEBAIC0xNTUsMjM1ICs3Myw2IEBAIHN0YXRpYyBp bmxpbmUgaW50IGJpdHN0cmVhbV9iaXRzX2xlZnQoY29uc3QgQml0c3RyZWFtQ29udGV4dCAqYmMp Cj4gICAgICByZXR1cm4gKGJjLT5idWZmZXIgLSBiYy0+cHRyKSAqIDggKyBiYy0+c2l6ZV9pbl9i aXRzICsgYmMtPmJpdHNfbGVmdDsKPiAgfQo+ICAKPiAtc3RhdGljIGlubGluZSB1aW50NjRfdCBn ZXRfdmFsKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKPiAtewo+IC0gICAg dWludDY0X3QgcmV0Owo+IC0KPiAtI2lmZGVmIEJJVFNUUkVBTV9SRUFERVJfTEUKPiAtICAgIHJl dCA9IGJjLT5iaXRzICYgKChVSU5UNjRfQygxKSA8PCBuKSAtIDEpOwo+IC0gICAgYmMtPmJpdHMg Pj49IG47Cj4gLSNlbHNlCj4gLSAgICByZXQgPSBiYy0+Yml0cyA+PiAoNjQgLSBuKTsKPiAtICAg IGJjLT5iaXRzIDw8PSBuOwo+IC0jZW5kaWYKPiAtICAgIGJjLT5iaXRzX2xlZnQgLT0gbjsKPiAt Cj4gLSAgICByZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC0vKioKPiAtICogUmV0dXJuIG9uZSBiaXQg ZnJvbSB0aGUgYnVmZmVyLgo+IC0gKi8KPiAtc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYml0 c3RyZWFtX3JlYWRfYml0KEJpdHN0cmVhbUNvbnRleHQgKmJjKQo+IC17Cj4gLSAgICBpZiAoIWJj LT5iaXRzX2xlZnQpCj4gLSAgICAgICAgcmVmaWxsXzY0KGJjKTsKPiAtCj4gLSAgICByZXR1cm4g Z2V0X3ZhbChiYywgMSk7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBSZXR1cm4gbiBiaXRzIGZyb20g dGhlIGJ1ZmZlciwgbiBoYXMgdG8gYmUgaW4gdGhlIDAtNjMgcmFuZ2UuCj4gLSAqLwo+IC1zdGF0 aWMgaW5saW5lIHVpbnQ2NF90IGJpdHN0cmVhbV9yZWFkXzYzKEJpdHN0cmVhbUNvbnRleHQgKmJj LCB1bnNpZ25lZCBpbnQgbikKPiAtewo+IC0gICAgdWludDY0X3QgcmV0ID0gMDsKPiAtI2lmZGVm IEJJVFNUUkVBTV9SRUFERVJfTEUKPiAtICAgIHVpbnQ2NF90IGxlZnQgPSAwOwo+IC0jZW5kaWYK PiAtCj4gLSAgICBpZiAoIW4pCj4gLSAgICAgICAgcmV0dXJuIDA7Cj4gLQo+IC0gICAgaWYgKG4g PiBiYy0+Yml0c19sZWZ0KSB7Cj4gLSAgICAgICAgbiAtPSBiYy0+Yml0c19sZWZ0Owo+IC0jaWZk ZWYgQklUU1RSRUFNX1JFQURFUl9MRQo+IC0gICAgICAgIGxlZnQgPSBiYy0+Yml0c19sZWZ0Owo+ IC0jZW5kaWYKPiAtICAgICAgICByZXQgPSBnZXRfdmFsKGJjLCBiYy0+Yml0c19sZWZ0KTsKPiAt ICAgICAgICByZWZpbGxfNjQoYmMpOwo+IC0gICAgfQo+IC0KPiAtI2lmZGVmIEJJVFNUUkVBTV9S RUFERVJfTEUKPiAtICAgIHJldCA9IGdldF92YWwoYmMsIG4pIDw8IGxlZnQgfCByZXQ7Cj4gLSNl bHNlCj4gLSAgICByZXQgPSBnZXRfdmFsKGJjLCBuKSB8IHJldCA8PCBuOwo+IC0jZW5kaWYKPiAt Cj4gLSAgICByZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC0vKioKPiAtICogUmV0dXJuIG4gYml0cyBm cm9tIHRoZSBidWZmZXIsIG4gaGFzIHRvIGJlIGluIHRoZSAwLTMyICByYW5nZS4KPiAtICovCj4g LXN0YXRpYyBpbmxpbmUgdWludDMyX3QgYml0c3RyZWFtX3JlYWQoQml0c3RyZWFtQ29udGV4dCAq YmMsIHVuc2lnbmVkIGludCBuKQo+IC17Cj4gLSAgICBpZiAoIW4pCj4gLSAgICAgICAgcmV0dXJu IDA7Cj4gLQo+IC0gICAgaWYgKG4gPiBiYy0+Yml0c19sZWZ0KSB7Cj4gLSAgICAgICAgcmVmaWxs XzMyKGJjKTsKPiAtICAgICAgICBpZiAoYmMtPmJpdHNfbGVmdCA8IDMyKQo+IC0gICAgICAgICAg ICBiYy0+Yml0c19sZWZ0ID0gbjsKPiAtICAgIH0KPiAtCj4gLSAgICByZXR1cm4gZ2V0X3ZhbChi Yywgbik7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZl ciBhcyBhIHNpZ25lZCBpbnRlZ2VyLgo+IC0gKiBuIGhhcyB0byBiZSBpbiB0aGUgMC0zMiByYW5n ZS4KPiAtICovCj4gLXN0YXRpYyBpbmxpbmUgaW50MzJfdCBiaXRzdHJlYW1fcmVhZF9zaWduZWQo Qml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQo+IC17Cj4gLSAgICByZXR1cm4g c2lnbl9leHRlbmQoYml0c3RyZWFtX3JlYWQoYmMsIG4pLCBuKTsKPiAtfQo+IC0KPiAtc3RhdGlj IGlubGluZSB1bnNpZ25lZCBpbnQgc2hvd192YWwoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2ln bmVkIGludCBuKQo+IC17Cj4gLSNpZmRlZiBCSVRTVFJFQU1fUkVBREVSX0xFCj4gLSAgICByZXR1 cm4gYmMtPmJpdHMgJiAoKFVJTlQ2NF9DKDEpIDw8IG4pIC0gMSk7Cj4gLSNlbHNlCj4gLSAgICBy ZXR1cm4gYmMtPmJpdHMgPj4gKDY0IC0gbik7Cj4gLSNlbmRpZgo+IC19Cj4gLQo+IC0vKioKPiAt ICogUmV0dXJuIG4gYml0cyBmcm9tIHRoZSBidWZmZXIgYnV0IGRvIG5vdCBjaGFuZ2UgdGhlIGJ1 ZmZlciBzdGF0ZS4KPiAtICogbiBoYXMgdG8gYmUgaW4gdGhlIDAtMzIgcmFuZ2UuCj4gLSAqLwo+ IC1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiaXRzdHJlYW1fcGVlayhCaXRzdHJlYW1Db250 ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCj4gLXsKPiAtICAgIGlmIChuID4gYmMtPmJpdHNfbGVm dCkKPiAtICAgICAgICByZWZpbGxfMzIoYmMpOwo+IC0KPiAtICAgIHJldHVybiBzaG93X3ZhbChi Yywgbik7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZl ciBhcyBhIHNpZ25lZCBpbnRlZ2VyLAo+IC0gKiBkbyBub3QgY2hhbmdlIHRoZSBidWZmZXIgc3Rh dGUuCj4gLSAqIG4gaGFzIHRvIGJlIGluIHRoZSAwLTMyIHJhbmdlLgo+IC0gKi8KPiAtc3RhdGlj IGlubGluZSBpbnQgYml0c3RyZWFtX3BlZWtfc2lnbmVkKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1 bnNpZ25lZCBpbnQgbikKPiAtewo+IC0gICAgcmV0dXJuIHNpZ25fZXh0ZW5kKGJpdHN0cmVhbV9w ZWVrKGJjLCBuKSwgbik7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBza2lwX3JlbWFp bmluZyhCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCj4gLXsKPiAtI2lmZGVm IEJJVFNUUkVBTV9SRUFERVJfTEUKPiAtICAgIGJjLT5iaXRzID4+PSBuOwo+IC0jZWxzZQo+IC0g ICAgYmMtPmJpdHMgPDw9IG47Cj4gLSNlbmRpZgo+IC0gICAgYmMtPmJpdHNfbGVmdCAtPSBuOwo+ IC19Cj4gLQo+IC0vKioKPiAtICogU2tpcCBuIGJpdHMgaW4gdGhlIGJ1ZmZlci4KPiAtICovCj4g LXN0YXRpYyBpbmxpbmUgdm9pZCBiaXRzdHJlYW1fc2tpcChCaXRzdHJlYW1Db250ZXh0ICpiYywg dW5zaWduZWQgaW50IG4pCj4gLXsKPiAtICAgIGlmIChuIDwgYmMtPmJpdHNfbGVmdCkKPiAtICAg ICAgICBza2lwX3JlbWFpbmluZyhiYywgbik7Cj4gLSAgICBlbHNlIHsKPiAtICAgICAgICBuIC09 IGJjLT5iaXRzX2xlZnQ7Cj4gLSAgICAgICAgYmMtPmJpdHMgICAgICA9IDA7Cj4gLSAgICAgICAg YmMtPmJpdHNfbGVmdCA9IDA7Cj4gLQo+IC0gICAgICAgIGlmIChuID49IDY0KSB7Cj4gLSAgICAg ICAgICAgIHVuc2lnbmVkIGludCBza2lwID0gbiAvIDg7Cj4gLQo+IC0gICAgICAgICAgICBuIC09 IHNraXAgKiA4Owo+IC0gICAgICAgICAgICBiYy0+cHRyICs9IHNraXA7Cj4gLSAgICAgICAgfQo+ IC0gICAgICAgIHJlZmlsbF82NChiYyk7Cj4gLSAgICAgICAgaWYgKG4pCj4gLSAgICAgICAgICAg IHNraXBfcmVtYWluaW5nKGJjLCBuKTsKPiAtICAgIH0KPiAtfQo+IC0KPiAtLyoqCj4gLSAqIFNl ZWsgdG8gdGhlIGdpdmVuIGJpdCBwb3NpdGlvbi4KPiAtICovCj4gLXN0YXRpYyBpbmxpbmUgdm9p ZCBiaXRzdHJlYW1fc2VlayhCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgcG9zKQo+IC17 Cj4gLSAgICBiYy0+cHRyICAgICAgID0gYmMtPmJ1ZmZlcjsKPiAtICAgIGJjLT5iaXRzICAgICAg PSAwOwo+IC0gICAgYmMtPmJpdHNfbGVmdCA9IDA7Cj4gLQo+IC0gICAgYml0c3RyZWFtX3NraXAo YmMsIHBvcyk7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBTa2lwIGJpdHMgdG8gYSBieXRlIGJvdW5k YXJ5Lgo+IC0gKi8KPiAtc3RhdGljIGlubGluZSBjb25zdCB1aW50OF90ICpiaXRzdHJlYW1fYWxp Z24oQml0c3RyZWFtQ29udGV4dCAqYmMpCj4gLXsKPiAtICAgIHVuc2lnbmVkIGludCBuID0gLWJp dHN0cmVhbV90ZWxsKGJjKSAmIDc7Cj4gLSAgICBpZiAobikKPiAtICAgICAgICBiaXRzdHJlYW1f c2tpcChiYywgbik7Cj4gLSAgICByZXR1cm4gYmMtPmJ1ZmZlciArIChiaXRzdHJlYW1fdGVsbChi YykgPj4gMyk7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBSZWFkIE1QRUctMSBkYy1zdHlsZSBWTEMg KHNpZ24gYml0ICsgbWFudGlzc2Egd2l0aCBubyBNU0IpLgo+IC0gKiBJZiBNU0Igbm90IHNldCBp dCBpcyBuZWdhdGl2ZS4KPiAtICogQHBhcmFtIG4gbGVuZ3RoIGluIGJpdHMKPiAtICovCj4gLXN0 YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVhbV9yZWFkX3hiaXRzKEJpdHN0cmVhbUNvbnRleHQgKmJj LCB1bnNpZ25lZCBpbnQgbikKPiAtewo+IC0gICAgaW50MzJfdCBjYWNoZSA9IGJpdHN0cmVhbV9w ZWVrKGJjLCAzMik7Cj4gLSAgICBpbnQgc2lnbiA9IH5jYWNoZSA+PiAzMTsKPiAtICAgIHNraXBf cmVtYWluaW5nKGJjLCBuKTsKPiAtCj4gLSAgICByZXR1cm4gKCgoKHVpbnQzMl90KShzaWduIF4g Y2FjaGUpKSA+PiAoMzIgLSBuKSkgXiBzaWduKSAtIHNpZ247Cj4gLX0KPiAtCj4gLS8qKgo+IC0g KiBSZXR1cm4gZGVjb2RlZCB0cnVuY2F0ZWQgdW5hcnkgY29kZSBmb3IgdGhlIHZhbHVlcyAwLCAx LCAyLgo+IC0gKi8KPiAtc3RhdGljIGlubGluZSBpbnQgYml0c3RyZWFtX2RlY29kZTAxMihCaXRz dHJlYW1Db250ZXh0ICpiYykKPiAtewo+IC0gICAgaWYgKCFiaXRzdHJlYW1fcmVhZF9iaXQoYmMp KQo+IC0gICAgICAgIHJldHVybiAwOwo+IC0gICAgZWxzZQo+IC0gICAgICAgIHJldHVybiBiaXRz dHJlYW1fcmVhZF9iaXQoYmMpICsgMTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIFJldHVybiBkZWNv ZGVkIHRydW5jYXRlZCB1bmFyeSBjb2RlIGZvciB0aGUgdmFsdWVzIDIsIDEsIDAuCj4gLSAqLwo+ IC1zdGF0aWMgaW5saW5lIGludCBiaXRzdHJlYW1fZGVjb2RlMjEwKEJpdHN0cmVhbUNvbnRleHQg KmJjKQo+IC17Cj4gLSAgICBpZiAoYml0c3RyZWFtX3JlYWRfYml0KGJjKSkKPiAtICAgICAgICBy ZXR1cm4gMDsKPiAtICAgIGVsc2UKPiAtICAgICAgICByZXR1cm4gMiAtIGJpdHN0cmVhbV9yZWFk X2JpdChiYyk7Cj4gLX0KPiAtCj4gLS8qIFJlYWQgc2lnbiBiaXQgYW5kIGZsaXAgdGhlIHNpZ24g b2YgdGhlIHByb3ZpZGVkIHZhbHVlIGFjY29yZGluZ2x5LiAqLwo+IC1zdGF0aWMgaW5saW5lIGlu dCBiaXRzdHJlYW1fYXBwbHlfc2lnbihCaXRzdHJlYW1Db250ZXh0ICpiYywgaW50IHZhbCkKPiAt ewo+IC0gICAgaW50IHNpZ24gPSBiaXRzdHJlYW1fcmVhZF9zaWduZWQoYmMsIDEpOwo+IC0gICAg cmV0dXJuICh2YWwgXiBzaWduKSAtIHNpZ247Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgaW50 IGJpdHN0cmVhbV9za2lwXzFzdG9wXzhkYXRhKEJpdHN0cmVhbUNvbnRleHQgKnMpCj4gLXsKPiAt ICAgIGlmIChiaXRzdHJlYW1fYml0c19sZWZ0KHMpIDw9IDApCj4gLSAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7Cj4gLQo+IC0gICAgd2hpbGUgKGJpdHN0cmVhbV9yZWFkKHMsIDEp KSB7Cj4gLSAgICAgICAgYml0c3RyZWFtX3NraXAocywgOCk7Cj4gLSAgICAgICAgaWYgKGJpdHN0 cmVhbV9iaXRzX2xlZnQocykgPD0gMCkKPiAtICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcmV0dXJuIDA7Cj4gLX0KPiAtCj4gIC8qIFVu d2luZCB0aGUgY2FjaGUgc28gYSByZWZpbGxfMzIgY2FuIGZpbGwgaXQgYWdhaW4uICovCj4gIHN0 YXRpYyBpbmxpbmUgdm9pZCBiaXRzdHJlYW1fdW53aW5kKEJpdHN0cmVhbUNvbnRleHQgKmJjKQo+ ICB7Cj4gQEAgLTQxMiw1MiArMTAxLDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiaXRzdHJlYW1f dW5nZXQoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVpbnQ2NF90IHZhbHVlLAo+ICAgICAgYmMtPmJp dHNfbGVmdCArPSBhbW91bnQ7Cj4gIH0KPiAgCj4gLS8qKgo+IC0gKiBSZXR1cm4gdGhlIExVVCBl bGVtZW50IGZvciB0aGUgZ2l2ZW4gYml0c3RyZWFtIGNvbmZpZ3VyYXRpb24uCj4gLSAqLwo+IC1z dGF0aWMgaW5saW5lIGludCBzZXRfaWR4KEJpdHN0cmVhbUNvbnRleHQgKmJjLCBpbnQgY29kZSwg aW50ICpuLCBpbnQgKm5iX2JpdHMsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg VkxDRWxlbSAqdGFibGUpCj4gLXsKPiAtICAgIHVuc2lnbmVkIGlkeDsKPiAtCj4gLSAgICAqbmJf Yml0cyA9IC0qbjsKPiAtICAgIGlkeCA9IGJpdHN0cmVhbV9wZWVrKGJjLCAqbmJfYml0cykgKyBj b2RlOwo+IC0gICAgKm4gPSB0YWJsZVtpZHhdLmxlbjsKPiAtCj4gLSAgICByZXR1cm4gdGFibGVb aWR4XS5zeW07Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBQYXJzZSBhIHZsYyBjb2RlLgo+IC0gKiBA cGFyYW0gYml0cyBpcyB0aGUgbnVtYmVyIG9mIGJpdHMgd2hpY2ggd2lsbCBiZSByZWFkIGF0IG9u Y2UsIG11c3QgYmUKPiAtICogICAgICAgICAgICAgaWRlbnRpY2FsIHRvIG5iX2JpdHMgaW4gaW5p dF92bGMoKQo+IC0gKiBAcGFyYW0gbWF4X2RlcHRoIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgYml0 cyBiaXRzIG11c3QgYmUgcmVhZCB0byBjb21wbGV0ZWx5Cj4gLSAqICAgICAgICAgICAgICAgICAg cmVhZCB0aGUgbG9uZ2VzdCB2bGMgY29kZQo+IC0gKiAgICAgICAgICAgICAgICAgID0gKG1heF92 bGNfbGVuZ3RoICsgYml0cyAtIDEpIC8gYml0cwo+IC0gKiBJZiB0aGUgdmxjIGNvZGUgaXMgaW52 YWxpZCBhbmQgbWF4X2RlcHRoPTEsIHRoZW4gbm8gYml0cyB3aWxsIGJlIHJlbW92ZWQuCj4gLSAq IElmIHRoZSB2bGMgY29kZSBpcyBpbnZhbGlkIGFuZCBtYXhfZGVwdGg+MSwgdGhlbiB0aGUgbnVt YmVyIG9mIGJpdHMgcmVtb3ZlZAo+IC0gKiBpcyB1bmRlZmluZWQuCj4gLSAqLwo+IC1zdGF0aWMg aW5saW5lIGludCBiaXRzdHJlYW1fcmVhZF92bGMoQml0c3RyZWFtQ29udGV4dCAqYmMsIGNvbnN0 IFZMQ0VsZW0gKnRhYmxlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IGJpdHMsIGludCBtYXhfZGVwdGgpCj4gLXsKPiAtICAgIGludCBuYl9iaXRzOwo+IC0gICAg dW5zaWduZWQgaWR4ID0gYml0c3RyZWFtX3BlZWsoYmMsIGJpdHMpOwo+IC0gICAgaW50IGNvZGUg ICAgID0gdGFibGVbaWR4XS5zeW07Cj4gLSAgICBpbnQgbiAgICAgICAgPSB0YWJsZVtpZHhdLmxl bjsKPiAtCj4gLSAgICBpZiAobWF4X2RlcHRoID4gMSAmJiBuIDwgMCkgewo+IC0gICAgICAgIHNr aXBfcmVtYWluaW5nKGJjLCBiaXRzKTsKPiAtICAgICAgICBjb2RlID0gc2V0X2lkeChiYywgY29k ZSwgJm4sICZuYl9iaXRzLCB0YWJsZSk7Cj4gLSAgICAgICAgaWYgKG1heF9kZXB0aCA+IDIgJiYg biA8IDApIHsKPiAtICAgICAgICAgICAgc2tpcF9yZW1haW5pbmcoYmMsIG5iX2JpdHMpOwo+IC0g ICAgICAgICAgICBjb2RlID0gc2V0X2lkeChiYywgY29kZSwgJm4sICZuYl9iaXRzLCB0YWJsZSk7 Cj4gLSAgICAgICAgfQo+IC0gICAgfQo+IC0gICAgc2tpcF9yZW1haW5pbmcoYmMsIG4pOwo+IC0K PiAtICAgIHJldHVybiBjb2RlOwo+IC19Cj4gKyNkZWZpbmUgQklUU1RSRUFNX0xFCj4gKyNpbmNs dWRlICJiaXRzdHJlYW1fdGVtcGxhdGUuaCIKPiArCj4gKyN1bmRlZiBCSVRTVFJFQU1fTEUKPiAr I2luY2x1ZGUgImJpdHN0cmVhbV90ZW1wbGF0ZS5oIgoKVGhpcyB3aWxsIGNvbXBpbGUgYm90aCB2 ZXJzaW9uIGFuZCBmb3IgdGhlIG92ZXJ3aGVsbWluZyBtYWpvcml0eSBvZgpmaWxlcyBvbmUgb2Yg dGhlbSBpcyBlbm91Z2guIEkgdGhpbmsgd2hpY2ggb25lIHNob3VsZCBiZSBjb21waWxlZCBzaG91 bGQKYmUgbGVmdCB0byB0aGUgdXNlciwgc2VlIGJlbG93LgoKPiArCj4gKyNkZWZpbmUgYml0c3Ry ZWFtX2luaXQgICAgICAgICAgYml0c3RyZWFtX2luaXRfYmUKPiArI2RlZmluZSBiaXRzdHJlYW1f aW5pdDggICAgICAgICBiaXRzdHJlYW1faW5pdDhfYmUKPiArI2RlZmluZSBiaXRzdHJlYW1fcmVh ZF9iaXQgICAgICBiaXRzdHJlYW1fcmVhZF9iaXRfYmUKPiArI2RlZmluZSBiaXRzdHJlYW1fcmVh ZF82MyAgICAgICBiaXRzdHJlYW1fcmVhZF82M19iZQo+ICsjZGVmaW5lIGJpdHN0cmVhbV9yZWFk ICAgICAgICAgIGJpdHN0cmVhbV9yZWFkX2JlCj4gKyNkZWZpbmUgYml0c3RyZWFtX3JlYWRfc2ln bmVkICAgYml0c3RyZWFtX3JlYWRfc2lnbmVkX2JlCj4gKyNkZWZpbmUgYml0c3RyZWFtX3BlZWsg ICAgICAgICAgYml0c3RyZWFtX3BlZWtfYmUKPiArI2RlZmluZSBiaXRzdHJlYW1fcGVla19zaWdu ZWQgICBiaXRzdHJlYW1fcGVla19zaWduZWRfYmUKPiArI2RlZmluZSBiaXRzdHJlYW1fc2tpcCAg ICAgICAgICBiaXRzdHJlYW1fc2tpcF9iZQo+ICsjZGVmaW5lIGJpdHN0cmVhbV9zZWVrICAgICAg ICAgIGJpdHN0cmVhbV9zZWVrX2JlCj4gKyNkZWZpbmUgYml0c3RyZWFtX2FsaWduICAgICAgICAg Yml0c3RyZWFtX2FsaWduX2JlCj4gKyNkZWZpbmUgYml0c3RyZWFtX3JlYWRfeGJpdHMgICAgYml0 c3RyZWFtX3JlYWRfeGJpdHNfYmUKPiArI2RlZmluZSBiaXRzdHJlYW1fZGVjb2RlMDEyICAgICBi aXRzdHJlYW1fZGVjb2RlMDEyX2JlCj4gKyNkZWZpbmUgYml0c3RyZWFtX2RlY29kZTIxMCAgICAg Yml0c3RyZWFtX2RlY29kZTIxMF9iZQo+ICsjZGVmaW5lIGJpdHN0cmVhbV9hcHBseV9zaWduICAg IGJpdHN0cmVhbV9hcHBseV9zaWduX2JlCj4gKyNkZWZpbmUgYml0c3RyZWFtX3JlYWRfdmxjICAg ICAgYml0c3RyZWFtX3JlYWRfdmxjX2JlCgpZb3UgYXJlIHVuY29uZGl0aW9uYWxseSBtYWtpbmcg dGhlIGJpZy1lbmRpYW4gdmVyc2lvbiB0aGUgZGVmYXVsdAp2ZXJzaW9uLiBUaGlzIGlzIHdyb25n LiBJbnN0ZWFkIHlvdSBzaG91bGQgbGV0IHRoZSB1c2VyIGRlY2lkZSB0aGlzIChieQp1c2luZyBh biBhcHByb3ByaWF0ZSBkZWZpbmUgdGhhdCB0aGUgdXNlciBjYW4gc2V0IGJlZm9yZSBpbmNsdWRp bmcgdGhpcwpoZWFkZXIpLiBJJ2QgaW1wbGVtZW50IGlzIGFzIGZvbGxvd3M6IFRoZSB1c2VyIGNh biBzZXQgZmxhZ3MKQklUU1RSRUFNX0xFIGFuZC9vciBCSVRTVFJFQU1fQkUgdG8gc2lnbmFsIHdo aWNoIGVuZGlhbm5lc3MgdG8gY29tcGlsZTsKaWYgbm9uZSBpcyBzZXQsIGl0IGlzIHRyZWF0ZWQg YXMgaWYgQklUU1RSRUFNX0JFIHdlcmUgc2V0IGluIGxpbmUgd2l0aAp0aGUgY3VycmVudCBkZWZh dWx0LiBJZiBib3RoIGFyZSBzZXQsIHRoZSB1c2VyIG11c3QgZGVmaW5lCkJJVFNUUkVBTV9ERUZB VUxUX0JFL0xFIHRvIGluZGljYXRlIHdoYXQgc2hhbGwgYmUgdGhlIGRlZmF1bHQuCgpUbyBhY2Nv bXBsaXNoIHRoaXMsIHRoZSBwYXJ0IG9mIGJpdHN0cmVhbS5oIHRoYXQgaW5jbHVkZXMgdGhlIHRl bXBsYXRlCndpbGwgaGF2ZSB0byBiZSBvdXRzaWRlIG9mIG9yZGluYXJ5IGluY2x1c2lvbiBndWFy ZHMgYW5kIGluc3RlYWQgYmUKZ3VhcmRlZCBieSBpbmNsdXNpb24gZ3VhcmRzIG9mIGl0cyBvd24g KG9uZSBmb3IgZWFjaCBlbmRpYW5uZXNzKS4KCj4gIAo+ICAjZGVmaW5lIEJJVFNUUkVBTV9STF9W TEMobGV2ZWwsIHJ1biwgYmMsIHRhYmxlLCBiaXRzLCBtYXhfZGVwdGgpIFwKPiAgICAgIGRvIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYml0c3RyZWFtX3RlbXBsYXRlLmggYi9saWJhdmNv ZGVjL2JpdHN0cmVhbV90ZW1wbGF0ZS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwMDAwLi42YjMxYmM1M2EyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Y29kZWMv Yml0c3RyZWFtX3RlbXBsYXRlLmgKPiBAQCAtMCwwICsxLDM5MiBAQAo+ICsvKgo+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMTYgQWxleGFuZHJhIEjDoWprb3bDoQo+ICsgKgo+ICsgKiBUaGlzIGZpbGUg aXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ICsgKiBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4g KyNpZmRlZiBCSVRTVFJFQU1fTEUKPiArIyAgIGRlZmluZSBCU19TVUZGSVggbGUKPiArI2Vsc2UK PiArIyAgIGRlZmluZSBCU19TVUZGSVggYmUKPiArI2VuZGlmCj4gKwo+ICsjZGVmaW5lIEJTX0pP SU4oeCwgeSkgeCAjIyBfICMjIHkKPiArI2RlZmluZSBCU19GVU5DMih4LCB5KSBCU19KT0lOKHgs IHkpCj4gKyNkZWZpbmUgQlNfRlVOQyh4KSBCU19GVU5DMih4LCBCU19TVUZGSVgpCj4gKwo+ICtz dGF0aWMgaW5saW5lIHZvaWQgQlNfRlVOQyhyZWZpbGxfNjQpKEJpdHN0cmVhbUNvbnRleHQgKmJj KQo+ICt7Cj4gKyNpZiAhVU5DSEVDS0VEX0JJVFNUUkVBTV9SRUFERVIKPiArICAgIGlmIChiYy0+ cHRyID49IGJjLT5idWZmZXJfZW5kKQo+ICsgICAgICAgIHJldHVybjsKPiArI2VuZGlmCj4gKwo+ ICsjaWZkZWYgQklUU1RSRUFNX0xFCj4gKyAgICBiYy0+Yml0cyAgICAgICA9IEFWX1JMNjQoYmMt PnB0cik7Cj4gKyNlbHNlCj4gKyAgICBiYy0+Yml0cyAgICAgICA9IEFWX1JCNjQoYmMtPnB0cik7 Cj4gKyNlbmRpZgo+ICsgICAgYmMtPnB0ciAgICAgICArPSA4Owo+ICsgICAgYmMtPmJpdHNfbGVm dCAgPSA2NDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIEJTX0ZVTkMocmVmaWxsXzMy KShCaXRzdHJlYW1Db250ZXh0ICpiYykKPiArewo+ICsjaWYgIVVOQ0hFQ0tFRF9CSVRTVFJFQU1f UkVBREVSCj4gKyAgICBpZiAoYmMtPnB0ciA+PSBiYy0+YnVmZmVyX2VuZCkKPiArICAgICAgICBy ZXR1cm47Cj4gKyNlbmRpZgo+ICsKPiArI2lmZGVmIEJJVFNUUkVBTV9MRQo+ICsgICAgYmMtPmJp dHMgICAgICAgPSAodWludDY0X3QpQVZfUkwzMihiYy0+cHRyKSA8PCBiYy0+Yml0c19sZWZ0IHwg YmMtPmJpdHM7Cj4gKyNlbHNlCj4gKyAgICBiYy0+Yml0cyAgICAgICA9IGJjLT5iaXRzIHwgKHVp bnQ2NF90KUFWX1JCMzIoYmMtPnB0cikgPDwgKDMyIC0gYmMtPmJpdHNfbGVmdCk7Cj4gKyNlbmRp Zgo+ICsgICAgYmMtPnB0ciAgICAgICArPSA0Owo+ICsgICAgYmMtPmJpdHNfbGVmdCArPSAzMjsK PiArfQo+ICsKPiArLyoqCj4gKyAqIEluaXRpYWxpemUgQml0c3RyZWFtQ29udGV4dC4KPiArICog QHBhcmFtIGJ1ZmZlciBiaXRzdHJlYW0gYnVmZmVyLCBtdXN0IGJlIEFWX0lOUFVUX0JVRkZFUl9Q QURESU5HX1NJWkUgYnl0ZXMKPiArICogICAgICAgIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgcmVh ZCBiaXRzIGJlY2F1c2Ugc29tZSBvcHRpbWl6ZWQgYml0c3RyZWFtCj4gKyAqICAgICAgICByZWFk ZXJzIHJlYWQgMzIgb3IgNjQgYml0cyBhdCBvbmNlIGFuZCBjb3VsZCByZWFkIG92ZXIgdGhlIGVu ZAo+ICsgKiBAcGFyYW0gYml0X3NpemUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBiaXRzCj4g KyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBBVkVSUk9SX0lOVkFMSUREQVRBIGlmIHRoZSBidWZm ZXJfc2l6ZSB3b3VsZCBvdmVyZmxvdy4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IEJTX0ZV TkMoYml0c3RyZWFtX2luaXQpKEJpdHN0cmVhbUNvbnRleHQgKmJjLCBjb25zdCB1aW50OF90ICpi dWZmZXIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBiaXRfc2l6ZSkKPiArewo+ICsgICAgdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOwo+ ICsKPiArICAgIGlmIChiaXRfc2l6ZSA+IElOVF9NQVggLSA3IHx8ICFidWZmZXIpIHsKPiArICAg ICAgICBiYy0+YnVmZmVyICAgID0gTlVMTDsKPiArICAgICAgICBiYy0+cHRyICAgICAgID0gTlVM TDsKPiArICAgICAgICBiYy0+Yml0c19sZWZ0ID0gMDsKPiArICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKPiArICAgIH0KPiArCj4gKyAgICBidWZmZXJfc2l6ZSA9IChiaXRfc2l6 ZSArIDcpID4+IDM7Cj4gKwo+ICsgICAgYmMtPmJ1ZmZlciAgICAgICA9IGJ1ZmZlcjsKPiArICAg IGJjLT5idWZmZXJfZW5kICAgPSBidWZmZXIgKyBidWZmZXJfc2l6ZTsKPiArICAgIGJjLT5wdHIg ICAgICAgICAgPSBiYy0+YnVmZmVyOwo+ICsgICAgYmMtPnNpemVfaW5fYml0cyA9IGJpdF9zaXpl Owo+ICsgICAgYmMtPmJpdHNfbGVmdCAgICA9IDA7Cj4gKyAgICBiYy0+Yml0cyAgICAgICAgID0g MDsKPiArCj4gKyAgICBCU19GVU5DKHJlZmlsbF82NCkoYmMpOwo+ICsKPiArICAgIHJldHVybiAw Owo+ICt9Cj4gKwo+ICsvKioKPiArICogSW5pdGlhbGl6ZSBCaXRzdHJlYW1Db250ZXh0Lgo+ICsg KiBAcGFyYW0gYnVmZmVyIGJpdHN0cmVhbSBidWZmZXIsIG11c3QgYmUgQVZfSU5QVVRfQlVGRkVS X1BBRERJTkdfU0laRSBieXRlcwo+ICsgKiAgICAgICAgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBy ZWFkIGJpdHMgYmVjYXVzZSBzb21lIG9wdGltaXplZCBiaXRzdHJlYW0KPiArICogICAgICAgIHJl YWRlcnMgcmVhZCAzMiBvciA2NCBiaXRzIGF0IG9uY2UgYW5kIGNvdWxkIHJlYWQgb3ZlciB0aGUg ZW5kCj4gKyAqIEBwYXJhbSBieXRlX3NpemUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBieXRl cwo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgQVZFUlJPUl9JTlZBTElEREFUQSBpZiB0aGUg YnVmZmVyX3NpemUgd291bGQgb3ZlcmZsb3cKPiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IEJT X0ZVTkMoYml0c3RyZWFtX2luaXQ4KShCaXRzdHJlYW1Db250ZXh0ICpiYywgY29uc3QgdWludDhf dCAqYnVmZmVyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGJ5dGVfc2l6ZSkKPiArewo+ICsgICAgaWYgKGJ5dGVfc2l6ZSA+IElOVF9N QVggLyA4KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgcmV0 dXJuIEJTX0ZVTkMoYml0c3RyZWFtX2luaXQpKGJjLCBidWZmZXIsIGJ5dGVfc2l6ZSAqIDgpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHVpbnQ2NF90IEJTX0ZVTkMoZ2V0X3ZhbCkoQml0c3Ry ZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQo+ICt7Cj4gKyAgICB1aW50NjRfdCByZXQ7 Cj4gKwo+ICsjaWZkZWYgQklUU1RSRUFNX0xFCj4gKyAgICByZXQgPSBiYy0+Yml0cyAmICgoVUlO VDY0X0MoMSkgPDwgbikgLSAxKTsKPiArICAgIGJjLT5iaXRzID4+PSBuOwo+ICsjZWxzZQo+ICsg ICAgcmV0ID0gYmMtPmJpdHMgPj4gKDY0IC0gbik7Cj4gKyAgICBiYy0+Yml0cyA8PD0gbjsKPiAr I2VuZGlmCj4gKyAgICBiYy0+Yml0c19sZWZ0IC09IG47Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsK PiArfQo+ICsKPiArLyoqCj4gKyAqIFJldHVybiBvbmUgYml0IGZyb20gdGhlIGJ1ZmZlci4KPiAr ICovCj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IEJTX0ZVTkMoYml0c3RyZWFtX3JlYWRf Yml0KShCaXRzdHJlYW1Db250ZXh0ICpiYykKPiArewo+ICsgICAgaWYgKCFiYy0+Yml0c19sZWZ0 KQo+ICsgICAgICAgIEJTX0ZVTkMocmVmaWxsXzY0KShiYyk7Cj4gKwo+ICsgICAgcmV0dXJuIEJT X0ZVTkMoZ2V0X3ZhbCkoYmMsIDEpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogUmV0dXJuIG4gYml0 cyBmcm9tIHRoZSBidWZmZXIsIG4gaGFzIHRvIGJlIGluIHRoZSAwLTYzIHJhbmdlLgo+ICsgKi8K PiArc3RhdGljIGlubGluZSB1aW50NjRfdCBCU19GVU5DKGJpdHN0cmVhbV9yZWFkXzYzKShCaXRz dHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCj4gK3sKPiArICAgIHVpbnQ2NF90IHJl dCA9IDA7Cj4gKyNpZmRlZiBCSVRTVFJFQU1fTEUKPiArICAgIHVpbnQ2NF90IGxlZnQgPSAwOwo+ ICsjZW5kaWYKPiArCj4gKyAgICBpZiAoIW4pCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsg ICAgaWYgKG4gPiBiYy0+Yml0c19sZWZ0KSB7Cj4gKyAgICAgICAgbiAtPSBiYy0+Yml0c19sZWZ0 Owo+ICsjaWZkZWYgQklUU1RSRUFNX0xFCj4gKyAgICAgICAgbGVmdCA9IGJjLT5iaXRzX2xlZnQ7 Cj4gKyNlbmRpZgo+ICsgICAgICAgIHJldCA9IEJTX0ZVTkMoZ2V0X3ZhbCkoYmMsIGJjLT5iaXRz X2xlZnQpOwo+ICsgICAgICAgIEJTX0ZVTkMocmVmaWxsXzY0KShiYyk7Cj4gKyAgICB9Cj4gKwo+ ICsjaWZkZWYgQklUU1RSRUFNX0xFCj4gKyAgICByZXQgPSBnZXRfdmFsX2xlKGJjLCBuKSA8PCBs ZWZ0IHwgcmV0Owo+ICsjZWxzZQo+ICsgICAgcmV0ID0gZ2V0X3ZhbF9iZShiYywgbikgfCByZXQg PDwgbjsKPiArI2VuZGlmCj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4g KyAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVmZmVyLCBuIGhhcyB0byBiZSBpbiB0aGUgMC0z MiAgcmFuZ2UuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90IEJTX0ZVTkMoYml0c3Ry ZWFtX3JlYWQpKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsg ICAgaWYgKCFuKQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsKPiArICAgIGlmIChuID4gYmMtPmJp dHNfbGVmdCkgewo+ICsgICAgICAgIEJTX0ZVTkMocmVmaWxsXzMyKShiYyk7Cj4gKyAgICAgICAg aWYgKGJjLT5iaXRzX2xlZnQgPCAzMikKPiArICAgICAgICAgICAgYmMtPmJpdHNfbGVmdCA9IG47 Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIEJTX0ZVTkMoZ2V0X3ZhbCkoYmMsIG4pOwo+ICt9 Cj4gKwo+ICsvKioKPiArICogUmV0dXJuIG4gYml0cyBmcm9tIHRoZSBidWZmZXIgYXMgYSBzaWdu ZWQgaW50ZWdlci4KPiArICogbiBoYXMgdG8gYmUgaW4gdGhlIDAtMzIgcmFuZ2UuCj4gKyAqLwo+ ICtzdGF0aWMgaW5saW5lIGludDMyX3QgQlNfRlVOQyhiaXRzdHJlYW1fcmVhZF9zaWduZWQpKEJp dHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsgICAgcmV0dXJuIHNp Z25fZXh0ZW5kKEJTX0ZVTkMoYml0c3RyZWFtX3JlYWQpKGJjLCBuKSwgbik7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IEJTX0ZVTkMoc2hvd192YWwpKEJpdHN0cmVhbUNv bnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsjaWZkZWYgQklUU1RSRUFNX0xFCj4g KyAgICByZXR1cm4gYmMtPmJpdHMgJiAoKFVJTlQ2NF9DKDEpIDw8IG4pIC0gMSk7Cj4gKyNlbHNl Cj4gKyAgICByZXR1cm4gYmMtPmJpdHMgPj4gKDY0IC0gbik7Cj4gKyNlbmRpZgo+ICt9Cj4gKwo+ ICsvKioKPiArICogUmV0dXJuIG4gYml0cyBmcm9tIHRoZSBidWZmZXIgYnV0IGRvIG5vdCBjaGFu Z2UgdGhlIGJ1ZmZlciBzdGF0ZS4KPiArICogbiBoYXMgdG8gYmUgaW4gdGhlIDAtMzIgcmFuZ2Uu Cj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBCU19GVU5DKGJpdHN0cmVhbV9w ZWVrKShCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCj4gK3sKPiArICAgIGlm IChuID4gYmMtPmJpdHNfbGVmdCkKPiArICAgICAgICBCU19GVU5DKHJlZmlsbF8zMikoYmMpOwo+ ICsKPiArICAgIHJldHVybiBCU19GVU5DKHNob3dfdmFsKShiYywgbik7Cj4gK30KPiArCj4gKy8q Kgo+ICsgKiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZlciBhcyBhIHNpZ25lZCBpbnRlZ2Vy LAo+ICsgKiBkbyBub3QgY2hhbmdlIHRoZSBidWZmZXIgc3RhdGUuCj4gKyAqIG4gaGFzIHRvIGJl IGluIHRoZSAwLTMyIHJhbmdlLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBpbnQgQlNfRlVOQyhi aXRzdHJlYW1fcGVla19zaWduZWQpKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQg bikKPiArewo+ICsgICAgcmV0dXJuIHNpZ25fZXh0ZW5kKEJTX0ZVTkMoYml0c3RyZWFtX3BlZWsp KGJjLCBuKSwgbik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBCU19GVU5DKHNraXBf cmVtYWluaW5nKShCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCj4gK3sKPiAr I2lmZGVmIEJJVFNUUkVBTV9MRQo+ICsgICAgYmMtPmJpdHMgPj49IG47Cj4gKyNlbHNlCj4gKyAg ICBiYy0+Yml0cyA8PD0gbjsKPiArI2VuZGlmCj4gKyAgICBiYy0+Yml0c19sZWZ0IC09IG47Cj4g K30KPiArCj4gKy8qKgo+ICsgKiBTa2lwIG4gYml0cyBpbiB0aGUgYnVmZmVyLgo+ICsgKi8KPiAr c3RhdGljIGlubGluZSB2b2lkIEJTX0ZVTkMoYml0c3RyZWFtX3NraXApKEJpdHN0cmVhbUNvbnRl eHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKPiArewo+ICsgICAgaWYgKG4gPCBiYy0+Yml0c19sZWZ0 KQo+ICsgICAgICAgIEJTX0ZVTkMoc2tpcF9yZW1haW5pbmcpKGJjLCBuKTsKPiArICAgIGVsc2Ug ewo+ICsgICAgICAgIG4gLT0gYmMtPmJpdHNfbGVmdDsKPiArICAgICAgICBiYy0+Yml0cyAgICAg ID0gMDsKPiArICAgICAgICBiYy0+Yml0c19sZWZ0ID0gMDsKPiArCj4gKyAgICAgICAgaWYgKG4g Pj0gNjQpIHsKPiArICAgICAgICAgICAgdW5zaWduZWQgaW50IHNraXAgPSBuIC8gODsKPiArCj4g KyAgICAgICAgICAgIG4gLT0gc2tpcCAqIDg7Cj4gKyAgICAgICAgICAgIGJjLT5wdHIgKz0gc2tp cDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgQlNfRlVOQyhyZWZpbGxfNjQpKGJjKTsKPiArICAg ICAgICBpZiAobikKPiArICAgICAgICAgICAgQlNfRlVOQyhza2lwX3JlbWFpbmluZykoYmMsIG4p Owo+ICsgICAgfQo+ICt9Cj4gKwo+ICsvKioKPiArICogU2VlayB0byB0aGUgZ2l2ZW4gYml0IHBv c2l0aW9uLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSB2b2lkIEJTX0ZVTkMoYml0c3RyZWFtX3Nl ZWspKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBwb3MpCj4gK3sKPiArICAgIGJjLT5w dHIgICAgICAgPSBiYy0+YnVmZmVyOwo+ICsgICAgYmMtPmJpdHMgICAgICA9IDA7Cj4gKyAgICBi Yy0+Yml0c19sZWZ0ID0gMDsKPiArCj4gKyAgICBCU19GVU5DKGJpdHN0cmVhbV9za2lwKShiYywg cG9zKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFNraXAgYml0cyB0byBhIGJ5dGUgYm91bmRhcnku Cj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGNvbnN0IHVpbnQ4X3QgKkJTX0ZVTkMoYml0c3RyZWFt X2FsaWduKShCaXRzdHJlYW1Db250ZXh0ICpiYykKPiArewo+ICsgICAgdW5zaWduZWQgaW50IG4g PSAtYml0c3RyZWFtX3RlbGwoYmMpICYgNzsKPiArICAgIGlmIChuKQo+ICsgICAgICAgIEJTX0ZV TkMoYml0c3RyZWFtX3NraXApKGJjLCBuKTsKPiArICAgIHJldHVybiBiYy0+YnVmZmVyICsgKGJp dHN0cmVhbV90ZWxsKGJjKSA+PiAzKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFJlYWQgTVBFRy0x IGRjLXN0eWxlIFZMQyAoc2lnbiBiaXQgKyBtYW50aXNzYSB3aXRoIG5vIE1TQikuCj4gKyAqIElm IE1TQiBub3Qgc2V0IGl0IGlzIG5lZ2F0aXZlLgo+ICsgKiBAcGFyYW0gbiBsZW5ndGggaW4gYml0 cwo+ICsgKi8KPiArc3RhdGljIGlubGluZSBpbnQgQlNfRlVOQyhiaXRzdHJlYW1fcmVhZF94Yml0 cykoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQo+ICt7Cj4gKyAgICBpbnQz Ml90IGNhY2hlID0gQlNfRlVOQyhiaXRzdHJlYW1fcGVlaykoYmMsIDMyKTsKPiArICAgIGludCBz aWduID0gfmNhY2hlID4+IDMxOwo+ICsgICAgQlNfRlVOQyhza2lwX3JlbWFpbmluZykoYmMsIG4p Owo+ICsKPiArICAgIHJldHVybiAoKCgodWludDMyX3QpKHNpZ24gXiBjYWNoZSkpID4+ICgzMiAt IG4pKSBeIHNpZ24pIC0gc2lnbjsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFJldHVybiBkZWNvZGVk IHRydW5jYXRlZCB1bmFyeSBjb2RlIGZvciB0aGUgdmFsdWVzIDAsIDEsIDIuCj4gKyAqLwo+ICtz dGF0aWMgaW5saW5lIGludCBCU19GVU5DKGJpdHN0cmVhbV9kZWNvZGUwMTIpKEJpdHN0cmVhbUNv bnRleHQgKmJjKQo+ICt7Cj4gKyAgICBpZiAoIUJTX0ZVTkMoYml0c3RyZWFtX3JlYWRfYml0KShi YykpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgcmV0dXJuIEJT X0ZVTkMoYml0c3RyZWFtX3JlYWRfYml0KShiYykgKyAxOwo+ICt9Cj4gKwo+ICsvKioKPiArICog UmV0dXJuIGRlY29kZWQgdHJ1bmNhdGVkIHVuYXJ5IGNvZGUgZm9yIHRoZSB2YWx1ZXMgMiwgMSwg MC4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IEJTX0ZVTkMoYml0c3RyZWFtX2RlY29kZTIx MCkoQml0c3RyZWFtQ29udGV4dCAqYmMpCj4gK3sKPiArICAgIGlmIChCU19GVU5DKGJpdHN0cmVh bV9yZWFkX2JpdCkoYmMpKQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsgICAgZWxzZQo+ICsgICAg ICAgIHJldHVybiAyIC0gQlNfRlVOQyhiaXRzdHJlYW1fcmVhZF9iaXQpKGJjKTsKPiArfQo+ICsK PiArLyogUmVhZCBzaWduIGJpdCBhbmQgZmxpcCB0aGUgc2lnbiBvZiB0aGUgcHJvdmlkZWQgdmFs dWUgYWNjb3JkaW5nbHkuICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IEJTX0ZVTkMoYml0c3RyZWFt X2FwcGx5X3NpZ24pKEJpdHN0cmVhbUNvbnRleHQgKmJjLCBpbnQgdmFsKQo+ICt7Cj4gKyAgICBp bnQgc2lnbiA9IEJTX0ZVTkMoYml0c3RyZWFtX3JlYWRfc2lnbmVkKShiYywgMSk7Cj4gKyAgICBy ZXR1cm4gKHZhbCBeIHNpZ24pIC0gc2lnbjsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQg QlNfRlVOQyhiaXRzdHJlYW1fc2tpcF8xc3RvcF84ZGF0YSkoQml0c3RyZWFtQ29udGV4dCAqcykK PiArewo+ICsgICAgaWYgKGJpdHN0cmVhbV9iaXRzX2xlZnQocykgPD0gMCkKPiArICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArCj4gKyAgICB3aGlsZSAoQlNfRlVOQyhiaXRz dHJlYW1fcmVhZCkocywgMSkpIHsKPiArICAgICAgICBCU19GVU5DKGJpdHN0cmVhbV9za2lwKShz LCA4KTsKPiArICAgICAgICBpZiAoYml0c3RyZWFtX2JpdHNfbGVmdChzKSA8PSAwKQo+ICsgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIH0KPiArCj4gKyAgICBy ZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFJldHVybiB0aGUgTFVUIGVsZW1lbnQgZm9y IHRoZSBnaXZlbiBiaXRzdHJlYW0gY29uZmlndXJhdGlvbi4KPiArICovCj4gK3N0YXRpYyBpbmxp bmUgaW50IEJTX0ZVTkMoc2V0X2lkeCkoQml0c3RyZWFtQ29udGV4dCAqYmMsIGludCBjb2RlLCBp bnQgKm4sIGludCAqbmJfYml0cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBW TENFbGVtICp0YWJsZSkKPiArewo+ICsgICAgdW5zaWduZWQgaWR4Owo+ICsKPiArICAgICpuYl9i aXRzID0gLSpuOwo+ICsgICAgaWR4ID0gQlNfRlVOQyhiaXRzdHJlYW1fcGVlaykoYmMsICpuYl9i aXRzKSArIGNvZGU7Cj4gKyAgICAqbiA9IHRhYmxlW2lkeF0ubGVuOwo+ICsKPiArICAgIHJldHVy biB0YWJsZVtpZHhdLnN5bTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFBhcnNlIGEgdmxjIGNvZGUu Cj4gKyAqIEBwYXJhbSBiaXRzIGlzIHRoZSBudW1iZXIgb2YgYml0cyB3aGljaCB3aWxsIGJlIHJl YWQgYXQgb25jZSwgbXVzdCBiZQo+ICsgKiAgICAgICAgICAgICBpZGVudGljYWwgdG8gbmJfYml0 cyBpbiBpbml0X3ZsYygpCj4gKyAqIEBwYXJhbSBtYXhfZGVwdGggaXMgdGhlIG51bWJlciBvZiB0 aW1lcyBiaXRzIGJpdHMgbXVzdCBiZSByZWFkIHRvIGNvbXBsZXRlbHkKPiArICogICAgICAgICAg ICAgICAgICByZWFkIHRoZSBsb25nZXN0IHZsYyBjb2RlCj4gKyAqICAgICAgICAgICAgICAgICAg PSAobWF4X3ZsY19sZW5ndGggKyBiaXRzIC0gMSkgLyBiaXRzCj4gKyAqIElmIHRoZSB2bGMgY29k ZSBpcyBpbnZhbGlkIGFuZCBtYXhfZGVwdGg9MSwgdGhlbiBubyBiaXRzIHdpbGwgYmUgcmVtb3Zl ZC4KPiArICogSWYgdGhlIHZsYyBjb2RlIGlzIGludmFsaWQgYW5kIG1heF9kZXB0aD4xLCB0aGVu IHRoZSBudW1iZXIgb2YgYml0cyByZW1vdmVkCj4gKyAqIGlzIHVuZGVmaW5lZC4KPiArICovCj4g K3N0YXRpYyBpbmxpbmUgaW50IEJTX0ZVTkMoYml0c3RyZWFtX3JlYWRfdmxjKShCaXRzdHJlYW1D b250ZXh0ICpiYywgY29uc3QgVkxDRWxlbSAqdGFibGUsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0cywgaW50IG1heF9kZXB0aCkKPiArewo+ ICsgICAgaW50IG5iX2JpdHM7Cj4gKyAgICB1bnNpZ25lZCBpZHggPSBCU19GVU5DKGJpdHN0cmVh bV9wZWVrKShiYywgYml0cyk7Cj4gKyAgICBpbnQgY29kZSAgICAgPSB0YWJsZVtpZHhdLnN5bTsK PiArICAgIGludCBuICAgICAgICA9IHRhYmxlW2lkeF0ubGVuOwo+ICsKPiArICAgIGlmIChtYXhf ZGVwdGggPiAxICYmIG4gPCAwKSB7Cj4gKyAgICAgICAgQlNfRlVOQyhza2lwX3JlbWFpbmluZyko YmMsIGJpdHMpOwo+ICsgICAgICAgIGNvZGUgPSBCU19GVU5DKHNldF9pZHgpKGJjLCBjb2RlLCAm biwgJm5iX2JpdHMsIHRhYmxlKTsKPiArICAgICAgICBpZiAobWF4X2RlcHRoID4gMiAmJiBuIDwg MCkgewo+ICsgICAgICAgICAgICBCU19GVU5DKHNraXBfcmVtYWluaW5nKShiYywgbmJfYml0cyk7 Cj4gKyAgICAgICAgICAgIGNvZGUgPSBCU19GVU5DKHNldF9pZHgpKGJjLCBjb2RlLCAmbiwgJm5i X2JpdHMsIHRhYmxlKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBCU19GVU5DKHNraXBf cmVtYWluaW5nKShiYywgbik7Cj4gKwo+ICsgICAgcmV0dXJuIGNvZGU7Cj4gK30KPiArCj4gKyN1 bmRlZiBCU19GVU5DCj4gKyN1bmRlZiBCU19GVU5DMgo+ICsjdW5kZWYgQlNfSk9JTgo+ICsjdW5k ZWYgQlNfU1VGRklYCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL3JlZi9mYXRlL3NvdXJjZSBiL3Rlc3Rz L3JlZi9mYXRlL3NvdXJjZQo+IGluZGV4IDE2ZWE3ZWY5YzEuLjNiN2VhOWMzNzkgMTAwNjQ0Cj4g LS0tIGEvdGVzdHMvcmVmL2ZhdGUvc291cmNlCj4gKysrIGIvdGVzdHMvcmVmL2ZhdGUvc291cmNl Cj4gQEAgLTIxLDYgKzIxLDcgQEAgSGVhZGVycyB3aXRob3V0IHN0YW5kYXJkIGluY2x1c2lvbiBn dWFyZHM6Cj4gIGNvbXBhdC9kamdwcC9tYXRoLmgKPiAgY29tcGF0L2Zsb2F0L2Zsb2F0LmgKPiAg Y29tcGF0L2Zsb2F0L2xpbWl0cy5oCj4gK2xpYmF2Y29kZWMvYml0c3RyZWFtX3RlbXBsYXRlLmgK PiAgdG9vbHMvZGVjb2RlX3NpbXBsZS5oCj4gIFVzZSBvZiBhdl9jbGlwKCkgd2hlcmUgYXZfY2xp cF91aW50cDIoKSBjb3VsZCBiZSB1c2VkOgo+ICBVc2Ugb2YgYXZfY2xpcCgpIHdoZXJlIGF2X2Ns aXBfaW50cDIoKSBjb3VsZCBiZSB1c2VkOgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxA ZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2 ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2 ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=