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 3EA9349F8F for ; Fri, 15 Mar 2024 16:51:54 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C299D68D15A; Fri, 15 Mar 2024 18:51:51 +0200 (EET) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2D60968C068 for ; Fri, 15 Mar 2024 18:51:45 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 3F20C9C0490 for ; Fri, 15 Mar 2024 12:51:42 -0400 (EDT) Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10032) with ESMTP id j06RwYsBaUak for ; Fri, 15 Mar 2024 12:51:34 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 38DB19C5424 for ; Fri, 15 Mar 2024 12:51:34 -0400 (EDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com 38DB19C5424 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1710521494; bh=sxyAKwN9lFf3aBgYWksUS76xc8aj9XVC7hjSkojudJg=; h=From:To:Date:Message-Id:MIME-Version; b=gbO65iXIsTIHDbN50awH4qG9JWNbO65BzDeVhURmRD8wpnxGkwsStt/gCW5iO8uFT Nm1R9E1mh8pqvU6NNRfAkIq3Io7UFksMrzreirGZwFWRUub+PfFC2X1Kq4fLYZ6C0G EO2nfHWuHpJ3RfGK1G9y9FFPiL9ZhIOWWg3IPDJeRPlR3enjtAnTRuWqIfmnEhDi4p dC6sQX7LIEbAcCZr0NzznaIUiwQWUf3AIOttSD5ihcwb/EnnQrrFvBSVF1EPA1k19q Ho3uRf0VmMk9RUZI8X0UqR2i266CaG+fXDFJG0keF/B+3p8RpTdL+0ZgYqBm7ArNh8 5q+hzUezlgnpw== X-Virus-Scanned: amavis at mail.savoirfairelinux.com Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10026) with ESMTP id khJfNHJAZvNQ for ; Fri, 15 Mar 2024 12:51:34 -0400 (EDT) Received: from strix670.mtl.sfl (unknown [192.168.51.254]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 2513F9C4295 for ; Fri, 15 Mar 2024 12:51:34 -0400 (EDT) From: =?UTF-8?q?Fran=C3=A7ois-Simon=20Fauteux-Chapleau?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 15 Mar 2024 12:51:34 -0400 Message-Id: <20240315165134.527481-1-francois-simon.fauteux-chapleau@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] libavfilter: add PipeWire-based grab 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: VGhpcyBpcyBhIHJldmlzZWQgdmVyc2lvbiBvZiB0aGUgInBpcGV3aXJlZ3JhYiIgcGF0Y2ggc3Vi bWl0dGVkIGJ5CkFiaGlzaGVrIE9qaGEgYSBmZXcgbW9udGhzIGFnbzoKaHR0cHM6Ly9wYXRjaHdv cmsuZmZtcGVnLm9yZy9wcm9qZWN0L2ZmbXBlZy9wYXRjaC8yMDIzMTIyNzE2MjUwNC42OTA3MzAt MS1hYmhpc2hlay5vamhhQHNhdm9pcmZhaXJlbGludXguY29tLwpodHRwczovL3BhdGNod29yay5m Zm1wZWcub3JnL3Byb2plY3QvZmZtcGVnL3BhdGNoLzIwMjMxMjI3MTYyNTA0LjY5MDczMC0yLWFi aGlzaGVrLm9qaGFAc2F2b2lyZmFpcmVsaW51eC5jb20vCgpUaGUgbWFpbiBjaGFuZ2UgaXMgdGhh dCB0aGUgcGF0Y2ggaXMgbm93IGltcGxlbWVudGVkIGFzIGEgbGliYXZmaWx0ZXIKc291cmNlIGZp bHRlciBpbnN0ZWFkIG9mIGEgbGliYXZkZXZpY2UgaW5wdXQgZGV2aWNlLCBhcyB3YXMgcmVxdWVz dGVkIGluCmEgY29tbWVudCBvbiB0aGUgcHJldmlvdXMgdmVyc2lvbi4KClRoZXJlIGFyZSBhbHNv IHNldmVyYWwgc21hbGwgY2hhbmdlcyBtZWFudCB0byBmaXggYnVncyBvciBzaW1wbGlmeSB0aGUK Y29kZSwgYnV0IHRoZSBvdmVyYWxsIHN0cnVjdHVyZSByZW1haW5zIHRoZSBzYW1lIGFzIGJlZm9y ZTogd2UgdXNlIHRoZQpTY3JlZW5DYXN0IGludGVyZmFjZSBwcm92aWRlZCBieSBYREcgRGVza3Rv cCBQb3J0YWwgdG8gb2J0YWluIGEgZmlsZQpkZXNjcmlwdG9yLCB3aGljaCBpcyB0aGVuIHVzZWQg dG8gY3JlYXRlIGEgUGlwZVdpcmUgc3RyZWFtLiBUaGUgZGF0YSBmcm9tCnRoYXQgc3RyZWFtIGNh biB0aGVuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgZnJhbWVzIGZvciBGRm1wZWcuCgpUbyB0ZXN0IHRo ZSBwYXRjaDoKZmZwbGF5IC1mIGxhdmZpIC1pIHBpcGV3aXJlZ3JhYgoKU2lnbmVkLW9mZi1ieTog RnJhbsOnb2lzLVNpbW9uIEZhdXRldXgtQ2hhcGxlYXUgPGZyYW5jb2lzLXNpbW9uLmZhdXRldXgt Y2hhcGxlYXVAc2F2b2lyZmFpcmVsaW51eC5jb20+Ci0tLQogY29uZmlndXJlICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMTYgKwogbGliYXZmaWx0ZXIvTWFrZWZpbGUgICAgICAgICAgICB8ICAg IDEgKwogbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jICAgICAgICB8ICAgIDEgKwogbGliYXZmaWx0 ZXIvdnNyY19waXBld2lyZWdyYWIuYyB8IDEzNTcgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxMzc1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWJhdmZpbHRlci92c3JjX3BpcGV3aXJlZ3JhYi5jCgpkaWZmIC0tZ2l0IGEvY29uZmln dXJlIGIvY29uZmlndXJlCmluZGV4IDJiNGM0ZWM5YTIuLmYzMTY1MWRjZTIgMTAwNzU1Ci0tLSBh L2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTMwMSw2ICszMDEsNyBAQCBFeHRlcm5hbCBs aWJyYXJ5IHN1cHBvcnQ6CiAgIC0tZW5hYmxlLWxpYnhjYi1zaG0gICAgICBlbmFibGUgWDExIGdy YWJiaW5nIHNobSBjb21tdW5pY2F0aW9uIFthdXRvZGV0ZWN0XQogICAtLWVuYWJsZS1saWJ4Y2It eGZpeGVzICAgZW5hYmxlIFgxMSBncmFiYmluZyBtb3VzZSByZW5kZXJpbmcgW2F1dG9kZXRlY3Rd CiAgIC0tZW5hYmxlLWxpYnhjYi1zaGFwZSAgICBlbmFibGUgWDExIGdyYWJiaW5nIHNoYXBlIHJl bmRlcmluZyBbYXV0b2RldGVjdF0KKyAgLS1lbmFibGUtbGlicGlwZXdpcmUgICAgIGVuYWJsZSBz Y3JlZW4gZ3JhYmJpbmcgdXNpbmcgcGlwZXdpcmUgW2F1dG9kZXRlY3RdCiAgIC0tZW5hYmxlLWxp Ynh2aWQgICAgICAgICBlbmFibGUgWHZpZCBlbmNvZGluZyB2aWEgeHZpZGNvcmUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuYXRpdmUgTVBFRy00L1h2aWQgZW5jb2RlciBleGlzdHMgW25v XQogICAtLWVuYWJsZS1saWJ4bWwyICAgICAgICAgZW5hYmxlIFhNTCBwYXJzaW5nIHVzaW5nIHRo ZSBDIGxpYnJhcnkgbGlieG1sMiwgbmVlZGVkCkBAIC0xNzkyLDYgKzE3OTMsOCBAQCBFWFRFUk5B TF9BVVRPREVURUNUX0xJQlJBUllfTElTVD0iCiAgICAgbGlieGNiX3NobQogICAgIGxpYnhjYl9z aGFwZQogICAgIGxpYnhjYl94Zml4ZXMKKyAgICBsaWJwaXBld2lyZQorICAgIGxpYmdpb191bml4 CiAgICAgbHptYQogICAgIG1lZGlhZm91bmRhdGlvbgogICAgIG1ldGFsCkBAIC0zODE3LDYgKzM4 MjAsNyBAQCBwYWRfb3BlbmNsX2ZpbHRlcl9kZXBzPSJvcGVuY2wiCiBwYW5fZmlsdGVyX2RlcHM9 InN3cmVzYW1wbGUiCiBwZXJzcGVjdGl2ZV9maWx0ZXJfZGVwcz0iZ3BsIgogcGhhc2VfZmlsdGVy X2RlcHM9ImdwbCIKK3BpcGV3aXJlZ3JhYl9maWx0ZXJfZGVwcz0ibGlicGlwZXdpcmUgbGliZ2lv X3VuaXggcHRocmVhZHMiCiBwcDdfZmlsdGVyX2RlcHM9ImdwbCIKIHBwX2ZpbHRlcl9kZXBzPSJn cGwgcG9zdHByb2MiCiBwcmV3aXR0X29wZW5jbF9maWx0ZXJfZGVwcz0ib3BlbmNsIgpAQCAtNzEy Niw2ICs3MTMwLDE4IEBAIGlmIGVuYWJsZWQgbGlieGNiOyB0aGVuCiAgICAgZW5hYmxlZCBsaWJ4 Y2JfeGZpeGVzICYmIGNoZWNrX3BrZ19jb25maWcgbGlieGNiX3hmaXhlcyB4Y2IteGZpeGVzIHhj Yi94Zml4ZXMuaCB4Y2JfeGZpeGVzX2dldF9jdXJzb3JfaW1hZ2UKIGZpCiAKKyMgU3RhcnRpbmcg d2l0aCB2ZXJzaW9uIDAuMy41MiwgUGlwZVdpcmUncyBzcGEgbGlicmFyeSB1c2VzIHRoZSBfX0xP Q0FMRV9DX09OTFkgbWFjcm8gdG8gZGV0ZXJtaW5lCisjIHdoZXRoZXIgdGhlIGxvY2FsZV90IHR5 cGUgKGludHJvZHVjZWQgaW4gUE9TSVguMS0yMDA4KSBhbmQgc29tZSByZWxhdGVkIGZ1bmN0aW9u cyBhcmUgYXZhaWxhYmxlIChzZWUKKyMgaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL3Bp cGV3aXJlL3BpcGV3aXJlLy0vaXNzdWVzLzIzOTAgZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorIyBV bmZvcnR1bmF0ZWx5LCB0aGlzIG1hY3JvIGlzIHNwZWNpZmljIHRvIHVjbGliYywgd2hpY2ggY2Fu IGNhdXNlIGJ1aWxkIGlzc3VlcyBvbiBzeXN0ZW1zIHRoYXQgdXNlIGEKKyMgZGlmZmVyZW50IGlt cGxlbWVudGF0aW9uIG9mIGxpYmMgaWYgUE9TSVggMjAwOCBzdXBwb3J0IGlzbid0IGVuYWJsZWQg KHdoaWNoIGlzIHRoZSBjYXNlIGZvciBGRm1wZWcgY3VycmVudGx5KS4KKyMgQXMgYSB3b3JrYXJv dW5kIGZvciB0aGlzIHByb2JsZW0sIHdlIGFkZCBhIGNvbXBpbGF0aW9uIGZsYWcgdG8gZW5zdXJl IHRoYXQgX19MT0NBTEVfQ19PTkxZIGlzIGFsd2F5cyBkZWZpbmVkLgorYWRkX2NwcGZsYWdzIC1E X19MT0NBTEVfQ19PTkxZCitlbmFibGVkIGxpYnBpcGV3aXJlICYmIGNoZWNrX3BrZ19jb25maWcg bGlicGlwZXdpcmUgImxpYnBpcGV3aXJlLTAuMyA+PSAwLjMuNDAiIHBpcGV3aXJlL3BpcGV3aXJl LmggcHdfaW5pdAoraWYgZW5hYmxlZCBsaWJwaXBld2lyZTsgdGhlbgorICAgIGVuYWJsZWQgbGli Z2lvX3VuaXggJiYgY2hlY2tfcGtnX2NvbmZpZyBsaWJnaW9fdW5peCBnaW8tdW5peC0yLjAgZ2lv L2dpby5oIGdfbWFpbl9sb29wX25ldworZmkKKwogY2hlY2tfZnVuY19oZWFkZXJzICJ3aW5kb3dz LmgiIENyZWF0ZURJQlNlY3Rpb24gIiRnZGlncmFiX2luZGV2X2V4dHJhbGlicyIKIAogIyBjaGVj ayBpZiBidWlsZGluZyBmb3IgZGVza3RvcCBvciB1d3AKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVy L01ha2VmaWxlIGIvbGliYXZmaWx0ZXIvTWFrZWZpbGUKaW5kZXggOTk0ZDk3NzNiYS4uOTgyOTA0 YmUyZCAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbGliYXZmaWx0ZXIv TWFrZWZpbGUKQEAgLTYwMCw2ICs2MDAsNyBAQCBPQkpTLSQoQ09ORklHX05VTExTUkNfRklMVEVS KSAgICAgICAgICAgICAgICArPSB2c3JjX3Rlc3RzcmMubwogT0JKUy0kKENPTkZJR19PUEVOQ0xT UkNfRklMVEVSKSAgICAgICAgICAgICAgKz0gdmZfcHJvZ3JhbV9vcGVuY2wubyBvcGVuY2wubwog T0JKUy0kKENPTkZJR19QQUw3NUJBUlNfRklMVEVSKSAgICAgICAgICAgICAgKz0gdnNyY190ZXN0 c3JjLm8KIE9CSlMtJChDT05GSUdfUEFMMTAwQkFSU19GSUxURVIpICAgICAgICAgICAgICs9IHZz cmNfdGVzdHNyYy5vCitPQkpTLSQoQ09ORklHX1BJUEVXSVJFR1JBQl9GSUxURVIpICAgICAgICAg ICArPSB2c3JjX3BpcGV3aXJlZ3JhYi5vCiBPQkpTLSQoQ09ORklHX1FSRU5DT0RFX0ZJTFRFUikg ICAgICAgICAgICAgICArPSBxcmVuY29kZS5vIHRleHR1dGlscy5vCiBPQkpTLSQoQ09ORklHX1FS RU5DT0RFU1JDX0ZJTFRFUikgICAgICAgICAgICArPSBxcmVuY29kZS5vIHRleHR1dGlscy5vCiBP QkpTLSQoQ09ORklHX1JHQlRFU1RTUkNfRklMVEVSKSAgICAgICAgICAgICArPSB2c3JjX3Rlc3Rz cmMubwpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jIGIvbGliYXZmaWx0ZXIv YWxsZmlsdGVycy5jCmluZGV4IDE0OWJmNTA5OTcuLmEzYzljODkxYjAgMTAwNjQ0Ci0tLSBhL2xp YmF2ZmlsdGVyL2FsbGZpbHRlcnMuYworKysgYi9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKQEAg LTU2Nyw2ICs1NjcsNyBAQCBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdnNyY19vcGVuY2xzcmM7 CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdnNyY19xcmVuY29kZXNyYzsKIGV4dGVybiBjb25z dCBBVkZpbHRlciBmZl92c3JjX3BhbDc1YmFyczsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl92 c3JjX3BhbDEwMGJhcnM7CitleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdnNyY19waXBld2lyZWdy YWI7CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdnNyY19yZ2J0ZXN0c3JjOwogZXh0ZXJuIGNv bnN0IEFWRmlsdGVyIGZmX3ZzcmNfc2llcnBpbnNraTsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBm Zl92c3JjX3NtcHRlYmFyczsKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3ZzcmNfcGlwZXdpcmVn cmFiLmMgYi9saWJhdmZpbHRlci92c3JjX3BpcGV3aXJlZ3JhYi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjg3MGUwZjJkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJh dmZpbHRlci92c3JjX3BpcGV3aXJlZ3JhYi5jCkBAIC0wLDAgKzEsMTM1NyBAQAorLyoKKyAqIFBp cGVXaXJlIGlucHV0IGdyYWJiZXIgKFNjcmVlbkNhc3QpCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQg U2F2b2lyLWZhaXJlIExpbnV4LCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QQorICovCisKKy8qKgorICogQGZpbGUKKyAqIFBpcGVXaXJlR3JhYiB2aWRlbyBzb3VyY2UKKyAq IEBhdXRob3IgRmlyYXMgQXNoa2FyIDxmaXJhcy5hc2hrYXIgYXQgc2F2b2lyZmFpcmVsaW51eC5j b20+CisgKiBAYXV0aG9yIEFiaGlzaGVrIE9qaGEgPGFiaGlzaGVrLm9qaGEgYXQgc2F2b2lyZmFp cmVsaW51eC5jb20+CisgKiBAYXV0aG9yIEZyYW7Dp29pcy1TaW1vbiBGYXV0ZXV4LUNoYXBsZWF1 IDxmcmFuY29pcy1zaW1vbi5mYXV0ZXV4LWNoYXBsZWF1IGF0IHNhdm9pcmZhaXJlbGludXguY29t PgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5j bHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxwdGhy ZWFkLmg+CisjaW5jbHVkZSA8c3RkYXRvbWljLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j bHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvcXVl dWUuaD4KKworI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxpYmF2 dXRpbC9tYXRoZW1hdGljcy5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRl ICJsaWJhdnV0aWwvcGFyc2V1dGlscy5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC90aW1lLmgiCisj aW5jbHVkZSAibGliYXZ1dGlsL2F2c3RyaW5nLmgiCisjaW5jbHVkZSAibGliYXZmb3JtYXQvYXZm b3JtYXQuaCIKKyNpbmNsdWRlICJsaWJhdmZvcm1hdC9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxp YmF2dXRpbC9hdmFzc2VydC5oIgorI2luY2x1ZGUgImF2ZmlsdGVyLmgiCisjaW5jbHVkZSAiZm9y bWF0cy5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAidmlkZW8uaCIKKworI2lu Y2x1ZGUgPHBpcGV3aXJlL3BpcGV3aXJlLmg+CisjaW5jbHVkZSA8cGlwZXdpcmUvdGhyZWFkLWxv b3AuaD4KKyNpbmNsdWRlIDxzcGEvZGVidWcvdHlwZXMuaD4KKyNpbmNsdWRlIDxzcGEvcGFyYW0v dmlkZW8vZm9ybWF0LXV0aWxzLmg+CisjaW5jbHVkZSA8c3BhL3BhcmFtL3ZpZGVvL3Jhdy5oPgor I2luY2x1ZGUgPHNwYS9wYXJhbS92aWRlby90eXBlLWluZm8uaD4KKworI2luY2x1ZGUgPGdpby9n aW8uaD4KKyNpbmNsdWRlIDxnaW8vZ3VuaXhmZGxpc3QuaD4KKworI2lmbmRlZiBfX1VTRV9YT1BF TjJLOAorI2RlZmluZSBGX0RVUEZEX0NMT0VYRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAxMDMwIC8qIER1cGxpY2F0ZSBmaWxl IGRlc2NyaXB0b3Igd2l0aCBjbG9zZS1vbi1leGl0IHNldC4gICovCisjZW5kaWYKKworI2RlZmlu ZSBSRVFVRVNUX1BBVEggIi9vcmcvZnJlZWRlc2t0b3AvcG9ydGFsL2Rlc2t0b3AvcmVxdWVzdC8l cy8lcyIKKyNkZWZpbmUgQllURVNfUEVSX1BJWEVMIDQgLyogY3VycmVudGx5IGFsbCBmb3JtYXRz IGFzc3VtZSA0IGJ5dGVzIHBlciBwaXhlbCAqLworI2RlZmluZSBNQVhfU1BBX1BBUkFNIDQgLyog bWF4IG51bWJlciBvZiBwYXJhbXMgZm9yIHNwYSBwb2QgKi8KKworI2RlZmluZSBDVVJTT1JfTUVU QV9TSVpFKHdpZHRoLCBoZWlnaHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAoc2l6ZW9mKHN0cnVjdCBzcGFfbWV0YV9jdXJzb3IpICsgc2l6ZW9mKHN0cnVj dCBzcGFfbWV0YV9iaXRtYXApICsgICAgICAgICBcCisgICAgIHdpZHRoICogaGVpZ2h0ICogNCkK KworLyoqCisgKiBQaXBlV2lyZSBjYXB0dXJlIHR5cGVzCisgKi8KK3R5cGVkZWYgZW51bSB7Cisg ICAgREVTS1RPUF9DQVBUVVJFID0gMSwKKyAgICBXSU5ET1dfQ0FQVFVSRSA9IDIsCit9IHB3X2Nh cHR1cmVfdHlwZTsKKworLyoqCisgKiBYREcgRGVza3RvcCBQb3J0YWwgc3VwcG9ydGVkIGN1cnNv ciBtb2RlcworICovCitlbnVtIFBvcnRhbEN1cnNvck1vZGUgeworICAgIFBPUlRBTF9DVVJTT1Jf TU9ERV9ISURERU4gPSAxIDw8IDAsCisgICAgUE9SVEFMX0NVUlNPUl9NT0RFX0VNQkVEREVEID0g MSA8PCAxLAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgUGlwZXdpcmVHcmFiQ29udGV4dCB7CisgICAg Y29uc3QgQVZDbGFzcyAqY2xhc3M7CisKKyAgICBwdGhyZWFkX2NvbmRfdCBwaXBld2lyZV9pbml0 aWFsaXphdGlvbl9jb25kX3ZhcjsKKyAgICBwdGhyZWFkX211dGV4X3QgcGlwZXdpcmVfaW5pdGlh bGl6YXRpb25fbXV0ZXg7CisgICAgYXRvbWljX2ludCBwaXBld2lyZV9pbml0aWFsaXphdGlvbl9v dmVyOworCisgICAgaW50IHB3X2luaXRfY2FsbGVkOworCisgICAgcHRocmVhZF9tdXRleF90IGN1 cnJlbnRfZnJhbWVfbXV0ZXg7CisgICAgQVZGcmFtZSAqY3VycmVudF9mcmFtZTsKKworICAgIEdE QnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbjsKKyAgICBHREJ1c1Byb3h5ICpwcm94eTsKKyAgICBH Q2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlOworCisgICAgY2hhciAqc2VuZGVyX25hbWU7CisgICAg Y2hhciAqc2Vzc2lvbl9oYW5kbGU7CisKKyAgICB1aW50MzJfdCBwaXBld2lyZV9ub2RlOworICAg IGludCBwaXBld2lyZV9mZDsKKworICAgIHVpbnQzMl90IGF2YWlsYWJsZV9jdXJzb3JfbW9kZXM7 CisKKyAgICBHTWFpbkxvb3AgKmdsaWJfbWFpbl9sb29wOworICAgIHN0cnVjdCBwd190aHJlYWRf bG9vcCAqdGhyZWFkX2xvb3A7CisgICAgc3RydWN0IHB3X2NvbnRleHQgKmNvbnRleHQ7CisKKyAg ICBzdHJ1Y3QgcHdfY29yZSAqY29yZTsKKyAgICBzdHJ1Y3Qgc3BhX2hvb2sgY29yZV9saXN0ZW5l cjsKKworICAgIHN0cnVjdCBwd19zdHJlYW0gKnN0cmVhbTsKKyAgICBzdHJ1Y3Qgc3BhX2hvb2sg c3RyZWFtX2xpc3RlbmVyOworICAgIHN0cnVjdCBzcGFfdmlkZW9faW5mbyBmb3JtYXQ7CisKKyAg ICBwd19jYXB0dXJlX3R5cGUgY2FwdHVyZV90eXBlOworCisgICAgaW50IGRyYXdfbW91c2U7CisK KyAgICB1aW50MzJfdCB3aWR0aCwgaGVpZ2h0OworCisgICAgc2l6ZV90IGZyYW1lX3NpemU7Cisg ICAgdWludDhfdCBCcHA7CisgICAgZW51bSBBVlBpeGVsRm9ybWF0IGF2X3B4bF9mb3JtYXQ7CisK KyAgICBpbnQ2NF90IHRpbWVfZnJhbWU7CisgICAgaW50NjRfdCBmcmFtZV9kdXJhdGlvbjsKKwor ICAgIEFWUmF0aW9uYWwgZnJhbWVyYXRlOworCisgICAgaW50IHBvcnRhbF9lcnJvcjsKKyAgICBp bnQgcGlwZXdpcmVfZXJyb3I7Cit9IFBpcGV3aXJlR3JhYkNvbnRleHQ7CisKKy8qKgorICogREJ1 cyBtZXRob2QvZXZlbnQgbWFyc2hhbGxpbmcgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBEYnVzQ2Fs bERhdGEgeworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4OworICAgIGNoYXIgKnJlcXVlc3RfcGF0 aDsKKyAgICBndWludCBzaWduYWxfaWQ7CisgICAgZ3Vsb25nIGNhbmNlbGxlZF9pZDsKK307CisK KworI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoUGlwZXdpcmVHcmFiQ29udGV4dCwgeCkKKyNk ZWZpbmUgRkxBR1MgQVZfT1BUX0ZMQUdfRklMVEVSSU5HX1BBUkFNfEFWX09QVF9GTEFHX1ZJREVP X1BBUkFNCitzdGF0aWMgY29uc3QgQVZPcHRpb24gcGlwZXdpcmVncmFiX29wdGlvbnNbXSA9IHsK KyAgICB7ICJmcmFtZXJhdGUiLCAic2V0IHZpZGVvIGZyYW1lIHJhdGUiLCBPRkZTRVQoZnJhbWVy YXRlKSwgQVZfT1BUX1RZUEVfVklERU9fUkFURSwgeyAuc3RyID0gIm50c2MiIH0sIDAsIElOVF9N QVgsIEZMQUdTIH0sCisgICAgeyAiZHJhd19tb3VzZSIsICJkcmF3IHRoZSBtb3VzZSBwb2ludGVy IiwgT0ZGU0VUKGRyYXdfbW91c2UpLCBBVl9PUFRfVFlQRV9CT09MLCB7IC5pNjQgPSAxIH0sIDAs IDEsIEZMQUdTIH0sCisgICAgeyAiY2FwdHVyZV90eXBlIiwgInNldCB0aGUgY2FwdHVyZSB0eXBl ICgxIGZvciBzY3JlZW4sIDIgZm9yIHdpbmRvdykiLCBPRkZTRVQoY2FwdHVyZV90eXBlKSwgQVZf T1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAxIH0sIDEsIDIsIEZMQUdTIH0sCisgICAgeyAiZmQiLCAi c2V0IGZpbGUgZGVzY3JpcHRvciB0byBiZSB1c2VkIGJ5IFBpcGVXaXJlIiwgT0ZGU0VUKHBpcGV3 aXJlX2ZkKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAwIH0sIDAsIElOVF9NQVgsIEZMQUdT IH0sCisgICAgeyBOVUxMIH0sCit9OworCitBVkZJTFRFUl9ERUZJTkVfQ0xBU1MocGlwZXdpcmVn cmFiKTsKKworLyoqCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gYWxsb3cgcG9ydGFsX2luaXRfc2Ny ZWVuY2FzdCB0byBzdG9wIGFuZCByZXR1cm4gYW4gZXJyb3IKKyAqIGNvZGUgaWYgYSBEQnVzIG9w ZXJhdGlvbi9jYWxsYmFjayBmYWlscy4KKyAqCisgKiBAcGFyYW0gY3R4CisgKiBAcGFyYW0gZXJy b3IgZXJyb3IgY29kZQorICogQHBhcmFtIG1lc3NhZ2UgZXJyb3IgbWVzc2FnZQorICovCitzdGF0 aWMgdm9pZCBwb3J0YWxfYWJvcnQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIGludCBlcnJvciwgY29u c3QgY2hhciAqbWVzc2FnZSkKK3sKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBj dHgtPnByaXY7CisKKyAgICBwd19jdHgtPnBvcnRhbF9lcnJvciA9IGVycm9yOworICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFib3J0aW5nOiAlc1xuIiwgbWVzc2FnZSk7CisKKyAgICBp ZiAocHdfY3R4LT5nbGliX21haW5fbG9vcCAmJgorICAgICAgICBnX21haW5fbG9vcF9pc19ydW5u aW5nKHB3X2N0eC0+Z2xpYl9tYWluX2xvb3ApKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KHB3 X2N0eC0+Z2xpYl9tYWluX2xvb3ApOworfQorCisvKioKKyAqIENhbGxiYWNrIHRvIGhhbmRsZSBQ aXBlV2lyZSBjb3JlIGluZm8gZXZlbnRzCisgKgorICogQHBhcmFtIHVzZXJfZGF0YSBwb2ludGVy IHRvIHRoZSBmaWx0ZXIncyBBVkZpbHRlckNvbnRleHQKKyAqIEBwYXJhbSBpbmZvIHB3X2NvcmVf aW5mbworICovCitzdGF0aWMgdm9pZCBvbl9jb3JlX2luZm9fY2FsbGJhY2sodm9pZCAqdXNlcl9k YXRhLCBjb25zdCBzdHJ1Y3QgcHdfY29yZV9pbmZvICppbmZvKQoreworICAgIEFWRmlsdGVyQ29u dGV4dCAqY3R4ID0gdXNlcl9kYXRhOworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIlNl cnZlciB2ZXJzaW9uOiAlc1xuIiwgaW5mby0+dmVyc2lvbik7CisgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0lORk8sICJMaWJyYXJ5IHZlcnNpb246ICVzXG4iLCBwd19nZXRfbGlicmFyeV92ZXJzaW9u KCkpOworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIkhlYWRlciB2ZXJzaW9uOiAlc1xu IiwgcHdfZ2V0X2hlYWRlcnNfdmVyc2lvbigpKTsKK30KKworLyoqCisgKiBDYWxsYmFjayB0byBo YW5kbGUgUGlwZVdpcmUgY29yZSBkb25lIGV2ZW50cworICoKKyAqIEBwYXJhbSB1c2VyX2RhdGEg cG9pbnRlciB0byB0aGUgZmlsdGVyJ3MgQVZGaWx0ZXJDb250ZXh0CisgKiBAcGFyYW0gaWQgUGlw ZVdpcmUgb2JqZWN0IGlkIG9mIGNhbGxpbmcKKyAqIEBwYXJhbSBzZXEgUGlwZVdpcmUgb2JqZWN0 IHNlcXVlbmNlCisgKi8KK3N0YXRpYyB2b2lkIG9uX2NvcmVfZG9uZV9jYWxsYmFjayh2b2lkICp1 c2VyX2RhdGEsIHVpbnQzMl90IGlkLCBpbnQgc2VxKQoreworICAgIEFWRmlsdGVyQ29udGV4dCAq Y3R4ID0gdXNlcl9kYXRhOworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eDsKKworICAg IGlmICghY3R4IHx8ICFjdHgtPnByaXYpCisgICAgICAgIHJldHVybjsKKworICAgIHB3X2N0eCA9 IGN0eC0+cHJpdjsKKworICAgIGlmIChpZCA9PSBQV19JRF9DT1JFKQorICAgICAgICBwd190aHJl YWRfbG9vcF9zaWduYWwocHdfY3R4LT50aHJlYWRfbG9vcCwgZmFsc2UpOworfQorCisvKioKKyAq IENhbGxiYWNrIHRvIGhhbmRsZSBQaXBld2lyZSBjb3JlIGVycm9yIGV2ZW50cworICoKKyAqIEBw YXJhbSB1c2VyX2RhdGEgcG9pbnRlciB0byB0aGUgZmlsdGVyJ3MgQVZGaWx0ZXJDb250ZXh0Cisg KiBAcGFyYW0gaWQgUGlwZVdpcmUgb2JqZWN0IGlkIG9mIGNhbGxpbmcKKyAqIEBwYXJhbSBzZXEg UGlwZVdpcmUgb2JqZWN0IHNlcXVlbmNlCisgKiBAcGFyYW0gcmVzIGVycm9yIG51bWJlcgorICog QHBhcmFtIG1lc3NhZ2UgZXJyb3IgbWVzc2FnZQorICovCitzdGF0aWMgdm9pZCBvbl9jb3JlX2Vy cm9yX2NhbGxiYWNrKHZvaWQgKnVzZXJfZGF0YSwgdWludDMyX3QgaWQsIGludCBzZXEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXMsIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSB1c2VyX2RhdGE7CisgICAgUGlwZXdp cmVHcmFiQ29udGV4dCAqcHdfY3R4OworCisgICAgaWYgKCFjdHgpCisgICAgICAgIHJldHVybjsK KworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgIlBpcGVXaXJlIGNv cmUgZXJyb3I6ICVzIChpZD0ldSwgc2VxPSVkLCByZXM9JWQ6ICVzKVxuIiwKKyAgICAgICAgICAg bWVzc2FnZSwgaWQsIHNlcSwgcmVzLCBnX3N0cmVycm9yKC1yZXMpKTsKKworICAgIHB3X2N0eCA9 IGN0eC0+cHJpdjsKKyAgICBpZiAoIXB3X2N0eCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsCisgICAgICAgICAgICAgICAiSW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YVxu Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwd190aHJlYWRfbG9vcF9zaWduYWwo cHdfY3R4LT50aHJlYWRfbG9vcCwgZmFsc2UpOworCisgICAgcHdfY3R4LT5waXBld2lyZV9lcnJv ciA9IHJlczsKKyAgICBhdG9taWNfc3RvcmUoJnB3X2N0eC0+cGlwZXdpcmVfaW5pdGlhbGl6YXRp b25fb3ZlciwgMSk7CisgICAgcHRocmVhZF9jb25kX3NpZ25hbCgmcHdfY3R4LT5waXBld2lyZV9p bml0aWFsaXphdGlvbl9jb25kX3Zhcik7Cit9CisKKy8qKgorICogUGlwZVdpcmUgY29yZSBldmVu dHMgY2FsbGJhY2tzCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHdfY29yZV9ldmVudHMgY29y ZV9ldmVudHMgPSB7CisgICAgUFdfVkVSU0lPTl9DT1JFX0VWRU5UUywKKyAgICAuaW5mbyA9IG9u X2NvcmVfaW5mb19jYWxsYmFjaywKKyAgICAuZG9uZSA9IG9uX2NvcmVfZG9uZV9jYWxsYmFjaywK KyAgICAuZXJyb3IgPSBvbl9jb3JlX2Vycm9yX2NhbGxiYWNrLAorfTsKKworLyoqCisgKiBIZWxw ZXIgZnVuY3Rpb246IGNvbnZlcnQgc3BhIHZpZGVvIGZvcm1hdCB0byBBVlBpeGVsRm9ybWF0Cisg KgorICogQHBhcmFtIHZpZGVvX2Zvcm1hdCBzcGEgdmlkZW8gZm9ybWF0IHRvIGNvbnZlcnQKKyAq IEByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgQVZQaXhlbEZvcm1hdAorICovCitzdGF0aWMgZW51 bSBBVlBpeGVsRm9ybWF0CitzcGFfdmlkZW9fZm9ybWF0X3RvX2F2X3BpeGVsX2Zvcm1hdChlbnVt IHNwYV92aWRlb19mb3JtYXQgdmlkZW9fZm9ybWF0KQoreworICAgIHN3aXRjaCAodmlkZW9fZm9y bWF0KSB7CisgICAgY2FzZSBTUEFfVklERU9fRk9STUFUX1JHQkE6CisgICAgY2FzZSBTUEFfVklE RU9fRk9STUFUX1JHQng6CisgICAgICAgIHJldHVybiBBVl9QSVhfRk1UX1JHQkE7CisKKyAgICBj YXNlIFNQQV9WSURFT19GT1JNQVRfQkdSQToKKyAgICBjYXNlIFNQQV9WSURFT19GT1JNQVRfQkdS eDoKKyAgICAgICAgcmV0dXJuIEFWX1BJWF9GTVRfQkdSQTsKKworICAgIGRlZmF1bHQ6CisgICAg ICAgIHJldHVybiBBVl9QSVhfRk1UX05PTkU7CisgICAgfQorfQorCisvKioKKyAqIENhbGxiYWNr IHRvIGZyZWUgYSBEYnVzQ2FsbERhdGEgb2JqZWN0J3MgbWVtb3J5IGFuZCB1bnN1YnNjcmliZSBm cm9tIHRoZQorICogYXNzb2NpYXRlZCBkYnVzIHNpZ25hbC4KKyAqCisgKiBAcGFyYW0gcHRyX2Ri dXNfY2FsbF9kYXRhIERCdXMgbWFyc2hhbGxpbmcgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lk IGRidXNfY2FsbF9kYXRhX2ZyZWUoc3RydWN0IERidXNDYWxsRGF0YSAqcHRyX2RidXNfY2FsbF9k YXRhKQoreworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4OworICAgIFBpcGV3aXJlR3JhYkNvbnRl eHQgKnB3X2N0eDsKKworICAgIGlmICghcHRyX2RidXNfY2FsbF9kYXRhKQorICAgICAgICByZXR1 cm47CisKKyAgICBjdHggPSBwdHJfZGJ1c19jYWxsX2RhdGEtPmN0eDsKKyAgICBpZiAoIWN0eCB8 fCAhY3R4LT5wcml2KQorICAgICAgICByZXR1cm47CisKKyAgICBwd19jdHggPSBjdHgtPnByaXY7 CisKKyAgICBpZiAocHRyX2RidXNfY2FsbF9kYXRhLT5zaWduYWxfaWQpCisgICAgICAgIGdfZGJ1 c19jb25uZWN0aW9uX3NpZ25hbF91bnN1YnNjcmliZShwd19jdHgtPmNvbm5lY3Rpb24sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJfZGJ1c19jYWxsX2Rh dGEtPnNpZ25hbF9pZCk7CisKKyAgICBpZiAocHRyX2RidXNfY2FsbF9kYXRhLT5jYW5jZWxsZWRf aWQgPiAwKQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QocHdfY3R4LT5jYW5j ZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cl9kYnVzX2Nh bGxfZGF0YS0+Y2FuY2VsbGVkX2lkKTsKKworICAgIGdfY2xlYXJfcG9pbnRlcigmcHRyX2RidXNf Y2FsbF9kYXRhLT5yZXF1ZXN0X3BhdGgsIGdfZnJlZSk7CisgICAgYXZfZnJlZShwdHJfZGJ1c19j YWxsX2RhdGEpOworfQorCisvKioKKyAqIERCdXMgY2FsbGJhY2sgb2YgY2FuY2VsbGVkIGV2ZW50 cworICoKKyAqIEBwYXJhbSBjYW5jZWxsYWJsZSAobm90IHVzZWQpCisgKiBAcGFyYW0gdXNlcl9k YXRhIERCdXMgbWFyc2hhbGxpbmcgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIG9uX2NhbmNl bGxlZF9jYWxsYmFjayhHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlLCBncG9pbnRlciB1c2VyX2Rh dGEpCit7CisgICAgc3RydWN0IERidXNDYWxsRGF0YSAqcHRyX2RidXNfY2FsbF9kYXRhID0gdXNl cl9kYXRhOworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gcHRyX2RidXNfY2FsbF9kYXRhLT5j dHg7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2OworICAgIGlm ICghcHdfY3R4KQorICAgICAgICByZXR1cm47CisKKyAgICBnX2RidXNfY29ubmVjdGlvbl9jYWxs KHB3X2N0eC0+Y29ubmVjdGlvbiwgIm9yZy5mcmVlZGVza3RvcC5wb3J0YWwuRGVza3RvcCIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJfZGJ1c19jYWxsX2RhdGEtPnJlcXVlc3RfcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuZnJlZWRlc2t0b3AucG9ydGFsLlJl cXVlc3QiLCAiQ2xvc2UiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwg R19EQlVTX0NBTExfRkxBR1NfTk9ORSwgLTEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgYXZf bG9nKGN0eCwgQVZfTE9HX1dBUk5JTkcsICJQb3J0YWwgcmVxdWVzdCBjYW5jZWxsZWRcbiIpOwor CisgICAgcHdfY3R4LT5wb3J0YWxfZXJyb3IgPSBFQ0FOQ0VMRUQ7CisgICAgZ19tYWluX2xvb3Bf cXVpdChwd19jdHgtPmdsaWJfbWFpbl9sb29wKTsKK30KKworLyoqCisgKiBQaXBlV2lyZSBjYWxs YmFjayBvZiBwYXJhbWV0ZXJzIGNoYW5nZWQgZXZlbnRzCisgKgorICogQHBhcmFtIHVzZXJfZGF0 YSBEQnVzIG1hcnNoYWxsaW5nIHN0cnVjdHVyZQorICogQHBhcmFtIGlkIGNvbnRhaW5zIGNoYW4g cGFyYW0gdHlwZQorICogQHBhcmFtIHBhcmFtIHBvaW50ZXIgdG8gY2hhbmdlZCBwYXJhbSBzdHJ1 Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgb25fc3RyZWFtX3BhcmFtX2NoYW5nZWRfY2FsbGJhY2so dm9pZCAqdXNlcl9kYXRhLCB1aW50MzJfdCBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzcGFfcG9kICpwYXJhbSkKK3sKKyAgICBz dHJ1Y3Qgc3BhX3BvZF9idWlsZGVyIHBvZF9idWlsZGVyOworICAgIGNvbnN0IHN0cnVjdCBzcGFf cG9kICpwYXJhbXNbTUFYX1NQQV9QQVJBTV07CisgICAgdWludDMyX3Qgbl9wYXJhbXMgPSAwOwor ICAgIHVpbnQ4X3QgcGFyYW1zX2J1ZmZlcls0MDk2XTsKKyAgICBpbnQgcmVzdWx0OworICAgIFBp cGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eDsKKyAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IHVz ZXJfZGF0YTsKKworICAgIGlmICghY3R4IHx8ICFjdHgtPnByaXYgfHwgIXBhcmFtKQorICAgICAg ICByZXR1cm47CisKKyAgICBpZiAoaWQgIT0gU1BBX1BBUkFNX0Zvcm1hdCkgeworICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICJJZ25vcmluZyBub24t Rm9ybWF0IHBhcmFtIGNoYW5nZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBw d19jdHggPSBjdHgtPnByaXY7CisKKyAgICByZXN1bHQgPSBzcGFfZm9ybWF0X3BhcnNlKHBhcmFt LCAmcHdfY3R4LT5mb3JtYXQubWVkaWFfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZwd19jdHgtPmZvcm1hdC5tZWRpYV9zdWJ0eXBlKTsKKyAgICBpZiAocmVzdWx0IDwgMCkg eworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gcGFyc2UgbWVk aWEgdHlwZVxuIik7CisgICAgICAgIHB3X2N0eC0+cGlwZXdpcmVfZXJyb3IgPSBBVkVSUk9SKEVJ TlZBTCk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChwd19jdHgtPmZvcm1h dC5tZWRpYV90eXBlICE9IFNQQV9NRURJQV9UWVBFX3ZpZGVvIHx8CisgICAgICAgIHB3X2N0eC0+ Zm9ybWF0Lm1lZGlhX3N1YnR5cGUgIT0gU1BBX01FRElBX1NVQlRZUEVfcmF3KSB7CisgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuZXhwZWN0ZWQgbWVkaWEgdHlwZVxuIik7Cisg ICAgICAgIHB3X2N0eC0+cGlwZXdpcmVfZXJyb3IgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAg IGdvdG8gZW5kOworICAgIH0KKworICAgIHNwYV9mb3JtYXRfdmlkZW9fcmF3X3BhcnNlKHBhcmFt LCAmcHdfY3R4LT5mb3JtYXQuaW5mby5yYXcpOworCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lO Rk8sICJOZWdvdGlhdGVkIGZvcm1hdDpcbiIpOworCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lO Rk8sICJGb3JtYXQ6ICVkICglcylcbiIsCisgICAgICAgICAgIHB3X2N0eC0+Zm9ybWF0LmluZm8u cmF3LmZvcm1hdCwKKyAgICAgICAgICAgc3BhX2RlYnVnX3R5cGVfZmluZF9uYW1lKHNwYV90eXBl X3ZpZGVvX2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB3X2N0 eC0+Zm9ybWF0LmluZm8ucmF3LmZvcm1hdCkpOworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZP LCAiU2l6ZTogJWR4JWRcbiIsCisgICAgICAgICAgIHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LnNp emUud2lkdGgsCisgICAgICAgICAgIHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LnNpemUuaGVpZ2h0 KTsKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIkZyYW1lcmF0ZTogJWQvJWRcbiIsCisg ICAgICAgICAgIHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LmZyYW1lcmF0ZS5udW0sCisgICAgICAg ICAgIHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LmZyYW1lcmF0ZS5kZW5vbSk7CisKKyAgICBwd19j dHgtPndpZHRoID0gcHdfY3R4LT5mb3JtYXQuaW5mby5yYXcuc2l6ZS53aWR0aDsKKyAgICBwd19j dHgtPmhlaWdodCA9IHB3X2N0eC0+Zm9ybWF0LmluZm8ucmF3LnNpemUuaGVpZ2h0OworICAgIHB3 X2N0eC0+QnBwID0gQllURVNfUEVSX1BJWEVMOworICAgIHB3X2N0eC0+ZnJhbWVfc2l6ZSA9IHB3 X2N0eC0+d2lkdGggKiBwd19jdHgtPmhlaWdodCAqIHB3X2N0eC0+QnBwOworICAgIGlmIChwd19j dHgtPmZyYW1lX3NpemUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFID4gSU5UX01BWCkg eworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJDYXB0dXJlZCBhcmVhIGlzIHRv byBsYXJnZVxuIik7CisgICAgICAgIHB3X2N0eC0+cGlwZXdpcmVfZXJyb3IgPSBBVkVSUk9SKEVJ TlZBTCk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHB3X2N0eC0+YXZfcHhsX2Zv cm1hdCA9CisgICAgICAgIHNwYV92aWRlb19mb3JtYXRfdG9fYXZfcGl4ZWxfZm9ybWF0KHB3X2N0 eC0+Zm9ybWF0LmluZm8ucmF3LmZvcm1hdCk7CisgICAgaWYgKHB3X2N0eC0+YXZfcHhsX2Zvcm1h dCA9PSBBVl9QSVhfRk1UX05PTkUpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LAorICAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIGJ1ZmZlciBmb3JtYXQ6ICVkXG4iLCBwd19j dHgtPmZvcm1hdC5pbmZvLnJhdy5mb3JtYXQpOworICAgICAgICBwd19jdHgtPnBpcGV3aXJlX2Vy cm9yID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICAv KiBWaWRlbyBjcm9wICovCisgICAgcG9kX2J1aWxkZXIgPSBTUEFfUE9EX0JVSUxERVJfSU5JVChw YXJhbXNfYnVmZmVyLCBzaXplb2YocGFyYW1zX2J1ZmZlcikpOworICAgIHBhcmFtc1tuX3BhcmFt cysrXSA9IHNwYV9wb2RfYnVpbGRlcl9hZGRfb2JqZWN0KAorICAgICAgICAmcG9kX2J1aWxkZXIs IFNQQV9UWVBFX09CSkVDVF9QYXJhbU1ldGEsIFNQQV9QQVJBTV9NZXRhLAorICAgICAgICBTUEFf UEFSQU1fTUVUQV90eXBlLCBTUEFfUE9EX0lkKFNQQV9NRVRBX1ZpZGVvQ3JvcCksCisgICAgICAg IFNQQV9QQVJBTV9NRVRBX3NpemUsIFNQQV9QT0RfSW50KHNpemVvZihzdHJ1Y3Qgc3BhX21ldGFf cmVnaW9uKSkpOworCisgICAgLyogQ3Vyc29yICovCisgICAgcGFyYW1zW25fcGFyYW1zKytdID0g c3BhX3BvZF9idWlsZGVyX2FkZF9vYmplY3QoCisgICAgICAgICZwb2RfYnVpbGRlciwgU1BBX1RZ UEVfT0JKRUNUX1BhcmFtTWV0YSwgU1BBX1BBUkFNX01ldGEsCisgICAgICAgIFNQQV9QQVJBTV9N RVRBX3R5cGUsIFNQQV9QT0RfSWQoU1BBX01FVEFfQ3Vyc29yKSwgU1BBX1BBUkFNX01FVEFfc2l6 ZSwKKyAgICAgICAgU1BBX1BPRF9DSE9JQ0VfUkFOR0VfSW50KENVUlNPUl9NRVRBX1NJWkUoNjQs IDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUlNPUl9NRVRBX1NJWkUo MSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDVVJTT1JfTUVUQV9TSVpF KDEwMjQsIDEwMjQpKSk7CisKKyAgICAvKiBCdWZmZXIgb3B0aW9ucyAqLworICAgIHBhcmFtc1tu X3BhcmFtcysrXSA9IHNwYV9wb2RfYnVpbGRlcl9hZGRfb2JqZWN0KAorICAgICAgICAmcG9kX2J1 aWxkZXIsIFNQQV9UWVBFX09CSkVDVF9QYXJhbUJ1ZmZlcnMsIFNQQV9QQVJBTV9CdWZmZXJzLAor ICAgICAgICBTUEFfUEFSQU1fQlVGRkVSU19kYXRhVHlwZSwKKyAgICAgICAgU1BBX1BPRF9JbnQo KDEgPDwgU1BBX0RBVEFfTWVtUHRyKSB8ICgxIDw8IFNQQV9EQVRBX01lbUZkKSkpOworCisgICAg LyogTWV0YSBoZWFkZXIgKi8KKyAgICBwYXJhbXNbbl9wYXJhbXMrK10gPSBzcGFfcG9kX2J1aWxk ZXJfYWRkX29iamVjdCgKKyAgICAgICAgJnBvZF9idWlsZGVyLCBTUEFfVFlQRV9PQkpFQ1RfUGFy YW1NZXRhLCBTUEFfUEFSQU1fTWV0YSwKKyAgICAgICAgU1BBX1BBUkFNX01FVEFfdHlwZSwgU1BB X1BPRF9JZChTUEFfTUVUQV9IZWFkZXIpLAorICAgICAgICBTUEFfUEFSQU1fTUVUQV9zaXplLAor ICAgICAgICBTUEFfUE9EX0ludChzaXplb2Yoc3RydWN0IHNwYV9tZXRhX2hlYWRlcikpKTsKKwor ICAgIHB3X3N0cmVhbV91cGRhdGVfcGFyYW1zKHB3X2N0eC0+c3RyZWFtLCBwYXJhbXMsIG5fcGFy YW1zKTsKKworZW5kOgorICAgIC8vIFNpZ25hbCBwaXBld2lyZWdyYWJfaW5pdCB0aGF0IFBpcGVX aXJlIGluaXRpYWxpemF0aW9uIGlzIG92ZXIgKGVpdGhlcgorICAgIC8vIGJlY2F1c2UgaXQgd2Fz IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgb3IgYmVjYXVzZSB0aGVyZSB3YXMgYW4gZXJyb3IsIGlu CisgICAgLy8gd2hpY2ggY2FzZSBwd19jdHgtPnBpcGV3aXJlX2Vycm9yIHdpbGwgaGF2ZSBiZWVu IHNldCB0byBhIG5vbnplcm8gdmFsdWUpLgorICAgIGF0b21pY19zdG9yZSgmcHdfY3R4LT5waXBl d2lyZV9pbml0aWFsaXphdGlvbl9vdmVyLCAxKTsKKyAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZw d19jdHgtPnBpcGV3aXJlX2luaXRpYWxpemF0aW9uX2NvbmRfdmFyKTsKK30KKworLyoqCisgKiBQ aXBlV2lyZSBjYWxsYmFjayBvZiBzdGF0ZSBjaGFuZ2VkIGV2ZW50cworICoKKyAqIEBwYXJhbSB1 c2VyX2RhdGEgREJ1cyBtYXJzaGFsbGluZyBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBvbGQgUGlwZVdp cmUgc3RyZWFtIG9sZCBzdGF0ZQorICogQHBhcmFtIHN0YXRlIFBpcGVXaXJlIHN0cmVhbSBjdXJy ZW50IHN0YXRlCisgKiBAcGFyYW0gZXJyb3IgcmVjZWl2ZWQgZXJyb3IgaW5mb3JtYXRpb24KKyAq Lworc3RhdGljIHZvaWQgb25fc3RyZWFtX3N0YXRlX2NoYW5nZWRfY2FsbGJhY2sodm9pZCAqdXNl cl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51 bSBwd19zdHJlYW1fc3RhdGUgb2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZW51bSBwd19zdHJlYW1fc3RhdGUgc3RhdGUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcikKK3sKKyAgICBB VkZpbHRlckNvbnRleHQgKmN0eCA9IHVzZXJfZGF0YTsKKyAgICBpZiAoIWN0eCkKKyAgICAgICAg cmV0dXJuOworCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICJzdHJlYW0gc3RhdGU6IFwi JXNcIlxuIiwKKyAgICAgICAgICAgcHdfc3RyZWFtX3N0YXRlX2FzX3N0cmluZyhzdGF0ZSkpOwor fQorCisvKioKKyAqIEZpbmQgbW9zdCByZWNlbnQgYnVmZmVyIHJlY2VpdmVkIGluIGEgUGlwZVdp cmUgc3RyZWFtCisgKgorICogQHBhcmFtIHN0cmVhbSBzdHJlYW0gdG8gZ2V0IGJ1ZmZlciBmcm9t CisgKiBAcmV0dXJuIG1vc3QgcmVjZW50IGJ1ZmZlciBpbiB0aGUgc3RyZWFtCisgKi8KK3N0YXRp YyBzdHJ1Y3QgcHdfYnVmZmVyICpmaW5kX21vc3RfcmVjZW50X2J1ZmZlcl9hbmRfcmVjeWNsZV9v bGRlcnMoc3RydWN0IHB3X3N0cmVhbSAqc3RyZWFtKQoreworICAgIHN0cnVjdCBwd19idWZmZXIg KnB3X2J1ZiA9IE5VTEw7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgc3RydWN0IHB3X2J1ZmZl ciAqYXV4ID0gcHdfc3RyZWFtX2RlcXVldWVfYnVmZmVyKHN0cmVhbSk7CisgICAgICAgIGlmICgh YXV4KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChwd19idWYpCisgICAgICAgICAg ICBwd19zdHJlYW1fcXVldWVfYnVmZmVyKHN0cmVhbSwgcHdfYnVmKTsKKyAgICAgICAgcHdfYnVm ID0gYXV4OworICAgIH0KKyAgICByZXR1cm4gcHdfYnVmOworfQorCisvKioKKyAqIE91ciBkYXRh IHByb2Nlc3NpbmcgZnVuY3Rpb24KKyAqCisgKiBAcGFyYW0gdXNlcl9kYXRhIERCdXMgbWFyc2hh bGxpbmcgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIG9uX3N0cmVhbV9wcm9jZXNzX2NhbGxi YWNrKHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgICBzdHJ1Y3Qgc3BhX2J1ZmZlciAqc3BhX2J1ZiA9 IE5VTEw7CisgICAgc3RydWN0IHB3X2J1ZmZlciAqcHdfYnVmID0gTlVMTDsKKyAgICB1aW50OF90 ICptYXAgPSBOVUxMOworICAgIHZvaWQgKnNkYXRhID0gTlVMTDsKKyAgICBzdHJ1Y3Qgc3BhX21l dGFfaGVhZGVyICpoZWFkZXIgPSBOVUxMOworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gdXNl cl9kYXRhOworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IE5VTEw7CisKKyAgICBp ZiAoIWN0eCB8fCAhY3R4LT5wcml2KQorICAgICAgICByZXR1cm47CisKKyAgICBwd19jdHggPSBj dHgtPnByaXY7CisKKyAgICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIHB3X2N0eC0+Y3VycmVudF9m cmFtZSB0byBoYXZlIGJlZW4gYWxsb2NhdGVkIGJlZm9yZQorICAgIC8vIHdlIGNhbiB1c2UgaXQg dG8gZ2V0IGZyYW1lcyBmcm9tIHRoZSBQaXBlV2lyZSB0aHJlYWQgdG8gRkZtcGVnCisgICAgcHRo cmVhZF9tdXRleF9sb2NrKCZwd19jdHgtPmN1cnJlbnRfZnJhbWVfbXV0ZXgpOworICAgIGlmICgh cHdfY3R4LT5jdXJyZW50X2ZyYW1lKSB7CisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZw d19jdHgtPmN1cnJlbnRfZnJhbWVfbXV0ZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwd19jdHgtPmN1cnJlbnRfZnJhbWVfbXV0ZXgpOworCisg ICAgLy8gR2V0IGEgYnVmZmVyIGZyb20gUGlwZVdpcmUKKyAgICBwd19idWYgPSBmaW5kX21vc3Rf cmVjZW50X2J1ZmZlcl9hbmRfcmVjeWNsZV9vbGRlcnMocHdfY3R4LT5zdHJlYW0pOworICAgIGlm ICghcHdfYnVmKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIk91dCBvZiBi dWZmZXJzXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENoZWNrIHdoZXRo ZXIgdGhlIGJ1ZmZlciBpcyBjb3JydXB0ZWQKKyAgICBzcGFfYnVmID0gcHdfYnVmLT5idWZmZXI7 CisgICAgaGVhZGVyID0gc3BhX2J1ZmZlcl9maW5kX21ldGFfZGF0YShzcGFfYnVmLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUEFfTUVUQV9IZWFkZXIsIHNpemVvZigq aGVhZGVyKSk7CisgICAgaWYgKGhlYWRlciAmJiAoaGVhZGVyLT5mbGFncyAmIFNQQV9NRVRBX0hF QURFUl9GTEFHX0NPUlJVUFRFRCkpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiQ29ycnVwdGVkIFBpcGVXaXJlIGJ1ZmZlciIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9 CisKKyAgICAvLyBHZXQgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIncyBkYXRhCisgICAgaWYgKHNw YV9idWYtPmRhdGFzWzBdLnR5cGUgPT0gU1BBX0RBVEFfTWVtRmQgKSB7CisgICAgICAgIG1hcCA9 IG1tYXAoTlVMTCwgc3BhX2J1Zi0+ZGF0YXNbMF0ubWF4c2l6ZSArIHNwYV9idWYtPmRhdGFzWzBd Lm1hcG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBz cGFfYnVmLT5kYXRhc1swXS5mZCwgMCk7CisgICAgICAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkg eworICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAibW1hcCBmYWlsZWQhIGVy cm9yICVzXG4iLCBnX3N0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAg ICAgICAgfQorICAgICAgICBzZGF0YSA9IFNQQV9QVFJPRkYobWFwLCBzcGFfYnVmLT5kYXRhc1sw XS5tYXBvZmZzZXQsIHVpbnQ4X3QpOworICAgIH0gZWxzZSBpZiAoc3BhX2J1Zi0+ZGF0YXNbMF0u dHlwZSA9PSBTUEFfREFUQV9NZW1QdHIpIHsKKyAgICAgICAgaWYgKHNwYV9idWYtPmRhdGFzWzBd LmRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAi Tm8gZGF0YVxuIik7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorICAgICAgICBt YXAgPSBOVUxMOworICAgICAgICBzZGF0YSA9IHNwYV9idWYtPmRhdGFzWzBdLmRhdGE7CisgICAg fSBlbHNlIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQnVmZmVyIGlzIG5v dCB2YWxpZFxuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIC8vIFVwZGF0ZSBj dXJyZW50X2ZyYW1lIHdpdGggdGhlIG5ldyBkYXRhCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZw d19jdHgtPmN1cnJlbnRfZnJhbWVfbXV0ZXgpOworICAgIG1lbWNweShwd19jdHgtPmN1cnJlbnRf ZnJhbWUtPmRhdGFbMF0sIHNkYXRhLCBwd19jdHgtPmZyYW1lX3NpemUpOworICAgIHB0aHJlYWRf bXV0ZXhfdW5sb2NrKCZwd19jdHgtPmN1cnJlbnRfZnJhbWVfbXV0ZXgpOworCisgICAgLy8gQ2xl YW51cAorICAgIGlmIChzcGFfYnVmLT5kYXRhc1swXS50eXBlID09IFNQQV9EQVRBX01lbUZkKQor ICAgICAgICBtdW5tYXAobWFwLCBzcGFfYnVmLT5kYXRhc1swXS5tYXhzaXplICsgc3BhX2J1Zi0+ ZGF0YXNbMF0ubWFwb2Zmc2V0KTsKK2VuZDoKKyAgICBwd19zdHJlYW1fcXVldWVfYnVmZmVyKHB3 X2N0eC0+c3RyZWFtLCBwd19idWYpOworICAgIHJldHVybjsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBwd19zdHJlYW1fZXZlbnRzIHN0cmVhbV9ldmVudHMgPSB7CisgICAgUFdfVkVSU0lPTl9T VFJFQU1fRVZFTlRTLAorICAgIC5zdGF0ZV9jaGFuZ2VkID0gb25fc3RyZWFtX3N0YXRlX2NoYW5n ZWRfY2FsbGJhY2ssCisgICAgLnBhcmFtX2NoYW5nZWQgPSBvbl9zdHJlYW1fcGFyYW1fY2hhbmdl ZF9jYWxsYmFjaywKKyAgICAucHJvY2VzcyA9IG9uX3N0cmVhbV9wcm9jZXNzX2NhbGxiYWNrLAor fTsKKworc3RhdGljIHN0cnVjdCBEYnVzQ2FsbERhdGEgKnN1YnNjcmliZV90b19zaWduYWwoQVZG aWx0ZXJDb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR0RCdXNTaWduYWxDYWxsYmFjayBjYWxsYmFjaykKK3sKKyAg ICBzdHJ1Y3QgRGJ1c0NhbGxEYXRhICpwdHJfZGJ1c19jYWxsX2RhdGE7CisgICAgUGlwZXdpcmVH cmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2OworCisgICAgcHRyX2RidXNfY2FsbF9kYXRh ID0gKHN0cnVjdCBEYnVzQ2FsbERhdGEgKilhdl9tYWxsb2N6KHNpemVvZihzdHJ1Y3QgRGJ1c0Nh bGxEYXRhKSk7CisgICAgaWYgKCFwdHJfZGJ1c19jYWxsX2RhdGEpCisgICAgICAgIHJldHVybiBO VUxMOworCisgICAgcHRyX2RidXNfY2FsbF9kYXRhLT5jdHggPSBjdHg7CisgICAgcHRyX2RidXNf Y2FsbF9kYXRhLT5yZXF1ZXN0X3BhdGggPSBnX3N0cmR1cChwYXRoKTsKKyAgICBwdHJfZGJ1c19j YWxsX2RhdGEtPmNhbmNlbGxlZF9pZCA9CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocHdfY3R4 LT5jYW5jZWxsYWJsZSwgImNhbmNlbGxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR19D QUxMQkFDSyhvbl9jYW5jZWxsZWRfY2FsbGJhY2spLAorICAgICAgICAgICAgICAgICAgICAgICAg IHB0cl9kYnVzX2NhbGxfZGF0YSAvKiB1c2VyX2RhdGEgKi8pOworICAgIHB0cl9kYnVzX2NhbGxf ZGF0YS0+c2lnbmFsX2lkID0gZ19kYnVzX2Nvbm5lY3Rpb25fc2lnbmFsX3N1YnNjcmliZSgKKyAg ICAgICAgcHdfY3R4LT5jb25uZWN0aW9uLCAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5EZXNrdG9w IiAvKnNlbmRlciovLAorICAgICAgICAib3JnLmZyZWVkZXNrdG9wLnBvcnRhbC5SZXF1ZXN0IiAv KmludGVyZmFjZV9uYW1lKi8sCisgICAgICAgICJSZXNwb25zZSIgLyptZW1iZXI6IGRidXMgc2ln bmFsIG5hbWUqLywKKyAgICAgICAgcHRyX2RidXNfY2FsbF9kYXRhLT5yZXF1ZXN0X3BhdGggLypv YmplY3RfcGF0aCovLCBOVUxMLAorICAgICAgICBHX0RCVVNfU0lHTkFMX0ZMQUdTX05PX01BVENI X1JVTEUsIGNhbGxiYWNrLCBwdHJfZGJ1c19jYWxsX2RhdGEsIE5VTEwpOworCisgICAgcmV0dXJu IHB0cl9kYnVzX2NhbGxfZGF0YTsKK30KKworc3RhdGljIGludCBwbGF5X3BpcGV3aXJlX3N0cmVh bShBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBpbnQgcmV0OworICAgIGNvbnN0IHN0cnVj dCBzcGFfcG9kICpwdHJfc3BhX3BvZDsKKyAgICB1aW50OF90IGJ1ZmZlcls0MDk2XTsKKyAgICBz dHJ1Y3Qgc3BhX3BvZF9idWlsZGVyIHNwYV9wb2RfYmxkciA9IHsKKyAgICAgICAgMCwKKyAgICB9 OworCisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2OworCisgICAg cHdfaW5pdChOVUxMLCBOVUxMKTsKKyAgICBwd19jdHgtPnB3X2luaXRfY2FsbGVkID0gMTsKKwor ICAgIHB3X2N0eC0+dGhyZWFkX2xvb3AgPQorICAgICAgICBwd190aHJlYWRfbG9vcF9uZXcoInRo cmVhZCBsb29wIiwgTlVMTCk7CisgICAgaWYgKCFwd19jdHgtPnRocmVhZF9sb29wKSB7CisgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgInB3X3RocmVhZF9sb29wX25ldyBmYWlsZWRc biIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKworICAgIHB3X2N0 eC0+Y29udGV4dCA9CisgICAgICAgIHB3X2NvbnRleHRfbmV3KHB3X3RocmVhZF9sb29wX2dldF9s b29wKHB3X2N0eC0+dGhyZWFkX2xvb3ApLCBOVUxMLCAwKTsKKyAgICBpZiAoIXB3X2N0eC0+Y29u dGV4dCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJwd19jb250ZXh0X25l dyBmYWlsZWRcbiIpOworICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGdv dG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAocHdfdGhyZWFkX2xvb3Bfc3RhcnQocHdfY3R4LT50 aHJlYWRfbG9vcCkgPCAwKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgInB3 X3RocmVhZF9sb29wX3N0YXJ0IGZhaWxlZFxuIik7CisgICAgICAgIHJldCA9IEFWRVJST1IoRUZB VUxUKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHB3X3RocmVhZF9sb29wX2xv Y2socHdfY3R4LT50aHJlYWRfbG9vcCk7CisKKyAgICAvLyBDb3JlCisgICAgcHdfY3R4LT5jb3Jl ID0KKyAgICAgICAgcHdfY29udGV4dF9jb25uZWN0X2ZkKHB3X2N0eC0+Y29udGV4dCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsKHB3X2N0eC0+cGlwZXdpcmVfZmQsIEZfRFVQ RkRfQ0xPRVhFQywgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsK KyAgICBpZiAoIXB3X2N0eC0+Y29yZSkgeworICAgICAgICByZXQgPSBBVkVSUk9SKGVycm5vKTsK KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAicHdfY29udGV4dF9jb25uZWN0X2Zk IGZhaWxlZFxuIik7CisgICAgICAgIHB3X3RocmVhZF9sb29wX3VubG9jayhwd19jdHgtPnRocmVh ZF9sb29wKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHB3X2NvcmVfYWRkX2xp c3RlbmVyKHB3X2N0eC0+Y29yZSwgJnB3X2N0eC0+Y29yZV9saXN0ZW5lciwgJmNvcmVfZXZlbnRz LAorICAgICAgICAgICAgICAgICAgICAgICAgIGN0eCAvKiB1c2VyX2RhdGEgKi8pOworCisgICAg Ly8gU3RyZWFtCisgICAgcHdfY3R4LT5zdHJlYW0gPSBwd19zdHJlYW1fbmV3KAorICAgICAgICBw d19jdHgtPmNvcmUsICJ3YXlsYW5kIGdyYWIiLAorICAgICAgICBwd19wcm9wZXJ0aWVzX25ldyhQ V19LRVlfTUVESUFfVFlQRSwgIlZpZGVvIiwgUFdfS0VZX01FRElBX0NBVEVHT1JZLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAiQ2FwdHVyZSIsIFBXX0tFWV9NRURJQV9ST0xFLCAiU2NyZWVu IiwgTlVMTCkpOworCisgICAgaWYgKCFwd19jdHgtPnN0cmVhbSkgeworICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJwd19zdHJlYW1fbmV3IGZhaWxlZFxuIik7CisgICAgICAgIHJl dCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgcHdfdGhyZWFkX2xvb3BfdW5sb2NrKHB3X2N0 eC0+dGhyZWFkX2xvb3ApOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgcHdfc3Ry ZWFtX2FkZF9saXN0ZW5lcihwd19jdHgtPnN0cmVhbSwgJnB3X2N0eC0+c3RyZWFtX2xpc3RlbmVy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cmVhbV9ldmVudHMsIGN0eCAvKiB1c2Vy X2RhdGEgKi8pOworCisgICAgLy8gU3RyZWFtIHBhcmFtZXRlcnMKKyAgICBzcGFfcG9kX2JsZHIg PSBTUEFfUE9EX0JVSUxERVJfSU5JVChidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgICBwdHJf c3BhX3BvZCA9IHNwYV9wb2RfYnVpbGRlcl9hZGRfb2JqZWN0KAorICAgICAgICAmc3BhX3BvZF9i bGRyLCBTUEFfVFlQRV9PQkpFQ1RfRm9ybWF0LCBTUEFfUEFSQU1fRW51bUZvcm1hdCwKKyAgICAg ICAgU1BBX0ZPUk1BVF9tZWRpYVR5cGUsIFNQQV9QT0RfSWQoU1BBX01FRElBX1RZUEVfdmlkZW8p LAorICAgICAgICBTUEFfRk9STUFUX21lZGlhU3VidHlwZSwgU1BBX1BPRF9JZChTUEFfTUVESUFf U1VCVFlQRV9yYXcpLAorICAgICAgICBTUEFfRk9STUFUX1ZJREVPX2Zvcm1hdCwKKyAgICAgICAg U1BBX1BPRF9DSE9JQ0VfRU5VTV9JZCg0LCBTUEFfVklERU9fRk9STUFUX1JHQkEsIFNQQV9WSURF T19GT1JNQVRfUkdCeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUEFfVklERU9f Rk9STUFUX0JHUngsIFNQQV9WSURFT19GT1JNQVRfQkdSQSksCisgICAgICAgIFNQQV9GT1JNQVRf VklERU9fc2l6ZSwKKyAgICAgICAgU1BBX1BPRF9DSE9JQ0VfUkFOR0VfUmVjdGFuZ2xlKCZTUEFf UkVDVEFOR0xFKDMyMCwgMjQwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZTUEFfUkVDVEFOR0xFKDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJlNQQV9SRUNUQU5HTEUoNDA5NiwgNDA5NikpLAorICAgICAgICBTUEFfRk9STUFU X1ZJREVPX2ZyYW1lcmF0ZSwKKyAgICAgICAgU1BBX1BPRF9DSE9JQ0VfUkFOR0VfRnJhY3Rpb24o CisgICAgICAgICAgICAmU1BBX0ZSQUNUSU9OKHB3X2N0eC0+ZnJhbWVyYXRlLm51bSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgcHdfY3R4LT5mcmFtZXJhdGUuZGVuKSwKKyAgICAgICAgICAg ICZTUEFfRlJBQ1RJT04oMCwgMSksICZTUEFfRlJBQ1RJT04oMTQ0LCAxKSkpOworCisgICAgcmV0 ID0gcHdfc3RyZWFtX2Nvbm5lY3QoCisgICAgICAgIHB3X2N0eC0+c3RyZWFtLCBQV19ESVJFQ1RJ T05fSU5QVVQsIHB3X2N0eC0+cGlwZXdpcmVfbm9kZSwKKyAgICAgICAgUFdfU1RSRUFNX0ZMQUdf QVVUT0NPTk5FQ1QgfCBQV19TVFJFQU1fRkxBR19NQVBfQlVGRkVSUywgJnB0cl9zcGFfcG9kLCAx KTsKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAicHdfc3RyZWFtX2Nvbm5lY3QgZmFpbGVkXG4iKTsKKyAgICAgICAgcHdfdGhyZWFkX2xvb3Bf dW5sb2NrKHB3X2N0eC0+dGhyZWFkX2xvb3ApOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQor CisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sICJTdGFydGluZyBzY3JlZW4gY2FwdHVyZSAu Li5cbiIpOworICAgIHB3X3RocmVhZF9sb29wX3VubG9jayhwd19jdHgtPnRocmVhZF9sb29wKTsK KyAgICByZXR1cm4gMDsKKworZmFpbDoKKyAgICBpZiAocHdfY3R4LT5jb3JlKSB7CisgICAgICAg IHB3X2NvcmVfZGlzY29ubmVjdChwd19jdHgtPmNvcmUpOworICAgICAgICBwd19jdHgtPmNvcmUg PSBOVUxMOworICAgIH0KKyAgICBpZiAocHdfY3R4LT5jb250ZXh0KSB7CisgICAgICAgIHB3X2Nv bnRleHRfZGVzdHJveShwd19jdHgtPmNvbnRleHQpOworICAgICAgICBwd19jdHgtPmNvbnRleHQg PSBOVUxMOworICAgIH0KKyAgICBpZiAocHdfY3R4LT50aHJlYWRfbG9vcCkgeworICAgICAgICBw d190aHJlYWRfbG9vcF9kZXN0cm95KHB3X2N0eC0+dGhyZWFkX2xvb3ApOworICAgICAgICBwd19j dHgtPnRocmVhZF9sb29wID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitz dGF0aWMgdm9pZCBwb3J0YWxfb3Blbl9waXBld2lyZV9yZW1vdGUoQVZGaWx0ZXJDb250ZXh0ICpj dHgpCit7CisgICAgR1VuaXhGRExpc3QqIGZkX2xpc3QgPSBOVUxMOworICAgIEdWYXJpYW50KiBy ZXN1bHQgPSBOVUxMOworICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOworICAgIGludCBmZF9pbmRl eDsKKyAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlcjsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0 ICpwd19jdHggPSBjdHgtPnByaXY7CisKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9pbml0KCZidWls ZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKworICAgIHJlc3VsdCA9IGdfZGJ1c19wcm94 eV9jYWxsX3dpdGhfdW5peF9mZF9saXN0X3N5bmMoCisgICAgICAgIHB3X2N0eC0+cHJveHksICJP cGVuUGlwZVdpcmVSZW1vdGUiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIob2F7c3Z9KSIsIHB3 X2N0eC0+c2Vzc2lvbl9oYW5kbGUsICZidWlsZGVyKSwKKyAgICAgICAgR19EQlVTX0NBTExfRkxB R1NfTk9ORSwgLTEsIE5VTEwsICZmZF9saXN0LCBwd19jdHgtPmNhbmNlbGxhYmxlLAorICAgICAg ICAmZXJyb3IpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgZ290byBmYWlsOworCisgICAgZ192 YXJpYW50X2dldChyZXN1bHQsICIoaCkiLCAmZmRfaW5kZXgpOworICAgIGdfdmFyaWFudF91bnJl ZihyZXN1bHQpOworCisgICAgcHdfY3R4LT5waXBld2lyZV9mZCA9IGdfdW5peF9mZF9saXN0X2dl dChmZF9saXN0LCBmZF9pbmRleCwgJmVycm9yKTsKKyAgICBnX29iamVjdF91bnJlZihmZF9saXN0 KTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGdfbWFpbl9sb29w X3F1aXQocHdfY3R4LT5nbGliX21haW5fbG9vcCk7CisgICAgcmV0dXJuOworCitmYWlsOgorICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgIkVycm9yIHJldHJpZXZpbmcg UGlwZVdpcmUgZmQ6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7CisgICAgZ19lcnJvcl9mcmVlKGVy cm9yKTsKKyAgICBwb3J0YWxfYWJvcnQoY3R4LCBFSU8sICJGYWlsZWQgdG8gb3BlbiBQaXBlV2ly ZSByZW1vdGUiKTsKK30KKworc3RhdGljIHZvaWQgb25fc3RhcnRfcmVzcG9uc2VfcmVjZWl2ZWRf Y2FsbGJhY2soCisgICAgR0RCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLCBjb25zdCBjaGFyICpz ZW5kZXJfbmFtZSwKKyAgICBjb25zdCBjaGFyICpvYmplY3RfcGF0aCwgY29uc3QgY2hhciAqaW50 ZXJmYWNlX25hbWUsCisgICAgY29uc3QgY2hhciAqc2lnbmFsX25hbWUsIEdWYXJpYW50ICpwYXJh bWV0ZXJzLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgICAgR1ZhcmlhbnQqIHN0cmVhbV9wcm9w ZXJ0aWVzID0gTlVMTDsKKyAgICBHVmFyaWFudCogc3RyZWFtcyA9IE5VTEw7CisgICAgR1Zhcmlh bnQqIHJlc3VsdCA9IE5VTEw7CisgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7CisgICAgdWludDMyX3Qg cmVzcG9uc2U7CisKKyAgICBzdHJ1Y3QgRGJ1c0NhbGxEYXRhICpwdHJfZGJ1c19jYWxsX2RhdGEg PSB1c2VyX2RhdGE7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBwdHJfZGJ1c19jYWxsX2Rh dGEtPmN0eDsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7Cisg ICAgaWYgKCFwd19jdHgpIHsKKyAgICAgICAgcG9ydGFsX2Fib3J0KGN0eCwgRUlOVkFMLCAiSW52 YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg ICAgZ19jbGVhcl9wb2ludGVyKCZwdHJfZGJ1c19jYWxsX2RhdGEsIGRidXNfY2FsbF9kYXRhX2Zy ZWUpOworCisgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHVAYXtzdn0pIiwgJnJlc3Bv bnNlLCAmcmVzdWx0KTsKKworICAgIGlmIChyZXNwb25zZSkgeworICAgICAgICBnX3ZhcmlhbnRf dW5yZWYocmVzdWx0KTsKKyAgICAgICAgcG9ydGFsX2Fib3J0KAorICAgICAgICAgICAgY3R4LCBF QUNDRVMsICJGYWlsZWQgdG8gc3RhcnQgc2NyZWVuY2FzdCwgZGVuaWVkIG9yIGNhbmNlbGxlZCBi eSB1c2VyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJlYW1zID0gZ192YXJp YW50X2xvb2t1cF92YWx1ZShyZXN1bHQsICJzdHJlYW1zIiwgR19WQVJJQU5UX1RZUEVfQVJSQVkp OworCisgICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwgc3RyZWFtcyk7CisgICAgYXZfYXNz ZXJ0MChnX3ZhcmlhbnRfaXRlcl9uX2NoaWxkcmVuKCZpdGVyKSA9PSAxKTsKKworICAgIGdfdmFy aWFudF9pdGVyX2xvb3AoJml0ZXIsICIodUBhe3N2fSkiLCAmcHdfY3R4LT5waXBld2lyZV9ub2Rl LAorICAgICAgICAgICAgICAgICAgICAgICAgJnN0cmVhbV9wcm9wZXJ0aWVzKTsKKworICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAiTW9uaXRvciBzZWxlY3RlZCwgc2V0dGluZyB1cCBzY3Jl ZW5jYXN0XG5cbiIpOworCisgICAgZ192YXJpYW50X3VucmVmKHJlc3VsdCk7CisgICAgZ192YXJp YW50X3VucmVmKHN0cmVhbXMpOworICAgIGdfdmFyaWFudF91bnJlZihzdHJlYW1fcHJvcGVydGll cyk7CisKKyAgICBwb3J0YWxfb3Blbl9waXBld2lyZV9yZW1vdGUoY3R4KTsKK30KKworc3RhdGlj IGludCBwb3J0YWxfY2FsbF9kYnVzX21ldGhvZChBVkZpbHRlckNvbnRleHQgKmN0eCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKm1ldGhvZF9uYW1lLCBH VmFyaWFudCAqcGFyYW1ldGVycykKK3sKKyAgICBHVmFyaWFudCogcmVzdWx0OworICAgIEdFcnJv ciogZXJyb3IgPSBOVUxMOworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+ cHJpdjsKKworICAgIHJlc3VsdCA9IGdfZGJ1c19wcm94eV9jYWxsX3N5bmMocHdfY3R4LT5wcm94 eSwgbWV0aG9kX25hbWUsIHBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHX0RCVVNfQ0FMTF9GTEFHU19OT05FLCAtMSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHB3X2N0eC0+Y2FuY2VsbGFibGUsICZlcnJvcik7CisgICAgaWYgKGVy cm9yKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAg ICJDYWxsIHRvIERCdXMgbWV0aG9kICclcycgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAg IG1ldGhvZF9uYW1lLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJv cik7CisgICAgICAgIHJldHVybiBFSU87CisgICAgfQorICAgIGdfdmFyaWFudF91bnJlZihyZXN1 bHQpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwb3J0YWxfc3RhcnQoQVZGaWx0 ZXJDb250ZXh0ICpjdHgpCit7CisgICAgaW50IHJldDsKKyAgICBjb25zdCBjaGFyICpyZXF1ZXN0 X3Rva2VuOworICAgIGdfYXV0b2ZyZWUgY2hhciAqcmVxdWVzdF9wYXRoOworICAgIEdWYXJpYW50 QnVpbGRlciBidWlsZGVyOworICAgIEdWYXJpYW50ICpwYXJhbWV0ZXJzOworICAgIHN0cnVjdCBE YnVzQ2FsbERhdGEgKnB0cl9kYnVzX2NhbGxfZGF0YTsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0 ICpwd19jdHggPSBjdHgtPnByaXY7CisgICAgaWYgKCFwd19jdHgpIHsKKyAgICAgICAgcG9ydGFs X2Fib3J0KGN0eCwgRUlOVkFMLCAiSW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSIpOworICAg ICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVxdWVzdF90b2tlbiA9ICJwaXBld2lyZWdyYWJT dGFydCI7CisgICAgcmVxdWVzdF9wYXRoID0gZ19zdHJkdXBfcHJpbnRmKFJFUVVFU1RfUEFUSCwg cHdfY3R4LT5zZW5kZXJfbmFtZSwgcmVxdWVzdF90b2tlbik7CisKKyAgICBhdl9sb2coY3R4LCBB Vl9MT0dfSU5GTywgIkFza2luZyBmb3IgbW9uaXRvcuKAplxuIik7CisKKyAgICBwdHJfZGJ1c19j YWxsX2RhdGEgPSBzdWJzY3JpYmVfdG9fc2lnbmFsKGN0eCwgcmVxdWVzdF9wYXRoLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25fc3RhcnRfcmVzcG9uc2Vf cmVjZWl2ZWRfY2FsbGJhY2spOworICAgIGlmICghcHRyX2RidXNfY2FsbF9kYXRhKSB7CisgICAg ICAgIHBvcnRhbF9hYm9ydChjdHgsIEVOT01FTSwgIkZhaWxlZCB0byBhbGxvY2F0ZSBEQnVzIGNh bGwgZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ192YXJpYW50X2J1aWxk ZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7CisgICAgZ192YXJpYW50 X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJoYW5kbGVfdG9rZW4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfbmV3X3N0cmluZyhyZXF1ZXN0X3Rva2VuKSk7Cisg ICAgcGFyYW1ldGVycyA9IGdfdmFyaWFudF9uZXcoIihvc2F7c3Z9KSIsIHB3X2N0eC0+c2Vzc2lv bl9oYW5kbGUsICIiLCAmYnVpbGRlcik7CisKKyAgICByZXQgPSBwb3J0YWxfY2FsbF9kYnVzX21l dGhvZChjdHgsICJTdGFydCIsIHBhcmFtZXRlcnMpOworICAgIGlmIChyZXQgIT0gMCkKKyAgICAg ICAgcG9ydGFsX2Fib3J0KGN0eCwgcmV0LCAiRmFpbGVkIHRvIHN0YXJ0IHNjcmVlbiBjYXN0IHNl c3Npb24iKTsKK30KKworc3RhdGljIHZvaWQgb25fc2VsZWN0X3NvdXJjZXNfcmVzcG9uc2VfcmVj ZWl2ZWRfY2FsbGJhY2soCisgICAgR0RCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLCBjb25zdCBj aGFyICpzZW5kZXJfbmFtZSwKKyAgICBjb25zdCBjaGFyICpvYmplY3RfcGF0aCwgY29uc3QgY2hh ciAqaW50ZXJmYWNlX25hbWUsCisgICAgY29uc3QgY2hhciAqc2lnbmFsX25hbWUsIEdWYXJpYW50 ICpwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgICAgR1ZhcmlhbnQqIHJldCA9 IE5VTEw7CisgICAgdWludDMyX3QgcmVzcG9uc2U7CisgICAgc3RydWN0IERidXNDYWxsRGF0YSAq cHRyX2RidXNfY2FsbF9kYXRhID0gdXNlcl9kYXRhOworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4 ID0gcHRyX2RidXNfY2FsbF9kYXRhLT5jdHg7CisKKyAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5G TywKKyAgICAgICAgICAgIlJlc3BvbnNlIHRvIHNlbGVjdCBzb3VyY2UgcmVjZWl2ZWRcbiIpOwor CisgICAgZ19jbGVhcl9wb2ludGVyKCZwdHJfZGJ1c19jYWxsX2RhdGEsIGRidXNfY2FsbF9kYXRh X2ZyZWUpOworCisgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHVAYXtzdn0pIiwgJnJl c3BvbnNlLCAmcmV0KTsKKyAgICBnX3ZhcmlhbnRfdW5yZWYocmV0KTsKKyAgICBpZiAocmVzcG9u c2UpIHsKKyAgICAgICAgcG9ydGFsX2Fib3J0KAorICAgICAgICAgICAgY3R4LCBFQUNDRVMsICJG YWlsZWQgdG8gc2VsZWN0IHNjcmVlbmNhc3Qgc291cmNlcywgZGVuaWVkIG9yIGNhbmNlbGxlZCBi eSB1c2VyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwb3J0YWxfc3RhcnQoY3R4 KTsKK30KKworc3RhdGljIHZvaWQgcG9ydGFsX3NlbGVjdF9zb3VyY2VzKEFWRmlsdGVyQ29udGV4 dCAqY3R4KQoreworICAgIGludCByZXQ7CisgICAgY29uc3QgY2hhciAqcmVxdWVzdF90b2tlbjsK KyAgICBnX2F1dG9mcmVlIGNoYXIgKnJlcXVlc3RfcGF0aDsKKyAgICBHVmFyaWFudEJ1aWxkZXIg YnVpbGRlcjsKKyAgICBHVmFyaWFudCAqcGFyYW1ldGVyczsKKyAgICBzdHJ1Y3QgRGJ1c0NhbGxE YXRhICpwdHJfZGJ1c19jYWxsX2RhdGE7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4 ID0gY3R4LT5wcml2OworCisgICAgcmVxdWVzdF90b2tlbiA9ICJwaXBld2lyZWdyYWJTZWxlY3RT b3VyY2VzIjsKKyAgICByZXF1ZXN0X3BhdGggPSBnX3N0cmR1cF9wcmludGYoUkVRVUVTVF9QQVRI LCBwd19jdHgtPnNlbmRlcl9uYW1lLCByZXF1ZXN0X3Rva2VuKTsKKworICAgIHB0cl9kYnVzX2Nh bGxfZGF0YSA9IHN1YnNjcmliZV90b19zaWduYWwoY3R4LCByZXF1ZXN0X3BhdGgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbl9zZWxlY3Rfc291cmNlc19y ZXNwb25zZV9yZWNlaXZlZF9jYWxsYmFjayk7CisgICAgaWYgKCFwdHJfZGJ1c19jYWxsX2RhdGEp IHsKKyAgICAgICAgcG9ydGFsX2Fib3J0KGN0eCwgRU5PTUVNLCAiRmFpbGVkIHRvIGFsbG9jYXRl IERCdXMgY2FsbCBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnX3Zhcmlh bnRfYnVpbGRlcl9pbml0KCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRV9WQVJESUNUKTsKKyAgICBn X3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgInR5cGVzIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgZ192YXJpYW50X25ld191aW50MzIocHdfY3R4LT5jYXB0dXJlX3R5 cGUpKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgIm11bHRp cGxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ192YXJpYW50X25ld19ib29sZWFuKEZB TFNFKSk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJoYW5k bGVfdG9rZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfbmV3X3N0cmlu ZyhyZXF1ZXN0X3Rva2VuKSk7CisKKyAgICBpZiAoKHB3X2N0eC0+YXZhaWxhYmxlX2N1cnNvcl9t b2RlcyAmIFBPUlRBTF9DVVJTT1JfTU9ERV9FTUJFRERFRCkKKyAgICAgICAgICAgICAmJiBwd19j dHgtPmRyYXdfbW91c2UpCisgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwg Intzdn0iLCAiY3Vyc29yX21vZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ192 YXJpYW50X25ld191aW50MzIoUE9SVEFMX0NVUlNPUl9NT0RFX0VNQkVEREVEKSk7CisgICAgZWxz ZQorICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ7c3Z9IiwgImN1cnNv cl9tb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdmFyaWFudF9uZXdfdWlu dDMyKFBPUlRBTF9DVVJTT1JfTU9ERV9ISURERU4pKTsKKyAgICBwYXJhbWV0ZXJzID0gZ192YXJp YW50X25ldygiKG9he3N2fSkiLCBwd19jdHgtPnNlc3Npb25faGFuZGxlLCAmYnVpbGRlcik7CisK KyAgICByZXQgPSBwb3J0YWxfY2FsbF9kYnVzX21ldGhvZChjdHgsICJTZWxlY3RTb3VyY2VzIiwg cGFyYW1ldGVycyk7CisgICAgaWYgKHJldCAhPSAwKQorICAgICAgICBwb3J0YWxfYWJvcnQoY3R4 LCByZXQsICJGYWlsZWQgdG8gc2VsZWN0IHNvdXJjZXMgZm9yIHNjcmVlbiBjYXN0IHNlc3Npb24i KTsKK30KKworc3RhdGljIHZvaWQgb25fY3JlYXRlX3Nlc3Npb25fcmVzcG9uc2VfcmVjZWl2ZWRf Y2FsbGJhY2soCisgICAgR0RCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLCBjb25zdCBjaGFyICpz ZW5kZXJfbmFtZSwKKyAgICBjb25zdCBjaGFyICpvYmplY3RfcGF0aCwgY29uc3QgY2hhciAqaW50 ZXJmYWNlX25hbWUsCisgICAgY29uc3QgY2hhciAqc2lnbmFsX25hbWUsIEdWYXJpYW50ICpwYXJh bWV0ZXJzLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgICAgdWludDMyX3QgcmVzcG9uc2U7Cisg ICAgR1ZhcmlhbnQqIHJlc3VsdCA9IE5VTEw7CisgICAgc3RydWN0IERidXNDYWxsRGF0YSAqcHRy X2RidXNfY2FsbF9kYXRhID0gdXNlcl9kYXRhOworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0g cHRyX2RidXNfY2FsbF9kYXRhLT5jdHg7CisKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19j dHggPSBjdHgtPnByaXY7CisgICAgaWYgKCFwd19jdHgpIHsKKyAgICAgICAgcG9ydGFsX2Fib3J0 KGN0eCwgRUlOVkFMLCAiSW52YWxpZCBwcml2YXRlIGNvbnRleHQgZGF0YSIpOworICAgICAgICBy ZXR1cm47CisgICAgfQorCisgICAgZ19jbGVhcl9wb2ludGVyKCZwdHJfZGJ1c19jYWxsX2RhdGEs IGRidXNfY2FsbF9kYXRhX2ZyZWUpOworCisgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAi KHVAYXtzdn0pIiwgJnJlc3BvbnNlLCAmcmVzdWx0KTsKKworICAgIGlmIChyZXNwb25zZSAhPSAw KSB7CisgICAgICAgIGdfdmFyaWFudF91bnJlZihyZXN1bHQpOworICAgICAgICBwb3J0YWxfYWJv cnQoCisgICAgICAgICAgICBjdHgsIEVBQ0NFUywgIkZhaWxlZCB0byBjcmVhdGUgc2NyZWVuY2Fz dCBzZXNzaW9uLCBkZW5pZWQgb3IgY2FuY2VsbGVkIGJ5IHVzZXIiKTsKKyAgICAgICAgcmV0dXJu OworICAgIH0KKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19ERUJVRywgIlNjcmVlbmNhc3Qgc2Vz c2lvbiBjcmVhdGVkXG4iKTsKKworICAgIGdfdmFyaWFudF9sb29rdXAocmVzdWx0LCAic2Vzc2lv bl9oYW5kbGUiLCAicyIsICZwd19jdHgtPnNlc3Npb25faGFuZGxlKTsKKyAgICBnX3ZhcmlhbnRf dW5yZWYocmVzdWx0KTsKKworICAgIHBvcnRhbF9zZWxlY3Rfc291cmNlcyhjdHgpOworfQorCisv KioKKyAqIEZ1bmN0aW9uIHRvIGNyZWF0ZSBhIHNjcmVlbiBjYXN0IHNlc3Npb24KKyAqCisgKiBA cGFyYW0gY3R4CisgKi8KK3N0YXRpYyB2b2lkIHBvcnRhbF9jcmVhdGVfc2Vzc2lvbihBVkZpbHRl ckNvbnRleHQgKmN0eCkKK3sKKyAgICBpbnQgcmV0OworICAgIEdWYXJpYW50QnVpbGRlciBidWls ZGVyOworICAgIEdWYXJpYW50ICpwYXJhbWV0ZXJzOworICAgIGNvbnN0IGNoYXIgKnJlcXVlc3Rf dG9rZW47CisgICAgZ19hdXRvZnJlZSBjaGFyICpyZXF1ZXN0X3BhdGg7CisgICAgc3RydWN0IERi dXNDYWxsRGF0YSAqcHRyX2RidXNfY2FsbF9kYXRhOworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQg KnB3X2N0eCA9IGN0eC0+cHJpdjsKKworICAgIHJlcXVlc3RfdG9rZW4gPSAicGlwZXdpcmVncmFi Q3JlYXRlU2Vzc2lvbiI7CisgICAgcmVxdWVzdF9wYXRoID0gZ19zdHJkdXBfcHJpbnRmKFJFUVVF U1RfUEFUSCwgcHdfY3R4LT5zZW5kZXJfbmFtZSwgcmVxdWVzdF90b2tlbik7CisKKyAgICBwdHJf ZGJ1c19jYWxsX2RhdGEgPSBzdWJzY3JpYmVfdG9fc2lnbmFsKGN0eCwgcmVxdWVzdF9wYXRoLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25fY3JlYXRlX3Nl c3Npb25fcmVzcG9uc2VfcmVjZWl2ZWRfY2FsbGJhY2spOworICAgIGlmICghcHRyX2RidXNfY2Fs bF9kYXRhKSB7CisgICAgICAgIHBvcnRhbF9hYm9ydChjdHgsIEVOT01FTSwgIkZhaWxlZCB0byBh bGxvY2F0ZSBEQnVzIGNhbGwgZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg Z192YXJpYW50X2J1aWxkZXJfaW5pdCgmYnVpbGRlciwgR19WQVJJQU5UX1RZUEVfVkFSRElDVCk7 CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIsICJoYW5kbGVfdG9r ZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfbmV3X3N0cmluZyhyZXF1 ZXN0X3Rva2VuKSk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAie3N2fSIs ICJzZXNzaW9uX2hhbmRsZV90b2tlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdmFy aWFudF9uZXdfc3RyaW5nKCJwaXBld2lyZWdyYWIiKSk7CisgICAgcGFyYW1ldGVycyA9IGdfdmFy aWFudF9uZXcoIihhe3N2fSkiLCAmYnVpbGRlcik7CisKKyAgICByZXQgPSBwb3J0YWxfY2FsbF9k YnVzX21ldGhvZChjdHgsICJDcmVhdGVTZXNzaW9uIiwgcGFyYW1ldGVycyk7CisgICAgaWYgKHJl dCAhPSAwKQorICAgICAgICBwb3J0YWxfYWJvcnQoY3R4LCByZXQsICJGYWlsZWQgdG8gY3JlYXRl IHNjcmVlbiBjYXN0IHNlc3Npb24iKTsKK30KKworLyoqCisgKiBIZWxwZXIgZnVuY3Rpb246IGdl dCBhdmFpbGFibGUgY3Vyc29yIG1vZGVzIGFuZCB1cGRhdGUgdGhlCisgKiAgICAgICAgICAgICAg ICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgYWNjb3JkaW5nbHkKKyAqCisgKiBAcGFyYW0gY3R4Cisg Ki8KK3N0YXRpYyB2b2lkIHBvcnRhbF91cGRhdGVfYXZhaWxhYmxlX2N1cnNvcl9tb2RlcyhBVkZp bHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBHVmFyaWFudCogY2FjaGVkX2N1cnNvcl9tb2RlcyA9 IE5VTEw7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2OworCisg ICAgY2FjaGVkX2N1cnNvcl9tb2RlcyA9CisgICAgICAgIGdfZGJ1c19wcm94eV9nZXRfY2FjaGVk X3Byb3BlcnR5KHB3X2N0eC0+cHJveHksICJBdmFpbGFibGVDdXJzb3JNb2RlcyIpOworCisgICAg cHdfY3R4LT5hdmFpbGFibGVfY3Vyc29yX21vZGVzID0KKyAgICAgICAgY2FjaGVkX2N1cnNvcl9t b2RlcyA/IGdfdmFyaWFudF9nZXRfdWludDMyKGNhY2hlZF9jdXJzb3JfbW9kZXMpIDogMDsKKwor ICAgIGdfdmFyaWFudF91bnJlZihjYWNoZWRfY3Vyc29yX21vZGVzKTsKK30KKworc3RhdGljIGlu dCBjcmVhdGVfZGJ1c19wcm94eShBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBHRXJyb3Iq IGVycm9yID0gTlVMTDsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnBy aXY7CisKKyAgICBwd19jdHgtPnByb3h5ID0gZ19kYnVzX3Byb3h5X25ld19zeW5jKAorICAgICAg ICAgICAgICAgICAgICAgICAgcHdfY3R4LT5jb25uZWN0aW9uLCBHX0RCVVNfUFJPWFlfRkxBR1Nf Tk9ORSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuZnJlZWRlc2t0b3AucG9y dGFsLkRlc2t0b3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgIi9vcmcvZnJlZWRlc2t0b3Av cG9ydGFsL2Rlc2t0b3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5mcmVlZGVza3Rv cC5wb3J0YWwuU2NyZWVuQ2FzdCIsIE5VTEwsICZlcnJvcik7CisgICAgaWYgKGVycm9yKSB7Cisg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJFcnJvciBj cmVhdGluZyBwcm94eTogJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZ19lcnJvcl9m cmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIEVQRVJNOworICAgIH0KKyAgICByZXR1cm4gMDsK K30KKworLyoqCisgKiBDcmVhdGUgREJ1cyBjb25uZWN0aW9uIGFuZCByZWxhdGVkIG9iamVjdHMK KyAqCisgKiBAcGFyYW0gY3R4CisgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX2RidXNfY29ubmVjdGlv bihBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBjaGFyICphdXg7CisgICAgR0Vycm9yKiBl cnJvciA9IE5VTEw7CisgICAgUGlwZXdpcmVHcmFiQ29udGV4dCAqcHdfY3R4ID0gY3R4LT5wcml2 OworCisgICAgcHdfY3R4LT5jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7CisKKyAg ICBwd19jdHgtPmNvbm5lY3Rpb24gPSBnX2J1c19nZXRfc3luYyhHX0JVU19UWVBFX1NFU1NJT04s IE5VTEwsICZlcnJvcik7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJFcnJvciBnZXR0aW5nIHNlc3Npb24gYnVzOiAl c1xuIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAg ICAgICByZXR1cm4gRVBFUk07CisgICAgfQorCisgICAgYXV4ID0gZ19zdHJkdXAoZ19kYnVzX2Nv bm5lY3Rpb25fZ2V0X3VuaXF1ZV9uYW1lKHB3X2N0eC0+Y29ubmVjdGlvbikgKyAxKTsKKyAgICBw d19jdHgtPnNlbmRlcl9uYW1lID0gYXZfc3RyaXJlcGxhY2UoYXV4LCAiLiIsICJfIik7CisgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiSW5pdGlhbGl6ZWQgKHNlbmRlciBuYW1lOiAlcylc biIsCisgICAgICAgICAgIHB3X2N0eC0+c2VuZGVyX25hbWUpOworICAgIHJldHVybiAwOworfQor CisKKy8qKgorICogVXNlIFhERyBEZXNrdG9wIFBvcnRhbCdzIFNjcmVlbkNhc3QgaW50ZXJmYWNl IHRvIG9wZW4gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdAorICogY2FuIGJlIHVzZWQgYnkgUGlwZVdp cmUgdG8gYWNjZXNzIHRoZSBzY3JlZW4gY2FzdCBzdHJlYW1zLgorICogKGh0dHBzOi8vZmxhdHBh ay5naXRodWIuaW8veGRnLWRlc2t0b3AtcG9ydGFsL2RvY3MvZG9jLW9yZy5mcmVlZGVza3RvcC5w b3J0YWwuU2NyZWVuQ2FzdC5odG1sKQorICoKKyAqIEBwYXJhbSBjdHgKKyAqLworc3RhdGljIGlu dCBwb3J0YWxfaW5pdF9zY3JlZW5jYXN0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIGlu dCByZXQgPSAwOworICAgIFBpcGV3aXJlR3JhYkNvbnRleHQgKnB3X2N0eCA9IGN0eC0+cHJpdjsK KyAgICBHTWFpbkNvbnRleHQgKmdsaWJfbWFpbl9jb250ZXh0OworCisgICAgLy8gQ3JlYXRlIGEg bmV3IEdMaWIgY29udGV4dCBhbmQgc2V0IGl0IGFzIHRoZSBkZWZhdWx0IGZvciB0aGUgY3VycmVu dCB0aHJlYWQuCisgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGNhbGxiYWNrcyBmcm9tIERC dXMgb3BlcmF0aW9ucyBzdGFydGVkIGluIHRoaXMgdGhyZWFkIGFyZQorICAgIC8vIGhhbmRsZWQg YnkgdGhlIEdMaWIgbWFpbiBsb29wIGRlZmluZWQgYmVsb3csIGV2ZW4gaWYgcGlwZXdpcmVncmFi X2luaXQgd2FzCisgICAgLy8gY2FsbGVkIGJ5IGEgcHJvZ3JhbSB3aGljaCBhbHNvIHVzZXMgR0xp YiBhbmQgYWxyZWFkeSBoYWQgaXRzIG93biBtYWluIGxvb3AgcnVubmluZy4KKyAgICBnbGliX21h aW5fY29udGV4dCA9IGdfbWFpbl9jb250ZXh0X25ldygpOworICAgIGdfbWFpbl9jb250ZXh0X3B1 c2hfdGhyZWFkX2RlZmF1bHQoZ2xpYl9tYWluX2NvbnRleHQpOworICAgIHB3X2N0eC0+Z2xpYl9t YWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcoZ2xpYl9tYWluX2NvbnRleHQsIEZBTFNFKTsKKyAg ICBpZiAoIXB3X2N0eC0+Z2xpYl9tYWluX2xvb3ApIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0VSUk9SLCAiZ19tYWluX2xvb3BfbmV3IGZhaWxlZFxuIik7CisgICAgICAgIHJldCA9IEVO T01FTTsKKyAgICB9CisKKyAgICByZXQgPSBjcmVhdGVfZGJ1c19jb25uZWN0aW9uKGN0eCk7Cisg ICAgaWYgKHJldCAhPSAwKQorICAgICAgICBnb3RvIGV4aXRfZ2xpYl9sb29wOworCisgICAgcmV0 ID0gY3JlYXRlX2RidXNfcHJveHkoY3R4KTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIGdv dG8gZXhpdF9nbGliX2xvb3A7CisKKyAgICBwb3J0YWxfdXBkYXRlX2F2YWlsYWJsZV9jdXJzb3Jf bW9kZXMoY3R4KTsKKyAgICBwb3J0YWxfY3JlYXRlX3Nlc3Npb24oY3R4KTsKKyAgICBpZiAocHdf Y3R4LT5wb3J0YWxfZXJyb3IpIHsKKyAgICAgICAgcmV0ID0gcHdfY3R4LT5wb3J0YWxfZXJyb3I7 CisgICAgICAgIGdvdG8gZXhpdF9nbGliX2xvb3A7CisgICAgfQorCisgICAgZ19tYWluX2xvb3Bf cnVuKHB3X2N0eC0+Z2xpYl9tYWluX2xvb3ApOworICAgIC8vIFRoZSBtYWluIGxvb3Agd2lsbCBy dW4gdW50aWwgaXQncyBzdG9wcGVkIGJ5IHBvcnRhbF9vcGVuX3BpcGV3aXJlX3JlbW90ZSAoaWYK KyAgICAvLyBhbGwgREJ1cyBtZXRob2QgY2FsbHMgd2VyZSBzdWNjZXNzZnVsbHkpLCBwb3J0YWxf YWJvcnQgKGluIGNhc2Ugb2YgZXJyb3IpIG9yCisgICAgLy8gb25fY2FuY2VsbGVkX2NhbGxiYWNr IChpZiBhIERCdXMgcmVxdWVzdCBpcyBjYW5jZWxsZWQpLgorICAgIC8vIEluIHRoZSBsYXR0ZXIg dHdvIGNhc2VzLCBwd19jdHgtPnBvcnRhbF9lcnJvciBnZXRzIHNldCB0byBhIG5vbnplcm8gdmFs dWUuCisgICAgaWYgKHB3X2N0eC0+cG9ydGFsX2Vycm9yKQorICAgICAgICByZXQgPSBwd19jdHgt PnBvcnRhbF9lcnJvcjsKKworZXhpdF9nbGliX2xvb3A6CisgICAgZ19tYWluX2xvb3BfdW5yZWYo cHdfY3R4LT5nbGliX21haW5fbG9vcCk7CisgICAgcHdfY3R4LT5nbGliX21haW5fbG9vcCA9IE5V TEw7CisgICAgZ19tYWluX2NvbnRleHRfcG9wX3RocmVhZF9kZWZhdWx0KGdsaWJfbWFpbl9jb250 ZXh0KTsKKyAgICBnX21haW5fY29udGV4dF91bnJlZihnbGliX21haW5fY29udGV4dCk7CisKKyAg ICByZXR1cm4gQVZFUlJPUihyZXQpOworfQorCitzdGF0aWMgYXZfY29sZCBpbnQgcGlwZXdpcmVn cmFiX2luaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgaW50IHJldDsKKyAgICBQaXBl d2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7CisgICAgaWYgKCFwd19jdHgpIHsK KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgIkludmFs aWQgcHJpdmF0ZSBjb250ZXh0IGRhdGEhXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsKKyAgICB9CisKKyAgICBhdG9taWNfaW5pdCgmcHdfY3R4LT5waXBld2lyZV9pbml0aWFs aXphdGlvbl9vdmVyLCAwKTsKKyAgICBwdGhyZWFkX2NvbmRfaW5pdCgmcHdfY3R4LT5waXBld2ly ZV9pbml0aWFsaXphdGlvbl9jb25kX3ZhciwgTlVMTCk7CisgICAgcHRocmVhZF9tdXRleF9pbml0 KCZwd19jdHgtPnBpcGV3aXJlX2luaXRpYWxpemF0aW9uX211dGV4LCBOVUxMKTsKKyAgICBwdGhy ZWFkX211dGV4X2luaXQoJnB3X2N0eC0+Y3VycmVudF9mcmFtZV9tdXRleCwgTlVMTCk7CisKKyAg ICBpZiAocHdfY3R4LT5waXBld2lyZV9mZCA9PSAwKSB7CisgICAgICAgIHJldCA9IHBvcnRhbF9p bml0X3NjcmVlbmNhc3QoY3R4KTsKKyAgICAgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgICAg ICBhdG9taWNfc3RvcmUoJnB3X2N0eC0+cGlwZXdpcmVfaW5pdGlhbGl6YXRpb25fb3ZlciwgMSk7 CisgICAgICAgICAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZwd19jdHgtPnBpcGV3aXJlX2luaXRp YWxpemF0aW9uX2NvbmRfdmFyKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0K KyAgICB9CisKKyAgICByZXQgPSBwbGF5X3BpcGV3aXJlX3N0cmVhbShjdHgpOworICAgIGlmIChy ZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIC8vIFdhaXQgdW50aWwgUGlwZVdp cmUgaW5pdGlhbGl6YXRpb24gaXMgb3ZlcgorICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcHdfY3R4 LT5waXBld2lyZV9pbml0aWFsaXphdGlvbl9tdXRleCk7CisgICAgd2hpbGUgKCFhdG9taWNfbG9h ZCgmcHdfY3R4LT5waXBld2lyZV9pbml0aWFsaXphdGlvbl9vdmVyKSkgeworICAgICAgICBwdGhy ZWFkX2NvbmRfd2FpdCgmcHdfY3R4LT5waXBld2lyZV9pbml0aWFsaXphdGlvbl9jb25kX3ZhciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgJnB3X2N0eC0+cGlwZXdpcmVfaW5pdGlhbGl6YXRp b25fbXV0ZXgpOworICAgIH0KKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmcHdfY3R4LT5waXBl d2lyZV9pbml0aWFsaXphdGlvbl9tdXRleCk7CisKKyAgICBpZiAocHdfY3R4LT5waXBld2lyZV9l cnJvcikKKyAgICAgICAgcmV0dXJuIHB3X2N0eC0+cGlwZXdpcmVfZXJyb3I7CisKKyAgICByZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGlwZXdpcmVncmFiX3VuaW5pdChBVkZpbHRlckNvbnRl eHQgKmN0eCkKK3sKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7 CisgICAgaWYgKCFwd19jdHgpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwd19jdHgtPmds aWJfbWFpbl9sb29wICYmCisgICAgICAgIGdfbWFpbl9sb29wX2lzX3J1bm5pbmcocHdfY3R4LT5n bGliX21haW5fbG9vcCkpIHsKKyAgICAgICAgLy8gQ2FuY2VsIG9uZ29pbmcgREJ1cyBvcGVyYXRp b24sIGlmIGFueQorICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChwd19jdHgtPmNhbmNlbGxh YmxlKTsKKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZwd19jdHgtPnBpcGV3aXJlX2luaXRp YWxpemF0aW9uX211dGV4KTsKKyAgICAgICAgd2hpbGUgKCFhdG9taWNfbG9hZCgmcHdfY3R4LT5w aXBld2lyZV9pbml0aWFsaXphdGlvbl9vdmVyKSkgeworICAgICAgICAgICAgcHRocmVhZF9jb25k X3dhaXQoJnB3X2N0eC0+cGlwZXdpcmVfaW5pdGlhbGl6YXRpb25fY29uZF92YXIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmcHdfY3R4LT5waXBld2lyZV9pbml0aWFsaXphdGlvbl9t dXRleCk7CisgICAgICAgIH0KKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnB3X2N0eC0+ cGlwZXdpcmVfaW5pdGlhbGl6YXRpb25fbXV0ZXgpOworICAgIH0KKyAgICBnX2NsZWFyX29iamVj dCgmcHdfY3R4LT5jYW5jZWxsYWJsZSk7CisKKyAgICAvLyBQaXBlV2lyZSBjbGVhbnVwCisgICAg aWYgKHB3X2N0eC0+dGhyZWFkX2xvb3ApIHsKKyAgICAgICAgcHdfdGhyZWFkX2xvb3Bfc2lnbmFs KHB3X2N0eC0+dGhyZWFkX2xvb3AsIGZhbHNlKTsKKyAgICAgICAgcHdfdGhyZWFkX2xvb3BfdW5s b2NrKHB3X2N0eC0+dGhyZWFkX2xvb3ApOworICAgICAgICBwd190aHJlYWRfbG9vcF9zdG9wKHB3 X2N0eC0+dGhyZWFkX2xvb3ApOworICAgIH0KKyAgICBpZiAocHdfY3R4LT5zdHJlYW0pIHsKKyAg ICAgICAgcHdfc3RyZWFtX2Rpc2Nvbm5lY3QocHdfY3R4LT5zdHJlYW0pOworICAgICAgICBnX2Ns ZWFyX3BvaW50ZXIoJnB3X2N0eC0+c3RyZWFtLCBwd19zdHJlYW1fZGVzdHJveSk7CisgICAgICAg IHB3X2N0eC0+c3RyZWFtID0gTlVMTDsKKyAgICB9CisgICAgaWYgKHB3X2N0eC0+Y29yZSl7Cisg ICAgICAgIHB3X2NvcmVfZGlzY29ubmVjdChwd19jdHgtPmNvcmUpOworICAgICAgICBwd19jdHgt PmNvcmUgPSBOVUxMOworICAgIH0KKyAgICBpZiAocHdfY3R4LT5jb250ZXh0KSB7CisgICAgICAg IHB3X2NvbnRleHRfZGVzdHJveShwd19jdHgtPmNvbnRleHQpOworICAgICAgICBwd19jdHgtPmNv bnRleHQgPSBOVUxMOworICAgIH0KKyAgICBpZiAocHdfY3R4LT50aHJlYWRfbG9vcCkgeworICAg ICAgICBwd190aHJlYWRfbG9vcF9kZXN0cm95KHB3X2N0eC0+dGhyZWFkX2xvb3ApOworICAgICAg ICBwd19jdHgtPnRocmVhZF9sb29wID0gTlVMTDsKKyAgICB9CisgICAgaWYgKHB3X2N0eC0+cHdf aW5pdF9jYWxsZWQpIHsKKyAgICAgICAgcHdfZGVpbml0KCk7CisgICAgICAgIHB3X2N0eC0+cHdf aW5pdF9jYWxsZWQgPSAwOworICAgIH0KKyAgICBpZiAocHdfY3R4LT5waXBld2lyZV9mZCA+IDAp IHsKKyAgICAgICAgY2xvc2UocHdfY3R4LT5waXBld2lyZV9mZCk7CisgICAgICAgIHB3X2N0eC0+ cGlwZXdpcmVfZmQgPSAwOworICAgIH0KKyAgICBhdl9mcmFtZV9mcmVlKCZwd19jdHgtPmN1cnJl bnRfZnJhbWUpOworCisgICAgLy8gREJ1cyBjbGVhbnVwCisgICAgaWYgKHB3X2N0eC0+c2Vzc2lv bl9oYW5kbGUpIHsKKyAgICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25fY2FsbCgKKyAgICAgICAgICAg IHB3X2N0eC0+Y29ubmVjdGlvbiwgIm9yZy5mcmVlZGVza3RvcC5wb3J0YWwuRGVza3RvcCIsCisg ICAgICAgICAgICBwd19jdHgtPnNlc3Npb25faGFuZGxlLCAib3JnLmZyZWVkZXNrdG9wLnBvcnRh bC5TZXNzaW9uIiwgIkNsb3NlIiwKKyAgICAgICAgICAgIE5VTEwsIE5VTEwsIEdfREJVU19DQUxM X0ZMQUdTX05PTkUsIC0xLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgICAgICBnX2NsZWFyX3Bv aW50ZXIoJnB3X2N0eC0+c2Vzc2lvbl9oYW5kbGUsIGdfZnJlZSk7CisgICAgfQorICAgIGdfY2xl YXJfb2JqZWN0KCZwd19jdHgtPmNvbm5lY3Rpb24pOworICAgIGdfY2xlYXJfb2JqZWN0KCZwd19j dHgtPnByb3h5KTsKKyAgICBnX2NsZWFyX3BvaW50ZXIoJnB3X2N0eC0+c2VuZGVyX25hbWUsIGdf ZnJlZSk7Cit9CisKK3N0YXRpYyBpbnQgcGlwZXdpcmVncmFiX2NvbmZpZ19wcm9wcyhBVkZpbHRl ckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGcmFtZSAqZnJhbWU7CisgICAgUGlwZXdpcmVHcmFi Q29udGV4dCAqcHdfY3R4ID0gb3V0bGluay0+c3JjLT5wcml2OworCisgICAgQVZSYXRpb25hbCB0 aW1lX2Jhc2UgPSBhdl9pbnZfcShwd19jdHgtPmZyYW1lcmF0ZSk7CisgICAgcHdfY3R4LT5mcmFt ZV9kdXJhdGlvbiA9IGF2X3Jlc2NhbGVfcSgxLCB0aW1lX2Jhc2UsIEFWX1RJTUVfQkFTRV9RKTsK KyAgICBwd19jdHgtPnRpbWVfZnJhbWUgPSBhdl9nZXR0aW1lX3JlbGF0aXZlKCk7CisKKyAgICBv dXRsaW5rLT53ID0gcHdfY3R4LT53aWR0aDsKKyAgICBvdXRsaW5rLT5oID0gcHdfY3R4LT5oZWln aHQ7CisgICAgb3V0bGluay0+dGltZV9iYXNlID0gQVZfVElNRV9CQVNFX1E7CisgICAgb3V0bGlu ay0+ZnJhbWVfcmF0ZSA9IHB3X2N0eC0+ZnJhbWVyYXRlOworCisgICAgZnJhbWUgPSBmZl9nZXRf dmlkZW9fYnVmZmVyKG91dGxpbmssIHB3X2N0eC0+d2lkdGgsIHB3X2N0eC0+aGVpZ2h0KTsKKyAg ICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIHB0aHJl YWRfbXV0ZXhfbG9jaygmcHdfY3R4LT5jdXJyZW50X2ZyYW1lX211dGV4KTsKKyAgICBwd19jdHgt PmN1cnJlbnRfZnJhbWUgPSBmcmFtZTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmcHdfY3R4 LT5jdXJyZW50X2ZyYW1lX211dGV4KTsKKworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIEhl bHBlciBmdW5jdGlvbjogY2FsY3VsYXRlIHRoZSB3YWl0IHRpbWUgYmFzZWQKKyAqIG9uIHRoZSBm cmFtZSBkdXJhdGlvbgorICoKKyAqIEBwYXJhbSBwd19jdHgKKyAqIEByZXR1cm4gY3VycmVudCB0 aW1lCisgKi8KK3N0YXRpYyBpbnQ2NF90IHdhaXRfZnJhbWUoUGlwZXdpcmVHcmFiQ29udGV4dCAq cHdfY3R4KQoreworICAgIGludDY0X3QgY3VydGltZSwgZGVsYXk7CisKKyAgICAvKiBDYWxjdWxh dGUgdGhlIHRpbWUgb2YgdGhlIG5leHQgZnJhbWUgKi8KKyAgICBwd19jdHgtPnRpbWVfZnJhbWUg Kz0gcHdfY3R4LT5mcmFtZV9kdXJhdGlvbjsKKworICAgIC8qIHdhaXQgYmFzZWQgb24gdGhlIGZy YW1lIHJhdGUgKi8KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBjdXJ0aW1lID0gYXZfZ2V0dGlt ZV9yZWxhdGl2ZSgpOworICAgICAgICBkZWxheSAgID0gcHdfY3R4LT50aW1lX2ZyYW1lIC0gY3Vy dGltZTsKKyAgICAgICAgaWYgKGRlbGF5IDw9IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgYXZfdXNsZWVwKGRlbGF5KTsKKyAgICB9CisKKyAgICByZXR1cm4gY3VydGltZTsKK30KKwor c3RhdGljIGludCBwaXBld2lyZWdyYWJfcmVxdWVzdF9mcmFtZShBVkZpbHRlckxpbmsgKm91dGxp bmspCit7CisgICAgaW50IHJldDsKKyAgICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBv dXRsaW5rLT5zcmMtPnByaXY7CisgICAgQVZGcmFtZSAqZnJhbWUgPSBhdl9mcmFtZV9hbGxvYygp OworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAg ICB3YWl0X2ZyYW1lKHB3X2N0eCk7CisKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJnB3X2N0eC0+ Y3VycmVudF9mcmFtZV9tdXRleCk7CisgICAgcmV0ID0gYXZfZnJhbWVfcmVmKGZyYW1lLCBwd19j dHgtPmN1cnJlbnRfZnJhbWUpOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwd19jdHgtPmN1 cnJlbnRfZnJhbWVfbXV0ZXgpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGF2X2ZyYW1l X2ZyZWUoJmZyYW1lKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBmcmFtZS0+ cHRzID0gYXZfZ2V0dGltZSgpOworICAgIGZyYW1lLT5kdXJhdGlvbiA9IHB3X2N0eC0+ZnJhbWVf ZHVyYXRpb247CisgICAgZnJhbWUtPnNhbXBsZV9hc3BlY3RfcmF0aW8gPSAoQVZSYXRpb25hbCkg ezEsIDF9OworICAgIGZyYW1lLT5mb3JtYXQgPSBwd19jdHgtPmF2X3B4bF9mb3JtYXQ7CisKKyAg ICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIGZyYW1lKTsKK30KKworc3RhdGljIGlu dCBwaXBld2lyZWdyYWJfcXVlcnlfZm9ybWF0cyhBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAg ICBQaXBld2lyZUdyYWJDb250ZXh0ICpwd19jdHggPSBjdHgtPnByaXY7CisgICAgZW51bSBBVlBp eGVsRm9ybWF0IHBpeF9mbXRzW10gPSB7cHdfY3R4LT5hdl9weGxfZm9ybWF0LCBBVl9QSVhfRk1U X05PTkV9OworCisgICAgcmV0dXJuIGZmX3NldF9jb21tb25fZm9ybWF0c19mcm9tX2xpc3QoY3R4 LCBwaXhfZm10cyk7Cit9CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBwaXBld2lyZWdyYWJf b3V0cHV0c1tdID0geworICAgIHsKKyAgICAgICAgLm5hbWUgICAgICAgICAgPSAiZGVmYXVsdCIs CisgICAgICAgIC50eXBlICAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAorICAgICAgICAu cmVxdWVzdF9mcmFtZSA9IHBpcGV3aXJlZ3JhYl9yZXF1ZXN0X2ZyYW1lLAorICAgICAgICAuY29u ZmlnX3Byb3BzICA9IHBpcGV3aXJlZ3JhYl9jb25maWdfcHJvcHMsCisgICAgfSwKK307CisKK2Nv bnN0IEFWRmlsdGVyIGZmX3ZzcmNfcGlwZXdpcmVncmFiPSB7CisgICAgLm5hbWUgPSAicGlwZXdp cmVncmFiIiwKKyAgICAuZGVzY3JpcHRpb24gPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiQ2FwdHVy ZSBzY3JlZW4gb3Igd2luZG93IHVzaW5nIFBpcGVXaXJlLiIpLAorICAgIC5wcml2X3NpemUgPSBz aXplb2Yoc3RydWN0IFBpcGV3aXJlR3JhYkNvbnRleHQpLAorICAgIC5wcml2X2NsYXNzID0gJnBp cGV3aXJlZ3JhYl9jbGFzcywKKyAgICAuaW5pdCA9IHBpcGV3aXJlZ3JhYl9pbml0LAorICAgIC51 bmluaXQgPSBwaXBld2lyZWdyYWJfdW5pbml0LAorICAgIC5pbnB1dHMgPSBOVUxMLAorICAgIEZJ TFRFUl9PVVRQVVRTKHBpcGV3aXJlZ3JhYl9vdXRwdXRzKSwKKyAgICBGSUxURVJfUVVFUllfRlVO QyhwaXBld2lyZWdyYWJfcXVlcnlfZm9ybWF0cyksCit9OwotLSAKMi4zNC4xCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGlu ZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUs IG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1 bnN1YnNjcmliZSIuCg==