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 0EBED4AE34 for ; Tue, 21 May 2024 19:40:29 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1F52568D2E3; Tue, 21 May 2024 22:40:28 +0300 (EEST) Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A946568C682 for ; Tue, 21 May 2024 22:40:21 +0300 (EEST) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 64494E80F8 for ; Tue, 21 May 2024 21:40:21 +0200 (CEST) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id uQhk2337aF7z for ; Tue, 21 May 2024 21:40:17 +0200 (CEST) Received: from iq (iq [217.27.212.140]) by iq.passwd.hu (Postfix) with ESMTPS id A66EEE24CE for ; Tue, 21 May 2024 21:40:17 +0200 (CEST) Date: Tue, 21 May 2024 21:40:17 +0200 (CEST) From: Marton Balint To: Lynne via ffmpeg-devel In-Reply-To: Message-ID: References: <20240519165444.829271-1-dev@lynne.ee> <20240519165444.829271-9-dev@lynne.ee> MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v2 8/8] aacdec: add a decoder for AAC USAC (xHE-AAC) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: CgpPbiBUdWUsIDIxIE1heSAyMDI0LCBMeW5uZSB2aWEgZmZtcGVnLWRldmVsIHdyb3RlOgoKPiBP biAyMS8wNS8yMDI0IDA5OjE2LCBNYXJ0b24gQmFsaW50IHdyb3RlOgo+Pgo+Pgo+PiAgT24gU3Vu LCAxOSBNYXkgMjAyNCwgTHlubmUgdmlhIGZmbXBlZy1kZXZlbCB3cm90ZToKPj4KPj4+ICBPbiAx OS8wNS8yMDI0IDIxOjM5LCBNYXJ0b24gQmFsaW50IHdyb3RlOgo+Pj4+IAo+Pj4+Cj4+Pj4gIMKg T24gU3VuLCAxOSBNYXkgMjAyNCwgTHlubmUgdmlhIGZmbXBlZy1kZXZlbCB3cm90ZToKPj4+Pgo+ Pj4+PiAgwqBUaGlzIGNvbW1pdCBhZGRzIGEgZGVjb2RlciBmb3IgdGhlIGZyZXF1ZW5jeS1kb21h aW4gcGFydCBvZiBVU0FDLgo+Pj4+Pgo+Pj4+ICDCoFsuLi5dCj4+Pj4gCj4+Pj4+Cj4+Pj4+ICDC oCsvKiBGaW5pc2ggbGF0ZXIgKi8KPj4+Pj4gIMKgK3N0YXRpYyBjb25zdCBlbnVtIEFWQ2hhbm5l bCB1c2FjX2NoX3Bvc190b19hdls2NF0gPSB7Cj4+Pj4+ICDCoCvCoMKgwqAgWzBdID0gQVZfQ0hB Tl9GUk9OVF9MRUZULAo+Pj4+PiAgwqArwqDCoMKgIFsxXSA9IEFWX0NIQU5fRlJPTlRfUklHSFQs Cj4+Pj4+ICDCoCvCoMKgwqAgWzJdID0gQVZfQ0hBTl9GUk9OVF9DRU5URVIsCj4+Pj4+ICDCoCvC oMKgwqAgWzNdID0gQVZfQ0hBTl9MT1dfRlJFUVVFTkNZLAo+Pj4+PiAgwqArwqDCoMKgIFs0XSA9 IEFWX0NIQU5fQkFDS19MRUZULCAvLyB1bnN1cmUKPj4+Pj4gIMKgK8KgwqDCoCBbNV0gPSBBVl9D SEFOX0JBQ0tfUklHSFQsIC8vIHVuc3VyZQo+Pj4+PiAgwqArwqDCoMKgIFs2XSA9IEFWX0NIQU5f RlJPTlRfTEVGVF9PRl9DRU5URVIsCj4+Pj4+ICDCoCvCoMKgwqAgWzddID0gQVZfQ0hBTl9GUk9O VF9SSUdIVF9PRl9DRU5URVIsCj4+Pj4+ICDCoCvCoMKgwqAgWzhdID0gMCwgLyogcmVhciBzdXJy b3VuZCBsZWZ0IGlzIG1pc3NpbmcgKi8KPj4+Pj4gIMKgK8KgwqDCoCBbOV0gPSAwLCAvKiByZWFy IHN1cnJvdW5kIHJpZ2h0IGlzIG1pc3NpbmcgKi8KPj4+Pj4gIMKgK8KgwqDCoCBbMTBdID0gQVZf Q0hBTl9CQUNLX0NFTlRFUiwKPj4+Pj4gIMKgK8KgwqDCoCBbMTFdID0gQVZfQ0hBTl9TVVJST1VO RF9ESVJFQ1RfTEVGVCwKPj4+Pj4gIMKgK8KgwqDCoCBbMTJdID0gQVZfQ0hBTl9TVVJST1VORF9E SVJFQ1RfUklHSFQsCj4+Pj4+ICDCoCvCoMKgwqAgWzEzXSA9IEFWX0NIQU5fU0lERV9MRUZULCAv LyBmYWlybHkgc3VyZQo+Pj4+PiAgwqArwqDCoMKgIFsxNF0gPSBBVl9DSEFOX1NJREVfUklHSFQs IC8vIGZhaXJseSBzdXJlCj4+Pj4+ICDCoCvCoMKgwqAgWzE1XSA9IEFWX0NIQU5fV0lERV9MRUZU LCAvLyBzb21ld2hhdCBjb25maWRlbnQKPj4+Pj4gIMKgK8KgwqDCoCBbMTZdID0gQVZfQ0hBTl9X SURFX1JJR0hULCAvLyBzb21ld2hhdCBjb25maWRlbnQKPj4+Pj4gIMKgK8KgwqDCoCBbMTddID0g QVZfQ0hBTl9UT1BfRlJPTlRfTEVGVCwKPj4+Pj4gIMKgK8KgwqDCoCBbMThdID0gQVZfQ0hBTl9U T1BfRlJPTlRfUklHSFQsCj4+Pj4+ICDCoCvCoMKgwqAgWzE5XSA9IEFWX0NIQU5fVE9QX0ZST05U X0NFTlRFUiwKPj4+Pj4gIMKgK8KgwqDCoCBbMjBdID0gQVZfQ0hBTl9UT1BfQkFDS19MRUZULAo+ Pj4+PiAgwqArwqDCoMKgIFsyMV0gPSBBVl9DSEFOX1RPUF9CQUNLX1JJR0hULAo+Pj4+PiAgwqAr wqDCoMKgIFsyMl0gPSBBVl9DSEFOX1RPUF9CQUNLX0NFTlRFUiwKPj4+Pj4gIMKgK8KgwqDCoCBb MjNdID0gQVZfQ0hBTl9UT1BfU0lERV9MRUZULAo+Pj4+PiAgwqArwqDCoMKgIFsyNF0gPSBBVl9D SEFOX1RPUF9TSURFX1JJR0hULAo+Pj4+PiAgwqArwqDCoMKgIFsyNV0gPSBBVl9DSEFOX1RPUF9D RU5URVIsCj4+Pj4+ICDCoCvCoMKgwqAgWzI2XSA9IEFWX0NIQU5fTE9XX0ZSRVFVRU5DWSwgLy8g YWN0dWFsbHkgTEZFMgo+Pj4+PiAgwqArwqDCoMKgIFsyN10gPSBBVl9DSEFOX0JPVFRPTV9GUk9O VF9MRUZULAo+Pj4+PiAgwqArwqDCoMKgIFsyOF0gPSBBVl9DSEFOX0JPVFRPTV9GUk9OVF9SSUdI VCwKPj4+Pj4gIMKgK8KgwqDCoCBbMjldID0gQVZfQ0hBTl9CT1RUT01fRlJPTlRfQ0VOVEVSLAo+ Pj4+PiAgwqArwqDCoMKgIFszMF0gPSAwLCAvKiB0b3AgbGVmdCBzdXJyb3VuZCBpcyBtaXNzaW5n ICovCj4+Pj4+ICDCoCvCoMKgwqAgWzMxXSA9IDAsIC8qIHRvcCByaWdodCBzdXJyb3VuZCBpcyBt aXNzaW5nICovCj4+Pj4+ICDCoCt9Owo+Pj4+Cj4+Pj4gIMKgU29tZSBjb21tZW50IHdvdWxkIGJl IG5pY2UgYWJvdXQgdGhlIHNvdXJjZSBvZiB0aGlzIHRhYmxlICh3aGljaAo+Pj4+ICBkb2N1bWVu dCwKPj4+PiAgwqB3aGljaCB0YWJsZSkuCj4+Pj4KPj4+PiAgwqBJdCBsb29rcyB2ZXJ5IHNpbWls YXIgdG8gdGhlIElTTyBjaGFubmVsIHBvc2l0b25zIHVzZWQgaW4gbW92X2NoYW4uIEkKPj4+PiAg wqB0aGluayB3ZSBmb2xsb3cgdGhpcyBtYXBwaW5nIGluIG1vc3QgY2FzZXM6Cj4+Pj4KPj4+PiAg wqBMZWZ0wqAgU3Vycm91bmQgaXMgU0lERV9MRUZUCj4+Pj4gIMKgUmlnaHQgU3Vycm91bmQgaXMg U0lERV9SSUdIVAo+Pj4+ICDCoFJlYXIgU3Vycm91bmQgTGVmdMKgIGlzIEJBQ0tfTEVGVAo+Pj4+ ICDCoFJlYXIgU3Vycm91bmQgUmlnaHQgaXMgQkFDS19SSUdIVAo+Pj4+Cj4+Pj4gIMKgU28gaW4g eW91ciB0YWJsZSBbNF0gYW5kIFs1XSBzaG91bGQgYmUgU0lERSwgWzhdIGFuZCBbOV0gc2hvdWxk IGJlCj4+Pj4gIEJBQ0suCj4+Pj4gIMKgWzI2XSBjYW4gYmUgQVZfQ0hBTl9MT1dfRlJFUVVFTkNZ XzIsIHdlIGRvIGhhdmUgdGhhdC4KPj4+Pgo+Pj4+ICDCoFllcywgTGVmdC9SaWdodCBTdXJyb3Vu ZCBhbmQgTGVmdC9SaWdodCBTaWRlIFN1cnJvdW5kIHdpbGwgYmUgdGhlIHNhbWUsCj4+Pj4gIMKg YnV0IHRob3NlIGFyZSBub3QgcHJlc2VudCBpbiBjb21tb25seSB1c2VkIGxheW91dHMgYXQgdGhl IHNhbWUgdGltZS4KPj4+Pgo+Pj4+ICDCoFJlZ2FyZHMsCj4+Pj4gIMKgTWFydG9uCj4+Pj4gIMKg X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4+PiAgwqBm Zm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0Cj4+Pj4gIMKgZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcK Pj4+PiAgwqBodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwK Pj4+Pgo+Pj4+ICDCoFRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbAo+ Pj4+ICDCoGZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1 YnNjcmliZSIuCj4+Pgo+Pj4gIFNvdXJjZSBvZiB0aGUgdGFibGUgaXMgSVNPL0lFQyAyMzAwMy0z LCBUYWJsZSA3NCDigJQgYnNPdXRwdXRDaGFubmVsUG9zOgo+Pj4KPj4+ICAwIEwgbGVmdCBmcm9u dCBGTCBmcm9udCBsZWZ0Cj4+PiAgMSBSIHJpZ2h0IGZyb250IEZSIGZyb250IHJpZ2h0Cj4+PiAg MiBDIGNlbnRlciBmcm9udCBGQyBmcm9udCBjZW50cmUKPj4+ICAzIExGRSBsb3cgZnJlcXVlbmN5 IGVuaGFuY2VtZW50IExGRTEgbG93IGZyZXF1ZW5jeSBlZmZlY3RzLTEKPj4+ICA0IExzIGxlZnQg c3Vycm91bmQgTFMgbGVmdCBzdXJyb3VuZAo+Pj4gIDUgUnMgcmlnaHQgc3Vycm91bmQgUlMgcmln aHQgc3Vycm91bmQKPj4+ICA2IExjIGxlZnQgZnJvbnQgY2VudGVyIEZMYyBmcm9udCBsZWZ0IGNl bnRyZQo+Pj4gIDcgUmMgcmlnaHQgZnJvbnQgY2VudGVyIEZSYyBmcm9udCByaWdodCBjZW50cmUK Pj4+ICA4IExzciByZWFyIHN1cnJvdW5kIGxlZnQgQkwgYmFjayBsZWZ0Cj4+PiAgOSBSc3IgcmVh ciBzdXJyb3VuZCByaWdodCBCUiBiYWNrIHJpZ2h0Cj4+PiAgMTAgQ3MgcmVhciBjZW50ZXIgQkMg YmFjayBjZW50cmUKPj4+ICAxMSBMc2QgbGVmdCBzdXJyb3VuZCBkaXJlY3QgTFNkIGxlZnQgc3Vy cm91bmQgZGlyZWN0Cj4+PiAgMTIgUnNkIHJpZ2h0IHN1cnJvdW5kIGRpcmVjdCBSU2QgcmlnaHQg c3Vycm91bmQgZGlyZWN0Cj4+PiAgMTMgTHNzIGxlZnQgc2lkZSBzdXJyb3VuZCBTTCBzaWRlIGxl ZnQKPj4+ICAxNCBSc3MgcmlnaHQgc2lkZSBzdXJyb3VuZCBTUiBzaWRlIHJpZ2h0Cj4+PiAgMTUg THcgbGVmdCB3aWRlIGZyb250IEZMdyBmcm9udCBsZWZ0IHdpZGUKPj4+ICAxNiBSdyByaWdodCB3 aWRlIGZyb250IEZSdyBmcm9udCByaWdodCB3aWRlCj4+PiAgMTcgTHYgbGVmdCBmcm9udCB2ZXJ0 aWNhbCBoZWlnaHQgVHBGTCB0b3AgZnJvbnQgbGVmdAo+Pj4gIDE4IFJ2IHJpZ2h0IGZyb250IHZl cnRpY2FsIGhlaWdodCBUcEZSIHRvcCBmcm9udCByaWdodAo+Pj4gIDE5IEN2IGNlbnRlciBmcm9u dCB2ZXJ0aWNhbCBoZWlnaHQgVHBGQyB0b3AgZnJvbnQgY2VudHJlCj4+PiAgMjAgTHZyIGxlZnQg c3Vycm91bmQgdmVydGljYWwgaGVpZ2h0IHJlYXIgVHBCTCB0b3AgYmFjayBsZWZ0Cj4+PiAgMjEg UnZyIHJpZ2h0IHN1cnJvdW5kIHZlcnRpY2FsIGhlaWdodCByZWFyIFRwQlIgdG9wIGJhY2sgcmln aHQKPj4+ICAyMiBDdnIgY2VudGVyIHZlcnRpY2FsIGhlaWdodCByZWFyIFRwQkMgdG9wIGJhY2sg Y2VudHJlCj4+PiAgMjMgTHZzcyBsZWZ0IHZlcnRpY2FsIGhlaWdodCBzaWRlIHN1cnJvdW5kIFRw U2lMIHRvcCBzaWRlIGxlZnQKPj4+ICAyNCBSdnNzIHJpZ2h0IHZlcnRpY2FsIGhlaWdodCBzaWRl IHN1cnJvdW5kIFRwU2lSIHRvcCBzaWRlIHJpZ2h0Cj4+PiAgMjUgVHMgdG9wIGNlbnRlciBzdXJy b3VuZCBUcEMgdG9wIGNlbnRyZQo+Pj4gIDI2IExGRTIgbG93IGZyZXF1ZW5jeSBlbmhhbmNlbWVu dCAyIExGRTIgbG93IGZyZXF1ZW5jeSBlZmZlY3RzLTIKPj4+ICAyNyBMYiBsZWZ0IGZyb250IHZl cnRpY2FsIGJvdHRvbSBCdEZMIGJvdHRvbSBmcm9udCBsZWZ0Cj4+PiAgMjggUmIgcmlnaHQgZnJv bnQgdmVydGljYWwgYm90dG9tIEJ0RlIgYm90dG9tIGZyb250IHJpZ2h0Cj4+PiAgMjkgQ2IgY2Vu dGVyIGZyb250IHZlcnRpY2FsIGJvdHRvbSBCdEZDIGJvdHRvbSBmcm9udCBjZW50cmUKPj4+ICAz MCBMdnMgbGVmdCB2ZXJ0aWNhbCBoZWlnaHQgc3Vycm91bmQgVHBMUyB0b3AgbGVmdCBzdXJyb3Vu ZAo+Pj4gIDMxIFJ2cyByaWdodCB2ZXJ0aWNhbCBoZWlnaHQgc3Vycm91bmQgVHBSUyB0b3Agcmln aHQgc3Vycm91bmQKPj4+Cj4+PiAgVGhpcmQgZmllbGQgaXMgIkxvdWRzcGVha2VyIHBvc2l0aW9u IiwgbGFzdCBmaWVsZCBpcyAiTG91ZHNwZWFrZXIKPj4+ICBwb3NpdGlvbiBhY2NvcmRpbmcgdG8g SUVDIDEwMC8xNzA2L0NEVi9JRUMgNjI1NzQgKFRDMTAwKSIsIGVhY2ggcHJlZml4ZWQKPj4+ICB3 aXRoIGFuIGFiYnJldmlhdGlvbi4KPj4+Cj4+PiAgSSd2ZSBhZGRlZCB0aGUgc291cmNlIHRvIHRo ZSB0YWJsZSBjb21tZW50IGluIHRoZSBjb2RlLgo+Pj4KPj4+ICBJJ3ZlIGFsc28gZml4ZWQgdGhl IFNJREUvQkFDSy9MRkUyIGlzc3VlIGluIG15IGdpdGh1YiByZXBvIEkgbGlua2VkCj4+PiAgZWFy bGllci4KPj4KPj4gIFRoYW5rcy4gTGF0ZXIgaW4gdGhlIGNvZGUgd2hlbiB5b3UgYWN0dWFsbHkg dXNlIHRoaXMgSSBjYW4gc2VlIHRoYXQgeW91Cj4+ICBhcmUgY3JlYXRpbmcgYSBuYXRpdmUgbGF5 b3V0Ogo+Pgo+Pj4gICvCoMKgwqAgY2hhbm5lbF9jb25maWdfaWR4ID0gZ2V0X2JpdHMoZ2IsIDUp OyAvKiBjaGFubmVsQ29uZmlndXJhdGlvbkluZGV4Cj4+PiAgKi8KPj4+ICArwqDCoMKgIGlmICgh Y2hhbm5lbF9jb25maWdfaWR4KSB7Cj4+PiAgK8KgwqDCoMKgwqDCoMKgIC8qIFVzYWNDaGFubmVs Q29uZmlnKCkgKi8KPj4+ICArwqDCoMKgwqDCoMKgwqAgdWludDhfdCBjaGFubmVsX3Bvc1s2NF07 Cj4+PiAgK8KgwqDCoMKgwqDCoMKgIHVpbnQ4X3QgbmJfY2hhbm5lbHMgPSBnZXRfZXNjYXBlZF92 YWx1ZShnYiwgNSwgOCwgMTYpOyAvKgo+Pj4gIG51bU91dENoYW5uZWxzICovCj4+PiAgK8KgwqDC oMKgwqDCoMKgIGlmIChuYl9jaGFubmVscyA+PSA2NCkKPj4+ICArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+Pj4gICsKPj4+ICArwqDCoMKgwqDCoMKgwqAg YXZfY2hhbm5lbF9sYXlvdXRfdW5pbml0KCZhYy0+b2NbMV0uY2hfbGF5b3V0KTsKPj4+ICArwqDC oMKgwqDCoMKgwqAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9jaGFubmVsczsgaSsrKQo+Pj4gICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNoYW5uZWxfcG9zW2ldID0gZ2V0X2JpdHMoZ2IsIDUpOyAv KiBic091dHB1dENoYW5uZWxQb3MgKi8KPj4+ICArCj4+PiAgK8KgwqDCoMKgwqDCoMKgIGFjLT5v Y1sxXS5jaF9sYXlvdXQub3JkZXIgPSBBVl9DSEFOTkVMX09SREVSX05BVElWRTsKPj4+ICArwqDC oMKgwqDCoMKgwqAgYWMtPm9jWzFdLmNoX2xheW91dC5uYl9jaGFubmVscyA9IG5iX2NoYW5uZWxz Owo+Pj4gICvCoMKgwqDCoMKgwqDCoCBhYy0+b2NbMV0uY2hfbGF5b3V0LnUubWFzayA9IDA7Cj4+ PiAgKwo+Pj4gICvCoMKgwqDCoMKgwqDCoCBmb3IgKGludCBpID0gMDsgaSA8IG5iX2NoYW5uZWxz OyBpKyspCj4+PiAgK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWMtPm9jWzFdLmNoX2xheW91dC51 Lm1hc2sgfD0gMSA8PAo+Pj4gIHVzYWNfY2hfcG9zX3RvX2F2W2NoYW5uZWxfcG9zW2ldXTsKPj4+ ICArCj4+PiAgK8KgwqDCoMKgwqDCoMKgIGF2X2NoYW5uZWxfbGF5b3V0X2NvcHkoJmF2Y3R4LT5j aF9sYXlvdXQsICZhYy0+b2NbMV0uY2hfbGF5b3V0KTsKPj4+ICArwqDCoMKgIH0gZWxzZSB7Cj4+ Cj4+ICBQcm9iYWJseSB5b3Ugc2hvdWxkIGNyZWF0ZSBhIGN1c3RvbSBsYXlvdXQgaGVyZSwgYmVj YXVzZSB0aGUgY2hhbm5lbHMgYXJlCj4+ICBub3QgbmVjZXNzYXJ5IGluIG5hdGl2ZSBvcmRlci4g V2UgYWxyZWFkeSBoYXZlIGEgcmVsYXRpdmVseSBzaW1wbGUgd2F5IHRvCj4+ICBkbyB0aGF0IGFu ZCB0byBmYWxsIGJhY2sgdG8gbmF0aXZlIGxheW91dHMgaWYgcG9zc2libGUsIGhlcmUgaXMgYW4g ZXhhbXBsZQo+PiAgY29waWVkIGZyb20gbW92X2NoYW46Cj4+Cj4+ICByZXQgPSBhdl9jaGFubmVs X2xheW91dF9jdXN0b21faW5pdChjaF9sYXlvdXQsIGNoYW5uZWxzKTsKPj4gIGlmIChyZXQgPCAw KQo+PiAgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbHM7IGkr Kykgewo+PiAgIMKgwqDCoCBlbnVtIEFWQ2hhbm5lbCBpZCA9IGxheW91dF9tYXBbaV0uaWQ7Cj4+ ICAgwqDCoMKgIGNoX2xheW91dC0+dS5tYXBbaV0uaWQgPSAoaWQgIT0gQVZfQ0hBTl9OT05FID8g aWQgOiBBVl9DSEFOX1VOS05PV04pOwo+PiB9Cj4+ICByZXR1cm4gYXZfY2hhbm5lbF9sYXlvdXRf cmV0eXBlKGNoX2xheW91dCwgMCwKPj4gIEFWX0NIQU5ORUxfTEFZT1VUX1JFVFlQRV9GTEFHX0NB Tk9OSUNBTCk7Cj4+Cj4+ICBTbyB5b3Ugc2hvdWxkIGFkYXB0IHRoaXMgYWNjb2RpbmdseSB0byBh YWMuCj4+Cj4+ICBSZWdhcmRzLAo+PiAgTWFydG9uCj4+ICBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwo+PiAgZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+ PiAgZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKPj4gIGh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAo+Pgo+PiAgVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsg YWJvdmUsIG9yIGVtYWlsCj4+ICBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGgg c3ViamVjdCAidW5zdWJzY3JpYmUiLgo+Cj4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjOgo+Cj4+ICBJ biBjYXNlIG9mIG11bHRpcGxlIGNoYW5uZWwgZWxlbWVudHMgdGhlIGluZGV4IGkgb2YKPj4gIGJz T3V0cHV0Q2hhbm5lbFBvc1tpXSBpbmRpY2F0ZXMgdGhlIHBvc2l0aW9uIGluIHdoaWNoIHRoZSBj aGFubmVsCj4+ICBhcHBlYXJzIGluIHRoZSBiaXRzdHJlYW0uCj4KPiBTbyB0aGUgY2hhbm5lbHMg d2lsbCBhbHdheXMgYmUgaW4gbmF0aXZlIG9yZGVyLCBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kLgo+ CgpBVl9DSEFOTkVMX09SREVSX05BVElWRSBleHBlY3RzIGNoYW5uZWxzIGluIHRoZSBvcmRlciBv ZiB0aGUgY2hhbm5lbCBJRHMgCmluIHRoZSBBVkNoYW5uZWwgZW51bS4gU3VyZWx5IHRoYXQgaXMg bm90IHRoZSBjYXNlIGhlcmUsIHVubGVzcyB0aGUgCmRlY29kZXIgcmVvcmRlcnMgdGhlIGNoYW5u ZWxzLiBPciB3aGF0IGlmIGFuIG91dHB1dCBwb3NpdGlvbiBhcHBlYXJzIAptdWx0aXBsZSB0aW1l cz8KClJlZ2FyZHMsCk1hcnRvbgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcu b3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8g dW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1 ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==