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 E47364EA99 for ; Mon, 12 May 2025 15:00:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7CB5468BA65; Mon, 12 May 2025 18:00:34 +0300 (EEST) Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 92E2468BD49 for ; Mon, 12 May 2025 18:00:27 +0300 (EEST) Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-3a0be50048eso3420792f8f.0 for ; Mon, 12 May 2025 08:00:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747062027; x=1747666827; darn=ffmpeg.org; h=subject:from:content-language:to:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=A4Q3PpD7rC6DddpOOdkMthfifFu6DPVKBe7vj+dJuyY=; b=FyMLicBmnc+LARTSqA5b7uVvFZeavlIrgqFn/rNycT2Bo1kgAGHbNxwM1valg3w2yT o8MNjHoCKpDYR98a9UhrAQJ5RrTjQS42D25AsLqRtMvgnL9ZKG2Oqwjoo0hVVPoBBnln v7bA6JwGA67XoxOpuVabFuEyVWzQtNIGExHQxbSt68f0JP4wD/cZSQEk09Ot7A89xy2/ 5xTwFen5Mn5MXMvgMcMjCDXiIdfTqP+ogC/rJnuJVZ/JEJmnCqHe+qThsvPiAsZkStD/ u/4xonZz27J69fcUSNqqeSOb0d4TL9sGHqS4abktxlkwySVNTzZHNLvB8obyMizTk3rC cObg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747062027; x=1747666827; h=subject:from:content-language:to:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=A4Q3PpD7rC6DddpOOdkMthfifFu6DPVKBe7vj+dJuyY=; b=Mr7VTtQD2t/zVm1Vb947zHtxBzpYIspnKkyiT065V0wKbbAX20o8J9y3xogvIBuesS 7ku6nhq14jrR23WFmAwx0qX1vT6sqQ0awv0qPFRR35jil3FyAfkVPSI+vwdzbfIlHDig qWBwgxq0oGf/zbWtejRNa0rlum8YrO3NuIE6w4k1sg3aGYiAHXCNYP0hj0hRucgOHIe4 u9nwRrdmmqRFzljdzrBOkl1Adgs4F86jRx6jyf849K4XeHkmE/3e06xska6clQfeDHe6 ue3J3q4Rc1PQY0idepwqAldI4oFW1aRTfA/3LRqrliHcKHH3j1Jz2aZ4dcqgmM3viPXK gZog== X-Gm-Message-State: AOJu0YwKzWWx2rqF4/5ZA9ZUNGw45yxXA0CvR/UlAj/N8BoXws39B8tL BuE5eXDsJiVRhaDY8INAm7W8SwNUjNoWGa5cHdFSfaipYkIBuIsPIghLKp/Q X-Gm-Gg: ASbGncsxOQK7IB7umD2gamJ4gBHJlCNMxpZYaUg/L5a3QFFf7KnSLUMQrtm02ywMrFg O7nhWes5gjqKnQcc1uCK8nKFscfvxktC+ozc9o5/cgxHIUTYCbhvRckAychaSh6cRHH4evCsVU8 XRGjz1rtkDGgO7dn5jsAzXIxZNF2VkyTEnzxkxs4r7KW+ad+A4iIDmo8Dhf4eEah2/uC5YipkdN +iH7e1JWW5ZqUJZM1OwNV8ZJEg6yuay4VxqzcAb/kKQu273jl+PuiHbj3reEu/j1mIvZff6i+4j cCdhB5FKOr75RHVtKl57O1bv+aWW0lSGi5fjQ3VfGWJM7FP1P5lPY5APFVRywwhrs+vYjQDbrOn yQOH1t+zbftBEoj6vP3wDGj08TouL3O+BKqrsrigmP8yOfKmaZg8HidBg+kna0WMXDi3mdCWaSB HuBncFLtNRD1ZpeV60UWiIBn289ZDw X-Google-Smtp-Source: AGHT+IEsrDNX3I/vPKnL+CO2wlsmWy2FcjAXXH/3Q1kuPZk3Q5pNGW2F3CX7kF/07qhmvTBnhXgZiw== X-Received: by 2002:adf:8b94:0:b0:3a0:860f:d66e with SMTP id ffacd0b85a97d-3a1f6441dfdmr7168508f8f.28.1747062026658; Mon, 12 May 2025 08:00:26 -0700 (PDT) Received: from ?IPV6:2a02:842b:8fdb:c501:19f1:6c46:8976:fcf2? (2a02-842b-8fdb-c501-19f1-6c46-8976-fcf2.rev.sfr.net. [2a02:842b:8fdb:c501:19f1:6c46:8976:fcf2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f5a5a2e0sm12593706f8f.101.2025.05.12.08.00.25 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 12 May 2025 08:00:25 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------NzBzEDoYIdxY7jJMVDHChk2S" Message-ID: <9fe2f20d-d842-46c7-80ee-462b283d1867@gmail.com> Date: Mon, 12 May 2025 17:00:30 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org Content-Language: fr, en-US From: CLUSTERF*** Subject: [FFmpeg-devel] Enhanced waves filter 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This is a multi-part message in MIME format. --------------NzBzEDoYIdxY7jJMVDHChk2S Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hello, FFmpeg developers. I am making my first steps in developing FFmpeg filters. I don't know if this filter was invented by copilot based on my prompts or if it exists/used to exist in other versions/forks. There is one reference to a ffmpeg wavefilt.c on search engines. I am really sorry I am not proficient with git and not sending this piece of code using the recommended procedure. Is an enhanced waves video filter of any interest ? Used FFmpeg 6.0. Best regards, Jim --------------NzBzEDoYIdxY7jJMVDHChk2S Content-Type: text/plain; charset=UTF-8; name="wavefilt.c" Content-Disposition: attachment; filename="wavefilt.c" Content-Transfer-Encoding: base64 LyoNCiAqIENvcHlyaWdodCAoYykgMjAyNSBGRm1wZWcgZGV2ZWxvcGVycw0KICoNCiAqIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4NCiAqDQogKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQogKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQogKiBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXINCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLg0KICoNCiAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VDQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLg0KICoNCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAqIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0ENCiAqLw0KDQovKioNCiAqIEBmaWxlDQogKiB3YXZlZmlsdCB2aWRlbyBmaWx0 ZXIgLSBhZHZhbmNlZCBkaXNwbGFjZW1lbnQgd2F2ZSBlZmZlY3RzDQogKiBUaGlzIGZpbHRl ciBwcm92aWRlcyBtb3JlIGNvbnRyb2wgYW5kIGZlYXR1cmVzIGNvbXBhcmVkIHRvIHRoZSB3 YXZlcyBmaWx0ZXINCiAqLw0KDQojaW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0aWxzLmgiDQoj aW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIg0KI2luY2x1ZGUgImxpYmF2dXRpbC9waXhkZXNj LmgiDQojaW5jbHVkZSAibGliYXZ1dGlsL2V2YWwuaCINCiNpbmNsdWRlICJsaWJhdnV0aWwv dGltZS5oIg0KI2luY2x1ZGUgImF2ZmlsdGVyLmgiDQojaW5jbHVkZSAiZm9ybWF0cy5oIg0K I2luY2x1ZGUgImludGVybmFsLmgiDQojaW5jbHVkZSAidmlkZW8uaCINCiNpbmNsdWRlICJm aWx0ZXJzLmgiDQoNCi8vIFZhcmlhYmxlIGVudW1lcmF0aW9uIGZvciBleHByZXNzaW9ucw0K ZW51bSB2YXJfbmFtZSB7DQogICAgVkFSX1gsDQogICAgVkFSX1ksDQogICAgVkFSX1csDQog ICAgVkFSX0gsDQogICAgVkFSX0NYLA0KICAgIFZBUl9DWSwNCiAgICBWQVJfVCwNCiAgICBW QVJfUFgsDQogICAgVkFSX1BZLA0KICAgIFZBUl9BLA0KICAgIFZBUl9ELA0KICAgIFZBUl9P VywNCiAgICBWQVJfT0gsDQogICAgVkFSX1ZBUlNfTkINCn07DQoNCnR5cGVkZWYgZW51bSB7 DQogICAgTU9ERV9TSU5FLA0KICAgIE1PREVfQ0lSQ1VMQVIsDQogICAgTU9ERV9SQURJQUws DQogICAgTU9ERV9TUVVBUkUsDQogICAgTU9ERV9DVVNUT00sDQogICAgTkJfTU9ERVMNCn0g V2F2ZU1vZGU7DQoNCnR5cGVkZWYgZW51bSB7DQogICAgRElTVE9SVF9CSUxJTkVBUiwNCiAg ICBESVNUT1JUX05FQVJFU1QsDQogICAgRElTVE9SVF9CSUNVQklDLA0KICAgIE5CX0RJU1RP UlRfTU9ERVMNCn0gRGlzdG9ydE1vZGU7DQoNCnR5cGVkZWYgc3RydWN0IFdhdmVGaWx0Q29u dGV4dCB7DQogICAgY29uc3QgQVZDbGFzcyAqY2xhc3M7DQogICAgDQogICAgLy8gV2F2ZSBw YXJhbWV0ZXJzDQogICAgZG91YmxlIGFtcGxpdHVkZV94OyAgICAgICAvLyBhbXBsaXR1ZGUg b2YgeCBkaXNwbGFjZW1lbnQNCiAgICBkb3VibGUgYW1wbGl0dWRlX3k7ICAgICAgIC8vIGFt cGxpdHVkZSBvZiB5IGRpc3BsYWNlbWVudA0KICAgIGRvdWJsZSBmcmVxdWVuY3lfeDsgICAg ICAgLy8gZnJlcXVlbmN5IG9mIHdhdmVzIGluIHggZGlyZWN0aW9uDQogICAgZG91YmxlIGZy ZXF1ZW5jeV95OyAgICAgICAvLyBmcmVxdWVuY3kgb2Ygd2F2ZXMgaW4geSBkaXJlY3Rpb24N CiAgICBkb3VibGUgcGhhc2VfeDsgICAgICAgICAgIC8vIHBoYXNlIHNoaWZ0IGluIHggZGly ZWN0aW9uDQogICAgZG91YmxlIHBoYXNlX3k7ICAgICAgICAgICAvLyBwaGFzZSBzaGlmdCBp biB5IGRpcmVjdGlvbg0KICAgIGRvdWJsZSBzcGVlZDsgICAgICAgICAgICAgLy8gd2F2ZSBt b3ZlbWVudCBzcGVlZA0KICAgIGludCBtb2RlOyAgICAgICAgICAgICAgICAgLy8gd2F2ZSBt b2RlDQogICAgY2hhciAqY3VzdG9tX2V4cHJfeDsgICAgICAvLyBjdXN0b20gZXhwcmVzc2lv biBmb3IgeCBkaXNwbGFjZW1lbnQNCiAgICBjaGFyICpjdXN0b21fZXhwcl95OyAgICAgIC8v IGN1c3RvbSBleHByZXNzaW9uIGZvciB5IGRpc3BsYWNlbWVudA0KICAgIEFWRXhwciAqY3Vz dG9tX3g7ICAgICAgICAgLy8gcGFyc2VkIGV4cHJlc3Npb24gZm9yIHgNCiAgICBBVkV4cHIg KmN1c3RvbV95OyAgICAgICAgIC8vIHBhcnNlZCBleHByZXNzaW9uIGZvciB5DQogICAgDQog ICAgLy8gQWR2YW5jZWQgb3B0aW9ucw0KICAgIGRvdWJsZSBkZWNheTsgICAgICAgICAgICAg Ly8gZGVjYXkgZmFjdG9yIGZvciB3YXZlIGFtcGxpdHVkZSBmcm9tIGNlbnRlcg0KICAgIGRv dWJsZSBjZW50ZXJfeDsgICAgICAgICAgLy8geCBjb29yZGluYXRlIG9mIHdhdmUgY2VudGVy ICgwLjAtMS4wKQ0KICAgIGRvdWJsZSBjZW50ZXJfeTsgICAgICAgICAgLy8geSBjb29yZGlu YXRlIG9mIHdhdmUgY2VudGVyICgwLjAtMS4wKQ0KICAgIGludCBkaXN0b3J0X21vZGU7ICAg ICAgICAgLy8gZGlzdG9ydGlvbiBhbGdvcml0aG0NCiAgICBpbnQgbWlycm9yOyAgICAgICAg ICAgICAgIC8vIGVuYWJsZSBtaXJyb3JpbmcgZm9yIG91dC1vZi1ib3VuZHMgcGl4ZWxzDQog ICAgZG91YmxlIHRpbWVfYmFzZTsgICAgICAgICAvLyB0aW1lIGJhc2UgZm9yIGFuaW1hdGlv bg0KICAgIA0KICAgIC8vIEludGVybmFsIHZhcmlhYmxlcw0KICAgIGludDY0X3QgcHRzOyAg ICAgICAgICAgICAgLy8gY3VycmVudCBwdHMNCiAgICBpbnQgaHN1YiwgdnN1YjsgICAgICAg ICAgIC8vIGNocm9tYSBzdWJzYW1wbGluZw0KICAgIGludCBkZXB0aDsgICAgICAgICAgICAg ICAgLy8gYml0IGRlcHRoDQogICAgaW50IG5iX3BsYW5lczsgICAgICAgICAgICAvLyBudW1i ZXIgb2YgcGxhbmVzDQogICAgaW50IGxpbmVzaXplWzRdOyAgICAgICAgICAvLyBsaW5lIHNp emVzDQogICAgaW50IGhlaWdodFs0XTsgICAgICAgICAgICAvLyBwbGFuZSBoZWlnaHRzDQog ICAgaW50IHdpZHRoWzRdOyAgICAgICAgICAgICAvLyBwbGFuZSB3aWR0aHMNCiAgICBkb3Vi bGUgdmFyX3ZhbHVlc1tWQVJfVkFSU19OQl07DQogICAgZG91YmxlIHRpbWU7ICAgICAgICAg ICAgICAvLyBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcw0KfSBXYXZlRmlsdENvbnRleHQ7DQoN CiNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFdhdmVGaWx0Q29udGV4dCwgeCkNCiNkZWZp bmUgRkxBR1MgQVZfT1BUX0ZMQUdfVklERU9fUEFSQU18QVZfT1BUX0ZMQUdfRklMVEVSSU5H X1BBUkFNDQoNCnN0YXRpYyBjb25zdCBBVk9wdGlvbiB3YXZlZmlsdF9vcHRpb25zW10gPSB7 DQogICAgeyAiYW1wbGl0dWRlX3giLCAiU2V0IHRoZSBhbXBsaXR1ZGUgb2YgdGhlIHggZGlz cGxhY2VtZW50IiwgT0ZGU0VUKGFtcGxpdHVkZV94KSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7 LmRibCA9IDEwLjB9LCAwLjAsIDEwMDAuMCwgRkxBR1MgfSwNCiAgICB7ICJhbXBsaXR1ZGVf eSIsICJTZXQgdGhlIGFtcGxpdHVkZSBvZiB0aGUgeSBkaXNwbGFjZW1lbnQiLCBPRkZTRVQo YW1wbGl0dWRlX3kpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsID0gMTAuMH0sIDAuMCwg MTAwMC4wLCBGTEFHUyB9LA0KICAgIHsgImZyZXF1ZW5jeV94IiwgIlNldCB0aGUgZnJlcXVl bmN5IG9mIHRoZSB3YXZlcyBpbiB4IGRpcmVjdGlvbiIsIE9GRlNFVChmcmVxdWVuY3lfeCks IEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmwgPSAwLjF9LCAwLjAsIDEwLjAsIEZMQUdTIH0s DQogICAgeyAiZnJlcXVlbmN5X3kiLCAiU2V0IHRoZSBmcmVxdWVuY3kgb2YgdGhlIHdhdmVz IGluIHkgZGlyZWN0aW9uIiwgT0ZGU0VUKGZyZXF1ZW5jeV95KSwgQVZfT1BUX1RZUEVfRE9V QkxFLCB7LmRibCA9IDAuMX0sIDAuMCwgMTAuMCwgRkxBR1MgfSwNCiAgICB7ICJwaGFzZV94 IiwgIlNldCB0aGUgcGhhc2Ugc2hpZnQgb2YgdGhlIHdhdmVzIGluIHggZGlyZWN0aW9uIiwg T0ZGU0VUKHBoYXNlX3gpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsID0gMC4wfSwgLU1f UEksIE1fUEksIEZMQUdTIH0sDQogICAgeyAicGhhc2VfeSIsICJTZXQgdGhlIHBoYXNlIHNo aWZ0IG9mIHRoZSB3YXZlcyBpbiB5IGRpcmVjdGlvbiIsIE9GRlNFVChwaGFzZV95KSwgQVZf T1BUX1RZUEVfRE9VQkxFLCB7LmRibCA9IDAuMH0sIC1NX1BJLCBNX1BJLCBGTEFHUyB9LA0K ICAgIHsgInNwZWVkIiwgIlNldCB0aGUgc3BlZWQgb2Ygd2F2ZSBtb3ZlbWVudCIsIE9GRlNF VChzcGVlZCksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmwgPSAxLjB9LCAtMTAwLjAsIDEw MC4wLCBGTEFHUyB9LA0KICAgIHsgIm1vZGUiLCAiU2V0IHdhdmUgbW9kZSIsIE9GRlNFVCht b2RlKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IE1PREVfU0lORX0sIDAsIE5CX01PREVT LTEsIEZMQUdTLCAibW9kZSIgfSwNCiAgICB7ICJzaW5lIiwgIlNpbnVzb2lkYWwgd2F2ZXMi LCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSBNT0RFX1NJTkV9LCAwLCAwLCBGTEFH UywgIm1vZGUiIH0sDQogICAgeyAiY2lyY3VsYXIiLCAiQ2lyY3VsYXIgd2F2ZXMiLCAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSBNT0RFX0NJUkNVTEFSfSwgMCwgMCwgRkxBR1Ms ICJtb2RlIiB9LA0KICAgIHsgInJhZGlhbCIsICJSYWRpYWwgd2F2ZXMiLCAwLCBBVl9PUFRf VFlQRV9DT05TVCwgey5pNjQgPSBNT0RFX1JBRElBTH0sIDAsIDAsIEZMQUdTLCAibW9kZSIg fSwNCiAgICB7ICJzcXVhcmUiLCAiU3F1YXJlIHdhdmVzIiwgMCwgQVZfT1BUX1RZUEVfQ09O U1QsIHsuaTY0ID0gTU9ERV9TUVVBUkV9LCAwLCAwLCBGTEFHUywgIm1vZGUiIH0sDQogICAg eyAiY3VzdG9tIiwgIkN1c3RvbSB3YXZlIGZvcm11bGEiLCAwLCBBVl9PUFRfVFlQRV9DT05T VCwgey5pNjQgPSBNT0RFX0NVU1RPTX0sIDAsIDAsIEZMQUdTLCAibW9kZSIgfSwNCiAgICB7 ICJjdXN0b21feCIsICJDdXN0b20gZXhwcmVzc2lvbiBmb3IgeCBkaXNwbGFjZW1lbnQiLCBP RkZTRVQoY3VzdG9tX2V4cHJfeCksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIgPSBOVUxM fSwgMCwgMCwgRkxBR1MgfSwNCiAgICB7ICJjdXN0b21feSIsICJDdXN0b20gZXhwcmVzc2lv biBmb3IgeSBkaXNwbGFjZW1lbnQiLCBPRkZTRVQoY3VzdG9tX2V4cHJfeSksIEFWX09QVF9U WVBFX1NUUklORywgey5zdHIgPSBOVUxMfSwgMCwgMCwgRkxBR1MgfSwNCiAgICB7ICJkZWNh eSIsICJTZXQgdGhlIGRlY2F5IGZhY3RvciBmcm9tIGNlbnRlciIsIE9GRlNFVChkZWNheSks IEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmwgPSAwLjB9LCAwLjAsIDEwLjAsIEZMQUdTIH0s DQogICAgeyAiY2VudGVyX3giLCAiU2V0IHRoZSB4IGNvb3JkaW5hdGUgb2Ygd2F2ZSBjZW50 ZXIgKDAuMC0xLjApIiwgT0ZGU0VUKGNlbnRlcl94KSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7 LmRibCA9IDAuNX0sIDAuMCwgMS4wLCBGTEFHUyB9LA0KICAgIHsgImNlbnRlcl95IiwgIlNl dCB0aGUgeSBjb29yZGluYXRlIG9mIHdhdmUgY2VudGVyICgwLjAtMS4wKSIsIE9GRlNFVChj ZW50ZXJfeSksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmwgPSAwLjV9LCAwLjAsIDEuMCwg RkxBR1MgfSwNCiAgICB7ICJkaXN0b3J0X21vZGUiLCAiU2V0IGRpc3RvcnRpb24gaW50ZXJw b2xhdGlvbiBtb2RlIiwgT0ZGU0VUKGRpc3RvcnRfbW9kZSksIEFWX09QVF9UWVBFX0lOVCwg ey5pNjQgPSBESVNUT1JUX0JJTElORUFSfSwgMCwgTkJfRElTVE9SVF9NT0RFUy0xLCBGTEFH UywgImRpc3RvcnQiIH0sDQogICAgeyAiYmlsaW5lYXIiLCAiQmlsaW5lYXIgaW50ZXJwb2xh dGlvbiIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IERJU1RPUlRfQklMSU5FQVJ9 LCAwLCAwLCBGTEFHUywgImRpc3RvcnQiIH0sDQogICAgeyAibmVhcmVzdCIsICJOZWFyZXN0 IG5laWdoYm9yIGludGVycG9sYXRpb24iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQg PSBESVNUT1JUX05FQVJFU1R9LCAwLCAwLCBGTEFHUywgImRpc3RvcnQiIH0sDQogICAgeyAi YmljdWJpYyIsICJCaWN1YmljIGludGVycG9sYXRpb24iLCAwLCBBVl9PUFRfVFlQRV9DT05T VCwgey5pNjQgPSBESVNUT1JUX0JJQ1VCSUN9LCAwLCAwLCBGTEFHUywgImRpc3RvcnQiIH0s DQogICAgeyAibWlycm9yIiwgIk1pcnJvciBwaXhlbHMgYXQgaW1hZ2UgYm91bmRhcmllcyIs IE9GRlNFVChtaXJyb3IpLCBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2NCA9IDF9LCAwLCAxLCBG TEFHUyB9LA0KICAgIHsgInRpbWVfYmFzZSIsICJTZXQgYmFzZSB0aW1lIChpbiBzZWNvbmRz KSBmb3IgYW5pbWF0aW9uIHNwZWVkIiwgT0ZGU0VUKHRpbWVfYmFzZSksIEFWX09QVF9UWVBF X0RPVUJMRSwgey5kYmwgPSAxLjB9LCAwLjAwMSwgMTAwLjAsIEZMQUdTIH0sDQogICAgeyBO VUxMIH0NCn07DQoNCkFWRklMVEVSX0RFRklORV9DTEFTUyh3YXZlZmlsdCk7DQoNCi8vIEZv cndhcmQgZGVjbGFyYXRpb25zDQpzdGF0aWMgaW50IHF1ZXJ5X2Zvcm1hdHMoQVZGaWx0ZXJD b250ZXh0ICpjdHgpOw0Kc3RhdGljIGludCBjb25maWdfcHJvcHMoQVZGaWx0ZXJMaW5rICpp bmxpbmspOw0Kc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxpbmss IEFWRnJhbWUgKmluKTsNCg0Kc3RhdGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250 ZXh0ICpjdHgpDQp7DQogICAgV2F2ZUZpbHRDb250ZXh0ICpzID0gY3R4LT5wcml2Ow0KICAg IGludCByZXQ7DQogICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZhcl9uYW1lc1tdID0g ew0KICAgICAgICAieCIsICJ5IiwgInciLCAiaCIsICJjeCIsICJjeSIsICJ0IiwNCiAgICAg ICAgInB4IiwgInB5IiwgImEiLCAiZCIsICJvdyIsICJvaCIsDQogICAgICAgIE5VTEwNCiAg ICB9Ow0KDQogICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiV2F2ZUZpbHQ6IElucHV0 IGNvdW50OiAlZCwgT3V0cHV0IGNvdW50OiAlZFxuIiwgDQogICAgICAgICAgIGN0eC0+bmJf aW5wdXRzLCBjdHgtPm5iX291dHB1dHMpOw0KDQogICAgaWYgKHMtPm1vZGUgPT0gTU9ERV9D VVNUT00pIHsNCiAgICAgICAgaWYgKCFzLT5jdXN0b21fZXhwcl94IHx8ICFzLT5jdXN0b21f ZXhwcl95KSB7DQogICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJDdXN0 b20gbW9kZSByZXF1aXJlcyBib3RoIGN1c3RvbV94IGFuZCBjdXN0b21feSBleHByZXNzaW9u c1xuIik7DQogICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KICAgICAgICB9 DQogICAgICAgIA0KICAgICAgICBpZiAoKHJldCA9IGF2X2V4cHJfcGFyc2UoJnMtPmN1c3Rv bV94LCBzLT5jdXN0b21fZXhwcl94LCB2YXJfbmFtZXMsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIDAsIGN0eCkpIDwgMCkgew0KICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiRXJyb3IgcGFyc2luZyBjdXN0b21feCBleHByZXNzaW9uICclcydcbiIsIHMtPmN1 c3RvbV9leHByX3gpOw0KICAgICAgICAgICAgcmV0dXJuIHJldDsNCiAgICAgICAgfQ0KICAg ICAgICANCiAgICAgICAgaWYgKChyZXQgPSBhdl9leHByX3BhcnNlKCZzLT5jdXN0b21feSwg cy0+Y3VzdG9tX2V4cHJfeSwgdmFyX25hbWVzLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAw LCBjdHgpKSA8IDApIHsNCiAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IkVycm9yIHBhcnNpbmcgY3VzdG9tX3kgZXhwcmVzc2lvbiAnJXMnXG4iLCBzLT5jdXN0b21f ZXhwcl95KTsNCiAgICAgICAgICAgIHJldHVybiByZXQ7DQogICAgICAgIH0NCiAgICB9DQog ICAgDQogICAgcy0+dGltZSA9IDA7DQogICAgcy0+cHRzID0gQVZfTk9QVFNfVkFMVUU7ICAv LyBJbml0aWFsaXplIHB0cyB3aXRoIEFWX05PUFRTX1ZBTFVFDQogICAgDQogICAgcmV0dXJu IDA7DQp9DQoNCnN0YXRpYyBhdl9jb2xkIHZvaWQgdW5pbml0KEFWRmlsdGVyQ29udGV4dCAq Y3R4KQ0Kew0KICAgIFdhdmVGaWx0Q29udGV4dCAqcyA9IGN0eC0+cHJpdjsNCiAgICANCiAg ICBhdl9leHByX2ZyZWUocy0+Y3VzdG9tX3gpOw0KICAgIGF2X2V4cHJfZnJlZShzLT5jdXN0 b21feSk7DQp9DQoNCnN0YXRpYyBpbnQgcXVlcnlfZm9ybWF0cyhBVkZpbHRlckNvbnRleHQg KmN0eCkNCnsNCiAgICBzdGF0aWMgY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0IHBpeGVsX2Zt dHNbXSA9IHsNCiAgICAgICAgQVZfUElYX0ZNVF9ZVVZBNDQ0UCwgQVZfUElYX0ZNVF9ZVVY0 NDRQLCBBVl9QSVhfRk1UX1lVVjQyMlAsDQogICAgICAgIEFWX1BJWF9GTVRfWVVWNDIwUCwg QVZfUElYX0ZNVF9ZVVY0MTFQLCBBVl9QSVhfRk1UX1lVVjQxMFAsDQogICAgICAgIEFWX1BJ WF9GTVRfWVVWSjQ0NFAsIEFWX1BJWF9GTVRfWVVWSjQyMlAsIEFWX1BJWF9GTVRfWVVWSjQy MFAsDQogICAgICAgIEFWX1BJWF9GTVRfR1JBWTgsDQogICAgICAgIEFWX1BJWF9GTVRfWVVW QTQ0NFAxNiwgQVZfUElYX0ZNVF9ZVVY0NDRQMTYsDQogICAgICAgIEFWX1BJWF9GTVRfWVVW NDIyUDE2LCBBVl9QSVhfRk1UX1lVVjQyMFAxNiwNCiAgICAgICAgQVZfUElYX0ZNVF9HUkFZ MTYsDQogICAgICAgIEFWX1BJWF9GTVRfR0JSUCwgQVZfUElYX0ZNVF9HQlJQMTYsDQogICAg ICAgIEFWX1BJWF9GTVRfR0JSQVAsIEFWX1BJWF9GTVRfR0JSQVAxNiwNCiAgICAgICAgQVZf UElYX0ZNVF9OT05FDQogICAgfTsNCiAgICANCiAgICBBVkZpbHRlckZvcm1hdHMgKmZvcm1h dHMgPSBmZl9tYWtlX2Zvcm1hdF9saXN0KHBpeGVsX2ZtdHMpOw0KICAgIGlmICghZm9ybWF0 cykNCiAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsNCiAgICANCiAgICByZXR1cm4g ZmZfc2V0X2NvbW1vbl9mb3JtYXRzKGN0eCwgZm9ybWF0cyk7DQp9DQoNCnN0YXRpYyBpbnQg Y29uZmlnX3Byb3BzKEFWRmlsdGVyTGluayAqaW5saW5rKQ0Kew0KICAgIEFWRmlsdGVyQ29u dGV4dCAqY3R4ID0gaW5saW5rLT5kc3Q7DQogICAgV2F2ZUZpbHRDb250ZXh0ICpzID0gY3R4 LT5wcml2Ow0KICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2X3BpeF9m bXRfZGVzY19nZXQoaW5saW5rLT5mb3JtYXQpOw0KICAgIGludCBpOw0KICAgIA0KICAgIGlm ICghZGVzYykgew0KICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlk IGlucHV0IGZvcm1hdFxuIik7DQogICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7DQog ICAgfQ0KICAgIA0KICAgIC8vIFZlcmlmeSB3ZSBoYXZlIGEgdmFsaWQgb3V0bGluaw0KICAg IGlmICghY3R4LT5vdXRwdXRzWzBdKSB7DQogICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgIk1pc3Npbmcgb3V0cHV0IHBhZFxuIik7DQogICAgICAgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7DQogICAgfQ0KICAgIA0KICAgIHMtPmhzdWIgPSBkZXNjLT5sb2cyX2Nocm9t YV93Ow0KICAgIHMtPnZzdWIgPSBkZXNjLT5sb2cyX2Nocm9tYV9oOw0KICAgIHMtPmRlcHRo ID0gZGVzYy0+Y29tcFswXS5kZXB0aDsNCiAgICBzLT5uYl9wbGFuZXMgPSBhdl9waXhfZm10 X2NvdW50X3BsYW5lcyhpbmxpbmstPmZvcm1hdCk7DQogICAgDQogICAgLy8gU3RvcmUgZGlt ZW5zaW9ucyBmb3IgZWFjaCBwbGFuZQ0KICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsN CiAgICAgICAgcy0+d2lkdGhbaV0gPSBpbmxpbmstPnc7DQogICAgICAgIHMtPmhlaWdodFtp XSA9IGlubGluay0+aDsNCiAgICAgICAgaWYgKGkgPT0gMSB8fCBpID09IDIpIHsNCiAgICAg ICAgICAgIHMtPndpZHRoW2ldID4+PSBzLT5oc3ViOw0KICAgICAgICAgICAgcy0+aGVpZ2h0 W2ldID4+PSBzLT52c3ViOw0KICAgICAgICB9DQogICAgICAgIHMtPmxpbmVzaXplW2ldID0g MDsgLy8gV2lsbCBiZSBzZXQgZm9yIGVhY2ggZnJhbWUNCiAgICB9DQogICAgDQogICAgLy8g SW5pdGlhbGl6ZSB2YXJpYWJsZXMgZm9yIHdhdmUgY2FsY3VsYXRpb25zDQogICAgcy0+dmFy X3ZhbHVlc1tWQVJfV10gID0gaW5saW5rLT53Ow0KICAgIHMtPnZhcl92YWx1ZXNbVkFSX0hd ICA9IGlubGluay0+aDsNCiAgICBzLT52YXJfdmFsdWVzW1ZBUl9DWF0gPSBzLT5jZW50ZXJf eCAqIGlubGluay0+dzsNCiAgICBzLT52YXJfdmFsdWVzW1ZBUl9DWV0gPSBzLT5jZW50ZXJf eSAqIGlubGluay0+aDsNCiAgICANCiAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIldh dmVGaWx0OiBDb25maWd1cmVkIGlucHV0IHNpemUgJWR4JWQgZm9ybWF0ICVzXG4iLCANCiAg ICAgICAgICAgaW5saW5rLT53LCBpbmxpbmstPmgsIGF2X2dldF9waXhfZm10X25hbWUoaW5s aW5rLT5mb3JtYXQpKTsNCiAgICANCiAgICByZXR1cm4gMDsNCn0NCg0KLy8gQmlsaW5lYXIg aW50ZXJwb2xhdGlvbg0Kc3RhdGljIGZsb2F0IGJpbGluZWFyX2ludGVycChjb25zdCB1aW50 OF90ICpzcmMsIGludCB4LCBpbnQgeSwgaW50IHN0cmlkZSwgaW50IG1heF94LCBpbnQgbWF4 X3kpDQp7DQogICAgaW50IHgwLCB5MCwgeDEsIHkxOw0KICAgIGludCBteCwgbXk7DQogICAg aW50IHYwMCwgdjAxLCB2MTAsIHYxMTsNCiAgICBpbnQgdjAsIHYxOw0KICAgIA0KICAgIGlm ICghc3JjIHx8IHN0cmlkZSA8PSAwIHx8IG1heF94IDwgMCB8fCBtYXhfeSA8IDApDQogICAg ICAgIHJldHVybiAwOw0KICAgICAgICANCiAgICB4MCA9IGF2X2NsaXAoeCA+PiAxNiwgMCwg bWF4X3gpOw0KICAgIHkwID0gYXZfY2xpcCh5ID4+IDE2LCAwLCBtYXhfeSk7DQogICAgeDEg PSBhdl9jbGlwKHgwICsgMSwgMCwgbWF4X3gpOw0KICAgIHkxID0gYXZfY2xpcCh5MCArIDEs IDAsIG1heF95KTsNCiAgICANCiAgICBteCA9IHggJiAweEZGRkY7DQogICAgbXkgPSB5ICYg MHhGRkZGOw0KICAgIA0KICAgIHYwMCA9IHNyY1t5MCAqIHN0cmlkZSArIHgwXTsNCiAgICB2 MDEgPSBzcmNbeTAgKiBzdHJpZGUgKyB4MV07DQogICAgdjEwID0gc3JjW3kxICogc3RyaWRl ICsgeDBdOw0KICAgIHYxMSA9IHNyY1t5MSAqIHN0cmlkZSArIHgxXTsNCiAgICANCiAgICB2 MCA9ICh2MDAgKiAoMHgxMDAwMCAtIG14KSArIHYwMSAqIG14KSA+PiAxNjsNCiAgICB2MSA9 ICh2MTAgKiAoMHgxMDAwMCAtIG14KSArIHYxMSAqIG14KSA+PiAxNjsNCiAgICANCiAgICBy ZXR1cm4gKHYwICogKDB4MTAwMDAgLSBteSkgKyB2MSAqIG15KSA+PiAxNjsNCn0NCg0KLy8g QmljdWJpYyBpbnRlcnBvbGF0aW9uIGhlbHBlciBmdW5jdGlvbg0Kc3RhdGljIGZsb2F0IGN1 YmljX2hlcm1pdGUoZmxvYXQgQSwgZmxvYXQgQiwgZmxvYXQgQywgZmxvYXQgRCwgZmxvYXQg dCkNCnsNCiAgICBmbG9hdCBhID0gLUEvMi4wZiArICgzLjBmKkIpLzIuMGYgLSAoMy4wZipD KS8yLjBmICsgRC8yLjBmOw0KICAgIGZsb2F0IGIgPSBBIC0gKDUuMGYqQikvMi4wZiArIDIu MGYqQyAtIEQvMi4wZjsNCiAgICBmbG9hdCBjID0gLUEvMi4wZiArIEMvMi4wZjsNCiAgICBm bG9hdCBkID0gQjsNCiAgICANCiAgICByZXR1cm4gYSp0KnQqdCArIGIqdCp0ICsgYyp0ICsg ZDsNCn0NCg0KLy8gQmljdWJpYyBpbnRlcnBvbGF0aW9uDQpzdGF0aWMgZmxvYXQgYmljdWJp Y19pbnRlcnAoY29uc3QgdWludDhfdCAqc3JjLCBpbnQgeCwgaW50IHksIGludCBzdHJpZGUs IGludCBtYXhfeCwgaW50IG1heF95KQ0Kew0KICAgIGludCB4MCwgeTA7DQogICAgZmxvYXQg dHgsIHR5Ow0KICAgIGZsb2F0IHBpeGVsc1s0XVs0XTsNCiAgICBmbG9hdCByb3dzWzRdOw0K ICAgIGludCBpLCBqOw0KICAgIGludCBzYWZlX3gsIHNhZmVfeTsNCiAgICBpbnQ2NF90IG9m ZnNldDsNCiAgICANCiAgICAvKiBJbml0aWFsaXplIGFycmF5cyAqLw0KICAgIGZvciAoaSA9 IDA7IGkgPCA0OyBpKyspIHsNCiAgICAgICAgcm93c1tpXSA9IDA7DQogICAgICAgIGZvciAo aiA9IDA7IGogPCA0OyBqKyspIHsNCiAgICAgICAgICAgIHBpeGVsc1tpXVtqXSA9IDA7DQog ICAgICAgIH0NCiAgICB9DQogICAgDQogICAgaWYgKCFzcmMgfHwgc3RyaWRlIDw9IDAgfHwg bWF4X3ggPD0gMCB8fCBtYXhfeSA8PSAwKQ0KICAgICAgICByZXR1cm4gMDsNCiAgICAgICAg DQogICAgeDAgPSB4ID4+IDE2Ow0KICAgIHkwID0geSA+PiAxNjsNCiAgICANCiAgICAvKiBF bnN1cmUgd2UgaGF2ZSBlbm91Z2ggZGF0YSBmb3IgYmljdWJpYyAobmVlZCAyIHBpeGVscyBv biBlYWNoIHNpZGUpICovDQogICAgaWYgKHgwIDwgMSB8fCB4MCA+PSBtYXhfeCAtIDIgfHwg eTAgPCAxIHx8IHkwID49IG1heF95IC0gMikNCiAgICAgICAgcmV0dXJuIGJpbGluZWFyX2lu dGVycChzcmMsIHgsIHksIHN0cmlkZSwgbWF4X3gsIG1heF95KTsgLyogRmFsbCBiYWNrIHRv IGJpbGluZWFyIHdoZW4gdG9vIGNsb3NlIHRvIGVkZ2UgKi8NCiAgICANCiAgICB0eCA9ICh4 ICYgMHhGRkZGKSAvIDY1NTM2LjBmOw0KICAgIHR5ID0gKHkgJiAweEZGRkYpIC8gNjU1MzYu MGY7DQogICAgDQogICAgLyogQWRkIHN0cm9uZ2VyIGJvdW5kcyBjaGVjayAqLw0KICAgIGlm IChtYXhfeCA8PSAwIHx8IG1heF95IDw9IDAgfHwgc3RyaWRlIDw9IDAgfHwgDQogICAgICAg IHgwIDwgMCB8fCB4MCA+PSBtYXhfeCB8fCB5MCA8IDAgfHwgeTAgPj0gbWF4X3kpIHsNCiAg ICAgICAgcmV0dXJuIDA7IC8qIEFkZGl0aW9uYWwgc2FmZXR5IGNoZWNrICovDQogICAgfQ0K ICAgIA0KICAgIC8qIFNhbXBsZSAxNiBwaXhlbHMgKi8NCiAgICBmb3IgKGogPSAtMTsgaiA8 PSAyOyBqKyspIHsNCiAgICAgICAgZm9yIChpID0gLTE7IGkgPD0gMjsgaSsrKSB7DQogICAg ICAgICAgICBzYWZlX3ggPSBhdl9jbGlwKHgwICsgaSwgMCwgbWF4X3gpOw0KICAgICAgICAg ICAgc2FmZV95ID0gYXZfY2xpcCh5MCArIGosIDAsIG1heF95KTsNCiAgICAgICAgICAgIA0K ICAgICAgICAgICAgLyogQ2FsY3VsYXRlIG9mZnNldCB3aXRoIG92ZXJmbG93IHByb3RlY3Rp b24gKi8NCiAgICAgICAgICAgIG9mZnNldCA9IChpbnQ2NF90KXNhZmVfeSAqIHN0cmlkZSAr IHNhZmVfeDsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKHNhZmVfeSA+PSAwICYm IHNhZmVfeSA8PSBtYXhfeSAmJiANCiAgICAgICAgICAgICAgICBzYWZlX3ggPj0gMCAmJiBz YWZlX3ggPD0gbWF4X3ggJiYgDQogICAgICAgICAgICAgICAgb2Zmc2V0ID49IDAgJiYgb2Zm c2V0IDwgKGludDY0X3QpKG1heF95ICsgMSkgKiBzdHJpZGUpIHsNCiAgICAgICAgICAgICAg ICBwaXhlbHNbaisxXVtpKzFdID0gc3JjW29mZnNldF07DQogICAgICAgICAgICB9IGVsc2Ug ew0KICAgICAgICAgICAgICAgIHBpeGVsc1tqKzFdW2krMV0gPSAwOyAvKiBPdXQgb2YgYm91 bmRzICovDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8g SW50ZXJwb2xhdGUgcm93cw0KICAgIGZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsNCiAgICAg ICAgcm93c1tqXSA9IGN1YmljX2hlcm1pdGUocGl4ZWxzW2pdWzBdLCBwaXhlbHNbal1bMV0s IHBpeGVsc1tqXVsyXSwgcGl4ZWxzW2pdWzNdLCB0eCk7DQogICAgfQ0KICAgIA0KICAgIC8v IEludGVycG9sYXRlIHJlc3VsdA0KICAgIHJldHVybiBjdWJpY19oZXJtaXRlKHJvd3NbMF0s IHJvd3NbMV0sIHJvd3NbMl0sIHJvd3NbM10sIHR5KTsNCiAgICANCiAgICAjdW5kZWYgQ0xJ UA0KICAgICN1bmRlZiBDTElQUA0KfQ0KDQpzdGF0aWMgZG91YmxlIGNhbGN1bGF0ZV94X2Rp c3BsYWNlbWVudChXYXZlRmlsdENvbnRleHQgKnMsIGludCB4LCBpbnQgeSwgaW50IHBsYW5l LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGlu dCBoZWlnaHQsIGRvdWJsZSB0aW1lKQ0Kew0KICAgIGRvdWJsZSBkeCA9IDA7DQogICAgZG91 YmxlIG54LCBueSwgY3gsIGN5Ow0KICAgIGRvdWJsZSBkeF9jZW50ZXIsIGR5X2NlbnRlciwg ZGlzdGFuY2UsIGRlY2F5X2ZhY3RvcjsNCiAgICANCiAgICAvKiBTYWZldHkgY2hlY2sgZm9y IGRpdmlzaW9uIGJ5IHplcm8gKi8NCiAgICBpZiAoIXMgfHwgd2lkdGggPD0gMCB8fCBoZWln aHQgPD0gMCkgDQogICAgICAgIHJldHVybiAwOw0KICAgIA0KICAgIC8qIFNhZmV0eSBjaGVj ayBmb3IgY29vcmRpbmF0ZXMgKi8NCiAgICBpZiAoeCA8IDAgfHwgeCA+PSB3aWR0aCB8fCB5 IDwgMCB8fCB5ID49IGhlaWdodCkNCiAgICAgICAgcmV0dXJuIDA7DQogICAgDQogICAgbngg PSB4IC8gKGRvdWJsZSl3aWR0aDsNCiAgICBueSA9IHkgLyAoZG91YmxlKWhlaWdodDsNCiAg ICBjeCA9IHMtPnZhcl92YWx1ZXNbVkFSX0NYXSAvIHdpZHRoOw0KICAgIGN5ID0gcy0+dmFy X3ZhbHVlc1tWQVJfQ1ldIC8gaGVpZ2h0Ow0KICAgIA0KICAgIC8qIENhbGN1bGF0ZSBkaXN0 YW5jZSBmcm9tIGNlbnRlciBmb3IgZGVjYXkgKi8NCiAgICBkeF9jZW50ZXIgPSBueCAtIGN4 Ow0KICAgIGR5X2NlbnRlciA9IG55IC0gY3k7DQogICAgZGlzdGFuY2UgPSBzcXJ0KGR4X2Nl bnRlcipkeF9jZW50ZXIgKyBkeV9jZW50ZXIqZHlfY2VudGVyKTsNCiAgICBkZWNheV9mYWN0 b3IgPSBzLT5kZWNheSA+IDAgPyBleHAoLWRpc3RhbmNlICogcy0+ZGVjYXkpIDogMS4wOw0K ICAgIA0KICAgIHN3aXRjaCAocy0+bW9kZSkgew0KICAgICAgICBjYXNlIE1PREVfU0lORToN CiAgICAgICAgICAgIGR4ID0gcy0+YW1wbGl0dWRlX3ggKiBzaW4oMiAqIE1fUEkgKiAocy0+ ZnJlcXVlbmN5X3kgKiBueSArIHMtPmZyZXF1ZW5jeV94ICogdGltZSArIHMtPnBoYXNlX3gp KTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIE1PREVfQ0lSQ1VMQVI6DQog ICAgICAgICAgICBkeCA9IHMtPmFtcGxpdHVkZV94ICogc2luKDIgKiBNX1BJICogKHMtPmZy ZXF1ZW5jeV94ICogZGlzdGFuY2UgKyB0aW1lICogcy0+c3BlZWQgKyBzLT5waGFzZV94KSk7 DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBNT0RFX1JBRElBTDoNCiAgICAg ICAgICAgIGR4ID0gcy0+YW1wbGl0dWRlX3ggKiBkeF9jZW50ZXIgKiBzaW4oMiAqIE1fUEkg KiAocy0+ZnJlcXVlbmN5X3ggKiBkaXN0YW5jZSArIHRpbWUgKiBzLT5zcGVlZCArIHMtPnBo YXNlX3gpKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIE1PREVfU1FVQVJF Og0KICAgICAgICAgICAgZHggPSBzLT5hbXBsaXR1ZGVfeCAqICgoc2luKDIgKiBNX1BJICog KHMtPmZyZXF1ZW5jeV95ICogbnkgKyBzLT5mcmVxdWVuY3lfeCAqIHRpbWUgKyBzLT5waGFz ZV94KSkgPiAwKSA/IDEgOiAtMSk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2Fz ZSBNT0RFX0NVU1RPTToNCiAgICAgICAgICAgIHMtPnZhcl92YWx1ZXNbVkFSX1hdID0gbng7 DQogICAgICAgICAgICBzLT52YXJfdmFsdWVzW1ZBUl9ZXSA9IG55Ow0KICAgICAgICAgICAg cy0+dmFyX3ZhbHVlc1tWQVJfVF0gPSB0aW1lOw0KICAgICAgICAgICAgcy0+dmFyX3ZhbHVl c1tWQVJfUFhdID0gbnggLSBjeDsNCiAgICAgICAgICAgIHMtPnZhcl92YWx1ZXNbVkFSX1BZ XSA9IG55IC0gY3k7DQogICAgICAgICAgICBzLT52YXJfdmFsdWVzW1ZBUl9BXSA9IHMtPmFt cGxpdHVkZV94Ow0KICAgICAgICAgICAgcy0+dmFyX3ZhbHVlc1tWQVJfRF0gPSBkaXN0YW5j ZTsNCiAgICAgICAgICAgIHMtPnZhcl92YWx1ZXNbVkFSX09XXSA9IHdpZHRoOw0KICAgICAg ICAgICAgcy0+dmFyX3ZhbHVlc1tWQVJfT0hdID0gaGVpZ2h0Ow0KICAgICAgICAgICAgZHgg PSBhdl9leHByX2V2YWwocy0+Y3VzdG9tX3gsIHMtPnZhcl92YWx1ZXMsIE5VTEwpOw0KICAg ICAgICAgICAgYnJlYWs7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBkeCAqIGRlY2F5X2Zh Y3RvciAqIHdpZHRoOw0KfQ0KDQpzdGF0aWMgZG91YmxlIGNhbGN1bGF0ZV95X2Rpc3BsYWNl bWVudChXYXZlRmlsdENvbnRleHQgKnMsIGludCB4LCBpbnQgeSwgaW50IHBsYW5lLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWln aHQsIGRvdWJsZSB0aW1lKQ0Kew0KICAgIGRvdWJsZSBkeSA9IDA7DQogICAgZG91YmxlIG54 LCBueSwgY3gsIGN5Ow0KICAgIGRvdWJsZSBkeF9jZW50ZXIsIGR5X2NlbnRlciwgZGlzdGFu Y2UsIGRlY2F5X2ZhY3RvcjsNCiAgICANCiAgICAvKiBTYWZldHkgY2hlY2sgZm9yIGRpdmlz aW9uIGJ5IHplcm8gKi8NCiAgICBpZiAoIXMgfHwgd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0g MCkgDQogICAgICAgIHJldHVybiAwOw0KICAgIA0KICAgIC8qIFNhZmV0eSBjaGVjayBmb3Ig Y29vcmRpbmF0ZXMgKi8NCiAgICBpZiAoeCA8IDAgfHwgeCA+PSB3aWR0aCB8fCB5IDwgMCB8 fCB5ID49IGhlaWdodCkNCiAgICAgICAgcmV0dXJuIDA7DQogICAgDQogICAgbnggPSB4IC8g KGRvdWJsZSl3aWR0aDsNCiAgICBueSA9IHkgLyAoZG91YmxlKWhlaWdodDsNCiAgICBjeCA9 IHMtPnZhcl92YWx1ZXNbVkFSX0NYXSAvIHdpZHRoOw0KICAgIGN5ID0gcy0+dmFyX3ZhbHVl c1tWQVJfQ1ldIC8gaGVpZ2h0Ow0KICAgIA0KICAgIC8vIENhbGN1bGF0ZSBkaXN0YW5jZSBm cm9tIGNlbnRlciBmb3IgZGVjYXkNCiAgICBkeF9jZW50ZXIgPSBueCAtIGN4Ow0KICAgIGR5 X2NlbnRlciA9IG55IC0gY3k7DQogICAgZGlzdGFuY2UgPSBzcXJ0KGR4X2NlbnRlcipkeF9j ZW50ZXIgKyBkeV9jZW50ZXIqZHlfY2VudGVyKTsNCiAgICBkZWNheV9mYWN0b3IgPSBzLT5k ZWNheSA+IDAgPyBleHAoLWRpc3RhbmNlICogcy0+ZGVjYXkpIDogMS4wOw0KICAgIA0KICAg IHN3aXRjaCAocy0+bW9kZSkgew0KICAgICAgICBjYXNlIE1PREVfU0lORToNCiAgICAgICAg ICAgIGR5ID0gcy0+YW1wbGl0dWRlX3kgKiBzaW4oMiAqIE1fUEkgKiAocy0+ZnJlcXVlbmN5 X3ggKiBueCArIHMtPmZyZXF1ZW5jeV95ICogdGltZSArIHMtPnBoYXNlX3kpKTsNCiAgICAg ICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIE1PREVfQ0lSQ1VMQVI6DQogICAgICAgICAg ICBkeSA9IHMtPmFtcGxpdHVkZV95ICogc2luKDIgKiBNX1BJICogKHMtPmZyZXF1ZW5jeV95 ICogZGlzdGFuY2UgKyB0aW1lICogcy0+c3BlZWQgKyBzLT5waGFzZV95KSk7DQogICAgICAg ICAgICBicmVhazsNCiAgICAgICAgY2FzZSBNT0RFX1JBRElBTDoNCiAgICAgICAgICAgIGR5 ID0gcy0+YW1wbGl0dWRlX3kgKiBkeV9jZW50ZXIgKiBzaW4oMiAqIE1fUEkgKiAocy0+ZnJl cXVlbmN5X3kgKiBkaXN0YW5jZSArIHRpbWUgKiBzLT5zcGVlZCArIHMtPnBoYXNlX3kpKTsN CiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIE1PREVfU1FVQVJFOg0KICAgICAg ICAgICAgZHkgPSBzLT5hbXBsaXR1ZGVfeSAqICgoc2luKDIgKiBNX1BJICogKHMtPmZyZXF1 ZW5jeV94ICogbnggKyBzLT5mcmVxdWVuY3lfeSAqIHRpbWUgKyBzLT5waGFzZV95KSkgPiAw KSA/IDEgOiAtMSk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBNT0RFX0NV U1RPTToNCiAgICAgICAgICAgIHMtPnZhcl92YWx1ZXNbVkFSX1hdID0gbng7DQogICAgICAg ICAgICBzLT52YXJfdmFsdWVzW1ZBUl9ZXSA9IG55Ow0KICAgICAgICAgICAgcy0+dmFyX3Zh bHVlc1tWQVJfVF0gPSB0aW1lOw0KICAgICAgICAgICAgcy0+dmFyX3ZhbHVlc1tWQVJfUFhd ID0gbnggLSBjeDsNCiAgICAgICAgICAgIHMtPnZhcl92YWx1ZXNbVkFSX1BZXSA9IG55IC0g Y3k7DQogICAgICAgICAgICBzLT52YXJfdmFsdWVzW1ZBUl9BXSA9IHMtPmFtcGxpdHVkZV95 Ow0KICAgICAgICAgICAgcy0+dmFyX3ZhbHVlc1tWQVJfRF0gPSBkaXN0YW5jZTsNCiAgICAg ICAgICAgIHMtPnZhcl92YWx1ZXNbVkFSX09XXSA9IHdpZHRoOw0KICAgICAgICAgICAgcy0+ dmFyX3ZhbHVlc1tWQVJfT0hdID0gaGVpZ2h0Ow0KICAgICAgICAgICAgZHkgPSBhdl9leHBy X2V2YWwocy0+Y3VzdG9tX3ksIHMtPnZhcl92YWx1ZXMsIE5VTEwpOw0KICAgICAgICAgICAg YnJlYWs7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBkeSAqIGRlY2F5X2ZhY3RvciAqIGhl aWdodDsNCn0NCg0Kc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxp bmssIEFWRnJhbWUgKmluKQ0Kew0KICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gaW5saW5r LT5kc3Q7DQogICAgV2F2ZUZpbHRDb250ZXh0ICpzID0gY3R4LT5wcml2Ow0KICAgIEFWRmls dGVyTGluayAqb3V0bGluayA9IGN0eC0+b3V0cHV0c1swXTsNCiAgICBBVkZyYW1lICpvdXQ7 DQogICAgaW50IHBsYW5lLCB4LCB5Ow0KICAgIGRvdWJsZSBkeCwgZHk7DQogICAgaW50IHN4 LCBzeTsNCiAgICBpbnQgd2lkdGgsIGhlaWdodCwgbGluZXNpemUsIGRzdF9saW5lc2l6ZTsN CiAgICBjb25zdCB1aW50OF90ICpzcmM7DQogICAgdWludDhfdCAqZHN0OyAgICBkb3VibGUg YW1wbGl0dWRlX3NjYWxlX3gsIGFtcGxpdHVkZV9zY2FsZV95Ow0KICAgIGZsb2F0IHY7DQog ICAgaW50IHN4aSwgc3lpOw0KICAgIA0KICAgIC8qIFNhZmV0eSBjaGVja3MgKi8NCiAgICBp ZiAoIWN0eCB8fCAhcyB8fCAhaW5saW5rIHx8ICFvdXRsaW5rIHx8ICFpbikgew0KICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJOdWxsIHBvaW50ZXIgaW4gZmlsdGVyX2Zy YW1lXG4iKTsNCiAgICAgICAgaWYgKGluKQ0KICAgICAgICAgICAgYXZfZnJhbWVfZnJlZSgm aW4pOw0KICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KICAgIH0NCiAgICANCiAg ICAvKiBDaGVjayBkaW1lbnNpb25zICovDQogICAgaWYgKGluLT53aWR0aCA8PSAwIHx8IGlu LT5oZWlnaHQgPD0gMCkgew0KICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJ bnZhbGlkIGlucHV0IGRpbWVuc2lvbnM6ICVkeCVkXG4iLCBpbi0+d2lkdGgsIGluLT5oZWln aHQpOw0KICAgICAgICBhdl9mcmFtZV9mcmVlKCZpbik7DQogICAgICAgIHJldHVybiBBVkVS Uk9SKEVJTlZBTCk7DQogICAgfQ0KICAgIA0KICAgIG91dCA9IGZmX2dldF92aWRlb19idWZm ZXIob3V0bGluaywgb3V0bGluay0+dywgb3V0bGluay0+aCk7DQogICAgaWYgKCFvdXQpIHsN CiAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGFsbG9jYXRl IG91dHB1dCBmcmFtZVxuIik7DQogICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsNCiAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsNCiAgICB9DQogICAgDQogICAgYXZfZnJhbWVf Y29weV9wcm9wcyhvdXQsIGluKTsNCiAgICANCiAgICAvLyBVcGRhdGUgdGltZSB2YWx1ZQ0K ICAgIGlmIChzLT5wdHMgIT0gQVZfTk9QVFNfVkFMVUUgJiYgaW4tPnB0cyAhPSBBVl9OT1BU U19WQUxVRSkgew0KICAgICAgICBzLT50aW1lICs9IChpbi0+cHRzIC0gcy0+cHRzKSAqIGF2 X3EyZChpbmxpbmstPnRpbWVfYmFzZSkgLyBzLT50aW1lX2Jhc2U7ICAgIH0gZWxzZSBpZiAo aW4tPnB0cyAhPSBBVl9OT1BUU19WQUxVRSkgew0KICAgICAgICBzLT50aW1lID0gaW4tPnB0 cyAqIGF2X3EyZChpbmxpbmstPnRpbWVfYmFzZSkgLyBzLT50aW1lX2Jhc2U7DQogICAgfQ0K ICAgIHMtPnB0cyA9IGluLT5wdHM7DQogICAgDQogICAgZm9yIChwbGFuZSA9IDA7IHBsYW5l IDwgcy0+bmJfcGxhbmVzOyBwbGFuZSsrKSB7DQogICAgICAgIC8qIFNraXAgcGxhbmUgaWYg ZGF0YSBpcyBub3QgYXZhaWxhYmxlICovDQogICAgICAgIGlmICghaW4tPmRhdGFbcGxhbmVd IHx8ICFvdXQtPmRhdGFbcGxhbmVdKSB7DQogICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfV0FSTklORywgIlNraXBwaW5nIHBsYW5lICVkIGR1ZSB0byBOVUxMIGRhdGFcbiIsIHBs YW5lKTsNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQogICAgICAgIA0KICAg ICAgICB3aWR0aCA9IGluLT53aWR0aCA+PiAoKHBsYW5lID09IDEgfHwgcGxhbmUgPT0gMikg PyBzLT5oc3ViIDogMCk7DQogICAgICAgIGhlaWdodCA9IGluLT5oZWlnaHQgPj4gKChwbGFu ZSA9PSAxIHx8IHBsYW5lID09IDIpID8gcy0+dnN1YiA6IDApOw0KICAgICAgICBsaW5lc2l6 ZSA9IGluLT5saW5lc2l6ZVtwbGFuZV07DQogICAgICAgIGRzdF9saW5lc2l6ZSA9IG91dC0+ bGluZXNpemVbcGxhbmVdOw0KICAgICAgICANCiAgICAgICAgLyogU2tpcCBpZiBkaW1lbnNp b25zIG9yIGxpbmVzaXplIGFyZSBpbnZhbGlkICovDQogICAgICAgIGlmICh3aWR0aCA8PSAw IHx8IGhlaWdodCA8PSAwIHx8IGxpbmVzaXplIDw9IDAgfHwgZHN0X2xpbmVzaXplIDw9IDAp IHsNCiAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19XQVJOSU5HLCAiU2tpcHBpbmcg cGxhbmUgJWQgZHVlIHRvIGludmFsaWQgZGltZW5zaW9uc1xuIiwgcGxhbmUpOw0KICAgICAg ICAgICAgY29udGludWU7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIHNyYyA9IGlu LT5kYXRhW3BsYW5lXTsNCiAgICAgICAgZHN0ID0gb3V0LT5kYXRhW3BsYW5lXTsNCiAgICAg ICAgDQogICAgICAgIC8qIFNjYWxlIGZvciBzdWJzYW1wbGVkIHBsYW5lcyAqLw0KICAgICAg ICBhbXBsaXR1ZGVfc2NhbGVfeCA9IChwbGFuZSA9PSAxIHx8IHBsYW5lID09IDIpID8gMC41 IDogMS4wOw0KICAgICAgICBhbXBsaXR1ZGVfc2NhbGVfeSA9IChwbGFuZSA9PSAxIHx8IHBs YW5lID09IDIpID8gMC41IDogMS4wOw0KICAgICAgICANCiAgICAgICAgZm9yICh5ID0gMDsg eSA8IGhlaWdodDsgeSsrKSB7DQogICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7 IHgrKykgew0KICAgICAgICAgICAgICAgIGR4ID0gY2FsY3VsYXRlX3hfZGlzcGxhY2VtZW50 KHMsIHgsIHksIHBsYW5lLCB3aWR0aCwgaGVpZ2h0LCBzLT50aW1lKSAqIGFtcGxpdHVkZV9z Y2FsZV94Ow0KICAgICAgICAgICAgICAgIGR5ID0gY2FsY3VsYXRlX3lfZGlzcGxhY2VtZW50 KHMsIHgsIHksIHBsYW5lLCB3aWR0aCwgaGVpZ2h0LCBzLT50aW1lKSAqIGFtcGxpdHVkZV9z Y2FsZV95Ow0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8qIENvbnZlcnQg dG8gZml4ZWQtcG9pbnQgZm9yIGludGVycG9sYXRpb24gKi8NCiAgICAgICAgICAgICAgICBz eCA9IChpbnQpKCh4IDw8IDE2KSAtIChkeCAqIDY1NTM2KSk7DQogICAgICAgICAgICAgICAg c3kgPSAoaW50KSgoeSA8PCAxNikgLSAoZHkgKiA2NTUzNikpOw0KICAgICAgICAgICAgICAg IA0KICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBvdXQgb2YgYm91bmRzIHdpdGggYSBzaW1w bGUgbWlycm9yaW5nIGltcGxlbWVudGF0aW9uICovDQogICAgICAgICAgICAgICAgaWYgKHMt Pm1pcnJvcikgew0KICAgICAgICAgICAgICAgICAgICBzeGkgPSBzeCA+PiAxNjsNCiAgICAg ICAgICAgICAgICAgICAgc3lpID0gc3kgPj4gMTY7DQogICAgICAgICAgICAgICAgICAgIA0K ICAgICAgICAgICAgICAgICAgICAvLyBTaW1wbGUgYm91bmRzIGNoZWNraW5nIGFuZCBtaXJy b3JpbmcNCiAgICAgICAgICAgICAgICAgICAgaWYgKHN4aSA8IDApDQogICAgICAgICAgICAg ICAgICAgICAgICBzeGkgPSAtc3hpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoc3lpIDwg MCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHN5aSA9IC1zeWk7DQogICAgICAgICAgICAg ICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAvLyBNb2R1bG8tbGlrZSBvcGVyYXRpb24g Zm9yIG1pcnJvcmluZyB3aXRob3V0IGRpdmlzaW9uDQogICAgICAgICAgICAgICAgICAgIHdo aWxlIChzeGkgPj0gd2lkdGggKiAyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgc3hpIC09 IHdpZHRoICogMjsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAg IHdoaWxlIChzeWkgPj0gaGVpZ2h0ICogMikNCiAgICAgICAgICAgICAgICAgICAgICAgIHN5 aSAtPSBoZWlnaHQgKiAyOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAg ICAgICAgaWYgKHN4aSA+PSB3aWR0aCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHN4aSA9 ICh3aWR0aCAqIDIgLSAxKSAtIHN4aTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHN5aSA+ PSBoZWlnaHQpDQogICAgICAgICAgICAgICAgICAgICAgICBzeWkgPSAoaGVpZ2h0ICogMiAt IDEpIC0gc3lpOw0KICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dCBiYWNrIGludG8gZml4 ZWQtcG9pbnQgZm9ybWF0DQogICAgICAgICAgICAgICAgICAgIHN4ID0gc3hpIDw8IDE2IHwg KHN4ICYgMHhGRkZGKTsNCiAgICAgICAgICAgICAgICAgICAgc3kgPSBzeWkgPDwgMTYgfCAo c3kgJiAweEZGRkYpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAg ICAgICAgICAgICAgICAvLyBJbnRlcnBvbGF0ZQ0KICAgICAgICAgICAgICAgIGlmICgoc3gg Pj4gMTYpIDwgMCB8fCAoc3ggPj4gMTYpID49IHdpZHRoIC0gMSB8fCAoc3kgPj4gMTYpIDwg MCB8fCAoc3kgPj4gMTYpID49IGhlaWdodCAtIDEpIHsNCiAgICAgICAgICAgICAgICAgICAg Ly8gT3V0IG9mIGJvdW5kcywgdXNlIHplcm8gb3IgZWRnZSB2YWx1ZQ0KICAgICAgICAgICAg ICAgICAgICBpZiAocy0+bWlycm9yKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpbnQg eDAsIHkwOw0KICAgICAgICAgICAgICAgICAgICAgICAgeDAgPSBhdl9jbGlwKHN4ID4+IDE2 LCAwLCB3aWR0aCAtIDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgeTAgPSBhdl9jbGlw KHN5ID4+IDE2LCAwLCBoZWlnaHQgLSAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0K ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHNhZmV0eSBjaGVjayBmb3IgbGluZSBv ZmZzZXRzDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoeTAgKiBsaW5lc2l6ZSArIHgw ID49IDAgJiYgeTAgKiBsaW5lc2l6ZSArIHgwIDwgaGVpZ2h0ICogbGluZXNpemUpDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHN0W3kgKiBkc3RfbGluZXNpemUgKyB4XSA9IHNy Y1t5MCAqIGxpbmVzaXplICsgeDBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0X2xpbmVzaXplICsgeF0g PSAwOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAg ICAgICAgZHN0W3kgKiBkc3RfbGluZXNpemUgKyB4XSA9IDA7DQogICAgICAgICAgICAgICAg ICAgIH0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgc3dp dGNoKHMtPmRpc3RvcnRfbW9kZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBE SVNUT1JUX05FQVJFU1Q6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGJv dW5kcyBjaGVjayBmb3IgTkVBUkVTVCBtb2RlDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXkgPSBzeSA+PiAx NjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGl4ID0gc3ggPj4gMTY7 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpeSA+PSAwICYmIGl5IDwg aGVpZ2h0ICYmIGl4ID49IDAgJiYgaXggPCB3aWR0aCkNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0X2xpbmVzaXplICsgeF0gPSBzcmNbKGl5ICog bGluZXNpemUpICsgaXhdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RbeSAqIGRzdF9saW5l c2l6ZSArIHhdID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICBj YXNlIERJU1RPUlRfQklMSU5FQVI6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9 IGJpbGluZWFyX2ludGVycChzcmMsIHN4LCBzeSwgbGluZXNpemUsIHdpZHRoIC0gMSwgaGVp Z2h0IC0gMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0W3kgKiBkc3RfbGlu ZXNpemUgKyB4XSA9IGF2X2NsaXBfdWludDgodik7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIERJU1RPUlRfQklD VUJJQzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gYmljdWJpY19pbnRlcnAo c3JjLCBzeCwgc3ksIGxpbmVzaXplLCB3aWR0aCAtIDEsIGhlaWdodCAtIDEpOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0X2xpbmVzaXplICsgeF0gPSBhdl9j bGlwX3VpbnQ4KHYpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAg ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBBZGQgYm91bmRzIGNoZWNrIGZvciBkZWZhdWx0IG1vZGUgdG9vDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgaXkgPSBzeSA+PiAxNjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IGl4ID0gc3ggPj4gMTY7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChpeSA+PSAwICYmIGl5IDwgaGVpZ2h0ICYmIGl4ID49IDAgJiYgaXggPCB3aWR0aCkNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0X2xpbmVzaXpl ICsgeF0gPSBzcmNbKGl5ICogbGluZXNpemUpICsgaXhdOw0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkc3RbeSAqIGRzdF9saW5lc2l6ZSArIHhdID0gMDsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAg ICAgIH0NCiAgICB9DQogICAgDQogICAgYXZfZnJhbWVfZnJlZSgmaW4pOw0KICAgIHJldHVy biBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywgb3V0KTsNCn0NCg0KI2RlZmluZSBPRkZTRVQo eCkgb2Zmc2V0b2YoV2F2ZUZpbHRDb250ZXh0LCB4KQ0KDQpzdGF0aWMgY29uc3QgQVZGaWx0 ZXJQYWQgd2F2ZWZpbHRfaW5wdXRzW10gPSB7DQogICAgew0KICAgICAgICAubmFtZSAgICAg ICAgID0gImRlZmF1bHQiLA0KICAgICAgICAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBF X1ZJREVPLA0KICAgICAgICAuZmlsdGVyX2ZyYW1lID0gZmlsdGVyX2ZyYW1lLA0KICAgICAg ICAuY29uZmlnX3Byb3BzID0gY29uZmlnX3Byb3BzLA0KICAgIH0sDQp9Ow0KDQpzdGF0aWMg Y29uc3QgQVZGaWx0ZXJQYWQgd2F2ZWZpbHRfb3V0cHV0c1tdID0gew0KICAgIHsNCiAgICAg ICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0IiwNCiAgICAgICAgLnR5cGUgICAgICAgICA9 IEFWTUVESUFfVFlQRV9WSURFTywNCiAgICB9LA0KfTsNCg0KY29uc3QgQVZGaWx0ZXIgZmZf dmZfd2F2ZWZpbHQgPSB7DQogICAgLm5hbWUgICAgICAgICAgPSAid2F2ZWZpbHQiLA0KICAg IC5kZXNjcmlwdGlvbiAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkFwcGx5IHdhdmUgZWZm ZWN0cyB3aXRoIGFkdmFuY2VkIGNvbnRyb2xzLiIpLA0KICAgIC5wcml2X3NpemUgICAgID0g c2l6ZW9mKFdhdmVGaWx0Q29udGV4dCksDQogICAgLnByaXZfY2xhc3MgICAgPSAmd2F2ZWZp bHRfY2xhc3MsDQogICAgLmluaXQgICAgICAgICAgPSBpbml0LA0KICAgIC51bmluaXQgICAg ICAgID0gdW5pbml0LA0KICAgIEZJTFRFUl9JTlBVVFMod2F2ZWZpbHRfaW5wdXRzKSwNCiAg ICBGSUxURVJfT1VUUFVUUyh3YXZlZmlsdF9vdXRwdXRzKSwNCiAgICBGSUxURVJfUVVFUllf RlVOQyhxdWVyeV9mb3JtYXRzKSwNCiAgICAuZmxhZ3MgICAgICAgICA9IEFWRklMVEVSX0ZM QUdfU1VQUE9SVF9USU1FTElORV9HRU5FUklDLA0KfTsNCg== --------------NzBzEDoYIdxY7jJMVDHChk2S Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --------------NzBzEDoYIdxY7jJMVDHChk2S--