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 B7EE74102A for ; Sun, 2 Jan 2022 19:01:47 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 63CA868B17D; Sun, 2 Jan 2022 21:01:45 +0200 (EET) Received: from mail-yb1-f182.google.com (mail-yb1-f182.google.com [209.85.219.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E3B286881C8 for ; Sun, 2 Jan 2022 21:01:38 +0200 (EET) Received: by mail-yb1-f182.google.com with SMTP id e202so51080981ybf.4 for ; Sun, 02 Jan 2022 11:01:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=p7NkhsLx94qiEKYKZzSRvkPRjwBNwmuUTRwtyutoNmQ=; b=TQDnuINOCezK1JWNQUlguO4B8W5MSudCAM/6oFMNv3j4AvvGRcZkaJ2IXgfuy2kZ2n h8VsFHI+4h5B+uWMiNHrYfMRiWAEki7OQm9apSI+ahdZFe1bYWLP9PjLQ3h1ThOkqNsP /jd2nZ1jjtAnKvTPcK8rfqyIupZ2gBE8CTdH7mytKCTi0TbHxcyt1daMbHWfay+X7AM1 XEgXvSdPx5rrXpwqOxhwFS9LhIzDUFuQZ2njIm/wTyZ7mjd+fuFetG3QLizsR+LWqKFK +ETM9KO6OshZx7KTpOH34oU1LRZfvOpJ36l2OK6VFvD3g5jHiGTkTJmUFN6+fb9bc7fu jqKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=p7NkhsLx94qiEKYKZzSRvkPRjwBNwmuUTRwtyutoNmQ=; b=MJ4dWCUJlTBbjTFXwt6FiYc9uOTL3CTOurrREouomdahKVn5n9jlRRe51LnO+NKfvn Y6aRhnKJ3Xz6y7mFuiUlf/BtdXcQ1+2UueJCyJey83bP1h2xrR1NR8Hkl14dI2Yfg83M nCIJ6+9j4ijOQrx9CnG/0qFDSkrjLV9ON7QuXDD+Nc4EjDVzwi7GiTWLlWKgop0ucgF5 GCBzcSs1TYghizr9rTFWJLmkYsw9khqPMEe5iwYkUpOMqoxsAJy86cGsQOKWH0831Weq /TFhi/Vt7dhVPVEnY1zWPqJPyLaRm+N3fntcqiViNkF4cXjt8cFDhOdk0r1wKnY/TlcI /TSQ== X-Gm-Message-State: AOAM530EUvTzLXq/J8Afg95p6ZxyIbZWdHaG0FocbrCSpicIU7hdS4Jy tQb2CxAIn8Yq7TJ1aJ6RKmdTPjn0vf/cQrBXQQhg1/HD X-Google-Smtp-Source: ABdhPJzK0qSb7GNt9bGgJVxWar90Cm0lPMxDvVP8ry93vcJuadMSlYO6YFoeU7ElILiJsFBm1LwiBOep7wHyJks8KcY= X-Received: by 2002:a05:6902:110d:: with SMTP id o13mr58055795ybu.715.1641150097496; Sun, 02 Jan 2022 11:01:37 -0800 (PST) MIME-Version: 1.0 References: <20211222151447.57681-1-ffmpeg@haasn.xyz> <20211222151447.57681-4-ffmpeg@haasn.xyz> In-Reply-To: From: Hendrik Leppkes Date: Sun, 2 Jan 2022 20:01:27 +0100 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v9 4/6] lavc: Implement Dolby Vision RPU parsing 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: QW5kcmVhcyBSaGVpbmhhcmR0IDxhbmRyZWFzLnJoZWluaGFyZHRAb3V0bG9vay5jb20+IHNjaHJp ZWIgYW0gU28uLCAyLiBKYW4uCjIwMjIsIDA1OjE4OgoKPiBOaWtsYXMgSGFhczoKPiA+IEZyb206 IE5pa2xhcyBIYWFzIDxnaXRAaGFhc24uZGV2Pgo+ID4KPiA+IEJhc2VkIG9uIGEgbWl4dHVyZSBv ZiBndWVzc3dvcmssIHBhcnRpYWwgZG9jdW1lbnRhdGlvbiBpbiBwYXRlbnRzLCBhbmQKPiA+IHJl dmVyc2UgZW5naW5lZXJpbmcgb2YgcmVhbC13b3JsZCBzYW1wbGVzLiBDb25maXJtZWQgd29ya2lu ZyBmb3IgYWxsIHRoZQo+ID4gc2FtcGxlcyBJJ3ZlIHRocm93biBhdCBpdC4KPiA+Cj4gPiBDb250 YWlucyBzb21lIGFubm95aW5nIG1hY2hpbmVyeSB0byBwZXJzaXN0IHRoZXNlIHZhbHVlcyBpbiBi ZXR3ZWVuCj4gPiBmcmFtZXMsIHdoaWNoIGlzIG5lZWRlZCBpbiB0aGVvcnkgZXZlbiB0aG91Z2gg SSd2ZSBuZXZlciBhY3R1YWxseSBzZWVuIGEKPiA+IHNhbXBsZSB0aGF0IHJlbGllcyBvbiBpdCBp biBwcmFjdGljZS4gTWF5IG9yIG1heSBub3Qgd29yay4KPiA+Cj4gPiBTaW5jZSB0aGUgZGlzdGlu Y3Rpb24gbWF0dGVycyBncmVhdGx5IGZvciBwYXJzaW5nIHRoZSBjb2xvciBtYXRyaXgKPiA+IHZh bHVlcywgdGhpcyBpbmNsdWRlcyBhIHNtYWxsIGhlbHBlciBmdW5jdGlvbiB0byBndWVzcyB0aGUg cmlnaHQgcHJvZmlsZQo+ID4gZnJvbSB0aGUgUlBVIGl0c2VsZiBpbiBjYXNlIHRoZSB1c2VyIGhh cyBmb3Jnb3R0ZW4gdG8gZm9yd2FyZCB0aGUgZG92aQo+ID4gY29uZmlndXJhdGlvbiByZWNvcmQg dG8gdGhlIGRlY29kZXIuIChXaGljaCBpbiBwcmFjdGljZSwgb25seSBmZm1wZWcuYwo+ID4gYW5k IGZmcGxheSBkby4uKQo+ID4KPiA+IE5vdGFibGUgb21pc3Npb25zIC8gZGV2aWF0aW9uczoKPiA+ IC0gQ1JDMzIgdmVyaWZpY2F0aW9uLiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBNUEVHMiBDUkMzMiB0 eXBlLCB3aGljaCBkb2VzCj4gPiAgIG5vdCBzZWVtIHRvIGJlIGltcGxlbWVudGVkIGluIGxhdnUu IChBbmQgSSBkb24ndCBjYXJlIGVub3VnaCB0byBkbyBzbykKPiA+IC0gTGluZWFyIGludGVycG9s YXRpb24gc3VwcG9ydC4gTm90aGluZyBkb2N1bWVudHMgdGhpcyAoYmV5b25kIGl0cwo+ID4gICBl eGlzdGVuY2UpIGFuZCBubyBzYW1wbGVzIHVzZSBpdCwgc28gaW1wb3NzaWJsZSB0byBpbXBsZW1l bnQuCj4gPiAtIEFsbCBvZiB0aGUgZXh0ZW5zaW9uIG1ldGFkYXRhIGJsb2NrcywgYnV0IHRoZXNl IGNvbnRhaW4gdmFsdWVzIHRoYXQKPiA+ICAgc2VlbSBsYXJnZWx5IGNvbmdydWVudCB3aXRoIFNU MjA5NCwgSERSMTAsIG9yIG90aGVyIGV4aXN0aW5nIGZvcm1zIG9mCj4gPiAgIHNpZGUgZGF0YSwg c28gSSB3aWxsIGRlZmVyIHBhcnNpbmcvYXR0YWNoaW5nIHRoZW0gdG8gYSBmdXR1cmUgY29tbWl0 Lgo+ID4gLSBUaGUgcGF0ZW50IGRlc2NyaWJlcyBhIG1lY2hhbmlzbSBmb3IgcHJlZGljdGluZyBj b2VmZmljaWVudHMgZnJvbQo+ID4gICBwcmV2aW91cyBSUFVzLCBidXQgdGhlIGJpdCBmb3IgdGhl IGZsYWcgd2hldGhlciB0byB1c2UgdGhlCj4gPiAgIHByZWRpY3Rpb24gZGVsdGFzIG9yIHNpZ25h bCBlbnRpcmVseSBuZXcgY29lZmZpY2llbnRzIGRvZXMgbm90IHNlZW0gdG8KPiA+ICAgYmUgcHJl c2VudCBpbiBhY3R1YWwgUlBVcywgc28gd2UgaWdub3JlIHRoaXMgc3Vic3lzdGVtIGVudGlyZWx5 Lgo+ID4gLSBJbiB0aGUgcGF0ZW50J3Mgc3BlYywgdGhlIE5MUSBzdWJzeXN0ZW0gYWxzbyBsb29w cyBvdmVyCj4gPiAgIG51bV9ubHFfcGl2b3RzLCBidXQgZXZlbiBpbiB0aGUgcGF0ZW50IHRoZSBu dW1iZXIgaXMgaGFyZC1jb2RlZCB0byBvbmUKPiA+ICAgaXRlcmF0aW9uIHJhdGhlciB0aGFuIHNp Z25hbGxlZC4gU28gd2Ugb25seSBzdG9yZSBvbmUgc2V0IG9mIGNvZWZzLgo+ID4KPiA+IEhlYXZp bHkgaW5mbHVlbmNlZCBieSBodHRwczovL2dpdGh1Yi5jb20vcXVpZXR2b2lkL2RvdmlfdG9vbAo+ ID4gRG9jdW1lbnRhdGlvbiBkcmF3biBmcm9tIFVTIFBhdGVudCAxMCw3MDEsMzk5IEIyIGFuZCBF VFNJIEdTIENDTSAwMDEKPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBOaWtsYXMgSGFhcyA8Z2l0QGhh YXNuLmRldj4KPiA+IC0tLQo+ID4gIGNvbmZpZ3VyZSAgICAgICAgICAgICB8ICAgMiArCj4gPiAg bGliYXZjb2RlYy9NYWtlZmlsZSAgIHwgICAxICsKPiA+ICBsaWJhdmNvZGVjL2RvdmlfcnB1LmMg fCA0MzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgbGli YXZjb2RlYy9kb3ZpX3JwdS5oIHwgIDcxICsrKysrKysKPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDUw NCBpbnNlcnRpb25zKCspCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvZG92aV9y cHUuYwo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2RvdmlfcnB1LmgKPiA+Cj4g PiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gPiBpbmRleCAwY2NkM2JkYTEx Li42ODY1OGE4NDdmIDEwMDc1NQo+ID4gLS0tIGEvY29uZmlndXJlCj4gPiArKysgYi9jb25maWd1 cmUKPiA+IEBAIC0yNDM0LDYgKzI0MzQsNyBAQCBDT05GSUdfRVhUUkE9Igo+ID4gICAgICBjYnNf dnA5Cj4gPiAgICAgIGRpcmFjX3BhcnNlCj4gPiAgICAgIGRubgo+ID4gKyAgICBkb3ZpX3JwdQo+ ID4gICAgICBkdnByb2ZpbGUKPiA+ICAgICAgZXhpZgo+ID4gICAgICBmYWFuZGN0Cj4gPiBAQCAt MjcwNiw2ICsyNzA3LDcgQEAgY2JzX21wZWcyX3NlbGVjdD0iY2JzIgo+ID4gIGNic192cDlfc2Vs ZWN0PSJjYnMiCj4gPiAgZGN0X3NlbGVjdD0icmRmdCIKPiA+ICBkaXJhY19wYXJzZV9zZWxlY3Q9 ImdvbG9tYiIKPiA+ICtkb3ZpX3JwdV9zZWxlY3Q9ImdvbG9tYiIKPiA+ICBkbm5fc3VnZ2VzdD0i bGlidGVuc29yZmxvdyBsaWJvcGVudmlubyIKPiA+ICBkbm5fZGVwcz0iYXZmb3JtYXQgc3dzY2Fs ZSIKPiA+ICBlcnJvcl9yZXNpbGllbmNlX3NlbGVjdD0ibWVfY21wIgo+ID4gZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4gPiBpbmRleCBmYjkw ZWNlYTg0Li43MzY0YzdhOTFmIDEwMDY0NAo+ID4gLS0tIGEvbGliYXZjb2RlYy9NYWtlZmlsZQo+ ID4gKysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+ID4gQEAgLTc3LDYgKzc3LDcgQEAgT0JKUy0k KENPTkZJR19DQlNfTVBFRzIpICAgICAgICAgICAgICAgKz0gY2JzX21wZWcyLm8KPiA+ICBPQkpT LSQoQ09ORklHX0NCU19WUDkpICAgICAgICAgICAgICAgICArPSBjYnNfdnA5Lm8KPiA+ICBPQkpT LSQoQ09ORklHX0NSWVNUQUxIRCkgICAgICAgICAgICAgICArPSBjcnlzdGFsaGQubwo+ID4gIE9C SlMtJChDT05GSUdfRENUKSAgICAgICAgICAgICAgICAgICAgICs9IGRjdC5vIGRjdDMyX2ZpeGVk Lm8KPiBkY3QzMl9mbG9hdC5vCj4gPiArT0JKUy0kKENPTkZJR19ET1ZJX1JQVSkgICAgICAgICAg ICAgICAgKz0gZG92aV9ycHUubwo+ID4gIE9CSlMtJChDT05GSUdfRVJST1JfUkVTSUxJRU5DRSkg ICAgICAgICs9IGVycm9yX3Jlc2lsaWVuY2Uubwo+ID4gIE9CSlMtJChDT05GSUdfRVhJRikgICAg ICAgICAgICAgICAgICAgICs9IGV4aWYubyB0aWZmX2NvbW1vbi5vCj4gPiAgT0JKUy0kKENPTkZJ R19GQUFORENUKSAgICAgICAgICAgICAgICAgKz0gZmFhbmRjdC5vCj4gPiBkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy9kb3ZpX3JwdS5jIGIvbGliYXZjb2RlYy9kb3ZpX3JwdS5jCj4gPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMC4uZmMyZTFmYjJhMQo+ID4gLS0tIC9k ZXYvbnVsbAo+ID4gKysrIGIvbGliYXZjb2RlYy9kb3ZpX3JwdS5jCj4gPiBAQCAtMCwwICsxLDQz MCBAQAo+ID4gKy8qCj4gPiArICogRG9sYnkgVmlzaW9uIFJQVSBkZWNvZGVyCj4gPiArICoKPiA+ ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSmFuIEVrc3Ryw7ZtCj4gPiArICogQ29weXJpZ2h0IChD KSAyMDIxIE5pa2xhcyBIYWFzCj4gPiArICoKPiA+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuCj4gPiArICoKPiA+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ID4gKyAqIHZlcnNp b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgo+ID4gKyAqCj4gPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+ICsgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+ID4g KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gPiAr ICoKPiA+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCj4gPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ID4gKyAqIEZvdW5kYXRpb24sIEluYy4s IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKPiAwMjExMC0xMzAx IFVTQQo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYnVmZmVyLmgiCj4g PiArCj4gPiArI2luY2x1ZGUgImRvdmlfcnB1LmgiCj4gPiArI2luY2x1ZGUgImdvbG9tYi5oIgo+ ID4gKyNpbmNsdWRlICJnZXRfYml0cy5oIgo+ID4gKwo+ID4gK2VudW0gewo+ID4gKyAgICBSUFVf Q09FRkZfRklYRUQgPSAwLAo+ID4gKyAgICBSUFVfQ09FRkZfRkxPQVQgPSAxLAo+ID4gK307Cj4g PiArCj4gPiArLyoqCj4gPiArICogUHJpdmF0ZSBjb250ZW50cyBvZiB2ZHJfcmVmLgo+ID4gKyAq Lwo+ID4gK3R5cGVkZWYgc3RydWN0IERPVklWZHJSZWYgewo+ID4gKyAgICBBVkRPVklEYXRhTWFw cGluZyBtYXBwaW5nOwo+ID4gKyAgICBBVkRPVklDb2xvck1ldGFkYXRhIGNvbG9yOwo+ID4gK30g RE9WSVZkclJlZjsKPiA+ICsKPiA+ICt2b2lkIGZmX2RvdmlfY3R4X3VucmVmKERPVklDb250ZXh0 ICpzKQo+ID4gK3sKPiA+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhz LT52ZHJfcmVmKTsgaSsrKQo+ID4gKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZzLT52ZHJfcmVm W2ldKTsKPiA+ICsKPiA+ICsgICAgLyogUHJlc2VydmUgdGhlIHVzZXItcHJvdmlkZWQgZmllbGRz IGV4cGxpY2l0bHksIHJlc2V0IGV2ZXJ5dGhpbmcKPiBlbHNlICovCj4gPiArICAgICpzID0gKERP VklDb250ZXh0KSB7Cj4gPiArICAgICAgICAubG9nY3R4ID0gcy0+bG9nY3R4LAo+ID4gKyAgICAg ICAgLmNvbmZpZyA9IHMtPmNvbmZpZywKPiA+ICsgICAgfTsKPiA+ICt9Cj4gPiArCj4gPiAraW50 IGZmX2RvdmlfY3R4X3JlcGxhY2UoRE9WSUNvbnRleHQgKnMsIGNvbnN0IERPVklDb250ZXh0ICpz MCkKPiA+ICt7Cj4gPiArICAgIGludCByZXQ7Cj4gPiArICAgIHMtPmxvZ2N0eCA9IHMwLT5sb2dj dHg7Cj4gPiArICAgIHMtPmNvbmZpZyA9IHMwLT5jb25maWc7Cj4gPiArICAgIHMtPm1hcHBpbmcg PSBzMC0+bWFwcGluZzsKPiA+ICsgICAgcy0+Y29sb3IgPSBzMC0+Y29sb3I7Cj4gPiArICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgRE9WSV9NQVhfRE1fSUQ7IGkrKykgewo+ID4gKyAgICAgICAgaWYg KChyZXQgPSBhdl9idWZmZXJfcmVwbGFjZSgmcy0+dmRyX3JlZltpXSwgczAtPnZkcl9yZWZbaV0p KSA8Cj4gMCkKPiA+ICsgICAgICAgICAgICBnb3RvIGZhaWw7Cj4gPiArICAgIH0KPiA+ICsKPiA+ ICsgICAgcmV0dXJuIDA7Cj4gPiArCj4gPiArZmFpbDoKPiA+ICsgICAgZmZfZG92aV9jdHhfdW5y ZWYocyk7Cj4gPiArICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBmZl9kb3Zp X2F0dGFjaF9zaWRlX2RhdGEoRE9WSUNvbnRleHQgKnMsIEFWRnJhbWUgKmZyYW1lKQo+ID4gK3sK PiA+ICsgICAgQVZGcmFtZVNpZGVEYXRhICpzZDsKPiA+ICsgICAgQVZCdWZmZXJSZWYgKmJ1ZjsK PiA+ICsgICAgQVZET1ZJTWV0YWRhdGEgKmRvdmk7Cj4gPiArICAgIHNpemVfdCBkb3ZpX3NpemU7 Cj4gPiArCj4gPiArICAgIGlmICghcy0+bWFwcGluZyB8fCAhcy0+Y29sb3IpCj4gPiArICAgICAg ICByZXR1cm4gMDsgLyogaW5jb21wbGV0ZSBkb3ZpIG1ldGFkYXRhICovCj4gPiArCj4gPiArICAg IGRvdmkgPSBhdl9kb3ZpX21ldGFkYXRhX2FsbG9jKCZkb3ZpX3NpemUpOwo+ID4gKyAgICBpZiAo IWRvdmkpCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4gKwo+ID4gKyAg ICBidWYgPSBhdl9idWZmZXJfY3JlYXRlKCh1aW50OF90ICopIGRvdmksIGRvdmlfc2l6ZSwgTlVM TCwgTlVMTCwgMCk7Cj4gPiArICAgIGlmICghYnVmKSB7Cj4gPiArICAgICAgICBhdl9mcmVlKGRv dmkpOwo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiA+ICsgICAgfQo+ID4g Kwo+ID4gKyAgICBzZCA9IGF2X2ZyYW1lX25ld19zaWRlX2RhdGFfZnJvbV9idWYoZnJhbWUsCj4g QVZfRlJBTUVfREFUQV9ET1ZJX01FVEFEQVRBLCBidWYpOwo+ID4gKyAgICBpZiAoIXNkKSB7Cj4g PiArICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7Cj4gPiArICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIG1lbWNweShhdl9kb3ZpX2dl dF9oZWFkZXIoZG92aSksICZzLT5oZWFkZXIsIHNpemVvZihzLT5oZWFkZXIpKTsKPiA+ICsgICAg bWVtY3B5KGF2X2RvdmlfZ2V0X21hcHBpbmcoZG92aSksIHMtPm1hcHBpbmcsIHNpemVvZigqcy0+ bWFwcGluZykpOwo+ID4gKyAgICBtZW1jcHkoYXZfZG92aV9nZXRfY29sb3IoZG92aSksIHMtPmNv bG9yLCBzaXplb2YoKnMtPmNvbG9yKSk7Cj4KPiBUaGVzZSBhcmUgcG90ZW50aWFsbHkgcHJvYmxl bWF0aWMgZHVlIHRvIHRyYWlsaW5nIHBhZGRpbmcgaW4gdGhlCj4gc3RydWN0dXJlcy4gVGhpcyB0 cmFpbGluZyBwYWRkaW5nIG1pZ2h0IGJlY29tZSB2YWxpZCBmaWVsZHMgaW4gbmV3ZXIKPiB2ZXJz aW9ucyBvZiB0aGlzIHN0cnVjdHVyZS4gRS5nLiBhdl9kb3ZpX21ldGFkYXRhX2FsbG9jKCkgbWln aHQKPiBpbnRlbnRpb25hbGx5IHNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgdGhlc2UgbmV3IGZp ZWxkcyB0byBpbnZhbGlkCj4gdmFsdWVzLiBZZXQgbGF2YyAod2l0aCB0aGUgb2xkIHN0cnVjdHVy ZSkgc2VlcyB0aGVtIGFzIHBhZGRpbmcsIGFsbG93aW5nCj4gdGhlIGNvbXBpbGVyIHRvIHRyYXNo IHRoZXNlIHZhbHVlcyBvbiBldmVyeSB3cml0ZSB0byB0aGVzZSBzdHJ1Y3R1cmVzLgo+IE1vcmUg bGlrZWx5IHRob3VnaCBpcyB0aGF0IHRoZXkgd2lsbCBuZXZlciBiZSB0b3VjaGVkIGF0IGFsbCBh bmQKPiB0aGVyZWZvcmUgcmV0YWluIHRoZWlyIGRlZmF1bHQgKHplcm8pIGluaXRpYWxpemF0aW9u LiBXaGljaCBtaWdodAo+IGNvbmZsaWN0IHdpdGggdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlc2Ug ZmllbGRzLgo+IFRoaXMgY2FuIGJlIGZpeGVkIGJ5IG9ubHkgY29weWluZyBldmVyeXRoaW5nIHVw IHRvIGFuZCBpbmNsdWRpbmcgdGhlCj4gbGFzdCBmaWVsZCB0aGF0IHdlIGtub3cgb2YgZm9yIGV2 ZXJ5IG9mIHRoZXNlIHN0cnVjdHVyZXMuIFRoaXMgd2lsbAo+IHVuZm9ydHVuYXRlbHkgaW5jcmVh c2UgdGhlIG1haW50YWluZW5jZSBidXJkZW4gYSBiaXQuCj4KClRoaXMgY29kZSBpcyB0aGUgcHJp bWFyeSBzb3VyY2Ugb2YgYW55IGRhdGEgaW4gdGhpcyBzdHJ1Y3QuIElmIGl0IGV2ZXIgZ2V0cwpl eHRlbmRlZCwgdGhpcyBwYXJzZXIgd2FudGluZyB0byBzdG9yZSBtb3JlIGZpZWxkcyB3b3VsZCBi ZSB3aHksIHNvCmluaXRpYWxpemF0aW9uIGRvZXNuJ3Qgc2VlbSBvdmVybHkgd29ycnlzb21lLgoK Cj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGd1ZXNzX3By b2ZpbGUoY29uc3QgQVZET1ZJUnB1RGF0YUhlYWRlciAqaGRyKQo+ID4gK3sKPiA+ICsgICAgc3dp dGNoIChoZHItPnZkcl9ycHVfcHJvZmlsZSkgewo+ID4gKyAgICBjYXNlIDA6Cj4gPiArICAgICAg ICBpZiAoaGRyLT5ibF92aWRlb19mdWxsX3JhbmdlX2ZsYWcpCj4gPiArICAgICAgICAgICAgcmV0 dXJuIDU7Cj4gPiArICAgICAgICBicmVhazsKPiA+ICsgICAgY2FzZSAxOgo+ID4gKyAgICAgICAg aWYgKGhkci0+ZWxfc3BhdGlhbF9yZXNhbXBsaW5nX2ZpbHRlcl9mbGFnICYmCj4gIWhkci0+ZGlz YWJsZV9yZXNpZHVhbF9mbGFnKSB7Cj4gPiArICAgICAgICAgICAgaWYgKGhkci0+dmRyX2JpdF9k ZXB0aCA9PSAxMikgewo+ID4gKyAgICAgICAgICAgICAgICByZXR1cm4gNzsKPiA+ICsgICAgICAg ICAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgICAgICAgICByZXR1cm4gNDsKPiA+ICsgICAgICAg ICAgICB9Cj4gPiArICAgICAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgICAgIHJldHVybiA4Owo+ ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiAwOyAvKiB1bmtu b3duICovCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgZ2V0X3VlX2Nv ZWYoR2V0Qml0Q29udGV4dCAqZ2IsIGNvbnN0Cj4gQVZET1ZJUnB1RGF0YUhlYWRlciAqaGRyKQo+ ID4gK3sKPiA+ICsgICAgdWludDY0X3QgaXBhcnQ7Cj4gPiArICAgIHVuaW9uIHsgdWludDMyX3Qg dTMyOyBmbG9hdCBmMzI7IH0gZnBhcnQ7Cj4gPiArCj4gPiArICAgIHN3aXRjaCAoaGRyLT5jb2Vm X2RhdGFfdHlwZSkgewo+ID4gKyAgICBjYXNlIFJQVV9DT0VGRl9GSVhFRDoKPiA+ICsgICAgICAg IGlwYXJ0ID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKPiA+ICsgICAgICAgIGZwYXJ0LnUzMiA9 IGdldF9iaXRzX2xvbmcoZ2IsIGhkci0+Y29lZl9sb2cyX2Rlbm9tKTsKPiA+ICsgICAgICAgIHJl dHVybiAoaXBhcnQgPDwgaGRyLT5jb2VmX2xvZzJfZGVub20pICsgZnBhcnQudTMyOwo+Cj4gSGVy ZSBhbmQgaW4gZ2V0X3NlX2NvZWYgYmVsb3cgdGhlIGYzMiBtZW1iZXIgb2YgdGhlIHVuaW9uIGlz IG5vdCB1c2VkCj4gd2l0aCBSUFVfQ09FRkZfRklYRUQsIHNvIHVzaW5nIHRoZSB1bmlvbiBzZWVt cyB1bm5lY2Vzc2FyeS4gSXQgaXMgYWxzbwo+IHNsaWdodGx5IGNvbmZ1c2luZywgYmVjYXVzZSB1 cG9uIHNlZWluZyB0aGlzIGFuZCBzZWVpbmcgdGhhdCB0aGUgdW5pb24KPiBpcyB1c2VkIHdpdGgg UlBVX0NPRUZGX0ZJWEVELCBJIGV4cGVjdCBpdCB0byBiZSB1c2VkIGZvciB0eXBlLXB1bm5pbmcu Cj4KPiA+ICsKPiA+ICsgICAgY2FzZSBSUFVfQ09FRkZfRkxPQVQ6Cj4gPiArICAgICAgICBmcGFy dC51MzIgPSBnZXRfYml0c19sb25nKGdiLCAzMik7Cj4gPiArICAgICAgICByZXR1cm4gZnBhcnQu ZjMyICogKDEgPDwgaGRyLT5jb2VmX2xvZzJfZGVub20pOwo+Cj4gWW91IGNvdWxkIGp1c3QgdXNl IGF2X2ludDJmbG9hdCgpIGhlcmUgaW5zdGVhZCBvZiBhZGRpbmcgdGhlIHVuaW9uCj4geW91cnNl bGYuCj4KPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsgLyogdW5yZWFjaGFibGUg Ki8KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSBpbnQ2NF90IGdldF9zZV9jb2VmKEdl dEJpdENvbnRleHQgKmdiLCBjb25zdAo+IEFWRE9WSVJwdURhdGFIZWFkZXIgKmhkcikKPiA+ICt7 Cj4gPiArICAgIGludDY0X3QgaXBhcnQ7Cj4gPiArICAgIHVuaW9uIHsgdWludDMyX3QgdTMyOyBm bG9hdCBmMzI7IH0gZnBhcnQ7Cj4gPiArCj4gPiArICAgIHN3aXRjaCAoaGRyLT5jb2VmX2RhdGFf dHlwZSkgewo+ID4gKyAgICBjYXNlIFJQVV9DT0VGRl9GSVhFRDoKPiA+ICsgICAgICAgIGlwYXJ0 ID0gZ2V0X3NlX2dvbG9tYl9sb25nKGdiKTsKPiA+ICsgICAgICAgIGZwYXJ0LnUzMiA9IGdldF9i aXRzX2xvbmcoZ2IsIGhkci0+Y29lZl9sb2cyX2Rlbm9tKTsKPiA+ICsgICAgICAgIHJldHVybiAo aXBhcnQgPDwgaGRyLT5jb2VmX2xvZzJfZGVub20pICsgZnBhcnQudTMyOwo+ID4gKwo+ID4gKyAg ICBjYXNlIFJQVV9DT0VGRl9GTE9BVDoKPiA+ICsgICAgICAgIGZwYXJ0LnUzMiA9IGdldF9iaXRz X2xvbmcoZ2IsIDMyKTsKPiA+ICsgICAgICAgIHJldHVybiBmcGFydC5mMzIgKiAoMSA8PCBoZHIt PmNvZWZfbG9nMl9kZW5vbSk7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7IC8q IHVucmVhY2hhYmxlICovCj4gPiArfQo+ID4gKwo+ID4gKyNkZWZpbmUgVkFMSURBVEUoVkFSLCBN SU4sIE1BWCkKPiAgICAgICAgICBcCj4gPiArICAgIGRvIHsKPiAgICAgICAgIFwKPiA+ICsgICAg ICAgIGlmIChWQVIgPCBNSU4gfHwgVkFSID4gTUFYKSB7Cj4gICAgICAgICAgXAo+ID4gKyAgICAg ICAgICAgIGF2X2xvZyhzLT5sb2djdHgsIEFWX0xPR19FUlJPUiwgIlJQVSB2YWxpZGF0aW9uIGZh aWxlZDogIgo+ICAgICAgICAgIFwKPiA+ICsgICAgICAgICAgICAgICAgICAgI01JTiIgPD0gIiNW QVIiID0gJWQgPD0gIiNNQVgiXG4iLCAoaW50KSBWQVIpOwo+ICAgICAgICAgIFwKPiA+ICsgICAg ICAgICAgICBnb3RvIGZhaWw7Cj4gICAgICAgICBcCj4gPiArICAgICAgICB9Cj4gICAgICAgICAg XAo+ID4gKyAgICB9IHdoaWxlICgwKQo+ID4gKwo+ID4gK2ludCBmZl9kb3ZpX3JwdV9wYXJzZShE T1ZJQ29udGV4dCAqcywgY29uc3QgdWludDhfdCAqcnB1LCBzaXplX3QKPiBycHVfc2l6ZSkKPiA+ ICt7Cj4gPiArICAgIEFWRE9WSVJwdURhdGFIZWFkZXIgKmhkciA9ICZzLT5oZWFkZXI7Cj4gPiAr ICAgIEdldEJpdENvbnRleHQgKmdiID0gJihHZXRCaXRDb250ZXh0KXswfTsKPiA+ICsgICAgRE9W SVZkclJlZiAqdmRyOwo+ID4gKyAgICBpbnQgcmV0Owo+ID4gKwo+ID4gKyAgICB1aW50OF90IG5h bF9wcmVmaXg7Cj4gPiArICAgIHVpbnQ4X3QgcnB1X3R5cGU7Cj4gPiArICAgIHVpbnQ4X3QgdmRy X3NlcV9pbmZvX3ByZXNlbnQ7Cj4gPiArICAgIHVpbnQ4X3QgdmRyX2RtX21ldGFkYXRhX3ByZXNl bnQ7Cj4gPiArICAgIHVpbnQ4X3QgdXNlX3ByZXZfdmRyX3JwdTsKPiA+ICsgICAgdWludDhfdCB1 c2VfbmxxOwo+ID4gKyAgICB1aW50OF90IHByb2ZpbGU7Cj4gPiArICAgIGlmICgocmV0ID0gaW5p dF9nZXRfYml0czgoZ2IsIHJwdSwgcnB1X3NpemUpKSA8IDApCj4KPiBOb3RpY2UgdGhhdCBycHVf c2l6ZSBpcyBjb252ZXJ0ZWQgdG8gaW50IGJlZm9yZSBpbml0X2dldF9iaXRzOCgpIGlzCj4gY2Fs bGVkLiAoSXQgaXMgbm90IHByb2JsZW1hdGljIHdpdGggdGhlIHVzZSBpbiA2LzYgYmVjYXVzZSB0 aGUgc2l6ZSBoYXMKPiBhbHJlYWR5IGJlZW4gY2hlY2tlZCBpbiB0aGlzIGNhc2UuKQo+Cj4gPiAr ICAgICAgICByZXR1cm4gcmV0Owo+ID4gKwo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+IGZmbXBlZy1k ZXZlbEBmZm1wZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZt cGVnLWRldmVsCj4KPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwK PiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3Jp YmUiLgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZm bXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9m Zm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwg dmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9y ZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K