From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 724B340EF6 for ; Thu, 12 May 2022 06:05:53 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8306468B460; Thu, 12 May 2022 09:05:45 +0300 (EEST) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EAAE368B361 for ; Thu, 12 May 2022 09:05:38 +0300 (EEST) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20220512060537euoutp010e1ce216d05797f69d3d1331f9d08499~uRmrEZ8M21043310433euoutp01- for ; Thu, 12 May 2022 06:05:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20220512060537euoutp010e1ce216d05797f69d3d1331f9d08499~uRmrEZ8M21043310433euoutp01- DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1652335537; bh=vlBpikOd1yDVzBLuwIjrHV9vF12wStkDBdsQorobEnU=; h=From:To:Subject:Date:References:From; b=k+4bDo009XElkusbir6hfqdXCHkng1qLwvKbYMkvYbBv0P/MhmSnGUC8FnwSt/PAi 0m3UrJorcTEcag0fYY0dGZCJmVjUcqcU1egfLEPb9UiKUVjrrTTVJ8xFTKCz/RtPPl hD9C5untfilzUEJQ6VHk/lFuXR2LIOhNdnDbxRwE= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20220512060537eucas1p1020ad88348b9dde2a2242a16c34fd944~uRmq2XS4J1999319993eucas1p1D for ; Thu, 12 May 2022 06:05:37 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 28.0F.10260.1B3AC726; Thu, 12 May 2022 07:05:37 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20220512060536eucas1p262e353ab046a9c672e44aec493ef7d4f~uRmqcMjiD0241502415eucas1p2y for ; Thu, 12 May 2022 06:05:36 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20220512060536eusmtrp11531a4503ef6b8f5cbc25637c4307373~uRmqbTYBR1696616966eusmtrp1H for ; Thu, 12 May 2022 06:05:36 +0000 (GMT) X-AuditID: cbfec7f5-bf3ff70000002814-5e-627ca3b105f6 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id C1.19.09522.0B3AC726; Thu, 12 May 2022 07:05:36 +0100 (BST) Received: from AMDN3260 (unknown [106.210.132.171]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20220512060536eusmtip1ea403e3da56b1c1a0bb051c31a6d7074~uRmqAT4dI1962619626eusmtip1X for ; Thu, 12 May 2022 06:05:36 +0000 (GMT) From: "Dawid Kozinski" To: Date: Thu, 12 May 2022 08:05:36 +0200 Message-ID: <020701d865c6$4c52e2a0$e4f8a7e0$@samsung.com> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Content-Language: pl Thread-Index: AdhlxIeT3kJLpNngTeq0vgQUglRubQ== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrBIsWRmVeSWpSXmKPExsWy7djP87obF9ckGWyeKmTx7dMZZgdGjz+L NrMEMEZx2aSk5mSWpRbp2yVwZSye0s1a0Dqds+Lm4jcsDYyHPnB0MXJySAiYSBw+soqti5GL Q0hgBaPE5d29zBDOJCaJW1fvQ2UmMknM6pjC2MXIAdZydz0PSLeQwHJGifk/7CFq2pgkTu9p ZgdJsAnoS8xc9IkNxBYRkJVY/W8KmC0sECpxbd4qMJtFQFXi/JOTzCA2r4ClRNfV/ywQtqDE yZlPwGxmAW2JZQtfM0OcqiDx8+kyVoi4iMSNRy2MEPP1JNbe7YGq+cku8eseP4TtInG/6SMb hC0s8er4FnYIW0bi9OQeFohfiiUO9TtAmDUSh36kQ1RYS7xtPA72LbOApsT6XfoQYUeJTYeX QQOBT+LGW0GIW/gkJm2bzgwR5pXoaBOCMFUk+jrFIBqlJJ4umwN1oYfE94UvWCcwKs5C8uws JM/OQvLgLIQTFjCyrGIUTy0tzk1PLTbOSy3XK07MLS7NS9dLzs/dxAhMDKf/Hf+6g3HFq496 hxiZOBgPMUpwMCuJ8NY01yQJ8aYkVlalFuXHF5XmpBYfYpTmYFES503O3JAoJJCeWJKanZpa kFoEk2Xi4JRqYJq7QmG2uUrT5HyF5vssET7CKXYZbf5c1YohloVJUkxpk71yAkVrmnqXGJi8 k7VTCA9Ysopj/84XTEeM+8JTey8ssbq29nHX9L8Xr3F+27wm73iEkGalgeO0v5/fb5pTwG50 zY83uiD/S1ElazK7c9q500pTs00ULhwVTi+SXX/pW1q6XOOytY2fv6z6VpU8e8ojyR0d7+Of NZmYPNYqSrooOTlb/6tc4O2zXgfyXmxntJgn3OwuJ1V9eeG9CuG3DisjHWYHFfpZ3U04ffPM 5fcZrLPdnjqGTni0JKd7gYHcp2MPbJ9/STlrtO3W9H1Xv/HPPDJTLH5xq/tqy+kHwwPnm98N 4brMfCr6f3LPYSWW4oxEQy3mouJEAB98tnZ7AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrBLMWRmVeSWpSXmKPExsVy+t/xu7obFtckGWyfYWzx7dMZZgdGjz+L NrMEMEbp2RTll5akKmTkF5fYKkUbWhjpGVpa6BmZWOoZGpvHWhmZKunb2aSk5mSWpRbp2yXo ZTS9/c5aMO8ua8WPvhmsDYxLJrF0MXJwSAiYSNxdz9PFyMUhJLCUUeLzhkNAcU6guJTE0qWL GCFsYYk/17rYIIpamCS+LGpjB0mwCehLzFz0iQ3EFhGQlVj9bwqYLSwQLPGs5QYziM0ioCpx /slJMJtXwFKi6+p/FghbUOLkzCdgNrOAtkTvw1ZGGHvZwtfMEIsVJH4+XcYKEReRuPGohRFi l57E2rs9zBMYBWYhGTULyahZSEbNQtK+gJFlFaNIamlxbnpusaFecWJucWleul5yfu4mRmCQ bzv2c/MOxnmvPuodYmTiYDzEKMHBrCTCW9NckyTEm5JYWZValB9fVJqTWnyI0RTot4nMUqLJ +cA4yyuJNzQzMDU0MbM0MLU0M1YS5/Us6EgUEkhPLEnNTk0tSC2C6WPi4JRqYHJwvN3yaiP7 L5am/8xP7sn6uHnaf9hYLXJi+rnlynJTWKICGpbFbDJayllSuFYsREa12u2uxPzlWS/8q8/m X3q6ZolC6oZ5+VusIvj/n+avTPl27ulJJXWn0kXnfRu/yn853Vm+s/Lm11sCzbtXuWx6cr1e bF39EYutUw9/ZOiv/eL5fKoet3nMTs/ZUhPCc4Wre/9dFVmo65bzcfrzc+lCwfcDIxL7f1cZ 2629+nC+utKmuLjzTcVXanzsjlqeFRO9XbnjIJ/BMhEOVoVzj3TXLLXetOWijsHVQ/3an4Km TOEXVg3X+O7tEPS+SPvHM7FFHkcnssv/etjJmVOn+G6R/N473b8W5AV1en63YFJiKc5INNRi LipOBABDZ+IS+wIAAA== X-CMS-MailID: 20220512060536eucas1p262e353ab046a9c672e44aec493ef7d4f X-Msg-Generator: CA X-RootMTR: 20220512060536eucas1p262e353ab046a9c672e44aec493ef7d4f X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20220512060536eucas1p262e353ab046a9c672e44aec493ef7d4f References: Subject: [FFmpeg-devel] [PATCH 2/3] Provided support for MPEG-5 EVC (Essential Video Coding) codec X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: LSBBZGRlZCB4ZXZlIGVuY29kZXIgd3JhcHBlcgotIEFkZGVkIHhldmQgZGVuY29kZXIgd3JhcHBl cgotIEFkZGVkIGRvY3VtZW50YXRpb24gZm9yIHhldmUgYW5kIHhldmQgd3JhcHBlcnMKLSBBZGRl ZCBwYXJzZXIgZm9yIEVWQyBmb3JtYXQKLSBDaGFuZ2VzIGluIHByb2plY3QgY29uZmlndXJhdGlv biBmaWxlIGFuZCBsaWJhdmNvZGVjIE1ha2VmaWxlCgpTaWduZWQtb2ZmLWJ5OiBEYXdpZCBLb3pp bnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4KLS0tCiBjb25maWd1cmUgICAgICAgICAgICAg ICAgIHwgICAgOCArCiBkb2MvZGVjb2RlcnMudGV4aSAgICAgICAgIHwgICAyNCArCiBkb2MvZW5j b2RlcnMudGV4aSAgICAgICAgIHwgIDExMiArKysrCiBkb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhp IHwgICAxOSArCiBsaWJhdmNvZGVjL01ha2VmaWxlICAgICAgIHwgICAgMyArCiBsaWJhdmNvZGVj L2FsbGNvZGVjcy5jICAgIHwgICAgMyArCiBsaWJhdmNvZGVjL2F2Y29kZWMuaCAgICAgIHwgICAg MyArCiBsaWJhdmNvZGVjL2V2Y19wYXJzZXIuYyAgIHwgIDUyNyArKysrKysrKysrKysrKysrKwog bGliYXZjb2RlYy9saWJ4ZXZkLmMgICAgICB8ICA0NDQgKysrKysrKysrKysrKysKIGxpYmF2Y29k ZWMvbGlieGV2ZS5jICAgICAgfCAxMTUyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIGxpYmF2Y29kZWMvcGFyc2Vycy5jICAgICAgfCAgICAxICsKIDExIGZpbGVzIGNoYW5n ZWQsIDIyOTYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvZXZj X3BhcnNlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9saWJ4ZXZkLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2xpYnhldmUuYwoKZGlmZiAtLWdpdCBhL2NvbmZpZ3Vy ZSBiL2NvbmZpZ3VyZQppbmRleCA0ZDJmNGQ5MTEyLi44NTc2NWRlMmJiIDEwMDc1NQotLS0gYS9j b25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0yOTEsNiArMjkxLDggQEAgRXh0ZXJuYWwgbGli cmFyeSBzdXBwb3J0OgogICAtLWVuYWJsZS1saWJ3ZWJwICAgICAgICAgZW5hYmxlIFdlYlAgZW5j b2RpbmcgdmlhIGxpYndlYnAgW25vXQogICAtLWVuYWJsZS1saWJ4MjY0ICAgICAgICAgZW5hYmxl IEguMjY0IGVuY29kaW5nIHZpYSB4MjY0IFtub10KICAgLS1lbmFibGUtbGlieDI2NSAgICAgICAg IGVuYWJsZSBIRVZDIGVuY29kaW5nIHZpYSB4MjY1IFtub10KKyAgLS1lbmFibGUtbGlieGV2ZSAg ICAgICAgIGVuYWJsZSBNUEVHLTUgRXNzZW50aWFsIFZpZGVvIENvZGluZyAoRVZDKSBlbmNvZGlu ZyB2aWEgbGlieGV2ZSBbbm9dCisgIC0tZW5hYmxlLWxpYnhldmQgICAgICAgICBlbmFibGUgTVBF Ry01IEVzc2VudGlhbCBWaWRlbyBDb2RpbmcgKEVWQykgZGVjb2RpbmcgdmlhIGxpYnhldmQgW25v XQogICAtLWVuYWJsZS1saWJ4YXZzICAgICAgICAgZW5hYmxlIEFWUyBlbmNvZGluZyB2aWEgeGF2 cyBbbm9dCiAgIC0tZW5hYmxlLWxpYnhhdnMyICAgICAgICBlbmFibGUgQVZTMiBlbmNvZGluZyB2 aWEgeGF2czIgW25vXQogICAtLWVuYWJsZS1saWJ4Y2IgICAgICAgICAgZW5hYmxlIFgxMSBncmFi YmluZyB1c2luZyBYQ0IgW2F1dG9kZXRlY3RdCkBAIC0xODc0LDYgKzE4NzYsOCBAQCBFWFRFUk5B TF9MSUJSQVJZX0xJU1Q9IgogICAgIGxpYnZvcmJpcwogICAgIGxpYnZweAogICAgIGxpYndlYnAK KyAgICBsaWJ4ZXZkCisgICAgbGlieGV2ZQogICAgIGxpYnhtbDIKICAgICBsaWJ6aW1nCiAgICAg bGliem1xCkBAIC0zMzg0LDYgKzMzODgsOCBAQCBsaWJ4MjY0cmdiX2VuY29kZXJfc2VsZWN0PSJs aWJ4MjY0X2VuY29kZXIiCiBsaWJ4MjY1X2VuY29kZXJfZGVwcz0ibGlieDI2NSIKIGxpYnhhdnNf ZW5jb2Rlcl9kZXBzPSJsaWJ4YXZzIgogbGlieGF2czJfZW5jb2Rlcl9kZXBzPSJsaWJ4YXZzMiIK K2xpYnhldmRfZGVjb2Rlcl9kZXBzPSJsaWJ4ZXZkIgorbGlieGV2ZV9lbmNvZGVyX2RlcHM9Imxp YnhldmUiCiBsaWJ4dmlkX2VuY29kZXJfZGVwcz0ibGlieHZpZCIKIGxpYnp2YmlfdGVsZXRleHRf ZGVjb2Rlcl9kZXBzPSJsaWJ6dmJpIgogdmFwb3Vyc3ludGhfZGVtdXhlcl9kZXBzPSJ2YXBvdXJz eW50aCIKQEAgLTY2NjQsNiArNjY3MCw4IEBAIGVuYWJsZWQgbGlieDI2NSAgICAgICAgICAgJiYg cmVxdWlyZV9wa2dfY29uZmlnIGxpYngyNjUgeDI2NSB4MjY1LmggeDI2NV9hcGlfZ2V0CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVfY3BwX2NvbmRpdGlvbiBsaWJ4MjY1IHgy NjUuaCAiWDI2NV9CVUlMRCA+PSA3MCIKIGVuYWJsZWQgbGlieGF2cyAgICAgICAgICAgJiYgcmVx dWlyZSBsaWJ4YXZzICJzdGRpbnQuaCB4YXZzLmgiIHhhdnNfZW5jb2Rlcl9lbmNvZGUgIi1seGF2 cyAkcHRocmVhZHNfZXh0cmFsaWJzICRsaWJtX2V4dHJhbGlicyIKIGVuYWJsZWQgbGlieGF2czIg ICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYnhhdnMyICJ4YXZzMiA+PSAxLjMuMCIg InN0ZGludC5oIHhhdnMyLmgiIHhhdnMyX2FwaV9nZXQKK2VuYWJsZWQgbGlieGV2ZCAgICAgICAg ICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYnhldmQgInhldmQgPj0gMS4wLjAiICJ4ZXZkLmgi IHhldmRfZGVjb2RlCitlbmFibGVkIGxpYnhldmUgICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2Nv bmZpZyBsaWJ4ZXZlICJ4ZXZlID49IDEuMC4wIiAieGV2ZS5oIiB4ZXZlX2VuY29kZQogZW5hYmxl ZCBsaWJ4dmlkICAgICAgICAgICAmJiByZXF1aXJlIGxpYnh2aWQgeHZpZC5oIHh2aWRfZ2xvYmFs IC1seHZpZGNvcmUKIGVuYWJsZWQgbGliemltZyAgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29u ZmlnIGxpYnppbWcgInppbWcgPj0gMi43LjAiIHppbWcuaCB6aW1nX2dldF9hcGlfdmVyc2lvbgog ZW5hYmxlZCBsaWJ6bXEgICAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGliem1xICJs aWJ6bXEgPj0gNC4yLjEiIHptcS5oIHptcV9jdHhfbmV3CmRpZmYgLS1naXQgYS9kb2MvZGVjb2Rl cnMudGV4aSBiL2RvYy9kZWNvZGVycy50ZXhpCmluZGV4IGRlMjQyOWFiYmEuLjAyMjI5NjdiMmQg MTAwNjQ0Ci0tLSBhL2RvYy9kZWNvZGVycy50ZXhpCisrKyBiL2RvYy9kZWNvZGVycy50ZXhpCkBA IC0xMjYsNiArMTI2LDMwIEBAIFNldCBhbW91bnQgb2YgZnJhbWUgdGhyZWFkcyB0byB1c2UgZHVy aW5nIGRlY29kaW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwIChhdXRvCiAKIEBlbmQgdGFibGUK IAorQHNlY3Rpb24gbGlieGV2ZAorCitlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBEZWNvZGVy IChYRVZEKSBNUEVHLTUgRVZDIGRlY29kZXIgd3JhcHBlci4KKworVGhpcyBkZWNvZGVyIHJlcXVp cmVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgbGlieGV2ZCBoZWFkZXJzIGFuZCBsaWJyYXJ5CitkdXJp bmcgY29uZmlndXJhdGlvbi4gWW91IG5lZWQgdG8gZXhwbGljaXRseSBjb25maWd1cmUgdGhlIGJ1 aWxkIHdpdGgKK0BvcHRpb257LS1lbmFibGUtbGlieGV2ZH0uCisKK1RoZSB4ZXZkIHByb2plY3Qg d2Vic2l0ZSBpcyBhdCBAdXJse2h0dHBzOi8vZ2l0aHViLmNvbS9tcGVnNS94ZXZkfS4KKworQHN1 YnNlY3Rpb24gT3B0aW9ucworCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBi eSB0aGUgbGlieGV2ZCB3cmFwcGVyLgorVGhlIHhldmQtZXF1aXZhbGVudCBvcHRpb25zIG9yIHZh bHVlcyBhcmUgbGlzdGVkIGluIHBhcmVudGhlc2VzIGZvciBlYXN5IG1pZ3JhdGlvbi4KKworVG8g Z2V0IGEgbW9yZSBhY2N1cmF0ZSBhbmQgZXh0ZW5zaXZlIGRvY3VtZW50YXRpb24gb2YgdGhlIGxp YnhldmQgb3B0aW9ucywKK2ludm9rZSB0aGUgY29tbWFuZCAgQGNvZGV7eGV2ZF9hcHAgLS1oZWxw fSBvciBjb25zdWx0IHRoZSBsaWJ4ZXZkIGRvY3VtZW50YXRpb24uCisKK0B0YWJsZSBAb3B0aW9u CitAaXRlbSB0aHJlYWRzIChAZW1waHt0aHJlYWRzfSkKK0ZvcmNlIHRvIHVzZSBhIHNwZWNpZmlj IG51bWJlciBvZiB0aHJlYWRzCisKK0BlbmQgdGFibGUKKwogQHNlY3Rpb24gUVNWIERlY29kZXJz CiAKIFRoZSBmYW1pbHkgb2YgSW50ZWwgUXVpY2tTeW5jIFZpZGVvIGRlY29kZXJzIChWQzEsIE1Q RUctMiwgSC4yNjQsIEhFVkMsCmRpZmYgLS1naXQgYS9kb2MvZW5jb2RlcnMudGV4aSBiL2RvYy9l bmNvZGVycy50ZXhpCmluZGV4IDk2NjAzMmE3MjAuLjU4ZThjZWFlNzkgMTAwNjQ0Ci0tLSBhL2Rv Yy9lbmNvZGVycy50ZXhpCisrKyBiL2RvYy9lbmNvZGVycy50ZXhpCkBAIC0yODQzLDYgKzI4NDMs MTE4IEBAIGZmbXBlZyAtaSBpbnB1dCAtYzp2IGxpYnhhdnMyIC14YXZzMi1wYXJhbXMgUmRvcUxl dmVsPTAgb3V0cHV0LmF2czIKIEBlbmQgZXhhbXBsZQogQGVuZCB0YWJsZQogCitAc2VjdGlvbiBs aWJ4ZXZlCisKK2VYdHJhLWZhc3QgRXNzZW50aWFsIFZpZGVvIEVuY29kZXIgKFhFVkUpIE1QRUct NSBFVkMgZW5jb2RlciB3cmFwcGVyLgorCitUaGlzIGVuY29kZXIgcmVxdWlyZXMgdGhlIHByZXNl bmNlIG9mIHRoZSBsaWJ4ZXZlIGhlYWRlcnMgYW5kIGxpYnJhcnkKK2R1cmluZyBjb25maWd1cmF0 aW9uLiBZb3UgbmVlZCB0byBleHBsaWNpdGx5IGNvbmZpZ3VyZSB0aGUgYnVpbGQgd2l0aAorQG9w dGlvbnstLWVuYWJsZS1saWJ4ZXZlfS4KKworQGZsb2F0IE5PVEUKK01hbnkgbGlieGV2ZSBlbmNv ZGVyIG9wdGlvbnMgYXJlIG1hcHBlZCB0byBGRm1wZWcgZ2xvYmFsIGNvZGVjIG9wdGlvbnMsCit3 aGlsZSB1bmlxdWUgZW5jb2RlciBvcHRpb25zIGFyZSBwcm92aWRlZCB0aHJvdWdoIHByaXZhdGUg b3B0aW9ucy4KK0FkZGl0aW9uYWxseSB0aGUgeGV2ZS1wYXJhbXMgcHJpdmF0ZSBvcHRpb25zIGFs bG93cyBvbmUgdG8gcGFzcyBhIGxpc3QKK29mIGtleT12YWx1ZSB0dXBsZXMgYXMgYWNjZXB0ZWQg YnkgdGhlIGxpYnhldmUgQGNvZGV7cGFyc2VfeGV2ZV9wYXJhbXN9IGZ1bmN0aW9uLgorQGVuZCBm bG9hdAorCitUaGUgeGV2ZSBwcm9qZWN0IHdlYnNpdGUgaXMgYXQgQHVybHtodHRwczovL2dpdGh1 Yi5jb20vbXBlZzUveGV2ZX0uCisKK0BzdWJzZWN0aW9uIE9wdGlvbnMKKworVGhlIGZvbGxvd2lu ZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpYnhldmUgd3JhcHBlci4KK1RoZSB4ZXZl LWVxdWl2YWxlbnQgb3B0aW9ucyBvciB2YWx1ZXMgYXJlIGxpc3RlZCBpbiBwYXJlbnRoZXNlcyBm b3IgZWFzeSBtaWdyYXRpb24uCisKK0BmbG9hdCBOT1RFCitUbyByZWR1Y2UgdGhlIGR1cGxpY2F0 aW9uIG9mIGRvY3VtZW50YXRpb24sIG9ubHkgdGhlIHByaXZhdGUgb3B0aW9ucworYW5kIHNvbWUg b3RoZXJzIHJlcXVpcmluZyBzcGVjaWFsIGF0dGVudGlvbiBhcmUgZG9jdW1lbnRlZCBoZXJlLiBG b3IKK3RoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSB1bmRvY3VtZW50ZWQgZ2VuZXJpYyBvcHRpb25z LCBzZWUKK0ByZWZ7Y29kZWMtb3B0aW9ucywsdGhlIENvZGVjIE9wdGlvbnMgY2hhcHRlcn0uCitA ZW5kIGZsb2F0CisKK0BmbG9hdCBOT1RFCitUbyBnZXQgYSBtb3JlIGFjY3VyYXRlIGFuZCBleHRl bnNpdmUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgbGlieGV2ZSBvcHRpb25zLAoraW52b2tlIHRoZSBj b21tYW5kICBAY29kZXt4ZXZlX2FwcCAtLWhlbHB9IG9yIGNvbnN1bHQgdGhlIGxpYnhldmUgZG9j dW1lbnRhdGlvbi4KK0BlbmQgZmxvYXQKKworQHRhYmxlIEBvcHRpb24KK0BpdGVtIGIgKEBlbXBo e2JpdHJhdGV9KQorU2V0IHRhcmdldCB2aWRlbyBiaXRyYXRlIGluIGJpdHMvcy4KK05vdGUgdGhh dCBGRm1wZWfDouKCrOKEonMgYiBvcHRpb24gaXMgZXhwcmVzc2VkIGluIGJpdHMvcywgd2hpbGUg eGV2ZcOi4oKs4oSicyBiaXRyYXRlIGlzIGluIGtpbG9iaXRzL3MuDQorDQorQGl0ZW0gYmYgKEBl bXBoe2JmcmFtZXN9KQ0KK1NldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgQiBmcmFtZXMgKDEsMyw3 LDE1KS4NCisNCitAaXRlbSBnIChAZW1waHtrZXlpbnR9KQ0KK1NldCB0aGUgR09QIHNpemUgKEkt cGljdHVyZSBwZXJpb2QpLg0KKw0KK0BpdGVtIHByZXNldCAoQGVtcGh7cHJlc2V0fSkNCitTZXQg dGhlIHhldmUgcHJlc2V0Lg0KK1NldCB0aGUgZW5jb2RlciBwcmVzZXQgdmFsdWUgdG8gZGV0ZXJt aW5lIGVuY29kaW5nIHNwZWVkIFtmYXN0LCBtZWRpdW0sIHNsb3csIHBsYWNlYm9dDQorDQorQGl0 ZW0gdHVuZSAoQGVtcGh7dHVuZX0pDQorU2V0IHRoZSBlbmNvZGVyIHR1bmUgcGFyYW1ldGVyIFtw c25yLCB6ZXJvbGF0ZW5jeV0NCisNCitAaXRlbSBwcm9maWxlIChAZW1waHtwcm9maWxlfSkNCitT ZXQgdGhlIGVuY29kZXIgcHJvZmlsZSBbMDogYmFzZWxpZTsgMTogbWFpbl0NCisNCitAaXRlbSBj cmYgKEBlbXBoe2NyZn0pDQorU2V0IHRoZSBxdWFsaXR5IGZvciBjb25zdGFudCBxdWFsaXR5IG1v ZGUuDQorQ29uc3RhbnQgcmF0ZSBmYWN0b3IgPC0xLi41MT4gW2RlZmF1bHQ6IDMyXQ0KKw0KK0Bp dGVtIHFwIChAZW1waHtxcH0pDQorU2V0IGNvbnN0YW50IHF1YW50aXphdGlvbiByYXRlIGNvbnRy b2wgbWV0aG9kIHBhcmFtZXRlci4NCitRdWFudGl6YXRpb24gcGFyYW1ldGVyIHFwIDwwLi41MT4g W2RlZmF1bHQ6IDMyXQ0KKw0KK0BpdGVtIHRocmVhZHMgKEBlbXBoe3RocmVhZHN9KQ0KK0ZvcmNl IHRvIHVzZSBhIHNwZWNpZmljIG51bWJlciBvZiB0aHJlYWRzDQorDQorQGl0ZW0geGV2ZS1wYXJh bXMNCitTZXQgeGV2ZSBvcHRpb25zIHVzaW5nIGEgbGlzdCBvZiBAdmFye2tleX09QHZhcnt2YWx1 ZX0gY291cGxlcyBzZXBhcmF0ZWQNCitieSAiOiIuDQorDQorRm9yIGV4YW1wbGUgdG8gc3BlY2lm eSBsaWJ4ZXZlIGVuY29kaW5nIG9wdGlvbnMgd2l0aCBAb3B0aW9uey14ZXZlLXBhcmFtc306DQor DQorQGV4YW1wbGUNCitmZm1wZWcgLWkgaW5wdXQgLWM6diBsaWJ4ZXZlIC14ZXZlLXBhcmFtcyBw cm9maWxlPW1haW46dHVuZT16ZXJvbGF0ZW5jeTpwcmVzZXQ9ZmFzdDpxPTE3OmJmcmFtZXM9MTU6 Yml0cmF0ZT0xMDBrIG91dHB1dC5tcDQNCitAZW5kIGV4YW1wbGUNCitAZW5kIHRhYmxlDQorDQor QHN1YnN1YnNlY3Rpb24gU3VwcG9ydGVkIGtleSB2YWx1ZXMgZm9yIHhldmUtcGFyYW1zDQorDQor U2V0IHhldmUgb3B0aW9ucyB1c2luZyBhIGxpc3Qgb2YgQHZhcntrZXl9PUB2YXJ7dmFsdWV9IGNv dXBsZXMgc2VwYXJhdGVkDQorDQorQHRhYmxlIEBvcHRpb24NCisNCitAaXRlbSBoYXNoDQorRW1i ZWQgdGhlIHBpY3R1cmUgc2lnbmF0dXJlIChIQVNIKSBmb3IgY29uZm9ybWFuY2UgY2hlY2tpbmcg aW4gZGVjb2RpbmcsICgwOiBPZmYsIDE6IE9uKQ0KKw0KK0BpdGVtIHZidi1idWZzaXplDQorU2V0 IHRoZSBWQlYgYnVmZmVyIHNpemU6IEtiaXRzKG5vbmUsSyxrKSwgTWJpdHMoTSxtKQ0KKw0KK0Bp dGVtIHJjLXR5cGUNCitTZXQgdGhlIHJhdGUgY29udHJvbCB0eXBlLCAoMDogT0ZGLCAxOiBBQlIs IDI6IENSRikNCisNCitAaXRlbSBiZnJhbWVzDQorU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBC IGZyYW1lcyAoMSwzLDcsMTUpDQorDQorQGl0ZW0gcHJvZmlsZQ0KK1NldCB0aGUgUFJPRklMRSAo bWFpbiwgYmFzZWxpbmUpDQorDQorQGl0ZW0gcHJlc2V0DQorU2V0IHRoZSBlbmNvZGVyIFBSRVNF VCAoZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJvKQ0KKw0KK0BpdGVtIHR1bmUNCitTZXQgdGhl IGVuY29kZXIgVFVORSAocHNuciwgemVyb2xhdGVuY3kpDQorDQorQGl0ZW0gYml0cmF0ZQ0KK1Nl dCB0aGUgQml0cmF0ZSBpbiB0ZXJtcyBvZiBraWxvLWJpdHMgcGVyIHNlY29uZDogS2Jwcyhub25l LEssayksIE1icHMoTSxtKQ0KKw0KK0BpdGVtIHFwDQorU2V0IHRoZSBRUCB2YWx1ZSAoMH41MSkN CisNCitAZW5kIHRhYmxlDQorDQogQHNlY3Rpb24gbGlieHZpZA0KIA0KIFh2aWQgTVBFRy00IFBh cnQgMiBlbmNvZGVyIHdyYXBwZXIuDQpkaWZmIC0tZ2l0IGEvZG9jL2dlbmVyYWxfY29udGVudHMu dGV4aSBiL2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkNCmluZGV4IDkzYTkwYTVlNTIuLmU5ZTc4 Njc2ZWQgMTAwNjQ0DQotLS0gYS9kb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhpDQorKysgYi9kb2Mv Z2VuZXJhbF9jb250ZW50cy50ZXhpDQpAQCAtMzQzLDYgKzM0MywyMiBAQCBsaWJ4YXZzMiBpcyB1 bmRlciB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlcg0KIGRldGFpbHMp LCB5b3UgbXVzdCB1cGdyYWRlIEZGbXBlZydzIGxpY2Vuc2UgdG8gR1BMIGluIG9yZGVyIHRvIHVz ZSBpdC4NCiBAZW5kIGZsb2F0DQogDQorQHNlY3Rpb24gZVh0cmEtZmFzdCBFc3NlbnRpYWwgVmlk ZW8gRW5jb2RlciAoWEVWRSkNCisNCitGRm1wZWcgY2FuIG1ha2UgdXNlIG9mIHRoZSBYRVZFIGxp YnJhcnkgZm9yIEVWQyB2aWRlbyBlbmNvZGluZy4NCisNCitHbyB0byBAdXJse2h0dHBzOi8vZ2l0 aHViLmNvbS9tcGVnNS94ZXZlfSBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgZm9yDQoraW5z dGFsbGluZyB0aGUgWEVWRSBsaWJyYXJ5LiBUaGVuIHBhc3MgQGNvZGV7LS1lbmFibGUtbGlieGV2 ZX0gdG8gY29uZmlndXJlIHRvDQorZW5hYmxlIGl0Lg0KKw0KK0BzZWN0aW9uIGVYdHJhLWZhc3Qg RXNzZW50aWFsIFZpZGVvIERlY29kZXIgKFhFVkQpDQorDQorRkZtcGVnIGNhbiBtYWtlIHVzZSBv ZiB0aGUgWEVWRCBsaWJyYXJ5IGZvciBFVkMgdmlkZW8gZGVjb2RpbmcuDQorDQorR28gdG8gQHVy bHtodHRwczovL2dpdGh1Yi5jb20vbXBlZzUveGV2ZH0gYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rp b25zIGZvcg0KK2luc3RhbGxpbmcgdGhlIFhFVkQgbGlicmFyeS4gVGhlbiBwYXNzIEBjb2Rley0t ZW5hYmxlLWxpYnhldmR9IHRvIGNvbmZpZ3VyZSB0bw0KK2VuYWJsZSBpdC4NCisNCiBAc2VjdGlv biBaVkJJDQogDQogWlZCSSBpcyBhIFZCSSBkZWNvZGluZyBsaWJyYXJ5IHdoaWNoIGNhbiBiZSB1 c2VkIGJ5IEZGbXBlZyB0byBkZWNvZGUgRFZCDQpAQCAtNTkxLDYgKzYwNyw3IEBAIGxpYnJhcnk6 DQogQGl0ZW0gcmF3IERUUyAgICAgICAgICAgICAgICAgICBAdGFiIFggQHRhYiBYDQogQGl0ZW0g cmF3IERUUy1IRCAgICAgICAgICAgICAgICBAdGFiICAgQHRhYiBYDQogQGl0ZW0gcmF3IEUtQUMt MyAgICAgICAgICAgICAgICBAdGFiIFggQHRhYiBYDQorQGl0ZW0gcmF3IEVWQyAgICAgICAgICAg ICAgICAgICBAdGFiIFggQHRhYiBYDQogQGl0ZW0gcmF3IEZMQUMgICAgICAgICAgICAgICAgICBA dGFiIFggQHRhYiBYDQogQGl0ZW0gcmF3IEdTTSAgICAgICAgICAgICAgICAgICBAdGFiICAgQHRh YiBYDQogQGl0ZW0gcmF3IEguMjYxICAgICAgICAgICAgICAgICBAdGFiIFggQHRhYiBYDQpAQCAt OTIyLDYgKzkzOSw4IEBAIGZvbGxvd2luZyBpbWFnZSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQ6DQog QGl0ZW0gRWxlY3Ryb25pYyBBcnRzIFRRSSB2aWRlbyAgQHRhYiAgICAgQHRhYiAgWA0KIEBpdGVt IEVzY2FwZSAxMjQgICAgICAgICAgICAgQHRhYiAgICAgQHRhYiAgWA0KIEBpdGVtIEVzY2FwZSAx MzAgICAgICAgICAgICAgQHRhYiAgICAgQHRhYiAgWA0KK0BpdGVtIEVWQyAvIE1QRUctNSBQYXJ0 IDEgICAgQHRhYiAgWCAgQHRhYiAgWA0KKyAgICBAdGFiIGVuY29kaW5nIGFuZCBkZWNvZGluZyBz dXBwb3J0ZWQgdGhyb3VnaCBleHRlcm5hbCBsaWJyYXJpZXMgbGlieGV2ZSBhbmQgbGlieGV2ZA0K IEBpdGVtIEZGbXBlZyB2aWRlbyBjb2RlYyAjMSAgQHRhYiAgWCAgQHRhYiAgWA0KICAgICBAdGFi IGxvc3NsZXNzIGNvZGVjIChmb3VyY2M6IEZGVjEpDQogQGl0ZW0gRmxhc2ggU2NyZWVuIFZpZGVv IHYxICBAdGFiICBYICBAdGFiICBYDQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBi L2xpYmF2Y29kZWMvTWFrZWZpbGUNCmluZGV4IDM4NDI1ZDJmMjIuLjgzMzhkOTc5NmQgMTAwNjQ0 DQotLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlDQorKysgYi9saWJhdmNvZGVjL01ha2VmaWxlDQpA QCAtMTEwMSw2ICsxMTAxLDggQEAgT0JKUy0kKENPTkZJR19MSUJYMjY0X0VOQ09ERVIpICAgICAg ICAgICAgKz0gbGlieDI2NC5vDQogT0JKUy0kKENPTkZJR19MSUJYMjY1X0VOQ09ERVIpICAgICAg ICAgICAgKz0gbGlieDI2NS5vDQogT0JKUy0kKENPTkZJR19MSUJYQVZTX0VOQ09ERVIpICAgICAg ICAgICAgKz0gbGlieGF2cy5vDQogT0JKUy0kKENPTkZJR19MSUJYQVZTMl9FTkNPREVSKSAgICAg ICAgICAgKz0gbGlieGF2czIubw0KK09CSlMtJChDT05GSUdfTElCWEVWRF9ERUNPREVSKSAgICAg ICAgICAgICs9IGxpYnhldmQubw0KK09CSlMtJChDT05GSUdfTElCWEVWRV9FTkNPREVSKSAgICAg ICAgICAgICs9IGxpYnhldmUubw0KIE9CSlMtJChDT05GSUdfTElCWFZJRF9FTkNPREVSKSAgICAg ICAgICAgICs9IGxpYnh2aWQubw0KIE9CSlMtJChDT05GSUdfTElCWlZCSV9URUxFVEVYVF9ERUNP REVSKSAgICs9IGxpYnp2YmktdGVsZXRleHRkZWMubyBhc3Mubw0KIA0KQEAgLTExMjgsNiArMTEz MCw3IEBAIE9CSlMtJChDT05GSUdfRFZBVURJT19QQVJTRVIpICAgICAgICAgICs9IGR2YXVkaW9f cGFyc2VyLm8NCiBPQkpTLSQoQ09ORklHX0RWQlNVQl9QQVJTRVIpICAgICAgICAgICArPSBkdmJz dWJfcGFyc2VyLm8NCiBPQkpTLSQoQ09ORklHX0RWRF9OQVZfUEFSU0VSKSAgICAgICAgICArPSBk dmRfbmF2X3BhcnNlci5vDQogT0JKUy0kKENPTkZJR19EVkRTVUJfUEFSU0VSKSAgICAgICAgICAg Kz0gZHZkc3ViX3BhcnNlci5vDQorT0JKUy0kKENPTkZJR19FVkNfUEFSU0VSKSAgICAgICAgICAg ICAgKz0gZXZjX3BhcnNlci5vDQogT0JKUy0kKENPTkZJR19GTEFDX1BBUlNFUikgICAgICAgICAg ICAgKz0gZmxhY19wYXJzZXIubyBmbGFjZGF0YS5vIGZsYWMubw0KIE9CSlMtJChDT05GSUdfRzcy M18xX1BBUlNFUikgICAgICAgICAgICs9IGc3MjNfMV9wYXJzZXIubw0KIE9CSlMtJChDT05GSUdf RzcyOV9QQVJTRVIpICAgICAgICAgICAgICs9IGc3MjlfcGFyc2VyLm8NCmRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL2FsbGNvZGVjcy5jIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYw0KaW5kZXggYzQ3 MTMzYWExOC4uMzQzNzFhZjNmNCAxMDA2NDQNCi0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMN CisrKyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMNCkBAIC03OTAsOCArNzkwLDExIEBAIGV4dGVy biBjb25zdCBGRkNvZGVjIGZmX2xpYngyNjJfZW5jb2RlcjsNCiAjZW5kaWYNCiBleHRlcm4gTElC WDI2NF9DT05TVCBGRkNvZGVjIGZmX2xpYngyNjRfZW5jb2RlcjsNCiAjZW5kaWYNCisNCiBleHRl cm4gY29uc3QgRkZDb2RlYyBmZl9saWJ4MjY0cmdiX2VuY29kZXI7DQogZXh0ZXJuIEZGQ29kZWMg ZmZfbGlieDI2NV9lbmNvZGVyOw0KK2V4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYnhldmVfZW5j b2RlcjsNCitleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJ4ZXZkX2RlY29kZXI7DQogZXh0ZXJu IGNvbnN0IEZGQ29kZWMgZmZfbGlieGF2c19lbmNvZGVyOw0KIGV4dGVybiBjb25zdCBGRkNvZGVj IGZmX2xpYnhhdnMyX2VuY29kZXI7DQogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlieHZpZF9l bmNvZGVyOw0KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYXZjb2RlYy5oIGIvbGliYXZjb2RlYy9h dmNvZGVjLmgNCmluZGV4IDRkYWUyM2QwNmUuLmI4Mzg3MGMxNzQgMTAwNjQ0DQotLS0gYS9saWJh dmNvZGVjL2F2Y29kZWMuaA0KKysrIGIvbGliYXZjb2RlYy9hdmNvZGVjLmgNCkBAIC0xNjY2LDYg KzE2NjYsOSBAQCB0eXBlZGVmIHN0cnVjdCBBVkNvZGVjQ29udGV4dCB7DQogI2RlZmluZSBGRl9Q Uk9GSUxFX0tMVkFfU1lOQyAwDQogI2RlZmluZSBGRl9QUk9GSUxFX0tMVkFfQVNZTkMgMQ0KIA0K KyNkZWZpbmUgRkZfUFJPRklMRV9FVkNfQkFTRUxJTkUgICAgICAgICAgICAgMA0KKyNkZWZpbmUg RkZfUFJPRklMRV9FVkNfTUFJTiAgICAgICAgICAgICAgICAgMQ0KKw0KICAgICAvKioNCiAgICAg ICogbGV2ZWwNCiAgICAgICogLSBlbmNvZGluZzogU2V0IGJ5IHVzZXIuDQpkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy9ldmNfcGFyc2VyLmMgYi9saWJhdmNvZGVjL2V2Y19wYXJzZXIuYw0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjAzZmFmMTJkNjINCi0tLSAvZGV2L251 bGwNCisrKyBiL2xpYmF2Y29kZWMvZXZjX3BhcnNlci5jDQpAQCAtMCwwICsxLDUyNyBAQA0KKy8q DQorICogRVZDIEFWQyBmb3JtYXQgcGFyc2VyDQorICoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg RGF3aWQgS296aW5za2kgPGQua296aW5za2lAc2Ftc3VuZy5jb20+DQorICoNCisgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuDQorICoNCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KKyAqIHZlcnNp b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLg0KKyAqDQorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQor ICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQ0KKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0ENCisgKi8NCisNCisjaW5jbHVkZSA8c3Rk aW50Lmg+DQorDQorI2luY2x1ZGUgImxpYmF2dXRpbC9jb21tb24uaCINCisNCisjaW5jbHVkZSAi cGFyc2VyLmgiDQorI2luY2x1ZGUgImdvbG9tYi5oIg0KKw0KKy8vIFRoZSBsZW5ndGggZmllbGQg dGhhdCBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZm9sbG93aW5nIE5BTCB1 bml0IGlzIGNvbmZpZ3VyZWQgdG8gYmUgb2YgNCBieXRlcw0KKyNkZWZpbmUgRVZDX05BTF9VTklU X0xFTkdUSF9CWVRFICAgICAgICAoNCkgIC8qIGJ5dGUgKi8NCisNCisjZGVmaW5lIEVWQ19OQUxf SEVBREVSX1NJWkUgICAgICAgICAgICAgKDIpICAvKiBieXRlICovDQorI2RlZmluZSBNQVhfU1BT X0NOVCAgICAgICAgICAgICAgICAgICAgICgxNikgLyogZGVmaW5lZCB2YWx1ZSBpbiBFVkMgc3Rh bmRhcmQgKi8NCisNCisvLyBOQUxVIHR5cGVzDQorLy8gQHNlZSBJU09fSUVDXzIzMDk0LTFfMjAy MCA3LjQuMi4yIE5BTCB1bml0IGhlYWRlciBzZW1hbnRpY3MNCisvLw0KKyNkZWZpbmUgRVZDX05V VF9OT05JRFIgICAgICAgICAgICAgICAgICAoMCkgIC8qIENvZGVkIHNsaWNlIG9mIGEgbm9uLUlE UiBwaWN0dXJlICovDQorI2RlZmluZSBFVkNfTlVUX0lEUiAgICAgICAgICAgICAgICAgICAgICgx KSAgLyogQ29kZWQgc2xpY2Ugb2YgYW4gSURSIHBpY3R1cmUgKi8NCisjZGVmaW5lIEVWQ19OVVRf U1BTICAgICAgICAgICAgICAgICAgICAgKDI0KSAvKiBTZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0ICov DQorI2RlZmluZSBFVkNfTlVUX1BQUyAgICAgICAgICAgICAgICAgICAgICgyNSkgLyogUGljdHVy ZSBwYXJlbWV0ZXIgc2V0ICovDQorI2RlZmluZSBFVkNfTlVUX0FQUyAgICAgICAgICAgICAgICAg ICAgICgyNikgLyogQWRhcHRhdGlvbiBwYXJhbWV0ZXIgc2V0ICovDQorI2RlZmluZSBFVkNfTlVU X0ZEICAgICAgICAgICAgICAgICAgICAgICgyNykgLyogRmlsbGVyIGRhdGEgKi8NCisjZGVmaW5l IEVWQ19OVVRfU0VJICAgICAgICAgICAgICAgICAgICAgKDI4KSAvKiBTdXBwbGVtZW50YWwgZW5o YW5jZW1lbnQgaW5mb3JtYXRpb24gKi8NCisNCisvLyBUaGUgc3R1cmN0dXJlIHJlZmxlY3RzIFNQ UyBSQlNQKHJhdyBieXRlIHNlcXVlbmNlIHBheWxvYWQpIGxheW91dA0KKy8vIEBzZWUgSVNPX0lF Q18yMzA5NC0xIHNlY3Rpb24gNy4zLjIuMQ0KKy8vDQorLy8gVGhlIGZvbGxvd2luZyBkZXNjcmlw dG9ycyBzcGVjaWZ5IHRoZSBwYXJzaW5nIHByb2Nlc3Mgb2YgZWFjaCBlbGVtZW50DQorLy8gdShu KSAtIHVuc2lnbmVkIGludGVnZXIgdXNpbmcgbiBiaXRzDQorLy8gdWUodikgLSB1bnNpZ25lZCBp bnRlZ2VyIDAtdGggb3JkZXIgRXhwX0dvbG9tYi1jb2RlZCBzeW50YXggZWxlbWVudCB3aXRoIHRo ZSBsZWZ0IGJpdCBmaXJzdA0KK3R5cGVkZWYgc3RydWN0IEVWQ1BhcnNlclNQUyB7DQorICAgIGlu dCBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQ7ICAgLy8gdWUodikNCisgICAgaW50IHByb2ZpbGVf aWRjOyAgICAgICAgICAgICAgICAvLyB1KDgpDQorICAgIGludCBsZXZlbF9pZGM7ICAgICAgICAg ICAgICAgICAgLy8gdSg4KQ0KKyAgICBpbnQgdG9vbHNldF9pZGNfaDsgICAgICAgICAgICAgIC8v IHUoMzIpDQorICAgIGludCB0b29sc2V0X2lkY19sOyAgICAgICAgICAgICAgLy8gdSgzMikNCisg ICAgaW50IGNocm9tYV9mb3JtYXRfaWRjOyAgICAgICAgICAvLyB1ZSh2KQ0KKyAgICBpbnQgcGlj X3dpZHRoX2luX2x1bWFfc2FtcGxlczsgIC8vIHVlKHYpDQorICAgIGludCBwaWNfaGVpZ2h0X2lu X2x1bWFfc2FtcGxlczsgLy8gdWUodikNCisgICAgaW50IGJpdF9kZXB0aF9sdW1hX21pbnVzODsg ICAgICAvLyB1ZSh2KQ0KKyAgICBpbnQgYml0X2RlcHRoX2Nocm9tYV9taW51czg7ICAgIC8vIHVl KHYpDQorDQorICAgIGludCBzcHNfYnR0X2ZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8gdSgxKQ0KKyAgICBpbnQgbG9nMl9jdHVfc2l6ZV9taW51czU7ICAgICAgICAgICAgICAgICAg IC8vIHVlKHYpDQorICAgIGludCBsb2cyX21pbl9jYl9zaXplX21pbnVzMjsgICAgICAgICAgICAg ICAgLy8gdWUodikNCisgICAgaW50IGxvZzJfZGlmZl9jdHVfbWF4XzE0X2NiX3NpemU7ICAgICAg ICAgICAvLyB1ZSh2KQ0KKyAgICBpbnQgbG9nMl9kaWZmX2N0dV9tYXhfdHRfY2Jfc2l6ZTsgICAg ICAgICAgIC8vIHVlKHYpDQorICAgIGludCBsb2cyX2RpZmZfbWluX2NiX21pbl90dF9jYl9zaXpl X21pbnVzMjsgLy8gdWUodikNCisNCisgICAgaW50IHNwc19zdWNvX2ZsYWc7ICAgICAgICAgICAg ICAgICAgICAgICAvLyB1KDEpDQorICAgIGludCBsb2cyX2RpZmZfY3R1X3NpemVfbWF4X3N1Y29f Y2Jfc2l6ZTsgLy8gdWUodikNCisgICAgaW50IGxvZzJfZGlmZl9tYXhfc3Vjb19taW5fc3Vjb19j Yl9zaXplOyAvLyB1ZSh2KQ0KKw0KKyAgICBpbnQgc3BzX2FkbXZwX2ZsYWc7ICAgICAvLyB1KDEp DQorICAgIGludCBzcHNfYWZmaW5lX2ZsYWc7ICAgIC8vIHUoMSkNCisgICAgaW50IHNwc19hbXZy X2ZsYWc7ICAgICAgLy8gdSgxKQ0KKyAgICBpbnQgc3BzX2RtdnJfZmxhZzsgICAgICAvLyB1KDEp DQorICAgIGludCBzcHNfbW12ZF9mbGFnOyAgICAgIC8vIHUoMSkNCisgICAgaW50IHNwc19obXZw X2ZsYWc7ICAgICAgLy8gdSgxKQ0KKw0KKyAgICBpbnQgc3BzX2VpcGRfZmxhZzsgICAgICAgICAg ICAgICAgIC8vIHUoMSkNCisgICAgaW50IHNwc19pYmNfZmxhZzsgICAgICAgICAgICAgICAgICAv LyB1KDEpDQorICAgIGludCBsb2cyX21heF9pYmNfY2FuZF9zaXplX21pbnVzMjsgLy8gdWUodikN CisNCisgICAgaW50IHNwc19jbV9pbml0X2ZsYWc7IC8vIHUoMSkNCisgICAgaW50IHNwc19hZGNj X2ZsYWc7ICAgIC8vIHUoMSkNCisNCisgICAgaW50IHNwc19pcXRfZmxhZzsgLy8gdSgxKQ0KKyAg ICBpbnQgc3BzX2F0c19mbGFnOyAvLyB1KDEpDQorDQorICAgIGludCBzcHNfYWRkYl9mbGFnOyAg IC8vIHUoMSkNCisgICAgaW50IHNwc19hbGZfZmxhZzsgICAgLy8gdSgxKQ0KKyAgICBpbnQgc3Bz X2h0ZGZfZmxhZzsgICAvLyB1KDEpDQorICAgIGludCBzcHNfcnBsX2ZsYWc7ICAgIC8vIHUoMSkN CisgICAgaW50IHNwc19wb2NzX2ZsYWc7ICAgLy8gdSgxKQ0KKyAgICBpbnQgc3BzX2RxdWFudF9m bGFnOyAvLyB1KDEpDQorICAgIGludCBzcHNfZHJhX2ZsYWc7ICAgIC8vIHUoMSkNCisNCisgICAg aW50IGxvZzJfbWF4X3BpY19vcmRlcl9jbnRfbHNiX21pbnVzNDsgLy8gdWUodikNCisgICAgaW50 IGxvZzJfc3ViX2dvcF9sZW5ndGg7ICAgICAgICAgICAgICAgLy8gdWUodikNCisgICAgaW50IGxv ZzJfcmVmX3BpY19nYXBfbGVuZ3RoOyAgICAgICAgICAgLy8gdWUodikNCisNCisgICAgaW50IG1h eF9udW1fdGlkMF9yZWZfcGljczsgLy8gdWUodikNCisNCisgICAgaW50IHNwc19tYXhfZGVjX3Bp Y19idWZmZXJpbmdfbWludXMxOyAvLyB1ZSh2KQ0KKyAgICBpbnQgbG9uZ190ZXJtX3JlZl9waWNf ZmxhZzsgICAgICAgICAgIC8vIHUoMSkNCisgICAgaW50IHJwbDFfc2FtZV9hc19ycGwwX2ZsYWc7 ICAgICAgICAgICAvLyB1KDEpDQorICAgIGludCBudW1fcmVmX3BpY19saXN0X2luX3Nwc1syXTsg ICAgICAgLy8gdWUodikNCisNCisgICAgaW50IHBpY3R1cmVfY3JvcHBpbmdfZmxhZzsgICAgICAv LyB1KDEpDQorICAgIGludCBwaWN0dXJlX2Nyb3BfbGVmdF9vZmZzZXQ7ICAgLy8gdWUodikNCisg ICAgaW50IHBpY3R1cmVfY3JvcF9yaWdodF9vZmZzZXQ7ICAvLyB1ZSh2KQ0KKyAgICBpbnQgcGlj dHVyZV9jcm9wX3RvcF9vZmZzZXQ7ICAgIC8vIHVlKHYpDQorICAgIGludCBwaWN0dXJlX2Nyb3Bf Ym90dG9tX29mZnNldDsgLy8gdWUodikNCisNCit9IEVWQ1BhcnNlclNQUzsNCisNCit0eXBlZGVm IHN0cnVjdCBFVkNQYXJzZXJDb250ZXh0IHsNCisgICAgUGFyc2VDb250ZXh0IHBjOw0KKyAgICBF VkNQYXJzZXJTUFMgc3BzW01BWF9TUFNfQ05UXTsNCisgICAgaW50IGlzX2F2YzsNCisgICAgaW50 IG5hbF9sZW5ndGhfc2l6ZTsNCisgICAgaW50IHRvX3JlYWQ7DQorICAgIGludCBpbmNvbXBsZXRl X25hbHVfcHJlZml4X3JlYWQ7IC8vIFRoZSBmbGFnIGlzIHNldCB0byAxIHdoZW4gYW4gaW5jb21w bGV0ZSBOQUwgdW5pdCBwcmVmaXggaGFzIGJlZW4gcmVhZA0KKw0KKyAgICBpbnQgZ290X3NwczsN CisgICAgaW50IGdvdF9wcHM7DQorICAgIGludCBnb3Rfc2VpOw0KKyAgICBpbnQgZ290X3NsaWNl Ow0KK30gRVZDUGFyc2VyQ29udGV4dDsNCisNCitzdGF0aWMgaW50IGdldF9uYWx1X3R5cGUoY29u c3QgdWludDhfdCAqYml0cywgaW50IGJpdHNfc2l6ZSwgQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQ0K K3sNCisgICAgaW50IHVuaXRfdHlwZV9wbHVzMSA9IDA7DQorDQorICAgIGlmKGJpdHNfc2l6ZSA+ PSBFVkNfTkFMX0hFQURFUl9TSVpFKSB7DQorICAgICAgICB1bnNpZ25lZCBjaGFyICpwID0gKHVu c2lnbmVkIGNoYXIgKiliaXRzOw0KKyAgICAgICAgLy8gZm9yYmlkZGVuX3plcm9fYml0DQorICAg ICAgICBpZiAoKHBbMF0gJiAweDgwKSAhPSAwKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJDYW5ub3QgZ2V0IGJpdHN0cmVhbSBpbmZvcm1hdGlvbi4gTWFsZm9y bWVkIGJpdHN0cmVhbS5cbiIpOw0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0N CisNCisgICAgICAgIC8vIG5hbF91bml0X3R5cGUNCisgICAgICAgIHVuaXRfdHlwZV9wbHVzMSA9 IChwWzBdID4+IDEpICYgMHgzRjsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gdW5pdF90eXBlX3Bs dXMxIC0gMTsNCit9DQorDQorc3RhdGljIHVpbnQzMl90IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKGNv bnN0IHVpbnQ4X3QgKmJpdHMsIGludCBiaXRzX3NpemUsIEFWQ29kZWNDb250ZXh0ICphdmN0eCkN Cit7DQorICAgIHVpbnQzMl90IG5hbHVfbGVuID0gMDsNCisNCisgICAgaWYoYml0c19zaXplID49 IEVWQ19OQUxfVU5JVF9MRU5HVEhfQllURSkgew0KKw0KKyAgICAgICAgaW50IHQgPSAwOw0KKyAg ICAgICAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopYml0czsNCisNCisgICAg ICAgIGZvcihpbnQgaT0wOyBpPEVWQ19OQUxfVU5JVF9MRU5HVEhfQllURTsgaSsrKSB7DQorICAg ICAgICAgICAgdCA9ICh0IDw8IDgpIHwgcFtpXTsNCisgICAgICAgIH0NCisNCisgICAgICAgIG5h bHVfbGVuID0gdDsNCisgICAgICAgIGlmKG5hbHVfbGVuID09IDApIHsNCisgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgYml0c3RyZWFtIHNpemUhXG4iKTsN CisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1 cm4gbmFsdV9sZW47DQorfQ0KKw0KKy8vIEBzZWUgSVNPX0lFQ18yMzA5NC0xICg3LjMuMi4xIFNQ UyBSQlNQIHN5bnRheCkNCitzdGF0aWMgRVZDUGFyc2VyU1BTICpwYXJzZV9zcHMoY29uc3QgdWlu dDhfdCAqYnMsIGludCBic19zaXplLCBFVkNQYXJzZXJDb250ZXh0ICpldikNCit7DQorICAgIEdl dEJpdENvbnRleHQgZ2I7DQorICAgIEVWQ1BhcnNlclNQUyAqc3BzOw0KKyAgICBpbnQgc3BzX3Nl cV9wYXJhbWV0ZXJfc2V0X2lkOw0KKw0KKyAgICBpZihpbml0X2dldF9iaXRzOCgmZ2IsIGJzLCBi c19zaXplKSA8IDApDQorICAgICAgICByZXR1cm4gTlVMTDsNCisNCisgICAgc3BzX3NlcV9wYXJh bWV0ZXJfc2V0X2lkID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKw0KKyAgICBpZihzcHNfc2VxX3Bh cmFtZXRlcl9zZXRfaWQgPj0gTUFYX1NQU19DTlQpDQorICAgICAgICByZXR1cm4gTlVMTDsNCisN CisgICAgc3BzID0gJmV2LT5zcHNbc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXTsNCisgICAgc3Bz LT5zcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgPSBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQ7DQor DQorICAgIC8vIHRoZSBCYXNlbGluZSBwcm9maWxlIGlzIGluZGljYXRlZCBieSBwcm9maWxlX2lk YyBlcWFsIHRvIDANCisgICAgLy8gdGhlIE1haW4gcHJvZmlsZSBpcyBpbmRpY2F0ZWQgYnkgcHJv ZmlsZV9pZGMgZXFhbCB0byAxDQorICAgIHNwcy0+cHJvZmlsZV9pZGMgPSBnZXRfYml0cygmZ2Is IDgpOw0KKw0KKyAgICBzcHMtPmxldmVsX2lkYyA9IGdldF9iaXRzKCZnYiwgOCk7DQorDQorICAg IHNraXBfYml0c19sb25nKCZnYiwgMzIpOyAvKiBza2lwIHRvb2xzZXRfaWRjX2ggKi8NCisgICAg c2tpcF9iaXRzX2xvbmcoJmdiLCAzMik7IC8qIHNraXAgdG9vbHNldF9pZGNfbCAqLw0KKw0KKyAg ICAvLyAwIC0gbW9ub2Nocm9tZQ0KKyAgICAvLyAxIC0gNDoyOjANCisgICAgLy8gMiAtIDQ6Mjoy DQorICAgIC8vIDMgLSA0OjQ6NA0KKyAgICBzcHMtPmNocm9tYV9mb3JtYXRfaWRjID0gZ2V0X3Vl X2dvbG9tYigmZ2IpOw0KKw0KKyAgICBzcHMtPnBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXMgPSBn ZXRfdWVfZ29sb21iKCZnYik7DQorICAgIHNwcy0+cGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXMg PSBnZXRfdWVfZ29sb21iKCZnYik7DQorDQorICAgIHNwcy0+Yml0X2RlcHRoX2x1bWFfbWludXM4 ID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICBzcHMtPmJpdF9kZXB0aF9jaHJvbWFfbWludXM4 ID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKw0KKyAgICBzcHMtPnNwc19idHRfZmxhZyA9IGdldF9i aXRzKCZnYiwgMSk7DQorICAgIGlmKHNwcy0+c3BzX2J0dF9mbGFnKSB7DQorICAgICAgICBzcHMt PmxvZzJfY3R1X3NpemVfbWludXM1ID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICAgICAgc3Bz LT5sb2cyX21pbl9jYl9zaXplX21pbnVzMiA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisgICAgICAg IHNwcy0+bG9nMl9kaWZmX2N0dV9tYXhfMTRfY2Jfc2l6ZSA9IGdldF91ZV9nb2xvbWIoJmdiKTsN CisgICAgICAgIHNwcy0+bG9nMl9kaWZmX2N0dV9tYXhfdHRfY2Jfc2l6ZSA9IGdldF91ZV9nb2xv bWIoJmdiKTsNCisgICAgICAgIHNwcy0+bG9nMl9kaWZmX21pbl9jYl9taW5fdHRfY2Jfc2l6ZV9t aW51czIgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorICAgIH0NCisNCisgICAgc3BzLT5zcHNfc3Vj b19mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgaWYoc3BzLT5zcHNfc3Vjb19mbGFnKSB7 DQorICAgICAgICBzcHMtPmxvZzJfZGlmZl9jdHVfc2l6ZV9tYXhfc3Vjb19jYl9zaXplID0gZ2V0 X3VlX2dvbG9tYigmZ2IpOw0KKyAgICAgICAgc3BzLT5sb2cyX2RpZmZfbWF4X3N1Y29fbWluX3N1 Y29fY2Jfc2l6ZSA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisgICAgfQ0KKw0KKyAgICBzcHMtPnNw c19hZG12cF9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgaWYoc3BzLT5zcHNfYWRtdnBf ZmxhZykgew0KKyAgICAgICAgc3BzLT5zcHNfYWZmaW5lX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEp Ow0KKyAgICAgICAgc3BzLT5zcHNfYW12cl9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAg ICAgIHNwcy0+c3BzX2RtdnJfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgICAgICBzcHMt PnNwc19tbXZkX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICAgICAgc3BzLT5zcHNfaG12 cF9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgfQ0KKw0KKyAgICBzcHMtPnNwc19laXBk X2ZsYWcgPSAgZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgaWYoc3BzLT5zcHNfZWlwZF9mbGFnKSB7 DQorICAgICAgICBzcHMtPnNwc19pYmNfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgICAg ICBpZihzcHMtPnNwc19pYmNfZmxhZykNCisgICAgICAgICAgICBzcHMtPmxvZzJfbWF4X2liY19j YW5kX3NpemVfbWludXMyID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICB9DQorDQorICAgIHNw cy0+c3BzX2NtX2luaXRfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgIGlmKHNwcy0+c3Bz X2NtX2luaXRfZmxhZykNCisgICAgICAgIHNwcy0+c3BzX2FkY2NfZmxhZyA9IGdldF9iaXRzKCZn YiwgMSk7DQorDQorICAgIHNwcy0+c3BzX2lxdF9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisg ICAgaWYoc3BzLT5zcHNfaXF0X2ZsYWcpDQorICAgICAgICBzcHMtPnNwc19hdHNfZmxhZyA9IGdl dF9iaXRzKCZnYiwgMSk7DQorDQorICAgIHNwcy0+c3BzX2FkZGJfZmxhZyA9IGdldF9iaXRzKCZn YiwgMSk7DQorICAgIHNwcy0+c3BzX2FsZl9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAg c3BzLT5zcHNfaHRkZl9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgc3BzLT5zcHNfcnBs X2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICBzcHMtPnNwc19wb2NzX2ZsYWcgPSBnZXRf Yml0cygmZ2IsIDEpOw0KKyAgICBzcHMtPnNwc19kcXVhbnRfZmxhZyA9IGdldF9iaXRzKCZnYiwg MSk7DQorICAgIHNwcy0+c3BzX2RyYV9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisNCisgICAg aWYoc3BzLT5zcHNfcG9jc19mbGFnKQ0KKyAgICAgICAgc3BzLT5sb2cyX21heF9waWNfb3JkZXJf Y250X2xzYl9taW51czQgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorDQorICAgIGlmKCFzcHMtPnNw c19wb2NzX2ZsYWcgfHwgIXNwcy0+c3BzX3JwbF9mbGFnKSB7DQorICAgICAgICBzcHMtPmxvZzJf c3ViX2dvcF9sZW5ndGggPSBnZXRfdWVfZ29sb21iKCZnYik7DQorICAgICAgICBpZihzcHMtPmxv ZzJfc3ViX2dvcF9sZW5ndGggPT0gMCkNCisgICAgICAgICAgICBzcHMtPmxvZzJfcmVmX3BpY19n YXBfbGVuZ3RoID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBz cHM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcGFyc2VfbmFsX3VuaXRzKEFWQ29kZWNQYXJzZXJDb250 ZXh0ICpzLCBjb25zdCB1aW50OF90ICpicywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgYnNfc2l6ZSwgQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQ0KK3sNCisgICAgRVZDUGFyc2VyQ29u dGV4dCAqZXYgPSBzLT5wcml2X2RhdGE7DQorICAgIGludCBuYWx1X3R5cGUsIG5hbHVfc2l6ZTsN CisgICAgdW5zaWduZWQgY2hhciAqYml0cyA9ICh1bnNpZ25lZCBjaGFyICopYnM7DQorICAgIGlu dCBiaXRzX3NpemUgPSBic19zaXplOw0KKw0KKyAgICBhdmN0eC0+Y29kZWNfaWQgPSBBVl9DT0RF Q19JRF9FVkM7DQorDQorICAgIG5hbHVfc2l6ZSA9IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKGJpdHMs IGJpdHNfc2l6ZSwgYXZjdHgpOw0KKyAgICBpZihuYWx1X3NpemUgPT0gMCkgew0KKyAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIE5BTCB1bml0IHNpemU6ICglZClc biIsIG5hbHVfc2l6ZSk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgYml0 cyArPSBFVkNfTkFMX1VOSVRfTEVOR1RIX0JZVEU7DQorICAgIGJpdHNfc2l6ZSAtPSBFVkNfTkFM X1VOSVRfTEVOR1RIX0JZVEU7DQorDQorICAgIG5hbHVfdHlwZSA9IGdldF9uYWx1X3R5cGUoYml0 cywgYml0c19zaXplLCBhdmN0eCk7DQorDQorICAgIGJpdHMgKz0gRVZDX05BTF9IRUFERVJfU0la RTsNCisgICAgYml0c19zaXplIC09IEVWQ19OQUxfSEVBREVSX1NJWkU7DQorDQorICAgIGlmIChu YWx1X3R5cGUgPT0gRVZDX05VVF9TUFMpIHsgLy8gTkFMIFVuaXQgdHlwZTogU1BTIChTZXF1ZW5j ZSBQYXJhbWV0ZXIgU2V0KQ0KKyAgICAgICAgRVZDUGFyc2VyU1BTICpzcHM7DQorDQorICAgICAg ICBzcHMgPSBwYXJzZV9zcHMoYml0cywgYml0c19zaXplLCBldik7DQorDQorICAgICAgICBhdmN0 eC0+Y29kZWRfd2lkdGggICAgICAgICA9IHNwcy0+cGljX3dpZHRoX2luX2x1bWFfc2FtcGxlczsN CisgICAgICAgIGF2Y3R4LT5jb2RlZF9oZWlnaHQgICAgICAgID0gc3BzLT5waWNfaGVpZ2h0X2lu X2x1bWFfc2FtcGxlczsNCisgICAgICAgIGF2Y3R4LT53aWR0aCAgICAgICAgICAgICAgID0gc3Bz LT5waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzOw0KKyAgICAgICAgYXZjdHgtPmhlaWdodCAgICAg ICAgICAgICAgPSBzcHMtPnBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzOw0KKw0KKyAgICAgICAg aWYoc3BzLT5wcm9maWxlX2lkYyA9PSAwKSBhdmN0eC0+cHJvZmlsZSA9IEZGX1BST0ZJTEVfRVZD X0JBU0VMSU5FOw0KKyAgICAgICAgZWxzZSBpZiAoc3BzLT5wcm9maWxlX2lkYyA9PSAxKSBhdmN0 eC0+cHJvZmlsZSA9IEZGX1BST0ZJTEVfRVZDX01BSU47DQorICAgICAgICBlbHNlIHsNCisgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk5vdCBzdXBwb3J0ZWQgcHJvZmls ZSAoJWQpXG4iLCBzcHMtPnByb2ZpbGVfaWRjKTsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQor ICAgICAgICB9DQorDQorICAgICAgICAvLyBDdXJyZW50bHkgWEVWRCBkZWNvZGVyIHN1cHBvcnRz IG9ueSBZQ0JDUjQyMF8xMExFIGNocm9tYSBmb3JtYXQgZm9yIEVWQyBzdHJlYW0NCisgICAgICAg IHN3aXRjaChzcHMtPmNocm9tYV9mb3JtYXRfaWRjKSB7DQorICAgICAgICBjYXNlIDA6IC8qIFlD QkNSNDAwXzEwTEUgKi8NCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IllDQkNSNDAwXzEwTEU6IE5vdCBzdXBwb3J0ZWQgY2hyb21hIGZvcm1hdFxuIik7DQorICAgICAg ICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX0dSQVkxMExFOw0KKyAgICAgICAgICAg IHJldHVybiAtMTsNCisgICAgICAgIGNhc2UgMTogLyogWUNCQ1I0MjBfMTBMRSAqLw0KKyAgICAg ICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjBQMTBMRTsNCisgICAgICAg ICAgICBicmVhazsNCisgICAgICAgIGNhc2UgMjogLyogWUNCQ1I0MjJfMTBMRSAqLw0KKyAgICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiWUNCQ1I0MjJfMTBMRTogTm90IHN1 cHBvcnRlZCBjaHJvbWEgZm9ybWF0XG4iKTsNCisgICAgICAgICAgICBhdmN0eC0+cGl4X2ZtdCA9 IEFWX1BJWF9GTVRfWVVWNDIyUDEwTEU7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAg ICAgY2FzZSAzOiAvKiBZQ0JDUjQ0NF8xMExFICovDQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJZQ0JDUjQ0NF8xMExFOiBOb3Qgc3VwcG9ydGVkIGNocm9tYSBmb3Jt YXRcbiIpOw0KKyAgICAgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0NDRQ MTBMRTsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICBkZWZhdWx0Og0KKyAgICAg ICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9OT05FOw0KKyAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biBzdXBwb3J0ZWQgY2hyb21hIGZvcm1h dFxuIik7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg Ly8gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgcGFyc2Vfc3BzIGZ1bmN0aW9uIGRvZXNu J3QgaGFuZGxlIFZVSSBwYXJhbWV0ZXJzIHBhcnNpbmcsDQorICAgICAgICAvLyBzbyBhdCB0aGUg bW9tZW50IGl0J3MgaW1wb3NzaWJsZSB0byBpbml0aWFsaXplIGhhc19iX2ZyYW1lcyBhbmQgbWF4 X2JfZnJhbWVzIEFWQ29kZWNDb250ZXggZmllbGRzIGhlcmUuDQorICAgICAgICAvLyBDdXJyZW50 bHksIGluaXRpYWxpemF0aW9uIG9mIGhhc19iX2ZyYW1lcyBhbmQgbWF4X2JfZnJhbWVzIEFWQ29k ZWNDb250ZXggZmllbGRzIGhhdmUgYmVlbiBtb3ZlZCB0bw0KKyAgICAgICAgLy8gbGlieGV2ZF9k ZWNvZGUgZnVuY3Rpb24gd2hlcmUgd2UgY2FuIHVzZSB4ZXZkX2NvbmZpZyBmdW5jdGlvbiBiZWlu ZyBhIHBhcnQgb2YgeGV2ZCBsaWJyYXJ5IEFQSQ0KKyAgICAgICAgLy8gdG8gZ2V0IHRoZSBuZWVk ZWQgaW5mb3JtYXRpb24uDQorICAgICAgICAvLyBIb3dldmVyLCBpZiBpdCB3aWxsIGJlIG5lZWRl ZCwgcGFyc2Vfc3BzIGZ1bmN0aW9uIHNob3VsZCBiZSBleHRlbmRlZCB0byBoYW5kbGUgVlVJIHBh cmFtZXRlcnMgcGFyc2luZw0KKyAgICAgICAgLy8gYW5kIHRoZSBmb2xsb3dpbmcgbGluZXMgc2hv dWxkIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBoYXNfYl9mcmFtZXMgYW5kIG1heF9iX2ZyYW1lcyBm aWVsZHMgb2YgdGhlIEFWQ29kZWNDb250ZXguDQorICAgICAgICAvLw0KKyAgICAgICAgLy8gc3Bz LT52dWlfcGFyYW1ldGVycy5udW1fcmVvcmRlcl9waWNzDQorICAgICAgICAvLyBpZiAoc3BzLT5i aXRzdHJlYW1fcmVzdHJpY3Rpb25fZmxhZyAmJiBzcHMtPnZ1aV9wYXJhbWV0ZXJzLm51bV9yZW9y ZGVyX3BpY3MpIHsNCisgICAgICAgIC8vICAgICBhdmN0eC0+aGFzX2JfZnJhbWVzID0gc3BzLT52 dWlfcGFyYW1ldGVycy5udW1fcmVvcmRlcl9waWNzOw0KKyAgICAgICAgLy8gfQ0KKw0KKyAgICAg ICAgZXYtPmdvdF9zcHMgPSAxOw0KKw0KKyAgICB9IGVsc2UgaWYgKG5hbHVfdHlwZSA9PSBFVkNf TlVUX1BQUykgLy8gTkFMIFVuaXQgdHlwZTogUFBTIChWaWRlbyBQYXJhbWV0ZXIgU2V0KQ0KKyAg ICAgICAgZXYtPmdvdF9wcHMgPSAxOw0KKyAgICBlbHNlIGlmKG5hbHVfdHlwZSA9PSBFVkNfTlVU X1NFSSkgLy8gTkFMIHVuaXQgdHlwZTogU0VJIChTdXBwbGVtZW50YWwgRW5oYW5jZW1lbnQgSW5m b3JtYXRpb24pDQorICAgICAgICBldi0+Z290X3NlaSA9IDE7DQorICAgIGVsc2UgaWYgKG5hbHVf dHlwZSA9PSBFVkNfTlVUX0lEUiB8fCBuYWx1X3R5cGUgPT0gRVZDX05VVF9OT05JRFIpIC8vIE5B TCBVbml0IHR5cGU6IENvZGVkIHNsaWNlIG9mIGEgSURSIG9yIG5vbi1JRFIgcGljdHVyZQ0KKyAg ICAgICAgZXYtPmdvdF9zbGljZSsrOw0KKyAgICBlbHNlIHsNCisgICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBOQUwgdW5pdCB0eXBlOiAlZFxuIiwgbmFsdV90eXBl KTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQor DQorLyoqDQorICogRmluZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lIGluIHRoZSBiaXRz dHJlYW0uDQorICogQHJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGJ5dGUgb2YgdGhl IG5leHQgZnJhbWUsIG9yIEVORF9OT1RfRk9VTkQNCisgKi8NCitzdGF0aWMgaW50IGV2Y19maW5k X2ZyYW1lX2VuZChBVkNvZGVjUGFyc2VyQ29udGV4dCAqcywgY29uc3QgdWludDhfdCAqYnVmLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWZfc2l6ZSwgQVZDb2RlY0NvbnRl eHQgKmF2Y3R4KQ0KK3sNCisgICAgRVZDUGFyc2VyQ29udGV4dCAqZXYgPSBzLT5wcml2X2RhdGE7 DQorDQorICAgIGlmKCFldi0+dG9fcmVhZCkgew0KKyAgICAgICAgaW50IG5hbF91bml0X3NpemUg PSAwOw0KKyAgICAgICAgaW50IG5leHQgPSBFTkRfTk9UX0ZPVU5EOw0KKw0KKyAgICAgICAgLy8g VGhpcyBpcyB0aGUgY2FzZSB3aGVuIGJ1ZmZlciBzaXplIGlzIG5vdCBlbm91Z2ggZm9yIGJ1ZmZl ciB0byBzdG9yZSBOQUwgdW5pdCBsZW5ndGgNCisgICAgICAgIGlmKGJ1Zl9zaXplIDwgRVZDX05B TF9VTklUX0xFTkdUSF9CWVRFKSB7DQorICAgICAgICAgICAgZXYtPnRvX3JlYWQgPSBFVkNfTkFM X1VOSVRfTEVOR1RIX0JZVEU7DQorICAgICAgICAgICAgZXYtPm5hbF9sZW5ndGhfc2l6ZSA9IGJ1 Zl9zaXplOw0KKyAgICAgICAgICAgIGV2LT5pbmNvbXBsZXRlX25hbHVfcHJlZml4X3JlYWQgID0g MTsNCisNCisgICAgICAgICAgICByZXR1cm4gRU5EX05PVF9GT1VORDsNCisgICAgICAgIH0NCisN CisgICAgICAgIG5hbF91bml0X3NpemUgPSByZWFkX25hbF91bml0X2xlbmd0aChidWYsIGJ1Zl9z aXplLCBhdmN0eCk7DQorICAgICAgICBldi0+bmFsX2xlbmd0aF9zaXplID0gRVZDX05BTF9VTklU X0xFTkdUSF9CWVRFOw0KKw0KKyAgICAgICAgbmV4dCA9IG5hbF91bml0X3NpemUgKyBFVkNfTkFM X1VOSVRfTEVOR1RIX0JZVEU7DQorICAgICAgICBldi0+dG9fcmVhZCA9IG5leHQ7DQorICAgICAg ICBpZihuZXh0IDwgYnVmX3NpemUpDQorICAgICAgICAgICAgcmV0dXJuIG5leHQ7DQorICAgICAg ICBlbHNlDQorICAgICAgICAgICAgcmV0dXJuIEVORF9OT1RfRk9VTkQ7DQorICAgIH0gZWxzZSBp Zihldi0+dG9fcmVhZCA+IGJ1Zl9zaXplKSB7DQorICAgICAgICByZXR1cm4gRU5EX05PVF9GT1VO RDsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGlmKGV2LT5pbmNvbXBsZXRlX25hbHVfcHJlZml4 X3JlYWQgID09IDEpIHsNCisgICAgICAgICAgICBFVkNQYXJzZXJDb250ZXh0ICpldiA9IHMtPnBy aXZfZGF0YTsNCisgICAgICAgICAgICBQYXJzZUNvbnRleHQgKnBjID0gJmV2LT5wYzsNCisgICAg ICAgICAgICB1aW50OF90IG5hbHVfbGVuW0VWQ19OQUxfVU5JVF9MRU5HVEhfQllURV0gPSB7MH07 DQorICAgICAgICAgICAgaW50IG5hbF91bml0X3NpemUgPSAwOw0KKw0KKyAgICAgICAgICAgIC8v IDEuIHBjLT5idWZmZXIgY29udGFpbnMgcHJldmlvdXNseSByZWFkIGJ5dGVzIG9mIE5BTFUgcHJl Zml4DQorICAgICAgICAgICAgLy8gMi4gYnVmIGNvbnRhaW5zIHRoZSByZXN0IG9mIE5BTCB1bml0 IHByZWZpeCBieXRlcw0KKyAgICAgICAgICAgIC8vDQorICAgICAgICAgICAgLy8gfn5+fn5+fg0K KyAgICAgICAgICAgIC8vIEVYQU1QTEUNCisgICAgICAgICAgICAvLyB+fn5+fn5+DQorICAgICAg ICAgICAgLy8NCisgICAgICAgICAgICAvLyBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgd2UgYXNz dW1lZCB0aGF0IHRoZSBudW1iZXIgb2YgYWxyZWFkeSByZWFkIE5BTCBVbml0IHByZWZpeCBieXRl cyBpcyBlcXVhbCAxDQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0t DQorICAgICAgICAgICAgLy8gcGMtPmJ1ZmZlciAtPiBjb25hdGlucyBhbHJlYWR5IHJlYWQgYnl0 ZXMNCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tDQorICAgICAgICAgICAgLy8gICAgICAgICAg ICAgIF9fIHBjLT5pbmRleCA9PSAxDQorICAgICAgICAgICAgLy8gICAgICAgICAgICAgfA0KKyAg ICAgICAgICAgIC8vICAgICAgICAgICAgIFYNCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAgICAg Ly8gfCAgIDAgICB8ICAgMSAgIHwgICAyICAgfCAgIDMgICB8ICAgNCAgIHwgLi4uIHwgICBOICAg fA0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAvLyB8ICAweDAwIHwgIDB4WFggfCAgMHhY WCB8ICAweFhYIHwgIDB4WFggfCAuLi4gfCAgMHhYWCB8DQorICAgICAgICAgICAgLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAg ICAgICAgIC8vDQorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vIGJ1 ZiAtPiBjb250YWlucyBuZXdseSByZWFkIGJ5dGVzDQorICAgICAgICAgICAgLy8gLS0tLS0tLS0t LQ0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAvLyB8ICAgMCAgIHwgICAxICAgfCAgIDIg ICB8ICAgMyAgIHwgICA0ICAgfCAuLi4gfCAgIE4gICB8DQorICAgICAgICAgICAgLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAg ICAgICAgIC8vIHwgIDB4MDAgfCAgMHgwMCB8ICAweDNDIHwgIDB4WFggfCAgMHhYWCB8IC4uLiB8 ICAweFhYIHwNCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICBm b3IoaW50IGkgPSAwOyBpIDwgRVZDX05BTF9VTklUX0xFTkdUSF9CWVRFOyBpKyspIHsNCisgICAg ICAgICAgICAgICAgaWYoaSA8IHBjLT5pbmRleCkNCisgICAgICAgICAgICAgICAgICAgIG5hbHVf bGVuW2ldID0gcGMtPmJ1ZmZlcltpXTsNCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAg ICAgICAgICAgICAgbmFsdV9sZW5baV0gPSBidWZbaSAtIHBjLT5pbmRleF07DQorICAgICAgICAg ICAgfQ0KKw0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0NCisgICAgICAgICAgICAvLyBuYWx1 X2xlbg0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0NCisgICAgICAgICAgICAvLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAvLyB8ICAgMCAgIHwgICAx ICAgfCAgIDIgICB8ICAgMyAgIHwNCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAvLyB8ICAweDAwIHwgIDB4MDAgfCAgMHgwMCB8 ICAweDNDIHwNCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCisgICAgICAgICAgICAvLyB8IE5BTFUgTEVOR1RIICAgICAgICAgICAgICAgICAgIHwNCisg ICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAg ICAgICAvLyBOQUwgVW5pdCBsZW5naHQgPSAgNjAgKDB4MDAwMDAwM0MpDQorDQorICAgICAgICAg ICAgbmFsX3VuaXRfc2l6ZSA9IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKG5hbHVfbGVuLCBFVkNfTkFM X1VOSVRfTEVOR1RIX0JZVEUsIGF2Y3R4KTsNCisNCisgICAgICAgICAgICBldi0+dG9fcmVhZCA9 IG5hbF91bml0X3NpemUgKyBFVkNfTkFMX1VOSVRfTEVOR1RIX0JZVEUgLSBwYy0+aW5kZXg7DQor DQorICAgICAgICAgICAgZXYtPmluY29tcGxldGVfbmFsdV9wcmVmaXhfcmVhZCA9IDA7DQorDQor ICAgICAgICAgICAgaWYoZXYtPnRvX3JlYWQgPiBidWZfc2l6ZSkNCisgICAgICAgICAgICAgICAg cmV0dXJuIEVORF9OT1RfRk9VTkQ7DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAg ICByZXR1cm4gZXYtPnRvX3JlYWQ7DQorICAgICAgICB9DQorICAgICAgICByZXR1cm4gZXYtPnRv X3JlYWQ7DQorICAgIH0NCisNCisgICAgcmV0dXJuIEVORF9OT1RfRk9VTkQ7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgZXZjX3BhcnNlcl9pbml0KEFWQ29kZWNQYXJzZXJDb250ZXh0ICpzKQ0KK3sNCisg ICAgRVZDUGFyc2VyQ29udGV4dCAqZXYgPSBzLT5wcml2X2RhdGE7DQorDQorICAgIGV2LT5nb3Rf c3BzID0gMDsNCisgICAgZXYtPmdvdF9wcHMgPSAwOw0KKyAgICBldi0+Z290X3NlaSA9IDA7DQor ICAgIGV2LT5nb3Rfc2xpY2UgPSAwOw0KKyAgICBldi0+bmFsX2xlbmd0aF9zaXplID0gRVZDX05B TF9VTklUX0xFTkdUSF9CWVRFOw0KKyAgICBldi0+aW5jb21wbGV0ZV9uYWx1X3ByZWZpeF9yZWFk ID0gMDsNCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZXZjX3BhcnNlKEFW Q29kZWNQYXJzZXJDb250ZXh0ICpzLCBBVkNvZGVjQ29udGV4dCAqYXZjdHgsDQorICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdWludDhfdCAqKnBvdXRidWYsIGludCAqcG91dGJ1Zl9zaXplLA0K KyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplKQ0K K3sNCisgICAgaW50IG5leHQ7DQorICAgIEVWQ1BhcnNlckNvbnRleHQgKmV2ID0gcy0+cHJpdl9k YXRhOw0KKyAgICBQYXJzZUNvbnRleHQgKnBjID0gJmV2LT5wYzsNCisgICAgaW50IGlzX2R1bW15 X2J1ZiA9ICFidWZfc2l6ZTsNCisgICAgY29uc3QgdWludDhfdCAqZHVtbXlfYnVmID0gYnVmOw0K Kw0KKyAgICBpZiAocy0+ZmxhZ3MgJiBQQVJTRVJfRkxBR19DT01QTEVURV9GUkFNRVMpDQorICAg ICAgICBuZXh0ID0gYnVmX3NpemU7DQorICAgIGVsc2Ugew0KKyAgICAgICAgbmV4dCA9IGV2Y19m aW5kX2ZyYW1lX2VuZChzLCBidWYsIGJ1Zl9zaXplLCBhdmN0eCk7DQorICAgICAgICBpZiAoZmZf Y29tYmluZV9mcmFtZShwYywgbmV4dCwgJmJ1ZiwgJmJ1Zl9zaXplKSA8IDApIHsNCisgICAgICAg ICAgICAqcG91dGJ1ZiAgICAgID0gTlVMTDsNCisgICAgICAgICAgICAqcG91dGJ1Zl9zaXplID0g MDsNCisgICAgICAgICAgICBldi0+dG9fcmVhZCAtPSBidWZfc2l6ZTsNCisgICAgICAgICAgICBy ZXR1cm4gYnVmX3NpemU7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaXNfZHVtbXlfYnVm ICY9IChkdW1teV9idWYgPT0gYnVmKTsNCisNCisgICAgaWYgKCFpc19kdW1teV9idWYpDQorICAg ICAgICBwYXJzZV9uYWxfdW5pdHMocywgYnVmLCBidWZfc2l6ZSwgYXZjdHgpOw0KKw0KKyAgICAq cG91dGJ1ZiAgICAgID0gYnVmOw0KKyAgICAqcG91dGJ1Zl9zaXplID0gYnVmX3NpemU7DQorICAg IGV2LT50b19yZWFkIC09IG5leHQ7DQorDQorICAgIHJldHVybiBuZXh0Ow0KK30NCisNCitjb25z dCBBVkNvZGVjUGFyc2VyIGZmX2V2Y19wYXJzZXIgPSB7DQorICAgIC5jb2RlY19pZHMgICAgICA9 IHsgQVZfQ09ERUNfSURfRVZDIH0sDQorICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihFVkNQ YXJzZXJDb250ZXh0KSwNCisgICAgLnBhcnNlcl9pbml0ICAgID0gZXZjX3BhcnNlcl9pbml0LA0K KyAgICAucGFyc2VyX3BhcnNlICAgPSBldmNfcGFyc2UsDQorICAgIC5wYXJzZXJfY2xvc2UgICA9 IGZmX3BhcnNlX2Nsb3NlLA0KK307DQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9saWJ4ZXZkLmMg Yi9saWJhdmNvZGVjL2xpYnhldmQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAw MDAwMDAuLjUxMmQxMjYzZDUNCi0tLSAvZGV2L251bGwNCisrKyBiL2xpYmF2Y29kZWMvbGlieGV2 ZC5jDQpAQCAtMCwwICsxLDQ0NCBAQA0KKy8qDQorICogbGlieGV2ZCBkZWNvZGVyDQorICogRVZD IChNUEVHLTUgRXNzZW50aWFsIFZpZGVvIENvZGluZykgZGVjb2RpbmcgdXNpbmcgWEVWRCBNUEVH LTUgRVZDIGRlY29kZXIgbGlicmFyeQ0KKyAqDQorICogQ29weXJpZ2h0IChDKSAyMDIxIERhd2lk IEtvemluc2tpIDxkLmtvemluc2tpQHNhbXN1bmcuY29tPg0KKyAqDQorICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLg0KKyAqDQorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCisgKiB2ZXJzaW9uIDIu MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4N CisgKg0KKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisgKiBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqDQorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KKyAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUNCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQorICovDQorDQorI2lmIGRlZmluZWQoX01TQ19W RVIpDQorI2RlZmluZSBYRVZEX0FQSV9JTVBPUlRTIDENCisjZW5kaWYNCisNCisjaW5jbHVkZSA8 ZmxvYXQuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorDQorI2luY2x1ZGUgPHhldmQuaD4NCisN CisjaW5jbHVkZSAibGliYXZ1dGlsL2ludGVybmFsLmgiDQorI2luY2x1ZGUgImxpYmF2dXRpbC9j b21tb24uaCINCisjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIg0KKyNpbmNsdWRlICJsaWJhdnV0 aWwvcGl4ZGVzYy5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4Zm10LmgiDQorI2luY2x1ZGUg ImxpYmF2dXRpbC9pbWd1dGlscy5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwvY3B1LmgiDQorDQor I2luY2x1ZGUgImF2Y29kZWMuaCINCisjaW5jbHVkZSAiaW50ZXJuYWwuaCINCisjaW5jbHVkZSAi cGFja2V0X2ludGVybmFsLmgiDQorI2luY2x1ZGUgImNvZGVjX2ludGVybmFsLmgiDQorDQorI2Rl ZmluZSBYRVZEX1BBUkFNX0JBRF9OQU1FIC0xDQorI2RlZmluZSBYRVZEX1BBUkFNX0JBRF9WQUxV RSAtMg0KKw0KKyNkZWZpbmUgRVZDX05BTF9IRUFERVJfU0laRSAyIC8qIGJ5dGUgKi8NCisNCisv KioNCisgKiBUaGUgc3RydWN0dXJlIHN0b3JlcyBhbGwgdGhlIHN0YXRlcyBhc3NvY2lhdGVkIHdp dGggdGhlIGluc3RhbmNlIG9mIFhldmUgTVBFRy01IEVWQyBkZWNvZGVyDQorICovDQordHlwZWRl ZiBzdHJ1Y3QgWGV2ZENvbnRleHQgew0KKyAgICBjb25zdCBBVkNsYXNzICpjbGFzczsNCisNCisg ICAgWEVWRCBpZDsgICAgICAgICAgICAvLyBYRVZEIGluc3RhbmNlIGlkZW50aWZpZXIgQHNlZSB4 ZXZkLmgNCisgICAgWEVWRF9DRFNDIGNkc2M7ICAgICAvLyBkZWNvZGluZyBwYXJhbWV0ZXJzIEBz ZWUgeGV2ZC5oDQorDQorICAgIGludCBkZWNvZF9mcmFtZXM7ICAgLy8gbnVtYmVyIG9mIGRlY29k ZWQgZnJhbWVzDQorICAgIGludCBwYWNrZXRfY291bnQ7ICAgLy8gbnVtYmVyIG9mIHBhY2tldHMg Y3JlYXRlZCBieSBkZWNvZGVyDQorDQorICAgIC8vIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycw0K KyAgICBBVkRpY3Rpb25hcnkgKnhldmRfb3B0czsgLy8geGV2ZCBjb25maWd1cmF0aW9uIHJlYWQg ZnJvbSBhIDogc2VwYXJhdGVkIGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMNCisNCit9IFhl dmRDb250ZXh0Ow0KKw0KKy8qKg0KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0 byBhIHZhcmlhYmxlIG9mIHR5cGUgWEVWRF9DRFNDLg0KKyAqIFhFVkRfQ0RTQyBjb250YWlucyBh bGwgZGVjb2RlciBwYXJhbWV0ZXJzIHRoYXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSBp dHMgdXNlLg0KKyAqDQorICogVGhlIGZpZWxkIHZhbHVlcyBvZiB0aGUgWEVWRF9DRFNDIHN0cnVj dHVyZSBhcmUgcG9wdWxhdGVkIGJhc2VkIG9uOg0KKyAqIC0gdGhlIGNvcnJlc3BvbmRpbmcgZmll bGQgdmFsdWVzIG9mIHRoZSBBdkNvZGVjQ29uZXR4dCBzdHJ1Y3R1cmUsDQorICogLSB0aGUgeGV2 ZCBkZWNvZGVyIHNwZWNpZmljIG9wdGlvbiB2YWx1ZXMsDQorICogICAodGhlIGZ1bGwgbGlzdCBv ZiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHhldmQgZW5jb2RlciBpcyBkaXNwbGF5ZWQgYWZ0 ZXIgZXhlY3V0aW5nIHRoZSBjb21tYW5kIC4vZmZtcGVnIC0taGVscCBkZWNvZGVyID0gbGlieGV2 ZCkNCisgKiAtIGFuZCB0aGUgeGV2ZCBlbmNvZGVyIG9wdGlvbnMgc3BlY2lmaWVkIGFzIGEgbGlz dCBvZiBrZXktdmFsdWUgcGFpcnMgZm9sbG93aW5nIHRoZSB4ZXZkLXBhcmFtcyBvcHRpb24NCisg Kg0KKyAqIE9yZGVyIG9mIGlucHV0IHByb2Nlc3NpbmcgYW5kIHBvcHVsYXRpbmcgdGhlIFhFVkRf Q0RTQyBzdHJ1Y3R1cmUNCisgKiAxLiBmaXJzdCwgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIG9m IHRoZSBBVkNvZGVjQ29udGV4dCBzdHJ1Y3R1cmUgYXJlIHByb2Nlc3NlZCwgKGkuZSAtdGhyZWFk cyA0KQ0KKyAqIDIuIHRoZW4geGV2ZC1zcGVjaWZpYyBvcHRpb25zIGFyZSBhZGRlZCBhcyBBVk9w dGlvbiB0byB0aGUgeGV2ZCBBVkNvZGVjIGltcGxlbWVudGF0aW9uIChpLmUgLXRocmVhZHMgMykN CisgKiAzLiBmaW5hbGx5LCB0aGUgb3B0aW9ucyBzcGVjaWZpZWQgYWZ0ZXIgdGhlIHhldmQtcGFy YW1zIG9wdGlvbiBhcyB0aGUgcGFyYW1ldGVyIGxpc3Qgb2YgdHlwZSBrZXkgdmFsdWUgYXJlIHBy b2Nlc3NlZCAoaS5lIC14ZXZkLXBhcmFtcyAibT0yIikNCisgKg0KKyAqIFNvbWUgb3B0aW9ucyBj YW4gYmUgc2V0IGluIGRpZmZlcmVudCB3YXlzLiBJbiB0aGlzIGNhc2UsIHBsZWFzZSBmb2xsb3cg dGhlIGFib3ZlLW1lbnRpb25lZCBvcmRlciBvZiBwcm9jZXNzaW5nLg0KKyAqIFRoZSBtb3N0IHJl Y2VudCBhc3NpZ25tZW50cyBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIHZhbHVlcy4NCisgKg0KKyAq IEBwYXJhbVtpbl0gYXZjdHggY29kZWMgY29udGV4dA0KKyAqIEBwYXJhbVtvdXRdIGNkc2MgY29u dGFpbnMgYWxsIGVuY29kZXIgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXplZCBi ZWZvcmUgaXRzIHVzZQ0KKyAqDQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgZ2V0X2NvbmYoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4LCBYRVZEX0NEU0MgKmNkc2MpDQorew0KKyAgICBpbnQgY3B1X2NvdW50ID0g YXZfY3B1X2NvdW50KCk7DQorDQorICAgIC8qIGNsZWFyIFhFVlNfQ0RTQyBzdHJ1Y3R1cmUgKi8N CisgICAgbWVtc2V0KGNkc2MsIDAsIHNpemVvZihYRVZEX0NEU0MpKTsNCisNCisgICAgLyogaW5p dCBYRVZEX0NEU0MgKi8NCisgICAgaWYoYXZjdHgtPnRocmVhZF9jb3VudCA8PSAwKQ0KKyAgICAg ICAgY2RzYy0+dGhyZWFkcyA9IChjcHVfY291bnQgPCBYRVZEX01BWF9UQVNLX0NOVCkgPyBjcHVf Y291bnQgOiBYRVZEX01BWF9UQVNLX0NOVDsNCisgICAgZWxzZSBpZihhdmN0eC0+dGhyZWFkX2Nv dW50ID4gWEVWRF9NQVhfVEFTS19DTlQpDQorICAgICAgICBjZHNjLT50aHJlYWRzID0gWEVWRF9N QVhfVEFTS19DTlQ7DQorICAgIGVsc2UNCisgICAgICAgIGNkc2MtPnRocmVhZHMgPSBhdmN0eC0+ dGhyZWFkX2NvdW50Ow0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogUmVhZCBO QUwgdW5pdCBsZW5ndGgNCisgKiBAcGFyYW0gYnMgaW5wdXQgZGF0YSAoYml0c3RyZWFtKQ0KKyAq IEByZXR1cm4gdGhlIGxlbmd0aCBvZiBOQUwgdW5pdCBvbiBzdWNjZXNzLCAwIHZhbHVlIG9uIGZh aWx1cmUNCisgKi8NCitzdGF0aWMgdWludDMyX3QgcmVhZF9uYWxfdW5pdF9sZW5ndGgoY29uc3Qg dWludDhfdCAqYnMsIGludCBic19zaXplLCBBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQorew0KKyAg ICB1aW50MzJfdCBsZW4gPSAwOw0KKyAgICBYRVZEX0lORk8gaW5mbzsNCisgICAgaW50IHJldDsN CisNCisgICAgaWYoYnNfc2l6ZSA9PSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKSB7DQorICAg ICAgICByZXQgPSB4ZXZkX2luZm8oKHZvaWQgKilicywgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllU RSwgMSwgJmluZm8pOw0KKyAgICAgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsNCisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBnZXQgYml0c3RyZWFtIGlu Zm9ybWF0aW9uXG4iKTsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisgICAg ICAgIGxlbiA9IGluZm8ubmFsdV9sZW47DQorICAgICAgICBpZihsZW4gPT0gMCkgew0KKyAgICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBiaXRzdHJlYW0gc2l6 ZSEgWyVkXVxuIiwgYnNfc2l6ZSk7DQorICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICB9 DQorICAgIH0NCisNCisgICAgcmV0dXJuIGxlbjsNCit9DQorDQorLyoqDQorICogQHBhcmFtW2lu XSB4ZWN0eCB0aGUgc3RydWN0dXJlIHRoYXQgc3RvcmVzIGFsbCB0aGUgc3RhdGUgYXNzb2NpYXRl ZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUctNSBFVkMgZGVjb2Rlcg0KKyAqIEBwYXJh bVtvdXRdIGF2Y3R4IGNvZGVjIGNvbnRleHQNCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVn YXRpdmUgdmFsdWUgb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgZXhwb3J0X3N0cmVhbV9w YXJhbXMoY29uc3QgWGV2ZENvbnRleHQgKnhlY3R4LCBBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQor ew0KKyAgICBpbnQgcmV0Ow0KKyAgICBpbnQgc2l6ZTsNCisgICAgaW50IGNvbG9yX3NwYWNlOw0K Kw0KKyAgICBhdmN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEwOw0KKw0KKyAgICBz aXplID0gNDsNCisgICAgcmV0ID0geGV2ZF9jb25maWcoeGVjdHgtPmlkLCBYRVZEX0NGR19HRVRf Q09ERURfV0lEVEgsICZhdmN0eC0+Y29kZWRfd2lkdGgsICZzaXplKTsNCisgICAgaWYgKFhFVkRf RkFJTEVEKHJldCkpIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFp bGVkIHRvIGdldCBjb2RlZF93aWR0aFxuIik7DQorICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRF Uk5BTDsNCisgICAgfQ0KKw0KKyAgICByZXQgPSB4ZXZkX2NvbmZpZyh4ZWN0eC0+aWQsIFhFVkRf Q0ZHX0dFVF9DT0RFRF9IRUlHSFQsICZhdmN0eC0+Y29kZWRfaGVpZ2h0LCAmc2l6ZSk7DQorICAg IGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkZhaWxlZCB0byBnZXQgY29kZWRfaGVpZ2h0XG4iKTsNCisgICAgICAgIHJldHVybiBB VkVSUk9SX0VYVEVSTkFMOw0KKyAgICB9DQorDQorICAgIHJldCA9IHhldmRfY29uZmlnKHhlY3R4 LT5pZCwgWEVWRF9DRkdfR0VUX1dJRFRILCAmYXZjdHgtPndpZHRoLCAmc2l6ZSk7DQorICAgIGlm IChYRVZEX0ZBSUxFRChyZXQpKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkZhaWxlZCB0byBnZXQgd2lkdGhcbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhU RVJOQUw7DQorICAgIH0NCisNCisgICAgcmV0ID0geGV2ZF9jb25maWcoeGVjdHgtPmlkLCBYRVZE X0NGR19HRVRfSEVJR0hULCAmYXZjdHgtPmhlaWdodCwgJnNpemUpOw0KKyAgICBpZiAoWEVWRF9G QUlMRUQocmV0KSkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWls ZWQgdG8gZ2V0IGhlaWdodFxuIik7DQorICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsN CisgICAgfQ0KKw0KKyAgICByZXQgPSB4ZXZkX2NvbmZpZyh4ZWN0eC0+aWQsIFhFVkRfQ0ZHX0dF VF9DT0xPUl9TUEFDRSwgJmNvbG9yX3NwYWNlLCAmc2l6ZSk7DQorICAgIGlmIChYRVZEX0ZBSUxF RChyZXQpKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0 byBnZXQgY29sb3Jfc3BhY2VcbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7 DQorICAgIH0NCisgICAgc3dpdGNoKGNvbG9yX3NwYWNlKSB7DQorICAgIGNhc2UgWEVWRF9DU19Z Q0JDUjQwMF8xMExFOg0KKyAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX0dSQVkx MExFOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgWEVWRF9DU19ZQ0JDUjQyMF8xMExFOg0K KyAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMFAxMExFOw0KKyAgICAg ICAgYnJlYWs7DQorICAgIGNhc2UgWEVWRF9DU19ZQ0JDUjQyMl8xMExFOg0KKyAgICAgICAgYXZj dHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMlAxMExFOw0KKyAgICAgICAgYnJlYWs7DQor ICAgIGNhc2UgWEVWRF9DU19ZQ0JDUjQ0NF8xMExFOg0KKyAgICAgICAgYXZjdHgtPnBpeF9mbXQg PSBBVl9QSVhfRk1UX1lVVjQ0NFAxMExFOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGRlZmF1bHQ6 DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVua25vd24gY29sb3Igc3Bh Y2VcbiIpOw0KKyAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX05PTkU7DQorICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsNCisgICAgfQ0KKw0KKyAgICAvLyB0aGUg ZnVuY3Rpb24gcmV0dXJucyBzcHMtPm51bV9yZW9yZGVyX3BpY3MNCisgICAgcmV0ID0geGV2ZF9j b25maWcoeGVjdHgtPmlkLCBYRVZEX0NGR19HRVRfTUFYX0NPRElOR19ERUxBWSwgJmF2Y3R4LT5t YXhfYl9mcmFtZXMsICZzaXplKTsNCisgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsNCisgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGdldCBtYXhfY29kaW5n X2RlbGF5XG4iKTsNCisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOw0KKyAgICB9DQor DQorICAgIGF2Y3R4LT5oYXNfYl9mcmFtZXMgPSAoYXZjdHgtPm1heF9iX2ZyYW1lcykgPyAxIDog MDsNCisNCisgICAgYXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9IEFWQ09MX1BSSV9VTlNQRUNJRklF RDsNCisgICAgYXZjdHgtPmNvbG9yX3RyYyAgICAgICA9IEFWQ09MX1RSQ19VTlNQRUNJRklFRDsN CisgICAgYXZjdHgtPmNvbG9yc3BhY2UgICAgICA9IEFWQ09MX1NQQ19VTlNQRUNJRklFRDsNCisN CisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemUgZGVjb2Rlcg0KKyAq IENyZWF0ZSBhIGRlY29kZXIgaW5zdGFuY2UgYW5kIGFsbG9jYXRlIGFsbCB0aGUgbmVlZGVkIHJl c291cmNlcw0KKyAqDQorICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQNCisgKiBAcmV0dXJu IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3Rh dGljIGF2X2NvbGQgaW50IGxpYnhldmRfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQorew0K KyAgICBYZXZkQ29udGV4dCAqeGVjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KKyAgICBpbnQgcmV0 ID0gMDsNCisgICAgWEVWRF9DRFNDICpjZHNjID0gJih4ZWN0eC0+Y2RzYyk7DQorDQorICAgIC8q IHJlYWQgY29uZmlndXJhdGlvbnMgYW5kIHNldCB2YWx1ZXMgZm9yIGNyZWF0ZWQgZGVzY3JpcHRv ciAoWEVWRF9DRFNDKSAqLw0KKyAgICByZXQgPSBnZXRfY29uZihhdmN0eCwgY2RzYyk7DQorICAg IGlmIChyZXQgIT0gMCkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJD YW5ub3QgZ2V0IGNvbmZpZ3VyYXRpb25cbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7DQorICAgIH0NCisNCisgICAgLyogY3JlYXRlIGRlY29kZXIgKi8NCisgICAgeGVj dHgtPmlkID0geGV2ZF9jcmVhdGUoJih4ZWN0eC0+Y2RzYyksIE5VTEwpOw0KKyAgICBpZih4ZWN0 eC0+aWQgPT0gTlVMTCkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJD YW5ub3QgY3JlYXRlIFhFVkQgZW5jb2RlclxuIik7DQorICAgICAgICByZXR1cm4gQVZFUlJPUl9F WFRFUk5BTDsNCisgICAgfQ0KKw0KKyAgICB4ZWN0eC0+cGFja2V0X2NvdW50ID0gMDsNCisgICAg eGVjdHgtPmRlY29kX2ZyYW1lcyA9IDA7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioN CisgICogRGVjb2RlIHBpY3R1cmUNCisgICoNCisgICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRl eHQNCisgICogQHBhcmFtW291dF0gZnJhbWUgZGVjb2RlZCBmcmFtZQ0KKyAgKiBAcGFyYW1bb3V0 XSBnb3RfZnJhbWVfcHRyIGRlY29kZXIgc2V0cyB0byAwIG9yIDEgdG8gaW5kaWNhdGUgdGhhdCBh DQorICAqICAgICAgICAgICAgICAgICAgICAgICBub24tZW1wdHkgZnJhbWUgb3Igc3VidGl0bGUg d2FzIHJldHVybmVkIGluDQorICAqICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhLg0KKyAg KiBAcGFyYW1baW5dIGF2cGt0IEFWUGFja2V0IGNvbnRhaW5pbmcgZW5jb2RlZCBkYXRhIHRvIGJl IGRlY29kZWQNCisgICoNCisgICogQHJldHVybiBhbW91bnQgb2YgYnl0ZXMgcmVhZCBmcm9tIHRo ZSBwYWNrZXQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3INCisgICogICAgICAgICBjb2RlIG9u IGZhaWx1cmUNCisgICovDQorIHN0YXRpYyBpbnQgbGlieGV2ZF9kZWNvZGUoc3RydWN0IEFWQ29k ZWNDb250ZXh0ICphdmN0eCwgc3RydWN0IEFWRnJhbWUgKmZyYW1lLCBpbnQgKmdvdF9mcmFtZV9w dHIsIEFWUGFja2V0ICphdnBrdCkNCit7DQorICAgIFhldmRDb250ZXh0ICp4ZWN0eCA9IE5VTEw7 DQorICAgIFhFVkRfSU1HQiAqaW1nYiA9IE5VTEw7DQorICAgIFhFVkRfU1RBVCBzdGF0Ow0KKyAg ICBYRVZEX0JJVEIgYml0YjsNCisgICAgaW50IHhldmRfcmV0LCBuYWx1X3NpemUsIGJzX3JlYWRf cG9zOw0KKyAgICBpbnQgcmV0ID0gMDsNCisNCisgICAgaWYoYXZjdHggPT0gTlVMTCkgew0KKyAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGlucHV0IHBhcmFtZXRl cjogQVZDb2RlY0NvbnRleHRcbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsN CisgICAgfQ0KKyAgICB4ZWN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQorICAgIGlmKHhlY3R4ID09 IE5VTEwpIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBY RVZEIGNvbnRleHRcbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCisgICAg fQ0KKw0KKyAgICBpZihhdnBrdC0+c2l6ZSA+IDApIHsNCisgICAgICAgIGJzX3JlYWRfcG9zID0g MDsNCisgICAgICAgIGltZ2IgPSBOVUxMOw0KKyAgICAgICAgd2hpbGUoYXZwa3QtPnNpemUgPiAo YnNfcmVhZF9wb3MgKyBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKSkgew0KKw0KKyAgICAgICAg ICAgIG1lbXNldCgmc3RhdCwgMCwgc2l6ZW9mKFhFVkRfU1RBVCkpOw0KKyAgICAgICAgICAgIG1l bXNldCgmYml0YiwgMCwgc2l6ZW9mKFhFVkRfQklUQikpOw0KKw0KKyAgICAgICAgICAgIG5hbHVf c2l6ZSA9IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKGF2cGt0LT5kYXRhICsgYnNfcmVhZF9wb3MsIFhF VkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUsIGF2Y3R4KTsNCisgICAgICAgICAgICBpZihuYWx1X3Np emUgPT0gMCkgew0KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IkludmFsaWQgYml0c3RyZWFtXG4iKTsNCisgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9J TlZBTElEREFUQTsNCisgICAgICAgICAgICAgICAgZ290byBFUlI7DQorICAgICAgICAgICAgfQ0K KyAgICAgICAgICAgIGJzX3JlYWRfcG9zICs9IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7DQor DQorICAgICAgICAgICAgYml0Yi5hZGRyID0gYXZwa3QtPmRhdGEgKyBic19yZWFkX3BvczsNCisg ICAgICAgICAgICBiaXRiLnNzaXplID0gbmFsdV9zaXplOw0KKw0KKyAgICAgICAgICAgIC8qIG1h aW4gZGVjb2RpbmcgYmxvY2sgKi8NCisgICAgICAgICAgICB4ZXZkX3JldCA9IHhldmRfZGVjb2Rl KHhlY3R4LT5pZCwgJmJpdGIsICZzdGF0KTsNCisgICAgICAgICAgICBpZihYRVZEX0ZBSUxFRCh4 ZXZkX3JldCkpIHsNCisgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1Is ICJGYWlsZWQgdG8gZGVjb2RlIGJpdHN0cmVhbVxuIik7DQorICAgICAgICAgICAgICAgIHJldCA9 IEFWRVJST1JfRVhURVJOQUw7DQorICAgICAgICAgICAgICAgIGdvdG8gRVJSOw0KKyAgICAgICAg ICAgIH0NCisNCisgICAgICAgICAgICBic19yZWFkX3BvcyArPSBuYWx1X3NpemU7DQorDQorICAg ICAgICAgICAgaWYoc3RhdC5uYWx1X3R5cGUgPT0gWEVWRF9OVVRfU1BTKSB7IC8vIEVWQyBzdHJl YW0gcGFyYW1ldGVycyBjaGFuZ2VkDQorICAgICAgICAgICAgICAgIGlmKChyZXQgPSBleHBvcnRf c3RyZWFtX3BhcmFtcyh4ZWN0eCwgYXZjdHgpKSAhPSAwKQ0KKyAgICAgICAgICAgICAgICAgICAg Z290byBFUlI7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmKHN0YXQucmVhZCAh PSBuYWx1X3NpemUpDQorICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0lORk8s ICJEaWZmZXJlbnQgcmVhZGluZyBvZiBiaXRzdHJlYW0gKGluOiVkLCByZWFkOiVkKVxuLCIsIG5h bHVfc2l6ZSwgc3RhdC5yZWFkKTsNCisgICAgICAgICAgICBpZihzdGF0LmZudW0gPj0gMCkgew0K KyAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhcyBhIGRlY29kZWQgaW1hZ2UNCisgICAgICAg ICAgICAgICAgaWYgKGltZ2IpIHsNCisgICAgICAgICAgICAgICAgICAgIC8vIHhldmRfcHVsbCB1 c2VzIHBvb2wgb2Ygb2JqZWN0cyBvZiB0eXBlIFhFVkRfSU1HQi4NCisgICAgICAgICAgICAgICAg ICAgIC8vIFRoZSBwb29sIHNpemUgaXMgZXF1YWwgTUFYX1BCX1NJWkUgKDI2KSwgc28gcmVsZWFz ZSBvYmplY3Qgd2hlbiBpdCBpcyBubyBtb3JlIG5lZWRlZA0KKyAgICAgICAgICAgICAgICAgICAg aW1nYi0+cmVsZWFzZShpbWdiKTsNCisgICAgICAgICAgICAgICAgICAgIGltZ2IgPSBOVUxMOw0K KyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIHhldmRfcmV0ID0geGV2ZF9wdWxs KHhlY3R4LT5pZCwgJmltZ2IpOw0KKyAgICAgICAgICAgICAgICBpZihYRVZEX0ZBSUxFRCh4ZXZk X3JldCkpIHsNCisgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiRmFpbGVkIHRvIHB1bGwgdGhlIGRlY29kZWQgaW1hZ2UgKHhldmQgZXJyb3IgY29kZTogJWQs IGZyYW1lIz0lZClcbiIsIHhldmRfcmV0LCBzdGF0LmZudW0pOw0KKyAgICAgICAgICAgICAgICAg ICAgcmV0ID0gQVZFUlJPUl9FWFRFUk5BTDsNCisgICAgICAgICAgICAgICAgICAgIGdvdG8gRVJS Ow0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhldmRfcmV0ID09IFhFVkRfT0tfRlJNX0RF TEFZRUQpIHsNCisgICAgICAgICAgICAgICAgICAgIGlmKGltZ2IpIHsNCisgICAgICAgICAgICAg ICAgICAgICAgICAvLyB4ZXZkX3B1bGwgdXNlcyBwb29sIG9mIG9iamVjdHMgb2YgdHlwZSBYRVZE X0lNR0IuDQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBvb2wgc2l6ZSBpcyBlcXVh bCBNQVhfUEJfU0laRSAoMjYpLCBzbyByZWxlYXNlIG9iamVjdCB3aGVuIGl0IGlzIG5vIG1vcmUg bmVlZGVkDQorICAgICAgICAgICAgICAgICAgICAgICAgaW1nYi0+cmVsZWFzZShpbWdiKTsNCisg ICAgICAgICAgICAgICAgICAgICAgICBpbWdiID0gTlVMTDsNCisgICAgICAgICAgICAgICAgICAg IH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAg fSBlbHNlIHsgLy8gYnVtcGluZw0KKyAgICAgICAgeGV2ZF9yZXQgPSB4ZXZkX3B1bGwoeGVjdHgt PmlkLCAmKGltZ2IpKTsNCisgICAgICAgIGlmKHhldmRfcmV0ID09IFhFVkRfRVJSX1VORVhQRUNU RUQpIHsgLy8gYnVtcGluZyBwcm9jZXNzIGNvbXBsZXRlZA0KKyAgICAgICAgICAgICpnb3RfZnJh bWVfcHRyID0gMDsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0gZWxzZSBpZihY RVZEX0ZBSUxFRCh4ZXZkX3JldCkpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIkZhaWxlZCB0byBwdWxsIHRoZSBkZWNvZGVkIGltYWdlICh4ZXZkIGVycm9yIGNv ZGU6ICVkKVxuIiwgeGV2ZF9yZXQpOw0KKyAgICAgICAgICAgIHJldCA9IEFWRVJST1JfRVhURVJO QUw7DQorICAgICAgICAgICAgZ290byBFUlI7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAg aWYoaW1nYikgew0KKyAgICAgICAgLy8gQHRvZG8gc3VwcG9ydHMgb3RoZXIgY29sb3Igc3BhY2Ug YW5kIGJpdCBkZXB0aA0KKyAgICAgICAgaWYoaW1nYi0+Y3MgIT0gWEVWRF9DU19ZQ0JDUjQyMF8x MExFKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJOb3Qgc3Vw cG9ydGVkIHBpeGVsIGZvcm1hdDogJXNcbiIsIGF2X2dldF9waXhfZm10X25hbWUoYXZjdHgtPnBp eF9mbXQpKTsNCisgICAgICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOw0KKyAgICAg ICAgICAgIGdvdG8gRVJSOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGltZ2ItPndbMF0g IT0gYXZjdHgtPndpZHRoIHx8IGltZ2ItPmhbMF0gIT0gYXZjdHgtPmhlaWdodCkgeyAvLyBzdHJl YW0gcmVzb2x1dGlvbiBjaGFuZ2VkDQorICAgICAgICAgICAgaWYoZmZfc2V0X2RpbWVuc2lvbnMo YXZjdHgsIGltZ2ItPndbMF0sIGltZ2ItPmhbMF0pIDwgMCkgew0KKyAgICAgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBzZXQgbmV3IGRpbWVuc2lvblxuIik7 DQorICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7DQorICAgICAgICAg ICAgICAgIGdvdG8gRVJSOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAg IGZyYW1lLT5jb2RlZF9waWN0dXJlX251bWJlcisrOw0KKyAgICAgICAgZnJhbWUtPmRpc3BsYXlf cGljdHVyZV9udW1iZXIrKzsNCisgICAgICAgIGZyYW1lLT5mb3JtYXQgPSBBVl9QSVhfRk1UX1lV VjQyMFAxMExFOw0KKw0KKyAgICAgICAgaWYgKGZmX2dldF9idWZmZXIoYXZjdHgsIGZyYW1lLCAw KSA8IDApIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5v dCBnZXQgQVYgYnVmZmVyXG4iKTsNCisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7 DQorICAgICAgICAgICAgZ290byBFUlI7DQorICAgICAgICB9DQorDQorICAgICAgICBmcmFtZS0+ cHRzID0gYXZwa3QtPnB0czsNCisNCisgICAgICAgIGF2X2ltYWdlX2NvcHkoZnJhbWUtPmRhdGEs IGZyYW1lLT5saW5lc2l6ZSwgKGNvbnN0IHVpbnQ4X3QgKiopaW1nYi0+YSwNCisgICAgICAgICAg ICAgICAgICAgICAgaW1nYi0+cywgYXZjdHgtPnBpeF9mbXQsDQorICAgICAgICAgICAgICAgICAg ICAgIGltZ2ItPndbMF0sIGltZ2ItPmhbMF0pOw0KKw0KKyAgICAgICAgeGVjdHgtPmRlY29kX2Zy YW1lcysrOw0KKyAgICAgICAgKmdvdF9mcmFtZV9wdHIgPSAxOw0KKw0KKyAgICAgICAgLy8geGV2 ZF9wdWxsIHVzZXMgcG9vbCBvZiBvYmplY3RzIG9mIHR5cGUgWEVWRF9JTUdCLg0KKyAgICAgICAg Ly8gVGhlIHBvb2wgc2l6ZSBpcyBlcXVhbCBNQVhfUEJfU0laRSAoMjYpLCBzbyByZWxlYXNlIG9i amVjdCB3aGVuIGl0IGlzIG5vIG1vcmUgbmVlZGVkDQorICAgICAgICBpbWdiLT5yZWxlYXNlKGlt Z2IpOw0KKyAgICAgICAgaW1nYiA9IE5VTEw7DQorICAgIH0gZWxzZQ0KKyAgICAgICAgKmdvdF9m cmFtZV9wdHIgPSAwOw0KKw0KKyAgICB4ZWN0eC0+cGFja2V0X2NvdW50Kys7DQorDQorICAgIHJl dHVybiBhdnBrdC0+c2l6ZTsNCisNCitFUlI6DQorICAgIGlmKGltZ2IpIHsNCisgICAgICAgIGlt Z2ItPnJlbGVhc2UoaW1nYik7DQorICAgICAgICBpbWdiID0gTlVMTDsNCisgICAgfQ0KKyAgICAq Z290X2ZyYW1lX3B0ciA9IDA7DQorDQorICAgIHJldHVybiByZXQ7DQorfQ0KKw0KKy8qKg0KKyAq IERlc3Ryb3kgZGVjb2Rlcg0KKyAqDQorICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQNCisg KiBAcmV0dXJuIDAgb24gc3VjY2Vzcw0KKyAqLw0KK3N0YXRpYyBhdl9jb2xkIGludCBsaWJ4ZXZk X2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkNCit7DQorICAgIFhldmRDb250ZXh0ICp4ZWN0 eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQorICAgIGlmKHhlY3R4LT5pZCkgew0KKyAgICAgICAgeGV2 ZF9kZWxldGUoeGVjdHgtPmlkKTsNCisgICAgICAgIHhlY3R4LT5pZCA9IE5VTEw7DQorICAgIH0N CisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFhl dmRDb250ZXh0LCB4KQ0KKyNkZWZpbmUgVkQgQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfCBBVl9P UFRfRkxBR19ERUNPRElOR19QQVJBTQ0KKw0KK3N0YXRpYyBjb25zdCBBVkNsYXNzIHhldmRfY2xh c3MgPSB7DQorICAgIC5jbGFzc19uYW1lID0gImxpYnhldmQiLA0KKyAgICAuaXRlbV9uYW1lICA9 IGF2X2RlZmF1bHRfaXRlbV9uYW1lLA0KKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJT SU9OX0lOVCwNCit9Ow0KKw0KK2NvbnN0IEZGQ29kZWMgZmZfbGlieGV2ZF9kZWNvZGVyID0gew0K KyAgICAucC5uYW1lICAgICAgICAgICAgID0gImV2YyIsDQorICAgIC5wLmxvbmdfbmFtZSAgICAg ICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiRVZDIC8gTVBFRy01IEVzc2VudGlhbCBWaWRlbyBD b2RpbmcgKEVWQykiKSwNCisgICAgLnAudHlwZSAgICAgICAgICAgICA9IEFWTUVESUFfVFlQRV9W SURFTywNCisgICAgLnAuaWQgICAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX0VWQywNCisgICAg LmluaXQgICAgICAgICAgICAgICA9IGxpYnhldmRfaW5pdCwNCisgICAgRkZfQ09ERUNfREVDT0RF X0NCKGxpYnhldmRfZGVjb2RlKSwNCisgICAgLmNsb3NlICAgICAgICAgICAgICA9IGxpYnhldmRf Y2xvc2UsDQorICAgIC5wcml2X2RhdGFfc2l6ZSAgICAgPSBzaXplb2YoWGV2ZENvbnRleHQpLA0K KyAgICAucC5wcml2X2NsYXNzICAgICAgID0gJnhldmRfY2xhc3MsDQorICAgIC5wLmNhcGFiaWxp dGllcyAgICAgPSBBVl9DT0RFQ19DQVBfREVMQVkgfCBBVl9DT0RFQ19DQVBfQVVUT19USFJFQURT IHwgQVZfQ09ERUNfQ0FQX0FWT0lEX1BST0JJTkcgfCBBVl9DT0RFQ19DQVBfRFIxLA0KKyAgICAu cC53cmFwcGVyX25hbWUgICAgID0gImxpYnhldmQiLA0KK307DQpkaWZmIC0tZ2l0IGEvbGliYXZj b2RlYy9saWJ4ZXZlLmMgYi9saWJhdmNvZGVjL2xpYnhldmUuYw0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAwMDAuLjkzN2I3ZmM1Y2UNCi0tLSAvZGV2L251bGwNCisrKyBiL2xp YmF2Y29kZWMvbGlieGV2ZS5jDQpAQCAtMCwwICsxLDExNTIgQEANCisvKg0KKyAqIGxpYnhldmUg ZW5jb2Rlcg0KKyAqIEVWQyAoTVBFRy01IEVzc2VudGlhbCBWaWRlbyBDb2RpbmcpIGVuY29kaW5n IHVzaW5nIFhFVkUgTVBFRy01IEVWQyBlbmNvZGVyIGxpYnJhcnkNCisgKg0KKyAqIENvcHlyaWdo dCAoQykgMjAyMSBEYXdpZCBLb3ppbnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4NCisgKg0K KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4NCisgKg0KKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQorICogTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy DQorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMNCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KKyAqLw0KKw0KKyNp ZiBkZWZpbmVkKF9NU0NfVkVSKQ0KKyNkZWZpbmUgWEVWRV9BUElfSU1QT1JUUyAxDQorI2VuZGlm DQorDQorI2luY2x1ZGUgPGZsb2F0Lmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKw0KKyNpbmNs dWRlIDx4ZXZlLmg+DQorDQorI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRlcm5hbC5oIg0KKyNpbmNs dWRlICJsaWJhdnV0aWwvY29tbW9uLmgiDQorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCINCisj aW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCINCisjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGZt dC5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwvdGltZS5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwv Y3B1LmgiDQorDQorI2luY2x1ZGUgImF2Y29kZWMuaCINCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIN CisjaW5jbHVkZSAicGFja2V0X2ludGVybmFsLmgiDQorI2luY2x1ZGUgImNvZGVjX2ludGVybmFs LmgiDQorI2luY2x1ZGUgImVuY29kZS5oIg0KKw0KKyNkZWZpbmUgTUFYX0JTX0JVRiAoMTYqMTAy NCoxMDI0KQ0KKw0KKy8qKg0KKyAqIEVycm9yIGNvZGVzDQorICovDQorI2RlZmluZSBYRVZFX1BB UkFNX0JBRF9OQU1FIC0xMDANCisjZGVmaW5lIFhFVkVfUEFSQU1fQkFEX1ZBTFVFIC0yMDANCisN CisvKioNCisgKiBFbmNvZGVyIHN0YXRlcw0KKyAqDQorICogU1RBVEVfRU5DT0RJTkcgLSB0aGUg ZW5jb2RlciByZWNlaXZlcyBhbmQgcHJvY2Vzc2VzIGlucHV0IGZyYW1lcw0KKyAqIFNUQVRFX0JV TVBJTkcgIC0gdGhlcmUgYXJlIG5vIG1vcmUgaW5wdXQgZnJhbWVzLCBob3dldmVyIHRoZSBlbmNv ZGVyIHN0aWxsIHByb2Nlc3NlcyBwcmV2aW91c2x5IHJlY2VpdmVkIGRhdGENCisgKiBTVEFURV9T S0lQUElORyAtIHNraXBwaW5nIGlucHV0IGZyYW1lcw0KKyAqLw0KK3R5cGVkZWYgZW51bSBTdGF0 ZSB7DQorICAgIFNUQVRFX0VOQ09ESU5HLA0KKyAgICBTVEFURV9CVU1QSU5HLA0KKyAgICBTVEFU RV9TS0lQUElORw0KK30gU3RhdGU7DQorDQorLyoqDQorICogVGhlIHN0cnVjdHVyZSBzdG9yZXMg YWxsIHRoZSBzdGF0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUct NSBFVkMgZW5jb2Rlcg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IFhldmVDb250ZXh0IHsNCisgICAg Y29uc3QgQVZDbGFzcyAqY2xhc3M7DQorDQorICAgIFhFVkUgaWQ7ICAgICAgICAgICAgLy8gWEVW RSBpbnN0YW5jZSBpZGVudGlmaWVyDQorICAgIFhFVkVfQ0RTQyBjZHNjOyAgICAgLy8gY29kaW5n IHBhcmFtZXRlcnMgaS5lIHByb2ZpbGUsIHdpZHRoICYgaGVpZ2h0IG9mIGlucHV0IGZyYW1lLCBu dW0gb2YgdGhlcmFkcywgZnJhbWUgcmF0ZSAuLi4NCisgICAgWEVWRV9CSVRCIGJpdGI7ICAgICAv LyBiaXRzdHJlYW0gYnVmZmVyIChvdXRwdXQpDQorICAgIFhFVkVfU1RBVCBzdGF0OyAgICAgLy8g ZW5jb2Rpbmcgc3RhdHVzIChvdXRwdXQpDQorICAgIFhFVkVfSU1HQiBpbWdiOyAgICAgLy8gaW1h Z2UgYnVmZmVyIChpbnB1dCkNCisNCisgICAgU3RhdGUgc3RhdGU7ICAgICAgICAvLyBlbmNvZGVy IHN0YXRlIChza2lwcGluZywgZW5jb2RpbmcsIGJ1bXBpbmcpDQorDQorICAgIGludCBlbmNvZF9m cmFtZXM7ICAgLy8gbnVtIG9mIGVuY29kZWQgZnJhbWVzDQorICAgIGRvdWJsZSBieXRlc190b3Rh bDsgLy8gZW5jb2RlZCBiaXRzdHJlYW0gYnl0ZSBzaXplDQorICAgIGRvdWJsZSBiaXRyYXRlOyAg ICAgLy8gYml0cyBwZXIgc2Vjb25kDQorICAgIGludCBwYWNrZXRfY291bnQ7ICAgLy8gbnVtIG9m IHBhY2tldHMgY3JlYXRlZCBieSBlbmNvZGVyDQorDQorICAgIC8vIENocm9tYSBzdWJzYW1wbGlu Zw0KKyAgICBpbnQgd2lkdGhfbHVtYTsNCisgICAgaW50IGhlaWdodF9sdW1hOw0KKyAgICBpbnQg d2lkdGhfY2hyb21hOw0KKyAgICBpbnQgaGVpZ2h0X2Nocm9tYTsNCisNCisgICAgaW50IHByb2Zp bGVfaWQ7ICAgICAvLyBlbmNvZGVyIHByb2ZpbGUgKG1haW4sIGJhc2VsaW5lKQ0KKyAgICBpbnQg cHJlc2V0X2lkOyAgICAgIC8vIHByZXNldCBvZiB4ZXZlICggZmFzdCwgbWVkaXVtLCBzbG93LCBw bGFjZWJvKQ0KKyAgICBpbnQgdHVuZV9pZDsgICAgICAgIC8vIHR1bmUgb2YgeGV2ZSAocHNuciwg emVyb2xhdGVuY3kpDQorICAgIGludCBpbnB1dF9kZXB0aDsgICAgLy8gaW5wdXQgYml0LWRlcHRo OiA4Yml0LCAxMGJpdA0KKyAgICBpbnQgaGFzaDsgICAgICAgICAgIC8vIGVtYmVkIHBpY3R1cmUg c2lnbmF0dXJlIChIQVNIKSBmb3IgY29uZm9ybWFuY2UgY2hlY2tpbmcgaW4gZGVjb2RpbmcNCisN CisgICAgLyogdmFyaWFibGVzIGZvciBpbnB1dCBwYXJhbWV0ZXIgKi8NCisgICAgY2hhciAqb3Bf cHJlc2V0Ow0KKyAgICBjaGFyICpvcF90dW5lOw0KKyAgICBpbnQgb3BfcXA7DQorICAgIGludCBv cF9jcmY7DQorDQorICAgIC8vIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycw0KKyAgICAvLyB4ZXZl IGNvbmZpZ3VyYXRpb24gcmVhZCBmcm9tIGEgOiBzZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUg cGFyYW1ldGVycw0KKyAgICBBVkRpY3Rpb25hcnkgKnhldmVfcGFyYW1zOw0KK30gWGV2ZUNvbnRl eHQ7DQorDQorLyoqDQorICogR2V0cyBYZXZlIGVuY29kZXIgcHJlLWRlZmluZWQgcHJvZmlsZQ0K KyAqDQorICogQHBhcmFtIHByb2ZpbGUgc3RyaW5nIGRlc2NyaWJpbmcgWGV2ZSBlbmNvZGVyIHBy b2ZpbGUgKGJhc2VsaW5lLCBtYWluKQ0KKyAqIEByZXR1cm4gWEVWRSBwcmUtZGVmaW5lZCBwcm9m aWxlIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUNCisgKi8NCitzdGF0aWMg aW50IGdldF9wcm9maWxlX2lkKGNvbnN0IGNoYXIgKnByb2ZpbGUpDQorew0KKyAgICBpZiAoIXN0 cmNtcChwcm9maWxlLCAiYmFzZWxpbmUiKSkNCisgICAgICAgIHJldHVybiBYRVZFX1BST0ZJTEVf QkFTRUxJTkU7DQorICAgIGVsc2UgaWYgKCFzdHJjbXAocHJvZmlsZSwgIm1haW4iKSkNCisgICAg ICAgIHJldHVybiBYRVZFX1BST0ZJTEVfTUFJTjsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsNCit9DQorDQorLyoqDQorICogR2V0cyBYZXZlIHByZS1kZWZpbmVk IHByZXNldA0KKyAqDQorICogQHBhcmFtIHByZXNldCBzdHJpbmcgZGVzY3JpYmluZyBYZXZlIGVu Y29kZXIgcHJlc2V0IChmYXN0LCBtZWRpdW0sIHNsb3csIHBsYWNlYm8pDQorICogQHJldHVybiBY RVZFIHByZS1kZWZpbmVkIHByb2ZpbGUgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFp bHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgZ2V0X3ByZXNldF9pZChjb25zdCBjaGFyICpwcmVzZXQp DQorew0KKyAgICBpZigoIXN0cmNtcChwcmVzZXQsICJmYXN0IikpKQ0KKyAgICAgICAgcmV0dXJu IFhFVkVfUFJFU0VUX0ZBU1Q7DQorICAgIGVsc2UgaWYgKCFzdHJjbXAocHJlc2V0LCAibWVkaXVt IikpDQorICAgICAgICByZXR1cm4gWEVWRV9QUkVTRVRfTUVESVVNOw0KKyAgICBlbHNlIGlmICgh c3RyY21wKHByZXNldCwgInNsb3ciKSkNCisgICAgICAgIHJldHVybiBYRVZFX1BSRVNFVF9TTE9X Ow0KKyAgICBlbHNlIGlmICghc3RyY21wKHByZXNldCwgInBsYWNlYm8iKSkNCisgICAgICAgIHJl dHVybiBYRVZFX1BSRVNFVF9QTEFDRUJPOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOw0KK30NCisNCisvKioNCisgKiBHZXRzIFhldmUgcHJlLWRlZmluZWQgdHVu ZSBpZA0KKyAqDQorICogQHBhcmFtW2luXSB0dW5lIHN0cmluZyBkZXNjcmliaW5nIFhldmUgZW5j b2RlciB0dW5lIChwc25yLCB6ZXJvbGF0ZW5jeSkNCisgKiBAcmV0dXJuIFhFVkUgcHJlLWRlZmlu ZWQgcHJvZmlsZSBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlDQorICovDQor c3RhdGljIGludCBnZXRfdHVuZV9pZChjb25zdCBjaGFyICp0dW5lKQ0KK3sNCisgICAgaWYoKCFz dHJjbXAodHVuZSwgInBzbnIiKSkpDQorICAgICAgICByZXR1cm4gWEVWRV9UVU5FX1BTTlI7DQor ICAgIGVsc2UgaWYgKCFzdHJjbXAodHVuZSwgInplcm9sYXRlbmN5IikpDQorICAgICAgICByZXR1 cm4gWEVWRV9UVU5FX1pFUk9MQVRFTkNZOw0KKyAgICBlbHNlDQorICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOw0KK30NCisNCisvKioNCisgKiBDb252ZXJ0IEZGbXBlZyBwaXhlbCBmb3Jt YXQgKEFWUGl4ZWxGb3JtYXQpIHRvIFhFVkUgcHJlLWRlZmluZWQgY29sb3IgZm9ybWF0DQorICoN CisgKiBAcGFyYW1baW5dICBweF9mbXQgcGl4ZWwgZm9ybWF0IChAc2VlIGh0dHBzOi8vZmZtcGVn Lm9yZy9kb3h5Z2VuL3RydW5rL3BpeGZtdF84aC5odG1sI2E5YThlMzM1Y2YzYmU0NzIwNDJiYzlm MGNmODBjZDRjNSkNCisgKiBAcGFyYW1bb3V0XSBjb2xvcl9mb3JtYXQgWEVWRSBwcmUtZGVmaW5l ZCBjb2xvciBmb3JtYXQgKEBzZWUgeGV2ZS5oKQ0KKyAqIEBwYXJhbVtvdXRdIGJpdF9kZXB0aCBi aXQgZGVwdGgNCisgKg0KKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBv biBmYWlsdXJlDQorICovDQorc3RhdGljIGludCBnZXRfcGl4X2ZtdChlbnVtIEFWUGl4ZWxGb3Jt YXQgcGl4X2ZtdCwgaW50ICpjb2xvcl9mb3JtYXQsIGludCAqYml0X2RlcHRoKQ0KK3sNCisgICAg c3dpdGNoIChwaXhfZm10KSB7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQOg0KKyAgICAg ICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0MjA7DQorICAgICAgICAqYml0X2RlcHRo ID0gODsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDoNCisg ICAgICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lDQkNSNDIyOw0KKyAgICAgICAgKmJpdF9k ZXB0aCA9IDg7DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFA6 DQorICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9ZQ0JDUjQ0NDsNCisgICAgICAgICpi aXRfZGVwdGggPSA4Ow0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0 MjBQMTA6DQorICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9ZQ0JDUjQyMDsNCisgICAg ICAgICpiaXRfZGVwdGggPSAxMDsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9G TVRfWVVWNDIyUDEwOg0KKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0MjI7 DQorICAgICAgICAqYml0X2RlcHRoID0gMTA7DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBB Vl9QSVhfRk1UX1lVVjQ0NFAxMDoNCisgICAgICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lD QkNSNDQ0Ow0KKyAgICAgICAgKmJpdF9kZXB0aCA9IDEwOw0KKyAgICAgICAgYnJlYWs7DQorICAg IGRlZmF1bHQ6DQorICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9VTktOT1dOOw0KKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7DQorICAgIH0NCisNCisgICAgcmV0dXJu IDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQga2Jwc19zdHJfdG9faW50KGNoYXIgKnN0cikNCit7DQor ICAgIGludCBrYnBzID0gMDsNCisgICAgaWYgKHN0cmNocihzdHIsICdLJykgfHwgc3RyY2hyKHN0 ciwgJ2snKSkgew0KKyAgICAgICAgY2hhciAqdG1wID0gc3RydG9rKHN0ciwgIktrICIpOw0KKyAg ICAgICAga2JwcyA9IChpbnQpKGF0b2YodG1wKSk7DQorICAgIH0gZWxzZSBpZiAoc3RyY2hyKHN0 ciwgJ00nKSB8fCBzdHJjaHIoc3RyLCAnbScpKSB7DQorICAgICAgICBjaGFyICp0bXAgPSBzdHJ0 b2soc3RyLCAiTW0gIik7DQorICAgICAgICBrYnBzID0gKGludCkoYXRvZih0bXApICogMTAwMCk7 DQorICAgIH0gZWxzZQ0KKyAgICAgICAga2JwcyA9IGF0b2koc3RyKTsNCisNCisgICAgcmV0dXJu IGticHM7DQorfQ0KKw0KKy8qKg0KKyAqIFBhcnNlIDogc2VwYXJhdGVkIGxpc3Qgb2Yga2V5PXZh bHVlIHBhcmFtZXRlcnMNCisgKg0KKyAqIEBwYXJhbVtpbl0gYXZjdHggY29udGV4dCBmb3IgbG9n Z2VyDQorICogQHBhcmFtW2luXSBrZXkNCisgKiBAcGFyYW1baW5dIHZhbHVlDQorICogQHBhcmFt W291dF0gY2RzYyBjb250YWlucyBhbGwgWGV2ZSBNUEVHLTUgRVZDIGVuY29kZXIgZW5jb2RlciBw YXJhbWV0ZXJzIHRoYXQNCisgKiAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBpbml0aWFsaXpl ZCBiZWZvcmUgdGhlIGVuY29kZXIgaXMgdXNlDQorICoNCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vz cywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgcGFyc2VfeGV2 ZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNo YXIgKnZhbHVlLCBYRVZFX0NEU0MqIGNkc2MpDQorew0KKyAgICBYZXZlQ29udGV4dCAqeGVjdHgg PSBOVUxMOw0KKyAgICB4ZWN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQorDQorICAgIGlmKCFrZXkp IHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSXZhbGlkIGFyZ3VtZW50 OiBrZXkgc3RyaW5nIGlzIE5VTExcbiIpOw0KKyAgICAgICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFE X1ZBTFVFOw0KKyAgICB9DQorICAgIGlmKCF2YWx1ZSkgew0KKyAgICAgICAgaWYgKHN0cmNtcChr ZXksICJoYXNoIikgPT0gMCkgew0KKyAgICAgICAgICAgIHhlY3R4LT5oYXNoID0gMTsNCisgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19JTkZPLCAiZW1iZWRkaW5nIHNpZ25hdHVyZSBp cyBlbmFibGVkXG4iKTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJJdmFsaWQgYXJndW1lbnQ6IHZhbHVlIHN0cmluZyBpcyBOVUxM XG4iKTsNCisgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9CQURfVkFMVUU7DQorICAgICAg ICB9DQorICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgInZidi1idWZzaXplIikgPT0gMCApIHsN CisgICAgICAgIGNkc2MtPnBhcmFtLnZidl9idWZzaXplID0ga2Jwc19zdHJfdG9faW50KChjaGFy ICopdmFsdWUpOw0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfSU5GTywgIlZCViBidWZm ZXIgc2l6ZTogJWRrYml0c1xuIiwgY2RzYy0+cGFyYW0udmJ2X2J1ZnNpemUpOw0KKyAgICB9IGVs c2UgaWYgKHN0cmNtcChrZXksICJyYy10eXBlIikgPT0gMCApIHsNCisgICAgICAgIGludCByY190 eXBlID0gYXRvaSh2YWx1ZSk7DQorICAgICAgICBpZihyY190eXBlIDwgMCB8fCByY190eXBlID4g Mikgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiUmF0ZSBjb250 cm9sIHR5cGUgWyAwKHJjX29mZikgLyAxKENCUikgXSBiYWQgdmFsdWU6ICVkXG4iLCByY190eXBl KTsNCisgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9CQURfVkFMVUU7DQorICAgICAgICB9 DQorICAgICAgICBjZHNjLT5wYXJhbS5yY190eXBlID0gcmNfdHlwZTsNCisgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0lORk8sICJSYXRlIGNvbnRyb2wgdHlwZSBbIDAocmNfb2ZmKSAvIDEo Q0JSKSBdIDogJWRcbiIsIHJjX3R5cGUpOw0KKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJi ZnJhbWVzIikgPT0gMCApIHsNCisgICAgICAgIGludCBiZnJhbWVzID0gYXRvaSh2YWx1ZSk7DQor ICAgICAgICBpZihiZnJhbWVzIDwgMCkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiYmZyYW1lczogYmFkIHZhbHVlOiAlZFxuIiwgYmZyYW1lcyk7DQorICAgICAg ICAgICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOw0KKyAgICAgICAgfQ0KKyAgICAgICAg Y2RzYy0+cGFyYW0uYmZyYW1lcyA9IGJmcmFtZXM7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19JTkZPLCAiYmZyYW1lcyA6ICVkXG4iLCBiZnJhbWVzKTsNCisgICAgfSBlbHNlIGlmIChz dHJjbXAoa2V5LCAicHJvZmlsZSIpID09IDAgKSB7DQorICAgICAgICBjb25zdCBjaGFyICpwcm9m aWxlID0gdmFsdWU7DQorICAgICAgICBpbnQgcHJvZmlsZV9pZDsNCisgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0lORk8sICJwcm9maWxlIChiYXNlbGluZSwgbWFpbik6ICVzXG4iLCBwcm9m aWxlKTsNCisgICAgICAgIHByb2ZpbGVfaWQgPSBnZXRfcHJvZmlsZV9pZChwcm9maWxlKTsNCisg ICAgICAgIGlmIChwcm9maWxlX2lkIDwgMCkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiSW52YWxpZCB4ZXZlIHBhcmFtOiBwcm9maWxlKCVzKVxuIiwgcHJvZmls ZSk7DQorICAgICAgICAgICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOw0KKyAgICAgICAg fQ0KKyAgICAgICAgeGVjdHgtPnByb2ZpbGVfaWQgPSBwcm9maWxlX2lkOw0KKyAgICB9IGVsc2Ug aWYgKHN0cmNtcChrZXksICJwcmVzZXQiKSA9PSAwICkgew0KKyAgICAgICAgY29uc3QgY2hhciAq cHJlc2V0ID0gdmFsdWU7DQorICAgICAgICBpbnQgcHJlc2V0X2lkOw0KKyAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfSU5GTywgIlByZXNldCBvZiB4ZXZlIChmYXN0LCBtZWRpdW0sIHNsb3cs IHBsYWNlYm8pOiAlc1xuIiwgcHJlc2V0KTsNCisgICAgICAgIHByZXNldF9pZCA9IGdldF9wcmVz ZXRfaWQocHJlc2V0KTsNCisgICAgICAgIGlmKCBwcmVzZXRfaWQgPCAwKSB7DQorICAgICAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHhldmUgcGFyYW06IHByZXNl dCglcylcbiIsIHByZXNldCk7DQorICAgICAgICAgICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFEX1ZB TFVFOw0KKyAgICAgICAgfQ0KKyAgICAgICAgeGVjdHgtPnByZXNldF9pZCA9IHByZXNldF9pZDsN CisgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAidHVuZSIpID09IDAgKSB7DQorICAgICAgICBj b25zdCBjaGFyICp0dW5lID0gdmFsdWU7DQorICAgICAgICBpbnQgdHVuZV9pZDsNCisgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0lORk8sICJUdW5lIG9mIHhldmUgKHBzbnIsIHplcm9sYXRl bmN5KTogJXNcbiIsIHR1bmUpOw0KKyAgICAgICAgdHVuZV9pZCA9IGdldF90dW5lX2lkKHR1bmUp Ow0KKyAgICAgICAgaWYoIHR1bmVfaWQgPCAwKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHhldmUgcGFyYW06IHR1bmUoJXMpXG4iLCB0dW5lKTsN CisgICAgICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9CQURfVkFMVUU7DQorICAgICAgICB9DQor ICAgICAgICB4ZWN0eC0+dHVuZV9pZCA9IHR1bmVfaWQ7DQorICAgIH0gZWxzZSBpZiAoc3RyY21w KGtleSwgImJpdHJhdGUiKSA9PSAwICkgew0KKyAgICAgICAgY2RzYy0+cGFyYW0uYml0cmF0ZSA9 IGticHNfc3RyX3RvX2ludCgoY2hhciAqKXZhbHVlKTsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0lORk8sICJCaXRyYXRlID0gJWRrYnBzXG4iLCBjZHNjLT5wYXJhbS5iaXRyYXRlKTsN CisgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAicSIpID09IDAgfHwgc3RyY21wKGtleSwgInFw IikgPT0gMCkgew0KKyAgICAgICAgaW50IHFwID0gYXRvaSh2YWx1ZSk7DQorICAgICAgICBpZihx cCA8IDAgfHwgcXAgPiA1MSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiSW52YWxpZCBRUCB2YWx1ZSAoMH41MSkgOiVkXG4iLCBxcCk7DQorICAgICAgICAgICAg cmV0dXJuIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOw0KKyAgICAgICAgfQ0KKyAgICAgICAgY2RzYy0+ cGFyYW0ucXAgPSBxcDsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0lORk8sICJRUCB2 YWx1ZSAoMH41MSk6ICVkXG4iLCBjZHNjLT5wYXJhbS5xcCk7DQorICAgIH0gZWxzZSB7DQorICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVua25vd24geGV2ZSBjb2RlYyBvcHRp b246ICVzXG4iLCBrZXkpOw0KKyAgICAgICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFEX05BTUU7DQor ICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFRoZSBmdW5jdGlvbiBy ZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IG9mIHRoZSBYRVZFX0NEU0MgdHlwZS4NCisg KiBYRVZFX0NEU0MgY29udGFpbnMgYWxsIGVuY29kZXIgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBi ZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGVuY29kZXIgaXMgdXNlZC4NCisgKg0KKyAqIFRoZSBm aWVsZCB2YWx1ZXMgb2YgdGhlIFhFVkVfQ0RTQyBzdHJ1Y3R1cmUgYXJlIHBvcHVsYXRlZCBiYXNl ZCBvbjoNCisgKiAtIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIHZhbHVlcyBvZiB0aGUgQXZDb2Rl Y0NvbmV0eHQgc3RydWN0dXJlLA0KKyAqIC0gdGhlIHhldmUgZW5jb2RlciBzcGVjaWZpYyBvcHRp b24gdmFsdWVzLA0KKyAqICAgKHRoZSBmdWxsIGxpc3Qgb2Ygb3B0aW9ucyBhdmFpbGFibGUgZm9y IHhldmUgZW5jb2RlciBpcyBkaXNwbGF5ZWQgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBjb21tYW5kIC4v ZmZtcGVnIC0taGVscCBlbmNvZGVyID0gbGlieGV2ZSkNCisgKiAtIGFuZCB0aGUgeGV2ZSBlbmNv ZGVyIG9wdGlvbnMgc3BlY2lmaWVkIGFzIGEgbGlzdCBvZiBrZXktdmFsdWUgcGFpcnMgZm9sbG93 aW5nIHRoZSB4ZXZlLXBhcmFtcyBvcHRpb24NCisgKg0KKyAqIFRoZSBvcmRlciBvZiBwcm9jZXNz aW5nIGlucHV0IGRhdGEgYW5kIHBvcHVsYXRpbmcgdGhlIFhFVkVfQ0RTQyBzdHJ1Y3R1cmUNCisg KiAxKSBmaXJzdCwgdGhlIGZpZWxkcyBvZiB0aGUgQVZDb2RlY0NvbnRleHQgc3RydWN0dXJlIGNv cnJlc3BvbmRpbmcgdG8gdGhlIHByb3ZpZGVkIGlucHV0IG9wdGlvbnMgYXJlIHByb2Nlc3NlZCwN CisgKiAgICAoaS5lIC1waXhfZm10IHl1djQyMHAgLXM6diAxOTIweDEwODAgLXIgMzAgLXByb2Zp bGU6diAwKQ0KKyAqIDIpIHRoZW4geGV2ZS1zcGVjaWZpYyBvcHRpb25zIGFkZGVkIGFzIEFWT3B0 aW9uIHRvIHRoZSB4ZXZlIEFWQ29kZWMgaW1wbGVtZW50YXRpb24NCisgKiAgICAoaS5lIC10aHJl YWRzX2NudCAzIC1wcmVzZXQgMCkNCisgKiAzKSBmaW5hbGx5LCB0aGUgb3B0aW9ucyBzcGVjaWZp ZWQgYWZ0ZXIgdGhlIHhldmUtcGFyYW1zIG9wdGlvbiBhcyB0aGUgcGFyYW1ldGVyIGxpc3Qgb2Yg dHlwZSBrZXkgdmFsdWUgYXJlIHByb2Nlc3NlZA0KKyAqICAgIChpLmUgLXhldmUtcGFyYW1zICJt PTI6cT0xNyIpDQorICoNCisgKiBLZWVwIGluIG1pbmQgdGhhdCwgdGhlcmUgYXJlIG9wdGlvbnMg dGhhdCBjYW4gYmUgc2V0IGluIGRpZmZlcmVudCB3YXlzLg0KKyAqIEluIHRoaXMgY2FzZSwgcGxl YXNlIGZvbGxvdyB0aGUgYWJvdmUtbWVudGlvbmVkIG9yZGVyIG9mIHByb2Nlc3NpbmcuDQorICog VGhlIG1vc3QgcmVjZW50IGFzc2lnbm1lbnRzIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgdmFsdWVz Lg0KKyAqDQorICogQHBhcmFtW2luXSBhdmN0eCBjb2RlYyBjb250ZXh0IChBVkNvZGVjQ29udGV4 dCkNCisgKiBAcGFyYW1bb3V0XSBjZHNjIGNvbnRhaW5zIGFsbCBYZXZlIE1QRUctNSBFVkMgZW5j b2RlciBlbmNvZGVyIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3Jl IHRoZSBlbmNvZGVyIGlzIHVzZQ0KKyAqDQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0 aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgZ2V0X2NvbmYoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LCBYRVZFX0NEU0MgKmNkc2MpDQorew0KKyAgICBYZXZlQ29udGV4 dCAqeGVjdHggPSBOVUxMOw0KKyAgICBpbnQgY29sb3JfZm9ybWF0Ow0KKyAgICBpbnQgY3B1X2Nv dW50ID0gYXZfY3B1X2NvdW50KCk7DQorICAgIGludCByZXQ7DQorDQorICAgIHhlY3R4ID0gYXZj dHgtPnByaXZfZGF0YTsNCisgICAgeGVjdHgtPmhhc2ggPSAwOw0KKw0KKyAgICAvKiBpbml0aWFs aXplIHhldmVfcGFyYW0gc3RydWN0IHdpdGggZGVmYXVsdCB2YWx1ZXMgKi8NCisgICAgcmV0ID0g eGV2ZV9wYXJhbV9kZWZhdWx0KCZjZHNjLT5wYXJhbSk7DQorICAgIGlmIChYRVZFX0ZBSUxFRChy ZXQpKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBzZXRf ZGVmYXVsdCBwYXJhbWV0ZXJcbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7 DQorICAgIH0NCisNCisgICAgLyogcmVhZCBvcHRpb25zIGZyb20gQVZDb2RlY0NvbnRleHQgKi8N CisgICAgaWYoYXZjdHgtPndpZHRoID4gMCkNCisgICAgICAgIGNkc2MtPnBhcmFtLncgPSB4ZWN0 eC0+d2lkdGhfbHVtYSA9IGF2Y3R4LT53aWR0aDsNCisNCisgICAgaWYoYXZjdHgtPmhlaWdodCA+ IDApDQorICAgICAgICBjZHNjLT5wYXJhbS5oID0geGVjdHgtPmhlaWdodF9sdW1hID0gYXZjdHgt PmhlaWdodDsNCisNCisgICAgaWYoYXZjdHgtPmZyYW1lcmF0ZS5udW0gPiAwKSB7DQorICAgICAg ICAvLyBmcHMgY2FuIGJlIGZsb2F0IG51bWJlciwgYnV0IHhldmUgQVBJIGRvZXNuJ3Qgc3VwcG9y dCBpdA0KKyAgICAgICAgY2RzYy0+cGFyYW0uZnBzID0gKGludCkoKChmbG9hdClhdmN0eC0+ZnJh bWVyYXRlLm51bSAvIGF2Y3R4LT5mcmFtZXJhdGUuZGVuKSArIDAuNSk7DQorICAgIH0NCisNCisg ICAgaWYoYXZjdHgtPmdvcF9zaXplID49IDApIHsgLy8gR09QIHNpemUgKGtleS1mcmFtZSBpbnRl cnZhbCkNCisgICAgICAgIGNkc2MtPnBhcmFtLmtleWludCA9IGF2Y3R4LT5nb3Bfc2l6ZTsgLy8g MDogb25seSBvbmUgSS1mcmFtZSBhdCB0aGUgZmlyc3QgdGltZTsgMTogZXZlcnkgZnJhbWUgaXMg Y29kZWQgaW4gSS1mcmFtZQ0KKyAgICB9DQorDQorICAgIGlmIChhdmN0eC0+bWF4X2JfZnJhbWVz ID09IDAgfHwgYXZjdHgtPm1heF9iX2ZyYW1lcyA9PSAxIHx8IGF2Y3R4LT5tYXhfYl9mcmFtZXMg PT0gMyB8fA0KKyAgICAgICAgYXZjdHgtPm1heF9iX2ZyYW1lcyA9PSA3IHx8IGF2Y3R4LT5tYXhf Yl9mcmFtZXMgPT0gMTUpIHsgLy8gbnVtYmVyIG9mIGItZnJhbWVzDQorICAgICAgICBjZHNjLT5w YXJhbS5iZnJhbWVzID0gYXZjdHgtPm1heF9iX2ZyYW1lczsNCisgICAgfSBlbHNlIHsNCisgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW5jb3JyZWN0IHZhbHVlIGZvciBtYXhp bXVtIG51bWJlciBvZiBCIGZyYW1lczogKCVkKSBcbiINCisgICAgICAgICAgICAgICAiQWNjZXB0 YWJsZSB2YWx1ZXMgZm9yIGJmIG9wdGlvbiAobWF4aW11bSBudW1iZXIgb2YgQiBmcmFtZXMpIGFy ZSAwLDEsMyw3IG9yIDE1XG4iLCBhdmN0eC0+bWF4X2JfZnJhbWVzKTsNCisgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOw0KKyAgICB9DQorDQorICAgIGlmIChhdmN0eC0+bGV2ZWwg Pj0gMCkNCisgICAgICAgIGNkc2MtPnBhcmFtLmxldmVsX2lkYyA9IGF2Y3R4LT5sZXZlbDsNCisN CisgICAgcmV0ID0gZ2V0X3BpeF9mbXQoYXZjdHgtPnBpeF9mbXQsICZjb2xvcl9mb3JtYXQsICZ4 ZWN0eC0+aW5wdXRfZGVwdGgpOw0KKyAgICBpZiAocmV0ICE9IDApIHsNCisgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LlxuIik7DQor ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsNCisgICAgfQ0KKyAgICBjZHNjLT5w YXJhbS5jcyA9IFhFVkVfQ1NfU0VUKGNvbG9yX2Zvcm1hdCwgeGVjdHgtPmlucHV0X2RlcHRoLCAw KTsNCisNCisgICAgaWYgKGF2Y3R4LT5yY19idWZmZXJfc2l6ZSA+IDApIHsgLy8gVkJWIGJ1ZiBz aXplDQorICAgICAgICBjZHNjLT5wYXJhbS52YnZfYnVmc2l6ZSA9IChpbnQpKGF2Y3R4LT5yY19i dWZmZXJfc2l6ZSAvIDEwMDApOw0KKyAgICB9DQorDQorICAgIC8vIHJjX3R5cGU6ICBSYXRlIGNv bnRyb2wgdHlwZSBbIDAoQ1FQKSAvIDEoQUJSKSAvIDIoQ1JGKSBdDQorICAgIGlmIChhdmN0eC0+ Yml0X3JhdGUgPiAwKSB7DQorICAgICAgICBpZiAoYXZjdHgtPmJpdF9yYXRlIC8gMTAwMCA+IElO VF9NQVggfHwgYXZjdHgtPnJjX21heF9yYXRlIC8gMTAwMCA+IElOVF9NQVgpIHsNCisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk5vdCBzdXBwb3J0ZWQgYml0cmF0ZSBi aXRfcmF0ZSBhbmQgcmNfbWF4X3JhdGUgPiAlZDAwMFxuIiwgSU5UX01BWCk7DQorICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7DQorICAgICAgICB9DQorICAgICAgICBjZHNj LT5wYXJhbS5iaXRyYXRlID0gKGludCkoYXZjdHgtPmJpdF9yYXRlIC8gMTAwMCk7DQorICAgICAg ICBjZHNjLT5wYXJhbS5yY190eXBlID0gWEVWRV9SQ19BQlI7DQorICAgIH0NCisNCisgICAgaWYg KHhlY3R4LT5vcF9jcmYgPj0gMCkgew0KKyAgICAgICAgY2RzYy0+cGFyYW0uY3JmID0geGVjdHgt Pm9wX2NyZjsNCisgICAgICAgIGNkc2MtPnBhcmFtLnJjX3R5cGUgPSBYRVZFX1JDX0NSRjsNCisg ICAgfQ0KKw0KKyAgICBpZihhdmN0eC0+dGhyZWFkX2NvdW50IDw9IDApIHsNCisgICAgICAgIGNk c2MtPnBhcmFtLnRocmVhZHMgPSAoY3B1X2NvdW50IDwgWEVWRV9NQVhfVEhSRUFEUykgPyBjcHVf Y291bnQgOiBYRVZFX01BWF9USFJFQURTOw0KKyAgICB9IGVsc2UgaWYoYXZjdHgtPnRocmVhZF9j b3VudCA+IFhFVkVfTUFYX1RIUkVBRFMpDQorICAgICAgICBjZHNjLT5wYXJhbS50aHJlYWRzID0g WEVWRV9NQVhfVEhSRUFEUzsNCisgICAgZWxzZQ0KKyAgICAgICAgY2RzYy0+cGFyYW0udGhyZWFk cyA9IGF2Y3R4LT50aHJlYWRfY291bnQ7DQorDQorICAgIGNkc2MtPnBhcmFtLmNzID0gWEVWRV9D U19TRVQoY29sb3JfZm9ybWF0LCBjZHNjLT5wYXJhbS5jb2RlY19iaXRfZGVwdGgsIDApOw0KKyAg ICBjZHNjLT5tYXhfYnNfYnVmX3NpemUgPSBNQVhfQlNfQlVGOw0KKw0KKyAgICBpZihhdmN0eC0+ cHJvZmlsZSA9PSBGRl9QUk9GSUxFX0VWQ19CQVNFTElORSkNCisgICAgICAgIHhlY3R4LT5wcm9m aWxlX2lkID0gWEVWRV9QUk9GSUxFX0JBU0VMSU5FOw0KKyAgICBlbHNlIGlmKGF2Y3R4LT5wcm9m aWxlID09IEZGX1BST0ZJTEVfRVZDX01BSU4pDQorICAgICAgICB4ZWN0eC0+cHJvZmlsZV9pZCA9 IFhFVkVfUFJPRklMRV9NQUlOOw0KKyAgICBlbHNlIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiVW5rbm93biBlbmNvZGVyIHByb2ZpbGUgKCVkKVxuIg0KKyAgICAgICAg ICAgICAgICJBY2NlcHRhYmxlIHZhbHVlcyBmb3IgcHJvZmlsZSBvcHRpb24gYXJlIDAgYW5kIDEg KDA6IGJhc2VsaW5lIHByb2ZpbGU7IDE6IG1haW4gcHJvZmlsZSlcbiIsIGF2Y3R4LT5wcm9maWxl KTsNCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOw0KKyAgICB9DQorDQorICAg IGlmICh4ZWN0eC0+b3BfcHJlc2V0KSB7IC8vIHByZXNldA0KKyAgICAgICAgeGVjdHgtPnByZXNl dF9pZCA9IGdldF9wcmVzZXRfaWQoeGVjdHgtPm9wX3ByZXNldCk7DQorICAgIH0NCisNCisgICAg aWYgKHhlY3R4LT5vcF90dW5lKSB7IC8vIHR1bmUNCisgICAgICAgIHhlY3R4LT50dW5lX2lkID0g Z2V0X3R1bmVfaWQoeGVjdHgtPm9wX3R1bmUpOw0KKyAgICB9DQorDQorICAgIHJldCA9IHhldmVf cGFyYW1fcHB0KCZjZHNjLT5wYXJhbSwgeGVjdHgtPnByb2ZpbGVfaWQsIHhlY3R4LT5wcmVzZXRf aWQsIHhlY3R4LT50dW5lX2lkKTsNCisgICAgaWYgKFhFVkVfRkFJTEVEKHJldCkpIHsNCisgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90IHNldCBwcm9maWxlKCVkKSwg cHJlc2V0KCVkKSwgdHVuZSglZClcbiIsIHhlY3R4LT5wcm9maWxlX2lkLCB4ZWN0eC0+cHJlc2V0 X2lkLCB4ZWN0eC0+dHVuZV9pZCk7DQorICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsN CisgICAgfQ0KKw0KKyAgICAvKiBwYXJzZSA6IHNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBw YXJhbWV0ZXJzIGFuZCBzZXQgdmFsdWVzIGZvciBjcmVhdGVkIGRlc2NyaXB0b3IgKFhFVkVfQ0RT QykgKi8NCisgICAgew0KKyAgICAgICAgQVZEaWN0aW9uYXJ5RW50cnkgKmVuID0gTlVMTDsNCisN CisgICAgICAgIC8vIFN0YXJ0IHRvIHBhcnNlIHhldmVfcGFyYW1zDQorICAgICAgICB3aGlsZSAo KGVuID0gYXZfZGljdF9nZXQoeGVjdHgtPnhldmVfcGFyYW1zLCAiIiwgZW4sIEFWX0RJQ1RfSUdO T1JFX1NVRkZJWCkpKSB7DQorICAgICAgICAgICAgaW50IHBhcnNlX3JldCA9IHBhcnNlX3hldmVf cGFyYW1zKGF2Y3R4LCBlbi0+a2V5LCBlbi0+dmFsdWUsIGNkc2MpOw0KKw0KKyAgICAgICAgICAg IHN3aXRjaCAocGFyc2VfcmV0KSB7DQorICAgICAgICAgICAgY2FzZSBYRVZFX1BBUkFNX0JBRF9O QU1FOg0KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiVW5r bm93biBvcHRpb246ICVzLlxuIiwgZW4tPmtleSk7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0K KyAgICAgICAgICAgIGNhc2UgWEVWRV9QQVJBTV9CQURfVkFMVUU6DQorICAgICAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMu XG4iLCBlbi0+a2V5LCBlbi0+dmFsdWUpOw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAg ICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICB9 DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAq IENoZWNrIGVuY29kZXIgY29uZmlndXJhdGlvbg0KKyAqDQorICogQHBhcmFtW2luXSBhdmN0eCBj b250ZXh0IGZvciBsb2dnZXINCisgKiBAcGFyYW1baW5dIGNkc2MgY29udGFpbnMgYWxsIGVuY29k ZXIgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXRzIHVzZQ0K KyAqDQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFp bHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgY2hlY2tfY29uZihBVkNvZGVjQ29udGV4dCAqYXZjdHgs ICBYRVZFX0NEU0MgKmNkc2MpDQorew0KKyAgICBpbnQgcmV0ID0gMDsNCisgICAgaW50IG1pbl9i bG9ja19zaXplID0gNDsNCisgICAgaW50IHBpY19tOw0KKw0KKyAgICBpZihjZHNjLT5wYXJhbS5w cm9maWxlID09IFhFVkVfUFJPRklMRV9CQVNFTElORSkgew0KKyAgICAgICAgaWYgKGNkc2MtPnBh cmFtLnRvb2xfYW12ciAgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfRVJST1IsICJBTVZSIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAg ICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRv b2xfbW12ZCAgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJNTVZEIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAg IHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWZm aW5lICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJB ZmZpbmUgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0 ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9kbXZyICAg ID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkRNVlIg Y2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7 DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hZG12cCAgID09IDEp IHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkFETVZQIGNhbm5v dCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAg ICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfaG12cCAgICA9PSAxKSB7DQor ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJITVZQIGNhbm5vdCBiZSBv biBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAg fQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRkYiAgICA9PSAxKSB7DQorICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJBRERCIGNhbm5vdCBiZSBvbiBpbiBi YXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAg ICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWxmICAgICA9PSAxKSB7DQorICAgICAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJBTEYgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJv ZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBp ZiAoY2RzYy0+cGFyYW0udG9vbF9odGRmICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIkhUREYgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxu Iik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2Rz Yy0+cGFyYW0uYnR0ICAgICAgICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIkJUVCBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCisg ICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJh bS5zdWNvICAgICAgICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiU1VDTyBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCisgICAgICAg ICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29s X2VpcGQgICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiRUlQRCBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCisgICAgICAgICAgICBy ZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2lxdCAg ICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSVFU IGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0x Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfY21faW5pdCA9PSAx KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDTV9JTklUIGNh bm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0K KyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRjYyAgICA9PSAxKSB7 DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJBRENDIGNhbm5vdCBi ZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAg ICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYXRzICAgICA9PSAxKSB7DQorICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJBVFNfSU5UUkEgY2Fubm90IGJl IG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAg ICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0uaWJjX2ZsYWcgICAgID09IDEpIHsNCisgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIklCQyBjYW5ub3QgYmUgb24gaW4g YmFzZSBwcm9maWxlXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisg ICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX3JwbCAgICAgPT0gMSkgew0KKyAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiUlBMIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHBy b2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAg aWYgKGNkc2MtPnBhcmFtLnRvb2xfcG9jcyAgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJQT0NTIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVc biIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICB9IGVsc2Ugew0K KyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfYWRtdnAgICA9PSAwICYmIGNkc2MtPnBhcmFt LnRvb2xfYWZmaW5lID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkFGRklORSBjYW5ub3QgYmUgb24gd2hlbiBBRE1WUCBpcyBvZmZcbiIpOw0KKyAgICAg ICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRv b2xfYWRtdnAgICA9PSAwICYmIGNkc2MtPnBhcmFtLnRvb2xfYW12ciAgID09IDEpIHsNCisgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkFNVlIgY2Fubm90IGJlIG9uIHdo ZW4gQURNVlAgaXMgb2ZmXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0N CisgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2FkbXZwICAgPT0gMCAmJiBjZHNjLT5wYXJh bS50b29sX2RtdnIgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJETVZSIGNhbm5vdCBiZSBvbiB3aGVuIEFETVZQIGlzIG9mZlxuIik7DQorICAgICAg ICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9v bF9hZG12cCAgID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9tbXZkICAgPT0gMSkgew0KKyAgICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTU1WRCBjYW5ub3QgYmUgb24gd2hl biBBRE1WUCBpcyBvZmZcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0K KyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfZWlwZCAgICA9PSAwICYmIGNkc2MtPnBhcmFt LmliY19mbGFnICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIklCQyBjYW5ub3QgYmUgb24gd2hlbiBFSVBEIGlzIG9mZlxuIik7DQorICAgICAgICAg ICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9p cXQgICAgID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9hdHMgICAgPT0gMSkgew0KKyAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQVRTIGNhbm5vdCBiZSBvbiB3aGVuIElR VCBpcyBvZmZcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAg ICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfY21faW5pdCA9PSAwICYmIGNkc2MtPnBhcmFtLnRvb2xf YWRjYyAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IkFEQ0MgY2Fubm90IGJlIG9uIHdoZW4gQ01fSU5JVCBpcyBvZmZcbiIpOw0KKyAgICAgICAgICAg IHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChjZHNjLT5wYXJhbS5i dHQgPT0gMSkgew0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXggJiYg Y2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCA8IDUpIHsNCisgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIk1heGltdW4gQ29kaW5nIEJsb2NrIHNpemUgY2Fubm90IGJl IHNtYWxsZXIgdGhhbiA1XG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0N CisgICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4ID4gNykgew0KKyAgICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTWF4aW11biBDb2RpbmcgQmxvY2sg c2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDdcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0x Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4g JiYgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbiA8IDIpIHsNCisgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk1pbmltdW0gQ29kaW5nIEJsb2NrIHNpemUgY2Fubm90 IGJlIHNtYWxsZXIgdGhhbiAyXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAg IH0NCisgICAgICAgIGlmICgoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCB8fCBjZHNjLT5w YXJhbS5mcmFtZXdvcmtfY2JfbWluKSAmJg0KKyAgICAgICAgICAgIGNkc2MtPnBhcmFtLmZyYW1l d29ya19jYl9taW4gPiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4KSB7DQorICAgICAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJNaW5pbXVtIENvZGluZyBCbG9jayBzaXpl IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4aW11bSBjb2RpbmcgQmxvY2sgc2l6ZVxuIik7DQor ICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFy YW0uZnJhbWV3b3JrX2N1MTRfbWF4ID4gNikgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiTWF4aW11biAxOjQgQ29kaW5nIEJsb2NrIHNpemUgY2Fubm90IGJlIGdy ZWF0ZXIgdGhhbiA2XG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisg ICAgICAgIGlmICgoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCB8fCBjZHNjLT5wYXJhbS5m cmFtZXdvcmtfY3UxNF9tYXgpICYmDQorICAgICAgICAgICAgY2RzYy0+cGFyYW0uZnJhbWV3b3Jr X2N1MTRfbWF4ID4gY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCkgew0KKyAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTWF4aW11biAxOjQgQ29kaW5nIEJsb2NrIHNp emUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXhpbXVtIGNvZGluZyBCbG9jayBzaXplXG4iKTsN CisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5w YXJhbS5mcmFtZXdvcmtfdHJpc19tYXggPiA2KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIFRyaS1zcGxpdCBCbG9jayBzaXplIGJlIGdyZWF0ZXIg dGhhbiA2XG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAg IGlmICgoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3RyaXNfbWF4IHx8IGNkc2MtPnBhcmFtLmZyYW1l d29ya19jYl9tYXgpICYmDQorICAgICAgICAgICAgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3RyaXNf bWF4ID4gY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCkgew0KKyAgICAgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTWF4aW11biBUcmktc3BsaXQgQmxvY2sgc2l6ZSBjYW5u b3QgYmUgZ3JlYXRlciB0aGFuIE1heGltdW0gY29kaW5nIEJsb2NrIHNpemVcbiIpOw0KKyAgICAg ICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKChjZHNjLT5wYXJhbS5m cmFtZXdvcmtfdHJpc19taW4gfHwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbikgJiYNCisg ICAgICAgICAgICBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfdHJpc19taW4gPCBjZHNjLT5wYXJhbS5m cmFtZXdvcmtfY2JfbWluICsgMikgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiTWF4aW11biBUcmktc3BsaXQgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgc21hbGxlciB0 aGFuIE1pbmltdW0gQ29kaW5nIEJsb2NrIHNpemUgcGx1cyB0d29cbiIpOw0KKyAgICAgICAgICAg IHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYoY2RzYy0+cGFyYW0uZnJhbWV3b3Jr X2NiX21pbikgbWluX2Jsb2NrX3NpemUgPSAxIDw8IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9t aW47DQorICAgICAgICBlbHNlIG1pbl9ibG9ja19zaXplID0gODsNCisgICAgfQ0KKw0KKyAgICBp ZiAoY2RzYy0+cGFyYW0uc3VjbyA9PSAxKSB7DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJh bWV3b3JrX3N1Y29fbWF4ID4gNikgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiTWF4aW11biBTVUNPIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiA2XG4iKTsN CisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5w YXJhbS5mcmFtZXdvcmtfY2JfbWF4ICYmIGNkc2MtPnBhcmFtLmZyYW1ld29ya19zdWNvX21heCA+ IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXgpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIk1heGltdW4gU1VDTyBzaXplIGNhbm5vdCBiZSBncmVhdGVyIHRo YW4gTWF4aW11bSBjb2RpbmcgQmxvY2sgc2l6ZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7 DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWlu IDwgNCkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTWluaW11 biBTVUNPIHNpemUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiA0XG4iKTsNCisgICAgICAgICAgICBy ZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtf Y2JfbWluICYmIGNkc2MtPnBhcmFtLmZyYW1ld29ya19zdWNvX21pbiA8IGNkc2MtPnBhcmFtLmZy YW1ld29ya19jYl9taW4pIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIk1pbmltdW4gU1VDTyBzaXplIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gTWluaW11bSBjb2Rp bmcgQmxvY2sgc2l6ZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQor ICAgICAgICBpZiAoY2RzYy0+cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWluID4gY2RzYy0+cGFyYW0u ZnJhbWV3b3JrX3N1Y29fbWF4KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJNaW5pbXVtIFNVQ08gc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heGltdW0g U1VDTyBzaXplXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAg fQ0KKw0KKyAgICBwaWNfbSA9ICg4ID4gbWluX2Jsb2NrX3NpemUpID8gbWluX2Jsb2NrX3NpemUg OiA4Ow0KKyAgICBpZiAoKGNkc2MtPnBhcmFtLncgJiAocGljX20gLSAxKSkgIT0gMCkgew0KKyAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDdXJyZW50IGVuY29kZXIgZG9lcyBu b3Qgc3VwcG9ydCBwaWN0dXJlIHdpZHRoLCBub3QgbXVsdGlwbGUgb2YgbWF4KDgsIG1pbmltdW0g Q1Ugc2l6ZSlcbiIpOw0KKyAgICAgICAgcmV0ID0gLTE7DQorICAgIH0NCisgICAgaWYgKChjZHNj LT5wYXJhbS5oICYgKHBpY19tIC0gMSkpICE9IDApIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiQ3VycmVudCBlbmNvZGVyIGRvZXMgbm90IHN1cHBvcnQgcGljdHVyZSBo ZWlnaHQsIG5vdCBtdWx0aXBsZSBvZiBtYXgoOCwgbWluaW11bSBDVSBzaXplKVxuIik7DQorICAg ICAgICByZXQgPSAtMTsNCisgICAgfQ0KKw0KKyAgICBpZihyZXQgPT0gLTEpIHsNCisgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0K K30NCisNCisvKioNCisgKiBTZXQgWEVWRV9DRkdfU0VUX1VTRV9QSUNfU0lHTkFUVVJFIGZvciBl bmNvZGVyDQorICoNCisgKiBAcGFyYW1baW5dIGxvZ2dlciBjb250ZXh0DQorICogQHBhcmFtW2lu XSBpZCBYRVZFIGVuY29kZWMgaW5zdGFuY2UgaWRlbnRpZmllcg0KKyAqIEBwYXJhbVtpbl0gY3R4 IHRoZSBzdHJ1Y3R1cmUgc3RvcmVzIGFsbCB0aGUgc3RhdGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUg aW5zdGFuY2Ugb2YgWGV2ZSBNUEVHLTUgRVZDIGVuY29kZXINCisgKg0KKyAqIEByZXR1cm4gMCBv biBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUNCisgKi8NCitzdGF0aWMg aW50IHNldF9leHRyYV9jb25maWcoQVZDb2RlY0NvbnRleHQqIGF2Y3R4LCBYRVZFIGlkLCBYZXZl Q29udGV4dCAqY3R4KQ0KK3sNCisgICAgaW50IHJldCwgc2l6ZSwgdmFsdWU7DQorICAgIHNpemUg PSA0Ow0KKw0KKyAgICAvLyBlbWJlZCBTRUkgbWVzc2FnZXMgaWRlbnRpZnlpbmcgZW5jb2RlciBw YXJhbWV0ZXJzIGFuZCBjb21tYW5kIGxpbmUgYXJndW1lbnRzDQorICAgIC8vIC0gMDogb2ZmXG4i DQorICAgIC8vIC0gMTogZW1pdCBzZWkgaW5mbyINCisgICAgLy8NCisgICAgLy8gU0VJIC0gU3Vw cGxlbWVudGFsIGVuaGFuY2VtZW50IGluZm9ybWF0aW9uIGNvbnRhaW5zIGluZm9ybWF0aW9uDQor ICAgIC8vIHRoYXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkZWNvZGUgdGhlIHNhbXBsZXMgb2YgY29k ZWQgcGljdHVyZXMgZnJvbSBWQ0wgTkFMIHVuaXRzLg0KKyAgICAvLyBTb21lIFNFSSBtZXNzYWdl IGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkIHRvIGNoZWNrIGJpdHN0cmVhbSBjb25mb3JtYW5jZQ0K KyAgICAvLyBhbmQgZm9yIG91dHB1dCB0aW1pbmcgZGVjb2RlciBjb25mb3JtYW5jZS4NCisgICAg Ly8gQHNlZSBJU09fSUVDXzIzMDk0LTFfMjAyMCA3LjQuMy41DQorICAgIC8vIEBzZWUgSVNPX0lF Q18yMzA5NC0xXzIwMjAgQW5uZXggRA0KKyAgICByZXQgPSB4ZXZlX2NvbmZpZyhpZCwgWEVWRV9D RkdfU0VUX1NFSV9DTUQsICZ2YWx1ZSwgJnNpemUpOyAvLyBzZWlfY21kX2luZm8NCisgICAgaWYg KFhFVkVfRkFJTEVEKHJldCkpDQorICAgIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiRmFpbGVkIHRvIHNldCBjb25maWcgZm9yIHNlaSBjb21tYW5kIGluZm8gbWVzc2Fn ZXNcbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7DQorICAgIH0NCisNCisg ICAgaWYoY3R4LT5oYXNoKSB7DQorICAgICAgICB2YWx1ZSA9IDE7DQorICAgICAgICByZXQgPSB4 ZXZlX2NvbmZpZyhpZCwgWEVWRV9DRkdfU0VUX1VTRV9QSUNfU0lHTkFUVVJFLCAmdmFsdWUsICZz aXplKTsNCisgICAgICAgIGlmKFhFVkVfRkFJTEVEKHJldCkpIHsNCisgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBzZXQgY29uZmlnIGZvciBwaWN0dXJl IHNpZ25hdHVyZVxuIik7DQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7DQor ICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIENv bnZlcnQgRkZtcGVnIHBpeGVsIGZvcm1hdCAoQVZQaXhlbEZvcm1hdCkgaW50byBYRVZFIHByZS1k ZWZpbmVkIGNvbG9yIHNwYWNlDQorICoNCisgKiBAcGFyYW1baW5dIHB4X2ZtdCBwaXhlbCBmb3Jt YXQgKEBzZWUgaHR0cHM6Ly9mZm1wZWcub3JnL2RveHlnZW4vdHJ1bmsvcGl4Zm10XzhoLmh0bWwj YTlhOGUzMzVjZjNiZTQ3MjA0MmJjOWYwY2Y4MGNkNGM1KQ0KKyAqDQorICogQHJldHVybiBYRVZF IHByZS1kZWZpbmVkIGNvbG9yIHNwYWNlIChAc2VlIHhldmUuaCkgb24gc3VjY2VzcywgWEVWRV9D Rl9VTktOT1dOIG9uIGZhaWx1cmUNCisgKi8NCitzdGF0aWMgaW50IHhldmVfY29sb3Jfc3BhY2Uo ZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpDQorew0KKyAgICAvKiBjb2xvciBzcGFjZSBvZiBp bnB1dCBpbWFnZSAqLw0KKyAgICBpbnQgY3MgPSBYRVZFX0NGX1VOS05PV047DQorDQorICAgIHN3 aXRjaCAocGl4X2ZtdCkgew0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDoNCisgICAgICAg IGNzID0gWEVWRV9DU19ZQ0JDUjQyMDsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJ WF9GTVRfWVVWNDIwUDEwOg0KKyNpZiBBVl9IQVZFX0JJR0VORElBTg0KKyAgICAgICAgY3MgPSBY RVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDIwLCAxMCwgMSk7DQorI2Vsc2UNCisgICAgICAgIGNz ID0gWEVWRV9DU19ZQ0JDUjQyMF8xMExFOw0KKyNlbmRpZg0KKw0KKyAgICAgICAgYnJlYWs7DQor ICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQMTI6DQorI2lmIEFWX0hBVkVfQklHRU5ESUFODQor ICAgICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0MjAsIDEyLCAxKTsNCisjZWxz ZQ0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1lDQkNSNDIwXzEyTEU7DQorI2VuZGlmDQorDQorICAg ICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlA6DQorICAgICAgICBjcyA9 IFhFVkVfQ1NfWUNCQ1I0MjI7DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1U X1lVVjQyMlAxMDoNCisjaWYgQVZfSEFWRV9CSUdFTkRJQU4NCisgICAgICAgIGNzID0gWEVWRV9D U19TRVQoWEVWRV9DRl9ZQ0JDUjQyMiwgMTAsIDEpOw0KKyNlbHNlDQorICAgICAgICBjcyA9IFhF VkVfQ1NfWUNCQ1I0MjJfMTBMRTsNCisjZW5kaWYNCisNCisgICAgICAgIGJyZWFrOw0KKyAgICBj YXNlIEFWX1BJWF9GTVRfWVVWNDIyUDEyOg0KKyNpZiBBVl9IQVZFX0JJR0VORElBTg0KKyAgICAg ICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDIyLCAxMiwgMSk7DQorI2Vsc2UNCisg ICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQyMiwgMTIsIDApOw0KKyNlbmRp Zg0KKw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJQOg0KKyAgICBj YXNlIEFWX1BJWF9GTVRfR0JSUDEwOg0KKyAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDEyOg0KKyAg ICAgICAgY3MgPSBYRVZFX0NGX1VOS05PV047DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBB Vl9QSVhfRk1UX1lVVjQ0NFA6DQorICAgICAgICBjcyA9IFhFVkVfQ0ZfWUNCQ1I0NDQ7DQorICAg ICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMDoNCisjaWYgQVZfSEFW RV9CSUdFTkRJQU4NCisgICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQ0NCwg MTAsIDEpOw0KKyNlbHNlDQorICAgICAgICBjcyA9IFhFVkVfQ1NfWUNCQ1I0NDRfMTBMRTsNCisj ZW5kaWYNCisNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDEy Og0KKyNpZiBBVl9IQVZFX0JJR0VORElBTg0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZF X0NGX1lDQkNSNDQ0LCAxMiwgMSk7DQorI2Vsc2UNCisgICAgICAgIGNzID0gWEVWRV9DU19TRVQo WEVWRV9DRl9ZQ0JDUjQ0NCwgMTIsIDApOw0KKyNlbmRpZg0KKw0KKyAgICAgICAgYnJlYWs7DQor ICAgIGNhc2UgQVZfUElYX0ZNVF9HUkFZODoNCisgICAgICAgIGNzID0gWEVWRV9DRl9ZQ0JDUjQw MDsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfR1JBWTEwOg0KKyNpZiBB Vl9IQVZFX0JJR0VORElBTg0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNS NDAwLCAxMCwgMSk7DQorI2Vsc2UNCisgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQwMF8xMExF Ow0KKyNlbmRpZg0KKw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9HUkFZ MTI6DQorI2lmIEFWX0hBVkVfQklHRU5ESUFODQorICAgICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhF VkVfQ0ZfWUNCQ1I0MDAsIDEyLCAxKTsNCisjZWxzZQ0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1lD QkNSNDAwXzEyTEU7DQorI2VuZGlmDQorDQorICAgICAgICBicmVhazsNCisgICAgZGVmYXVsdDoN CisgICAgICAgIGNzID0gWEVWRV9DRl9VTktOT1dOOw0KKyAgICAgICAgYnJlYWs7DQorICAgIH0N CisNCisgICAgcmV0dXJuIGNzOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgU3dpdGNoIGVuY29k ZXIgdG8gYnVtcGluZyBtb2RlDQorICoNCisgKiBAcGFyYW0gaWQgWEVWRSBlbmNvZGVjIGluc3Rh bmNlIGlkZW50aWZpZXINCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3Ig Y29kZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGludCBzZXR1cF9idW1waW5nKFhFVkUgaWQp DQorew0KKyAgICBpbnQgdmFsLCBzaXplOw0KKyAgICB2YWwgID0gMTsNCisgICAgc2l6ZSA9IHNp emVvZihpbnQpOw0KKyAgICBpZihYRVZFX0ZBSUxFRCh4ZXZlX2NvbmZpZyhpZCwgWEVWRV9DRkdf U0VUX0ZPUkNFX09VVCwgKHZvaWQgKikoJnZhbCksICZzaXplKSkpDQorICAgICAgICByZXR1cm4g QVZFUlJPUl9FWFRFUk5BTDsNCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIEBi cmllZiBJbml0aWFsaXplIGVYdHJhLWZhc3QgRXNzZW50aWFsIFZpZGVvIEVuY29kZXIgY29kZWMN CisgKiBDcmVhdGUgYW4gZW5jb2RlciBpbnN0YW5jZSBhbmQgYWxsb2NhdGUgYWxsIHRoZSBuZWVk ZWQgcmVzb3VyY2VzDQorICoNCisgKiBAcGFyYW0gYXZjdHggY29kZWMgY29udGV4dA0KKyAqIEBy ZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUNCisgKi8N CitzdGF0aWMgYXZfY29sZCBpbnQgbGlieGV2ZV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkN Cit7DQorICAgIFhldmVDb250ZXh0ICp4ZWN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQorICAgIHVu c2lnbmVkIGNoYXIgKmJzX2J1ZiA9IE5VTEw7DQorICAgIGludCBpOw0KKyAgICBpbnQgc2hpZnRf aCA9IDA7DQorICAgIGludCBzaGlmdF92ID0gMDsNCisgICAgWEVWRV9JTUdCICppbWdiID0gTlVM TDsNCisgICAgaW50IHJldCA9IDA7DQorDQorICAgIFhFVkVfQ0RTQyAqY2RzYyA9ICYoeGVjdHgt PmNkc2MpOw0KKw0KKyAgICBpZihhdmN0eC0+cGl4X2ZtdCAhPSBBVl9QSVhfRk1UX1lVVjQyMFAg JiYgYXZjdHgtPnBpeF9mbXQgIT0gQVZfUElYX0ZNVF9ZVVY0MjBQMTApIHsNCisgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBwaXhlbCBmb3JtYXQ6ICVzXG4iLCBh dl9nZXRfcGl4X2ZtdF9uYW1lKGF2Y3R4LT5waXhfZm10KSk7DQorICAgICAgICByZXQgPSBBVkVS Uk9SX0lOVkFMSUREQVRBOw0KKyAgICAgICAgZ290byBFUlI7DQorICAgIH0NCisNCisgICAgLyog YWxsb2NhdGUgYml0c3RyZWFtIGJ1ZmZlciAqLw0KKyAgICBic19idWYgPSAodW5zaWduZWQgY2hh ciAqKWF2X21hbGxvYyhNQVhfQlNfQlVGKTsNCisgICAgaWYoYnNfYnVmID09IE5VTEwpIHsNCisg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90IGFsbG9jYXRlIGJpdHN0 cmVhbSBidWZmZXJcbiIpOw0KKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOw0KKyAgICAg ICAgZ290byBFUlI7DQorICAgIH0NCisNCisgICAgLyogcmVhZCBjb25maWd1cmF0aW9ucyBhbmQg c2V0IHZhbHVlcyBmb3IgY3JlYXRlZCBkZXNjcmlwdG9yIChYRVZFX0NEU0MpICovDQorICAgIGlm ICgocmV0ID0gZ2V0X2NvbmYoYXZjdHgsIGNkc2MpKSAhPSAwKSB7DQorICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBnZXQgY29uZmlndXJhdGlvblxuIik7DQorICAg ICAgICBnb3RvIEVSUjsNCisgICAgfQ0KKw0KKyAgICBpZiAoKHJldCA9IGNoZWNrX2NvbmYoYXZj dHgsIGNkc2MpKSAhPSAwKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IkludmFsaWQgY29uZmlndXJhdGlvblxuIik7DQorICAgICAgICBnb3RvIEVSUjsNCisgICAgfQ0K Kw0KKyAgICAvKiBjcmVhdGUgZW5jb2RlciAqLw0KKyAgICB4ZWN0eC0+aWQgPSB4ZXZlX2NyZWF0 ZShjZHNjLCBOVUxMKTsNCisgICAgaWYoeGVjdHgtPmlkID09IE5VTEwpIHsNCisgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90IGNyZWF0ZSBYRVZFIGVuY29kZXJcbiIp Ow0KKyAgICAgICAgcmV0ID0gQVZFUlJPUl9FWFRFUk5BTDsNCisgICAgICAgIGdvdG8gRVJSOw0K KyAgICB9DQorDQorICAgIGlmKChyZXQgPSBzZXRfZXh0cmFfY29uZmlnKGF2Y3R4LCB4ZWN0eC0+ aWQsIHhlY3R4KSkhPTApIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi Q2Fubm90IHNldCBleHRyYSBjb25maWd1cmF0aW9uXG4iKTsNCisgICAgICAgIGdvdG8gRVJSOw0K KyAgICB9DQorDQorICAgIHhlY3R4LT5iaXRiLmFkZHIgPSBic19idWY7DQorICAgIHhlY3R4LT5i aXRiLmJzaXplID0gTUFYX0JTX0JVRjsNCisNCisgICAgaWYoKHJldCA9IGF2X3BpeF9mbXRfZ2V0 X2Nocm9tYV9zdWJfc2FtcGxlKGF2Y3R4LT5waXhfZm10LCAmc2hpZnRfaCwgJnNoaWZ0X3YpKSAh PSAwKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBn ZXQgIGNocm9tYSBzaGlmdFxuIik7DQorICAgICAgICBnb3RvIEVSUjsNCisgICAgfQ0KKw0KKyAg ICAvLyBZVVYgZm9ybWF0IGV4cGxhbmF0aW9uDQorICAgIC8vIHNoaWZ0X2ggPT0gMSAmJiBzaGlm dF92ID09IDEgOiBZVVY0MjANCisgICAgLy8gc2hpZnRfaCA9PSAxICYmIHNoaWZ0X3YgPT0gMCA6 IFlVVjQyMg0KKyAgICAvLyBzaGlmdF9oID09IDAgJiYgc2hpZnRfdiA9PSAwIDogWVVWNDQ0DQor ICAgIC8vDQorICAgIHhlY3R4LT53aWR0aF9jaHJvbWEgPSBBVl9DRUlMX1JTSElGVCh4ZWN0eC0+ d2lkdGhfbHVtYSwgc2hpZnRfaCk7DQorICAgIHhlY3R4LT5oZWlnaHRfY2hyb21hID0gQVZfQ0VJ TF9SU0hJRlQoeGVjdHgtPmhlaWdodF9sdW1hLCBzaGlmdF92KTsNCisNCisgICAgLyogc2V0IGRl ZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBpbWFnZSBidWZmZXIgKi8NCisgICAgaW1nYiA9ICZ4ZWN0 eC0+aW1nYjsNCisgICAgaW1nYi0+Y3MgPSB4ZXZlX2NvbG9yX3NwYWNlKGF2Y3R4LT5waXhfZm10 KTsNCisgICAgaW1nYi0+bnAgPSAzOyAvKiBvbmx5IGZvciB5dXY0MjBwLCB5dXY0MjBwbGUgKi8N CisNCisgICAgZm9yIChpID0gMDsgaSA8IGltZ2ItPm5wOyBpKyspDQorICAgICAgICBpbWdiLT54 W2ldID0gaW1nYi0+eVtpXSA9IDA7DQorDQorICAgIGltZ2ItPndbMF0gPSBpbWdiLT5hd1swXSA9 IHhlY3R4LT53aWR0aF9sdW1hOw0KKyAgICBpbWdiLT53WzFdID0gaW1nYi0+d1syXSA9IGltZ2It PmF3WzFdID0gaW1nYi0+YXdbMl0gPSB4ZWN0eC0+d2lkdGhfY2hyb21hOw0KKyAgICBpbWdiLT5o WzBdID0gaW1nYi0+YWhbMF0gPSB4ZWN0eC0+aGVpZ2h0X2x1bWE7DQorICAgIGltZ2ItPmhbMV0g PSBpbWdiLT5oWzJdID0gaW1nYi0+YWhbMV0gPSBpbWdiLT5haFsyXSA9IHhlY3R4LT5oZWlnaHRf Y2hyb21hOw0KKw0KKyAgICB4ZWN0eC0+ZW5jb2RfZnJhbWVzID0gMDsNCisgICAgeGVjdHgtPmJ5 dGVzX3RvdGFsID0gMDsNCisgICAgeGVjdHgtPnN0YXRlID0gU1RBVEVfRU5DT0RJTkc7DQorICAg IHhlY3R4LT5wYWNrZXRfY291bnQgPSAwOw0KKyAgICB4ZWN0eC0+Yml0cmF0ZSA9IDA7DQorDQor ICAgIHJldHVybiAwOw0KKw0KK0VSUjoNCisgICAgaWYoYnNfYnVmKQ0KKyAgICAgICAgYXZfZnJl ZShic19idWYpOw0KKw0KKyAgICByZXR1cm4gcmV0Ow0KK30NCisNCisvKioNCisgICogRW5jb2Rl IHJhdyBkYXRhIGZyYW1lIGludG8gRVZDIHBhY2tldA0KKyAgKg0KKyAgKiBAcGFyYW1baW5dIGF2 Y3R4IGNvZGVjIGNvbnRleHQNCisgICogQHBhcmFtW291dF0gcGt0IG91dHB1dCBBVlBhY2tldCBj b250YWluaW5nIGVuY29kZWQgZGF0YQ0KKyAgKiBAcGFyYW1baW5dIGZyYW1lIEFWRnJhbWUgY29u dGFpbmluZyB0aGUgcmF3IGRhdGEgdG8gYmUgZW5jb2RlZA0KKyAgKiBAcGFyYW1bb3V0XSBnb3Rf cGFja2V0IGVuY29kZXIgc2V0cyB0byAwIG9yIDEgdG8gaW5kaWNhdGUgdGhhdCBhDQorICAqICAg ICAgICAgICAgICAgICAgICAgICAgIG5vbi1lbXB0eSBwYWNrZXQgd2FzIHJldHVybmVkIGluIHBr dA0KKyAgKg0KKyAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBv biBmYWlsdXJlDQorICAqLw0KK3N0YXRpYyBpbnQgbGlieGV2ZV9lbmNvZGUoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LCBBVlBhY2tldCAqYXZwa3QsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBBVkZyYW1lICpmcmFtZSwgaW50ICpnb3RfcGFja2V0KQ0KK3sNCisgICAgWGV2ZUNvbnRl eHQgKnhlY3R4ID0gTlVMTDsNCisgICAgaW50ICByZXQgPSAtMTsNCisgICAgaW50IHhldmVfY3M7 DQorDQorICAgIHhlY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsNCisNCisgICAgaWYoeGVjdHgtPnN0 YXRlID09IFNUQVRFX1NLSVBQSU5HICYmIGZyYW1lICkgew0KKyAgICAgICAgeGVjdHgtPnN0YXRl ID0gU1RBVEVfRU5DT0RJTkc7IC8vIEVudGVyaW5nIGVuY29kaW5nIHByb2Nlc3MNCisgICAgfSBl bHNlIGlmKHhlY3R4LT5zdGF0ZSA9PSBTVEFURV9FTkNPRElORyAmJiBmcmFtZSA9PSBOVUxMKSB7 DQorICAgICAgICBpZiAoc2V0dXBfYnVtcGluZyh4ZWN0eC0+aWQpID09IDApDQorICAgICAgICAg ICAgeGVjdHgtPnN0YXRlID0gU1RBVEVfQlVNUElORzsgIC8vIEVudGVyaW5nIGJ1bXBpbmcgcHJv Y2Vzcw0KKyAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJGYWlsZWQgdG8gc2V0dXAgYnVtcGluZ1xuIik7DQorICAgICAgICAgICAgeGVjdHgt PnN0YXRlID0gU1RBVEVfU0tJUFBJTkc7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYo eGVjdHgtPnN0YXRlID09IFNUQVRFX0VOQ09ESU5HKSB7DQorICAgICAgICBjb25zdCBBVlBpeEZt dERlc2NyaXB0b3IgKnBpeGVsX2ZtdF9kZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldCAoZnJhbWUt PmZvcm1hdCk7DQorICAgICAgICBpZighcGl4ZWxfZm10X2Rlc2MpIHsNCisgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgcGl4ZWwgZm9ybWF0IGRlc2NyaXB0 b3IgZm9yIHBpeGVsIGZvcm1hdDogJXNcbiIsIGF2X2dldF9waXhfZm10X25hbWUoYXZjdHgtPnBp eF9mbXQpKTsNCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsNCisgICAg ICAgIH0NCisNCisgICAgICAgIHhldmVfY3MgPSB4ZXZlX2NvbG9yX3NwYWNlKGF2Y3R4LT5waXhf Zm10KTsNCisgICAgICAgIGlmKHhldmVfY3MgIT0gWEVWRV9DU19ZQ0JDUjQyMCAmJiB4ZXZlX2Nz ICE9IFhFVkVfQ1NfWUNCQ1I0MjBfMTBMRSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiSW52YWxpZCBwaXhlbCBmb3JtYXQ6ICVzXG4iLCBhdl9nZXRfcGl4X2Zt dF9uYW1lKGF2Y3R4LT5waXhfZm10KSk7DQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7DQorICAgICAgICB9DQorDQorICAgICAgICB7DQorICAgICAgICAgICAgaW50IGk7 DQorICAgICAgICAgICAgWEVWRV9JTUdCICppbWdiID0gTlVMTDsNCisNCisgICAgICAgICAgICBp bWdiID0gJnhlY3R4LT5pbWdiOw0KKw0KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbWdi LT5ucDsgaSsrKSB7DQorICAgICAgICAgICAgICAgIGltZ2ItPmFbaV0gPSBmcmFtZS0+ZGF0YVtp XTsNCisgICAgICAgICAgICAgICAgaW1nYi0+c1tpXSA9IGZyYW1lLT5saW5lc2l6ZVtpXTsNCisg ICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgaWYoeGVjdHgtPmlkID09IE5VTEwpIHsNCisg ICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIFhFVkUg ZW5jb2RlclxuIik7DQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB Ow0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBpbWdiLT50c1swXSA9IGZyYW1lLT5w dHM7DQorICAgICAgICAgICAgaW1nYi0+dHNbMV0gPSAwOw0KKw0KKyAgICAgICAgICAgIC8qIHB1 c2ggaW1hZ2UgdG8gZW5jb2RlciAqLw0KKyAgICAgICAgICAgIHJldCA9IHhldmVfcHVzaCh4ZWN0 eC0+aWQsIGltZ2IpOw0KKyAgICAgICAgICAgIGlmKFhFVkVfRkFJTEVEKHJldCkpIHsNCisgICAg ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJ4ZXZlX3B1c2goKSBmYWls ZWRcbiIpOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsNCisgICAg ICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAgaWYoeGVjdHgtPnN0YXRlID09IFNU QVRFX0VOQ09ESU5HIHx8IHhlY3R4LT5zdGF0ZSA9PSBTVEFURV9CVU1QSU5HKSB7DQorDQorICAg ICAgICAvKiBlbmNvZGluZyAqLw0KKyAgICAgICAgcmV0ID0geGV2ZV9lbmNvZGUoeGVjdHgtPmlk LCAmKHhlY3R4LT5iaXRiKSwgJih4ZWN0eC0+c3RhdCkpOw0KKyAgICAgICAgaWYoWEVWRV9GQUlM RUQocmV0KSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAieGV2 ZV9lbmNvZGUoKSBmYWlsZWRcbiIpOw0KKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgeGVjdHgtPmVuY29kX2ZyYW1lcysrOw0KKw0K KyAgICAgICAgLyogc3RvcmUgYml0c3RyZWFtICovDQorICAgICAgICBpZiAocmV0ID09IFhFVkVf T0tfT1VUX05PVF9BVkFJTEFCTEUpIHsgLy8gUmV0dXJuIE9LIGJ1dCBwaWN0dXJlIGlzIG5vdCBh dmFpbGFibGUgeWV0DQorICAgICAgICAgICAgKmdvdF9wYWNrZXQgPSAwOw0KKyAgICAgICAgICAg IHJldHVybiAwOw0KKyAgICAgICAgfSBlbHNlIGlmKHJldCA9PSBYRVZFX09LKSB7DQorICAgICAg ICAgICAgaW50IGF2X3BpY190eXBlOw0KKw0KKyAgICAgICAgICAgIGlmKHhlY3R4LT5zdGF0Lndy aXRlID4gMCkgew0KKyAgICAgICAgICAgICAgICB4ZWN0eC0+Ynl0ZXNfdG90YWwgKz0geGVjdHgt PnN0YXQud3JpdGU7DQorDQorICAgICAgICAgICAgICAgIHJldCA9IGZmX2dldF9lbmNvZGVfYnVm ZmVyKGF2Y3R4LCBhdnBrdCwgeGVjdHgtPnN0YXQud3JpdGUsIEFWX0dFVF9FTkNPREVfQlVGRkVS X0ZMQUdfUkVGKTsNCisgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsNCisgICAgICAgICAg ICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQ2FuJ3QgYWxsb2NhdGUgbWVt b3J5IGZvciBBVlBhY2tldCBkYXRhXG4iKTsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBy ZXQ7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbWVtY3B5KGF2cGt0 LT5kYXRhLCB4ZWN0eC0+Yml0Yi5hZGRyLCB4ZWN0eC0+c3RhdC53cml0ZSk7DQorDQorICAgICAg ICAgICAgICAgIGF2cGt0LT5wdHMgPSB4ZWN0eC0+Yml0Yi50c1swXTsNCisgICAgICAgICAgICAg ICAgYXZwa3QtPmR0cyA9IHhlY3R4LT5iaXRiLnRzWzFdOw0KKw0KKyAgICAgICAgICAgICAgICB4 ZWN0eC0+Yml0cmF0ZSArPSAoeGVjdHgtPnN0YXQud3JpdGUgLSB4ZWN0eC0+c3RhdC5zZWlfc2l6 ZSk7DQorDQorICAgICAgICAgICAgICAgIHN3aXRjaCh4ZWN0eC0+c3RhdC5zdHlwZSkgew0KKyAg ICAgICAgICAgICAgICBjYXNlIFhFVkVfU1RfSToNCisgICAgICAgICAgICAgICAgICAgIGF2X3Bp Y190eXBlID0gQVZfUElDVFVSRV9UWVBFX0k7DQorICAgICAgICAgICAgICAgICAgICBhdnBrdC0+ ZmxhZ3MgfD0gQVZfUEtUX0ZMQUdfS0VZOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQor ICAgICAgICAgICAgICAgIGNhc2UgWEVWRV9TVF9QOg0KKyAgICAgICAgICAgICAgICAgICAgYXZf cGljX3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfUDsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KKyAgICAgICAgICAgICAgICBjYXNlIFhFVkVfU1RfQjoNCisgICAgICAgICAgICAgICAgICAg IGF2X3BpY190eXBlID0gQVZfUElDVFVSRV9UWVBFX0I7DQorICAgICAgICAgICAgICAgICAgICBi cmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSBYRVZFX1NUX1VOS05PV046DQorICAgICAgICAg ICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVua25vd24gc2xpY2UgdHlw ZVxuIik7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsN CisgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICBmZl9zaWRlX2RhdGFfc2V0 X2VuY29kZXJfc3RhdHMoYXZwa3QsIHhlY3R4LT5zdGF0LnFwICogRkZfUVAyTEFNQkRBLCBOVUxM LCAwLCBhdl9waWNfdHlwZSk7DQorDQorICAgICAgICAgICAgICAgIHhlY3R4LT5iaXRyYXRlICs9 ICh4ZWN0eC0+c3RhdC53cml0ZSAtIHhlY3R4LT5zdGF0LnNlaV9zaXplKTsNCisNCisgICAgICAg ICAgICAgICAgKmdvdF9wYWNrZXQgPSAxOw0KKyAgICAgICAgICAgICAgICB4ZWN0eC0+cGFja2V0 X2NvdW50Kys7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfSBlbHNlIGlmIChyZXQgPT0gWEVW RV9PS19OT19NT1JFX0ZSTSkgew0KKyAgICAgICAgICAgIC8vIFJldHVybiBPSyBidXQgbm8gbW9y ZSBmcmFtZXMNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0gZWxzZSB7DQorICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHJldHVybiB2YWx1 ZTogJWRcbiIsIHJldCk7DQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7DQor ICAgICAgICB9DQorICAgIH0gZWxzZSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIlVkZWZpbmVkIGVuY29kZXIgc3RhdGVcbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0K KyAqIERlc3Ryb3kgdGhlIGVuY29kZXIgYW5kIHJlbGVhc2UgYWxsIHRoZSBhbGxvY2F0ZWQgcmVz b3VyY2VzDQorICoNCisgKiBAcGFyYW0gYXZjdHggY29kZWMgY29udGV4dA0KKyAqIEByZXR1cm4g MCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUNCisgKi8NCitzdGF0 aWMgYXZfY29sZCBpbnQgbGlieGV2ZV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQorew0K KyAgICBYZXZlQ29udGV4dCAqeGVjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KKw0KKyAgICB4ZXZl X2RlbGV0ZSh4ZWN0eC0+aWQpOw0KKw0KKyAgICBpZih4ZWN0eC0+Yml0Yi5hZGRyKQ0KKyAgICAg ICAgYXZfZnJlZSh4ZWN0eC0+Yml0Yi5hZGRyKTsgLyogcmVsZWFzZSBiaXRzdHJlYW0gYnVmZmVy ICovDQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRv ZihYZXZlQ29udGV4dCwgeCkNCisjZGVmaW5lIFZFIEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNIHwg QVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0NCisNCisvLyBFeGFtcGxlIG9mIHVzaW5nOiAuL2Zm bXBlZyAteGV2ZS1wYXJhbXMgIm09MjpxPTE3Ig0KKy8vIENvbnNpZGVyIHVzaW5nIGZvbGxvd2lu ZyBvcHRpb25zICguL2ZmbXBlZyAtLWhlbHAgZW5jb2Rlcj1saWJ4ZXZlKQ0KKy8vDQorc3RhdGlj IGNvbnN0IEFWT3B0aW9uIHhldmVfb3B0aW9uc1tdID0gew0KKyAgICB7ICJwcmVzZXQiLCAiRW5j b2RpbmcgcHJlc2V0IGZvciBzZXR0aW5nIGVuY29kaW5nIHNwZWVkIFtmYXN0LCBtZWRpdW0sIHNs b3csIHBsYWNlYm9dIiwgT0ZGU0VUKG9wX3ByZXNldCksIEFWX09QVF9UWVBFX1NUUklORywgeyAu c3RyID0gIm1lZGl1bSIgfSwgMCwgMCwgVkUgfSwNCisgICAgeyAidHVuZSIsICJUdW5laW5nIHBh cmFtZXRlciBmb3Igc3BlY2lhbCBwdXJwb3NlIG9wZXJhdGlvbiBbcHNuciwgemVyb2xhdGVuY3ld IiwgT0ZGU0VUKG9wX3R1bmUpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsgMCB9LCAwLCAwLCBWRX0s DQorICAgIHsgInFwIiwgInF1YW50aXphdGlvbiBwYXJhbWV0ZXIgcXAgPDAuLjUxPiBbZGVmYXVs dDogMzJdIiwgT0ZGU0VUKG9wX3FwKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAzMiB9LCAw LCA1MSwgVkUgfSwNCisgICAgeyAiY3JmIiwgImNvbnN0YW50IHJhdGUgZmFjdG9yIDwtMS4uNTE+ IFtkZWZhdWx0OiAzMl0iLCBPRkZTRVQob3BfY3JmKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQg PSAtMSB9LCAtMSwgNTEsIFZFIH0sDQorICAgIHsgInhldmUtcGFyYW1zIiwgIm92ZXJyaWRlIHRo ZSB4ZXZlIGNvbmZpZ3VyYXRpb24gdXNpbmcgYSA6IHNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1 ZSBwYXJhbWV0ZXJzIiwgT0ZGU0VUKHhldmVfcGFyYW1zKSwgQVZfT1BUX1RZUEVfRElDVCwgICB7 IDAgfSwgMCwgMCwgVkUgfSwNCisgICAgeyBOVUxMIH0NCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBB VkNsYXNzIHhldmVfY2xhc3MgPSB7DQorICAgIC5jbGFzc19uYW1lID0gImxpYnhldmUiLA0KKyAg ICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLA0KKyAgICAub3B0aW9uICAgICA9 IHhldmVfb3B0aW9ucywNCisgICAgLnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQs DQorfTsNCisNCisvKioNCisgKiAgbGliYXZjb2RlYyBnZW5lcmljIGdsb2JhbCBvcHRpb25zLCB3 aGljaCBjYW4gYmUgc2V0IG9uIGFsbCB0aGUgZW5jb2RlcnMgYW5kIGRlY29kZXJzDQorICogIEBz ZWUgaHR0cHM6Ly93d3cuZmZtcGVnLm9yZy9mZm1wZWctY29kZWNzLmh0bWwjQ29kZWMtT3B0aW9u cw0KKyAqLw0KK3N0YXRpYyBjb25zdCBGRkNvZGVjRGVmYXVsdCB4ZXZlX2RlZmF1bHRzW10gPSB7 DQorICAgIHsgImIiLCAiMCIgfSwgICAgICAgLy8gYml0cmF0ZQ0KKyAgICB7ICJnIiwgIjAiIH0s ICAgICAgIC8vIGdvcF9zaXplIChrZXktZnJhbWUgaW50ZXJ2YWwgMDogb25seSBvbmUgSS1mcmFt ZSBhdCB0aGUgZmlyc3QgdGltZTsgMTogZXZlcnkgZnJhbWUgaXMgY29kZWQgaW4gSS1mcmFtZSkN CisgICAgeyAiYmYiLCAiMTUifSwgICAgICAvLyBiZnJhbWVzICgwOiBubyBCLWZyYW1lcykNCisg ICAgeyAicHJvZmlsZSIsICIwIn0sICAvLyBlbmNvZGVyIGNvZGVjIHByb2ZpbGUgKDA6IGJhc2Vs aWU7IDE6IG1haW4pDQorICAgIHsgInRocmVhZHMiLCAiMCJ9LCAgLy8gbnVtYmVyIG9mIHRocmVh ZHMgdG8gYmUgdXNlZCAoMDogYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIG51bWJlciBvZiB0aHJl YWRzIHRvIHNldCkNCisgICAgeyBOVUxMIH0sDQorfTsNCisNCitjb25zdCBGRkNvZGVjIGZmX2xp YnhldmVfZW5jb2RlciA9IHsNCisgICAgLnAubmFtZSAgICAgICAgICAgICA9ICJsaWJ4ZXZlIiwN CisgICAgLnAubG9uZ19uYW1lICAgICAgICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJsaWJ4ZXZl IE1QRUctNSBFVkMiKSwNCisgICAgLnAudHlwZSAgICAgICAgICAgICA9IEFWTUVESUFfVFlQRV9W SURFTywNCisgICAgLnAuaWQgICAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX0VWQywNCisgICAg LmluaXQgICAgICAgICAgICAgICA9IGxpYnhldmVfaW5pdCwNCisgICAgRkZfQ09ERUNfRU5DT0RF X0NCKGxpYnhldmVfZW5jb2RlKSwNCisgICAgLmNsb3NlICAgICAgICAgICAgICA9IGxpYnhldmVf Y2xvc2UsDQorICAgIC5wcml2X2RhdGFfc2l6ZSAgICAgPSBzaXplb2YoWGV2ZUNvbnRleHQpLA0K KyAgICAucC5wcml2X2NsYXNzICAgICAgID0gJnhldmVfY2xhc3MsDQorICAgIC5kZWZhdWx0cyAg ICAgICAgICAgPSB4ZXZlX2RlZmF1bHRzLA0KKyAgICAucC5jYXBhYmlsaXRpZXMgICAgID0gQVZf Q09ERUNfQ0FQX0RFTEFZIHwgQVZfQ09ERUNfQ0FQX0FVVE9fVEhSRUFEUyB8IEFWX0NPREVDX0NB UF9EUjEsDQorICAgIC5wLndyYXBwZXJfbmFtZSAgICAgPSAibGlieGV2ZSIsDQorfTsNCmRpZmYg LS1naXQgYS9saWJhdmNvZGVjL3BhcnNlcnMuYyBiL2xpYmF2Y29kZWMvcGFyc2Vycy5jDQppbmRl eCA2YjQwYzE4ZDgwLi5hYTQ5Y2UxYzlhIDEwMDY0NA0KLS0tIGEvbGliYXZjb2RlYy9wYXJzZXJz LmMNCisrKyBiL2xpYmF2Y29kZWMvcGFyc2Vycy5jDQpAQCAtNDEsNiArNDEsNyBAQCBleHRlcm4g Y29uc3QgQVZDb2RlY1BhcnNlciBmZl9kdmF1ZGlvX3BhcnNlcjsNCiBleHRlcm4gY29uc3QgQVZD b2RlY1BhcnNlciBmZl9kdmJzdWJfcGFyc2VyOw0KIGV4dGVybiBjb25zdCBBVkNvZGVjUGFyc2Vy IGZmX2R2ZHN1Yl9wYXJzZXI7DQogZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfZHZkX25h dl9wYXJzZXI7DQorZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfZXZjX3BhcnNlcjsNCiBl eHRlcm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl9mbGFjX3BhcnNlcjsNCiBleHRlcm4gY29uc3Qg QVZDb2RlY1BhcnNlciBmZl9nNzIzXzFfcGFyc2VyOw0KIGV4dGVybiBjb25zdCBBVkNvZGVjUGFy c2VyIGZmX2c3MjlfcGFyc2VyOw0KLS0gDQoyLjE3LjENCg0KDQoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApm Zm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5m by9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFp bApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3Jp YmUiLgo=