From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 91FF34D3F9 for ; Thu, 22 Jan 2026 00:06:47 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'6u4LSsYBvhwa+5t+9e6qQPQH1Ao7cKj3def4xtA4qTI=', expected b'eQ3v7QQ1QuRCRQFSO3XsVPlikrk+w8ikU2zkWJBCFpo=')) header.d=gmail.com header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1769040301; h=mime-version : date : message-id : to : content-type : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : from; bh=fKlxMYXqrG9XMu8DxXLFt/RuBkteaGWAIStb0oc3ntI=; b=DgVibmC+OFga9OfD2VajeNm0np7cKchZZk3mC69Mu/oHJCrlhQ5zB0BRZWSCE/4/3/tzK etBXjmkowtjDyzvwWIbIkNlqPHgIphq8csz0ER76AaOCzTGQ97vbFmsP/EdE3N/hFXAk0/1 +SmCB09eAWcyukkkYqJLMYt7hdaHI3w3hfzWpkTa6CmSPA1lcgRMY6SYQ0rJjlPvAAbdl9X h2oyz8qYZhNg1lE94vNGUNfJBuD1AGUHwc/50exI+8iCBdABCWYWYyngLCelzCAvuOnysoq vCJkfa/46769LzdcNNzwI9qJaXtyo5jRLmR8k27Rq8fMiJPy8gpYvnNgeXFA== Received: from [172.20.0.4] (unknown [172.20.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 9E131690E9B; Thu, 22 Jan 2026 02:05:01 +0200 (EET) ARC-Seal: i=2; cv=fail; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1769040231; b=ctVmbmZZug2Ci0Pqze+GC5hu5s5G6/oq0h+6KpwDDs5LuLcftbJ7FgbVPcTC87mmvwlKb 5dQVTOEAzsqvETbBI0IfWEEnfUH9MhpCpNzPwDdQe7cwQ1XDEWOIVIvbuPK4hxEykcN8cV/ SYYiboZAb7kIUWMK4sNZDgZ0fSTAFsvrQwH7c56QPqwizKfnl28JP7J8pi7dU+grHGFLs1S hSPvTbyvEVTOuGcT+5f41q/iywawOh+HUDnxrPeDw2gLlQRMWLSf/xosLZqpxnS2P5XLmVg JzfrVAmNZwtE4CEQtMpTioo6o+arL0Uqmi0pEHJk9vVgY6myR9wXIh2fprZw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1769040231; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=6u4LSsYBvhwa+5t+9e6qQPQH1Ao7cKj3def4xtA4qTI=; b=A6ukWtVGNWBfyhmO2AHy2deOsQq2HI+/aO4QyY5y+AnUAm3j+pQDK8uiB65sY0T7qZl/2 gyNUWst7ypJL4ZfantCgmNLHZNKSALMiOXWsVMWZA4lIDX0EryzIZKXHNOEPXTAT+AQ+ece iSvj34cJtNxxvvWz6ZswLrPcw5kbR4W/O8cXYN2DF0vul4rqunDHFj+HfPq/y+zGEPDYZTL 8eqcGzTtbOQ6PIG0nkVsTD81q30DtJ3OhTpFmlZbYUEVGfTITs1UTk1HNclY6yEd++cH8nq uwR17tu5JnoBzDfPfSXbzr1Nsam8m8cF7sm2++1WDq+aO+AjH4FLPFE6O9mQ== ARC-Authentication-Results: i=2; ffmpeg.org; dkim=fail header.d=gmail.com; arc=fail; dmarc=fail header.from=gmail.com policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=fail header.d=gmail.com; arc=fail (Most recent ARC-Message-Signature did not validate); dmarc=fail (Used From Domain Record) header.from=gmail.com policy.dmarc=quarantine Received: from mail-qk1-f170.google.com (mail-qk1-f170.google.com [209.85.222.170]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id CDA5568B5D2 for ; Thu, 22 Jan 2026 02:03:30 +0200 (EET) Received: by mail-qk1-f170.google.com with SMTP id af79cd13be357-8c6a7638f42so54427585a.2 for ; Wed, 21 Jan 2026 16:03:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769040209; cv=none; d=google.com; s=arc-20240605; b=Zww0Ua6X9LZmW+xLVnQOI2bvTvbMfkLLgy9679kEwSSK05Rn2iFPZHm9Dp8qth/s+t wN0jVKlDXGfKVkjXfD8MfgMyEXiXBaXcIZZR022XdYM3WIPwuK5wKpLoGxUinf6JHUv1 e649W7CzCIuyIa6TsO5nAeOnIf6IKw/8ZM68Oi4qslhEoLVeC5giqBf+ZljhpNfATLDI O+ha3nd57dHCYnQTuox6DZMnZ2ecN6bQACdcu8jD9KYmyTSaNNvO5igBidKVmd05qRcC gQkY14RALZoYeaUGUk7PpS9Fylpjotlg5mUAtTMskusjrplBLvb7txplviJJKeX3uSPM nxOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=eQ3v7QQ1QuRCRQFSO3XsVPlikrk+w8ikU2zkWJBCFpo=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=I3IeX/tWRY8g2DFL3XgrULqm4R2VjzIKE1ZBZjiu45q62UJ1SOmsmuqZ08TGjxuKzO z0fOUiiqz+QzcANs+c4w7CE2zGkBbv8IfYmDSU0kICF/7BxKddasZtoFZ0xaEYH+WX6C lEbTtHf7+cOxGPy5cUDeiBIXdS1wKemfe/Awb1x8HV9+EHtbIvBVSTma97oQfB7A/msy 5CgRZcjbvek/cQSsEx7TecwQp2/MFsMD8rbEEUuZ4ATsw724RXBRsqK2YCwWQlZs6PHf aj4olxKFFd9XlquWO5Am3ksf2FuoMTuzrWbDu66OTsxiJt6891BcjgouDhGWeITjWbIn 2/kg==; darn=ffmpeg.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769040209; x=1769645009; darn=ffmpeg.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=eQ3v7QQ1QuRCRQFSO3XsVPlikrk+w8ikU2zkWJBCFpo=; b=B989cEJJkZMDeEDIh63hC+QtPdG/s1hGuykI7ysn6bSFB2V1nHRj85o8AqxTnduObA B2naoO1bmyd6WsZHXxFry72Suinq59UoFNnMxsdLCmHRcIjZ7JqFC0OvkpF8OYkrM/eU mnF9Gy2tHq2qwCVI0LCrQv26OSmL59wPywc2lcIimJbkdgRe1mY6oeXrxsJnM6G3m59a M6AuxhF70rHIeAWUpPHd3ZUIe2IlaCTt76eczVHjgqEvcFOgWOSao54ab/h1V4dqRcz7 gi9J9kNKiToQR2gxFGsSYhl9Jz9NZV5dlQBWIh/reD5MJ7utsWBoZNR8inoPZKlZmFgt 2nIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769040209; x=1769645009; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=eQ3v7QQ1QuRCRQFSO3XsVPlikrk+w8ikU2zkWJBCFpo=; b=hPqrn3Ce9jtI3dBrzWLycDBSmzAwz/f4D6xdrwkRSJzBRngF0QIuLtnPu3xegIT9OK 8vqQSm8ABWAJQrlGgZKKKxt9qCi8zy3BcVNMUg7uKjQTppU1WeANiOV+J7LpXcrCBN7O zHwNcZz62B7XeC2yhsk/NnybiXPOwR5UsM2SKr3Bp5IgG+kiYp7WEvrCQd5gIf8uWAxP eI6f8jgtaFoNgleb+eapSrVd+p4XTNLIcjTGhr6ORD8R9SoLHm9rzxSBFO7jJYjomigv Foh8KYAZ+vUeiI93KJ4OkSBqF/Y2MXDSjf7Af67iSLtjbJFsZP0t9mX+3s+L3prQfxhu omVA== X-Gm-Message-State: AOJu0YyPTfBW5W+RsGERBcVXjCVz/9/mDclVGGC9HswXiksUFZSqx/0M iXcRvDggGEXBXF7r1KKk8H6ofHJDFK5gqWlaSosOjlsRrQqzs8p/Vn5E86F7dfNICYyQhUH3R6U ctZLGjU8ILdesu4tTiEwh/1FGaqB6RG8JPDkN X-Gm-Gg: AZuq6aJ7Y57O55l+slduN8aEIu/hj3dXqRbmVcqaPc33qBOaxC59FuvCLJBhnPDbGjA /a7NzXO0Rr6VktHlRm851yZiNUPSo10Foqyh65xpZ/w5XE3YPdRWUJnm2OY9IRA7ziUB3/vHj0A WOMrsAT3KeK9VpNZCYbplYIMil9kwYoMu+B35BrdoP3dJQPyin58bSUmgnWblUhbX0bl+Iwzyv1 /Kzww2FGW6MlsU7ZtAcXkwK+J3AZI27+v1koNZmshnHkosgqpcfl/jdJ9j2a0NnPkvqp04= X-Received: by 2002:a05:690e:1406:b0:649:45a0:a29a with SMTP id 956f58d0204a3-64945a0a426mr1674698d50.75.1768999330262; Wed, 21 Jan 2026 04:42:10 -0800 (PST) MIME-Version: 1.0 Date: Wed, 21 Jan 2026 14:39:30 +0200 X-Gm-Features: AZwV_QgByuvG-DLHUvHIY9AZ9W4AFp_cMnRd4DMmfSImHZmamcveKl4RP3SIyYc Message-ID: To: ffmpeg-devel@ffmpeg.org Content-Type: multipart/mixed; boundary="000000000000b07abe0648e540b2" Message-ID-Hash: XHSZGCBOUQHK26EWH2YDBWRTCVRKJRGN X-Message-ID-Hash: XHSZGCBOUQHK26EWH2YDBWRTCVRKJRGN X-MailFrom: SRS0=AtDP=73=gmail.com=narimansayed28@ffmpeg.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Content-Filtered-By: Mailman/MimeDel 3.3.10 X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] mov: fix bit_rate calculation for fragmented MP4 List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Nariman Sayed via ffmpeg-devel Cc: Nariman Sayed Archived-At: List-Archive: List-Post: --000000000000b07abe0648e540b2 Content-Type: text/plain; charset="UTF-8" Hello FFmpeg developers, This patch fixes the calculation of bit_rate for fragmented MP4 files, ensuring that the reported bit_rate covers the entire fragmented file instead of only the first fragment. This addresses GitHub issue: https://github.com/FFmpeg/FFmpeg/issues/20450 Changes include modifications in: - libavformat/mov.c - libavformat/isom.h Tested using ffprobe on sample fragmented MP4 files (12.mp4 and 21.mp4), and the bit_rate is now calculated correctly over the whole file. Patch attached. Best regards, Nariman Sayed --000000000000b07abe0648e540b2 Content-Type: application/octet-stream; name="fix-bitrate-fragmented-mp4.patch" Content-Disposition: attachment; filename="fix-bitrate-fragmented-mp4.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mko0ezkj0 RnJvbSA3Mzk5ODVhMDljMGRmNTBhNmMyYmJjYjQ4MWExMjlkMDE4Yzc0MzkxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYXJpbWFuLVNheWVkIDxuYXJpbWFuc2F5ZWQyOEBnbWFpbC5j b20+CkRhdGU6IFdlZCwgMjEgSmFuIDIwMjYgMTQ6MzA6MjUgKzAyMDAKU3ViamVjdDogW1BBVENI XSBGaXg6IGNhbGN1bGF0ZSBiaXRfcmF0ZSBvdmVyIGVudGlyZSBmcmFnbWVudGVkIE1QNAoKLS0t CiBsaWJhdmZvcm1hdC9pc29tLmggfCAgMTUwICstCiBsaWJhdmZvcm1hdC9tb3YuYyAgfCAzNzU3 ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAyIGZpbGVzIGNo YW5nZWQsIDE5MzMgaW5zZXJ0aW9ucygrKSwgMTk3NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9saWJhdmZvcm1hdC9pc29tLmggYi9saWJhdmZvcm1hdC9pc29tLmgKaW5kZXggNTViYzI4Mjdi NC4uYjhhMDI1MjcyNCAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvaXNvbS5oCisrKyBiL2xpYmF2 Zm9ybWF0L2lzb20uaApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgImludGVybmFsLmgiCiAj aW5jbHVkZSAiZHYuaCIKIAotLyogaXNvbS5jICovCisgLyogaXNvbS5jICovCiBleHRlcm4gY29u c3QgQVZDb2RlY1RhZyBmZl9tcDRfb2JqX3R5cGVbXTsKIGV4dGVybiBjb25zdCBBVkNvZGVjVGFn IGZmX2NvZGVjX21vdnZpZGVvX3RhZ3NbXTsKIGV4dGVybiBjb25zdCBBVkNvZGVjVGFnIGZmX2Nv ZGVjX21vdmF1ZGlvX3RhZ3NbXTsKQEAgLTg0LDggKzg0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgTU9W RWxzdCB7CiAKIHR5cGVkZWYgc3RydWN0IE1PVkRyZWYgewogICAgIHVpbnQzMl90IHR5cGU7Ci0g ICAgY2hhciAqcGF0aDsKLSAgICBjaGFyICpkaXI7CisgICAgY2hhciogcGF0aDsKKyAgICBjaGFy KiBkaXI7CiAgICAgY2hhciB2b2x1bWVbMjhdOwogICAgIGNoYXIgZmlsZW5hbWVbNjRdOwogICAg IGludDE2X3Qgbmx2bF90bywgbmx2bF9mcm9tOwpAQCAtMTI3LDcgKzEyNyw3IEBAIHR5cGVkZWYg c3RydWN0IE1PVkVuY3J5cHRpb25JbmRleCB7CiAgICAgLy8gSW5kaXZpZHVhbCBlbmNyeXB0ZWQg c2FtcGxlcy4gIElmIHRoZXJlIGFyZSBubyBlbGVtZW50cywgdGhlbiB0aGUgZGVmYXVsdAogICAg IC8vIHNldHRpbmdzIHdpbGwgYmUgdXNlZC4KICAgICB1bnNpZ25lZCBpbnQgbmJfZW5jcnlwdGVk X3NhbXBsZXM7Ci0gICAgQVZFbmNyeXB0aW9uSW5mbyAqKmVuY3J5cHRlZF9zYW1wbGVzOworICAg IEFWRW5jcnlwdGlvbkluZm8qKiBlbmNyeXB0ZWRfc2FtcGxlczsKIAogICAgIHVpbnQ4X3QqIGF1 eGlsaWFyeV9pbmZvX3NpemVzOwogICAgIHNpemVfdCBhdXhpbGlhcnlfaW5mb19zYW1wbGVfY291 bnQ7CkBAIC0xNDUsNyArMTQ1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgTU9WRnJhZ21lbnRTdHJlYW1J bmZvIHsKICAgICAvLyBJbmRleCBvZiB0aGUgZmlyc3Qgc2FtcGxlL3RydW4gaW4gdGhlIGZyYWdt ZW50LgogICAgIGludCBpbmRleF9iYXNlOwogICAgIGludCBpbmRleF9lbnRyeTsKLSAgICBNT1ZF bmNyeXB0aW9uSW5kZXggKmVuY3J5cHRpb25faW5kZXg7CisgICAgTU9WRW5jcnlwdGlvbkluZGV4 KiBlbmNyeXB0aW9uX2luZGV4OwogICAgIGludCBzdHNkX2lkOyAvLyBjdXJyZW50IGZyYWdtZW50 IHN0c2RfaWQKIH0gTU9WRnJhZ21lbnRTdHJlYW1JbmZvOwogCkBAIC0xNTQsNyArMTU0LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgTU9WRnJhZ21lbnRJbmRleEl0ZW0gewogICAgIGludCBoZWFkZXJzX3Jl YWQ7CiAgICAgaW50IGN1cnJlbnQ7CiAgICAgaW50IG5iX3N0cmVhbV9pbmZvOwotICAgIE1PVkZy YWdtZW50U3RyZWFtSW5mbyAqIHN0cmVhbV9pbmZvOworICAgIE1PVkZyYWdtZW50U3RyZWFtSW5m byogc3RyZWFtX2luZm87CiB9IE1PVkZyYWdtZW50SW5kZXhJdGVtOwogCiB0eXBlZGVmIHN0cnVj dCBNT1ZGcmFnbWVudEluZGV4IHsKQEAgLTE2Miw3ICsxNjIsNyBAQCB0eXBlZGVmIHN0cnVjdCBN T1ZGcmFnbWVudEluZGV4IHsKICAgICBpbnQgY29tcGxldGU7CiAgICAgaW50IGN1cnJlbnQ7CiAg ICAgaW50IG5iX2l0ZW1zOwotICAgIE1PVkZyYWdtZW50SW5kZXhJdGVtICogaXRlbTsKKyAgICBN T1ZGcmFnbWVudEluZGV4SXRlbSogaXRlbTsKIH0gTU9WRnJhZ21lbnRJbmRleDsKIAogdHlwZWRl ZiBzdHJ1Y3QgTU9WSW5kZXhSYW5nZSB7CkBAIC0xNzEsNDIgKzE3MSw0NSBAQCB0eXBlZGVmIHN0 cnVjdCBNT1ZJbmRleFJhbmdlIHsKIH0gTU9WSW5kZXhSYW5nZTsKIAogdHlwZWRlZiBzdHJ1Y3Qg TU9WU3RyZWFtQ29udGV4dCB7Ci0gICAgQVZJT0NvbnRleHQgKnBiOworICAgIGludDY0X3QgZnJh Z21lbnRfZHVyYXRpb25fc3VtOworICAgIGludDY0X3QgZnJhZ21lbnRfc2l6ZV9zdW07CisgICAg aW50NjRfdCB0b3RhbF9kYXRhX3NpemU7CisgICAgQVZJT0NvbnRleHQqIHBiOwogICAgIGludCBy ZWZjb3VudDsKICAgICBpbnQgcGJfaXNfY29waWVkOwogICAgIGludCBpZDsgICAgICAgICAgICAg ICAvLy88IEFWU3RyZWFtIGlkCiAgICAgaW50IGZmaW5kZXg7ICAgICAgICAgIC8vLzwgQVZTdHJl YW0gaW5kZXgKICAgICBpbnQgbmV4dF9jaHVuazsKICAgICB1bnNpZ25lZCBpbnQgY2h1bmtfY291 bnQ7Ci0gICAgaW50NjRfdCAqY2h1bmtfb2Zmc2V0czsKKyAgICBpbnQ2NF90KiBjaHVua19vZmZz ZXRzOwogICAgIHVuc2lnbmVkIGludCB0dHNfY291bnQ7CiAgICAgdW5zaWduZWQgaW50IHR0c19h bGxvY2F0ZWRfc2l6ZTsKLSAgICBNT1ZUaW1lVG9TYW1wbGUgKnR0c19kYXRhOworICAgIE1PVlRp bWVUb1NhbXBsZSogdHRzX2RhdGE7CiAgICAgdW5zaWduZWQgaW50IHN0dHNfY291bnQ7CiAgICAg dW5zaWduZWQgaW50IHN0dHNfYWxsb2NhdGVkX3NpemU7Ci0gICAgTU9WU3R0cyAqc3R0c19kYXRh OworICAgIE1PVlN0dHMqIHN0dHNfZGF0YTsKICAgICB1bnNpZ25lZCBpbnQgc2R0cF9jb3VudDsK LSAgICB1aW50OF90ICpzZHRwX2RhdGE7CisgICAgdWludDhfdCogc2R0cF9kYXRhOwogICAgIHVu c2lnbmVkIGludCBjdHRzX2NvdW50OwogICAgIHVuc2lnbmVkIGludCBjdHRzX2FsbG9jYXRlZF9z aXplOwotICAgIE1PVkN0dHMgKmN0dHNfZGF0YTsKKyAgICBNT1ZDdHRzKiBjdHRzX2RhdGE7CiAg ICAgdW5zaWduZWQgaW50IHN0c2NfY291bnQ7Ci0gICAgTU9WU3RzYyAqc3RzY19kYXRhOworICAg IE1PVlN0c2MqIHN0c2NfZGF0YTsKICAgICB1bnNpZ25lZCBpbnQgc3RzY19pbmRleDsKICAgICBp bnQgc3RzY19zYW1wbGU7CiAgICAgdW5zaWduZWQgaW50IHN0cHNfY291bnQ7Ci0gICAgdW5zaWdu ZWQgKnN0cHNfZGF0YTsgIC8vLzwgcGFydGlhbCBzeW5jIHNhbXBsZSBmb3IgbXBlZy0yIG9wZW4g Z29wCi0gICAgTU9WRWxzdCAqZWxzdF9kYXRhOworICAgIHVuc2lnbmVkKiBzdHBzX2RhdGE7ICAv Ly88IHBhcnRpYWwgc3luYyBzYW1wbGUgZm9yIG1wZWctMiBvcGVuIGdvcAorICAgIE1PVkVsc3Qq IGVsc3RfZGF0YTsKICAgICB1bnNpZ25lZCBpbnQgZWxzdF9jb3VudDsKICAgICBpbnQgdHRzX2lu ZGV4OwogICAgIGludCB0dHNfc2FtcGxlOwogICAgIHVuc2lnbmVkIGludCBzYW1wbGVfc2l6ZTsg Ly8vPCBtYXkgY29udGFpbiB2YWx1ZSBjYWxjdWxhdGVkIGZyb20gc3RzZCBvciB2YWx1ZSBmcm9t IHN0c3ogYXRvbQogICAgIHVuc2lnbmVkIGludCBzdHN6X3NhbXBsZV9zaXplOyAvLy88IGFsd2F5 cyBjb250YWlucyBzYW1wbGUgc2l6ZSBmcm9tIHN0c3ogYXRvbQogICAgIHVuc2lnbmVkIGludCBz YW1wbGVfY291bnQ7Ci0gICAgdW5zaWduZWQgaW50ICpzYW1wbGVfc2l6ZXM7CisgICAgdW5zaWdu ZWQgaW50KiBzYW1wbGVfc2l6ZXM7CiAgICAgaW50IGtleWZyYW1lX2Fic2VudDsKICAgICB1bnNp Z25lZCBpbnQga2V5ZnJhbWVfY291bnQ7Ci0gICAgaW50ICprZXlmcmFtZXM7CisgICAgaW50KiBr ZXlmcmFtZXM7CiAgICAgaW50IHRpbWVfc2NhbGU7CiAgICAgaW50NjRfdCB0aW1lX29mZnNldDsg IC8vLzwgdGltZSBvZmZzZXQgb2YgdGhlIGVkaXQgbGlzdCBlbnRyaWVzCiAgICAgaW50NjRfdCBt aW5fY29ycmVjdGVkX3B0czsgIC8vLzwgbWluaW11bSBDb21wb3NpdGlvbiB0aW1lIHNob3duIGJ5 IHRoZSBlZGl0cyBleGNsdWRpbmcgZW1wdHkgZWRpdHMuCkBAIC0yMjAsNyArMjIzLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgTU9WU3RyZWFtQ29udGV4dCB7CiAgICAgaW50IHBzZXVkb19zdHJlYW1faWQ7 IC8vLzwgLTEgbWVhbnMgZGVtdXggYWxsIGlkcwogICAgIGludDE2X3QgYXVkaW9fY2lkOyAgICAv Ly88IHN0c2QgYXVkaW8gY29tcHJlc3Npb24gaWQKICAgICB1bnNpZ25lZCBkcmVmc19jb3VudDsK LSAgICBNT1ZEcmVmICpkcmVmczsKKyAgICBNT1ZEcmVmKiBkcmVmczsKICAgICBpbnQgZHJlZl9p ZDsKICAgICB1bnNpZ25lZCB0cmVmX2ZsYWdzOwogICAgIGludCB0cmVmX2lkOwpAQCAtMjM4LDE0 ICsyNDEsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgTU9WU3RyZWFtQ29udGV4dCB7CiAgICAgaW50NjRf dCB0cmFja19lbmQ7ICAgIC8vLzwgdXNlZCBmb3IgZHRzIGdlbmVyYXRpb24gaW4gZnJhZ21lbnRl ZCBtb3ZpZSBmaWxlcwogICAgIGludCBzdGFydF9wYWQ7ICAgICAgICAvLy88IGFtb3VudCBvZiBz YW1wbGVzIHRvIHNraXAgZHVlIHRvIGVuYy1kZWMgZGVsYXkKICAgICB1bnNpZ25lZCBpbnQgcmFw X2dyb3VwX2NvdW50OwotICAgIE1PVlNiZ3AgKnJhcF9ncm91cDsKKyAgICBNT1ZTYmdwKiByYXBf Z3JvdXA7CiAgICAgdW5zaWduZWQgaW50IHN5bmNfZ3JvdXBfY291bnQ7Ci0gICAgTU9WU2JncCAq c3luY19ncm91cDsKLSAgICB1aW50OF90ICpzZ3BkX3N5bmM7CisgICAgTU9WU2JncCogc3luY19n cm91cDsKKyAgICB1aW50OF90KiBzZ3BkX3N5bmM7CiAgICAgdWludDMyX3Qgc2dwZF9zeW5jX2Nv dW50OwotICAgIGludDMyX3QgKnNhbXBsZV9vZmZzZXRzOworICAgIGludDMyX3QqIHNhbXBsZV9v ZmZzZXRzOwogICAgIGludCBzYW1wbGVfb2Zmc2V0c19jb3VudDsKLSAgICBpbnQgKm9wZW5fa2V5 X3NhbXBsZXM7CisgICAgaW50KiBvcGVuX2tleV9zYW1wbGVzOwogICAgIGludCBvcGVuX2tleV9z YW1wbGVzX2NvdW50OwogICAgIHVpbnQzMl90IG1pbl9zYW1wbGVfZHVyYXRpb247CiAKQEAgLTI1 MywyMiArMjU2LDIyIEBAIHR5cGVkZWYgc3RydWN0IE1PVlN0cmVhbUNvbnRleHQgewogICAgIGlu dDY0X3QgZHVyYXRpb25fZm9yX2ZwczsKIAogICAgIC8qKiBleHRyYWRhdGEgYXJyYXkgKGFuZCBz aXplKSBmb3IgbXVsdGlwbGUgc3RzZCAqLwotICAgIHVpbnQ4X3QgKipleHRyYWRhdGE7Ci0gICAg aW50ICpleHRyYWRhdGFfc2l6ZTsKKyAgICB1aW50OF90KiogZXh0cmFkYXRhOworICAgIGludCog ZXh0cmFkYXRhX3NpemU7CiAgICAgaW50IGxhc3Rfc3RzZF9pbmRleDsKICAgICBpbnQgc3RzZF9j b3VudDsKICAgICBpbnQgc3RzZF92ZXJzaW9uOwogCi0gICAgaW50MzJfdCAqZGlzcGxheV9tYXRy aXg7Ci0gICAgQVZTdGVyZW8zRCAqc3RlcmVvM2Q7CisgICAgaW50MzJfdCogZGlzcGxheV9tYXRy aXg7CisgICAgQVZTdGVyZW8zRCogc3RlcmVvM2Q7CiAgICAgc2l6ZV90IHN0ZXJlbzNkX3NpemU7 Ci0gICAgQVZTcGhlcmljYWxNYXBwaW5nICpzcGhlcmljYWw7CisgICAgQVZTcGhlcmljYWxNYXBw aW5nKiBzcGhlcmljYWw7CiAgICAgc2l6ZV90IHNwaGVyaWNhbF9zaXplOwotICAgIEFWTWFzdGVy aW5nRGlzcGxheU1ldGFkYXRhICptYXN0ZXJpbmc7CisgICAgQVZNYXN0ZXJpbmdEaXNwbGF5TWV0 YWRhdGEqIG1hc3RlcmluZzsKICAgICBzaXplX3QgbWFzdGVyaW5nX3NpemU7Ci0gICAgQVZDb250 ZW50TGlnaHRNZXRhZGF0YSAqY29sbDsKKyAgICBBVkNvbnRlbnRMaWdodE1ldGFkYXRhKiBjb2xs OwogICAgIHNpemVfdCBjb2xsX3NpemU7Ci0gICAgQVZBbWJpZW50Vmlld2luZ0Vudmlyb25tZW50 ICphbWJpZW50OworICAgIEFWQW1iaWVudFZpZXdpbmdFbnZpcm9ubWVudCogYW1iaWVudDsKICAg ICBzaXplX3QgYW1iaWVudF9zaXplOwogCiAgICAgdWludDMyX3QgZm9ybWF0OwpAQCAtMjc2LDI2 ICsyNzksMTkgQEAgdHlwZWRlZiBzdHJ1Y3QgTU9WU3RyZWFtQ29udGV4dCB7CiAgICAgaW50IGhh c19zaWR4OyAgLy8gSWYgdGhlcmUgaXMgYW4gc2lkeCBlbnRyeSBmb3IgdGhpcyBzdHJlYW0uCiAg ICAgc3RydWN0IHsKICAgICAgICAgc3RydWN0IEFWQUVTQ1RSKiBhZXNfY3RyOwotICAgICAgICBz dHJ1Y3QgQVZBRVMgKmFlc19jdHg7CisgICAgICAgIHN0cnVjdCBBVkFFUyogYWVzX2N0eDsKICAg ICAgICAgdW5zaWduZWQgaW50IHBlcl9zYW1wbGVfaXZfc2l6ZTsgIC8vIEVpdGhlciAwLCA4LCBv ciAxNi4KLSAgICAgICAgQVZFbmNyeXB0aW9uSW5mbyAqZGVmYXVsdF9lbmNyeXB0ZWRfc2FtcGxl OwotICAgICAgICBNT1ZFbmNyeXB0aW9uSW5kZXggKmVuY3J5cHRpb25faW5kZXg7CisgICAgICAg IEFWRW5jcnlwdGlvbkluZm8qIGRlZmF1bHRfZW5jcnlwdGVkX3NhbXBsZTsKKyAgICAgICAgTU9W RW5jcnlwdGlvbkluZGV4KiBlbmNyeXB0aW9uX2luZGV4OwogICAgIH0gY2VuYzsKIAotICAgIHN0 cnVjdCBJQU1GRGVtdXhDb250ZXh0ICppYW1mOworICAgIHN0cnVjdCBJQU1GRGVtdXhDb250ZXh0 KiBpYW1mOwogICAgIGludCBpYW1mX3N0cmVhbV9vZmZzZXQ7CiB9IE1PVlN0cmVhbUNvbnRleHQ7 CiAKLXR5cGVkZWYgc3RydWN0IEhFSUZJdGVtUmVmIHsKLSAgICB1aW50MzJfdCB0eXBlOwotICAg IGludCBpdGVtX2lkOwotfSBIRUlGSXRlbVJlZjsKLQogdHlwZWRlZiBzdHJ1Y3QgSEVJRkl0ZW0g ewotICAgIEFWU3RyZWFtICpzdDsKLSAgICBIRUlGSXRlbVJlZiAqaXJlZl9saXN0OwotICAgIGlu dCBuYl9pcmVmX2xpc3Q7Ci0gICAgY2hhciAqbmFtZTsKKyAgICBBVlN0cmVhbSogc3Q7CisgICAg Y2hhciogbmFtZTsKICAgICBpbnQgaXRlbV9pZDsKICAgICBpbnQ2NF90IGV4dGVudF9sZW5ndGg7 CiAgICAgaW50NjRfdCBleHRlbnRfb2Zmc2V0OwpAQCAtMzA2LDIxICszMDIsMjEgQEAgdHlwZWRl ZiBzdHJ1Y3QgSEVJRkl0ZW0gewogICAgIGludCB2ZmxpcDsKICAgICBpbnQgdHlwZTsKICAgICBp bnQgaXNfaWRhdF9yZWxhdGl2ZTsKLSAgICB1aW50OF90ICppY2NfcHJvZmlsZTsKKyAgICB1aW50 OF90KiBpY2NfcHJvZmlsZTsKICAgICBzaXplX3QgaWNjX3Byb2ZpbGVfc2l6ZTsKIH0gSEVJRkl0 ZW07CiAKIHR5cGVkZWYgc3RydWN0IEhFSUZHcmlkIHsKLSAgICBIRUlGSXRlbSAqaXRlbTsKLSAg ICBIRUlGSXRlbSAqKnRpbGVfaXRlbV9saXN0OwotICAgIGludDE2X3QgKnRpbGVfaWRfbGlzdDsK LSAgICB1bnNpZ25lZCAqdGlsZV9pZHhfbGlzdDsKKyAgICBIRUlGSXRlbSogaXRlbTsKKyAgICBI RUlGSXRlbSoqIHRpbGVfaXRlbV9saXN0OworICAgIGludDE2X3QqIHRpbGVfaWRfbGlzdDsKKyAg ICB1bnNpZ25lZCogdGlsZV9pZHhfbGlzdDsKICAgICBpbnQgbmJfdGlsZXM7CiB9IEhFSUZHcmlk OwogCiB0eXBlZGVmIHN0cnVjdCBNT1ZDb250ZXh0IHsKLSAgICBjb25zdCBBVkNsYXNzICpjbGFz czsgLy8vPCBjbGFzcyBmb3IgcHJpdmF0ZSBvcHRpb25zCi0gICAgQVZGb3JtYXRDb250ZXh0ICpm YzsKKyAgICBjb25zdCBBVkNsYXNzKiBjbGFzczsgLy8vPCBjbGFzcyBmb3IgcHJpdmF0ZSBvcHRp b25zCisgICAgQVZGb3JtYXRDb250ZXh0KiBmYzsKICAgICBpbnQgdGltZV9zY2FsZTsKICAgICBp bnQ2NF90IGR1cmF0aW9uOyAgICAgLy8vPCBkdXJhdGlvbiBvZiB0aGUgbG9uZ2VzdCB0cmFjawog ICAgIGludCBmb3VuZF9tb292OyAgICAgICAvLy88ICdtb292JyBhdG9tIGhhcyBiZWVuIGZvdW5k CkBAIC0zMjksMTcgKzMyNSwxNyBAQCB0eXBlZGVmIHN0cnVjdCBNT1ZDb250ZXh0IHsKICAgICBp bnQgZm91bmRfbWRhdDsgICAgICAgLy8vPCAnbWRhdCcgYXRvbSBoYXMgYmVlbiBmb3VuZAogICAg IGludCBmb3VuZF9oZGxyX21kdGE7ICAvLy88ICdoZGxyJyBhdG9tIHdpdGggdHlwZSAnbWR0YScg aGFzIGJlZW4gZm91bmQKICAgICBpbnQgdHJha19pbmRleDsgICAgICAgLy8vPCBJbmRleCBvZiB0 aGUgY3VycmVudCAndHJhaycKLSAgICBjaGFyICoqbWV0YV9rZXlzOworICAgIGNoYXIqKiBtZXRh X2tleXM7CiAgICAgdW5zaWduZWQgbWV0YV9rZXlzX2NvdW50OwotICAgIERWRGVtdXhDb250ZXh0 ICpkdl9kZW11eDsKLSAgICBBVkZvcm1hdENvbnRleHQgKmR2X2ZjdHg7CisgICAgRFZEZW11eENv bnRleHQqIGR2X2RlbXV4OworICAgIEFWRm9ybWF0Q29udGV4dCogZHZfZmN0eDsKICAgICBpbnQg aXNvbTsgICAgICAgICAgICAgLy8vPCAxIGlmIGZpbGUgaXMgSVNPIE1lZGlhIChtcDQvM2dwKQog ICAgIE1PVkZyYWdtZW50IGZyYWdtZW50OyAvLy88IGN1cnJlbnQgZnJhZ21lbnQgaW4gbW9vZiBh dG9tCi0gICAgTU9WVHJhY2tFeHQgKnRyZXhfZGF0YTsKKyAgICBNT1ZUcmFja0V4dCogdHJleF9k YXRhOwogICAgIHVuc2lnbmVkIHRyZXhfY291bnQ7CiAgICAgaW50IGl0dW5lc19tZXRhZGF0YTsg IC8vLzwgbWV0YWRhdGEgYXJlIGl0dW5lcyBzdHlsZQogICAgIGludCBoYW5kYnJha2VfdmVyc2lv bjsKLSAgICBpbnQgKmNoYXB0ZXJfdHJhY2tzOworICAgIGludCogY2hhcHRlcl90cmFja3M7CiAg ICAgdW5zaWduZWQgaW50IG5iX2NoYXB0ZXJfdHJhY2tzOwogICAgIGludCB1c2VfYWJzb2x1dGVf cGF0aDsKICAgICBpbnQgaWdub3JlX2VkaXRsaXN0OwpAQCAtMzUwLDcgKzM0Niw3IEBAIHR5cGVk ZWYgc3RydWN0IE1PVkNvbnRleHQgewogICAgIGludDY0X3QgbmV4dF9yb290X2F0b207IC8vLzwg b2Zmc2V0IG9mIHRoZSBuZXh0IHJvb3QgYXRvbQogICAgIGludCBleHBvcnRfYWxsOwogICAgIGlu dCBleHBvcnRfeG1wOwotICAgIGludCAqYml0cmF0ZXM7ICAgICAgICAgIC8vLzwgYml0cmF0ZXMg cmVhZCBiZWZvcmUgc3RyZWFtcyBjcmVhdGlvbgorICAgIGludCogYml0cmF0ZXM7ICAgICAgICAg IC8vLzwgYml0cmF0ZXMgcmVhZCBiZWZvcmUgc3RyZWFtcyBjcmVhdGlvbgogICAgIGludCBiaXRy YXRlc19jb3VudDsKICAgICBpbnQgbW9vdl9yZXRyeTsKICAgICBpbnQgdXNlX21mcmFfZm9yOwpA QCAtMzYxLDE2ICszNTcsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgTU9WQ29udGV4dCB7CiAgICAgdW5z aWduZWQgaW50IGFheF9tb2RlOyAgLy8vPCAnYWF4JyBmaWxlIGhhcyBiZWVuIGRldGVjdGVkCiAg ICAgdWludDhfdCBmaWxlX2tleVsyMF07CiAgICAgdWludDhfdCBmaWxlX2l2WzIwXTsKLSAgICB2 b2lkICphY3RpdmF0aW9uX2J5dGVzOworICAgIHZvaWQqIGFjdGl2YXRpb25fYnl0ZXM7CiAgICAg aW50IGFjdGl2YXRpb25fYnl0ZXNfc2l6ZTsKLSAgICB2b2lkICphdWRpYmxlX2ZpeGVkX2tleTsK KyAgICB2b2lkKiBhdWRpYmxlX2ZpeGVkX2tleTsKICAgICBpbnQgYXVkaWJsZV9maXhlZF9rZXlf c2l6ZTsKLSAgICB2b2lkICphdWRpYmxlX2tleTsKKyAgICB2b2lkKiBhdWRpYmxlX2tleTsKICAg ICBpbnQgYXVkaWJsZV9rZXlfc2l6ZTsKLSAgICB2b2lkICphdWRpYmxlX2l2OworICAgIHZvaWQq IGF1ZGlibGVfaXY7CiAgICAgaW50IGF1ZGlibGVfaXZfc2l6ZTsKLSAgICBzdHJ1Y3QgQVZBRVMg KmFlc19kZWNyeXB0OwotICAgIHVpbnQ4X3QgKmRlY3J5cHRpb25fa2V5OworICAgIHN0cnVjdCBB VkFFUyogYWVzX2RlY3J5cHQ7CisgICAgdWludDhfdCogZGVjcnlwdGlvbl9rZXk7CiAgICAgaW50 IGRlY3J5cHRpb25fa2V5X2xlbjsKICAgICBpbnQgZW5hYmxlX2RyZWZzOwogICAgIGludDMyX3Qg bW92aWVfZGlzcGxheV9tYXRyaXhbM11bM107IC8vLzwgZGlzcGxheSBtYXRyaXggZnJvbSBtdmhk CkBAIC0zNzksMTggKzM3NSwyMCBAQCB0eXBlZGVmIHN0cnVjdCBNT1ZDb250ZXh0IHsKICAgICB1 aW50MzJfdCBtYXhfc3R0c19kZWx0YTsKICAgICBpbnQgcHJpbWFyeV9pdGVtX2lkOwogICAgIGlu dCBjdXJfaXRlbV9pZDsKLSAgICBIRUlGSXRlbSAqKmhlaWZfaXRlbTsKKyAgICBIRUlGSXRlbSoq IGhlaWZfaXRlbTsKICAgICBpbnQgbmJfaGVpZl9pdGVtOwotICAgIEhFSUZHcmlkICpoZWlmX2dy aWQ7CisgICAgSEVJRkdyaWQqIGhlaWZfZ3JpZDsKICAgICBpbnQgbmJfaGVpZl9ncmlkOworICAg IGludCogdGhtYl9pdGVtX2lkOworICAgIGludCBuYl90aG1iX2l0ZW07CiAgICAgaW50NjRfdCBp ZGF0X29mZnNldDsKICAgICBpbnQgaW50ZXJsZWF2ZWRfcmVhZDsKIH0gTU9WQ29udGV4dDsKIAot aW50IGZmX21wNF9yZWFkX2Rlc2NyX2xlbihBVklPQ29udGV4dCAqcGIpOwotaW50IGZmX21wNF9y ZWFkX2Rlc2NyKHZvaWQgKmxvZ2N0eCwgQVZJT0NvbnRleHQgKnBiLCBpbnQgKnRhZyk7Ci1pbnQg ZmZfbXA0X3JlYWRfZGVjX2NvbmZpZ19kZXNjcih2b2lkICpsb2djdHgsIEFWU3RyZWFtICpzdCwg QVZJT0NvbnRleHQgKnBiKTsKLXZvaWQgZmZfbXA0X3BhcnNlX2VzX2Rlc2NyKEFWSU9Db250ZXh0 ICpwYiwgaW50ICplc19pZCk7CitpbnQgZmZfbXA0X3JlYWRfZGVzY3JfbGVuKEFWSU9Db250ZXh0 KiBwYik7CitpbnQgZmZfbXA0X3JlYWRfZGVzY3Iodm9pZCogbG9nY3R4LCBBVklPQ29udGV4dCog cGIsIGludCogdGFnKTsKK2ludCBmZl9tcDRfcmVhZF9kZWNfY29uZmlnX2Rlc2NyKHZvaWQqIGxv Z2N0eCwgQVZTdHJlYW0qIHN0LCBBVklPQ29udGV4dCogcGIpOwordm9pZCBmZl9tcDRfcGFyc2Vf ZXNfZGVzY3IoQVZJT0NvbnRleHQqIHBiLCBpbnQqIGVzX2lkKTsKIAogI2RlZmluZSBNUDRPRGVz Y3JUYWcgICAgICAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgTVA0SU9EZXNjclRhZyAgICAg ICAgICAgICAgICAgICAweDAyCkBAIC00NTIsMTAgKzQ1MCwxMCBAQCB2b2lkIGZmX21wNF9wYXJz ZV9lc19kZXNjcihBVklPQ29udGV4dCAqcGIsIGludCAqZXNfaWQpOwogICAgICAodGFnKSA9PSBN S1RBRygnQScsICdWJywgJ2knLCAnbicpKQogCiAKLWludCBmZl9tb3ZfcmVhZF9lc2RzKEFWRm9y bWF0Q29udGV4dCAqZmMsIEFWSU9Db250ZXh0ICpwYik7CitpbnQgZmZfbW92X3JlYWRfZXNkcyhB VkZvcm1hdENvbnRleHQqIGZjLCBBVklPQ29udGV4dCogcGIpOwogCi1pbnQgZmZfbW92X3JlYWRf c3RzZF9lbnRyaWVzKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgaW50IGVudHJpZXMp Owotdm9pZCBmZl9tb3Zfd3JpdGVfY2hhbihBVklPQ29udGV4dCAqcGIsIGludDY0X3QgY2hhbm5l bF9sYXlvdXQpOworaW50IGZmX21vdl9yZWFkX3N0c2RfZW50cmllcyhNT1ZDb250ZXh0KiBjLCBB VklPQ29udGV4dCogcGIsIGludCBlbnRyaWVzKTsKK3ZvaWQgZmZfbW92X3dyaXRlX2NoYW4oQVZJ T0NvbnRleHQqIHBiLCBpbnQ2NF90IGNoYW5uZWxfbGF5b3V0KTsKIAogI2RlZmluZSBGRl9NT1Zf RkxBR19NRlJBX0FVVE8gLTEKICNkZWZpbmUgRkZfTU9WX0ZMQUdfTUZSQV9EVFMgMQpAQCAtNDgy LDEyICs0ODAsMTIgQEAgc3RhdGljIGlubGluZSBlbnVtIEFWQ29kZWNJRCBmZl9tb3ZfZ2V0X2xw Y21fY29kZWNfaWQoaW50IGJwcywgaW50IGZsYWdzKQogCiBzdHJ1Y3QgTVA0VHJhY2tLaW5kVmFs dWVNYXBwaW5nIHsKICAgICBpbnQgICAgICAgICBkaXNwb3NpdGlvbjsKLSAgICBjb25zdCBjaGFy ICp2YWx1ZTsKKyAgICBjb25zdCBjaGFyKiB2YWx1ZTsKIH07CiAKIHN0cnVjdCBNUDRUcmFja0tp bmRNYXBwaW5nIHsKLSAgICBjb25zdCBjaGFyICAgKnNjaGVtZV91cmk7Ci0gICAgY29uc3Qgc3Ry dWN0ICBNUDRUcmFja0tpbmRWYWx1ZU1hcHBpbmcgKnZhbHVlX21hcHM7CisgICAgY29uc3QgY2hh ciogc2NoZW1lX3VyaTsKKyAgICBjb25zdCBzdHJ1Y3QgIE1QNFRyYWNrS2luZFZhbHVlTWFwcGlu ZyogdmFsdWVfbWFwczsKIH07CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgTVA0VHJhY2tLaW5kTWFw cGluZyBmZl9tb3ZfdHJhY2tfa2luZF90YWJsZVtdOwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQv bW92LmMgYi9saWJhdmZvcm1hdC9tb3YuYwppbmRleCBkMTliMjEzZmZhLi5lMDA2ZTc3MzM4IDEw MDY0NAotLS0gYS9saWJhdmZvcm1hdC9tb3YuYworKysgYi9saWJhdmZvcm1hdC9tb3YuYwpAQCAt NTEsNyArNTEsNiBAQAogI2luY2x1ZGUgImxpYmF2dXRpbC90aW1lY29kZS5oIgogI2luY2x1ZGUg ImxpYmF2dXRpbC91dWlkLmgiCiAjaW5jbHVkZSAibGliYXZjb2RlYy9hYzN0YWIuaCIKLSNpbmNs dWRlICJsaWJhdmNvZGVjL2V4aWYuaCIKICNpbmNsdWRlICJsaWJhdmNvZGVjL2ZsYWMuaCIKICNp bmNsdWRlICJsaWJhdmNvZGVjL2hldmMvaGV2Yy5oIgogI2luY2x1ZGUgImxpYmF2Y29kZWMvbXBl Z2F1ZGlvZGVjaGVhZGVyLmgiCkBAIC03NywxOSArNzYsMTkgQEAKIAogI2luY2x1ZGUgInF0cGFs ZXR0ZS5oIgogCi0vKiB0aG9zZSBmdW5jdGlvbnMgcGFyc2UgYW4gYXRvbSAqLwotLyogbGlua3Mg YXRvbSBJRHMgdG8gcGFyc2UgZnVuY3Rpb25zICovCisgLyogdGhvc2UgZnVuY3Rpb25zIHBhcnNl IGFuIGF0b20gKi8KKyAvKiBsaW5rcyBhdG9tIElEcyB0byBwYXJzZSBmdW5jdGlvbnMgKi8KIHR5 cGVkZWYgc3RydWN0IE1PVlBhcnNlVGFibGVFbnRyeSB7CiAgICAgdWludDMyX3QgdHlwZTsKLSAg ICBpbnQgKCpwYXJzZSkoTU9WQ29udGV4dCAqY3R4LCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20g YXRvbSk7CisgICAgaW50ICgqcGFyc2UpKE1PVkNvbnRleHQqIGN0eCwgQVZJT0NvbnRleHQqIHBi LCBNT1ZBdG9tIGF0b20pOwogfSBNT1ZQYXJzZVRhYmxlRW50cnk7CiAKLXN0YXRpYyBpbnQgbW92 X3JlYWRfZGVmYXVsdChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRv bSk7Ci1zdGF0aWMgaW50IG1vdl9yZWFkX21mcmEoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQg KmYpOwotc3RhdGljIHZvaWQgbW92X2ZyZWVfc3RyZWFtX2NvbnRleHQoQVZGb3JtYXRDb250ZXh0 ICpzLCBBVlN0cmVhbSAqc3QpOworc3RhdGljIGludCBtb3ZfcmVhZF9kZWZhdWx0KE1PVkNvbnRl eHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKTsKK3N0YXRpYyBpbnQgbW92X3Jl YWRfbWZyYShNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogZik7CitzdGF0aWMgdm9pZCBtb3Zf ZnJlZV9zdHJlYW1fY29udGV4dChBVkZvcm1hdENvbnRleHQqIHMsIEFWU3RyZWFtKiBzdCk7CiAK LXN0YXRpYyBpbnQgbW92X21ldGFkYXRhX3RyYWNrX29yX2Rpc2NfbnVtYmVyKE1PVkNvbnRleHQg KmMsIEFWSU9Db250ZXh0ICpwYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqa2V5KQorc3RhdGljIGludCBtb3Zf bWV0YWRhdGFfdHJhY2tfb3JfZGlzY19udW1iZXIoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQq IHBiLAorICAgIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhcioga2V5KQogewogICAgIGNoYXIgYnVm WzE2XTsKIApAQCAtMTA4LDggKzEwNyw4IEBAIHN0YXRpYyBpbnQgbW92X21ldGFkYXRhX3RyYWNr X29yX2Rpc2NfbnVtYmVyKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwKICAgICByZXR1 cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfbWV0YWRhdGFfaW50OF9ieXBhc3NfcGFkZGluZyhN T1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqa2V5KQorc3RhdGlj IGludCBtb3ZfbWV0YWRhdGFfaW50OF9ieXBhc3NfcGFkZGluZyhNT1ZDb250ZXh0KiBjLCBBVklP Q29udGV4dCogcGIsCisgICAgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyKiBrZXkpCiB7CiAgICAg LyogYnlwYXNzIHBhZGRpbmcgYnl0ZXMgKi8KICAgICBhdmlvX3I4KHBiKTsKQEAgLTEyMiw4ICsx MjEsOCBAQCBzdGF0aWMgaW50IG1vdl9tZXRhZGF0YV9pbnQ4X2J5cGFzc19wYWRkaW5nKE1PVkNv bnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGlu dCBtb3ZfbWV0YWRhdGFfaW50OF9ub19wYWRkaW5nKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0 ICpwYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs ZW4sIGNvbnN0IGNoYXIgKmtleSkKK3N0YXRpYyBpbnQgbW92X21ldGFkYXRhX2ludDhfbm9fcGFk ZGluZyhNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsCisgICAgdW5zaWduZWQgbGVuLCBj b25zdCBjaGFyKiBrZXkpCiB7CiAgICAgYy0+ZmMtPmV2ZW50X2ZsYWdzIHw9IEFWRk1UX0VWRU5U X0ZMQUdfTUVUQURBVEFfVVBEQVRFRDsKICAgICBhdl9kaWN0X3NldF9pbnQoJmMtPmZjLT5tZXRh ZGF0YSwga2V5LCBhdmlvX3I4KHBiKSwgMCk7CkBAIC0xMzEsOCArMTMwLDggQEAgc3RhdGljIGlu dCBtb3ZfbWV0YWRhdGFfaW50OF9ub19wYWRkaW5nKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0 ICpwYiwKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfbWV0YWRhdGFfZ25yZShN T1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqa2V5KQorc3RhdGljIGludCBtb3ZfbWV0YWRh dGFfZ25yZShNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsCisgICAgdW5zaWduZWQgbGVu LCBjb25zdCBjaGFyKiBrZXkpCiB7CiAgICAgc2hvcnQgZ2VucmU7CiAKQEAgLTE0Miw3ICsxNDEs NyBAQCBzdGF0aWMgaW50IG1vdl9tZXRhZGF0YV9nbnJlKE1PVkNvbnRleHQgKmMsIEFWSU9Db250 ZXh0ICpwYiwKICAgICBpZiAoZ2VucmUgPCAxIHx8IGdlbnJlID4gSUQzdjFfR0VOUkVfTUFYKQog ICAgICAgICByZXR1cm4gMDsKICAgICBjLT5mYy0+ZXZlbnRfZmxhZ3MgfD0gQVZGTVRfRVZFTlRf RkxBR19NRVRBREFUQV9VUERBVEVEOwotICAgIGF2X2RpY3Rfc2V0KCZjLT5mYy0+bWV0YWRhdGEs IGtleSwgZmZfaWQzdjFfZ2VucmVfc3RyW2dlbnJlLTFdLCAwKTsKKyAgICBhdl9kaWN0X3NldCgm Yy0+ZmMtPm1ldGFkYXRhLCBrZXksIGZmX2lkM3YxX2dlbnJlX3N0cltnZW5yZSAtIDFdLCAwKTsK IAogICAgIHJldHVybiAwOwogfQpAQCAtMTY2LDExICsxNjUsMTEgQEAgc3RhdGljIGNvbnN0IHVp bnQzMl90IG1hY190b191bmljb2RlWzEyOF0gPSB7CiAgICAgMHgwMEFGLDB4MDJEOCwweDAyRDks MHgwMkRBLDB4MDBCOCwweDAyREQsMHgwMkRCLDB4MDJDNywKIH07CiAKLXN0YXRpYyBpbnQgbW92 X3JlYWRfbWFjX3N0cmluZyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIGludCBsZW4s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZHN0LCBpbnQgZHN0bGVuKQor c3RhdGljIGludCBtb3ZfcmVhZF9tYWNfc3RyaW5nKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0 KiBwYiwgaW50IGxlbiwKKyAgICBjaGFyKiBkc3QsIGludCBkc3RsZW4pCiB7Ci0gICAgY2hhciAq cCA9IGRzdDsKLSAgICBjaGFyICplbmQgPSBkc3QrZHN0bGVuLTE7CisgICAgY2hhciogcCA9IGRz dDsKKyAgICBjaGFyKiBlbmQgPSBkc3QgKyBkc3RsZW4gLSAxOwogICAgIGludCBpOwogCiAgICAg Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CkBAIC0xODIsMjEgKzE4MSwyMSBAQCBzdGF0aWMg aW50IG1vdl9yZWFkX21hY19zdHJpbmcoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBp bnQgbGVuLAogICAgICAgICBpZiAoYyA8IDB4ODApCiAgICAgICAgICAgICAqcCsrID0gYzsKICAg ICAgICAgZWxzZSBpZiAocCA8IGVuZCkKLSAgICAgICAgICAgIFBVVF9VVEY4KG1hY190b191bmlj b2RlW2MtMHg4MF0sIHQsIGlmIChwIDwgZW5kKSAqcCsrID0gdDspOworICAgICAgICAgICAgUFVU X1VURjgobWFjX3RvX3VuaWNvZGVbYyAtIDB4ODBdLCB0LCBpZiAocCA8IGVuZCkgKnArKyA9IHQ7 KTsKICAgICB9CiAgICAgKnAgPSAwOwogICAgIHJldHVybiBwIC0gZHN0OwogfQogCiAvKioKLSAq IEdldCB0aGUgcmVxdWVzdGVkIGl0ZW0uCisgKiBHZXQgdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUg cGFyc2luZyBwcm9jZXNzLgogICovCi1zdGF0aWMgSEVJRkl0ZW0gKmdldF9oZWlmX2l0ZW0oTU9W Q29udGV4dCAqYywgdW5zaWduZWQgaWQpCitzdGF0aWMgSEVJRkl0ZW0qIGhlaWZfY3VyX2l0ZW0o TU9WQ29udGV4dCogYykKIHsKLSAgICBIRUlGSXRlbSAqaXRlbSA9IE5VTEw7CisgICAgSEVJRkl0 ZW0qIGl0ZW0gPSBOVUxMOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjLT5uYl9oZWlmX2l0 ZW07IGkrKykgewotICAgICAgICBpZiAoIWMtPmhlaWZfaXRlbVtpXSB8fCBjLT5oZWlmX2l0ZW1b aV0tPml0ZW1faWQgIT0gaWQpCisgICAgICAgIGlmICghYy0+aGVpZl9pdGVtW2ldIHx8IGMtPmhl aWZfaXRlbVtpXS0+aXRlbV9pZCAhPSBjLT5jdXJfaXRlbV9pZCkKICAgICAgICAgICAgIGNvbnRp bnVlOwogCiAgICAgICAgIGl0ZW0gPSBjLT5oZWlmX2l0ZW1baV07CkBAIC0yMTAsMjggKzIwOSwy OCBAQCBzdGF0aWMgSEVJRkl0ZW0gKmdldF9oZWlmX2l0ZW0oTU9WQ29udGV4dCAqYywgdW5zaWdu ZWQgaWQpCiAgKiBHZXQgdGhlIGN1cnJlbnQgc3RyZWFtIGluIHRoZSBwYXJzaW5nIHByb2Nlc3Mu IFRoaXMgY2FuIGVpdGhlciBiZSB0aGUKICAqIGxhdGVzdCBzdHJlYW0gYWRkZWQgdG8gdGhlIGNv bnRleHQsIG9yIHRoZSBzdHJlYW0gcmVmZXJlbmNlZCBieSBhbiBpdGVtLgogICovCi1zdGF0aWMg QVZTdHJlYW0gKmdldF9jdXJyX3N0KE1PVkNvbnRleHQgKmMpCitzdGF0aWMgQVZTdHJlYW0qIGdl dF9jdXJyX3N0KE1PVkNvbnRleHQqIGMpCiB7Ci0gICAgQVZTdHJlYW0gKnN0ID0gTlVMTDsKLSAg ICBIRUlGSXRlbSAqaXRlbTsKKyAgICBBVlN0cmVhbSogc3QgPSBOVUxMOworICAgIEhFSUZJdGVt KiBpdGVtOwogCiAgICAgaWYgKGMtPmZjLT5uYl9zdHJlYW1zIDwgMSkKICAgICAgICAgcmV0dXJu IE5VTEw7CiAKICAgICBpZiAoYy0+Y3VyX2l0ZW1faWQgPT0gLTEpCi0gICAgICAgIHJldHVybiBj LT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcy0xXTsKKyAgICAgICAgcmV0dXJuIGMtPmZj LT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zIC0gMV07CiAKLSAgICBpdGVtID0gZ2V0X2hlaWZf aXRlbShjLCBjLT5jdXJfaXRlbV9pZCk7CisgICAgaXRlbSA9IGhlaWZfY3VyX2l0ZW0oYyk7CiAg ICAgaWYgKGl0ZW0pCiAgICAgICAgIHN0ID0gaXRlbS0+c3Q7CiAKICAgICByZXR1cm4gc3Q7CiB9 CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfY292cihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIGludCB0eXBlLCBpbnQgbGVuKQorc3RhdGljIGludCBtb3ZfcmVhZF9jb3ZyKE1PVkNvbnRl eHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgaW50IHR5cGUsIGludCBsZW4pCiB7Ci0gICAgQVZTdHJl YW0gKnN0OwotICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjOworICAgIEFWU3RyZWFtKiBzdDsKKyAg ICBNT1ZTdHJlYW1Db250ZXh0KiBzYzsKICAgICBlbnVtIEFWQ29kZWNJRCBpZDsKICAgICBpbnQg cmV0OwogCkBAIC0yNjEsMjMgKzI2MCwyNCBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2NvdnIoTU9W Q29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBpbnQgdHlwZSwgaW50IGxlbikKICAgICBpZiAo c3QtPmF0dGFjaGVkX3BpYy5zaXplID49IDggJiYgaWQgIT0gQVZfQ09ERUNfSURfQk1QKSB7CiAg ICAgICAgIGlmIChBVl9SQjY0KHN0LT5hdHRhY2hlZF9waWMuZGF0YSkgPT0gMHg4OTUwNGU0NzBk MGExYTBhKSB7CiAgICAgICAgICAgICBpZCA9IEFWX0NPREVDX0lEX1BORzsKLSAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlkID0gQVZfQ09E RUNfSURfTUpQRUc7CiAgICAgICAgIH0KICAgICB9Ci0gICAgc3QtPmNvZGVjcGFyLT5jb2RlY19p ZCAgID0gaWQ7CisgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IGlkOwogCiAgICAgcmV0dXJu IDA7CiB9CiAKIC8vIDNHUFAgVFMgMjYuMjQ0Ci1zdGF0aWMgaW50IG1vdl9tZXRhZGF0YV9sb2Np KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgdW5zaWduZWQgbGVuKQorc3RhdGljIGlu dCBtb3ZfbWV0YWRhdGFfbG9jaShNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIHVuc2ln bmVkIGxlbikKIHsKICAgICBjaGFyIGxhbmd1YWdlWzRdID0geyAwIH07CiAgICAgY2hhciBidWZb MjAwXSwgcGxhY2VbMTAwXTsKICAgICB1aW50MTZfdCBsYW5nY29kZSA9IDA7CiAgICAgZG91Ymxl IGxvbmdpdHVkZSwgbGF0aXR1ZGUsIGFsdGl0dWRlOwotICAgIGNvbnN0IGNoYXIgKmtleSA9ICJs b2NhdGlvbiI7CisgICAgY29uc3QgY2hhcioga2V5ID0gImxvY2F0aW9uIjsKIAogICAgIGlmIChs ZW4gPCA0ICsgMiArIDEgKyAxICsgNCArIDQgKyA0KSB7CiAgICAgICAgIGF2X2xvZyhjLT5mYywg QVZfTE9HX0VSUk9SLCAibG9jaSB0b28gc2hvcnRcbiIpOwpAQCAtMjk5LDE1ICsyOTksMTUgQEAg c3RhdGljIGludCBtb3ZfbWV0YWRhdGFfbG9jaShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIHVuc2lnbmVkIGxlbikKIAogICAgIGlmIChsZW4gPCAxMikgewogICAgICAgICBhdl9sb2co Yy0+ZmMsIEFWX0xPR19FUlJPUiwKLSAgICAgICAgICAgICAgICJsb2NpIHRvbyBzaG9ydCAoJXUg Ynl0ZXMgbGVmdCwgbmVlZCBhdCBsZWFzdCAlZClcbiIsIGxlbiwgMTIpOworICAgICAgICAgICAg ImxvY2kgdG9vIHNob3J0ICgldSBieXRlcyBsZWZ0LCBuZWVkIGF0IGxlYXN0ICVkKVxuIiwgbGVu LCAxMik7CiAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogICAgIH0KLSAgICBs b25naXR1ZGUgPSAoKGludDMyX3QpIGF2aW9fcmIzMihwYikpIC8gKGZsb2F0KSAoMSA8PCAxNik7 Ci0gICAgbGF0aXR1ZGUgID0gKChpbnQzMl90KSBhdmlvX3JiMzIocGIpKSAvIChmbG9hdCkgKDEg PDwgMTYpOwotICAgIGFsdGl0dWRlICA9ICgoaW50MzJfdCkgYXZpb19yYjMyKHBiKSkgLyAoZmxv YXQpICgxIDw8IDE2KTsKKyAgICBsb25naXR1ZGUgPSAoKGludDMyX3QpYXZpb19yYjMyKHBiKSkg LyAoZmxvYXQpKDEgPDwgMTYpOworICAgIGxhdGl0dWRlID0gKChpbnQzMl90KWF2aW9fcmIzMihw YikpIC8gKGZsb2F0KSgxIDw8IDE2KTsKKyAgICBhbHRpdHVkZSA9ICgoaW50MzJfdClhdmlvX3Ji MzIocGIpKSAvIChmbG9hdCkoMSA8PCAxNik7CiAKICAgICAvLyBUcnkgdG8gb3V0cHV0IGluIHRo ZSBzYW1lIGZvcm1hdCBhcyB0aGUgP3h5eiBmaWVsZAotICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9m KGJ1ZiksICIlKzA4LjRmJSswOS40ZiIsICBsYXRpdHVkZSwgbG9uZ2l0dWRlKTsKKyAgICBzbnBy aW50ZihidWYsIHNpemVvZihidWYpLCAiJSswOC40ZiUrMDkuNGYiLCBsYXRpdHVkZSwgbG9uZ2l0 dWRlKTsKICAgICBpZiAoYWx0aXR1ZGUpCiAgICAgICAgIGF2X3N0cmxjYXRmKGJ1Ziwgc2l6ZW9m KGJ1ZiksICIlK2YiLCBhbHRpdHVkZSk7CiAgICAgYXZfc3RybGNhdGYoYnVmLCBzaXplb2YoYnVm KSwgIi8lcyIsIHBsYWNlKTsKQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgaW50IG1vdl9tZXRh ZGF0YV9sb2NpKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgdW5zaWduZWQgbGVuKQog ICAgIHJldHVybiBhdl9kaWN0X3NldCgmYy0+ZmMtPm1ldGFkYXRhLCBrZXksIGJ1ZiwgMCk7CiB9 CiAKLXN0YXRpYyBpbnQgbW92X21ldGFkYXRhX2htbXQoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRl eHQgKnBiLCB1bnNpZ25lZCBsZW4pCitzdGF0aWMgaW50IG1vdl9tZXRhZGF0YV9obW10KE1PVkNv bnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgdW5zaWduZWQgbGVuKQogewogICAgIGludCBpLCBu X2htbXQ7CiAKQEAgLTM0MiwxOSArMzQyLDE5IEBAIHN0YXRpYyBpbnQgbW92X21ldGFkYXRhX2ht bXQoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCB1bnNpZ25lZCBsZW4pCiAgICAgcmV0 dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfdWR0YV9zdHJpbmcoTU9WQ29udGV4dCAq YywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX3Vk dGFfc3RyaW5nKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQog ewotICAgIGNoYXIgdG1wX2tleVtBVl9GT1VSQ0NfTUFYX1NUUklOR19TSVpFXSA9IHswfTsKLSAg ICBjaGFyIGtleTJbMzJdLCBsYW5ndWFnZVs0XSA9IHswfTsKLSAgICBjaGFyICpzdHIgPSBOVUxM OwotICAgIGNvbnN0IGNoYXIgKmtleSA9IE5VTEw7CisgICAgY2hhciB0bXBfa2V5W0FWX0ZPVVJD Q19NQVhfU1RSSU5HX1NJWkVdID0geyAwIH07CisgICAgY2hhciBrZXkyWzMyXSwgbGFuZ3VhZ2Vb NF0gPSB7IDAgfTsKKyAgICBjaGFyKiBzdHIgPSBOVUxMOworICAgIGNvbnN0IGNoYXIqIGtleSA9 IE5VTEw7CiAgICAgdWludDE2X3QgbGFuZ2NvZGUgPSAwOwogICAgIHVpbnQzMl90IGRhdGFfdHlw ZSA9IDAsIHN0cl9zaXplX2FsbG9jOwogICAgIHVpbnQ2NF90IHN0cl9zaXplOwogICAgIGludCAo KnBhcnNlKShNT1ZDb250ZXh0KiwgQVZJT0NvbnRleHQqLCB1bnNpZ25lZCwgY29uc3QgY2hhciop ID0gTlVMTDsKICAgICBpbnQgcmF3ID0gMDsKICAgICBpbnQgbnVtID0gMDsKLSAgICBBVkRpY3Rp b25hcnkgKiptZXRhZGF0YTsKKyAgICBBVkRpY3Rpb25hcnkqKiBtZXRhZGF0YTsKIAogICAgIGlm IChjLT50cmFrX2luZGV4ID49IDAgJiYgYy0+dHJha19pbmRleCA8IGMtPmZjLT5uYl9zdHJlYW1z KQogICAgICAgICBtZXRhZGF0YSA9ICZjLT5mYy0+c3RyZWFtc1tjLT50cmFrX2luZGV4XS0+bWV0 YWRhdGE7CkBAIC0zNjIsMTAyICszNjIsMTAxIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfdWR0YV9z dHJpbmcoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAg ICAgIG1ldGFkYXRhID0gJmMtPmZjLT5tZXRhZGF0YTsKIAogICAgIHN3aXRjaCAoYXRvbS50eXBl KSB7Ci0gICAgY2FzZSBNS1RBRyggJ0AnLCdQJywnUicsJ00nKToga2V5ID0gInByZW1pZXJlX3Zl cnNpb24iOyByYXcgPSAxOyBicmVhazsKLSAgICBjYXNlIE1LVEFHKCAnQCcsJ1AnLCdSJywnUScp OiBrZXkgPSAicXVpY2t0aW1lX3ZlcnNpb24iOyByYXcgPSAxOyBicmVhazsKLSAgICBjYXNlIE1L VEFHKCAnWCcsJ00nLCdQJywnXycpOgorICAgIGNhc2UgTUtUQUcoJ0AnLCAnUCcsICdSJywgJ00n KToga2V5ID0gInByZW1pZXJlX3ZlcnNpb24iOyByYXcgPSAxOyBicmVhazsKKyAgICBjYXNlIE1L VEFHKCdAJywgJ1AnLCAnUicsICdRJyk6IGtleSA9ICJxdWlja3RpbWVfdmVyc2lvbiI7IHJhdyA9 IDE7IGJyZWFrOworICAgIGNhc2UgTUtUQUcoJ1gnLCAnTScsICdQJywgJ18nKToKICAgICAgICAg aWYgKGMtPmV4cG9ydF94bXApIHsga2V5ID0gInhtcCI7IHJhdyA9IDE7IH0gYnJlYWs7Ci0gICAg Y2FzZSBNS1RBRyggJ2EnLCdBJywnUicsJ1QnKToga2V5ID0gImFsYnVtX2FydGlzdCI7ICAgIGJy ZWFrOwotICAgIGNhc2UgTUtUQUcoICdhJywnaycsJ0knLCdEJyk6IGtleSA9ICJhY2NvdW50X3R5 cGUiOworICAgIGNhc2UgTUtUQUcoJ2EnLCAnQScsICdSJywgJ1QnKToga2V5ID0gImFsYnVtX2Fy dGlzdCI7ICAgIGJyZWFrOworICAgIGNhc2UgTUtUQUcoJ2EnLCAnaycsICdJJywgJ0QnKToga2V5 ID0gImFjY291bnRfdHlwZSI7CiAgICAgICAgIHBhcnNlID0gbW92X21ldGFkYXRhX2ludDhfbm9f cGFkZGluZzsgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRyggJ2EnLCdwJywnSScsJ0QnKToga2V5ID0g ImFjY291bnRfaWQiOyBicmVhazsKLSAgICBjYXNlIE1LVEFHKCAnYycsJ2EnLCd0JywnZycpOiBr ZXkgPSAiY2F0ZWdvcnkiOyBicmVhazsKLSAgICBjYXNlIE1LVEFHKCAnYycsJ3AnLCdpJywnbCcp OiBrZXkgPSAiY29tcGlsYXRpb24iOworICAgIGNhc2UgTUtUQUcoJ2EnLCAncCcsICdJJywgJ0Qn KToga2V5ID0gImFjY291bnRfaWQiOyBicmVhazsKKyAgICBjYXNlIE1LVEFHKCdjJywgJ2EnLCAn dCcsICdnJyk6IGtleSA9ICJjYXRlZ29yeSI7IGJyZWFrOworICAgIGNhc2UgTUtUQUcoJ2MnLCAn cCcsICdpJywgJ2wnKToga2V5ID0gImNvbXBpbGF0aW9uIjsKICAgICAgICAgcGFyc2UgPSBtb3Zf bWV0YWRhdGFfaW50OF9ub19wYWRkaW5nOyBicmVhazsKLSAgICBjYXNlIE1LVEFHKCAnYycsJ3An LCdyJywndCcpOiBrZXkgPSAiY29weXJpZ2h0IjsgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRyggJ2Qn LCdlJywncycsJ2MnKToga2V5ID0gImRlc2NyaXB0aW9uIjsgYnJlYWs7Ci0gICAgY2FzZSBNS1RB RyggJ2QnLCdpJywncycsJ2snKToga2V5ID0gImRpc2MiOworICAgIGNhc2UgTUtUQUcoJ2MnLCAn cCcsICdyJywgJ3QnKToga2V5ID0gImNvcHlyaWdodCI7IGJyZWFrOworICAgIGNhc2UgTUtUQUco J2QnLCAnZScsICdzJywgJ2MnKToga2V5ID0gImRlc2NyaXB0aW9uIjsgYnJlYWs7CisgICAgY2Fz ZSBNS1RBRygnZCcsICdpJywgJ3MnLCAnaycpOiBrZXkgPSAiZGlzYyI7CiAgICAgICAgIHBhcnNl ID0gbW92X21ldGFkYXRhX3RyYWNrX29yX2Rpc2NfbnVtYmVyOyBicmVhazsKLSAgICBjYXNlIE1L VEFHKCAnZScsJ2cnLCdpJywnZCcpOiBrZXkgPSAiZXBpc29kZV91aWQiOworICAgIGNhc2UgTUtU QUcoJ2UnLCAnZycsICdpJywgJ2QnKToga2V5ID0gImVwaXNvZGVfdWlkIjsKICAgICAgICAgcGFy c2UgPSBtb3ZfbWV0YWRhdGFfaW50OF9ub19wYWRkaW5nOyBicmVhazsKLSAgICBjYXNlIE1LVEFH KCAnRicsJ0knLCdSJywnTScpOiBrZXkgPSAiZmlybXdhcmUiOyByYXcgPSAxOyBicmVhazsKLSAg ICBjYXNlIE1LVEFHKCAnZycsJ24nLCdyJywnZScpOiBrZXkgPSAiZ2VucmUiOworICAgIGNhc2Ug TUtUQUcoJ0YnLCAnSScsICdSJywgJ00nKToga2V5ID0gImZpcm13YXJlIjsgcmF3ID0gMTsgYnJl YWs7CisgICAgY2FzZSBNS1RBRygnZycsICduJywgJ3InLCAnZScpOiBrZXkgPSAiZ2VucmUiOwog ICAgICAgICBwYXJzZSA9IG1vdl9tZXRhZGF0YV9nbnJlOyBicmVhazsKLSAgICBjYXNlIE1LVEFH KCAnaCcsJ2QnLCd2JywnZCcpOiBrZXkgPSAiaGRfdmlkZW8iOworICAgIGNhc2UgTUtUQUcoJ2gn LCAnZCcsICd2JywgJ2QnKToga2V5ID0gImhkX3ZpZGVvIjsKICAgICAgICAgcGFyc2UgPSBtb3Zf bWV0YWRhdGFfaW50OF9ub19wYWRkaW5nOyBicmVhazsKLSAgICBjYXNlIE1LVEFHKCAnSCcsJ00n LCdNJywnVCcpOgorICAgIGNhc2UgTUtUQUcoJ0gnLCAnTScsICdNJywgJ1QnKToKICAgICAgICAg cmV0dXJuIG1vdl9tZXRhZGF0YV9obW10KGMsIHBiLCBhdG9tLnNpemUpOwotICAgIGNhc2UgTUtU QUcoICdrJywnZScsJ3knLCd3Jyk6IGtleSA9ICJrZXl3b3JkcyI7ICBicmVhazsKLSAgICBjYXNl IE1LVEFHKCAnbCcsJ2QnLCdlJywncycpOiBrZXkgPSAic3lub3BzaXMiOyAgYnJlYWs7Ci0gICAg Y2FzZSBNS1RBRyggJ2wnLCdvJywnYycsJ2knKToKKyAgICBjYXNlIE1LVEFHKCdrJywgJ2UnLCAn eScsICd3Jyk6IGtleSA9ICJrZXl3b3JkcyI7ICBicmVhazsKKyAgICBjYXNlIE1LVEFHKCdsJywg J2QnLCAnZScsICdzJyk6IGtleSA9ICJzeW5vcHNpcyI7ICBicmVhazsKKyAgICBjYXNlIE1LVEFH KCdsJywgJ28nLCAnYycsICdpJyk6CiAgICAgICAgIHJldHVybiBtb3ZfbWV0YWRhdGFfbG9jaShj LCBwYiwgYXRvbS5zaXplKTsKLSAgICBjYXNlIE1LVEFHKCAnbScsJ2EnLCduJywndScpOiBrZXkg PSAibWFrZSI7IGJyZWFrOwotICAgIGNhc2UgTUtUQUcoICdtJywnbycsJ2QnLCdsJyk6IGtleSA9 ICJtb2RlbCI7IGJyZWFrOwotICAgIGNhc2UgTUtUQUcoICduJywnYScsJ20nLCdlJyk6IGtleSA9 ICJuYW1lIjsgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRyggJ3AnLCdjJywncycsJ3QnKToga2V5ID0g InBvZGNhc3QiOworICAgIGNhc2UgTUtUQUcoJ20nLCAnYScsICduJywgJ3UnKToga2V5ID0gIm1h a2UiOyBicmVhazsKKyAgICBjYXNlIE1LVEFHKCdtJywgJ28nLCAnZCcsICdsJyk6IGtleSA9ICJt b2RlbCI7IGJyZWFrOworICAgIGNhc2UgTUtUQUcoJ3AnLCAnYycsICdzJywgJ3QnKToga2V5ID0g InBvZGNhc3QiOwogICAgICAgICBwYXJzZSA9IG1vdl9tZXRhZGF0YV9pbnQ4X25vX3BhZGRpbmc7 IGJyZWFrOwotICAgIGNhc2UgTUtUQUcoICdwJywnZycsJ2EnLCdwJyk6IGtleSA9ICJnYXBsZXNz X3BsYXliYWNrIjsKKyAgICBjYXNlIE1LVEFHKCdwJywgJ2cnLCAnYScsICdwJyk6IGtleSA9ICJn YXBsZXNzX3BsYXliYWNrIjsKICAgICAgICAgcGFyc2UgPSBtb3ZfbWV0YWRhdGFfaW50OF9ub19w YWRkaW5nOyBicmVhazsKLSAgICBjYXNlIE1LVEFHKCAncCcsJ3UnLCdyJywnZCcpOiBrZXkgPSAi cHVyY2hhc2VfZGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgTUtUQUcoICdyJywndCcsJ24nLCdnJyk6 IGtleSA9ICJyYXRpbmciOworICAgIGNhc2UgTUtUQUcoJ3AnLCAndScsICdyJywgJ2QnKToga2V5 ID0gInB1cmNoYXNlX2RhdGUiOyBicmVhazsKKyAgICBjYXNlIE1LVEFHKCdyJywgJ3QnLCAnbics ICdnJyk6IGtleSA9ICJyYXRpbmciOwogICAgICAgICBwYXJzZSA9IG1vdl9tZXRhZGF0YV9pbnQ4 X25vX3BhZGRpbmc7IGJyZWFrOwotICAgIGNhc2UgTUtUQUcoICdzJywnbycsJ2EnLCdhJyk6IGtl eSA9ICJzb3J0X2FsYnVtX2FydGlzdCI7IGJyZWFrOwotICAgIGNhc2UgTUtUQUcoICdzJywnbycs J2EnLCdsJyk6IGtleSA9ICJzb3J0X2FsYnVtIjsgICBicmVhazsKLSAgICBjYXNlIE1LVEFHKCAn cycsJ28nLCdhJywncicpOiBrZXkgPSAic29ydF9hcnRpc3QiOyAgYnJlYWs7Ci0gICAgY2FzZSBN S1RBRyggJ3MnLCdvJywnYycsJ28nKToga2V5ID0gInNvcnRfY29tcG9zZXIiOyBicmVhazsKLSAg ICBjYXNlIE1LVEFHKCAncycsJ28nLCduJywnbScpOiBrZXkgPSAic29ydF9uYW1lIjsgICAgYnJl YWs7Ci0gICAgY2FzZSBNS1RBRyggJ3MnLCdvJywncycsJ24nKToga2V5ID0gInNvcnRfc2hvdyI7 ICAgIGJyZWFrOwotICAgIGNhc2UgTUtUQUcoICdzJywndCcsJ2knLCdrJyk6IGtleSA9ICJtZWRp YV90eXBlIjsKKyAgICBjYXNlIE1LVEFHKCdzJywgJ28nLCAnYScsICdhJyk6IGtleSA9ICJzb3J0 X2FsYnVtX2FydGlzdCI7IGJyZWFrOworICAgIGNhc2UgTUtUQUcoJ3MnLCAnbycsICdhJywgJ2wn KToga2V5ID0gInNvcnRfYWxidW0iOyAgIGJyZWFrOworICAgIGNhc2UgTUtUQUcoJ3MnLCAnbycs ICdhJywgJ3InKToga2V5ID0gInNvcnRfYXJ0aXN0IjsgIGJyZWFrOworICAgIGNhc2UgTUtUQUco J3MnLCAnbycsICdjJywgJ28nKToga2V5ID0gInNvcnRfY29tcG9zZXIiOyBicmVhazsKKyAgICBj YXNlIE1LVEFHKCdzJywgJ28nLCAnbicsICdtJyk6IGtleSA9ICJzb3J0X25hbWUiOyAgICBicmVh azsKKyAgICBjYXNlIE1LVEFHKCdzJywgJ28nLCAncycsICduJyk6IGtleSA9ICJzb3J0X3Nob3ci OyAgICBicmVhazsKKyAgICBjYXNlIE1LVEFHKCdzJywgJ3QnLCAnaScsICdrJyk6IGtleSA9ICJt ZWRpYV90eXBlIjsKICAgICAgICAgcGFyc2UgPSBtb3ZfbWV0YWRhdGFfaW50OF9ub19wYWRkaW5n OyBicmVhazsKLSAgICBjYXNlIE1LVEFHKCAndCcsJ3InLCdrJywnbicpOiBrZXkgPSAidHJhY2si OworICAgIGNhc2UgTUtUQUcoJ3QnLCAncicsICdrJywgJ24nKToga2V5ID0gInRyYWNrIjsKICAg ICAgICAgcGFyc2UgPSBtb3ZfbWV0YWRhdGFfdHJhY2tfb3JfZGlzY19udW1iZXI7IGJyZWFrOwot ICAgIGNhc2UgTUtUQUcoICd0JywndicsJ2UnLCduJyk6IGtleSA9ICJlcGlzb2RlX2lkIjsgYnJl YWs7Ci0gICAgY2FzZSBNS1RBRyggJ3QnLCd2JywnZScsJ3MnKToga2V5ID0gImVwaXNvZGVfc29y dCI7CisgICAgY2FzZSBNS1RBRygndCcsICd2JywgJ2UnLCAnbicpOiBrZXkgPSAiZXBpc29kZV9p ZCI7IGJyZWFrOworICAgIGNhc2UgTUtUQUcoJ3QnLCAndicsICdlJywgJ3MnKToga2V5ID0gImVw aXNvZGVfc29ydCI7CiAgICAgICAgIHBhcnNlID0gbW92X21ldGFkYXRhX2ludDhfYnlwYXNzX3Bh ZGRpbmc7IGJyZWFrOwotICAgIGNhc2UgTUtUQUcoICd0JywndicsJ24nLCduJyk6IGtleSA9ICJu ZXR3b3JrIjsgICBicmVhazsKLSAgICBjYXNlIE1LVEFHKCAndCcsJ3YnLCdzJywnaCcpOiBrZXkg PSAic2hvdyI7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRyggJ3QnLCd2JywncycsJ24nKTog a2V5ID0gInNlYXNvbl9udW1iZXIiOworICAgIGNhc2UgTUtUQUcoJ3QnLCAndicsICduJywgJ24n KToga2V5ID0gIm5ldHdvcmsiOyAgIGJyZWFrOworICAgIGNhc2UgTUtUQUcoJ3QnLCAndicsICdz JywgJ2gnKToga2V5ID0gInNob3ciOyAgICAgIGJyZWFrOworICAgIGNhc2UgTUtUQUcoJ3QnLCAn dicsICdzJywgJ24nKToga2V5ID0gInNlYXNvbl9udW1iZXIiOwogICAgICAgICBwYXJzZSA9IG1v dl9tZXRhZGF0YV9pbnQ4X2J5cGFzc19wYWRkaW5nOyBicmVhazsKLSAgICBjYXNlIE1LVEFHKDB4 YTksJ0EnLCdSJywnVCcpOiBrZXkgPSAiYXJ0aXN0IjsgICAgYnJlYWs7Ci0gICAgY2FzZSBNS1RB RygweGE5LCdQJywnUicsJ0QnKToga2V5ID0gInByb2R1Y2VyIjsgIGJyZWFrOwotICAgIGNhc2Ug TUtUQUcoMHhhOSwnYScsJ2wnLCdiJyk6IGtleSA9ICJhbGJ1bSI7ICAgICBicmVhazsKLSAgICBj YXNlIE1LVEFHKDB4YTksJ2EnLCd1JywndCcpOiBrZXkgPSAiYXJ0aXN0IjsgICAgYnJlYWs7Ci0g ICAgY2FzZSBNS1RBRygweGE5LCdjJywnaCcsJ3AnKToga2V5ID0gImNoYXB0ZXIiOyAgIGJyZWFr OwotICAgIGNhc2UgTUtUQUcoMHhhOSwnYycsJ20nLCd0Jyk6IGtleSA9ICJjb21tZW50IjsgICBi cmVhazsKLSAgICBjYXNlIE1LVEFHKDB4YTksJ2MnLCdvJywnbScpOiBrZXkgPSAiY29tcG9zZXIi OyAgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRygweGE5LCdjJywncCcsJ3knKToga2V5ID0gImNvcHly aWdodCI7IGJyZWFrOwotICAgIGNhc2UgTUtUQUcoMHhhOSwnZCcsJ2EnLCd5Jyk6IGtleSA9ICJk YXRlIjsgICAgICBicmVhazsKLSAgICBjYXNlIE1LVEFHKDB4YTksJ2QnLCdpJywncicpOiBrZXkg PSAiZGlyZWN0b3IiOyAgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRygweGE5LCdkJywnaScsJ3MnKTog a2V5ID0gImRpc2NsYWltZXIiOyBicmVhazsKLSAgICBjYXNlIE1LVEFHKDB4YTksJ2UnLCdkJywn MScpOiBrZXkgPSAiZWRpdF9kYXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRygweGE5LCdlJywn bicsJ2MnKToga2V5ID0gImVuY29kZXIiOyAgIGJyZWFrOwotICAgIGNhc2UgTUtUQUcoMHhhOSwn ZicsJ20nLCd0Jyk6IGtleSA9ICJvcmlnaW5hbF9mb3JtYXQiOyBicmVhazsKLSAgICBjYXNlIE1L VEFHKDB4YTksJ2cnLCdlJywnbicpOiBrZXkgPSAiZ2VucmUiOyAgICAgYnJlYWs7Ci0gICAgY2Fz ZSBNS1RBRygweGE5LCdnJywncicsJ3AnKToga2V5ID0gImdyb3VwaW5nIjsgIGJyZWFrOwotICAg IGNhc2UgTUtUQUcoMHhhOSwnaCcsJ3MnLCd0Jyk6IGtleSA9ICJob3N0X2NvbXB1dGVyIjsgYnJl YWs7Ci0gICAgY2FzZSBNS1RBRygweGE5LCdpJywnbicsJ2YnKToga2V5ID0gImNvbW1lbnQiOyAg IGJyZWFrOwotICAgIGNhc2UgTUtUQUcoMHhhOSwnbCcsJ3knLCdyJyk6IGtleSA9ICJseXJpY3Mi OyAgICBicmVhazsKLSAgICBjYXNlIE1LVEFHKDB4YTksJ20nLCdhJywnaycpOiBrZXkgPSAibWFr ZSI7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRygweGE5LCdtJywnbycsJ2QnKToga2V5ID0g Im1vZGVsIjsgICAgIGJyZWFrOwotICAgIGNhc2UgTUtUQUcoMHhhOSwnbicsJ2EnLCdtJyk6IGtl eSA9ICJ0aXRsZSI7ICAgICBicmVhazsKLSAgICBjYXNlIE1LVEFHKDB4YTksJ28nLCdwJywnZScp OiBrZXkgPSAib3JpZ2luYWxfYXJ0aXN0IjsgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRygweGE5LCdw JywncicsJ2QnKToga2V5ID0gInByb2R1Y2VyIjsgIGJyZWFrOwotICAgIGNhc2UgTUtUQUcoMHhh OSwncCcsJ3InLCdmJyk6IGtleSA9ICJwZXJmb3JtZXJzIjsgYnJlYWs7Ci0gICAgY2FzZSBNS1RB RygweGE5LCdyJywnZScsJ3EnKToga2V5ID0gInBsYXliYWNrX3JlcXVpcmVtZW50cyI7IGJyZWFr OwotICAgIGNhc2UgTUtUQUcoMHhhOSwncycsJ3InLCdjJyk6IGtleSA9ICJvcmlnaW5hbF9zb3Vy Y2UiOyBicmVhazsKLSAgICBjYXNlIE1LVEFHKDB4YTksJ3MnLCd0JywnMycpOiBrZXkgPSAic3Vi dGl0bGUiOyAgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRygweGE5LCdzJywndycsJ3InKToga2V5ID0g ImVuY29kZXIiOyAgIGJyZWFrOwotICAgIGNhc2UgTUtUQUcoMHhhOSwndCcsJ28nLCdvJyk6IGtl eSA9ICJlbmNvZGVyIjsgICBicmVhazsKLSAgICBjYXNlIE1LVEFHKDB4YTksJ3QnLCdyJywnaycp OiBrZXkgPSAidHJhY2siOyAgICAgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRygweGE5LCd1Jywncics J2wnKToga2V5ID0gIlVSTCI7ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTUtUQUcoMHhhOSwndycs J3InLCduJyk6IGtleSA9ICJ3YXJuaW5nIjsgICBicmVhazsKLSAgICBjYXNlIE1LVEFHKDB4YTks J3cnLCdyJywndCcpOiBrZXkgPSAiY29tcG9zZXIiOyAgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRygw eGE5LCd4JywneScsJ3onKToga2V5ID0gImxvY2F0aW9uIjsgIGJyZWFrOworICAgIGNhc2UgTUtU QUcoMHhhOSwgJ0EnLCAnUicsICdUJyk6IGtleSA9ICJhcnRpc3QiOyAgICBicmVhazsKKyAgICBj YXNlIE1LVEFHKDB4YTksICdQJywgJ1InLCAnRCcpOiBrZXkgPSAicHJvZHVjZXIiOyAgYnJlYWs7 CisgICAgY2FzZSBNS1RBRygweGE5LCAnYScsICdsJywgJ2InKToga2V5ID0gImFsYnVtIjsgICAg IGJyZWFrOworICAgIGNhc2UgTUtUQUcoMHhhOSwgJ2EnLCAndScsICd0Jyk6IGtleSA9ICJhcnRp c3QiOyAgICBicmVhazsKKyAgICBjYXNlIE1LVEFHKDB4YTksICdjJywgJ2gnLCAncCcpOiBrZXkg PSAiY2hhcHRlciI7ICAgYnJlYWs7CisgICAgY2FzZSBNS1RBRygweGE5LCAnYycsICdtJywgJ3Qn KToga2V5ID0gImNvbW1lbnQiOyAgIGJyZWFrOworICAgIGNhc2UgTUtUQUcoMHhhOSwgJ2MnLCAn bycsICdtJyk6IGtleSA9ICJjb21wb3NlciI7ICBicmVhazsKKyAgICBjYXNlIE1LVEFHKDB4YTks ICdjJywgJ3AnLCAneScpOiBrZXkgPSAiY29weXJpZ2h0IjsgYnJlYWs7CisgICAgY2FzZSBNS1RB RygweGE5LCAnZCcsICdhJywgJ3knKToga2V5ID0gImRhdGUiOyAgICAgIGJyZWFrOworICAgIGNh c2UgTUtUQUcoMHhhOSwgJ2QnLCAnaScsICdyJyk6IGtleSA9ICJkaXJlY3RvciI7ICBicmVhazsK KyAgICBjYXNlIE1LVEFHKDB4YTksICdkJywgJ2knLCAncycpOiBrZXkgPSAiZGlzY2xhaW1lciI7 IGJyZWFrOworICAgIGNhc2UgTUtUQUcoMHhhOSwgJ2UnLCAnZCcsICcxJyk6IGtleSA9ICJlZGl0 X2RhdGUiOyBicmVhazsKKyAgICBjYXNlIE1LVEFHKDB4YTksICdlJywgJ24nLCAnYycpOiBrZXkg PSAiZW5jb2RlciI7ICAgYnJlYWs7CisgICAgY2FzZSBNS1RBRygweGE5LCAnZicsICdtJywgJ3Qn KToga2V5ID0gIm9yaWdpbmFsX2Zvcm1hdCI7IGJyZWFrOworICAgIGNhc2UgTUtUQUcoMHhhOSwg J2cnLCAnZScsICduJyk6IGtleSA9ICJnZW5yZSI7ICAgICBicmVhazsKKyAgICBjYXNlIE1LVEFH KDB4YTksICdnJywgJ3InLCAncCcpOiBrZXkgPSAiZ3JvdXBpbmciOyAgYnJlYWs7CisgICAgY2Fz ZSBNS1RBRygweGE5LCAnaCcsICdzJywgJ3QnKToga2V5ID0gImhvc3RfY29tcHV0ZXIiOyBicmVh azsKKyAgICBjYXNlIE1LVEFHKDB4YTksICdpJywgJ24nLCAnZicpOiBrZXkgPSAiY29tbWVudCI7 ICAgYnJlYWs7CisgICAgY2FzZSBNS1RBRygweGE5LCAnbCcsICd5JywgJ3InKToga2V5ID0gImx5 cmljcyI7ICAgIGJyZWFrOworICAgIGNhc2UgTUtUQUcoMHhhOSwgJ20nLCAnYScsICdrJyk6IGtl eSA9ICJtYWtlIjsgICAgICBicmVhazsKKyAgICBjYXNlIE1LVEFHKDB4YTksICdtJywgJ28nLCAn ZCcpOiBrZXkgPSAibW9kZWwiOyAgICAgYnJlYWs7CisgICAgY2FzZSBNS1RBRygweGE5LCAnbics ICdhJywgJ20nKToga2V5ID0gInRpdGxlIjsgICAgIGJyZWFrOworICAgIGNhc2UgTUtUQUcoMHhh OSwgJ28nLCAncCcsICdlJyk6IGtleSA9ICJvcmlnaW5hbF9hcnRpc3QiOyBicmVhazsKKyAgICBj YXNlIE1LVEFHKDB4YTksICdwJywgJ3InLCAnZCcpOiBrZXkgPSAicHJvZHVjZXIiOyAgYnJlYWs7 CisgICAgY2FzZSBNS1RBRygweGE5LCAncCcsICdyJywgJ2YnKToga2V5ID0gInBlcmZvcm1lcnMi OyBicmVhazsKKyAgICBjYXNlIE1LVEFHKDB4YTksICdyJywgJ2UnLCAncScpOiBrZXkgPSAicGxh eWJhY2tfcmVxdWlyZW1lbnRzIjsgYnJlYWs7CisgICAgY2FzZSBNS1RBRygweGE5LCAncycsICdy JywgJ2MnKToga2V5ID0gIm9yaWdpbmFsX3NvdXJjZSI7IGJyZWFrOworICAgIGNhc2UgTUtUQUco MHhhOSwgJ3MnLCAndCcsICczJyk6IGtleSA9ICJzdWJ0aXRsZSI7ICBicmVhazsKKyAgICBjYXNl IE1LVEFHKDB4YTksICdzJywgJ3cnLCAncicpOiBrZXkgPSAiZW5jb2RlciI7ICAgYnJlYWs7Cisg ICAgY2FzZSBNS1RBRygweGE5LCAndCcsICdvJywgJ28nKToga2V5ID0gImVuY29kZXIiOyAgIGJy ZWFrOworICAgIGNhc2UgTUtUQUcoMHhhOSwgJ3QnLCAncicsICdrJyk6IGtleSA9ICJ0cmFjayI7 ICAgICBicmVhazsKKyAgICBjYXNlIE1LVEFHKDB4YTksICd1JywgJ3InLCAnbCcpOiBrZXkgPSAi VVJMIjsgICAgICAgYnJlYWs7CisgICAgY2FzZSBNS1RBRygweGE5LCAndycsICdyJywgJ24nKTog a2V5ID0gIndhcm5pbmciOyAgIGJyZWFrOworICAgIGNhc2UgTUtUQUcoMHhhOSwgJ3cnLCAncics ICd0Jyk6IGtleSA9ICJjb21wb3NlciI7ICBicmVhazsKKyAgICBjYXNlIE1LVEFHKDB4YTksICd4 JywgJ3knLCAneicpOiBrZXkgPSAibG9jYXRpb24iOyAgYnJlYWs7CiAgICAgfQogcmV0cnk6CiAg ICAgaWYgKGMtPml0dW5lc19tZXRhZGF0YSAmJiBhdG9tLnNpemUgPiA4KSB7CiAgICAgICAgIGlu dCBkYXRhX3NpemUgPSBhdmlvX3JiMzIocGIpOwogICAgICAgICBpbnQgdGFnID0gYXZpb19ybDMy KHBiKTsKLSAgICAgICAgaWYgKHRhZyA9PSBNS1RBRygnZCcsJ2EnLCd0JywnYScpICYmIGRhdGFf c2l6ZSA8PSBhdG9tLnNpemUgJiYgZGF0YV9zaXplID49IDE2KSB7CisgICAgICAgIGlmICh0YWcg PT0gTUtUQUcoJ2QnLCAnYScsICd0JywgJ2EnKSAmJiBkYXRhX3NpemUgPD0gYXRvbS5zaXplICYm IGRhdGFfc2l6ZSA+PSAxNikgewogICAgICAgICAgICAgZGF0YV90eXBlID0gYXZpb19yYjMyKHBi KTsgLy8gdHlwZQogICAgICAgICAgICAgYXZpb19yYjMyKHBiKTsgLy8gdW5rbm93bgogICAgICAg ICAgICAgc3RyX3NpemUgPSBkYXRhX3NpemUgLSAxNjsKQEAgLTQ2NywxMCArNDY2LDExIEBAIHJl dHJ5OgogICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gYXZfYnN3YXAzMihhdG9tLnR5 cGUpOyAvLyBCRSBudW1iZXIgaGFzIGJlZW4gcmVhZCBhcyBMRQogICAgICAgICAgICAgICAgIGlm IChpbmRleCA8IGMtPm1ldGFfa2V5c19jb3VudCAmJiBpbmRleCA+IDApIHsKICAgICAgICAgICAg ICAgICAgICAga2V5ID0gYy0+bWV0YV9rZXlzW2luZGV4XTsKLSAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKGF0b20udHlwZSAhPSBNS1RBRygnYycsICdvJywgJ3YnLCAncicpKSB7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0b20udHlwZSAhPSBNS1RBRygn YycsICdvJywgJ3YnLCAncicpKSB7CiAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywg QVZfTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGluZGV4IG9m ICdkYXRhJyBpcyBvdXQgb2YgcmFuZ2U6ICUiUFJJZDMyIiA8IDEgb3IgPj0gJWQuXG4iLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIGMtPm1ldGFfa2V5c19jb3VudCk7CisgICAg ICAgICAgICAgICAgICAgICAgICAiVGhlIGluZGV4IG9mICdkYXRhJyBpcyBvdXQgb2YgcmFuZ2U6 ICUiUFJJZDMyIiA8IDEgb3IgPj0gJWQuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5k ZXgsIGMtPm1ldGFfa2V5c19jb3VudCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg fQogICAgICAgICAgICAgaWYgKGF0b20udHlwZSA9PSBNS1RBRygnYycsICdvJywgJ3YnLCAncicp IHx8CkBAIC00ODUsOCArNDg1LDEwIEBAIHJldHJ5OgogICAgICAgICAgICAgICAgICAgICBnb3Rv IHJldHJ5OwogICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICB9Ci0gICAg ICAgIH0gZWxzZSByZXR1cm4gMDsKLSAgICB9IGVsc2UgaWYgKGF0b20uc2l6ZSA+IDQgJiYgKGtl eSB8fCBjLT5leHBvcnRfYWxsKSAmJiAhYy0+aXR1bmVzX21ldGFkYXRhICYmICFyYXcpIHsKKyAg ICAgICAgfQorICAgICAgICBlbHNlIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmIChhdG9t LnNpemUgPiA0ICYmIChrZXkgfHwgYy0+ZXhwb3J0X2FsbCkgJiYgIWMtPml0dW5lc19tZXRhZGF0 YSAmJiAhcmF3KSB7CiAgICAgICAgIHN0cl9zaXplID0gYXZpb19yYjE2KHBiKTsgLy8gc3RyaW5n IGxlbmd0aAogICAgICAgICBpZiAoc3RyX3NpemUgPiBhdG9tLnNpemUpIHsKICAgICAgICAgICAg IHJhdyA9IDE7CkBAIC00OTcsNyArNDk5LDggQEAgcmV0cnk6CiAgICAgICAgIGxhbmdjb2RlID0g YXZpb19yYjE2KHBiKTsKICAgICAgICAgZmZfbW92X2xhbmdfdG9faXNvNjM5KGxhbmdjb2RlLCBs YW5ndWFnZSk7CiAgICAgICAgIGF0b20uc2l6ZSAtPSA0OwotICAgIH0gZWxzZQorICAgIH0KKyAg ICBlbHNlCiAgICAgICAgIHN0cl9zaXplID0gYXRvbS5zaXplOwogCiAgICAgaWYgKGMtPmV4cG9y dF9hbGwgJiYgIWtleSkgewpAQCAtNTA2LDcgKzUwOSw3IEBAIHJldHJ5OgogCiAgICAgaWYgKCFr ZXkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChhdG9tLnNpemUgPCAwIHx8IHN0cl9zaXpl ID49IElOVF9NQVgvMikKKyAgICBpZiAoYXRvbS5zaXplIDwgMCB8fCBzdHJfc2l6ZSA+PSBJTlRf TUFYIC8gMikKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAKICAgICAvLyBB bGxvY2F0ZXMgZW5vdWdoIHNwYWNlIGlmIGRhdGFfdHlwZSBpcyBhIGludDMyIG9yIGZsb2F0MzIg bnVtYmVyLCBvdGhlcndpc2UKQEAgLTUyMiwyMyArNTI1LDI1IEBAIHJldHJ5OgogICAgIGVsc2Ug ewogICAgICAgICBpZiAoIXJhdyAmJiAoZGF0YV90eXBlID09IDMgfHwgKGRhdGFfdHlwZSA9PSAw ICYmIChsYW5nY29kZSA8IDB4NDAwIHx8IGxhbmdjb2RlID09IDB4N2ZmZikpKSkgeyAvLyBNQUMg RW5jb2RlZAogICAgICAgICAgICAgbW92X3JlYWRfbWFjX3N0cmluZyhjLCBwYiwgc3RyX3NpemUs IHN0ciwgc3RyX3NpemVfYWxsb2MpOwotICAgICAgICB9IGVsc2UgaWYgKGRhdGFfdHlwZSA9PSAy MSkgeyAvLyBCRSBzaWduZWQgaW50ZWdlciwgdmFyaWFibGUgc2l6ZQorICAgICAgICB9CisgICAg ICAgIGVsc2UgaWYgKGRhdGFfdHlwZSA9PSAyMSkgeyAvLyBCRSBzaWduZWQgaW50ZWdlciwgdmFy aWFibGUgc2l6ZQogICAgICAgICAgICAgaW50IHZhbCA9IDA7CiAgICAgICAgICAgICBpZiAoc3Ry X3NpemUgPT0gMSkKICAgICAgICAgICAgICAgICB2YWwgPSAoaW50OF90KWF2aW9fcjgocGIpOwog ICAgICAgICAgICAgZWxzZSBpZiAoc3RyX3NpemUgPT0gMikKICAgICAgICAgICAgICAgICB2YWwg PSAoaW50MTZfdClhdmlvX3JiMTYocGIpOwogICAgICAgICAgICAgZWxzZSBpZiAoc3RyX3NpemUg PT0gMykKLSAgICAgICAgICAgICAgICB2YWwgPSAoKGludDMyX3QpKGF2aW9fcmIyNChwYik8PDgp KT4+ODsKKyAgICAgICAgICAgICAgICB2YWwgPSAoKGludDMyX3QpKGF2aW9fcmIyNChwYikgPDwg OCkpID4+IDg7CiAgICAgICAgICAgICBlbHNlIGlmIChzdHJfc2l6ZSA9PSA0KQogICAgICAgICAg ICAgICAgIHZhbCA9IChpbnQzMl90KWF2aW9fcmIzMihwYik7CiAgICAgICAgICAgICBpZiAoc25w cmludGYoc3RyLCBzdHJfc2l6ZV9hbGxvYywgIiVkIiwgdmFsKSA+PSBzdHJfc2l6ZV9hbGxvYykg ewogICAgICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0VSUk9SLAotICAgICAgICAg ICAgICAgICAgICAgICAiRmFpbGVkIHRvIHN0b3JlIHRoZSBudW1iZXIgKCVkKSBpbiBzdHJpbmcu XG4iLCB2YWwpOworICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHN0b3JlIHRoZSBudW1i ZXIgKCVkKSBpbiBzdHJpbmcuXG4iLCB2YWwpOwogICAgICAgICAgICAgICAgIGF2X2ZyZWUoc3Ry KTsKICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICAgICAg ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChkYXRhX3R5cGUgPT0gMjIpIHsgLy8gQkUgdW5zaWdu ZWQgaW50ZWdlciwgdmFyaWFibGUgc2l6ZQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRh dGFfdHlwZSA9PSAyMikgeyAvLyBCRSB1bnNpZ25lZCBpbnRlZ2VyLCB2YXJpYWJsZSBzaXplCiAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmFsID0gMDsKICAgICAgICAgICAgIGlmIChzdHJfc2l6 ZSA9PSAxKQogICAgICAgICAgICAgICAgIHZhbCA9IGF2aW9fcjgocGIpOwpAQCAtNTUwLDE5ICs1 NTUsMjEgQEAgcmV0cnk6CiAgICAgICAgICAgICAgICAgdmFsID0gYXZpb19yYjMyKHBiKTsKICAg ICAgICAgICAgIGlmIChzbnByaW50ZihzdHIsIHN0cl9zaXplX2FsbG9jLCAiJXUiLCB2YWwpID49 IHN0cl9zaXplX2FsbG9jKSB7CiAgICAgICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0df RVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gc3RvcmUgdGhlIG51bWJl ciAoJXUpIGluIHN0cmluZy5cbiIsIHZhbCk7CisgICAgICAgICAgICAgICAgICAgICJGYWlsZWQg dG8gc3RvcmUgdGhlIG51bWJlciAoJXUpIGluIHN0cmluZy5cbiIsIHZhbCk7CiAgICAgICAgICAg ICAgICAgYXZfZnJlZShzdHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGRhdGFfdHlwZSA9PSAy MyAmJiBzdHJfc2l6ZSA+PSA0KSB7ICAvLyBCRSBmbG9hdDMyCisgICAgICAgIH0KKyAgICAgICAg ZWxzZSBpZiAoZGF0YV90eXBlID09IDIzICYmIHN0cl9zaXplID49IDQpIHsgIC8vIEJFIGZsb2F0 MzIKICAgICAgICAgICAgIGZsb2F0IHZhbCA9IGF2X2ludDJmbG9hdChhdmlvX3JiMzIocGIpKTsK ICAgICAgICAgICAgIGlmIChzbnByaW50ZihzdHIsIHN0cl9zaXplX2FsbG9jLCAiJWYiLCB2YWwp ID49IHN0cl9zaXplX2FsbG9jKSB7CiAgICAgICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9M T0dfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gc3RvcmUgdGhlIGZs b2F0MzIgbnVtYmVyICglZikgaW4gc3RyaW5nLlxuIiwgdmFsKTsKKyAgICAgICAgICAgICAgICAg ICAgIkZhaWxlZCB0byBzdG9yZSB0aGUgZmxvYXQzMiBudW1iZXIgKCVmKSBpbiBzdHJpbmcuXG4i LCB2YWwpOwogICAgICAgICAgICAgICAgIGF2X2ZyZWUoc3RyKTsKICAgICAgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl IGlmIChkYXRhX3R5cGUgPiAxICYmIGRhdGFfdHlwZSAhPSA0KSB7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZSBpZiAoZGF0YV90eXBlID4gMSAmJiBkYXRhX3R5cGUgIT0gNCkgewogICAgICAgICAg ICAgLy8gZGF0YV90eXBlIGNhbiBiZSAwIGlmIG5vdCBzZXQgYXQgYWxsIGFib3ZlLiBkYXRhX3R5 cGUgMSBtZWFucwogICAgICAgICAgICAgLy8gVVRGOCBhbmQgNCBtZWFucyAiVVRGOCBzb3J0Ii4g Rm9yIGFueSBvdGhlciB0eXBlIChVVEYxNiBvciBlLmcuCiAgICAgICAgICAgICAvLyBhIHBpY3R1 cmUpLCBkb24ndCByZXR1cm4gaXQgYmxpbmRseSBpbiBhIHN0cmluZyB0aGF0IGlzIHN1cHBvc2Vk CkBAIC01NzAsNyArNTc3LDggQEAgcmV0cnk6CiAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFW X0xPR19XQVJOSU5HLCAiU2tpcHBpbmcgdW5oYW5kbGVkIG1ldGFkYXRhICVzIG9mIHR5cGUgJWRc biIsIGtleSwgZGF0YV90eXBlKTsKICAgICAgICAgICAgIGF2X2ZyZWUoc3RyKTsKICAgICAgICAg ICAgIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9CisgICAgICAgIGVsc2Ug ewogICAgICAgICAgICAgaW50IHJldCA9IGZmaW9fcmVhZF9zaXplKHBiLCBzdHIsIHN0cl9zaXpl KTsKICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CiAgICAgICAgICAgICAgICAgYXZfZnJlZShz dHIpOwpAQCAtNTg3LDcgKzU5NSw3IEBAIHJldHJ5OgogICAgICAgICBpZiAoIXN0cmNtcChrZXks ICJlbmNvZGVyIikpIHsKICAgICAgICAgICAgIGludCBtYWpvciwgbWlub3IsIG1pY3JvOwogICAg ICAgICAgICAgaWYgKHNzY2FuZihzdHIsICJIYW5kQnJha2UgJWQuJWQuJWQiLCAmbWFqb3IsICZt aW5vciwgJm1pY3JvKSA9PSAzKSB7Ci0gICAgICAgICAgICAgICAgYy0+aGFuZGJyYWtlX3ZlcnNp b24gPSAxMDAwMDAwKm1ham9yICsgMTAwMCptaW5vciArIG1pY3JvOworICAgICAgICAgICAgICAg IGMtPmhhbmRicmFrZV92ZXJzaW9uID0gMTAwMDAwMCAqIG1ham9yICsgMTAwMCAqIG1pbm9yICsg bWljcm87CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01OTYsMTEgKzYwNCwx MSBAQCByZXRyeToKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9jaHBs KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGlu dCBtb3ZfcmVhZF9jaHBsKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBh dG9tKQogewogICAgIGludDY0X3Qgc3RhcnQ7CiAgICAgaW50IGksIG5iX2NoYXB0ZXJzLCBzdHJf bGVuLCB2ZXJzaW9uOwotICAgIGNoYXIgc3RyWzI1NisxXTsKKyAgICBjaGFyIHN0clsyNTYgKyAx XTsKICAgICBpbnQgcmV0OwogCiAgICAgaWYgKGMtPmlnbm9yZV9jaGFwdGVycykKQEAgLTYyMiwz OSArNjMwLDM5IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfY2hwbChNT1ZDb250ZXh0ICpjLCBBVklP Q29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgc3RhcnQgPSBhdmlvX3JiNjQocGIp OwogICAgICAgICBzdHJfbGVuID0gYXZpb19yOChwYik7CiAKLSAgICAgICAgaWYgKChhdG9tLnNp emUgLT0gOStzdHJfbGVuKSA8IDApCisgICAgICAgIGlmICgoYXRvbS5zaXplIC09IDkgKyBzdHJf bGVuKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICByZXQgPSBmZmlvX3Jl YWRfc2l6ZShwYiwgc3RyLCBzdHJfbGVuKTsKICAgICAgICAgaWYgKHJldCA8IDApCiAgICAgICAg ICAgICByZXR1cm4gcmV0OwogICAgICAgICBzdHJbc3RyX2xlbl0gPSAwOwotICAgICAgICBhdnBy aXZfbmV3X2NoYXB0ZXIoYy0+ZmMsIGksIChBVlJhdGlvbmFsKXsxLDEwMDAwMDAwfSwgc3RhcnQs IEFWX05PUFRTX1ZBTFVFLCBzdHIpOworICAgICAgICBhdnByaXZfbmV3X2NoYXB0ZXIoYy0+ZmMs IGksIChBVlJhdGlvbmFsKSB7IDEsIDEwMDAwMDAwIH0sIHN0YXJ0LCBBVl9OT1BUU19WQUxVRSwg c3RyKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKICNkZWZpbmUgTUlOX0RBVEFfRU5UUllf Qk9YX1NJWkUgMTIKLXN0YXRpYyBpbnQgbW92X3JlYWRfZHJlZihNT1ZDb250ZXh0ICpjLCBBVklP Q29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfZHJlZihNT1ZD b250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBBVlN0cmVh bSAqc3Q7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7CisgICAgQVZTdHJlYW0qIHN0OworICAg IE1PVlN0cmVhbUNvbnRleHQqIHNjOwogICAgIGludCBlbnRyaWVzLCBpLCBqOwogCiAgICAgaWYg KGMtPmZjLT5uYl9zdHJlYW1zIDwgMSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3QgPSBjLT5m Yy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcy0xXTsKKyAgICBzdCA9IGMtPmZjLT5zdHJlYW1z W2MtPmZjLT5uYl9zdHJlYW1zIC0gMV07CiAgICAgc2MgPSBzdC0+cHJpdl9kYXRhOwogCiAgICAg YXZpb19yYjMyKHBiKTsgLy8gdmVyc2lvbiArIGZsYWdzCiAgICAgZW50cmllcyA9IGF2aW9fcmIz MihwYik7CiAgICAgaWYgKCFlbnRyaWVzIHx8Ci0gICAgICAgIGVudHJpZXMgPiAgKGF0b20uc2l6 ZSAtIDEpIC8gTUlOX0RBVEFfRU5UUllfQk9YX1NJWkUgKyAxIHx8CisgICAgICAgIGVudHJpZXMg PiAoYXRvbS5zaXplIC0gMSkgLyBNSU5fREFUQV9FTlRSWV9CT1hfU0laRSArIDEgfHwKICAgICAg ICAgZW50cmllcyA+PSBVSU5UX01BWCAvIHNpemVvZigqc2MtPmRyZWZzKSkKICAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc2MtPmRyZWZz X2NvdW50OyBpKyspIHsKLSAgICAgICAgTU9WRHJlZiAqZHJlZiA9ICZzYy0+ZHJlZnNbaV07Cisg ICAgICAgIE1PVkRyZWYqIGRyZWYgPSAmc2MtPmRyZWZzW2ldOwogICAgICAgICBhdl9mcmVlcCgm ZHJlZi0+cGF0aCk7CiAgICAgICAgIGF2X2ZyZWVwKCZkcmVmLT5kaXIpOwogICAgIH0KQEAgLTY2 Niw3ICs2NzQsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2RyZWYoTU9WQ29udGV4dCAqYywgQVZJ T0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgc2MtPmRyZWZzX2NvdW50ID0gZW50cmll czsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKLSAgICAgICAgTU9WRHJl ZiAqZHJlZiA9ICZzYy0+ZHJlZnNbaV07CisgICAgICAgIE1PVkRyZWYqIGRyZWYgPSAmc2MtPmRy ZWZzW2ldOwogICAgICAgICB1aW50MzJfdCBzaXplID0gYXZpb19yYjMyKHBiKTsKICAgICAgICAg aW50NjRfdCBuZXh0ID0gYXZpb190ZWxsKHBiKTsKIApAQCAtNjc4LDcgKzY4Niw3IEBAIHN0YXRp YyBpbnQgbW92X3JlYWRfZHJlZihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0 b20gYXRvbSkKICAgICAgICAgZHJlZi0+dHlwZSA9IGF2aW9fcmwzMihwYik7CiAgICAgICAgIGF2 aW9fcmIzMihwYik7IC8vIHZlcnNpb24gKyBmbGFncwogCi0gICAgICAgIGlmIChkcmVmLT50eXBl ID09IE1LVEFHKCdhJywnbCcsJ2knLCdzJykgJiYgc2l6ZSA+IDE1MCkgeworICAgICAgICBpZiAo ZHJlZi0+dHlwZSA9PSBNS1RBRygnYScsICdsJywgJ2knLCAncycpICYmIHNpemUgPiAxNTApIHsK ICAgICAgICAgICAgIC8qIG1hY2ludG9zaCBhbGlhcyByZWNvcmQgKi8KICAgICAgICAgICAgIHVp bnQxNl90IHZvbHVtZV9sZW4sIGxlbjsKICAgICAgICAgICAgIGludDE2X3QgdHlwZTsKQEAgLTcw OCw5ICs3MTYsOSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2RyZWYoTU9WQ29udGV4dCAqYywgQVZJ T0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAKICAgICAgICAgICAgIC8qIHJlYWQgbmV4dCBs ZXZlbCB1cF9mcm9tX2FsaWFzL2Rvd25fdG9fdGFyZ2V0ICovCiAgICAgICAgICAgICBkcmVmLT5u bHZsX2Zyb20gPSBhdmlvX3JiMTYocGIpOwotICAgICAgICAgICAgZHJlZi0+bmx2bF90byAgID0g YXZpb19yYjE2KHBiKTsKKyAgICAgICAgICAgIGRyZWYtPm5sdmxfdG8gPSBhdmlvX3JiMTYocGIp OwogICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfREVCVUcsICJubHZsIGZyb20gJWQs IG5sdmwgdG8gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgZHJlZi0+bmx2bF9mcm9tLCBkcmVm LT5ubHZsX3RvKTsKKyAgICAgICAgICAgICAgICBkcmVmLT5ubHZsX2Zyb20sIGRyZWYtPm5sdmxf dG8pOwogCiAgICAgICAgICAgICBhdmlvX3NraXAocGIsIDE2KTsKIApAQCAtNzIwLDExICs3Mjgs MTEgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9kcmVmKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0 ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAgICAgICAgICAgIHR5cGUgPSBhdmlvX3JiMTYocGIp OwogICAgICAgICAgICAgICAgIGxlbiA9IGF2aW9fcmIxNihwYik7CiAgICAgICAgICAgICAgICAg YXZfbG9nKGMtPmZjLCBBVl9MT0dfREVCVUcsICJ0eXBlICVkLCBsZW4gJWRcbiIsIHR5cGUsIGxl bik7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiYxKQorICAgICAgICAgICAgICAgIGlmIChsZW4g JiAxKQogICAgICAgICAgICAgICAgICAgICBsZW4gKz0gMTsKICAgICAgICAgICAgICAgICBpZiAo dHlwZSA9PSAyKSB7IC8vIGFic29sdXRlIHBhdGgKICAgICAgICAgICAgICAgICAgICAgYXZfZnJl ZShkcmVmLT5wYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgZHJlZi0+cGF0aCA9IGF2X21hbGxv Y3oobGVuKzEpOworICAgICAgICAgICAgICAgICAgICBkcmVmLT5wYXRoID0gYXZfbWFsbG9jeihs ZW4gKyAxKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFkcmVmLT5wYXRoKQogICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKIApAQCAtNzM1LDcgKzc0Myw3 IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZHJlZihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICAgICBpZiAobGVuID4gdm9sdW1lX2xlbiAmJiAhc3RybmNtcChkcmVmLT5wYXRoLCBkcmVmLT52 b2x1bWUsIHZvbHVtZV9sZW4pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gdm9s dW1lX2xlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbW1vdmUoZHJlZi0+cGF0aCwgZHJl Zi0+cGF0aCt2b2x1bWVfbGVuLCBsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtbW92 ZShkcmVmLT5wYXRoLCBkcmVmLT5wYXRoICsgdm9sdW1lX2xlbiwgbGVuKTsKICAgICAgICAgICAg ICAgICAgICAgICAgIGRyZWYtPnBhdGhbbGVuXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICAgLy8gdHJpbSBzdHJpbmcgb2YgYW55IGVuZGluZyB6ZXJvcwpA QCAtNzQ5LDkgKzc1NywxMCBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2RyZWYoTU9WQ29udGV4dCAq YywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZHJlZi0+cGF0aFtqXSA9PSAnOicgfHwgZHJlZi0+cGF0aFtqXSA9PSAwKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRyZWYtPnBhdGhbal0gPSAnLyc7CiAgICAgICAgICAgICAg ICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0RFQlVHLCAicGF0aCAlc1xuIiwgZHJlZi0+cGF0 aCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IDApIHsgLy8gZGlyZWN0b3J5 IG5hbWUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9 PSAwKSB7IC8vIGRpcmVjdG9yeSBuYW1lCiAgICAgICAgICAgICAgICAgICAgIGF2X2ZyZWUoZHJl Zi0+ZGlyKTsKLSAgICAgICAgICAgICAgICAgICAgZHJlZi0+ZGlyID0gYXZfbWFsbG9jKGxlbisx KTsKKyAgICAgICAgICAgICAgICAgICAgZHJlZi0+ZGlyID0gYXZfbWFsbG9jKGxlbiArIDEpOwog ICAgICAgICAgICAgICAgICAgICBpZiAoIWRyZWYtPmRpcikKICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiAKQEAgLTc2NSwxMiArNzc0LDE0IEBAIHN0YXRp YyBpbnQgbW92X3JlYWRfZHJlZihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0 b20gYXRvbSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcmVmLT5kaXJbal0gPT0gJzon KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyZWYtPmRpcltqXSA9ICcvJzsKICAgICAg ICAgICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfREVCVUcsICJkaXIgJXNcbiIsIGRy ZWYtPmRpcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYXZpb19za2lwKHBiLCBsZW4p OwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeworICAgICAgICB9CisgICAgICAgIGVs c2UgewogICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfREVCVUcsICJVbmtub3duIGRy ZWYgdHlwZSAweCUwOCJQUkl4MzIiIHNpemUgJSJQUkl1MzIiXG4iLAotICAgICAgICAgICAgICAg ICAgIGRyZWYtPnR5cGUsIHNpemUpOworICAgICAgICAgICAgICAgIGRyZWYtPnR5cGUsIHNpemUp OwogICAgICAgICAgICAgZW50cmllcy0tOwogICAgICAgICAgICAgaS0tOwogICAgICAgICB9CkBA IC03NzksMTMgKzc5MCwxMyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2RyZWYoTU9WQ29udGV4dCAq YywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0 YXRpYyBpbnQgbW92X3JlYWRfaGRscihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1P VkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfaGRscihNT1ZDb250ZXh0KiBjLCBBVklP Q29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBBVlN0cmVhbSAqc3Q7CisgICAgQVZT dHJlYW0qIHN0OwogICAgIHVpbnQzMl90IHR5cGU7CiAgICAgdWludDMyX3QgY3R5cGU7CiAgICAg aW50NjRfdCB0aXRsZV9zaXplOwotICAgIGNoYXIgKnRpdGxlX3N0cjsKKyAgICBjaGFyKiB0aXRs ZV9zdHI7CiAgICAgaW50IHJldDsKIAogICAgIGF2aW9fcjgocGIpOyAvKiB2ZXJzaW9uICovCkBA IC03OTksMjEgKzgxMCwyMSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2hkbHIoTU9WQ29udGV4dCAq YywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgYXZfbG9nKGMtPmZjLCBBVl9M T0dfVFJBQ0UsICJzdHlwZT0lc1xuIiwgYXZfZm91cmNjMnN0cih0eXBlKSk7CiAKICAgICBpZiAo Yy0+dHJha19pbmRleCA8IDApIHsgIC8vIG1ldGEgbm90IGluc2lkZSBhIHRyYWsKLSAgICAgICAg aWYgKHR5cGUgPT0gTUtUQUcoJ20nLCdkJywndCcsJ2EnKSkgeworICAgICAgICBpZiAodHlwZSA9 PSBNS1RBRygnbScsICdkJywgJ3QnLCAnYScpKSB7CiAgICAgICAgICAgICBjLT5mb3VuZF9oZGxy X21kdGEgPSAxOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHN0 ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMtMV07CisgICAgc3QgPSBjLT5mYy0+ c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcyAtIDFdOwogCi0gICAgaWYgICAgICh0eXBlID09IE1L VEFHKCd2JywnaScsJ2QnLCdlJykpCisgICAgaWYgKHR5cGUgPT0gTUtUQUcoJ3YnLCAnaScsICdk JywgJ2UnKSkKICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlID0gQVZNRURJQV9UWVBF X1ZJREVPOwotICAgIGVsc2UgaWYgKHR5cGUgPT0gTUtUQUcoJ3MnLCdvJywndScsJ24nKSkKKyAg ICBlbHNlIGlmICh0eXBlID09IE1LVEFHKCdzJywgJ28nLCAndScsICduJykpCiAgICAgICAgIHN0 LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9BVURJTzsKLSAgICBlbHNlIGlm ICh0eXBlID09IE1LVEFHKCdtJywnMScsJ2EnLCcgJykpCisgICAgZWxzZSBpZiAodHlwZSA9PSBN S1RBRygnbScsICcxJywgJ2EnLCAnICcpKQogICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lk ID0gQVZfQ09ERUNfSURfTVAyOwotICAgIGVsc2UgaWYgKCh0eXBlID09IE1LVEFHKCdzJywndScs J2InLCdwJykpIHx8ICh0eXBlID09IE1LVEFHKCdjJywnbCcsJ2MnLCdwJykpKQorICAgIGVsc2Ug aWYgKCh0eXBlID09IE1LVEFHKCdzJywgJ3UnLCAnYicsICdwJykpIHx8ICh0eXBlID09IE1LVEFH KCdjJywgJ2wnLCAnYycsICdwJykpKQogICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUg PSBBVk1FRElBX1RZUEVfU1VCVElUTEU7CiAKICAgICBhdmlvX3JiMzIocGIpOyAvKiBjb21wb25l bnQgIG1hbnVmYWN0dXJlICovCkBAIC04MjIsNyArODMzLDcgQEAgc3RhdGljIGludCBtb3ZfcmVh ZF9oZGxyKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogCiAg ICAgdGl0bGVfc2l6ZSA9IGF0b20uc2l6ZSAtIDI0OwogICAgIGlmICh0aXRsZV9zaXplID4gMCkg ewotICAgICAgICBpZiAodGl0bGVfc2l6ZSA+IEZGTUlOKElOVF9NQVgsIFNJWkVfTUFYLTEpKQor ICAgICAgICBpZiAodGl0bGVfc2l6ZSA+IEZGTUlOKElOVF9NQVgsIFNJWkVfTUFYIC0gMSkpCiAg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICAgICAgdGl0bGVfc3Ry ID0gYXZfbWFsbG9jKHRpdGxlX3NpemUgKyAxKTsgLyogQWRkIG51bGwgdGVybWluYXRvciAqLwog ICAgICAgICBpZiAoIXRpdGxlX3N0cikKQEAgLTg0NSwyNyArODU2LDI3IEBAIHN0YXRpYyBpbnQg bW92X3JlYWRfaGRscihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRv bSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9lc2RzKE1PVkNvbnRl eHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVh ZF9lc2RzKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewog ICAgIHJldHVybiBmZl9tb3ZfcmVhZF9lc2RzKGMtPmZjLCBwYik7CiB9CiAKLXN0YXRpYyBpbnQg bW92X3JlYWRfZGFjMyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRv bSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfZGFjMyhNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCog cGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBBVlN0cmVhbSAqc3Q7Ci0gICAgQVZQYWNrZXRTaWRl RGF0YSAqc2Q7Ci0gICAgZW51bSBBVkF1ZGlvU2VydmljZVR5cGUgKmFzdDsKKyAgICBBVlN0cmVh bSogc3Q7CisgICAgQVZQYWNrZXRTaWRlRGF0YSogc2Q7CisgICAgZW51bSBBVkF1ZGlvU2Vydmlj ZVR5cGUqIGFzdDsKICAgICBpbnQgYWMzaW5mbywgYWNtb2QsIGxmZW9uLCBic21vZDsKICAgICB1 aW50NjRfdCBtYXNrOwogCiAgICAgaWYgKGMtPmZjLT5uYl9zdHJlYW1zIDwgMSkKICAgICAgICAg cmV0dXJuIDA7Ci0gICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcy0xXTsK KyAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zIC0gMV07CiAKICAgICBz ZCA9IGF2X3BhY2tldF9zaWRlX2RhdGFfbmV3KCZzdC0+Y29kZWNwYXItPmNvZGVkX3NpZGVfZGF0 YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdC0+Y29kZWNwYXItPm5iX2Nv ZGVkX3NpZGVfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX1BLVF9E QVRBX0FVRElPX1NFUlZJQ0VfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZigqYXN0KSwgMCk7CisgICAgICAgICZzdC0+Y29kZWNwYXItPm5iX2NvZGVkX3NpZGVf ZGF0YSwKKyAgICAgICAgQVZfUEtUX0RBVEFfQVVESU9fU0VSVklDRV9UWVBFLAorICAgICAgICBz aXplb2YoKmFzdCksIDApOwogICAgIGlmICghc2QpCiAgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7CiAKQEAgLTg4OSwxNCArOTAwLDE0IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZGFjMyhN T1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKIH0KIAogI2lmIENP TkZJR19JQU1GREVDCi1zdGF0aWMgaW50IG1vdl9yZWFkX2lhY2IoTU9WQ29udGV4dCAqYywgQVZJ T0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX2lhY2IoTU9W Q29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7Ci0gICAgQVZTdHJl YW0gKnN0OwotICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjOworICAgIEFWU3RyZWFtKiBzdDsKKyAg ICBNT1ZTdHJlYW1Db250ZXh0KiBzYzsKICAgICBGRklPQ29udGV4dCBiOwotICAgIEFWSU9Db250 ZXh0ICpkZXNjcmlwdG9yX3BiOwotICAgIEFWRGljdGlvbmFyeSAqbWV0YWRhdGE7Ci0gICAgSUFN RkNvbnRleHQgKmlhbWY7CisgICAgQVZJT0NvbnRleHQqIGRlc2NyaXB0b3JfcGI7CisgICAgQVZE aWN0aW9uYXJ5KiBtZXRhZGF0YTsKKyAgICBJQU1GQ29udGV4dCogaWFtZjsKICAgICBpbnQ2NF90 IHN0YXJ0X3RpbWUsIGR1cmF0aW9uOwogICAgIHVuc2lnbmVkIGRlc2NyaXB0b3JzX3NpemU7CiAg ICAgaW50IG5iX2ZyYW1lcywgZGlzcG9zaXRpb247CkBAIC05MTEsNyArOTIyLDcgQEAgc3RhdGlj IGludCBtb3ZfcmVhZF9pYWNiKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRv bSBhdG9tKQogICAgIHZlcnNpb24gPSBhdmlvX3I4KHBiKTsKICAgICBpZiAodmVyc2lvbiAhPSAx KSB7CiAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0VSUk9SLCAiJXMgY29uZmlndXJhdGlv blZlcnNpb24gJWQiLAotICAgICAgICAgICAgICAgdmVyc2lvbiA8IDEgPyAiaW52YWxpZCIgOiAi dW5zdXBwb3J0ZWQiLCB2ZXJzaW9uKTsKKyAgICAgICAgICAgIHZlcnNpb24gPCAxID8gImludmFs aWQiIDogInVuc3VwcG9ydGVkIiwgdmVyc2lvbik7CiAgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOwogICAgIH0KIApAQCAtOTU2LDkgKzk2Nyw5IEBAIHN0YXRpYyBpbnQgbW92X3Jl YWRfaWFjYihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAg ICBkaXNwb3NpdGlvbiA9IHN0LT5kaXNwb3NpdGlvbjsKIAogICAgIGZvciAoaW50IGkgPSAwOyBp IDwgaWFtZi0+bmJfYXVkaW9fZWxlbWVudHM7IGkrKykgewotICAgICAgICBJQU1GQXVkaW9FbGVt ZW50ICphdWRpb19lbGVtZW50ID0gaWFtZi0+YXVkaW9fZWxlbWVudHNbaV07Ci0gICAgICAgIGNv bnN0IEFWSUFNRkF1ZGlvRWxlbWVudCAqZWxlbWVudDsKLSAgICAgICAgQVZTdHJlYW1Hcm91cCAq c3RnID0KKyAgICAgICAgSUFNRkF1ZGlvRWxlbWVudCogYXVkaW9fZWxlbWVudCA9IGlhbWYtPmF1 ZGlvX2VsZW1lbnRzW2ldOworICAgICAgICBjb25zdCBBVklBTUZBdWRpb0VsZW1lbnQqIGVsZW1l bnQ7CisgICAgICAgIEFWU3RyZWFtR3JvdXAqIHN0ZyA9CiAgICAgICAgICAgICBhdmZvcm1hdF9z dHJlYW1fZ3JvdXBfY3JlYXRlKGMtPmZjLCBBVl9TVFJFQU1fR1JPVVBfUEFSQU1TX0lBTUZfQVVE SU9fRUxFTUVOVCwgTlVMTCk7CiAKICAgICAgICAgaWYgKCFzdGcpIHsKQEAgLTk3MywxNCArOTg0 LDE1IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfaWFjYihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4 dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgYXVkaW9fZWxlbWVudC0+ZWxlbWVudCA9IE5V TEw7CiAKICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhdWRpb19lbGVtZW50LT5uYl9zdWJz dHJlYW1zOyBqKyspIHsKLSAgICAgICAgICAgIElBTUZTdWJTdHJlYW0gKnN1YnN0cmVhbSA9ICZh dWRpb19lbGVtZW50LT5zdWJzdHJlYW1zW2pdOwotICAgICAgICAgICAgQVZTdHJlYW0gKnN0cmVh bTsKKyAgICAgICAgICAgIElBTUZTdWJTdHJlYW0qIHN1YnN0cmVhbSA9ICZhdWRpb19lbGVtZW50 LT5zdWJzdHJlYW1zW2pdOworICAgICAgICAgICAgQVZTdHJlYW0qIHN0cmVhbTsKIAogICAgICAg ICAgICAgaWYgKCFpICYmICFqKSB7CiAgICAgICAgICAgICAgICAgaWYgKGF1ZGlvX2VsZW1lbnQt PmxheWVyc1swXS5zdWJzdHJlYW1fY291bnQgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgZGlz cG9zaXRpb24gJj0gfkFWX0RJU1BPU0lUSU9OX0RFRkFVTFQ7CiAgICAgICAgICAgICAgICAgc3Ry ZWFtID0gc3Q7Ci0gICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgICBzdHJlYW0gPSBhdmZvcm1hdF9uZXdfc3RyZWFtKGMtPmZj LCBOVUxMKTsKICAgICAgICAgICAgIGlmICghc3RyZWFtKSB7CiAgICAgICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUihFTk9NRU0pOwpAQCAtMTAyMyw5ICsxMDM1LDkgQEAgc3RhdGljIGludCBtb3Zf cmVhZF9pYWNiKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQog ICAgIH0KIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWFtZi0+bmJfbWl4X3ByZXNlbnRhdGlv bnM7IGkrKykgewotICAgICAgICBJQU1GTWl4UHJlc2VudGF0aW9uICptaXhfcHJlc2VudGF0aW9u ID0gaWFtZi0+bWl4X3ByZXNlbnRhdGlvbnNbaV07Ci0gICAgICAgIGNvbnN0IEFWSUFNRk1peFBy ZXNlbnRhdGlvbiAqbWl4ID0gbWl4X3ByZXNlbnRhdGlvbi0+Y21peDsKLSAgICAgICAgQVZTdHJl YW1Hcm91cCAqc3RnID0KKyAgICAgICAgSUFNRk1peFByZXNlbnRhdGlvbiogbWl4X3ByZXNlbnRh dGlvbiA9IGlhbWYtPm1peF9wcmVzZW50YXRpb25zW2ldOworICAgICAgICBjb25zdCBBVklBTUZN aXhQcmVzZW50YXRpb24qIG1peCA9IG1peF9wcmVzZW50YXRpb24tPmNtaXg7CisgICAgICAgIEFW U3RyZWFtR3JvdXAqIHN0ZyA9CiAgICAgICAgICAgICBhdmZvcm1hdF9zdHJlYW1fZ3JvdXBfY3Jl YXRlKGMtPmZjLCBBVl9TVFJFQU1fR1JPVVBfUEFSQU1TX0lBTUZfTUlYX1BSRVNFTlRBVElPTiwg TlVMTCk7CiAKICAgICAgICAgaWYgKCFzdGcpIHsKQEAgLTEwNDAsMTUgKzEwNTIsMTUgQEAgc3Rh dGljIGludCBtb3ZfcmVhZF9pYWNiKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9W QXRvbSBhdG9tKQogICAgICAgICBtaXhfcHJlc2VudGF0aW9uLT5taXggPSBOVUxMOwogCiAgICAg ICAgIGZvciAoaW50IGogPSAwOyBqIDwgbWl4LT5uYl9zdWJtaXhlczsgaisrKSB7Ci0gICAgICAg ICAgICBjb25zdCBBVklBTUZTdWJtaXggKnN1Ym1peCA9IG1peC0+c3VibWl4ZXNbal07CisgICAg ICAgICAgICBjb25zdCBBVklBTUZTdWJtaXgqIHN1Ym1peCA9IG1peC0+c3VibWl4ZXNbal07CiAK ICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgc3VibWl4LT5uYl9lbGVtZW50czsgaysr KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQVZJQU1GU3VibWl4RWxlbWVudCAqc3VibWl4X2Vs ZW1lbnQgPSBzdWJtaXgtPmVsZW1lbnRzW2tdOwotICAgICAgICAgICAgICAgIGNvbnN0IEFWU3Ry ZWFtR3JvdXAgKmF1ZGlvX2VsZW1lbnQgPSBOVUxMOworICAgICAgICAgICAgICAgIGNvbnN0IEFW SUFNRlN1Ym1peEVsZW1lbnQqIHN1Ym1peF9lbGVtZW50ID0gc3VibWl4LT5lbGVtZW50c1trXTsK KyAgICAgICAgICAgICAgICBjb25zdCBBVlN0cmVhbUdyb3VwKiBhdWRpb19lbGVtZW50ID0gTlVM TDsKIAogICAgICAgICAgICAgICAgIGZvciAoaW50IGwgPSAwOyBsIDwgYy0+ZmMtPm5iX3N0cmVh bV9ncm91cHM7IGwrKykKICAgICAgICAgICAgICAgICAgICAgaWYgKGMtPmZjLT5zdHJlYW1fZ3Jv dXBzW2xdLT50eXBlID09IEFWX1NUUkVBTV9HUk9VUF9QQVJBTVNfSUFNRl9BVURJT19FTEVNRU5U ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBjLT5mYy0+c3RyZWFtX2dyb3Vwc1tsXS0+aWQg ICA9PSBzdWJtaXhfZWxlbWVudC0+YXVkaW9fZWxlbWVudF9pZCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgYy0+ZmMtPnN0cmVhbV9ncm91cHNbbF0tPmlkID09IHN1Ym1peF9lbGVtZW50LT5h dWRpb19lbGVtZW50X2lkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19lbGVtZW50 ID0gYy0+ZmMtPnN0cmVhbV9ncm91cHNbbF07CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTA3NSw1NiArMTA4NywyMiBAQCBmYWlsOgog fQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfc3JhdChNT1ZDb250ZXh0ICpjLCBBVklP Q29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKLXsKLSAgICBBVlN0cmVhbSAqc3Q7Ci0gICAgaW50 MzJfdCBzYW1wbGVfcmF0ZTsKLQotICAgIGlmIChhdG9tLnNpemUgPCA4IHx8IGMtPmZjLT5uYl9z dHJlYW1zIDwgMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzdCA9IGMtPmZjLT5zdHJlYW1z W2MtPmZjLT5uYl9zdHJlYW1zLTFdOwotICAgIGlmIChzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUg IT0gQVZNRURJQV9UWVBFX0FVRElPKSB7Ci0gICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX1dB Uk5JTkcsICInc3JhdCcgd2l0aGluIG5vbi1hdWRpbyBzYW1wbGUgZW50cnksIHNraXBcbiIpOwot ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoIWMtPmlzb20pIHsKLSAgICAgICAg YXZfbG9nKGMtPmZjLCBBVl9MT0dfV0FSTklORywgIidzcmF0JyB3aXRoaW4gbm9uLWlzb20sIHNr aXBcbiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBhdmlvX3NraXAocGIsIDQp OyAvLyB2ZXJzaW9uK2ZsYWdzCi0gICAgc2FtcGxlX3JhdGUgPSBhdmlvX3JiMzIocGIpOwotICAg IGlmIChzYW1wbGVfcmF0ZSA+IDApIHsKLSAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfREVC VUcsCi0gICAgICAgICAgICAgICAib3ZlcndyaXRlIHNhbXBsZSByYXRlIGZyb20gJWQgdG8gJWQg YnkgJ3NyYXQnXG4iLAotICAgICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5zYW1wbGVfcmF0ZSwg c2FtcGxlX3JhdGUpOwotICAgICAgICBzdC0+Y29kZWNwYXItPnNhbXBsZV9yYXRlID0gc2FtcGxl X3JhdGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfV0FSTklO RywKLSAgICAgICAgICAgICAgICJpZ25vcmUgaW52YWxpZCBzYW1wbGUgcmF0ZSAlZCBpbiAnc3Jh dCdcbiIsIHNhbXBsZV9yYXRlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGlj IGludCBtb3ZfcmVhZF9kZWMzKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRv bSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9kZWMzKE1PVkNvbnRleHQqIGMsIEFWSU9Db250 ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEFWU3RyZWFtICpzdDsKLSAgICBBVlBhY2tl dFNpZGVEYXRhICpzZDsKLSAgICBlbnVtIEFWQXVkaW9TZXJ2aWNlVHlwZSAqYXN0OworICAgIEFW U3RyZWFtKiBzdDsKKyAgICBBVlBhY2tldFNpZGVEYXRhKiBzZDsKKyAgICBlbnVtIEFWQXVkaW9T ZXJ2aWNlVHlwZSogYXN0OwogICAgIGludCBlYWMzaW5mbywgYWNtb2QsIGxmZW9uLCBic21vZDsK ICAgICB1aW50NjRfdCBtYXNrOwogCiAgICAgaWYgKGMtPmZjLT5uYl9zdHJlYW1zIDwgMSkKICAg ICAgICAgcmV0dXJuIDA7Ci0gICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFt cy0xXTsKKyAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zIC0gMV07CiAK ICAgICBzZCA9IGF2X3BhY2tldF9zaWRlX2RhdGFfbmV3KCZzdC0+Y29kZWNwYXItPmNvZGVkX3Np ZGVfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdC0+Y29kZWNwYXIt Pm5iX2NvZGVkX3NpZGVfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFW X1BLVF9EQVRBX0FVRElPX1NFUlZJQ0VfVFlQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZigqYXN0KSwgMCk7CisgICAgICAgICZzdC0+Y29kZWNwYXItPm5iX2NvZGVk X3NpZGVfZGF0YSwKKyAgICAgICAgQVZfUEtUX0RBVEFfQVVESU9fU0VSVklDRV9UWVBFLAorICAg ICAgICBzaXplb2YoKmFzdCksIDApOwogICAgIGlmICghc2QpCiAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7CiAKQEAgLTExMzYsOCArMTExNCw4IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRf ZGVjMyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBh dmlvX3JiMTYocGIpOyAvKiBkYXRhX3JhdGUgYW5kIG51bV9pbmRfc3ViICovCiAgICAgZWFjM2lu Zm8gPSBhdmlvX3JiMjQocGIpOwogICAgIGJzbW9kID0gKGVhYzNpbmZvID4+IDEyKSAmIDB4MWY7 Ci0gICAgYWNtb2QgPSAoZWFjM2luZm8gPj4gIDkpICYgMHg3OwotICAgIGxmZW9uID0gKGVhYzNp bmZvID4+ICA4KSAmIDB4MTsKKyAgICBhY21vZCA9IChlYWMzaW5mbyA+PiA5KSAmIDB4NzsKKyAg ICBsZmVvbiA9IChlYWMzaW5mbyA+PiA4KSAmIDB4MTsKIAogICAgIG1hc2sgPSBmZl9hYzNfY2hh bm5lbF9sYXlvdXRfdGFiW2FjbW9kXTsKICAgICBpZiAobGZlb24pCkBAIC0xMTUyLDExICsxMTMw LDExIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZGVjMyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4 dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3Zf cmVhZF9kZHRzKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQor c3RhdGljIGludCBtb3ZfcmVhZF9kZHRzKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwg TU9WQXRvbSBhdG9tKQogewogI2RlZmluZSBERFRTX1NJWkUgMjAKICAgICB1aW50OF90IGJ1ZltE RFRTX1NJWkUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFXTsKLSAgICBBVlN0cmVhbSAq c3QgPSBOVUxMOworICAgIEFWU3RyZWFtKiBzdCA9IE5VTEw7CiAgICAgdWludDMyX3QgZnJhbWVf ZHVyYXRpb25fY29kZSA9IDA7CiAgICAgdWludDMyX3QgY2hhbm5lbF9sYXlvdXRfY29kZSA9IDA7 CiAgICAgR2V0Qml0Q29udGV4dCBnYjsKQEAgLTExNzAsNyArMTE0OCw3IEBAIHN0YXRpYyBpbnQg bW92X3JlYWRfZGR0cyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRv bSkKICAgICBpZiAoYy0+ZmMtPm5iX3N0cmVhbXMgPCAxKSB7CiAgICAgICAgIHJldHVybiAwOwog ICAgIH0KLSAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zLTFdOworICAg IHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMgLSAxXTsKIAogICAgIHN0LT5j b2RlY3Bhci0+c2FtcGxlX3JhdGUgPSBnZXRfYml0c19sb25nKCZnYiwgMzIpOwogICAgIGlmIChz dC0+Y29kZWNwYXItPnNhbXBsZV9yYXRlIDw9IDApIHsKQEAgLTExODUsMzMgKzExNjMsMzMgQEAg c3RhdGljIGludCBtb3ZfcmVhZF9kZHRzKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwg TU9WQXRvbSBhdG9tKQogICAgIGNoYW5uZWxfbGF5b3V0X2NvZGUgPSBnZXRfYml0cygmZ2IsIDE2 KTsKIAogICAgIHN0LT5jb2RlY3Bhci0+ZnJhbWVfc2l6ZSA9Ci0gICAgICAgICAgICAoZnJhbWVf ZHVyYXRpb25fY29kZSA9PSAwKSA/IDUxMiA6Ci0gICAgICAgICAgICAoZnJhbWVfZHVyYXRpb25f Y29kZSA9PSAxKSA/IDEwMjQgOgotICAgICAgICAgICAgKGZyYW1lX2R1cmF0aW9uX2NvZGUgPT0g MikgPyAyMDQ4IDoKLSAgICAgICAgICAgIChmcmFtZV9kdXJhdGlvbl9jb2RlID09IDMpID8gNDA5 NiA6IDA7CisgICAgICAgIChmcmFtZV9kdXJhdGlvbl9jb2RlID09IDApID8gNTEyIDoKKyAgICAg ICAgKGZyYW1lX2R1cmF0aW9uX2NvZGUgPT0gMSkgPyAxMDI0IDoKKyAgICAgICAgKGZyYW1lX2R1 cmF0aW9uX2NvZGUgPT0gMikgPyAyMDQ4IDoKKyAgICAgICAgKGZyYW1lX2R1cmF0aW9uX2NvZGUg PT0gMykgPyA0MDk2IDogMDsKIAogICAgIGlmIChjaGFubmVsX2xheW91dF9jb2RlID4gMHhmZikg ewogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19XQVJOSU5HLCAiVW5zdXBwb3J0ZWQgRFRT IGF1ZGlvIGNoYW5uZWwgbGF5b3V0XG4iKTsKICAgICB9CiAgICAgYXZfY2hhbm5lbF9sYXlvdXRf dW5pbml0KCZzdC0+Y29kZWNwYXItPmNoX2xheW91dCk7CiAgICAgYXZfY2hhbm5lbF9sYXlvdXRf ZnJvbV9tYXNrKCZzdC0+Y29kZWNwYXItPmNoX2xheW91dCwKLSAgICAgICAgICAgICgoY2hhbm5l bF9sYXlvdXRfY29kZSAmIDB4MSkgPyBBVl9DSF9GUk9OVF9DRU5URVIgOiAwKSB8Ci0gICAgICAg ICAgICAoKGNoYW5uZWxfbGF5b3V0X2NvZGUgJiAweDIpID8gQVZfQ0hfRlJPTlRfTEVGVCA6IDAp IHwKLSAgICAgICAgICAgICgoY2hhbm5lbF9sYXlvdXRfY29kZSAmIDB4MikgPyBBVl9DSF9GUk9O VF9SSUdIVCA6IDApIHwKLSAgICAgICAgICAgICgoY2hhbm5lbF9sYXlvdXRfY29kZSAmIDB4NCkg PyBBVl9DSF9TSURFX0xFRlQgOiAwKSB8Ci0gICAgICAgICAgICAoKGNoYW5uZWxfbGF5b3V0X2Nv ZGUgJiAweDQpID8gQVZfQ0hfU0lERV9SSUdIVCA6IDApIHwKLSAgICAgICAgICAgICgoY2hhbm5l bF9sYXlvdXRfY29kZSAmIDB4OCkgPyBBVl9DSF9MT1dfRlJFUVVFTkNZIDogMCkpOworICAgICAg ICAoKGNoYW5uZWxfbGF5b3V0X2NvZGUgJiAweDEpID8gQVZfQ0hfRlJPTlRfQ0VOVEVSIDogMCkg fAorICAgICAgICAoKGNoYW5uZWxfbGF5b3V0X2NvZGUgJiAweDIpID8gQVZfQ0hfRlJPTlRfTEVG VCA6IDApIHwKKyAgICAgICAgKChjaGFubmVsX2xheW91dF9jb2RlICYgMHgyKSA/IEFWX0NIX0ZS T05UX1JJR0hUIDogMCkgfAorICAgICAgICAoKGNoYW5uZWxfbGF5b3V0X2NvZGUgJiAweDQpID8g QVZfQ0hfU0lERV9MRUZUIDogMCkgfAorICAgICAgICAoKGNoYW5uZWxfbGF5b3V0X2NvZGUgJiAw eDQpID8gQVZfQ0hfU0lERV9SSUdIVCA6IDApIHwKKyAgICAgICAgKChjaGFubmVsX2xheW91dF9j b2RlICYgMHg4KSA/IEFWX0NIX0xPV19GUkVRVUVOQ1kgOiAwKSk7CiAKICAgICByZXR1cm4gMDsK IH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9jaGFuKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0 ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9jaGFuKE1PVkNvbnRleHQq IGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEFWU3RyZWFtICpzdDsK KyAgICBBVlN0cmVhbSogc3Q7CiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0cmVhbXMgPCAxKQogICAg ICAgICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1z LTFdOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMgLSAxXTsKIAog ICAgIGlmIChhdG9tLnNpemUgPCAxNikKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMjI0LDIzICsx MjAyLDIzIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfY2hhbihNT1ZDb250ZXh0ICpjLCBBVklPQ29u dGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBt b3ZfcmVhZF9jaG5sKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9t KQorc3RhdGljIGludCBtb3ZfcmVhZF9jaG5sKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBw YiwgTU9WQXRvbSBhdG9tKQogewogICAgIGludDY0X3QgZW5kID0gYXZfc2F0X2FkZDY0KGF2aW9f dGVsbChwYiksIGF0b20uc2l6ZSk7CiAgICAgaW50IHZlcnNpb24sIGZsYWdzOwogICAgIGludCBy ZXQ7Ci0gICAgQVZTdHJlYW0gKnN0OworICAgIEFWU3RyZWFtKiBzdDsKIAogICAgIGlmIChjLT5m Yy0+bmJfc3RyZWFtcyA8IDEpCiAgICAgICAgIHJldHVybiAwOwotICAgIHN0ID0gYy0+ZmMtPnN0 cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMtMV07CisgICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5m Yy0+bmJfc3RyZWFtcyAtIDFdOwogCiAgICAgdmVyc2lvbiA9IGF2aW9fcjgocGIpOwotICAgIGZs YWdzICAgPSBhdmlvX3JiMjQocGIpOworICAgIGZsYWdzID0gYXZpb19yYjI0KHBiKTsKICAgICBp ZiAodmVyc2lvbiAhPSAwIHx8IGZsYWdzICE9IDApIHsKICAgICAgICAgYXZfbG9nKGMtPmZjLCBB Vl9MT0dfRVJST1IsCi0gICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgJ2NobmwnIGJveCB3aXRo IHZlcnNpb24gJWQsIGZsYWdzOiAlI3giLAotICAgICAgICAgICAgICAgdmVyc2lvbiwgZmxhZ3Mp OworICAgICAgICAgICAgIlVuc3VwcG9ydGVkICdjaG5sJyBib3ggd2l0aCB2ZXJzaW9uICVkLCBm bGFnczogJSN4IiwKKyAgICAgICAgICAgIHZlcnNpb24sIGZsYWdzKTsKICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CiAgICAgfQogCkBAIC0xMjUwLDIwICsxMjI4LDIwIEBAIHN0 YXRpYyBpbnQgbW92X3JlYWRfY2hubChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1P VkF0b20gYXRvbSkKIAogICAgIGlmIChhdmlvX3RlbGwocGIpICE9IGVuZCkgewogICAgICAgICBh dl9sb2coYy0+ZmMsIEFWX0xPR19XQVJOSU5HLCAic2tpcCAlIiBQUklkNjQgIiBieXRlcyBvZiB1 bmtub3duIGRhdGEgaW5zaWRlIGNobmxcbiIsCi0gICAgICAgICAgICAgICAgZW5kIC0gYXZpb190 ZWxsKHBiKSk7CisgICAgICAgICAgICBlbmQgLSBhdmlvX3RlbGwocGIpKTsKICAgICAgICAgYXZp b19zZWVrKHBiLCBlbmQsIFNFRUtfU0VUKTsKICAgICB9CiAgICAgcmV0dXJuIHJldDsKIH0KIAot c3RhdGljIGludCBtb3ZfcmVhZF93ZmV4KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwg TU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF93ZmV4KE1PVkNvbnRleHQqIGMsIEFW SU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEFWU3RyZWFtICpzdDsKKyAgICBB VlN0cmVhbSogc3Q7CiAgICAgaW50IHJldDsKIAogICAgIGlmIChjLT5mYy0+bmJfc3RyZWFtcyA8 IDEpCiAgICAgICAgIHJldHVybiAwOwotICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5i X3N0cmVhbXMtMV07CisgICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcyAt IDFdOwogCiAgICAgaWYgKChyZXQgPSBmZl9nZXRfd2F2X2hlYWRlcihjLT5mYywgcGIsIHN0LT5j b2RlY3BhciwgYXRvbS5zaXplLCAwKSkgPCAwKQogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xP R19XQVJOSU5HLCAiZ2V0X3dhdl9oZWFkZXIgZmFpbGVkXG4iKTsKQEAgLTEyNzEsMjUgKzEyNDks MjUgQEAgc3RhdGljIGludCBtb3ZfcmVhZF93ZmV4KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0 ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIHJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbW92 X3JlYWRfY2xhcChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkK K3N0YXRpYyBpbnQgbW92X3JlYWRfY2xhcChNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIs IE1PVkF0b20gYXRvbSkKIHsKLSAgICBBVlN0cmVhbSAqc3Q7Ci0gICAgSEVJRkl0ZW0gKml0ZW07 Ci0gICAgQVZQYWNrZXRTaWRlRGF0YSAqc2Q7CisgICAgQVZTdHJlYW0qIHN0OworICAgIEhFSUZJ dGVtKiBpdGVtOworICAgIEFWUGFja2V0U2lkZURhdGEqIHNkOwogICAgIGludCB3aWR0aCwgaGVp Z2h0LCBlcnIgPSAwOwogICAgIEFWUmF0aW9uYWwgYXBlcnR1cmVfd2lkdGgsIGFwZXJ0dXJlX2hl aWdodCwgaG9yaXpfb2ZmLCB2ZXJ0X29mZjsKICAgICBBVlJhdGlvbmFsIHBjX3gsIHBjX3k7CiAg ICAgdWludDY0X3QgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0OwogCi0gICAgaXRlbSA9IGdldF9o ZWlmX2l0ZW0oYywgYy0+Y3VyX2l0ZW1faWQpOworICAgIGl0ZW0gPSBoZWlmX2N1cl9pdGVtKGMp OwogICAgIHN0ID0gZ2V0X2N1cnJfc3QoYyk7CiAgICAgaWYgKCFzdCkKICAgICAgICAgcmV0dXJu IDA7CiAKLSAgICB3aWR0aCAgPSBzdC0+Y29kZWNwYXItPndpZHRoOworICAgIHdpZHRoID0gc3Qt PmNvZGVjcGFyLT53aWR0aDsKICAgICBoZWlnaHQgPSBzdC0+Y29kZWNwYXItPmhlaWdodDsKICAg ICBpZiAoKCF3aWR0aCB8fCAhaGVpZ2h0KSAmJiBpdGVtKSB7Ci0gICAgICAgIHdpZHRoICA9IGl0 ZW0tPndpZHRoOworICAgICAgICB3aWR0aCA9IGl0ZW0tPndpZHRoOwogICAgICAgICBoZWlnaHQg PSBpdGVtLT5oZWlnaHQ7CiAgICAgfQogICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkgewpAQCAt MTI5Nyw1NSArMTI3NSw1NSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2NsYXAoTU9WQ29udGV4dCAq YywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgICAgIGdvdG8gZmFpbDsKICAg ICB9CiAKLSAgICBhcGVydHVyZV93aWR0aC5udW0gID0gYXZpb19yYjMyKHBiKTsKLSAgICBhcGVy dHVyZV93aWR0aC5kZW4gID0gYXZpb19yYjMyKHBiKTsKKyAgICBhcGVydHVyZV93aWR0aC5udW0g PSBhdmlvX3JiMzIocGIpOworICAgIGFwZXJ0dXJlX3dpZHRoLmRlbiA9IGF2aW9fcmIzMihwYik7 CiAgICAgYXBlcnR1cmVfaGVpZ2h0Lm51bSA9IGF2aW9fcmIzMihwYik7CiAgICAgYXBlcnR1cmVf aGVpZ2h0LmRlbiA9IGF2aW9fcmIzMihwYik7CiAKICAgICBob3Jpel9vZmYubnVtID0gYXZpb19y YjMyKHBiKTsKICAgICBob3Jpel9vZmYuZGVuID0gYXZpb19yYjMyKHBiKTsKLSAgICB2ZXJ0X29m Zi5udW0gID0gYXZpb19yYjMyKHBiKTsKLSAgICB2ZXJ0X29mZi5kZW4gID0gYXZpb19yYjMyKHBi KTsKKyAgICB2ZXJ0X29mZi5udW0gPSBhdmlvX3JiMzIocGIpOworICAgIHZlcnRfb2ZmLmRlbiA9 IGF2aW9fcmIzMihwYik7CiAKLSAgICBpZiAoYXBlcnR1cmVfd2lkdGgubnVtICA8IDAgfHwgYXBl cnR1cmVfd2lkdGguZGVuICA8IDAgfHwKKyAgICBpZiAoYXBlcnR1cmVfd2lkdGgubnVtIDwgMCB8 fCBhcGVydHVyZV93aWR0aC5kZW4gPCAwIHx8CiAgICAgICAgIGFwZXJ0dXJlX2hlaWdodC5udW0g PCAwIHx8IGFwZXJ0dXJlX2hlaWdodC5kZW4gPCAwIHx8Ci0gICAgICAgIGhvcml6X29mZi5kZW4g ICAgICAgPCAwIHx8IHZlcnRfb2ZmLmRlbiAgICAgICAgPCAwKSB7CisgICAgICAgIGhvcml6X29m Zi5kZW4gPCAwIHx8IHZlcnRfb2ZmLmRlbiA8IDApIHsKICAgICAgICAgZXJyID0gQVZFUlJPUl9J TlZBTElEREFUQTsKICAgICAgICAgZ290byBmYWlsOwogICAgIH0KLSAgICBpZiAoKGF2X2NtcF9x KChBVlJhdGlvbmFsKSB7IHdpZHRoLCAgMSB9LCBhcGVydHVyZV93aWR0aCkgIDwgMCkgfHwKKyAg ICBpZiAoKGF2X2NtcF9xKChBVlJhdGlvbmFsKSB7IHdpZHRoLCAxIH0sIGFwZXJ0dXJlX3dpZHRo KSA8IDApIHx8CiAgICAgICAgIChhdl9jbXBfcSgoQVZSYXRpb25hbCkgeyBoZWlnaHQsIDEgfSwg YXBlcnR1cmVfaGVpZ2h0KSA8IDApKSB7CiAgICAgICAgIGVyciA9IEFWRVJST1JfSU5WQUxJRERB VEE7CiAgICAgICAgIGdvdG8gZmFpbDsKICAgICB9CiAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0df VFJBQ0UsICJjbGFwOiBhcGVydHVyZVdpZHRoICVkLyVkLCBhcGVydHVyZUhlaWdodCAlZC8lZCAi Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3Jpek9mZiAlZC8lZCB2ZXJ0T2Zm ICVkLyVkXG4iLAotICAgICAgICAgICBhcGVydHVyZV93aWR0aC5udW0sIGFwZXJ0dXJlX3dpZHRo LmRlbiwgYXBlcnR1cmVfaGVpZ2h0Lm51bSwgYXBlcnR1cmVfaGVpZ2h0LmRlbiwKLSAgICAgICAg ICAgaG9yaXpfb2ZmLm51bSwgaG9yaXpfb2ZmLmRlbiwgdmVydF9vZmYubnVtLCB2ZXJ0X29mZi5k ZW4pOworICAgICAgICAiaG9yaXpPZmYgJWQvJWQgdmVydE9mZiAlZC8lZFxuIiwKKyAgICAgICAg YXBlcnR1cmVfd2lkdGgubnVtLCBhcGVydHVyZV93aWR0aC5kZW4sIGFwZXJ0dXJlX2hlaWdodC5u dW0sIGFwZXJ0dXJlX2hlaWdodC5kZW4sCisgICAgICAgIGhvcml6X29mZi5udW0sIGhvcml6X29m Zi5kZW4sIHZlcnRfb2ZmLm51bSwgdmVydF9vZmYuZGVuKTsKIAotICAgIHBjX3ggICA9IGF2X211 bF9xKChBVlJhdGlvbmFsKSB7IHdpZHRoICAtIDEsIDEgfSwgKEFWUmF0aW9uYWwpIHsgMSwgMiB9 KTsKLSAgICBwY194ICAgPSBhdl9hZGRfcShwY194LCBob3Jpel9vZmYpOwotICAgIHBjX3kgICA9 IGF2X211bF9xKChBVlJhdGlvbmFsKSB7IGhlaWdodCAtIDEsIDEgfSwgKEFWUmF0aW9uYWwpIHsg MSwgMiB9KTsKLSAgICBwY195ICAgPSBhdl9hZGRfcShwY195LCB2ZXJ0X29mZik7CisgICAgcGNf eCA9IGF2X211bF9xKChBVlJhdGlvbmFsKSB7IHdpZHRoIC0gMSwgMSB9LCAoQVZSYXRpb25hbCkg eyAxLCAyIH0pOworICAgIHBjX3ggPSBhdl9hZGRfcShwY194LCBob3Jpel9vZmYpOworICAgIHBj X3kgPSBhdl9tdWxfcSgoQVZSYXRpb25hbCkgeyBoZWlnaHQgLSAxLCAxIH0sIChBVlJhdGlvbmFs KSB7IDEsIDIgfSk7CisgICAgcGNfeSA9IGF2X2FkZF9xKHBjX3ksIHZlcnRfb2ZmKTsKIAotICAg IGFwZXJ0dXJlX3dpZHRoICA9IGF2X3N1Yl9xKGFwZXJ0dXJlX3dpZHRoLCAgKEFWUmF0aW9uYWwp IHsgMSwgMSB9KTsKLSAgICBhcGVydHVyZV93aWR0aCAgPSBhdl9tdWxfcShhcGVydHVyZV93aWR0 aCwgIChBVlJhdGlvbmFsKSB7IDEsIDIgfSk7CisgICAgYXBlcnR1cmVfd2lkdGggPSBhdl9zdWJf cShhcGVydHVyZV93aWR0aCwgKEFWUmF0aW9uYWwpIHsgMSwgMSB9KTsKKyAgICBhcGVydHVyZV93 aWR0aCA9IGF2X211bF9xKGFwZXJ0dXJlX3dpZHRoLCAoQVZSYXRpb25hbCkgeyAxLCAyIH0pOwog ICAgIGFwZXJ0dXJlX2hlaWdodCA9IGF2X3N1Yl9xKGFwZXJ0dXJlX2hlaWdodCwgKEFWUmF0aW9u YWwpIHsgMSwgMSB9KTsKICAgICBhcGVydHVyZV9oZWlnaHQgPSBhdl9tdWxfcShhcGVydHVyZV9o ZWlnaHQsIChBVlJhdGlvbmFsKSB7IDEsIDIgfSk7CiAKLSAgICBsZWZ0ICAgPSBhdl9xMmQoYXZf c3ViX3EocGNfeCwgYXBlcnR1cmVfd2lkdGgpKTsKLSAgICByaWdodCAgPSBhdl9xMmQoYXZfYWRk X3EocGNfeCwgYXBlcnR1cmVfd2lkdGgpKTsKLSAgICB0b3AgICAgPSBhdl9xMmQoYXZfc3ViX3Eo cGNfeSwgYXBlcnR1cmVfaGVpZ2h0KSk7CisgICAgbGVmdCA9IGF2X3EyZChhdl9zdWJfcShwY194 LCBhcGVydHVyZV93aWR0aCkpOworICAgIHJpZ2h0ID0gYXZfcTJkKGF2X2FkZF9xKHBjX3gsIGFw ZXJ0dXJlX3dpZHRoKSk7CisgICAgdG9wID0gYXZfcTJkKGF2X3N1Yl9xKHBjX3ksIGFwZXJ0dXJl X2hlaWdodCkpOwogICAgIGJvdHRvbSA9IGF2X3EyZChhdl9hZGRfcShwY195LCBhcGVydHVyZV9o ZWlnaHQpKTsKIAogICAgIGlmIChib3R0b20gPiAoaGVpZ2h0IC0gMSkgfHwKLSAgICAgICAgcmln aHQgID4gKHdpZHRoICAtIDEpKSB7CisgICAgICAgIHJpZ2h0ID4gKHdpZHRoIC0gMSkpIHsKICAg ICAgICAgZXJyID0gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICAgICAgZ290byBmYWlsOwogICAg IH0KIAogICAgIGJvdHRvbSA9IGhlaWdodCAtIDEgLSBib3R0b207Ci0gICAgcmlnaHQgID0gd2lk dGggIC0gMSAtIHJpZ2h0OworICAgIHJpZ2h0ID0gd2lkdGggLSAxIC0gcmlnaHQ7CiAKICAgICBp ZiAoIShsZWZ0IHwgcmlnaHQgfCB0b3AgfCBib3R0b20pKQogICAgICAgICByZXR1cm4gMDsKQEAg LTEzNTcsMTUgKzEzMzUsMTUgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9jbGFwKE1PVkNvbnRleHQg KmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIH0KIAogICAgIHNkID0gYXZf cGFja2V0X3NpZGVfZGF0YV9uZXcoJnN0LT5jb2RlY3Bhci0+Y29kZWRfc2lkZV9kYXRhLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0LT5jb2RlY3Bhci0+bmJfY29kZWRfc2lk ZV9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfUEtUX0RBVEFfRlJB TUVfQ1JPUFBJTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodWlu dDMyX3QpICogNCwgMCk7CisgICAgICAgICZzdC0+Y29kZWNwYXItPm5iX2NvZGVkX3NpZGVfZGF0 YSwKKyAgICAgICAgQVZfUEtUX0RBVEFfRlJBTUVfQ1JPUFBJTkcsCisgICAgICAgIHNpemVvZih1 aW50MzJfdCkgKiA0LCAwKTsKICAgICBpZiAoIXNkKQogICAgICAgICByZXR1cm4gQVZFUlJPUihF Tk9NRU0pOwogCi0gICAgQVZfV0wzMkEoc2QtPmRhdGEsICAgICAgdG9wKTsKLSAgICBBVl9XTDMy QShzZC0+ZGF0YSArIDQsICBib3R0b20pOwotICAgIEFWX1dMMzJBKHNkLT5kYXRhICsgOCwgIGxl ZnQpOworICAgIEFWX1dMMzJBKHNkLT5kYXRhLCB0b3ApOworICAgIEFWX1dMMzJBKHNkLT5kYXRh ICsgNCwgYm90dG9tKTsKKyAgICBBVl9XTDMyQShzZC0+ZGF0YSArIDgsIGxlZnQpOwogICAgIEFW X1dMMzJBKHNkLT5kYXRhICsgMTIsIHJpZ2h0KTsKIAogZmFpbDoKQEAgLTEzODAsMTYgKzEzNTgs MTYgQEAgZmFpbDoKIH0KIAogLyogVGhpcyBhdG9tIG92ZXJyaWRlcyBhbnkgcHJldmlvdXNseSBz ZXQgYXNwZWN0IHJhdGlvICovCi1zdGF0aWMgaW50IG1vdl9yZWFkX3Bhc3AoTU9WQ29udGV4dCAq YywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX3Bh c3AoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7CiAgICAg Y29uc3QgaW50IG51bSA9IGF2aW9fcmIzMihwYik7CiAgICAgY29uc3QgaW50IGRlbiA9IGF2aW9f cmIzMihwYik7Ci0gICAgQVZTdHJlYW0gKnN0OwotICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjOwor ICAgIEFWU3RyZWFtKiBzdDsKKyAgICBNT1ZTdHJlYW1Db250ZXh0KiBzYzsKIAogICAgIGlmIChj LT5mYy0+bmJfc3RyZWFtcyA8IDEpCiAgICAgICAgIHJldHVybiAwOwotICAgIHN0ID0gYy0+ZmMt PnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMtMV07CisgICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tj LT5mYy0+bmJfc3RyZWFtcyAtIDFdOwogICAgIHNjID0gc3QtPnByaXZfZGF0YTsKIAogICAgIGF2 X2xvZyhjLT5mYywgQVZfTE9HX1RSQUNFLCAicGFzcDogaFNwYWNpbmcgJWQsIHZTcGFjaW5nICVk XG4iLCBudW0sIGRlbik7CkBAIC0xNDAyLDE3ICsxMzgwLDE3IEBAIHN0YXRpYyBpbnQgbW92X3Jl YWRfcGFzcChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKIH0K IAogLyogdGhpcyBhdG9tIGNvbnRhaW5zIGFjdHVhbCBtZWRpYSBkYXRhICovCi1zdGF0aWMgaW50 IG1vdl9yZWFkX21kYXQoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0 b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX21kYXQoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQq IHBiLCBNT1ZBdG9tIGF0b20pCiB7CiAgICAgaWYgKGF0b20uc2l6ZSA9PSAwKSAvKiB3cm9uZyBv bmUgKE1QNCkgKi8KICAgICAgICAgcmV0dXJuIDA7Ci0gICAgYy0+Zm91bmRfbWRhdD0xOworICAg IGMtPmZvdW5kX21kYXQgPSAxOwogICAgIHJldHVybiAwOyAvKiBub3cgZ28gZm9yIG1vb3YgKi8K IH0KIAogI2RlZmluZSBEUk1fQkxPQl9TSVpFIDU2CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfYWRy bShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBp bnQgbW92X3JlYWRfYWRybShNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20g YXRvbSkKIHsKICAgICB1aW50OF90IGludGVybWVkaWF0ZV9rZXlbMjBdOwogICAgIHVpbnQ4X3Qg aW50ZXJtZWRpYXRlX2l2WzIwXTsKQEAgLTE0MjEsMTEgKzEzOTksMTEgQEAgc3RhdGljIGludCBt b3ZfcmVhZF9hZHJtKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9t KQogICAgIHVpbnQ4X3QgZmlsZV9jaGVja3N1bVsyMF07CiAgICAgdWludDhfdCBjYWxjdWxhdGVk X2NoZWNrc3VtWzIwXTsKICAgICBjaGFyIGNoZWNrc3VtX3N0cmluZ1syICogc2l6ZW9mKGZpbGVf Y2hlY2tzdW0pICsgMV07Ci0gICAgc3RydWN0IEFWU0hBICpzaGE7CisgICAgc3RydWN0IEFWU0hB KiBzaGE7CiAgICAgaW50IGk7CiAgICAgaW50IHJldCA9IDA7Ci0gICAgdWludDhfdCAqYWN0aXZh dGlvbl9ieXRlcyA9IGMtPmFjdGl2YXRpb25fYnl0ZXM7Ci0gICAgdWludDhfdCAqZml4ZWRfa2V5 ID0gYy0+YXVkaWJsZV9maXhlZF9rZXk7CisgICAgdWludDhfdCogYWN0aXZhdGlvbl9ieXRlcyA9 IGMtPmFjdGl2YXRpb25fYnl0ZXM7CisgICAgdWludDhfdCogZml4ZWRfa2V5ID0gYy0+YXVkaWJs ZV9maXhlZF9rZXk7CiAKICAgICBjLT5hYXhfbW9kZSA9IDE7CiAKQEAgLTE1MTMsNyArMTQ5MSw3 IEBAIGZhaWw6CiAgICAgcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtb3ZfYWF4Y19jcnlw dG8oTU9WQ29udGV4dCAqYykKK3N0YXRpYyBpbnQgbW92X2FheGNfY3J5cHRvKE1PVkNvbnRleHQq IGMpCiB7CiAgICAgaWYgKGMtPmF1ZGlibGVfa2V5X3NpemUgIT0gMTYpIHsKICAgICAgICAgYXZf bG9nKGMtPmZjLCBBVl9MT0dfRkFUQUwsICJbYWF4Y10gYXVkaWJsZV9rZXkgdmFsdWUgbmVlZHMg dG8gYmUgMTYgYnl0ZXMhXG4iKTsKQEAgLTE1MzgsNyArMTUxNiw3IEBAIHN0YXRpYyBpbnQgbW92 X2FheGNfY3J5cHRvKE1PVkNvbnRleHQgKmMpCiB9CiAKIC8vIEF1ZGlibGUgQUFYIChhbmQgQUFY KykgYnl0ZXN0cmVhbSBkZWNyeXB0aW9uCi1zdGF0aWMgaW50IGFheF9maWx0ZXIodWludDhfdCAq aW5wdXQsIGludCBzaXplLCBNT1ZDb250ZXh0ICpjKQorc3RhdGljIGludCBhYXhfZmlsdGVyKHVp bnQ4X3QqIGlucHV0LCBpbnQgc2l6ZSwgTU9WQ29udGV4dCogYykKIHsKICAgICBpbnQgYmxvY2tz ID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIGl2WzE2XTsKQEAgLTE1NTIsMTIgKzE1MzAsMTIgQEAg c3RhdGljIGludCBhYXhfZmlsdGVyKHVpbnQ4X3QgKmlucHV0LCBpbnQgc2l6ZSwgTU9WQ29udGV4 dCAqYykKIH0KIAogLyogcmVhZCBtYWpvciBicmFuZCwgbWlub3IgdmVyc2lvbiBhbmQgY29tcGF0 aWJsZSBicmFuZHMgYW5kIHN0b3JlIHRoZW0gYXMgbWV0YWRhdGEgKi8KLXN0YXRpYyBpbnQgbW92 X3JlYWRfZnR5cChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkK K3N0YXRpYyBpbnQgbW92X3JlYWRfZnR5cChNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIs IE1PVkF0b20gYXRvbSkKIHsKICAgICB1aW50MzJfdCBtaW5vcl92ZXI7CiAgICAgaW50IGNvbXBf YnJhbmRfc2l6ZTsKICAgICBjaGFyKiBjb21wX2JyYW5kc19zdHI7Ci0gICAgdWludDhfdCB0eXBl WzVdID0gezB9OworICAgIHVpbnQ4X3QgdHlwZVs1XSA9IHsgMCB9OwogICAgIGludCByZXQgPSBm ZmlvX3JlYWRfc2l6ZShwYiwgdHlwZSwgNCk7CiAgICAgaWYgKHJldCA8IDApCiAgICAgICAgIHJl dHVybiByZXQ7CkBAIC0xNTcwLDcgKzE1NDgsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2Z0eXAo TU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAKICAgICBpZiAo c3RyY21wKHR5cGUsICJxdCAgIikpCiAgICAgICAgIGMtPmlzb20gPSAxOwotICAgIGF2X2xvZyhj LT5mYywgQVZfTE9HX0RFQlVHLCAiSVNPOiBGaWxlIFR5cGUgTWFqb3IgQnJhbmQ6ICUuNHNcbiIs KGNoYXIgKikmdHlwZSk7CisgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfREVCVUcsICJJU086IEZp bGUgVHlwZSBNYWpvciBCcmFuZDogJS40c1xuIiwgKGNoYXIqKSZ0eXBlKTsKICAgICBhdl9kaWN0 X3NldCgmYy0+ZmMtPm1ldGFkYXRhLCAibWFqb3JfYnJhbmQiLCB0eXBlLCAwKTsKICAgICBtaW5v cl92ZXIgPSBhdmlvX3JiMzIocGIpOyAvKiBtaW5vciB2ZXJzaW9uICovCiAgICAgYXZfZGljdF9z ZXRfaW50KCZjLT5mYy0+bWV0YWRhdGEsICJtaW5vcl92ZXJzaW9uIiwgbWlub3JfdmVyLCAwKTsK QEAgLTE1ODksNyArMTU2Nyw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZnR5cChNT1ZDb250ZXh0 ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICB9CiAgICAgY29tcF9icmFu ZHNfc3RyW2NvbXBfYnJhbmRfc2l6ZV0gPSAwOwogICAgIGF2X2RpY3Rfc2V0KCZjLT5mYy0+bWV0 YWRhdGEsICJjb21wYXRpYmxlX2JyYW5kcyIsCi0gICAgICAgICAgICAgICAgY29tcF9icmFuZHNf c3RyLCBBVl9ESUNUX0RPTlRfU1RSRFVQX1ZBTCk7CisgICAgICAgIGNvbXBfYnJhbmRzX3N0ciwg QVZfRElDVF9ET05UX1NUUkRVUF9WQUwpOwogCiAgICAgLy8gTG9naWMgZm9yIGhhbmRsaW5nIEF1 ZGlibGUncyAuYWF4YyBmaWxlcwogICAgIGlmICghc3RyY21wKHR5cGUsICJhYXhjIikpIHsKQEAg LTE2MDAsNyArMTU3OCw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZnR5cChNT1ZDb250ZXh0ICpj LCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKIH0KIAogLyogdGhpcyBhdG9tIHNob3Vs ZCBjb250YWluIGFsbCBoZWFkZXIgYXRvbXMgKi8KLXN0YXRpYyBpbnQgbW92X3JlYWRfbW9vdihN T1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQg bW92X3JlYWRfbW9vdihNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRv bSkKIHsKICAgICBpbnQgcmV0OwogCkBAIC0xNjE0LDE3ICsxNTkyLDE3IEBAIHN0YXRpYyBpbnQg bW92X3JlYWRfbW9vdihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRv bSkKICAgICAgICAgcmV0dXJuIHJldDsKICAgICAvKiB3ZSBwYXJzZWQgdGhlICdtb292JyBhdG9t LCB3ZSBjYW4gdGVybWluYXRlIHRoZSBwYXJzaW5nIGFzIHNvb24gYXMgd2UgZmluZCB0aGUgJ21k YXQnICovCiAgICAgLyogc28gd2UgZG9uJ3QgcGFyc2UgdGhlIHdob2xlIGZpbGUgaWYgb3ZlciBh IG5ldHdvcmsgKi8KLSAgICBjLT5mb3VuZF9tb292PTE7CisgICAgYy0+Zm91bmRfbW9vdiA9IDE7 CiAgICAgcmV0dXJuIDA7IC8qIG5vdyBnbyBmb3IgbWRhdCAqLwogfQogCi1zdGF0aWMgTU9WRnJh Z21lbnRTdHJlYW1JbmZvICogZ2V0X2ZyYWdfc3RyZWFtX2luZm8oCi0gICAgTU9WRnJhZ21lbnRJ bmRleCAqZnJhZ19pbmRleCwKK3N0YXRpYyBNT1ZGcmFnbWVudFN0cmVhbUluZm8qIGdldF9mcmFn X3N0cmVhbV9pbmZvKAorICAgIE1PVkZyYWdtZW50SW5kZXgqIGZyYWdfaW5kZXgsCiAgICAgaW50 IGluZGV4LAogICAgIGludCBpZCkKIHsKICAgICBpbnQgaTsKLSAgICBNT1ZGcmFnbWVudEluZGV4 SXRlbSAqIGl0ZW07CisgICAgTU9WRnJhZ21lbnRJbmRleEl0ZW0qIGl0ZW07CiAKICAgICBpZiAo aW5kZXggPCAwIHx8IGluZGV4ID49IGZyYWdfaW5kZXgtPm5iX2l0ZW1zKQogICAgICAgICByZXR1 cm4gTlVMTDsKQEAgLTE2MzcsMTAgKzE2MTUsMTAgQEAgc3RhdGljIE1PVkZyYWdtZW50U3RyZWFt SW5mbyAqIGdldF9mcmFnX3N0cmVhbV9pbmZvKAogICAgIHJldHVybiBOVUxMOwogfQogCi1zdGF0 aWMgdm9pZCBzZXRfZnJhZ19zdHJlYW0oTU9WRnJhZ21lbnRJbmRleCAqZnJhZ19pbmRleCwgaW50 IGlkKQorc3RhdGljIHZvaWQgc2V0X2ZyYWdfc3RyZWFtKE1PVkZyYWdtZW50SW5kZXgqIGZyYWdf aW5kZXgsIGludCBpZCkKIHsKICAgICBpbnQgaTsKLSAgICBNT1ZGcmFnbWVudEluZGV4SXRlbSAq IGl0ZW07CisgICAgTU9WRnJhZ21lbnRJbmRleEl0ZW0qIGl0ZW07CiAKICAgICBpZiAoZnJhZ19p bmRleC0+Y3VycmVudCA8IDAgfHwKICAgICAgICAgZnJhZ19pbmRleC0+Y3VycmVudCA+PSBmcmFn X2luZGV4LT5uYl9pdGVtcykKQEAgLTE2NTcsMTAgKzE2MzUsMTAgQEAgc3RhdGljIHZvaWQgc2V0 X2ZyYWdfc3RyZWFtKE1PVkZyYWdtZW50SW5kZXggKmZyYWdfaW5kZXgsIGludCBpZCkKICAgICBp dGVtLT5jdXJyZW50ID0gLTE7CiB9CiAKLXN0YXRpYyBNT1ZGcmFnbWVudFN0cmVhbUluZm8gKiBn ZXRfY3VycmVudF9mcmFnX3N0cmVhbV9pbmZvKAotICAgIE1PVkZyYWdtZW50SW5kZXggKmZyYWdf aW5kZXgpCitzdGF0aWMgTU9WRnJhZ21lbnRTdHJlYW1JbmZvKiBnZXRfY3VycmVudF9mcmFnX3N0 cmVhbV9pbmZvKAorICAgIE1PVkZyYWdtZW50SW5kZXgqIGZyYWdfaW5kZXgpCiB7Ci0gICAgTU9W RnJhZ21lbnRJbmRleEl0ZW0gKml0ZW07CisgICAgTU9WRnJhZ21lbnRJbmRleEl0ZW0qIGl0ZW07 CiAgICAgaWYgKGZyYWdfaW5kZXgtPmN1cnJlbnQgPCAwIHx8CiAgICAgICAgIGZyYWdfaW5kZXgt PmN1cnJlbnQgPj0gZnJhZ19pbmRleC0+bmJfaXRlbXMpCiAgICAgICAgIHJldHVybiBOVUxMOwpA QCAtMTY3Myw3ICsxNjUxLDcgQEAgc3RhdGljIE1PVkZyYWdtZW50U3RyZWFtSW5mbyAqIGdldF9j dXJyZW50X2ZyYWdfc3RyZWFtX2luZm8oCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBp bnQgc2VhcmNoX2ZyYWdfbW9vZl9vZmZzZXQoTU9WRnJhZ21lbnRJbmRleCAqZnJhZ19pbmRleCwg aW50NjRfdCBvZmZzZXQpCitzdGF0aWMgaW50IHNlYXJjaF9mcmFnX21vb2Zfb2Zmc2V0KE1PVkZy YWdtZW50SW5kZXgqIGZyYWdfaW5kZXgsIGludDY0X3Qgb2Zmc2V0KQogewogICAgIGludCBhLCBi LCBtOwogICAgIGludDY0X3QgbW9vZl9vZmZzZXQ7CkBAIC0xNjk3LDcgKzE2NzUsNyBAQCBzdGF0 aWMgaW50IHNlYXJjaF9mcmFnX21vb2Zfb2Zmc2V0KE1PVkZyYWdtZW50SW5kZXggKmZyYWdfaW5k ZXgsIGludDY0X3Qgb2Zmc2V0KQogICAgIHJldHVybiBiOwogfQogCi1zdGF0aWMgaW50NjRfdCBn ZXRfc3RyZWFtX2luZm9fdGltZShNT1ZGcmFnbWVudFN0cmVhbUluZm8gKiBmcmFnX3N0cmVhbV9p bmZvKQorc3RhdGljIGludDY0X3QgZ2V0X3N0cmVhbV9pbmZvX3RpbWUoTU9WRnJhZ21lbnRTdHJl YW1JbmZvKiBmcmFnX3N0cmVhbV9pbmZvKQogewogICAgIGF2X2Fzc2VydDAoZnJhZ19zdHJlYW1f aW5mbyk7CiAgICAgaWYgKGZyYWdfc3RyZWFtX2luZm8tPnNpZHhfcHRzICE9IEFWX05PUFRTX1ZB TFVFKQpAQCAtMTcwNywxMSArMTY4NSwxMSBAQCBzdGF0aWMgaW50NjRfdCBnZXRfc3RyZWFtX2lu Zm9fdGltZShNT1ZGcmFnbWVudFN0cmVhbUluZm8gKiBmcmFnX3N0cmVhbV9pbmZvKQogICAgIHJl dHVybiBmcmFnX3N0cmVhbV9pbmZvLT50ZmR0X2R0czsKIH0KIAotc3RhdGljIGludDY0X3QgZ2V0 X2ZyYWdfdGltZShBVkZvcm1hdENvbnRleHQgKnMsIEFWU3RyZWFtICpkc3Rfc3QsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE1PVkZyYWdtZW50SW5kZXggKmZyYWdfaW5kZXgsIGludCBp bmRleCkKK3N0YXRpYyBpbnQ2NF90IGdldF9mcmFnX3RpbWUoQVZGb3JtYXRDb250ZXh0KiBzLCBB VlN0cmVhbSogZHN0X3N0LAorICAgIE1PVkZyYWdtZW50SW5kZXgqIGZyYWdfaW5kZXgsIGludCBp bmRleCkKIHsKLSAgICBNT1ZGcmFnbWVudFN0cmVhbUluZm8gKiBmcmFnX3N0cmVhbV9pbmZvOwot ICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjID0gZHN0X3N0LT5wcml2X2RhdGE7CisgICAgTU9WRnJh Z21lbnRTdHJlYW1JbmZvKiBmcmFnX3N0cmVhbV9pbmZvOworICAgIE1PVlN0cmVhbUNvbnRleHQq IHNjID0gZHN0X3N0LT5wcml2X2RhdGE7CiAgICAgaW50NjRfdCB0aW1lc3RhbXA7CiAgICAgaW50 IGksIGo7CiAKQEAgLTE3MjksMTAgKzE3MDcsMTAgQEAgc3RhdGljIGludDY0X3QgZ2V0X2ZyYWdf dGltZShBVkZvcm1hdENvbnRleHQgKnMsIEFWU3RyZWFtICpkc3Rfc3QsCiAgICAgfQogCiAgICAg Zm9yIChpID0gMDsgaSA8IGZyYWdfaW5kZXgtPml0ZW1baW5kZXhdLm5iX3N0cmVhbV9pbmZvOyBp KyspIHsKLSAgICAgICAgQVZTdHJlYW0gKmZyYWdfc3RyZWFtID0gTlVMTDsKKyAgICAgICAgQVZT dHJlYW0qIGZyYWdfc3RyZWFtID0gTlVMTDsKICAgICAgICAgZnJhZ19zdHJlYW1faW5mbyA9ICZm cmFnX2luZGV4LT5pdGVtW2luZGV4XS5zdHJlYW1faW5mb1tpXTsKICAgICAgICAgZm9yIChqID0g MDsgaiA8IHMtPm5iX3N0cmVhbXM7IGorKykgewotICAgICAgICAgICAgTU9WU3RyZWFtQ29udGV4 dCAqc2MyID0gcy0+c3RyZWFtc1tqXS0+cHJpdl9kYXRhOworICAgICAgICAgICAgTU9WU3RyZWFt Q29udGV4dCogc2MyID0gcy0+c3RyZWFtc1tqXS0+cHJpdl9kYXRhOwogICAgICAgICAgICAgaWYg KHNjMi0+aWQgPT0gZnJhZ19zdHJlYW1faW5mby0+aWQpCiAgICAgICAgICAgICAgICAgZnJhZ19z dHJlYW0gPSBzLT5zdHJlYW1zW2pdOwogICAgICAgICB9CkBAIC0xNzQ3LDggKzE3MjUsOCBAQCBz dGF0aWMgaW50NjRfdCBnZXRfZnJhZ190aW1lKEFWRm9ybWF0Q29udGV4dCAqcywgQVZTdHJlYW0g KmRzdF9zdCwKICAgICByZXR1cm4gQVZfTk9QVFNfVkFMVUU7CiB9CiAKLXN0YXRpYyBpbnQgc2Vh cmNoX2ZyYWdfdGltZXN0YW1wKEFWRm9ybWF0Q29udGV4dCAqcywgTU9WRnJhZ21lbnRJbmRleCAq ZnJhZ19pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWU3RyZWFtICpz dCwgaW50NjRfdCB0aW1lc3RhbXApCitzdGF0aWMgaW50IHNlYXJjaF9mcmFnX3RpbWVzdGFtcChB VkZvcm1hdENvbnRleHQqIHMsIE1PVkZyYWdtZW50SW5kZXgqIGZyYWdfaW5kZXgsCisgICAgQVZT dHJlYW0qIHN0LCBpbnQ2NF90IHRpbWVzdGFtcCkKIHsKICAgICBpbnQgYSwgYiwgbSwgbTA7CiAg ICAgaW50NjRfdCBmcmFnX3RpbWU7CkBAIC0xNzYwLDcgKzE3MzgsNyBAQCBzdGF0aWMgaW50IHNl YXJjaF9mcmFnX3RpbWVzdGFtcChBVkZvcm1hdENvbnRleHQgKnMsIE1PVkZyYWdtZW50SW5kZXgg KmZyYWdfaW5kZQogICAgICAgICBtMCA9IG0gPSAoYSArIGIpID4+IDE7CiAKICAgICAgICAgd2hp bGUgKG0gPCBiICYmCi0gICAgICAgICAgICAgICAoZnJhZ190aW1lID0gZ2V0X2ZyYWdfdGltZShz LCBzdCwgZnJhZ19pbmRleCwgbSkpID09IEFWX05PUFRTX1ZBTFVFKQorICAgICAgICAgICAgKGZy YWdfdGltZSA9IGdldF9mcmFnX3RpbWUocywgc3QsIGZyYWdfaW5kZXgsIG0pKSA9PSBBVl9OT1BU U19WQUxVRSkKICAgICAgICAgICAgIG0rKzsKIAogICAgICAgICBpZiAobSA8IGIgJiYgZnJhZ190 aW1lIDw9IHRpbWVzdGFtcCkKQEAgLTE3NzIsMTEgKzE3NTAsMTEgQEAgc3RhdGljIGludCBzZWFy Y2hfZnJhZ190aW1lc3RhbXAoQVZGb3JtYXRDb250ZXh0ICpzLCBNT1ZGcmFnbWVudEluZGV4ICpm cmFnX2luZGUKICAgICByZXR1cm4gYTsKIH0KIAotc3RhdGljIGludCB1cGRhdGVfZnJhZ19pbmRl eChNT1ZDb250ZXh0ICpjLCBpbnQ2NF90IG9mZnNldCkKK3N0YXRpYyBpbnQgdXBkYXRlX2ZyYWdf aW5kZXgoTU9WQ29udGV4dCogYywgaW50NjRfdCBvZmZzZXQpCiB7CiAgICAgaW50IGluZGV4LCBp OwotICAgIE1PVkZyYWdtZW50SW5kZXhJdGVtICogaXRlbTsKLSAgICBNT1ZGcmFnbWVudFN0cmVh bUluZm8gKiBmcmFnX3N0cmVhbV9pbmZvOworICAgIE1PVkZyYWdtZW50SW5kZXhJdGVtKiBpdGVt OworICAgIE1PVkZyYWdtZW50U3RyZWFtSW5mbyogZnJhZ19zdHJlYW1faW5mbzsKIAogICAgIC8v IElmIG1vb2Zfb2Zmc2V0IGFscmVhZHkgZXhpc3RzIGluIGZyYWdfaW5kZXgsIHJldHVybiBpbmRl eCB0byBpdAogICAgIGluZGV4ID0gc2VhcmNoX2ZyYWdfbW9vZl9vZmZzZXQoJmMtPmZyYWdfaW5k ZXgsIG9mZnNldCk7CkBAIC0xNzg3LDIxICsxNzY1LDIxIEBAIHN0YXRpYyBpbnQgdXBkYXRlX2Zy YWdfaW5kZXgoTU9WQ29udGV4dCAqYywgaW50NjRfdCBvZmZzZXQpCiAgICAgLy8gb2Zmc2V0IGlz IG5vdCB5ZXQgaW4gZnJhZyBpbmRleC4KICAgICAvLyBJbnNlcnQgbmV3IGl0ZW0gYXQgaW5kZXgg KHNvcnRlZCBieSBtb29mIG9mZnNldCkKICAgICBpdGVtID0gYXZfZmFzdF9yZWFsbG9jKGMtPmZy YWdfaW5kZXguaXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjLT5mcmFnX2luZGV4 LmFsbG9jYXRlZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMtPmZyYWdfaW5k ZXgubmJfaXRlbXMgKyAxKSAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKmMt PmZyYWdfaW5kZXguaXRlbSkpOworICAgICAgICAmYy0+ZnJhZ19pbmRleC5hbGxvY2F0ZWRfc2l6 ZSwKKyAgICAgICAgKGMtPmZyYWdfaW5kZXgubmJfaXRlbXMgKyAxKSAqCisgICAgICAgIHNpemVv ZigqYy0+ZnJhZ19pbmRleC5pdGVtKSk7CiAgICAgaWYgKCFpdGVtKQogICAgICAgICByZXR1cm4g LTE7CiAgICAgYy0+ZnJhZ19pbmRleC5pdGVtID0gaXRlbTsKIAogICAgIGZyYWdfc3RyZWFtX2lu Zm8gPSBhdl9yZWFsbG9jX2FycmF5KE5VTEwsIGMtPmZjLT5uYl9zdHJlYW1zLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqaXRlbS0+c3RyZWFtX2luZm8p KTsKKyAgICAgICAgc2l6ZW9mKCppdGVtLT5zdHJlYW1faW5mbykpOwogICAgIGlmICghZnJhZ19z dHJlYW1faW5mbykKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgZm9yIChpID0gMDsgaSA8IGMt PmZjLT5uYl9zdHJlYW1zOyBpKyspIHsKICAgICAgICAgLy8gQXZvaWQgYnVpbGRpbmcgZnJhZyBp bmRleCBpZiBzdHJlYW1zIGxhY2sgdHJhY2sgaWQuCi0gICAgICAgIE1PVlN0cmVhbUNvbnRleHQg KnNjID0gYy0+ZmMtPnN0cmVhbXNbaV0tPnByaXZfZGF0YTsKKyAgICAgICAgTU9WU3RyZWFtQ29u dGV4dCogc2MgPSBjLT5mYy0+c3RyZWFtc1tpXS0+cHJpdl9kYXRhOwogICAgICAgICBpZiAoc2Mt PmlkIDwgMCkgewogICAgICAgICAgICAgYXZfZnJlZShmcmFnX3N0cmVhbV9pbmZvKTsKICAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwpAQCAtMTgyMCw3ICsxNzk4LDcgQEAg c3RhdGljIGludCB1cGRhdGVfZnJhZ19pbmRleChNT1ZDb250ZXh0ICpjLCBpbnQ2NF90IG9mZnNl dCkKIAogICAgIGlmIChpbmRleCA8IGMtPmZyYWdfaW5kZXgubmJfaXRlbXMpCiAgICAgICAgIG1l bW1vdmUoYy0+ZnJhZ19pbmRleC5pdGVtICsgaW5kZXggKyAxLCBjLT5mcmFnX2luZGV4Lml0ZW0g KyBpbmRleCwKLSAgICAgICAgICAgICAgICAoYy0+ZnJhZ19pbmRleC5uYl9pdGVtcyAtIGluZGV4 KSAqIHNpemVvZigqYy0+ZnJhZ19pbmRleC5pdGVtKSk7CisgICAgICAgICAgICAoYy0+ZnJhZ19p bmRleC5uYl9pdGVtcyAtIGluZGV4KSAqIHNpemVvZigqYy0+ZnJhZ19pbmRleC5pdGVtKSk7CiAK ICAgICBpdGVtID0gJmMtPmZyYWdfaW5kZXguaXRlbVtpbmRleF07CiAgICAgaXRlbS0+aGVhZGVy c19yZWFkID0gMDsKQEAgLTE4MzMsMTEgKzE4MTEsMTEgQEAgc3RhdGljIGludCB1cGRhdGVfZnJh Z19pbmRleChNT1ZDb250ZXh0ICpjLCBpbnQ2NF90IG9mZnNldCkKICAgICByZXR1cm4gaW5kZXg7 CiB9CiAKLXN0YXRpYyB2b2lkIGZpeF9mcmFnX2luZGV4X2VudHJpZXMoTU9WRnJhZ21lbnRJbmRl eCAqZnJhZ19pbmRleCwgaW50IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgaWQsIGludCBlbnRyaWVzKQorc3RhdGljIHZvaWQgZml4X2ZyYWdfaW5kZXhfZW50 cmllcyhNT1ZGcmFnbWVudEluZGV4KiBmcmFnX2luZGV4LCBpbnQgaW5kZXgsCisgICAgaW50IGlk LCBpbnQgZW50cmllcykKIHsKICAgICBpbnQgaTsKLSAgICBNT1ZGcmFnbWVudFN0cmVhbUluZm8g KiBmcmFnX3N0cmVhbV9pbmZvOworICAgIE1PVkZyYWdtZW50U3RyZWFtSW5mbyogZnJhZ19zdHJl YW1faW5mbzsKIAogICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgIHJldHVybjsKQEAgLTE4NDgs NyArMTgyNiw3IEBAIHN0YXRpYyB2b2lkIGZpeF9mcmFnX2luZGV4X2VudHJpZXMoTU9WRnJhZ21l bnRJbmRleCAqZnJhZ19pbmRleCwgaW50IGluZGV4LAogICAgIH0KIH0KIAotc3RhdGljIGludCBt b3ZfcmVhZF9tb29mKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9t KQorc3RhdGljIGludCBtb3ZfcmVhZF9tb29mKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBw YiwgTU9WQXRvbSBhdG9tKQogewogICAgIC8vIFNldCBieSBtb3ZfcmVhZF90ZmhkKCkuIG1vdl9y ZWFkX3RydW4oKSB3aWxsIHJlamVjdCBmaWxlcyBtaXNzaW5nIHRmaGQuCiAgICAgYy0+ZnJhZ21l bnQuZm91bmRfdGZoZCA9IDA7CkBAIC0xODU4LDE0ICsxODM2LDE1IEBAIHN0YXRpYyBpbnQgbW92 X3JlYWRfbW9vZihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkK ICAgICAgICAgaWYgKHBiLT5zZWVrYWJsZSAmIEFWSU9fU0VFS0FCTEVfTk9STUFMKSB7CiAgICAg ICAgICAgICBpbnQgcmV0OwogICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfVkVSQk9T RSwgInN0cmVhbSBoYXMgbW9vZiBib3hlcywgd2lsbCBsb29rICIKLSAgICAgICAgICAgICAgICAg ICAgImZvciBhIG1mcmFcbiIpOworICAgICAgICAgICAgICAgICJmb3IgYSBtZnJhXG4iKTsKICAg ICAgICAgICAgIGlmICgocmV0ID0gbW92X3JlYWRfbWZyYShjLCBwYikpIDwgMCkgewogICAgICAg ICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX1ZFUkJPU0UsICJmb3VuZCBhIG1vb2YgYm94 IGJ1dCBmYWlsZWQgdG8gIgotICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQgdGhlIG1mcmEg KG1heSBiZSBhIGxpdmUgaXNtdilcbiIpOworICAgICAgICAgICAgICAgICAgICAicmVhZCB0aGUg bWZyYSAobWF5IGJlIGEgbGl2ZSBpc212KVxuIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0g ZWxzZSB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBhdl9sb2coYy0+ ZmMsIEFWX0xPR19WRVJCT1NFLCAiZm91bmQgYSBtb29mIGJveCBidXQgc3RyZWFtIGlzIG5vdCAi Ci0gICAgICAgICAgICAgICAgICAgICJzZWVrYWJsZSwgY2FuIG5vdCBsb29rIGZvciBtZnJhXG4i KTsKKyAgICAgICAgICAgICAgICAic2Vla2FibGUsIGNhbiBub3QgbG9vayBmb3IgbWZyYVxuIik7 CiAgICAgICAgIH0KICAgICB9CiAgICAgYy0+ZnJhZ21lbnQubW9vZl9vZmZzZXQgPSBjLT5mcmFn bWVudC5pbXBsaWNpdF9vZmZzZXQgPSBhdmlvX3RlbGwocGIpIC0gODsKQEAgLTE4NzQsNyArMTg1 Myw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfbW9vZihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4 dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gbW92X3JlYWRfZGVmYXVsdChjLCBwYiwg YXRvbSk7CiB9CiAKLXN0YXRpYyB2b2lkIG1vdl9tZXRhZGF0YV9jcmVhdGlvbl90aW1lKE1PVkNv bnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgQVZEaWN0aW9uYXJ5ICoqbWV0YWRhdGEsIGludCB2 ZXJzaW9uKQorc3RhdGljIHZvaWQgbW92X21ldGFkYXRhX2NyZWF0aW9uX3RpbWUoTU9WQ29udGV4 dCogYywgQVZJT0NvbnRleHQqIHBiLCBBVkRpY3Rpb25hcnkqKiBtZXRhZGF0YSwgaW50IHZlcnNp b24pCiB7CiAgICAgaW50NjRfdCB0aW1lOwogICAgIGlmICh2ZXJzaW9uID09IDEpIHsKQEAgLTE4 ODQsNyArMTg2Myw4IEBAIHN0YXRpYyB2b2lkIG1vdl9tZXRhZGF0YV9jcmVhdGlvbl90aW1lKE1P VkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgQVZEaWN0aW9uCiAgICAgICAgICAgICBhdl9s b2coYy0+ZmMsIEFWX0xPR19ERUJVRywgImNyZWF0aW9uX3RpbWUgaXMgbmVnYXRpdmVcbiIpOwog ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAg ZWxzZSB7CiAgICAgICAgIHRpbWUgPSBhdmlvX3JiMzIocGIpOwogICAgICAgICBhdmlvX3JiMzIo cGIpOyAvKiBtb2RpZmljYXRpb24gdGltZSAqLwogICAgICAgICBpZiAodGltZSA+IDAgJiYgdGlt ZSA8IDIwODI4NDQ4MDApIHsKQEAgLTE5MDQsMTcgKzE4ODQsMTcgQEAgc3RhdGljIHZvaWQgbW92 X21ldGFkYXRhX2NyZWF0aW9uX3RpbWUoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBB VkRpY3Rpb24KICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfbWRoZChNT1ZDb250ZXh0 ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRf bWRoZChNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAg ICBBVlN0cmVhbSAqc3Q7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7CisgICAgQVZTdHJlYW0q IHN0OworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjOwogICAgIGludCB2ZXJzaW9uOwotICAgIGNo YXIgbGFuZ3VhZ2VbNF0gPSB7MH07CisgICAgY2hhciBsYW5ndWFnZVs0XSA9IHsgMCB9OwogICAg IHVuc2lnbmVkIGxhbmc7CiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0cmVhbXMgPCAxKQogICAgICAg ICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zLTFd OworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMgLSAxXTsKICAgICBz YyA9IHN0LT5wcml2X2RhdGE7CiAKICAgICBpZiAoc2MtPnRpbWVfc2NhbGUpIHsKQEAgLTE5NTAs NyArMTkzMCw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfbWRoZChNT1ZDb250ZXh0ICpjLCBBVklP Q29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGlu dCBtb3ZfcmVhZF9tdmhkKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBh dG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9tdmhkKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0 KiBwYiwgTU9WQXRvbSBhdG9tKQogewogICAgIGludCBpOwogICAgIGludCB2ZXJzaW9uID0gYXZp b19yOChwYik7IC8qIHZlcnNpb24gKi8KQEAgLTE5ODksMTMgKzE5NjksMTMgQEAgc3RhdGljIGlu dCBtb3ZfcmVhZF9tdmhkKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBh dG9tKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfbGFzdF9zdHJlYW1fbGl0 dGxlX2VuZGlhbihBVkZvcm1hdENvbnRleHQgKmZjKQorc3RhdGljIHZvaWQgc2V0X2xhc3Rfc3Ry ZWFtX2xpdHRsZV9lbmRpYW4oQVZGb3JtYXRDb250ZXh0KiBmYykKIHsKLSAgICBBVlN0cmVhbSAq c3Q7CisgICAgQVZTdHJlYW0qIHN0OwogCiAgICAgaWYgKGZjLT5uYl9zdHJlYW1zIDwgMSkKICAg ICAgICAgcmV0dXJuOwotICAgIHN0ID0gZmMtPnN0cmVhbXNbZmMtPm5iX3N0cmVhbXMtMV07Cisg ICAgc3QgPSBmYy0+c3RyZWFtc1tmYy0+bmJfc3RyZWFtcyAtIDFdOwogCiAgICAgc3dpdGNoIChz dC0+Y29kZWNwYXItPmNvZGVjX2lkKSB7CiAgICAgY2FzZSBBVl9DT0RFQ19JRF9QQ01fUzE2QkU6 CkBAIC0yMDE4LDcgKzE5OTgsNyBAQCBzdGF0aWMgdm9pZCBzZXRfbGFzdF9zdHJlYW1fbGl0dGxl X2VuZGlhbihBVkZvcm1hdENvbnRleHQgKmZjKQogICAgIH0KIH0KIAotc3RhdGljIGludCBtb3Zf cmVhZF9lbmRhKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQor c3RhdGljIGludCBtb3ZfcmVhZF9lbmRhKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwg TU9WQXRvbSBhdG9tKQogewogICAgIGludCBsaXR0bGVfZW5kaWFuID0gYXZpb19yYjE2KHBiKSAm IDB4RkY7CiAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfVFJBQ0UsICJlbmRhICVkXG4iLCBsaXR0 bGVfZW5kaWFuKTsKQEAgLTIwMjcsMTQgKzIwMDcsMTQgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9l bmRhKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIHJl dHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFkX3BjbWMoTU9WQ29udGV4dCAqYywgQVZJ T0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX3BjbWMoTU9W Q29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7CiAgICAgaW50IGZv cm1hdF9mbGFnczsKICAgICBpbnQgdmVyc2lvbiwgZmxhZ3M7CiAgICAgaW50IHBjbV9zYW1wbGVf c2l6ZTsKLSAgICBBVkZvcm1hdENvbnRleHQgKmZjID0gYy0+ZmM7Ci0gICAgQVZTdHJlYW0gKnN0 OwotICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjOworICAgIEFWRm9ybWF0Q29udGV4dCogZmMgPSBj LT5mYzsKKyAgICBBVlN0cmVhbSogc3Q7CisgICAgTU9WU3RyZWFtQ29udGV4dCogc2M7CiAKICAg ICBpZiAoYXRvbS5zaXplIDwgNikgewogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19FUlJP UiwgIkVtcHR5IHBjbUMgYm94XG4iKTsKQEAgLTIwNDIsMTIgKzIwMjIsMTIgQEAgc3RhdGljIGlu dCBtb3ZfcmVhZF9wY21jKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBh dG9tKQogICAgIH0KIAogICAgIHZlcnNpb24gPSBhdmlvX3I4KHBiKTsKLSAgICBmbGFncyAgID0g YXZpb19yYjI0KHBiKTsKKyAgICBmbGFncyA9IGF2aW9fcmIyNChwYik7CiAKICAgICBpZiAodmVy c2lvbiAhPSAwIHx8IGZsYWdzICE9IDApIHsKICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0df RVJST1IsCi0gICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgJ3BjbUMnIGJveCB3aXRoIHZlcnNp b24gJWQsIGZsYWdzOiAleCIsCi0gICAgICAgICAgICAgICB2ZXJzaW9uLCBmbGFncyk7CisgICAg ICAgICAgICAiVW5zdXBwb3J0ZWQgJ3BjbUMnIGJveCB3aXRoIHZlcnNpb24gJWQsIGZsYWdzOiAl eCIsCisgICAgICAgICAgICB2ZXJzaW9uLCBmbGFncyk7CiAgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwogICAgIH0KIApAQCAtMjA3MCwxMSArMjA1MCwxMiBAQCBzdGF0aWMgaW50 IG1vdl9yZWFkX3BjbWMoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0 b20pCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGF2 X2xvZyhmYywgQVZfTE9HX0VSUk9SLCAiaW52YWxpZCBwY21fc2FtcGxlX3NpemUgJWQgZm9yICVz XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjbV9zYW1wbGVfc2l6 ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdl9mb3VyY2Myc3RyKHNj LT5mb3JtYXQpKTsKKyAgICAgICAgICAgICAgICBwY21fc2FtcGxlX3NpemUsCisgICAgICAgICAg ICAgICAgYXZfZm91cmNjMnN0cihzYy0+Zm9ybWF0KSk7CiAgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoc2MtPmZvcm1hdCA9 PSBNT1ZfTVA0X0lQQ01fVEFHKSB7CisgICAgfQorICAgIGVsc2UgaWYgKHNjLT5mb3JtYXQgPT0g TU9WX01QNF9JUENNX1RBRykgewogICAgICAgICBzd2l0Y2ggKHBjbV9zYW1wbGVfc2l6ZSkgewog ICAgICAgICBjYXNlIDE2OgogICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFW X0NPREVDX0lEX1BDTV9TMTZCRTsKQEAgLTIwODcsMTMgKzIwNjgsMTQgQEAgc3RhdGljIGludCBt b3ZfcmVhZF9wY21jKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9t KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBhdl9s b2coZmMsIEFWX0xPR19FUlJPUiwgImludmFsaWQgcGNtX3NhbXBsZV9zaXplICVkIGZvciAlc1xu IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY21fc2FtcGxlX3NpemUs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfZm91cmNjMnN0cihzYy0+ Zm9ybWF0KSk7CisgICAgICAgICAgICAgICAgcGNtX3NhbXBsZV9zaXplLAorICAgICAgICAgICAg ICAgIGF2X2ZvdXJjYzJzdHIoc2MtPmZvcm1hdCkpOwogICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgeworICAgIH0KKyAgICBlbHNl IHsKICAgICAgICAgYXZfbG9nKGZjLCBBVl9MT0dfRVJST1IsICIncGNtQycgd2l0aCBpbnZhbGlk IHNhbXBsZSBlbnRyeSAnJXMnXG4iLAotICAgICAgICAgICAgICAgIGF2X2ZvdXJjYzJzdHIoc2Mt PmZvcm1hdCkpOworICAgICAgICAgICAgYXZfZm91cmNjMnN0cihzYy0+Zm9ybWF0KSk7CiAgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogICAgIH0KIApAQCAtMjEwNCwxNyArMjA4 NiwxNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3BjbWMoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRl eHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92 X3JlYWRfY29scihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkK K3N0YXRpYyBpbnQgbW92X3JlYWRfY29scihNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIs IE1PVkF0b20gYXRvbSkKIHsKLSAgICBBVlN0cmVhbSAqc3Q7Ci0gICAgSEVJRkl0ZW0gKml0ZW0g PSBOVUxMOworICAgIEFWU3RyZWFtKiBzdDsKKyAgICBIRUlGSXRlbSogaXRlbSA9IE5VTEw7CiAg ICAgY2hhciBjb2xvcl9wYXJhbWV0ZXJfdHlwZVs1XSA9IHsgMCB9OwogICAgIHVpbnQxNl90IGNv bG9yX3ByaW1hcmllcywgY29sb3JfdHJjLCBjb2xvcl9tYXRyaXg7CiAgICAgaW50IHJldDsKIAog ICAgIHN0ID0gZ2V0X2N1cnJfc3QoYyk7CiAgICAgaWYgKCFzdCkgewotICAgICAgICBpdGVtID0g Z2V0X2hlaWZfaXRlbShjLCBjLT5jdXJfaXRlbV9pZCk7CisgICAgICAgIGl0ZW0gPSBoZWlmX2N1 cl9pdGVtKGMpOwogICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg ICB9CkBAIC0yMTI2LDIyICsyMTA4LDIzIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfY29scihNT1ZD b250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgc3RybmNt cChjb2xvcl9wYXJhbWV0ZXJfdHlwZSwgIm5jbGMiLCA0KSAmJgogICAgICAgICBzdHJuY21wKGNv bG9yX3BhcmFtZXRlcl90eXBlLCAicHJvZiIsIDQpKSB7CiAgICAgICAgIGF2X2xvZyhjLT5mYywg QVZfTE9HX1dBUk5JTkcsICJ1bnN1cHBvcnRlZCBjb2xvcl9wYXJhbWV0ZXJfdHlwZSAlc1xuIiwK LSAgICAgICAgICAgICAgIGNvbG9yX3BhcmFtZXRlcl90eXBlKTsKKyAgICAgICAgICAgIGNvbG9y X3BhcmFtZXRlcl90eXBlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgaWYgKCFz dHJuY21wKGNvbG9yX3BhcmFtZXRlcl90eXBlLCAicHJvZiIsIDQpKSB7Ci0gICAgICAgIEFWUGFj a2V0U2lkZURhdGEgKnNkOwotICAgICAgICB1aW50OF90ICppY2NfcHJvZmlsZTsKKyAgICAgICAg QVZQYWNrZXRTaWRlRGF0YSogc2Q7CisgICAgICAgIHVpbnQ4X3QqIGljY19wcm9maWxlOwogICAg ICAgICBpZiAoc3QpIHsKICAgICAgICAgICAgIHNkID0gYXZfcGFja2V0X3NpZGVfZGF0YV9uZXco JnN0LT5jb2RlY3Bhci0+Y29kZWRfc2lkZV9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmc3QtPmNvZGVjcGFyLT5uYl9jb2RlZF9zaWRlX2RhdGEsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX1BLVF9EQVRBX0lDQ19QUk9G SUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9tLnNpemUg LSA0LCAwKTsKKyAgICAgICAgICAgICAgICAmc3QtPmNvZGVjcGFyLT5uYl9jb2RlZF9zaWRlX2Rh dGEsCisgICAgICAgICAgICAgICAgQVZfUEtUX0RBVEFfSUNDX1BST0ZJTEUsCisgICAgICAgICAg ICAgICAgYXRvbS5zaXplIC0gNCwgMCk7CiAgICAgICAgICAgICBpZiAoIXNkKQogICAgICAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiAgICAgICAgICAgICBpY2NfcHJvZmlsZSA9 IHNkLT5kYXRhOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9CisgICAgICAgIGVsc2Ugewog ICAgICAgICAgICAgYXZfZnJlZXAoJml0ZW0tPmljY19wcm9maWxlKTsKICAgICAgICAgICAgIGlj Y19wcm9maWxlID0gaXRlbS0+aWNjX3Byb2ZpbGUgPSBhdl9tYWxsb2MoYXRvbS5zaXplIC0gNCk7 CiAgICAgICAgICAgICBpZiAoIWljY19wcm9maWxlKSB7CkBAIC0yMTUzLDE0ICsyMTM2LDE1IEBA IHN0YXRpYyBpbnQgbW92X3JlYWRfY29scihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIs IE1PVkF0b20gYXRvbSkKICAgICAgICAgcmV0ID0gZmZpb19yZWFkX3NpemUocGIsIGljY19wcm9m aWxlLCBhdG9tLnNpemUgLSA0KTsKICAgICAgICAgaWYgKHJldCA8IDApCiAgICAgICAgICAgICBy ZXR1cm4gcmV0OwotICAgIH0gZWxzZSBpZiAoc3QpIHsKKyAgICB9CisgICAgZWxzZSBpZiAoc3Qp IHsKICAgICAgICAgY29sb3JfcHJpbWFyaWVzID0gYXZpb19yYjE2KHBiKTsKICAgICAgICAgY29s b3JfdHJjID0gYXZpb19yYjE2KHBiKTsKICAgICAgICAgY29sb3JfbWF0cml4ID0gYXZpb19yYjE2 KHBiKTsKIAogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19UUkFDRSwKLSAgICAgICAgICAg ICAgICIlczogcHJpICVkIHRyYyAlZCBtYXRyaXggJWQiLAotICAgICAgICAgICAgICAgY29sb3Jf cGFyYW1ldGVyX3R5cGUsIGNvbG9yX3ByaW1hcmllcywgY29sb3JfdHJjLCBjb2xvcl9tYXRyaXgp OworICAgICAgICAgICAgIiVzOiBwcmkgJWQgdHJjICVkIG1hdHJpeCAlZCIsCisgICAgICAgICAg ICBjb2xvcl9wYXJhbWV0ZXJfdHlwZSwgY29sb3JfcHJpbWFyaWVzLCBjb2xvcl90cmMsIGNvbG9y X21hdHJpeCk7CiAKICAgICAgICAgaWYgKCFzdHJuY21wKGNvbG9yX3BhcmFtZXRlcl90eXBlLCAi bmNseCIsIDQpKSB7CiAgICAgICAgICAgICB1aW50OF90IGNvbG9yX3JhbmdlID0gYXZpb19yOChw YikgPj4gNzsKQEAgLTIxNzksMjIgKzIxNjMsMjIgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9jb2xy KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAgICAg ICAgY29sb3JfbWF0cml4ID0gQVZDT0xfU1BDX1VOU1BFQ0lGSUVEOwogCiAgICAgICAgIHN0LT5j b2RlY3Bhci0+Y29sb3JfcHJpbWFyaWVzID0gY29sb3JfcHJpbWFyaWVzOwotICAgICAgICBzdC0+ Y29kZWNwYXItPmNvbG9yX3RyYyAgICAgICA9IGNvbG9yX3RyYzsKLSAgICAgICAgc3QtPmNvZGVj cGFyLT5jb2xvcl9zcGFjZSAgICAgPSBjb2xvcl9tYXRyaXg7CisgICAgICAgIHN0LT5jb2RlY3Bh ci0+Y29sb3JfdHJjID0gY29sb3JfdHJjOworICAgICAgICBzdC0+Y29kZWNwYXItPmNvbG9yX3Nw YWNlID0gY29sb3JfbWF0cml4OwogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19UUkFDRSwg IlxuIik7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFkX2Zp ZWwoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMg aW50IG1vdl9yZWFkX2ZpZWwoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9t IGF0b20pCiB7Ci0gICAgQVZTdHJlYW0gKnN0OworICAgIEFWU3RyZWFtKiBzdDsKICAgICB1bnNp Z25lZCBtb3ZfZmllbGRfb3JkZXI7CiAgICAgZW51bSBBVkZpZWxkT3JkZXIgZGVjb2RlZF9maWVs ZF9vcmRlciA9IEFWX0ZJRUxEX1VOS05PV047CiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0cmVhbXMg PCAxKSAvLyB3aWxsIGhhcHBlbiB3aXRoIGpwMiBmaWxlcwogICAgICAgICByZXR1cm4gMDsKLSAg ICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zLTFdOworICAgIHN0ID0gYy0+ ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMgLSAxXTsKICAgICBpZiAoYXRvbS5zaXplIDwg MikKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAgICAgbW92X2ZpZWxkX29y ZGVyID0gYXZpb19yYjE2KHBiKTsKQEAgLTIyMDMsMTMgKzIxODcsMTMgQEAgc3RhdGljIGludCBt b3ZfcmVhZF9maWVsKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9t KQogICAgIGVsc2UgaWYgKChtb3ZfZmllbGRfb3JkZXIgJiAweEZGMDApID09IDB4MDIwMCkgewog ICAgICAgICBzd2l0Y2ggKG1vdl9maWVsZF9vcmRlciAmIDB4RkYpIHsKICAgICAgICAgY2FzZSAw eDAxOiBkZWNvZGVkX2ZpZWxkX29yZGVyID0gQVZfRklFTERfVFQ7Ci0gICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAweDA2OiBkZWNvZGVk X2ZpZWxkX29yZGVyID0gQVZfRklFTERfQkI7Ci0gICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAweDA5OiBkZWNvZGVkX2ZpZWxkX29yZGVy ID0gQVZfRklFTERfVEI7Ci0gICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBi cmVhazsKICAgICAgICAgY2FzZSAweDBFOiBkZWNvZGVkX2ZpZWxkX29yZGVyID0gQVZfRklFTERf QlQ7Ci0gICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBicmVhazsKICAgICAg ICAgfQogICAgIH0KICAgICBpZiAoZGVjb2RlZF9maWVsZF9vcmRlciA9PSBBVl9GSUVMRF9VTktO T1dOICYmIG1vdl9maWVsZF9vcmRlcikgewpAQCAtMjIyMCw3ICsyMjA0LDcgQEAgc3RhdGljIGlu dCBtb3ZfcmVhZF9maWVsKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBh dG9tKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFsbG9jX2V4dHJhZGF0 YShBVkNvZGVjUGFyYW1ldGVycyAqcGFyLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9y ZWFsbG9jX2V4dHJhZGF0YShBVkNvZGVjUGFyYW1ldGVycyogcGFyLCBNT1ZBdG9tIGF0b20pCiB7 CiAgICAgaW50IGVyciA9IDA7CiAgICAgdWludDY0X3Qgc2l6ZSA9ICh1aW50NjRfdClwYXItPmV4 dHJhZGF0YV9zaXplICsgYXRvbS5zaXplICsgOCArIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJ WkU7CkBAIC0yMjM1LDE5ICsyMjE5LDIwIEBAIHN0YXRpYyBpbnQgbW92X3JlYWxsb2NfZXh0cmFk YXRhKEFWQ29kZWNQYXJhbWV0ZXJzICpwYXIsIE1PVkF0b20gYXRvbSkKIH0KIAogLyogUmVhZCBh IHdob2xlIGF0b20gaW50byB0aGUgZXh0cmFkYXRhIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgYXRv bSByZWFkLCBwb3NzaWJseSB0cnVuY2F0ZWQgaWYgIT0gYXRvbS5zaXplICovCi1zdGF0aWMgaW50 NjRfdCBtb3ZfcmVhZF9hdG9tX2ludG9fZXh0cmFkYXRhKE1PVkNvbnRleHQgKmMsIEFWSU9Db250 ZXh0ICpwYiwgTU9WQXRvbSBhdG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFWQ29kZWNQYXJhbWV0ZXJzICpwYXIsIHVpbnQ4X3QgKmJ1ZikKK3N0YXRpYyBpbnQ2 NF90IG1vdl9yZWFkX2F0b21faW50b19leHRyYWRhdGEoTU9WQ29udGV4dCogYywgQVZJT0NvbnRl eHQqIHBiLCBNT1ZBdG9tIGF0b20sCisgICAgQVZDb2RlY1BhcmFtZXRlcnMqIHBhciwgdWludDhf dCogYnVmKQogewogICAgIGludDY0X3QgcmVzdWx0ID0gYXRvbS5zaXplOwogICAgIGludCBlcnI7 CiAKLSAgICBBVl9XQjMyKGJ1ZiAgICAsIGF0b20uc2l6ZSArIDgpOworICAgIEFWX1dCMzIoYnVm LCBhdG9tLnNpemUgKyA4KTsKICAgICBBVl9XTDMyKGJ1ZiArIDQsIGF0b20udHlwZSk7CiAgICAg ZXJyID0gZmZpb19yZWFkX3NpemUocGIsIGJ1ZiArIDgsIGF0b20uc2l6ZSk7CiAgICAgaWYgKGVy ciA8IDApIHsKICAgICAgICAgcGFyLT5leHRyYWRhdGFfc2l6ZSAtPSBhdG9tLnNpemU7CiAgICAg ICAgIHJldHVybiBlcnI7Ci0gICAgfSBlbHNlIGlmIChlcnIgPCBhdG9tLnNpemUpIHsKKyAgICB9 CisgICAgZWxzZSBpZiAoZXJyIDwgYXRvbS5zaXplKSB7CiAgICAgICAgIGF2X2xvZyhjLT5mYywg QVZfTE9HX1dBUk5JTkcsICJ0cnVuY2F0ZWQgZXh0cmFkYXRhXG4iKTsKICAgICAgICAgcGFyLT5l eHRyYWRhdGFfc2l6ZSAtPSBhdG9tLnNpemUgLSBlcnI7CiAgICAgICAgIHJlc3VsdCA9IGVycjsK QEAgLTIyNTcsMTYgKzIyNDIsMTYgQEAgc3RhdGljIGludDY0X3QgbW92X3JlYWRfYXRvbV9pbnRv X2V4dHJhZGF0YShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkEKIH0KIAogLyog RklYTUUgbW9kaWZ5IFFETTIvU1ZRMy9ILjI2NCBkZWNvZGVycyB0byB0YWtlIGZ1bGwgYXRvbSBh cyBleHRyYWRhdGEgKi8KLXN0YXRpYyBpbnQgbW92X3JlYWRfZXh0cmFkYXRhKE1PVkNvbnRleHQg KmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW51bSBBVkNvZGVjSUQgY29kZWNfaWQpCitzdGF0aWMgaW50IG1vdl9yZWFkX2V4 dHJhZGF0YShNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSwKKyAg ICBlbnVtIEFWQ29kZWNJRCBjb2RlY19pZCkKIHsKLSAgICBBVlN0cmVhbSAqc3Q7CisgICAgQVZT dHJlYW0qIHN0OwogICAgIHVpbnQ2NF90IG9yaWdpbmFsX3NpemU7CiAgICAgaW50IGVycjsKIAog ICAgIGlmIChjLT5mYy0+bmJfc3RyZWFtcyA8IDEpIC8vIHdpbGwgaGFwcGVuIHdpdGgganAyIGZp bGVzCiAgICAgICAgIHJldHVybiAwOwotICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5i X3N0cmVhbXMtMV07CisgICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcyAt IDFdOwogCiAgICAgaWYgKHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gY29kZWNfaWQpCiAgICAg ICAgIHJldHVybiAwOyAvKiB1bmV4cGVjdGVkIGNvZGVjX2lkIC0gZG9uJ3QgbWVzcyB3aXRoIGV4 dHJhZGF0YSAqLwpAQCAtMjI3NiwzNCArMjI2MSwzNCBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2V4 dHJhZGF0YShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSwKICAg ICBpZiAoZXJyKQogICAgICAgICByZXR1cm4gZXJyOwogCi0gICAgZXJyID0gIG1vdl9yZWFkX2F0 b21faW50b19leHRyYWRhdGEoYywgcGIsIGF0b20sIHN0LT5jb2RlY3BhciwgIHN0LT5jb2RlY3Bh ci0+ZXh0cmFkYXRhICsgb3JpZ2luYWxfc2l6ZSk7CisgICAgZXJyID0gbW92X3JlYWRfYXRvbV9p bnRvX2V4dHJhZGF0YShjLCBwYiwgYXRvbSwgc3QtPmNvZGVjcGFyLCBzdC0+Y29kZWNwYXItPmV4 dHJhZGF0YSArIG9yaWdpbmFsX3NpemUpOwogICAgIGlmIChlcnIgPCAwKQogICAgICAgICByZXR1 cm4gZXJyOwogICAgIHJldHVybiAwOyAvLyBOb3RlOiB0aGlzIGlzIHRoZSBvcmlnaW5hbCBiZWhh dmlvciB0byBpZ25vcmUgdHJ1bmNhdGlvbi4KIH0KIAogLyogd3JhcHBlciBmdW5jdGlvbnMgZm9y IHJlYWRpbmcgQUxBQy9BVlMvTUpQRUcvTUpQRUcyMDAwIGV4dHJhZGF0YSBhdG9tcyBvbmx5IGZv ciB0aG9zZSBjb2RlY3MgKi8KLXN0YXRpYyBpbnQgbW92X3JlYWRfYWxhYyhNT1ZDb250ZXh0ICpj LCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfYWxh YyhNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKICAgICBy ZXR1cm4gbW92X3JlYWRfZXh0cmFkYXRhKGMsIHBiLCBhdG9tLCBBVl9DT0RFQ19JRF9BTEFDKTsK IH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9hdnNzKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0 ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9hdnNzKE1PVkNvbnRleHQq IGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewogICAgIHJldHVybiBtb3ZfcmVh ZF9leHRyYWRhdGEoYywgcGIsIGF0b20sIEFWX0NPREVDX0lEX0NBVlMpOwogfQogCi1zdGF0aWMg aW50IG1vdl9yZWFkX2pwMmgoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9t IGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX2pwMmgoTU9WQ29udGV4dCogYywgQVZJT0NvbnRl eHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7CiAgICAgcmV0dXJuIG1vdl9yZWFkX2V4dHJhZGF0YShj LCBwYiwgYXRvbSwgQVZfQ09ERUNfSURfSlBFRzIwMDApOwogfQogCi1zdGF0aWMgaW50IG1vdl9y ZWFkX2RweGUoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitz dGF0aWMgaW50IG1vdl9yZWFkX2RweGUoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBN T1ZBdG9tIGF0b20pCiB7CiAgICAgcmV0dXJuIG1vdl9yZWFkX2V4dHJhZGF0YShjLCBwYiwgYXRv bSwgQVZfQ09ERUNfSURfUjEwSyk7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfYXZpZChNT1ZD b250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92 X3JlYWRfYXZpZChNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkK IHsKICAgICBpbnQgcmV0ID0gbW92X3JlYWRfZXh0cmFkYXRhKGMsIHBiLCBhdG9tLCBBVl9DT0RF Q19JRF9BVlVJKTsKICAgICBpZiAoIXJldCkKQEAgLTIzMTEsMjYgKzIyOTYsMjYgQEAgc3RhdGlj IGludCBtb3ZfcmVhZF9hdmlkKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRv bSBhdG9tKQogICAgIHJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfdGFyZ2Ff eTIxNihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRp YyBpbnQgbW92X3JlYWRfdGFyZ2FfeTIxNihNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIs IE1PVkF0b20gYXRvbSkKIHsKICAgICBpbnQgcmV0ID0gbW92X3JlYWRfZXh0cmFkYXRhKGMsIHBi LCBhdG9tLCBBVl9DT0RFQ19JRF9UQVJHQV9ZMjE2KTsKIAogICAgIGlmICghcmV0ICYmIGMtPmZj LT5uYl9zdHJlYW1zID49IDEpIHsKLSAgICAgICAgQVZDb2RlY1BhcmFtZXRlcnMgKnBhciA9IGMt PmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zLTFdLT5jb2RlY3BhcjsKKyAgICAgICAgQVZD b2RlY1BhcmFtZXRlcnMqIHBhciA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zIC0g MV0tPmNvZGVjcGFyOwogICAgICAgICBpZiAocGFyLT5leHRyYWRhdGFfc2l6ZSA+PSA0MCkgewog ICAgICAgICAgICAgcGFyLT5oZWlnaHQgPSBBVl9SQjE2KCZwYXItPmV4dHJhZGF0YVszNl0pOwot ICAgICAgICAgICAgcGFyLT53aWR0aCAgPSBBVl9SQjE2KCZwYXItPmV4dHJhZGF0YVszOF0pOwor ICAgICAgICAgICAgcGFyLT53aWR0aCA9IEFWX1JCMTYoJnBhci0+ZXh0cmFkYXRhWzM4XSk7CiAg ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVh ZF9hcmVzKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3Rh dGljIGludCBtb3ZfcmVhZF9hcmVzKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9W QXRvbSBhdG9tKQogewogICAgIGlmIChjLT5mYy0+bmJfc3RyZWFtcyA+PSAxKSB7Ci0gICAgICAg IEFWU3RyZWFtICpjb25zdCAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcyAt IDFdOwotICAgICAgICBGRlN0cmVhbSAqY29uc3Qgc3RpID0gZmZzdHJlYW0oc3QpOwotICAgICAg ICBBVkNvZGVjUGFyYW1ldGVycyAqcGFyID0gc3QtPmNvZGVjcGFyOworICAgICAgICBBVlN0cmVh bSogY29uc3QgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMgLSAxXTsKKyAg ICAgICAgRkZTdHJlYW0qIGNvbnN0IHN0aSA9IGZmc3RyZWFtKHN0KTsKKyAgICAgICAgQVZDb2Rl Y1BhcmFtZXRlcnMqIHBhciA9IHN0LT5jb2RlY3BhcjsKIAogICAgICAgICBpZiAocGFyLT5jb2Rl Y190YWcgPT0gTUtUQUcoJ0EnLCAnVicsICdpJywgJ24nKSAmJgogICAgICAgICAgICAgcGFyLT5j b2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0ICYmCkBAIC0yMzQyLDEwICsyMzI3LDExIEBAIHN0 YXRpYyBpbnQgbW92X3JlYWRfYXJlcyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1P VkF0b20gYXRvbSkKICAgICAgICAgICAgIGlmIChjaWQgPT0gMHhkNGQgfHwgY2lkID09IDB4ZDRl KQogICAgICAgICAgICAgICAgIHBhci0+d2lkdGggPSAxNDQwOwogICAgICAgICAgICAgcmV0dXJu IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoKHBhci0+Y29kZWNfdGFnID09IE1LVEFHKCdBJywgJ1Yn LCAnZCcsICcxJykgfHwKLSAgICAgICAgICAgICAgICAgICAgcGFyLT5jb2RlY190YWcgPT0gTUtU QUcoJ0EnLCAnVicsICdqJywgJzInKSB8fAotICAgICAgICAgICAgICAgICAgICBwYXItPmNvZGVj X3RhZyA9PSBNS1RBRygnQScsICdWJywgJ2QnLCAnbicpKSAmJgotICAgICAgICAgICAgICAgICAg IGF0b20uc2l6ZSA+PSAyNCkgeworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChwYXItPmNv ZGVjX3RhZyA9PSBNS1RBRygnQScsICdWJywgJ2QnLCAnMScpIHx8CisgICAgICAgICAgICBwYXIt PmNvZGVjX3RhZyA9PSBNS1RBRygnQScsICdWJywgJ2onLCAnMicpIHx8CisgICAgICAgICAgICBw YXItPmNvZGVjX3RhZyA9PSBNS1RBRygnQScsICdWJywgJ2QnLCAnbicpKSAmJgorICAgICAgICAg ICAgYXRvbS5zaXplID49IDI0KSB7CiAgICAgICAgICAgICBpbnQgbnVtLCBkZW47CiAgICAgICAg ICAgICBhdmlvX3NraXAocGIsIDEyKTsKICAgICAgICAgICAgIG51bSA9IGF2aW9fcmIzMihwYik7 CkBAIC0yMzY4LDIwICsyMzU0LDIwIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfYXJlcyhNT1ZDb250 ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gbW92X3Jl YWRfYXZpZChjLCBwYiwgYXRvbSk7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfYWNscihNT1ZD b250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92 X3JlYWRfYWNscihNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkK IHsKICAgICBpbnQgcmV0ID0gMDsKICAgICBpbnQgbGVuZ3RoID0gMDsKICAgICB1aW50NjRfdCBv cmlnaW5hbF9zaXplOwogICAgIGlmIChjLT5mYy0+bmJfc3RyZWFtcyA+PSAxKSB7Ci0gICAgICAg IEFWQ29kZWNQYXJhbWV0ZXJzICpwYXIgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFt cy0xXS0+Y29kZWNwYXI7CisgICAgICAgIEFWQ29kZWNQYXJhbWV0ZXJzKiBwYXIgPSBjLT5mYy0+ c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcyAtIDFdLT5jb2RlY3BhcjsKICAgICAgICAgaWYgKHBh ci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCkKICAgICAgICAgICAgIHJldHVybiAwOwog ICAgICAgICBpZiAoYXRvbS5zaXplID09IDE2KSB7CiAgICAgICAgICAgICBvcmlnaW5hbF9zaXpl ID0gcGFyLT5leHRyYWRhdGFfc2l6ZTsKICAgICAgICAgICAgIHJldCA9IG1vdl9yZWFsbG9jX2V4 dHJhZGF0YShwYXIsIGF0b20pOwogICAgICAgICAgICAgaWYgKCFyZXQpIHsKLSAgICAgICAgICAg ICAgICBsZW5ndGggPSAgbW92X3JlYWRfYXRvbV9pbnRvX2V4dHJhZGF0YShjLCBwYiwgYXRvbSwg cGFyLCBwYXItPmV4dHJhZGF0YSArIG9yaWdpbmFsX3NpemUpOworICAgICAgICAgICAgICAgIGxl bmd0aCA9IG1vdl9yZWFkX2F0b21faW50b19leHRyYWRhdGEoYywgcGIsIGF0b20sIHBhciwgcGFy LT5leHRyYWRhdGEgKyBvcmlnaW5hbF9zaXplKTsKICAgICAgICAgICAgICAgICBpZiAobGVuZ3Ro ID09IGF0b20uc2l6ZSkgewogICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IHJhbmdl X3ZhbHVlID0gcGFyLT5leHRyYWRhdGFbb3JpZ2luYWxfc2l6ZSArIDE5XTsKICAgICAgICAgICAg ICAgICAgICAgc3dpdGNoIChyYW5nZV92YWx1ZSkgewpAQCAtMjM5NiwxNCArMjM4MiwxNyBAQCBz dGF0aWMgaW50IG1vdl9yZWFkX2FjbHIoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBN T1ZBdG9tIGF0b20pCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBmZl9kbG9nKGMtPmZjLCAiY29sb3JfcmFu Z2U6ICVkXG4iLCBwYXItPmNvbG9yX3JhbmdlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgLyogRm9yIHNvbWUgcmVhc29uIHRoZSB3aG9sZSBhdG9tIHdhcyBu b3QgYWRkZWQgdG8gdGhlIGV4dHJhZGF0YSAqLwotICAgICAgICAgICAgICAgICAgYXZfbG9nKGMt PmZjLCBBVl9MT0dfRVJST1IsICJhY2xyIG5vdCBkZWNvZGVkIC0gaW5jb21wbGV0ZSBhdG9tXG4i KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvKiBGb3Igc29tZSByZWFzb24gdGhlIHdo b2xlIGF0b20gd2FzIG5vdCBhZGRlZCB0byB0aGUgZXh0cmFkYXRhICovCisgICAgICAgICAgICAg ICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0VSUk9SLCAiYWNsciBub3QgZGVjb2RlZCAtIGlu Y29tcGxldGUgYXRvbVxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJS T1IsICJhY2xyIG5vdCBkZWNvZGVkIC0gdW5hYmxlIHRvIGFkZCBhdG9tIHRvIGV4dHJhZGF0YVxu Iik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0KKyAgICAgICAg ZWxzZSB7CiAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19XQVJOSU5HLCAiYWNsciBu b3QgZGVjb2RlZCAtIHVuZXhwZWN0ZWQgc2l6ZSAlIlBSSWQ2NCJcbiIsIGF0b20uc2l6ZSk7CiAg ICAgICAgIH0KICAgICB9CkBAIC0yNDExLDIxICsyNDAwLDIxIEBAIHN0YXRpYyBpbnQgbW92X3Jl YWRfYWNscihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAg ICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFkX3N2cTMoTU9WQ29udGV4dCAq YywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX3N2 cTMoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7CiAgICAg cmV0dXJuIG1vdl9yZWFkX2V4dHJhZGF0YShjLCBwYiwgYXRvbSwgQVZfQ09ERUNfSURfU1ZRMyk7 CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfd2F2ZShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4 dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfd2F2ZShNT1ZDb250ZXh0 KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBBVlN0cmVhbSAqc3Q7 CisgICAgQVZTdHJlYW0qIHN0OwogICAgIGludCByZXQ7CiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0 cmVhbXMgPCAxKQogICAgICAgICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2Mt PmZjLT5uYl9zdHJlYW1zLTFdOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0 cmVhbXMgLSAxXTsKIAotICAgIGlmICgodWludDY0X3QpYXRvbS5zaXplID4gKDE8PDMwKSkKKyAg ICBpZiAoKHVpbnQ2NF90KWF0b20uc2l6ZSA+ICgxIDw8IDMwKSkKICAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CiAKICAgICBpZiAoc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9PSBB Vl9DT0RFQ19JRF9RRE0yIHx8CkBAIC0yNDM1LDcgKzI0MjQsOCBAQCBzdGF0aWMgaW50IG1vdl9y ZWFkX3dhdmUoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAg ICAgICAgIHJldCA9IGZmX2dldF9leHRyYWRhdGEoYy0+ZmMsIHN0LT5jb2RlY3BhciwgcGIsIGF0 b20uc2l6ZSk7CiAgICAgICAgIGlmIChyZXQgPCAwKQogICAgICAgICAgICAgcmV0dXJuIHJldDsK LSAgICB9IGVsc2UgaWYgKGF0b20uc2l6ZSA+IDgpIHsgLyogdG8gcmVhZCBmcm1hLCBlc2RzIGF0 b21zICovCisgICAgfQorICAgIGVsc2UgaWYgKGF0b20uc2l6ZSA+IDgpIHsgLyogdG8gcmVhZCBm cm1hLCBlc2RzIGF0b21zICovCiAgICAgICAgIGlmIChzdC0+Y29kZWNwYXItPmNvZGVjX2lkID09 IEFWX0NPREVDX0lEX0FMQUMgJiYgYXRvbS5zaXplID49IDI0KSB7CiAgICAgICAgICAgICB1aW50 NjRfdCBidWZmZXI7CiAgICAgICAgICAgICByZXQgPSBmZmlvX2Vuc3VyZV9zZWVrYmFjayhwYiwg OCk7CkBAIC0yNDQzLDE5ICsyNDMzLDIwIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfd2F2ZShNT1ZD b250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgICAgICAg ICByZXR1cm4gcmV0OwogICAgICAgICAgICAgYnVmZmVyID0gYXZpb19yYjY0KHBiKTsKICAgICAg ICAgICAgIGF0b20uc2l6ZSAtPSA4OwotICAgICAgICAgICAgaWYgKCAgKGJ1ZmZlciAmIDB4RkZG RkZGRkYpID09IE1LQkVUQUcoJ2YnLCdyJywnbScsJ2EnKQorICAgICAgICAgICAgaWYgKChidWZm ZXIgJiAweEZGRkZGRkZGKSA9PSBNS0JFVEFHKCdmJywgJ3InLCAnbScsICdhJykKICAgICAgICAg ICAgICAgICAmJiBidWZmZXIgPj4gMzIgPD0gYXRvbS5zaXplCiAgICAgICAgICAgICAgICAgJiYg YnVmZmVyID4+IDMyID49IDgpIHsKICAgICAgICAgICAgICAgICBhdmlvX3NraXAocGIsIC04KTsK ICAgICAgICAgICAgICAgICBhdG9tLnNpemUgKz0gODsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo IXN0LT5jb2RlY3Bhci0+ZXh0cmFkYXRhX3NpemUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGVsc2UgaWYgKCFzdC0+Y29kZWNwYXItPmV4dHJhZGF0YV9zaXplKSB7CiAjZGVmaW5lIEFM QUNfRVhUUkFEQVRBX1NJWkUgMzYKICAgICAgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmV4dHJh ZGF0YSA9IGF2X21hbGxvY3ooQUxBQ19FWFRSQURBVEFfU0laRSArIEFWX0lOUFVUX0JVRkZFUl9Q QURESU5HX1NJWkUpOwogICAgICAgICAgICAgICAgIGlmICghc3QtPmNvZGVjcGFyLT5leHRyYWRh dGEpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiAgICAgICAg ICAgICAgICAgc3QtPmNvZGVjcGFyLT5leHRyYWRhdGFfc2l6ZSA9IEFMQUNfRVhUUkFEQVRBX1NJ WkU7Ci0gICAgICAgICAgICAgICAgQVZfV0IzMihzdC0+Y29kZWNwYXItPmV4dHJhZGF0YSAgICAs IEFMQUNfRVhUUkFEQVRBX1NJWkUpOwotICAgICAgICAgICAgICAgIEFWX1dCMzIoc3QtPmNvZGVj cGFyLT5leHRyYWRhdGEgKyA0LCBNS1RBRygnYScsJ2wnLCdhJywnYycpKTsKKyAgICAgICAgICAg ICAgICBBVl9XQjMyKHN0LT5jb2RlY3Bhci0+ZXh0cmFkYXRhLCBBTEFDX0VYVFJBREFUQV9TSVpF KTsKKyAgICAgICAgICAgICAgICBBVl9XQjMyKHN0LT5jb2RlY3Bhci0+ZXh0cmFkYXRhICsgNCwg TUtUQUcoJ2EnLCAnbCcsICdhJywgJ2MnKSk7CiAgICAgICAgICAgICAgICAgQVZfV0I2NChzdC0+ Y29kZWNwYXItPmV4dHJhZGF0YSArIDEyLCBidWZmZXIpOwogICAgICAgICAgICAgICAgIGF2aW9f cmVhZChwYiwgc3QtPmNvZGVjcGFyLT5leHRyYWRhdGEgKyAyMCwgMTYpOwogICAgICAgICAgICAg ICAgIGF2aW9fc2tpcChwYiwgYXRvbS5zaXplIC0gMjQpOwpAQCAtMjQ2NCw3ICsyNDU1LDggQEAg c3RhdGljIGludCBtb3ZfcmVhZF93YXZlKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwg TU9WQXRvbSBhdG9tKQogICAgICAgICB9CiAgICAgICAgIGlmICgocmV0ID0gbW92X3JlYWRfZGVm YXVsdChjLCBwYiwgYXRvbSkpIDwgMCkKICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgfSBl bHNlCisgICAgfQorICAgIGVsc2UKICAgICAgICAgYXZpb19za2lwKHBiLCBhdG9tLnNpemUpOwog ICAgIHJldHVybiAwOwogfQpAQCAtMjQ3MywxOSArMjQ2NSwxOSBAQCBzdGF0aWMgaW50IG1vdl9y ZWFkX3dhdmUoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAg KiBUaGlzIGZ1bmN0aW9uIHJlYWRzIGF0b20gY29udGVudCBhbmQgcHV0cyBkYXRhIGluIGV4dHJh ZGF0YSB3aXRob3V0IHRhZwogICogbm9yIHNpemUgdW5saWtlIG1vdl9yZWFkX2V4dHJhZGF0YS4K ICAqLwotc3RhdGljIGludCBtb3ZfcmVhZF9nbGJsKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0 ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9nbGJsKE1PVkNvbnRleHQq IGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEFWU3RyZWFtICpzdDsK KyAgICBBVlN0cmVhbSogc3Q7CiAgICAgaW50IHJldDsKIAogICAgIHN0ID0gZ2V0X2N1cnJfc3Qo Yyk7CiAgICAgaWYgKCFzdCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoKHVpbnQ2NF90 KWF0b20uc2l6ZSA+ICgxPDwzMCkpCisgICAgaWYgKCh1aW50NjRfdClhdG9tLnNpemUgPiAoMSA8 PCAzMCkpCiAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogCi0gICAgaWYgKGF0 b20udHlwZSA9PSBNS1RBRygndicsJ3YnLCdjJywnQycpKSB7CisgICAgaWYgKGF0b20udHlwZSA9 PSBNS1RBRygndicsICd2JywgJ2MnLCAnQycpKSB7CiAgICAgICAgIGF2aW9fc2tpcChwYiwgNCk7 CiAgICAgICAgIGF0b20uc2l6ZSAtPSA0OwogICAgIH0KQEAgLTI0OTgsNyArMjQ5MCw3IEBAIHN0 YXRpYyBpbnQgbW92X3JlYWRfZ2xibChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1P VkF0b20gYXRvbSkKICAgICAgICAgaWYgKGF2aW9fZmVvZihwYikpCiAgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICAgICAgYXZpb19zZWVrKHBiLCAtOCwgU0VFS19D VVIpOwotICAgICAgICBpZiAodHlwZSA9PSBNS1RBRygnZicsJ2knLCdlJywnbCcpICYmIHNpemUg PT0gYXRvbS5zaXplKQorICAgICAgICBpZiAodHlwZSA9PSBNS1RBRygnZicsICdpJywgJ2UnLCAn bCcpICYmIHNpemUgPT0gYXRvbS5zaXplKQogICAgICAgICAgICAgcmV0dXJuIG1vdl9yZWFkX2Rl ZmF1bHQoYywgcGIsIGF0b20pOwogICAgIH0KICAgICBpZiAoc3QtPmNvZGVjcGFyLT5leHRyYWRh dGFfc2l6ZSA+IDEgJiYgc3QtPmNvZGVjcGFyLT5leHRyYWRhdGEpIHsKQEAgLTI1MDgsNyArMjUw MCw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZ2xibChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4 dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXQgPSBmZl9nZXRfZXh0cmFkYXRhKGMtPmZjLCBz dC0+Y29kZWNwYXIsIHBiLCBhdG9tLnNpemUpOwogICAgIGlmIChyZXQgPCAwKQogICAgICAgICBy ZXR1cm4gcmV0OwotICAgIGlmIChhdG9tLnR5cGUgPT0gTUtUQUcoJ2gnLCd2JywnYycsJ0MnKSAm JiBzdC0+Y29kZWNwYXItPmNvZGVjX3RhZyA9PSBNS1RBRygnZCcsJ3YnLCdoJywnMScpKQorICAg IGlmIChhdG9tLnR5cGUgPT0gTUtUQUcoJ2gnLCAndicsICdjJywgJ0MnKSAmJiBzdC0+Y29kZWNw YXItPmNvZGVjX3RhZyA9PSBNS1RBRygnZCcsICd2JywgJ2gnLCAnMScpKQogICAgICAgICAvKiBI RVZDLWJhc2VkIERvbGJ5IFZpc2lvbiBkZXJpdmVkIGZyb20gaHZjMS4KICAgICAgICAgICAgSGFw cGVucyB0byBtYXRjaCB3aXRoIGFuIGlkZW50aWZpZXIKICAgICAgICAgICAgcHJldmlvdXNseSB1 dGlsaXplZCBmb3IgRFYuIFRodXMsIGlmIHdlIGhhdmUKQEAgLTI1MTksMTcgKzI1MTEsMTcgQEAg c3RhdGljIGludCBtb3ZfcmVhZF9nbGJsKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwg TU9WQXRvbSBhdG9tKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFkX2R2 YzEoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMg aW50IG1vdl9yZWFkX2R2YzEoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9t IGF0b20pCiB7Ci0gICAgQVZTdHJlYW0gKnN0OworICAgIEFWU3RyZWFtKiBzdDsKICAgICB1aW50 OF90IHByb2ZpbGVfbGV2ZWw7CiAgICAgaW50IHJldDsKIAogICAgIGlmIChjLT5mYy0+bmJfc3Ry ZWFtcyA8IDEpCiAgICAgICAgIHJldHVybiAwOwotICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ ZmMtPm5iX3N0cmVhbXMtMV07CisgICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3Ry ZWFtcyAtIDFdOwogCi0gICAgaWYgKGF0b20uc2l6ZSA+PSAoMTw8MjgpIHx8IGF0b20uc2l6ZSA8 IDcpCisgICAgaWYgKGF0b20uc2l6ZSA+PSAoMSA8PCAyOCkgfHwgYXRvbS5zaXplIDwgNykKICAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAKICAgICBwcm9maWxlX2xldmVsID0g YXZpb19yOChwYik7CkBAIC0yNTczLDE4ICsyNTY1LDE4IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRf c2JhcyhNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKICAqIGJ1 dCBjYW4gaGF2ZSBleHRyYWRhdGEgYXBwZW5kZWQgYXQgdGhlIGVuZCBhZnRlciB0aGUgNDAgYnl0 ZXMgYmVsb25naW5nCiAgKiB0byB0aGUgc3RydWN0LgogICovCi1zdGF0aWMgaW50IG1vdl9yZWFk X3N0cmYoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0 aWMgaW50IG1vdl9yZWFkX3N0cmYoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZB dG9tIGF0b20pCiB7Ci0gICAgQVZTdHJlYW0gKnN0OworICAgIEFWU3RyZWFtKiBzdDsKICAgICBp bnQgcmV0OwogCiAgICAgaWYgKGMtPmZjLT5uYl9zdHJlYW1zIDwgMSkKICAgICAgICAgcmV0dXJu IDA7CiAgICAgaWYgKGF0b20uc2l6ZSA8PSA0MCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3Qg PSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcy0xXTsKKyAgICBzdCA9IGMtPmZjLT5z dHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zIC0gMV07CiAKLSAgICBpZiAoKHVpbnQ2NF90KWF0b20u c2l6ZSA+ICgxPDwzMCkpCisgICAgaWYgKCh1aW50NjRfdClhdG9tLnNpemUgPiAoMSA8PCAzMCkp CiAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogCiAgICAgYXZpb19za2lwKHBi LCA0MCk7CkBAIC0yNTk1LDEwICsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfc3RyZihN T1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4g MDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9zdGNvKE1PVkNvbnRleHQgKmMsIEFWSU9Db250 ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9zdGNvKE1PVkNvbnRl eHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEFWU3RyZWFtICpz dDsKLSAgICBNT1ZTdHJlYW1Db250ZXh0ICpzYzsKKyAgICBBVlN0cmVhbSogc3Q7CisgICAgTU9W U3RyZWFtQ29udGV4dCogc2M7CiAgICAgdW5zaWduZWQgaW50IGksIGVudHJpZXM7CiAKICAgICBp ZiAoYy0+dHJha19pbmRleCA8IDApIHsKQEAgLTI2MDcsNyArMjU5OSw3IEBAIHN0YXRpYyBpbnQg bW92X3JlYWRfc3RjbyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRv bSkKICAgICB9CiAgICAgaWYgKGMtPmZjLT5uYl9zdHJlYW1zIDwgMSkKICAgICAgICAgcmV0dXJu IDA7Ci0gICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcy0xXTsKKyAgICBz dCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zIC0gMV07CiAgICAgc2MgPSBzdC0+ cHJpdl9kYXRhOwogCiAgICAgYXZpb19yOChwYik7IC8qIHZlcnNpb24gKi8KQEAgLTI2MTgsOCAr MjYxMCw4IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfc3RjbyhNT1ZDb250ZXh0ICpjLCBBVklPQ29u dGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBlbnRyaWVzID0gYXZpb19yYjMyKHBiKTsKICAg ICBlbnRyaWVzID0KICAgICAgICAgRkZNSU4oZW50cmllcywKLSAgICAgICAgICAgICAgRkZNQVgo MCwgKGF0b20uc2l6ZSAtIDgpIC8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdG9tLnR5 cGUgPT0gTUtUQUcoJ3MnLCAndCcsICdjJywgJ28nKSA/IDQgOiA4KSkpOworICAgICAgICAgICAg RkZNQVgoMCwgKGF0b20uc2l6ZSAtIDgpIC8KKyAgICAgICAgICAgICAgICAoYXRvbS50eXBlID09 IE1LVEFHKCdzJywgJ3QnLCAnYycsICdvJykgPyA0IDogOCkpKTsKIAogICAgIGlmICghZW50cmll cykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNjM2LDEwICsyNjI4LDEwIEBAIHN0YXRpYyBpbnQg bW92X3JlYWRfc3RjbyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRv bSkKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKICAgICBzYy0+Y2h1bmtfY291bnQg PSBlbnRyaWVzOwogCi0gICAgaWYgICAgICAoYXRvbS50eXBlID09IE1LVEFHKCdzJywndCcsJ2Mn LCdvJykpCisgICAgaWYgKGF0b20udHlwZSA9PSBNS1RBRygncycsICd0JywgJ2MnLCAnbycpKQog ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZW50cmllcyAmJiAhcGItPmVvZl9yZWFjaGVkOyBpKysp CiAgICAgICAgICAgICBzYy0+Y2h1bmtfb2Zmc2V0c1tpXSA9IGF2aW9fcmIzMihwYik7Ci0gICAg ZWxzZSBpZiAoYXRvbS50eXBlID09IE1LVEFHKCdjJywnbycsJzYnLCc0JykpCisgICAgZWxzZSBp ZiAoYXRvbS50eXBlID09IE1LVEFHKCdjJywgJ28nLCAnNicsICc0JykpCiAgICAgICAgIGZvciAo aSA9IDA7IGkgPCBlbnRyaWVzICYmICFwYi0+ZW9mX3JlYWNoZWQ7IGkrKykgewogICAgICAgICAg ICAgc2MtPmNodW5rX29mZnNldHNbaV0gPSBhdmlvX3JiNjQocGIpOwogICAgICAgICAgICAgaWYg KHNjLT5jaHVua19vZmZzZXRzW2ldIDwgMCkgewpAQCAtMjY2MCwzMiArMjY1MiwzMyBAQCBzdGF0 aWMgaW50IG1vdl9yZWFkX3N0Y28oTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZB dG9tIGF0b20pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X2NvZGVjX2lkKEFW U3RyZWFtICpzdCwgdWludDMyX3QgZm9ybWF0KQorc3RhdGljIGludCBtb3ZfY29kZWNfaWQoQVZT dHJlYW0qIHN0LCB1aW50MzJfdCBmb3JtYXQpCiB7CiAgICAgaW50IGlkID0gZmZfY29kZWNfZ2V0 X2lkKGZmX2NvZGVjX21vdmF1ZGlvX3RhZ3MsIGZvcm1hdCk7CiAKICAgICBpZiAoaWQgPD0gMCAm JgogICAgICAgICAoKGZvcm1hdCAmIDB4RkZGRikgPT0gJ20nICsgKCdzJyA8PCA4KSB8fAotICAg ICAgICAgKGZvcm1hdCAmIDB4RkZGRikgPT0gJ1QnICsgKCdTJyA8PCA4KSkpCisgICAgICAgICAg ICAoZm9ybWF0ICYgMHhGRkZGKSA9PSAnVCcgKyAoJ1MnIDw8IDgpKSkKICAgICAgICAgaWQgPSBm Zl9jb2RlY19nZXRfaWQoZmZfY29kZWNfd2F2X3RhZ3MsIGF2X2Jzd2FwMzIoZm9ybWF0KSAmIDB4 RkZGRik7CiAKICAgICBpZiAoc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlICE9IEFWTUVESUFfVFlQ RV9WSURFTyAmJiBpZCA+IDApIHsKICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlID0g QVZNRURJQV9UWVBFX0FVRElPOwotICAgIH0gZWxzZSBpZiAoc3QtPmNvZGVjcGFyLT5jb2RlY190 eXBlICE9IEFWTUVESUFfVFlQRV9BVURJTyAmJgotICAgICAgICAgICAgICAgLyogc2tpcCBvbGQg QVNGIE1QRUctNCB0YWcgKi8KLSAgICAgICAgICAgICAgIGZvcm1hdCAmJiBmb3JtYXQgIT0gTUtU QUcoJ20nLCdwJywnNCcsJ3MnKSkgeworICAgIH0KKyAgICBlbHNlIGlmIChzdC0+Y29kZWNwYXIt PmNvZGVjX3R5cGUgIT0gQVZNRURJQV9UWVBFX0FVRElPICYmCisgICAgICAgIC8qIHNraXAgb2xk IEFTRiBNUEVHLTQgdGFnICovCisgICAgICAgIGZvcm1hdCAmJiBmb3JtYXQgIT0gTUtUQUcoJ20n LCAncCcsICc0JywgJ3MnKSkgewogICAgICAgICBpZCA9IGZmX2NvZGVjX2dldF9pZChmZl9jb2Rl Y19tb3Z2aWRlb190YWdzLCBmb3JtYXQpOwogICAgICAgICBpZiAoaWQgPD0gMCkKICAgICAgICAg ICAgIGlkID0gZmZfY29kZWNfZ2V0X2lkKGZmX2NvZGVjX2JtcF90YWdzLCBmb3JtYXQpOwogICAg ICAgICBpZiAoaWQgPiAwKQogICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlID0g QVZNRURJQV9UWVBFX1ZJREVPOwogICAgICAgICBlbHNlIGlmIChzdC0+Y29kZWNwYXItPmNvZGVj X3R5cGUgPT0gQVZNRURJQV9UWVBFX0RBVEEgfHwKLSAgICAgICAgICAgICAgICAgICAgKHN0LT5j b2RlY3Bhci0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfU1VCVElUTEUgJiYKLSAgICAgICAg ICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9OT05FKSkg eworICAgICAgICAgICAgKHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVf U1VCVElUTEUgJiYKKyAgICAgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkID09IEFW X0NPREVDX0lEX05PTkUpKSB7CiAgICAgICAgICAgICBpZCA9IGZmX2NvZGVjX2dldF9pZChmZl9j b2RlY19tb3ZzdWJ0aXRsZV90YWdzLCBmb3JtYXQpOwogICAgICAgICAgICAgaWYgKGlkIDw9IDAp IHsKICAgICAgICAgICAgICAgICBpZCA9IChmb3JtYXQgPT0gTU9WX01QNF9UVE1MX1RBRyB8fCBm b3JtYXQgPT0gTU9WX0lTTVZfVFRNTF9UQUcpID8KLSAgICAgICAgICAgICAgICAgICAgIEFWX0NP REVDX0lEX1RUTUwgOiBpZDsKKyAgICAgICAgICAgICAgICAgICAgQVZfQ09ERUNfSURfVFRNTCA6 IGlkOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoaWQgPiAwKQpAQCAtMjcwMCw4 ICsyNjkzLDggQEAgc3RhdGljIGludCBtb3ZfY29kZWNfaWQoQVZTdHJlYW0gKnN0LCB1aW50MzJf dCBmb3JtYXQpCiAgICAgcmV0dXJuIGlkOwogfQogCi1zdGF0aWMgdm9pZCBtb3ZfcGFyc2Vfc3Rz ZF92aWRlbyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBVlN0cmVhbSAqc3QsIE1PVlN0cmVhbUNvbnRleHQgKnNjKQorc3Rh dGljIHZvaWQgbW92X3BhcnNlX3N0c2RfdmlkZW8oTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQq IHBiLAorICAgIEFWU3RyZWFtKiBzdCwgTU9WU3RyZWFtQ29udGV4dCogc2MpCiB7CiAgICAgdWlu dDhfdCBjb2RlY19uYW1lWzMyXSA9IHsgMCB9OwogICAgIGludDY0X3Qgc3RzZF9zdGFydDsKQEAg LTI3MTIsMjAgKzI3MDUsMTQgQEAgc3RhdGljIHZvaWQgbW92X3BhcnNlX3N0c2RfdmlkZW8oTU9W Q29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLAogICAgICAqIHJlYWQgaW4gZmZfbW92X3JlYWRf c3RzZF9lbnRyaWVzKCkgKi8KICAgICBzdHNkX3N0YXJ0ID0gYXZpb190ZWxsKHBiKSAtIDE2Owog Ci0gICAgaWYgKGMtPmlzb20pIHsKLSAgICAgICAgYXZpb19za2lwKHBiLCAyKTsgIC8qIHByZV9k ZWZpbmVkICovCi0gICAgICAgIGF2aW9fc2tpcChwYiwgMik7ICAvKiByZXNlcnZlZCAqLwotICAg ICAgICBhdmlvX3NraXAocGIsIDEyKTsgLyogcHJlX2RlZmluZWQgKi8KLSAgICB9IGVsc2Ugewot ICAgICAgICBhdmlvX3JiMTYocGIpOyAvKiB2ZXJzaW9uICovCi0gICAgICAgIGF2aW9fcmIxNihw Yik7IC8qIHJldmlzaW9uIGxldmVsICovCi0gICAgICAgIGlkID0gYXZpb19ybDMyKHBiKTsgLyog dmVuZG9yICovCi0gICAgICAgIGF2X2RpY3Rfc2V0KCZzdC0+bWV0YWRhdGEsICJ2ZW5kb3JfaWQi LCBhdl9mb3VyY2Myc3RyKGlkKSwgMCk7Ci0gICAgICAgIGF2aW9fcmIzMihwYik7IC8qIHRlbXBv cmFsIHF1YWxpdHkgKi8KLSAgICAgICAgYXZpb19yYjMyKHBiKTsgLyogc3BhdGlhbCBxdWFsaXR5 ICovCi0gICAgfQorICAgIGF2aW9fcmIxNihwYik7IC8qIHZlcnNpb24gKi8KKyAgICBhdmlvX3Ji MTYocGIpOyAvKiByZXZpc2lvbiBsZXZlbCAqLworICAgIGlkID0gYXZpb19ybDMyKHBiKTsgLyog dmVuZG9yICovCisgICAgYXZfZGljdF9zZXQoJnN0LT5tZXRhZGF0YSwgInZlbmRvcl9pZCIsIGF2 X2ZvdXJjYzJzdHIoaWQpLCAwKTsKKyAgICBhdmlvX3JiMzIocGIpOyAvKiB0ZW1wb3JhbCBxdWFs aXR5ICovCisgICAgYXZpb19yYjMyKHBiKTsgLyogc3BhdGlhbCBxdWFsaXR5ICovCiAKLSAgICBz dC0+Y29kZWNwYXItPndpZHRoICA9IGF2aW9fcmIxNihwYik7IC8qIHdpZHRoICovCisgICAgc3Qt PmNvZGVjcGFyLT53aWR0aCA9IGF2aW9fcmIxNihwYik7IC8qIHdpZHRoICovCiAgICAgc3QtPmNv ZGVjcGFyLT5oZWlnaHQgPSBhdmlvX3JiMTYocGIpOyAvKiBoZWlnaHQgKi8KIAogICAgIGF2aW9f cmIzMihwYik7IC8qIGhvcml6IHJlc29sdXRpb24gKi8KQEAgLTI3NTAsNyArMjczNyw3IEBAIHN0 YXRpYyB2b2lkIG1vdl9wYXJzZV9zdHNkX3ZpZGVvKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0 ICpwYiwKICAgICAgICAgc3QtPmNvZGVjcGFyLT5oZWlnaHQgJj0gfjE7CiAgICAgfQogICAgIC8q IEZsYXNoIE1lZGlhIFNlcnZlciB1c2VzIHRhZyBILjI2MyB3aXRoIFNvcmVuc29uIFNwYXJrICov Ci0gICAgaWYgKHN0LT5jb2RlY3Bhci0+Y29kZWNfdGFnID09IE1LVEFHKCdIJywnMicsJzYnLCcz JykgJiYKKyAgICBpZiAoc3QtPmNvZGVjcGFyLT5jb2RlY190YWcgPT0gTUtUQUcoJ0gnLCAnMics ICc2JywgJzMnKSAmJgogICAgICAgICAhc3RybmNtcChjb2RlY19uYW1lLCAiU29yZW5zb24gSDI2 MyIsIDEzKSkKICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFWX0NPREVDX0lEX0ZM VjE7CiAKQEAgLTI3NjQsMjIgKzI3NTEsMTggQEAgc3RhdGljIHZvaWQgbW92X3BhcnNlX3N0c2Rf dmlkZW8oTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLAogICAgIH0KIH0KIAotc3RhdGlj IHZvaWQgbW92X3BhcnNlX3N0c2RfYXVkaW8oTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBi LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZTdHJlYW0gKnN0LCBNT1ZTdHJl YW1Db250ZXh0ICpzYykKK3N0YXRpYyB2b2lkIG1vdl9wYXJzZV9zdHNkX2F1ZGlvKE1PVkNvbnRl eHQqIGMsIEFWSU9Db250ZXh0KiBwYiwKKyAgICBBVlN0cmVhbSogc3QsIE1PVlN0cmVhbUNvbnRl eHQqIHNjKQogewogICAgIGludCBiaXRzX3Blcl9zYW1wbGUsIGZsYWdzOwogICAgIHVpbnQxNl90 IHZlcnNpb24gPSBhdmlvX3JiMTYocGIpOwogICAgIHVpbnQzMl90IGlkID0gMDsKLSAgICBBVkRp Y3Rpb25hcnlFbnRyeSAqY29tcGF0aWJsZV9icmFuZHMgPSBhdl9kaWN0X2dldChjLT5mYy0+bWV0 YWRhdGEsICJjb21wYXRpYmxlX2JyYW5kcyIsIE5VTEwsIEFWX0RJQ1RfTUFUQ0hfQ0FTRSk7Cisg ICAgQVZEaWN0aW9uYXJ5RW50cnkqIGNvbXBhdGlibGVfYnJhbmRzID0gYXZfZGljdF9nZXQoYy0+ ZmMtPm1ldGFkYXRhLCAiY29tcGF0aWJsZV9icmFuZHMiLCBOVUxMLCBBVl9ESUNUX01BVENIX0NB U0UpOwogICAgIGludCBjaGFubmVsX2NvdW50OwogCi0gICAgaWYgKGMtPmlzb20pCi0gICAgICAg IGF2aW9fc2tpcChwYiwgNik7IC8qIHJlc2VydmVkICovCi0gICAgZWxzZSB7Ci0gICAgICAgIGF2 aW9fcmIxNihwYik7IC8qIHJldmlzaW9uIGxldmVsICovCi0gICAgICAgIGlkID0gYXZpb19ybDMy KHBiKTsgLyogdmVuZG9yICovCi0gICAgICAgIGF2X2RpY3Rfc2V0KCZzdC0+bWV0YWRhdGEsICJ2 ZW5kb3JfaWQiLCBhdl9mb3VyY2Myc3RyKGlkKSwgMCk7Ci0gICAgfQorICAgIGF2aW9fcmIxNihw Yik7IC8qIHJldmlzaW9uIGxldmVsICovCisgICAgaWQgPSBhdmlvX3JsMzIocGIpOyAvKiB2ZW5k b3IgKi8KKyAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAidmVuZG9yX2lkIiwgYXZfZm91 cmNjMnN0cihpZCksIDApOwogCiAgICAgY2hhbm5lbF9jb3VudCA9IGF2aW9fcmIxNihwYik7CiAK QEAgLTI4MDMsNyArMjc4Niw4IEBAIHN0YXRpYyB2b2lkIG1vdl9wYXJzZV9zdHNkX2F1ZGlvKE1P VkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwKICAgICAgICAgICAgIGF2aW9fcmIzMihwYik7 IC8qIGJ5dGVzIHBlciBwYWNrZXQgKi8KICAgICAgICAgICAgIHNjLT5ieXRlc19wZXJfZnJhbWUg PSBhdmlvX3JiMzIocGIpOwogICAgICAgICAgICAgYXZpb19yYjMyKHBiKTsgLyogYnl0ZXMgcGVy IHNhbXBsZSAqLwotICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb24gPT0gMikgeworICAgICAgICB9 CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb24gPT0gMikgewogICAgICAgICAgICAgYXZpb19yYjMy KHBiKTsgLyogc2l6ZW9mIHN0cnVjdCBvbmx5ICovCiAgICAgICAgICAgICBzdC0+Y29kZWNwYXIt PnNhbXBsZV9yYXRlID0gYXZfaW50MmRvdWJsZShhdmlvX3JiNjQocGIpKTsKICAgICAgICAgICAg IGNoYW5uZWxfY291bnQgPSBhdmlvX3JiMzIocGIpOwpAQCAtMjgxMywxMiArMjc5NywxMiBAQCBz dGF0aWMgdm9pZCBtb3ZfcGFyc2Vfc3RzZF9hdWRpbyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4 dCAqcGIsCiAgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmJpdHNfcGVyX2NvZGVkX3NhbXBsZSA9 IGF2aW9fcmIzMihwYik7CiAKICAgICAgICAgICAgIGZsYWdzID0gYXZpb19yYjMyKHBiKTsgLyog bHBjbSBmb3JtYXQgc3BlY2lmaWMgZmxhZyAqLwotICAgICAgICAgICAgc2MtPmJ5dGVzX3Blcl9m cmFtZSAgID0gYXZpb19yYjMyKHBiKTsKKyAgICAgICAgICAgIHNjLT5ieXRlc19wZXJfZnJhbWUg PSBhdmlvX3JiMzIocGIpOwogICAgICAgICAgICAgc2MtPnNhbXBsZXNfcGVyX2ZyYW1lID0gYXZp b19yYjMyKHBiKTsKLSAgICAgICAgICAgIGlmIChzdC0+Y29kZWNwYXItPmNvZGVjX3RhZyA9PSBN S1RBRygnbCcsJ3AnLCdjJywnbScpKQorICAgICAgICAgICAgaWYgKHN0LT5jb2RlY3Bhci0+Y29k ZWNfdGFnID09IE1LVEFHKCdsJywgJ3AnLCAnYycsICdtJykpCiAgICAgICAgICAgICAgICAgc3Qt PmNvZGVjcGFyLT5jb2RlY19pZCA9Ci0gICAgICAgICAgICAgICAgICAgIGZmX21vdl9nZXRfbHBj bV9jb2RlY19pZChzdC0+Y29kZWNwYXItPmJpdHNfcGVyX2NvZGVkX3NhbXBsZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKKyAgICAgICAgICAg ICAgICBmZl9tb3ZfZ2V0X2xwY21fY29kZWNfaWQoc3QtPmNvZGVjcGFyLT5iaXRzX3Blcl9jb2Rl ZF9zYW1wbGUsCisgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKICAgICAgICAgfQogICAgICAg ICBpZiAodmVyc2lvbiA9PSAwIHx8ICh2ZXJzaW9uID09IDEgJiYgc2MtPmF1ZGlvX2NpZCAhPSAt MikpIHsKICAgICAgICAgICAgIC8qIGNhbid0IGNvcnJlY3RseSBoYW5kbGUgdmFyaWFibGUgc2l6 ZWQgcGFja2V0IGFzIGF1ZGlvIHVuaXQgKi8KQEAgLTI4MzMsOSArMjgxNyw5IEBAIHN0YXRpYyB2 b2lkIG1vdl9wYXJzZV9zdHNkX2F1ZGlvKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwK IAogICAgIGlmIChzYy0+Zm9ybWF0ID09IDApIHsKICAgICAgICAgaWYgKHN0LT5jb2RlY3Bhci0+ Yml0c19wZXJfY29kZWRfc2FtcGxlID09IDgpCi0gICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNv ZGVjX2lkID0gbW92X2NvZGVjX2lkKHN0LCBNS1RBRygncicsJ2EnLCd3JywnICcpKTsKKyAgICAg ICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBtb3ZfY29kZWNfaWQoc3QsIE1LVEFHKCdy JywgJ2EnLCAndycsICcgJykpOwogICAgICAgICBlbHNlIGlmIChzdC0+Y29kZWNwYXItPmJpdHNf cGVyX2NvZGVkX3NhbXBsZSA9PSAxNikKLSAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNf aWQgPSBtb3ZfY29kZWNfaWQoc3QsIE1LVEFHKCd0JywndycsJ28nLCdzJykpOworICAgICAgICAg ICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IG1vdl9jb2RlY19pZChzdCwgTUtUQUcoJ3QnLCAn dycsICdvJywgJ3MnKSk7CiAgICAgfQogCiAgICAgc3dpdGNoIChzdC0+Y29kZWNwYXItPmNvZGVj X2lkKSB7CkBAIC0yODUwLDI5ICsyODM0LDI5IEBAIHN0YXRpYyB2b2lkIG1vdl9wYXJzZV9zdHNk X2F1ZGlvKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwKICAgICAgICAgICAgIHN0LT5j b2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9QQ01fUzg7CiAgICAgICAgIGVsc2UgaWYg KHN0LT5jb2RlY3Bhci0+Yml0c19wZXJfY29kZWRfc2FtcGxlID09IDI0KQogICAgICAgICAgICAg c3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9Ci0gICAgICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5j b2RlY19pZCA9PSBBVl9DT0RFQ19JRF9QQ01fUzE2QkUgPwotICAgICAgICAgICAgICAgIEFWX0NP REVDX0lEX1BDTV9TMjRCRSA6IEFWX0NPREVDX0lEX1BDTV9TMjRMRTsKKyAgICAgICAgICAgIHN0 LT5jb2RlY3Bhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfUENNX1MxNkJFID8KKyAgICAgICAg ICAgIEFWX0NPREVDX0lEX1BDTV9TMjRCRSA6IEFWX0NPREVDX0lEX1BDTV9TMjRMRTsKICAgICAg ICAgZWxzZSBpZiAoc3QtPmNvZGVjcGFyLT5iaXRzX3Blcl9jb2RlZF9zYW1wbGUgPT0gMzIpCi0g ICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9Ci0gICAgICAgICAgICAgICAgc3Qt PmNvZGVjcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9QQ01fUzE2QkUgPwotICAgICAgICAg ICAgICAgIEFWX0NPREVDX0lEX1BDTV9TMzJCRSA6IEFWX0NPREVDX0lEX1BDTV9TMzJMRTsKKyAg ICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgPQorICAgICAgICAgICAgc3QtPmNvZGVj cGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9QQ01fUzE2QkUgPworICAgICAgICAgICAgQVZf Q09ERUNfSURfUENNX1MzMkJFIDogQVZfQ09ERUNfSURfUENNX1MzMkxFOwogICAgICAgICBicmVh azsKLSAgICAvKiBzZXQgdmFsdWVzIGZvciBvbGQgZm9ybWF0IGJlZm9yZSBzdHNkIHZlcnNpb24g MSBhcHBlYXJlZCAqLworICAgICAgICAvKiBzZXQgdmFsdWVzIGZvciBvbGQgZm9ybWF0IGJlZm9y ZSBzdHNkIHZlcnNpb24gMSBhcHBlYXJlZCAqLwogICAgIGNhc2UgQVZfQ09ERUNfSURfTUFDRTM6 CiAgICAgICAgIHNjLT5zYW1wbGVzX3Blcl9mcmFtZSA9IDY7Ci0gICAgICAgIHNjLT5ieXRlc19w ZXJfZnJhbWUgICA9IDIgKiBzdC0+Y29kZWNwYXItPmNoX2xheW91dC5uYl9jaGFubmVsczsKKyAg ICAgICAgc2MtPmJ5dGVzX3Blcl9mcmFtZSA9IDIgKiBzdC0+Y29kZWNwYXItPmNoX2xheW91dC5u Yl9jaGFubmVsczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBVl9DT0RFQ19JRF9NQUNFNjoK ICAgICAgICAgc2MtPnNhbXBsZXNfcGVyX2ZyYW1lID0gNjsKLSAgICAgICAgc2MtPmJ5dGVzX3Bl cl9mcmFtZSAgID0gMSAqIHN0LT5jb2RlY3Bhci0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOworICAg ICAgICBzYy0+Ynl0ZXNfcGVyX2ZyYW1lID0gMSAqIHN0LT5jb2RlY3Bhci0+Y2hfbGF5b3V0Lm5i X2NoYW5uZWxzOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFWX0NPREVDX0lEX0FEUENNX0lN QV9RVDoKICAgICAgICAgc2MtPnNhbXBsZXNfcGVyX2ZyYW1lID0gNjQ7Ci0gICAgICAgIHNjLT5i eXRlc19wZXJfZnJhbWUgICA9IDM0ICogc3QtPmNvZGVjcGFyLT5jaF9sYXlvdXQubmJfY2hhbm5l bHM7CisgICAgICAgIHNjLT5ieXRlc19wZXJfZnJhbWUgPSAzNCAqIHN0LT5jb2RlY3Bhci0+Y2hf bGF5b3V0Lm5iX2NoYW5uZWxzOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFWX0NPREVDX0lE X0dTTToKICAgICAgICAgc2MtPnNhbXBsZXNfcGVyX2ZyYW1lID0gMTYwOwotICAgICAgICBzYy0+ Ynl0ZXNfcGVyX2ZyYW1lICAgPSAzMzsKKyAgICAgICAgc2MtPmJ5dGVzX3Blcl9mcmFtZSA9IDMz OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTI4ODUs OSArMjg2OSw5IEBAIHN0YXRpYyB2b2lkIG1vdl9wYXJzZV9zdHNkX2F1ZGlvKE1PVkNvbnRleHQg KmMsIEFWSU9Db250ZXh0ICpwYiwKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIG1vdl9wYXJzZV9z dHNkX3N1YnRpdGxlKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFWU3RyZWFtICpzdCwgTU9WU3RyZWFtQ29udGV4dCAq c2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHNpemUpCitz dGF0aWMgdm9pZCBtb3ZfcGFyc2Vfc3RzZF9zdWJ0aXRsZShNT1ZDb250ZXh0KiBjLCBBVklPQ29u dGV4dCogcGIsCisgICAgQVZTdHJlYW0qIHN0LCBNT1ZTdHJlYW1Db250ZXh0KiBzYywKKyAgICBp bnQ2NF90IHNpemUpCiB7CiAgICAgLy8gdHR4dCBzdHNkIGNvbnRhaW5zIGRpc3BsYXkgZmxhZ3Ms IGp1c3RpZmljYXRpb24sIGJhY2tncm91bmQKICAgICAvLyBjb2xvciwgZm9udHMsIGFuZCBkZWZh dWx0IHN0eWxlcywgc28gZmFrZSBhbiBhdG9tIHRvIHJlYWQgaXQKQEAgLTI4OTcsMTcgKzI4ODEs MTcgQEAgc3RhdGljIHZvaWQgbW92X3BhcnNlX3N0c2Rfc3VidGl0bGUoTU9WQ29udGV4dCAqYywg QVZJT0NvbnRleHQgKnBiLAogICAgIGlmIChzdC0+Y29kZWNwYXItPmNvZGVjX3RhZyAhPSBBVl9S TDMyKCJtcDRzIikgJiYKICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY190YWcgIT0gTU9WX0lT TVZfVFRNTF9UQUcpCiAgICAgICAgIG1vdl9yZWFkX2dsYmwoYywgcGIsIGZha2VfYXRvbSk7Ci0g ICAgc3QtPmNvZGVjcGFyLT53aWR0aCAgPSBzYy0+d2lkdGg7CisgICAgc3QtPmNvZGVjcGFyLT53 aWR0aCA9IHNjLT53aWR0aDsKICAgICBzdC0+Y29kZWNwYXItPmhlaWdodCA9IHNjLT5oZWlnaHQ7 CiB9CiAKLXN0YXRpYyBpbnQgbW92X3BhcnNlX3N0c2RfZGF0YShNT1ZDb250ZXh0ICpjLCBBVklP Q29udGV4dCAqcGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWU3RyZWFtICpz dCwgTU9WU3RyZWFtQ29udGV4dCAqc2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludDY0X3Qgc2l6ZSkKK3N0YXRpYyBpbnQgbW92X3BhcnNlX3N0c2RfZGF0YShNT1ZDb250ZXh0 KiBjLCBBVklPQ29udGV4dCogcGIsCisgICAgQVZTdHJlYW0qIHN0LCBNT1ZTdHJlYW1Db250ZXh0 KiBzYywKKyAgICBpbnQ2NF90IHNpemUpCiB7CiAgICAgaW50IHJldDsKIAotICAgIGlmIChzdC0+ Y29kZWNwYXItPmNvZGVjX3RhZyA9PSBNS1RBRygndCcsJ20nLCdjJywnZCcpKSB7CisgICAgaWYg KHN0LT5jb2RlY3Bhci0+Y29kZWNfdGFnID09IE1LVEFHKCd0JywgJ20nLCAnYycsICdkJykpIHsK ICAgICAgICAgaWYgKChpbnQpc2l6ZSAhPSBzaXplKQogICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1IoRU5PTUVNKTsKIApAQCAtMjkxNSw3ICsyODk5LDcgQEAgc3RhdGljIGludCBtb3ZfcGFyc2Vf c3RzZF9kYXRhKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwKICAgICAgICAgaWYgKHJl dCA8IDApCiAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICBpZiAoc2l6ZSA+IDE2KSB7 Ci0gICAgICAgICAgICBNT1ZTdHJlYW1Db250ZXh0ICp0bWNkX2N0eCA9IHN0LT5wcml2X2RhdGE7 CisgICAgICAgICAgICBNT1ZTdHJlYW1Db250ZXh0KiB0bWNkX2N0eCA9IHN0LT5wcml2X2RhdGE7 CiAgICAgICAgICAgICBpbnQgdmFsOwogICAgICAgICAgICAgdmFsID0gQVZfUkIzMihzdC0+Y29k ZWNwYXItPmV4dHJhZGF0YSArIDQpOwogICAgICAgICAgICAgdG1jZF9jdHgtPnRtY2RfZmxhZ3Mg PSB2YWw7CkBAIC0yOTI5LDI4ICsyOTEzLDI5IEBAIHN0YXRpYyBpbnQgbW92X3BhcnNlX3N0c2Rf ZGF0YShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsCiAgICAgICAgICAgICAgICAgICAg IHVpbnQxNl90IHN0cl9zaXplID0gQVZfUkIxNihzdC0+Y29kZWNwYXItPmV4dHJhZGF0YSArIDI2 KTsgLyogc3RyaW5nIGxlbmd0aCAqLwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RyX3NpemUg PiAwICYmIHNpemUgPj0gKGludClzdHJfc2l6ZSArIDMwICYmCiAgICAgICAgICAgICAgICAgICAg ICAgICBzdC0+Y29kZWNwYXItPmV4dHJhZGF0YVszMF0gLyogRG9uJ3QgYWRkIGVtcHR5IHN0cmlu ZyAqLykgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmVlbF9uYW1lID0gYXZfbWFs bG9jKHN0cl9zaXplICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiByZWVsX25h bWUgPSBhdl9tYWxsb2Moc3RyX3NpemUgKyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm ICghcmVlbF9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkocmVlbF9uYW1lLCBzdC0+ Y29kZWNwYXItPmV4dHJhZGF0YSArIDMwLCBzdHJfc2l6ZSk7CiAgICAgICAgICAgICAgICAgICAg ICAgICByZWVsX25hbWVbc3RyX3NpemVdID0gMDsgLyogQWRkIG51bGwgdGVybWluYXRvciAqLwog ICAgICAgICAgICAgICAgICAgICAgICAgYXZfZGljdF9zZXQoJnN0LT5tZXRhZGF0YSwgInJlZWxf bmFtZSIsIHJlZWxfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFW X0RJQ1RfRE9OVF9TVFJEVVBfVkFMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVl9E SUNUX0RPTlRfU1RSRFVQX1ZBTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9IGVsc2UgeworICAgIH0KKyAg ICBlbHNlIHsKICAgICAgICAgLyogb3RoZXIgY29kZWMgdHlwZSwganVzdCBza2lwIChydHAsIG1w NHMgLi4uKSAqLwogICAgICAgICBhdmlvX3NraXAocGIsIHNpemUpOwogICAgIH0KICAgICByZXR1 cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfZmluYWxpemVfc3RzZF9jb2RlYyhNT1ZDb250ZXh0 ICpjLCBBVklPQ29udGV4dCAqcGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFWU3RyZWFtICpzdCwgTU9WU3RyZWFtQ29udGV4dCAqc2MpCitzdGF0aWMgaW50IG1vdl9maW5h bGl6ZV9zdHNkX2NvZGVjKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwKKyAgICBBVlN0 cmVhbSogc3QsIE1PVlN0cmVhbUNvbnRleHQqIHNjKQogewotICAgIEZGU3RyZWFtICpjb25zdCBz dGkgPSBmZnN0cmVhbShzdCk7CisgICAgRkZTdHJlYW0qIGNvbnN0IHN0aSA9IGZmc3RyZWFtKHN0 KTsKIAogICAgIGlmIChzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPT0gQVZNRURJQV9UWVBFX0FV RElPICYmCiAgICAgICAgICFzdC0+Y29kZWNwYXItPnNhbXBsZV9yYXRlICYmIHNjLT50aW1lX3Nj YWxlID4gMSkKQEAgLTI5NzYsMTUgKzI5NjEsMTUgQEAgc3RhdGljIGludCBtb3ZfZmluYWxpemVf c3RzZF9jb2RlYyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsCiAgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOwogICAgICAgICB9CiAgICAgICAgIHNjLT5kdl9hdWRpb19j b250YWluZXIgPSAxOwotICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkICAgID0gQVZfQ09E RUNfSURfUENNX1MxNkxFOworICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkID0gQVZfQ09E RUNfSURfUENNX1MxNkxFOwogICAgICAgICBicmVhazsKICNlbmRpZgotICAgIC8qIG5vIGlmZGVm IHNpbmNlIHBhcmFtZXRlcnMgYXJlIGFsd2F5cyB0aG9zZSAqLworICAgICAgICAvKiBubyBpZmRl ZiBzaW5jZSBwYXJhbWV0ZXJzIGFyZSBhbHdheXMgdGhvc2UgKi8KICAgICBjYXNlIEFWX0NPREVD X0lEX1FDRUxQOgogICAgICAgICBhdl9jaGFubmVsX2xheW91dF91bmluaXQoJnN0LT5jb2RlY3Bh ci0+Y2hfbGF5b3V0KTsKICAgICAgICAgc3QtPmNvZGVjcGFyLT5jaF9sYXlvdXQgPSAoQVZDaGFu bmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX01PTk87CiAgICAgICAgIC8vIGZvcmNlIHNhbXBs ZSByYXRlIGZvciBxY2VscCB3aGVuIG5vdCBzdG9yZWQgaW4gbW92Ci0gICAgICAgIGlmIChzdC0+ Y29kZWNwYXItPmNvZGVjX3RhZyAhPSBNS1RBRygnUScsJ2MnLCdsJywncCcpKQorICAgICAgICBp ZiAoc3QtPmNvZGVjcGFyLT5jb2RlY190YWcgIT0gTUtUQUcoJ1EnLCAnYycsICdsJywgJ3AnKSkK ICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+c2FtcGxlX3JhdGUgPSA4MDAwOwogICAgICAgICAv LyBGSVhNRTogV2h5IGlzIHRoZSBmb2xsb3dpbmcgbmVlZGVkIGZvciBzb21lIGZpbGVzPwogICAg ICAgICBzYy0+c2FtcGxlc19wZXJfZnJhbWUgPSAxNjA7CkBAIC0zMDM2LDcgKzMwMjEsNiBAQCBz dGF0aWMgaW50IG1vdl9maW5hbGl6ZV9zdHNkX2NvZGVjKE1PVkNvbnRleHQgKmMsIEFWSU9Db250 ZXh0ICpwYiwKICAgICAgICAgc3RpLT5uZWVkX3BhcnNpbmcgPSBBVlNUUkVBTV9QQVJTRV9GVUxM OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFWX0NPREVDX0lEX1BST1JFU19SQVc6Ci0gICAg Y2FzZSBBVl9DT0RFQ19JRF9QUk9SRVM6CiAgICAgY2FzZSBBVl9DT0RFQ19JRF9BUFY6CiAgICAg Y2FzZSBBVl9DT0RFQ19JRF9FVkM6CiAgICAgY2FzZSBBVl9DT0RFQ19JRF9BVjE6CkBAIC0zMDUw LDIwICszMDM0LDIwIEBAIHN0YXRpYyBpbnQgbW92X2ZpbmFsaXplX3N0c2RfY29kZWMoTU9WQ29u dGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50 IG1vdl9za2lwX211bHRpcGxlX3N0c2QoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2RlY190YWcsIGludCBmb3Jt YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBzaXplKQorc3Rh dGljIGludCBtb3Zfc2tpcF9tdWx0aXBsZV9zdHNkKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0 KiBwYiwKKyAgICBpbnQgY29kZWNfdGFnLCBpbnQgZm9ybWF0LAorICAgIGludDY0X3Qgc2l6ZSkK IHsKICAgICBpZiAoY29kZWNfdGFnICYmCi0gICAgICAgICAoY29kZWNfdGFnICE9IGZvcm1hdCAm JgotICAgICAgICAgIC8vIEFWSUQgMToxIHNhbXBsZXMgd2l0aCBkaWZmZXJpbmcgZGF0YSBmb3Jt YXQgYW5kIGNvZGVjIHRhZyBleGlzdAotICAgICAgICAgIChjb2RlY190YWcgIT0gQVZfUkwzMigi QVYxeCIpIHx8IGZvcm1hdCAhPSBBVl9STDMyKCJBVnVwIikpICYmCi0gICAgICAgICAgLy8gcHJv cmVzIGlzIGFsbG93ZWQgdG8gaGF2ZSBkaWZmZXJpbmcgZGF0YSBmb3JtYXQgYW5kIGNvZGVjIHRh ZwotICAgICAgICAgIGNvZGVjX3RhZyAhPSBBVl9STDMyKCJhcGNuIikgJiYgY29kZWNfdGFnICE9 IEFWX1JMMzIoImFwY2giKSAmJgotICAgICAgICAgIC8vIHNvIGlzIGR2IChzaWdoKQotICAgICAg ICAgIGNvZGVjX3RhZyAhPSBBVl9STDMyKCJkdnBwIikgJiYgY29kZWNfdGFnICE9IEFWX1JMMzIo ImR2Y3AiKSAmJgotICAgICAgICAgIChjLT5mYy0+dmlkZW9fY29kZWNfaWQgPyBmZl9jb2RlY19n ZXRfaWQoZmZfY29kZWNfbW92dmlkZW9fdGFncywgZm9ybWF0KSAhPSBjLT5mYy0+dmlkZW9fY29k ZWNfaWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29kZWNfdGFnICE9IE1L VEFHKCdqJywncCcsJ2UnLCdnJykpKSkgeworICAgICAgICAoY29kZWNfdGFnICE9IGZvcm1hdCAm JgorICAgICAgICAgICAgLy8gQVZJRCAxOjEgc2FtcGxlcyB3aXRoIGRpZmZlcmluZyBkYXRhIGZv cm1hdCBhbmQgY29kZWMgdGFnIGV4aXN0CisgICAgICAgICAgICAoY29kZWNfdGFnICE9IEFWX1JM MzIoIkFWMXgiKSB8fCBmb3JtYXQgIT0gQVZfUkwzMigiQVZ1cCIpKSAmJgorICAgICAgICAgICAg Ly8gcHJvcmVzIGlzIGFsbG93ZWQgdG8gaGF2ZSBkaWZmZXJpbmcgZGF0YSBmb3JtYXQgYW5kIGNv ZGVjIHRhZworICAgICAgICAgICAgY29kZWNfdGFnICE9IEFWX1JMMzIoImFwY24iKSAmJiBjb2Rl Y190YWcgIT0gQVZfUkwzMigiYXBjaCIpICYmCisgICAgICAgICAgICAvLyBzbyBpcyBkdiAoc2ln aCkKKyAgICAgICAgICAgIGNvZGVjX3RhZyAhPSBBVl9STDMyKCJkdnBwIikgJiYgY29kZWNfdGFn ICE9IEFWX1JMMzIoImR2Y3AiKSAmJgorICAgICAgICAgICAgKGMtPmZjLT52aWRlb19jb2RlY19p ZCA/IGZmX2NvZGVjX2dldF9pZChmZl9jb2RlY19tb3Z2aWRlb190YWdzLCBmb3JtYXQpICE9IGMt PmZjLT52aWRlb19jb2RlY19pZAorICAgICAgICAgICAgICAgIDogY29kZWNfdGFnICE9IE1LVEFH KCdqJywgJ3AnLCAnZScsICdnJykpKSkgewogICAgICAgICAvKiBNdWx0aXBsZSBmb3VyY2MsIHdl IHNraXAgSlBFRy4gVGhpcyBpcyBub3QgY29ycmVjdCwgd2Ugc2hvdWxkCiAgICAgICAgICAqIGV4 cG9ydCBpdCBhcyBhIHNlcGFyYXRlIEFWU3RyZWFtIGJ1dCB0aGlzIG5lZWRzIGEgZmV3IGNoYW5n ZXMKICAgICAgICAgICogaW4gdGhlIE1PViBkZW11eGVyLCBwYXRjaCB3ZWxjb21lLiAqLwpAQCAt MzA3Niw3ICszMDYwLDcgQEAgc3RhdGljIGludCBtb3Zfc2tpcF9tdWx0aXBsZV9zdHNkKE1PVkNv bnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGlu dCBtb3ZfZmluYWxpemVfc3RzZF9lbnRyeShNT1ZDb250ZXh0ICpjLCBBVlN0cmVhbSAqc3QpCitz dGF0aWMgaW50IG1vdl9maW5hbGl6ZV9zdHNkX2VudHJ5KE1PVkNvbnRleHQqIGMsIEFWU3RyZWFt KiBzdCkKIHsKICAgICBpbnQgcmV0OwogCkBAIC0zMDg3LDcgKzMwNzEsNyBAQCBzdGF0aWMgaW50 IG1vdl9maW5hbGl6ZV9zdHNkX2VudHJ5KE1PVkNvbnRleHQgKmMsIEFWU3RyZWFtICpzdCkKICAg ICAgICAgaWYgKCFzdC0+Y29kZWNwYXItPmV4dHJhZGF0YV9zaXplICYmIFRBR19JU19BVkNJKHN0 LT5jb2RlY3Bhci0+Y29kZWNfdGFnKSkgewogICAgICAgICAgICAgcmV0ID0gZmZfZ2VuZXJhdGVf YXZjaV9leHRyYWRhdGEoc3QpOwogICAgICAgICAgICAgaWYgKHJldCA8IDApCi0gICAgICAgICAg ICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgIH0K ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTMwOTcsNTcgKzMwODEsNTkgQEAgc3Rh dGljIGludCBtb3ZfZmluYWxpemVfc3RzZF9lbnRyeShNT1ZDb250ZXh0ICpjLCBBVlN0cmVhbSAq c3QpCiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBmZl9tb3ZfcmVhZF9zdHNkX2VudHJpZXMoTU9W Q29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBpbnQgZW50cmllcykKK2ludCBmZl9tb3ZfcmVh ZF9zdHNkX2VudHJpZXMoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBpbnQgZW50cmll cykKIHsKLSAgICBBVlN0cmVhbSAqc3Q7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7CisgICAg QVZTdHJlYW0qIHN0OworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjOwogICAgIGludCBwc2V1ZG9f c3RyZWFtX2lkOwogCi0gICAgYXZfYXNzZXJ0MCAoYy0+ZmMtPm5iX3N0cmVhbXMgPj0gMSk7Ci0g ICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcy0xXTsKKyAgICBhdl9hc3Nl cnQwKGMtPmZjLT5uYl9zdHJlYW1zID49IDEpOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ ZmMtPm5iX3N0cmVhbXMgLSAxXTsKICAgICBzYyA9IHN0LT5wcml2X2RhdGE7CiAKICAgICBmb3Ig KHBzZXVkb19zdHJlYW1faWQgPSAwOwotICAgICAgICAgcHNldWRvX3N0cmVhbV9pZCA8IGVudHJp ZXMgJiYgIXBiLT5lb2ZfcmVhY2hlZDsKLSAgICAgICAgIHBzZXVkb19zdHJlYW1faWQrKykgewor ICAgICAgICBwc2V1ZG9fc3RyZWFtX2lkIDwgZW50cmllcyAmJiAhcGItPmVvZl9yZWFjaGVkOwor ICAgICAgICBwc2V1ZG9fc3RyZWFtX2lkKyspIHsKICAgICAgICAgLy9QYXJzaW5nIFNhbXBsZSBk ZXNjcmlwdGlvbiB0YWJsZQogICAgICAgICBlbnVtIEFWQ29kZWNJRCBpZDsKICAgICAgICAgaW50 IHJldCwgZHJlZl9pZCA9IDE7CiAgICAgICAgIE1PVkF0b20gYSA9IHsgQVZfUkwzMigic3RzZCIp IH07CiAgICAgICAgIGludDY0X3Qgc3RhcnRfcG9zID0gYXZpb190ZWxsKHBiKTsKLSAgICAgICAg aW50NjRfdCBzaXplICAgID0gYXZpb19yYjMyKHBiKTsgLyogc2l6ZSAqLworICAgICAgICBpbnQ2 NF90IHNpemUgPSBhdmlvX3JiMzIocGIpOyAvKiBzaXplICovCiAgICAgICAgIHVpbnQzMl90IGZv cm1hdCA9IGF2aW9fcmwzMihwYik7IC8qIGRhdGEgZm9ybWF0ICovCiAKICAgICAgICAgaWYgKHNp emUgPj0gMTYpIHsKICAgICAgICAgICAgIGF2aW9fcmIzMihwYik7IC8qIHJlc2VydmVkICovCiAg ICAgICAgICAgICBhdmlvX3JiMTYocGIpOyAvKiByZXNlcnZlZCAqLwogICAgICAgICAgICAgZHJl Zl9pZCA9IGF2aW9fcmIxNihwYik7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA8PSA3KSB7Cisg ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA8PSA3KSB7CiAgICAgICAgICAgICBhdl9s b2coYy0+ZmMsIEFWX0xPR19FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBzaXpl ICUiUFJJZDY0IiBpbiBzdHNkXG4iLCBzaXplKTsKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBz aXplICUiUFJJZDY0IiBpbiBzdHNkXG4iLCBzaXplKTsKICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1vdl9za2lwX211bHRp cGxlX3N0c2QoYywgcGIsIHN0LT5jb2RlY3Bhci0+Y29kZWNfdGFnLCBmb3JtYXQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgLSAoYXZpb190ZWxsKHBiKSAtIHN0YXJ0 X3BvcykpKSB7CisgICAgICAgICAgICBzaXplIC0gKGF2aW9fdGVsbChwYikgLSBzdGFydF9wb3Mp KSkgewogICAgICAgICAgICAgc2MtPnN0c2RfY291bnQrKzsKICAgICAgICAgICAgIGNvbnRpbnVl OwogICAgICAgICB9CiAKICAgICAgICAgc2MtPnBzZXVkb19zdHJlYW1faWQgPSBzdC0+Y29kZWNw YXItPmNvZGVjX3RhZyA/IC0xIDogcHNldWRvX3N0cmVhbV9pZDsKLSAgICAgICAgc2MtPmRyZWZf aWQ9IGRyZWZfaWQ7CisgICAgICAgIHNjLT5kcmVmX2lkID0gZHJlZl9pZDsKICAgICAgICAgc2Mt PmZvcm1hdCA9IGZvcm1hdDsKIAogICAgICAgICBpZCA9IG1vdl9jb2RlY19pZChzdCwgZm9ybWF0 KTsKIAogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19UUkFDRSwKLSAgICAgICAgICAgICAg ICJzaXplPSUiUFJJZDY0IiA0Q0M9JXMgY29kZWNfdHlwZT0lZFxuIiwgc2l6ZSwKLSAgICAgICAg ICAgICAgIGF2X2ZvdXJjYzJzdHIoZm9ybWF0KSwgc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlKTsK KyAgICAgICAgICAgICJzaXplPSUiUFJJZDY0IiA0Q0M9JXMgY29kZWNfdHlwZT0lZFxuIiwgc2l6 ZSwKKyAgICAgICAgICAgIGF2X2ZvdXJjYzJzdHIoZm9ybWF0KSwgc3QtPmNvZGVjcGFyLT5jb2Rl Y190eXBlKTsKIAogICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkID0gaWQ7Ci0gICAgICAg IGlmIChzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGU9PUFWTUVESUFfVFlQRV9WSURFTykgeworICAg ICAgICBpZiAoc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9WSURFTykg ewogICAgICAgICAgICAgbW92X3BhcnNlX3N0c2RfdmlkZW8oYywgcGIsIHN0LCBzYyk7Ci0gICAg ICAgIH0gZWxzZSBpZiAoc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlPT1BVk1FRElBX1RZUEVfQVVE SU8pIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdC0+Y29kZWNwYXItPmNvZGVjX3R5 cGUgPT0gQVZNRURJQV9UWVBFX0FVRElPKSB7CiAgICAgICAgICAgICBtb3ZfcGFyc2Vfc3RzZF9h dWRpbyhjLCBwYiwgc3QsIHNjKTsKICAgICAgICAgICAgIGlmIChzdC0+Y29kZWNwYXItPnNhbXBs ZV9yYXRlIDwgMCkgewogICAgICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0VSUk9S LCAiSW52YWxpZCBzYW1wbGUgcmF0ZSAlZFxuIiwgc3QtPmNvZGVjcGFyLT5zYW1wbGVfcmF0ZSk7 CkBAIC0zMTU3LDEyICszMTQzLDE0IEBAIGludCBmZl9tb3ZfcmVhZF9zdHNkX2VudHJpZXMoTU9W Q29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBpbnQgZW50cmllcykKICAgICAgICAgICAgICAg ICBhdl9sb2coYy0+ZmMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgY2hhbm5lbHMgJWRcbiIsIHN0 LT5jb2RlY3Bhci0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzKTsKICAgICAgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm IChzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGU9PUFWTUVESUFfVFlQRV9TVUJUSVRMRSl7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlID09IEFWTUVE SUFfVFlQRV9TVUJUSVRMRSkgewogICAgICAgICAgICAgbW92X3BhcnNlX3N0c2Rfc3VidGl0bGUo YywgcGIsIHN0LCBzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUg LSAoYXZpb190ZWxsKHBiKSAtIHN0YXJ0X3BvcykpOwotICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIHNpemUgLSAoYXZpb190ZWxsKHBiKSAtIHN0YXJ0X3BvcykpOworICAgICAgICB9 CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmV0ID0gbW92X3BhcnNlX3N0c2RfZGF0YShj LCBwYiwgc3QsIHNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl IC0gKGF2aW9fdGVsbChwYikgLSBzdGFydF9wb3MpKTsKKyAgICAgICAgICAgICAgICBzaXplIC0g KGF2aW9fdGVsbChwYikgLSBzdGFydF9wb3MpKTsKICAgICAgICAgICAgIGlmIChyZXQgPCAwKQog ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgIH0KQEAgLTMxNzEsNyArMzE1OSw4 IEBAIGludCBmZl9tb3ZfcmVhZF9zdHNkX2VudHJpZXMoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRl eHQgKnBiLCBpbnQgZW50cmllcykKICAgICAgICAgaWYgKGEuc2l6ZSA+IDgpIHsKICAgICAgICAg ICAgIGlmICgocmV0ID0gbW92X3JlYWRfZGVmYXVsdChjLCBwYiwgYSkpIDwgMCkKICAgICAgICAg ICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9IGVsc2UgaWYgKGEuc2l6ZSA+IDApCisgICAg ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYS5zaXplID4gMCkKICAgICAgICAgICAgIGF2aW9fc2tp cChwYiwgYS5zaXplKTsKIAogICAgICAgICByZXQgPSBtb3ZfZmluYWxpemVfc3RzZF9lbnRyeShj LCBzdCk7CkBAIC0zMTg0LDcgKzMxNzMsNyBAQCBpbnQgZmZfbW92X3JlYWRfc3RzZF9lbnRyaWVz KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgaW50IGVudHJpZXMpCiAgICAgICAgICAg ICAvKiBNb3ZlIHRoZSBjdXJyZW50IHN0cmVhbSBleHRyYWRhdGEgdG8gdGhlIHN0cmVhbSBjb250 ZXh0IG9uZS4gKi8KICAgICAgICAgICAgIHNjLT5leHRyYWRhdGFfc2l6ZVtwc2V1ZG9fc3RyZWFt X2lkXSA9IGV4dHJhX3NpemU7CiAgICAgICAgICAgICBzYy0+ZXh0cmFkYXRhW3BzZXVkb19zdHJl YW1faWRdID0gc3QtPmNvZGVjcGFyLT5leHRyYWRhdGE7Ci0gICAgICAgICAgICBzdC0+Y29kZWNw YXItPmV4dHJhZGF0YSAgICAgID0gTlVMTDsKKyAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+ZXh0 cmFkYXRhID0gTlVMTDsKICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+ZXh0cmFkYXRhX3NpemUg PSAwOwogICAgICAgICB9CiAgICAgICAgIHNjLT5zdHNkX2NvdW50Kys7CkBAIC0zMTk4LDEwICsz MTg3LDEwIEBAIGludCBmZl9tb3ZfcmVhZF9zdHNkX2VudHJpZXMoTU9WQ29udGV4dCAqYywgQVZJ T0NvbnRleHQgKnBiLCBpbnQgZW50cmllcykKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGlu dCBtb3ZfcmVhZF9zdHNkKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBh dG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9zdHNkKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0 KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEFWU3RyZWFtICpzdDsKLSAgICBNT1ZTdHJlYW1D b250ZXh0ICpzYzsKKyAgICBBVlN0cmVhbSogc3Q7CisgICAgTU9WU3RyZWFtQ29udGV4dCogc2M7 CiAgICAgaW50IHJldCwgZW50cmllczsKIAogICAgIGlmIChjLT5mYy0+bmJfc3RyZWFtcyA8IDEp CkBAIC0zMjIxLDcgKzMyMTAsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3N0c2QoTU9WQ29udGV4 dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAKICAgICBpZiAoc2MtPmV4dHJh ZGF0YSkgewogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19FUlJPUiwKLSAgICAgICAgICAg ICAgICJEdXBsaWNhdGUgc3RzZCBmb3VuZCBpbiB0aGlzIHRyYWNrLlxuIik7CisgICAgICAgICAg ICAiRHVwbGljYXRlIHN0c2QgZm91bmQgaW4gdGhpcyB0cmFjay5cbiIpOwogICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICB9CiAKQEAgLTMyNjMsMTAgKzMyNTIsMTAgQEAg ZmFpbDoKICAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFkX3N0c2MoTU9W Q29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1v dl9yZWFkX3N0c2MoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20p CiB7Ci0gICAgQVZTdHJlYW0gKnN0OwotICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjOworICAgIEFW U3RyZWFtKiBzdDsKKyAgICBNT1ZTdHJlYW1Db250ZXh0KiBzYzsKICAgICB1bnNpZ25lZCBpbnQg aSwgZW50cmllczsKIAogICAgIGlmIChjLT50cmFrX2luZGV4IDwgMCkgewpAQCAtMzI3Niw3ICsz MjY1LDcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zdHNjKE1PVkNvbnRleHQgKmMsIEFWSU9Db250 ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogCiAgICAgaWYgKGMtPmZjLT5uYl9zdHJlYW1zIDwgMSkK ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3Ry ZWFtcy0xXTsKKyAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zIC0gMV07 CiAgICAgc2MgPSBzdC0+cHJpdl9kYXRhOwogCiAgICAgYXZpb19yOChwYik7IC8qIHZlcnNpb24g Ki8KQEAgLTMzMDksMjkgKzMyOTgsMjkgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zdHNjKE1PVkNv bnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIHNjLT5zdHNjX2Nv dW50ID0gaTsKICAgICBmb3IgKGkgPSBzYy0+c3RzY19jb3VudCAtIDE7IGkgPCBVSU5UX01BWDsg aS0tKSB7CiAgICAgICAgIGludDY0X3QgZmlyc3RfbWluID0gaSArIDE7Ci0gICAgICAgIGlmICgo aSsxIDwgc2MtPnN0c2NfY291bnQgJiYgc2MtPnN0c2NfZGF0YVtpXS5maXJzdCA+PSBzYy0+c3Rz Y19kYXRhW2krMV0uZmlyc3QpIHx8Ci0gICAgICAgICAgICAoaSA+IDAgJiYgc2MtPnN0c2NfZGF0 YVtpXS5maXJzdCA8PSBzYy0+c3RzY19kYXRhW2ktMV0uZmlyc3QpIHx8CisgICAgICAgIGlmICgo aSArIDEgPCBzYy0+c3RzY19jb3VudCAmJiBzYy0+c3RzY19kYXRhW2ldLmZpcnN0ID49IHNjLT5z dHNjX2RhdGFbaSArIDFdLmZpcnN0KSB8fAorICAgICAgICAgICAgKGkgPiAwICYmIHNjLT5zdHNj X2RhdGFbaV0uZmlyc3QgPD0gc2MtPnN0c2NfZGF0YVtpIC0gMV0uZmlyc3QpIHx8CiAgICAgICAg ICAgICBzYy0+c3RzY19kYXRhW2ldLmZpcnN0IDwgZmlyc3RfbWluIHx8CiAgICAgICAgICAgICBz Yy0+c3RzY19kYXRhW2ldLmNvdW50IDwgMSB8fAogICAgICAgICAgICAgc2MtPnN0c2NfZGF0YVtp XS5pZCA8IDEpIHsKICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX1dBUk5JTkcsICJT VFNDIGVudHJ5ICVkIGlzIGludmFsaWQgKGZpcnN0PSVkIGNvdW50PSVkIGlkPSVkKVxuIiwgaSwg c2MtPnN0c2NfZGF0YVtpXS5maXJzdCwgc2MtPnN0c2NfZGF0YVtpXS5jb3VudCwgc2MtPnN0c2Nf ZGF0YVtpXS5pZCk7Ci0gICAgICAgICAgICBpZiAoaSsxID49IHNjLT5zdHNjX2NvdW50KSB7Cisg ICAgICAgICAgICBpZiAoaSArIDEgPj0gc2MtPnN0c2NfY291bnQpIHsKICAgICAgICAgICAgICAg ICBpZiAoc2MtPnN0c2NfZGF0YVtpXS5jb3VudCA9PSAwICYmIGkgPiAwKSB7Ci0gICAgICAgICAg ICAgICAgICAgIHNjLT5zdHNjX2NvdW50IC0tOworICAgICAgICAgICAgICAgICAgICBzYy0+c3Rz Y19jb3VudC0tOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgc2MtPnN0c2NfZGF0YVtpXS5maXJzdCA9IEZGTUFYKHNjLT5z dHNjX2RhdGFbaV0uZmlyc3QsIGZpcnN0X21pbik7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPiAw ICYmIHNjLT5zdHNjX2RhdGFbaV0uZmlyc3QgPD0gc2MtPnN0c2NfZGF0YVtpLTFdLmZpcnN0KQot ICAgICAgICAgICAgICAgICAgICBzYy0+c3RzY19kYXRhW2ldLmZpcnN0ID0gRkZNSU4oc2MtPnN0 c2NfZGF0YVtpLTFdLmZpcnN0ICsgMUxMLCBJTlRfTUFYKTsKKyAgICAgICAgICAgICAgICBpZiAo aSA+IDAgJiYgc2MtPnN0c2NfZGF0YVtpXS5maXJzdCA8PSBzYy0+c3RzY19kYXRhW2kgLSAxXS5m aXJzdCkKKyAgICAgICAgICAgICAgICAgICAgc2MtPnN0c2NfZGF0YVtpXS5maXJzdCA9IEZGTUlO KHNjLT5zdHNjX2RhdGFbaSAtIDFdLmZpcnN0ICsgMUxMLCBJTlRfTUFYKTsKICAgICAgICAgICAg ICAgICBzYy0+c3RzY19kYXRhW2ldLmNvdW50ID0gRkZNQVgoc2MtPnN0c2NfZGF0YVtpXS5jb3Vu dCwgMSk7Ci0gICAgICAgICAgICAgICAgc2MtPnN0c2NfZGF0YVtpXS5pZCAgICA9IEZGTUFYKHNj LT5zdHNjX2RhdGFbaV0uaWQsIDEpOworICAgICAgICAgICAgICAgIHNjLT5zdHNjX2RhdGFbaV0u aWQgPSBGRk1BWChzYy0+c3RzY19kYXRhW2ldLmlkLCAxKTsKICAgICAgICAgICAgICAgICBjb250 aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF2X2Fzc2VydDAoc2MtPnN0c2NfZGF0 YVtpKzFdLmZpcnN0ID49IDIpOworICAgICAgICAgICAgYXZfYXNzZXJ0MChzYy0+c3RzY19kYXRh W2kgKyAxXS5maXJzdCA+PSAyKTsKICAgICAgICAgICAgIC8vIFdlIHJlcGxhY2UgdGhpcyBlbnRy eSBieSB0aGUgbmV4dCB2YWxpZAotICAgICAgICAgICAgc2MtPnN0c2NfZGF0YVtpXS5maXJzdCA9 IHNjLT5zdHNjX2RhdGFbaSsxXS5maXJzdCAtIDE7Ci0gICAgICAgICAgICBzYy0+c3RzY19kYXRh W2ldLmNvdW50ID0gc2MtPnN0c2NfZGF0YVtpKzFdLmNvdW50OwotICAgICAgICAgICAgc2MtPnN0 c2NfZGF0YVtpXS5pZCAgICA9IHNjLT5zdHNjX2RhdGFbaSsxXS5pZDsKKyAgICAgICAgICAgIHNj LT5zdHNjX2RhdGFbaV0uZmlyc3QgPSBzYy0+c3RzY19kYXRhW2kgKyAxXS5maXJzdCAtIDE7Cisg ICAgICAgICAgICBzYy0+c3RzY19kYXRhW2ldLmNvdW50ID0gc2MtPnN0c2NfZGF0YVtpICsgMV0u Y291bnQ7CisgICAgICAgICAgICBzYy0+c3RzY19kYXRhW2ldLmlkID0gc2MtPnN0c2NfZGF0YVtp ICsgMV0uaWQ7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMzNDksNyArMzMzOCw3IEBAIHN0YXRp YyBpbmxpbmUgaW50IG1vdl9zdHNjX2luZGV4X3ZhbGlkKHVuc2lnbmVkIGludCBpbmRleCwgdW5z aWduZWQgaW50IGNvdW50KQogfQogCiAvKiBDb21wdXRlIHRoZSBzYW1wbGVzIHZhbHVlIGZvciB0 aGUgc3RzYyBlbnRyeSBhdCB0aGUgZ2l2ZW4gaW5kZXguICovCi1zdGF0aWMgaW5saW5lIGludDY0 X3QgbW92X2dldF9zdHNjX3NhbXBsZXMoTU9WU3RyZWFtQ29udGV4dCAqc2MsIHVuc2lnbmVkIGlu dCBpbmRleCkKK3N0YXRpYyBpbmxpbmUgaW50NjRfdCBtb3ZfZ2V0X3N0c2Nfc2FtcGxlcyhNT1ZT dHJlYW1Db250ZXh0KiBzYywgdW5zaWduZWQgaW50IGluZGV4KQogewogICAgIGludCBjaHVua19j b3VudDsKIApAQCAtMzM2NCwxMCArMzM1MywxMCBAQCBzdGF0aWMgaW5saW5lIGludDY0X3QgbW92 X2dldF9zdHNjX3NhbXBsZXMoTU9WU3RyZWFtQ29udGV4dCAqc2MsIHVuc2lnbmVkIGludCBpbgog ICAgIHJldHVybiBzYy0+c3RzY19kYXRhW2luZGV4XS5jb3VudCAqIChpbnQ2NF90KWNodW5rX2Nv dW50OwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFkX3N0cHMoTU9WQ29udGV4dCAqYywgQVZJT0Nv bnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX3N0cHMoTU9WQ29u dGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7Ci0gICAgQVZTdHJlYW0g KnN0OwotICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjOworICAgIEFWU3RyZWFtKiBzdDsKKyAgICBN T1ZTdHJlYW1Db250ZXh0KiBzYzsKICAgICB1bnNpZ25lZCBpLCBlbnRyaWVzOwogCiAgICAgaWYg KGMtPnRyYWtfaW5kZXggPCAwKSB7CkBAIC0zMzc3LDcgKzMzNjYsNyBAQCBzdGF0aWMgaW50IG1v dl9yZWFkX3N0cHMoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20p CiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0cmVhbXMgPCAxKQogICAgICAgICByZXR1cm4gMDsKLSAg ICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zLTFdOworICAgIHN0ID0gYy0+ ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMgLSAxXTsKICAgICBzYyA9IHN0LT5wcml2X2Rh dGE7CiAKICAgICBhdmlvX3JiMzIocGIpOyAvLyB2ZXJzaW9uICsgZmxhZ3MKQEAgLTM0MDUsMTEg KzMzOTQsMTEgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zdHBzKE1PVkNvbnRleHQgKmMsIEFWSU9D b250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50 IG1vdl9yZWFkX3N0c3MoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0 b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX3N0c3MoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQq IHBiLCBNT1ZBdG9tIGF0b20pCiB7Ci0gICAgQVZTdHJlYW0gKnN0OwotICAgIEZGU3RyZWFtICpz dGk7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7CisgICAgQVZTdHJlYW0qIHN0OworICAgIEZG U3RyZWFtKiBzdGk7CisgICAgTU9WU3RyZWFtQ29udGV4dCogc2M7CiAgICAgdW5zaWduZWQgaW50 IGksIGVudHJpZXM7CiAKICAgICBpZiAoYy0+dHJha19pbmRleCA8IDApIHsKQEAgLTM0MTksNyAr MzQwOCw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfc3RzcyhNT1ZDb250ZXh0ICpjLCBBVklPQ29u dGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKIAogICAgIGlmIChjLT5mYy0+bmJfc3RyZWFtcyA8IDEp CiAgICAgICAgIHJldHVybiAwOwotICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0 cmVhbXMtMV07CisgICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcyAtIDFd OwogICAgIHN0aSA9IGZmc3RyZWFtKHN0KTsKICAgICBzYyA9IHN0LT5wcml2X2RhdGE7CiAKQEAg LTM0NjAsMTAgKzM0NDksMTAgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zdHNzKE1PVkNvbnRleHQg KmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIHJldHVybiAwOwogfQogCi1z dGF0aWMgaW50IG1vdl9yZWFkX3N0c3ooTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBN T1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX3N0c3ooTU9WQ29udGV4dCogYywgQVZJ T0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7Ci0gICAgQVZTdHJlYW0gKnN0OwotICAgIE1P VlN0cmVhbUNvbnRleHQgKnNjOworICAgIEFWU3RyZWFtKiBzdDsKKyAgICBNT1ZTdHJlYW1Db250 ZXh0KiBzYzsKICAgICB1bnNpZ25lZCBpbnQgaSwgZW50cmllcywgc2FtcGxlX3NpemUsIGZpZWxk X3NpemUsIG51bV9ieXRlczsKICAgICBHZXRCaXRDb250ZXh0IGdiOwogICAgIHVuc2lnbmVkIGNo YXIqIGJ1ZjsKQEAgLTM0NzYsMTkgKzM0NjUsMjAgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zdHN6 KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogCiAgICAgaWYg KGMtPmZjLT5uYl9zdHJlYW1zIDwgMSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3QgPSBjLT5m Yy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcy0xXTsKKyAgICBzdCA9IGMtPmZjLT5zdHJlYW1z W2MtPmZjLT5uYl9zdHJlYW1zIC0gMV07CiAgICAgc2MgPSBzdC0+cHJpdl9kYXRhOwogCiAgICAg YXZpb19yOChwYik7IC8qIHZlcnNpb24gKi8KICAgICBhdmlvX3JiMjQocGIpOyAvKiBmbGFncyAq LwogCi0gICAgaWYgKGF0b20udHlwZSA9PSBNS1RBRygncycsJ3QnLCdzJywneicpKSB7CisgICAg aWYgKGF0b20udHlwZSA9PSBNS1RBRygncycsICd0JywgJ3MnLCAneicpKSB7CiAgICAgICAgIHNh bXBsZV9zaXplID0gYXZpb19yYjMyKHBiKTsKICAgICAgICAgaWYgKCFzYy0+c2FtcGxlX3NpemUp IC8qIGRvIG5vdCBvdmVyd3JpdGUgdmFsdWUgY29tcHV0ZWQgaW4gc3RzZCAqLwogICAgICAgICAg ICAgc2MtPnNhbXBsZV9zaXplID0gc2FtcGxlX3NpemU7CiAgICAgICAgIHNjLT5zdHN6X3NhbXBs ZV9zaXplID0gc2FtcGxlX3NpemU7CiAgICAgICAgIGZpZWxkX3NpemUgPSAzMjsKLSAgICB9IGVs c2UgeworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgc2FtcGxlX3NpemUgPSAwOwogICAgICAg ICBhdmlvX3JiMjQocGIpOyAvKiByZXNlcnZlZCAqLwogICAgICAgICBmaWVsZF9zaXplID0gYXZp b19yOChwYik7CkBAIC0zNTE4LDkgKzM1MDgsOSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3N0c3oo TU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgaWYgKCFz Yy0+c2FtcGxlX3NpemVzKQogICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwogCi0gICAg bnVtX2J5dGVzID0gKGVudHJpZXMqZmllbGRfc2l6ZSs0KT4+MzsKKyAgICBudW1fYnl0ZXMgPSAo ZW50cmllcyAqIGZpZWxkX3NpemUgKyA0KSA+PiAzOwogCi0gICAgYnVmID0gYXZfbWFsbG9jKG51 bV9ieXRlcytBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKTsKKyAgICBidWYgPSBhdl9tYWxs b2MobnVtX2J5dGVzICsgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSk7CiAgICAgaWYgKCFi dWYpIHsKICAgICAgICAgYXZfZnJlZXAoJnNjLT5zYW1wbGVfc2l6ZXMpOwogICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwpAQCAtMzUzNCw3ICszNTI0LDcgQEAgc3RhdGljIGludCBtb3Zf cmVhZF9zdHN6KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQog ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpbml0X2dldF9iaXRzKCZnYiwgYnVmLCA4 Km51bV9ieXRlcyk7CisgICAgaW5pdF9nZXRfYml0cygmZ2IsIGJ1ZiwgOCAqIG51bV9ieXRlcyk7 CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CiAgICAgICAgIHNjLT5zYW1w bGVfc2l6ZXNbaV0gPSBnZXRfYml0c19sb25nKCZnYiwgZmllbGRfc2l6ZSk7CkBAIC0zNTUzLDEw ICszNTQzLDEwIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfc3RzeihNT1ZDb250ZXh0ICpjLCBBVklP Q29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGlu dCBtb3ZfcmVhZF9zdHRzKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBh dG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9zdHRzKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0 KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEFWU3RyZWFtICpzdDsKLSAgICBNT1ZTdHJlYW1D b250ZXh0ICpzYzsKKyAgICBBVlN0cmVhbSogc3Q7CisgICAgTU9WU3RyZWFtQ29udGV4dCogc2M7 CiAgICAgdW5zaWduZWQgaW50IGksIGVudHJpZXM7CiAgICAgaW50NjRfdCBkdXJhdGlvbiA9IDA7 CiAgICAgaW50NjRfdCB0b3RhbF9zYW1wbGVfY291bnQgPSAwOwpAQCAtMzU3MCw3ICszNTYwLDcg QEAgc3RhdGljIGludCBtb3ZfcmVhZF9zdHRzKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpw YiwgTU9WQXRvbSBhdG9tKQogCiAgICAgaWYgKGMtPmZjLT5uYl9zdHJlYW1zIDwgMSkKICAgICAg ICAgcmV0dXJuIDA7Ci0gICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcy0x XTsKKyAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zIC0gMV07CiAgICAg c2MgPSBzdC0+cHJpdl9kYXRhOwogCiAgICAgYXZpb19yOChwYik7IC8qIHZlcnNpb24gKi8KQEAg LTM1NzgsNyArMzU2OCw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfc3R0cyhNT1ZDb250ZXh0ICpj LCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBlbnRyaWVzID0gYXZpb19yYjMy KHBiKTsKIAogICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX1RSQUNFLCAidHJhY2tbJXVdLnN0dHMu ZW50cmllcyA9ICV1XG4iLAotICAgICAgICAgICAgYy0+ZmMtPm5iX3N0cmVhbXMtMSwgZW50cmll cyk7CisgICAgICAgIGMtPmZjLT5uYl9zdHJlYW1zIC0gMSwgZW50cmllcyk7CiAKICAgICBpZiAo c2MtPnN0dHNfZGF0YSkKICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfV0FSTklORywgIkR1 cGxpY2F0ZWQgU1RUUyBhdG9tXG4iKTsKQEAgLTM1OTEsOCArMzU4MSw4IEBAIHN0YXRpYyBpbnQg bW92X3JlYWRfc3R0cyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRv bSkKICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZV9kdXJhdGlvbjsKICAgICAgICAgdW5zaWdu ZWQgaW50IHNhbXBsZV9jb3VudDsKICAgICAgICAgdW5zaWduZWQgaW50IG1pbl9lbnRyaWVzID0g RkZNSU4oRkZNQVgoaSArIDEsIDEwMjQgKiAxMDI0KSwgZW50cmllcyk7Ci0gICAgICAgIE1PVlN0 dHMgKnN0dHNfZGF0YSA9IGF2X2Zhc3RfcmVhbGxvYyhzYy0+c3R0c19kYXRhLCAmc2MtPnN0dHNf YWxsb2NhdGVkX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtaW5fZW50cmllcyAqIHNpemVvZigqc2MtPnN0dHNfZGF0YSkpOworICAgICAgICBNT1ZT dHRzKiBzdHRzX2RhdGEgPSBhdl9mYXN0X3JlYWxsb2Moc2MtPnN0dHNfZGF0YSwgJnNjLT5zdHRz X2FsbG9jYXRlZF9zaXplLAorICAgICAgICAgICAgbWluX2VudHJpZXMgKiBzaXplb2YoKnNjLT5z dHRzX2RhdGEpKTsKICAgICAgICAgaWYgKCFzdHRzX2RhdGEpIHsKICAgICAgICAgICAgIGF2X2Zy ZWVwKCZzYy0+c3R0c19kYXRhKTsKICAgICAgICAgICAgIHNjLT5zdHRzX2NvdW50ID0gMDsKQEAg LTM2MDEsMTQgKzM1OTEsMTQgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zdHRzKE1PVkNvbnRleHQg KmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAgICBzYy0+c3R0c19jb3Vu dCA9IG1pbl9lbnRyaWVzOwogICAgICAgICBzYy0+c3R0c19kYXRhID0gc3R0c19kYXRhOwogCi0g ICAgICAgIHNhbXBsZV9jb3VudCAgICA9IGF2aW9fcmIzMihwYik7CisgICAgICAgIHNhbXBsZV9j b3VudCA9IGF2aW9fcmIzMihwYik7CiAgICAgICAgIHNhbXBsZV9kdXJhdGlvbiA9IGF2aW9fcmIz MihwYik7CiAKLSAgICAgICAgc2MtPnN0dHNfZGF0YVtpXS5jb3VudD0gc2FtcGxlX2NvdW50Owot ICAgICAgICBzYy0+c3R0c19kYXRhW2ldLmR1cmF0aW9uPSBzYW1wbGVfZHVyYXRpb247CisgICAg ICAgIHNjLT5zdHRzX2RhdGFbaV0uY291bnQgPSBzYW1wbGVfY291bnQ7CisgICAgICAgIHNjLT5z dHRzX2RhdGFbaV0uZHVyYXRpb24gPSBzYW1wbGVfZHVyYXRpb247CiAKICAgICAgICAgYXZfbG9n KGMtPmZjLCBBVl9MT0dfVFJBQ0UsICJzYW1wbGVfY291bnQ9JXUsIHNhbXBsZV9kdXJhdGlvbj0l dVxuIiwKLSAgICAgICAgICAgICAgICBzYW1wbGVfY291bnQsIHNhbXBsZV9kdXJhdGlvbik7Cisg ICAgICAgICAgICBzYW1wbGVfY291bnQsIHNhbXBsZV9kdXJhdGlvbik7CiAKICAgICAgICAgLyog U1RUUyBzYW1wbGUgb2Zmc2V0cyBhcmUgdWludDMyIGJ1dCBzb21lIGZpbGVzIHN0b3JlIGl0IGFz IGludDMyCiAgICAgICAgICAqIHdpdGggbmVnYXRpdmUgdmFsdWVzIHVzZWQgdG8gY29ycmVjdCBE VFMgZGVsYXlzLgpAQCAtMzYxNywxMCArMzYwNywxMSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3N0 dHMoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgICAg ICAgICAvLyBhc3N1bWUgaGlnaCBkZWx0YSBpcyBhIGNvcnJlY3Rpb24gaWYgbmVnYXRpdmUgd2hl biBjYXN0IGFzIGludDMyCiAgICAgICAgICAgICBpbnQzMl90IGRlbHRhX21hZ25pdHVkZSA9IChp bnQzMl90KXNhbXBsZV9kdXJhdGlvbjsKICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9H X1dBUk5JTkcsICJUb28gbGFyZ2Ugc2FtcGxlIG9mZnNldCAldSBpbiBzdHRzIGVudHJ5ICV1IHdp dGggY291bnQgJXUgaW4gc3Q6JWQuIENsaXBwaW5nIHRvIDEuXG4iLAotICAgICAgICAgICAgICAg ICAgIHNhbXBsZV9kdXJhdGlvbiwgaSwgc2FtcGxlX2NvdW50LCBzdC0+aW5kZXgpOworICAgICAg ICAgICAgICAgIHNhbXBsZV9kdXJhdGlvbiwgaSwgc2FtcGxlX2NvdW50LCBzdC0+aW5kZXgpOwog ICAgICAgICAgICAgc2MtPnN0dHNfZGF0YVtpXS5kdXJhdGlvbiA9IDE7CiAgICAgICAgICAgICBj b3JyZWN0ZWRfZHRzID0gYXZfc2F0X2FkZDY0KGNvcnJlY3RlZF9kdHMsIChkZWx0YV9tYWduaXR1 ZGUgPCAwID8gKGludDY0X3QpZGVsdGFfbWFnbml0dWRlIDogMSkgKiBzYW1wbGVfY291bnQpOwot ICAgICAgICB9IGVsc2UgeworICAgICAgICB9CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAg Y29ycmVjdGVkX2R0cyArPSBzYW1wbGVfZHVyYXRpb24gKiAodWludDY0X3Qpc2FtcGxlX2NvdW50 OwogICAgICAgICB9CiAKQEAgLTM2MzMsOCArMzYyNCw4IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRf c3R0cyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAg ICAgICAgIHNjLT5zdHRzX2RhdGFbaV0uZHVyYXRpb24gLT0gY29ycmVjdGlvbjsKICAgICAgICAg fQogCi0gICAgICAgIGR1cmF0aW9uKz0oaW50NjRfdClzYy0+c3R0c19kYXRhW2ldLmR1cmF0aW9u Kih1aW50NjRfdClzYy0+c3R0c19kYXRhW2ldLmNvdW50OwotICAgICAgICB0b3RhbF9zYW1wbGVf Y291bnQrPXNjLT5zdHRzX2RhdGFbaV0uY291bnQ7CisgICAgICAgIGR1cmF0aW9uICs9IChpbnQ2 NF90KXNjLT5zdHRzX2RhdGFbaV0uZHVyYXRpb24gKiAodWludDY0X3Qpc2MtPnN0dHNfZGF0YVtp XS5jb3VudDsKKyAgICAgICAgdG90YWxfc2FtcGxlX2NvdW50ICs9IHNjLT5zdHRzX2RhdGFbaV0u Y291bnQ7CiAgICAgfQogCiAgICAgc2MtPnN0dHNfY291bnQgPSBpOwpAQCAtMzY0Miw3ICszNjMz LDcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zdHRzKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0 ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIGlmIChkdXJhdGlvbiA+IDAgJiYKICAgICAgICAgZHVy YXRpb24gPD0gSU5UNjRfTUFYIC0gc2MtPmR1cmF0aW9uX2Zvcl9mcHMgJiYKICAgICAgICAgdG90 YWxfc2FtcGxlX2NvdW50IDw9IElOVF9NQVggLSBzYy0+bmJfZnJhbWVzX2Zvcl9mcHMpIHsKLSAg ICAgICAgc2MtPmR1cmF0aW9uX2Zvcl9mcHMgICs9IGR1cmF0aW9uOworICAgICAgICBzYy0+ZHVy YXRpb25fZm9yX2ZwcyArPSBkdXJhdGlvbjsKICAgICAgICAgc2MtPm5iX2ZyYW1lc19mb3JfZnBz ICs9IHRvdGFsX3NhbXBsZV9jb3VudDsKICAgICB9CiAKQEAgLTM2NTEsOSArMzY0Miw5IEBAIHN0 YXRpYyBpbnQgbW92X3JlYWRfc3R0cyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1P VkF0b20gYXRvbSkKICAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwogICAgIH0KIAotICAgIHN0 LT5uYl9mcmFtZXM9IHRvdGFsX3NhbXBsZV9jb3VudDsKKyAgICBzdC0+bmJfZnJhbWVzID0gdG90 YWxfc2FtcGxlX2NvdW50OwogICAgIGlmIChkdXJhdGlvbikKLSAgICAgICAgc3QtPmR1cmF0aW9u PSBGRk1JTihzdC0+ZHVyYXRpb24sIGR1cmF0aW9uKTsKKyAgICAgICAgc3QtPmR1cmF0aW9uID0g RkZNSU4oc3QtPmR1cmF0aW9uLCBkdXJhdGlvbik7CiAKICAgICAvLyBBbGwgc2FtcGxlcyBoYXZl IHplcm8gZHVyYXRpb24uIFRoZXkgaGF2ZSBoaWdoZXIgY2hhbmNlIGJlIGNob3NlIGJ5CiAgICAg Ly8gbW92X2ZpbmRfbmV4dF9zYW1wbGUsIHdoaWNoIGxlYWRzIHRvIHNlZWsgYWdhaW4gYW5kIGFn YWluLgpAQCAtMzY2MSwyMiArMzY1MiwyMiBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3N0dHMoTU9W Q29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgLy8gSXQncyBB VkVSUk9SX0lOVkFMSUREQVRBIGFjdHVhbGx5LCBidXQgc3VjaCBmaWxlcyBleGlzdCBpbiB0aGUg d2lsZC4KICAgICAvLyBTbyBvbmx5IG1hcmsgZGF0YSBzdHJlYW0gYXMgZGlzY2FyZGVkIGZvciBz YWZldHkuCiAgICAgaWYgKCFkdXJhdGlvbiAmJiBzYy0+c3R0c19jb3VudCAmJgotICAgICAgICAg ICAgc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9EQVRBKSB7CisgICAg ICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfREFUQSkgewogICAg ICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgIkFsbCBz YW1wbGVzIGluIGRhdGEgc3RyZWFtIGluZGV4OmlkIFslZDolZF0gaGF2ZSB6ZXJvICIKLSAgICAg ICAgICAgICAgICJkdXJhdGlvbiwgc3RyZWFtIHNldCB0byBiZSBkaXNjYXJkZWQgYnkgZGVmYXVs dC4gT3ZlcnJpZGUgIgotICAgICAgICAgICAgICAgInVzaW5nIEFWU3RyZWFtLT5kaXNjYXJkIG9y IC1kaXNjYXJkIGZvciBmZm1wZWcgY29tbWFuZC5cbiIsCi0gICAgICAgICAgICAgICBzdC0+aW5k ZXgsIHNjLT5pZCk7CisgICAgICAgICAgICAiQWxsIHNhbXBsZXMgaW4gZGF0YSBzdHJlYW0gaW5k ZXg6aWQgWyVkOiVkXSBoYXZlIHplcm8gIgorICAgICAgICAgICAgImR1cmF0aW9uLCBzdHJlYW0g c2V0IHRvIGJlIGRpc2NhcmRlZCBieSBkZWZhdWx0LiBPdmVycmlkZSAiCisgICAgICAgICAgICAi dXNpbmcgQVZTdHJlYW0tPmRpc2NhcmQgb3IgLWRpc2NhcmQgZm9yIGZmbXBlZyBjb21tYW5kLlxu IiwKKyAgICAgICAgICAgIHN0LT5pbmRleCwgc2MtPmlkKTsKICAgICAgICAgc3QtPmRpc2NhcmQg PSBBVkRJU0NBUkRfQUxMOwogICAgIH0KICAgICBzYy0+dHJhY2tfZW5kID0gZHVyYXRpb247CiAg ICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfc2R0cChNT1ZDb250ZXh0ICpj LCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfc2R0 cChNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBB VlN0cmVhbSAqc3Q7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7CisgICAgQVZTdHJlYW0qIHN0 OworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjOwogICAgIGludDY0X3QgaSwgZW50cmllczsKIAog ICAgIGlmIChjLT5mYy0+bmJfc3RyZWFtcyA8IDEpCkBAIC0zNjg5LDcgKzM2ODAsNyBAQCBzdGF0 aWMgaW50IG1vdl9yZWFkX3NkdHAoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZB dG9tIGF0b20pCiAgICAgZW50cmllcyA9IGF0b20uc2l6ZSAtIDQ7CiAKICAgICBhdl9sb2coYy0+ ZmMsIEFWX0xPR19UUkFDRSwgInRyYWNrWyV1XS5zZHRwLmVudHJpZXMgPSAlIiBQUklkNjQgIlxu IiwKLSAgICAgICAgICAgYy0+ZmMtPm5iX3N0cmVhbXMgLSAxLCBlbnRyaWVzKTsKKyAgICAgICAg Yy0+ZmMtPm5iX3N0cmVhbXMgLSAxLCBlbnRyaWVzKTsKIAogICAgIGlmIChzYy0+c2R0cF9kYXRh KQogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19XQVJOSU5HLCAiRHVwbGljYXRlZCBTRFRQ IGF0b21cbiIpOwpAQCAtMzcwNyw3ICszNjk4LDcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zZHRw KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIHJldHVy biAwOwogfQogCi1zdGF0aWMgdm9pZCBtb3ZfdXBkYXRlX2R0c19zaGlmdChNT1ZTdHJlYW1Db250 ZXh0ICpzYywgaW50IGR1cmF0aW9uLCB2b2lkICpsb2djdHgpCitzdGF0aWMgdm9pZCBtb3ZfdXBk YXRlX2R0c19zaGlmdChNT1ZTdHJlYW1Db250ZXh0KiBzYywgaW50IGR1cmF0aW9uLCB2b2lkKiBs b2djdHgpCiB7CiAgICAgaWYgKGR1cmF0aW9uIDwgMCkgewogICAgICAgICBpZiAoZHVyYXRpb24g PT0gSU5UX01JTikgewpAQCAtMzcxOCwxMCArMzcwOSwxMCBAQCBzdGF0aWMgdm9pZCBtb3ZfdXBk YXRlX2R0c19zaGlmdChNT1ZTdHJlYW1Db250ZXh0ICpzYywgaW50IGR1cmF0aW9uLCB2b2lkICps b2djdAogICAgIH0KIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9jdHRzKE1PVkNvbnRleHQgKmMs IEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9jdHRz KE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEFW U3RyZWFtICpzdDsKLSAgICBNT1ZTdHJlYW1Db250ZXh0ICpzYzsKKyAgICBBVlN0cmVhbSogc3Q7 CisgICAgTU9WU3RyZWFtQ29udGV4dCogc2M7CiAgICAgdW5zaWduZWQgaW50IGksIGVudHJpZXMs IGN0dHNfY291bnQgPSAwOwogCiAgICAgaWYgKGMtPnRyYWtfaW5kZXggPCAwKSB7CkBAIC0zNzMx LDcgKzM3MjIsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2N0dHMoTU9WQ29udGV4dCAqYywgQVZJ T0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0cmVhbXMg PCAxKQogICAgICAgICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5u Yl9zdHJlYW1zLTFdOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMg LSAxXTsKICAgICBzYyA9IHN0LT5wcml2X2RhdGE7CiAKICAgICBhdmlvX3I4KHBiKTsgLyogdmVy c2lvbiAqLwpAQCAtMzc1MCwxOSArMzc0MSwxOSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2N0dHMo TU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgZW50cmllcyAmJiAh cGItPmVvZl9yZWFjaGVkOyBpKyspIHsKLSAgICAgICAgTU9WQ3R0cyAqY3R0c19kYXRhOworICAg ICAgICBNT1ZDdHRzKiBjdHRzX2RhdGE7CiAgICAgICAgIGNvbnN0IHNpemVfdCBtaW5fc2l6ZV9u ZWVkZWQgPSAoY3R0c19jb3VudCArIDEpICogc2l6ZW9mKE1PVkN0dHMpOwogICAgICAgICBjb25z dCBzaXplX3QgcmVxdWVzdGVkX3NpemUgPQogICAgICAgICAgICAgbWluX3NpemVfbmVlZGVkID4g c2MtPmN0dHNfYWxsb2NhdGVkX3NpemUgPwogICAgICAgICAgICAgRkZNQVgobWluX3NpemVfbmVl ZGVkLCAyICogc2MtPmN0dHNfYWxsb2NhdGVkX3NpemUpIDoKICAgICAgICAgICAgIG1pbl9zaXpl X25lZWRlZDsKLSAgICAgICAgaW50IGNvdW50ICAgID0gYXZpb19yYjMyKHBiKTsKKyAgICAgICAg aW50IGNvdW50ID0gYXZpb19yYjMyKHBiKTsKICAgICAgICAgaW50IGR1cmF0aW9uID0gYXZpb19y YjMyKHBiKTsKIAogICAgICAgICBpZiAoY291bnQgPD0gMCkgewogICAgICAgICAgICAgYXZfbG9n KGMtPmZjLCBBVl9MT0dfVFJBQ0UsCi0gICAgICAgICAgICAgICAgICAgImlnbm9yaW5nIENUVFMg ZW50cnkgd2l0aCBjb3VudD0lZCBkdXJhdGlvbj0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICBj b3VudCwgZHVyYXRpb24pOworICAgICAgICAgICAgICAgICJpZ25vcmluZyBDVFRTIGVudHJ5IHdp dGggY291bnQ9JWQgZHVyYXRpb249JWRcbiIsCisgICAgICAgICAgICAgICAgY291bnQsIGR1cmF0 aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTM3ODEsOSArMzc3 Miw5IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfY3R0cyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4 dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgY3R0c19jb3VudCsrOwogCiAgICAgICAgIGF2 X2xvZyhjLT5mYywgQVZfTE9HX1RSQUNFLCAiY291bnQ9JWQsIGR1cmF0aW9uPSVkXG4iLAotICAg ICAgICAgICAgICAgIGNvdW50LCBkdXJhdGlvbik7CisgICAgICAgICAgICBjb3VudCwgZHVyYXRp b24pOwogCi0gICAgICAgIGlmIChpKzI8ZW50cmllcykKKyAgICAgICAgaWYgKGkgKyAyIDwgZW50 cmllcykKICAgICAgICAgICAgIG1vdl91cGRhdGVfZHRzX3NoaWZ0KHNjLCBkdXJhdGlvbiwgYy0+ ZmMpOwogICAgIH0KIApAQCAtMzc5OSwxMCArMzc5MCwxMCBAQCBzdGF0aWMgaW50IG1vdl9yZWFk X2N0dHMoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAg cmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfc2dwZChNT1ZDb250ZXh0ICpjLCBB VklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfc2dwZChN T1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBBVlN0 cmVhbSAqc3Q7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7CisgICAgQVZTdHJlYW0qIHN0Owor ICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjOwogICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgICB1aW50 MzJfdCBncm91cGluZ190eXBlOwogICAgIHVpbnQzMl90IGRlZmF1bHRfbGVuZ3RoOwpAQCAtMzgy Miw3ICszODEzLDcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zZ3BkKE1PVkNvbnRleHQgKmMsIEFW SU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAqIFRoaXMgZnVuY3Rpb24gb25seSBz dXBwb3J0cyAic3luYyIgYm94ZXMsIGJ1dCB0aGUgY29kZSBpcyBhYmxlIHRvIHBhcnNlCiAgICAg ICogb3RoZXIgYm94ZXMgKHN1Y2ggYXMgInRzY2wiLCAidHNhcyIgYW5kICJzdHNhIikKICAgICAg Ki8KLSAgICBpZiAoZ3JvdXBpbmdfdHlwZSAhPSBNS1RBRygncycsJ3knLCduJywnYycpKQorICAg IGlmIChncm91cGluZ190eXBlICE9IE1LVEFHKCdzJywgJ3knLCAnbicsICdjJykpCiAgICAgICAg IHJldHVybiAwOwogCiAgICAgZGVmYXVsdF9sZW5ndGggPSB2ZXJzaW9uID49IDEgPyBhdmlvX3Ji MzIocGIpIDogMDsKQEAgLTM4MzksNyArMzgzMCw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfc2dw ZChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAg dWludDMyX3QgZGVzY3JpcHRpb25fbGVuZ3RoID0gZGVmYXVsdF9sZW5ndGg7CiAgICAgICAgIGlm ICh2ZXJzaW9uID49IDEgJiYgZGVmYXVsdF9sZW5ndGggPT0gMCkKICAgICAgICAgICAgIGRlc2Ny aXB0aW9uX2xlbmd0aCA9IGF2aW9fcmIzMihwYik7Ci0gICAgICAgIGlmIChncm91cGluZ190eXBl ID09IE1LVEFHKCdzJywneScsJ24nLCdjJykpIHsKKyAgICAgICAgaWYgKGdyb3VwaW5nX3R5cGUg PT0gTUtUQUcoJ3MnLCAneScsICduJywgJ2MnKSkgewogICAgICAgICAgICAgY29uc3QgdWludDhf dCBuYWxfdW5pdF90eXBlID0gYXZpb19yOChwYikgJiAweDNmOwogICAgICAgICAgICAgc2MtPnNn cGRfc3luY1tpXSA9IG5hbF91bml0X3R5cGU7CiAgICAgICAgICAgICBkZXNjcmlwdGlvbl9sZW5n dGggLT0gMTsKQEAgLTM4NTUsMzIgKzM4NDYsMzQgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zZ3Bk KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIHJldHVy biAwOwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFkX3NiZ3AoTU9WQ29udGV4dCAqYywgQVZJT0Nv bnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX3NiZ3AoTU9WQ29u dGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7Ci0gICAgQVZTdHJlYW0g KnN0OwotICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjOworICAgIEFWU3RyZWFtKiBzdDsKKyAgICBN T1ZTdHJlYW1Db250ZXh0KiBzYzsKICAgICB1bnNpZ25lZCBpbnQgaSwgZW50cmllczsKICAgICB1 aW50OF90IHZlcnNpb247CiAgICAgdWludDMyX3QgZ3JvdXBpbmdfdHlwZTsKLSAgICBNT1ZTYmdw ICp0YWJsZSwgKip0YWJsZXA7Ci0gICAgaW50ICp0YWJsZV9jb3VudDsKKyAgICBNT1ZTYmdwKiB0 YWJsZSwgKiogdGFibGVwOworICAgIGludCogdGFibGVfY291bnQ7CiAKICAgICBpZiAoYy0+ZmMt Pm5iX3N0cmVhbXMgPCAxKQogICAgICAgICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5zdHJl YW1zW2MtPmZjLT5uYl9zdHJlYW1zLTFdOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMt Pm5iX3N0cmVhbXMgLSAxXTsKICAgICBzYyA9IHN0LT5wcml2X2RhdGE7CiAKICAgICB2ZXJzaW9u ID0gYXZpb19yOChwYik7IC8qIHZlcnNpb24gKi8KICAgICBhdmlvX3JiMjQocGIpOyAvKiBmbGFn cyAqLwogICAgIGdyb3VwaW5nX3R5cGUgPSBhdmlvX3JsMzIocGIpOwogCi0gICAgaWYgKGdyb3Vw aW5nX3R5cGUgPT0gTUtUQUcoJ3InLCdhJywncCcsJyAnKSkgeworICAgIGlmIChncm91cGluZ190 eXBlID09IE1LVEFHKCdyJywgJ2EnLCAncCcsICcgJykpIHsKICAgICAgICAgdGFibGVwID0gJnNj LT5yYXBfZ3JvdXA7CiAgICAgICAgIHRhYmxlX2NvdW50ID0gJnNjLT5yYXBfZ3JvdXBfY291bnQ7 Ci0gICAgfSBlbHNlIGlmIChncm91cGluZ190eXBlID09IE1LVEFHKCdzJywneScsJ24nLCdjJykp IHsKKyAgICB9CisgICAgZWxzZSBpZiAoZ3JvdXBpbmdfdHlwZSA9PSBNS1RBRygncycsICd5Jywg J24nLCAnYycpKSB7CiAgICAgICAgIHRhYmxlcCA9ICZzYy0+c3luY19ncm91cDsKICAgICAgICAg dGFibGVfY291bnQgPSAmc2MtPnN5bmNfZ3JvdXBfY291bnQ7Ci0gICAgfSBlbHNlIHsKKyAgICB9 CisgICAgZWxzZSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMzkxNiwxMiArMzkw OSwxMiBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3NiZ3AoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRl eHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAvKioKICAqIEdldCBpdGggZWRpdCBsaXN0IGVudHJ5ICht ZWRpYSB0aW1lLCBkdXJhdGlvbikuCiAgKi8KLXN0YXRpYyBpbnQgZ2V0X2VkaXRfbGlzdF9lbnRy eShNT1ZDb250ZXh0ICptb3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg TU9WU3RyZWFtQ29udGV4dCAqbXNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBlZGl0X2xpc3RfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50NjRfdCAqZWRpdF9saXN0X21lZGlhX3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50NjRfdCAqZWRpdF9saXN0X2R1cmF0aW9uLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludDY0X3QgZ2xvYmFsX3RpbWVzY2FsZSkKK3N0YXRpYyBpbnQgZ2V0X2Vk aXRfbGlzdF9lbnRyeShNT1ZDb250ZXh0KiBtb3YsCisgICAgY29uc3QgTU9WU3RyZWFtQ29udGV4 dCogbXNjLAorICAgIHVuc2lnbmVkIGludCBlZGl0X2xpc3RfaW5kZXgsCisgICAgaW50NjRfdCog ZWRpdF9saXN0X21lZGlhX3RpbWUsCisgICAgaW50NjRfdCogZWRpdF9saXN0X2R1cmF0aW9uLAor ICAgIGludDY0X3QgZ2xvYmFsX3RpbWVzY2FsZSkKIHsKICAgICBpZiAoZWRpdF9saXN0X2luZGV4 ID09IG1zYy0+ZWxzdF9jb3VudCkgewogICAgICAgICByZXR1cm4gMDsKQEAgLTM5MzEsMTEgKzM5 MjQsMTEgQEAgc3RhdGljIGludCBnZXRfZWRpdF9saXN0X2VudHJ5KE1PVkNvbnRleHQgKm1vdiwK IAogICAgIC8qIGR1cmF0aW9uIGlzIGluIGdsb2JhbCB0aW1lc2NhbGUgdW5pdHM7Y29udmVydCB0 byBtc2MgdGltZXNjYWxlICovCiAgICAgaWYgKGdsb2JhbF90aW1lc2NhbGUgPT0gMCkgewotICAg ICAgYXZwcml2X3JlcXVlc3Rfc2FtcGxlKG1vdi0+ZmMsICJTdXBwb3J0IGZvciBtdmhkLnRpbWVz Y2FsZSA9IDAgd2l0aCBlZGl0bGlzdHMiKTsKLSAgICAgIHJldHVybiAwOworICAgICAgICBhdnBy aXZfcmVxdWVzdF9zYW1wbGUobW92LT5mYywgIlN1cHBvcnQgZm9yIG12aGQudGltZXNjYWxlID0g MCB3aXRoIGVkaXRsaXN0cyIpOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgKmVkaXRf bGlzdF9kdXJhdGlvbiA9IGF2X3Jlc2NhbGUoKmVkaXRfbGlzdF9kdXJhdGlvbiwgbXNjLT50aW1l X3NjYWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbF90aW1l c2NhbGUpOworICAgICAgICBnbG9iYWxfdGltZXNjYWxlKTsKIAogICAgIGlmICgqZWRpdF9saXN0 X2R1cmF0aW9uICsgKHVpbnQ2NF90KSplZGl0X2xpc3RfbWVkaWFfdGltZSA+IElOVDY0X01BWCkK ICAgICAgICAgKmVkaXRfbGlzdF9kdXJhdGlvbiA9IDA7CkBAIC0zOTYyLDIwICszOTU1LDIwIEBA IHN0YXRpYyBpbnQgZ2V0X2VkaXRfbGlzdF9lbnRyeShNT1ZDb250ZXh0ICptb3YsCiAgKgogICog UGxhY2VzIHRoZSBmb3VuZCBjdHRzX2luZGV4IGFuZCBjdHRzX3NhbXBsZSBpbiBjb3JyZXNwb25k aW5nIG91dHB1dCBhcmdzLgogICovCi1zdGF0aWMgaW50IGZpbmRfcHJldl9jbG9zZXN0X2luZGV4 KEFWU3RyZWFtICpzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZJbmRl eEVudHJ5ICplX29sZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5i X29sZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTU9WVGltZVRvU2FtcGxl ICp0dHNfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB0 dHNfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgdGlt ZXN0YW1wX3B0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWcs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QqIGluZGV4LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90KiB0dHNfaW5kZXgsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QqIHR0c19zYW1wbGUpCi17Ci0g ICAgTU9WU3RyZWFtQ29udGV4dCAqbXNjID0gc3QtPnByaXZfZGF0YTsKLSAgICBGRlN0cmVhbSAq Y29uc3Qgc3RpID0gZmZzdHJlYW0oc3QpOwotICAgIEFWSW5kZXhFbnRyeSAqZV9rZWVwID0gc3Rp LT5pbmRleF9lbnRyaWVzOworc3RhdGljIGludCBmaW5kX3ByZXZfY2xvc2VzdF9pbmRleChBVlN0 cmVhbSogc3QsCisgICAgQVZJbmRleEVudHJ5KiBlX29sZCwKKyAgICBpbnQgbmJfb2xkLAorICAg IE1PVlRpbWVUb1NhbXBsZSogdHRzX2RhdGEsCisgICAgaW50NjRfdCB0dHNfY291bnQsCisgICAg aW50NjRfdCB0aW1lc3RhbXBfcHRzLAorICAgIGludCBmbGFnLAorICAgIGludDY0X3QqIGluZGV4 LAorICAgIGludDY0X3QqIHR0c19pbmRleCwKKyAgICBpbnQ2NF90KiB0dHNfc2FtcGxlKQorewor ICAgIE1PVlN0cmVhbUNvbnRleHQqIG1zYyA9IHN0LT5wcml2X2RhdGE7CisgICAgRkZTdHJlYW0q IGNvbnN0IHN0aSA9IGZmc3RyZWFtKHN0KTsKKyAgICBBVkluZGV4RW50cnkqIGVfa2VlcCA9IHN0 aS0+aW5kZXhfZW50cmllczsKICAgICBpbnQgbmJfa2VlcCA9IHN0aS0+bmJfaW5kZXhfZW50cmll czsKICAgICBpbnQ2NF90IGkgPSAwOwogCkBAIC0zOTg4LDE0ICszOTgxLDE0IEBAIHN0YXRpYyBp bnQgZmluZF9wcmV2X2Nsb3Nlc3RfaW5kZXgoQVZTdHJlYW0gKnN0LAogICAgICAgICB0aW1lc3Rh bXBfcHRzIC09IG1zYy0+ZHRzX3NoaWZ0OwogICAgIH0KIAotICAgIHN0aS0+aW5kZXhfZW50cmll cyAgICA9IGVfb2xkOworICAgIHN0aS0+aW5kZXhfZW50cmllcyA9IGVfb2xkOwogICAgIHN0aS0+ bmJfaW5kZXhfZW50cmllcyA9IG5iX29sZDsKICAgICAqaW5kZXggPSBhdl9pbmRleF9zZWFyY2hf dGltZXN0YW1wKHN0LCB0aW1lc3RhbXBfcHRzLCBmbGFnIHwgQVZTRUVLX0ZMQUdfQkFDS1dBUkQp OwogCiAgICAgLy8gS2VlcCBnb2luZyBiYWNrd2FyZHMgaW4gdGhlIGluZGV4IGVudHJpZXMgdW50 aWwgdGhlIHRpbWVzdGFtcCBpcyB0aGUgc2FtZS4KICAgICBpZiAoKmluZGV4ID49IDApIHsKICAg ICAgICAgZm9yIChpID0gKmluZGV4OyBpID4gMCAmJiBlX29sZFtpXS50aW1lc3RhbXAgPT0gZV9v bGRbaSAtIDFdLnRpbWVzdGFtcDsKLSAgICAgICAgICAgICBpLS0pIHsKKyAgICAgICAgICAgIGkt LSkgewogICAgICAgICAgICAgaWYgKChmbGFnICYgQVZTRUVLX0ZMQUdfQU5ZKSB8fAogICAgICAg ICAgICAgICAgIChlX29sZFtpIC0gMV0uZmxhZ3MgJiBBVklOREVYX0tFWUZSQU1FKSkgewogICAg ICAgICAgICAgICAgICppbmRleCA9IGkgLSAxOwpAQCAtNDAzNCwxNSArNDAyNywxNiBAQCBzdGF0 aWMgaW50IGZpbmRfcHJldl9jbG9zZXN0X2luZGV4KEFWU3RyZWFtICpzdCwKICAgICAgICAgICAg IGlmICgqdHRzX3NhbXBsZSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgKCp0dHNfaW5kZXgpLS07 CiAgICAgICAgICAgICAgICAgaWYgKCp0dHNfaW5kZXggPj0gMCkKLSAgICAgICAgICAgICAgICAg ICp0dHNfc2FtcGxlID0gdHRzX2RhdGFbKnR0c19pbmRleF0uY291bnQgLSAxOwotICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKnR0c19zYW1wbGUgPSB0dHNfZGF0YVsq dHRzX2luZGV4XS5jb3VudCAtIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsK ICAgICAgICAgICAgICAgICAoKnR0c19zYW1wbGUpLS07CiAgICAgICAgICAgICB9CiAgICAgICAg IH0KICAgICB9CiAKICAgICAvKiByZXN0b3JlIEFWU3RyZWFtIHN0YXRlKi8KLSAgICBzdGktPmlu ZGV4X2VudHJpZXMgICAgPSBlX2tlZXA7CisgICAgc3RpLT5pbmRleF9lbnRyaWVzID0gZV9rZWVw OwogICAgIHN0aS0+bmJfaW5kZXhfZW50cmllcyA9IG5iX2tlZXA7CiAgICAgcmV0dXJuICppbmRl eCA+PSAwID8gMCA6IC0xOwogfQpAQCAtNDA1OCwxMSArNDA1MiwxMSBAQCBzdGF0aWMgaW50IGZp bmRfcHJldl9jbG9zZXN0X2luZGV4KEFWU3RyZWFtICpzdCwKICAqIFRoaXMgaXMgbmVlZGVkIGJl Y2F1c2UgdGhlIG1vdl9maXhfaW5kZXggY2FsbHMgdGhpcyBmdW5jIHdpdGggdGhlIHNhbWUKICAq IHVuaW5jcmVtZW50ZWQgdGltZXN0YW1wIGZvciBzdWNjZXNzaXZlIGRpc2NhcmRlZCBmcmFtZXMu CiAgKi8KLXN0YXRpYyBpbnQ2NF90IGFkZF9pbmRleF9lbnRyeShBVlN0cmVhbSAqc3QsIGludDY0 X3QgcG9zLCBpbnQ2NF90IHRpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgc2l6ZSwgaW50IGRpc3RhbmNlLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50NjRfdCBhZGRf aW5kZXhfZW50cnkoQVZTdHJlYW0qIHN0LCBpbnQ2NF90IHBvcywgaW50NjRfdCB0aW1lc3RhbXAs CisgICAgaW50IHNpemUsIGludCBkaXN0YW5jZSwgaW50IGZsYWdzKQogewotICAgIEZGU3RyZWFt ICpjb25zdCBzdGkgPSBmZnN0cmVhbShzdCk7Ci0gICAgQVZJbmRleEVudHJ5ICplbnRyaWVzLCAq aWU7CisgICAgRkZTdHJlYW0qIGNvbnN0IHN0aSA9IGZmc3RyZWFtKHN0KTsKKyAgICBBVkluZGV4 RW50cnkqIGVudHJpZXMsICogaWU7CiAgICAgaW50NjRfdCBpbmRleCA9IC0xOwogICAgIGNvbnN0 IHNpemVfdCBtaW5fc2l6ZV9uZWVkZWQgPSAoc3RpLT5uYl9pbmRleF9lbnRyaWVzICsgMSkgKiBz aXplb2YoQVZJbmRleEVudHJ5KTsKIApAQCAtNDA3NywyMCArNDA3MSwyMCBAQCBzdGF0aWMgaW50 NjRfdCBhZGRfaW5kZXhfZW50cnkoQVZTdHJlYW0gKnN0LCBpbnQ2NF90IHBvcywgaW50NjRfdCB0 aW1lc3RhbXAsCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGVudHJpZXMgPSBhdl9mYXN0X3Jl YWxsb2Moc3RpLT5pbmRleF9lbnRyaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnN0aS0+aW5kZXhfZW50cmllc19hbGxvY2F0ZWRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlcXVlc3RlZF9zaXplKTsKKyAgICAgICAgJnN0aS0+aW5kZXhfZW50cmllc19h bGxvY2F0ZWRfc2l6ZSwKKyAgICAgICAgcmVxdWVzdGVkX3NpemUpOwogICAgIGlmICghZW50cmll cykKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgc3RpLT5pbmRleF9lbnRyaWVzID0gZW50cmll czsKIAogICAgIGluZGV4ID0gc3RpLT5uYl9pbmRleF9lbnRyaWVzKys7Ci0gICAgaWU9ICZlbnRy aWVzW2luZGV4XTsKKyAgICBpZSA9ICZlbnRyaWVzW2luZGV4XTsKIAogICAgIGllLT5wb3MgPSBw b3M7CiAgICAgaWUtPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgICBpZS0+bWluX2Rpc3RhbmNl PSBkaXN0YW5jZTsKLSAgICBpZS0+c2l6ZT0gc2l6ZTsKKyAgICBpZS0+bWluX2Rpc3RhbmNlID0g ZGlzdGFuY2U7CisgICAgaWUtPnNpemUgPSBzaXplOwogICAgIGllLT5mbGFncyA9IGZsYWdzOwog ICAgIHJldHVybiBpbmRleDsKIH0KQEAgLTQxMDAsOSArNDA5NCw5IEBAIHN0YXRpYyBpbnQ2NF90 IGFkZF9pbmRleF9lbnRyeShBVlN0cmVhbSAqc3QsIGludDY0X3QgcG9zLCBpbnQ2NF90IHRpbWVz dGFtcCwKICAqIGJ5IHN1YnRyYWN0aW5nIGVuZF90cyBzdWNjZXNzaXZlbHkgYnkgdGhlIGFtb3Vu dHMgZ2l2ZW4gaW4gZnJhbWVfZHVyYXRpb25fYnVmZmVyLgogICovCiBzdGF0aWMgdm9pZCBmaXhf aW5kZXhfZW50cnlfdGltZXN0YW1wcyhBVlN0cmVhbSogc3QsIGludCBlbmRfaW5kZXgsIGludDY0 X3QgZW5kX3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRf dCogZnJhbWVfZHVyYXRpb25fYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGZyYW1lX2R1cmF0aW9uX2J1ZmZlcl9zaXplKSB7Ci0gICAgRkZTdHJlYW0g KmNvbnN0IHN0aSA9IGZmc3RyZWFtKHN0KTsKKyAgICBpbnQ2NF90KiBmcmFtZV9kdXJhdGlvbl9i dWZmZXIsCisgICAgaW50IGZyYW1lX2R1cmF0aW9uX2J1ZmZlcl9zaXplKSB7CisgICAgRkZTdHJl YW0qIGNvbnN0IHN0aSA9IGZmc3RyZWFtKHN0KTsKICAgICBpbnQgaSA9IDA7CiAgICAgYXZfYXNz ZXJ0MChlbmRfaW5kZXggPj0gMCAmJiBlbmRfaW5kZXggPD0gc3RpLT5uYl9pbmRleF9lbnRyaWVz KTsKICAgICBmb3IgKGkgPSAwOyBpIDwgZnJhbWVfZHVyYXRpb25fYnVmZmVyX3NpemU7IGkrKykg ewpAQCAtNDExMSwxMCArNDEwNSwxMCBAQCBzdGF0aWMgdm9pZCBmaXhfaW5kZXhfZW50cnlfdGlt ZXN0YW1wcyhBVlN0cmVhbSogc3QsIGludCBlbmRfaW5kZXgsIGludDY0X3QgZW5kXwogICAgIH0K IH0KIAotc3RhdGljIGludCBhZGRfdHRzX2VudHJ5KE1PVlRpbWVUb1NhbXBsZSAqKnR0c19kYXRh LCB1bnNpZ25lZCBpbnQgKnR0c19jb3VudCwgdW5zaWduZWQgaW50ICphbGxvY2F0ZWRfc2l6ZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGludCBvZmZzZXQsIHVuc2lnbmVk IGludCBkdXJhdGlvbikKK3N0YXRpYyBpbnQgYWRkX3R0c19lbnRyeShNT1ZUaW1lVG9TYW1wbGUq KiB0dHNfZGF0YSwgdW5zaWduZWQgaW50KiB0dHNfY291bnQsIHVuc2lnbmVkIGludCogYWxsb2Nh dGVkX3NpemUsCisgICAgaW50IGNvdW50LCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgZHVyYXRp b24pCiB7Ci0gICAgTU9WVGltZVRvU2FtcGxlICp0dHNfYnVmX25ldzsKKyAgICBNT1ZUaW1lVG9T YW1wbGUqIHR0c19idWZfbmV3OwogICAgIGNvbnN0IHNpemVfdCBtaW5fc2l6ZV9uZWVkZWQgPSAo KnR0c19jb3VudCArIDEpICogc2l6ZW9mKE1PVlRpbWVUb1NhbXBsZSk7CiAgICAgY29uc3Qgc2l6 ZV90IHJlcXVlc3RlZF9zaXplID0KICAgICAgICAgbWluX3NpemVfbmVlZGVkID4gKmFsbG9jYXRl ZF9zaXplID8KQEAgLTQxNDAsMTAgKzQxMzQsMTAgQEAgc3RhdGljIGludCBhZGRfdHRzX2VudHJ5 KE1PVlRpbWVUb1NhbXBsZSAqKnR0c19kYXRhLCB1bnNpZ25lZCBpbnQgKnR0c19jb3VudCwgdW4K IH0KIAogI2RlZmluZSBNQVhfUkVPUkRFUl9ERUxBWSAxNgotc3RhdGljIHZvaWQgbW92X2VzdGlt YXRlX3ZpZGVvX2RlbGF5KE1PVkNvbnRleHQgKmMsIEFWU3RyZWFtKiBzdCkKK3N0YXRpYyB2b2lk IG1vdl9lc3RpbWF0ZV92aWRlb19kZWxheShNT1ZDb250ZXh0KiBjLCBBVlN0cmVhbSogc3QpCiB7 Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqbXNjID0gc3QtPnByaXZfZGF0YTsKLSAgICBGRlN0cmVh bSAqY29uc3Qgc3RpID0gZmZzdHJlYW0oc3QpOworICAgIE1PVlN0cmVhbUNvbnRleHQqIG1zYyA9 IHN0LT5wcml2X2RhdGE7CisgICAgRkZTdHJlYW0qIGNvbnN0IHN0aSA9IGZmc3RyZWFtKHN0KTsK ICAgICBpbnQgY3R0c19pbmQgPSAwOwogICAgIGludCBjdHRzX3NhbXBsZSA9IDA7CiAgICAgaW50 NjRfdCBwdHNfYnVmW01BWF9SRU9SREVSX0RFTEFZICsgMV07IC8vIENpcmN1bGFyIGJ1ZmZlciB0 byBzb3J0IHB0cy4KQEAgLTQxNzgsNyArNDE3Miw4IEBAIHN0YXRpYyB2b2lkIG1vdl9lc3RpbWF0 ZV92aWRlb19kZWxheShNT1ZDb250ZXh0ICpjLCBBVlN0cmVhbSogc3QpCiAgICAgICAgICAgICAg ICAgaWYgKHB0c19idWZbal0gPCBwdHNfYnVmW3JdKSB7CiAgICAgICAgICAgICAgICAgICAgIEZG U1dBUChpbnQ2NF90LCBwdHNfYnVmW2pdLCBwdHNfYnVmW3JdKTsKICAgICAgICAgICAgICAgICAg ICAgKytudW1fc3dhcHM7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBqID0gcjsKQEAgLTQxOTIsMTEgKzQx ODcsMTEgQEAgc3RhdGljIHZvaWQgbW92X2VzdGltYXRlX3ZpZGVvX2RlbGF5KE1PVkNvbnRleHQg KmMsIEFWU3RyZWFtKiBzdCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBhdl9s b2coYy0+ZmMsIEFWX0xPR19ERUJVRywgIlNldHRpbmcgY29kZWNwYXItPmRlbGF5IHRvICVkIGZv ciBzdHJlYW0gc3Q6ICVkXG4iLAotICAgICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT52aWRlb19k ZWxheSwgc3QtPmluZGV4KTsKKyAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+dmlkZW9fZGVsYXks IHN0LT5pbmRleCk7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBtb3ZfY3VycmVudF9zYW1wbGVf aW5jKE1PVlN0cmVhbUNvbnRleHQgKnNjKQorc3RhdGljIHZvaWQgbW92X2N1cnJlbnRfc2FtcGxl X2luYyhNT1ZTdHJlYW1Db250ZXh0KiBzYykKIHsKICAgICBzYy0+Y3VycmVudF9zYW1wbGUrKzsK ICAgICBzYy0+Y3VycmVudF9pbmRleCsrOwpAQCAtNDIwOCw3ICs0MjAzLDcgQEAgc3RhdGljIHZv aWQgbW92X2N1cnJlbnRfc2FtcGxlX2luYyhNT1ZTdHJlYW1Db250ZXh0ICpzYykKICAgICB9CiB9 CiAKLXN0YXRpYyB2b2lkIG1vdl9jdXJyZW50X3NhbXBsZV9kZWMoTU9WU3RyZWFtQ29udGV4dCAq c2MpCitzdGF0aWMgdm9pZCBtb3ZfY3VycmVudF9zYW1wbGVfZGVjKE1PVlN0cmVhbUNvbnRleHQq IHNjKQogewogICAgIHNjLT5jdXJyZW50X3NhbXBsZS0tOwogICAgIHNjLT5jdXJyZW50X2luZGV4 LS07CkBAIC00MjIwLDcgKzQyMTUsNyBAQCBzdGF0aWMgdm9pZCBtb3ZfY3VycmVudF9zYW1wbGVf ZGVjKE1PVlN0cmVhbUNvbnRleHQgKnNjKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgbW92X2N1 cnJlbnRfc2FtcGxlX3NldChNT1ZTdHJlYW1Db250ZXh0ICpzYywgaW50IGN1cnJlbnRfc2FtcGxl KQorc3RhdGljIHZvaWQgbW92X2N1cnJlbnRfc2FtcGxlX3NldChNT1ZTdHJlYW1Db250ZXh0KiBz YywgaW50IGN1cnJlbnRfc2FtcGxlKQogewogICAgIGludDY0X3QgcmFuZ2Vfc2l6ZTsKIApAQCAt NDI0OCwxNSArNDI0MywxNSBAQCBzdGF0aWMgdm9pZCBtb3ZfY3VycmVudF9zYW1wbGVfc2V0KE1P VlN0cmVhbUNvbnRleHQgKnNjLCBpbnQgY3VycmVudF9zYW1wbGUpCiAgKiBBbHNvIGZpeGVzIHRo ZSB0aW1lc3RhbXBzIG9mIHRoZSBpbmRleCBlbnRyaWVzIHRvIG1hdGNoIHRoZSB0aW1lbGluZQog ICogc3BlY2lmaWVkIHRoZSBlZGl0IGxpc3RzLgogICovCi1zdGF0aWMgdm9pZCBtb3ZfZml4X2lu ZGV4KE1PVkNvbnRleHQgKm1vdiwgQVZTdHJlYW0gKnN0KQorc3RhdGljIHZvaWQgbW92X2ZpeF9p bmRleChNT1ZDb250ZXh0KiBtb3YsIEFWU3RyZWFtKiBzdCkKIHsKLSAgICBNT1ZTdHJlYW1Db250 ZXh0ICptc2MgPSBzdC0+cHJpdl9kYXRhOwotICAgIEZGU3RyZWFtICpjb25zdCBzdGkgPSBmZnN0 cmVhbShzdCk7Ci0gICAgQVZJbmRleEVudHJ5ICplX29sZCA9IHN0aS0+aW5kZXhfZW50cmllczsK KyAgICBNT1ZTdHJlYW1Db250ZXh0KiBtc2MgPSBzdC0+cHJpdl9kYXRhOworICAgIEZGU3RyZWFt KiBjb25zdCBzdGkgPSBmZnN0cmVhbShzdCk7CisgICAgQVZJbmRleEVudHJ5KiBlX29sZCA9IHN0 aS0+aW5kZXhfZW50cmllczsKICAgICBpbnQgbmJfb2xkID0gc3RpLT5uYl9pbmRleF9lbnRyaWVz OwotICAgIGNvbnN0IEFWSW5kZXhFbnRyeSAqZV9vbGRfZW5kID0gZV9vbGQgKyBuYl9vbGQ7Ci0g ICAgY29uc3QgQVZJbmRleEVudHJ5ICpjdXJyZW50ID0gTlVMTDsKLSAgICBNT1ZUaW1lVG9TYW1w bGUgKnR0c19kYXRhX29sZCA9IG1zYy0+dHRzX2RhdGE7CisgICAgY29uc3QgQVZJbmRleEVudHJ5 KiBlX29sZF9lbmQgPSBlX29sZCArIG5iX29sZDsKKyAgICBjb25zdCBBVkluZGV4RW50cnkqIGN1 cnJlbnQgPSBOVUxMOworICAgIE1PVlRpbWVUb1NhbXBsZSogdHRzX2RhdGFfb2xkID0gbXNjLT50 dHNfZGF0YTsKICAgICBpbnQ2NF90IHR0c19pbmRleF9vbGQgPSAwOwogICAgIGludDY0X3QgdHRz X3NhbXBsZV9vbGQgPSAwOwogICAgIGludDY0X3QgdHRzX2NvdW50X29sZCA9IG1zYy0+dHRzX2Nv dW50OwpAQCAtNDI3OSw3ICs0Mjc0LDcgQEAgc3RhdGljIHZvaWQgbW92X2ZpeF9pbmRleChNT1ZD b250ZXh0ICptb3YsIEFWU3RyZWFtICpzdCkKICAgICBpbnQgbnVtX2Rpc2NhcmRlZF9iZWdpbiA9 IDA7CiAgICAgaW50IGZpcnN0X25vbl96ZXJvX2F1ZGlvX2VkaXQgPSAtMTsKICAgICBpbnQgcGFj a2V0X3NraXBfc2FtcGxlcyA9IDA7Ci0gICAgTU9WSW5kZXhSYW5nZSAqY3VycmVudF9pbmRleF9y YW5nZSA9IE5VTEw7CisgICAgTU9WSW5kZXhSYW5nZSogY3VycmVudF9pbmRleF9yYW5nZSA9IE5V TEw7CiAgICAgaW50IGZvdW5kX2tleWZyYW1lX2FmdGVyX2VkaXQgPSAwOwogICAgIGludCBmb3Vu ZF9ub25fZW1wdHlfZWRpdCA9IDA7CiAKQEAgLTQyODksNyArNDI4NCw3IEBAIHN0YXRpYyB2b2lk IG1vdl9maXhfaW5kZXgoTU9WQ29udGV4dCAqbW92LCBBVlN0cmVhbSAqc3QpCiAKICAgICAvLyBh bGxvY2F0ZSB0aGUgaW5kZXggcmFuZ2VzIGFycmF5CiAgICAgbXNjLT5pbmRleF9yYW5nZXMgPSBh dl9tYWxsb2NfYXJyYXkobXNjLT5lbHN0X2NvdW50ICsgMSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2YobXNjLT5pbmRleF9yYW5nZXNbMF0pKTsKKyAgICAg ICAgc2l6ZW9mKG1zYy0+aW5kZXhfcmFuZ2VzWzBdKSk7CiAgICAgaWYgKCFtc2MtPmluZGV4X3Jh bmdlcykgewogICAgICAgICBhdl9sb2cobW92LT5mYywgQVZfTE9HX0VSUk9SLCAiQ2Fubm90IGFs bG9jYXRlIGluZGV4IHJhbmdlcyBidWZmZXJcbiIpOwogICAgICAgICByZXR1cm47CkBAIC00MzIx LDkgKzQzMTYsOSBAQCBzdGF0aWMgdm9pZCBtb3ZfZml4X2luZGV4KE1PVkNvbnRleHQgKm1vdiwg QVZTdHJlYW0gKnN0KQogICAgIHN0YXJ0X2R0cyA9IGVkaXRfbGlzdF9kdHNfZW50cnlfZW5kOwog CiAgICAgd2hpbGUgKGdldF9lZGl0X2xpc3RfZW50cnkobW92LCBtc2MsIGVkaXRfbGlzdF9pbmRl eCwgJmVkaXRfbGlzdF9tZWRpYV90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZlZGl0X2xpc3RfZHVyYXRpb24sIG1vdi0+dGltZV9zY2FsZSkpIHsKKyAgICAgICAgJmVkaXRf bGlzdF9kdXJhdGlvbiwgbW92LT50aW1lX3NjYWxlKSkgewogICAgICAgICBhdl9sb2cobW92LT5m YywgQVZfTE9HX0RFQlVHLCAiUHJvY2Vzc2luZyBzdDogJWQsIGVkaXQgbGlzdCAlIlBSSWQ2NCIg LSBtZWRpYSB0aW1lOiAlIlBSSWQ2NCIsIGR1cmF0aW9uOiAlIlBSSWQ2NCJcbiIsCi0gICAgICAg ICAgICAgICBzdC0+aW5kZXgsIGVkaXRfbGlzdF9pbmRleCwgZWRpdF9saXN0X21lZGlhX3RpbWUs IGVkaXRfbGlzdF9kdXJhdGlvbik7CisgICAgICAgICAgICBzdC0+aW5kZXgsIGVkaXRfbGlzdF9p bmRleCwgZWRpdF9saXN0X21lZGlhX3RpbWUsIGVkaXRfbGlzdF9kdXJhdGlvbik7CiAgICAgICAg IGVkaXRfbGlzdF9pbmRleCsrOwogICAgICAgICBlZGl0X2xpc3RfZHRzX2NvdW50ZXIgPSBlZGl0 X2xpc3RfZHRzX2VudHJ5X2VuZDsKICAgICAgICAgZWRpdF9saXN0X2R0c19lbnRyeV9lbmQgKz0g ZWRpdF9saXN0X2R1cmF0aW9uOwpAQCAtNDMzOSw3ICs0MzM0LDggQEAgc3RhdGljIHZvaWQgbW92 X2ZpeF9pbmRleChNT1ZDb250ZXh0ICptb3YsIEFWU3RyZWFtICpzdCkKICAgICAgICAgaWYgKHN0 LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfQVVESU8pIHsKICAgICAgICAg ICAgIGlmIChmaXJzdF9ub25femVyb19hdWRpb19lZGl0IDwgMCkgewogICAgICAgICAgICAgICAg IGZpcnN0X25vbl96ZXJvX2F1ZGlvX2VkaXQgPSAxOwotICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGZpcnN0X25v bl96ZXJvX2F1ZGlvX2VkaXQgPSAwOwogICAgICAgICAgICAgfQogCkBAIC00MzYwLDE1ICs0MzU2 LDE1IEBAIHN0YXRpYyB2b2lkIG1vdl9maXhfaW5kZXgoTU9WQ29udGV4dCAqbW92LCBBVlN0cmVh bSAqc3QpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZmluZF9wcmV2X2Nsb3Nlc3RfaW5kZXgo c3QsIGVfb2xkLCBuYl9vbGQsIHR0c19kYXRhX29sZCwgdHRzX2NvdW50X29sZCwgc2VhcmNoX3Rp bWVzdGFtcCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbmRleCwg JnR0c19pbmRleF9vbGQsICZ0dHNfc2FtcGxlX29sZCkgPCAwKSB7CisgICAgICAgICAgICAmaW5k ZXgsICZ0dHNfaW5kZXhfb2xkLCAmdHRzX3NhbXBsZV9vbGQpIDwgMCkgewogICAgICAgICAgICAg YXZfbG9nKG1vdi0+ZmMsIEFWX0xPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICJzdDog JWQgZWRpdCBsaXN0OiAlIlBSSWQ2NCIgTWlzc2luZyBrZXkgZnJhbWUgd2hpbGUgc2VhcmNoaW5n IGZvciB0aW1lc3RhbXA6ICUiUFJJZDY0IlxuIiwKLSAgICAgICAgICAgICAgICAgICBzdC0+aW5k ZXgsIGVkaXRfbGlzdF9pbmRleCwgc2VhcmNoX3RpbWVzdGFtcCk7CisgICAgICAgICAgICAgICAg InN0OiAlZCBlZGl0IGxpc3Q6ICUiUFJJZDY0IiBNaXNzaW5nIGtleSBmcmFtZSB3aGlsZSBzZWFy Y2hpbmcgZm9yIHRpbWVzdGFtcDogJSJQUklkNjQiXG4iLAorICAgICAgICAgICAgICAgIHN0LT5p bmRleCwgZWRpdF9saXN0X2luZGV4LCBzZWFyY2hfdGltZXN0YW1wKTsKICAgICAgICAgICAgIGlm IChmaW5kX3ByZXZfY2xvc2VzdF9pbmRleChzdCwgZV9vbGQsIG5iX29sZCwgdHRzX2RhdGFfb2xk LCB0dHNfY291bnRfb2xkLCBzZWFyY2hfdGltZXN0YW1wLCBBVlNFRUtfRkxBR19BTlksCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluZGV4LCAmdHRzX2luZGV4X29s ZCwgJnR0c19zYW1wbGVfb2xkKSA8IDApIHsKKyAgICAgICAgICAgICAgICAmaW5kZXgsICZ0dHNf aW5kZXhfb2xkLCAmdHRzX3NhbXBsZV9vbGQpIDwgMCkgewogICAgICAgICAgICAgICAgIGF2X2xv Zyhtb3YtPmZjLCBBVl9MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgInN0OiAl ZCBlZGl0IGxpc3QgJSJQUklkNjQiIENhbm5vdCBmaW5kIGFuIGluZGV4IGVudHJ5IGJlZm9yZSB0 aW1lc3RhbXA6ICUiUFJJZDY0Ii5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0LT5pbmRl eCwgZWRpdF9saXN0X2luZGV4LCBzZWFyY2hfdGltZXN0YW1wKTsKKyAgICAgICAgICAgICAgICAg ICAgInN0OiAlZCBlZGl0IGxpc3QgJSJQUklkNjQiIENhbm5vdCBmaW5kIGFuIGluZGV4IGVudHJ5 IGJlZm9yZSB0aW1lc3RhbXA6ICUiUFJJZDY0Ii5cbiIsCisgICAgICAgICAgICAgICAgICAgIHN0 LT5pbmRleCwgZWRpdF9saXN0X2luZGV4LCBzZWFyY2hfdGltZXN0YW1wKTsKICAgICAgICAgICAg ICAgICBpbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgdHRzX2luZGV4X29sZCA9IDA7CiAgICAg ICAgICAgICAgICAgdHRzX3NhbXBsZV9vbGQgPSAwOwpAQCAtNDM4Miw4ICs0Mzc4LDggQEAgc3Rh dGljIHZvaWQgbW92X2ZpeF9pbmRleChNT1ZDb250ZXh0ICptb3YsIEFWU3RyZWFtICpzdCkKICAg ICAgICAgZm91bmRfa2V5ZnJhbWVfYWZ0ZXJfZWRpdCA9IDA7CiAgICAgICAgIGZvciAoOyBjdXJy ZW50IDwgZV9vbGRfZW5kOyBjdXJyZW50KyssIGluZGV4KyspIHsKICAgICAgICAgICAgIC8vIGNo ZWNrICBpZiBmcmFtZSBvdXRzaWRlIGVkaXQgbGlzdCBtYXJrIGl0IGZvciBkaXNjYXJkCi0gICAg ICAgICAgICBmcmFtZV9kdXJhdGlvbiA9IChjdXJyZW50ICsgMSA8ICBlX29sZF9lbmQpID8KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjdXJyZW50ICsgMSktPnRpbWVzdGFtcCAtIGN1 cnJlbnQtPnRpbWVzdGFtcCkgOiBlZGl0X2xpc3RfZHVyYXRpb247CisgICAgICAgICAgICBmcmFt ZV9kdXJhdGlvbiA9IChjdXJyZW50ICsgMSA8IGVfb2xkX2VuZCkgPworICAgICAgICAgICAgICAg ICgoY3VycmVudCArIDEpLT50aW1lc3RhbXAgLSBjdXJyZW50LT50aW1lc3RhbXApIDogZWRpdF9s aXN0X2R1cmF0aW9uOwogCiAgICAgICAgICAgICBmbGFncyA9IGN1cnJlbnQtPmZsYWdzOwogCkBA IC00Mzk0LDE4ICs0MzkwLDE4IEBAIHN0YXRpYyB2b2lkIG1vdl9maXhfaW5kZXgoTU9WQ29udGV4 dCAqbW92LCBBVlN0cmVhbSAqc3QpCiAgICAgICAgICAgICBpZiAodHRzX2RhdGFfb2xkICYmIHR0 c19pbmRleF9vbGQgPCB0dHNfY291bnRfb2xkKSB7CiAgICAgICAgICAgICAgICAgY3Vycl9jdHRz ID0gdHRzX2RhdGFfb2xkW3R0c19pbmRleF9vbGRdLm9mZnNldDsKICAgICAgICAgICAgICAgICBh dl9sb2cobW92LT5mYywgQVZfTE9HX1RSQUNFLCAic3R0czogJSJQUklkNjQiIGN0dHM6ICUiUFJJ ZDY0IiwgdHRzX2luZGV4OiAlIlBSSWQ2NCIsIHR0c19jb3VudDogJSJQUklkNjQiXG4iLAotICAg ICAgICAgICAgICAgICAgICAgICBjdXJyX2N0cywgY3Vycl9jdHRzLCB0dHNfaW5kZXhfb2xkLCB0 dHNfY291bnRfb2xkKTsKKyAgICAgICAgICAgICAgICAgICAgY3Vycl9jdHMsIGN1cnJfY3R0cywg dHRzX2luZGV4X29sZCwgdHRzX2NvdW50X29sZCk7CiAgICAgICAgICAgICAgICAgY3Vycl9jdHMg Kz0gY3Vycl9jdHRzOwogICAgICAgICAgICAgICAgIHR0c19zYW1wbGVfb2xkKys7CiAgICAgICAg ICAgICAgICAgaWYgKHR0c19zYW1wbGVfb2xkID09IHR0c19kYXRhX29sZFt0dHNfaW5kZXhfb2xk XS5jb3VudCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoYWRkX3R0c19lbnRyeSgmbXNjLT50 dHNfZGF0YSwgJm1zYy0+dHRzX2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJm1zYy0+dHRzX2FsbG9jYXRlZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHRzX2RhdGFfb2xkW3R0c19pbmRleF9vbGRdLmNvdW50IC0gZWRp dF9saXN0X3N0YXJ0X3R0c19zYW1wbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0dHNfZGF0YV9vbGRbdHRzX2luZGV4X29sZF0ub2Zmc2V0LCB0dHNfZGF0YV9vbGRb dHRzX2luZGV4X29sZF0uZHVyYXRpb24pID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAmbXNjLT50dHNfYWxsb2NhdGVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICB0dHNf ZGF0YV9vbGRbdHRzX2luZGV4X29sZF0uY291bnQgLSBlZGl0X2xpc3Rfc3RhcnRfdHRzX3NhbXBs ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHR0c19kYXRhX29sZFt0dHNfaW5kZXhfb2xkXS5v ZmZzZXQsIHR0c19kYXRhX29sZFt0dHNfaW5kZXhfb2xkXS5kdXJhdGlvbikgPT0gLTEpIHsKICAg ICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhtb3YtPmZjLCBBVl9MT0dfRVJST1IsICJDYW5u b3QgYWRkIFRpbWUgVG8gU2FtcGxlIGVudHJ5ICUiUFJJZDY0IiAtIHslIlBSSWQ2NCIsICVkfVxu IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dHNfaW5kZXhfb2xkLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR0c19kYXRhX29sZFt0dHNfaW5kZXhfb2xkXS5jb3Vu dCAtIGVkaXRfbGlzdF9zdGFydF90dHNfc2FtcGxlLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHR0c19kYXRhX29sZFt0dHNfaW5kZXhfb2xkXS5vZmZzZXQpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR0c19pbmRleF9vbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHRzX2RhdGFfb2xkW3R0c19pbmRleF9vbGRdLmNvdW50IC0gZWRpdF9saXN0X3N0YXJ0X3R0 c19zYW1wbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRzX2RhdGFfb2xkW3R0c19p bmRleF9vbGRdLm9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB0dHNfaW5kZXhfb2xkKys7CkBA IC00NDIzLDI2ICs0NDE5LDI3IEBAIHN0YXRpYyB2b2lkIG1vdl9maXhfaW5kZXgoTU9WQ29udGV4 dCAqbW92LCBBVlN0cmVhbSAqc3QpCiAKICAgICAgICAgICAgICAgICAgICAgLy8gU2hpZnQgdGhl IGluZGV4IGVudHJ5IHRpbWVzdGFtcCBieSBwYWNrZXRfc2tpcF9zYW1wbGVzIHRvIGJlIGNvcnJl Y3QuCiAgICAgICAgICAgICAgICAgICAgIGVkaXRfbGlzdF9kdHNfY291bnRlciAtPSBwYWNrZXRf c2tpcF9zYW1wbGVzOwotICAgICAgICAgICAgICAgICAgICBpZiAoZWRpdF9saXN0X3N0YXJ0X2Vu Y291bnRlcmVkID09IDApICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0X2xpc3Rfc3Rh cnRfZW5jb3VudGVyZWQgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9saXN0 X3N0YXJ0X2VuY291bnRlcmVkID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ug dGltZXN0YW1wcyBzdHJpY3RseSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgZm9yIGF1ZGlvLCBi eSByZXdyaXRpbmcgdGltZXN0YW1wcyBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRp c2NhcmRlZCBwYWNrZXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lX2R1cmF0 aW9uX2J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeF9pbmRleF9lbnRy eV90aW1lc3RhbXBzKHN0LCBzdGktPm5iX2luZGV4X2VudHJpZXMsIGVkaXRfbGlzdF9kdHNfY291 bnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmcmFtZV9kdXJhdGlvbl9idWZmZXIsIG51bV9kaXNjYXJkZWRfYmVnaW4pOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZV9kdXJhdGlvbl9idWZmZXIsIG51bV9kaXNj YXJkZWRfYmVnaW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X2ZyZWVwKCZmcmFt ZV9kdXJhdGlvbl9idWZmZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgYXZfbG9nKG1vdi0+ZmMsIEFWX0xP R19ERUJVRywgInNraXAgJWQgYXVkaW8gc2FtcGxlcyBmcm9tIGN1cnJfY3RzOiAlIlBSSWQ2NCJc biIsIHBhY2tldF9za2lwX3NhbXBsZXMsIGN1cnJfY3RzKTsKLSAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg ICAgICAgICAgICAgZmxhZ3MgfD0gQVZJTkRFWF9ESVNDQVJEX0ZSQU1FOwogICAgICAgICAgICAg ICAgICAgICBhdl9sb2cobW92LT5mYywgQVZfTE9HX0RFQlVHLCAiZHJvcCBhIGZyYW1lIGF0IGN1 cnJfY3RzOiAlIlBSSWQ2NCIgQCAlIlBSSWQ2NCJcbiIsIGN1cnJfY3RzLCBpbmRleCk7CiAKICAg ICAgICAgICAgICAgICAgICAgaWYgKGVkaXRfbGlzdF9zdGFydF9lbmNvdW50ZXJlZCA9PSAwKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICBudW1fZGlzY2FyZGVkX2JlZ2luKys7CiAgICAgICAg ICAgICAgICAgICAgICAgICBmcmFtZV9kdXJhdGlvbl9idWZmZXIgPSBhdl9yZWFsbG9jKGZyYW1l X2R1cmF0aW9uX2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbnVtX2Rpc2NhcmRlZF9iZWdpbiAqIHNpemVvZihpbnQ2NF90 KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2Rpc2NhcmRlZF9iZWdpbiAqIHNp emVvZihpbnQ2NF90KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZyYW1lX2R1cmF0 aW9uX2J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhtb3YtPmZj LCBBVl9MT0dfRVJST1IsICJDYW5ub3QgcmVhbGxvY2F0ZSBmcmFtZSBkdXJhdGlvbiBidWZmZXJc biIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQ1NiwxMCArNDQ1 MywxMiBAQCBzdGF0aWMgdm9pZCBtb3ZfZml4X2luZGV4KE1PVkNvbnRleHQgKm1vdiwgQVZTdHJl YW0gKnN0KQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChtc2MtPm1pbl9jb3JyZWN0 ZWRfcHRzIDwgMCkgewogICAgICAgICAgICAgICAgICAgICBtc2MtPm1pbl9jb3JyZWN0ZWRfcHRz ID0gZWRpdF9saXN0X2R0c19jb3VudGVyICsgY3Vycl9jdHRzICsgbXNjLT5kdHNfc2hpZnQ7Ci0g ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1zYy0+bWluX2NvcnJlY3RlZF9wdHMgPSBG Rk1JTihtc2MtPm1pbl9jb3JyZWN0ZWRfcHRzLCBlZGl0X2xpc3RfZHRzX2NvdW50ZXIgKyBjdXJy X2N0dHMgKyBtc2MtPmR0c19zaGlmdCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgIGlmIChlZGl0X2xpc3Rfc3RhcnRfZW5jb3VudGVyZWQgPT0gMCkgewpAQCAtNDQ2OCwxNCAr NDQ2NywxNCBAQCBzdGF0aWMgdm9pZCBtb3ZfZml4X2luZGV4KE1PVkNvbnRleHQgKm1vdiwgQVZT dHJlYW0gKnN0KQogICAgICAgICAgICAgICAgICAgICAvLyBkaXNjYXJkZWQgcGFja2V0cy4KICAg ICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lX2R1cmF0aW9uX2J1ZmZlcikgewogICAgICAgICAg ICAgICAgICAgICAgICAgZml4X2luZGV4X2VudHJ5X3RpbWVzdGFtcHMoc3QsIHN0aS0+bmJfaW5k ZXhfZW50cmllcywgZWRpdF9saXN0X2R0c19jb3VudGVyLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfZHVyYXRpb25fYnVmZmVyLCBudW1f ZGlzY2FyZGVkX2JlZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZV9kdXJh dGlvbl9idWZmZXIsIG51bV9kaXNjYXJkZWRfYmVnaW4pOwogICAgICAgICAgICAgICAgICAgICAg ICAgYXZfZnJlZXAoJmZyYW1lX2R1cmF0aW9uX2J1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChh ZGRfaW5kZXhfZW50cnkoc3QsIGN1cnJlbnQtPnBvcywgZWRpdF9saXN0X2R0c19jb3VudGVyLCBj dXJyZW50LT5zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5t aW5fZGlzdGFuY2UsIGZsYWdzKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnQtPm1p bl9kaXN0YW5jZSwgZmxhZ3MpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgYXZfbG9nKG1vdi0+ ZmMsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBhZGQgaW5kZXggZW50cnlcbiIpOwogICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNDQ4Myw3ICs0NDgyLDcgQEAgc3RhdGlj IHZvaWQgbW92X2ZpeF9pbmRleChNT1ZDb250ZXh0ICptb3YsIEFWU3RyZWFtICpzdCkKICAgICAg ICAgICAgIC8vIFVwZGF0ZSB0aGUgaW5kZXggcmFuZ2VzIGFycmF5CiAgICAgICAgICAgICBpZiAo IWN1cnJlbnRfaW5kZXhfcmFuZ2UgfHwgaW5kZXggIT0gY3VycmVudF9pbmRleF9yYW5nZS0+ZW5k KSB7CiAgICAgICAgICAgICAgICAgY3VycmVudF9pbmRleF9yYW5nZSA9IGN1cnJlbnRfaW5kZXhf cmFuZ2UgPyBjdXJyZW50X2luZGV4X3JhbmdlICsgMQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbXNjLT5pbmRleF9yYW5nZXM7Cisg ICAgICAgICAgICAgICAgICAgIDogbXNjLT5pbmRleF9yYW5nZXM7CiAgICAgICAgICAgICAgICAg Y3VycmVudF9pbmRleF9yYW5nZS0+c3RhcnQgPSBpbmRleDsKICAgICAgICAgICAgIH0KICAgICAg ICAgICAgIGN1cnJlbnRfaW5kZXhfcmFuZ2UtPmVuZCA9IGluZGV4ICsgMTsKQEAgLTQ1MDYsMTIg KzQ1MDUsMTIgQEAgc3RhdGljIHZvaWQgbW92X2ZpeF9pbmRleChNT1ZDb250ZXh0ICptb3YsIEFW U3RyZWFtICpzdCkKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBp ZiAodHRzX3NhbXBsZV9vbGQgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFk ZF90dHNfZW50cnkoJm1zYy0+dHRzX2RhdGEsICZtc2MtPnR0c19jb3VudCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXNjLT50dHNfYWxsb2NhdGVkX3NpemUs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRzX3NhbXBsZV9v bGQgLSBlZGl0X2xpc3Rfc3RhcnRfdHRzX3NhbXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0dHNfZGF0YV9vbGRbdHRzX2luZGV4X29sZF0ub2Zmc2V0LCB0 dHNfZGF0YV9vbGRbdHRzX2luZGV4X29sZF0uZHVyYXRpb24pID09IC0xKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJm1zYy0+dHRzX2FsbG9jYXRlZF9zaXplLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR0c19zYW1wbGVfb2xkIC0gZWRpdF9saXN0X3N0YXJ0X3R0c19zYW1w bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRzX2RhdGFfb2xkW3R0c19pbmRleF9v bGRdLm9mZnNldCwgdHRzX2RhdGFfb2xkW3R0c19pbmRleF9vbGRdLmR1cmF0aW9uKSA9PSAtMSkg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhtb3YtPmZjLCBBVl9MT0dfRVJS T1IsICJDYW5ub3QgYWRkIFRpbWUgVG8gU2FtcGxlIGVudHJ5ICUiUFJJZDY0IiAtIHslIlBSSWQ2 NCIsICVkfVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRzX2luZGV4 X29sZCwgdHRzX3NhbXBsZV9vbGQgLSBlZGl0X2xpc3Rfc3RhcnRfdHRzX3NhbXBsZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRzX2RhdGFfb2xkW3R0c19pbmRleF9vbGRd Lm9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0c19pbmRleF9vbGQs IHR0c19zYW1wbGVfb2xkIC0gZWRpdF9saXN0X3N0YXJ0X3R0c19zYW1wbGUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHR0c19kYXRhX29sZFt0dHNfaW5kZXhfb2xkXS5vZmZzZXQp OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC00NTQ3LDEzICs0NTQ2LDEzIEBAIHN0 YXRpYyB2b2lkIG1vdl9maXhfaW5kZXgoTU9WQ29udGV4dCAqbW92LCBBVlN0cmVhbSAqc3QpCiAK ICAgICAvLyBOdWxsIHRlcm1pbmF0ZSB0aGUgaW5kZXggcmFuZ2VzIGFycmF5CiAgICAgY3VycmVu dF9pbmRleF9yYW5nZSA9IGN1cnJlbnRfaW5kZXhfcmFuZ2UgPyBjdXJyZW50X2luZGV4X3Jhbmdl ICsgMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbXNj LT5pbmRleF9yYW5nZXM7CisgICAgICAgIDogbXNjLT5pbmRleF9yYW5nZXM7CiAgICAgY3VycmVu dF9pbmRleF9yYW5nZS0+c3RhcnQgPSAwOwogICAgIGN1cnJlbnRfaW5kZXhfcmFuZ2UtPmVuZCA9 IDA7CiAgICAgbXNjLT5jdXJyZW50X2luZGV4ID0gbXNjLT5pbmRleF9yYW5nZXNbMF0uc3RhcnQ7 CiB9CiAKLXN0YXRpYyB1aW50MzJfdCBnZXRfc2dwZF9zeW5jX2luZGV4KGNvbnN0IE1PVlN0cmVh bUNvbnRleHQgKnNjLCBpbnQgbmFsX3VuaXRfdHlwZSkKK3N0YXRpYyB1aW50MzJfdCBnZXRfc2dw ZF9zeW5jX2luZGV4KGNvbnN0IE1PVlN0cmVhbUNvbnRleHQqIHNjLCBpbnQgbmFsX3VuaXRfdHlw ZSkKIHsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2MtPnNncGRfc3luY19jb3VudDsg aSsrKQogICAgICAgICBpZiAoc2MtPnNncGRfc3luY1tpXSA9PSBuYWxfdW5pdF90eXBlKQpAQCAt NDU2MSwxMiArNDU2MCwxMiBAQCBzdGF0aWMgdWludDMyX3QgZ2V0X3NncGRfc3luY19pbmRleChj b25zdCBNT1ZTdHJlYW1Db250ZXh0ICpzYywgaW50IG5hbF91bml0X3R5cAogICAgIHJldHVybiAw OwogfQogCi1zdGF0aWMgaW50IGJ1aWxkX29wZW5fZ29wX2tleV9wb2ludHMoQVZTdHJlYW0gKnN0 KQorc3RhdGljIGludCBidWlsZF9vcGVuX2dvcF9rZXlfcG9pbnRzKEFWU3RyZWFtKiBzdCkKIHsK ICAgICBpbnQgazsKICAgICBpbnQgc2FtcGxlX2lkID0gMDsKICAgICB1aW50MzJfdCBjcmFfaW5k ZXg7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2MgPSBzdC0+cHJpdl9kYXRhOworICAgIE1PVlN0 cmVhbUNvbnRleHQqIHNjID0gc3QtPnByaXZfZGF0YTsKIAogICAgIGlmIChzdC0+Y29kZWNwYXIt PmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX0hFVkMgfHwgIXNjLT5zeW5jX2dyb3VwX2NvdW50KQog ICAgICAgICByZXR1cm4gMDsKQEAgLTQ1ODUsNyArNDU4NCw3IEBAIHN0YXRpYyBpbnQgYnVpbGRf b3Blbl9nb3Bfa2V5X3BvaW50cyhBVlN0cmVhbSAqc3QpCiAgICAgayA9IDA7CiAgICAgZm9yICh1 aW50MzJfdCBpID0gMDsgaSA8IHNjLT5jdHRzX2NvdW50OyBpKyspCiAgICAgICAgIGZvciAoaW50 IGogPSAwOyBqIDwgc2MtPmN0dHNfZGF0YVtpXS5jb3VudDsgaisrKQotICAgICAgICAgICAgIHNj LT5zYW1wbGVfb2Zmc2V0c1trKytdID0gc2MtPmN0dHNfZGF0YVtpXS5vZmZzZXQ7CisgICAgICAg ICAgICBzYy0+c2FtcGxlX29mZnNldHNbaysrXSA9IHNjLT5jdHRzX2RhdGFbaV0ub2Zmc2V0Owog CiAgICAgLyogVGhlIGZvbGxvd2luZyBIRVZDIE5BTCB0eXBlIHJldmVhbCB0aGUgdXNlIG9mIG9w ZW4gR09QIHN5bmMgcG9pbnRzCiAgICAgICogKFRPRE86IEJMQSB0eXBlcyBtYXkgYWxzbyBiZSBj b25jZXJuZWQpICovCkBAIC00NjA3LDcgKzQ2MDYsNyBAQCBzdGF0aWMgaW50IGJ1aWxkX29wZW5f Z29wX2tleV9wb2ludHMoQVZTdHJlYW0gKnN0KQogICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwogICAgIGsgPSAwOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzYy0+c3luY19n cm91cF9jb3VudDsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IE1PVlNiZ3AgKnNnID0gJnNjLT5zeW5j X2dyb3VwW2ldOworICAgICAgICBjb25zdCBNT1ZTYmdwKiBzZyA9ICZzYy0+c3luY19ncm91cFtp XTsKICAgICAgICAgaWYgKHNnLT5pbmRleCA9PSBjcmFfaW5kZXgpCiAgICAgICAgICAgICBmb3Ig KHVpbnQzMl90IGogPSAwOyBqIDwgc2ctPmNvdW50OyBqKyspCiAgICAgICAgICAgICAgICAgc2Mt Pm9wZW5fa2V5X3NhbXBsZXNbaysrXSA9IHNhbXBsZV9pZDsKQEAgLTQ2MzEsOSArNDYzMCw5IEBA IHN0YXRpYyBpbnQgYnVpbGRfb3Blbl9nb3Bfa2V5X3BvaW50cyhBVlN0cmVhbSAqc3QpCiAgKiBz dHRzX2NvdW50IGFuZCBjdHRzX2NvdW50IG1heSBiZSBsZWZ0IHVudG91Y2hlZCBhcyB0aGV5IHdp bGwgYmUKICAqIHVzZWQgdG8gY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBlaXRoZXIgb2YgdGhl bS4KICAqLwotc3RhdGljIGludCBtb3ZfbWVyZ2VfdHRzX2RhdGEoTU9WQ29udGV4dCAqbW92LCBB VlN0cmVhbSAqc3QsIGludCBmbGFncykKK3N0YXRpYyBpbnQgbW92X21lcmdlX3R0c19kYXRhKE1P VkNvbnRleHQqIG1vdiwgQVZTdHJlYW0qIHN0LCBpbnQgZmxhZ3MpCiB7Ci0gICAgTU9WU3RyZWFt Q29udGV4dCAqc2MgPSBzdC0+cHJpdl9kYXRhOworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjID0g c3QtPnByaXZfZGF0YTsKICAgICBpbnQgY3R0cyA9IHNjLT5jdHRzX2RhdGEgJiYgKGZsYWdzICYg TU9WX01FUkdFX0NUVFMpOwogICAgIGludCBzdHRzID0gc2MtPnN0dHNfZGF0YSAmJiAoZmxhZ3Mg JiBNT1ZfTUVSR0VfU1RUUyk7CiAgICAgaW50IGlkeCA9IDA7CkBAIC00NjQ2LDMwICs0NjQ1LDMx IEBAIHN0YXRpYyBpbnQgbW92X21lcmdlX3R0c19kYXRhKE1PVkNvbnRleHQgKm1vdiwgQVZTdHJl YW0gKnN0LCBpbnQgZmxhZ3MpCiAKICAgICBpZiAoY3R0cykgewogICAgICAgICBzYy0+dHRzX2Rh dGEgPSBhdl9mYXN0X3JlYWxsb2MoTlVMTCwgJnNjLT50dHNfYWxsb2NhdGVkX3NpemUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYy0+c2FtcGxlX2NvdW50ICogc2l6 ZW9mKCpzYy0+dHRzX2RhdGEpKTsKKyAgICAgICAgICAgIHNjLT5zYW1wbGVfY291bnQgKiBzaXpl b2YoKnNjLT50dHNfZGF0YSkpOwogICAgICAgICBpZiAoIXNjLT50dHNfZGF0YSkKICAgICAgICAg ICAgIHJldHVybiAtMTsKIAogICAgICAgICBtZW1zZXQoc2MtPnR0c19kYXRhLCAwLCBzYy0+dHRz X2FsbG9jYXRlZF9zaXplKTsKIAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNjLT5jdHRz X2NvdW50ICYmCi0gICAgICAgICAgICAgICAgICAgIGlkeCA8IHNjLT5zYW1wbGVfY291bnQ7IGkr KykKKyAgICAgICAgICAgIGlkeCA8IHNjLT5zYW1wbGVfY291bnQ7IGkrKykKICAgICAgICAgICAg IGZvciAoaW50IGogPSAwOyBqIDwgc2MtPmN0dHNfZGF0YVtpXS5jb3VudCAmJgotICAgICAgICAg ICAgICAgICAgICAgICAgaWR4IDwgc2MtPnNhbXBsZV9jb3VudDsgaisrKSB7CisgICAgICAgICAg ICAgICAgaWR4IDwgc2MtPnNhbXBsZV9jb3VudDsgaisrKSB7CiAgICAgICAgICAgICAgICAgc2Mt PnR0c19kYXRhW2lkeF0ub2Zmc2V0ID0gc2MtPmN0dHNfZGF0YVtpXS5vZmZzZXQ7CiAgICAgICAg ICAgICAgICAgc2MtPnR0c19kYXRhW2lkeCsrXS5jb3VudCA9IDE7CiAgICAgICAgICAgICB9CiAK ICAgICAgICAgc2MtPnR0c19jb3VudCA9IGlkeDsKLSAgICB9IGVsc2UKKyAgICB9CisgICAgZWxz ZQogICAgICAgICBzYy0+Y3R0c19jb3VudCA9IDA7CiAgICAgYXZfZnJlZXAoJnNjLT5jdHRzX2Rh dGEpOwogICAgIHNjLT5jdHRzX2FsbG9jYXRlZF9zaXplID0gMDsKIAogICAgIGlkeCA9IDA7CiAg ICAgaWYgKHN0dHMpIHsKLSAgICAgICAgTU9WVGltZVRvU2FtcGxlICp0dHNfZGF0YSA9IGF2X2Zh c3RfcmVhbGxvYyhzYy0+dHRzX2RhdGEsICZzYy0+dHRzX2FsbG9jYXRlZF9zaXplLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjLT5zYW1wbGVf Y291bnQgKiBzaXplb2YoKnNjLT50dHNfZGF0YSkpOworICAgICAgICBNT1ZUaW1lVG9TYW1wbGUq IHR0c19kYXRhID0gYXZfZmFzdF9yZWFsbG9jKHNjLT50dHNfZGF0YSwgJnNjLT50dHNfYWxsb2Nh dGVkX3NpemUsCisgICAgICAgICAgICBzYy0+c2FtcGxlX2NvdW50ICogc2l6ZW9mKCpzYy0+dHRz X2RhdGEpKTsKICAgICAgICAgaWYgKCF0dHNfZGF0YSkKICAgICAgICAgICAgIHJldHVybiAtMTsK IApAQCAtNDY3OCwxNSArNDY3OCwxNiBAQCBzdGF0aWMgaW50IG1vdl9tZXJnZV90dHNfZGF0YShN T1ZDb250ZXh0ICptb3YsIEFWU3RyZWFtICpzdCwgaW50IGZsYWdzKQogICAgICAgICBzYy0+dHRz X2RhdGEgPSB0dHNfZGF0YTsKIAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNjLT5zdHRz X2NvdW50ICYmCi0gICAgICAgICAgICAgICAgICAgIGlkeCA8IHNjLT5zYW1wbGVfY291bnQ7IGkr KykKKyAgICAgICAgICAgIGlkeCA8IHNjLT5zYW1wbGVfY291bnQ7IGkrKykKICAgICAgICAgICAg IGZvciAoaW50IGogPSAwOyBqIDwgc2MtPnN0dHNfZGF0YVtpXS5jb3VudCAmJgotICAgICAgICAg ICAgICAgICAgICAgICAgaWR4IDwgc2MtPnNhbXBsZV9jb3VudDsgaisrKSB7CisgICAgICAgICAg ICAgICAgaWR4IDwgc2MtPnNhbXBsZV9jb3VudDsgaisrKSB7CiAgICAgICAgICAgICAgICAgc2Mt PnR0c19kYXRhW2lkeF0uZHVyYXRpb24gPSBzYy0+c3R0c19kYXRhW2ldLmR1cmF0aW9uOwogICAg ICAgICAgICAgICAgIHNjLT50dHNfZGF0YVtpZHgrK10uY291bnQgPSAxOwogICAgICAgICAgICAg fQogCiAgICAgICAgIHNjLT50dHNfY291bnQgPSBGRk1BWChzYy0+dHRzX2NvdW50LCBpZHgpOwot ICAgIH0gZWxzZQorICAgIH0KKyAgICBlbHNlCiAgICAgICAgIHNjLT5zdHRzX2NvdW50ID0gMDsK ICAgICBhdl9mcmVlcCgmc2MtPnN0dHNfZGF0YSk7CiAgICAgc2MtPnN0dHNfYWxsb2NhdGVkX3Np emUgPSAwOwpAQCAtNDY5NCwxMCArNDY5NSwxMCBAQCBzdGF0aWMgaW50IG1vdl9tZXJnZV90dHNf ZGF0YShNT1ZDb250ZXh0ICptb3YsIEFWU3RyZWFtICpzdCwgaW50IGZsYWdzKQogICAgIHJldHVy biAwOwogfQogCi1zdGF0aWMgdm9pZCBtb3ZfYnVpbGRfaW5kZXgoTU9WQ29udGV4dCAqbW92LCBB VlN0cmVhbSAqc3QpCitzdGF0aWMgdm9pZCBtb3ZfYnVpbGRfaW5kZXgoTU9WQ29udGV4dCogbW92 LCBBVlN0cmVhbSogc3QpCiB7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2MgPSBzdC0+cHJpdl9k YXRhOwotICAgIEZGU3RyZWFtICpjb25zdCBzdGkgPSBmZnN0cmVhbShzdCk7CisgICAgTU9WU3Ry ZWFtQ29udGV4dCogc2MgPSBzdC0+cHJpdl9kYXRhOworICAgIEZGU3RyZWFtKiBjb25zdCBzdGkg PSBmZnN0cmVhbShzdCk7CiAgICAgaW50NjRfdCBjdXJyZW50X29mZnNldDsKICAgICBpbnQ2NF90 IGN1cnJlbnRfZHRzID0gMDsKICAgICB1bnNpZ25lZCBpbnQgc3R0c19pbmRleCA9IDA7CkBAIC00 NzE3LDE1ICs0NzE4LDE3IEBAIHN0YXRpYyB2b2lkIG1vdl9idWlsZF9pbmRleChNT1ZDb250ZXh0 ICptb3YsIEFWU3RyZWFtICpzdCkKICAgICAgICAgaW50NjRfdCBzdGFydF90aW1lID0gMDsgLy8g c3RhcnQgdGltZSBvZiB0aGUgbWVkaWEKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2MtPmVs c3RfY291bnQ7IGkrKykgewotICAgICAgICAgICAgY29uc3QgTU9WRWxzdCAqZSA9ICZzYy0+ZWxz dF9kYXRhW2ldOworICAgICAgICAgICAgY29uc3QgTU9WRWxzdCogZSA9ICZzYy0+ZWxzdF9kYXRh W2ldOwogICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiBlLT50aW1lID09IC0xKSB7CiAgICAgICAg ICAgICAgICAgLyogaWYgZW1wdHksIHRoZSBmaXJzdCBlbnRyeSBpcyB0aGUgc3RhcnQgdGltZSBv ZiB0aGUgc3RyZWFtCiAgICAgICAgICAgICAgICAgICogcmVsYXRpdmUgdG8gdGhlIHByZXNlbnRh dGlvbiBpdHNlbGYgKi8KICAgICAgICAgICAgICAgICBlbXB0eV9kdXJhdGlvbiA9IGUtPmR1cmF0 aW9uOwogICAgICAgICAgICAgICAgIGVkaXRfc3RhcnRfaW5kZXggPSAxOwotICAgICAgICAgICAg fSBlbHNlIGlmIChpID09IGVkaXRfc3RhcnRfaW5kZXggJiYgZS0+dGltZSA+PSAwKSB7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpID09IGVkaXRfc3RhcnRfaW5kZXggJiYg ZS0+dGltZSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgc3RhcnRfdGltZSA9IGUtPnRpbWU7Ci0g ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CiAg ICAgICAgICAgICAgICAgbXVsdGlwbGVfZWRpdHMgPSAxOwogICAgICAgICAgICAgfQogICAgICAg ICB9CkBAIC00NzMzLDExICs0NzM2LDExIEBAIHN0YXRpYyB2b2lkIG1vdl9idWlsZF9pbmRleChN T1ZDb250ZXh0ICptb3YsIEFWU3RyZWFtICpzdCkKICAgICAgICAgaWYgKG11bHRpcGxlX2VkaXRz ICYmICFtb3YtPmFkdmFuY2VkX2VkaXRsaXN0KSB7CiAgICAgICAgICAgICBpZiAobW92LT5hZHZh bmNlZF9lZGl0bGlzdF9hdXRvZGlzYWJsZWQpCiAgICAgICAgICAgICAgICAgYXZfbG9nKG1vdi0+ ZmMsIEFWX0xPR19XQVJOSU5HLCAibXVsdGlwbGUgZWRpdCBsaXN0IGVudHJpZXMsICIKLSAgICAg ICAgICAgICAgICAgICAgICAgIm5vdCBzdXBwb3J0ZWQgaW4gZnJhZ21lbnRlZCBNUDQgZmlsZXNc biIpOworICAgICAgICAgICAgICAgICAgICAibm90IHN1cHBvcnRlZCBpbiBmcmFnbWVudGVkIE1Q NCBmaWxlc1xuIik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYXZfbG9nKG1v di0+ZmMsIEFWX0xPR19XQVJOSU5HLCAibXVsdGlwbGUgZWRpdCBsaXN0IGVudHJpZXMsICIKLSAg ICAgICAgICAgICAgICAgICAgICAgIlVzZSAtYWR2YW5jZWRfZWRpdGxpc3QgdG8gY29ycmVjdGx5 IGRlY29kZSBvdGhlcndpc2UgIgotICAgICAgICAgICAgICAgICAgICAgICAiYS92IGRlc3luYyBt aWdodCBvY2N1clxuIik7CisgICAgICAgICAgICAgICAgICAgICJVc2UgLWFkdmFuY2VkX2VkaXRs aXN0IHRvIGNvcnJlY3RseSBkZWNvZGUgb3RoZXJ3aXNlICIKKyAgICAgICAgICAgICAgICAgICAg ImEvdiBkZXN5bmMgbWlnaHQgb2NjdXJcbiIpOwogICAgICAgICB9CiAKICAgICAgICAgLyogYWRq dXN0IGZpcnN0IGR0cyBhY2NvcmRpbmcgdG8gZWRpdCBsaXN0ICovCkBAIC00NzQ4LDcgKzQ3NTEs NyBAQCBzdGF0aWMgdm9pZCBtb3ZfYnVpbGRfaW5kZXgoTU9WQ29udGV4dCAqbW92LCBBVlN0cmVh bSAqc3QpCiAgICAgICAgICAgICBpZiAoYXZfc2F0X3N1YjY0KHN0YXJ0X3RpbWUsIGVtcHR5X2R1 cmF0aW9uKSAhPSBzdGFydF90aW1lIC0gKHVpbnQ2NF90KWVtcHR5X2R1cmF0aW9uKQogICAgICAg ICAgICAgICAgIGF2X2xvZyhtb3YtPmZjLCBBVl9MT0dfV0FSTklORywgInN0YXJ0X3RpbWUgLSBl bXB0eV9kdXJhdGlvbiBpcyBub3QgcmVwcmVzZW50YWJsZVxuIik7CiAKLSAgICAgICAgICAgIHNj LT50aW1lX29mZnNldCA9IHN0YXJ0X3RpbWUgLSAgKHVpbnQ2NF90KWVtcHR5X2R1cmF0aW9uOwor ICAgICAgICAgICAgc2MtPnRpbWVfb2Zmc2V0ID0gc3RhcnRfdGltZSAtICh1aW50NjRfdCllbXB0 eV9kdXJhdGlvbjsKICAgICAgICAgICAgIHNjLT5taW5fY29ycmVjdGVkX3B0cyA9IHN0YXJ0X3Rp bWU7CiAgICAgICAgICAgICBpZiAoIW1vdi0+YWR2YW5jZWRfZWRpdGxpc3QpCiAgICAgICAgICAg ICAgICAgY3VycmVudF9kdHMgPSAtc2MtPnRpbWVfb2Zmc2V0OwpAQCAtNDc2MSw3ICs0NzY0LDcg QEAgc3RhdGljIHZvaWQgbW92X2J1aWxkX2luZGV4KE1PVkNvbnRleHQgKm1vdiwgQVZTdHJlYW0g KnN0KQogCiAgICAgLyogb25seSB1c2Ugb2xkIHVuY29tcHJlc3NlZCBhdWRpbyBjaHVuayBkZW11 eGluZyB3aGVuIHN0dHMgc3BlY2lmaWVzIGl0ICovCiAgICAgaWYgKCEoc3QtPmNvZGVjcGFyLT5j b2RlY190eXBlID09IEFWTUVESUFfVFlQRV9BVURJTyAmJgotICAgICAgICAgIHNjLT5zdHRzX2Nv dW50ID09IDEgJiYgc2MtPnN0dHNfZGF0YSAmJiBzYy0+c3R0c19kYXRhWzBdLmR1cmF0aW9uID09 IDEpKSB7CisgICAgICAgIHNjLT5zdHRzX2NvdW50ID09IDEgJiYgc2MtPnN0dHNfZGF0YSAmJiBz Yy0+c3R0c19kYXRhWzBdLmR1cmF0aW9uID09IDEpKSB7CiAgICAgICAgIHVuc2lnbmVkIGludCBj dXJyZW50X3NhbXBsZSA9IDA7CiAgICAgICAgIHVuc2lnbmVkIGludCBzdHRzX3NhbXBsZSA9IDA7 CiAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVfc2l6ZTsKQEAgLTQ3NzgsOCArNDc4MSw4IEBA IHN0YXRpYyB2b2lkIG1vdl9idWlsZF9pbmRleChNT1ZDb250ZXh0ICptb3YsIEFWU3RyZWFtICpz dCkKICAgICAgICAgaWYgKHNjLT5zYW1wbGVfY291bnQgPj0gVUlOVF9NQVggLyBzaXplb2YoKnN0 aS0+aW5kZXhfZW50cmllcykgLSBzdGktPm5iX2luZGV4X2VudHJpZXMpCiAgICAgICAgICAgICBy ZXR1cm47CiAgICAgICAgIGlmIChhdl9yZWFsbG9jcF9hcnJheSgmc3RpLT5pbmRleF9lbnRyaWVz LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpLT5uYl9pbmRleF9lbnRyaWVzICsg c2MtPnNhbXBsZV9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigq c3RpLT5pbmRleF9lbnRyaWVzKSkgPCAwKSB7CisgICAgICAgICAgICBzdGktPm5iX2luZGV4X2Vu dHJpZXMgKyBzYy0+c2FtcGxlX2NvdW50LAorICAgICAgICAgICAgc2l6ZW9mKCpzdGktPmluZGV4 X2VudHJpZXMpKSA8IDApIHsKICAgICAgICAgICAgIHN0aS0+bmJfaW5kZXhfZW50cmllcyA9IDA7 CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQ3OTAsMTggKzQ3OTMsMTggQEAg c3RhdGljIHZvaWQgbW92X2J1aWxkX2luZGV4KE1PVkNvbnRleHQgKm1vdiwgQVZTdHJlYW0gKnN0 KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzYy0+Y2h1 bmtfY291bnQ7IGkrKykgewotICAgICAgICAgICAgaW50NjRfdCBuZXh0X29mZnNldCA9IGkrMSA8 IHNjLT5jaHVua19jb3VudCA/IHNjLT5jaHVua19vZmZzZXRzW2krMV0gOiBJTlQ2NF9NQVg7Cisg ICAgICAgICAgICBpbnQ2NF90IG5leHRfb2Zmc2V0ID0gaSArIDEgPCBzYy0+Y2h1bmtfY291bnQg PyBzYy0+Y2h1bmtfb2Zmc2V0c1tpICsgMV0gOiBJTlQ2NF9NQVg7CiAgICAgICAgICAgICBjdXJy ZW50X29mZnNldCA9IHNjLT5jaHVua19vZmZzZXRzW2ldOwogICAgICAgICAgICAgd2hpbGUgKG1v dl9zdHNjX2luZGV4X3ZhbGlkKHN0c2NfaW5kZXgsIHNjLT5zdHNjX2NvdW50KSAmJgogICAgICAg ICAgICAgICAgIGkgKyAxID09IHNjLT5zdHNjX2RhdGFbc3RzY19pbmRleCArIDFdLmZpcnN0KQog ICAgICAgICAgICAgICAgIHN0c2NfaW5kZXgrKzsKIAotICAgICAgICAgICAgaWYgKG5leHRfb2Zm c2V0ID4gY3VycmVudF9vZmZzZXQgJiYgc2MtPnNhbXBsZV9zaXplPjAgJiYgc2MtPnNhbXBsZV9z aXplIDwgc2MtPnN0c3pfc2FtcGxlX3NpemUgJiYKKyAgICAgICAgICAgIGlmIChuZXh0X29mZnNl dCA+IGN1cnJlbnRfb2Zmc2V0ICYmIHNjLT5zYW1wbGVfc2l6ZSA+IDAgJiYgc2MtPnNhbXBsZV9z aXplIDwgc2MtPnN0c3pfc2FtcGxlX3NpemUgJiYKICAgICAgICAgICAgICAgICBzYy0+c3RzY19k YXRhW3N0c2NfaW5kZXhdLmNvdW50ICogKGludDY0X3Qpc2MtPnN0c3pfc2FtcGxlX3NpemUgPiBu ZXh0X29mZnNldCAtIGN1cnJlbnRfb2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgYXZfbG9nKG1v di0+ZmMsIEFWX0xPR19XQVJOSU5HLCAiU1RTWiBzYW1wbGUgc2l6ZSAlZCBpbnZhbGlkICh0b28g bGFyZ2UpLCBpZ25vcmluZ1xuIiwgc2MtPnN0c3pfc2FtcGxlX3NpemUpOwogICAgICAgICAgICAg ICAgIHNjLT5zdHN6X3NhbXBsZV9zaXplID0gc2MtPnNhbXBsZV9zaXplOwogICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKHNjLT5zdHN6X3NhbXBsZV9zaXplPjAgJiYgc2MtPnN0c3pfc2Ft cGxlX3NpemUgPCBzYy0+c2FtcGxlX3NpemUpIHsKKyAgICAgICAgICAgIGlmIChzYy0+c3Rzel9z YW1wbGVfc2l6ZSA+IDAgJiYgc2MtPnN0c3pfc2FtcGxlX3NpemUgPCBzYy0+c2FtcGxlX3NpemUp IHsKICAgICAgICAgICAgICAgICBhdl9sb2cobW92LT5mYywgQVZfTE9HX1dBUk5JTkcsICJTVFNa IHNhbXBsZSBzaXplICVkIGludmFsaWQgKHRvbyBzbWFsbCksIGlnbm9yaW5nXG4iLCBzYy0+c3Rz el9zYW1wbGVfc2l6ZSk7CiAgICAgICAgICAgICAgICAgc2MtPnN0c3pfc2FtcGxlX3NpemUgPSBz Yy0+c2FtcGxlX3NpemU7CiAgICAgICAgICAgICB9CkBAIC00ODEzLDExICs0ODE2LDEyIEBAIHN0 YXRpYyB2b2lkIG1vdl9idWlsZF9pbmRleChNT1ZDb250ZXh0ICptb3YsIEFWU3RyZWFtICpzdCkK ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg ICAgICAgICAgIGlmICghc2MtPmtleWZyYW1lX2Fic2VudCAmJiAoIXNjLT5rZXlmcmFtZV9jb3Vu dCB8fCBjdXJyZW50X3NhbXBsZStrZXlfb2ZmID09IHNjLT5rZXlmcmFtZXNbc3Rzc19pbmRleF0p KSB7CisgICAgICAgICAgICAgICAgaWYgKCFzYy0+a2V5ZnJhbWVfYWJzZW50ICYmICghc2MtPmtl eWZyYW1lX2NvdW50IHx8IGN1cnJlbnRfc2FtcGxlICsga2V5X29mZiA9PSBzYy0+a2V5ZnJhbWVz W3N0c3NfaW5kZXhdKSkgewogICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZSA9IDE7CiAgICAg ICAgICAgICAgICAgICAgIGlmIChzdHNzX2luZGV4ICsgMSA8IHNjLT5rZXlmcmFtZV9jb3VudCkK ICAgICAgICAgICAgICAgICAgICAgICAgIHN0c3NfaW5kZXgrKzsKLSAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKHNjLT5zdHBzX2NvdW50ICYmIGN1cnJlbnRfc2FtcGxlK2tleV9vZmYgPT0gc2Mt PnN0cHNfZGF0YVtzdHBzX2luZGV4XSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBlbHNlIGlmIChzYy0+c3Rwc19jb3VudCAmJiBjdXJyZW50X3NhbXBsZSArIGtleV9vZmYg PT0gc2MtPnN0cHNfZGF0YVtzdHBzX2luZGV4XSkgewogICAgICAgICAgICAgICAgICAgICBrZXlm cmFtZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdHBzX2luZGV4ICsgMSA8IHNjLT5z dHBzX2NvdW50KQogICAgICAgICAgICAgICAgICAgICAgICAgc3Rwc19pbmRleCsrOwpAQCAtNDgz MywyMSArNDgzNywyMSBAQCBzdGF0aWMgdm9pZCBtb3ZfYnVpbGRfaW5kZXgoTU9WQ29udGV4dCAq bW92LCBBVlN0cmVhbSAqc3QpCiAgICAgICAgICAgICAgICAgaWYgKHNjLT5rZXlmcmFtZV9hYnNl bnQKICAgICAgICAgICAgICAgICAgICAgJiYgIXNjLT5zdHBzX2NvdW50CiAgICAgICAgICAgICAg ICAgICAgICYmICFyYXBfZ3JvdXBfcHJlc2VudAotICAgICAgICAgICAgICAgICAgICAmJiAoc3Qt PmNvZGVjcGFyLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9BVURJTyB8fCAoaT09MCAmJiBq PT0wKSkpCi0gICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZSA9IDE7CisgICAgICAgICAgICAg ICAgICAgICYmIChzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPT0gQVZNRURJQV9UWVBFX0FVRElP IHx8IChpID09IDAgJiYgaiA9PSAwKSkpCisgICAgICAgICAgICAgICAgICAgIGtleWZyYW1lID0g MTsKICAgICAgICAgICAgICAgICBpZiAoa2V5ZnJhbWUpCiAgICAgICAgICAgICAgICAgICAgIGRp c3RhbmNlID0gMDsKICAgICAgICAgICAgICAgICBzYW1wbGVfc2l6ZSA9IHNjLT5zdHN6X3NhbXBs ZV9zaXplID4gMCA/IHNjLT5zdHN6X3NhbXBsZV9zaXplIDogc2MtPnNhbXBsZV9zaXplc1tjdXJy ZW50X3NhbXBsZV07CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfb2Zmc2V0ID4gSU5UNjRf TUFYIC0gc2FtcGxlX3NpemUpIHsKICAgICAgICAgICAgICAgICAgICAgYXZfbG9nKG1vdi0+ZmMs IEFWX0xPR19FUlJPUiwgIkN1cnJlbnQgb2Zmc2V0ICUiUFJJZDY0IiBvciBzYW1wbGUgc2l6ZSAl dSBpcyB0b28gbGFyZ2VcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X29m ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZV9zaXplKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGN1cnJlbnRfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg c2FtcGxlX3NpemUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg ICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKHNjLT5wc2V1ZG9fc3RyZWFtX2lkID09IC0xIHx8 Ci0gICAgICAgICAgICAgICAgICAgc2MtPnN0c2NfZGF0YVtzdHNjX2luZGV4XS5pZCAtIDEgPT0g c2MtPnBzZXVkb19zdHJlYW1faWQpIHsKLSAgICAgICAgICAgICAgICAgICAgQVZJbmRleEVudHJ5 ICplOworICAgICAgICAgICAgICAgICAgICBzYy0+c3RzY19kYXRhW3N0c2NfaW5kZXhdLmlkIC0g MSA9PSBzYy0+cHNldWRvX3N0cmVhbV9pZCkgeworICAgICAgICAgICAgICAgICAgICBBVkluZGV4 RW50cnkqIGU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzYW1wbGVfc2l6ZSA+IDB4M0ZGRkZG RkYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhtb3YtPmZjLCBBVl9MT0dfRVJS T1IsICJTYW1wbGUgc2l6ZSAldSBpcyB0b28gbGFyZ2VcbiIsIHNhbXBsZV9zaXplKTsKICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTQ4NTksOCArNDg2Myw4IEBAIHN0YXRpYyB2 b2lkIG1vdl9idWlsZF9pbmRleChNT1ZDb250ZXh0ICptb3YsIEFWU3RyZWFtICpzdCkKICAgICAg ICAgICAgICAgICAgICAgZS0+bWluX2Rpc3RhbmNlID0gZGlzdGFuY2U7CiAgICAgICAgICAgICAg ICAgICAgIGUtPmZsYWdzID0ga2V5ZnJhbWUgPyBBVklOREVYX0tFWUZSQU1FIDogMDsKICAgICAg ICAgICAgICAgICAgICAgYXZfbG9nKG1vdi0+ZmMsIEFWX0xPR19UUkFDRSwgIkFWSW5kZXggc3Ry ZWFtICVkLCBzYW1wbGUgJXUsIG9mZnNldCAlIlBSSXg2NCIsIGR0cyAlIlBSSWQ2NCIsICIKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZSAldSwgZGlzdGFuY2UgJXUsIGtleWZyYW1l ICVkXG4iLCBzdC0+aW5kZXgsIGN1cnJlbnRfc2FtcGxlLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGN1cnJlbnRfb2Zmc2V0LCBjdXJyZW50X2R0cywgc2FtcGxlX3NpemUsIGRpc3RhbmNl LCBrZXlmcmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZSAldSwgZGlzdGFuY2Ug JXUsIGtleWZyYW1lICVkXG4iLCBzdC0+aW5kZXgsIGN1cnJlbnRfc2FtcGxlLAorICAgICAgICAg ICAgICAgICAgICAgICAgY3VycmVudF9vZmZzZXQsIGN1cnJlbnRfZHRzLCBzYW1wbGVfc2l6ZSwg ZGlzdGFuY2UsIGtleWZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0LT5jb2RlY3Bh ci0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfVklERU8gJiYgc3RpLT5uYl9pbmRleF9lbnRy aWVzIDwgMTAwKQogICAgICAgICAgICAgICAgICAgICAgICAgZmZfcmZwc19hZGRfZnJhbWUobW92 LT5mYywgc3QsIGN1cnJlbnRfZHRzKTsKICAgICAgICAgICAgICAgICB9CkBAIC00ODgwLDEzICs0 ODg0LDE4IEBAIHN0YXRpYyB2b2lkIG1vdl9idWlsZF9pbmRleChNT1ZDb250ZXh0ICptb3YsIEFW U3RyZWFtICpzdCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoc3QtPmR1 cmF0aW9uID4gMCkKLSAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Yml0X3JhdGUgPSBzdHJlYW1f c2l6ZSo4KnNjLT50aW1lX3NjYWxlL3N0LT5kdXJhdGlvbjsKLSAgICB9IGVsc2UgeworICAgICAg ICAgICAgc3QtPmNvZGVjcGFyLT5iaXRfcmF0ZSA9IHN0cmVhbV9zaXplICogOCAqIHNjLT50aW1l X3NjYWxlIC8gc3QtPmR1cmF0aW9uOworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgdW5zaWdu ZWQgY2h1bmtfc2FtcGxlcywgdG90YWwgPSAwOwogCiAgICAgICAgIGlmICghc2MtPmNodW5rX2Nv dW50IHx8IHNjLT50dHNfY291bnQpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgcmV0 ID0gbW92X21lcmdlX3R0c19kYXRhKG1vdiwgc3QsIE1PVl9NRVJHRV9DVFRTKTsKKyAgICAgICAg aWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgLy8gY29tcHV0ZSB0 b3RhbCBjaHVuayBjb3VudAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2MtPnN0c2NfY291bnQ7 IGkrKykgewogICAgICAgICAgICAgdW5zaWduZWQgY291bnQsIGNodW5rX2NvdW50OwpAQCAtNDkw MCwxNSArNDkwOSwxNyBAQCBzdGF0aWMgdm9pZCBtb3ZfYnVpbGRfaW5kZXgoTU9WQ29udGV4dCAq bW92LCBBVlN0cmVhbSAqc3QpCiAKICAgICAgICAgICAgIGlmIChzYy0+c2FtcGxlc19wZXJfZnJh bWUgPj0gMTYwKSB7IC8vIGdzbQogICAgICAgICAgICAgICAgIGNvdW50ID0gY2h1bmtfc2FtcGxl cyAvIHNjLT5zYW1wbGVzX3Blcl9mcmFtZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2MtPnNh bXBsZXNfcGVyX2ZyYW1lID4gMSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNhbXBsZXMg PSAoMTAyNC9zYy0+c2FtcGxlc19wZXJfZnJhbWUpKnNjLT5zYW1wbGVzX3Blcl9mcmFtZTsKLSAg ICAgICAgICAgICAgICBjb3VudCA9IChjaHVua19zYW1wbGVzK3NhbXBsZXMtMSkgLyBzYW1wbGVz OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb3VudCA9IChjaHVua19z YW1wbGVzKzEwMjMpIC8gMTAyNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg KHNjLT5zYW1wbGVzX3Blcl9mcmFtZSA+IDEpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBz YW1wbGVzID0gKDEwMjQgLyBzYy0+c2FtcGxlc19wZXJfZnJhbWUpICogc2MtPnNhbXBsZXNfcGVy X2ZyYW1lOworICAgICAgICAgICAgICAgIGNvdW50ID0gKGNodW5rX3NhbXBsZXMgKyBzYW1wbGVz IC0gMSkgLyBzYW1wbGVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAg ICAgICAgICAgICAgY291bnQgPSAoY2h1bmtfc2FtcGxlcyArIDEwMjMpIC8gMTAyNDsKICAgICAg ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG1vdl9zdHNjX2luZGV4X3ZhbGlkKGksIHNjLT5z dHNjX2NvdW50KSkKLSAgICAgICAgICAgICAgICBjaHVua19jb3VudCA9IHNjLT5zdHNjX2RhdGFb aSsxXS5maXJzdCAtIHNjLT5zdHNjX2RhdGFbaV0uZmlyc3Q7CisgICAgICAgICAgICAgICAgY2h1 bmtfY291bnQgPSBzYy0+c3RzY19kYXRhW2kgKyAxXS5maXJzdCAtIHNjLT5zdHNjX2RhdGFbaV0u Zmlyc3Q7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2h1bmtfY291bnQgPSBz Yy0+Y2h1bmtfY291bnQgLSAoc2MtPnN0c2NfZGF0YVtpXS5maXJzdCAtIDEpOwogICAgICAgICAg ICAgdG90YWwgKz0gY2h1bmtfY291bnQgKiBjb3VudDsKQEAgLTQ5MTgsOCArNDkyOSw4IEBAIHN0 YXRpYyB2b2lkIG1vdl9idWlsZF9pbmRleChNT1ZDb250ZXh0ICptb3YsIEFWU3RyZWFtICpzdCkK ICAgICAgICAgaWYgKHRvdGFsID49IFVJTlRfTUFYIC8gc2l6ZW9mKCpzdGktPmluZGV4X2VudHJp ZXMpIC0gc3RpLT5uYl9pbmRleF9lbnRyaWVzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg ICBpZiAoYXZfcmVhbGxvY3BfYXJyYXkoJnN0aS0+aW5kZXhfZW50cmllcywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0aS0+bmJfaW5kZXhfZW50cmllcyArIHRvdGFsLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpzdGktPmluZGV4X2VudHJpZXMpKSA8IDAp IHsKKyAgICAgICAgICAgIHN0aS0+bmJfaW5kZXhfZW50cmllcyArIHRvdGFsLAorICAgICAgICAg ICAgc2l6ZW9mKCpzdGktPmluZGV4X2VudHJpZXMpKSA8IDApIHsKICAgICAgICAgICAgIHN0aS0+ bmJfaW5kZXhfZW50cmllcyA9IDA7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg LTQ5MzQsMjUgKzQ5NDUsMjcgQEAgc3RhdGljIHZvaWQgbW92X2J1aWxkX2luZGV4KE1PVkNvbnRl eHQgKm1vdiwgQVZTdHJlYW0gKnN0KQogICAgICAgICAgICAgY2h1bmtfc2FtcGxlcyA9IHNjLT5z dHNjX2RhdGFbc3RzY19pbmRleF0uY291bnQ7CiAKICAgICAgICAgICAgIHdoaWxlIChjaHVua19z YW1wbGVzID4gMCkgewotICAgICAgICAgICAgICAgIEFWSW5kZXhFbnRyeSAqZTsKKyAgICAgICAg ICAgICAgICBBVkluZGV4RW50cnkqIGU7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSwg c2FtcGxlczsKIAogICAgICAgICAgICAgICAgIGlmIChzYy0+c2FtcGxlc19wZXJfZnJhbWUgPiAx ICYmICFzYy0+Ynl0ZXNfcGVyX2ZyYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgIGF2cHJpdl9y ZXF1ZXN0X3NhbXBsZShtb3YtPmZjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIlplcm8g Ynl0ZXMgcGVyIGZyYW1lLCBidXQgJWQgc2FtcGxlcyBwZXIgZnJhbWUiLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2MtPnNhbXBsZXNfcGVyX2ZyYW1lKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICJaZXJvIGJ5dGVzIHBlciBmcmFtZSwgYnV0ICVkIHNhbXBsZXMgcGVyIGZyYW1lIiwK KyAgICAgICAgICAgICAgICAgICAgICAgIHNjLT5zYW1wbGVzX3Blcl9mcmFtZSk7CiAgICAgICAg ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg ICBpZiAoc2MtPnNhbXBsZXNfcGVyX2ZyYW1lID49IDE2MCkgeyAvLyBnc20KICAgICAgICAgICAg ICAgICAgICAgc2FtcGxlcyA9IHNjLT5zYW1wbGVzX3Blcl9mcmFtZTsKICAgICAgICAgICAgICAg ICAgICAgc2l6ZSA9IHNjLT5ieXRlc19wZXJfZnJhbWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg ICAgICAgICAgIGlmIChzYy0+c2FtcGxlc19wZXJfZnJhbWUgPiAxKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBzYW1wbGVzID0gRkZNSU4oKDEwMjQgLyBzYy0+c2FtcGxlc19wZXJfZnJhbWUp KgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjLT5zYW1wbGVzX3Bl cl9mcmFtZSwgY2h1bmtfc2FtcGxlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVz ID0gRkZNSU4oKDEwMjQgLyBzYy0+c2FtcGxlc19wZXJfZnJhbWUpICoKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzYy0+c2FtcGxlc19wZXJfZnJhbWUsIGNodW5rX3NhbXBsZXMpOwogICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IChzYW1wbGVzIC8gc2MtPnNhbXBsZXNfcGVyX2Zy YW1lKSAqIHNjLT5ieXRlc19wZXJfZnJhbWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICBzYW1wbGVzID0gRkZNSU4oMTAyNCwgY2h1bmtfc2FtcGxlcyk7 CiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2FtcGxlcyAqIHNjLT5zYW1wbGVfc2l6 ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDk3MywxOCArNDk4NiwxNCBAQCBzdGF0aWMg dm9pZCBtb3ZfYnVpbGRfaW5kZXgoTU9WQ29udGV4dCAqbW92LCBBVlN0cmVhbSAqc3QpCiAgICAg ICAgICAgICAgICAgZS0+bWluX2Rpc3RhbmNlID0gMDsKICAgICAgICAgICAgICAgICBlLT5mbGFn cyA9IEFWSU5ERVhfS0VZRlJBTUU7CiAgICAgICAgICAgICAgICAgYXZfbG9nKG1vdi0+ZmMsIEFW X0xPR19UUkFDRSwgIkFWSW5kZXggc3RyZWFtICVkLCBjaHVuayAldSwgb2Zmc2V0ICUiUFJJeDY0 IiwgZHRzICUiUFJJZDY0IiwgIgotICAgICAgICAgICAgICAgICAgICAgICAic2l6ZSAldSwgZHVy YXRpb24gJXVcbiIsIHN0LT5pbmRleCwgaSwgY3VycmVudF9vZmZzZXQsIGN1cnJlbnRfZHRzLAot ICAgICAgICAgICAgICAgICAgICAgICBzaXplLCBzYW1wbGVzKTsKKyAgICAgICAgICAgICAgICAg ICAgInNpemUgJXUsIGR1cmF0aW9uICV1XG4iLCBzdC0+aW5kZXgsIGksIGN1cnJlbnRfb2Zmc2V0 LCBjdXJyZW50X2R0cywKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSwgc2FtcGxlcyk7CiAKICAg ICAgICAgICAgICAgICBjdXJyZW50X29mZnNldCArPSBzaXplOwogICAgICAgICAgICAgICAgIGN1 cnJlbnRfZHRzICs9IHNhbXBsZXM7CiAgICAgICAgICAgICAgICAgY2h1bmtfc2FtcGxlcyAtPSBz YW1wbGVzOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgcmV0ID0gbW92X21l cmdlX3R0c19kYXRhKG1vdiwgc3QsIE1PVl9NRVJHRV9DVFRTKTsKLSAgICAgICAgaWYgKHJldCA8 IDApCi0gICAgICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFtb3YtPmlnbm9yZV9l ZGl0bGlzdCAmJiBtb3YtPmFkdmFuY2VkX2VkaXRsaXN0KSB7CkBAIC01MDAzLDQyICs1MDEyLDQ1 IEBAIHN0YXRpYyB2b2lkIG1vdl9idWlsZF9pbmRleChNT1ZDb250ZXh0ICptb3YsIEFWU3RyZWFt ICpzdCkKICAgICBtb3ZfZXN0aW1hdGVfdmlkZW9fZGVsYXkobW92LCBzdCk7CiB9CiAKLXN0YXRp YyBpbnQgdGVzdF9zYW1lX29yaWdpbihjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKnJlZikg eworc3RhdGljIGludCB0ZXN0X3NhbWVfb3JpZ2luKGNvbnN0IGNoYXIqIHNyYywgY29uc3QgY2hh ciogcmVmKSB7CiAgICAgY2hhciBzcmNfcHJvdG9bNjRdOwogICAgIGNoYXIgcmVmX3Byb3RvWzY0 XTsKICAgICBjaGFyIHNyY19hdXRoWzI1Nl07CiAgICAgY2hhciByZWZfYXV0aFsyNTZdOwogICAg IGNoYXIgc3JjX2hvc3RbMjU2XTsKICAgICBjaGFyIHJlZl9ob3N0WzI1Nl07Ci0gICAgaW50IHNy Y19wb3J0PS0xOwotICAgIGludCByZWZfcG9ydD0tMTsKKyAgICBpbnQgc3JjX3BvcnQgPSAtMTsK KyAgICBpbnQgcmVmX3BvcnQgPSAtMTsKIAogICAgIGF2X3VybF9zcGxpdChzcmNfcHJvdG8sIHNp emVvZihzcmNfcHJvdG8pLCBzcmNfYXV0aCwgc2l6ZW9mKHNyY19hdXRoKSwgc3JjX2hvc3QsIHNp emVvZihzcmNfaG9zdCksICZzcmNfcG9ydCwgTlVMTCwgMCwgc3JjKTsKICAgICBhdl91cmxfc3Bs aXQocmVmX3Byb3RvLCBzaXplb2YocmVmX3Byb3RvKSwgcmVmX2F1dGgsIHNpemVvZihyZWZfYXV0 aCksIHJlZl9ob3N0LCBzaXplb2YocmVmX2hvc3QpLCAmcmVmX3BvcnQsIE5VTEwsIDAsIHJlZik7 CiAKICAgICBpZiAoc3RybGVuKHNyYykgPT0gMCkgewogICAgICAgICByZXR1cm4gLTE7Ci0gICAg fSBlbHNlIGlmIChzdHJsZW4oc3JjX2F1dGgpICsgMSA+PSBzaXplb2Yoc3JjX2F1dGgpIHx8Cisg ICAgfQorICAgIGVsc2UgaWYgKHN0cmxlbihzcmNfYXV0aCkgKyAxID49IHNpemVvZihzcmNfYXV0 aCkgfHwKICAgICAgICAgc3RybGVuKHJlZl9hdXRoKSArIDEgPj0gc2l6ZW9mKHJlZl9hdXRoKSB8 fAogICAgICAgICBzdHJsZW4oc3JjX2hvc3QpICsgMSA+PSBzaXplb2Yoc3JjX2hvc3QpIHx8CiAg ICAgICAgIHN0cmxlbihyZWZfaG9zdCkgKyAxID49IHNpemVvZihyZWZfaG9zdCkpIHsKICAgICAg ICAgcmV0dXJuIDA7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAoc3JjX3Byb3RvLCByZWZfcHJvdG8p IHx8Ci0gICAgICAgICAgICAgICBzdHJjbXAoc3JjX2F1dGgsIHJlZl9hdXRoKSB8fAotICAgICAg ICAgICAgICAgc3RyY21wKHNyY19ob3N0LCByZWZfaG9zdCkgfHwKLSAgICAgICAgICAgICAgIHNy Y19wb3J0ICE9IHJlZl9wb3J0KSB7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cmNtcChzcmNfcHJv dG8sIHJlZl9wcm90bykgfHwKKyAgICAgICAgc3RyY21wKHNyY19hdXRoLCByZWZfYXV0aCkgfHwK KyAgICAgICAgc3RyY21wKHNyY19ob3N0LCByZWZfaG9zdCkgfHwKKyAgICAgICAgc3JjX3BvcnQg IT0gcmVmX3BvcnQpIHsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSBlbHNlCisgICAgfQorICAg IGVsc2UKICAgICAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgbW92X29wZW5fZHJlZihN T1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqKnBiLCBjb25zdCBjaGFyICpzcmMsIE1PVkRyZWYg KnJlZikKK3N0YXRpYyBpbnQgbW92X29wZW5fZHJlZihNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4 dCoqIHBiLCBjb25zdCBjaGFyKiBzcmMsIE1PVkRyZWYqIHJlZikKIHsKICAgICAvKiB0cnkgcmVs YXRpdmUgcGF0aCwgd2UgZG8gbm90IHRyeSB0aGUgYWJzb2x1dGUgYmVjYXVzZSBpdCBjYW4gbGVh ayBpbmZvcm1hdGlvbiBhYm91dCBvdXIKICAgICAgICBzeXN0ZW0gdG8gYW4gYXR0YWNrZXIgKi8K ICAgICBpZiAocmVmLT5ubHZsX3RvID4gMCAmJiByZWYtPm5sdmxfZnJvbSA+IDApIHsKICAgICAg ICAgY2hhciBmaWxlbmFtZVsxMDI1XTsKLSAgICAgICAgY29uc3QgY2hhciAqc3JjX3BhdGg7Cisg ICAgICAgIGNvbnN0IGNoYXIqIHNyY19wYXRoOwogICAgICAgICBpbnQgaSwgbDsKIAogICAgICAg ICAvKiBmaW5kIGEgc291cmNlIGRpciAqLwpAQCAtNTA1OCw3ICs1MDcwLDcgQEAgc3RhdGljIGlu dCBtb3Zfb3Blbl9kcmVmKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICoqcGIsIGNvbnN0IGNo YXIgKnNyYywgTU9WRHIKICAgICAgICAgICAgIH0KIAogICAgICAgICAvKiBjb21wb3NlIGZpbGVu YW1lIGlmIG5leHQgbGV2ZWwgZG93biB0byB0YXJnZXQgd2FzIGZvdW5kICovCi0gICAgICAgIGlm IChpID09IHJlZi0+bmx2bF90byAtIDEgJiYgc3JjX3BhdGggLSBzcmMgIDwgc2l6ZW9mKGZpbGVu YW1lKSkgeworICAgICAgICBpZiAoaSA9PSByZWYtPm5sdmxfdG8gLSAxICYmIHNyY19wYXRoIC0g c3JjIDwgc2l6ZW9mKGZpbGVuYW1lKSkgewogICAgICAgICAgICAgbWVtY3B5KGZpbGVuYW1lLCBz cmMsIHNyY19wYXRoIC0gc3JjKTsKICAgICAgICAgICAgIGZpbGVuYW1lW3NyY19wYXRoIC0gc3Jj XSA9IDA7CiAKQEAgLTUwODksMjIgKzUxMDEsMjQgQEAgc3RhdGljIGludCBtb3Zfb3Blbl9kcmVm KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICoqcGIsIGNvbnN0IGNoYXIgKnNyYywgTU9WRHIK ICAgICAgICAgICAgIGlmICghYy0+ZmMtPmlvX29wZW4oYy0+ZmMsIHBiLCBmaWxlbmFtZSwgQVZJ T19GTEFHX1JFQUQsIE5VTEwpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9 Ci0gICAgfSBlbHNlIGlmIChjLT51c2VfYWJzb2x1dGVfcGF0aCkgeworICAgIH0KKyAgICBlbHNl IGlmIChjLT51c2VfYWJzb2x1dGVfcGF0aCkgewogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xP R19XQVJOSU5HLCAiVXNpbmcgYWJzb2x1dGUgcGF0aCBvbiB1c2VyIHJlcXVlc3QsICIKLSAgICAg ICAgICAgICAgICJ0aGlzIGlzIGEgcG9zc2libGUgc2VjdXJpdHkgaXNzdWVcbiIpOworICAgICAg ICAgICAgInRoaXMgaXMgYSBwb3NzaWJsZSBzZWN1cml0eSBpc3N1ZVxuIik7CiAgICAgICAgIGlm ICghYy0+ZmMtPmlvX29wZW4oYy0+ZmMsIHBiLCByZWYtPnBhdGgsIEFWSU9fRkxBR19SRUFELCBO VUxMKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVs c2UgewogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19FUlJPUiwKLSAgICAgICAgICAgICAg ICJBYnNvbHV0ZSBwYXRoICVzIG5vdCB0cmllZCBmb3Igc2VjdXJpdHkgcmVhc29ucywgIgotICAg ICAgICAgICAgICAgInNldCBkZW11eGVyIG9wdGlvbiB1c2VfYWJzb2x1dGVfcGF0aCB0byBhbGxv dyBhYnNvbHV0ZSBwYXRoc1xuIiwKLSAgICAgICAgICAgICAgIHJlZi0+cGF0aCk7CisgICAgICAg ICAgICAiQWJzb2x1dGUgcGF0aCAlcyBub3QgdHJpZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsICIK KyAgICAgICAgICAgICJzZXQgZGVtdXhlciBvcHRpb24gdXNlX2Fic29sdXRlX3BhdGggdG8gYWxs b3cgYWJzb2x1dGUgcGF0aHNcbiIsCisgICAgICAgICAgICByZWYtPnBhdGgpOwogICAgIH0KIAog ICAgIHJldHVybiBBVkVSUk9SKEVOT0VOVCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZpeF90aW1lc2Nh bGUoTU9WQ29udGV4dCAqYywgTU9WU3RyZWFtQ29udGV4dCAqc2MpCitzdGF0aWMgdm9pZCBmaXhf dGltZXNjYWxlKE1PVkNvbnRleHQqIGMsIE1PVlN0cmVhbUNvbnRleHQqIHNjKQogewogICAgIGlm IChzYy0+dGltZV9zY2FsZSA8PSAwKSB7CiAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX1dB Uk5JTkcsICJzdHJlYW0gJWQsIHRpbWVzY2FsZSBub3Qgc2V0XG4iLCBzYy0+ZmZpbmRleCk7CkBA IC01MTE1LDEzICs1MTI5LDEzIEBAIHN0YXRpYyB2b2lkIGZpeF90aW1lc2NhbGUoTU9WQ29udGV4 dCAqYywgTU9WU3RyZWFtQ29udGV4dCAqc2MpCiB9CiAKICNpZiBDT05GSUdfSUFNRkRFQwotc3Rh dGljIGludCBtb3ZfdXBkYXRlX2lhbWZfc3RyZWFtcyhNT1ZDb250ZXh0ICpjLCBjb25zdCBBVlN0 cmVhbSAqc3QpCitzdGF0aWMgaW50IG1vdl91cGRhdGVfaWFtZl9zdHJlYW1zKE1PVkNvbnRleHQq IGMsIGNvbnN0IEFWU3RyZWFtKiBzdCkKIHsKLSAgICBjb25zdCBNT1ZTdHJlYW1Db250ZXh0ICpz YyA9IHN0LT5wcml2X2RhdGE7Ci0gICAgY29uc3QgSUFNRkNvbnRleHQgKmlhbWYgPSAmc2MtPmlh bWYtPmlhbWY7CisgICAgY29uc3QgTU9WU3RyZWFtQ29udGV4dCogc2MgPSBzdC0+cHJpdl9kYXRh OworICAgIGNvbnN0IElBTUZDb250ZXh0KiBpYW1mID0gJnNjLT5pYW1mLT5pYW1mOwogCiAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBpYW1mLT5uYl9hdWRpb19lbGVtZW50czsgaSsrKSB7Ci0gICAg ICAgIGNvbnN0IEFWU3RyZWFtR3JvdXAgKnN0ZyA9IE5VTEw7CisgICAgICAgIGNvbnN0IEFWU3Ry ZWFtR3JvdXAqIHN0ZyA9IE5VTEw7CiAKICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjLT5m Yy0+bmJfc3RyZWFtX2dyb3VwczsgaisrKQogICAgICAgICAgICAgaWYgKGMtPmZjLT5zdHJlYW1f Z3JvdXBzW2pdLT5pZCA9PSBpYW1mLT5hdWRpb19lbGVtZW50c1tpXS0+YXVkaW9fZWxlbWVudF9p ZCkKQEAgLTUxMjksMjAgKzUxNDMsMjAgQEAgc3RhdGljIGludCBtb3ZfdXBkYXRlX2lhbWZfc3Ry ZWFtcyhNT1ZDb250ZXh0ICpjLCBjb25zdCBBVlN0cmVhbSAqc3QpCiAgICAgICAgIGF2X2Fzc2Vy dDAoc3RnKTsKIAogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN0Zy0+bmJfc3RyZWFtczsg aisrKSB7Ci0gICAgICAgICAgICBjb25zdCBGRlN0cmVhbSAqc3RpID0gY2Zmc3RyZWFtKHN0KTsK LSAgICAgICAgICAgIEFWU3RyZWFtICpvdXQgPSBzdGctPnN0cmVhbXNbal07Ci0gICAgICAgICAg ICBGRlN0cmVhbSAqb3V0X3N0aSA9IGZmc3RyZWFtKHN0Zy0+c3RyZWFtc1tqXSk7CisgICAgICAg ICAgICBjb25zdCBGRlN0cmVhbSogc3RpID0gY2Zmc3RyZWFtKHN0KTsKKyAgICAgICAgICAgIEFW U3RyZWFtKiBvdXQgPSBzdGctPnN0cmVhbXNbal07CisgICAgICAgICAgICBGRlN0cmVhbSogb3V0 X3N0aSA9IGZmc3RyZWFtKHN0Zy0+c3RyZWFtc1tqXSk7CiAKICAgICAgICAgICAgIG91dC0+Y29k ZWNwYXItPmJpdF9yYXRlID0gMDsKIAogICAgICAgICAgICAgaWYgKG91dCA9PSBzdCkKICAgICAg ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgb3V0LT50aW1lX2Jhc2UgICAgICAg ICAgID0gc3QtPnRpbWVfYmFzZTsKLSAgICAgICAgICAgIG91dC0+c3RhcnRfdGltZSAgICAgICAg ICA9IHN0LT5zdGFydF90aW1lOwotICAgICAgICAgICAgb3V0LT5kdXJhdGlvbiAgICAgICAgICAg ID0gc3QtPmR1cmF0aW9uOwotICAgICAgICAgICAgb3V0LT5uYl9mcmFtZXMgICAgICAgICAgID0g c3QtPm5iX2ZyYW1lczsKLSAgICAgICAgICAgIG91dC0+ZGlzY2FyZCAgICAgICAgICAgICA9IHN0 LT5kaXNjYXJkOworICAgICAgICAgICAgb3V0LT50aW1lX2Jhc2UgPSBzdC0+dGltZV9iYXNlOwor ICAgICAgICAgICAgb3V0LT5zdGFydF90aW1lID0gc3QtPnN0YXJ0X3RpbWU7CisgICAgICAgICAg ICBvdXQtPmR1cmF0aW9uID0gc3QtPmR1cmF0aW9uOworICAgICAgICAgICAgb3V0LT5uYl9mcmFt ZXMgPSBzdC0+bmJfZnJhbWVzOworICAgICAgICAgICAgb3V0LT5kaXNjYXJkID0gc3QtPmRpc2Nh cmQ7CiAKICAgICAgICAgICAgIGF2X2Fzc2VydDAoIW91dF9zdGktPmluZGV4X2VudHJpZXMpOwog ICAgICAgICAgICAgb3V0X3N0aS0+aW5kZXhfZW50cmllcyA9IGF2X21hbGxvYyhzdGktPmluZGV4 X2VudHJpZXNfYWxsb2NhdGVkX3NpemUpOwpAQCAtNTE2MCwyOSArNTE3NCwyOCBAQCBzdGF0aWMg aW50IG1vdl91cGRhdGVfaWFtZl9zdHJlYW1zKE1PVkNvbnRleHQgKmMsIGNvbnN0IEFWU3RyZWFt ICpzdCkKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHNhbml0eV9jaGVja3Modm9pZCAqbG9nX29i aiwgTU9WU3RyZWFtQ29udGV4dCAqc2MsIGludCBpbmRleCkKK3N0YXRpYyBpbnQgc2FuaXR5X2No ZWNrcyh2b2lkKiBsb2dfb2JqLCBNT1ZTdHJlYW1Db250ZXh0KiBzYywgaW50IGluZGV4KQogewog ICAgIGlmICgoc2MtPmNodW5rX2NvdW50ICYmICghc2MtPnN0dHNfY291bnQgfHwgIXNjLT5zdHNj X2NvdW50IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFzYy0+c2FtcGxlX3NpemUg JiYgIXNjLT5zYW1wbGVfY291bnQpKSkgfHwKLSAgICAgICAgKHNjLT5zYW1wbGVfY291bnQgJiYg KCFzYy0+Y2h1bmtfY291bnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFzYy0+ c2FtcGxlX3NpemUgJiYgIXNjLT5zYW1wbGVfc2l6ZXMpKSkpIHsKKyAgICAgICAgKCFzYy0+c2Ft cGxlX3NpemUgJiYgIXNjLT5zYW1wbGVfY291bnQpKSkgfHwKKyAgICAgICAgKCFzYy0+Y2h1bmtf Y291bnQgJiYgc2MtPnNhbXBsZV9jb3VudCkpIHsKICAgICAgICAgYXZfbG9nKGxvZ19vYmosIEFW X0xPR19FUlJPUiwgInN0cmVhbSAlZCwgbWlzc2luZyBtYW5kYXRvcnkgYXRvbXMsIGJyb2tlbiBo ZWFkZXJcbiIsCi0gICAgICAgICAgICAgICBpbmRleCk7CisgICAgICAgICAgICBpbmRleCk7CiAg ICAgICAgIHJldHVybiAxOwogICAgIH0KIAotICAgIGlmIChzYy0+c3RzY19jb3VudCAmJiBzYy0+ c3RzY19kYXRhWyBzYy0+c3RzY19jb3VudCAtIDEgXS5maXJzdCA+IHNjLT5jaHVua19jb3VudCkg eworICAgIGlmIChzYy0+c3RzY19jb3VudCAmJiBzYy0+c3RzY19kYXRhW3NjLT5zdHNjX2NvdW50 IC0gMV0uZmlyc3QgPiBzYy0+Y2h1bmtfY291bnQpIHsKICAgICAgICAgYXZfbG9nKGxvZ19vYmos IEFWX0xPR19FUlJPUiwgInN0cmVhbSAlZCwgY29udHJhZGljdGlvbmFyeSBTVFNDIGFuZCBTVENP XG4iLAotICAgICAgICAgICAgICAgaW5kZXgpOworICAgICAgICAgICAgaW5kZXgpOwogICAgICAg ICByZXR1cm4gMjsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3Jl YWRfdHJhayhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0 YXRpYyBpbnQgbW92X3JlYWRfdHJhayhNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1P VkF0b20gYXRvbSkKIHsKLSAgICBBVlN0cmVhbSAqc3Q7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAq c2M7CisgICAgQVZTdHJlYW0qIHN0OworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjOwogICAgIGlu dCByZXQ7CiAKICAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0oYy0+ZmMsIE5VTEwpOwpAQCAt NTIyNywxMyArNTI0MCwyMCBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3RyYWsoTU9WQ29udGV4dCAq YywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgaWYgKCFzYy0+c3R0c19jb3Vu dCAmJiBjLT5hZHZhbmNlZF9lZGl0bGlzdCkgewogCiAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZf TE9HX1ZFUkJPU0UsICJhZHZhbmNlZF9lZGl0bGlzdCBkb2VzIG5vdCB3b3JrIHdpdGggZnJhZ21l bnRlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNUDQuIGRpc2Fi bGluZy5cbiIpOworICAgICAgICAgICAgIk1QNC4gZGlzYWJsaW5nLlxuIik7CiAgICAgICAgIGMt PmFkdmFuY2VkX2VkaXRsaXN0ID0gMDsKICAgICAgICAgYy0+YWR2YW5jZWRfZWRpdGxpc3RfYXV0 b2Rpc2FibGVkID0gMTsKICAgICB9CiAKICAgICBtb3ZfYnVpbGRfaW5kZXgoYywgc3QpOworICAg IGlmIChzYy0+ZnJhZ21lbnRfZHVyYXRpb25fc3VtID4gMCAmJgorICAgICAgICBzdC0+Y29kZWNw YXItPmJpdF9yYXRlID09IDApIHsKIAorICAgICAgICBzdC0+Y29kZWNwYXItPmJpdF9yYXRlID0K KyAgICAgICAgICAgIGF2X3Jlc2NhbGUoc2MtPmZyYWdtZW50X3NpemVfc3VtICogOCwKKyAgICAg ICAgICAgICAgICBzYy0+dGltZV9zY2FsZSwKKyAgICAgICAgICAgICAgICBzYy0+ZnJhZ21lbnRf ZHVyYXRpb25fc3VtKTsKKyAgICB9CiAjaWYgQ09ORklHX0lBTUZERUMKICAgICBpZiAoc2MtPmlh bWYpIHsKICAgICAgICAgcmV0ID0gbW92X3VwZGF0ZV9pYW1mX3N0cmVhbXMoYywgc3QpOwpAQCAt NTI0MiwyNSArNTI2MiwyNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3RyYWsoTU9WQ29udGV4dCAq YywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgfQogI2VuZGlmCiAKLSAgICBp ZiAoc2MtPmRyZWZfaWQtMSA8IHNjLT5kcmVmc19jb3VudCAmJiBzYy0+ZHJlZnNbc2MtPmRyZWZf aWQtMV0ucGF0aCkgewotICAgICAgICBNT1ZEcmVmICpkcmVmID0gJnNjLT5kcmVmc1tzYy0+ZHJl Zl9pZCAtIDFdOworICAgIGlmIChzYy0+ZHJlZl9pZCAtIDEgPCBzYy0+ZHJlZnNfY291bnQgJiYg c2MtPmRyZWZzW3NjLT5kcmVmX2lkIC0gMV0ucGF0aCkgeworICAgICAgICBNT1ZEcmVmKiBkcmVm ID0gJnNjLT5kcmVmc1tzYy0+ZHJlZl9pZCAtIDFdOwogICAgICAgICBpZiAoYy0+ZW5hYmxlX2Ry ZWZzKSB7CiAgICAgICAgICAgICBpZiAobW92X29wZW5fZHJlZihjLCAmc2MtPnBiLCBjLT5mYy0+ dXJsLCBkcmVmKSA8IDApCiAgICAgICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJS T1IsCi0gICAgICAgICAgICAgICAgICAgICAgICJzdHJlYW0gJWQsIGVycm9yIG9wZW5pbmcgYWxp YXM6IHBhdGg9JyVzJywgZGlyPSclcycsICIKLSAgICAgICAgICAgICAgICAgICAgICAgImZpbGVu YW1lPSclcycsIHZvbHVtZT0nJXMnLCBubHZsX2Zyb209JWQsIG5sdmxfdG89JWRcbiIsCi0gICAg ICAgICAgICAgICAgICAgICAgIHN0LT5pbmRleCwgZHJlZi0+cGF0aCwgZHJlZi0+ZGlyLCBkcmVm LT5maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgZHJlZi0+dm9sdW1lLCBkcmVmLT5u bHZsX2Zyb20sIGRyZWYtPm5sdmxfdG8pOwotICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICAic3RyZWFtICVkLCBlcnJvciBvcGVuaW5nIGFsaWFzOiBwYXRoPSclcycsIGRpcj0n JXMnLCAiCisgICAgICAgICAgICAgICAgICAgICJmaWxlbmFtZT0nJXMnLCB2b2x1bWU9JyVzJywg bmx2bF9mcm9tPSVkLCBubHZsX3RvPSVkXG4iLAorICAgICAgICAgICAgICAgICAgICBzdC0+aW5k ZXgsIGRyZWYtPnBhdGgsIGRyZWYtPmRpciwgZHJlZi0+ZmlsZW5hbWUsCisgICAgICAgICAgICAg ICAgICAgIGRyZWYtPnZvbHVtZSwgZHJlZi0+bmx2bF9mcm9tLCBkcmVmLT5ubHZsX3RvKTsKKyAg ICAgICAgfQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9H X1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgIlNraXBwZWQgb3BlbmluZyBleHRlcm5hbCB0 cmFjazogIgotICAgICAgICAgICAgICAgICAgICJzdHJlYW0gJWQsIGFsaWFzOiBwYXRoPSclcycs IGRpcj0nJXMnLCAiCi0gICAgICAgICAgICAgICAgICAgImZpbGVuYW1lPSclcycsIHZvbHVtZT0n JXMnLCBubHZsX2Zyb209JWQsIG5sdmxfdG89JWQuIgotICAgICAgICAgICAgICAgICAgICJTZXQg ZW5hYmxlX2RyZWZzIHRvIGFsbG93IHRoaXMuXG4iLAotICAgICAgICAgICAgICAgICAgIHN0LT5p bmRleCwgZHJlZi0+cGF0aCwgZHJlZi0+ZGlyLCBkcmVmLT5maWxlbmFtZSwKLSAgICAgICAgICAg ICAgICAgICBkcmVmLT52b2x1bWUsIGRyZWYtPm5sdmxfZnJvbSwgZHJlZi0+bmx2bF90byk7Ci0g ICAgICAgIH0KLSAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICJTa2lwcGVkIG9wZW5pbmcg ZXh0ZXJuYWwgdHJhY2s6ICIKKyAgICAgICAgICAgICAgICAic3RyZWFtICVkLCBhbGlhczogcGF0 aD0nJXMnLCBkaXI9JyVzJywgIgorICAgICAgICAgICAgICAgICJmaWxlbmFtZT0nJXMnLCB2b2x1 bWU9JyVzJywgbmx2bF9mcm9tPSVkLCBubHZsX3RvPSVkLiIKKyAgICAgICAgICAgICAgICAiU2V0 IGVuYWJsZV9kcmVmcyB0byBhbGxvdyB0aGlzLlxuIiwKKyAgICAgICAgICAgICAgICBzdC0+aW5k ZXgsIGRyZWYtPnBhdGgsIGRyZWYtPmRpciwgZHJlZi0+ZmlsZW5hbWUsCisgICAgICAgICAgICAg ICAgZHJlZi0+dm9sdW1lLCBkcmVmLT5ubHZsX2Zyb20sIGRyZWYtPm5sdmxfdG8pOworICAgICAg ICB9CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBzYy0+cGIgPSBjLT5mYy0+cGI7CiAgICAg ICAgIHNjLT5wYl9pc19jb3BpZWQgPSAxOwogICAgIH0KQEAgLTUyNjksMTMgKzUyOTEsMTMgQEAg c3RhdGljIGludCBtb3ZfcmVhZF90cmFrKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwg TU9WQXRvbSBhdG9tKQogICAgICAgICBpbnQgc3R0c19jb25zdGFudCA9IHNjLT5zdHRzX2NvdW50 ICYmIHNjLT50dHNfY291bnQ7CiAgICAgICAgIGlmIChzYy0+aF9zcGFjaW5nICYmIHNjLT52X3Nw YWNpbmcpCiAgICAgICAgICAgICBhdl9yZWR1Y2UoJnN0LT5zYW1wbGVfYXNwZWN0X3JhdGlvLm51 bSwgJnN0LT5zYW1wbGVfYXNwZWN0X3JhdGlvLmRlbiwKLSAgICAgICAgICAgICAgICAgICAgICBz Yy0+aF9zcGFjaW5nLCBzYy0+dl9zcGFjaW5nLCBJTlRfTUFYKTsKKyAgICAgICAgICAgICAgICBz Yy0+aF9zcGFjaW5nLCBzYy0+dl9zcGFjaW5nLCBJTlRfTUFYKTsKICAgICAgICAgaWYgKCFzdC0+ c2FtcGxlX2FzcGVjdF9yYXRpby5udW0gJiYgc3QtPmNvZGVjcGFyLT53aWR0aCAmJiBzdC0+Y29k ZWNwYXItPmhlaWdodCAmJgogICAgICAgICAgICAgc2MtPmhlaWdodCAmJiBzYy0+d2lkdGggJiYK ICAgICAgICAgICAgIChzdC0+Y29kZWNwYXItPndpZHRoICE9IHNjLT53aWR0aCB8fCBzdC0+Y29k ZWNwYXItPmhlaWdodCAhPSBzYy0+aGVpZ2h0KSkgewogICAgICAgICAgICAgYXZfcmVkdWNlKCZz dC0+c2FtcGxlX2FzcGVjdF9yYXRpby5udW0sICZzdC0+c2FtcGxlX2FzcGVjdF9yYXRpby5kZW4s Ci0gICAgICAgICAgICAgICAgICAgICAgKGludDY0X3Qpc3QtPmNvZGVjcGFyLT5oZWlnaHQgKiBz Yy0+d2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgKGludDY0X3Qpc3QtPmNvZGVjcGFyLT53 aWR0aCAgKiBzYy0+aGVpZ2h0LCBJTlRfTUFYKTsKKyAgICAgICAgICAgICAgICAoaW50NjRfdClz dC0+Y29kZWNwYXItPmhlaWdodCAqIHNjLT53aWR0aCwKKyAgICAgICAgICAgICAgICAoaW50NjRf dClzdC0+Y29kZWNwYXItPndpZHRoICogc2MtPmhlaWdodCwgSU5UX01BWCk7CiAgICAgICAgIH0K IAogI2lmIEZGX0FQSV9SX0ZSQU1FX1JBVEUKQEAgLTUyODYsMjYgKzUzMDgsMjAgQEAgc3RhdGlj IGludCBtb3ZfcmVhZF90cmFrKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRv bSBhdG9tKQogICAgICAgICB9CiAgICAgICAgIGlmIChzdHRzX2NvbnN0YW50KQogICAgICAgICAg ICAgYXZfcmVkdWNlKCZzdC0+cl9mcmFtZV9yYXRlLm51bSwgJnN0LT5yX2ZyYW1lX3JhdGUuZGVu LAotICAgICAgICAgICAgICAgICAgICAgIHNjLT50aW1lX3NjYWxlLCBzYy0+dHRzX2RhdGFbMF0u ZHVyYXRpb24sIElOVF9NQVgpOworICAgICAgICAgICAgICAgIHNjLT50aW1lX3NjYWxlLCBzYy0+ dHRzX2RhdGFbMF0uZHVyYXRpb24sIElOVF9NQVgpOwogI2VuZGlmCiAgICAgfQogCi0jaWYgQ09O RklHX0gyNjFfREVDT0RFUiB8fCBDT05GSUdfSDI2M19ERUNPREVSIHx8IENPTkZJR19NUEVHNF9E RUNPREVSCiAgICAgc3dpdGNoIChzdC0+Y29kZWNwYXItPmNvZGVjX2lkKSB7Ci0jaWYgQ09ORklH X0gyNjFfREVDT0RFUgogICAgIGNhc2UgQVZfQ09ERUNfSURfSDI2MToKLSNlbmRpZgotI2lmIENP TkZJR19IMjYzX0RFQ09ERVIKICAgICBjYXNlIEFWX0NPREVDX0lEX0gyNjM6Ci0jZW5kaWYKLSNp ZiBDT05GSUdfTVBFRzRfREVDT0RFUgogICAgIGNhc2UgQVZfQ09ERUNfSURfTVBFRzQ6Ci0jZW5k aWYKICAgICAgICAgc3QtPmNvZGVjcGFyLT53aWR0aCA9IDA7IC8qIGxldCBkZWNvZGVyIGluaXQg d2lkdGgvaGVpZ2h0ICovCi0gICAgICAgIHN0LT5jb2RlY3Bhci0+aGVpZ2h0PSAwOworICAgICAg ICBzdC0+Y29kZWNwYXItPmhlaWdodCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6 CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSNlbmRpZgogCiAgICAgLy8gSWYgdGhlIGR1cmF0aW9u IG9mIHRoZSBtcDMgcGFja2V0cyBpcyBub3QgY29uc3RhbnQsIHRoZW4gdGhleSBjb3VsZCBuZWVk IGEgcGFyc2VyCiAgICAgaWYgKHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURf TVAzCkBAIC01MzMyLDcgKzUzNDgsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3RyYWsoTU9WQ29u dGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmV0dXJuIDA7CiB9 CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfaWxzdChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfaWxzdChNT1ZDb250ZXh0KiBj LCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKICAgICBpbnQgcmV0OwogICAgIGMt Pml0dW5lc19tZXRhZGF0YSA9IDE7CkBAIC01MzQxLDcgKzUzNTcsNyBAQCBzdGF0aWMgaW50IG1v dl9yZWFkX2lsc3QoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20p CiAgICAgcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9rZXlzKE1PVkNvbnRl eHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVh ZF9rZXlzKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewog ICAgIHVpbnQzMl90IGNvdW50OwogICAgIHVpbnQzMl90IGk7CkBAIC01MzU0LDcgKzUzNzAsNyBA QCBzdGF0aWMgaW50IG1vdl9yZWFkX2tleXMoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBi LCBNT1ZBdG9tIGF0b20pCiAgICAgYXRvbS5zaXplIC09IDg7CiAgICAgaWYgKGNvdW50ID49IFVJ TlRfTUFYIC8gc2l6ZW9mKCpjLT5tZXRhX2tleXMpKSB7CiAgICAgICAgIGF2X2xvZyhjLT5mYywg QVZfTE9HX0VSUk9SLAotICAgICAgICAgICAgICAgIlRoZSAna2V5cycgYXRvbSB3aXRoIHRoZSBp bnZhbGlkIGtleSBjb3VudDogJSJQUkl1MzIiXG4iLCBjb3VudCk7CisgICAgICAgICAgICAiVGhl ICdrZXlzJyBhdG9tIHdpdGggdGhlIGludmFsaWQga2V5IGNvdW50OiAlIlBSSXUzMiJcbiIsIGNv dW50KTsKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAgICAgfQogCkBAIC01 MzY4LDEzICs1Mzg0LDEzIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfa2V5cyhNT1ZDb250ZXh0ICpj LCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgdWludDMyX3QgdHlwZSA9 IGF2aW9fcmwzMihwYik7CiAgICAgICAgIGlmIChrZXlfc2l6ZSA8IDggfHwga2V5X3NpemUgPiBh dG9tLnNpemUpIHsKICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0VSUk9SLAotICAg ICAgICAgICAgICAgICAgICJUaGUga2V5IyAlIlBSSXUzMiIgaW4gbWV0YSBoYXMgaW52YWxpZCBz aXplOiIKLSAgICAgICAgICAgICAgICAgICAiJSJQUkl1MzIiXG4iLCBpLCBrZXlfc2l6ZSk7Cisg ICAgICAgICAgICAgICAgIlRoZSBrZXkjICUiUFJJdTMyIiBpbiBtZXRhIGhhcyBpbnZhbGlkIHNp emU6IgorICAgICAgICAgICAgICAgICIlIlBSSXUzMiJcbiIsIGksIGtleV9zaXplKTsKICAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogICAgICAgICB9CiAgICAgICAgIGF0 b20uc2l6ZSAtPSBrZXlfc2l6ZTsKICAgICAgICAga2V5X3NpemUgLT0gODsKLSAgICAgICAgaWYg KHR5cGUgIT0gTUtUQUcoJ20nLCdkJywndCcsJ2EnKSkgeworICAgICAgICBpZiAodHlwZSAhPSBN S1RBRygnbScsICdkJywgJ3QnLCAnYScpKSB7CiAgICAgICAgICAgICBhdmlvX3NraXAocGIsIGtl eV9zaXplKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC01Mzg3LDIyICs1 NDAzLDIyIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfa2V5cyhNT1ZDb250ZXh0ICpjLCBBVklPQ29u dGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBt b3ZfcmVhZF9jdXN0b20oTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0 b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX2N1c3RvbShNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4 dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKICAgICBpbnQ2NF90IGVuZCA9IGF2X3NhdF9hZGQ2NChh dmlvX3RlbGwocGIpLCBhdG9tLnNpemUpOwotICAgIHVpbnQ4X3QgKmtleSA9IE5VTEwsICp2YWwg PSBOVUxMLCAqbWVhbiA9IE5VTEw7CisgICAgdWludDhfdCoga2V5ID0gTlVMTCwgKiB2YWwgPSBO VUxMLCAqIG1lYW4gPSBOVUxMOwogICAgIGludCBpOwogICAgIGludCByZXQgPSAwOwotICAgIEFW U3RyZWFtICpzdDsKLSAgICBNT1ZTdHJlYW1Db250ZXh0ICpzYzsKKyAgICBBVlN0cmVhbSogc3Q7 CisgICAgTU9WU3RyZWFtQ29udGV4dCogc2M7CiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0cmVhbXMg PCAxKQogICAgICAgICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5u Yl9zdHJlYW1zLTFdOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMg LSAxXTsKICAgICBzYyA9IHN0LT5wcml2X2RhdGE7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgMzsg aSsrKSB7Ci0gICAgICAgIHVpbnQ4X3QgKipwOworICAgICAgICB1aW50OF90KiogcDsKICAgICAg ICAgdWludDMyX3QgbGVuLCB0YWc7CiAKICAgICAgICAgaWYgKGVuZCAtIGF2aW9fdGVsbChwYikg PD0gMTIpCkBAIC01NDI0LDcgKzU0NDAsOCBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2N1c3RvbShN T1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgICAg IGF2aW9fc2tpcChwYiwgNCk7CiAgICAgICAgICAgICBsZW4gLT0gNDsKICAgICAgICAgICAgIHAg PSAmdmFsOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgfQorICAgICAgICBlbHNlCiAgICAgICAg ICAgICBicmVhazsKIAogICAgICAgICBpZiAoKnApCkBAIC01NDQ2LDE5ICs1NDYzLDIwIEBAIHN0 YXRpYyBpbnQgbW92X3JlYWRfY3VzdG9tKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwg TU9WQXRvbSBhdG9tKQogICAgIGlmIChtZWFuICYmIGtleSAmJiB2YWwpIHsKICAgICAgICAgaWYg KHN0cmNtcChrZXksICJpVHVuU01QQiIpID09IDApIHsKICAgICAgICAgICAgIGludCBwcmltaW5n LCByZW1haW5kZXIsIHNhbXBsZXM7Ci0gICAgICAgICAgICBpZihzc2NhbmYodmFsLCAiJSpYICVY ICVYICVYIiwgJnByaW1pbmcsICZyZW1haW5kZXIsICZzYW1wbGVzKSA9PSAzKXsKLSAgICAgICAg ICAgICAgICBpZihwcmltaW5nPjAgJiYgcHJpbWluZzwxNjM4NCkKKyAgICAgICAgICAgIGlmIChz c2NhbmYodmFsLCAiJSpYICVYICVYICVYIiwgJnByaW1pbmcsICZyZW1haW5kZXIsICZzYW1wbGVz KSA9PSAzKSB7CisgICAgICAgICAgICAgICAgaWYgKHByaW1pbmcgPiAwICYmIHByaW1pbmcgPCAx NjM4NCkKICAgICAgICAgICAgICAgICAgICAgc2MtPnN0YXJ0X3BhZCA9IHByaW1pbmc7CiAgICAg ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHN0cmNtcChrZXksICJjZGVjIikgIT0g MCkgewogICAgICAgICAgICAgYXZfZGljdF9zZXQoJmMtPmZjLT5tZXRhZGF0YSwga2V5LCB2YWws Ci0gICAgICAgICAgICAgICAgICAgICAgICBBVl9ESUNUX0RPTlRfU1RSRFVQX0tFWSB8IEFWX0RJ Q1RfRE9OVF9TVFJEVVBfVkFMKTsKKyAgICAgICAgICAgICAgICBBVl9ESUNUX0RPTlRfU1RSRFVQ X0tFWSB8IEFWX0RJQ1RfRE9OVF9TVFJEVVBfVkFMKTsKICAgICAgICAgICAgIGtleSA9IHZhbCA9 IE5VTEw7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgeworICAgIH0KKyAgICBlbHNlIHsKICAgICAg ICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfVkVSQk9TRSwKLSAgICAgICAgICAgICAgICJVbmhhbmRs ZWQgb3IgbWFsZm9ybWVkIGN1c3RvbSBtZXRhZGF0YSBvZiBzaXplICUiUFJJZDY0IlxuIiwgYXRv bS5zaXplKTsKKyAgICAgICAgICAgICJVbmhhbmRsZWQgb3IgbWFsZm9ybWVkIGN1c3RvbSBtZXRh ZGF0YSBvZiBzaXplICUiUFJJZDY0IlxuIiwgYXRvbS5zaXplKTsKICAgICB9CiAKICAgICBhdmlv X3NlZWsocGIsIGVuZCwgU0VFS19TRVQpOwpAQCAtNTQ2OCwxMCArNTQ4NiwxMCBAQCBzdGF0aWMg aW50IG1vdl9yZWFkX2N1c3RvbShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0 b20gYXRvbSkKICAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGhlaWZfYWRkX3N0cmVh bShNT1ZDb250ZXh0ICpjLCBIRUlGSXRlbSAqaXRlbSkKK3N0YXRpYyBpbnQgaGVpZl9hZGRfc3Ry ZWFtKE1PVkNvbnRleHQqIGMsIEhFSUZJdGVtKiBpdGVtKQogewotICAgIE1PVlN0cmVhbUNvbnRl eHQgKnNjOwotICAgIEFWU3RyZWFtICpzdDsKKyAgICBNT1ZTdHJlYW1Db250ZXh0KiBzYzsKKyAg ICBBVlN0cmVhbSogc3Q7CiAKICAgICBzdCA9IGF2Zm9ybWF0X25ld19zdHJlYW0oYy0+ZmMsIE5V TEwpOwogICAgIGlmICghc3QpCkBAIC01NTI3LDcgKzU1NDUsNyBAQCBmYWlsOgogICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfbWV0YShNT1ZDb250 ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3Jl YWRfbWV0YShNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsK ICAgICB3aGlsZSAoYXRvbS5zaXplID4gOCkgewogICAgICAgICB1aW50MzJfdCB0YWc7CkBAIC01 NTM1LDcgKzU1NTMsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX21ldGEoTU9WQ29udGV4dCAqYywg QVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9FT0Y7CiAgICAgICAgIHRhZyA9IGF2aW9fcmwzMihwYik7CiAgICAgICAgIGF0b20uc2l6ZSAt PSA0OwotICAgICAgICBpZiAodGFnID09IE1LVEFHKCdoJywnZCcsJ2wnLCdyJykpIHsKKyAgICAg ICAgaWYgKHRhZyA9PSBNS1RBRygnaCcsICdkJywgJ2wnLCAncicpKSB7CiAgICAgICAgICAgICBh dmlvX3NlZWsocGIsIC04LCBTRUVLX0NVUik7CiAgICAgICAgICAgICBhdG9tLnNpemUgKz0gODsK ICAgICAgICAgICAgIHJldHVybiBtb3ZfcmVhZF9kZWZhdWx0KGMsIHBiLCBhdG9tKTsKQEAgLTU1 NTMsMjEgKzU1NzEsMjEgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9tZXRhKE1PVkNvbnRleHQgKmMs IEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAhKG1hdHJpeClbMV1bMF0gJiYg IShtYXRyaXgpWzFdWzJdICYmIFwKICAgICAgIShtYXRyaXgpWzJdWzBdICYmICEobWF0cml4KVsy XVsxXSkKIAotc3RhdGljIGludCBtb3ZfcmVhZF90a2hkKE1PVkNvbnRleHQgKmMsIEFWSU9Db250 ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF90a2hkKE1PVkNvbnRl eHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewogICAgIGludCBpLCBqLCBl OwogICAgIGludCB3aWR0aDsKICAgICBpbnQgaGVpZ2h0OwogICAgIGludCBkaXNwbGF5X21hdHJp eFszXVszXTsKICAgICBpbnQgcmVzX2Rpc3BsYXlfbWF0cml4WzNdWzNdID0geyB7IDAgfSB9Owot ICAgIEFWU3RyZWFtICpzdDsKLSAgICBNT1ZTdHJlYW1Db250ZXh0ICpzYzsKKyAgICBBVlN0cmVh bSogc3Q7CisgICAgTU9WU3RyZWFtQ29udGV4dCogc2M7CiAgICAgaW50IHZlcnNpb247CiAgICAg aW50IGZsYWdzOwogCiAgICAgaWYgKGMtPmZjLT5uYl9zdHJlYW1zIDwgMSkKICAgICAgICAgcmV0 dXJuIDA7Ci0gICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcy0xXTsKKyAg ICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zIC0gMV07CiAgICAgc2MgPSBz dC0+cHJpdl9kYXRhOwogCiAgICAgLy8gRWFjaCBzdHJlYW0gKHRyYWspIHNob3VsZCBoYXZlIGV4 YWN0bHkgMSB0a2hkLiBUaGlzIGNhdGNoZXMgYmFkIGZpbGVzIGFuZApAQCAtNTU4Miw3ICs1NjAw LDggQEAgc3RhdGljIGludCBtb3ZfcmVhZF90a2hkKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0 ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIGlmICh2ZXJzaW9uID09IDEpIHsKICAgICAgICAgYXZp b19yYjY0KHBiKTsKICAgICAgICAgYXZpb19yYjY0KHBiKTsKLSAgICB9IGVsc2UgeworICAgIH0K KyAgICBlbHNlIHsKICAgICAgICAgYXZpb19yYjMyKHBiKTsgLyogY3JlYXRpb24gdGltZSAqLwog ICAgICAgICBhdmlvX3JiMzIocGIpOyAvKiBtb2RpZmljYXRpb24gdGltZSAqLwogICAgIH0KQEAg LTU2MjEsOCArNTY0MCw4IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfdGtoZChNT1ZDb250ZXh0ICpj LCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgZm9yIChqID0gMDsgaiA8 IDM7IGorKykgewogICAgICAgICAgICAgZm9yIChlID0gMDsgZSA8IDM7IGUrKykgewogICAgICAg ICAgICAgICAgIHJlc19kaXNwbGF5X21hdHJpeFtpXVtqXSArPQotICAgICAgICAgICAgICAgICAg ICAoKGludDY0X3QpIGRpc3BsYXlfbWF0cml4W2ldW2VdICoKLSAgICAgICAgICAgICAgICAgICAg IGMtPm1vdmllX2Rpc3BsYXlfbWF0cml4W2VdW2pdKSA+PiBzaFtlXTsKKyAgICAgICAgICAgICAg ICAgICAgKChpbnQ2NF90KWRpc3BsYXlfbWF0cml4W2ldW2VdICoKKyAgICAgICAgICAgICAgICAg ICAgICAgIGMtPm1vdmllX2Rpc3BsYXlfbWF0cml4W2VdW2pdKSA+PiBzaFtlXTsKICAgICAgICAg ICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTU2NDYsMTAgKzU2NjUsMTAgQEAgc3RhdGljIGlu dCBtb3ZfcmVhZF90a2hkKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBh dG9tKQogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCiAgICAgICAgICAgICBkaXNw X3RyYW5zZm9ybVtpXSA9IGh5cG90KHNjLT5kaXNwbGF5X21hdHJpeFswICsgaV0sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjLT5kaXNwbGF5X21hdHJpeFszICsgaV0p OworICAgICAgICAgICAgICAgIHNjLT5kaXNwbGF5X21hdHJpeFszICsgaV0pOwogCi0gICAgICAg IGlmIChkaXNwX3RyYW5zZm9ybVswXSA+IDEgICAgICAgJiYgZGlzcF90cmFuc2Zvcm1bMV0gPiAx ICYmCi0gICAgICAgICAgICBkaXNwX3RyYW5zZm9ybVswXSA8ICgxPDwyNCkgJiYgZGlzcF90cmFu c2Zvcm1bMV0gPCAoMTw8MjQpICYmCisgICAgICAgIGlmIChkaXNwX3RyYW5zZm9ybVswXSA+IDEg JiYgZGlzcF90cmFuc2Zvcm1bMV0gPiAxICYmCisgICAgICAgICAgICBkaXNwX3RyYW5zZm9ybVsw XSA8ICgxIDw8IDI0KSAmJiBkaXNwX3RyYW5zZm9ybVsxXSA8ICgxIDw8IDI0KSAmJgogICAgICAg ICAgICAgZmFicygoZGlzcF90cmFuc2Zvcm1bMF0gLyBkaXNwX3RyYW5zZm9ybVsxXSkgLSAxLjAp ID4gMC4wMSkKICAgICAgICAgICAgIHN0LT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gYXZfZDJxKAog ICAgICAgICAgICAgICAgIGRpc3BfdHJhbnNmb3JtWzBdIC8gZGlzcF90cmFuc2Zvcm1bMV0sCkBA IC01NjU4LDEyICs1Njc3LDEyIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfdGtoZChNT1ZDb250ZXh0 ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAot c3RhdGljIGludCBtb3ZfcmVhZF90ZmhkKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwg TU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF90ZmhkKE1PVkNvbnRleHQqIGMsIEFW SU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIE1PVkZyYWdtZW50ICpmcmFnID0g JmMtPmZyYWdtZW50OwotICAgIE1PVlRyYWNrRXh0ICp0cmV4ID0gTlVMTDsKKyAgICBNT1ZGcmFn bWVudCogZnJhZyA9ICZjLT5mcmFnbWVudDsKKyAgICBNT1ZUcmFja0V4dCogdHJleCA9IE5VTEw7 CiAgICAgaW50IGZsYWdzLCB0cmFja19pZCwgaTsKLSAgICBNT1ZGcmFnbWVudFN0cmVhbUluZm8g KiBmcmFnX3N0cmVhbV9pbmZvOworICAgIE1PVkZyYWdtZW50U3RyZWFtSW5mbyogZnJhZ19zdHJl YW1faW5mbzsKIAogICAgIGF2aW9fcjgocGIpOyAvKiB2ZXJzaW9uICovCiAgICAgZmxhZ3MgPSBh dmlvX3JiMjQocGIpOwpAQCAtNTY4NSwxNiArNTcwNCwxNiBAQCBzdGF0aWMgaW50IG1vdl9yZWFk X3RmaGQoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAg c2V0X2ZyYWdfc3RyZWFtKCZjLT5mcmFnX2luZGV4LCB0cmFja19pZCk7CiAKICAgICBmcmFnLT5i YXNlX2RhdGFfb2Zmc2V0ID0gZmxhZ3MgJiBNT1ZfVEZIRF9CQVNFX0RBVEFfT0ZGU0VUID8KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZpb19yYjY0KHBiKSA6IGZsYWdzICYgTU9WX1RG SERfREVGQVVMVF9CQVNFX0lTX01PT0YgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm cmFnLT5tb29mX29mZnNldCA6IGZyYWctPmltcGxpY2l0X29mZnNldDsKLSAgICBmcmFnLT5zdHNk X2lkICA9IGZsYWdzICYgTU9WX1RGSERfU1RTRF9JRCA/IGF2aW9fcmIzMihwYikgOiB0cmV4LT5z dHNkX2lkOworICAgICAgICBhdmlvX3JiNjQocGIpIDogZmxhZ3MgJiBNT1ZfVEZIRF9ERUZBVUxU X0JBU0VfSVNfTU9PRiA/CisgICAgICAgIGZyYWctPm1vb2Zfb2Zmc2V0IDogZnJhZy0+aW1wbGlj aXRfb2Zmc2V0OworICAgIGZyYWctPnN0c2RfaWQgPSBmbGFncyAmIE1PVl9URkhEX1NUU0RfSUQg PyBhdmlvX3JiMzIocGIpIDogdHJleC0+c3RzZF9pZDsKIAogICAgIGZyYWctPmR1cmF0aW9uID0g ZmxhZ3MgJiBNT1ZfVEZIRF9ERUZBVUxUX0RVUkFUSU9OID8KLSAgICAgICAgICAgICAgICAgICAg IGF2aW9fcmIzMihwYikgOiB0cmV4LT5kdXJhdGlvbjsKLSAgICBmcmFnLT5zaXplICAgICA9IGZs YWdzICYgTU9WX1RGSERfREVGQVVMVF9TSVpFID8KLSAgICAgICAgICAgICAgICAgICAgIGF2aW9f cmIzMihwYikgOiB0cmV4LT5zaXplOwotICAgIGZyYWctPmZsYWdzICAgID0gZmxhZ3MgJiBNT1Zf VEZIRF9ERUZBVUxUX0ZMQUdTID8KLSAgICAgICAgICAgICAgICAgICAgIGF2aW9fcmIzMihwYikg OiB0cmV4LT5mbGFnczsKKyAgICAgICAgYXZpb19yYjMyKHBiKSA6IHRyZXgtPmR1cmF0aW9uOwor ICAgIGZyYWctPnNpemUgPSBmbGFncyAmIE1PVl9URkhEX0RFRkFVTFRfU0laRSA/CisgICAgICAg IGF2aW9fcmIzMihwYikgOiB0cmV4LT5zaXplOworICAgIGZyYWctPmZsYWdzID0gZmxhZ3MgJiBN T1ZfVEZIRF9ERUZBVUxUX0ZMQUdTID8KKyAgICAgICAgYXZpb19yYjMyKHBiKSA6IHRyZXgtPmZs YWdzOwogICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX1RSQUNFLCAiZnJhZyBmbGFncyAweCV4XG4i LCBmcmFnLT5mbGFncyk7CiAKICAgICBmcmFnX3N0cmVhbV9pbmZvID0gZ2V0X2N1cnJlbnRfZnJh Z19zdHJlYW1faW5mbygmYy0+ZnJhZ19pbmRleCk7CkBAIC01NzA1LDEwICs1NzI0LDEwIEBAIHN0 YXRpYyBpbnQgbW92X3JlYWRfdGZoZChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1P VkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9jaGFw KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGlu dCBtb3ZfcmVhZF9jaGFwKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBh dG9tKQogewogICAgIHVuc2lnbmVkIGksIG51bTsKLSAgICB2b2lkICpuZXdfdHJhY2tzOworICAg IHZvaWQqIG5ld190cmFja3M7CiAKICAgICBudW0gPSBhdG9tLnNpemUgLyA0OwogICAgIGlmICgh KG5ld190cmFja3MgPSBhdl9tYWxsb2NfYXJyYXkobnVtLCBzaXplb2YoaW50KSkpKQpAQCAtNTcy NiwxNSArNTc0NSwxNSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2NoYXAoTU9WQ29udGV4dCAqYywg QVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRp YyBpbnQgbW92X3JlYWRfdHJleChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0 b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfdHJleChNT1ZDb250ZXh0KiBjLCBBVklPQ29u dGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBNT1ZUcmFja0V4dCAqdHJleDsKKyAgICBN T1ZUcmFja0V4dCogdHJleDsKICAgICBpbnQgZXJyOwogCi0gICAgaWYgKCh1aW50NjRfdCljLT50 cmV4X2NvdW50KzEgPj0gVUlOVF9NQVggLyBzaXplb2YoKmMtPnRyZXhfZGF0YSkpCisgICAgaWYg KCh1aW50NjRfdCljLT50cmV4X2NvdW50ICsgMSA+PSBVSU5UX01BWCAvIHNpemVvZigqYy0+dHJl eF9kYXRhKSkKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAgICAgaWYgKChl cnIgPSBhdl9yZWFsbG9jcF9hcnJheSgmYy0+dHJleF9kYXRhLCBjLT50cmV4X2NvdW50ICsgMSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqYy0+dHJleF9kYXRhKSkp IDwgMCkgeworICAgICAgICBzaXplb2YoKmMtPnRyZXhfZGF0YSkpKSA8IDApIHsKICAgICAgICAg Yy0+dHJleF9jb3VudCA9IDA7CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQpAQCAtNTc0NSwy MCArNTc2NCwyMCBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3RyZXgoTU9WQ29udGV4dCAqYywgQVZJ T0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgYXZpb19yOChwYik7IC8qIHZlcnNpb24g Ki8KICAgICBhdmlvX3JiMjQocGIpOyAvKiBmbGFncyAqLwogICAgIHRyZXgtPnRyYWNrX2lkID0g YXZpb19yYjMyKHBiKTsKLSAgICB0cmV4LT5zdHNkX2lkICA9IGF2aW9fcmIzMihwYik7CisgICAg dHJleC0+c3RzZF9pZCA9IGF2aW9fcmIzMihwYik7CiAgICAgdHJleC0+ZHVyYXRpb24gPSBhdmlv X3JiMzIocGIpOwotICAgIHRyZXgtPnNpemUgICAgID0gYXZpb19yYjMyKHBiKTsKLSAgICB0cmV4 LT5mbGFncyAgICA9IGF2aW9fcmIzMihwYik7CisgICAgdHJleC0+c2l6ZSA9IGF2aW9fcmIzMihw Yik7CisgICAgdHJleC0+ZmxhZ3MgPSBhdmlvX3JiMzIocGIpOwogICAgIHJldHVybiAwOwogfQog Ci1zdGF0aWMgaW50IG1vdl9yZWFkX3RmZHQoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBi LCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX3RmZHQoTU9WQ29udGV4dCogYywg QVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7Ci0gICAgTU9WRnJhZ21lbnQgKmZyYWcg PSAmYy0+ZnJhZ21lbnQ7Ci0gICAgQVZTdHJlYW0gKnN0ID0gTlVMTDsKLSAgICBNT1ZTdHJlYW1D b250ZXh0ICpzYzsKKyAgICBNT1ZGcmFnbWVudCogZnJhZyA9ICZjLT5mcmFnbWVudDsKKyAgICBB VlN0cmVhbSogc3QgPSBOVUxMOworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjOwogICAgIGludCB2 ZXJzaW9uLCBpOwotICAgIE1PVkZyYWdtZW50U3RyZWFtSW5mbyAqIGZyYWdfc3RyZWFtX2luZm87 CisgICAgTU9WRnJhZ21lbnRTdHJlYW1JbmZvKiBmcmFnX3N0cmVhbV9pbmZvOwogICAgIGludDY0 X3QgYmFzZV9tZWRpYV9kZWNvZGVfdGltZTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBjLT5mYy0+ bmJfc3RyZWFtczsgaSsrKSB7CkBAIC01Nzc5LDcgKzU3OTgsOCBAQCBzdGF0aWMgaW50IG1vdl9y ZWFkX3RmZHQoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAg ICAgYXZpb19yYjI0KHBiKTsgLyogZmxhZ3MgKi8KICAgICBpZiAodmVyc2lvbikgewogICAgICAg ICBiYXNlX21lZGlhX2RlY29kZV90aW1lID0gYXZpb19yYjY0KHBiKTsKLSAgICB9IGVsc2Ugewor ICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgYmFzZV9tZWRpYV9kZWNvZGVfdGltZSA9IGF2aW9f cmIzMihwYik7CiAgICAgfQogCkBAIC01NzkxLDEzICs1ODExLDEzIEBAIHN0YXRpYyBpbnQgbW92 X3JlYWRfdGZkdChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkK ICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF90cnVuKE1PVkNvbnRleHQg KmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF90 cnVuKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAg IE1PVkZyYWdtZW50ICpmcmFnID0gJmMtPmZyYWdtZW50OwotICAgIEFWU3RyZWFtICpzdCA9IE5V TEw7Ci0gICAgRkZTdHJlYW0gKnN0aSA9IE5VTEw7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7 Ci0gICAgTU9WVGltZVRvU2FtcGxlICp0dHNfZGF0YTsKKyAgICBNT1ZGcmFnbWVudCogZnJhZyA9 ICZjLT5mcmFnbWVudDsKKyAgICBBVlN0cmVhbSogc3QgPSBOVUxMOworICAgIEZGU3RyZWFtKiBz dGkgPSBOVUxMOworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjOworICAgIE1PVlRpbWVUb1NhbXBs ZSogdHRzX2RhdGE7CiAgICAgdWludDY0X3Qgb2Zmc2V0OwogICAgIGludDY0X3QgZHRzLCBwdHMg PSBBVl9OT1BUU19WQUxVRTsKICAgICBpbnQgZGF0YV9vZmZzZXQgPSAwOwpAQCAtNTgwNyw4ICs1 ODI3LDggQEAgc3RhdGljIGludCBtb3ZfcmVhZF90cnVuKE1PVkNvbnRleHQgKmMsIEFWSU9Db250 ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIGludCBuZXh0X2ZyYWdfaW5kZXggPSAtMSwgaW5k ZXhfZW50cnlfcG9zOwogICAgIHNpemVfdCByZXF1ZXN0ZWRfc2l6ZTsKICAgICBzaXplX3Qgb2xk X2FsbG9jYXRlZF9zaXplOwotICAgIEFWSW5kZXhFbnRyeSAqbmV3X2VudHJpZXM7Ci0gICAgTU9W RnJhZ21lbnRTdHJlYW1JbmZvICogZnJhZ19zdHJlYW1faW5mbzsKKyAgICBBVkluZGV4RW50cnkq IG5ld19lbnRyaWVzOworICAgIE1PVkZyYWdtZW50U3RyZWFtSW5mbyogZnJhZ19zdHJlYW1faW5m bzsKIAogICAgIGlmICghZnJhZy0+Zm91bmRfdGZoZCkgewogICAgICAgICBhdl9sb2coYy0+ZmMs IEFWX0xPR19FUlJPUiwgInRydW4gdHJhY2sgaWQgdW5rbm93biwgbm8gdGZoZCB3YXMgZm91bmRc biIpOwpAQCAtNTgyOCw3ICs1ODQ4LDcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF90cnVuKE1PVkNv bnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAgICByZXR1cm4g MDsKICAgICB9CiAgICAgc2MgPSBzdC0+cHJpdl9kYXRhOwotICAgIGlmIChzYy0+cHNldWRvX3N0 cmVhbV9pZCsxICE9IGZyYWctPnN0c2RfaWQgJiYgc2MtPnBzZXVkb19zdHJlYW1faWQgIT0gLTEp CisgICAgaWYgKHNjLT5wc2V1ZG9fc3RyZWFtX2lkICsgMSAhPSBmcmFnLT5zdHNkX2lkICYmIHNj LT5wc2V1ZG9fc3RyZWFtX2lkICE9IC0xKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIEZp bmQgdGhlIG5leHQgZnJhZ19pbmRleCBpbmRleCB0aGF0IGhhcyBhIHZhbGlkIGluZGV4X2VudHJ5 IGZvcgpAQCAtNTg1MywzMCArNTg3MywzMyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3RydW4oTU9W Q29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgZW50cmllcyA9 IGF2aW9fcmIzMihwYik7CiAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfVFJBQ0UsICJmbGFncyAw eCV4IGVudHJpZXMgJXVcbiIsIGZsYWdzLCBlbnRyaWVzKTsKIAotICAgIGlmICgodWludDY0X3Qp ZW50cmllcytzYy0+dHRzX2NvdW50ID49IFVJTlRfTUFYL3NpemVvZigqc2MtPnR0c19kYXRhKSkK KyAgICBpZiAoKHVpbnQ2NF90KWVudHJpZXMgKyBzYy0+dHRzX2NvdW50ID49IFVJTlRfTUFYIC8g c2l6ZW9mKCpzYy0+dHRzX2RhdGEpKQogICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKLSAgICBpZiAoZmxhZ3MgJiBNT1ZfVFJVTl9EQVRBX09GRlNFVCkgICAgICAgIGRhdGFfb2Zm c2V0ICAgICAgICA9IGF2aW9fcmIzMihwYik7CisgICAgaWYgKGZsYWdzICYgTU9WX1RSVU5fREFU QV9PRkZTRVQpICAgICAgICBkYXRhX29mZnNldCA9IGF2aW9fcmIzMihwYik7CiAgICAgaWYgKGZs YWdzICYgTU9WX1RSVU5fRklSU1RfU0FNUExFX0ZMQUdTKSBmaXJzdF9zYW1wbGVfZmxhZ3MgPSBh dmlvX3JiMzIocGIpOwogCiAgICAgZnJhZ19zdHJlYW1faW5mbyA9IGdldF9jdXJyZW50X2ZyYWdf c3RyZWFtX2luZm8oJmMtPmZyYWdfaW5kZXgpOwogICAgIGlmIChmcmFnX3N0cmVhbV9pbmZvKSB7 CiAgICAgICAgIGlmIChmcmFnX3N0cmVhbV9pbmZvLT5uZXh0X3RydW5fZHRzICE9IEFWX05PUFRT X1ZBTFVFKSB7CiAgICAgICAgICAgICBkdHMgPSBmcmFnX3N0cmVhbV9pbmZvLT5uZXh0X3RydW5f ZHRzIC0gc2MtPnRpbWVfb2Zmc2V0OwotICAgICAgICB9IGVsc2UgaWYgKGZyYWdfc3RyZWFtX2lu Zm8tPmZpcnN0X3RmcmFfcHRzICE9IEFWX05PUFRTX1ZBTFVFICYmCisgICAgICAgIH0KKyAgICAg ICAgZWxzZSBpZiAoZnJhZ19zdHJlYW1faW5mby0+Zmlyc3RfdGZyYV9wdHMgIT0gQVZfTk9QVFNf VkFMVUUgJiYKICAgICAgICAgICAgIGMtPnVzZV9tZnJhX2ZvciA9PSBGRl9NT1ZfRkxBR19NRlJB X1BUUykgewogICAgICAgICAgICAgcHRzID0gZnJhZ19zdHJlYW1faW5mby0+Zmlyc3RfdGZyYV9w dHM7CiAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19ERUJVRywgImZvdW5kIG1mcmEg dGltZSAlIlBSSWQ2NAotICAgICAgICAgICAgICAgICAgICAiLCB1c2luZyBpdCBmb3IgcHRzXG4i LCBwdHMpOwotICAgICAgICB9IGVsc2UgaWYgKGZyYWdfc3RyZWFtX2luZm8tPmZpcnN0X3RmcmFf cHRzICE9IEFWX05PUFRTX1ZBTFVFICYmCisgICAgICAgICAgICAgICAgIiwgdXNpbmcgaXQgZm9y IHB0c1xuIiwgcHRzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmcmFnX3N0cmVhbV9p bmZvLT5maXJzdF90ZnJhX3B0cyAhPSBBVl9OT1BUU19WQUxVRSAmJgogICAgICAgICAgICAgYy0+ dXNlX21mcmFfZm9yID09IEZGX01PVl9GTEFHX01GUkFfRFRTKSB7CiAgICAgICAgICAgICBkdHMg PSBmcmFnX3N0cmVhbV9pbmZvLT5maXJzdF90ZnJhX3B0czsKICAgICAgICAgICAgIGF2X2xvZyhj LT5mYywgQVZfTE9HX0RFQlVHLCAiZm91bmQgbWZyYSB0aW1lICUiUFJJZDY0Ci0gICAgICAgICAg ICAgICAgICAgICIsIHVzaW5nIGl0IGZvciBkdHNcbiIsIHB0cyk7Ci0gICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgIiwgdXNpbmcgaXQgZm9yIGR0c1xuIiwgcHRzKTsKKyAgICAgICAg fQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGludCBoYXNfdGZkdCA9IGZyYWdfc3RyZWFt X2luZm8tPnRmZHRfZHRzICE9IEFWX05PUFRTX1ZBTFVFOwogICAgICAgICAgICAgaW50IGhhc19z aWR4ID0gZnJhZ19zdHJlYW1faW5mby0+c2lkeF9wdHMgIT0gQVZfTk9QVFNfVkFMVUU7CiAgICAg ICAgICAgICBpbnQgZmFsbGJhY2tfdGZkdCA9ICFjLT51c2VfdGZkdCAmJiAhaGFzX3NpZHggJiYg aGFzX3RmZHQ7Ci0gICAgICAgICAgICBpbnQgZmFsbGJhY2tfc2lkeCA9ICBjLT51c2VfdGZkdCAm JiAhaGFzX3RmZHQgJiYgaGFzX3NpZHg7CisgICAgICAgICAgICBpbnQgZmFsbGJhY2tfc2lkeCA9 IGMtPnVzZV90ZmR0ICYmICFoYXNfdGZkdCAmJiBoYXNfc2lkeDsKIAogICAgICAgICAgICAgaWYg KGZhbGxiYWNrX3NpZHgpIHsKICAgICAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19E RUJVRywgInVzZV90ZmR0IHNldCBidXQgbm8gdGZkdCBmb3VuZCwgdXNpbmcgc2lkeCBpbnN0ZWFk XG4iKTsKQEAgLTU4ODgsMjUgKzU5MTEsMjggQEAgc3RhdGljIGludCBtb3ZfcmVhZF90cnVuKE1P VkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAgICAgICAg aWYgKGhhc190ZmR0ICYmIGMtPnVzZV90ZmR0IHx8IGZhbGxiYWNrX3RmZHQpIHsKICAgICAgICAg ICAgICAgICBkdHMgPSBmcmFnX3N0cmVhbV9pbmZvLT50ZmR0X2R0cyAtIHNjLT50aW1lX29mZnNl dDsKICAgICAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19ERUJVRywgImZvdW5kIHRm ZHQgdGltZSAlIlBSSWQ2NAotICAgICAgICAgICAgICAgICAgICAgICAgIiwgdXNpbmcgaXQgZm9y IGR0c1xuIiwgZHRzKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzX3NpZHggJiYgIWMtPnVz ZV90ZmR0IHx8IGZhbGxiYWNrX3NpZHgpIHsKKyAgICAgICAgICAgICAgICAgICAgIiwgdXNpbmcg aXQgZm9yIGR0c1xuIiwgZHRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg KGhhc19zaWR4ICYmICFjLT51c2VfdGZkdCB8fCBmYWxsYmFja19zaWR4KSB7CiAgICAgICAgICAg ICAgICAgLy8gRklYTUU6IHNpZHggZWFybGllc3RfcHJlc2VudGF0aW9uX3RpbWUgaXMgKlBUUyos IHMuYi4KICAgICAgICAgICAgICAgICAvLyBwdHMgPSBmcmFnX3N0cmVhbV9pbmZvLT5zaWR4X3B0 czsKLSAgICAgICAgICAgICAgICBkdHMgPSBmcmFnX3N0cmVhbV9pbmZvLT5zaWR4X3B0czsKKyAg ICAgICAgICAgICAgICBkdHMgPSBmcmFnX3N0cmVhbV9pbmZvLT5zaWR4X3B0cyAtIHNjLT50aW1l X29mZnNldDsKICAgICAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19ERUJVRywgImZv dW5kIHNpZHggdGltZSAlIlBSSWQ2NAotICAgICAgICAgICAgICAgICAgICAgICAgIiwgdXNpbmcg aXQgZm9yIGR0c1xuIiwgZnJhZ19zdHJlYW1faW5mby0+c2lkeF9wdHMpOwotICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgIiwgdXNpbmcgaXQgZm9yIGR0c1xuIiwgZnJh Z19zdHJlYW1faW5mby0+c2lkeF9wdHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz ZSB7CiAgICAgICAgICAgICAgICAgZHRzID0gc2MtPnRyYWNrX2VuZCAtIHNjLT50aW1lX29mZnNl dDsKICAgICAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19ERUJVRywgImZvdW5kIHRy YWNrIGVuZCB0aW1lICUiUFJJZDY0Ci0gICAgICAgICAgICAgICAgICAgICAgICAiLCB1c2luZyBp dCBmb3IgZHRzXG4iLCBkdHMpOworICAgICAgICAgICAgICAgICAgICAiLCB1c2luZyBpdCBmb3Ig ZHRzXG4iLCBkdHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKKyAg ICB9CisgICAgZWxzZSB7CiAgICAgICAgIGR0cyA9IHNjLT50cmFja19lbmQgLSBzYy0+dGltZV9v ZmZzZXQ7CiAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0RFQlVHLCAiZm91bmQgdHJhY2sg ZW5kIHRpbWUgJSJQUklkNjQKLSAgICAgICAgICAgICAgICAiLCB1c2luZyBpdCBmb3IgZHRzXG4i LCBkdHMpOworICAgICAgICAgICAgIiwgdXNpbmcgaXQgZm9yIGR0c1xuIiwgZHRzKTsKICAgICB9 Ci0gICAgb2Zmc2V0ICAgPSBmcmFnLT5iYXNlX2RhdGFfb2Zmc2V0ICsgZGF0YV9vZmZzZXQ7Cisg ICAgb2Zmc2V0ID0gZnJhZy0+YmFzZV9kYXRhX29mZnNldCArIGRhdGFfb2Zmc2V0OwogICAgIGRp c3RhbmNlID0gMDsKICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19UUkFDRSwgImZpcnN0IHNhbXBs ZSBmbGFncyAweCV4XG4iLCBmaXJzdF9zYW1wbGVfZmxhZ3MpOwogCkBAIC01OTIwLDE2ICs1OTQ2 LDE2IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfdHJ1bihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4 dCAqcGIsIE1PVkF0b20gYXRvbSkKIAogICAgIHJlcXVlc3RlZF9zaXplID0gKHN0aS0+bmJfaW5k ZXhfZW50cmllcyArIGVudHJpZXMpICogc2l6ZW9mKEFWSW5kZXhFbnRyeSk7CiAgICAgbmV3X2Vu dHJpZXMgPSBhdl9mYXN0X3JlYWxsb2Moc3RpLT5pbmRleF9lbnRyaWVzLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZzdGktPmluZGV4X2VudHJpZXNfYWxsb2NhdGVkX3NpemUs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkX3NpemUpOworICAg ICAgICAmc3RpLT5pbmRleF9lbnRyaWVzX2FsbG9jYXRlZF9zaXplLAorICAgICAgICByZXF1ZXN0 ZWRfc2l6ZSk7CiAgICAgaWYgKCFuZXdfZW50cmllcykKICAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKLSAgICBzdGktPmluZGV4X2VudHJpZXM9IG5ld19lbnRyaWVzOworICAgIHN0aS0+ aW5kZXhfZW50cmllcyA9IG5ld19lbnRyaWVzOwogCiAgICAgcmVxdWVzdGVkX3NpemUgPSAoc3Rp LT5uYl9pbmRleF9lbnRyaWVzICsgZW50cmllcykgKiBzaXplb2YoKnNjLT50dHNfZGF0YSk7CiAg ICAgb2xkX2FsbG9jYXRlZF9zaXplID0gc2MtPnR0c19hbGxvY2F0ZWRfc2l6ZTsKICAgICB0dHNf ZGF0YSA9IGF2X2Zhc3RfcmVhbGxvYyhzYy0+dHRzX2RhdGEsICZzYy0+dHRzX2FsbG9jYXRlZF9z aXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRfc2l6ZSk7Cisg ICAgICAgIHJlcXVlc3RlZF9zaXplKTsKICAgICBpZiAoIXR0c19kYXRhKQogICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwogICAgIHNjLT50dHNfZGF0YSA9IHR0c19kYXRhOwpAQCAtNTkz OCwxNyArNTk2NCwxNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3RydW4oTU9WQ29udGV4dCAqYywg QVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgLy8gemVybyB2YWx1ZWQgZW50cmll cy4gVGhpcyBlbnN1cmVzIGNsaXBzIHdoaWNoIG1peCBib3hlcyB3aXRoIGFuZAogICAgIC8vIHdp dGhvdXQgdGltZSB0byBzYW1wbGUgZW50cmllcyBkb24ndCBwaWNrdXAgdW5pbml0aWFsaXplZCBk YXRhLgogICAgIG1lbXNldCgodWludDhfdCopKHNjLT50dHNfZGF0YSkgKyBvbGRfYWxsb2NhdGVk X3NpemUsIDAsCi0gICAgICAgICAgIHNjLT50dHNfYWxsb2NhdGVkX3NpemUgLSBvbGRfYWxsb2Nh dGVkX3NpemUpOworICAgICAgICBzYy0+dHRzX2FsbG9jYXRlZF9zaXplIC0gb2xkX2FsbG9jYXRl ZF9zaXplKTsKIAogICAgIGlmIChpbmRleF9lbnRyeV9wb3MgPCBzdGktPm5iX2luZGV4X2VudHJp ZXMpIHsKICAgICAgICAgLy8gTWFrZSBob2xlIGluIGluZGV4X2VudHJpZXMgYW5kIHR0c19kYXRh IGZvciBuZXcgc2FtcGxlcwogICAgICAgICBtZW1tb3ZlKHN0aS0+aW5kZXhfZW50cmllcyArIGlu ZGV4X2VudHJ5X3BvcyArIGVudHJpZXMsCi0gICAgICAgICAgICAgICAgc3RpLT5pbmRleF9lbnRy aWVzICsgaW5kZXhfZW50cnlfcG9zLAotICAgICAgICAgICAgICAgIHNpemVvZigqc3RpLT5pbmRl eF9lbnRyaWVzKSAqCi0gICAgICAgICAgICAgICAgKHN0aS0+bmJfaW5kZXhfZW50cmllcyAtIGlu ZGV4X2VudHJ5X3BvcykpOworICAgICAgICAgICAgc3RpLT5pbmRleF9lbnRyaWVzICsgaW5kZXhf ZW50cnlfcG9zLAorICAgICAgICAgICAgc2l6ZW9mKCpzdGktPmluZGV4X2VudHJpZXMpICoKKyAg ICAgICAgICAgIChzdGktPm5iX2luZGV4X2VudHJpZXMgLSBpbmRleF9lbnRyeV9wb3MpKTsKICAg ICAgICAgbWVtbW92ZShzYy0+dHRzX2RhdGEgKyBpbmRleF9lbnRyeV9wb3MgKyBlbnRyaWVzLAot ICAgICAgICAgICAgICAgIHNjLT50dHNfZGF0YSArIGluZGV4X2VudHJ5X3BvcywKLSAgICAgICAg ICAgICAgICBzaXplb2YoKnNjLT50dHNfZGF0YSkgKiAoc2MtPnR0c19jb3VudCAtIGluZGV4X2Vu dHJ5X3BvcykpOworICAgICAgICAgICAgc2MtPnR0c19kYXRhICsgaW5kZXhfZW50cnlfcG9zLAor ICAgICAgICAgICAgc2l6ZW9mKCpzYy0+dHRzX2RhdGEpICogKHNjLT50dHNfY291bnQgLSBpbmRl eF9lbnRyeV9wb3MpKTsKICAgICAgICAgaWYgKGluZGV4X2VudHJ5X3BvcyA8IHNjLT5jdXJyZW50 X3NhbXBsZSkgewogICAgICAgICAgICAgc2MtPmN1cnJlbnRfc2FtcGxlICs9IGVudHJpZXM7CiAg ICAgICAgIH0KQEAgLTU5NjgsNyArNTk5NCw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfdHJ1bihN T1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICB9CiAKICAg ICBpZiAoaW5kZXhfZW50cnlfcG9zID4gMCkKLSAgICAgICAgcHJldl9kdHMgPSBzdGktPmluZGV4 X2VudHJpZXNbaW5kZXhfZW50cnlfcG9zLTFdLnRpbWVzdGFtcDsKKyAgICAgICAgcHJldl9kdHMg PSBzdGktPmluZGV4X2VudHJpZXNbaW5kZXhfZW50cnlfcG9zIC0gMV0udGltZXN0YW1wOwogCiAg ICAgZm9yIChpID0gMDsgaSA8IGVudHJpZXMgJiYgIXBiLT5lb2ZfcmVhY2hlZDsgaSsrKSB7CiAg ICAgICAgIHVuc2lnbmVkIHNhbXBsZV9zaXplID0gZnJhZy0+c2l6ZTsKQEAgLTU5NzksMzIgKzYw MDUsMzMgQEAgc3RhdGljIGludCBtb3ZfcmVhZF90cnVuKE1PVkNvbnRleHQgKmMsIEFWSU9Db250 ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAgICBpbnQgaW5kZXhfZW50cnlfZmxhZ3MgPSAw OwogCiAgICAgICAgIGlmIChmbGFncyAmIE1PVl9UUlVOX1NBTVBMRV9EVVJBVElPTikgc2FtcGxl X2R1cmF0aW9uID0gYXZpb19yYjMyKHBiKTsKLSAgICAgICAgaWYgKGZsYWdzICYgTU9WX1RSVU5f U0FNUExFX1NJWkUpICAgICBzYW1wbGVfc2l6ZSAgICAgPSBhdmlvX3JiMzIocGIpOwotICAgICAg ICBpZiAoZmxhZ3MgJiBNT1ZfVFJVTl9TQU1QTEVfRkxBR1MpICAgIHNhbXBsZV9mbGFncyAgICA9 IGF2aW9fcmIzMihwYik7Ci0gICAgICAgIGlmIChmbGFncyAmIE1PVl9UUlVOX1NBTVBMRV9DVFMp ICAgICAgY3R0c19kdXJhdGlvbiAgID0gYXZpb19yYjMyKHBiKTsKKyAgICAgICAgaWYgKGZsYWdz ICYgTU9WX1RSVU5fU0FNUExFX1NJWkUpICAgICBzYW1wbGVfc2l6ZSA9IGF2aW9fcmIzMihwYik7 CisgICAgICAgIGlmIChmbGFncyAmIE1PVl9UUlVOX1NBTVBMRV9GTEFHUykgICAgc2FtcGxlX2Zs YWdzID0gYXZpb19yYjMyKHBiKTsKKyAgICAgICAgaWYgKGZsYWdzICYgTU9WX1RSVU5fU0FNUExF X0NUUykgICAgICBjdHRzX2R1cmF0aW9uID0gYXZpb19yYjMyKHBiKTsKIAogICAgICAgICBtb3Zf dXBkYXRlX2R0c19zaGlmdChzYywgY3R0c19kdXJhdGlvbiwgYy0+ZmMpOwogICAgICAgICBpZiAo cHRzICE9IEFWX05PUFRTX1ZBTFVFKSB7CiAgICAgICAgICAgICBkdHMgPSBwdHMgLSBzYy0+ZHRz X3NoaWZ0OwogICAgICAgICAgICAgaWYgKGZsYWdzICYgTU9WX1RSVU5fU0FNUExFX0NUUykgewog ICAgICAgICAgICAgICAgIGR0cyAtPSBjdHRzX2R1cmF0aW9uOwotICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGR0 cyAtPSBzYy0+dGltZV9vZmZzZXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdl9sb2co Yy0+ZmMsIEFWX0xPR19ERUJVRywKLSAgICAgICAgICAgICAgICAgICAicHRzICUiUFJJZDY0IiBj YWxjdWxhdGVkIGR0cyAlIlBSSWQ2NAotICAgICAgICAgICAgICAgICAgICIgc2MtPmR0c19zaGlm dCAlZCBjdHRzLmR1cmF0aW9uICVkIgotICAgICAgICAgICAgICAgICAgICIgc2MtPnRpbWVfb2Zm c2V0ICUiUFJJZDY0Ci0gICAgICAgICAgICAgICAgICAgIiBmbGFncyAmIE1PVl9UUlVOX1NBTVBM RV9DVFMgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgcHRzLCBkdHMsCi0gICAgICAgICAgICAg ICAgICAgc2MtPmR0c19zaGlmdCwgY3R0c19kdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICBz Yy0+dGltZV9vZmZzZXQsIGZsYWdzICYgTU9WX1RSVU5fU0FNUExFX0NUUyk7CisgICAgICAgICAg ICAgICAgInB0cyAlIlBSSWQ2NCIgY2FsY3VsYXRlZCBkdHMgJSJQUklkNjQKKyAgICAgICAgICAg ICAgICAiIHNjLT5kdHNfc2hpZnQgJWQgY3R0cy5kdXJhdGlvbiAlZCIKKyAgICAgICAgICAgICAg ICAiIHNjLT50aW1lX29mZnNldCAlIlBSSWQ2NAorICAgICAgICAgICAgICAgICIgZmxhZ3MgJiBN T1ZfVFJVTl9TQU1QTEVfQ1RTICVkXG4iLAorICAgICAgICAgICAgICAgIHB0cywgZHRzLAorICAg ICAgICAgICAgICAgIHNjLT5kdHNfc2hpZnQsIGN0dHNfZHVyYXRpb24sCisgICAgICAgICAgICAg ICAgc2MtPnRpbWVfb2Zmc2V0LCBmbGFncyAmIE1PVl9UUlVOX1NBTVBMRV9DVFMpOwogICAgICAg ICAgICAgcHRzID0gQVZfTk9QVFNfVkFMVUU7CiAgICAgICAgIH0KIAogICAgICAgICBrZXlmcmFt ZSA9Ci0gICAgICAgICAgICAgICAgIShzYW1wbGVfZmxhZ3MgJiAoTU9WX0ZSQUdfU0FNUExFX0ZM QUdfSVNfTk9OX1NZTkMgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1PVl9G UkFHX1NBTVBMRV9GTEFHX0RFUEVORFNfWUVTKSk7CisgICAgICAgICAgICAhKHNhbXBsZV9mbGFn cyAmIChNT1ZfRlJBR19TQU1QTEVfRkxBR19JU19OT05fU1lOQyB8CisgICAgICAgICAgICAgICAg TU9WX0ZSQUdfU0FNUExFX0ZMQUdfREVQRU5EU19ZRVMpKTsKICAgICAgICAgaWYgKGtleWZyYW1l KSB7CiAgICAgICAgICAgICBkaXN0YW5jZSA9IDA7CiAgICAgICAgICAgICBpbmRleF9lbnRyeV9m bGFncyB8PSBBVklOREVYX0tFWUZSQU1FOwpAQCAtNjAxNCw5ICs2MDQxLDkgQEAgc3RhdGljIGlu dCBtb3ZfcmVhZF90cnVuKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBh dG9tKQogICAgICAgICBpZiAocHJldl9kdHMgPj0gZHRzKQogICAgICAgICAgICAgaW5kZXhfZW50 cnlfZmxhZ3MgfD0gQVZJTkRFWF9ESVNDQVJEX0ZSQU1FOwogCi0gICAgICAgIHN0aS0+aW5kZXhf ZW50cmllc1tpbmRleF9lbnRyeV9wb3NdLnBvcyAgID0gb2Zmc2V0OworICAgICAgICBzdGktPmlu ZGV4X2VudHJpZXNbaW5kZXhfZW50cnlfcG9zXS5wb3MgPSBvZmZzZXQ7CiAgICAgICAgIHN0aS0+ aW5kZXhfZW50cmllc1tpbmRleF9lbnRyeV9wb3NdLnRpbWVzdGFtcCA9IGR0czsKLSAgICAgICAg c3RpLT5pbmRleF9lbnRyaWVzW2luZGV4X2VudHJ5X3Bvc10uc2l6ZSAgPSBzYW1wbGVfc2l6ZTsK KyAgICAgICAgc3RpLT5pbmRleF9lbnRyaWVzW2luZGV4X2VudHJ5X3Bvc10uc2l6ZSA9IHNhbXBs ZV9zaXplOwogICAgICAgICBzdGktPmluZGV4X2VudHJpZXNbaW5kZXhfZW50cnlfcG9zXS5taW5f ZGlzdGFuY2UgPSBkaXN0YW5jZTsKICAgICAgICAgc3RpLT5pbmRleF9lbnRyaWVzW2luZGV4X2Vu dHJ5X3Bvc10uZmxhZ3MgPSBpbmRleF9lbnRyeV9mbGFnczsKIApAQCAtNjAyNiw4ICs2MDUzLDgg QEAgc3RhdGljIGludCBtb3ZfcmVhZF90cnVuKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpw YiwgTU9WQXRvbSBhdG9tKQogICAgICAgICBpbmRleF9lbnRyeV9wb3MrKzsKIAogICAgICAgICBh dl9sb2coYy0+ZmMsIEFWX0xPR19UUkFDRSwgIkFWSW5kZXggc3RyZWFtICVkLCBzYW1wbGUgJWQs IG9mZnNldCAlIlBSSXg2NCIsIGR0cyAlIlBSSWQ2NCIsICIKLSAgICAgICAgICAgICAgICAic2l6 ZSAldSwgZGlzdGFuY2UgJWQsIGtleWZyYW1lICVkXG4iLCBzdC0+aW5kZXgsCi0gICAgICAgICAg ICAgICAgaW5kZXhfZW50cnlfcG9zLCBvZmZzZXQsIGR0cywgc2FtcGxlX3NpemUsIGRpc3RhbmNl LCBrZXlmcmFtZSk7CisgICAgICAgICAgICAic2l6ZSAldSwgZGlzdGFuY2UgJWQsIGtleWZyYW1l ICVkXG4iLCBzdC0+aW5kZXgsCisgICAgICAgICAgICBpbmRleF9lbnRyeV9wb3MsIG9mZnNldCwg ZHRzLCBzYW1wbGVfc2l6ZSwgZGlzdGFuY2UsIGtleWZyYW1lKTsKICAgICAgICAgZGlzdGFuY2Ur KzsKICAgICAgICAgaWYgKGF2X3NhdF9hZGQ2NChkdHMsIHNhbXBsZV9kdXJhdGlvbikgIT0gZHRz ICsgKHVpbnQ2NF90KXNhbXBsZV9kdXJhdGlvbikKICAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwpAQCAtNjAzNiwxMiArNjA2MywxNCBAQCBzdGF0aWMgaW50IG1vdl9yZWFk X3RydW4oTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAg ICAgIGR0cyArPSBzYW1wbGVfZHVyYXRpb247CiAgICAgICAgIG9mZnNldCArPSBzYW1wbGVfc2l6 ZTsKICAgICAgICAgc2MtPmRhdGFfc2l6ZSArPSBzYW1wbGVfc2l6ZTsKLQorICAgICAgICBzYy0+ dG90YWxfZGF0YV9zaXplICs9IHNhbXBsZV9zaXplOworICAgICAgICBzYy0+ZnJhZ21lbnRfZHVy YXRpb25fc3VtICs9IHNhbXBsZV9kdXJhdGlvbjsKKyAgICAgICAgc2MtPmZyYWdtZW50X3NpemVf c3VtICs9IHNhbXBsZV9zaXplOwogICAgICAgICBpZiAoc2FtcGxlX2R1cmF0aW9uIDw9IElOVDY0 X01BWCAtIHNjLT5kdXJhdGlvbl9mb3JfZnBzICYmCiAgICAgICAgICAgICAxIDw9IElOVF9NQVgg LSBzYy0+bmJfZnJhbWVzX2Zvcl9mcHMKLSAgICAgICAgKSB7CisgICAgICAgICAgICApIHsKICAg ICAgICAgICAgIHNjLT5kdXJhdGlvbl9mb3JfZnBzICs9IHNhbXBsZV9kdXJhdGlvbjsKLSAgICAg ICAgICAgIHNjLT5uYl9mcmFtZXNfZm9yX2ZwcyArKzsKKyAgICAgICAgICAgIHNjLT5uYl9mcmFt ZXNfZm9yX2ZwcysrOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChmcmFnX3N0cmVhbV9pbmZv KQpAQCAtNjA1MSwxMyArNjA4MCwxMyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3RydW4oTU9WQ29u dGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgICAgIC8vIGxlYXZl IGluIGluZGV4X2VudHJpZXMgYW5kIHR0c19kYXRhCiAgICAgICAgIGludCBnYXAgPSBlbnRyaWVz IC0gaTsKICAgICAgICAgbWVtbW92ZShzdGktPmluZGV4X2VudHJpZXMgKyBpbmRleF9lbnRyeV9w b3MsCi0gICAgICAgICAgICAgICAgc3RpLT5pbmRleF9lbnRyaWVzICsgaW5kZXhfZW50cnlfcG9z ICsgZ2FwLAotICAgICAgICAgICAgICAgIHNpemVvZigqc3RpLT5pbmRleF9lbnRyaWVzKSAqCi0g ICAgICAgICAgICAgICAgKHN0aS0+bmJfaW5kZXhfZW50cmllcyAtIChpbmRleF9lbnRyeV9wb3Mg KyBnYXApKSk7CisgICAgICAgICAgICBzdGktPmluZGV4X2VudHJpZXMgKyBpbmRleF9lbnRyeV9w b3MgKyBnYXAsCisgICAgICAgICAgICBzaXplb2YoKnN0aS0+aW5kZXhfZW50cmllcykgKgorICAg ICAgICAgICAgKHN0aS0+bmJfaW5kZXhfZW50cmllcyAtIChpbmRleF9lbnRyeV9wb3MgKyBnYXAp KSk7CiAgICAgICAgIG1lbW1vdmUoc2MtPnR0c19kYXRhICsgaW5kZXhfZW50cnlfcG9zLAotICAg ICAgICAgICAgICAgIHNjLT50dHNfZGF0YSArIGluZGV4X2VudHJ5X3BvcyArIGdhcCwKLSAgICAg ICAgICAgICAgICBzaXplb2YoKnNjLT50dHNfZGF0YSkgKgotICAgICAgICAgICAgICAgIChzYy0+ dHRzX2NvdW50IC0gKGluZGV4X2VudHJ5X3BvcyArIGdhcCkpKTsKKyAgICAgICAgICAgIHNjLT50 dHNfZGF0YSArIGluZGV4X2VudHJ5X3BvcyArIGdhcCwKKyAgICAgICAgICAgIHNpemVvZigqc2Mt PnR0c19kYXRhKSAqCisgICAgICAgICAgICAoc2MtPnR0c19jb3VudCAtIChpbmRleF9lbnRyeV9w b3MgKyBnYXApKSk7CiAKICAgICAgICAgc3RpLT5uYl9pbmRleF9lbnRyaWVzIC09IGdhcDsKICAg ICAgICAgc2MtPnR0c19jb3VudCAtPSBnYXA7CkBAIC02MDcyLDcgKzYxMDEsNyBAQCBzdGF0aWMg aW50IG1vdl9yZWFkX3RydW4oTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9t IGF0b20pCiAgICAgLy8gZnJhZ21lbnQgdGhhdCBvdmVybGFwIHdpdGggQVZJTkRFWF9ESVNDQVJE X0ZSQU1FCiAgICAgcHJldl9kdHMgPSBBVl9OT1BUU19WQUxVRTsKICAgICBpZiAoaW5kZXhfZW50 cnlfcG9zID4gMCkKLSAgICAgICAgcHJldl9kdHMgPSBzdGktPmluZGV4X2VudHJpZXNbaW5kZXhf ZW50cnlfcG9zLTFdLnRpbWVzdGFtcDsKKyAgICAgICAgcHJldl9kdHMgPSBzdGktPmluZGV4X2Vu dHJpZXNbaW5kZXhfZW50cnlfcG9zIC0gMV0udGltZXN0YW1wOwogICAgIGZvciAoaW50IGkgPSBp bmRleF9lbnRyeV9wb3M7IGkgPCBzdGktPm5iX2luZGV4X2VudHJpZXM7IGkrKykgewogICAgICAg ICBpZiAocHJldl9kdHMgPCBzdGktPmluZGV4X2VudHJpZXNbaV0udGltZXN0YW1wKQogICAgICAg ICAgICAgYnJlYWs7CkBAIC02MDgzLDcgKzYxMTIsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3Ry dW4oTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgLy8g dGhlIGluZGV4X2VudHJ5IHJlY29yZGVkIGZvciBhbGwgc3Vic2VxdWVudCBtb29mIG11c3QKICAg ICAvLyBiZSBpbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW5zZXJ0ZWQuCiAg ICAgZml4X2ZyYWdfaW5kZXhfZW50cmllcygmYy0+ZnJhZ19pbmRleCwgbmV4dF9mcmFnX2luZGV4 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZy0+dHJhY2tfaWQsIGVudHJpZXMpOwor ICAgICAgICBmcmFnLT50cmFja19pZCwgZW50cmllcyk7CiAKICAgICBpZiAocGItPmVvZl9yZWFj aGVkKSB7CiAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX1dBUk5JTkcsICJyZWFjaGVkIGVv ZiwgY29ycnVwdGVkIFRSVU4gYXRvbVxuIik7CkBAIC02MDk5LDE2ICs2MTI4LDE2IEBAIHN0YXRp YyBpbnQgbW92X3JlYWRfdHJ1bihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0 b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9zaWR4KE1P VkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBt b3ZfcmVhZF9zaWR4KE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9t KQogewogICAgIGludDY0X3Qgc3RyZWFtX3NpemUgPSBhdmlvX3NpemUocGIpOwogICAgIGludDY0 X3Qgb2Zmc2V0ID0gYXZfc2F0X2FkZDY0KGF2aW9fdGVsbChwYiksIGF0b20uc2l6ZSksIHB0cywg dGltZXN0YW1wOwogICAgIHVpbnQ4X3QgdmVyc2lvbiwgaXNfY29tcGxldGU7CiAgICAgaW50NjRf dCBvZmZhZGQ7CiAgICAgdW5zaWduZWQgaSwgaiwgdHJhY2tfaWQsIGl0ZW1fY291bnQ7Ci0gICAg QVZTdHJlYW0gKnN0ID0gTlVMTDsKLSAgICBBVlN0cmVhbSAqcmVmX3N0ID0gTlVMTDsKLSAgICBN T1ZTdHJlYW1Db250ZXh0ICpzYywgKnJlZl9zYyA9IE5VTEw7CisgICAgQVZTdHJlYW0qIHN0ID0g TlVMTDsKKyAgICBBVlN0cmVhbSogcmVmX3N0ID0gTlVMTDsKKyAgICBNT1ZTdHJlYW1Db250ZXh0 KiBzYywgKiByZWZfc2MgPSBOVUxMOwogICAgIEFWUmF0aW9uYWwgdGltZXNjYWxlOwogCiAgICAg dmVyc2lvbiA9IGF2aW9fcjgocGIpOwpAQCAtNjE0MywxMCArNjE3MiwxMSBAQCBzdGF0aWMgaW50 IG1vdl9yZWFkX3NpZHgoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0 b20pCiAKICAgICBpZiAodmVyc2lvbiA9PSAwKSB7CiAgICAgICAgIHB0cyA9IGF2aW9fcmIzMihw Yik7Ci0gICAgICAgIG9mZmFkZD0gYXZpb19yYjMyKHBiKTsKLSAgICB9IGVsc2UgeworICAgICAg ICBvZmZhZGQgPSBhdmlvX3JiMzIocGIpOworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgcHRz ID0gYXZpb19yYjY0KHBiKTsKLSAgICAgICAgb2ZmYWRkPSBhdmlvX3JiNjQocGIpOworICAgICAg ICBvZmZhZGQgPSBhdmlvX3JiNjQocGIpOwogICAgIH0KICAgICBpZiAoYXZfc2F0X2FkZDY0KG9m ZnNldCwgb2ZmYWRkKSAhPSBvZmZzZXQgKyAodWludDY0X3Qpb2ZmYWRkKQogICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKQEAgLTYxNjEsNyArNjE5MSw3IEBAIHN0YXRpYyBpbnQg bW92X3JlYWRfc2lkeChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRv bSkKIAogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtX2NvdW50OyBpKyspIHsKICAgICAgICAgaW50 IGluZGV4OwotICAgICAgICBNT1ZGcmFnbWVudFN0cmVhbUluZm8gKiBmcmFnX3N0cmVhbV9pbmZv OworICAgICAgICBNT1ZGcmFnbWVudFN0cmVhbUluZm8qIGZyYWdfc3RyZWFtX2luZm87CiAgICAg ICAgIHVpbnQzMl90IHNpemUgPSBhdmlvX3JiMzIocGIpOwogICAgICAgICB1aW50MzJfdCBkdXJh dGlvbiA9IGF2aW9fcmIzMihwYik7CiAgICAgICAgIGlmIChzaXplICYgMHg4MDAwMDAwMCkgewpA QCAtNjE3OCwxOSArNjIwOCwyMyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3NpZHgoTU9WQ29udGV4 dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAKICAgICAgICAgaWYgKGF2X3Nh dF9hZGQ2NChvZmZzZXQsIHNpemUpICE9IG9mZnNldCArICh1aW50NjRfdClzaXplIHx8CiAgICAg ICAgICAgICBhdl9zYXRfYWRkNjQocHRzLCBkdXJhdGlvbikgIT0gcHRzICsgKHVpbnQ2NF90KWR1 cmF0aW9uCi0gICAgICAgICkKKyAgICAgICAgICAgICkKICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwogICAgICAgICBvZmZzZXQgKz0gc2l6ZTsKICAgICAgICAgcHRzICs9 IGR1cmF0aW9uOwogICAgIH0KIAogICAgIHN0LT5kdXJhdGlvbiA9IHNjLT50cmFja19lbmQgPSBw dHM7CisgICAgaWYgKHNjLT50b3RhbF9kYXRhX3NpemUgPiAwICYmIHN0LT5kdXJhdGlvbiA+IDAp IHsKKyAgICAgICAgaW50NjRfdCBiaXRyYXRlID0gc2MtPnRvdGFsX2RhdGFfc2l6ZSAqIDggKiBz Yy0+dGltZV9zY2FsZSAvIHN0LT5kdXJhdGlvbjsKKyAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9M T0dfSU5GTywgIkNhbGN1bGF0ZWQgZnVsbCBzdHJlYW0gYml0X3JhdGU9JSJQUklkNjQiXG4iLCBi aXRyYXRlKTsKKyAgICB9CiAKICAgICBzYy0+aGFzX3NpZHggPSAxOwogCiAgICAgLy8gU2VlIGlm IHRoZSByZW1haW5pbmcgYnl0ZXMgYXJlIGp1c3QgYW4gbWZyYSB3aGljaCB3ZSBjYW4gaWdub3Jl LgogICAgIGlzX2NvbXBsZXRlID0gb2Zmc2V0ID09IHN0cmVhbV9zaXplOwotICAgIGlmICghaXNf Y29tcGxldGUgJiYgKHBiLT5zZWVrYWJsZSAmIEFWSU9fU0VFS0FCTEVfTk9STUFMKSAmJiBzdHJl YW1fc2l6ZSA+IDAgKSB7CisgICAgaWYgKCFpc19jb21wbGV0ZSAmJiAocGItPnNlZWthYmxlICYg QVZJT19TRUVLQUJMRV9OT1JNQUwpICYmIHN0cmVhbV9zaXplID4gMCkgewogICAgICAgICBpbnQ2 NF90IHJldDsKICAgICAgICAgaW50NjRfdCBvcmlnaW5hbF9wb3MgPSBhdmlvX3RlbGwocGIpOwog ICAgICAgICBpZiAoIWMtPmhhdmVfcmVhZF9tZnJhX3NpemUpIHsKQEAgLTYyMDksOSArNjI0Myw5 IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfc2lkeChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgLy8gRmluZCBmaXJzdCBlbnRyeSBpbiBmcmFnbWVu dCBpbmRleCB0aGF0IGNhbWUgZnJvbSBhbiBzaWR4LgogICAgICAgICAvLyBUaGlzIHdpbGwgcHJl dHR5IG11Y2ggYWx3YXlzIGJlIHRoZSBmaXJzdCBlbnRyeS4KICAgICAgICAgZm9yIChpID0gMDsg aSA8IGMtPmZyYWdfaW5kZXgubmJfaXRlbXM7IGkrKykgewotICAgICAgICAgICAgTU9WRnJhZ21l bnRJbmRleEl0ZW0gKiBpdGVtID0gJmMtPmZyYWdfaW5kZXguaXRlbVtpXTsKKyAgICAgICAgICAg IE1PVkZyYWdtZW50SW5kZXhJdGVtKiBpdGVtID0gJmMtPmZyYWdfaW5kZXguaXRlbVtpXTsKICAg ICAgICAgICAgIGZvciAoaiA9IDA7IHJlZl9zdCA9PSBOVUxMICYmIGogPCBpdGVtLT5uYl9zdHJl YW1faW5mbzsgaisrKSB7Ci0gICAgICAgICAgICAgICAgTU9WRnJhZ21lbnRTdHJlYW1JbmZvICog c2k7CisgICAgICAgICAgICAgICAgTU9WRnJhZ21lbnRTdHJlYW1JbmZvKiBzaTsKICAgICAgICAg ICAgICAgICBzaSA9ICZpdGVtLT5zdHJlYW1faW5mb1tqXTsKICAgICAgICAgICAgICAgICBpZiAo c2ktPnNpZHhfcHRzICE9IEFWX05PUFRTX1ZBTFVFKSB7CiAgICAgICAgICAgICAgICAgICAgIHJl Zl9zdCA9IGMtPmZjLT5zdHJlYW1zW2pdOwpAQCAtNjIyOCw4ICs2MjYyLDcgQEAgc3RhdGljIGlu dCBtb3ZfcmVhZF9zaWR4KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBh dG9tKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG9mZmFkZCA9PSAw KQotICAgICAgICAgICAgYy0+ZnJhZ19pbmRleC5jb21wbGV0ZSA9IDE7CisgICAgICAgIGMtPmZy YWdfaW5kZXguY29tcGxldGUgPSAxOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNjIzOCw3 ICs2MjcxLDcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zaWR4KE1PVkNvbnRleHQgKmMsIEFWSU9D b250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogLyogdGhpcyBhdG9tIHNob3VsZCBiZSBudWxsIChm cm9tIHNwZWNzKSwgYnV0IHNvbWUgYnVnZ3kgZmlsZXMgcHV0IHRoZSAnbW9vdicgYXRvbSBpbnNp ZGUgaXQuLi4gKi8KIC8qIGxpa2UgdGhlIGZpbGVzIGNyZWF0ZWQgd2l0aCBBZG9iZSBQcmVtaWVy ZSA1LjAsIGZvciBzYW1wbGVzIHNlZSAqLwogLyogaHR0cDovL2dyYXBoaWNzLnR1ZGVsZnQubmwv fndvdXRlci9wdWJsaWNhdGlvbnMvc291bmR0ZXN0cy8gKi8KLXN0YXRpYyBpbnQgbW92X3JlYWRf d2lkZShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRp YyBpbnQgbW92X3JlYWRfd2lkZShNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0 b20gYXRvbSkKIHsKICAgICBpbnQgZXJyOwogCkBAIC02MjUwLDcgKzYyODMsNyBAQCBzdGF0aWMg aW50IG1vdl9yZWFkX3dpZGUoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9t IGF0b20pCiAgICAgfQogICAgIGF0b20udHlwZSA9IGF2aW9fcmwzMihwYik7CiAgICAgYXRvbS5z aXplIC09IDg7Ci0gICAgaWYgKGF0b20udHlwZSAhPSBNS1RBRygnbScsJ2QnLCdhJywndCcpKSB7 CisgICAgaWYgKGF0b20udHlwZSAhPSBNS1RBRygnbScsICdkJywgJ2EnLCAndCcpKSB7CiAgICAg ICAgIGF2aW9fc2tpcChwYiwgYXRvbS5zaXplKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpA QCAtNjI1OCwyNCArNjI5MSwyNCBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3dpZGUoTU9WQ29udGV4 dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmV0dXJuIGVycjsKIH0K IAotc3RhdGljIGludCBtb3ZfcmVhZF9jbW92KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpw YiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9jbW92KE1PVkNvbnRleHQqIGMs IEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewogI2lmIENPTkZJR19aTElCCiAgICAg RkZJT0NvbnRleHQgY3R4OwotICAgIHVpbnQ4X3QgKmNtb3ZfZGF0YTsKLSAgICB1aW50OF90ICpt b292X2RhdGE7IC8qIHVuY29tcHJlc3NlZCBkYXRhICovCisgICAgdWludDhfdCogY21vdl9kYXRh OworICAgIHVpbnQ4X3QqIG1vb3ZfZGF0YTsgLyogdW5jb21wcmVzc2VkIGRhdGEgKi8KICAgICBs b25nIGNtb3ZfbGVuLCBtb292X2xlbjsKICAgICBpbnQgcmV0ID0gLTE7CiAKICAgICBhdmlvX3Ji MzIocGIpOyAvKiBkY29tIGF0b20gKi8KLSAgICBpZiAoYXZpb19ybDMyKHBiKSAhPSBNS1RBRygn ZCcsJ2MnLCdvJywnbScpKQorICAgIGlmIChhdmlvX3JsMzIocGIpICE9IE1LVEFHKCdkJywgJ2Mn LCAnbycsICdtJykpCiAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgIGlm IChhdmlvX3JsMzIocGIpICE9IE1LVEFHKCd6JywnbCcsJ2knLCdiJykpIHsKKyAgICBpZiAoYXZp b19ybDMyKHBiKSAhPSBNS1RBRygneicsICdsJywgJ2knLCAnYicpKSB7CiAgICAgICAgIGF2X2xv ZyhjLT5mYywgQVZfTE9HX0VSUk9SLCAidW5rbm93biBjb21wcmVzc2lvbiBmb3IgY21vdiBhdG9t ICFcbiIpOwogICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICB9CiAgICAg YXZpb19yYjMyKHBiKTsgLyogY212ZCBhdG9tICovCi0gICAgaWYgKGF2aW9fcmwzMihwYikgIT0g TUtUQUcoJ2MnLCdtJywndicsJ2QnKSkKKyAgICBpZiAoYXZpb19ybDMyKHBiKSAhPSBNS1RBRygn YycsICdtJywgJ3YnLCAnZCcpKQogICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK ICAgICBtb292X2xlbiA9IGF2aW9fcmIzMihwYik7IC8qIHVuY29tcHJlc3NlZCBzaXplICovCiAg ICAgY21vdl9sZW4gPSBhdG9tLnNpemUgLSA2ICogNDsKQEAgLTYyOTMsMTEgKzYzMjYsMTEgQEAg c3RhdGljIGludCBtb3ZfcmVhZF9jbW92KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwg TU9WQXRvbSBhdG9tKQogICAgICAgICBnb3RvIGZyZWVfYW5kX3JldHVybjsKIAogICAgIHJldCA9 IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgaWYgKHVuY29tcHJlc3MgKG1vb3ZfZGF0YSwgKHVM b25nZiAqKSAmbW9vdl9sZW4sIChjb25zdCBCeXRlZiAqKWNtb3ZfZGF0YSwgY21vdl9sZW4pICE9 IFpfT0spCisgICAgaWYgKHVuY29tcHJlc3MobW9vdl9kYXRhLCAodUxvbmdmKikmbW9vdl9sZW4s IChjb25zdCBCeXRlZiopY21vdl9kYXRhLCBjbW92X2xlbikgIT0gWl9PSykKICAgICAgICAgZ290 byBmcmVlX2FuZF9yZXR1cm47CiAgICAgZmZpb19pbml0X3JlYWRfY29udGV4dCgmY3R4LCBtb292 X2RhdGEsIG1vb3ZfbGVuKTsKICAgICBjdHgucHViLnNlZWthYmxlID0gQVZJT19TRUVLQUJMRV9O T1JNQUw7Ci0gICAgYXRvbS50eXBlID0gTUtUQUcoJ20nLCdvJywnbycsJ3YnKTsKKyAgICBhdG9t LnR5cGUgPSBNS1RBRygnbScsICdvJywgJ28nLCAndicpOwogICAgIGF0b20uc2l6ZSA9IG1vb3Zf bGVuOwogICAgIHJldCA9IG1vdl9yZWFkX2RlZmF1bHQoYywgJmN0eC5wdWIsIGF0b20pOwogZnJl ZV9hbmRfcmV0dXJuOgpAQCAtNjMxMSwxNSArNjM0NCwxNSBAQCBmcmVlX2FuZF9yZXR1cm46CiB9 CiAKIC8qIGVkaXQgbGlzdCBhdG9tICovCi1zdGF0aWMgaW50IG1vdl9yZWFkX2Vsc3QoTU9WQ29u dGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9y ZWFkX2Vsc3QoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7 Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7CisgICAgTU9WU3RyZWFtQ29udGV4dCogc2M7CiAg ICAgaW50IGksIGVkaXRfY291bnQsIHZlcnNpb247CiAgICAgaW50NjRfdCBlbHN0X2VudHJ5X3Np emU7CiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0cmVhbXMgPCAxIHx8IGMtPmlnbm9yZV9lZGl0bGlz dCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgc2MgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJf c3RyZWFtcy0xXS0+cHJpdl9kYXRhOworICAgIHNjID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5i X3N0cmVhbXMgLSAxXS0+cHJpdl9kYXRhOwogCiAgICAgdmVyc2lvbiA9IGF2aW9fcjgocGIpOyAv KiB2ZXJzaW9uICovCiAgICAgYXZpb19yYjI0KHBiKTsgLyogZmxhZ3MgKi8KQEAgLTYzMzAsOSAr NjM2MywxMCBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2Vsc3QoTU9WQ29udGV4dCAqYywgQVZJT0Nv bnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgaWYgKGF0b20uc2l6ZSAhPSBlZGl0X2NvdW50 ICogZWxzdF9lbnRyeV9zaXplKSB7CiAgICAgICAgIGlmIChjLT5mYy0+c3RyaWN0X3N0ZF9jb21w bGlhbmNlID49IEZGX0NPTVBMSUFOQ0VfU1RSSUNUKSB7CiAgICAgICAgICAgICBhdl9sb2coYy0+ ZmMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgZWRpdCBsaXN0IGVudHJ5X2NvdW50OiAlZCBmb3Ig ZWxzdCBhdG9tIG9mIHNpemU6ICUiUFJJZDY0IiBieXRlcy5cbiIsCi0gICAgICAgICAgICAgICAg ICAgZWRpdF9jb3VudCwgYXRvbS5zaXplICsgOCk7CisgICAgICAgICAgICAgICAgZWRpdF9jb3Vu dCwgYXRvbS5zaXplICsgOCk7CiAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKICAgICAgICAg ICAgIGVkaXRfY291bnQgPSBhdG9tLnNpemUgLyBlbHN0X2VudHJ5X3NpemU7CiAgICAgICAgICAg ICBpZiAoZWRpdF9jb3VudCAqIGVsc3RfZW50cnlfc2l6ZSAhPSBhdG9tLnNpemUpIHsKICAgICAg ICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19XQVJOSU5HLCAiRUxTVCBhdG9tIG9mICUi UFJJZDY0IiBieXRlcywgYmlnZ2VyIHRoYW4gJWQgZW50cmllcy5cbiIsIGF0b20uc2l6ZSwgZWRp dF9jb3VudCk7CkBAIC02MzUyLDMxICs2Mzg2LDMyIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZWxz dChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKIAogICAgIGF2 X2xvZyhjLT5mYywgQVZfTE9HX1RSQUNFLCAidHJhY2tbJXVdLmVkaXRfY291bnQgPSAlaVxuIiwg Yy0+ZmMtPm5iX3N0cmVhbXMgLSAxLCBlZGl0X2NvdW50KTsKICAgICBmb3IgKGkgPSAwOyBpIDwg ZWRpdF9jb3VudCAmJiBhdG9tLnNpemUgPiAwICYmICFwYi0+ZW9mX3JlYWNoZWQ7IGkrKykgewot ICAgICAgICBNT1ZFbHN0ICplID0gJnNjLT5lbHN0X2RhdGFbaV07CisgICAgICAgIE1PVkVsc3Qq IGUgPSAmc2MtPmVsc3RfZGF0YVtpXTsKIAogICAgICAgICBpZiAodmVyc2lvbiA9PSAxKSB7CiAg ICAgICAgICAgICBlLT5kdXJhdGlvbiA9IGF2aW9fcmI2NChwYik7Ci0gICAgICAgICAgICBlLT50 aW1lICAgICA9IGF2aW9fcmI2NChwYik7CisgICAgICAgICAgICBlLT50aW1lID0gYXZpb19yYjY0 KHBiKTsKICAgICAgICAgICAgIGF0b20uc2l6ZSAtPSAxNjsKLSAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgfQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGUtPmR1cmF0aW9uID0gYXZpb19y YjMyKHBiKTsgLyogc2VnbWVudCBkdXJhdGlvbiAqLwotICAgICAgICAgICAgZS0+dGltZSAgICAg PSAoaW50MzJfdClhdmlvX3JiMzIocGIpOyAvKiBtZWRpYSB0aW1lICovCisgICAgICAgICAgICBl LT50aW1lID0gKGludDMyX3QpYXZpb19yYjMyKHBiKTsgLyogbWVkaWEgdGltZSAqLwogICAgICAg ICAgICAgYXRvbS5zaXplIC09IDg7CiAgICAgICAgIH0KICAgICAgICAgZS0+cmF0ZSA9IGF2aW9f cmIzMihwYikgLyA2NTUzNi4wOwogICAgICAgICBhdG9tLnNpemUgLT0gNDsKICAgICAgICAgYXZf bG9nKGMtPmZjLCBBVl9MT0dfVFJBQ0UsICJkdXJhdGlvbj0lIlBSSWQ2NCIgdGltZT0lIlBSSWQ2 NCIgcmF0ZT0lZlxuIiwKLSAgICAgICAgICAgICAgIGUtPmR1cmF0aW9uLCBlLT50aW1lLCBlLT5y YXRlKTsKKyAgICAgICAgICAgIGUtPmR1cmF0aW9uLCBlLT50aW1lLCBlLT5yYXRlKTsKIAogICAg ICAgICBpZiAoZS0+dGltZSA8IDAgJiYgZS0+dGltZSAhPSAtMSAmJgogICAgICAgICAgICAgYy0+ ZmMtPnN0cmljdF9zdGRfY29tcGxpYW5jZSA+PSBGRl9DT01QTElBTkNFX1NUUklDVCkgewogICAg ICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsICJUcmFjayAlZCwgZWRpdCAlZDog SW52YWxpZCBlZGl0IGxpc3QgbWVkaWEgdGltZT0lIlBSSWQ2NCJcbiIsCi0gICAgICAgICAgICAg ICAgICAgYy0+ZmMtPm5iX3N0cmVhbXMtMSwgaSwgZS0+dGltZSk7CisgICAgICAgICAgICAgICAg Yy0+ZmMtPm5iX3N0cmVhbXMgLSAxLCBpLCBlLT50aW1lKTsKICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOwogICAgICAgICB9CiAgICAgICAgIGlmIChlLT5kdXJhdGlvbiA8 IDApIHsKICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0VSUk9SLCAiVHJhY2sgJWQs IGVkaXQgJWQ6IEludmFsaWQgZWRpdCBsaXN0IGR1cmF0aW9uPSUiUFJJZDY0IlxuIiwKLSAgICAg ICAgICAgICAgICAgICBjLT5mYy0+bmJfc3RyZWFtcy0xLCBpLCBlLT5kdXJhdGlvbik7CisgICAg ICAgICAgICAgICAgYy0+ZmMtPm5iX3N0cmVhbXMgLSAxLCBpLCBlLT5kdXJhdGlvbik7CiAgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICAgICAgfQogICAgIH0KQEAg LTYzODUsOSArNjQyMCw5IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZWxzdChNT1ZDb250ZXh0ICpj LCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3Rh dGljIGludCBtb3ZfcmVhZF90bWNkKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9W QXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF90bWNkKE1PVkNvbnRleHQqIGMsIEFWSU9D b250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjOwor ICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjOwogCiAgICAgaWYgKGMtPmZjLT5uYl9zdHJlYW1zIDwg MSkKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CkBAIC02Mzk2LDkgKzY0MzEs OSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3RtY2QoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQg KnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3Jl YWRfdnBjYyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0 YXRpYyBpbnQgbW92X3JlYWRfdnBjYyhNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1P VkF0b20gYXRvbSkKIHsKLSAgICBBVlN0cmVhbSAqc3Q7CisgICAgQVZTdHJlYW0qIHN0OwogICAg IGludCB2ZXJzaW9uLCBjb2xvcl9yYW5nZSwgY29sb3JfcHJpbWFyaWVzLCBjb2xvcl90cmMsIGNv bG9yX3NwYWNlOwogCiAgICAgaWYgKGMtPmZjLT5uYl9zdHJlYW1zIDwgMSkKQEAgLTY0MTgsMTAg KzY0NTMsMTAgQEAgc3RhdGljIGludCBtb3ZfcmVhZF92cGNjKE1PVkNvbnRleHQgKmMsIEFWSU9D b250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIGF2aW9fc2tpcChwYiwgMyk7IC8qIGZsYWdz ICovCiAKICAgICBhdmlvX3NraXAocGIsIDIpOyAvKiBwcm9maWxlICsgbGV2ZWwgKi8KLSAgICBj b2xvcl9yYW5nZSAgICAgPSBhdmlvX3I4KHBiKTsgLyogYml0RGVwdGgsIGNocm9tYVN1YnNhbXBs aW5nLCB2aWRlb0Z1bGxSYW5nZUZsYWcgKi8KKyAgICBjb2xvcl9yYW5nZSA9IGF2aW9fcjgocGIp OyAvKiBiaXREZXB0aCwgY2hyb21hU3Vic2FtcGxpbmcsIHZpZGVvRnVsbFJhbmdlRmxhZyAqLwog ICAgIGNvbG9yX3ByaW1hcmllcyA9IGF2aW9fcjgocGIpOwotICAgIGNvbG9yX3RyYyAgICAgICA9 IGF2aW9fcjgocGIpOwotICAgIGNvbG9yX3NwYWNlICAgICA9IGF2aW9fcjgocGIpOworICAgIGNv bG9yX3RyYyA9IGF2aW9fcjgocGIpOworICAgIGNvbG9yX3NwYWNlID0gYXZpb19yOChwYik7CiAg ICAgaWYgKGF2aW9fcmIxNihwYikpIC8qIGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXplICovCiAg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogCkBAIC02NDMyLDE3ICs2NDY3LDE3 IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfdnBjYyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIE1PVkF0b20gYXRvbSkKICAgICBpZiAoIWF2X2NvbG9yX3NwYWNlX25hbWUoY29sb3Jfc3Bh Y2UpKQogICAgICAgICBjb2xvcl9zcGFjZSA9IEFWQ09MX1NQQ19VTlNQRUNJRklFRDsKIAotICAg IHN0LT5jb2RlY3Bhci0+Y29sb3JfcmFuZ2UgICAgID0gKGNvbG9yX3JhbmdlICYgMSkgPyBBVkNP TF9SQU5HRV9KUEVHIDogQVZDT0xfUkFOR0VfTVBFRzsKKyAgICBzdC0+Y29kZWNwYXItPmNvbG9y X3JhbmdlID0gKGNvbG9yX3JhbmdlICYgMSkgPyBBVkNPTF9SQU5HRV9KUEVHIDogQVZDT0xfUkFO R0VfTVBFRzsKICAgICBzdC0+Y29kZWNwYXItPmNvbG9yX3ByaW1hcmllcyA9IGNvbG9yX3ByaW1h cmllczsKLSAgICBzdC0+Y29kZWNwYXItPmNvbG9yX3RyYyAgICAgICA9IGNvbG9yX3RyYzsKLSAg ICBzdC0+Y29kZWNwYXItPmNvbG9yX3NwYWNlICAgICA9IGNvbG9yX3NwYWNlOworICAgIHN0LT5j b2RlY3Bhci0+Y29sb3JfdHJjID0gY29sb3JfdHJjOworICAgIHN0LT5jb2RlY3Bhci0+Y29sb3Jf c3BhY2UgPSBjb2xvcl9zcGFjZTsKIAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1v dl9yZWFkX3NtZG0oTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20p CitzdGF0aWMgaW50IG1vdl9yZWFkX3NtZG0oTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBi LCBNT1ZBdG9tIGF0b20pCiB7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7CisgICAgTU9WU3Ry ZWFtQ29udGV4dCogc2M7CiAgICAgaW50IGksIHZlcnNpb247CiAKICAgICBpZiAoYy0+ZmMtPm5i X3N0cmVhbXMgPCAxKQpAQCAtNjQ4NywxMCArNjUyMiwxMCBAQCBzdGF0aWMgaW50IG1vdl9yZWFk X3NtZG0oTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAg cmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfbWRjdihNT1ZDb250ZXh0ICpjLCBB VklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfbWRjdihN T1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBNT1ZT dHJlYW1Db250ZXh0ICpzYzsKLSAgICBjb25zdCBpbnQgbWFwcGluZ1szXSA9IHsxLCAyLCAwfTsK KyAgICBNT1ZTdHJlYW1Db250ZXh0KiBzYzsKKyAgICBjb25zdCBpbnQgbWFwcGluZ1szXSA9IHsg MSwgMiwgMCB9OwogICAgIGNvbnN0IGludCBjaHJvbWFfZGVuID0gNTAwMDA7CiAgICAgY29uc3Qg aW50IGx1bWFfZGVuID0gMTAwMDA7CiAgICAgaW50IGk7CkBAIC02NTMxLDkgKzY1NjYsOSBAQCBz dGF0aWMgaW50IG1vdl9yZWFkX21kY3YoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBN T1ZBdG9tIGF0b20pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfY29s bChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBp bnQgbW92X3JlYWRfY29sbChNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20g YXRvbSkKIHsKLSAgICBNT1ZTdHJlYW1Db250ZXh0ICpzYzsKKyAgICBNT1ZTdHJlYW1Db250ZXh0 KiBzYzsKICAgICBpbnQgdmVyc2lvbjsKIAogICAgIGlmIChjLT5mYy0+bmJfc3RyZWFtcyA8IDEp CkBAIC02NTUzLDcgKzY1ODgsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2NvbGwoTU9WQ29udGV4 dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgfQogICAgIGF2aW9fc2tp cChwYiwgMyk7IC8qIGZsYWdzICovCiAKLSAgICBpZiAoc2MtPmNvbGwpeworICAgIGlmIChzYy0+ Y29sbCkgewogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19XQVJOSU5HLCAiSWdub3Jpbmcg ZHVwbGljYXRlIENPTExcbiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC02NTYyLDE1 ICs2NTk3LDE1IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfY29sbChNT1ZDb250ZXh0ICpjLCBBVklP Q29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBpZiAoIXNjLT5jb2xsKQogICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOwogCi0gICAgc2MtPmNvbGwtPk1heENMTCAgPSBhdmlvX3Ji MTYocGIpOworICAgIHNjLT5jb2xsLT5NYXhDTEwgPSBhdmlvX3JiMTYocGIpOwogICAgIHNjLT5j b2xsLT5NYXhGQUxMID0gYXZpb19yYjE2KHBiKTsKIAogICAgIHJldHVybiAwOwogfQogCi1zdGF0 aWMgaW50IG1vdl9yZWFkX2NsbGkoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZB dG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX2NsbGkoTU9WQ29udGV4dCogYywgQVZJT0Nv bnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7Cisg ICAgTU9WU3RyZWFtQ29udGV4dCogc2M7CiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0cmVhbXMgPCAx KQogICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKQEAgLTY1ODIsNyArNjYxNyw3 IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfY2xsaShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAg ICAgfQogCi0gICAgaWYgKHNjLT5jb2xsKXsKKyAgICBpZiAoc2MtPmNvbGwpIHsKICAgICAgICAg YXZfbG9nKGMtPmZjLCBBVl9MT0dfV0FSTklORywgIklnbm9yaW5nIGR1cGxpY2F0ZSBDTExJL0NP TExcbiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC02NTkxLDE1ICs2NjI2LDE1IEBA IHN0YXRpYyBpbnQgbW92X3JlYWRfY2xsaShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIs IE1PVkF0b20gYXRvbSkKICAgICBpZiAoIXNjLT5jb2xsKQogICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwogCi0gICAgc2MtPmNvbGwtPk1heENMTCAgPSBhdmlvX3JiMTYocGIpOworICAg IHNjLT5jb2xsLT5NYXhDTEwgPSBhdmlvX3JiMTYocGIpOwogICAgIHNjLT5jb2xsLT5NYXhGQUxM ID0gYXZpb19yYjE2KHBiKTsKIAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1vdl9y ZWFkX2FtdmUoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitz dGF0aWMgaW50IG1vdl9yZWFkX2FtdmUoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBN T1ZBdG9tIGF0b20pCiB7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7CisgICAgTU9WU3RyZWFt Q29udGV4dCogc2M7CiAgICAgY29uc3QgaW50IGlsbHVtaW5hbmNlX2RlbiA9IDEwMDAwOwogICAg IGNvbnN0IGludCBhbWJpZW50X2RlbiA9IDUwMDAwOwogICAgIGlmIChjLT5mYy0+bmJfc3RyZWFt cyA8IDEpCkBAIC02NjA5LDIzICs2NjQ0LDIzIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfYW12ZShN T1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgYXZf bG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsICJFbXB0eSBBbWJpZW50IFZpZXdpbmcgRW52aXJvbm1l bnQgSW5mbyBib3hcbiIpOwogICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAg ICB9Ci0gICAgaWYgKHNjLT5hbWJpZW50KXsKKyAgICBpZiAoc2MtPmFtYmllbnQpIHsKICAgICAg ICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfV0FSTklORywgIklnbm9yaW5nIGR1cGxpY2F0ZSBBTVZF XG4iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHNjLT5hbWJpZW50ID0gYXZfYW1i aWVudF92aWV3aW5nX2Vudmlyb25tZW50X2FsbG9jKCZzYy0+YW1iaWVudF9zaXplKTsKICAgICBp ZiAoIXNjLT5hbWJpZW50KQogICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotICAgIHNj LT5hbWJpZW50LT5hbWJpZW50X2lsbHVtaW5hbmNlICA9IGF2X21ha2VfcShhdmlvX3JiMzIocGIp LCBpbGx1bWluYW5jZV9kZW4pOworICAgIHNjLT5hbWJpZW50LT5hbWJpZW50X2lsbHVtaW5hbmNl ID0gYXZfbWFrZV9xKGF2aW9fcmIzMihwYiksIGlsbHVtaW5hbmNlX2Rlbik7CiAgICAgc2MtPmFt YmllbnQtPmFtYmllbnRfbGlnaHRfeCA9IGF2X21ha2VfcShhdmlvX3JiMTYocGIpLCBhbWJpZW50 X2Rlbik7CiAgICAgc2MtPmFtYmllbnQtPmFtYmllbnRfbGlnaHRfeSA9IGF2X21ha2VfcShhdmlv X3JiMTYocGIpLCBhbWJpZW50X2Rlbik7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQg bW92X3JlYWRfc3QzZChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRv bSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfc3QzZChNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCog cGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBBVlN0cmVhbSAqc3Q7Ci0gICAgTU9WU3RyZWFtQ29u dGV4dCAqc2M7CisgICAgQVZTdHJlYW0qIHN0OworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjOwog ICAgIGVudW0gQVZTdGVyZW8zRFR5cGUgdHlwZTsKICAgICBpbnQgbW9kZTsKIApAQCAtNjY2OSwx MCArNjcwNCwxMCBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3N0M2QoTU9WQ29udGV4dCAqYywgQVZJ T0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBp bnQgbW92X3JlYWRfcGFjayhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20g YXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfcGFjayhNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4 dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBBVlN0cmVhbSAqc3Q7Ci0gICAgTU9WU3RyZWFt Q29udGV4dCAqc2M7CisgICAgQVZTdHJlYW0qIHN0OworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNj OwogICAgIGludCBzaXplID0gMDsKICAgICBpbnQ2NF90IHJlbWFpbmluZzsKICAgICB1aW50MzJf dCB0YWcgPSAwOwpAQCAtNjY4NywxNCArNjcyMiwxNCBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3Bh Y2soTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmVt YWluaW5nID0gYXRvbS5zaXplOwogICAgIHdoaWxlIChyZW1haW5pbmcgPiAwKSB7CiAgICAgICAg IHNpemUgPSBhdmlvX3JiMzIocGIpOwotICAgICAgICBpZiAoc2l6ZSA8IDggfHwgc2l6ZSA+IHJl bWFpbmluZyApIHsKKyAgICAgICAgaWYgKHNpemUgPCA4IHx8IHNpemUgPiByZW1haW5pbmcpIHsK ICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBjaGlsZCBz aXplIGluIHBhY2sgYm94XG4iKTsKICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOwogICAgICAgICB9CiAKICAgICAgICAgdGFnID0gYXZpb19ybDMyKHBiKTsKICAgICAgICAg c3dpdGNoICh0YWcpIHsKLSAgICAgICAgY2FzZSBNS1RBRygncCcsJ2snLCdpJywnbicpOiB7Cisg ICAgICAgIGNhc2UgTUtUQUcoJ3AnLCAnaycsICdpJywgJ24nKTogewogICAgICAgICAgICAgaWYg KHNpemUgIT0gMTYpIHsKICAgICAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19FUlJP UiwgIkludmFsaWQgc2l6ZSBvZiBwa2luIGJveDogJWRcbiIsIHNpemUpOwogICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwpAQCAtNjcwNCwxOCArNjczOSwxNyBAQCBz dGF0aWMgaW50IG1vdl9yZWFkX3BhY2soTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBN T1ZBdG9tIGF0b20pCiAKICAgICAgICAgICAgIHRhZyA9IGF2aW9fcmwzMihwYik7CiAgICAgICAg ICAgICBzd2l0Y2ggKHRhZykgewotICAgICAgICAgICAgY2FzZSBNS1RBRygncycsJ2knLCdkJywn ZScpOgorICAgICAgICAgICAgY2FzZSBNS1RBRygncycsICdpJywgJ2QnLCAnZScpOgogICAgICAg ICAgICAgICAgIHR5cGUgPSBBVl9TVEVSRU8zRF9TSURFQllTSURFOwogICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBNS1RBRygnbycsJ3YnLCdlJywncicpOgorICAgICAg ICAgICAgY2FzZSBNS1RBRygnbycsICd2JywgJ2UnLCAncicpOgogICAgICAgICAgICAgICAgIHR5 cGUgPSBBVl9TVEVSRU8zRF9UT1BCT1RUT007CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB2YWx1ZSB3aWxs IGJlIHNldCBpbiBhbm90aGVyIGxheWVyCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX1dBUk5J TkcsICJVbmtub3duIHRhZyBpbiBwa2luOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAg YXZfZm91cmNjMnN0cih0YWcpKTsKKyAgICAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xP R19XQVJOSU5HLCAiVW5rbm93biB0YWcgaW4gcGtpbjogMHglMDhYXG4iLCB0YWcpOwogICAgICAg ICAgICAgICAgIGF2aW9fc2tpcChwYiwgc2l6ZSAtIDgpOwogICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgfQpAQCAtNjcyMyw4ICs2NzU3LDcgQEAgc3RhdGljIGludCBtb3ZfcmVh ZF9wYWNrKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg IGF2X2xvZyhjLT5mYywgQVZfTE9HX1dBUk5JTkcsICJVbmtub3duIHRhZyBpbiBwYWNrOiAlc1xu IiwKLSAgICAgICAgICAgICAgICAgICBhdl9mb3VyY2Myc3RyKHRhZykpOworICAgICAgICAgICAg YXZfbG9nKGMtPmZjLCBBVl9MT0dfV0FSTklORywgIlVua25vd24gdGFnIGluIHBhY2s6IDB4JTA4 WFxuIiwgdGFnKTsKICAgICAgICAgICAgIGF2aW9fc2tpcChwYiwgc2l6ZSAtIDgpOwogICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTY3NTAsMTAgKzY3ODMsMTAgQEAgc3RhdGljIGlu dCBtb3ZfcmVhZF9wYWNrKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBh dG9tKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFkX3N2M2QoTU9WQ29u dGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9y ZWFkX3N2M2QoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7 Ci0gICAgQVZTdHJlYW0gKnN0OwotICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjOworICAgIEFWU3Ry ZWFtKiBzdDsKKyAgICBNT1ZTdHJlYW1Db250ZXh0KiBzYzsKICAgICBpbnQgc2l6ZSwgdmVyc2lv biwgbGF5b3V0OwogICAgIGludDMyX3QgeWF3LCBwaXRjaCwgcm9sbDsKICAgICB1aW50MzJfdCBs ID0gMCwgdCA9IDAsIHIgPSAwLCBiID0gMDsKQEAgLTY3NzYsMTQgKzY4MDksMTQgQEAgc3RhdGlj IGludCBtb3ZfcmVhZF9zdjNkKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRv bSBhdG9tKQogICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKIAogICAgIHRhZyA9 IGF2aW9fcmwzMihwYik7Ci0gICAgaWYgKHRhZyAhPSBNS1RBRygncycsJ3YnLCdoJywnZCcpKSB7 CisgICAgaWYgKHRhZyAhPSBNS1RBRygncycsICd2JywgJ2gnLCAnZCcpKSB7CiAgICAgICAgIGF2 X2xvZyhjLT5mYywgQVZfTE9HX0VSUk9SLCAiTWlzc2luZyBzcGhlcmljYWwgdmlkZW8gaGVhZGVy XG4iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHZlcnNpb24gPSBhdmlvX3I4KHBi KTsKICAgICBpZiAodmVyc2lvbiAhPSAwKSB7CiAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9H X1dBUk5JTkcsICJVbmtub3duIHNwaGVyaWNhbCB2ZXJzaW9uICVkXG4iLAotICAgICAgICAgICAg ICAgdmVyc2lvbik7CisgICAgICAgICAgICB2ZXJzaW9uKTsKICAgICAgICAgcmV0dXJuIDA7CiAg ICAgfQogICAgIGF2aW9fc2tpcChwYiwgMyk7IC8qIGZsYWdzICovCkBAIC02Nzk0LDcgKzY4Mjcs NyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3N2M2QoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQg KnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwog CiAgICAgdGFnID0gYXZpb19ybDMyKHBiKTsKLSAgICBpZiAodGFnICE9IE1LVEFHKCdwJywncics J28nLCdqJykpIHsKKyAgICBpZiAodGFnICE9IE1LVEFHKCdwJywgJ3InLCAnbycsICdqJykpIHsK ICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsICJNaXNzaW5nIHByb2plY3Rpb24g Ym94XG4iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNjgwNCwyMiArNjgzNywyMiBA QCBzdGF0aWMgaW50IG1vdl9yZWFkX3N2M2QoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBi LCBNT1ZBdG9tIGF0b20pCiAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogCiAg ICAgdGFnID0gYXZpb19ybDMyKHBiKTsKLSAgICBpZiAodGFnICE9IE1LVEFHKCdwJywncicsJ2gn LCdkJykpIHsKKyAgICBpZiAodGFnICE9IE1LVEFHKCdwJywgJ3InLCAnaCcsICdkJykpIHsKICAg ICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsICJNaXNzaW5nIHByb2plY3Rpb24gaGVh ZGVyIGJveFxuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICB2ZXJzaW9uID0gYXZp b19yOChwYik7CiAgICAgaWYgKHZlcnNpb24gIT0gMCkgewogICAgICAgICBhdl9sb2coYy0+ZmMs IEFWX0xPR19XQVJOSU5HLCAiVW5rbm93biBzcGhlcmljYWwgdmVyc2lvbiAlZFxuIiwKLSAgICAg ICAgICAgICAgIHZlcnNpb24pOworICAgICAgICAgICAgdmVyc2lvbik7CiAgICAgICAgIHJldHVy biAwOwogICAgIH0KICAgICBhdmlvX3NraXAocGIsIDMpOyAvKiBmbGFncyAqLwogCiAgICAgLyog MTYuMTYgZml4ZWQgcG9pbnQgKi8KLSAgICB5YXcgICA9IGF2aW9fcmIzMihwYik7CisgICAgeWF3 ID0gYXZpb19yYjMyKHBiKTsKICAgICBwaXRjaCA9IGF2aW9fcmIzMihwYik7Ci0gICAgcm9sbCAg PSBhdmlvX3JiMzIocGIpOworICAgIHJvbGwgPSBhdmlvX3JiMzIocGIpOwogCiAgICAgc2l6ZSA9 IGF2aW9fcmIzMihwYik7CiAgICAgaWYgKHNpemUgPiBhdG9tLnNpemUpCkBAIC02ODI5LDIyICs2 ODYyLDIyIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfc3YzZChNT1ZDb250ZXh0ICpjLCBBVklPQ29u dGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICB2ZXJzaW9uID0gYXZpb19yOChwYik7CiAgICAg aWYgKHZlcnNpb24gIT0gMCkgewogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19XQVJOSU5H LCAiVW5rbm93biBzcGhlcmljYWwgdmVyc2lvbiAlZFxuIiwKLSAgICAgICAgICAgICAgIHZlcnNp b24pOworICAgICAgICAgICAgdmVyc2lvbik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAg ICBhdmlvX3NraXAocGIsIDMpOyAvKiBmbGFncyAqLwogICAgIHN3aXRjaCAodGFnKSB7Ci0gICAg Y2FzZSBNS1RBRygnYycsJ2InLCdtJywncCcpOgorICAgIGNhc2UgTUtUQUcoJ2MnLCAnYicsICdt JywgJ3AnKToKICAgICAgICAgbGF5b3V0ID0gYXZpb19yYjMyKHBiKTsKICAgICAgICAgaWYgKGxh eW91dCkgewogICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfV0FSTklORywKLSAgICAg ICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgY3ViZW1hcCBsYXlvdXQgJWRcbiIsIGxheW91dCk7 CisgICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIGN1YmVtYXAgbGF5b3V0ICVkXG4iLCBsYXlv dXQpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgcHJvamVjdGlv biA9IEFWX1NQSEVSSUNBTF9DVUJFTUFQOwogICAgICAgICBwYWRkaW5nID0gYXZpb19yYjMyKHBi KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRygnZScsJ3EnLCd1JywnaScpOgorICAg IGNhc2UgTUtUQUcoJ2UnLCAncScsICd1JywgJ2knKToKICAgICAgICAgdCA9IGF2aW9fcmIzMihw Yik7CiAgICAgICAgIGIgPSBhdmlvX3JiMzIocGIpOwogICAgICAgICBsID0gYXZpb19yYjMyKHBi KTsKQEAgLTY4NTIsOCArNjg4NSw4IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfc3YzZChNT1ZDb250 ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKIAogICAgICAgICBpZiAoYiA+ PSBVSU5UX01BWCAtIHQgfHwgciA+PSBVSU5UX01BWCAtIGwpIHsKICAgICAgICAgICAgIGF2X2xv ZyhjLT5mYywgQVZfTE9HX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGJvdW5k aW5nIHJlY3RhbmdsZSBjb29yZGluYXRlcyAiCi0gICAgICAgICAgICAgICAgICAgIiUiUFJJdTMy IiwlIlBSSXUzMiIsJSJQUkl1MzIiLCUiUFJJdTMyIlxuIiwgbCwgdCwgciwgYik7CisgICAgICAg ICAgICAgICAgIkludmFsaWQgYm91bmRpbmcgcmVjdGFuZ2xlIGNvb3JkaW5hdGVzICIKKyAgICAg ICAgICAgICAgICAiJSJQUkl1MzIiLCUiUFJJdTMyIiwlIlBSSXUzMiIsJSJQUkl1MzIiXG4iLCBs LCB0LCByLCBiKTsKICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogICAg ICAgICB9CiAKQEAgLTY4NzMsMjQgKzY5MDYsMjQgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zdjNk KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogCiAgICAgc2Mt PnNwaGVyaWNhbC0+cHJvamVjdGlvbiA9IHByb2plY3Rpb247CiAKLSAgICBzYy0+c3BoZXJpY2Fs LT55YXcgICA9IHlhdzsKKyAgICBzYy0+c3BoZXJpY2FsLT55YXcgPSB5YXc7CiAgICAgc2MtPnNw aGVyaWNhbC0+cGl0Y2ggPSBwaXRjaDsKLSAgICBzYy0+c3BoZXJpY2FsLT5yb2xsICA9IHJvbGw7 CisgICAgc2MtPnNwaGVyaWNhbC0+cm9sbCA9IHJvbGw7CiAKICAgICBzYy0+c3BoZXJpY2FsLT5w YWRkaW5nID0gcGFkZGluZzsKIAotICAgIHNjLT5zcGhlcmljYWwtPmJvdW5kX2xlZnQgICA9IGw7 Ci0gICAgc2MtPnNwaGVyaWNhbC0+Ym91bmRfdG9wICAgID0gdDsKLSAgICBzYy0+c3BoZXJpY2Fs LT5ib3VuZF9yaWdodCAgPSByOworICAgIHNjLT5zcGhlcmljYWwtPmJvdW5kX2xlZnQgPSBsOwor ICAgIHNjLT5zcGhlcmljYWwtPmJvdW5kX3RvcCA9IHQ7CisgICAgc2MtPnNwaGVyaWNhbC0+Ym91 bmRfcmlnaHQgPSByOwogICAgIHNjLT5zcGhlcmljYWwtPmJvdW5kX2JvdHRvbSA9IGI7CiAKICAg ICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF92ZXh1X3Byb2ooTU9WQ29udGV4 dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFk X3ZleHVfcHJvaihNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkK IHsKLSAgICBBVlN0cmVhbSAqc3Q7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7CisgICAgQVZT dHJlYW0qIHN0OworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjOwogICAgIGludCBzaXplOwogICAg IHVpbnQzMl90IHRhZzsKICAgICBlbnVtIEFWU3BoZXJpY2FsUHJvamVjdGlvbiBwcm9qZWN0aW9u OwpAQCAtNjkwMSw1MyArNjkzNCw0NSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3ZleHVfcHJvaihN T1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBzdCA9IGMt PmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zIC0gMV07CiAgICAgc2MgPSBzdC0+cHJpdl9k YXRhOwogCi0gICAgaWYgKGF0b20uc2l6ZSA8IDE2KSB7CisgICAgaWYgKGF0b20uc2l6ZSAhPSAx NikgewogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgc2l6ZSBm b3IgcHJvaiBib3g6ICUiUFJJdTY0IlxuIiwgYXRvbS5zaXplKTsKICAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CiAgICAgfQogCiAgICAgc2l6ZSA9IGF2aW9fcmIzMihwYik7Ci0g ICAgaWYgKHNpemUgPCAxNikgeworICAgIGlmIChzaXplICE9IDE2KSB7CiAgICAgICAgIGF2X2xv ZyhjLT5mYywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBzaXplIGZvciBwcmppIGJveDogJWRcbiIs IHNpemUpOwogICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICB9IGVsc2Ug aWYgKHNpemUgPiAxNikgewotICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19XQVJOSU5HLCAi Qm94IGhhcyBtb3JlIGJ5dGVzICglZCkgdGhhbiBwcmppIGJveCByZXF1aXJlZCAoMTYpIFxuIiwg c2l6ZSk7CiAgICAgfQogCiAgICAgdGFnID0gYXZpb19ybDMyKHBiKTsKLSAgICBpZiAodGFnICE9 IE1LVEFHKCdwJywncicsJ2onLCdpJykpIHsKLSAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0df RVJST1IsICJJbnZhbGlkIGNoaWxkIGJveCBvZiBwcm9qIGJveDogJXNcbiIsCi0gICAgICAgICAg ICAgICBhdl9mb3VyY2Myc3RyKHRhZykpOworICAgIGlmICh0YWcgIT0gTUtUQUcoJ3AnLCAncics ICdqJywgJ2knKSkgeworICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19FUlJPUiwgIkludmFs aWQgY2hpbGQgYm94IG9mIHByb2ogYm94OiAweCUwOFhcbiIsIHRhZyk7CiAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwogICAgIH0KIAotICAgICAvLyB2ZXJzaW9uIGFuZCBmbGFn cywgb25seSBzdXBwb3J0ICgwLCAwKQotICAgIHVuc2lnbmVkIG4gPSBhdmlvX3JsMzIocGIpOwot ICAgIGlmIChuICE9IDApIHsKLSAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsICJw cmppIHZlcnNpb24gJXUsIGZsYWcgJXUgYXJlIG5vdCBzdXBwb3J0ZWRcbiIsCi0gICAgICAgICAg ICAgICBuICYgMHhGRiwgbiA+PiA4KTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxD T01FOwotICAgIH0KKyAgICBhdmlvX3NraXAocGIsIDEpOyAvLyB2ZXJzaW9uCisgICAgYXZpb19z a2lwKHBiLCAzKTsgLy8gZmxhZ3MKIAogICAgIHRhZyA9IGF2aW9fcmwzMihwYik7CiAgICAgc3dp dGNoICh0YWcpIHsKLSAgICBjYXNlIE1LVEFHKCdyJywnZScsJ2MnLCd0Jyk6CisgICAgY2FzZSBN S1RBRygncicsICdlJywgJ2MnLCAndCcpOgogICAgICAgICBwcm9qZWN0aW9uID0gQVZfU1BIRVJJ Q0FMX1JFQ1RJTElORUFSOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIE1LVEFHKCdlJywncScs J3UnLCdpJyk6CisgICAgY2FzZSBNS1RBRygnZScsICdxJywgJ3UnLCAnaScpOgogICAgICAgICBw cm9qZWN0aW9uID0gQVZfU1BIRVJJQ0FMX0VRVUlSRUNUQU5HVUxBUjsKICAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSBNS1RBRygnaCcsJ2UnLCdxJywndScpOgorICAgIGNhc2UgTUtUQUcoJ2gnLCAn ZScsICdxJywgJ3UnKToKICAgICAgICAgcHJvamVjdGlvbiA9IEFWX1NQSEVSSUNBTF9IQUxGX0VR VUlSRUNUQU5HVUxBUjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNS1RBRygnZicsJ2knLCdz JywnaCcpOgorICAgIGNhc2UgTUtUQUcoJ2YnLCAnaScsICdzJywgJ2gnKToKICAgICAgICAgcHJv amVjdGlvbiA9IEFWX1NQSEVSSUNBTF9GSVNIRVlFOwogICAgICAgICBicmVhazsKLSAgICBjYXNl IE1LVEFHKCdwJywncicsJ2knLCdtJyk6CisgICAgY2FzZSBNS1RBRygncCcsICdyJywgJ2knLCAn bScpOgogICAgICAgICBwcm9qZWN0aW9uID0gQVZfU1BIRVJJQ0FMX1BBUkFNRVRSSUNfSU1NRVJT SVZFOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBhdl9sb2coYy0+ZmMs IEFWX0xPR19FUlJPUiwgIkludmFsaWQgcHJvamVjdGlvbiB0eXBlIGluIHByamkgYm94OiAlc1xu IiwgYXZfZm91cmNjMnN0cih0YWcpKTsKKyAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJS T1IsICJJbnZhbGlkIHByb2plY3Rpb24gdHlwZSBpbiBwcmppIGJveDogMHglMDhYXG4iLCB0YWcp OwogICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICB9CiAKQEAgLTY5NjAs MTAgKzY5ODUsMTAgQEAgc3RhdGljIGludCBtb3ZfcmVhZF92ZXh1X3Byb2ooTU9WQ29udGV4dCAq YywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0 YXRpYyBpbnQgbW92X3JlYWRfZXllcyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1P VkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfZXllcyhNT1ZDb250ZXh0KiBjLCBBVklP Q29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBBVlN0cmVhbSAqc3Q7Ci0gICAgTU9W U3RyZWFtQ29udGV4dCAqc2M7CisgICAgQVZTdHJlYW0qIHN0OworICAgIE1PVlN0cmVhbUNvbnRl eHQqIHNjOwogICAgIGludCBzaXplLCBmbGFncyA9IDA7CiAgICAgaW50NjRfdCByZW1haW5pbmc7 CiAgICAgdWludDMyX3QgdGFnLCBiYXNlbGluZSA9IDA7CkBAIC02OTgxLDE0ICs3MDA2LDE0IEBA IHN0YXRpYyBpbnQgbW92X3JlYWRfZXllcyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIs IE1PVkF0b20gYXRvbSkKICAgICByZW1haW5pbmcgPSBhdG9tLnNpemU7CiAgICAgd2hpbGUgKHJl bWFpbmluZyA+IDApIHsKICAgICAgICAgc2l6ZSA9IGF2aW9fcmIzMihwYik7Ci0gICAgICAgIGlm IChzaXplIDwgOCB8fCBzaXplID4gcmVtYWluaW5nICkgeworICAgICAgICBpZiAoc2l6ZSA8IDgg fHwgc2l6ZSA+IHJlbWFpbmluZykgewogICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0df RVJST1IsICJJbnZhbGlkIGNoaWxkIHNpemUgaW4gZXllcyBib3hcbiIpOwogICAgICAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAgICAgICAgIH0KIAogICAgICAgICB0YWcgPSBh dmlvX3JsMzIocGIpOwogICAgICAgICBzd2l0Y2ggKHRhZykgewotICAgICAgICBjYXNlIE1LVEFH KCdzJywndCcsJ3InLCdpJyk6IHsKKyAgICAgICAgY2FzZSBNS1RBRygncycsICd0JywgJ3InLCAn aScpOiB7CiAgICAgICAgICAgICBpbnQgaGFzX3JpZ2h0LCBoYXNfbGVmdDsKICAgICAgICAgICAg IHVpbnQ4X3QgdG1wOwogICAgICAgICAgICAgaWYgKHNpemUgIT0gMTMpIHsKQEAgLTcwMjMsNyAr NzA0OCw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZXllcyhNT1ZDb250ZXh0ICpjLCBBVklPQ29u dGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKIAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K LSAgICAgICAgY2FzZSBNS1RBRygnaCcsJ2UnLCdyJywnbycpOiB7CisgICAgICAgIGNhc2UgTUtU QUcoJ2gnLCAnZScsICdyJywgJ28nKTogewogICAgICAgICAgICAgaW50IHRtcDsKICAgICAgICAg ICAgIGlmIChzaXplICE9IDEzKSB7CiAgICAgICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9M T0dfRVJST1IsICJJbnZhbGlkIHNpemUgb2YgaGVybyBib3g6ICVkXG4iLCBzaXplKTsKQEAgLTcw NDQsNyArNzA2OSw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZXllcyhNT1ZDb250ZXh0ICpjLCBB VklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKIAogICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgIH0KLSAgICAgICAgY2FzZSBNS1RBRygnYycsJ2EnLCdtJywncycpOiB7CisgICAgICAgIGNh c2UgTUtUQUcoJ2MnLCAnYScsICdtJywgJ3MnKTogewogICAgICAgICAgICAgdWludDMyX3Qgc3Vi dGFnOwogICAgICAgICAgICAgaW50IHN1YnNpemU7CiAgICAgICAgICAgICBpZiAoc2l6ZSAhPSAy NCkgewpAQCAtNzA1OSw5ICs3MDg0LDggQEAgc3RhdGljIGludCBtb3ZfcmVhZF9leWVzKE1PVkNv bnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAgICAgICAgfQog CiAgICAgICAgICAgICBzdWJ0YWcgPSBhdmlvX3JsMzIocGIpOwotICAgICAgICAgICAgaWYgKHN1 YnRhZyAhPSBNS1RBRygnYicsJ2wnLCdpJywnbicpKSB7Ci0gICAgICAgICAgICAgICAgYXZfbG9n KGMtPmZjLCBBVl9MT0dfRVJST1IsICJFeHBlY3RlZCBibGluIGJveCwgZ290ICVzXG4iLAotICAg ICAgICAgICAgICAgICAgICAgICBhdl9mb3VyY2Myc3RyKHN1YnRhZykpOworICAgICAgICAgICAg aWYgKHN1YnRhZyAhPSBNS1RBRygnYicsICdsJywgJ2knLCAnbicpKSB7CisgICAgICAgICAgICAg ICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsICJFeHBlY3RlZCBibGluIGJveCwgZ290IDB4 JTA4WFxuIiwgc3VidGFnKTsKICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKICAgICAgICAgICAgIH0KIApAQCAtNzA3Miw3ICs3MDk2LDcgQEAgc3RhdGljIGludCBt b3ZfcmVhZF9leWVzKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9t KQogCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIE1LVEFHKCdj JywnbScsJ2YnLCd5Jyk6IHsKKyAgICAgICAgY2FzZSBNS1RBRygnYycsICdtJywgJ2YnLCAneScp OiB7CiAgICAgICAgICAgICB1aW50MzJfdCBzdWJ0YWc7CiAgICAgICAgICAgICBpbnQgc3Vic2l6 ZTsKICAgICAgICAgICAgIGludDMyX3QgYWRqdXN0bWVudDsKQEAgLTcwODgsMjUgKzcxMTIsMjMg QEAgc3RhdGljIGludCBtb3ZfcmVhZF9leWVzKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpw YiwgTU9WQXRvbSBhdG9tKQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdWJ0YWcgPSBh dmlvX3JsMzIocGIpOwotICAgICAgICAgICAgaWYgKHN1YnRhZyAhPSBNS1RBRygnZCcsJ2EnLCdk JywnaicpKSB7Ci0gICAgICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsICJF eHBlY3RlZCBkYWRqIGJveCwgZ290ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICBhdl9m b3VyY2Myc3RyKHN1YnRhZykpOworICAgICAgICAgICAgaWYgKHN1YnRhZyAhPSBNS1RBRygnZCcs ICdhJywgJ2QnLCAnaicpKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0df RVJST1IsICJFeHBlY3RlZCBkYWRqIGJveCwgZ290IDB4JTA4WFxuIiwgc3VidGFnKTsKICAgICAg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICAgICAgICAgIH0KIAog ICAgICAgICAgICAgYXZpb19za2lwKHBiLCAxKTsgLy8gdmVyc2lvbgogICAgICAgICAgICAgYXZp b19za2lwKHBiLCAzKTsgLy8gZmxhZ3MKIAotICAgICAgICAgICAgYWRqdXN0bWVudCA9IChpbnQz Ml90KSBhdmlvX3JiMzIocGIpOworICAgICAgICAgICAgYWRqdXN0bWVudCA9IChpbnQzMl90KWF2 aW9fcmIzMihwYik7CiAKLSAgICAgICAgICAgIGhvcml6b250YWxfZGlzcGFyaXR5X2FkanVzdG1l bnQubnVtID0gKGludCkgYWRqdXN0bWVudDsKKyAgICAgICAgICAgIGhvcml6b250YWxfZGlzcGFy aXR5X2FkanVzdG1lbnQubnVtID0gKGludClhZGp1c3RtZW50OwogICAgICAgICAgICAgaG9yaXpv bnRhbF9kaXNwYXJpdHlfYWRqdXN0bWVudC5kZW4gPSAxMDAwMDsKIAogICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGF2X2xvZyhjLT5m YywgQVZfTE9HX1dBUk5JTkcsICJVbmtub3duIHRhZyBpbiBleWVzOiAlc1xuIiwKLSAgICAgICAg ICAgICAgICAgICBhdl9mb3VyY2Myc3RyKHRhZykpOworICAgICAgICAgICAgYXZfbG9nKGMtPmZj LCBBVl9MT0dfV0FSTklORywgIlVua25vd24gdGFnIGluIGV5ZXM6IDB4JTA4WFxuIiwgdGFnKTsK ICAgICAgICAgICAgIGF2aW9fc2tpcChwYiwgc2l6ZSAtIDgpOwogICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgIH0KQEAgLTcxMjcsMTcgKzcxNDksMTcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9l eWVzKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKICAgICB9CiAKLSAgICBzYy0+c3RlcmVvM2Qt PmZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBmbGFnczsKLSAgICBzYy0+c3RlcmVv M2QtPnR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSB0eXBlOwotICAgIHNjLT5zdGVy ZW8zZC0+dmlldyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHZpZXc7Ci0gICAgc2MtPnN0 ZXJlbzNkLT5wcmltYXJ5X2V5ZSAgICAgICAgICAgICAgICAgICAgID0gcHJpbWFyeV9leWU7Ci0g ICAgc2MtPnN0ZXJlbzNkLT5iYXNlbGluZSAgICAgICAgICAgICAgICAgICAgICAgID0gYmFzZWxp bmU7CisgICAgc2MtPnN0ZXJlbzNkLT5mbGFncyA9IGZsYWdzOworICAgIHNjLT5zdGVyZW8zZC0+ dHlwZSA9IHR5cGU7CisgICAgc2MtPnN0ZXJlbzNkLT52aWV3ID0gdmlldzsKKyAgICBzYy0+c3Rl cmVvM2QtPnByaW1hcnlfZXllID0gcHJpbWFyeV9leWU7CisgICAgc2MtPnN0ZXJlbzNkLT5iYXNl bGluZSA9IGJhc2VsaW5lOwogICAgIHNjLT5zdGVyZW8zZC0+aG9yaXpvbnRhbF9kaXNwYXJpdHlf YWRqdXN0bWVudCA9IGhvcml6b250YWxfZGlzcGFyaXR5X2FkanVzdG1lbnQ7CiAKICAgICByZXR1 cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF92ZXh1KE1PVkNvbnRleHQgKmMsIEFWSU9D b250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF92ZXh1KE1PVkNv bnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewogICAgIGludCBzaXpl OwogICAgIGludDY0X3QgcmVtYWluaW5nOwpAQCAtNzE1NCwyOCArNzE3NiwyOCBAQCBzdGF0aWMg aW50IG1vdl9yZWFkX3ZleHUoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9t IGF0b20pCiAgICAgcmVtYWluaW5nID0gYXRvbS5zaXplOwogICAgIHdoaWxlIChyZW1haW5pbmcg PiAwKSB7CiAgICAgICAgIHNpemUgPSBhdmlvX3JiMzIocGIpOwotICAgICAgICBpZiAoc2l6ZSA8 IDggfHwgc2l6ZSA+IHJlbWFpbmluZyApIHsKKyAgICAgICAgaWYgKHNpemUgPCA4IHx8IHNpemUg PiByZW1haW5pbmcpIHsKICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0VSUk9SLCAi SW52YWxpZCBjaGlsZCBzaXplIGluIHZleHUgYm94XG4iKTsKICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOwogICAgICAgICB9CiAKICAgICAgICAgdGFnID0gYXZpb19ybDMy KHBiKTsKICAgICAgICAgc3dpdGNoICh0YWcpIHsKLSAgICAgICAgY2FzZSBNS1RBRygncCcsJ3In LCdvJywnaicpOiB7CisgICAgICAgIGNhc2UgTUtUQUcoJ3AnLCAncicsICdvJywgJ2onKTogewog ICAgICAgICAgICAgTU9WQXRvbSBwcm9qID0geyB0YWcsIHNpemUgLSA4IH07CiAgICAgICAgICAg ICBpbnQgcmV0ID0gbW92X3JlYWRfdmV4dV9wcm9qKGMsIHBiLCBwcm9qKTsKICAgICAgICAgICAg IGlmIChyZXQgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIE1LVEFHKCdlJywneScsJ2UnLCdzJyk6IHsK KyAgICAgICAgY2FzZSBNS1RBRygnZScsICd5JywgJ2UnLCAncycpOiB7CiAgICAgICAgICAgICBN T1ZBdG9tIGV5ZXMgPSB7IHRhZywgc2l6ZSAtIDggfTsKICAgICAgICAgICAgIGludCByZXQgPSBt b3ZfcmVhZF9leWVzKGMsIHBiLCBleWVzKTsKICAgICAgICAgICAgIGlmIChyZXQgPCAwKQogICAg ICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot ICAgICAgICBjYXNlIE1LVEFHKCdwJywnYScsJ2MnLCdrJyk6IHsKKyAgICAgICAgY2FzZSBNS1RB RygncCcsICdhJywgJ2MnLCAnaycpOiB7CiAgICAgICAgICAgICBNT1ZBdG9tIHBhY2sgPSB7IHRh Zywgc2l6ZSAtIDggfTsKICAgICAgICAgICAgIGludCByZXQgPSBtb3ZfcmVhZF9wYWNrKGMsIHBi LCBwYWNrKTsKICAgICAgICAgICAgIGlmIChyZXQgPCAwKQpAQCAtNzE4Myw4ICs3MjA1LDcgQEAg c3RhdGljIGludCBtb3ZfcmVhZF92ZXh1KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwg TU9WQXRvbSBhdG9tKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVm YXVsdDoKLSAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX1dBUk5JTkcsICJVbmtub3du IHRhZyBpbiB2ZXh1OiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICBhdl9mb3VyY2Myc3RyKHRh ZykpOworICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfV0FSTklORywgIlVua25vd24g dGFnIGluIHZleHU6IDB4JTA4WFxuIiwgdGFnKTsKICAgICAgICAgICAgIGF2aW9fc2tpcChwYiwg c2l6ZSAtIDgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTcxOTksMTAgKzcy MjAsMTAgQEAgc3RhdGljIGludCBtb3ZfcmVhZF92ZXh1KE1PVkNvbnRleHQgKmMsIEFWSU9Db250 ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1v dl9yZWFkX2hmb3YoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20p CitzdGF0aWMgaW50IG1vdl9yZWFkX2hmb3YoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBi LCBNT1ZBdG9tIGF0b20pCiB7Ci0gICAgQVZTdHJlYW0gKnN0OwotICAgIE1PVlN0cmVhbUNvbnRl eHQgKnNjOworICAgIEFWU3RyZWFtKiBzdDsKKyAgICBNT1ZTdHJlYW1Db250ZXh0KiBzYzsKIAog ICAgIGlmIChjLT5mYy0+bmJfc3RyZWFtcyA8IDEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzIx MSw4ICs3MjMyLDggQEAgc3RhdGljIGludCBtb3ZfcmVhZF9oZm92KE1PVkNvbnRleHQgKmMsIEFW SU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIHNjID0gc3QtPnByaXZfZGF0YTsKIAog ICAgIGlmIChhdG9tLnNpemUgIT0gNCkgewotICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0df RVJST1IsICJJbnZhbGlkIHNpemUgb2YgaGZvdiBib3g6ICUiUFJJdTY0IlxuIiwgYXRvbS5zaXpl KTsKLSAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBhdl9sb2co Yy0+ZmMsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgc2l6ZSBvZiBoZm92IGJveDogJSJQUkl1NjQi XG4iLCBhdG9tLnNpemUpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAg ICB9CiAKIApAQCAtNzIyOCwxMSArNzI0OSwxMSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2hmb3Yo TU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmV0dXJu IDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3BhcnNlX3V1aWRfc3BoZXJpY2FsKE1PVlN0cmVhbUNv bnRleHQgKnNjLCBBVklPQ29udGV4dCAqcGIsIHNpemVfdCBsZW4pCitzdGF0aWMgaW50IG1vdl9w YXJzZV91dWlkX3NwaGVyaWNhbChNT1ZTdHJlYW1Db250ZXh0KiBzYywgQVZJT0NvbnRleHQqIHBi LCBzaXplX3QgbGVuKQogewogICAgIGludCByZXQgPSAwOwotICAgIHVpbnQ4X3QgKmJ1ZmZlciA9 IGF2X21hbGxvYyhsZW4gKyAxKTsKLSAgICBjb25zdCBjaGFyICp2YWw7CisgICAgdWludDhfdCog YnVmZmVyID0gYXZfbWFsbG9jKGxlbiArIDEpOworICAgIGNvbnN0IGNoYXIqIHZhbDsKIAogICAg IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwpAQCAtNzI5MSwx MCArNzMxMiwxMCBAQCBvdXQ6CiAgICAgcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtb3Zf cmVhZF91dWlkKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQor c3RhdGljIGludCBtb3ZfcmVhZF91dWlkKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwg TU9WQXRvbSBhdG9tKQogewotICAgIEFWU3RyZWFtICpzdDsKLSAgICBNT1ZTdHJlYW1Db250ZXh0 ICpzYzsKKyAgICBBVlN0cmVhbSogc3Q7CisgICAgTU9WU3RyZWFtQ29udGV4dCogc2M7CiAgICAg aW50NjRfdCByZXQ7CiAgICAgQVZVVUlEIHV1aWQ7CiAgICAgc3RhdGljIGNvbnN0IEFWVVVJRCB1 dWlkX2lzbWxfbWFuaWZlc3QgPSB7CkBAIC03MzIyLDggKzczNDMsOCBAQCBzdGF0aWMgaW50IG1v dl9yZWFkX3V1aWQoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20p CiAgICAgaWYgKHJldCA8IDApCiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgaWYgKGF2X3V1aWRf ZXF1YWwodXVpZCwgdXVpZF9pc21sX21hbmlmZXN0KSkgewotICAgICAgICB1aW50OF90ICpidWZm ZXIsICpwdHI7Ci0gICAgICAgIGNoYXIgKmVuZHB0cjsKKyAgICAgICAgdWludDhfdCogYnVmZmVy LCAqIHB0cjsKKyAgICAgICAgY2hhciogZW5kcHRyOwogICAgICAgICBzaXplX3QgbGVuID0gYXRv bS5zaXplIC0gQVZfVVVJRF9MRU47CiAKICAgICAgICAgaWYgKGxlbiA8IDQpIHsKQEAgLTczNTYs MTQgKzczNzcsMTYgQEAgc3RhdGljIGludCBtb3ZfcmVhZF91dWlkKE1PVkNvbnRleHQgKmMsIEFW SU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAgICAgICAgcmV0ID0gc3RydG9sKHB0 ciwgJmVuZHB0ciwgMTApOwogICAgICAgICAgICAgaWYgKHJldCA8IDAgfHwgZXJybm8gfHwgKmVu ZHB0ciAhPSAnIicpIHsKICAgICAgICAgICAgICAgICBjLT5iaXRyYXRlc1tjLT5iaXRyYXRlc19j b3VudCAtIDFdID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBjLT5iaXRyYXRlc1tjLT5iaXRyYXRlc19j b3VudCAtIDFdID0gcmV0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgYXZf ZnJlZShidWZmZXIpOwotICAgIH0gZWxzZSBpZiAoYXZfdXVpZF9lcXVhbCh1dWlkLCB1dWlkX3ht cCkpIHsKLSAgICAgICAgdWludDhfdCAqYnVmZmVyOworICAgIH0KKyAgICBlbHNlIGlmIChhdl91 dWlkX2VxdWFsKHV1aWQsIHV1aWRfeG1wKSkgeworICAgICAgICB1aW50OF90KiBidWZmZXI7CiAg ICAgICAgIHNpemVfdCBsZW4gPSBhdG9tLnNpemUgLSBBVl9VVUlEX0xFTjsKICAgICAgICAgaWYg KGMtPmV4cG9ydF94bXApIHsKICAgICAgICAgICAgIGJ1ZmZlciA9IGF2X21hbGxvY3oobGVuICsg MSk7CkBAIC03Mzc3LDE0ICs3NDAwLDE2IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfdXVpZChNT1ZD b250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgICAgIH0K ICAgICAgICAgICAgIGJ1ZmZlcltsZW5dID0gJ1wwJzsKICAgICAgICAgICAgIGF2X2RpY3Rfc2V0 KCZjLT5mYy0+bWV0YWRhdGEsICJ4bXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVy LCBBVl9ESUNUX0RPTlRfU1RSRFVQX1ZBTCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgYnVmZmVyLCBBVl9ESUNUX0RPTlRfU1RSRFVQX1ZBTCk7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBza2lwIGFsbCB1dWlkIGF0b20sIHdoaWNoIG1ha2Vz IGl0IGZhc3QgZm9yIGxvbmcgdXVpZC14bXAgZmlsZQogICAgICAgICAgICAgcmV0ID0gYXZpb19z a2lwKHBiLCBsZW4pOwogICAgICAgICAgICAgaWYgKHJldCA8IDApCiAgICAgICAgICAgICAgICAg cmV0dXJuIHJldDsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXZfdXVpZF9lcXVhbCh1dWlk LCB1dWlkX3NwaGVyaWNhbCkpIHsKKyAgICB9CisgICAgZWxzZSBpZiAoYXZfdXVpZF9lcXVhbCh1 dWlkLCB1dWlkX3NwaGVyaWNhbCkpIHsKICAgICAgICAgc2l6ZV90IGxlbiA9IGF0b20uc2l6ZSAt IEFWX1VVSURfTEVOOwogICAgICAgICByZXQgPSBtb3ZfcGFyc2VfdXVpZF9zcGhlcmljYWwoc2Ms IHBiLCBsZW4pOwogICAgICAgICBpZiAocmV0IDwgMCkKQEAgLTczOTYsNyArNzQyMSw3IEBAIHN0 YXRpYyBpbnQgbW92X3JlYWRfdXVpZChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1P VkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9mcmVl KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGlu dCBtb3ZfcmVhZF9mcmVlKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBh dG9tKQogewogICAgIGludCByZXQ7CiAgICAgdWludDhfdCBjb250ZW50WzE2XTsKQEAgLTc0MDgs NyArNzQzMyw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZnJlZShNT1ZDb250ZXh0ICpjLCBBVklP Q29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBpZiAocmV0IDwgMCkKICAgICAgICAgcmV0 dXJuIHJldDsKIAotICAgIGlmICggICAhYy0+Zm91bmRfbW9vdgorICAgIGlmICghYy0+Zm91bmRf bW9vdgogICAgICAgICAmJiAhYy0+Zm91bmRfbWRhdAogICAgICAgICAmJiAhbWVtY21wKGNvbnRl bnQsICJBbmV2aWFceDFBXHgxQSIsIDgpCiAgICAgICAgICYmIGMtPnVzZV9tZnJhX2ZvciA9PSBG Rl9NT1ZfRkxBR19NRlJBX0FVVE8pIHsKQEAgLTc0MTgsMTIgKzc0NDMsMTIgQEAgc3RhdGljIGlu dCBtb3ZfcmVhZF9mcmVlKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBh dG9tKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFkX2ZybWEoTU9WQ29u dGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9y ZWFkX2ZybWEoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7 CiAgICAgdWludDMyX3QgZm9ybWF0ID0gYXZpb19ybDMyKHBiKTsKLSAgICBNT1ZTdHJlYW1Db250 ZXh0ICpzYzsKKyAgICBNT1ZTdHJlYW1Db250ZXh0KiBzYzsKICAgICBlbnVtIEFWQ29kZWNJRCBp ZDsKLSAgICBBVlN0cmVhbSAqc3Q7CisgICAgQVZTdHJlYW0qIHN0OwogCiAgICAgaWYgKGMtPmZj LT5uYl9zdHJlYW1zIDwgMSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC03NDMyLDE0ICs3NDU3LDE0 IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZnJtYShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIE1PVkF0b20gYXRvbSkKIAogICAgIHN3aXRjaCAoc2MtPmZvcm1hdCkKICAgICB7Ci0gICAg Y2FzZSBNS1RBRygnZScsJ24nLCdjJywndicpOiAgICAgICAgLy8gZW5jcnlwdGVkIHZpZGVvCi0g ICAgY2FzZSBNS1RBRygnZScsJ24nLCdjJywnYScpOiAgICAgICAgLy8gZW5jcnlwdGVkIGF1ZGlv CisgICAgY2FzZSBNS1RBRygnZScsICduJywgJ2MnLCAndicpOiAgICAgICAgLy8gZW5jcnlwdGVk IHZpZGVvCisgICAgY2FzZSBNS1RBRygnZScsICduJywgJ2MnLCAnYScpOiAgICAgICAgLy8gZW5j cnlwdGVkIGF1ZGlvCiAgICAgICAgIGlkID0gbW92X2NvZGVjX2lkKHN0LCBmb3JtYXQpOwogICAg ICAgICBpZiAoc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9OT05FICYmCiAg ICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkICE9IGlkKSB7CiAgICAgICAgICAgICBh dl9sb2coYy0+ZmMsIEFWX0xPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICJpZ25vcmlu ZyAnZnJtYScgYXRvbSBvZiAnJS40cycsIHN0cmVhbSBoYXMgY29kZWMgaWQgJWRcbiIsCi0gICAg ICAgICAgICAgICAgICAgKGNoYXIqKSZmb3JtYXQsIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQpOwor ICAgICAgICAgICAgICAgICJpZ25vcmluZyAnZnJtYScgYXRvbSBvZiAnJS40cycsIHN0cmVhbSBo YXMgY29kZWMgaWQgJWRcbiIsCisgICAgICAgICAgICAgICAgKGNoYXIqKSZmb3JtYXQsIHN0LT5j b2RlY3Bhci0+Y29kZWNfaWQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAt NzQ1MCw4ICs3NDc1LDggQEAgc3RhdGljIGludCBtb3ZfcmVhZF9mcm1hKE1PVkNvbnRleHQgKmMs IEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGlm IChmb3JtYXQgIT0gc2MtPmZvcm1hdCkgewogICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9M T0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgJ2ZybWEnIGF0b20gb2Yg JyUuNHMnLCBzdHJlYW0gZm9ybWF0IGlzICclLjRzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAo Y2hhciopJmZvcm1hdCwgKGNoYXIqKSZzYy0+Zm9ybWF0KTsKKyAgICAgICAgICAgICAgICAiaWdu b3JpbmcgJ2ZybWEnIGF0b20gb2YgJyUuNHMnLCBzdHJlYW0gZm9ybWF0IGlzICclLjRzJ1xuIiwK KyAgICAgICAgICAgICAgICAoY2hhciopJmZvcm1hdCwgKGNoYXIqKSZzYy0+Zm9ybWF0KTsKICAg ICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC03NDY1LDEwICs3NDkwLDEwIEBAIHN0 YXRpYyBpbnQgbW92X3JlYWRfZnJtYShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1P VkF0b20gYXRvbSkKICAqIGluZm8gZm9yIHRoaXMgZnJhZ21lbnQ7IG90aGVyd2lzZSB0aGlzIHdp bGwgcmV0dXJuIHRoZSBnbG9iYWwgZW5jcnlwdGlvbgogICogaW5mbyBmb3IgdGhlIGN1cnJlbnQg c3RyZWFtLgogICovCi1zdGF0aWMgaW50IGdldF9jdXJyZW50X2VuY3J5cHRpb25faW5mbyhNT1ZD b250ZXh0ICpjLCBNT1ZFbmNyeXB0aW9uSW5kZXggKiplbmNyeXB0aW9uX2luZGV4LCBNT1ZTdHJl YW1Db250ZXh0ICoqc2MpCitzdGF0aWMgaW50IGdldF9jdXJyZW50X2VuY3J5cHRpb25faW5mbyhN T1ZDb250ZXh0KiBjLCBNT1ZFbmNyeXB0aW9uSW5kZXgqKiBlbmNyeXB0aW9uX2luZGV4LCBNT1ZT dHJlYW1Db250ZXh0Kiogc2MpCiB7Ci0gICAgTU9WRnJhZ21lbnRTdHJlYW1JbmZvICpmcmFnX3N0 cmVhbV9pbmZvOwotICAgIEFWU3RyZWFtICpzdDsKKyAgICBNT1ZGcmFnbWVudFN0cmVhbUluZm8q IGZyYWdfc3RyZWFtX2luZm87CisgICAgQVZTdHJlYW0qIHN0OwogICAgIGludCBpOwogCiAgICAg ZnJhZ19zdHJlYW1faW5mbyA9IGdldF9jdXJyZW50X2ZyYWdfc3RyZWFtX2luZm8oJmMtPmZyYWdf aW5kZXgpOwpAQCAtNzQ3Niw4ICs3NTAxLDggQEAgc3RhdGljIGludCBnZXRfY3VycmVudF9lbmNy eXB0aW9uX2luZm8oTU9WQ29udGV4dCAqYywgTU9WRW5jcnlwdGlvbkluZGV4ICoqZW5jcnkKICAg ICAgICAgZm9yIChpID0gMDsgaSA8IGMtPmZjLT5uYl9zdHJlYW1zOyBpKyspIHsKICAgICAgICAg ICAgICpzYyA9IGMtPmZjLT5zdHJlYW1zW2ldLT5wcml2X2RhdGE7CiAgICAgICAgICAgICBpZiAo KCpzYyktPmlkID09IGZyYWdfc3RyZWFtX2luZm8tPmlkKSB7Ci0gICAgICAgICAgICAgIHN0ID0g Yy0+ZmMtPnN0cmVhbXNbaV07Ci0gICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg IHN0ID0gYy0+ZmMtPnN0cmVhbXNbaV07CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKGkgPT0gYy0+ZmMtPm5iX3N0cmVhbXMpCkBA IC03NDk0LDcgKzc1MTksOCBAQCBzdGF0aWMgaW50IGdldF9jdXJyZW50X2VuY3J5cHRpb25faW5m byhNT1ZDb250ZXh0ICpjLCBNT1ZFbmNyeXB0aW9uSW5kZXggKiplbmNyeQogICAgICAgICB9CiAg ICAgICAgICplbmNyeXB0aW9uX2luZGV4ID0gZnJhZ19zdHJlYW1faW5mby0+ZW5jcnlwdGlvbl9p bmRleDsKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZSB7 CiAgICAgICAgIC8vIE5vIGN1cnJlbnQgdHJhY2sgZnJhZ21lbnQsIHVzaW5nIHN0cmVhbSBsZXZl bCBlbmNyeXB0aW9uIGluZm8uCiAKICAgICAgICAgaWYgKGMtPmZjLT5uYl9zdHJlYW1zIDwgMSkK QEAgLTc1MTYsMTEgKzc1NDIsMTEgQEAgc3RhdGljIGludCBnZXRfY3VycmVudF9lbmNyeXB0aW9u X2luZm8oTU9WQ29udGV4dCAqYywgTU9WRW5jcnlwdGlvbkluZGV4ICoqZW5jcnkKICAgICB9CiB9 CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfc2FtcGxlX2VuY3J5cHRpb25faW5mbyhNT1ZDb250ZXh0 ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVlN0cmVhbUNvbnRleHQgKnNjLCBBVkVuY3J5cHRpb25J bmZvICoqc2FtcGxlLCBpbnQgdXNlX3N1YnNhbXBsZXMpCitzdGF0aWMgaW50IG1vdl9yZWFkX3Nh bXBsZV9lbmNyeXB0aW9uX2luZm8oTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZT dHJlYW1Db250ZXh0KiBzYywgQVZFbmNyeXB0aW9uSW5mbyoqIHNhbXBsZSwgaW50IHVzZV9zdWJz YW1wbGVzKQogewogICAgIGludCBpLCByZXQ7CiAgICAgdW5zaWduZWQgaW50IHN1YnNhbXBsZV9j b3VudDsKLSAgICBBVlN1YnNhbXBsZUVuY3J5cHRpb25JbmZvICpzdWJzYW1wbGVzOworICAgIEFW U3Vic2FtcGxlRW5jcnlwdGlvbkluZm8qIHN1YnNhbXBsZXM7CiAKICAgICBpZiAoIXNjLT5jZW5j LmRlZmF1bHRfZW5jcnlwdGVkX3NhbXBsZSkgewogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xP R19FUlJPUiwgIk1pc3Npbmcgc2NobSBvciB0ZW5jXG4iKTsKQEAgLTc1MzEsNyArNzU1Nyw4IEBA IHN0YXRpYyBpbnQgbW92X3JlYWRfc2FtcGxlX2VuY3J5cHRpb25faW5mbyhNT1ZDb250ZXh0ICpj LCBBVklPQ29udGV4dCAqcGIsIE1PVlN0CiAgICAgICAgICpzYW1wbGUgPSBhdl9lbmNyeXB0aW9u X2luZm9fY2xvbmUoc2MtPmNlbmMuZGVmYXVsdF9lbmNyeXB0ZWRfc2FtcGxlKTsKICAgICAgICAg aWYgKCEqc2FtcGxlKQogICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICB9 IGVsc2UKKyAgICB9CisgICAgZWxzZQogICAgICAgICAqc2FtcGxlID0gTlVMTDsKIAogICAgIGlm IChzYy0+Y2VuYy5wZXJfc2FtcGxlX2l2X3NpemUgIT0gMCkgewpAQCAtNzU3MCwxMSArNzU5Nywx MSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3NhbXBsZV9lbmNyeXB0aW9uX2luZm8oTU9WQ29udGV4 dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZTdAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMg aW50IG1vdl9yZWFkX3NlbmMoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9t IGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX3NlbmMoTU9WQ29udGV4dCogYywgQVZJT0NvbnRl eHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7Ci0gICAgQVZFbmNyeXB0aW9uSW5mbyAqKmVuY3J5cHRl ZF9zYW1wbGVzOwotICAgIE1PVkVuY3J5cHRpb25JbmRleCAqZW5jcnlwdGlvbl9pbmRleDsKLSAg ICBNT1ZTdHJlYW1Db250ZXh0ICpzYzsKKyAgICBBVkVuY3J5cHRpb25JbmZvKiogZW5jcnlwdGVk X3NhbXBsZXM7CisgICAgTU9WRW5jcnlwdGlvbkluZGV4KiBlbmNyeXB0aW9uX2luZGV4OworICAg IE1PVlN0cmVhbUNvbnRleHQqIHNjOwogICAgIGludCB1c2Vfc3Vic2FtcGxlcywgcmV0OwogICAg IHVuc2lnbmVkIGludCBzYW1wbGVfY291bnQsIGksIGFsbG9jX3NpemUgPSAwOwogCkBAIC03NTk4 LDEzICs3NjI1LDE0IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfc2VuYyhNT1ZDb250ZXh0ICpjLCBB VklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBmb3IgKGkgPSAwOyBpIDwgc2FtcGxl X2NvdW50OyBpKyspIHsKICAgICAgICAgdW5zaWduZWQgaW50IG1pbl9zYW1wbGVzID0gRkZNSU4o RkZNQVgoaSArIDEsIDEwMjQgKiAxMDI0KSwgc2FtcGxlX2NvdW50KTsKICAgICAgICAgZW5jcnlw dGVkX3NhbXBsZXMgPSBhdl9mYXN0X3JlYWxsb2MoZW5jcnlwdGlvbl9pbmRleC0+ZW5jcnlwdGVk X3NhbXBsZXMsICZhbGxvY19zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtaW5fc2FtcGxlcyAqIHNpemVvZigqZW5jcnlwdGVkX3NhbXBsZXMpKTsKKyAg ICAgICAgICAgIG1pbl9zYW1wbGVzICogc2l6ZW9mKCplbmNyeXB0ZWRfc2FtcGxlcykpOwogICAg ICAgICBpZiAoZW5jcnlwdGVkX3NhbXBsZXMpIHsKICAgICAgICAgICAgIGVuY3J5cHRpb25faW5k ZXgtPmVuY3J5cHRlZF9zYW1wbGVzID0gZW5jcnlwdGVkX3NhbXBsZXM7CiAKICAgICAgICAgICAg IHJldCA9IG1vdl9yZWFkX3NhbXBsZV9lbmNyeXB0aW9uX2luZm8oCiAgICAgICAgICAgICAgICAg YywgcGIsIHNjLCAmZW5jcnlwdGlvbl9pbmRleC0+ZW5jcnlwdGVkX3NhbXBsZXNbaV0sIHVzZV9z dWJzYW1wbGVzKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK ICAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKICAgICAgICAgfQogICAgICAgICBp ZiAocGItPmVvZl9yZWFjaGVkKSB7CkBAIC03NjI2LDkgKzc2NTQsOSBAQCBzdGF0aWMgaW50IG1v dl9yZWFkX3NlbmMoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20p CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3BhcnNlX2F1eGlsaWFyeV9pbmZv KE1PVkNvbnRleHQgKmMsIE1PVlN0cmVhbUNvbnRleHQgKnNjLCBBVklPQ29udGV4dCAqcGIsIE1P VkVuY3J5cHRpb25JbmRleCAqZW5jcnlwdGlvbl9pbmRleCkKK3N0YXRpYyBpbnQgbW92X3BhcnNl X2F1eGlsaWFyeV9pbmZvKE1PVkNvbnRleHQqIGMsIE1PVlN0cmVhbUNvbnRleHQqIHNjLCBBVklP Q29udGV4dCogcGIsIE1PVkVuY3J5cHRpb25JbmRleCogZW5jcnlwdGlvbl9pbmRleCkKIHsKLSAg ICBBVkVuY3J5cHRpb25JbmZvICoqc2FtcGxlLCAqKmVuY3J5cHRlZF9zYW1wbGVzOworICAgIEFW RW5jcnlwdGlvbkluZm8qKiBzYW1wbGUsICoqIGVuY3J5cHRlZF9zYW1wbGVzOwogICAgIGludDY0 X3QgcHJldl9wb3M7CiAgICAgc2l6ZV90IHNhbXBsZV9jb3VudCwgc2FtcGxlX2luZm9fc2l6ZSwg aTsKICAgICBpbnQgcmV0ID0gMDsKQEAgLTc2NTQsNyArNzY4Miw3IEBAIHN0YXRpYyBpbnQgbW92 X3BhcnNlX2F1eGlsaWFyeV9pbmZvKE1PVkNvbnRleHQgKmMsIE1PVlN0cmVhbUNvbnRleHQgKnNj LCBBVklPQ29uCiAgICAgZm9yIChpID0gMDsgaSA8IHNhbXBsZV9jb3VudCAmJiAhcGItPmVvZl9y ZWFjaGVkOyBpKyspIHsKICAgICAgICAgdW5zaWduZWQgaW50IG1pbl9zYW1wbGVzID0gRkZNSU4o RkZNQVgoaSArIDEsIDEwMjQgKiAxMDI0KSwgc2FtcGxlX2NvdW50KTsKICAgICAgICAgZW5jcnlw dGVkX3NhbXBsZXMgPSBhdl9mYXN0X3JlYWxsb2MoZW5jcnlwdGlvbl9pbmRleC0+ZW5jcnlwdGVk X3NhbXBsZXMsICZhbGxvY19zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtaW5fc2FtcGxlcyAqIHNpemVvZigqZW5jcnlwdGVkX3NhbXBsZXMpKTsKKyAg ICAgICAgICAgIG1pbl9zYW1wbGVzICogc2l6ZW9mKCplbmNyeXB0ZWRfc2FtcGxlcykpOwogICAg ICAgICBpZiAoIWVuY3J5cHRlZF9zYW1wbGVzKSB7CiAgICAgICAgICAgICByZXQgPSBBVkVSUk9S KEVOT01FTSk7CiAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKQEAgLTc2NjMsOCArNzY5MSw4IEBA IHN0YXRpYyBpbnQgbW92X3BhcnNlX2F1eGlsaWFyeV9pbmZvKE1PVkNvbnRleHQgKmMsIE1PVlN0 cmVhbUNvbnRleHQgKnNjLCBBVklPQ29uCiAKICAgICAgICAgc2FtcGxlID0gJmVuY3J5cHRpb25f aW5kZXgtPmVuY3J5cHRlZF9zYW1wbGVzW2ldOwogICAgICAgICBzYW1wbGVfaW5mb19zaXplID0g ZW5jcnlwdGlvbl9pbmRleC0+YXV4aWxpYXJ5X2luZm9fZGVmYXVsdF9zaXplCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPyBlbmNyeXB0aW9uX2luZGV4LT5hdXhpbGlhcnlfaW5mb19k ZWZhdWx0X3NpemUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGVuY3J5cHRpb25f aW5kZXgtPmF1eGlsaWFyeV9pbmZvX3NpemVzW2ldOworICAgICAgICAgICAgPyBlbmNyeXB0aW9u X2luZGV4LT5hdXhpbGlhcnlfaW5mb19kZWZhdWx0X3NpemUKKyAgICAgICAgICAgIDogZW5jcnlw dGlvbl9pbmRleC0+YXV4aWxpYXJ5X2luZm9fc2l6ZXNbaV07CiAKICAgICAgICAgcmV0ID0gbW92 X3JlYWRfc2FtcGxlX2VuY3J5cHRpb25faW5mbyhjLCBwYiwgc2MsIHNhbXBsZSwgc2FtcGxlX2lu Zm9fc2l6ZSA+IHNjLT5jZW5jLnBlcl9zYW1wbGVfaXZfc2l6ZSk7CiAgICAgICAgIGlmIChyZXQg PCAwKQpAQCAtNzY3Myw3ICs3NzAxLDggQEAgc3RhdGljIGludCBtb3ZfcGFyc2VfYXV4aWxpYXJ5 X2luZm8oTU9WQ29udGV4dCAqYywgTU9WU3RyZWFtQ29udGV4dCAqc2MsIEFWSU9Db24KICAgICBp ZiAocGItPmVvZl9yZWFjaGVkKSB7CiAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0VSUk9S LCAiSGl0IEVPRiB3aGlsZSByZWFkaW5nIGF1eGlsaWFyeSBpbmZvXG4iKTsKICAgICAgICAgcmV0 ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICB9IGVsc2UgeworICAgIH0KKyAgICBlbHNlIHsK ICAgICAgICAgZW5jcnlwdGlvbl9pbmRleC0+bmJfZW5jcnlwdGVkX3NhbXBsZXMgPSBzYW1wbGVf Y291bnQ7CiAgICAgfQogCkBAIC03Njg4LDEwICs3NzE3LDEwIEBAIGZpbmlzaDoKICAgICByZXR1 cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFkX3NhaXooTU9WQ29udGV4dCAqYywgQVZJ T0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX3NhaXooTU9W Q29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7Ci0gICAgTU9WRW5j cnlwdGlvbkluZGV4ICplbmNyeXB0aW9uX2luZGV4OwotICAgIE1PVlN0cmVhbUNvbnRleHQgKnNj OworICAgIE1PVkVuY3J5cHRpb25JbmRleCogZW5jcnlwdGlvbl9pbmRleDsKKyAgICBNT1ZTdHJl YW1Db250ZXh0KiBzYzsKICAgICBpbnQgcmV0OwogICAgIHVuc2lnbmVkIGludCBzYW1wbGVfY291 bnQsIGF1eF9pbmZvX3R5cGUsIGF1eF9pbmZvX3BhcmFtOwogCkBAIC03NzIzLDIwICs3NzUyLDIz IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfc2FpeihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19E RUJVRywgIklnbm9yaW5nIHNhaXogYm94IHdpdGggbm9uLXplcm8gYXV4X2luZm9fdHlwZV9wYXJh bWV0ZXJcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQotICAg ICAgICB9IGVsc2UgeworICAgICAgICB9CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8g RGlkbid0IHNlZSAnc2NobScgb3IgJ3RlbmMnLCBzbyB0aGlzIGlzbid0IGVuY3J5cHRlZC4KLSAg ICAgICAgICAgIGlmICgoYXV4X2luZm9fdHlwZSA9PSBNS0JFVEFHKCdjJywnZScsJ24nLCdjJykg fHwKLSAgICAgICAgICAgICAgICAgYXV4X2luZm9fdHlwZSA9PSBNS0JFVEFHKCdjJywnZScsJ24n LCdzJykgfHwKLSAgICAgICAgICAgICAgICAgYXV4X2luZm9fdHlwZSA9PSBNS0JFVEFHKCdjJywn YicsJ2MnLCcxJykgfHwKLSAgICAgICAgICAgICAgICAgYXV4X2luZm9fdHlwZSA9PSBNS0JFVEFH KCdjJywnYicsJ2MnLCdzJykpICYmCisgICAgICAgICAgICBpZiAoKGF1eF9pbmZvX3R5cGUgPT0g TUtCRVRBRygnYycsICdlJywgJ24nLCAnYycpIHx8CisgICAgICAgICAgICAgICAgYXV4X2luZm9f dHlwZSA9PSBNS0JFVEFHKCdjJywgJ2UnLCAnbicsICdzJykgfHwKKyAgICAgICAgICAgICAgICBh dXhfaW5mb190eXBlID09IE1LQkVUQUcoJ2MnLCAnYicsICdjJywgJzEnKSB8fAorICAgICAgICAg ICAgICAgIGF1eF9pbmZvX3R5cGUgPT0gTUtCRVRBRygnYycsICdiJywgJ2MnLCAncycpKSAmJgog ICAgICAgICAgICAgICAgIGF1eF9pbmZvX3BhcmFtID09IDApIHsKICAgICAgICAgICAgICAgICBh dl9sb2coYy0+ZmMsIEFWX0xPR19FUlJPUiwgIlNhdyBlbmNyeXB0ZWQgc2FpeiB3aXRob3V0IHNj aG0vdGVuY1xuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 Ci0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7 CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg ICB9IGVsc2UgaWYgKCFzYy0+Y2VuYy5kZWZhdWx0X2VuY3J5cHRlZF9zYW1wbGUpIHsKKyAgICB9 CisgICAgZWxzZSBpZiAoIXNjLT5jZW5jLmRlZmF1bHRfZW5jcnlwdGVkX3NhbXBsZSkgewogICAg ICAgICAvLyBEaWRuJ3Qgc2VlICdzY2htJyBvciAndGVuYycsIHNvIHRoaXMgaXNuJ3QgZW5jcnlw dGVkLgogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC03NzU5LDcgKzc3OTEsNyBAQCBzdGF0 aWMgaW50IG1vdl9yZWFkX3NhaXooTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZB dG9tIGF0b20pCiAgICAgICAgICAgICBpZiAocmV0ID49IDApCiAgICAgICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9H X0VSUk9SLCAiRmFpbGVkIHRvIHJlYWQgdGhlIGF1eGlsaWFyeSBpbmZvLCAlc1xuIiwKLSAgICAg ICAgICAgICAgICAgICBhdl9lcnIyc3RyKHJldCkpOworICAgICAgICAgICAgICAgIGF2X2VycjJz dHIocmV0KSk7CiAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICB9CiAgICAgfQpAQCAt Nzc3MiwxMSArNzgwNCwxMSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX3NhaXooTU9WQ29udGV4dCAq YywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0 YXRpYyBpbnQgbW92X3JlYWRfc2FpbyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1P VkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfc2FpbyhNT1ZDb250ZXh0KiBjLCBBVklP Q29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICB1aW50NjRfdCAqYXV4aWxpYXJ5X29m ZnNldHM7Ci0gICAgTU9WRW5jcnlwdGlvbkluZGV4ICplbmNyeXB0aW9uX2luZGV4OwotICAgIE1P VlN0cmVhbUNvbnRleHQgKnNjOworICAgIHVpbnQ2NF90KiBhdXhpbGlhcnlfb2Zmc2V0czsKKyAg ICBNT1ZFbmNyeXB0aW9uSW5kZXgqIGVuY3J5cHRpb25faW5kZXg7CisgICAgTU9WU3RyZWFtQ29u dGV4dCogc2M7CiAgICAgaW50IGksIHJldDsKICAgICB1bnNpZ25lZCBpbnQgdmVyc2lvbiwgZW50 cnlfY291bnQsIGF1eF9pbmZvX3R5cGUsIGF1eF9pbmZvX3BhcmFtOwogICAgIHVuc2lnbmVkIGlu dCBhbGxvY19zaXplID0gMDsKQEAgLTc4MDksMjAgKzc4NDEsMjMgQEAgc3RhdGljIGludCBtb3Zf cmVhZF9zYWlvKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQog ICAgICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0RFQlVHLCAiSWdub3Jpbmcgc2Fp byBib3ggd2l0aCBub24temVybyBhdXhfaW5mb190eXBlX3BhcmFtZXRlclxuIik7CiAgICAgICAg ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBEaWRuJ3Qgc2VlICdzY2htJyBv ciAndGVuYycsIHNvIHRoaXMgaXNuJ3QgZW5jcnlwdGVkLgotICAgICAgICAgICAgaWYgKChhdXhf aW5mb190eXBlID09IE1LQkVUQUcoJ2MnLCdlJywnbicsJ2MnKSB8fAotICAgICAgICAgICAgICAg ICBhdXhfaW5mb190eXBlID09IE1LQkVUQUcoJ2MnLCdlJywnbicsJ3MnKSB8fAotICAgICAgICAg ICAgICAgICBhdXhfaW5mb190eXBlID09IE1LQkVUQUcoJ2MnLCdiJywnYycsJzEnKSB8fAotICAg ICAgICAgICAgICAgICBhdXhfaW5mb190eXBlID09IE1LQkVUQUcoJ2MnLCdiJywnYycsJ3MnKSkg JiYKKyAgICAgICAgICAgIGlmICgoYXV4X2luZm9fdHlwZSA9PSBNS0JFVEFHKCdjJywgJ2UnLCAn bicsICdjJykgfHwKKyAgICAgICAgICAgICAgICBhdXhfaW5mb190eXBlID09IE1LQkVUQUcoJ2Mn LCAnZScsICduJywgJ3MnKSB8fAorICAgICAgICAgICAgICAgIGF1eF9pbmZvX3R5cGUgPT0gTUtC RVRBRygnYycsICdiJywgJ2MnLCAnMScpIHx8CisgICAgICAgICAgICAgICAgYXV4X2luZm9fdHlw ZSA9PSBNS0JFVEFHKCdjJywgJ2InLCAnYycsICdzJykpICYmCiAgICAgICAgICAgICAgICAgYXV4 X2luZm9fcGFyYW0gPT0gMCkgewogICAgICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9H X0VSUk9SLCAiU2F3IGVuY3J5cHRlZCBzYWlvIHdpdGhvdXQgc2NobS90ZW5jXG4iKTsKICAgICAg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBy ZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXNjLT5j ZW5jLmRlZmF1bHRfZW5jcnlwdGVkX3NhbXBsZSkgeworICAgIH0KKyAgICBlbHNlIGlmICghc2Mt PmNlbmMuZGVmYXVsdF9lbmNyeXB0ZWRfc2FtcGxlKSB7CiAgICAgICAgIC8vIERpZG4ndCBzZWUg J3NjaG0nIG9yICd0ZW5jJywgc28gdGhpcyBpc24ndCBlbmNyeXB0ZWQuCiAgICAgICAgIHJldHVy biAwOwogICAgIH0KQEAgLTc4NDQsNyArNzg3OSw4IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfc2Fp byhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKIAogICAgICAg ICBpZiAodmVyc2lvbiA9PSAwKSB7CiAgICAgICAgICAgICBlbmNyeXB0aW9uX2luZGV4LT5hdXhp bGlhcnlfb2Zmc2V0c1tpXSA9IGF2aW9fcmIzMihwYik7Ci0gICAgICAgIH0gZWxzZSB7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBlbmNyeXB0aW9uX2luZGV4LT5hdXhp bGlhcnlfb2Zmc2V0c1tpXSA9IGF2aW9fcmI2NChwYik7CiAgICAgICAgIH0KICAgICAgICAgaWYg KGMtPmZyYWdfaW5kZXguY3VycmVudCA+PSAwKSB7CkBAIC03ODY3LDI2ICs3OTAzLDI2IEBAIHN0 YXRpYyBpbnQgbW92X3JlYWRfc2FpbyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1P VkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9wc3No KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGlu dCBtb3ZfcmVhZF9wc3NoKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBh dG9tKQogewotICAgIEFWRW5jcnlwdGlvbkluaXRJbmZvICppbmZvLCAqb2xkX2luaXRfaW5mbzsK LSAgICB1aW50OF90ICoqa2V5X2lkczsKLSAgICBBVlN0cmVhbSAqc3Q7Ci0gICAgY29uc3QgQVZQ YWNrZXRTaWRlRGF0YSAqb2xkX3NpZGVfZGF0YTsKLSAgICB1aW50OF90ICpzaWRlX2RhdGEsICpl eHRyYV9kYXRhOworICAgIEFWRW5jcnlwdGlvbkluaXRJbmZvKiBpbmZvLCAqIG9sZF9pbml0X2lu Zm87CisgICAgdWludDhfdCoqIGtleV9pZHM7CisgICAgQVZTdHJlYW0qIHN0OworICAgIGNvbnN0 IEFWUGFja2V0U2lkZURhdGEqIG9sZF9zaWRlX2RhdGE7CisgICAgdWludDhfdCogc2lkZV9kYXRh LCAqIGV4dHJhX2RhdGE7CiAgICAgc2l6ZV90IHNpZGVfZGF0YV9zaXplOwogICAgIGludCByZXQg PSAwOwogICAgIHVuc2lnbmVkIGludCB2ZXJzaW9uLCBraWRfY291bnQsIGV4dHJhX2RhdGFfc2l6 ZSwgYWxsb2Nfc2l6ZSA9IDA7CiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0cmVhbXMgPCAxKQogICAg ICAgICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1z LTFdOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMgLSAxXTsKIAog ICAgIHZlcnNpb24gPSBhdmlvX3I4KHBiKTsgLyogdmVyc2lvbiAqLwogICAgIGF2aW9fcmIyNChw Yik7ICAvKiBmbGFncyAqLwogCiAgICAgaW5mbyA9IGF2X2VuY3J5cHRpb25faW5pdF9pbmZvX2Fs bG9jKC8qIHN5c3RlbV9pZF9zaXplICovIDE2LCAvKiBudW1fa2V5X2lkcyAqLyAwLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBrZXlfaWRfc2l6ZSAqLyAxNiwg LyogZGF0YV9zaXplICovIDApOworICAgICAgICAvKiBrZXlfaWRfc2l6ZSAqLyAxNiwgLyogZGF0 YV9zaXplICovIDApOwogICAgIGlmICghaW5mbykKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5P TUVNKTsKIApAQCAtNzkwNSw3ICs3OTQxLDcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9wc3NoKE1P VkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAgICBmb3Ig KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGtpZF9jb3VudCAmJiAhcGItPmVvZl9yZWFjaGVkOyBp KyspIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtaW5fa2lkX2NvdW50ID0gRkZNSU4oRkZN QVgoaSArIDEsIDEwMjQpLCBraWRfY291bnQpOwogICAgICAgICAgICAga2V5X2lkcyA9IGF2X2Zh c3RfcmVhbGxvYyhpbmZvLT5rZXlfaWRzLCAmYWxsb2Nfc2l6ZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWluX2tpZF9jb3VudCAqIHNpemVvZigqa2V5X2lkcykpOwor ICAgICAgICAgICAgICAgIG1pbl9raWRfY291bnQgKiBzaXplb2YoKmtleV9pZHMpKTsKICAgICAg ICAgICAgIGlmICgha2V5X2lkcykgewogICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1IoRU5P TUVNKTsKICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKQEAgLTc5NTMsMTkgKzc5ODksMjAg QEAgc3RhdGljIGludCBtb3ZfcmVhZF9wc3NoKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpw YiwgTU9WQXRvbSBhdG9tKQogCiAgICAgLy8gSWYgdGhlcmUgaXMgZXhpc3RpbmcgaW5pdGlhbGl6 YXRpb24gZGF0YSwgYXBwZW5kIHRvIHRoZSBsaXN0LgogICAgIG9sZF9zaWRlX2RhdGEgPSBhdl9w YWNrZXRfc2lkZV9kYXRhX2dldChzdC0+Y29kZWNwYXItPmNvZGVkX3NpZGVfZGF0YSwgc3QtPmNv ZGVjcGFyLT5uYl9jb2RlZF9zaWRlX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFWX1BLVF9EQVRBX0VOQ1JZUFRJT05fSU5JVF9JTkZPKTsKKyAgICAg ICAgQVZfUEtUX0RBVEFfRU5DUllQVElPTl9JTklUX0lORk8pOwogICAgIGlmIChvbGRfc2lkZV9k YXRhKSB7CiAgICAgICAgIG9sZF9pbml0X2luZm8gPSBhdl9lbmNyeXB0aW9uX2luaXRfaW5mb19n ZXRfc2lkZV9kYXRhKG9sZF9zaWRlX2RhdGEtPmRhdGEsIG9sZF9zaWRlX2RhdGEtPnNpemUpOwog ICAgICAgICBpZiAob2xkX2luaXRfaW5mbykgewogICAgICAgICAgICAgLy8gQXBwZW5kIHRvIHRo ZSBlbmQgb2YgdGhlIGxpc3QuCi0gICAgICAgICAgICBmb3IgKEFWRW5jcnlwdGlvbkluaXRJbmZv ICpjdXIgPSBvbGRfaW5pdF9pbmZvOzsgY3VyID0gY3VyLT5uZXh0KSB7CisgICAgICAgICAgICBm b3IgKEFWRW5jcnlwdGlvbkluaXRJbmZvKiBjdXIgPSBvbGRfaW5pdF9pbmZvOzsgY3VyID0gY3Vy LT5uZXh0KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjdXItPm5leHQpIHsKICAgICAgICAgICAg ICAgICAgICAgY3VyLT5uZXh0ID0gaW5mbzsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaW5mbyA9IG9sZF9p bml0X2luZm87Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CiAg ICAgICAgICAgICAvLyBBc3N1bWUgZXhpc3Rpbmcgc2lkZS1kYXRhIHdpbGwgYmUgdmFsaWQsIHNv IHRoZSBvbmx5IGVycm9yIHdlIGNvdWxkIGdldCBpcyBPT00uCiAgICAgICAgICAgICByZXQgPSBB VkVSUk9SKEVOT01FTSk7CiAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKQEAgLTc5NzgsOSArODAx NSw5IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfcHNzaChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4 dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgZ290byBmaW5pc2g7CiAgICAgfQogICAgIGlm ICghYXZfcGFja2V0X3NpZGVfZGF0YV9hZGQoJnN0LT5jb2RlY3Bhci0+Y29kZWRfc2lkZV9kYXRh LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0LT5jb2RlY3Bhci0+bmJfY29k ZWRfc2lkZV9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfUEtUX0RB VEFfRU5DUllQVElPTl9JTklUX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaWRlX2RhdGEsIHNpZGVfZGF0YV9zaXplLCAwKSkKKyAgICAgICAgJnN0LT5jb2RlY3Bhci0+ bmJfY29kZWRfc2lkZV9kYXRhLAorICAgICAgICBBVl9QS1RfREFUQV9FTkNSWVBUSU9OX0lOSVRf SU5GTywKKyAgICAgICAgc2lkZV9kYXRhLCBzaWRlX2RhdGFfc2l6ZSwgMCkpCiAgICAgICAgIGF2 X2ZyZWUoc2lkZV9kYXRhKTsKIAogZmluaXNoOgpAQCAtNzk4OCwxNCArODAyNSwxNCBAQCBmaW5p c2g6CiAgICAgcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9zY2htKE1PVkNv bnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3Zf cmVhZF9zY2htKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQog ewotICAgIEFWU3RyZWFtICpzdDsKLSAgICBNT1ZTdHJlYW1Db250ZXh0ICpzYzsKKyAgICBBVlN0 cmVhbSogc3Q7CisgICAgTU9WU3RyZWFtQ29udGV4dCogc2M7CiAKICAgICBpZiAoYy0+ZmMtPm5i X3N0cmVhbXMgPCAxKQogICAgICAgICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5zdHJlYW1z W2MtPmZjLT5uYl9zdHJlYW1zLTFdOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5i X3N0cmVhbXMgLSAxXTsKICAgICBzYyA9IHN0LT5wcml2X2RhdGE7CiAKICAgICBpZiAoc2MtPnBz ZXVkb19zdHJlYW1faWQgIT0gMCkgewpAQCAtODAxOSwxNSArODA1NiwxNSBAQCBzdGF0aWMgaW50 IG1vdl9yZWFkX3NjaG0oTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0 b20pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfdGVuYyhNT1ZDb250 ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3Jl YWRfdGVuYyhNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsK LSAgICBBVlN0cmVhbSAqc3Q7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7CisgICAgQVZTdHJl YW0qIHN0OworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjOwogICAgIHVuc2lnbmVkIGludCB2ZXJz aW9uLCBwYXR0ZXJuLCBpc19wcm90ZWN0ZWQsIGl2X3NpemU7CiAKICAgICBpZiAoYy0+ZmMtPm5i X3N0cmVhbXMgPCAxKQogICAgICAgICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5zdHJlYW1z W2MtPmZjLT5uYl9zdHJlYW1zLTFdOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5i X3N0cmVhbXMgLSAxXTsKICAgICBzYyA9IHN0LT5wcml2X2RhdGE7CiAKICAgICBpZiAoc2MtPnBz ZXVkb19zdHJlYW1faWQgIT0gMCkgewpAQCAtODA5MCwxNyArODEyNywxNyBAQCBzdGF0aWMgaW50 IG1vdl9yZWFkX3RlbmMoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0 b20pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfZGZsYShNT1ZDb250 ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3Jl YWRfZGZsYShNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsK LSAgICBBVlN0cmVhbSAqc3Q7CisgICAgQVZTdHJlYW0qIHN0OwogICAgIGludCBsYXN0LCB0eXBl LCBzaXplLCByZXQ7CiAgICAgdWludDhfdCBidWZbNF07CiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0 cmVhbXMgPCAxKQogICAgICAgICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2Mt PmZjLT5uYl9zdHJlYW1zLTFdOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0 cmVhbXMgLSAxXTsKIAotICAgIGlmICgodWludDY0X3QpYXRvbS5zaXplID4gKDE8PDMwKSB8fCBh dG9tLnNpemUgPCA0MikKKyAgICBpZiAoKHVpbnQ2NF90KWF0b20uc2l6ZSA+ICgxIDw8IDMwKSB8 fCBhdG9tLnNpemUgPCA0MikKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAK ICAgICAvKiBDaGVjayBGbGFjU3BlY2lmaWNCb3ggdmVyc2lvbi4gKi8KQEAgLTgxMzAsNyArODE2 Nyw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZGZsYShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4 dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjZW5j X3NjaGVtZV9kZWNyeXB0KE1PVkNvbnRleHQgKmMsIE1PVlN0cmVhbUNvbnRleHQgKnNjLCBBVkVu Y3J5cHRpb25JbmZvICpzYW1wbGUsIHVpbnQ4X3QgKmlucHV0LCBpbnQgc2l6ZSkKK3N0YXRpYyBp bnQgY2VuY19zY2hlbWVfZGVjcnlwdChNT1ZDb250ZXh0KiBjLCBNT1ZTdHJlYW1Db250ZXh0KiBz YywgQVZFbmNyeXB0aW9uSW5mbyogc2FtcGxlLCB1aW50OF90KiBpbnB1dCwgaW50IHNpemUpCiB7 CiAgICAgaW50IGksIHJldDsKICAgICBpbnQgYnl0ZXNfb2ZfcHJvdGVjdGVkX2RhdGE7CkBAIC04 MTgzLDcgKzgyMjAsNyBAQCBzdGF0aWMgaW50IGNlbmNfc2NoZW1lX2RlY3J5cHQoTU9WQ29udGV4 dCAqYywgTU9WU3RyZWFtQ29udGV4dCAqc2MsIEFWRW5jcnlwdGlvbgogICAgIHJldHVybiAwOwog fQogCi1zdGF0aWMgaW50IGNiYzFfc2NoZW1lX2RlY3J5cHQoTU9WQ29udGV4dCAqYywgTU9WU3Ry ZWFtQ29udGV4dCAqc2MsIEFWRW5jcnlwdGlvbkluZm8gKnNhbXBsZSwgdWludDhfdCAqaW5wdXQs IGludCBzaXplKQorc3RhdGljIGludCBjYmMxX3NjaGVtZV9kZWNyeXB0KE1PVkNvbnRleHQqIGMs IE1PVlN0cmVhbUNvbnRleHQqIHNjLCBBVkVuY3J5cHRpb25JbmZvKiBzYW1wbGUsIHVpbnQ4X3Qq IGlucHV0LCBpbnQgc2l6ZSkKIHsKICAgICBpbnQgaSwgcmV0OwogICAgIGludCBudW1fb2ZfZW5j cnlwdGVkX2Jsb2NrczsKQEAgLTgyMDcsNyArODI0NCw3IEBAIHN0YXRpYyBpbnQgY2JjMV9zY2hl bWVfZGVjcnlwdChNT1ZDb250ZXh0ICpjLCBNT1ZTdHJlYW1Db250ZXh0ICpzYywgQVZFbmNyeXB0 aW9uCiAgICAgLyogd2hvbGUtYmxvY2sgZnVsbCBzYW1wbGUgZW5jcnlwdGlvbiAqLwogICAgIGlm ICghc2FtcGxlLT5zdWJzYW1wbGVfY291bnQpIHsKICAgICAgICAgLyogZGVjcnlwdCB0aGUgd2hv bGUgcGFja2V0ICovCi0gICAgICAgIGF2X2Flc19jcnlwdChzYy0+Y2VuYy5hZXNfY3R4LCBpbnB1 dCwgaW5wdXQsIHNpemUvMTYsIGl2LCAxKTsKKyAgICAgICAgYXZfYWVzX2NyeXB0KHNjLT5jZW5j LmFlc19jdHgsIGlucHV0LCBpbnB1dCwgc2l6ZSAvIDE2LCBpdiwgMSk7CiAgICAgICAgIHJldHVy biAwOwogICAgIH0KIApAQCAtODIyNyw3ICs4MjY0LDcgQEAgc3RhdGljIGludCBjYmMxX3NjaGVt ZV9kZWNyeXB0KE1PVkNvbnRleHQgKmMsIE1PVlN0cmVhbUNvbnRleHQgKnNjLCBBVkVuY3J5cHRp b24KICAgICAgICAgc2l6ZSAtPSBzYW1wbGUtPnN1YnNhbXBsZXNbaV0uYnl0ZXNfb2ZfY2xlYXJf ZGF0YTsKIAogICAgICAgICAvKiBkZWNyeXB0IHRoZSBlbmNyeXB0ZWQgYnl0ZXMgKi8KLSAgICAg ICAgbnVtX29mX2VuY3J5cHRlZF9ibG9ja3MgPSBzYW1wbGUtPnN1YnNhbXBsZXNbaV0uYnl0ZXNf b2ZfcHJvdGVjdGVkX2RhdGEvMTY7CisgICAgICAgIG51bV9vZl9lbmNyeXB0ZWRfYmxvY2tzID0g c2FtcGxlLT5zdWJzYW1wbGVzW2ldLmJ5dGVzX29mX3Byb3RlY3RlZF9kYXRhIC8gMTY7CiAgICAg ICAgIGlmIChudW1fb2ZfZW5jcnlwdGVkX2Jsb2NrcyA+IDApIHsKICAgICAgICAgICAgIGF2X2Fl c19jcnlwdChzYy0+Y2VuYy5hZXNfY3R4LCBpbnB1dCwgaW5wdXQsIG51bV9vZl9lbmNyeXB0ZWRf YmxvY2tzLCBpdiwgMSk7CiAgICAgICAgIH0KQEAgLTgyNDMsMTAgKzgyODAsMTAgQEAgc3RhdGlj IGludCBjYmMxX3NjaGVtZV9kZWNyeXB0KE1PVkNvbnRleHQgKmMsIE1PVlN0cmVhbUNvbnRleHQg KnNjLCBBVkVuY3J5cHRpb24KICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjZW5zX3Nj aGVtZV9kZWNyeXB0KE1PVkNvbnRleHQgKmMsIE1PVlN0cmVhbUNvbnRleHQgKnNjLCBBVkVuY3J5 cHRpb25JbmZvICpzYW1wbGUsIHVpbnQ4X3QgKmlucHV0LCBpbnQgc2l6ZSkKK3N0YXRpYyBpbnQg Y2Vuc19zY2hlbWVfZGVjcnlwdChNT1ZDb250ZXh0KiBjLCBNT1ZTdHJlYW1Db250ZXh0KiBzYywg QVZFbmNyeXB0aW9uSW5mbyogc2FtcGxlLCB1aW50OF90KiBpbnB1dCwgaW50IHNpemUpCiB7CiAg ICAgaW50IGksIHJldCwgcmVtX2J5dGVzOwotICAgIHVpbnQ4X3QgKmRhdGE7CisgICAgdWludDhf dCogZGF0YTsKIAogICAgIGlmICghc2MtPmNlbmMuYWVzX2N0cikgewogICAgICAgICAvKiBpbml0 aWFsaXplIHRoZSBjaXBoZXIgKi8KQEAgLTgyNjgsNyArODMwNSw4IEBAIHN0YXRpYyBpbnQgY2Vu c19zY2hlbWVfZGVjcnlwdChNT1ZDb250ZXh0ICpjLCBNT1ZTdHJlYW1Db250ZXh0ICpzYywgQVZF bmNyeXB0aW9uCiAgICAgICAgIC8qIGRlY3J5cHQgdGhlIHdob2xlIHBhY2tldCAqLwogICAgICAg ICBhdl9hZXNfY3RyX2NyeXB0KHNjLT5jZW5jLmFlc19jdHIsIGlucHV0LCBpbnB1dCwgc2l6ZSk7 CiAgICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSBpZiAoIXNhbXBsZS0+Y3J5cHRfYnl0ZV9i bG9jayAmJiAhc2FtcGxlLT5za2lwX2J5dGVfYmxvY2spIHsKKyAgICB9CisgICAgZWxzZSBpZiAo IXNhbXBsZS0+Y3J5cHRfYnl0ZV9ibG9jayAmJiAhc2FtcGxlLT5za2lwX2J5dGVfYmxvY2spIHsK ICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsICJwYXR0ZXJuIGVuY3J5cHRpb24g aXMgbm90IHByZXNlbnQgaW4gJ2NlbnMnIHNjaGVtZVxuIik7CiAgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwogICAgIH0KQEAgLTgyODcsMTQgKzgzMjUsMTQgQEAgc3RhdGljIGlu dCBjZW5zX3NjaGVtZV9kZWNyeXB0KE1PVkNvbnRleHQgKmMsIE1PVlN0cmVhbUNvbnRleHQgKnNj LCBBVkVuY3J5cHRpb24KICAgICAgICAgZGF0YSA9IGlucHV0OwogICAgICAgICByZW1fYnl0ZXMg PSBzYW1wbGUtPnN1YnNhbXBsZXNbaV0uYnl0ZXNfb2ZfcHJvdGVjdGVkX2RhdGE7CiAgICAgICAg IHdoaWxlIChyZW1fYnl0ZXMgPiAwKSB7Ci0gICAgICAgICAgICBpZiAocmVtX2J5dGVzIDwgMTYq c2FtcGxlLT5jcnlwdF9ieXRlX2Jsb2NrKSB7CisgICAgICAgICAgICBpZiAocmVtX2J5dGVzIDwg MTYgKiBzYW1wbGUtPmNyeXB0X2J5dGVfYmxvY2spIHsKICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF2X2Flc19jdHJfY3J5cHQoc2MtPmNlbmMuYWVz X2N0ciwgZGF0YSwgZGF0YSwgMTYqc2FtcGxlLT5jcnlwdF9ieXRlX2Jsb2NrKTsKLSAgICAgICAg ICAgIGRhdGEgKz0gMTYqc2FtcGxlLT5jcnlwdF9ieXRlX2Jsb2NrOwotICAgICAgICAgICAgcmVt X2J5dGVzIC09IDE2KnNhbXBsZS0+Y3J5cHRfYnl0ZV9ibG9jazsKLSAgICAgICAgICAgIGRhdGEg Kz0gRkZNSU4oMTYqc2FtcGxlLT5za2lwX2J5dGVfYmxvY2ssIHJlbV9ieXRlcyk7Ci0gICAgICAg ICAgICByZW1fYnl0ZXMgLT0gRkZNSU4oMTYqc2FtcGxlLT5za2lwX2J5dGVfYmxvY2ssIHJlbV9i eXRlcyk7CisgICAgICAgICAgICBhdl9hZXNfY3RyX2NyeXB0KHNjLT5jZW5jLmFlc19jdHIsIGRh dGEsIGRhdGEsIDE2ICogc2FtcGxlLT5jcnlwdF9ieXRlX2Jsb2NrKTsKKyAgICAgICAgICAgIGRh dGEgKz0gMTYgKiBzYW1wbGUtPmNyeXB0X2J5dGVfYmxvY2s7CisgICAgICAgICAgICByZW1fYnl0 ZXMgLT0gMTYgKiBzYW1wbGUtPmNyeXB0X2J5dGVfYmxvY2s7CisgICAgICAgICAgICBkYXRhICs9 IEZGTUlOKDE2ICogc2FtcGxlLT5za2lwX2J5dGVfYmxvY2ssIHJlbV9ieXRlcyk7CisgICAgICAg ICAgICByZW1fYnl0ZXMgLT0gRkZNSU4oMTYgKiBzYW1wbGUtPnNraXBfYnl0ZV9ibG9jaywgcmVt X2J5dGVzKTsKICAgICAgICAgfQogICAgICAgICBpbnB1dCArPSBzYW1wbGUtPnN1YnNhbXBsZXNb aV0uYnl0ZXNfb2ZfcHJvdGVjdGVkX2RhdGE7CiAgICAgICAgIHNpemUgLT0gc2FtcGxlLT5zdWJz YW1wbGVzW2ldLmJ5dGVzX29mX3Byb3RlY3RlZF9kYXRhOwpAQCAtODMwOCwxMSArODM0NiwxMSBA QCBzdGF0aWMgaW50IGNlbnNfc2NoZW1lX2RlY3J5cHQoTU9WQ29udGV4dCAqYywgTU9WU3RyZWFt Q29udGV4dCAqc2MsIEFWRW5jcnlwdGlvbgogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50 IGNiY3Nfc2NoZW1lX2RlY3J5cHQoTU9WQ29udGV4dCAqYywgTU9WU3RyZWFtQ29udGV4dCAqc2Ms IEFWRW5jcnlwdGlvbkluZm8gKnNhbXBsZSwgdWludDhfdCAqaW5wdXQsIGludCBzaXplKQorc3Rh dGljIGludCBjYmNzX3NjaGVtZV9kZWNyeXB0KE1PVkNvbnRleHQqIGMsIE1PVlN0cmVhbUNvbnRl eHQqIHNjLCBBVkVuY3J5cHRpb25JbmZvKiBzYW1wbGUsIHVpbnQ4X3QqIGlucHV0LCBpbnQgc2l6 ZSkKIHsKICAgICBpbnQgaSwgcmV0LCByZW1fYnl0ZXM7CiAgICAgdWludDhfdCBpdlsxNl07Ci0g ICAgdWludDhfdCAqZGF0YTsKKyAgICB1aW50OF90KiBkYXRhOwogCiAgICAgaWYgKCFzYy0+Y2Vu Yy5hZXNfY3R4KSB7CiAgICAgICAgIC8qIGluaXRpYWxpemUgdGhlIGNpcGhlciAqLwpAQCAtODMz MSw5ICs4MzY5LDEwIEBAIHN0YXRpYyBpbnQgY2Jjc19zY2hlbWVfZGVjcnlwdChNT1ZDb250ZXh0 ICpjLCBNT1ZTdHJlYW1Db250ZXh0ICpzYywgQVZFbmNyeXB0aW9uCiAgICAgaWYgKCFzYW1wbGUt PnN1YnNhbXBsZV9jb3VudCkgewogICAgICAgICAvKiBkZWNyeXB0IHRoZSB3aG9sZSBwYWNrZXQg Ki8KICAgICAgICAgbWVtY3B5KGl2LCBzYW1wbGUtPml2LCAxNik7Ci0gICAgICAgIGF2X2Flc19j cnlwdChzYy0+Y2VuYy5hZXNfY3R4LCBpbnB1dCwgaW5wdXQsIHNpemUvMTYsIGl2LCAxKTsKKyAg ICAgICAgYXZfYWVzX2NyeXB0KHNjLT5jZW5jLmFlc19jdHgsIGlucHV0LCBpbnB1dCwgc2l6ZSAv IDE2LCBpdiwgMSk7CiAgICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSBpZiAoIXNhbXBsZS0+ Y3J5cHRfYnl0ZV9ibG9jayAmJiAhc2FtcGxlLT5za2lwX2J5dGVfYmxvY2spIHsKKyAgICB9Cisg ICAgZWxzZSBpZiAoIXNhbXBsZS0+Y3J5cHRfYnl0ZV9ibG9jayAmJiAhc2FtcGxlLT5za2lwX2J5 dGVfYmxvY2spIHsKICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsICJwYXR0ZXJu IGVuY3J5cHRpb24gaXMgbm90IHByZXNlbnQgaW4gJ2NiY3MnIHNjaGVtZVxuIik7CiAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogICAgIH0KQEAgLTgzNTMsMTQgKzgzOTIsMTQg QEAgc3RhdGljIGludCBjYmNzX3NjaGVtZV9kZWNyeXB0KE1PVkNvbnRleHQgKmMsIE1PVlN0cmVh bUNvbnRleHQgKnNjLCBBVkVuY3J5cHRpb24KICAgICAgICAgZGF0YSA9IGlucHV0OwogICAgICAg ICByZW1fYnl0ZXMgPSBzYW1wbGUtPnN1YnNhbXBsZXNbaV0uYnl0ZXNfb2ZfcHJvdGVjdGVkX2Rh dGE7CiAgICAgICAgIHdoaWxlIChyZW1fYnl0ZXMgPiAwKSB7Ci0gICAgICAgICAgICBpZiAocmVt X2J5dGVzIDwgMTYqc2FtcGxlLT5jcnlwdF9ieXRlX2Jsb2NrKSB7CisgICAgICAgICAgICBpZiAo cmVtX2J5dGVzIDwgMTYgKiBzYW1wbGUtPmNyeXB0X2J5dGVfYmxvY2spIHsKICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGF2X2Flc19jcnlwdChzYy0+ Y2VuYy5hZXNfY3R4LCBkYXRhLCBkYXRhLCBzYW1wbGUtPmNyeXB0X2J5dGVfYmxvY2ssIGl2LCAx KTsKLSAgICAgICAgICAgIGRhdGEgKz0gMTYqc2FtcGxlLT5jcnlwdF9ieXRlX2Jsb2NrOwotICAg ICAgICAgICAgcmVtX2J5dGVzIC09IDE2KnNhbXBsZS0+Y3J5cHRfYnl0ZV9ibG9jazsKLSAgICAg ICAgICAgIGRhdGEgKz0gRkZNSU4oMTYqc2FtcGxlLT5za2lwX2J5dGVfYmxvY2ssIHJlbV9ieXRl cyk7Ci0gICAgICAgICAgICByZW1fYnl0ZXMgLT0gRkZNSU4oMTYqc2FtcGxlLT5za2lwX2J5dGVf YmxvY2ssIHJlbV9ieXRlcyk7CisgICAgICAgICAgICBkYXRhICs9IDE2ICogc2FtcGxlLT5jcnlw dF9ieXRlX2Jsb2NrOworICAgICAgICAgICAgcmVtX2J5dGVzIC09IDE2ICogc2FtcGxlLT5jcnlw dF9ieXRlX2Jsb2NrOworICAgICAgICAgICAgZGF0YSArPSBGRk1JTigxNiAqIHNhbXBsZS0+c2tp cF9ieXRlX2Jsb2NrLCByZW1fYnl0ZXMpOworICAgICAgICAgICAgcmVtX2J5dGVzIC09IEZGTUlO KDE2ICogc2FtcGxlLT5za2lwX2J5dGVfYmxvY2ssIHJlbV9ieXRlcyk7CiAgICAgICAgIH0KICAg ICAgICAgaW5wdXQgKz0gc2FtcGxlLT5zdWJzYW1wbGVzW2ldLmJ5dGVzX29mX3Byb3RlY3RlZF9k YXRhOwogICAgICAgICBzaXplIC09IHNhbXBsZS0+c3Vic2FtcGxlc1tpXS5ieXRlc19vZl9wcm90 ZWN0ZWRfZGF0YTsKQEAgLTgzNzQsMjMgKzg0MTMsMjcgQEAgc3RhdGljIGludCBjYmNzX3NjaGVt ZV9kZWNyeXB0KE1PVkNvbnRleHQgKmMsIE1PVlN0cmVhbUNvbnRleHQgKnNjLCBBVkVuY3J5cHRp b24KICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjZW5jX2RlY3J5cHQoTU9WQ29udGV4 dCAqYywgTU9WU3RyZWFtQ29udGV4dCAqc2MsIEFWRW5jcnlwdGlvbkluZm8gKnNhbXBsZSwgdWlu dDhfdCAqaW5wdXQsIGludCBzaXplKQorc3RhdGljIGludCBjZW5jX2RlY3J5cHQoTU9WQ29udGV4 dCogYywgTU9WU3RyZWFtQ29udGV4dCogc2MsIEFWRW5jcnlwdGlvbkluZm8qIHNhbXBsZSwgdWlu dDhfdCogaW5wdXQsIGludCBzaXplKQogewotICAgIGlmIChzYW1wbGUtPnNjaGVtZSA9PSBNS0JF VEFHKCdjJywnZScsJ24nLCdjJykgJiYgIXNhbXBsZS0+Y3J5cHRfYnl0ZV9ibG9jayAmJiAhc2Ft cGxlLT5za2lwX2J5dGVfYmxvY2spIHsKKyAgICBpZiAoc2FtcGxlLT5zY2hlbWUgPT0gTUtCRVRB RygnYycsICdlJywgJ24nLCAnYycpICYmICFzYW1wbGUtPmNyeXB0X2J5dGVfYmxvY2sgJiYgIXNh bXBsZS0+c2tpcF9ieXRlX2Jsb2NrKSB7CiAgICAgICAgIHJldHVybiBjZW5jX3NjaGVtZV9kZWNy eXB0KGMsIHNjLCBzYW1wbGUsIGlucHV0LCBzaXplKTsKLSAgICB9IGVsc2UgaWYgKHNhbXBsZS0+ c2NoZW1lID09IE1LQkVUQUcoJ2MnLCdiJywnYycsJzEnKSAmJiAhc2FtcGxlLT5jcnlwdF9ieXRl X2Jsb2NrICYmICFzYW1wbGUtPnNraXBfYnl0ZV9ibG9jaykgeworICAgIH0KKyAgICBlbHNlIGlm IChzYW1wbGUtPnNjaGVtZSA9PSBNS0JFVEFHKCdjJywgJ2InLCAnYycsICcxJykgJiYgIXNhbXBs ZS0+Y3J5cHRfYnl0ZV9ibG9jayAmJiAhc2FtcGxlLT5za2lwX2J5dGVfYmxvY2spIHsKICAgICAg ICAgcmV0dXJuIGNiYzFfc2NoZW1lX2RlY3J5cHQoYywgc2MsIHNhbXBsZSwgaW5wdXQsIHNpemUp OwotICAgIH0gZWxzZSBpZiAoc2FtcGxlLT5zY2hlbWUgPT0gTUtCRVRBRygnYycsJ2UnLCduJywn cycpKSB7CisgICAgfQorICAgIGVsc2UgaWYgKHNhbXBsZS0+c2NoZW1lID09IE1LQkVUQUcoJ2Mn LCAnZScsICduJywgJ3MnKSkgewogICAgICAgICByZXR1cm4gY2Vuc19zY2hlbWVfZGVjcnlwdChj LCBzYywgc2FtcGxlLCBpbnB1dCwgc2l6ZSk7Ci0gICAgfSBlbHNlIGlmIChzYW1wbGUtPnNjaGVt ZSA9PSBNS0JFVEFHKCdjJywnYicsJ2MnLCdzJykpIHsKKyAgICB9CisgICAgZWxzZSBpZiAoc2Ft cGxlLT5zY2hlbWUgPT0gTUtCRVRBRygnYycsICdiJywgJ2MnLCAncycpKSB7CiAgICAgICAgIHJl dHVybiBjYmNzX3NjaGVtZV9kZWNyeXB0KGMsIHNjLCBzYW1wbGUsIGlucHV0LCBzaXplKTsKLSAg ICB9IGVsc2UgeworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9M T0dfRVJST1IsICJpbnZhbGlkIGVuY3J5cHRpb24gc2NoZW1lXG4iKTsKICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CiAgICAgfQogfQogCi1zdGF0aWMgTU9WRnJhZ21lbnRTdHJl YW1JbmZvICpnZXRfZnJhZ19zdHJlYW1faW5mb19mcm9tX3BrdChNT1ZGcmFnbWVudEluZGV4ICpm cmFnX2luZGV4LCBBVlBhY2tldCAqcGt0LCBpbnQgaWQpCitzdGF0aWMgTU9WRnJhZ21lbnRTdHJl YW1JbmZvKiBnZXRfZnJhZ19zdHJlYW1faW5mb19mcm9tX3BrdChNT1ZGcmFnbWVudEluZGV4KiBm cmFnX2luZGV4LCBBVlBhY2tldCogcGt0LCBpbnQgaWQpCiB7CiAgICAgaW50IGN1cnJlbnQgPSBm cmFnX2luZGV4LT5jdXJyZW50OwogCkBAIC04NDAxLDcgKzg0NDQsNyBAQCBzdGF0aWMgTU9WRnJh Z21lbnRTdHJlYW1JbmZvICpnZXRfZnJhZ19zdHJlYW1faW5mb19mcm9tX3BrdChNT1ZGcmFnbWVu dEluZGV4ICpmcgogICAgIGlmIChjdXJyZW50ID49IDAgJiYgY3VycmVudCA8IGZyYWdfaW5kZXgt Pm5iX2l0ZW1zKSB7CiAgICAgICAgIGlmIChmcmFnX2luZGV4LT5pdGVtW2N1cnJlbnRdLm1vb2Zf b2Zmc2V0IDwgcGt0LT5wb3MgJiYKICAgICAgICAgICAgIChjdXJyZW50ICsgMSA9PSBmcmFnX2lu ZGV4LT5uYl9pdGVtcyB8fAotICAgICAgICAgICAgIGZyYWdfaW5kZXgtPml0ZW1bY3VycmVudCAr IDFdLm1vb2Zfb2Zmc2V0ID4gcGt0LT5wb3MpKQorICAgICAgICAgICAgICAgIGZyYWdfaW5kZXgt Pml0ZW1bY3VycmVudCArIDFdLm1vb2Zfb2Zmc2V0ID4gcGt0LT5wb3MpKQogICAgICAgICAgICAg cmV0dXJuIGdldF9mcmFnX3N0cmVhbV9pbmZvKGZyYWdfaW5kZXgsIGN1cnJlbnQsIGlkKTsKICAg ICB9CiAKQEAgLTg0MTUsMTEgKzg0NTgsMTEgQEAgc3RhdGljIE1PVkZyYWdtZW50U3RyZWFtSW5m byAqZ2V0X2ZyYWdfc3RyZWFtX2luZm9fZnJvbV9wa3QoTU9WRnJhZ21lbnRJbmRleCAqZnIKICAg ICByZXR1cm4gZ2V0X2ZyYWdfc3RyZWFtX2luZm8oZnJhZ19pbmRleCwgY3VycmVudCwgaWQpOwog fQogCi1zdGF0aWMgaW50IGNlbmNfZmlsdGVyKE1PVkNvbnRleHQgKm1vdiwgQVZTdHJlYW0qIHN0 LCBNT1ZTdHJlYW1Db250ZXh0ICpzYywgQVZQYWNrZXQgKnBrdCwgaW50IGN1cnJlbnRfaW5kZXgp CitzdGF0aWMgaW50IGNlbmNfZmlsdGVyKE1PVkNvbnRleHQqIG1vdiwgQVZTdHJlYW0qIHN0LCBN T1ZTdHJlYW1Db250ZXh0KiBzYywgQVZQYWNrZXQqIHBrdCwgaW50IGN1cnJlbnRfaW5kZXgpCiB7 Ci0gICAgTU9WRnJhZ21lbnRTdHJlYW1JbmZvICpmcmFnX3N0cmVhbV9pbmZvOwotICAgIE1PVkVu Y3J5cHRpb25JbmRleCAqZW5jcnlwdGlvbl9pbmRleDsKLSAgICBBVkVuY3J5cHRpb25JbmZvICpl bmNyeXB0ZWRfc2FtcGxlOworICAgIE1PVkZyYWdtZW50U3RyZWFtSW5mbyogZnJhZ19zdHJlYW1f aW5mbzsKKyAgICBNT1ZFbmNyeXB0aW9uSW5kZXgqIGVuY3J5cHRpb25faW5kZXg7CisgICAgQVZF bmNyeXB0aW9uSW5mbyogZW5jcnlwdGVkX3NhbXBsZTsKICAgICBpbnQgZW5jcnlwdGVkX2luZGV4 LCByZXQ7CiAKICAgICBmcmFnX3N0cmVhbV9pbmZvID0gZ2V0X2ZyYWdfc3RyZWFtX2luZm9fZnJv bV9wa3QoJm1vdi0+ZnJhZ19pbmRleCwgcGt0LCBzYy0+aWQpOwpAQCAtODQzMSwxMSArODQ3NCwx MyBAQCBzdGF0aWMgaW50IGNlbmNfZmlsdGVyKE1PVkNvbnRleHQgKm1vdiwgQVZTdHJlYW0qIHN0 LCBNT1ZTdHJlYW1Db250ZXh0ICpzYywgQVZQYQogICAgICAgICAgICAgaWYgKGZyYWdfc3RyZWFt X2luZm8tPmVuY3J5cHRpb25faW5kZXgpIHsKICAgICAgICAgICAgICAgICBlbmNyeXB0ZWRfaW5k ZXggPSBjdXJyZW50X2luZGV4IC0gZnJhZ19zdHJlYW1faW5mby0+aW5kZXhfYmFzZTsKICAgICAg ICAgICAgICAgICBlbmNyeXB0aW9uX2luZGV4ID0gZnJhZ19zdHJlYW1faW5mby0+ZW5jcnlwdGlv bl9pbmRleDsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBlbHNlIHsKICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uX2luZGV4ID0gc2MtPmNlbmMuZW5j cnlwdGlvbl9pbmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0gZWxzZSB7Cisg ICAgfQorICAgIGVsc2UgewogICAgICAgICBlbmNyeXB0aW9uX2luZGV4ID0gc2MtPmNlbmMuZW5j cnlwdGlvbl9pbmRleDsKICAgICB9CiAKQEAgLTg0NTUsNyArODUwMCw4IEBAIHN0YXRpYyBpbnQg Y2VuY19maWx0ZXIoTU9WQ29udGV4dCAqbW92LCBBVlN0cmVhbSogc3QsIE1PVlN0cmVhbUNvbnRl eHQgKnNjLCBBVlBhCiAgICAgICAgIGlmICghZW5jcnlwdGlvbl9pbmRleC0+bmJfZW5jcnlwdGVk X3NhbXBsZXMpIHsKICAgICAgICAgICAgIC8vIEZ1bGwtc2FtcGxlIGVuY3J5cHRpb24gd2l0aCBk ZWZhdWx0IHNldHRpbmdzLgogICAgICAgICAgICAgZW5jcnlwdGVkX3NhbXBsZSA9IHNjLT5jZW5j LmRlZmF1bHRfZW5jcnlwdGVkX3NhbXBsZTsKLSAgICAgICAgfSBlbHNlIGlmIChlbmNyeXB0ZWRf aW5kZXggPj0gMCAmJiBlbmNyeXB0ZWRfaW5kZXggPCBlbmNyeXB0aW9uX2luZGV4LT5uYl9lbmNy eXB0ZWRfc2FtcGxlcykgeworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVuY3J5cHRlZF9p bmRleCA+PSAwICYmIGVuY3J5cHRlZF9pbmRleCA8IGVuY3J5cHRpb25faW5kZXgtPm5iX2VuY3J5 cHRlZF9zYW1wbGVzKSB7CiAgICAgICAgICAgICAvLyBQZXItc2FtcGxlIHNldHRpbmcgb3ZlcnJp ZGUuCiAgICAgICAgICAgICBlbmNyeXB0ZWRfc2FtcGxlID0gZW5jcnlwdGlvbl9pbmRleC0+ZW5j cnlwdGVkX3NhbXBsZXNbZW5jcnlwdGVkX2luZGV4XTsKICAgICAgICAgICAgIGlmICghZW5jcnlw dGVkX3NhbXBsZSkgewpAQCAtODQ3MCw5ICs4NTE2LDEwIEBAIHN0YXRpYyBpbnQgY2VuY19maWx0 ZXIoTU9WQ29udGV4dCAqbW92LCBBVlN0cmVhbSogc3QsIE1PVlN0cmVhbUNvbnRleHQgKnNjLCBB VlBhCiAKICAgICAgICAgaWYgKG1vdi0+ZGVjcnlwdGlvbl9rZXkpIHsKICAgICAgICAgICAgIHJl dHVybiBjZW5jX2RlY3J5cHQobW92LCBzYywgZW5jcnlwdGVkX3NhbXBsZSwgcGt0LT5kYXRhLCBw a3QtPnNpemUpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9CisgICAgICAgIGVsc2Ugewog ICAgICAgICAgICAgc2l6ZV90IHNpemU7Ci0gICAgICAgICAgICB1aW50OF90ICpzaWRlX2RhdGEg PSBhdl9lbmNyeXB0aW9uX2luZm9fYWRkX3NpZGVfZGF0YShlbmNyeXB0ZWRfc2FtcGxlLCAmc2l6 ZSk7CisgICAgICAgICAgICB1aW50OF90KiBzaWRlX2RhdGEgPSBhdl9lbmNyeXB0aW9uX2luZm9f YWRkX3NpZGVfZGF0YShlbmNyeXB0ZWRfc2FtcGxlLCAmc2l6ZSk7CiAgICAgICAgICAgICBpZiAo IXNpZGVfZGF0YSkKICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwogICAg ICAgICAgICAgcmV0ID0gYXZfcGFja2V0X2FkZF9zaWRlX2RhdGEocGt0LCBBVl9QS1RfREFUQV9F TkNSWVBUSU9OX0lORk8sIHNpZGVfZGF0YSwgc2l6ZSk7CkBAIC04NDg1LDE5ICs4NTMyLDE5IEBA IHN0YXRpYyBpbnQgY2VuY19maWx0ZXIoTU9WQ29udGV4dCAqbW92LCBBVlN0cmVhbSogc3QsIE1P VlN0cmVhbUNvbnRleHQgKnNjLCBBVlBhCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQg bW92X3JlYWRfZG9wcyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRv bSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfZG9wcyhNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCog cGIsIE1PVkF0b20gYXRvbSkKIHsKICAgICBjb25zdCBpbnQgT1BVU19TRUVLX1BSRVJPTExfTVMg PSA4MDsKICAgICBpbnQgcmV0OwotICAgIEFWU3RyZWFtICpzdDsKKyAgICBBVlN0cmVhbSogc3Q7 CiAgICAgc2l6ZV90IHNpemU7CiAgICAgdWludDE2X3QgcHJlX3NraXA7CiAKICAgICBpZiAoYy0+ ZmMtPm5iX3N0cmVhbXMgPCAxKQogICAgICAgICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5z dHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1zLTFdOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ ZmMtPm5iX3N0cmVhbXMgLSAxXTsKIAotICAgIGlmICgodWludDY0X3QpYXRvbS5zaXplID4gKDE8 PDMwKSB8fCBhdG9tLnNpemUgPCAxMSkKKyAgICBpZiAoKHVpbnQ2NF90KWF0b20uc2l6ZSA+ICgx IDw8IDMwKSB8fCBhdG9tLnNpemUgPCAxMSkKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CiAKICAgICAvKiBDaGVjayBPcHVzU3BlY2lmaWNCb3ggdmVyc2lvbi4gKi8KQEAgLTg1 MTIsOCArODU1OSw4IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZG9wcyhNT1ZDb250ZXh0ICpjLCBB VklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBpZiAoKHJldCA9IGZmX2FsbG9jX2V4 dHJhZGF0YShzdC0+Y29kZWNwYXIsIHNpemUpKSA8IDApCiAgICAgICAgIHJldHVybiByZXQ7CiAK LSAgICBBVl9XTDMyQShzdC0+Y29kZWNwYXItPmV4dHJhZGF0YSwgTUtUQUcoJ08nLCdwJywndScs J3MnKSk7Ci0gICAgQVZfV0wzMkEoc3QtPmNvZGVjcGFyLT5leHRyYWRhdGEgKyA0LCBNS1RBRygn SCcsJ2UnLCdhJywnZCcpKTsKKyAgICBBVl9XTDMyQShzdC0+Y29kZWNwYXItPmV4dHJhZGF0YSwg TUtUQUcoJ08nLCAncCcsICd1JywgJ3MnKSk7CisgICAgQVZfV0wzMkEoc3QtPmNvZGVjcGFyLT5l eHRyYWRhdGEgKyA0LCBNS1RBRygnSCcsICdlJywgJ2EnLCAnZCcpKTsKICAgICBBVl9XQjgoc3Qt PmNvZGVjcGFyLT5leHRyYWRhdGEgKyA4LCAxKTsgLyogT3B1c0hlYWQgdmVyc2lvbiAqLwogICAg IGF2aW9fcmVhZChwYiwgc3QtPmNvZGVjcGFyLT5leHRyYWRhdGEgKyA5LCBzaXplIC0gOSk7CiAK QEAgLTg1MjgsMTUgKzg1NzUsMTkgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9kb3BzKE1PVkNvbnRl eHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogCiAgICAgc3QtPmNvZGVjcGFy LT5pbml0aWFsX3BhZGRpbmcgPSBwcmVfc2tpcDsKICAgICBzdC0+Y29kZWNwYXItPnNlZWtfcHJl cm9sbCA9IGF2X3Jlc2NhbGVfcShPUFVTX1NFRUtfUFJFUk9MTF9NUywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVZSYXRpb25hbCl7MSwgMTAwMH0sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFWUmF0aW9uYWwp ezEsIDQ4MDAwfSk7CisgICAgICAgIChBVlJhdGlvbmFsKSB7CisgICAgICAgIDEsIDEwMDAKKyAg ICB9LAorICAgICAgICAoQVZSYXRpb25hbCkgeworICAgICAgICAxLCA0ODAwMAorICAgIH0pOwog CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfZG1scChNT1ZDb250ZXh0 ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRf ZG1scChNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAg ICBBVlN0cmVhbSAqc3Q7CisgICAgQVZTdHJlYW0qIHN0OwogICAgIHVuc2lnbmVkIGZvcm1hdF9p bmZvOwogICAgIGludCBjaGFubmVsX2Fzc2lnbm1lbnQsIGNoYW5uZWxfYXNzaWdubWVudDEsIGNo YW5uZWxfYXNzaWdubWVudDI7CiAgICAgaW50IHJhdGViaXRzOwpAQCAtODU0NCwxNCArODU5NSwx NCBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2RtbHAoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQg KnBiLCBNT1ZBdG9tIGF0b20pCiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0cmVhbXMgPCAxKQogICAg ICAgICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5zdHJlYW1zW2MtPmZjLT5uYl9zdHJlYW1z LTFdOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMgLSAxXTsKIAog ICAgIGlmIChhdG9tLnNpemUgPCAxMCkKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CiAKICAgICBmb3JtYXRfaW5mbyA9IGF2aW9fcmIzMihwYik7CiAKLSAgICByYXRlYml0cyAg ICAgICAgICAgID0gKGZvcm1hdF9pbmZvID4+IDI4KSAmIDB4RjsKKyAgICByYXRlYml0cyA9IChm b3JtYXRfaW5mbyA+PiAyOCkgJiAweEY7CiAgICAgY2hhbm5lbF9hc3NpZ25tZW50MSA9IChmb3Jt YXRfaW5mbyA+PiAxNSkgJiAweDFGOwogICAgIGNoYW5uZWxfYXNzaWdubWVudDIgPSBmb3JtYXRf aW5mbyAmIDB4MUZGRjsKICAgICBpZiAoY2hhbm5lbF9hc3NpZ25tZW50MikKQEAgLTg1NjksMTYg Kzg2MjAsMTYgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9kbWxwKE1PVkNvbnRleHQgKmMsIEFWSU9D b250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50 IG1vdl9yZWFkX2R2Y2NfZHZ2YyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0 b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfZHZjY19kdnZjKE1PVkNvbnRleHQqIGMsIEFW SU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEFWU3RyZWFtICpzdDsKKyAgICBB VlN0cmVhbSogc3Q7CiAgICAgdWludDhfdCBidWZbSVNPTV9EVkNDX0RWVkNfU0laRV07CiAgICAg aW50IHJldDsKICAgICBpbnQ2NF90IHJlYWRfc2l6ZSA9IGF0b20uc2l6ZTsKIAogICAgIGlmIChj LT5mYy0+bmJfc3RyZWFtcyA8IDEpCiAgICAgICAgIHJldHVybiAwOwotICAgIHN0ID0gYy0+ZmMt PnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVhbXMtMV07CisgICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tj LT5mYy0+bmJfc3RyZWFtcyAtIDFdOwogCiAgICAgLy8gQXQgbW9zdCAyNCBieXRlcwogICAgIHJl YWRfc2l6ZSA9IEZGTUlOKHJlYWRfc2l6ZSwgSVNPTV9EVkNDX0RWVkNfU0laRSk7CkBAIC04NTg5 LDE1ICs4NjQwLDE1IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZHZjY19kdnZjKE1PVkNvbnRleHQg KmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIHJldHVybiBmZl9pc29tX3Bh cnNlX2R2Y2NfZHZ2YyhjLT5mYywgc3QsIGJ1ZiwgcmVhZF9zaXplKTsKIH0KIAotc3RhdGljIGlu dCBtb3ZfcmVhZF9saHZjKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBh dG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9saHZjKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0 KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEFWU3RyZWFtICpzdDsKLSAgICB1aW50OF90ICpi dWY7CisgICAgQVZTdHJlYW0qIHN0OworICAgIHVpbnQ4X3QqIGJ1ZjsKICAgICBpbnQgcmV0LCBv bGRfc2l6ZSwgbnVtX2FycmF5czsKIAogICAgIGlmIChjLT5mYy0+bmJfc3RyZWFtcyA8IDEpCiAg ICAgICAgIHJldHVybiAwOwotICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMtPm5iX3N0cmVh bXMtMV07CisgICAgc3QgPSBjLT5mYy0+c3RyZWFtc1tjLT5mYy0+bmJfc3RyZWFtcyAtIDFdOwog CiAgICAgaWYgKCFzdC0+Y29kZWNwYXItPmV4dHJhZGF0YV9zaXplKQogICAgICAgICAvLyBUT0RP OiBoYW5kbGUgbGh2QyB3aGVuIHByZXNlbnQgYmVmb3JlIGh2Y0MKQEAgLTg2MjEsNyArODY3Miw3 IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfbGh2YyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIE1PVkF0b20gYXRvbSkKICAgICBudW1fYXJyYXlzID0gYnVmWzVdOwogICAgIG9sZF9zaXpl ID0gc3QtPmNvZGVjcGFyLT5leHRyYWRhdGFfc2l6ZTsKICAgICBhdG9tLnNpemUgLT0gOCAvKiBh Y2NvdW50IGZvciBtb3ZfcmVhbGxvY19leHRyYWRhdGEgb2Zmc2V0dGluZyAqLwotICAgICAgICAg ICAgICAgKyA2IC8qIGxodkMgYnl0ZXMgYmVmb3JlIHRoZSBhcnJheXMqLzsKKyAgICAgICAgKyA2 IC8qIGxodkMgYnl0ZXMgYmVmb3JlIHRoZSBhcnJheXMqLzsKIAogICAgIHJldCA9IG1vdl9yZWFs bG9jX2V4dHJhZGF0YShzdC0+Y29kZWNwYXIsIGF0b20pOwogICAgIGlmIChyZXQgPCAwKSB7CkBA IC04NjM4LDEwICs4Njg5LDEwIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfbGh2YyhNT1ZDb250ZXh0 ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAot c3RhdGljIGludCBtb3ZfcmVhZF9raW5kKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwg TU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9raW5kKE1PVkNvbnRleHQqIGMsIEFW SU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEFWRm9ybWF0Q29udGV4dCAqY3R4 ID0gYy0+ZmM7Ci0gICAgQVZTdHJlYW0gKnN0ID0gTlVMTDsKKyAgICBBVkZvcm1hdENvbnRleHQq IGN0eCA9IGMtPmZjOworICAgIEFWU3RyZWFtKiBzdCA9IE5VTEw7CiAgICAgQVZCUHJpbnQgc2No ZW1lX2J1ZiwgdmFsdWVfYnVmOwogICAgIGludDY0X3Qgc2NoZW1lX3N0cl9sZW4gPSAwLCB2YWx1 ZV9zdHJfbGVuID0gMDsKICAgICBpbnQgdmVyc2lvbiwgZmxhZ3MsIHJldCA9IEFWRVJST1JfQlVH OwpAQCAtODY1MywyNCArODcwNCwyNCBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2tpbmQoTU9WQ29u dGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAKICAgICBpZiAoYy0+ZmMt Pm5iX3N0cmVhbXMgPCAxKQogICAgICAgICByZXR1cm4gMDsKLSAgICBzdCA9IGMtPmZjLT5zdHJl YW1zW2MtPmZjLT5uYl9zdHJlYW1zLTFdOworICAgIHN0ID0gYy0+ZmMtPnN0cmVhbXNbYy0+ZmMt Pm5iX3N0cmVhbXMgLSAxXTsKIAogICAgIHZlcnNpb24gPSBhdmlvX3I4KHBiKTsKLSAgICBmbGFn cyAgID0gYXZpb19yYjI0KHBiKTsKLSAgICBzaXplICAgLT0gNDsKKyAgICBmbGFncyA9IGF2aW9f cmIyNChwYik7CisgICAgc2l6ZSAtPSA0OwogCiAgICAgaWYgKHZlcnNpb24gIT0gMCB8fCBmbGFn cyAhPSAwKSB7CiAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKLSAgICAgICAgICAg ICAgICJVbnN1cHBvcnRlZCAna2luZCcgYm94IHdpdGggdmVyc2lvbiAlZCwgZmxhZ3M6ICV4IiwK LSAgICAgICAgICAgICAgIHZlcnNpb24sIGZsYWdzKTsKKyAgICAgICAgICAgICJVbnN1cHBvcnRl ZCAna2luZCcgYm94IHdpdGggdmVyc2lvbiAlZCwgZmxhZ3M6ICV4IiwKKyAgICAgICAgICAgIHZl cnNpb24sIGZsYWdzKTsKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAgICAg fQogCiAgICAgYXZfYnByaW50X2luaXQoJnNjaGVtZV9idWYsIDAsIEFWX0JQUklOVF9TSVpFX1VO TElNSVRFRCk7Ci0gICAgYXZfYnByaW50X2luaXQoJnZhbHVlX2J1ZiwgIDAsIEFWX0JQUklOVF9T SVpFX1VOTElNSVRFRCk7CisgICAgYXZfYnByaW50X2luaXQoJnZhbHVlX2J1ZiwgMCwgQVZfQlBS SU5UX1NJWkVfVU5MSU1JVEVEKTsKIAogICAgIGlmICgoc2NoZW1lX3N0cl9sZW4gPSBmZl9yZWFk X3N0cmluZ190b19icHJpbnRfb3ZlcndyaXRlKHBiLCAmc2NoZW1lX2J1ZiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKSkg PCAwKSB7CisgICAgICAgIHNpemUpKSA8IDApIHsKICAgICAgICAgcmV0ID0gc2NoZW1lX3N0cl9s ZW47CiAgICAgICAgIGdvdG8gY2xlYW51cDsKICAgICB9CkBAIC04Njg2LDcgKzg3MzcsNyBAQCBz dGF0aWMgaW50IG1vdl9yZWFkX2tpbmQoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBN T1ZBdG9tIGF0b20pCiAgICAgc2l6ZSAtPSBzY2hlbWVfc3RyX2xlbiArIDE7CiAKICAgICBpZiAo KHZhbHVlX3N0cl9sZW4gPSBmZl9yZWFkX3N0cmluZ190b19icHJpbnRfb3ZlcndyaXRlKHBiLCAm dmFsdWVfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZSkpIDwgMCkgeworICAgICAgICBzaXplKSkgPCAwKSB7CiAgICAg ICAgIHJldCA9IHZhbHVlX3N0cl9sZW47CiAgICAgICAgIGdvdG8gY2xlYW51cDsKICAgICB9CkBA IC04Njk4LDEwICs4NzQ5LDEwIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfa2luZChNT1ZDb250ZXh0 ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICB9CiAKICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfVFJBQ0UsCi0gICAgICAgICAgICIlcyBzdHJlYW0gJWQgS2luZEJveChzY2hl bWU6ICVzLCB2YWx1ZTogJXMpXG4iLAotICAgICAgICAgICBhdl9nZXRfbWVkaWFfdHlwZV9zdHJp bmcoc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlKSwKLSAgICAgICAgICAgc3QtPmluZGV4LAotICAg ICAgICAgICBzY2hlbWVfYnVmLnN0ciwgdmFsdWVfYnVmLnN0cik7CisgICAgICAgICIlcyBzdHJl YW0gJWQgS2luZEJveChzY2hlbWU6ICVzLCB2YWx1ZTogJXMpXG4iLAorICAgICAgICBhdl9nZXRf bWVkaWFfdHlwZV9zdHJpbmcoc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlKSwKKyAgICAgICAgc3Qt PmluZGV4LAorICAgICAgICBzY2hlbWVfYnVmLnN0ciwgdmFsdWVfYnVmLnN0cik7CiAKICAgICBm b3IgKGludCBpID0gMDsgZmZfbW92X3RyYWNrX2tpbmRfdGFibGVbaV0uc2NoZW1lX3VyaTsgaSsr KSB7CiAgICAgICAgIGNvbnN0IHN0cnVjdCBNUDRUcmFja0tpbmRNYXBwaW5nIG1hcCA9IGZmX21v dl90cmFja19raW5kX3RhYmxlW2ldOwpAQCAtODcyMiwxNCArODc3MywxNCBAQCBzdGF0aWMgaW50 IG1vdl9yZWFkX2tpbmQoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0 b20pCiBjbGVhbnVwOgogCiAgICAgYXZfYnByaW50X2ZpbmFsaXplKCZzY2hlbWVfYnVmLCBOVUxM KTsKLSAgICBhdl9icHJpbnRfZmluYWxpemUoJnZhbHVlX2J1ZiwgIE5VTEwpOworICAgIGF2X2Jw cmludF9maW5hbGl6ZSgmdmFsdWVfYnVmLCBOVUxMKTsKIAogICAgIHJldHVybiByZXQ7CiB9CiAK LXN0YXRpYyBpbnQgbW92X3JlYWRfU0EzRChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIs IE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfU0EzRChNT1ZDb250ZXh0KiBjLCBB VklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBBVlN0cmVhbSAqc3Q7CisgICAg QVZTdHJlYW0qIHN0OwogICAgIEFWQ2hhbm5lbExheW91dCBjaF9sYXlvdXQgPSB7IDAgfTsKICAg ICBpbnQgcmV0LCBpLCB2ZXJzaW9uLCB0eXBlOwogICAgIGludCBhbWJpc29uaWNfb3JkZXIsIGNo YW5uZWxfb3JkZXIsIG5vcm1hbGl6YXRpb24sIGNoYW5uZWxfY291bnQ7CkBAIC04NzU0LDcgKzg4 MDUsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX1NBM0QoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRl eHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgdHlwZSA9IGF2aW9fcjgocGIpOwogICAgIGlmICh0 eXBlICYgMHg3ZikgewogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19XQVJOSU5HLAotICAg ICAgICAgICAgICAgIlVuc3VwcG9ydGVkIGFtYmlzb25pYyB0eXBlICVkXG4iLCB0eXBlICYgMHg3 Zik7CisgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgYW1iaXNvbmljIHR5cGUgJWRcbiIsIHR5cGUg JiAweDdmKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIG5vbl9kaWVnZXRpY19jaGFu bmVscyA9ICh0eXBlID4+IDcpICogMjsgLy8gaGVhZF9sb2NrZWRfc3RlcmVvCkBAIC04NzY0LDI0 ICs4ODE1LDI0IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfU0EzRChNT1ZDb250ZXh0ICpjLCBBVklP Q29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBjaGFubmVsX29yZGVyID0gYXZpb19yOChw Yik7CiAgICAgaWYgKGNoYW5uZWxfb3JkZXIpIHsKICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9M T0dfV0FSTklORywKLSAgICAgICAgICAgICAgICJVbnN1cHBvcnRlZCBjaGFubmVsX29yZGVyICVk XG4iLCBjaGFubmVsX29yZGVyKTsKKyAgICAgICAgICAgICJVbnN1cHBvcnRlZCBjaGFubmVsX29y ZGVyICVkXG4iLCBjaGFubmVsX29yZGVyKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAg ICAgbm9ybWFsaXphdGlvbiA9IGF2aW9fcjgocGIpOwogICAgIGlmIChub3JtYWxpemF0aW9uKSB7 CiAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAi VW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiAlZFxuIiwgbm9ybWFsaXphdGlvbik7CisgICAgICAg ICAgICAiVW5zdXBwb3J0ZWQgbm9ybWFsaXphdGlvbiAlZFxuIiwgbm9ybWFsaXphdGlvbik7CiAg ICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGNoYW5uZWxfY291bnQgPSBhdmlvX3JiMzIo cGIpOwogICAgIGlmIChhbWJpc29uaWNfb3JkZXIgPCAwIHx8IGFtYmlzb25pY19vcmRlciA+IDMx IHx8CiAgICAgICAgIGNoYW5uZWxfY291bnQgIT0gKChhbWJpc29uaWNfb3JkZXIgKyAxTEwpICog KGFtYmlzb25pY19vcmRlciArIDFMTCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9u X2RpZWdldGljX2NoYW5uZWxzKSkgeworICAgICAgICAgICAgbm9uX2RpZWdldGljX2NoYW5uZWxz KSkgewogICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19FUlJPUiwKLSAgICAgICAgICAgICAg ICJJbnZhbGlkIG51bWJlciBvZiBjaGFubmVscyAoJWQgLyAlZClcbiIsCi0gICAgICAgICAgICAg ICBjaGFubmVsX2NvdW50LCBhbWJpc29uaWNfb3JkZXIpOworICAgICAgICAgICAgIkludmFsaWQg bnVtYmVyIG9mIGNoYW5uZWxzICglZCAvICVkKVxuIiwKKyAgICAgICAgICAgIGNoYW5uZWxfY291 bnQsIGFtYmlzb25pY19vcmRlcik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBhbWJp X2NoYW5uZWxzID0gY2hhbm5lbF9jb3VudCAtIG5vbl9kaWVnZXRpY19jaGFubmVsczsKQEAgLTg3 OTUsNyArODg0Niw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfU0EzRChNT1ZDb250ZXh0ICpjLCBB VklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKIAogICAgICAgICBpZiAoY2hhbm5lbCA+PSBj aGFubmVsX2NvdW50KSB7CiAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19FUlJPUiwg IkludmFsaWQgY2hhbm5lbCBpbmRleCAoJWQgLyAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAg Y2hhbm5lbCwgYW1iaXNvbmljX29yZGVyKTsKKyAgICAgICAgICAgICAgICBjaGFubmVsLCBhbWJp c29uaWNfb3JkZXIpOwogICAgICAgICAgICAgYXZfY2hhbm5lbF9sYXlvdXRfdW5pbml0KCZjaF9s YXlvdXQpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTg4MTcsOSArODg2 OCw5IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfU0EzRChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4 dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3Zf cmVhZF9TQU5EKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQor c3RhdGljIGludCBtb3ZfcmVhZF9TQU5EKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwg TU9WQXRvbSBhdG9tKQogewotICAgIEFWU3RyZWFtICpzdDsKKyAgICBBVlN0cmVhbSogc3Q7CiAg ICAgaW50IHZlcnNpb247CiAKICAgICBpZiAoYy0+ZmMtPm5iX3N0cmVhbXMgPCAxKQpAQCAtODg0 Myw3ICs4ODk0LDcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9TQU5EKE1PVkNvbnRleHQgKmMsIEFW SU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMg aW50IHJiX3NpemUoQVZJT0NvbnRleHQgKnBiLCBpbnQ2NF90ICp2YWx1ZSwgaW50IHNpemUpCitz dGF0aWMgaW50IHJiX3NpemUoQVZJT0NvbnRleHQqIHBiLCBpbnQ2NF90KiB2YWx1ZSwgaW50IHNp emUpCiB7CiAgICAgaWYgKHNpemUgPT0gMCkKICAgICAgICAgKnZhbHVlID0gMDsKQEAgLTg4NTcs MTIgKzg5MDgsMTMgQEAgc3RhdGljIGludCByYl9zaXplKEFWSU9Db250ZXh0ICpwYiwgaW50NjRf dCAqdmFsdWUsIGludCBzaXplKQogICAgICAgICAqdmFsdWUgPSBhdmlvX3JiNjQocGIpOwogICAg ICAgICBpZiAoKnZhbHVlIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UK KyAgICB9CisgICAgZWxzZQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIHNpemU7CiB9 CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfcGl0bShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfcGl0bShNT1ZDb250ZXh0KiBj LCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKICAgICBhdmlvX3JiMzIocGIpOyAg Ly8gdmVyc2lvbiAmIGZsYWdzLgogICAgIGMtPnByaW1hcnlfaXRlbV9pZCA9IGF2aW9fcmIxNihw Yik7CkBAIC04ODcwLDE1ICs4OTIyLDE1IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfcGl0bShNT1ZD b250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1cm4gYXRv bS5zaXplOwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFkX2lkYXQoTU9WQ29udGV4dCAqYywgQVZJ T0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX2lkYXQoTU9W Q29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7CiAgICAgYy0+aWRh dF9vZmZzZXQgPSBhdmlvX3RlbGwocGIpOwogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50 IG1vdl9yZWFkX2lsb2MoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0 b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX2lsb2MoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQq IHBiLCBNT1ZBdG9tIGF0b20pCiB7Ci0gICAgSEVJRkl0ZW0gKipoZWlmX2l0ZW07CisgICAgSEVJ Rkl0ZW0qKiBoZWlmX2l0ZW07CiAgICAgaW50IHZlcnNpb24sIG9mZnNldF9zaXplLCBsZW5ndGhf c2l6ZSwgYmFzZV9vZmZzZXRfc2l6ZSwgaW5kZXhfc2l6ZTsKICAgICBpbnQgaXRlbV9jb3VudCwg ZXh0ZW50X2NvdW50OwogICAgIGludDY0X3QgYmFzZV9vZmZzZXQsIGV4dGVudF9vZmZzZXQsIGV4 dGVudF9sZW5ndGg7CkBAIC04OTEwLDEyICs4OTYyLDEyIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRf aWxvYyhNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBj LT5oZWlmX2l0ZW0gPSBoZWlmX2l0ZW07CiAgICAgaWYgKGl0ZW1fY291bnQgPiBjLT5uYl9oZWlm X2l0ZW0pCiAgICAgICAgIG1lbXNldCgmYy0+aGVpZl9pdGVtW2MtPm5iX2hlaWZfaXRlbV0sIDAs Ci0gICAgICAgICAgICAgICBzaXplb2YoKmMtPmhlaWZfaXRlbSkgKiAoaXRlbV9jb3VudCAtIGMt Pm5iX2hlaWZfaXRlbSkpOworICAgICAgICAgICAgc2l6ZW9mKCpjLT5oZWlmX2l0ZW0pICogKGl0 ZW1fY291bnQgLSBjLT5uYl9oZWlmX2l0ZW0pKTsKICAgICBjLT5uYl9oZWlmX2l0ZW0gPSBGRk1B WChjLT5uYl9oZWlmX2l0ZW0sIGl0ZW1fY291bnQpOwogCiAgICAgYXZfbG9nKGMtPmZjLCBBVl9M T0dfVFJBQ0UsICJpbG9jOiBpdGVtX2NvdW50ICVkXG4iLCBpdGVtX2NvdW50KTsKICAgICBmb3Ig KGludCBpID0gMDsgaSA8IGl0ZW1fY291bnQ7IGkrKykgewotICAgICAgICBIRUlGSXRlbSAqaXRl bSA9IE5VTEw7CisgICAgICAgIEhFSUZJdGVtKiBpdGVtID0gTlVMTDsKICAgICAgICAgaW50IGl0 ZW1faWQgPSAodmVyc2lvbiA8IDIpID8gYXZpb19yYjE2KHBiKSA6IGF2aW9fcmIzMihwYik7CiAg ICAgICAgIGludCBvZmZzZXRfdHlwZSA9ICh2ZXJzaW9uID4gMCkgPyBhdmlvX3JiMTYocGIpICYg MHhmIDogMDsKIApAQCAtODk1OSwxNyArOTAxMSwxNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2ls b2MoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgICAg IGl0ZW0tPmV4dGVudF9sZW5ndGggPSBleHRlbnRfbGVuZ3RoOwogICAgICAgICBpdGVtLT5leHRl bnRfb2Zmc2V0ID0gYmFzZV9vZmZzZXQgKyBleHRlbnRfb2Zmc2V0OwogICAgICAgICBhdl9sb2co Yy0+ZmMsIEFWX0xPR19UUkFDRSwgImlsb2M6IGl0ZW1faWR4ICVkLCBpdGVtLT5pdGVtX2lkICVk LCBvZmZzZXRfdHlwZSAlZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ImV4dGVudF9vZmZzZXQgJSJQUklkNjQiLCBleHRlbnRfbGVuZ3RoICUiUFJJZDY0IlxuIiwKLSAg ICAgICAgICAgICAgIGksIGl0ZW0tPml0ZW1faWQsIG9mZnNldF90eXBlLCBpdGVtLT5leHRlbnRf b2Zmc2V0LCBpdGVtLT5leHRlbnRfbGVuZ3RoKTsKKyAgICAgICAgICAgICJleHRlbnRfb2Zmc2V0 ICUiUFJJZDY0IiwgZXh0ZW50X2xlbmd0aCAlIlBSSWQ2NCJcbiIsCisgICAgICAgICAgICBpLCBp dGVtLT5pdGVtX2lkLCBvZmZzZXRfdHlwZSwgaXRlbS0+ZXh0ZW50X29mZnNldCwgaXRlbS0+ZXh0 ZW50X2xlbmd0aCk7CiAgICAgfQogCiAgICAgYy0+Zm91bmRfaWxvYyA9IDE7CiAgICAgcmV0dXJu IGF0b20uc2l6ZTsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9pbmZlKE1PVkNvbnRleHQgKmMs IEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9pbmZl KE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEhF SUZJdGVtICppdGVtID0gTlVMTDsKKyAgICBIRUlGSXRlbSogaXRlbSA9IE5VTEw7CiAgICAgQVZC UHJpbnQgaXRlbV9uYW1lOwogICAgIGludDY0X3Qgc2l6ZSA9IGF0b20uc2l6ZTsKICAgICB1aW50 MzJfdCBpdGVtX3R5cGU7CkBAIC05MDAzLDcgKzkwNTUsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFk X2luZmUoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAg fQogCiAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfVFJBQ0UsICJpbmZlOiBpdGVtX2lkICVkLCBp dGVtX3R5cGUgJXMsIGl0ZW1fbmFtZSAlc1xuIiwKLSAgICAgICAgICAgaXRlbV9pZCwgYXZfZm91 cmNjMnN0cihpdGVtX3R5cGUpLCBpdGVtX25hbWUuc3RyKTsKKyAgICAgICAgaXRlbV9pZCwgYXZf Zm91cmNjMnN0cihpdGVtX3R5cGUpLCBpdGVtX25hbWUuc3RyKTsKIAogICAgIHNpemUgLT0gcmV0 ICsgMTsKICAgICBpZiAoc2l6ZSA+IDApCkBAIC05MDI1LDEyICs5MDc3LDEyIEBAIHN0YXRpYyBp bnQgbW92X3JlYWRfaW5mZShNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20g YXRvbSkKICAgICBhdl9mcmVlcCgmaXRlbS0+bmFtZSk7CiAgICAgYXZfYnByaW50X2ZpbmFsaXpl KCZpdGVtX25hbWUsIHJldCA/ICZpdGVtLT5uYW1lIDogTlVMTCk7CiAgICAgaXRlbS0+aXRlbV9p ZCA9IGl0ZW1faWQ7Ci0gICAgaXRlbS0+dHlwZSAgICA9IGl0ZW1fdHlwZTsKKyAgICBpdGVtLT50 eXBlID0gaXRlbV90eXBlOwogCiAgICAgc3dpdGNoIChpdGVtX3R5cGUpIHsKLSAgICBjYXNlIE1L VEFHKCdhJywndicsJzAnLCcxJyk6Ci0gICAgY2FzZSBNS1RBRygnaicsJ3AnLCdlJywnZycpOgot ICAgIGNhc2UgTUtUQUcoJ2gnLCd2JywnYycsJzEnKToKKyAgICBjYXNlIE1LVEFHKCdhJywgJ3Yn LCAnMCcsICcxJyk6CisgICAgY2FzZSBNS1RBRygnaicsICdwJywgJ2UnLCAnZycpOgorICAgIGNh c2UgTUtUQUcoJ2gnLCAndicsICdjJywgJzEnKToKICAgICAgICAgcmV0ID0gaGVpZl9hZGRfc3Ry ZWFtKGMsIGl0ZW0pOwogICAgICAgICBpZiAocmV0IDwgMCkKICAgICAgICAgICAgIHJldHVybiBy ZXQ7CkBAIC05MDQwLDkgKzkwOTIsOSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2luZmUoTU9WQ29u dGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmV0dXJuIDA7CiB9 CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfaWluZihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92X3JlYWRfaWluZihNT1ZDb250ZXh0KiBj LCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkKIHsKLSAgICBIRUlGSXRlbSAqKmhlaWZf aXRlbTsKKyAgICBIRUlGSXRlbSoqIGhlaWZfaXRlbTsKICAgICBpbnQgZW50cnlfY291bnQ7CiAg ICAgaW50IHZlcnNpb24sIGdvdF9zdHJlYW0gPSAwLCByZXQsIGk7CiAKQEAgLTkwNjEsNyArOTEx Myw3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfaWluZihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4 dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICBjLT5oZWlmX2l0ZW0gPSBoZWlmX2l0ZW07CiAgICAg aWYgKGVudHJ5X2NvdW50ID4gYy0+bmJfaGVpZl9pdGVtKQogICAgICAgICBtZW1zZXQoJmMtPmhl aWZfaXRlbVtjLT5uYl9oZWlmX2l0ZW1dLCAwLAotICAgICAgICAgICAgICAgc2l6ZW9mKCpjLT5o ZWlmX2l0ZW0pICogKGVudHJ5X2NvdW50IC0gYy0+bmJfaGVpZl9pdGVtKSk7CisgICAgICAgICAg ICBzaXplb2YoKmMtPmhlaWZfaXRlbSkgKiAoZW50cnlfY291bnQgLSBjLT5uYl9oZWlmX2l0ZW0p KTsKICAgICBjLT5uYl9oZWlmX2l0ZW0gPSBGRk1BWChjLT5uYl9oZWlmX2l0ZW0sIGVudHJ5X2Nv dW50KTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBlbnRyeV9jb3VudDsgaSsrKSB7CkBAIC05MDg0 LDcgKzkxMzYsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2lpbmYoTU9WQ29udGV4dCAqYywgQVZJ T0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgcmV0dXJuIDA7CiBmYWlsOgogICAgIGZv ciAoOyBpID49IDA7IGktLSkgewotICAgICAgICBIRUlGSXRlbSAqaXRlbSA9IGMtPmhlaWZfaXRl bVtpXTsKKyAgICAgICAgSEVJRkl0ZW0qIGl0ZW0gPSBjLT5oZWlmX2l0ZW1baV07CiAKICAgICAg ICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgY29udGludWU7CkBAIC05MDk0LDE3ICs5MTQ2LDE3 IEBAIGZhaWw6CiAgICAgcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9pcmVm X2RpbWcoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBpbnQgdmVyc2lvbikKK3N0YXRp YyBpbnQgbW92X3JlYWRfaXJlZl9kaW1nKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwg aW50IHZlcnNpb24pCiB7Ci0gICAgSEVJRkl0ZW0gKml0ZW0gPSBOVUxMOwotICAgIEhFSUZHcmlk ICpncmlkOworICAgIEhFSUZJdGVtKiBpdGVtID0gTlVMTDsKKyAgICBIRUlGR3JpZCogZ3JpZDsK ICAgICBpbnQgZW50cmllcywgaTsKICAgICBpbnQgZnJvbV9pdGVtX2lkID0gdmVyc2lvbiA/IGF2 aW9fcmIzMihwYikgOiBhdmlvX3JiMTYocGIpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj LT5uYl9oZWlmX2dyaWQ7IGkrKykgewogICAgICAgICBpZiAoYy0+aGVpZl9ncmlkW2ldLml0ZW0t Pml0ZW1faWQgPT0gZnJvbV9pdGVtX2lkKSB7CiAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFW X0xPR19FUlJPUiwgIk1vcmUgdGhhbiBvbmUgJ2RpbWcnIGJveCAiCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jaW5nIHRoZSBzYW1lIERlcml2ZWQgSW1h Z2UgaXRlbVxuIik7CisgICAgICAgICAgICAgICAgInJlZmVyZW5jaW5nIHRoZSBzYW1lIERlcml2 ZWQgSW1hZ2UgaXRlbVxuIik7CiAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKICAgICAgICAgfQogICAgIH0KQEAgLTkxMTQsMTIgKzkxNjYsMTIgQEAgc3RhdGljIGludCBt b3ZfcmVhZF9pcmVmX2RpbWcoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBpbnQgdmVy c2lvbikKICAgICAgICAgaXRlbSA9IGMtPmhlaWZfaXRlbVtpXTsKIAogICAgICAgICBzd2l0Y2gg KGl0ZW0tPnR5cGUpIHsKLSAgICAgICAgY2FzZSBNS1RBRygnZycsJ3InLCdpJywnZCcpOgotICAg ICAgICBjYXNlIE1LVEFHKCdpJywnbycsJ3YnLCdsJyk6CisgICAgICAgIGNhc2UgTUtUQUcoJ2cn LCAncicsICdpJywgJ2QnKToKKyAgICAgICAgY2FzZSBNS1RBRygnaScsICdvJywgJ3YnLCAnbCcp OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBhdnBy aXZfcmVwb3J0X21pc3NpbmdfZmVhdHVyZShjLT5mYywgIkRlcml2ZWQgSW1hZ2UgaXRlbSBvZiB0 eXBlICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X2Zv dXJjYzJzdHIoaXRlbS0+dHlwZSkpOworICAgICAgICAgICAgICAgIGF2X2ZvdXJjYzJzdHIoaXRl bS0+dHlwZSkpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgYnJl YWs7CkBAIC05MTMwLDcgKzkxODIsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2lyZWZfZGltZyhN T1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIGludCB2ZXJzaW9uKQogICAgIH0KIAogICAg IGdyaWQgPSBhdl9yZWFsbG9jX2FycmF5KGMtPmhlaWZfZ3JpZCwgYy0+bmJfaGVpZl9ncmlkICsg MVUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpjLT5oZWlmX2dyaWQpKTsK KyAgICAgICAgc2l6ZW9mKCpjLT5oZWlmX2dyaWQpKTsKICAgICBpZiAoIWdyaWQpCiAgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiAgICAgYy0+aGVpZl9ncmlkID0gZ3JpZDsKQEAgLTkx NDksNDYgKzkyMDEsNDIgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9pcmVmX2RpbWcoTU9WQ29udGV4 dCAqYywgQVZJT0NvbnRleHQgKnBiLCBpbnQgdmVyc2lvbikKICAgICBncmlkLT5pdGVtID0gaXRl bTsKIAogICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX1RSQUNFLCAiZGltZzogZnJvbV9pdGVtX2lk ICVkLCBlbnRyaWVzICVkXG4iLAotICAgICAgICAgICBmcm9tX2l0ZW1faWQsIGVudHJpZXMpOwor ICAgICAgICBmcm9tX2l0ZW1faWQsIGVudHJpZXMpOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0 YXRpYyBpbnQgbW92X3JlYWRfaXJlZl9jZHNjKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpw YiwgdWludDMyX3QgdHlwZSwgaW50IHZlcnNpb24pCitzdGF0aWMgaW50IG1vdl9yZWFkX2lyZWZf dGhtYihNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIGludCB2ZXJzaW9uKQogewotICAg IEhFSUZJdGVtICpmcm9tX2l0ZW0gPSBOVUxMOworICAgIGludCogdGhtYl9pdGVtX2lkOwogICAg IGludCBlbnRyaWVzOwotICAgIGludCBmcm9tX2l0ZW1faWQgPSB2ZXJzaW9uID8gYXZpb19yYjMy KHBiKSA6IGF2aW9fcmIxNihwYik7Ci0gICAgY29uc3QgSEVJRkl0ZW1SZWYgcmVmID0geyB0eXBl LCBmcm9tX2l0ZW1faWQgfTsKLQotICAgIGZyb21faXRlbSA9IGdldF9oZWlmX2l0ZW0oYywgZnJv bV9pdGVtX2lkKTsKLSAgICBpZiAoIWZyb21faXRlbSkgewotICAgICAgICBhdl9sb2coYy0+ZmMs IEFWX0xPR19FUlJPUiwgIk1pc3Npbmcgc3RyZWFtIHJlZmVyZW5jZWQgYnkgdGhtYiBpdGVtXG4i KTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgfQorICAgIGludCB0 b19pdGVtX2lkLCBmcm9tX2l0ZW1faWQgPSB2ZXJzaW9uID8gYXZpb19yYjMyKHBiKSA6IGF2aW9f cmIxNihwYik7CiAKICAgICBlbnRyaWVzID0gYXZpb19yYjE2KHBiKTsKKyAgICBpZiAoZW50cmll cyA+IDEpIHsKKyAgICAgICAgYXZwcml2X3JlcXVlc3Rfc2FtcGxlKGMtPmZjLCAidGhtYiBpbiBp cmVmIHJlZmVyZW5jaW5nIHNldmVyYWwgaXRlbXMiKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf UEFUQ0hXRUxDT01FOworICAgIH0KICAgICAvKiAndG8nIGl0ZW0gaWRzICovCi0gICAgZm9yIChp bnQgaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKLSAgICAgICAgSEVJRkl0ZW0gKml0ZW0gPSBn ZXRfaGVpZl9pdGVtKGMsIHZlcnNpb24gPyBhdmlvX3JiMzIocGIpIDogYXZpb19yYjE2KHBiKSk7 Ci0gICAgICAgIGlmICghaXRlbSkgewotICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0df V0FSTklORywgIk1pc3Npbmcgc3RyZWFtIHJlZmVyZW5jZWQgYnkgJXMgaXRlbVxuIiwKLSAgICAg ICAgICAgICAgICAgICBhdl9mb3VyY2Myc3RyKHR5cGUpKTsKLSAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICB9CisgICAgdG9faXRlbV9pZCA9IHZlcnNpb24gPyBhdmlvX3JiMzIocGIpIDog YXZpb19yYjE2KHBiKTsKIAotICAgICAgICBpZiAoIWF2X2R5bmFycmF5Ml9hZGQoKHZvaWQgKiop Jml0ZW0tPmlyZWZfbGlzdCwgJml0ZW0tPm5iX2lyZWZfbGlzdCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZigqaXRlbS0+aXJlZl9saXN0KSwgKGNvbnN0IHVpbnQ4X3QgKikm cmVmKSkKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgfQorICAgIGlm ICh0b19pdGVtX2lkICE9IGMtPnByaW1hcnlfaXRlbV9pZCkKKyAgICAgICAgcmV0dXJuIDA7CisK KyAgICAvKiBQdXQgdGh1bW5iYWlsIElEcyBpbnRvIGFuIGFycmF5ICovCisgICAgdGhtYl9pdGVt X2lkID0gYXZfZHluYXJyYXkyX2FkZCgodm9pZCoqKSZjLT50aG1iX2l0ZW1faWQsICZjLT5uYl90 aG1iX2l0ZW0sCisgICAgICAgIHNpemVvZigqYy0+dGhtYl9pdGVtX2lkKSwKKyAgICAgICAgKGNv bnN0IHZvaWQqKSZmcm9tX2l0ZW1faWQpOworICAgIGlmICghdGhtYl9pdGVtX2lkKQorICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwogCi0gICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfVFJB Q0UsICIlczogZnJvbV9pdGVtX2lkICVkLCBlbnRyaWVzICVkXG4iLAotICAgICAgICAgICBhdl9m b3VyY2Myc3RyKHR5cGUpLCBmcm9tX2l0ZW1faWQsIGVudHJpZXMpOworICAgIGF2X2xvZyhjLT5m YywgQVZfTE9HX1RSQUNFLCAidGhtYjogZnJvbV9pdGVtX2lkICVkLCBlbnRyaWVzICVkLCBuYl90 aG1iOiAlZFxuIiwKKyAgICAgICAgZnJvbV9pdGVtX2lkLCBlbnRyaWVzLCBjLT5uYl90aG1iX2l0 ZW0pOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfaXJlZihNT1ZD b250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKK3N0YXRpYyBpbnQgbW92 X3JlYWRfaXJlZihNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIsIE1PVkF0b20gYXRvbSkK IHsKICAgICBpbnQgdmVyc2lvbiA9IGF2aW9fcjgocGIpOwogICAgIGF2aW9fcmIyNChwYik7IC8v IGZsYWdzCkBAIC05MjA5LDE2ICs5MjU3LDE1IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfaXJlZihN T1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICAgICAgbmV4 dCArPSBzaXplIC0gNDsKICAgICAgICAgdHlwZSA9IGF2aW9fcmwzMihwYik7CiAgICAgICAgIHN3 aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIE1LVEFHKCdkJywnaScsJ20nLCdnJyk6CisgICAg ICAgIGNhc2UgTUtUQUcoJ2QnLCAnaScsICdtJywgJ2cnKToKICAgICAgICAgICAgIG1vdl9yZWFk X2lyZWZfZGltZyhjLCBwYiwgdmVyc2lvbik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg Y2FzZSBNS1RBRygnYycsJ2QnLCdzJywnYycpOgotICAgICAgICBjYXNlIE1LVEFHKCd0JywnaCcs J20nLCdiJyk6Ci0gICAgICAgICAgICBtb3ZfcmVhZF9pcmVmX2Nkc2MoYywgcGIsIHR5cGUsIHZl cnNpb24pOworICAgICAgICBjYXNlIE1LVEFHKCd0JywgJ2gnLCAnbScsICdiJyk6CisgICAgICAg ICAgICBtb3ZfcmVhZF9pcmVmX3RobWIoYywgcGIsIHZlcnNpb24pOwogICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19E RUJVRywgIlVua25vd24gaXJlZiB0eXBlICVzIHNpemUgJSJQUkl1MzIiXG4iLAotICAgICAgICAg ICAgICAgICAgIGF2X2ZvdXJjYzJzdHIodHlwZSksIHNpemUpOworICAgICAgICAgICAgICAgIGF2 X2ZvdXJjYzJzdHIodHlwZSksIHNpemUpOwogICAgICAgICB9CiAKICAgICAgICAgYXRvbS5zaXpl IC09IHNpemU7CkBAIC05MjI3LDM5ICs5Mjc0LDM5IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfaXJl ZihNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkKICAgICByZXR1 cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9pc3BlKE1PVkNvbnRleHQgKmMsIEFWSU9D b250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBtb3ZfcmVhZF9pc3BlKE1PVkNv bnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9tKQogewotICAgIEhFSUZJdGVt ICppdGVtOworICAgIEhFSUZJdGVtKiBpdGVtOwogICAgIHVpbnQzMl90IHdpZHRoLCBoZWlnaHQ7 CiAKICAgICBhdmlvX3I4KHBiKTsgIC8qIHZlcnNpb24gKi8KICAgICBhdmlvX3JiMjQocGIpOyAg LyogZmxhZ3MgKi8KLSAgICB3aWR0aCAgPSBhdmlvX3JiMzIocGIpOworICAgIHdpZHRoID0gYXZp b19yYjMyKHBiKTsKICAgICBoZWlnaHQgPSBhdmlvX3JiMzIocGIpOwogCiAgICAgYXZfbG9nKGMt PmZjLCBBVl9MT0dfVFJBQ0UsICJpc3BlOiBpdGVtX2lkICVkLCB3aWR0aCAldSwgaGVpZ2h0ICV1 XG4iLAotICAgICAgICAgICBjLT5jdXJfaXRlbV9pZCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAg IGMtPmN1cl9pdGVtX2lkLCB3aWR0aCwgaGVpZ2h0KTsKIAotICAgIGl0ZW0gPSBnZXRfaGVpZl9p dGVtKGMsIGMtPmN1cl9pdGVtX2lkKTsKKyAgICBpdGVtID0gaGVpZl9jdXJfaXRlbShjKTsKICAg ICBpZiAoaXRlbSkgewotICAgICAgICBpdGVtLT53aWR0aCAgPSB3aWR0aDsKKyAgICAgICAgaXRl bS0+d2lkdGggPSB3aWR0aDsKICAgICAgICAgaXRlbS0+aGVpZ2h0ID0gaGVpZ2h0OwogICAgIH0K IAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1vdl9yZWFkX2lyb3QoTU9WQ29udGV4 dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFk X2lyb3QoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7Ci0g ICAgSEVJRkl0ZW0gKml0ZW07CisgICAgSEVJRkl0ZW0qIGl0ZW07CiAgICAgaW50IGFuZ2xlOwog CiAgICAgYW5nbGUgPSBhdmlvX3I4KHBiKSAmIDB4MzsKIAogICAgIGF2X2xvZyhjLT5mYywgQVZf TE9HX1RSQUNFLCAiaXJvdDogaXRlbV9pZCAlZCwgYW5nbGUgJXVcbiIsCi0gICAgICAgICAgIGMt PmN1cl9pdGVtX2lkLCBhbmdsZSk7CisgICAgICAgIGMtPmN1cl9pdGVtX2lkLCBhbmdsZSk7CiAK LSAgICBpdGVtID0gZ2V0X2hlaWZfaXRlbShjLCBjLT5jdXJfaXRlbV9pZCk7CisgICAgaXRlbSA9 IGhlaWZfY3VyX2l0ZW0oYyk7CiAgICAgaWYgKGl0ZW0pIHsKICAgICAgICAgLy8gYW5nbGUgKiA5 MCBzcGVjaWZpZXMgdGhlIGFuZ2xlIChpbiBhbnRpLWNsb2Nrd2lzZSBkaXJlY3Rpb24pCiAgICAg ICAgIC8vIGluIHVuaXRzIG9mIGRlZ3JlZXMuCkBAIC05MjY5LDM0ICs5MzE2LDM0IEBAIHN0YXRp YyBpbnQgbW92X3JlYWRfaXJvdChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0 b20gYXRvbSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9pbWlyKE1P VkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQorc3RhdGljIGludCBt b3ZfcmVhZF9pbWlyKE1PVkNvbnRleHQqIGMsIEFWSU9Db250ZXh0KiBwYiwgTU9WQXRvbSBhdG9t KQogewotICAgIEhFSUZJdGVtICppdGVtOworICAgIEhFSUZJdGVtKiBpdGVtOwogICAgIGludCBh eGlzOwogCiAgICAgYXhpcyA9IGF2aW9fcjgocGIpICYgMHgxOwogCiAgICAgYXZfbG9nKGMtPmZj LCBBVl9MT0dfVFJBQ0UsICJpbWlyOiBpdGVtX2lkICVkLCBheGlzICV1XG4iLAotICAgICAgICAg ICBjLT5jdXJfaXRlbV9pZCwgYXhpcyk7CisgICAgICAgIGMtPmN1cl9pdGVtX2lkLCBheGlzKTsK IAotICAgIGl0ZW0gPSBnZXRfaGVpZl9pdGVtKGMsIGMtPmN1cl9pdGVtX2lkKTsKKyAgICBpdGVt ID0gaGVpZl9jdXJfaXRlbShjKTsKICAgICBpZiAoaXRlbSkgewotICAgICAgICBpdGVtLT5oZmxp cCA9ICBheGlzOworICAgICAgICBpdGVtLT5oZmxpcCA9IGF4aXM7CiAgICAgICAgIGl0ZW0tPnZm bGlwID0gIWF4aXM7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92 X3JlYWRfaXBycChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkK K3N0YXRpYyBpbnQgbW92X3JlYWRfaXBycChNT1ZDb250ZXh0KiBjLCBBVklPQ29udGV4dCogcGIs IE1PVkF0b20gYXRvbSkKIHsKICAgICB0eXBlZGVmIHN0cnVjdCBNT1ZBdG9tcyB7CiAgICAgICAg IEZGSU9Db250ZXh0IGI7CiAgICAgICAgIHVpbnQzMl90IHR5cGU7CiAgICAgICAgIGludDY0X3Qg IHNpemU7Ci0gICAgICAgIHVpbnQ4X3QgKmRhdGE7CisgICAgICAgIHVpbnQ4X3QqIGRhdGE7CiAg ICAgfSBNT1ZBdG9tczsKLSAgICBNT1ZBdG9tcyAqYXRvbXMgPSBOVUxMOworICAgIE1PVkF0b21z KiBhdG9tcyA9IE5VTEw7CiAgICAgTU9WQXRvbSBhOwogICAgIHVuc2lnbmVkIGNvdW50OwogICAg IGludCBuYl9hdG9tcyA9IDA7CkBAIC05MzA2LDEyICs5MzUzLDEyIEBAIHN0YXRpYyBpbnQgbW92 X3JlYWRfaXBycChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAqcGIsIE1PVkF0b20gYXRvbSkK ICAgICBhLnNpemUgPSBhdmlvX3JiMzIocGIpOwogICAgIGEudHlwZSA9IGF2aW9fcmwzMihwYik7 CiAKLSAgICBpZiAoYS5zaXplIDwgOCB8fCBhLnR5cGUgIT0gTUtUQUcoJ2knLCdwJywnYycsJ28n KSkKKyAgICBpZiAoYS5zaXplIDwgOCB8fCBhLnR5cGUgIT0gTUtUQUcoJ2knLCAncCcsICdjJywg J28nKSkKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAKICAgICBhLnNpemUg LT0gODsKICAgICB3aGlsZSAoYS5zaXplID49IDgpIHsKLSAgICAgICAgTU9WQXRvbXMgKnJlZiA9 IGF2X2R5bmFycmF5Ml9hZGQoKHZvaWQqKikmYXRvbXMsICZuYl9hdG9tcywgc2l6ZW9mKE1PVkF0 b21zKSwgTlVMTCk7CisgICAgICAgIE1PVkF0b21zKiByZWYgPSBhdl9keW5hcnJheTJfYWRkKCh2 b2lkKiopJmF0b21zLCAmbmJfYXRvbXMsIHNpemVvZihNT1ZBdG9tcyksIE5VTEwpOwogICAgICAg ICBpZiAoIXJlZikgewogICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwogICAgICAg ICAgICAgZ290byBmYWlsOwpAQCAtOTM0NCwxNCArOTM5MSwxNCBAQCBzdGF0aWMgaW50IG1vdl9y ZWFkX2lwcnAoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAg ICAgYS5zaXplID0gYXZpb19yYjMyKHBiKTsKICAgICBhLnR5cGUgPSBhdmlvX3JsMzIocGIpOwog Ci0gICAgaWYgKGEuc2l6ZSA8IDggfHwgYS50eXBlICE9IE1LVEFHKCdpJywncCcsJ20nLCdhJykp IHsKKyAgICBpZiAoYS5zaXplIDwgOCB8fCBhLnR5cGUgIT0gTUtUQUcoJ2knLCAncCcsICdtJywg J2EnKSkgewogICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOwogICAgICAgICBnb3Rv IGZhaWw7CiAgICAgfQogCiAgICAgdmVyc2lvbiA9IGF2aW9fcjgocGIpOwotICAgIGZsYWdzICAg PSBhdmlvX3JiMjQocGIpOwotICAgIGNvdW50ICAgPSBhdmlvX3JiMzIocGIpOworICAgIGZsYWdz ID0gYXZpb19yYjI0KHBiKTsKKyAgICBjb3VudCA9IGF2aW9fcmIzMihwYik7CiAKICAgICBmb3Ig KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgaW50IGl0ZW1faWQgPSB2ZXJz aW9uID8gYXZpb19yYjMyKHBiKSA6IGF2aW9fcmIxNihwYik7CkBAIC05MzYzLDcgKzk0MTAsNyBA QCBzdGF0aWMgaW50IG1vdl9yZWFkX2lwcnAoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBi LCBNT1ZBdG9tIGF0b20pCiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IGFzc29jX2NvdW50OyBqKyspIHsKLSAgICAgICAgICAgIE1PVkF0b21zICpyZWY7CisgICAgICAg ICAgICBNT1ZBdG9tcyogcmVmOwogICAgICAgICAgICAgaW50IGluZGV4ID0gYXZpb19yOChwYikg JiAweDdmOwogICAgICAgICAgICAgaWYgKGZsYWdzICYgMSkgewogICAgICAgICAgICAgICAgIGlu ZGV4IDw8PSA4OwpAQCAtOTM3NiwxMyArOTQyMywxNSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2lw cnAoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgICAg ICAgICByZWYgPSAmYXRvbXNbLS1pbmRleF07CiAKICAgICAgICAgICAgIGF2X2xvZyhjLT5mYywg QVZfTE9HX1RSQUNFLCAiaXBtYTogcHJvcGVydHlfaW5kZXggJWQsIGl0ZW1faWQgJWQsIGl0ZW1f dHlwZSAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICBpbmRleCArIDEsIGl0ZW1faWQsIGF2X2Zv dXJjYzJzdHIocmVmLT50eXBlKSk7CisgICAgICAgICAgICAgICAgaW5kZXggKyAxLCBpdGVtX2lk LCBhdl9mb3VyY2Myc3RyKHJlZi0+dHlwZSkpOwogCiAgICAgICAgICAgICBjLT5jdXJfaXRlbV9p ZCA9IGl0ZW1faWQ7CiAKICAgICAgICAgICAgIHJldCA9IG1vdl9yZWFkX2RlZmF1bHQoYywgJnJl Zi0+Yi5wdWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNT1ZBdG9tKSB7 IC5zaXplID0gcmVmLT5zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAudHlwZSA9IE1LVEFHKCdpJywncCcsJ2MnLCdvJykgfSk7CisgICAgICAgICAg ICAgICAgKE1PVkF0b20pIHsKKyAgICAgICAgICAgICAgICAuc2l6ZSA9IHJlZi0+c2l6ZSwKKyAg ICAgICAgICAgICAgICAgICAgLnR5cGUgPSBNS1RBRygnaScsICdwJywgJ2MnLCAnbycpCisgICAg ICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChyZXQgPCAwKQogICAgICAgICAgICAgICAgIGdv dG8gZmFpbDsKICAgICAgICAgICAgIGZmaW9faW5pdF9yZWFkX2NvbnRleHQoJnJlZi0+YiwgcmVm LT5kYXRhLCByZWYtPnNpemUpOwpAQCAtOTUyNSwxMSArOTU3NCwxMCBAQCBzdGF0aWMgY29uc3Qg TU9WUGFyc2VUYWJsZUVudHJ5IG1vdl9kZWZhdWx0X3BhcnNlX3RhYmxlW10gPSB7CiAjaWYgQ09O RklHX0lBTUZERUMKIHsgTUtUQUcoJ2knLCdhJywnYycsJ2InKSwgbW92X3JlYWRfaWFjYiB9LAog I2VuZGlmCi17IE1LVEFHKCdzJywncicsJ2EnLCd0JyksIG1vdl9yZWFkX3NyYXQgfSwKIHsgMCwg TlVMTCB9CiB9OwogCi1zdGF0aWMgaW50IG1vdl9yZWFkX2RlZmF1bHQoTU9WQ29udGV4dCAqYywg QVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCitzdGF0aWMgaW50IG1vdl9yZWFkX2RlZmF1 bHQoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIHBiLCBNT1ZBdG9tIGF0b20pCiB7CiAgICAg aW50NjRfdCB0b3RhbF9zaXplID0gMDsKICAgICBNT1ZBdG9tIGE7CkBAIC05NTM5LDcgKzk1ODcs NyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2RlZmF1bHQoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRl eHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgICAgIGF2X2xvZyhjLT5mYywgQVZfTE9HX0VSUk9S LCAiQXRvbXMgdG9vIGRlZXBseSBuZXN0ZWRcbiIpOwogICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKICAgICB9Ci0gICAgYy0+YXRvbV9kZXB0aCArKzsKKyAgICBjLT5hdG9tX2Rl cHRoKys7CiAKICAgICBpZiAoYXRvbS5zaXplIDwgMCkKICAgICAgICAgYXRvbS5zaXplID0gSU5U NjRfTUFYOwpAQCAtOTU0OSwyOSArOTU5NywyOSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2RlZmF1 bHQoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgICAg IGEudHlwZSA9IGF2aW9fcmwzMihwYik7CiAgICAgICAgIGlmIChhdmlvX2Zlb2YocGIpKQogICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICgoKGEudHlwZSA9PSBNS1RBRygnZicsJ3InLCdl JywnZScpICYmIGMtPm1vb3ZfcmV0cnkpIHx8Ci0gICAgICAgICAgICAgIGEudHlwZSA9PSBNS1RB RygnaCcsJ28nLCdvJywndicpKSAmJgorICAgICAgICBpZiAoKChhLnR5cGUgPT0gTUtUQUcoJ2Yn LCAncicsICdlJywgJ2UnKSAmJiBjLT5tb292X3JldHJ5KSB8fAorICAgICAgICAgICAgYS50eXBl ID09IE1LVEFHKCdoJywgJ28nLCAnbycsICd2JykpICYmCiAgICAgICAgICAgICBhLnNpemUgPj0g OCAmJgogICAgICAgICAgICAgYy0+ZmMtPnN0cmljdF9zdGRfY29tcGxpYW5jZSA8IEZGX0NPTVBM SUFOQ0VfU1RSSUNUKSB7Ci0gICAgICAgICAgICAgICAgdWludDMyX3QgdHlwZTsKLSAgICAgICAg ICAgICAgICBhdmlvX3NraXAocGIsIDQpOwotICAgICAgICAgICAgICAgIHR5cGUgPSBhdmlvX3Js MzIocGIpOwotICAgICAgICAgICAgICAgIGlmIChhdmlvX2Zlb2YocGIpKQotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBhdmlvX3NlZWsocGIsIC04LCBTRUVLX0NV Uik7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gTUtUQUcoJ20nLCd2JywnaCcsJ2QnKSB8 fAotICAgICAgICAgICAgICAgICAgICB0eXBlID09IE1LVEFHKCdjJywnbScsJ28nLCd2JykpIHsK LSAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsICJEZXRlY3Rl ZCBtb292IGluIGEgZnJlZSBvciBob292IGF0b20uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg YS50eXBlID0gTUtUQUcoJ20nLCdvJywnbycsJ3YnKTsKLSAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB1aW50MzJfdCB0eXBlOworICAgICAgICAgICAgYXZpb19za2lwKHBiLCA0KTsKKyAg ICAgICAgICAgIHR5cGUgPSBhdmlvX3JsMzIocGIpOworICAgICAgICAgICAgaWYgKGF2aW9fZmVv ZihwYikpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBhdmlvX3NlZWsocGIs IC04LCBTRUVLX0NVUik7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBNS1RBRygnbScsICd2Jywg J2gnLCAnZCcpIHx8CisgICAgICAgICAgICAgICAgdHlwZSA9PSBNS1RBRygnYycsICdtJywgJ28n LCAndicpKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsICJE ZXRlY3RlZCBtb292IGluIGEgZnJlZSBvciBob292IGF0b20uXG4iKTsKKyAgICAgICAgICAgICAg ICBhLnR5cGUgPSBNS1RBRygnbScsICdvJywgJ28nLCAndicpOworICAgICAgICAgICAgfQogICAg ICAgICB9Ci0gICAgICAgIGlmIChhdG9tLnR5cGUgIT0gTUtUQUcoJ3InLCdvJywnbycsJ3QnKSAm JgotICAgICAgICAgICAgYXRvbS50eXBlICE9IE1LVEFHKCdtJywnbycsJ28nLCd2JykpIHsKLSAg ICAgICAgICAgIGlmIChhLnR5cGUgPT0gTUtUQUcoJ3QnLCdyJywnYScsJ2snKSB8fAotICAgICAg ICAgICAgICAgIGEudHlwZSA9PSBNS1RBRygnbScsJ2QnLCdhJywndCcpKSB7CisgICAgICAgIGlm IChhdG9tLnR5cGUgIT0gTUtUQUcoJ3InLCAnbycsICdvJywgJ3QnKSAmJgorICAgICAgICAgICAg YXRvbS50eXBlICE9IE1LVEFHKCdtJywgJ28nLCAnbycsICd2JykpIHsKKyAgICAgICAgICAgIGlm IChhLnR5cGUgPT0gTUtUQUcoJ3QnLCAncicsICdhJywgJ2snKSB8fAorICAgICAgICAgICAgICAg IGEudHlwZSA9PSBNS1RBRygnbScsICdkJywgJ2EnLCAndCcpKSB7CiAgICAgICAgICAgICAgICAg YXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsICJCcm9rZW4gZmlsZSwgdHJhay9tZGF0IG5vdCBh dCB0b3AtbGV2ZWxcbiIpOwogICAgICAgICAgICAgICAgIGF2aW9fc2tpcChwYiwgLTgpOwotICAg ICAgICAgICAgICAgIGMtPmF0b21fZGVwdGggLS07CisgICAgICAgICAgICAgICAgYy0+YXRvbV9k ZXB0aC0tOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAg ICB9CkBAIC05NTgxLDcgKzk2MjksNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2RlZmF1bHQoTU9W Q29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgICAgICAgICB0 b3RhbF9zaXplICs9IDg7CiAgICAgICAgIH0KICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0df VFJBQ0UsICJ0eXBlOiclcycgcGFyZW50Oiclcycgc3o6ICUiUFJJZDY0IiAlIlBSSWQ2NCIgJSJQ UklkNjQiXG4iLAotICAgICAgICAgICAgICAgYXZfZm91cmNjMnN0cihhLnR5cGUpLCBhdl9mb3Vy Y2Myc3RyKGF0b20udHlwZSksIGEuc2l6ZSwgdG90YWxfc2l6ZSwgYXRvbS5zaXplKTsKKyAgICAg ICAgICAgIGF2X2ZvdXJjYzJzdHIoYS50eXBlKSwgYXZfZm91cmNjMnN0cihhdG9tLnR5cGUpLCBh LnNpemUsIHRvdGFsX3NpemUsIGF0b20uc2l6ZSk7CiAgICAgICAgIGlmIChhLnNpemUgPT0gMCkg ewogICAgICAgICAgICAgYS5zaXplID0gYXRvbS5zaXplIC0gdG90YWxfc2l6ZSArIDg7CiAgICAg ICAgIH0KQEAgLTk1OTksMzUgKzk2NDcsMzYgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9kZWZhdWx0 KE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpwYiwgTU9WQXRvbSBhdG9tKQogICAgICAgICAg ICAgfQogCiAgICAgICAgIC8vIGNvbnRhaW5lciBpcyB1c2VyIGRhdGEKLSAgICAgICAgaWYgKCFw YXJzZSAmJiAoYXRvbS50eXBlID09IE1LVEFHKCd1JywnZCcsJ3QnLCdhJykgfHwKLSAgICAgICAg ICAgICAgICAgICAgICAgYXRvbS50eXBlID09IE1LVEFHKCdpJywnbCcsJ3MnLCd0JykpKQorICAg ICAgICBpZiAoIXBhcnNlICYmIChhdG9tLnR5cGUgPT0gTUtUQUcoJ3UnLCAnZCcsICd0JywgJ2En KSB8fAorICAgICAgICAgICAgYXRvbS50eXBlID09IE1LVEFHKCdpJywgJ2wnLCAncycsICd0Jykp KQogICAgICAgICAgICAgcGFyc2UgPSBtb3ZfcmVhZF91ZHRhX3N0cmluZzsKIAogICAgICAgICAv LyBTdXBwb3J0cyBwYXJzaW5nIHRoZSBRdWlja1RpbWUgTWV0YWRhdGEgS2V5cy4KICAgICAgICAg Ly8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjL2RvY3VtZW50YXRpb24v UXVpY2tUaW1lL1FURkYvTWV0YWRhdGEvTWV0YWRhdGEuaHRtbAogICAgICAgICBpZiAoIXBhcnNl ICYmIGMtPmZvdW5kX2hkbHJfbWR0YSAmJgotICAgICAgICAgICAgYXRvbS50eXBlID09IE1LVEFH KCdtJywnZScsJ3QnLCdhJykgJiYKLSAgICAgICAgICAgIGEudHlwZSA9PSBNS1RBRygnaycsJ2Un LCd5JywncycpICYmCisgICAgICAgICAgICBhdG9tLnR5cGUgPT0gTUtUQUcoJ20nLCAnZScsICd0 JywgJ2EnKSAmJgorICAgICAgICAgICAgYS50eXBlID09IE1LVEFHKCdrJywgJ2UnLCAneScsICdz JykgJiYKICAgICAgICAgICAgIGMtPm1ldGFfa2V5c19jb3VudCA9PSAwKSB7CiAgICAgICAgICAg ICBwYXJzZSA9IG1vdl9yZWFkX2tleXM7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXBhcnNl KSB7IC8qIHNraXAgbGVhZiBhdG9tcyBkYXRhICovCiAgICAgICAgICAgICBhdmlvX3NraXAocGIs IGEuc2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CiAg ICAgICAgICAgICBpbnQ2NF90IHN0YXJ0X3BvcyA9IGF2aW9fdGVsbChwYik7CiAgICAgICAgICAg ICBpbnQ2NF90IGxlZnQ7CiAgICAgICAgICAgICBpbnQgZXJyID0gcGFyc2UoYywgcGIsIGEpOwog ICAgICAgICAgICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICAgICAgICBjLT5hdG9tX2RlcHRo IC0tOworICAgICAgICAgICAgICAgIGMtPmF0b21fZGVwdGgtLTsKICAgICAgICAgICAgICAgICBy ZXR1cm4gZXJyOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGMtPmZvdW5kX21vb3Yg JiYgYy0+Zm91bmRfbWRhdCAmJiBhLnNpemUgPD0gSU5UNjRfTUFYIC0gc3RhcnRfcG9zICYmCiAg ICAgICAgICAgICAgICAgKCghKHBiLT5zZWVrYWJsZSAmIEFWSU9fU0VFS0FCTEVfTk9STUFMKSB8 fCBjLT5mYy0+ZmxhZ3MgJiBBVkZNVF9GTEFHX0lHTklEWCB8fCBjLT5mcmFnX2luZGV4LmNvbXBs ZXRlKSB8fAotICAgICAgICAgICAgICAgICBzdGFydF9wb3MgKyBhLnNpemUgPT0gYXZpb19zaXpl KHBiKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfcG9zICsgYS5zaXplID09IGF2aW9f c2l6ZShwYikpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCEocGItPnNlZWthYmxlICYgQVZJT19T RUVLQUJMRV9OT1JNQUwpIHx8IGMtPmZjLT5mbGFncyAmIEFWRk1UX0ZMQUdfSUdOSURYIHx8IGMt PmZyYWdfaW5kZXguY29tcGxldGUpCiAgICAgICAgICAgICAgICAgICAgIGMtPm5leHRfcm9vdF9h dG9tID0gc3RhcnRfcG9zICsgYS5zaXplOwotICAgICAgICAgICAgICAgIGMtPmF0b21fZGVwdGgg LS07CisgICAgICAgICAgICAgICAgYy0+YXRvbV9kZXB0aC0tOwogICAgICAgICAgICAgICAgIHJl dHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVmdCA9IGEuc2l6ZSAtIGF2aW9f dGVsbChwYikgKyBzdGFydF9wb3M7CkBAIC05NjM1LDggKzk2ODQsOCBAQCBzdGF0aWMgaW50IG1v dl9yZWFkX2RlZmF1bHQoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0 b20pCiAgICAgICAgICAgICAgICAgYXZpb19za2lwKHBiLCBsZWZ0KTsKICAgICAgICAgICAgIGVs c2UgaWYgKGxlZnQgPCAwKSB7CiAgICAgICAgICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0df V0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgIm92ZXJyZWFkIGVuZCBvZiBhdG9tICcl cycgYnkgJSJQUklkNjQiIGJ5dGVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICBhdl9mb3Vy Y2Myc3RyKGEudHlwZSksIC1sZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgIm92ZXJyZWFkIGVu ZCBvZiBhdG9tICclcycgYnkgJSJQUklkNjQiIGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgICAg ICBhdl9mb3VyY2Myc3RyKGEudHlwZSksIC1sZWZ0KTsKICAgICAgICAgICAgICAgICBhdmlvX3Nl ZWsocGIsIGxlZnQsIFNFRUtfQ1VSKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtOTY0 NywxMSArOTY5NiwxMSBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2RlZmF1bHQoTU9WQ29udGV4dCAq YywgQVZJT0NvbnRleHQgKnBiLCBNT1ZBdG9tIGF0b20pCiAgICAgaWYgKHRvdGFsX3NpemUgPCBh dG9tLnNpemUgJiYgYXRvbS5zaXplIDwgMHg3ZmZmZikKICAgICAgICAgYXZpb19za2lwKHBiLCBh dG9tLnNpemUgLSB0b3RhbF9zaXplKTsKIAotICAgIGMtPmF0b21fZGVwdGggLS07CisgICAgYy0+ YXRvbV9kZXB0aC0tOwogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1vdl9wcm9iZShj b25zdCBBVlByb2JlRGF0YSAqcCkKK3N0YXRpYyBpbnQgbW92X3Byb2JlKGNvbnN0IEFWUHJvYmVE YXRhKiBwKQogewogICAgIGludDY0X3Qgb2Zmc2V0OwogICAgIHVpbnQzMl90IHRhZzsKQEAgLTk2 NjgsOSArOTcxNywxMCBAQCBzdGF0aWMgaW50IG1vdl9wcm9iZShjb25zdCBBVlByb2JlRGF0YSAq cCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBzaXplID0gQVZfUkIzMihwLT5idWYgKyBv ZmZzZXQpOwogICAgICAgICBpZiAoc2l6ZSA9PSAxICYmIG9mZnNldCArIDE2IDw9ICh1bnNpZ25l ZCBpbnQpcC0+YnVmX3NpemUpIHsKLSAgICAgICAgICAgIHNpemUgPSBBVl9SQjY0KHAtPmJ1Zitv ZmZzZXQgKyA4KTsKKyAgICAgICAgICAgIHNpemUgPSBBVl9SQjY0KHAtPmJ1ZiArIG9mZnNldCAr IDgpOwogICAgICAgICAgICAgbWluc2l6ZSA9IDE2OwotICAgICAgICB9IGVsc2UgaWYgKHNpemUg PT0gMCkgeworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMCkgewogICAgICAg ICAgICAgc2l6ZSA9IHAtPmJ1Zl9zaXplIC0gb2Zmc2V0OwogICAgICAgICB9CiAgICAgICAgIGlm IChzaXplIDwgbWluc2l6ZSkgewpAQCAtOTY3OCw0MCArOTcyOCw0MSBAQCBzdGF0aWMgaW50IG1v dl9wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg ICAgICB9CiAgICAgICAgIHRhZyA9IEFWX1JMMzIocC0+YnVmICsgb2Zmc2V0ICsgNCk7Ci0gICAg ICAgIHN3aXRjaCh0YWcpIHsKLSAgICAgICAgLyogY2hlY2sgZm9yIG9idmlvdXMgdGFncyAqLwot ICAgICAgICBjYXNlIE1LVEFHKCdtJywnbycsJ28nLCd2Jyk6CisgICAgICAgIHN3aXRjaCAodGFn KSB7CisgICAgICAgICAgICAvKiBjaGVjayBmb3Igb2J2aW91cyB0YWdzICovCisgICAgICAgIGNh c2UgTUtUQUcoJ20nLCAnbycsICdvJywgJ3YnKToKICAgICAgICAgICAgIG1vb3Zfb2Zmc2V0ID0g b2Zmc2V0ICsgNDsKLSAgICAgICAgY2FzZSBNS1RBRygnbScsJ2QnLCdhJywndCcpOgotICAgICAg ICBjYXNlIE1LVEFHKCdwJywnbicsJ28nLCd0Jyk6IC8qIGRldGVjdCBtb3ZzIHdpdGggcHJldmll dyBwaWNzIGxpa2UgZXcubW92IGFuZCBhcHJpbC5tb3YgKi8KLSAgICAgICAgY2FzZSBNS1RBRygn dScsJ2QnLCd0JywnYScpOiAvKiBQYWNrZXQgVmlkZW8gUFZBdXRob3IgYWRkcyB0aGlzIGFuZCBh IGxvdCBvZiBtb3JlIGp1bmsgKi8KLSAgICAgICAgY2FzZSBNS1RBRygnZicsJ3QnLCd5JywncCcp OgotICAgICAgICAgICAgaWYgKHRhZyA9PSBNS1RBRygnZicsJ3QnLCd5JywncCcpICYmCi0gICAg ICAgICAgICAgICAgICAgICAgICggICBBVl9STDMyKHAtPmJ1ZiArIG9mZnNldCArIDgpID09IE1L VEFHKCdqJywncCcsJzInLCcgJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IEFWX1JMMzIo cC0+YnVmICsgb2Zmc2V0ICsgOCkgPT0gTUtUQUcoJ2onLCdwJywneCcsJyAnKQotICAgICAgICAg ICAgICAgICAgICAgICAgfHwgQVZfUkwzMihwLT5idWYgKyBvZmZzZXQgKyA4KSA9PSBNS1RBRygn aicsJ3gnLCdsJywnICcpCisgICAgICAgIGNhc2UgTUtUQUcoJ20nLCAnZCcsICdhJywgJ3QnKToK KyAgICAgICAgY2FzZSBNS1RBRygncCcsICduJywgJ28nLCAndCcpOiAvKiBkZXRlY3QgbW92cyB3 aXRoIHByZXZpZXcgcGljcyBsaWtlIGV3Lm1vdiBhbmQgYXByaWwubW92ICovCisgICAgICAgIGNh c2UgTUtUQUcoJ3UnLCAnZCcsICd0JywgJ2EnKTogLyogUGFja2V0IFZpZGVvIFBWQXV0aG9yIGFk ZHMgdGhpcyBhbmQgYSBsb3Qgb2YgbW9yZSBqdW5rICovCisgICAgICAgIGNhc2UgTUtUQUcoJ2Yn LCAndCcsICd5JywgJ3AnKToKKyAgICAgICAgICAgIGlmICh0YWcgPT0gTUtUQUcoJ2YnLCAndCcs ICd5JywgJ3AnKSAmJgorICAgICAgICAgICAgICAgIChBVl9STDMyKHAtPmJ1ZiArIG9mZnNldCAr IDgpID09IE1LVEFHKCdqJywgJ3AnLCAnMicsICcgJykKKyAgICAgICAgICAgICAgICAgICAgfHwg QVZfUkwzMihwLT5idWYgKyBvZmZzZXQgKyA4KSA9PSBNS1RBRygnaicsICdwJywgJ3gnLCAnICcp CisgICAgICAgICAgICAgICAgICAgIHx8IEFWX1JMMzIocC0+YnVmICsgb2Zmc2V0ICsgOCkgPT0g TUtUQUcoJ2onLCAneCcsICdsJywgJyAnKQogICAgICAgICAgICAgICAgICAgICApKSB7CiAgICAg ICAgICAgICAgICAgc2NvcmUgPSBGRk1BWChzY29yZSwgNSk7Ci0gICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgc2Nv cmUgPSBBVlBST0JFX1NDT1JFX01BWDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAvKiB0aG9zZSBhcmUgbW9yZSBjb21tb24gd29yZHMsIHNvIHJhdGUgdGhlbiBh IGJpdCBsZXNzICovCi0gICAgICAgIGNhc2UgTUtUQUcoJ2UnLCdkJywnaScsJ3cnKTogLyogeGRj YW0gZmlsZXMgaGF2ZSByZXZlcnRlZCBmaXJzdCB0YWdzICovCi0gICAgICAgIGNhc2UgTUtUQUco J3cnLCdpJywnZCcsJ2UnKToKLSAgICAgICAgY2FzZSBNS1RBRygnZicsJ3InLCdlJywnZScpOgot ICAgICAgICBjYXNlIE1LVEFHKCdqJywndScsJ24nLCdrJyk6Ci0gICAgICAgIGNhc2UgTUtUQUco J3AnLCdpJywnYycsJ3QnKToKLSAgICAgICAgICAgIHNjb3JlICA9IEZGTUFYKHNjb3JlLCBBVlBS T0JFX1NDT1JFX01BWCAtIDUpOworICAgICAgICAgICAgLyogdGhvc2UgYXJlIG1vcmUgY29tbW9u IHdvcmRzLCBzbyByYXRlIHRoZW4gYSBiaXQgbGVzcyAqLworICAgICAgICBjYXNlIE1LVEFHKCdl JywgJ2QnLCAnaScsICd3Jyk6IC8qIHhkY2FtIGZpbGVzIGhhdmUgcmV2ZXJ0ZWQgZmlyc3QgdGFn cyAqLworICAgICAgICBjYXNlIE1LVEFHKCd3JywgJ2knLCAnZCcsICdlJyk6CisgICAgICAgIGNh c2UgTUtUQUcoJ2YnLCAncicsICdlJywgJ2UnKToKKyAgICAgICAgY2FzZSBNS1RBRygnaicsICd1 JywgJ24nLCAnaycpOgorICAgICAgICBjYXNlIE1LVEFHKCdwJywgJ2knLCAnYycsICd0Jyk6Cisg ICAgICAgICAgICBzY29yZSA9IEZGTUFYKHNjb3JlLCBBVlBST0JFX1NDT1JFX01BWCAtIDUpOwog ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTUtUQUcoMHg4MiwweDgyLDB4N2YsMHg3 ZCk6Ci0gICAgICAgICAgICBzY29yZSAgPSBGRk1BWChzY29yZSwgQVZQUk9CRV9TQ09SRV9FWFRF TlNJT04gLSA1KTsKKyAgICAgICAgY2FzZSBNS1RBRygweDgyLCAweDgyLCAweDdmLCAweDdkKToK KyAgICAgICAgICAgIHNjb3JlID0gRkZNQVgoc2NvcmUsIEFWUFJPQkVfU0NPUkVfRVhURU5TSU9O IC0gNSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNS1RBRygncycsJ2snLCdp JywncCcpOgotICAgICAgICBjYXNlIE1LVEFHKCd1JywndScsJ2knLCdkJyk6Ci0gICAgICAgIGNh c2UgTUtUQUcoJ3AnLCdyJywnZicsJ2wnKToKKyAgICAgICAgY2FzZSBNS1RBRygncycsICdrJywg J2knLCAncCcpOgorICAgICAgICBjYXNlIE1LVEFHKCd1JywgJ3UnLCAnaScsICdkJyk6CisgICAg ICAgIGNhc2UgTUtUQUcoJ3AnLCAncicsICdmJywgJ2wnKToKICAgICAgICAgICAgIC8qIGlmIHdl IG9ubHkgZmluZCB0aG9zZSBjYXVzZSBwcm9iZWRhdGEgaXMgdG9vIHNtYWxsIGF0IGxlYXN0IHJh dGUgdGhlbSAqLwotICAgICAgICAgICAgc2NvcmUgID0gRkZNQVgoc2NvcmUsIEFWUFJPQkVfU0NP UkVfRVhURU5TSU9OKTsKKyAgICAgICAgICAgIHNjb3JlID0gRkZNQVgoc2NvcmUsIEFWUFJPQkVf U0NPUkVfRVhURU5TSU9OKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg IGlmIChzaXplID4gSU5UNjRfTUFYIC0gb2Zmc2V0KQpAQCAtOTcyNCwxNyArOTc3NSwxOCBAQCBz dGF0aWMgaW50IG1vdl9wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKICAgICAgICAgb2Zmc2V0 ID0gbW9vdl9vZmZzZXQ7CiAKICAgICAgICAgd2hpbGUgKG9mZnNldCA8IChwLT5idWZfc2l6ZSAt IDE2KSkgeyAvKiBTdWZmaWNpZW50IHNwYWNlICovCi0gICAgICAgICAgICAgICAvKiBXZSBmb3Vu ZCBhbiBhY3R1YWwgaGRsciBhdG9tICovCi0gICAgICAgICAgICBpZiAoQVZfUkwzMihwLT5idWYg KyBvZmZzZXQgICAgICkgPT0gTUtUQUcoJ2gnLCdkJywnbCcsJ3InKSAmJgotICAgICAgICAgICAg ICAgIEFWX1JMMzIocC0+YnVmICsgb2Zmc2V0ICsgIDgpID09IE1LVEFHKCdtJywnaCcsJ2wnLCdy JykgJiYKLSAgICAgICAgICAgICAgICBBVl9STDMyKHAtPmJ1ZiArIG9mZnNldCArIDEyKSA9PSBN S1RBRygnTScsJ1AnLCdFJywnRycpKSB7CisgICAgICAgICAgICAvKiBXZSBmb3VuZCBhbiBhY3R1 YWwgaGRsciBhdG9tICovCisgICAgICAgICAgICBpZiAoQVZfUkwzMihwLT5idWYgKyBvZmZzZXQp ID09IE1LVEFHKCdoJywgJ2QnLCAnbCcsICdyJykgJiYKKyAgICAgICAgICAgICAgICBBVl9STDMy KHAtPmJ1ZiArIG9mZnNldCArIDgpID09IE1LVEFHKCdtJywgJ2gnLCAnbCcsICdyJykgJiYKKyAg ICAgICAgICAgICAgICBBVl9STDMyKHAtPmJ1ZiArIG9mZnNldCArIDEyKSA9PSBNS1RBRygnTScs ICdQJywgJ0UnLCAnRycpKSB7CiAgICAgICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19X QVJOSU5HLCAiRm91bmQgbWVkaWEgZGF0YSB0YWcgTVBFRyBpbmRpY2F0aW5nIHRoaXMgaXMgYSBN T1YtcGFja2VkIE1QRUctUFMuXG4iKTsKICAgICAgICAgICAgICAgICAvKiBXZSBmb3VuZCBhIG1l ZGlhIGhhbmRsZXIgcmVmZXJlbmNlIGF0b20gZGVzY3JpYmluZyBhbgogICAgICAgICAgICAgICAg ICAqIE1QRUctUFMtaW4tTU9WLCByZXR1cm4gYQogICAgICAgICAgICAgICAgICAqIGxvdyBzY29y ZSB0byBmb3JjZSBleHBhbmRpbmcgdGhlIHByb2JlIHdpbmRvdyB1bnRpbAogICAgICAgICAgICAg ICAgICAqIG1wZWdwc19wcm9iZSBmaW5kcyB3aGF0IGl0IG5lZWRzICovCiAgICAgICAgICAgICAg ICAgcmV0dXJuIDU7Ci0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogS2VlcCBsb29raW5nICovCiAgICAgICAg ICAgICAgICAgb2Zmc2V0ICs9IDI7CiAgICAgICAgICAgICB9CkBAIC05NzQ1LDE3ICs5Nzk3LDE3 IEBAIHN0YXRpYyBpbnQgbW92X3Byb2JlKGNvbnN0IEFWUHJvYmVEYXRhICpwKQogfQogCiAvLyBt dXN0IGJlIGRvbmUgYWZ0ZXIgcGFyc2luZyBhbGwgdHJhayBiZWNhdXNlIHRoZXJlJ3Mgbm8gb3Jk ZXIgcmVxdWlyZW1lbnQKLXN0YXRpYyB2b2lkIG1vdl9yZWFkX2NoYXB0ZXJzKEFWRm9ybWF0Q29u dGV4dCAqcykKK3N0YXRpYyB2b2lkIG1vdl9yZWFkX2NoYXB0ZXJzKEFWRm9ybWF0Q29udGV4dCog cykKIHsKLSAgICBNT1ZDb250ZXh0ICptb3YgPSBzLT5wcml2X2RhdGE7Ci0gICAgTU9WU3RyZWFt Q29udGV4dCAqc2M7CisgICAgTU9WQ29udGV4dCogbW92ID0gcy0+cHJpdl9kYXRhOworICAgIE1P VlN0cmVhbUNvbnRleHQqIHNjOwogICAgIGludDY0X3QgY3VyX3BvczsKICAgICBpbnQgaSwgajsK ICAgICBpbnQgY2hhcHRlcl90cmFjazsKIAogICAgIGZvciAoaiA9IDA7IGogPCBtb3YtPm5iX2No YXB0ZXJfdHJhY2tzOyBqKyspIHsKLSAgICAgICAgQVZTdHJlYW0gKnN0ID0gTlVMTDsKLSAgICAg ICAgRkZTdHJlYW0gKnN0aSA9IE5VTEw7CisgICAgICAgIEFWU3RyZWFtKiBzdCA9IE5VTEw7Cisg ICAgICAgIEZGU3RyZWFtKiBzdGkgPSBOVUxMOwogICAgICAgICBjaGFwdGVyX3RyYWNrID0gbW92 LT5jaGFwdGVyX3RyYWNrc1tqXTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHMtPm5iX3N0cmVh bXM7IGkrKykgewogICAgICAgICAgICAgc2MgPSBtb3YtPmZjLT5zdHJlYW1zW2ldLT5wcml2X2Rh dGE7CkBAIC05Nzc3LDcgKzk4MjksNyBAQCBzdGF0aWMgdm9pZCBtb3ZfcmVhZF9jaGFwdGVycyhB VkZvcm1hdENvbnRleHQgKnMpCiAgICAgICAgICAgICBzdC0+ZGlzcG9zaXRpb24gfD0gQVZfRElT UE9TSVRJT05fQVRUQUNIRURfUElDIHwgQVZfRElTUE9TSVRJT05fVElNRURfVEhVTUJOQUlMUzsK ICAgICAgICAgICAgIGlmICghc3QtPmF0dGFjaGVkX3BpYy5kYXRhICYmIHN0aS0+bmJfaW5kZXhf ZW50cmllcykgewogICAgICAgICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBmaXJzdCBmcmFtZSwg aWYgcG9zc2libGUKLSAgICAgICAgICAgICAgICBBVkluZGV4RW50cnkgKnNhbXBsZSA9ICZzdGkt PmluZGV4X2VudHJpZXNbMF07CisgICAgICAgICAgICAgICAgQVZJbmRleEVudHJ5KiBzYW1wbGUg PSAmc3RpLT5pbmRleF9lbnRyaWVzWzBdOwogICAgICAgICAgICAgICAgIGlmIChhdmlvX3NlZWso c2MtPnBiLCBzYW1wbGUtPnBvcywgU0VFS19TRVQpICE9IHNhbXBsZS0+cG9zKSB7CiAgICAgICAg ICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gcmV0cmlldmUg Zmlyc3QgZnJhbWVcbiIpOwogICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKQEAgLTk3 ODYsMTQgKzk4MzgsMTUgQEAgc3RhdGljIHZvaWQgbW92X3JlYWRfY2hhcHRlcnMoQVZGb3JtYXRD b250ZXh0ICpzKQogICAgICAgICAgICAgICAgIGlmIChmZl9hZGRfYXR0YWNoZWRfcGljKHMsIHN0 LCBzYy0+cGIsIE5VTEwsIHNhbXBsZS0+c2l6ZSkgPCAwKQogICAgICAgICAgICAgICAgICAgICBn b3RvIGZpbmlzaDsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfQor ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFW TUVESUFfVFlQRV9EQVRBOwogICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFW X0NPREVDX0lEX0JJTl9EQVRBOwogICAgICAgICAgICAgc3QtPmRpc2NhcmQgPSBBVkRJU0NBUkRf QUxMOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGktPm5iX2luZGV4X2VudHJp ZXM7IGkrKykgewotICAgICAgICAgICAgICAgIEFWSW5kZXhFbnRyeSAqc2FtcGxlID0gJnN0aS0+ aW5kZXhfZW50cmllc1tpXTsKLSAgICAgICAgICAgICAgICBpbnQ2NF90IGVuZCA9IGkrMSA8IHN0 aS0+bmJfaW5kZXhfZW50cmllcyA/IHN0aS0+aW5kZXhfZW50cmllc1tpKzFdLnRpbWVzdGFtcCA6 IHN0LT5kdXJhdGlvbjsKLSAgICAgICAgICAgICAgICB1aW50OF90ICp0aXRsZTsKKyAgICAgICAg ICAgICAgICBBVkluZGV4RW50cnkqIHNhbXBsZSA9ICZzdGktPmluZGV4X2VudHJpZXNbaV07Cisg ICAgICAgICAgICAgICAgaW50NjRfdCBlbmQgPSBpICsgMSA8IHN0aS0+bmJfaW5kZXhfZW50cmll cyA/IHN0aS0+aW5kZXhfZW50cmllc1tpICsgMV0udGltZXN0YW1wIDogc3QtPmR1cmF0aW9uOwor ICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHRpdGxlOwogICAgICAgICAgICAgICAgIHVpbnQxNl90 IGNoOwogICAgICAgICAgICAgICAgIGludCBsZW4sIHRpdGxlX2xlbjsKIApAQCAtOTgwOSw5ICs5 ODYyLDkgQEAgc3RhdGljIHZvaWQgbW92X3JlYWRfY2hhcHRlcnMoQVZGb3JtYXRDb250ZXh0ICpz KQogCiAgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0IHR3byBieXRlcyBhcmUgdGhlIGxlbmd0 aCBvZiB0aGUgdGl0bGUKICAgICAgICAgICAgICAgICBsZW4gPSBhdmlvX3JiMTYoc2MtPnBiKTsK LSAgICAgICAgICAgICAgICBpZiAobGVuID4gc2FtcGxlLT5zaXplLTIpCisgICAgICAgICAgICAg ICAgaWYgKGxlbiA+IHNhbXBsZS0+c2l6ZSAtIDIpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOwotICAgICAgICAgICAgICAgIHRpdGxlX2xlbiA9IDIqbGVuICsgMTsKKyAgICAgICAgICAg ICAgICB0aXRsZV9sZW4gPSAyICogbGVuICsgMTsKICAgICAgICAgICAgICAgICBpZiAoISh0aXRs ZSA9IGF2X21hbGxvY3oodGl0bGVfbGVuKSkpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmlu aXNoOwogCkBAIC05ODIwLDcgKzk4NzMsOCBAQCBzdGF0aWMgdm9pZCBtb3ZfcmVhZF9jaGFwdGVy cyhBVkZvcm1hdENvbnRleHQgKnMpCiAgICAgICAgICAgICAgICAgLy8gaW5zdGVhZCBieSB0aGUg cHJlc2VuY2Ugb2YgYSBCT00KICAgICAgICAgICAgICAgICBpZiAoIWxlbikgewogICAgICAgICAg ICAgICAgICAgICB0aXRsZVswXSA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg IGNoID0gYXZpb19yYjE2KHNjLT5wYik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAw eGZlZmYpCiAgICAgICAgICAgICAgICAgICAgICAgICBhdmlvX2dldF9zdHIxNmJlKHNjLT5wYiwg bGVuLCB0aXRsZSwgdGl0bGVfbGVuKTsKQEAgLTk4MzksMTMgKzk4OTMsMTMgQEAgc3RhdGljIHZv aWQgbW92X3JlYWRfY2hhcHRlcnMoQVZGb3JtYXRDb250ZXh0ICpzKQogICAgICAgICAgICAgICAg IGF2X2ZyZWVwKCZ0aXRsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLWZpbmlzaDoKKyAg ICBmaW5pc2g6CiAgICAgICAgIGF2aW9fc2VlayhzYy0+cGIsIGN1cl9wb3MsIFNFRUtfU0VUKTsK ICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfdGltZWNvZGVfaW5fZnJhbWVudW1fZm9ybWF0 KEFWRm9ybWF0Q29udGV4dCAqcywgQVZTdHJlYW0gKnN0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB2YWx1ZSwgaW50IGZsYWdzKQorc3RhdGlj IGludCBwYXJzZV90aW1lY29kZV9pbl9mcmFtZW51bV9mb3JtYXQoQVZGb3JtYXRDb250ZXh0KiBz LCBBVlN0cmVhbSogc3QsCisgICAgaW50NjRfdCB2YWx1ZSwgaW50IGZsYWdzKQogewogICAgIEFW VGltZWNvZGUgdGM7CiAgICAgY2hhciBidWZbQVZfVElNRUNPREVfU1RSX1NJWkVdOwpAQCAtOTg1 NCwxNCArOTkwOCwxNCBAQCBzdGF0aWMgaW50IHBhcnNlX3RpbWVjb2RlX2luX2ZyYW1lbnVtX2Zv cm1hdChBVkZvcm1hdENvbnRleHQgKnMsIEFWU3RyZWFtICpzdCwKICAgICBpZiAocmV0IDwgMCkK ICAgICAgICAgcmV0dXJuIHJldDsKICAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAidGlt ZWNvZGUiLAotICAgICAgICAgICAgICAgIGF2X3RpbWVjb2RlX21ha2Vfc3RyaW5nKCZ0YywgYnVm LCB2YWx1ZSksIDApOworICAgICAgICBhdl90aW1lY29kZV9tYWtlX3N0cmluZygmdGMsIGJ1Ziwg dmFsdWUpLCAwKTsKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9ydG1k X3RyYWNrKEFWRm9ybWF0Q29udGV4dCAqcywgQVZTdHJlYW0gKnN0KQorc3RhdGljIGludCBtb3Zf cmVhZF9ydG1kX3RyYWNrKEFWRm9ybWF0Q29udGV4dCogcywgQVZTdHJlYW0qIHN0KQogewotICAg IE1PVlN0cmVhbUNvbnRleHQgKnNjID0gc3QtPnByaXZfZGF0YTsKLSAgICBGRlN0cmVhbSAqY29u c3Qgc3RpID0gZmZzdHJlYW0oc3QpOworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjID0gc3QtPnBy aXZfZGF0YTsKKyAgICBGRlN0cmVhbSogY29uc3Qgc3RpID0gZmZzdHJlYW0oc3QpOwogICAgIGNo YXIgYnVmW0FWX1RJTUVDT0RFX1NUUl9TSVpFXTsKICAgICBpbnQ2NF90IGN1cl9wb3MgPSBhdmlv X3RlbGwoc2MtPnBiKTsKICAgICBpbnQgaGgsIG1tLCBzcywgZmYsIGRyb3A7CkBAIC05ODc3LDE3 ICs5OTMxLDE3IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfcnRtZF90cmFjayhBVkZvcm1hdENvbnRl eHQgKnMsIEFWU3RyZWFtICpzdCkKICAgICBkcm9wID0gYXZpb19yOChzLT5wYik7CiAgICAgZmYg PSBhdmlvX3I4KHMtPnBiKTsKICAgICBzbnByaW50ZihidWYsIEFWX1RJTUVDT0RFX1NUUl9TSVpF LCAiJTAyZDolMDJkOiUwMmQlYyUwMmQiLAotICAgICAgICAgICAgIGhoLCBtbSwgc3MsIGRyb3Ag PyAnOycgOiAnOicsIGZmKTsKKyAgICAgICAgaGgsIG1tLCBzcywgZHJvcCA/ICc7JyA6ICc6Jywg ZmYpOwogICAgIGF2X2RpY3Rfc2V0KCZzdC0+bWV0YWRhdGEsICJ0aW1lY29kZSIsIGJ1ZiwgMCk7 CiAKICAgICBhdmlvX3NlZWsoc2MtPnBiLCBjdXJfcG9zLCBTRUVLX1NFVCk7CiAgICAgcmV0dXJu IDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfdGltZWNvZGVfdHJhY2soQVZGb3JtYXRDb250 ZXh0ICpzLCBBVlN0cmVhbSAqc3QpCitzdGF0aWMgaW50IG1vdl9yZWFkX3RpbWVjb2RlX3RyYWNr KEFWRm9ybWF0Q29udGV4dCogcywgQVZTdHJlYW0qIHN0KQogewotICAgIE1PVlN0cmVhbUNvbnRl eHQgKnNjID0gc3QtPnByaXZfZGF0YTsKLSAgICBGRlN0cmVhbSAqY29uc3Qgc3RpID0gZmZzdHJl YW0oc3QpOworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjID0gc3QtPnByaXZfZGF0YTsKKyAgICBG RlN0cmVhbSogY29uc3Qgc3RpID0gZmZzdHJlYW0oc3QpOwogICAgIGludCBmbGFncyA9IDA7CiAg ICAgaW50NjRfdCBjdXJfcG9zID0gYXZpb190ZWxsKHNjLT5wYik7CiAgICAgaW50NjRfdCB2YWx1 ZTsKQEAgLTk5MTQsOSArOTk2OCw5IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfdGltZWNvZGVfdHJh Y2soQVZGb3JtYXRDb250ZXh0ICpzLCBBVlN0cmVhbSAqc3QpCiAgICAgICogZGVzcGl0ZSB3aGF0 IHRoZSB0bWNkIHRyYWNrICJzdWdnZXN0cyIgKENvdW50ZXIgZmxhZyBzZXQgdG8gMCBtZWFucyBR VAogICAgICAqIGZvcm1hdCkuICovCiAKLSAgICAvKiA2MCBmcHMgY29udGVudCBoYXZlIHRtY2Rf bmJfZnJhbWVzIHNldCB0byAzMCBidXQgdGNfcmF0ZSBzZXQgdG8gNjAsIHNvCi0gICAgICogd2Ug bXVsdGlwbHkgdGhlIGZyYW1lIG51bWJlciB3aXRoIHRoZSBxdW90aWVudC4KLSAgICAgKiBTZWUg dGlja2V0cyAjOTQ5MiwgIzk3MTAuICovCisgICAgIC8qIDYwIGZwcyBjb250ZW50IGhhdmUgdG1j ZF9uYl9mcmFtZXMgc2V0IHRvIDMwIGJ1dCB0Y19yYXRlIHNldCB0byA2MCwgc28KKyAgICAgICog d2UgbXVsdGlwbHkgdGhlIGZyYW1lIG51bWJlciB3aXRoIHRoZSBxdW90aWVudC4KKyAgICAgICog U2VlIHRpY2tldHMgIzk0OTIsICM5NzEwLiAqLwogICAgIHJvdW5kZWRfdGNfcmF0ZSA9ICh0Y19y YXRlLm51bSArIHRjX3JhdGUuZGVuIC8gMkxMKSAvIHRjX3JhdGUuZGVuOwogICAgIC8qIFdvcmsg YXJvdW5kIGZpbGVzIHdoZXJlIHRtY2RfbmJfZnJhbWVzIGlzIHJvdW5kZWQgZG93biBmcm9tIGZy YW1lIHJhdGUKICAgICAgKiBpbnN0ZWFkIG9mIHVwLiBTZWUgdGlja2V0ICM1OTc4LiAqLwpAQCAt OTkzMSw3ICs5OTg1LDcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF90aW1lY29kZV90cmFjayhBVkZv cm1hdENvbnRleHQgKnMsIEFWU3RyZWFtICpzdCkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGlj IHZvaWQgbW92X2ZyZWVfZW5jcnlwdGlvbl9pbmRleChNT1ZFbmNyeXB0aW9uSW5kZXggKippbmRl eCkgeworc3RhdGljIHZvaWQgbW92X2ZyZWVfZW5jcnlwdGlvbl9pbmRleChNT1ZFbmNyeXB0aW9u SW5kZXgqKiBpbmRleCkgewogICAgIGludCBpOwogICAgIGlmICghaW5kZXggfHwgISppbmRleCkg cmV0dXJuOwogICAgIGZvciAoaSA9IDA7IGkgPCAoKmluZGV4KS0+bmJfZW5jcnlwdGVkX3NhbXBs ZXM7IGkrKykgewpAQCAtOTk0Myw5ICs5OTk3LDkgQEAgc3RhdGljIHZvaWQgbW92X2ZyZWVfZW5j cnlwdGlvbl9pbmRleChNT1ZFbmNyeXB0aW9uSW5kZXggKippbmRleCkgewogICAgIGF2X2ZyZWVw KGluZGV4KTsKIH0KIAotc3RhdGljIHZvaWQgbW92X2ZyZWVfc3RyZWFtX2NvbnRleHQoQVZGb3Jt YXRDb250ZXh0ICpzLCBBVlN0cmVhbSAqc3QpCitzdGF0aWMgdm9pZCBtb3ZfZnJlZV9zdHJlYW1f Y29udGV4dChBVkZvcm1hdENvbnRleHQqIHMsIEFWU3RyZWFtKiBzdCkKIHsKLSAgICBNT1ZTdHJl YW1Db250ZXh0ICpzYyA9IHN0LT5wcml2X2RhdGE7CisgICAgTU9WU3RyZWFtQ29udGV4dCogc2Mg PSBzdC0+cHJpdl9kYXRhOwogCiAgICAgaWYgKCFzYyB8fCAtLXNjLT5yZWZjb3VudCkgewogICAg ICAgICBzdC0+cHJpdl9kYXRhID0gTlVMTDsKQEAgLTEwMDA1LDEzICsxMDA1OSwxMyBAQCBzdGF0 aWMgdm9pZCBtb3ZfZnJlZV9zdHJlYW1fY29udGV4dChBVkZvcm1hdENvbnRleHQgKnMsIEFWU3Ry ZWFtICpzdCkKICAgICBhdl9mcmVlcCgmc2MtPmlhbWYpOwogfQogCi1zdGF0aWMgaW50IG1vdl9y ZWFkX2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqcykKK3N0YXRpYyBpbnQgbW92X3JlYWRfY2xvc2Uo QVZGb3JtYXRDb250ZXh0KiBzKQogewotICAgIE1PVkNvbnRleHQgKm1vdiA9IHMtPnByaXZfZGF0 YTsKKyAgICBNT1ZDb250ZXh0KiBtb3YgPSBzLT5wcml2X2RhdGE7CiAgICAgaW50IGksIGo7CiAK ICAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bmJfc3RyZWFtczsgaSsrKSB7Ci0gICAgICAgIEFWU3Ry ZWFtICpzdCA9IHMtPnN0cmVhbXNbaV07CisgICAgICAgIEFWU3RyZWFtKiBzdCA9IHMtPnN0cmVh bXNbaV07CiAKICAgICAgICAgbW92X2ZyZWVfc3RyZWFtX2NvbnRleHQocywgc3QpOwogICAgIH0K QEAgLTEwMDMxLDcgKzEwMDg1LDcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9jbG9zZShBVkZvcm1h dENvbnRleHQgKnMpCiAgICAgYXZfZnJlZXAoJm1vdi0+Yml0cmF0ZXMpOwogCiAgICAgZm9yIChp ID0gMDsgaSA8IG1vdi0+ZnJhZ19pbmRleC5uYl9pdGVtczsgaSsrKSB7Ci0gICAgICAgIE1PVkZy YWdtZW50U3RyZWFtSW5mbyAqZnJhZyA9IG1vdi0+ZnJhZ19pbmRleC5pdGVtW2ldLnN0cmVhbV9p bmZvOworICAgICAgICBNT1ZGcmFnbWVudFN0cmVhbUluZm8qIGZyYWcgPSBtb3YtPmZyYWdfaW5k ZXguaXRlbVtpXS5zdHJlYW1faW5mbzsKICAgICAgICAgZm9yIChqID0gMDsgaiA8IG1vdi0+ZnJh Z19pbmRleC5pdGVtW2ldLm5iX3N0cmVhbV9pbmZvOyBqKyspIHsKICAgICAgICAgICAgIG1vdl9m cmVlX2VuY3J5cHRpb25faW5kZXgoJmZyYWdbal0uZW5jcnlwdGlvbl9pbmRleCk7CiAgICAgICAg IH0KQEAgLTEwMDQ1LDcgKzEwMDk5LDYgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9jbG9zZShBVkZv cm1hdENvbnRleHQgKnMpCiAgICAgICAgIGlmICghbW92LT5oZWlmX2l0ZW1baV0pCiAgICAgICAg ICAgICBjb250aW51ZTsKICAgICAgICAgYXZfZnJlZXAoJm1vdi0+aGVpZl9pdGVtW2ldLT5uYW1l KTsKLSAgICAgICAgYXZfZnJlZXAoJm1vdi0+aGVpZl9pdGVtW2ldLT5pcmVmX2xpc3QpOwogICAg ICAgICBhdl9mcmVlcCgmbW92LT5oZWlmX2l0ZW1baV0tPmljY19wcm9maWxlKTsKICAgICAgICAg YXZfZnJlZXAoJm1vdi0+aGVpZl9pdGVtW2ldKTsKICAgICB9CkBAIC0xMDA1NiwxNyArMTAxMDks MTggQEAgc3RhdGljIGludCBtb3ZfcmVhZF9jbG9zZShBVkZvcm1hdENvbnRleHQgKnMpCiAgICAg ICAgIGF2X2ZyZWVwKCZtb3YtPmhlaWZfZ3JpZFtpXS50aWxlX2l0ZW1fbGlzdCk7CiAgICAgfQog ICAgIGF2X2ZyZWVwKCZtb3YtPmhlaWZfZ3JpZCk7CisgICAgYXZfZnJlZXAoJm1vdi0+dGhtYl9p dGVtX2lkKTsKIAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRtY2RfaXNfcmVmZXJl bmNlZChBVkZvcm1hdENvbnRleHQgKnMsIGludCB0bWNkX2lkKQorc3RhdGljIGludCB0bWNkX2lz X3JlZmVyZW5jZWQoQVZGb3JtYXRDb250ZXh0KiBzLCBpbnQgdG1jZF9pZCkKIHsKICAgICBpbnQg aTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBzLT5uYl9zdHJlYW1zOyBpKyspIHsKLSAgICAgICAg QVZTdHJlYW0gKnN0ID0gcy0+c3RyZWFtc1tpXTsKLSAgICAgICAgTU9WU3RyZWFtQ29udGV4dCAq c2MgPSBzdC0+cHJpdl9kYXRhOworICAgICAgICBBVlN0cmVhbSogc3QgPSBzLT5zdHJlYW1zW2ld OworICAgICAgICBNT1ZTdHJlYW1Db250ZXh0KiBzYyA9IHN0LT5wcml2X2RhdGE7CiAKICAgICAg ICAgaWYgKHN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfVklERU8gJiYK ICAgICAgICAgICAgIHNjLT50aW1lY29kZV90cmFjayA9PSB0bWNkX2lkKQpAQCAtMTAwNzYsMTYg KzEwMTMwLDE2IEBAIHN0YXRpYyBpbnQgdG1jZF9pc19yZWZlcmVuY2VkKEFWRm9ybWF0Q29udGV4 dCAqcywgaW50IHRtY2RfaWQpCiB9CiAKIC8qIGxvb2sgZm9yIGEgdG1jZCB0cmFjayBub3QgcmVm ZXJlbmNlZCBieSBhbnkgdmlkZW8gdHJhY2ssIGFuZCBleHBvcnQgaXQgZ2xvYmFsbHkgKi8KLXN0 YXRpYyB2b2lkIGV4cG9ydF9vcnBoYW5fdGltZWNvZGUoQVZGb3JtYXRDb250ZXh0ICpzKQorc3Rh dGljIHZvaWQgZXhwb3J0X29ycGhhbl90aW1lY29kZShBVkZvcm1hdENvbnRleHQqIHMpCiB7CiAg ICAgaW50IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bmJfc3RyZWFtczsgaSsrKSB7Ci0g ICAgICAgIEFWU3RyZWFtICpzdCA9IHMtPnN0cmVhbXNbaV07CisgICAgICAgIEFWU3RyZWFtKiBz dCA9IHMtPnN0cmVhbXNbaV07CiAKLSAgICAgICAgaWYgKHN0LT5jb2RlY3Bhci0+Y29kZWNfdGFn ICA9PSBNS1RBRygndCcsJ20nLCdjJywnZCcpICYmCisgICAgICAgIGlmIChzdC0+Y29kZWNwYXIt PmNvZGVjX3RhZyA9PSBNS1RBRygndCcsICdtJywgJ2MnLCAnZCcpICYmCiAgICAgICAgICAgICAh dG1jZF9pc19yZWZlcmVuY2VkKHMsIGkgKyAxKSkgewotICAgICAgICAgICAgQVZEaWN0aW9uYXJ5 RW50cnkgKnRjciA9IGF2X2RpY3RfZ2V0KHN0LT5tZXRhZGF0YSwgInRpbWVjb2RlIiwgTlVMTCwg MCk7CisgICAgICAgICAgICBBVkRpY3Rpb25hcnlFbnRyeSogdGNyID0gYXZfZGljdF9nZXQoc3Qt Pm1ldGFkYXRhLCAidGltZWNvZGUiLCBOVUxMLCAwKTsKICAgICAgICAgICAgIGlmICh0Y3IpIHsK ICAgICAgICAgICAgICAgICBhdl9kaWN0X3NldCgmcy0+bWV0YWRhdGEsICJ0aW1lY29kZSIsIHRj ci0+dmFsdWUsIDApOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwOTQsNyArMTAxNDgs NyBAQCBzdGF0aWMgdm9pZCBleHBvcnRfb3JwaGFuX3RpbWVjb2RlKEFWRm9ybWF0Q29udGV4dCAq cykKICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF90ZnJhKE1PVkNvbnRleHQgKm1vdiwgQVZJ T0NvbnRleHQgKmYpCitzdGF0aWMgaW50IHJlYWRfdGZyYShNT1ZDb250ZXh0KiBtb3YsIEFWSU9D b250ZXh0KiBmKQogewogICAgIGludCB2ZXJzaW9uLCBmaWVsZGxlbmd0aCwgaSwgajsKICAgICBp bnQ2NF90IHBvcyA9IGF2aW9fdGVsbChmKTsKQEAgLTEwMTE0LDE3ICsxMDE2OCwxOCBAQCBzdGF0 aWMgaW50IHJlYWRfdGZyYShNT1ZDb250ZXh0ICptb3YsIEFWSU9Db250ZXh0ICpmKQogICAgIGZv ciAoaSA9IDA7IGkgPCBpdGVtX2NvdW50OyBpKyspIHsKICAgICAgICAgaW50NjRfdCB0aW1lLCBv ZmZzZXQ7CiAgICAgICAgIGludCBpbmRleDsKLSAgICAgICAgTU9WRnJhZ21lbnRTdHJlYW1JbmZv ICogZnJhZ19zdHJlYW1faW5mbzsKKyAgICAgICAgTU9WRnJhZ21lbnRTdHJlYW1JbmZvKiBmcmFn X3N0cmVhbV9pbmZvOwogCiAgICAgICAgIGlmIChhdmlvX2Zlb2YoZikpIHsKICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHZl cnNpb24gPT0gMSkgewotICAgICAgICAgICAgdGltZSAgID0gYXZpb19yYjY0KGYpOworICAgICAg ICAgICAgdGltZSA9IGF2aW9fcmI2NChmKTsKICAgICAgICAgICAgIG9mZnNldCA9IGF2aW9fcmI2 NChmKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRpbWUgICA9IGF2aW9fcmIzMihm KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRpbWUgPSBhdmlvX3Ji MzIoZik7CiAgICAgICAgICAgICBvZmZzZXQgPSBhdmlvX3JiMzIoZik7CiAgICAgICAgIH0KIApA QCAtMTAxNDksNyArMTAyMDQsNyBAQCBzdGF0aWMgaW50IHJlYWRfdGZyYShNT1ZDb250ZXh0ICpt b3YsIEFWSU9Db250ZXh0ICpmKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1vdl9y ZWFkX21mcmEoTU9WQ29udGV4dCAqYywgQVZJT0NvbnRleHQgKmYpCitzdGF0aWMgaW50IG1vdl9y ZWFkX21mcmEoTU9WQ29udGV4dCogYywgQVZJT0NvbnRleHQqIGYpCiB7CiAgICAgaW50NjRfdCBz dHJlYW1fc2l6ZSA9IGF2aW9fc2l6ZShmKTsKICAgICBpbnQ2NF90IG9yaWdpbmFsX3BvcyA9IGF2 aW9fdGVsbChmKTsKQEAgLTEwMTY1LDcgKzEwMjIwLDcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9t ZnJhKE1PVkNvbnRleHQgKmMsIEFWSU9Db250ZXh0ICpmKQogICAgICAgICBhdl9sb2coYy0+ZmMs IEFWX0xPR19ERUJVRywgImRvZXNuJ3QgbG9vayBsaWtlIG1mcmEgKHVucmVhc29uYWJsZSBzaXpl KVxuIik7CiAgICAgICAgIGdvdG8gZmFpbDsKICAgICB9Ci0gICAgaWYgKChzZWVrX3JldCA9IGF2 aW9fc2VlayhmLCAtKChpbnQ2NF90KSBjLT5tZnJhX3NpemUpLCBTRUVLX0NVUikpIDwgMCkgewor ICAgIGlmICgoc2Vla19yZXQgPSBhdmlvX3NlZWsoZiwgLSgoaW50NjRfdCljLT5tZnJhX3NpemUp LCBTRUVLX0NVUikpIDwgMCkgewogICAgICAgICByZXQgPSBzZWVrX3JldDsKICAgICAgICAgZ290 byBmYWlsOwogICAgIH0KQEAgLTEwMTg5LDE4ICsxMDI0NCwxOCBAQCBmYWlsOgogICAgIHNlZWtf cmV0ID0gYXZpb19zZWVrKGYsIG9yaWdpbmFsX3BvcywgU0VFS19TRVQpOwogICAgIGlmIChzZWVr X3JldCA8IDApIHsKICAgICAgICAgYXZfbG9nKGMtPmZjLCBBVl9MT0dfRVJST1IsCi0gICAgICAg ICAgICAgICAiZmFpbGVkIHRvIHNlZWsgYmFjayBhZnRlciBsb29raW5nIGZvciBtZnJhXG4iKTsK KyAgICAgICAgICAgICJmYWlsZWQgdG8gc2VlayBiYWNrIGFmdGVyIGxvb2tpbmcgZm9yIG1mcmFc biIpOwogICAgICAgICByZXQgPSBzZWVrX3JldDsKICAgICB9CiAgICAgcmV0dXJuIHJldDsKIH0K IAotc3RhdGljIGludCBzZXRfaWNjX3Byb2ZpbGVfZnJvbV9pdGVtKEFWUGFja2V0U2lkZURhdGEg Kipjb2RlZF9zaWRlX2RhdGEsIGludCAqbmJfY29kZWRfc2lkZV9kYXRhLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhFSUZJdGVtICppdGVtKQorc3RhdGljIGlu dCBzZXRfaWNjX3Byb2ZpbGVfZnJvbV9pdGVtKEFWUGFja2V0U2lkZURhdGEqKiBjb2RlZF9zaWRl X2RhdGEsIGludCogbmJfY29kZWRfc2lkZV9kYXRhLAorICAgIGNvbnN0IEhFSUZJdGVtKiBpdGVt KQogewotICAgIEFWUGFja2V0U2lkZURhdGEgKnNkID0gYXZfcGFja2V0X3NpZGVfZGF0YV9uZXco Y29kZWRfc2lkZV9kYXRhLCBuYl9jb2RlZF9zaWRlX2RhdGEsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVl9QS1RfREFUQV9JQ0NfUFJPRklMRSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0t PmljY19wcm9maWxlX3NpemUsIDApOworICAgIEFWUGFja2V0U2lkZURhdGEqIHNkID0gYXZfcGFj a2V0X3NpZGVfZGF0YV9uZXcoY29kZWRfc2lkZV9kYXRhLCBuYl9jb2RlZF9zaWRlX2RhdGEsCisg ICAgICAgIEFWX1BLVF9EQVRBX0lDQ19QUk9GSUxFLAorICAgICAgICBpdGVtLT5pY2NfcHJvZmls ZV9zaXplLCAwKTsKICAgICBpZiAoIXNkKQogICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p OwogCkBAIC0xMDIwOSwxNCArMTAyNjQsMTQgQEAgc3RhdGljIGludCBzZXRfaWNjX3Byb2ZpbGVf ZnJvbV9pdGVtKEFWUGFja2V0U2lkZURhdGEgKipjb2RlZF9zaWRlX2RhdGEsIGludCAqbmIKICAg ICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXRfZGlzcGxheV9tYXRyaXhfZnJvbV9pdGVt KEFWUGFja2V0U2lkZURhdGEgKipjb2RlZF9zaWRlX2RhdGEsIGludCAqbmJfY29kZWRfc2lkZV9k YXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhFSUZJ dGVtICppdGVtKQorc3RhdGljIGludCBzZXRfZGlzcGxheV9tYXRyaXhfZnJvbV9pdGVtKEFWUGFj a2V0U2lkZURhdGEqKiBjb2RlZF9zaWRlX2RhdGEsIGludCogbmJfY29kZWRfc2lkZV9kYXRhLAor ICAgIGNvbnN0IEhFSUZJdGVtKiBpdGVtKQogewotICAgIGludDMyX3QgKm1hdHJpeDsKLSAgICBB VlBhY2tldFNpZGVEYXRhICpzZCA9IGF2X3BhY2tldF9zaWRlX2RhdGFfbmV3KGNvZGVkX3NpZGVf ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5iX2NvZGVkX3NpZGVfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFWX1BLVF9EQVRBX0RJU1BMQVlNQVRSSVgsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5ICogc2l6ZW9mKCptYXRyaXgp LCAwKTsKKyAgICBpbnQzMl90KiBtYXRyaXg7CisgICAgQVZQYWNrZXRTaWRlRGF0YSogc2QgPSBh dl9wYWNrZXRfc2lkZV9kYXRhX25ldyhjb2RlZF9zaWRlX2RhdGEsCisgICAgICAgIG5iX2NvZGVk X3NpZGVfZGF0YSwKKyAgICAgICAgQVZfUEtUX0RBVEFfRElTUExBWU1BVFJJWCwKKyAgICAgICAg OSAqIHNpemVvZigqbWF0cml4KSwgMCk7CiAgICAgaWYgKCFzZCkKICAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKIApAQCAtMTAyMzAsMTEgKzEwMjg1LDExIEBAIHN0YXRpYyBpbnQgc2V0 X2Rpc3BsYXlfbWF0cml4X2Zyb21faXRlbShBVlBhY2tldFNpZGVEYXRhICoqY29kZWRfc2lkZV9k YXRhLCBpbnQKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByZWFkX2ltYWdlX2dyaWQo QVZGb3JtYXRDb250ZXh0ICpzLCBjb25zdCBIRUlGR3JpZCAqZ3JpZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFWU3RyZWFtR3JvdXBUaWxlR3JpZCAqdGlsZV9ncmlkKQorc3RhdGljIGlu dCByZWFkX2ltYWdlX2dyaWQoQVZGb3JtYXRDb250ZXh0KiBzLCBjb25zdCBIRUlGR3JpZCogZ3Jp ZCwKKyAgICBBVlN0cmVhbUdyb3VwVGlsZUdyaWQqIHRpbGVfZ3JpZCkKIHsKLSAgICBNT1ZDb250 ZXh0ICpjID0gcy0+cHJpdl9kYXRhOwotICAgIGNvbnN0IEhFSUZJdGVtICppdGVtID0gZ3JpZC0+ aXRlbTsKKyAgICBNT1ZDb250ZXh0KiBjID0gcy0+cHJpdl9kYXRhOworICAgIGNvbnN0IEhFSUZJ dGVtKiBpdGVtID0gZ3JpZC0+aXRlbTsKICAgICBpbnQ2NF90IG9mZnNldCA9IDAsIHBvcyA9IGF2 aW9fdGVsbChzLT5wYik7CiAgICAgaW50IHggPSAwLCB5ID0gMCwgaSA9IDA7CiAgICAgaW50IHRp bGVfcm93cywgdGlsZV9jb2xzOwpAQCAtMTAyNTIsOSArMTAzMDcsNiBAQCBzdGF0aWMgaW50IHJl YWRfaW1hZ2VfZ3JpZChBVkZvcm1hdENvbnRleHQgKnMsIGNvbnN0IEhFSUZHcmlkICpncmlkLAog ICAgICAgICBvZmZzZXQgPSBjLT5pZGF0X29mZnNldDsKICAgICB9CiAKLSAgICBpZiAob2Zmc2V0 ID4gSU5UNjRfTUFYIC0gaXRlbS0+ZXh0ZW50X29mZnNldCkKLSAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Ci0KICAgICBhdmlvX3NlZWsocy0+cGIsIGl0ZW0tPmV4dGVudF9vZmZz ZXQgKyBvZmZzZXQsIFNFRUtfU0VUKTsKIAogICAgIGF2aW9fcjgocy0+cGIpOyAgICAvKiB2ZXJz aW9uICovCkBAIC0xMDI2MywxMSArMTAzMTUsMjYgQEAgc3RhdGljIGludCByZWFkX2ltYWdlX2dy aWQoQVZGb3JtYXRDb250ZXh0ICpzLCBjb25zdCBIRUlGR3JpZCAqZ3JpZCwKICAgICB0aWxlX3Jv d3MgPSBhdmlvX3I4KHMtPnBiKSArIDE7CiAgICAgdGlsZV9jb2xzID0gYXZpb19yOChzLT5wYikg KyAxOwogICAgIC8qIGFjdHVhbCB3aWR0aCBhbmQgaGVpZ2h0IG9mIG91dHB1dCBpbWFnZSAqLwot ICAgIHRpbGVfZ3JpZC0+d2lkdGggID0gKGZsYWdzICYgMSkgPyBhdmlvX3JiMzIocy0+cGIpIDog YXZpb19yYjE2KHMtPnBiKTsKKyAgICB0aWxlX2dyaWQtPndpZHRoID0gKGZsYWdzICYgMSkgPyBh dmlvX3JiMzIocy0+cGIpIDogYXZpb19yYjE2KHMtPnBiKTsKICAgICB0aWxlX2dyaWQtPmhlaWdo dCA9IChmbGFncyAmIDEpID8gYXZpb19yYjMyKHMtPnBiKSA6IGF2aW9fcmIxNihzLT5wYik7CiAK KyAgICAvKiBJQ0MgcHJvZmlsZSAqLworICAgIGlmIChpdGVtLT5pY2NfcHJvZmlsZV9zaXplKSB7 CisgICAgICAgIGludCByZXQgPSBzZXRfaWNjX3Byb2ZpbGVfZnJvbV9pdGVtKCZ0aWxlX2dyaWQt PmNvZGVkX3NpZGVfZGF0YSwKKyAgICAgICAgICAgICZ0aWxlX2dyaWQtPm5iX2NvZGVkX3NpZGVf ZGF0YSwgaXRlbSk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJl dDsKKyAgICB9CisgICAgLyogcm90YXRpb24gKi8KKyAgICBpZiAoaXRlbS0+cm90YXRpb24gfHwg aXRlbS0+aGZsaXAgfHwgaXRlbS0+dmZsaXApIHsKKyAgICAgICAgaW50IHJldCA9IHNldF9kaXNw bGF5X21hdHJpeF9mcm9tX2l0ZW0oJnRpbGVfZ3JpZC0+Y29kZWRfc2lkZV9kYXRhLAorICAgICAg ICAgICAgJnRpbGVfZ3JpZC0+bmJfY29kZWRfc2lkZV9kYXRhLCBpdGVtKTsKKyAgICAgICAgaWYg KHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKwogICAgIGF2X2xvZyhj LT5mYywgQVZfTE9HX1RSQUNFLCAiZ3JpZDogZ3JpZF9yb3dzICVkIGdyaWRfY29scyAlZCBvdXRw dXRfd2lkdGggJWQgb3V0cHV0X2hlaWdodCAlZFxuIiwKLSAgICAgICAgICAgdGlsZV9yb3dzLCB0 aWxlX2NvbHMsIHRpbGVfZ3JpZC0+d2lkdGgsIHRpbGVfZ3JpZC0+aGVpZ2h0KTsKKyAgICAgICAg dGlsZV9yb3dzLCB0aWxlX2NvbHMsIHRpbGVfZ3JpZC0+d2lkdGgsIHRpbGVfZ3JpZC0+aGVpZ2h0 KTsKIAogICAgIGF2aW9fc2VlayhzLT5wYiwgcG9zLCBTRUVLX1NFVCk7CiAKQEAgLTEwMjc4LDcg KzEwMzQ1LDcgQEAgc3RhdGljIGludCByZWFkX2ltYWdlX2dyaWQoQVZGb3JtYXRDb250ZXh0ICpz LCBjb25zdCBIRUlGR3JpZCAqZ3JpZCwKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRpbGVfY29sczsgaSsrKQotICAgICAgICB0 aWxlX2dyaWQtPmNvZGVkX3dpZHRoICArPSBncmlkLT50aWxlX2l0ZW1fbGlzdFtpXS0+d2lkdGg7 CisgICAgICAgIHRpbGVfZ3JpZC0+Y29kZWRfd2lkdGggKz0gZ3JpZC0+dGlsZV9pdGVtX2xpc3Rb aV0tPndpZHRoOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSB0aWxlX2NvbHMp CiAgICAgICAgIHRpbGVfZ3JpZC0+Y29kZWRfaGVpZ2h0ICs9IGdyaWQtPnRpbGVfaXRlbV9saXN0 W2ldLT5oZWlnaHQ7CiAKQEAgLTEwMjkzLDkgKzEwMzYwLDkgQEAgc3RhdGljIGludCByZWFkX2lt YWdlX2dyaWQoQVZGb3JtYXRDb250ZXh0ICpzLCBjb25zdCBIRUlGR3JpZCAqZ3JpZCwKICAgICAg ICAgICAgIGlmIChpID09IHRpbGVfZ3JpZC0+bmJfdGlsZXMpCiAgICAgICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAKLSAgICAgICAgICAgIHRpbGVfZ3JpZC0+b2Zmc2V0 c1tpXS5pZHggICAgICAgID0gZ3JpZC0+dGlsZV9pZHhfbGlzdFtpXTsKKyAgICAgICAgICAgIHRp bGVfZ3JpZC0+b2Zmc2V0c1tpXS5pZHggPSBncmlkLT50aWxlX2lkeF9saXN0W2ldOwogICAgICAg ICAgICAgdGlsZV9ncmlkLT5vZmZzZXRzW2ldLmhvcml6b250YWwgPSB4OwotICAgICAgICAgICAg dGlsZV9ncmlkLT5vZmZzZXRzW2ldLnZlcnRpY2FsICAgPSB5OworICAgICAgICAgICAgdGlsZV9n cmlkLT5vZmZzZXRzW2ldLnZlcnRpY2FsID0geTsKIAogICAgICAgICAgICAgeCArPSBncmlkLT50 aWxlX2l0ZW1fbGlzdFtpKytdLT53aWR0aDsKICAgICAgICAgfQpAQCAtMTAzMDUsNyArMTAzNzIs NyBAQCBzdGF0aWMgaW50IHJlYWRfaW1hZ2VfZ3JpZChBVkZvcm1hdENvbnRleHQgKnMsIGNvbnN0 IEhFSUZHcmlkICpncmlkLAogICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 CiAgICAgICAgIH0KIAotICAgICAgICB4ICA9IDA7CisgICAgICAgIHggPSAwOwogICAgICAgICB5 ICs9IGdyaWQtPnRpbGVfaXRlbV9saXN0W2xlZnRfY29sXS0+aGVpZ2h0OwogICAgIH0KIApAQCAt MTAzMTcsMTEgKzEwMzg0LDExIEBAIHN0YXRpYyBpbnQgcmVhZF9pbWFnZV9ncmlkKEFWRm9ybWF0 Q29udGV4dCAqcywgY29uc3QgSEVJRkdyaWQgKmdyaWQsCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0 YXRpYyBpbnQgcmVhZF9pbWFnZV9pb3ZsKEFWRm9ybWF0Q29udGV4dCAqcywgY29uc3QgSEVJRkdy aWQgKmdyaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBBVlN0cmVhbUdyb3VwVGlsZUdy aWQgKnRpbGVfZ3JpZCkKK3N0YXRpYyBpbnQgcmVhZF9pbWFnZV9pb3ZsKEFWRm9ybWF0Q29udGV4 dCogcywgY29uc3QgSEVJRkdyaWQqIGdyaWQsCisgICAgQVZTdHJlYW1Hcm91cFRpbGVHcmlkKiB0 aWxlX2dyaWQpCiB7Ci0gICAgTU9WQ29udGV4dCAqYyA9IHMtPnByaXZfZGF0YTsKLSAgICBjb25z dCBIRUlGSXRlbSAqaXRlbSA9IGdyaWQtPml0ZW07CisgICAgTU9WQ29udGV4dCogYyA9IHMtPnBy aXZfZGF0YTsKKyAgICBjb25zdCBIRUlGSXRlbSogaXRlbSA9IGdyaWQtPml0ZW07CiAgICAgdWlu dDE2X3QgY2FudmFzX2ZpbGxfdmFsdWVbNF07CiAgICAgaW50NjRfdCBvZmZzZXQgPSAwLCBwb3Mg PSBhdmlvX3RlbGwocy0+cGIpOwogICAgIGludCByZXQgPSAwLCBmbGFnczsKQEAgLTEwMzM4LDkg KzEwNDA1LDYgQEAgc3RhdGljIGludCByZWFkX2ltYWdlX2lvdmwoQVZGb3JtYXRDb250ZXh0ICpz LCBjb25zdCBIRUlGR3JpZCAqZ3JpZCwKICAgICAgICAgb2Zmc2V0ID0gYy0+aWRhdF9vZmZzZXQ7 CiAgICAgfQogCi0gICAgaWYgKG9mZnNldCA+IElOVDY0X01BWCAtIGl0ZW0tPmV4dGVudF9vZmZz ZXQpCi0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotCiAgICAgYXZpb19zZWVr KHMtPnBiLCBpdGVtLT5leHRlbnRfb2Zmc2V0ICsgb2Zmc2V0LCBTRUVLX1NFVCk7CiAKICAgICBh dmlvX3I4KHMtPnBiKTsgICAgLyogdmVyc2lvbiAqLwpAQCAtMTAzNDksMTkgKzEwNDEzLDM1IEBA IHN0YXRpYyBpbnQgcmVhZF9pbWFnZV9pb3ZsKEFWRm9ybWF0Q29udGV4dCAqcywgY29uc3QgSEVJ RkdyaWQgKmdyaWQsCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCiAgICAgICAgIGNh bnZhc19maWxsX3ZhbHVlW2ldID0gYXZpb19yYjE2KHMtPnBiKTsKICAgICBhdl9sb2coYy0+ZmMs IEFWX0xPR19UUkFDRSwgImlvdmw6IGNhbnZhc19maWxsX3ZhbHVlIHsgJXUsICV1LCAldSwgJXUg fVxuIiwKLSAgICAgICAgICAgY2FudmFzX2ZpbGxfdmFsdWVbMF0sIGNhbnZhc19maWxsX3ZhbHVl WzFdLAotICAgICAgICAgICBjYW52YXNfZmlsbF92YWx1ZVsyXSwgY2FudmFzX2ZpbGxfdmFsdWVb M10pOworICAgICAgICBjYW52YXNfZmlsbF92YWx1ZVswXSwgY2FudmFzX2ZpbGxfdmFsdWVbMV0s CisgICAgICAgIGNhbnZhc19maWxsX3ZhbHVlWzJdLCBjYW52YXNfZmlsbF92YWx1ZVszXSk7CiAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCiAgICAgICAgIHRpbGVfZ3JpZC0+YmFja2dy b3VuZFtpXSA9IGNhbnZhc19maWxsX3ZhbHVlW2ldOwogCiAgICAgLyogYWN0dWFsIHdpZHRoIGFu ZCBoZWlnaHQgb2Ygb3V0cHV0IGltYWdlICovCi0gICAgdGlsZV9ncmlkLT53aWR0aCAgICAgICAg PQotICAgIHRpbGVfZ3JpZC0+Y29kZWRfd2lkdGggID0gKGZsYWdzICYgMSkgPyBhdmlvX3JiMzIo cy0+cGIpIDogYXZpb19yYjE2KHMtPnBiKTsKLSAgICB0aWxlX2dyaWQtPmhlaWdodCAgICAgICA9 Ci0gICAgdGlsZV9ncmlkLT5jb2RlZF9oZWlnaHQgPSAoZmxhZ3MgJiAxKSA/IGF2aW9fcmIzMihz LT5wYikgOiBhdmlvX3JiMTYocy0+cGIpOworICAgIHRpbGVfZ3JpZC0+d2lkdGggPQorICAgICAg ICB0aWxlX2dyaWQtPmNvZGVkX3dpZHRoID0gKGZsYWdzICYgMSkgPyBhdmlvX3JiMzIocy0+cGIp IDogYXZpb19yYjE2KHMtPnBiKTsKKyAgICB0aWxlX2dyaWQtPmhlaWdodCA9CisgICAgICAgIHRp bGVfZ3JpZC0+Y29kZWRfaGVpZ2h0ID0gKGZsYWdzICYgMSkgPyBhdmlvX3JiMzIocy0+cGIpIDog YXZpb19yYjE2KHMtPnBiKTsKKworICAgIC8qIHJvdGF0aW9uICovCisgICAgaWYgKGl0ZW0tPnJv dGF0aW9uIHx8IGl0ZW0tPmhmbGlwIHx8IGl0ZW0tPnZmbGlwKSB7CisgICAgICAgIGludCByZXQg PSBzZXRfZGlzcGxheV9tYXRyaXhfZnJvbV9pdGVtKCZ0aWxlX2dyaWQtPmNvZGVkX3NpZGVfZGF0 YSwKKyAgICAgICAgICAgICZ0aWxlX2dyaWQtPm5iX2NvZGVkX3NpZGVfZGF0YSwgaXRlbSk7Cisg ICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAg ICAvKiBJQ0MgcHJvZmlsZSAqLworICAgIGlmIChpdGVtLT5pY2NfcHJvZmlsZV9zaXplKSB7Cisg ICAgICAgIGludCByZXQgPSBzZXRfaWNjX3Byb2ZpbGVfZnJvbV9pdGVtKCZ0aWxlX2dyaWQtPmNv ZGVkX3NpZGVfZGF0YSwKKyAgICAgICAgICAgICZ0aWxlX2dyaWQtPm5iX2NvZGVkX3NpZGVfZGF0 YSwgaXRlbSk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsK KyAgICB9CiAKICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19UUkFDRSwgImlvdmw6IG91dHB1dF93 aWR0aCAlZCwgb3V0cHV0X2hlaWdodCAlZFxuIiwKLSAgICAgICAgICAgdGlsZV9ncmlkLT53aWR0 aCwgdGlsZV9ncmlkLT5oZWlnaHQpOworICAgICAgICB0aWxlX2dyaWQtPndpZHRoLCB0aWxlX2dy aWQtPmhlaWdodCk7CiAKICAgICB0aWxlX2dyaWQtPm5iX3RpbGVzID0gZ3JpZC0+bmJfdGlsZXM7 CiAgICAgdGlsZV9ncmlkLT5vZmZzZXRzID0gYXZfbWFsbG9jX2FycmF5KHRpbGVfZ3JpZC0+bmJf dGlsZXMsIHNpemVvZigqdGlsZV9ncmlkLT5vZmZzZXRzKSk7CkBAIC0xMDM3MSwxMyArMTA0NTEs MTMgQEAgc3RhdGljIGludCByZWFkX2ltYWdlX2lvdmwoQVZGb3JtYXRDb250ZXh0ICpzLCBjb25z dCBIRUlGR3JpZCAqZ3JpZCwKICAgICB9CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRpbGVf Z3JpZC0+bmJfdGlsZXM7IGkrKykgewotICAgICAgICB0aWxlX2dyaWQtPm9mZnNldHNbaV0uaWR4 ICAgICAgICA9IGdyaWQtPnRpbGVfaWR4X2xpc3RbaV07CisgICAgICAgIHRpbGVfZ3JpZC0+b2Zm c2V0c1tpXS5pZHggPSBncmlkLT50aWxlX2lkeF9saXN0W2ldOwogICAgICAgICB0aWxlX2dyaWQt Pm9mZnNldHNbaV0uaG9yaXpvbnRhbCA9IChmbGFncyAmIDEpID8gYXZpb19yYjMyKHMtPnBiKSA6 IGF2aW9fcmIxNihzLT5wYik7Ci0gICAgICAgIHRpbGVfZ3JpZC0+b2Zmc2V0c1tpXS52ZXJ0aWNh bCAgID0gKGZsYWdzICYgMSkgPyBhdmlvX3JiMzIocy0+cGIpIDogYXZpb19yYjE2KHMtPnBiKTsK KyAgICAgICAgdGlsZV9ncmlkLT5vZmZzZXRzW2ldLnZlcnRpY2FsID0gKGZsYWdzICYgMSkgPyBh dmlvX3JiMzIocy0+cGIpIDogYXZpb19yYjE2KHMtPnBiKTsKICAgICAgICAgYXZfbG9nKGMtPmZj LCBBVl9MT0dfVFJBQ0UsICJpb3ZsOiBzdHJlYW1faWR4WyVkXSAldSwgIgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgImhvcml6b250YWxfb2Zmc2V0WyVkXSAlZCwgdmVydGlj YWxfb2Zmc2V0WyVkXSAlZFxuIiwKLSAgICAgICAgICAgICAgIGksIHRpbGVfZ3JpZC0+b2Zmc2V0 c1tpXS5pZHgsCi0gICAgICAgICAgICAgICBpLCB0aWxlX2dyaWQtPm9mZnNldHNbaV0uaG9yaXpv bnRhbCwgaSwgdGlsZV9ncmlkLT5vZmZzZXRzW2ldLnZlcnRpY2FsKTsKKyAgICAgICAgICAgICJo b3Jpem9udGFsX29mZnNldFslZF0gJWQsIHZlcnRpY2FsX29mZnNldFslZF0gJWRcbiIsCisgICAg ICAgICAgICBpLCB0aWxlX2dyaWQtPm9mZnNldHNbaV0uaWR4LAorICAgICAgICAgICAgaSwgdGls ZV9ncmlkLT5vZmZzZXRzW2ldLmhvcml6b250YWwsIGksIHRpbGVfZ3JpZC0+b2Zmc2V0c1tpXS52 ZXJ0aWNhbCk7CiAgICAgfQogCiBmYWlsOgpAQCAtMTAzODYsOTggKzEwNDY2LDE0IEBAIGZhaWw6 CiAgICAgcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtb3ZfcGFyc2VfZXhpZl9pdGVtKEFW Rm9ybWF0Q29udGV4dCAqcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVlBhY2tl dFNpZGVEYXRhICoqY29kZWRfc2lkZV9kYXRhLCBpbnQgKm5iX2NvZGVkX3NpZGVfZGF0YSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIRUlGSXRlbSAqcmVmKQotewotICAg IE1PVkNvbnRleHQgKmMgPSBzLT5wcml2X2RhdGE7Ci0gICAgQVZQYWNrZXRTaWRlRGF0YSAqc2Q7 Ci0gICAgQVZFeGlmTWV0YWRhdGEgaWZkID0geyAwIH07Ci0gICAgQVZCdWZmZXJSZWYgKmJ1ZjsK LSAgICBpbnQ2NF90IG9mZnNldCA9IDAsIHBvcyA9IGF2aW9fdGVsbChzLT5wYik7Ci0gICAgdW5z aWduZWQgb3JpZW50YXRpb25faWQgPSBhdl9leGlmX2dldF90YWdfaWQoIk9yaWVudGF0aW9uIik7 Ci0gICAgaW50IGVycjsKLQotICAgIGlmICghKHMtPnBiLT5zZWVrYWJsZSAmIEFWSU9fU0VFS0FC TEVfTk9STUFMKSkgewotICAgICAgICBhdl9sb2coYy0+ZmMsIEFWX0xPR19XQVJOSU5HLCAiRXhp ZiBtZXRhZGF0YSB3aXRoIG5vbiBzZWVrYWJsZSBpbnB1dFxuIik7Ci0gICAgICAgIHJldHVybiBB VkVSUk9SX1BBVENIV0VMQ09NRTsKLSAgICB9Ci0gICAgaWYgKHJlZi0+aXNfaWRhdF9yZWxhdGl2 ZSkgewotICAgICAgICBpZiAoIWMtPmlkYXRfb2Zmc2V0KSB7Ci0gICAgICAgICAgICBhdl9sb2co Yy0+ZmMsIEFWX0xPR19FUlJPUiwgIm1pc3NpbmcgaWRhdCBib3ggcmVxdWlyZWQgYnkgdGhlIEV4 aWYgbWV0YWRhdGFcbiIpOwotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 Ci0gICAgICAgIH0KLSAgICAgICAgb2Zmc2V0ID0gYy0+aWRhdF9vZmZzZXQ7Ci0gICAgfQotCi0g ICAgYnVmID0gYXZfYnVmZmVyX2FsbG9jKHJlZi0+ZXh0ZW50X2xlbmd0aCk7Ci0gICAgaWYgKCFi dWYpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICBpZiAob2Zmc2V0ID4g SU5UNjRfTUFYIC0gcmVmLT5leHRlbnRfb2Zmc2V0KSB7Ci0gICAgICAgIGVyciA9IEFWRVJST1Io RU5PTUVNKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIGF2aW9fc2VlayhzLT5w YiwgcmVmLT5leHRlbnRfb2Zmc2V0ICsgb2Zmc2V0LCBTRUVLX1NFVCk7Ci0gICAgZXJyID0gYXZp b19yZWFkKHMtPnBiLCBidWYtPmRhdGEsIHJlZi0+ZXh0ZW50X2xlbmd0aCk7Ci0gICAgaWYgKGVy ciAhPSByZWYtPmV4dGVudF9sZW5ndGgpIHsKLSAgICAgICAgaWYgKGVyciA+IDApCi0gICAgICAg ICAgICBlcnIgPSBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAg fQotCi0gICAgLy8gSEVJRiBzcGVjIHN0YXRlcyB0aGF0IEV4aWYgbWV0YWRhdGEgaXMgaW5mb3Jt YXRpdmUuIFRoZSBpcm90IGl0ZW0gcHJvcGVydHkgaXMKLSAgICAvLyB0aGUgbm9ybWF0aXZlIHNv dXJjZSBvZiByb3RhdGlvbiBpbmZvcm1hdGlvbi4gU28gd2UgcmVtb3ZlIGFueSBPcmllbnRhdGlv biB0YWcKLSAgICAvLyBwcmVzZW50IGluIHRoZSBFeGlmIGJ1ZmZlci4KLSAgICBlcnIgPSBhdl9l eGlmX3BhcnNlX2J1ZmZlcihzLCBidWYtPmRhdGEsIHJlZi0+ZXh0ZW50X2xlbmd0aCwgJmlmZCwg QVZfRVhJRl9UX09GRik7Ci0gICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgYXZfbG9nKHMsIEFW X0xPR19FUlJPUiwgIlVuYWJsZSB0byBwYXJzZSBFeGlmIG1ldGFkYXRhXG4iKTsKLSAgICAgICAg Z290byBmYWlsOwotICAgIH0KLQotICAgIGVyciA9IGF2X2V4aWZfcmVtb3ZlX2VudHJ5KHMsICZp ZmQsIG9yaWVudGF0aW9uX2lkLCAwKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgZ290byBm YWlsOwotICAgIGVsc2UgaWYgKCFlcnIpCi0gICAgICAgIGdvdG8gZmluaXNoOwotCi0gICAgYXZf YnVmZmVyX3VucmVmKCZidWYpOwotICAgIGVyciA9IGF2X2V4aWZfd3JpdGUocywgJmlmZCwgJmJ1 ZiwgQVZfRVhJRl9UX09GRik7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsK LQotZmluaXNoOgotICAgIG9mZnNldCA9IEFWX1JCMzIoYnVmLT5kYXRhKSArIDQ7Ci0gICAgaWYg KG9mZnNldCA+PSBidWYtPnNpemUpIHsKLSAgICAgICAgZXJyID0gQVZFUlJPUl9JTlZBTElEREFU QTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KLSAgICBzZCA9IGF2X3BhY2tldF9zaWRlX2Rh dGFfbmV3KGNvZGVkX3NpZGVfZGF0YSwgbmJfY29kZWRfc2lkZV9kYXRhLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQVZfUEtUX0RBVEFfRVhJRiwgYnVmLT5zaXplIC0gb2Zmc2V0 LCAwKTsKLSAgICBpZiAoIXNkKSB7Ci0gICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKLSAg ICAgICAgZ290byBmYWlsOwotICAgIH0KLSAgICBtZW1jcHkoc2QtPmRhdGEsIGJ1Zi0+ZGF0YSAr IG9mZnNldCwgYnVmLT5zaXplIC0gb2Zmc2V0KTsKLQotICAgIGVyciA9IDA7Ci1mYWlsOgotICAg IGF2X2J1ZmZlcl91bnJlZigmYnVmKTsKLSAgICBhdl9leGlmX2ZyZWUoJmlmZCk7Ci0gICAgYXZp b19zZWVrKHMtPnBiLCBwb3MsIFNFRUtfU0VUKTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0 YXRpYyBpbnQgbW92X3BhcnNlX3RpbGVzKEFWRm9ybWF0Q29udGV4dCAqcykKK3N0YXRpYyBpbnQg bW92X3BhcnNlX3RpbGVzKEFWRm9ybWF0Q29udGV4dCogcykKIHsKLSAgICBNT1ZDb250ZXh0ICpt b3YgPSBzLT5wcml2X2RhdGE7CisgICAgTU9WQ29udGV4dCogbW92ID0gcy0+cHJpdl9kYXRhOwog CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtb3YtPm5iX2hlaWZfZ3JpZDsgaSsrKSB7Ci0gICAg ICAgIEFWU3RyZWFtR3JvdXAgKnN0ZyA9IGF2Zm9ybWF0X3N0cmVhbV9ncm91cF9jcmVhdGUocywg QVZfU1RSRUFNX0dST1VQX1BBUkFNU19USUxFX0dSSUQsIE5VTEwpOwotICAgICAgICBBVlN0cmVh bUdyb3VwVGlsZUdyaWQgKnRpbGVfZ3JpZDsKLSAgICAgICAgY29uc3QgSEVJRkdyaWQgKmdyaWQg PSAmbW92LT5oZWlmX2dyaWRbaV07CisgICAgICAgIEFWU3RyZWFtR3JvdXAqIHN0ZyA9IGF2Zm9y bWF0X3N0cmVhbV9ncm91cF9jcmVhdGUocywgQVZfU1RSRUFNX0dST1VQX1BBUkFNU19USUxFX0dS SUQsIE5VTEwpOworICAgICAgICBBVlN0cmVhbUdyb3VwVGlsZUdyaWQqIHRpbGVfZ3JpZDsKKyAg ICAgICAgY29uc3QgSEVJRkdyaWQqIGdyaWQgPSAmbW92LT5oZWlmX2dyaWRbaV07CiAgICAgICAg IGludCBlcnIsIGxvb3AgPSAxOwogCiAgICAgICAgIGlmICghc3RnKQpAQCAtMTA0OTEsMTYgKzEw NDg3LDE2IEBAIHN0YXRpYyBpbnQgbW92X3BhcnNlX3RpbGVzKEFWRm9ybWF0Q29udGV4dCAqcykK ICAgICAgICAgICAgIGludCBrOwogCiAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbW92LT5u Yl9oZWlmX2l0ZW07IGsrKykgewotICAgICAgICAgICAgICAgIEhFSUZJdGVtICppdGVtID0gbW92 LT5oZWlmX2l0ZW1ba107Ci0gICAgICAgICAgICAgICAgQVZTdHJlYW0gKnN0OworICAgICAgICAg ICAgICAgIEhFSUZJdGVtKiBpdGVtID0gbW92LT5oZWlmX2l0ZW1ba107CisgICAgICAgICAgICAg ICAgQVZTdHJlYW0qIHN0OwogCiAgICAgICAgICAgICAgICAgaWYgKCFpdGVtIHx8IGl0ZW0tPml0 ZW1faWQgIT0gdGlsZV9pZCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg ICAgICAgICAgc3QgPSBpdGVtLT5zdDsKICAgICAgICAgICAgICAgICBpZiAoIXN0KSB7CiAgICAg ICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfV0FSTklORywgIkhFSUYgaXRlbSBpZCAl ZCBmcm9tIGdyaWQgaWQgJWQgZG9lc24ndCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSBhIHN0cmVhbVxuIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRpbGVfaWQsIGdyaWQtPml0ZW0tPml0ZW1faWQpOworICAgICAgICAgICAg ICAgICAgICAgICAgInJlZmVyZW5jZSBhIHN0cmVhbVxuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgIHRpbGVfaWQsIGdyaWQtPml0ZW0tPml0ZW1faWQpOwogICAgICAgICAgICAgICAgICAgICBm Zl9yZW1vdmVfc3RyZWFtX2dyb3VwKHMsIHN0Zyk7CiAgICAgICAgICAgICAgICAgICAgIGxvb3Ag PSAwOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwNTMwLDggKzEwNTI2LDggQEAg c3RhdGljIGludCBtb3ZfcGFyc2VfdGlsZXMoQVZGb3JtYXRDb250ZXh0ICpzKQogICAgICAgICAg ICAgaWYgKGsgPT0gbW92LT5uYl9oZWlmX2l0ZW0pIHsKICAgICAgICAgICAgICAgICBhdl9hc3Nl cnQwKGxvb3ApOwogICAgICAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfV0FSTklORywgIkhF SUYgaXRlbSBpZCAlZCByZWZlcmVuY2VkIGJ5IGdyaWQgaWQgJWQgZG9lc24ndCAiCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhpc3RcbiIsCi0gICAgICAgICAg ICAgICAgICAgICAgIHRpbGVfaWQsIGdyaWQtPml0ZW0tPml0ZW1faWQpOworICAgICAgICAgICAg ICAgICAgICAiZXhpc3RcbiIsCisgICAgICAgICAgICAgICAgICAgIHRpbGVfaWQsIGdyaWQtPml0 ZW0tPml0ZW1faWQpOwogICAgICAgICAgICAgICAgIGZmX3JlbW92ZV9zdHJlYW1fZ3JvdXAocywg c3RnKTsKICAgICAgICAgICAgICAgICBsb29wID0gMDsKICAgICAgICAgICAgIH0KQEAgLTEwNTQz LDEwICsxMDUzOSwxMCBAQCBzdGF0aWMgaW50IG1vdl9wYXJzZV90aWxlcyhBVkZvcm1hdENvbnRl eHQgKnMpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBzd2l0Y2ggKGdyaWQtPml0 ZW0tPnR5cGUpIHsKLSAgICAgICAgY2FzZSBNS1RBRygnZycsJ3InLCdpJywnZCcpOgorICAgICAg ICBjYXNlIE1LVEFHKCdnJywgJ3InLCAnaScsICdkJyk6CiAgICAgICAgICAgICBlcnIgPSByZWFk X2ltYWdlX2dyaWQocywgZ3JpZCwgdGlsZV9ncmlkKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICBjYXNlIE1LVEFHKCdpJywnbycsJ3YnLCdsJyk6CisgICAgICAgIGNhc2UgTUtUQUcoJ2kn LCAnbycsICd2JywgJ2wnKToKICAgICAgICAgICAgIGVyciA9IHJlYWRfaW1hZ2VfaW92bChzLCBn cmlkLCB0aWxlX2dyaWQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBA IC0xMDU1NSwzNyArMTA1NTEsNiBAQCBzdGF0aWMgaW50IG1vdl9wYXJzZV90aWxlcyhBVkZvcm1h dENvbnRleHQgKnMpCiAgICAgICAgIGlmIChlcnIgPCAwKQogICAgICAgICAgICAgcmV0dXJuIGVy cjsKIAotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyaWQtPml0ZW0tPm5iX2lyZWZfbGlz dDsgaisrKSB7Ci0gICAgICAgICAgICBIRUlGSXRlbSAqcmVmID0gZ2V0X2hlaWZfaXRlbShtb3Ys IGdyaWQtPml0ZW0tPmlyZWZfbGlzdFtqXS5pdGVtX2lkKTsKLQotICAgICAgICAgICAgYXZfYXNz ZXJ0MChyZWYpOwotICAgICAgICAgICAgc3dpdGNoKHJlZi0+dHlwZSkgewotICAgICAgICAgICAg Y2FzZSBNS1RBRygnRScsJ3gnLCdpJywnZicpOgotICAgICAgICAgICAgICAgIGVyciA9IG1vdl9w YXJzZV9leGlmX2l0ZW0ocywgJnRpbGVfZ3JpZC0+Y29kZWRfc2lkZV9kYXRhLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRpbGVfZ3JpZC0+bmJfY29kZWRf c2lkZV9kYXRhLCByZWYpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwICYmIChzLT5lcnJv cl9yZWNvZ25pdGlvbiAmIEFWX0VGX0VYUExPREUpKQotICAgICAgICAgICAgICAgICAgICByZXR1 cm4gZXJyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg IC8qIHJvdGF0aW9uICovCi0gICAgICAgIGlmIChncmlkLT5pdGVtLT5yb3RhdGlvbiB8fCBncmlk LT5pdGVtLT5oZmxpcCB8fCBncmlkLT5pdGVtLT52ZmxpcCkgewotICAgICAgICAgICAgZXJyID0g c2V0X2Rpc3BsYXlfbWF0cml4X2Zyb21faXRlbSgmdGlsZV9ncmlkLT5jb2RlZF9zaWRlX2RhdGEs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aWxlX2dy aWQtPm5iX2NvZGVkX3NpZGVfZGF0YSwgZ3JpZC0+aXRlbSk7Ci0gICAgICAgICAgICBpZiAoZXJy IDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0KLSAgICAgICAg LyogSUNDIHByb2ZpbGUgKi8KLSAgICAgICAgaWYgKGdyaWQtPml0ZW0tPmljY19wcm9maWxlX3Np emUpIHsKLSAgICAgICAgICAgIGVyciA9IHNldF9pY2NfcHJvZmlsZV9mcm9tX2l0ZW0oJnRpbGVf Z3JpZC0+Y29kZWRfc2lkZV9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmdGlsZV9ncmlkLT5uYl9jb2RlZF9zaWRlX2RhdGEsIGdyaWQtPml0ZW0pOwot ICAgICAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAg ICAgICAgfQogCiAgICAgICAgIGlmIChncmlkLT5pdGVtLT5uYW1lKQogICAgICAgICAgICAgYXZf ZGljdF9zZXQoJnN0Zy0+bWV0YWRhdGEsICJ0aXRsZSIsIGdyaWQtPml0ZW0tPm5hbWUsIDApOwpA QCAtMTA1OTYsMjAgKzEwNTYxLDI3IEBAIHN0YXRpYyBpbnQgbW92X3BhcnNlX3RpbGVzKEFWRm9y bWF0Q29udGV4dCAqcykKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3ZfcGFyc2Vf aGVpZl9pdGVtcyhBVkZvcm1hdENvbnRleHQgKnMpCitzdGF0aWMgaW50IG1vdl9wYXJzZV9oZWlm X2l0ZW1zKEFWRm9ybWF0Q29udGV4dCogcykKIHsKLSAgICBNT1ZDb250ZXh0ICptb3YgPSBzLT5w cml2X2RhdGE7CisgICAgTU9WQ29udGV4dCogbW92ID0gcy0+cHJpdl9kYXRhOwogICAgIGludCBl cnI7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1vdi0+bmJfaGVpZl9pdGVtOyBpKyspIHsK LSAgICAgICAgSEVJRkl0ZW0gKml0ZW0gPSBtb3YtPmhlaWZfaXRlbVtpXTsKLSAgICAgICAgTU9W U3RyZWFtQ29udGV4dCAqc2M7Ci0gICAgICAgIEFWU3RyZWFtICpzdDsKKyAgICAgICAgSEVJRkl0 ZW0qIGl0ZW0gPSBtb3YtPmhlaWZfaXRlbVtpXTsKKyAgICAgICAgTU9WU3RyZWFtQ29udGV4dCog c2M7CisgICAgICAgIEFWU3RyZWFtKiBzdDsKICAgICAgICAgaW50NjRfdCBvZmZzZXQgPSAwOwog CiAgICAgICAgIGlmICghaXRlbSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAo IWl0ZW0tPnN0KSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG1vdi0+bmJfdGht Yl9pdGVtOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXRlbV9pZCA9PSBtb3Yt PnRobWJfaXRlbV9pZFtqXSkgeworICAgICAgICAgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9H X0VSUk9SLCAiSEVJRiB0aHVtYm5haWwgSUQgJWQgZG9lc24ndCByZWZlcmVuY2UgYSBzdHJlYW1c biIsCisgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5pdGVtX2lkKTsKKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAg aWYgKGl0ZW0tPmlzX2lkYXRfcmVsYXRpdmUpIHsKQEAgLTEwNjIyLDQzICsxMDU5NCwyNCBAQCBz dGF0aWMgaW50IG1vdl9wYXJzZV9oZWlmX2l0ZW1zKEFWRm9ybWF0Q29udGV4dCAqcykKIAogICAg ICAgICBzdCA9IGl0ZW0tPnN0OwogICAgICAgICBzYyA9IHN0LT5wcml2X2RhdGE7Ci0gICAgICAg IHN0LT5jb2RlY3Bhci0+d2lkdGggID0gaXRlbS0+d2lkdGg7CisgICAgICAgIHN0LT5jb2RlY3Bh ci0+d2lkdGggPSBpdGVtLT53aWR0aDsKICAgICAgICAgc3QtPmNvZGVjcGFyLT5oZWlnaHQgPSBp dGVtLT5oZWlnaHQ7CiAKLSAgICAgICAgc2MtPnNhbXBsZV9zaXplICA9IHNjLT5zdHN6X3NhbXBs ZV9zaXplID0gaXRlbS0+ZXh0ZW50X2xlbmd0aDsKKyAgICAgICAgc2MtPnNhbXBsZV9zaXplID0g c2MtPnN0c3pfc2FtcGxlX3NpemUgPSBpdGVtLT5leHRlbnRfbGVuZ3RoOwogICAgICAgICBzYy0+ c2FtcGxlX2NvdW50ID0gMTsKIAotICAgICAgICBlcnIgPSBzYW5pdHlfY2hlY2tzKHMsIHNjLCBz dC0+aW5kZXgpOworICAgICAgICBlcnIgPSBzYW5pdHlfY2hlY2tzKHMsIHNjLCBpdGVtLT5pdGVt X2lkKTsKICAgICAgICAgaWYgKGVycikKICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOwogCi0gICAgICAgIGlmIChvZmZzZXQgPiBJTlQ2NF9NQVggLSBpdGVtLT5leHRlbnRf b2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0KICAgICAg ICAgc2MtPmNodW5rX29mZnNldHNbMF0gPSBpdGVtLT5leHRlbnRfb2Zmc2V0ICsgb2Zmc2V0Owog CiAgICAgICAgIGlmIChpdGVtLT5pdGVtX2lkID09IG1vdi0+cHJpbWFyeV9pdGVtX2lkKQogICAg ICAgICAgICAgc3QtPmRpc3Bvc2l0aW9uIHw9IEFWX0RJU1BPU0lUSU9OX0RFRkFVTFQ7CiAKLSAg ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpdGVtLT5uYl9pcmVmX2xpc3Q7IGorKykgewotICAg ICAgICAgICAgSEVJRkl0ZW0gKnJlZiA9IGdldF9oZWlmX2l0ZW0obW92LCBpdGVtLT5pcmVmX2xp c3Rbal0uaXRlbV9pZCk7Ci0KLSAgICAgICAgICAgIGF2X2Fzc2VydDAocmVmKTsKLSAgICAgICAg ICAgIHN3aXRjaChyZWYtPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgTUtUQUcoJ0UnLCd4Jywn aScsJ2YnKToKLSAgICAgICAgICAgICAgICBlcnIgPSBtb3ZfcGFyc2VfZXhpZl9pdGVtKHMsICZz dC0+Y29kZWNwYXItPmNvZGVkX3NpZGVfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZzdC0+Y29kZWNwYXItPm5iX2NvZGVkX3NpZGVfZGF0YSwgcmVm KTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCAmJiAocy0+ZXJyb3JfcmVjb2duaXRpb24g JiBBVl9FRl9FWFBMT0RFKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoaXRlbS0+cm90 YXRpb24gfHwgaXRlbS0+aGZsaXAgfHwgaXRlbS0+dmZsaXApIHsKICAgICAgICAgICAgIGVyciA9 IHNldF9kaXNwbGF5X21hdHJpeF9mcm9tX2l0ZW0oJnN0LT5jb2RlY3Bhci0+Y29kZWRfc2lkZV9k YXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3Qt PmNvZGVjcGFyLT5uYl9jb2RlZF9zaWRlX2RhdGEsIGl0ZW0pOworICAgICAgICAgICAgICAgICZz dC0+Y29kZWNwYXItPm5iX2NvZGVkX3NpZGVfZGF0YSwgaXRlbSk7CiAgICAgICAgICAgICBpZiAo ZXJyIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICB9CkBAIC0xMDY3 NSwxMCArMTA2MjgsMTAgQEAgc3RhdGljIGludCBtb3ZfcGFyc2VfaGVpZl9pdGVtcyhBVkZvcm1h dENvbnRleHQgKnMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBBVlN0cmVhbSAqbW92X2Zp bmRfcmVmZXJlbmNlX3RyYWNrKEFWRm9ybWF0Q29udGV4dCAqcywgQVZTdHJlYW0gKnN0LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpcnN0X2luZGV4KQor c3RhdGljIEFWU3RyZWFtKiBtb3ZfZmluZF9yZWZlcmVuY2VfdHJhY2soQVZGb3JtYXRDb250ZXh0 KiBzLCBBVlN0cmVhbSogc3QsCisgICAgaW50IGZpcnN0X2luZGV4KQogewotICAgIE1PVlN0cmVh bUNvbnRleHQgKnNjID0gc3QtPnByaXZfZGF0YTsKKyAgICBNT1ZTdHJlYW1Db250ZXh0KiBzYyA9 IHN0LT5wcml2X2RhdGE7CiAKICAgICBpZiAoc2MtPnRyZWZfaWQgPCAwKQogICAgICAgICByZXR1 cm4gTlVMTDsKQEAgLTEwNjkwLDE1ICsxMDY0MywxNSBAQCBzdGF0aWMgQVZTdHJlYW0gKm1vdl9m aW5kX3JlZmVyZW5jZV90cmFjayhBVkZvcm1hdENvbnRleHQgKnMsIEFWU3RyZWFtICpzdCwKICAg ICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBtb3ZfcGFyc2VfbGNldmNfc3RyZWFtcyhB VkZvcm1hdENvbnRleHQgKnMpCitzdGF0aWMgaW50IG1vdl9wYXJzZV9sY2V2Y19zdHJlYW1zKEFW Rm9ybWF0Q29udGV4dCogcykKIHsKICAgICBpbnQgZXJyOwogCiAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBzLT5uYl9zdHJlYW1zOyBpKyspIHsKLSAgICAgICAgQVZTdHJlYW1Hcm91cCAqc3RnOwot ICAgICAgICBBVlN0cmVhbSAqc3QgPSBzLT5zdHJlYW1zW2ldOwotICAgICAgICBBVlN0cmVhbSAq c3RfYmFzZTsKLSAgICAgICAgTU9WU3RyZWFtQ29udGV4dCAqc2MgPSBzdC0+cHJpdl9kYXRhOwor ICAgICAgICBBVlN0cmVhbUdyb3VwKiBzdGc7CisgICAgICAgIEFWU3RyZWFtKiBzdCA9IHMtPnN0 cmVhbXNbaV07CisgICAgICAgIEFWU3RyZWFtKiBzdF9iYXNlOworICAgICAgICBNT1ZTdHJlYW1D b250ZXh0KiBzYyA9IHN0LT5wcml2X2RhdGE7CiAgICAgICAgIGludCBqID0gMDsKIAogICAgICAg ICAvKiBGaW5kIGFuIGVuaGFuY2VtZW50IHN0cmVhbS4gKi8KQEAgLTEwNzEzLDcgKzEwNjY2LDcg QEAgc3RhdGljIGludCBtb3ZfcGFyc2VfbGNldmNfc3RyZWFtcyhBVkZvcm1hdENvbnRleHQgKnMp CiAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwogCiAgICAgICAgIHN0Zy0+aWQg PSBzdC0+aWQ7Ci0gICAgICAgIHN0Zy0+cGFyYW1zLmxjZXZjLT53aWR0aCAgPSBzdC0+Y29kZWNw YXItPndpZHRoOworICAgICAgICBzdGctPnBhcmFtcy5sY2V2Yy0+d2lkdGggPSBzdC0+Y29kZWNw YXItPndpZHRoOwogICAgICAgICBzdGctPnBhcmFtcy5sY2V2Yy0+aGVpZ2h0ID0gc3QtPmNvZGVj cGFyLT5oZWlnaHQ7CiAgICAgICAgIHN0LT5jb2RlY3Bhci0+d2lkdGggPSAwOwogICAgICAgICBz dC0+Y29kZWNwYXItPmhlaWdodCA9IDA7CkBAIC0xMDc0MCwzNCArMTA2OTMsMzQgQEAgc3RhdGlj IGludCBtb3ZfcGFyc2VfbGNldmNfc3RyZWFtcyhBVkZvcm1hdENvbnRleHQgKnMpCiAgICAgcmV0 dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGZpeF9zdHJlYW1faWRzKEFWRm9ybWF0Q29udGV4dCAq cykKK3N0YXRpYyB2b2lkIGZpeF9zdHJlYW1faWRzKEFWRm9ybWF0Q29udGV4dCogcykKIHsKICAg ICBpbnQgaGlnaGVzdF9pZCA9IDA7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHMtPm5iX3N0 cmVhbXM7IGkrKykgewotICAgICAgICBjb25zdCBBVlN0cmVhbSAqc3QgPSBzLT5zdHJlYW1zW2ld OwotICAgICAgICBjb25zdCBNT1ZTdHJlYW1Db250ZXh0ICpzYyA9IHN0LT5wcml2X2RhdGE7Cisg ICAgICAgIGNvbnN0IEFWU3RyZWFtKiBzdCA9IHMtPnN0cmVhbXNbaV07CisgICAgICAgIGNvbnN0 IE1PVlN0cmVhbUNvbnRleHQqIHNjID0gc3QtPnByaXZfZGF0YTsKICAgICAgICAgaWYgKCFzYy0+ aWFtZikKICAgICAgICAgICAgIGhpZ2hlc3RfaWQgPSBGRk1BWChoaWdoZXN0X2lkLCBzdC0+aWQp OwogICAgIH0KICAgICBoaWdoZXN0X2lkICs9ICFoaWdoZXN0X2lkOwogICAgIGZvciAoaW50IGkg PSAwOyBoaWdoZXN0X2lkID4gMSAmJiBpIDwgcy0+bmJfc3RyZWFtX2dyb3VwczsgaSsrKSB7Ci0g ICAgICAgIEFWU3RyZWFtR3JvdXAgKnN0ZyA9IHMtPnN0cmVhbV9ncm91cHNbaV07CisgICAgICAg IEFWU3RyZWFtR3JvdXAqIHN0ZyA9IHMtPnN0cmVhbV9ncm91cHNbaV07CiAgICAgICAgIGlmIChz dGctPnR5cGUgIT0gQVZfU1RSRUFNX0dST1VQX1BBUkFNU19JQU1GX0FVRElPX0VMRU1FTlQpCiAg ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdGctPm5i X3N0cmVhbXM7IGorKykgewotICAgICAgICAgICAgQVZTdHJlYW0gKnN0ID0gc3RnLT5zdHJlYW1z W2pdOwotICAgICAgICAgICAgTU9WU3RyZWFtQ29udGV4dCAqc2MgPSBzdC0+cHJpdl9kYXRhOwor ICAgICAgICAgICAgQVZTdHJlYW0qIHN0ID0gc3RnLT5zdHJlYW1zW2pdOworICAgICAgICAgICAg TU9WU3RyZWFtQ29udGV4dCogc2MgPSBzdC0+cHJpdl9kYXRhOwogICAgICAgICAgICAgc3QtPmlk ICs9IGhpZ2hlc3RfaWQ7CiAgICAgICAgICAgICBzYy0+aWFtZl9zdHJlYW1fb2Zmc2V0ID0gaGln aGVzdF9pZDsKICAgICAgICAgfQogICAgIH0KIH0KIAotc3RhdGljIGludCBtb3ZfcmVhZF9oZWFk ZXIoQVZGb3JtYXRDb250ZXh0ICpzKQorc3RhdGljIGludCBtb3ZfcmVhZF9oZWFkZXIoQVZGb3Jt YXRDb250ZXh0KiBzKQogewotICAgIE1PVkNvbnRleHQgKm1vdiA9IHMtPnByaXZfZGF0YTsKLSAg ICBBVklPQ29udGV4dCAqcGIgPSBzLT5wYjsKKyAgICBNT1ZDb250ZXh0KiBtb3YgPSBzLT5wcml2 X2RhdGE7CisgICAgQVZJT0NvbnRleHQqIHBiID0gcy0+cGI7CiAgICAgaW50IGosIGVycjsKICAg ICBNT1ZBdG9tIGF0b20gPSB7IEFWX1JMMzIoInJvb3QiKSB9OwogICAgIGludCBpOwpAQCAtMTA3 ODAsNiArMTA3MzMsNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRl eHQgKnMpCiAKICAgICBtb3YtPmZjID0gczsKICAgICBtb3YtPnRyYWtfaW5kZXggPSAtMTsKKyAg ICBtb3YtPnRobWJfaXRlbV9pZCA9IE5VTEw7CiAgICAgbW92LT5wcmltYXJ5X2l0ZW1faWQgPSAt MTsKICAgICBtb3YtPmN1cl9pdGVtX2lkID0gLTE7CiAgICAgLyogLm1vdiBhbmQgLm1wNCBhcmVu J3Qgc3RyZWFtYWJsZSBhbnl3YXkgKG9ubHkgcHJvZ3Jlc3NpdmUgZG93bmxvYWQgaWYgbW9vdiBp cyBiZWZvcmUgbWRhdCkgKi8KQEAgLTEwNzk3LDcgKzEwNzUxLDcgQEAgc3RhdGljIGludCBtb3Zf cmVhZF9oZWFkZXIoQVZGb3JtYXRDb250ZXh0ICpzKQogICAgICAgICAgICAgcmV0dXJuIGVycjsK ICAgICAgICAgfQogICAgIH0gd2hpbGUgKChwYi0+c2Vla2FibGUgJiBBVklPX1NFRUtBQkxFX05P Uk1BTCkgJiYKLSAgICAgICAgICAgICAhbW92LT5mb3VuZF9tb292ICYmICghbW92LT5mb3VuZF9p bG9jIHx8ICFtb3YtPmZvdW5kX2lpbmYpICYmICFtb3YtPm1vb3ZfcmV0cnkrKyk7CisgICAgICAg ICFtb3YtPmZvdW5kX21vb3YgJiYgKCFtb3YtPmZvdW5kX2lsb2MgfHwgIW1vdi0+Zm91bmRfaWlu ZikgJiYgIW1vdi0+bW9vdl9yZXRyeSsrKTsKICAgICBpZiAoIW1vdi0+Zm91bmRfbW9vdiAmJiAh bW92LT5mb3VuZF9pbG9jICYmICFtb3YtPmZvdW5kX2lpbmYpIHsKICAgICAgICAgYXZfbG9nKHMs IEFWX0xPR19FUlJPUiwgIm1vb3YgYXRvbSBub3QgZm91bmRcbiIpOwogICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKQEAgLTEwODIwLDIxICsxMDc3NCwyMiBAQCBzdGF0aWMgaW50 IG1vdl9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCiAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBzLT5uYl9zdHJlYW1zOyBpKyspCiAgICAgICAgICAgICBpZiAocy0+c3RyZWFtc1tpXS0+ Y29kZWNwYXItPmNvZGVjX3RhZyA9PSBBVl9STDMyKCJ0bWNkIikpIHsKICAgICAgICAgICAgICAg ICBtb3ZfcmVhZF90aW1lY29kZV90cmFjayhzLCBzLT5zdHJlYW1zW2ldKTsKLSAgICAgICAgICAg IH0gZWxzZSBpZiAocy0+c3RyZWFtc1tpXS0+Y29kZWNwYXItPmNvZGVjX3RhZyA9PSBBVl9STDMy KCJydG1kIikpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHMtPnN0cmVh bXNbaV0tPmNvZGVjcGFyLT5jb2RlY190YWcgPT0gQVZfUkwzMigicnRtZCIpKSB7CiAgICAgICAg ICAgICAgICAgbW92X3JlYWRfcnRtZF90cmFjayhzLCBzLT5zdHJlYW1zW2ldKTsKICAgICAgICAg ICAgIH0KICAgICB9CiAKICAgICAvKiBjb3B5IHRpbWVjb2RlIG1ldGFkYXRhIGZyb20gdG1jZCB0 cmFja3MgdG8gdGhlIHJlbGF0ZWQgdmlkZW8gc3RyZWFtcyAqLwogICAgIGZvciAoaSA9IDA7IGkg PCBzLT5uYl9zdHJlYW1zOyBpKyspIHsKLSAgICAgICAgQVZTdHJlYW0gKnN0ID0gcy0+c3RyZWFt c1tpXTsKLSAgICAgICAgTU9WU3RyZWFtQ29udGV4dCAqc2MgPSBzdC0+cHJpdl9kYXRhOworICAg ICAgICBBVlN0cmVhbSogc3QgPSBzLT5zdHJlYW1zW2ldOworICAgICAgICBNT1ZTdHJlYW1Db250 ZXh0KiBzYyA9IHN0LT5wcml2X2RhdGE7CiAgICAgICAgIGlmIChzYy0+dGltZWNvZGVfdHJhY2sg PiAwKSB7Ci0gICAgICAgICAgICBBVkRpY3Rpb25hcnlFbnRyeSAqdGNyOworICAgICAgICAgICAg QVZEaWN0aW9uYXJ5RW50cnkqIHRjcjsKICAgICAgICAgICAgIGludCB0bWNkX3N0X2lkID0gLTE7 CiAKICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBzLT5uYl9zdHJlYW1zOyBqKyspIHsKLSAg ICAgICAgICAgICAgICBNT1ZTdHJlYW1Db250ZXh0ICpzYzIgPSBzLT5zdHJlYW1zW2pdLT5wcml2 X2RhdGE7CisgICAgICAgICAgICAgICAgTU9WU3RyZWFtQ29udGV4dCogc2MyID0gcy0+c3RyZWFt c1tqXS0+cHJpdl9kYXRhOwogICAgICAgICAgICAgICAgIGlmIChzYzItPmlkID09IHNjLT50aW1l Y29kZV90cmFjaykKICAgICAgICAgICAgICAgICAgICAgdG1jZF9zdF9pZCA9IGo7CiAgICAgICAg ICAgICB9CkBAIC0xMDg1NCwxMCArMTA4MDksMTAgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9oZWFk ZXIoQVZGb3JtYXRDb250ZXh0ICpzKQogICAgICAgICByZXR1cm4gZXJyOwogCiAgICAgZm9yIChp ID0gMDsgaSA8IHMtPm5iX3N0cmVhbXM7IGkrKykgewotICAgICAgICBBVlN0cmVhbSAqc3QgPSBz LT5zdHJlYW1zW2ldOwotICAgICAgICBGRlN0cmVhbSAqY29uc3Qgc3RpID0gZmZzdHJlYW0oc3Qp OwotICAgICAgICBNT1ZTdHJlYW1Db250ZXh0ICpzYyA9IHN0LT5wcml2X2RhdGE7Ci0gICAgICAg IHVpbnQzMl90IGR2ZHN1Yl9jbHV0W0ZGX0RWRENMVVRfQ0xVVF9MRU5dID0gezB9OworICAgICAg ICBBVlN0cmVhbSogc3QgPSBzLT5zdHJlYW1zW2ldOworICAgICAgICBGRlN0cmVhbSogY29uc3Qg c3RpID0gZmZzdHJlYW0oc3QpOworICAgICAgICBNT1ZTdHJlYW1Db250ZXh0KiBzYyA9IHN0LT5w cml2X2RhdGE7CisgICAgICAgIHVpbnQzMl90IGR2ZHN1Yl9jbHV0W0ZGX0RWRENMVVRfQ0xVVF9M RU5dID0geyAwIH07CiAgICAgICAgIGZpeF90aW1lc2NhbGUobW92LCBzYyk7CiAKICAgICAgICAg LyogU2V0IHRoZSBwcmltYXJ5IGV4dHJhZGF0YSBiYXNlZCBvbiB0aGUgZmlyc3QgU2FtcGxlIGlm IGl0IGRvZXNuJ3QgcmVmZXJlbmNlIHRoZSBmaXJzdCBzdHNkIGVudHJ5LiAqLwpAQCAtMTA4NzUs MTUgKzEwODMwLDE1IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfaGVhZGVyKEFWRm9ybWF0Q29udGV4 dCAqcykKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUg PT0gQVZNRURJQV9UWVBFX0FVRElPICYmCi0gICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVj X2lkICAgPT0gQVZfQ09ERUNfSURfQUFDKSB7CisgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNv ZGVjX2lkID09IEFWX0NPREVDX0lEX0FBQykgewogICAgICAgICAgICAgc3RpLT5za2lwX3NhbXBs ZXMgPSBzYy0+c3RhcnRfcGFkOwogICAgICAgICB9CiAgICAgICAgIGlmIChzdC0+Y29kZWNwYXIt PmNvZGVjX3R5cGUgPT0gQVZNRURJQV9UWVBFX1ZJREVPICYmIHNjLT5uYl9mcmFtZXNfZm9yX2Zw cyA+IDAgJiYgc2MtPmR1cmF0aW9uX2Zvcl9mcHMgPiAwKQogICAgICAgICAgICAgYXZfcmVkdWNl KCZzdC0+YXZnX2ZyYW1lX3JhdGUubnVtLCAmc3QtPmF2Z19mcmFtZV9yYXRlLmRlbiwKLSAgICAg ICAgICAgICAgICAgICAgICBzYy0+dGltZV9zY2FsZSooaW50NjRfdClzYy0+bmJfZnJhbWVzX2Zv cl9mcHMsIHNjLT5kdXJhdGlvbl9mb3JfZnBzLCBJTlRfTUFYKTsKKyAgICAgICAgICAgICAgICBz Yy0+dGltZV9zY2FsZSAqIChpbnQ2NF90KXNjLT5uYl9mcmFtZXNfZm9yX2Zwcywgc2MtPmR1cmF0 aW9uX2Zvcl9mcHMsIElOVF9NQVgpOwogICAgICAgICBpZiAoc3QtPmNvZGVjcGFyLT5jb2RlY190 eXBlID09IEFWTUVESUFfVFlQRV9TVUJUSVRMRSkgewogICAgICAgICAgICAgaWYgKHN0LT5jb2Rl Y3Bhci0+d2lkdGggPD0gMCB8fCBzdC0+Y29kZWNwYXItPmhlaWdodCA8PSAwKSB7Ci0gICAgICAg ICAgICAgICAgc3QtPmNvZGVjcGFyLT53aWR0aCAgPSBzYy0+d2lkdGg7CisgICAgICAgICAgICAg ICAgc3QtPmNvZGVjcGFyLT53aWR0aCA9IHNjLT53aWR0aDsKICAgICAgICAgICAgICAgICBzdC0+ Y29kZWNwYXItPmhlaWdodCA9IHNjLT5oZWlnaHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg ICBpZiAoc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9EVkRfU1VCVElUTEUg JiYKQEAgLTEwOTAwLDEzICsxMDg1NSwxMyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2hlYWRlcihB VkZvcm1hdENvbnRleHQgKnMpCiAgICAgICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5leHRyYWRh dGFfc2l6ZSA9IDA7CiAKICAgICAgICAgICAgICAgICBlcnIgPSBmZl9kdmRjbHV0X3BhbGV0dGVf ZXh0cmFkYXRhX2NhdChkdmRzdWJfY2x1dCwgRkZfRFZEQ0xVVF9DTFVUX1NJWkUsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPmNvZGVj cGFyKTsKKyAgICAgICAgICAgICAgICAgICAgc3QtPmNvZGVjcGFyKTsKICAgICAgICAgICAgICAg ICBpZiAoZXJyIDwgMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAg ICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAobW92LT5oYW5kYnJha2VfdmVyc2lvbiAmJgot ICAgICAgICAgICAgbW92LT5oYW5kYnJha2VfdmVyc2lvbiA8PSAxMDAwMDAwKjAgKyAxMDAwKjEw ICsgMiAmJiAgLy8gMC4xMC4yCisgICAgICAgICAgICBtb3YtPmhhbmRicmFrZV92ZXJzaW9uIDw9 IDEwMDAwMDAgKiAwICsgMTAwMCAqIDEwICsgMiAmJiAgLy8gMC4xMC4yCiAgICAgICAgICAgICBz dC0+Y29kZWNwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX01QMykgewogICAgICAgICAgICAg YXZfbG9nKHMsIEFWX0xPR19WRVJCT1NFLCAiRm9yY2luZyBmdWxsIHBhcnNpbmcgZm9yIG1wMyBz dHJlYW1cbiIpOwogICAgICAgICAgICAgc3RpLT5uZWVkX3BhcnNpbmcgPSBBVlNUUkVBTV9QQVJT RV9GVUxMOwpAQCAtMTA5MTUsMTQgKzEwODcwLDE0IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfaGVh ZGVyKEFWRm9ybWF0Q29udGV4dCAqcykKIAogICAgIGlmIChtb3YtPnRyZXhfZGF0YSB8fCBtb3Yt PnVzZV9tZnJhX2ZvciA+IDApIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHMtPm5iX3N0cmVh bXM7IGkrKykgewotICAgICAgICAgICAgQVZTdHJlYW0gKnN0ID0gcy0+c3RyZWFtc1tpXTsKLSAg ICAgICAgICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjID0gc3QtPnByaXZfZGF0YTsKKyAgICAgICAg ICAgIEFWU3RyZWFtKiBzdCA9IHMtPnN0cmVhbXNbaV07CisgICAgICAgICAgICBNT1ZTdHJlYW1D b250ZXh0KiBzYyA9IHN0LT5wcml2X2RhdGE7CiAgICAgICAgICAgICBpZiAoc2MtPmR1cmF0aW9u X2Zvcl9mcHMgPiAwKSB7CiAgICAgICAgICAgICAgICAgLyogQWtpbiB0byBzYy0+ZGF0YV9zaXpl ICogOCAqIHNjLT50aW1lX3NjYWxlIC8gc2MtPmR1cmF0aW9uX2Zvcl9mcHMgYnV0IGFjY291bnRp bmcgZm9yIG92ZXJmbG93cy4gKi8KLSAgICAgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmJpdF9y YXRlID0gYXZfcmVzY2FsZShzYy0+ZGF0YV9zaXplLCAoKGludDY0X3QpIHNjLT50aW1lX3NjYWxl KSAqIDgsIHNjLT5kdXJhdGlvbl9mb3JfZnBzKTsKKyAgICAgICAgICAgICAgICBzdC0+Y29kZWNw YXItPmJpdF9yYXRlID0gYXZfcmVzY2FsZShzYy0+ZGF0YV9zaXplLCAoKGludDY0X3Qpc2MtPnRp bWVfc2NhbGUpICogOCwgc2MtPmR1cmF0aW9uX2Zvcl9mcHMpOwogICAgICAgICAgICAgICAgIGlm IChzdC0+Y29kZWNwYXItPmJpdF9yYXRlID09IElOVDY0X01JTikgewogICAgICAgICAgICAgICAg ICAgICBhdl9sb2cocywgQVZfTE9HX1dBUk5JTkcsICJPdmVyZmxvdyBkdXJpbmcgYml0IHJhdGUg Y2FsY3VsYXRpb24gJSJQUklkNjQiICogOCAqICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2MtPmRhdGFfc2l6ZSwgc2MtPnRpbWVfc2NhbGUpOworICAgICAgICAgICAgICAgICAg ICAgICAgc2MtPmRhdGFfc2l6ZSwgc2MtPnRpbWVfc2NhbGUpOwogICAgICAgICAgICAgICAgICAg ICBzdC0+Y29kZWNwYXItPmJpdF9yYXRlID0gMDsKICAgICAgICAgICAgICAgICAgICAgaWYgKHMt PmVycm9yX3JlY29nbml0aW9uICYgQVZfRUZfRVhQTE9ERSkKICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwpAQCAtMTA5NDAsOCArMTA4OTUsOCBAQCBz dGF0aWMgaW50IG1vdl9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCiAgICAgZmZfcmZw c19jYWxjdWxhdGUocyk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bmJfc3RyZWFtczsgaSsr KSB7Ci0gICAgICAgIEFWU3RyZWFtICpzdCA9IHMtPnN0cmVhbXNbaV07Ci0gICAgICAgIE1PVlN0 cmVhbUNvbnRleHQgKnNjID0gc3QtPnByaXZfZGF0YTsKKyAgICAgICAgQVZTdHJlYW0qIHN0ID0g cy0+c3RyZWFtc1tpXTsKKyAgICAgICAgTU9WU3RyZWFtQ29udGV4dCogc2MgPSBzdC0+cHJpdl9k YXRhOwogCiAgICAgICAgIHN3aXRjaCAoc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlKSB7CiAgICAg ICAgIGNhc2UgQVZNRURJQV9UWVBFX0FVRElPOgpAQCAtMTA5NTIsNDggKzEwOTA3LDQ4IEBAIHN0 YXRpYyBpbnQgbW92X3JlYWRfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcykKICAgICAgICAgY2Fz ZSBBVk1FRElBX1RZUEVfVklERU86CiAgICAgICAgICAgICBpZiAoc2MtPmRpc3BsYXlfbWF0cml4 KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFhdl9wYWNrZXRfc2lkZV9kYXRhX2FkZCgmc3QtPmNv ZGVjcGFyLT5jb2RlZF9zaWRlX2RhdGEsICZzdC0+Y29kZWNwYXItPm5iX2NvZGVkX3NpZGVfZGF0 YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX1BLVF9E QVRBX0RJU1BMQVlNQVRSSVgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodWludDhfdCopc2MtPmRpc3BsYXlfbWF0cml4LCBzaXplb2YoaW50MzJfdCkgKiA5 LCAwKSkKKyAgICAgICAgICAgICAgICAgICAgQVZfUEtUX0RBVEFfRElTUExBWU1BVFJJWCwKKyAg ICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKXNjLT5kaXNwbGF5X21hdHJpeCwgc2l6ZW9mKGlu dDMyX3QpICogOSwgMCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7CiAKICAgICAgICAgICAgICAgICBzYy0+ZGlzcGxheV9tYXRyaXggPSBOVUxMOwogICAgICAg ICAgICAgfQogICAgICAgICAgICAgaWYgKHNjLT5zdGVyZW8zZCkgewogICAgICAgICAgICAgICAg IGlmICghYXZfcGFja2V0X3NpZGVfZGF0YV9hZGQoJnN0LT5jb2RlY3Bhci0+Y29kZWRfc2lkZV9k YXRhLCAmc3QtPmNvZGVjcGFyLT5uYl9jb2RlZF9zaWRlX2RhdGEsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVl9QS1RfREFUQV9TVEVSRU8zRCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopc2MtPnN0 ZXJlbzNkLCBzYy0+c3RlcmVvM2Rfc2l6ZSwgMCkpCisgICAgICAgICAgICAgICAgICAgIEFWX1BL VF9EQVRBX1NURVJFTzNELAorICAgICAgICAgICAgICAgICAgICAodWludDhfdCopc2MtPnN0ZXJl bzNkLCBzYy0+c3RlcmVvM2Rfc2l6ZSwgMCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CiAKICAgICAgICAgICAgICAgICBzYy0+c3RlcmVvM2QgPSBOVUxMOwog ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHNjLT5zcGhlcmljYWwpIHsKICAgICAgICAg ICAgICAgICBpZiAoIWF2X3BhY2tldF9zaWRlX2RhdGFfYWRkKCZzdC0+Y29kZWNwYXItPmNvZGVk X3NpZGVfZGF0YSwgJnN0LT5jb2RlY3Bhci0+bmJfY29kZWRfc2lkZV9kYXRhLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfUEtUX0RBVEFfU1BIRVJJQ0FM LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50 OF90ICopc2MtPnNwaGVyaWNhbCwgc2MtPnNwaGVyaWNhbF9zaXplLCAwKSkKKyAgICAgICAgICAg ICAgICAgICAgQVZfUEtUX0RBVEFfU1BIRVJJQ0FMLAorICAgICAgICAgICAgICAgICAgICAodWlu dDhfdCopc2MtPnNwaGVyaWNhbCwgc2MtPnNwaGVyaWNhbF9zaXplLCAwKSkKICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKIAogICAgICAgICAgICAgICAgIHNjLT5z cGhlcmljYWwgPSBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHNjLT5tYXN0 ZXJpbmcpIHsKICAgICAgICAgICAgICAgICBpZiAoIWF2X3BhY2tldF9zaWRlX2RhdGFfYWRkKCZz dC0+Y29kZWNwYXItPmNvZGVkX3NpZGVfZGF0YSwgJnN0LT5jb2RlY3Bhci0+bmJfY29kZWRfc2lk ZV9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZf UEtUX0RBVEFfTUFTVEVSSU5HX0RJU1BMQVlfTUVUQURBVEEsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKXNjLT5tYXN0ZXJpbmcsIHNjLT5t YXN0ZXJpbmdfc2l6ZSwgMCkpCisgICAgICAgICAgICAgICAgICAgIEFWX1BLVF9EQVRBX01BU1RF UklOR19ESVNQTEFZX01FVEFEQVRBLAorICAgICAgICAgICAgICAgICAgICAodWludDhfdCopc2Mt Pm1hc3RlcmluZywgc2MtPm1hc3RlcmluZ19zaXplLCAwKSkKICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKIAogICAgICAgICAgICAgICAgIHNjLT5tYXN0ZXJpbmcg PSBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHNjLT5jb2xsKSB7CiAgICAg ICAgICAgICAgICAgaWYgKCFhdl9wYWNrZXRfc2lkZV9kYXRhX2FkZCgmc3QtPmNvZGVjcGFyLT5j b2RlZF9zaWRlX2RhdGEsICZzdC0+Y29kZWNwYXItPm5iX2NvZGVkX3NpZGVfZGF0YSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX1BLVF9EQVRBX0NPTlRF TlRfTElHSFRfTEVWRUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAodWludDhfdCAqKXNjLT5jb2xsLCBzYy0+Y29sbF9zaXplLCAwKSkKKyAgICAgICAgICAg ICAgICAgICAgQVZfUEtUX0RBVEFfQ09OVEVOVF9MSUdIVF9MRVZFTCwKKyAgICAgICAgICAgICAg ICAgICAgKHVpbnQ4X3QqKXNjLT5jb2xsLCBzYy0+Y29sbF9zaXplLCAwKSkKICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKIAogICAgICAgICAgICAgICAgIHNjLT5j b2xsID0gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzYy0+YW1iaWVudCkg ewogICAgICAgICAgICAgICAgIGlmICghYXZfcGFja2V0X3NpZGVfZGF0YV9hZGQoJnN0LT5jb2Rl Y3Bhci0+Y29kZWRfc2lkZV9kYXRhLCAmc3QtPmNvZGVjcGFyLT5uYl9jb2RlZF9zaWRlX2RhdGEs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVl9QS1RfREFU QV9BTUJJRU5UX1ZJRVdJTkdfRU5WSVJPTk1FTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSBzYy0+YW1iaWVudCwgc2MtPmFtYmllbnRf c2l6ZSwgMCkpCisgICAgICAgICAgICAgICAgICAgIEFWX1BLVF9EQVRBX0FNQklFTlRfVklFV0lO R19FTlZJUk9OTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKXNjLT5hbWJpZW50 LCBzYy0+YW1iaWVudF9zaXplLCAwKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1IoRU5PTUVNKTsKIAogICAgICAgICAgICAgICAgIHNjLT5hbWJpZW50ID0gTlVMTDsKQEAgLTEx MDEzLDI3ICsxMDk2OCwyNyBAQCBzdGF0aWMgaW50IG1vdl9yZWFkX2hlYWRlcihBVkZvcm1hdENv bnRleHQgKnMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBBVkluZGV4RW50cnkgKm1vdl9m aW5kX25leHRfc2FtcGxlKEFWRm9ybWF0Q29udGV4dCAqcywgQVZTdHJlYW0gKipzdCkKK3N0YXRp YyBBVkluZGV4RW50cnkqIG1vdl9maW5kX25leHRfc2FtcGxlKEFWRm9ybWF0Q29udGV4dCogcywg QVZTdHJlYW0qKiBzdCkKIHsKLSAgICBBVkluZGV4RW50cnkgKnNhbXBsZSA9IE5VTEw7CisgICAg QVZJbmRleEVudHJ5KiBzYW1wbGUgPSBOVUxMOwogICAgIGludDY0X3QgYmVzdF9kdHMgPSBJTlQ2 NF9NQVg7CiAgICAgaW50IGk7Ci0gICAgTU9WQ29udGV4dCAqbW92ID0gcy0+cHJpdl9kYXRhOwor ICAgIE1PVkNvbnRleHQqIG1vdiA9IHMtPnByaXZfZGF0YTsKICAgICBpbnQgbm9faW50ZXJsZWF2 ZSA9ICFtb3YtPmludGVybGVhdmVkX3JlYWQgfHwgIShzLT5wYi0+c2Vla2FibGUgJiBBVklPX1NF RUtBQkxFX05PUk1BTCk7CiAgICAgZm9yIChpID0gMDsgaSA8IHMtPm5iX3N0cmVhbXM7IGkrKykg ewotICAgICAgICBBVlN0cmVhbSAqYXZzdCA9IHMtPnN0cmVhbXNbaV07Ci0gICAgICAgIEZGU3Ry ZWFtICpjb25zdCBhdnN0aSA9IGZmc3RyZWFtKGF2c3QpOwotICAgICAgICBNT1ZTdHJlYW1Db250 ZXh0ICptc2MgPSBhdnN0LT5wcml2X2RhdGE7CisgICAgICAgIEFWU3RyZWFtKiBhdnN0ID0gcy0+ c3RyZWFtc1tpXTsKKyAgICAgICAgRkZTdHJlYW0qIGNvbnN0IGF2c3RpID0gZmZzdHJlYW0oYXZz dCk7CisgICAgICAgIE1PVlN0cmVhbUNvbnRleHQqIG1zYyA9IGF2c3QtPnByaXZfZGF0YTsKICAg ICAgICAgaWYgKG1zYy0+cGIgJiYgbXNjLT5jdXJyZW50X3NhbXBsZSA8IGF2c3RpLT5uYl9pbmRl eF9lbnRyaWVzKSB7Ci0gICAgICAgICAgICBBVkluZGV4RW50cnkgKmN1cnJlbnRfc2FtcGxlID0g JmF2c3RpLT5pbmRleF9lbnRyaWVzW21zYy0+Y3VycmVudF9zYW1wbGVdOworICAgICAgICAgICAg QVZJbmRleEVudHJ5KiBjdXJyZW50X3NhbXBsZSA9ICZhdnN0aS0+aW5kZXhfZW50cmllc1ttc2Mt PmN1cnJlbnRfc2FtcGxlXTsKICAgICAgICAgICAgIGludDY0X3QgZHRzID0gYXZfcmVzY2FsZShj dXJyZW50X3NhbXBsZS0+dGltZXN0YW1wLCBBVl9USU1FX0JBU0UsIG1zYy0+dGltZV9zY2FsZSk7 CiAgICAgICAgICAgICB1aW50NjRfdCBkdHNkaWZmID0gYmVzdF9kdHMgPiBkdHMgPyBiZXN0X2R0 cyAtICh1aW50NjRfdClkdHMgOiAoKHVpbnQ2NF90KWR0cyAtIGJlc3RfZHRzKTsKICAgICAgICAg ICAgIGF2X2xvZyhzLCBBVl9MT0dfVFJBQ0UsICJzdHJlYW0gJWQsIHNhbXBsZSAlZCwgZHRzICUi UFJJZDY0IlxuIiwgaSwgbXNjLT5jdXJyZW50X3NhbXBsZSwgZHRzKTsKICAgICAgICAgICAgIGlm ICghc2FtcGxlIHx8IChub19pbnRlcmxlYXZlICYmIGN1cnJlbnRfc2FtcGxlLT5wb3MgPCBzYW1w bGUtPnBvcykgfHwKICAgICAgICAgICAgICAgICAoKHMtPnBiLT5zZWVrYWJsZSAmIEFWSU9fU0VF S0FCTEVfTk9STUFMKSAmJgotICAgICAgICAgICAgICAgICAoKG1zYy0+cGIgIT0gcy0+cGIgJiYg ZHRzIDwgYmVzdF9kdHMpIHx8IChtc2MtPnBiID09IHMtPnBiICYmIGR0cyAhPSBBVl9OT1BUU19W QUxVRSAmJgotICAgICAgICAgICAgICAgICAoKGR0c2RpZmYgPD0gQVZfVElNRV9CQVNFICYmIGN1 cnJlbnRfc2FtcGxlLT5wb3MgPCBzYW1wbGUtPnBvcykgfHwKLSAgICAgICAgICAgICAgICAgIChk dHNkaWZmID4gQVZfVElNRV9CQVNFICYmIGR0cyA8IGJlc3RfZHRzICYmIG1vdi0+aW50ZXJsZWF2 ZWRfcmVhZCkpKSkpKSB7CisgICAgICAgICAgICAgICAgICAgICgobXNjLT5wYiAhPSBzLT5wYiAm JiBkdHMgPCBiZXN0X2R0cykgfHwgKG1zYy0+cGIgPT0gcy0+cGIgJiYgZHRzICE9IEFWX05PUFRT X1ZBTFVFICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoKGR0c2RpZmYgPD0gQVZfVElNRV9C QVNFICYmIGN1cnJlbnRfc2FtcGxlLT5wb3MgPCBzYW1wbGUtPnBvcykgfHwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZHRzZGlmZiA+IEFWX1RJTUVfQkFTRSAmJiBkdHMgPCBiZXN0X2R0 cyAmJiBtb3YtPmludGVybGVhdmVkX3JlYWQpKSkpKSkgewogICAgICAgICAgICAgICAgIHNhbXBs ZSA9IGN1cnJlbnRfc2FtcGxlOwogICAgICAgICAgICAgICAgIGJlc3RfZHRzID0gZHRzOwogICAg ICAgICAgICAgICAgICpzdCA9IGF2c3Q7CkBAIC0xMTA0MywxNyArMTA5OTgsMTcgQEAgc3RhdGlj IEFWSW5kZXhFbnRyeSAqbW92X2ZpbmRfbmV4dF9zYW1wbGUoQVZGb3JtYXRDb250ZXh0ICpzLCBB VlN0cmVhbSAqKnN0KQogICAgIHJldHVybiBzYW1wbGU7CiB9CiAKLXN0YXRpYyBpbnQgc2hvdWxk X3JldHJ5KEFWSU9Db250ZXh0ICpwYiwgaW50IGVycm9yX2NvZGUpIHsKK3N0YXRpYyBpbnQgc2hv dWxkX3JldHJ5KEFWSU9Db250ZXh0KiBwYiwgaW50IGVycm9yX2NvZGUpIHsKICAgICBpZiAoZXJy b3JfY29kZSA9PSBBVkVSUk9SX0VPRiB8fCBhdmlvX2Zlb2YocGIpKQogICAgICAgICByZXR1cm4g MDsKIAogICAgIHJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IG1vdl9zd2l0Y2hfcm9vdChBVkZv cm1hdENvbnRleHQgKnMsIGludDY0X3QgdGFyZ2V0LCBpbnQgaW5kZXgpCitzdGF0aWMgaW50IG1v dl9zd2l0Y2hfcm9vdChBVkZvcm1hdENvbnRleHQqIHMsIGludDY0X3QgdGFyZ2V0LCBpbnQgaW5k ZXgpCiB7CiAgICAgaW50IHJldDsKLSAgICBNT1ZDb250ZXh0ICptb3YgPSBzLT5wcml2X2RhdGE7 CisgICAgTU9WQ29udGV4dCogbW92ID0gcy0+cHJpdl9kYXRhOwogCiAgICAgaWYgKGluZGV4ID49 IDAgJiYgaW5kZXggPCBtb3YtPmZyYWdfaW5kZXgubmJfaXRlbXMpCiAgICAgICAgIHRhcmdldCA9 IG1vdi0+ZnJhZ19pbmRleC5pdGVtW2luZGV4XS5tb29mX29mZnNldDsKQEAgLTExMDc2LDcgKzEx MDMxLDcgQEAgc3RhdGljIGludCBtb3Zfc3dpdGNoX3Jvb3QoQVZGb3JtYXRDb250ZXh0ICpzLCBp bnQ2NF90IHRhcmdldCwgaW50IGluZGV4KQogCiAgICAgbW92LT5mb3VuZF9tZGF0ID0gMDsKIAot ICAgIHJldCA9IG1vdl9yZWFkX2RlZmF1bHQobW92LCBzLT5wYiwgKE1PVkF0b20peyBBVl9STDMy KCJyb290IiksIElOVDY0X01BWCB9KTsKKyAgICByZXQgPSBtb3ZfcmVhZF9kZWZhdWx0KG1vdiwg cy0+cGIsIChNT1ZBdG9tKSB7IEFWX1JMMzIoInJvb3QiKSwgSU5UNjRfTUFYIH0pOwogICAgIGlm IChyZXQgPCAwKQogICAgICAgICByZXR1cm4gcmV0OwogICAgIGlmIChhdmlvX2Zlb2Yocy0+cGIp KQpAQCAtMTEwODYsMTAgKzExMDQxLDEwIEBAIHN0YXRpYyBpbnQgbW92X3N3aXRjaF9yb290KEFW Rm9ybWF0Q29udGV4dCAqcywgaW50NjRfdCB0YXJnZXQsIGludCBpbmRleCkKICAgICByZXR1cm4g MTsKIH0KIAotc3RhdGljIGludCBtb3ZfY2hhbmdlX2V4dHJhZGF0YShBVlN0cmVhbSAqc3QsIEFW UGFja2V0ICpwa3QpCitzdGF0aWMgaW50IG1vdl9jaGFuZ2VfZXh0cmFkYXRhKEFWU3RyZWFtKiBz dCwgQVZQYWNrZXQqIHBrdCkKIHsKLSAgICBNT1ZTdHJlYW1Db250ZXh0ICpzYyA9IHN0LT5wcml2 X2RhdGE7Ci0gICAgdWludDhfdCAqc2lkZSwgKmV4dHJhZGF0YTsKKyAgICBNT1ZTdHJlYW1Db250 ZXh0KiBzYyA9IHN0LT5wcml2X2RhdGE7CisgICAgdWludDhfdCogc2lkZSwgKiBleHRyYWRhdGE7 CiAgICAgaW50IGV4dHJhZGF0YV9zaXplOwogCiAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBpbmRl eC4gKi8KQEAgLTExMTAwLDggKzExMDU1LDggQEAgc3RhdGljIGludCBtb3ZfY2hhbmdlX2V4dHJh ZGF0YShBVlN0cmVhbSAqc3QsIEFWUGFja2V0ICpwa3QpCiAgICAgZXh0cmFkYXRhID0gc2MtPmV4 dHJhZGF0YVtzYy0+bGFzdF9zdHNkX2luZGV4XTsKICAgICBpZiAoc3QtPmRpc2NhcmQgIT0gQVZE SVNDQVJEX0FMTCAmJiBleHRyYWRhdGFfc2l6ZSA+IDAgJiYgZXh0cmFkYXRhKSB7CiAgICAgICAg IHNpZGUgPSBhdl9wYWNrZXRfbmV3X3NpZGVfZGF0YShwa3QsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBVl9QS1RfREFUQV9ORVdfRVhUUkFEQVRBLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFkYXRhX3NpemUpOworICAgICAgICAg ICAgQVZfUEtUX0RBVEFfTkVXX0VYVFJBREFUQSwKKyAgICAgICAgICAgIGV4dHJhZGF0YV9zaXpl KTsKICAgICAgICAgaWYgKCFzaWRlKQogICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKICAgICAgICAgbWVtY3B5KHNpZGUsIGV4dHJhZGF0YSwgZXh0cmFkYXRhX3NpemUpOwpAQCAt MTExMTAsNyArMTEwNjUsNyBAQCBzdGF0aWMgaW50IG1vdl9jaGFuZ2VfZXh0cmFkYXRhKEFWU3Ry ZWFtICpzdCwgQVZQYWNrZXQgKnBrdCkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBn ZXRfZWlhNjA4X3BhY2tldChBVklPQ29udGV4dCAqcGIsIEFWUGFja2V0ICpwa3QsIGludCBzcmNf c2l6ZSkKK3N0YXRpYyBpbnQgZ2V0X2VpYTYwOF9wYWNrZXQoQVZJT0NvbnRleHQqIHBiLCBBVlBh Y2tldCogcGt0LCBpbnQgc3JjX3NpemUpCiB7CiAgICAgLyogV2UgY2FuJ3QgbWFrZSBhc3N1bXB0 aW9ucyBhYm91dCB0aGUgc3RydWN0dXJlIG9mIHRoZSBwYXlsb2FkLAogICAgICAgIGJlY2F1c2Ug aXQgbWF5IGluY2x1ZGUgbXVsdGlwbGUgY2RhdCBhbmQgY2R0MiBzYW1wbGVzLiAqLwpAQCAtMTEx NzksMTAgKzExMTM0LDEwIEBAIHN0YXRpYyBpbnQgZ2V0X2VpYTYwOF9wYWNrZXQoQVZJT0NvbnRl eHQgKnBiLCBBVlBhY2tldCAqcGt0LCBpbnQgc3JjX3NpemUpCiAgICAgcmV0dXJuIHJldDsKIH0K IAotc3RhdGljIGludCBtb3ZfZmluYWxpemVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZT dHJlYW0gKnN0LCBBVkluZGV4RW50cnkgKnNhbXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50NjRfdCBjdXJyZW50X2luZGV4LCBBVlBhY2tldCAqcGt0KQorc3RhdGljIGlu dCBtb3ZfZmluYWxpemVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCogcywgQVZTdHJlYW0qIHN0LCBB VkluZGV4RW50cnkqIHNhbXBsZSwKKyAgICBpbnQ2NF90IGN1cnJlbnRfaW5kZXgsIEFWUGFja2V0 KiBwa3QpCiB7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2MgPSBzdC0+cHJpdl9kYXRhOworICAg IE1PVlN0cmVhbUNvbnRleHQqIHNjID0gc3QtPnByaXZfZGF0YTsKIAogICAgIHBrdC0+c3RyZWFt X2luZGV4ID0gc2MtPmZmaW5kZXg7CiAgICAgcGt0LT5kdHMgPSBzYW1wbGUtPnRpbWVzdGFtcDsK QEAgLTExMTkzLDcgKzExMTQ4LDggQEAgc3RhdGljIGludCBtb3ZfZmluYWxpemVfcGFja2V0KEFW Rm9ybWF0Q29udGV4dCAqcywgQVZTdHJlYW0gKnN0LCBBVkluZGV4RW50cnkgKnMKICAgICAgICAg cGt0LT5kdXJhdGlvbiA9IHNjLT50dHNfZGF0YVtzYy0+dHRzX2luZGV4XS5kdXJhdGlvbjsKICAg ICBpZiAoc2MtPmN0dHNfY291bnQgJiYgc2MtPnR0c19pbmRleCA8IHNjLT50dHNfY291bnQpIHsK ICAgICAgICAgcGt0LT5wdHMgPSBhdl9zYXRfYWRkNjQocGt0LT5kdHMsIGF2X3NhdF9hZGQ2NChz Yy0+ZHRzX3NoaWZ0LCBzYy0+dHRzX2RhdGFbc2MtPnR0c19pbmRleF0ub2Zmc2V0KSk7Ci0gICAg fSBlbHNlIHsKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICAgIGlmIChwa3QtPmR1cmF0aW9uID09 IDApIHsKICAgICAgICAgICAgIGludDY0X3QgbmV4dF9kdHMgPSAoc2MtPmN1cnJlbnRfc2FtcGxl IDwgZmZzdHJlYW0oc3QpLT5uYl9pbmRleF9lbnRyaWVzKSA/CiAgICAgICAgICAgICAgICAgZmZz dHJlYW0oc3QpLT5pbmRleF9lbnRyaWVzW3NjLT5jdXJyZW50X3NhbXBsZV0udGltZXN0YW1wIDog c3QtPmR1cmF0aW9uOwpAQCAtMTEyNDMsMjMgKzExMTk5LDIzIEBAIHN0YXRpYyBpbnQgbW92X2Zp bmFsaXplX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWU3RyZWFtICpzdCwgQVZJbmRleEVu dHJ5ICpzCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbW92X3JlYWRfcGFja2V0KEFW Rm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKK3N0YXRpYyBpbnQgbW92X3JlYWRfcGFj a2V0KEFWRm9ybWF0Q29udGV4dCogcywgQVZQYWNrZXQqIHBrdCkKIHsKLSAgICBNT1ZDb250ZXh0 ICptb3YgPSBzLT5wcml2X2RhdGE7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2M7Ci0gICAgQVZJ bmRleEVudHJ5ICpzYW1wbGU7Ci0gICAgQVZTdHJlYW0gKnN0ID0gTlVMTDsKLSAgICBGRlN0cmVh bSAqYXZzdGkgPSBOVUxMOworICAgIE1PVkNvbnRleHQqIG1vdiA9IHMtPnByaXZfZGF0YTsKKyAg ICBNT1ZTdHJlYW1Db250ZXh0KiBzYzsKKyAgICBBVkluZGV4RW50cnkqIHNhbXBsZTsKKyAgICBB VlN0cmVhbSogc3QgPSBOVUxMOworICAgIEZGU3RyZWFtKiBhdnN0aSA9IE5VTEw7CiAgICAgaW50 NjRfdCBjdXJyZW50X2luZGV4OwogICAgIGludCByZXQ7CiAgICAgaW50IGk7CiAgICAgbW92LT5m YyA9IHM7Ci0gcmV0cnk6CityZXRyeToKICAgICBpZiAocy0+cGItPnBvcyA9PSAwKSB7CiAKICAg ICAgICAgLy8gRGlzY2FyZCBjdXJyZW50IGZyYWdtZW50IGluZGV4CiAgICAgICAgIGlmIChtb3Yt PmZyYWdfaW5kZXguYWxsb2NhdGVkX3NpemUgPiAwKSB7Ci0gICAgICAgICAgICBmb3IoaW50IGkg PSAwOyBpIDwgbW92LT5mcmFnX2luZGV4Lm5iX2l0ZW1zOyBpKyspIHsKKyAgICAgICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgbW92LT5mcmFnX2luZGV4Lm5iX2l0ZW1zOyBpKyspIHsKICAgICAg ICAgICAgICAgICBhdl9mcmVlcCgmbW92LT5mcmFnX2luZGV4Lml0ZW1baV0uc3RyZWFtX2luZm8p OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYXZfZnJlZXAoJm1vdi0+ZnJhZ19pbmRleC5p dGVtKTsKQEAgLTExMjcwLDggKzExMjI2LDggQEAgc3RhdGljIGludCBtb3ZfcmVhZF9wYWNrZXQo QVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQogICAgICAgICB9CiAKICAgICAgICAg Zm9yIChpID0gMDsgaSA8IHMtPm5iX3N0cmVhbXM7IGkrKykgewotICAgICAgICAgICAgQVZTdHJl YW0gKmF2c3QgPSBzLT5zdHJlYW1zW2ldOwotICAgICAgICAgICAgTU9WU3RyZWFtQ29udGV4dCAq bXNjID0gYXZzdC0+cHJpdl9kYXRhOworICAgICAgICAgICAgQVZTdHJlYW0qIGF2c3QgPSBzLT5z dHJlYW1zW2ldOworICAgICAgICAgICAgTU9WU3RyZWFtQ29udGV4dCogbXNjID0gYXZzdC0+cHJp dl9kYXRhOwogCiAgICAgICAgICAgICAvLyBDbGVhciBjdXJyZW50IHNhbXBsZQogICAgICAgICAg ICAgbW92X2N1cnJlbnRfc2FtcGxlX3NldChtc2MsIDApOwpAQCAtMTEzMTEsMTAgKzExMjY3LDEx IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNr ZXQgKnBrdCkKICAgICAgICAgaW50NjRfdCByZXQ2NCA9IGF2aW9fc2VlayhzYy0+cGIsIHNhbXBs ZS0+cG9zLCBTRUVLX1NFVCk7CiAgICAgICAgIGlmIChyZXQ2NCAhPSBzYW1wbGUtPnBvcykgewog ICAgICAgICAgICAgYXZfbG9nKG1vdi0+ZmMsIEFWX0xPR19FUlJPUiwgInN0cmVhbSAlZCwgb2Zm c2V0IDB4JSJQUkl4NjQiOiBwYXJ0aWFsIGZpbGVcbiIsCi0gICAgICAgICAgICAgICAgICAgc2Mt PmZmaW5kZXgsIHNhbXBsZS0+cG9zKTsKKyAgICAgICAgICAgICAgICBzYy0+ZmZpbmRleCwgc2Ft cGxlLT5wb3MpOwogICAgICAgICAgICAgaWYgKHNob3VsZF9yZXRyeShzYy0+cGIsIHJldDY0KSkg ewogICAgICAgICAgICAgICAgIG1vdl9jdXJyZW50X3NhbXBsZV9kZWMoc2MpOwotICAgICAgICAg ICAgfSBlbHNlIGlmIChyZXQ2NCA8IDApIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs c2UgaWYgKHJldDY0IDwgMCkgewogICAgICAgICAgICAgICAgIHJldHVybiAoaW50KXJldDY0Owog ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CkBA IC0xMTM1NSw3ICsxMTMxMiw4IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfcGFja2V0KEFWRm9ybWF0 Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKICAgICAgICAgZWxzZSBpZiAoc3QtPmNvZGVjcGFy LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9BUFYgJiYgc2FtcGxlLT5zaXplID4gNCkgewogICAg ICAgICAgICAgY29uc3QgdWludDMyX3QgYXVfc2l6ZSA9IGF2aW9fcmIzMihzYy0+cGIpOwogICAg ICAgICAgICAgcmV0ID0gYXZfZ2V0X3BhY2tldChzYy0+cGIsIHBrdCwgYXVfc2l6ZSk7Ci0gICAg ICAgIH0gZWxzZQorICAgICAgICB9CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldCA9IGF2 X2dldF9wYWNrZXQoc2MtPnBiLCBwa3QsIHNhbXBsZS0+c2l6ZSk7CiAgICAgICAgIGlmIChyZXQg PCAwKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkX3JldHJ5KHNjLT5wYiwgcmV0KSkgewpAQCAt MTEzNzUsMTIgKzExMzMzLDEzIEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfcGFja2V0KEFWRm9ybWF0 Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGlm IChzYy0+aGFzX3BhbGV0dGUpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgKnBhbDsKKyAgICAgICAg ICAgIHVpbnQ4X3QqIHBhbDsKIAogICAgICAgICAgICAgcGFsID0gYXZfcGFja2V0X25ld19zaWRl X2RhdGEocGt0LCBBVl9QS1RfREFUQV9QQUxFVFRFLCBBVlBBTEVUVEVfU0laRSk7CiAgICAgICAg ICAgICBpZiAoIXBhbCkgewogICAgICAgICAgICAgICAgIGF2X2xvZyhtb3YtPmZjLCBBVl9MT0df RVJST1IsICJDYW5ub3QgYXBwZW5kIHBhbGV0dGUgdG8gcGFja2V0XG4iKTsKLSAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg ICAgICBtZW1jcHkocGFsLCBzYy0+cGFsZXR0ZSwgQVZQQUxFVFRFX1NJWkUpOwogICAgICAgICAg ICAgICAgIHNjLT5oYXNfcGFsZXR0ZSA9IDA7CiAgICAgICAgICAgICB9CkBAIC0xMTQwOSw5ICsx MTM2OCw5IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywg QVZQYWNrZXQgKnBrdCkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtb3Zfc2Vla19m cmFnbWVudChBVkZvcm1hdENvbnRleHQgKnMsIEFWU3RyZWFtICpzdCwgaW50NjRfdCB0aW1lc3Rh bXApCitzdGF0aWMgaW50IG1vdl9zZWVrX2ZyYWdtZW50KEFWRm9ybWF0Q29udGV4dCogcywgQVZT dHJlYW0qIHN0LCBpbnQ2NF90IHRpbWVzdGFtcCkKIHsKLSAgICBNT1ZDb250ZXh0ICptb3YgPSBz LT5wcml2X2RhdGE7CisgICAgTU9WQ29udGV4dCogbW92ID0gcy0+cHJpdl9kYXRhOwogICAgIGlu dCBpbmRleDsKIAogICAgIGlmICghbW92LT5mcmFnX2luZGV4LmNvbXBsZXRlKQpAQCAtMTE0Mjgs NyArMTEzODcsNyBAQCBzdGF0aWMgaW50IG1vdl9zZWVrX2ZyYWdtZW50KEFWRm9ybWF0Q29udGV4 dCAqcywgQVZTdHJlYW0gKnN0LCBpbnQ2NF90IHRpbWVzdGFtcAogICAgIHJldHVybiAwOwogfQog Ci1zdGF0aWMgaW50IGlzX29wZW5fa2V5X3NhbXBsZShjb25zdCBNT1ZTdHJlYW1Db250ZXh0ICpz YywgaW50IHNhbXBsZSkKK3N0YXRpYyBpbnQgaXNfb3Blbl9rZXlfc2FtcGxlKGNvbnN0IE1PVlN0 cmVhbUNvbnRleHQqIHNjLCBpbnQgc2FtcGxlKQogewogICAgIC8vIFRPRE86IGEgYmlzZWN0IHNl YXJjaCB3b3VsZCBzY2FsZSBtdWNoIGJldHRlcgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2Mt Pm9wZW5fa2V5X3NhbXBsZXNfY291bnQ7IGkrKykgewpAQCAtMTE0NDUsMTAgKzExNDA0LDEwIEBA IHN0YXRpYyBpbnQgaXNfb3Blbl9rZXlfc2FtcGxlKGNvbnN0IE1PVlN0cmVhbUNvbnRleHQgKnNj LCBpbnQgc2FtcGxlKQogICogU29tZSBrZXkgc2FtcGxlIG1heSBiZSBrZXkgZnJhbWVzIGJ1dCBu b3QgSURSIGZyYW1lcywgc28gYSByYW5kb20gYWNjZXNzIHRvCiAgKiB0aGVtIG1heSBub3QgYmUg YWxsb3dlZC4KICAqLwotc3RhdGljIGludCBjYW5fc2Vla190b19rZXlfc2FtcGxlKEFWU3RyZWFt ICpzdCwgaW50IHNhbXBsZSwgaW50NjRfdCByZXF1ZXN0ZWRfcHRzKQorc3RhdGljIGludCBjYW5f c2Vla190b19rZXlfc2FtcGxlKEFWU3RyZWFtKiBzdCwgaW50IHNhbXBsZSwgaW50NjRfdCByZXF1 ZXN0ZWRfcHRzKQogewotICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjID0gc3QtPnByaXZfZGF0YTsK LSAgICBGRlN0cmVhbSAqY29uc3Qgc3RpID0gZmZzdHJlYW0oc3QpOworICAgIE1PVlN0cmVhbUNv bnRleHQqIHNjID0gc3QtPnByaXZfZGF0YTsKKyAgICBGRlN0cmVhbSogY29uc3Qgc3RpID0gZmZz dHJlYW0oc3QpOwogICAgIGludDY0X3Qga2V5X3NhbXBsZV9kdHMsIGtleV9zYW1wbGVfcHRzOwog CiAgICAgaWYgKHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfSEVWQykKQEAg LTExNDcxLDEyICsxMTQzMCwxMSBAQCBzdGF0aWMgaW50IGNhbl9zZWVrX3RvX2tleV9zYW1wbGUo QVZTdHJlYW0gKnN0LCBpbnQgc2FtcGxlLCBpbnQ2NF90IHJlcXVlc3RlZF9wdAogICAgIHJldHVy biAxOwogfQogCi1zdGF0aWMgaW50IG1vdl9zZWVrX3N0cmVhbShBVkZvcm1hdENvbnRleHQgKnMs IEFWU3RyZWFtICpzdCwgaW50NjRfdCB0aW1lc3RhbXAsIGludCBmbGFncykKK3N0YXRpYyBpbnQg bW92X3NlZWtfc3RyZWFtKEFWRm9ybWF0Q29udGV4dCogcywgQVZTdHJlYW0qIHN0LCBpbnQ2NF90 IHRpbWVzdGFtcCwgaW50IGZsYWdzKQogewotICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjID0gc3Qt PnByaXZfZGF0YTsKLSAgICBGRlN0cmVhbSAqY29uc3Qgc3RpID0gZmZzdHJlYW0oc3QpOwotICAg IGludCBzYW1wbGUsIHRpbWVfc2FtcGxlLCByZXQsIHJlcXVlc3RlZF9zYW1wbGU7Ci0gICAgaW50 NjRfdCBuZXh0X3RzOworICAgIE1PVlN0cmVhbUNvbnRleHQqIHNjID0gc3QtPnByaXZfZGF0YTsK KyAgICBGRlN0cmVhbSogY29uc3Qgc3RpID0gZmZzdHJlYW0oc3QpOworICAgIGludCBzYW1wbGUs IHRpbWVfc2FtcGxlLCByZXQsIG5leHRfdHMsIHJlcXVlc3RlZF9zYW1wbGU7CiAgICAgdW5zaWdu ZWQgaW50IGk7CiAKICAgICAvLyBIZXJlIHdlIGNvbnNpZGVyIHRpbWVzdGFtcCB0byBiZSBQVFMs IGhlbmNlIHRyeSB0byBvZmZzZXQgaXQgc28gdGhhdCB3ZQpAQCAtMTE1NDQsMTAgKzExNTAyLDEw IEBAIHN0YXRpYyBpbnQgbW92X3NlZWtfc3RyZWFtKEFWRm9ybWF0Q29udGV4dCAqcywgQVZTdHJl YW0gKnN0LCBpbnQ2NF90IHRpbWVzdGFtcCwKICAgICByZXR1cm4gc2FtcGxlOwogfQogCi1zdGF0 aWMgaW50NjRfdCBtb3ZfZ2V0X3NraXBfc2FtcGxlcyhBVlN0cmVhbSAqc3QsIGludCBzYW1wbGUp CitzdGF0aWMgaW50NjRfdCBtb3ZfZ2V0X3NraXBfc2FtcGxlcyhBVlN0cmVhbSogc3QsIGludCBz YW1wbGUpCiB7Ci0gICAgTU9WU3RyZWFtQ29udGV4dCAqc2MgPSBzdC0+cHJpdl9kYXRhOwotICAg IEZGU3RyZWFtICpjb25zdCBzdGkgPSBmZnN0cmVhbShzdCk7CisgICAgTU9WU3RyZWFtQ29udGV4 dCogc2MgPSBzdC0+cHJpdl9kYXRhOworICAgIEZGU3RyZWFtKiBjb25zdCBzdGkgPSBmZnN0cmVh bShzdCk7CiAgICAgaW50NjRfdCBmaXJzdF90cyA9IHN0aS0+aW5kZXhfZW50cmllc1swXS50aW1l c3RhbXA7CiAgICAgaW50NjRfdCB0cyA9IHN0aS0+aW5kZXhfZW50cmllc1tzYW1wbGVdLnRpbWVz dGFtcDsKICAgICBpbnQ2NF90IG9mZjsKQEAgLTExNTU3LDE1ICsxMTUxNSwxNyBAQCBzdGF0aWMg aW50NjRfdCBtb3ZfZ2V0X3NraXBfc2FtcGxlcyhBVlN0cmVhbSAqc3QsIGludCBzYW1wbGUpCiAK ICAgICAvKiBjb21wdXRlIHNraXAgc2FtcGxlcyBhY2NvcmRpbmcgdG8gc3RyZWFtIHN0YXJ0X3Bh ZCwgc2VlayB0cyBhbmQgZmlyc3QgdHMgKi8KICAgICBvZmYgPSBhdl9yZXNjYWxlX3EodHMgLSBm aXJzdF90cywgc3QtPnRpbWVfYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgKEFWUmF0aW9u YWwpezEsIHN0LT5jb2RlY3Bhci0+c2FtcGxlX3JhdGV9KTsKKyAgICAgICAgKEFWUmF0aW9uYWwp IHsKKyAgICAgICAgMSwgc3QtPmNvZGVjcGFyLT5zYW1wbGVfcmF0ZQorICAgIH0pOwogICAgIHJl dHVybiBGRk1BWChzYy0+c3RhcnRfcGFkIC0gb2ZmLCAwKTsKIH0KIAotc3RhdGljIGludCBtb3Zf cmVhZF9zZWVrKEFWRm9ybWF0Q29udGV4dCAqcywgaW50IHN0cmVhbV9pbmRleCwgaW50NjRfdCBz YW1wbGVfdGltZSwgaW50IGZsYWdzKQorc3RhdGljIGludCBtb3ZfcmVhZF9zZWVrKEFWRm9ybWF0 Q29udGV4dCogcywgaW50IHN0cmVhbV9pbmRleCwgaW50NjRfdCBzYW1wbGVfdGltZSwgaW50IGZs YWdzKQogewotICAgIE1PVkNvbnRleHQgKm1jID0gcy0+cHJpdl9kYXRhOwotICAgIEFWU3RyZWFt ICpzdDsKLSAgICBGRlN0cmVhbSAqc3RpOworICAgIE1PVkNvbnRleHQqIG1jID0gcy0+cHJpdl9k YXRhOworICAgIEFWU3RyZWFtKiBzdDsKKyAgICBGRlN0cmVhbSogc3RpOwogICAgIGludCBzYW1w bGU7CiAgICAgaW50IGk7CiAKQEAgLTExNTg0LDggKzExNTQ0LDggQEAgc3RhdGljIGludCBtb3Zf cmVhZF9zZWVrKEFWRm9ybWF0Q29udGV4dCAqcywgaW50IHN0cmVhbV9pbmRleCwgaW50NjRfdCBz YW1wbGVfdGkKICAgICAgICAgc3RpLT5za2lwX3NhbXBsZXMgPSBtb3ZfZ2V0X3NraXBfc2FtcGxl cyhzdCwgc2FtcGxlKTsKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bmJfc3RyZWFtczsg aSsrKSB7Ci0gICAgICAgICAgICBBVlN0cmVhbSAqY29uc3Qgc3QgID0gcy0+c3RyZWFtc1tpXTsK LSAgICAgICAgICAgIEZGU3RyZWFtICpjb25zdCBzdGkgPSBmZnN0cmVhbShzdCk7CisgICAgICAg ICAgICBBVlN0cmVhbSogY29uc3Qgc3QgPSBzLT5zdHJlYW1zW2ldOworICAgICAgICAgICAgRkZT dHJlYW0qIGNvbnN0IHN0aSA9IGZmc3RyZWFtKHN0KTsKICAgICAgICAgICAgIGludDY0X3QgdGlt ZXN0YW1wOwogCiAgICAgICAgICAgICBpZiAoc3RyZWFtX2luZGV4ID09IGkpCkBAIC0xMTU5Niwx NiArMTE1NTYsMTcgQEAgc3RhdGljIGludCBtb3ZfcmVhZF9zZWVrKEFWRm9ybWF0Q29udGV4dCAq cywgaW50IHN0cmVhbV9pbmRleCwgaW50NjRfdCBzYW1wbGVfdGkKICAgICAgICAgICAgIGlmIChz YW1wbGUgPj0gMCkKICAgICAgICAgICAgICAgICBzdGktPnNraXBfc2FtcGxlcyA9IG1vdl9nZXRf c2tpcF9zYW1wbGVzKHN0LCBzYW1wbGUpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKKyAgICB9 CisgICAgZWxzZSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzLT5uYl9zdHJlYW1zOyBpKysp IHsKLSAgICAgICAgICAgIE1PVlN0cmVhbUNvbnRleHQgKnNjOworICAgICAgICAgICAgTU9WU3Ry ZWFtQ29udGV4dCogc2M7CiAgICAgICAgICAgICBzdCA9IHMtPnN0cmVhbXNbaV07CiAgICAgICAg ICAgICBzYyA9IHN0LT5wcml2X2RhdGE7CiAgICAgICAgICAgICBtb3ZfY3VycmVudF9zYW1wbGVf c2V0KHNjLCAwKTsKICAgICAgICAgfQogICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAg TU9WU3RyZWFtQ29udGV4dCAqc2M7Ci0gICAgICAgICAgICBBVkluZGV4RW50cnkgKmVudHJ5ID0g bW92X2ZpbmRfbmV4dF9zYW1wbGUocywgJnN0KTsKKyAgICAgICAgICAgIE1PVlN0cmVhbUNvbnRl eHQqIHNjOworICAgICAgICAgICAgQVZJbmRleEVudHJ5KiBlbnRyeSA9IG1vdl9maW5kX25leHRf c2FtcGxlKHMsICZzdCk7CiAgICAgICAgICAgICBpZiAoIWVudHJ5KQogICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogICAgICAgICAgICAgc2MgPSBzdC0+cHJpdl9k YXRhOwpAQCAtMTE2MjYsNyArMTE1ODcsNyBAQCBzdGF0aWMgY29uc3QgQVZPcHRpb24gbW92X29w dGlvbnNbXSA9IHsKICAgICAgICAgMCwgMSwgRkxBR1N9LAogICAgIHsic2Vla19zdHJlYW1zX2lu ZGl2aWR1YWxseSIsCiAgICAgICAgICJTZWVrIGVhY2ggc3RyZWFtIGluZGl2aWR1YWxseSB0byB0 aGUgY2xvc2VzdCBwb2ludCIsCi0gICAgICAgIE9GRlNFVChzZWVrX2luZGl2aWR1YWxseSksIEFW X09QVF9UWVBFX0JPT0wsIHsgLmk2NCA9IDEgfSwKKyAgICAgICAgT0ZGU0VUKHNlZWtfaW5kaXZp ZHVhbGx5KSwgQVZfT1BUX1RZUEVfQk9PTCwgey5pNjQgPSAxIH0sCiAgICAgICAgIDAsIDEsIEZM QUdTfSwKICAgICB7Imlnbm9yZV9lZGl0bGlzdCIsICJJZ25vcmUgdGhlIGVkaXQgbGlzdCBhdG9t LiIsIE9GRlNFVChpZ25vcmVfZWRpdGxpc3QpLCBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2NCA9IDB9 LAogICAgICAgICAwLCAxLCBGTEFHU30sCkBAIC0xMTY1MCw5ICsxMTYxMSw5IEBAIHN0YXRpYyBj b25zdCBBVk9wdGlvbiBtb3Zfb3B0aW9uc1tdID0gewogICAgIHsidXNlX3RmZHQiLCAidXNlIHRm ZHQgZm9yIGZyYWdtZW50IHRpbWVzdGFtcHMiLCBPRkZTRVQodXNlX3RmZHQpLCBBVl9PUFRfVFlQ RV9CT09MLCB7Lmk2NCA9IDF9LAogICAgICAgICAwLCAxLCBGTEFHU30sCiAgICAgeyAiZXhwb3J0 X2FsbCIsICJFeHBvcnQgdW5yZWNvZ25pemVkIG1ldGFkYXRhIGVudHJpZXMiLCBPRkZTRVQoZXhw b3J0X2FsbCksCi0gICAgICAgIEFWX09QVF9UWVBFX0JPT0wsIHsgLmk2NCA9IDAgfSwgMCwgMSwg LmZsYWdzID0gRkxBR1MgfSwKKyAgICAgICAgQVZfT1BUX1RZUEVfQk9PTCwgey5pNjQgPSAwIH0s IDAsIDEsIC5mbGFncyA9IEZMQUdTIH0sCiAgICAgeyAiZXhwb3J0X3htcCIsICJFeHBvcnQgZnVs bCBYTVAgbWV0YWRhdGEiLCBPRkZTRVQoZXhwb3J0X3htcCksCi0gICAgICAgIEFWX09QVF9UWVBF X0JPT0wsIHsgLmk2NCA9IDAgfSwgMCwgMSwgLmZsYWdzID0gRkxBR1MgfSwKKyAgICAgICAgQVZf T1BUX1RZUEVfQk9PTCwgey5pNjQgPSAwIH0sIDAsIDEsIC5mbGFncyA9IEZMQUdTIH0sCiAgICAg eyAiYWN0aXZhdGlvbl9ieXRlcyIsICJTZWNyZXQgYnl0ZXMgZm9yIEF1ZGlibGUgQUFYIGZpbGVz IiwgT0ZGU0VUKGFjdGl2YXRpb25fYnl0ZXMpLAogICAgICAgICBBVl9PUFRfVFlQRV9CSU5BUlks IC5mbGFncyA9IEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCiAgICAgeyAiYXVkaWJsZV9r ZXkiLCAiQUVTLTEyOCBLZXkgZm9yIEF1ZGlibGUgQUFYQyBmaWxlcyIsIE9GRlNFVChhdWRpYmxl X2tleSksCkBAIC0xMTY2MSwxMiArMTE2MjIsMTIgQEAgc3RhdGljIGNvbnN0IEFWT3B0aW9uIG1v dl9vcHRpb25zW10gPSB7CiAgICAgICAgIEFWX09QVF9UWVBFX0JJTkFSWSwgLmZsYWdzID0gQVZf T1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKICAgICB7ICJhdWRpYmxlX2ZpeGVkX2tleSIsIC8v IGV4dHJhY3RlZCBmcm9tIGxpYkFBWF9TREsuc28gYW5kIEFBWFNES1dpbi5kbGwgZmlsZXMhCiAg ICAgICAgICJGaXhlZCBrZXkgdXNlZCBmb3IgaGFuZGxpbmcgQXVkaWJsZSBBQVggZmlsZXMiLCBP RkZTRVQoYXVkaWJsZV9maXhlZF9rZXkpLAotICAgICAgICBBVl9PUFRfVFlQRV9CSU5BUlksIHsu c3RyPSI3NzIxNGQ0YjE5NmE4N2NkNTIwMDQ1ZmQyMGE1MWQ2NyJ9LAorICAgICAgICBBVl9PUFRf VFlQRV9CSU5BUlksIHsuc3RyID0gIjc3MjE0ZDRiMTk2YTg3Y2Q1MjAwNDVmZDIwYTUxZDY3In0s CiAgICAgICAgIC5mbGFncyA9IEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCiAgICAgeyAi ZGVjcnlwdGlvbl9rZXkiLCAiVGhlIG1lZGlhIGRlY3J5cHRpb24ga2V5IChoZXgpIiwgT0ZGU0VU KGRlY3J5cHRpb25fa2V5KSwgQVZfT1BUX1RZUEVfQklOQVJZLCAuZmxhZ3MgPSBBVl9PUFRfRkxB R19ERUNPRElOR19QQVJBTSB9LAogICAgIHsgImVuYWJsZV9kcmVmcyIsICJFbmFibGUgZXh0ZXJu YWwgdHJhY2sgc3VwcG9ydC4iLCBPRkZTRVQoZW5hYmxlX2RyZWZzKSwgQVZfT1BUX1RZUEVfQk9P TCwKICAgICAgICAgey5pNjQgPSAwfSwgMCwgMSwgRkxBR1MgfSwKLSAgICB7ICJtYXhfc3R0c19k ZWx0YSIsICJ0cmVhdCBvZmZzZXRzIGFib3ZlIHRoaXMgdmFsdWUgYXMgaW52YWxpZCIsIE9GRlNF VChtYXhfc3R0c19kZWx0YSksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQgPSBVSU5UX01BWC00ODAw MCoxMCB9LCAwLCBVSU5UX01BWCwgLmZsYWdzID0gQVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0g fSwKKyAgICB7ICJtYXhfc3R0c19kZWx0YSIsICJ0cmVhdCBvZmZzZXRzIGFib3ZlIHRoaXMgdmFs dWUgYXMgaW52YWxpZCIsIE9GRlNFVChtYXhfc3R0c19kZWx0YSksIEFWX09QVF9UWVBFX0lOVCwg ey5pNjQgPSBVSU5UX01BWCAtIDQ4MDAwICogMTAgfSwgMCwgVUlOVF9NQVgsIC5mbGFncyA9IEFW X09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCiAgICAgeyAiaW50ZXJsZWF2ZWRfcmVhZCIsICJJ bnRlcmxlYXZlIHBhY2tldHMgZnJvbSBtdWx0aXBsZSB0cmFja3MgYXQgZGVtdXhlciBsZXZlbCIs IE9GRlNFVChpbnRlcmxlYXZlZF9yZWFkKSwgQVZfT1BUX1RZUEVfQk9PTCwgey5pNjQgPSAxIH0s IDAsIDEsIC5mbGFncyA9IEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNIH0sCiAKICAgICB7IE5V TEwgfSwKQEAgLTExNjc0LDIyICsxMTYzNSwyMiBAQCBzdGF0aWMgY29uc3QgQVZPcHRpb24gbW92 X29wdGlvbnNbXSA9IHsKIAogc3RhdGljIGNvbnN0IEFWQ2xhc3MgbW92X2NsYXNzID0gewogICAg IC5jbGFzc19uYW1lID0gIm1vdixtcDQsbTRhLDNncCwzZzIsbWoyIiwKLSAgICAuaXRlbV9uYW1l ICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAotICAgIC5vcHRpb24gICAgID0gbW92X29wdGlvbnMs Ci0gICAgLnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQsCisgICAgLml0ZW1fbmFt ZSA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAorICAgIC5vcHRpb24gPSBtb3Zfb3B0aW9ucywKKyAg ICAudmVyc2lvbiA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKIH07CiAKIGNvbnN0IEZGSW5wdXRG b3JtYXQgZmZfbW92X2RlbXV4ZXIgPSB7Ci0gICAgLnAubmFtZSAgICAgICAgID0gIm1vdixtcDQs bTRhLDNncCwzZzIsbWoyIiwKLSAgICAucC5sb25nX25hbWUgICAgPSBOVUxMX0lGX0NPTkZJR19T TUFMTCgiUXVpY2tUaW1lIC8gTU9WIiksCi0gICAgLnAucHJpdl9jbGFzcyAgID0gJm1vdl9jbGFz cywKLSAgICAucC5leHRlbnNpb25zICAgPSAibW92LG1wNCxtNGEsM2dwLDNnMixtajIscHNwLG00 Yixpc20saXNtdixpc21hLGY0dixhdmlmLGhlaWMsaGVpZiIsCi0gICAgLnAuZmxhZ3MgICAgICAg ID0gQVZGTVRfTk9fQllURV9TRUVLIHwgQVZGTVRfU0VFS19UT19QVFMgfCBBVkZNVF9TSE9XX0lE UywKKyAgICAucC5uYW1lID0gIm1vdixtcDQsbTRhLDNncCwzZzIsbWoyIiwKKyAgICAucC5sb25n X25hbWUgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiUXVpY2tUaW1lIC8gTU9WIiksCisgICAgLnAu cHJpdl9jbGFzcyA9ICZtb3ZfY2xhc3MsCisgICAgLnAuZXh0ZW5zaW9ucyA9ICJtb3YsbXA0LG00 YSwzZ3AsM2cyLG1qMixwc3AsbTRiLGlzbSxpc212LGlzbWEsZjR2LGF2aWYsaGVpYyxoZWlmIiwK KyAgICAucC5mbGFncyA9IEFWRk1UX05PX0JZVEVfU0VFSyB8IEFWRk1UX1NFRUtfVE9fUFRTIHwg QVZGTVRfU0hPV19JRFMsCiAgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKE1PVkNvbnRleHQp LAogICAgIC5mbGFnc19pbnRlcm5hbCA9IEZGX0lORk1UX0ZMQUdfSU5JVF9DTEVBTlVQLAotICAg IC5yZWFkX3Byb2JlICAgICA9IG1vdl9wcm9iZSwKLSAgICAucmVhZF9oZWFkZXIgICAgPSBtb3Zf cmVhZF9oZWFkZXIsCi0gICAgLnJlYWRfcGFja2V0ICAgID0gbW92X3JlYWRfcGFja2V0LAotICAg IC5yZWFkX2Nsb3NlICAgICA9IG1vdl9yZWFkX2Nsb3NlLAotICAgIC5yZWFkX3NlZWsgICAgICA9 IG1vdl9yZWFkX3NlZWssCisgICAgLnJlYWRfcHJvYmUgPSBtb3ZfcHJvYmUsCisgICAgLnJlYWRf aGVhZGVyID0gbW92X3JlYWRfaGVhZGVyLAorICAgIC5yZWFkX3BhY2tldCA9IG1vdl9yZWFkX3Bh Y2tldCwKKyAgICAucmVhZF9jbG9zZSA9IG1vdl9yZWFkX2Nsb3NlLAorICAgIC5yZWFkX3NlZWsg PSBtb3ZfcmVhZF9zZWVrLAogfTsKLS0gCjIuNTEuMi53aW5kb3dzLjEKCg== --000000000000b07abe0648e540b2 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 To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org --000000000000b07abe0648e540b2--