From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 15BF0C433EF for ; Thu, 28 Oct 2021 18:43:04 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C7E8660D43 for ; Thu, 28 Oct 2021 18:43:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org C7E8660D43 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=1is92w0/RhZDjLE1kat35MnXi2Ic20rWW9kIfm+xeD0=; b=NILFta3uZP1vWO JHVT3xAP2mNrmW7GovgfXHt6Bjp4oQi64sabQlak4mJLIOZYUOsH8zzwhqB8f/3z6jtUhs/kIeYCv puJbjmK4EifZmfaeyJPA35I7H/NswoUI5nLKE8QMV3FjlnI7xX61s6exBqxmMAlBviEc7onAyZFmc wnetfM5kZRUSTHCEMJHVY1O82moP1+5chjuxalvNg0rsWewV3rh8T2cnisW9Ob54Wy8w1gRu51p/7 z9AHCxT+vDiNXxNA6AoXfzSmOG1GnjQcPY5hAuj9OoNFxOh+AQVxNhKBN0w3kiVrNEo2gT5yjlyHe GVCW5lE3HZTEKkI1Xplg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mgAMh-008v6L-8b; Thu, 28 Oct 2021 18:43:03 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mgAMV-008v1a-7x for linux-phy@lists.infradead.org; Thu, 28 Oct 2021 18:43:01 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 9189660C40; Thu, 28 Oct 2021 18:42:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1635446570; bh=BnPT8W2x1ndH11O2kPKHUBGuhoP9hSoUdIEdaD7yOOA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZEez1qsFy4GX/kM0uwBoirO8Qzj9v5erd9nhthLoRQ49RRpxnSMFCQ7n3fYY0emFc kJ8/RjDV3BStF3WPCJOejjnUYv8nGSZ/NrYXcbQD5snJ0YqCz9GrnG3srLrdfMHcIz xS2UfBoKduGuOVmr+CDmhx2+wW0+b3aDD1bC/tKt8OSkW28lajUSVwRcq7Jjs4Ds2b 9KVa0GxruqmFG6QFfkXrkDv/TeLWXOkqKYSW8d9z/M5P2xCcWzwQc65HTC3YD7UvVz Fh69LUbKy97xXectDuIk5OQsfghDIwiKOAyB26z31CIkZzWDc415UjjpspFb5DaI7p vvEerR1mPrdTA== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Miquel Raynal Cc: linux-phy@lists.infradead.org, Vinod Koul , Kishon Vijay Abraham I , pali@kernel.org, =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH phy 2/6] phy: marvell: phy-mvebu-a3700-comphy: Add native kernel implementation Date: Thu, 28 Oct 2021 20:42:38 +0200 Message-Id: <20211028184242.22105-3-kabel@kernel.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211028184242.22105-1-kabel@kernel.org> References: <20211028184242.22105-1-kabel@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211028_114251_467648_FD52545F X-CRM114-Status: GOOD ( 15.44 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org RnJvbTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KClJlbW92ZSBvbGQgUlBDIGltcGxl bWVudGF0aW9uIGFuZCBhZGQgYSBuZXcgbmF0aXZlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbi4KClRo ZSBvbGQgaW1wbGVtZW50YXRpb24gdXNlcyBBUk0gU01DIEFQSSB0byBpc3N1ZSBSUEMgY2FsbHMg dG8gQVJNIFRydXN0ZWQKRmlybXdhcmUgd2hpY2ggcHJvdmlkZXMgcmVhbCBpbXBsZW1lbnRhdGlv biBvZiBQSFkgY29uZmlndXJhdGlvbi4KCkJ1dCBvbGRlciB2ZXJzaW9ucyBvZiBBUk0gVHJ1c3Rl ZCBGaXJtd2FyZSBkbyBub3QgcHJvdmlkZSB0aGlzIFBZCmNvbmZpZ3VyYXRpb24gZnVuY3Rpb25h bGl0eSwgc2ltcGx5IHJldHVybmluZzogb3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQ7IG9yCndvcnNl LCBzb21lIHZlcnNpb25zIHByb3ZpZGUgdGhlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25hbGl0eSBp bmNvcnJlY3RseS4KCkZvciBleGFtcGxlIHRoZSBmaXJtd2FyZSBzaGlwcGVkIGluIEVTUFJFU1NP YmluIGJvYXJkIGhhcyB0aGlzIG9sZGVyCnZlcnNpb24gb2YgQVJNIFRydXN0ZWQgRmlybXdhcmUg YW5kIHRoZXJlZm9yZSBTQVRBLCBVU0IgMy4wIGFuZCBQQ0llCmZ1bmN0aW9uYWxpdHkgZG8gbm90 IHdvcmsgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBMaW51eCBrZXJuZWwuCgpEdWUgdG8gdGhlIGFi b3ZlIHJlYXNvbnMsIHRoZSBmb2xsb3dpbmcgY29tbWl0cyB3ZXJlIGludHJvZHVjZWQgaW50byBM aW51eCwKdG8gd29ya2Fyb3VuZCB0aGVzZSBpc3N1ZXMgYnkgaWdub3JpbmcgLUVPUE5PVFNVUFAg ZXJyb3IgY29kZSBmcm9tCnBoeS1tdmVidS1hMzcwMC1jb21waHkgZHJpdmVyIGZ1bmN0aW9uIHBo eV9wb3dlcl9vbigpOgoKY29tbWl0IDQ1YWVmZTNkMjI1MSAoImF0YTogYWhjaTogbXZlYnU6IE1h a2UgU0FUQSBQSFkgb3B0aW9uYWwgZm9yIEFybWFkYQozNzIwIikKY29tbWl0IDMyNDE5MjliNjdk MiAoInVzYjogaG9zdDogeGhjaTogbXZlYnU6IG1ha2UgVVNCIDMuMCBQSFkgb3B0aW9uYWwgZm9y CkFybWFkYSAzNzIwIikKY29tbWl0IGIwYzZhZTBmODk0OCAoIlBDSTogYWFyZHZhcms6IEZpeCBp bml0aWFsaXphdGlvbiB3aXRoIG9sZCBNYXJ2ZWxsJ3MKQXJtIFRydXN0ZWQgRmlybXdhcmUiKQoK UmVwbGFjZSB0aGlzIFJQQyBpbXBsZW1lbnRhdGlvbiB3aXRoIHByb3BlciBuYXRpdmUga2VybmVs IGltcGxlbWVudGF0aW9uLAp3aGljaCBpcyBpbmRlcGVuZGVudCBvbiB0aGUgZmlybXdhcmUuIE5l dmVyIHJldHVybiAtRU9QTk9UU1VQUCBmb3IgcHJvcGVyCmFyZ3VtZW50cy4KClRoaXMgc2hvdWxk IHNvbHZlIG11bHRpcGxlIGlzc3VlcyB3aXRoIHJlYWwtd29ybGQgYm9hcmRzLCB3aGVyZSBpdCBp cyBub3QKcG9zc2libGUgb3IgcmVhbGx5IGluY29udmVuaWVudCB0byBjaGFuZ2UgdGhlIGZpcm13 YXJlLiBMZXQncyBlbGltaW5hdGUKdGhlc2UgaXNzdWVzLgoKVGhpcyBpbXBsZW1lbnRhdGlvbiBp cyBwb3J0ZWQgZGlyZWN0bHkgZnJvbSBBcm1hZGEgMzcyMCBjb21waHkgZHJpdmVyIGZvdW5kCmlu IG5ld2VzdCB2ZXJzaW9uIG9mIEFSTSBUcnVzdGVkIEZpcm13YXJlIHNvdXJjZSBjb2RlLgoKU2ln bmVkLW9mZi1ieTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KU2lnbmVkLW9mZi1ieTog TWFyZWsgQmVow7puIDxrYWJlbEBrZXJuZWwub3JnPgotLS0KIGRyaXZlcnMvcGh5L21hcnZlbGwv cGh5LW12ZWJ1LWEzNzAwLWNvbXBoeS5jIHwgMTI5NiArKysrKysrKysrKysrKysrLS0KIDEgZmls ZSBjaGFuZ2VkLCAxMTc5IGluc2VydGlvbnMoKyksIDExNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3BoeS9tYXJ2ZWxsL3BoeS1tdmVidS1hMzcwMC1jb21waHkuYyBiL2RyaXZl cnMvcGh5L21hcnZlbGwvcGh5LW12ZWJ1LWEzNzAwLWNvbXBoeS5jCmluZGV4IGRiYjJkNDMwODg1 MS4uM2ZjMDFkOGZiZWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9tYXJ2ZWxsL3BoeS1tdmVi dS1hMzcwMC1jb21waHkuYworKysgYi9kcml2ZXJzL3BoeS9tYXJ2ZWxsL3BoeS1tdmVidS1hMzcw MC1jb21waHkuYwpAQCAtNSwxMiArNSwxNCBAQAogICogQXV0aG9yczoKICAqICAgRXZhbiBXYW5n IDx4c3dhbmdAbWFydmVsbC5jb20+CiAgKiAgIE1pcXXDqGwgUmF5bmFsIDxtaXF1ZWwucmF5bmFs QGJvb3RsaW4uY29tPgorICogICBQYWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgogICoKICAq IFN0cnVjdHVyZSBpbnNwaXJlZCBmcm9tIHBoeS1tdmVidS1jcDExMC1jb21waHkuYyB3cml0dGVu IGJ5IEFudG9pbmUgVGVuYXJ0LgogICogU01DIGNhbGwgaW5pdGlhbCBzdXBwb3J0IGRvbmUgYnkg R3J6ZWdvcnogSmFzemN6eWsuCisgKiBDb21waHkgY29kZSBmcm9tIEFSTSBUcnVzdGVkIEZpcm13 YXJlIHBvcnRlZCBieSBQYWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPi4KICAqLwogCi0jaW5j bHVkZSA8bGludXgvYXJtLXNtY2NjLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVk ZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KICNpbmNsdWRlIDxsaW51 eC9tZmQvc3lzY29uLmg+CkBAIC0xOSwxMDIgKzIxLDExMjIgQEAKICNpbmNsdWRlIDxsaW51eC9w aHkvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKLSNkZWZpbmUg TVZFQlVfQTM3MDBfQ09NUEhZX0xBTkVTCQkzCi0KLS8qIENPTVBIWSBGYXN0IFNNQyBmdW5jdGlv biBpZGVudGlmaWVycyAqLwotI2RlZmluZSBDT01QSFlfU0lQX1BPV0VSX09OCQkJMHg4MjAwMDAw MQotI2RlZmluZSBDT01QSFlfU0lQX1BPV0VSX09GRgkJCTB4ODIwMDAwMDIKLSNkZWZpbmUgQ09N UEhZX1NJUF9QTExfTE9DSwkJCTB4ODIwMDAwMDMKLQotI2RlZmluZSBDT01QSFlfRldfTU9ERV9T QVRBCQkJMHgxCi0jZGVmaW5lIENPTVBIWV9GV19NT0RFX1NHTUlJCQkJMHgyCi0jZGVmaW5lIENP TVBIWV9GV19NT0RFXzI1MDBCQVNFWAkJMHgzCi0jZGVmaW5lIENPTVBIWV9GV19NT0RFX1VTQjNI CQkJMHg0Ci0jZGVmaW5lIENPTVBIWV9GV19NT0RFX1VTQjNECQkJMHg1Ci0jZGVmaW5lIENPTVBI WV9GV19NT0RFX1BDSUUJCQkweDYKLSNkZWZpbmUgQ09NUEhZX0ZXX01PREVfVVNCMwkJCTB4YQot Ci0jZGVmaW5lIENPTVBIWV9GV19TUEVFRF8xXzI1RwkJCTAgLyogU0dNSUkgMUcgKi8KLSNkZWZp bmUgQ09NUEhZX0ZXX1NQRUVEXzJfNUcJCQkxCi0jZGVmaW5lIENPTVBIWV9GV19TUEVFRF8zXzEy NUcJCQkyIC8qIDI1MDBCQVNFLVggKi8KLSNkZWZpbmUgQ09NUEhZX0ZXX1NQRUVEXzVHCQkJMwot I2RlZmluZSBDT01QSFlfRldfU1BFRURfTUFYCQkJMHgzRgotCi0jZGVmaW5lIENPTVBIWV9GV19N T0RFKG1vZGUpCQkJKChtb2RlKSA8PCAxMikKLSNkZWZpbmUgQ09NUEhZX0ZXX05FVChtb2RlLCBp ZHgsIHNwZWVkKQkJKENPTVBIWV9GV19NT0RFKG1vZGUpIHwgXAotCQkJCQkJICgoaWR4KSA8PCA4 KSB8CVwKLQkJCQkJCSAoKHNwZWVkKSA8PCAyKSkKLSNkZWZpbmUgQ09NUEhZX0ZXX1BDSUUobW9k ZSwgc3BlZWQsIHdpZHRoKQkoQ09NUEhZX0ZXX05FVChtb2RlLCAwLCBzcGVlZCkgfCBcCi0JCQkJ CQkgKCh3aWR0aCkgPDwgMTgpKQorI2RlZmluZSBQTExfU0VUX0RFTEFZX1VTCQkJNjAwCisjZGVm aW5lIENPTVBIWV9QTExfU0xFRVAJCQkxMDAwCisjZGVmaW5lIENPTVBIWV9QTExfVElNRU9VVAkJ CTE1MDAwMAorCisjZGVmaW5lIENPTVBIWV9TRUxFQ1RPUl9QSFlfUkVHCQkJMHhGQworLyogYml0 MDogMDogTGFuZTAgaXMgR0JFMDsgMTogTGFuZTEgaXMgUENJRSAqLworI2RlZmluZSBDT01QSFlf U0VMRUNUT1JfUENJRV9HQkUwX1NFTF9CSVQJQklUKDApCisvKiBiaXQ0OiAwOiBMYW5lMSBpcyBH QkUxOyAxOiBMYW5lMSBpcyBVU0IzICovCisjZGVmaW5lIENPTVBIWV9TRUxFQ1RPUl9VU0IzX0dC RTFfU0VMX0JJVAlCSVQoNCkKKy8qIGJpdDg6IDA6IExhbmUxIGlzIFVTQiwgTGFuZTIgaXMgU0FU QTsgMTogTGFuZTIgaXMgVVNCMyAqLworI2RlZmluZSBDT01QSFlfU0VMRUNUT1JfVVNCM19QSFlf U0VMX0JJVAlCSVQoOCkKKworLyogU0FUQSBQSFkgcmVnaXN0ZXIgb2Zmc2V0ICovCisjZGVmaW5l IFNBVEFQSFlfTEFORTJfUkVHX0JBU0VfT0ZGU0VUCQkweDIwMAorCisvKiBVU0IzIFBIWSBvZmZz ZXQgY29tcGFyZWQgdG8gU0FUQSBQSFkgKi8KKyNkZWZpbmUgVVNCM1BIWV9MQU5FMl9SRUdfQkFT RV9PRkZTRVQJCTB4MjAwCisKKy8qIENvbXBoeSBsYW5lMiBpbmRpcmVjdCBhY2Nlc3MgcmVnaXN0 ZXIgb2Zmc2V0ICovCisjZGVmaW5lIENPTVBIWV9MQU5FMl9JTkRJUl9BRERSX09GRlNFVAkJMHgw CisjZGVmaW5lIENPTVBIWV9MQU5FMl9JTkRJUl9EQVRBX09GRlNFVAkJMHg0CisKKy8qIFBIWSBz aGlmdCB0byBnZXQgcmVsYXRlZCByZWdpc3RlciBhZGRyZXNzICovCitlbnVtIHsKKwlQQ0lFID0g MSwKKwlVU0IzLAorfTsKKworI2RlZmluZSBQQ0lFUEhZX1NIRlQJCQkyCisjZGVmaW5lIFVTQjNQ SFlfU0hGVAkJCTIKKyNkZWZpbmUgUEhZX1NIRlQodW5pdCkJCQkoKHVuaXQgPT0gUENJRSkgPyBQ Q0lFUEhZX1NIRlQgOiBVU0IzUEhZX1NIRlQpCisKKy8qIFBIWSByZWdpc3RlciAqLworI2RlZmlu ZSBDT01QSFlfUE9XRVJfUExMX0NUUkwJCTB4MDEKKyNkZWZpbmUgUFdSX1BMTF9DVFJMX0FERFIo dW5pdCkJCShDT01QSFlfUE9XRVJfUExMX0NUUkwgKiBQSFlfU0hGVCh1bml0KSkKKyNkZWZpbmUg UFVfSVZSRUZfQklUCQkJQklUKDE1KQorI2RlZmluZSBQVV9QTExfQklUCQkJQklUKDE0KQorI2Rl ZmluZSBQVV9SWF9CSVQJCQlCSVQoMTMpCisjZGVmaW5lIFBVX1RYX0JJVAkJCUJJVCgxMikKKyNk ZWZpbmUgUFVfVFhfSU5UUF9CSVQJCQlCSVQoMTEpCisjZGVmaW5lIFBVX0RGRV9CSVQJCQlCSVQo MTApCisjZGVmaW5lIFJFU0VUX0RUTF9SWF9CSVQJCUJJVCg5KQorI2RlZmluZSBQTExfTE9DS19C SVQJCQlCSVQoOCkKKyNkZWZpbmUgUkVGX0ZSRUZfU0VMX09GRlNFVAkJMAorI2RlZmluZSBSRUZf RlJFRl9TRUxfTUFTSwkJKDB4MUYgPDwgUkVGX0ZSRUZfU0VMX09GRlNFVCkKKyNkZWZpbmUgUkVG X0NMT0NLX1NQRUVEXzI1TQkJKDB4MSA8PCBSRUZfRlJFRl9TRUxfT0ZGU0VUKQorI2RlZmluZSBS RUZfQ0xPQ0tfU1BFRURfMzBNCQkoMHgyIDw8IFJFRl9GUkVGX1NFTF9PRkZTRVQpCisjZGVmaW5l IFBDSUVfUkVGX0NMT0NLX1NQRUVEXzI1TQlSRUZfQ0xPQ0tfU1BFRURfMzBNCisjZGVmaW5lIFVT QjNfUkVGX0NMT0NLX1NQRUVEXzI1TQlSRUZfQ0xPQ0tfU1BFRURfMzBNCisjZGVmaW5lIFJFRl9D TE9DS19TUEVFRF80ME0JCSgweDMgPDwgUkVGX0ZSRUZfU0VMX09GRlNFVCkKKyNkZWZpbmUgUkVG X0NMT0NLX1NQRUVEXzUwTQkJKDB4NCA8PCBSRUZfRlJFRl9TRUxfT0ZGU0VUKQorI2RlZmluZSBD T01QSFlfTU9ERV9PRkZTRVQJCTUKKyNkZWZpbmUgQ09NUEhZX01PREVfTUFTSwkJKDcgPDwgQ09N UEhZX01PREVfT0ZGU0VUKQorI2RlZmluZSBDT01QSFlfTU9ERV9TQVRBCQkoMHgwIDw8IENPTVBI WV9NT0RFX09GRlNFVCkKKyNkZWZpbmUgQ09NUEhZX01PREVfUENJRQkJKDB4MyA8PCBDT01QSFlf TU9ERV9PRkZTRVQpCisjZGVmaW5lIENPTVBIWV9NT0RFX1NFUkRFUwkJKDB4NCA8PCBDT01QSFlf TU9ERV9PRkZTRVQpCisjZGVmaW5lIENPTVBIWV9NT0RFX1VTQjMJCSgweDUgPDwgQ09NUEhZX01P REVfT0ZGU0VUKQorCisjZGVmaW5lIENPTVBIWV9LVkNPX0NBTF9DVFJMCQkweDAyCisjZGVmaW5l IEtWQ09fQ0FMX0NUUkxfQUREUih1bml0KQkoQ09NUEhZX0tWQ09fQ0FMX0NUUkwgKiBQSFlfU0hG VCh1bml0KSkKKyNkZWZpbmUgVVNFX01BWF9QTExfUkFURV9CSVQJCUJJVCgxMikKKyNkZWZpbmUg U1BFRURfUExMX09GRlNFVAkJMgorI2RlZmluZSBTUEVFRF9QTExfTUFTSwkJCSgweDNGIDw8IFNQ RUVEX1BMTF9PRkZTRVQpCisjZGVmaW5lIFNQRUVEX1BMTF9WQUxVRV8xNgkJKDB4MTAgPDwgU1BF RURfUExMX09GRlNFVCkKKworI2RlZmluZSBDT01QSFlfUkVTRVJWRURfUkVHCQkweDBFCisjZGVm aW5lIFBIWUNUUkxfRlJNX1BJTl9CSVQJCUJJVCgxMykKKworI2RlZmluZSBDT01QSFlfTE9PUEJB Q0tfUkVHMAkJMHgyMworI2RlZmluZSBESUdfTEJfRU5fQUREUih1bml0KQkJKENPTVBIWV9MT09Q QkFDS19SRUcwICogUEhZX1NIRlQodW5pdCkpCisjZGVmaW5lIFNFTF9EQVRBX1dJRFRIX09GRlNF VAkJMTAKKyNkZWZpbmUgU0VMX0RBVEFfV0lEVEhfTUFTSwkJKDB4MyA8PCBTRUxfREFUQV9XSURU SF9PRkZTRVQpCisjZGVmaW5lIERBVEFfV0lEVEhfMTBCSVQJCSgweDAgPDwgU0VMX0RBVEFfV0lE VEhfT0ZGU0VUKQorI2RlZmluZSBEQVRBX1dJRFRIXzIwQklUCQkoMHgxIDw8IFNFTF9EQVRBX1dJ RFRIX09GRlNFVCkKKyNkZWZpbmUgREFUQV9XSURUSF80MEJJVAkJKDB4MiA8PCBTRUxfREFUQV9X SURUSF9PRkZTRVQpCisjZGVmaW5lIFBMTF9SRUFEWV9UWF9CSVQJCUJJVCg0KQorCisjZGVmaW5l IENPTVBIWV9TWU5DX1BBVFRFUk5fUkVHCQkweDI0CisjZGVmaW5lIFNZTkNfUEFUVEVSTl9SRUdf QUREUih1bml0KQkoQ09NUEhZX1NZTkNfUEFUVEVSTl9SRUcgKiBQSFlfU0hGVCh1bml0KSkKKyNk ZWZpbmUgVFhEX0lOVkVSVF9CSVQJCQlCSVQoMTApCisjZGVmaW5lIFJYRF9JTlZFUlRfQklUCQkJ QklUKDExKQorCisjZGVmaW5lIENPTVBIWV9TWU5DX01BU0tfR0VOX1JFRwkweDI1CisjZGVmaW5l IFBIWV9HRU5fTUFYX09GRlNFVAkJMTAKKyNkZWZpbmUgUEhZX0dFTl9NQVhfTUFTSwkJKDMgPDwg UEhZX0dFTl9NQVhfT0ZGU0VUKQorI2RlZmluZSBQSFlfR0VOX1VTQjNfNUcJCQkoMSA8PCBQSFlf R0VOX01BWF9PRkZTRVQpCisKKyNkZWZpbmUgQ09NUEhZX0lTT0xBVElPTl9DVFJMX1JFRwkweDI2 CisjZGVmaW5lIElTT0xBVElPTl9DVFJMX1JFR19BRERSKHVuaXQpCShDT01QSFlfSVNPTEFUSU9O X0NUUkxfUkVHICogUEhZX1NIRlQodW5pdCkpCisjZGVmaW5lIFBIWV9JU09MQVRFX01PREUJCUJJ VCgxNSkKKworI2RlZmluZSBDT01QSFlfTUlTQ19SRUcwX0FERFIJCTB4NEYKKyNkZWZpbmUgTUlT Q19SRUcwX0FERFIodW5pdCkJCShDT01QSFlfTUlTQ19SRUcwX0FERFIgKiBQSFlfU0hGVCh1bml0 KSkKKyNkZWZpbmUgQ0xLMTAwTV8xMjVNX0VOCQkJQklUKDQpCisjZGVmaW5lIFRYRENMS18yWF9T RUwJCQlCSVQoNikKKyNkZWZpbmUgQ0xLNTAwTV9FTgkJCUJJVCg3KQorI2RlZmluZSBQSFlfUkVG X0NMS19TRUwJCQlCSVQoMTApCisjZGVmaW5lIE1JU0NfUkVHMF9ERUZBVUxUX1ZBTFVFCQkweEEw MEQKKworI2RlZmluZSBDT01QSFlfUkVHX0dFTjJfU0VUXzIJCTB4M2UKKyNkZWZpbmUgR0VOMl9T RVRUSU5HXzJfQUREUih1bml0KQkoQ09NUEhZX1JFR19HRU4yX1NFVF8yICogUEhZX1NIRlQodW5p dCkpCisjZGVmaW5lIEcyX1RYX1NTQ19BTVBfVkFMVUVfMjAJCUJJVCgxNCkKKyNkZWZpbmUgRzJf VFhfU1NDX0FNUF9PRkYJCTkKKyNkZWZpbmUgRzJfVFhfU1NDX0FNUF9MRU4JCTcKKyNkZWZpbmUg RzJfVFhfU1NDX0FNUF9NQVNLCQkoKCgxIDw8IEcyX1RYX1NTQ19BTVBfTEVOKSAtIDEpIDw8IEcy X1RYX1NTQ19BTVBfT0ZGKQorCisjZGVmaW5lIENPTVBIWV9SRUdfR0VOMl9TRVRfMwkJMHgzZgor I2RlZmluZSBHRU4yX1NFVFRJTkdfM19BRERSKHVuaXQpCShDT01QSFlfUkVHX0dFTjJfU0VUXzMg KiBQSFlfU0hGVCh1bml0KSkKKyNkZWZpbmUgRzNfVFhfU1NDX0FNUF9PRkYJCTkKKyNkZWZpbmUg RzNfVFhfU1NDX0FNUF9MRU4JCTcKKyNkZWZpbmUgRzNfVFhfU1NDX0FNUF9NQVNLCQkoKCgxIDw8 IEcyX1RYX1NTQ19BTVBfTEVOKSAtIDEpIDw8IEcyX1RYX1NTQ19BTVBfT0ZGKQorI2RlZmluZSBH M19WUkVHX1JYVFhfTUFTX0lTRVRfT0ZGCTcKKyNkZWZpbmUgRzNfVlJFR19SWFRYX01BU19JU0VU XzYwVQkoMCA8PCBHM19WUkVHX1JYVFhfTUFTX0lTRVRfT0ZGKQorI2RlZmluZSBHM19WUkVHX1JY VFhfTUFTX0lTRVRfODBVCSgxIDw8IEczX1ZSRUdfUlhUWF9NQVNfSVNFVF9PRkYpCisjZGVmaW5l IEczX1ZSRUdfUlhUWF9NQVNfSVNFVF8xMDBVCSgyIDw8IEczX1ZSRUdfUlhUWF9NQVNfSVNFVF9P RkYpCisjZGVmaW5lIEczX1ZSRUdfUlhUWF9NQVNfSVNFVF8xMjBVCSgzIDw8IEczX1ZSRUdfUlhU WF9NQVNfSVNFVF9PRkYpCisjZGVmaW5lIEczX1ZSRUdfUlhUWF9NQVNfSVNFVF9NQVNLCShCSVQo NykgfCBCSVQoOCkpCisjZGVmaW5lIFJTVkRfUEgwM0ZIXzZfMF9PRkYJCTAKKyNkZWZpbmUgUlNW RF9QSDAzRkhfNl8wX0xFTgkJNworI2RlZmluZSBSU1ZEX1BIMDNGSF82XzBfTUFTSwkJKCgoMSA8 PCBSU1ZEX1BIMDNGSF82XzBfTEVOKSAtIDEpIDw8IFJTVkRfUEgwM0ZIXzZfMF9PRkYpCisKKyNk ZWZpbmUgQ09NUEhZX1JFR19VTklUX0NUUkxfQUREUgkweDQ4CisjZGVmaW5lIFVOSVRfQ1RSTF9B RERSKHVuaXQpCQkoQ09NUEhZX1JFR19VTklUX0NUUkxfQUREUiAqIFBIWV9TSEZUKHVuaXQpKQor I2RlZmluZSBJRExFX1NZTkNfRU4JCQlCSVQoMTIpCisjZGVmaW5lIFVOSVRfQ1RSTF9ERUZBVUxU X1ZBTFVFCQkweDYwCisKKyNkZWZpbmUgQ09NUEhZX01JU0NfUkVHMV9BRERSCQkweDczCisjZGVm aW5lIE1JU0NfUkVHMV9BRERSKHVuaXQpCQkoQ09NUEhZX01JU0NfUkVHMV9BRERSICogUEhZX1NI RlQodW5pdCkpCisjZGVmaW5lIFNFTF9CSVRTX1BDSUVfRk9SQ0UJCUJJVCgxNSkKKworI2RlZmlu ZSBDT01QSFlfUkVHX0dFTjNfU0VUVElOR1NfMwkweDExMgorI2RlZmluZSBDT01QSFlfR0VOX0ZG RV9DQVBfU0VMX01BU0sJMHhGCisjZGVmaW5lIENPTVBIWV9HRU5fRkZFX0NBUF9TRUxfVkFMVUUJ MHhGCisKKyNkZWZpbmUgQ09NUEhZX1JFR19MQU5FX0NGRzBfQUREUgkweDE4MAorI2RlZmluZSBM QU5FX0NGRzBfQUREUih1bml0KQkJKENPTVBIWV9SRUdfTEFORV9DRkcwX0FERFIgKiBQSFlfU0hG VCh1bml0KSkKKyNkZWZpbmUgUFJEX1RYREVFTVBIMF9NQVNLCQlCSVQoMCkKKyNkZWZpbmUgUFJE X1RYTUFSR0lOX01BU0sJCShCSVQoMSkgfCBCSVQoMikgfCBCSVQoMykpCisjZGVmaW5lIFBSRF9U WFNXSU5HX01BU0sJCUJJVCg0KQorI2RlZmluZSBDRkdfVFhfQUxJR05fUE9TX01BU0sJCShCSVQo NSkgfCBCSVQoNikgfCBCSVQoNykgfCBCSVQoOCkpCisKKyNkZWZpbmUgQ09NUEhZX1JFR19MQU5F X0NGRzFfQUREUgkweDE4MQorI2RlZmluZSBMQU5FX0NGRzFfQUREUih1bml0KQkJKENPTVBIWV9S RUdfTEFORV9DRkcxX0FERFIgKiBQSFlfU0hGVCh1bml0KSkKKyNkZWZpbmUgUFJEX1RYREVFTVBI MV9NQVNLCQlCSVQoMTUpCisjZGVmaW5lIFVTRV9NQVhfUExMX1JBVEVfRU4JCUJJVCg5KQorI2Rl ZmluZSBUWF9ERVRfUlhfTU9ERQkJCUJJVCg2KQorI2RlZmluZSBHRU4yX1RYX0RBVEFfRExZX01B U0sJCShCSVQoMykgfCBCSVQoNCkpCisjZGVmaW5lIEdFTjJfVFhfREFUQV9ETFlfREVGVAkJKDIg PDwgMykKKyNkZWZpbmUgVFhfRUxFQ19JRExFX01PREVfRU4JCUJJVCgwKQorCisjZGVmaW5lIENP TVBIWV9SRUdfTEFORV9TVEFUVVMxX0FERFIJMHgxODMKKyNkZWZpbmUgTEFORV9TVEFUVVMxX0FE RFIodW5pdCkJCShDT01QSFlfUkVHX0xBTkVfU1RBVFVTMV9BRERSICogUEhZX1NIRlQodW5pdCkp CisjZGVmaW5lIFRYRENMS19QQ0xLX0VOCQkJQklUKDApCisKKyNkZWZpbmUgQ09NUEhZX1JFR19M QU5FX0NGRzRfQUREUgkweDE4OAorI2RlZmluZSBMQU5FX0NGRzRfQUREUih1bml0KQkJKENPTVBI WV9SRUdfTEFORV9DRkc0X0FERFIgKiBQSFlfU0hGVCh1bml0KSkKKyNkZWZpbmUgU1BSRUFEX1NQ RUNUUlVNX0NMS19FTgkJQklUKDcpCisKKyNkZWZpbmUgQ09NUEhZX1JFR19HTE9CX1BIWV9DVFJM MF9BRERSCTB4MUMxCisjZGVmaW5lIEdMT0JfUEhZX0NUUkwwX0FERFIodW5pdCkJKENPTVBIWV9S RUdfR0xPQl9QSFlfQ1RSTDBfQUREUiAqIFBIWV9TSEZUKHVuaXQpKQorI2RlZmluZSBTT0ZUX1JF U0VUCQkJQklUKDApCisjZGVmaW5lIE1PREVfUkVGRElWCQkJMHgzMAorI2RlZmluZSBNT0RFX0NP UkVfQ0xLX0ZSRVFfU0VMCQlCSVQoOSkKKyNkZWZpbmUgTU9ERV9QSVBFX1dJRFRIXzMyCQlCSVQo MykKKyNkZWZpbmUgTU9ERV9SRUZESVZfT0ZGU0VUCQk0CisjZGVmaW5lIE1PREVfUkVGRElWX0xF TgkJCTIKKyNkZWZpbmUgTU9ERV9SRUZESVZfTUFTSwkJKDB4MyA8PCBNT0RFX1JFRkRJVl9PRkZT RVQpCisjZGVmaW5lIE1PREVfUkVGRElWX0JZXzQJCSgweDIgPDwgTU9ERV9SRUZESVZfT0ZGU0VU KQorCisjZGVmaW5lIENPTVBIWV9SRUdfVEVTVF9NT0RFX0NUUkxfQUREUgkweDFDMgorI2RlZmlu ZSBURVNUX01PREVfQ1RSTF9BRERSKHVuaXQpCShDT01QSFlfUkVHX1RFU1RfTU9ERV9DVFJMX0FE RFIgKiBQSFlfU0hGVCh1bml0KSkKKyNkZWZpbmUgTU9ERV9NQVJHSU5fT1ZFUlJJREUJCUJJVCgy KQorCisjZGVmaW5lIENPTVBIWV9SRUdfR0xPQl9DTEtfU1JDX0xPX0FERFIJMHgxQzMKKyNkZWZp bmUgR0xPQl9DTEtfU1JDX0xPX0FERFIodW5pdCkJKENPTVBIWV9SRUdfR0xPQl9DTEtfU1JDX0xP X0FERFIgKiBQSFlfU0hGVCh1bml0KSkKKyNkZWZpbmUgTU9ERV9DTEtfU1JDCQkJQklUKDApCisj ZGVmaW5lIEJVTkRMRV9QRVJJT0RfU0VMCQlCSVQoMSkKKyNkZWZpbmUgQlVORExFX1BFUklPRF9T Q0FMRQkJKEJJVCgyKSB8IEJJVCgzKSkKKyNkZWZpbmUgQlVORExFX1NBTVBMRV9DVFJMCQlCSVQo NCkKKyNkZWZpbmUgUExMX1JFQURZX0RMWQkJCShCSVQoNSkgfCBCSVQoNikgfCBCSVQoNykpCisj ZGVmaW5lIENGR19TRUxfMjBCCQkJQklUKDE1KQorCisjZGVmaW5lIENPTVBIWV9SRUdfUFdSX01H TV9USU0xX0FERFIJMHgxRDAKKyNkZWZpbmUgUFdSX01HTV9USU0xX0FERFIodW5pdCkJCShDT01Q SFlfUkVHX1BXUl9NR01fVElNMV9BRERSICogUEhZX1NIRlQodW5pdCkpCisjZGVmaW5lIENGR19Q TV9PU0NDTEtfV0FJVF9PRkYJCTEyCisjZGVmaW5lIENGR19QTV9PU0NDTEtfV0FJVF9MRU4JCTQK KyNkZWZpbmUgQ0ZHX1BNX09TQ0NMS19XQUlUX01BU0sJCSgoKDEgPDwgQ0ZHX1BNX09TQ0NMS19X QUlUX0xFTikgLSAxKSA8PCBcCisJCQkJCSBDRkdfUE1fT1NDQ0xLX1dBSVRfT0ZGKQorI2RlZmlu ZSBDRkdfUE1fUlhERU5fV0FJVF9PRkYJCTgKKyNkZWZpbmUgQ0ZHX1BNX1JYREVOX1dBSVRfTEVO CQk0CisjZGVmaW5lIENGR19QTV9SWERFTl9XQUlUX01BU0sJCSgoKDEgPDwgQ0ZHX1BNX1JYREVO X1dBSVRfTEVOKSAtIDEpIDw8IFwKKwkJCQkJIENGR19QTV9SWERFTl9XQUlUX09GRikKKyNkZWZp bmUgQ0ZHX1BNX1JYREVOX1dBSVRfMV9VTklUCSgxIDw8IENGR19QTV9SWERFTl9XQUlUX09GRikK KyNkZWZpbmUgQ0ZHX1BNX1JYRExPWl9XQUlUX09GRgkJMAorI2RlZmluZSBDRkdfUE1fUlhETE9a X1dBSVRfTEVOCQk4CisjZGVmaW5lIENGR19QTV9SWERMT1pfV0FJVF9NQVNLCQkoKCgxIDw8IENG R19QTV9SWERMT1pfV0FJVF9MRU4pIC0gMSkgPDwgXAorCQkJCQkgQ0ZHX1BNX1JYRExPWl9XQUlU X09GRikKKyNkZWZpbmUgQ0ZHX1BNX1JYRExPWl9XQUlUXzdfVU5JVAkoNyA8PCBDRkdfUE1fUlhE TE9aX1dBSVRfT0ZGKQorI2RlZmluZSBDRkdfUE1fUlhETE9aX1dBSVRfMTJfVU5JVAkoMHhDIDw8 IENGR19QTV9SWERMT1pfV0FJVF9PRkYpCisKKy8qIFNFUkRFUyAqLworI2RlZmluZSBDT01QSFlf UEhZX0NGRzFfT0ZGU0VUKGxhbmUpCSgoMSAtIChsYW5lKSkgKiAweDI4KQorI2RlZmluZSBQSU5f UFVfSVZFUkVGX0JJVAkJQklUKDEpCisjZGVmaW5lIFBJTl9SRVNFVF9DT1JFX0JJVAkJQklUKDEx KQorI2RlZmluZSBQSU5fUkVTRVRfQ09NUEhZX0JJVAkJQklUKDEyKQorI2RlZmluZSBQSU5fUFVf UExMX0JJVAkJCUJJVCgxNikKKyNkZWZpbmUgUElOX1BVX1JYX0JJVAkJCUJJVCgxNykKKyNkZWZp bmUgUElOX1BVX1RYX0JJVAkJCUJJVCgxOCkKKyNkZWZpbmUgUElOX1RYX0lETEVfQklUCQkJQklU KDE5KQorI2RlZmluZSBHRU5fUlhfU0VMX09GRlNFVAkJMjIKKyNkZWZpbmUgR0VOX1JYX1NFTF9N QVNLCQkJKDB4RiA8PCBHRU5fUlhfU0VMX09GRlNFVCkKKyNkZWZpbmUgR0VOX1RYX1NFTF9PRkZT RVQJCTI2CisjZGVmaW5lIEdFTl9UWF9TRUxfTUFTSwkJCSgweEYgPDwgR0VOX1RYX1NFTF9PRkZT RVQpCisjZGVmaW5lIFBIWV9SWF9JTklUX0JJVAkJCUJJVCgzMCkKKyNkZWZpbmUgU0VSREVTX1NQ RUVEXzFfMjVfRwkJMHg2CisjZGVmaW5lIFNFUkRFU19TUEVFRF8yXzVfRwkJMHg4CisKKy8qIENP TVBIWSBzdGF0dXMgcmVnOgorICogbGFuZTA6IFBDSWUvR2JFMCBQSFkgU3RhdHVzIDEKKyAqIGxh bmUxOiBVU0IzL0diRTEgUEhZIFN0YXR1cyAxCisgKi8KKyNkZWZpbmUgQ09NUEhZX1BIWV9TVEFU VVNfT0ZGU0VUKGxhbmUpCSgweDE4ICsgKDEgLSAobGFuZSkpICogMHgyOCkKKyNkZWZpbmUgUEhZ X1JYX0lOSVRfRE9ORV9CSVQJCUJJVCgwKQorI2RlZmluZSBQSFlfUExMX1JFQURZX1JYX0JJVAkJ QklUKDIpCisjZGVmaW5lIFBIWV9QTExfUkVBRFlfVFhfQklUCQlCSVQoMykKKworI2RlZmluZSBH QkVfUEhZX0FERFIoYmFzZSwgb2ZmKQkJKChiYXNlKSArICgoKG9mZikgJiAweDAwMDA3RkYpICog MikpCiAKIHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfY29uZiB7CiAJdW5zaWduZWQgaW50IGxh bmU7CiAJZW51bSBwaHlfbW9kZSBtb2RlOwogCWludCBzdWJtb2RlOwotCXUzMiBmd19tb2RlOwog fTsKIAotI2RlZmluZSBNVkVCVV9BMzcwMF9DT01QSFlfQ09ORihfbGFuZSwgX21vZGUsIF9zbW9k ZSwgX2Z3KQkJXAorI2RlZmluZSBNVkVCVV9BMzcwMF9DT01QSFlfQ09ORihfbGFuZSwgX21vZGUs IF9zbW9kZSkJCQlcCiAJewkJCQkJCQkJXAogCQkubGFuZSA9IF9sYW5lLAkJCQkJCVwKIAkJLm1v ZGUgPSBfbW9kZSwJCQkJCQlcCiAJCS5zdWJtb2RlID0gX3Ntb2RlLAkJCQkJXAotCQkuZndfbW9k ZSA9IF9mdywJCQkJCQlcCiAJfQogCi0jZGVmaW5lIE1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0dF TihfbGFuZSwgX21vZGUsIF9mdykgXAotCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GKF9sYW5lLCBf bW9kZSwgUEhZX0lOVEVSRkFDRV9NT0RFX05BLCBfZncpCisjZGVmaW5lIE1WRUJVX0EzNzAwX0NP TVBIWV9DT05GX0dFTihfbGFuZSwgX21vZGUpIFwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORihf bGFuZSwgX21vZGUsIFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSkKIAotI2RlZmluZSBNVkVCVV9BMzcw MF9DT01QSFlfQ09ORl9FVEgoX2xhbmUsIF9zbW9kZSwgX2Z3KSBcCi0JTVZFQlVfQTM3MDBfQ09N UEhZX0NPTkYoX2xhbmUsIFBIWV9NT0RFX0VUSEVSTkVULCBfc21vZGUsIF9mdykKKyNkZWZpbmUg TVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfRVRIKF9sYW5lLCBfc21vZGUpIFwKKwlNVkVCVV9BMzcw MF9DT01QSFlfQ09ORihfbGFuZSwgUEhZX01PREVfRVRIRVJORVQsIF9zbW9kZSkKIAogc3RhdGlj IGNvbnN0IHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfY29uZiBtdmVidV9hMzcwMF9jb21waHlf bW9kZXNbXSA9IHsKIAkvKiBsYW5lIDAgKi8KLQlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9HRU4o MCwgUEhZX01PREVfVVNCX0hPU1RfU1MsCi0JCQkJICAgIENPTVBIWV9GV19NT0RFX1VTQjNIKSwK LQlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9FVEgoMCwgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJ LAotCQkJCSAgICBDT01QSFlfRldfTU9ERV9TR01JSSksCi0JTVZFQlVfQTM3MDBfQ09NUEhZX0NP TkZfRVRIKDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgsCi0JCQkJICAgIENPTVBIWV9G V19NT0RFXzI1MDBCQVNFWCksCisJTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfR0VOKDAsIFBIWV9N T0RFX1VTQl9IT1NUX1NTKSwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9FVEgoMCwgUEhZX0lO VEVSRkFDRV9NT0RFX1NHTUlJKSwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9FVEgoMCwgUEhZ X0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCksCisJTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfRVRI KDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgpLAogCS8qIGxhbmUgMSAqLwotCU1WRUJV X0EzNzAwX0NPTVBIWV9DT05GX0dFTigxLCBQSFlfTU9ERV9QQ0lFLCBDT01QSFlfRldfTU9ERV9Q Q0lFKSwKLQlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9FVEgoMSwgUEhZX0lOVEVSRkFDRV9NT0RF X1NHTUlJLAotCQkJCSAgICBDT01QSFlfRldfTU9ERV9TR01JSSksCi0JTVZFQlVfQTM3MDBfQ09N UEhZX0NPTkZfRVRIKDEsIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgsCi0JCQkJICAgIENP TVBIWV9GV19NT0RFXzI1MDBCQVNFWCksCisJTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfR0VOKDEs IFBIWV9NT0RFX1BDSUUpLAorCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0VUSCgxLCBQSFlfSU5U RVJGQUNFX01PREVfU0dNSUkpLAorCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0VUSCgxLCBQSFlf SU5URVJGQUNFX01PREVfMTAwMEJBU0VYKSwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9FVEgo MSwgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCksCiAJLyogbGFuZSAyICovCi0JTVZFQlVf QTM3MDBfQ09NUEhZX0NPTkZfR0VOKDIsIFBIWV9NT0RFX1NBVEEsIENPTVBIWV9GV19NT0RFX1NB VEEpLAotCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0dFTigyLCBQSFlfTU9ERV9VU0JfSE9TVF9T UywKLQkJCQkgICAgQ09NUEhZX0ZXX01PREVfVVNCM0gpLAorCU1WRUJVX0EzNzAwX0NPTVBIWV9D T05GX0dFTigyLCBQSFlfTU9ERV9TQVRBKSwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9HRU4o MiwgUEhZX01PREVfVVNCX0hPU1RfU1MpLAorfTsKKworc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBo eV9wcml2IHsKKwl2b2lkIF9faW9tZW0gKmNvbXBoeV9yZWdzOworCXZvaWQgX19pb21lbSAqcGNp ZV9nYmUwX3BoeV9yZWdzOworCXZvaWQgX19pb21lbSAqdXNiM19nYmUxX3BoeV9yZWdzOworCXZv aWQgX19pb21lbSAqc2F0YV91c2IzX3BoeV9yZWdzOworCWJvb2wgeHRhbF9pc180MG07CiB9Owog CiBzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xhbmUgeworCXN0cnVjdCBtdmVidV9hMzcwMF9j b21waHlfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgaW50IGlk OwogCWVudW0gcGh5X21vZGUgbW9kZTsKIAlpbnQgc3VibW9kZTsKKwlib29sIGludmVydF90eDsK Kwlib29sIGludmVydF9yeDsKK307CisKK3N0cnVjdCBnYmVfcGh5X2luaXRfZGF0YV9maXggewor CXUxNiBhZGRyOworCXUxNiB2YWx1ZTsKK307CisKKy8qIENoYW5nZXMgdG8gNDBNMUcyNSBtb2Rl IGRhdGEgcmVxdWlyZWQgZm9yIHJ1bm5pbmcgNDBNM0cxMjUgaW5pdCBtb2RlICovCitzdGF0aWMg c3RydWN0IGdiZV9waHlfaW5pdF9kYXRhX2ZpeCBnYmVfcGh5X2luaXRfZml4W10gPSB7CisJezB4 MDA1LCAweDA3Q0N9LCB7MHgwMTUsIDB4MDAwMH0sIHsweDAxQiwgMHgwMDAwfSwgezB4MDFELCAw eDAwMDB9LAorCXsweDAxRSwgMHgwMDAwfSwgezB4MDFGLCAweDAwMDB9LCB7MHgwMjAsIDB4MDAw MH0sIHsweDAyMSwgMHgwMDMwfSwKKwl7MHgwMjYsIDB4MDg4OH0sIHsweDA0RCwgMHgwMTUyfSwg ezB4MDRGLCAweEEwMjB9LCB7MHgwNTAsIDB4MDdDQ30sCisJezB4MDUzLCAweEU5Q0F9LCB7MHgw NTUsIDB4QkQ5N30sIHsweDA3MSwgMHgzMDE1fSwgezB4MDc2LCAweDAzQUF9LAorCXsweDA3Qywg MHgwRkRGfSwgezB4MEMyLCAweDMwMzB9LCB7MHgwQzMsIDB4ODAwMH0sIHsweDBFMiwgMHg1NTUw fSwKKwl7MHgwRTMsIDB4MTJBNH0sIHsweDBFNCwgMHg3RDAwfSwgezB4MEU2LCAweDBDODN9LCB7 MHgxMDEsIDB4RkNDMH0sCisJezB4MTA0LCAweDBDMTB9Cit9OworCisvKiA0ME0xRzI1IG1vZGUg aW5pdCBkYXRhICovCitzdGF0aWMgdTE2IGdiZV9waHlfaW5pdFs1MTJdID0geworCS8qIDAgICAg ICAgMSAgICAgICAyICAgICAgIDMgICAgICAgNCAgICAgICA1ICAgICAgIDYgICAgICAgNyAqLwor CS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0qLworCS8qIDggICAgICAgOSAgICAgICBBICAgICAgIEIgICAgICAgQyAgICAgICBEICAg ICAgIEUgICAgICAgRiAqLworCTB4MzExMCwgMHhGRDgzLCAweDY0MzAsIDB4NDEyRiwgMHg4MkMw LCAweDA2RkEsIDB4NDUwMCwgMHg2RDI2LAkvKiAwMCAqLworCTB4QUZDMCwgMHg4MDAwLCAweEMw MDAsIDB4MDAwMCwgMHgyMDAwLCAweDQ5Q0MsIDB4MEJDOSwgMHgyQTUyLAkvKiAwOCAqLworCTB4 MEJEMiwgMHgwQ0RFLCAweDEzRDIsIDB4MENFOCwgMHgxMTQ5LCAweDEwRTAsIDB4MDAwMCwgMHgw MDAwLAkvKiAxMCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMSwgMHgwMDAwLCAw eDQxMzQsIDB4MEQyRCwgMHhGRkZGLAkvKiAxOCAqLworCTB4RkZFMCwgMHg0MDMwLCAweDEwMTYs IDB4MDAzMCwgMHgwMDAwLCAweDA4MDAsIDB4MDg2NiwgMHgwMDAwLAkvKiAyMCAqLworCTB4MDAw MCwgMHgwMDAwLCAweEZGRkYsIDB4RkZGRiwgMHhGRkZGLCAweEZGRkYsIDB4RkZGRiwgMHhGRkZG LAkvKiAyOCAqLworCTB4RkZGRiwgMHhGRkZGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLAkvKiAzMCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMEYsIDB4 NkE2MiwgMHgxOTg4LCAweDMxMDAsIDB4MzEwMCwgMHgzMTAwLAkvKiAzOCAqLworCTB4MzEwMCwg MHhBNzA4LCAweDI0MzAsIDB4MDgzMCwgMHgxMDMwLCAweDQ2MTAsIDB4RkYwMCwgMHhGRjAwLAkv KiA0MCAqLworCTB4MDA2MCwgMHgxMDAwLCAweDA0MDAsIDB4MDA0MCwgMHgwMEYwLCAweDAxNTUs IDB4MTEwMCwgMHhBMDJBLAkvKiA0OCAqLworCTB4MDZGQSwgMHgwMDgwLCAweEIwMDgsIDB4RTNF RCwgMHg1MDAyLCAweEI1OTIsIDB4N0E4MCwgMHgwMDAxLAkvKiA1MCAqLworCTB4MDIwQSwgMHg4 ODIwLCAweDYwMTQsIDB4ODA1NCwgMHhBQ0FBLCAweEZDODgsIDB4MkEwMiwgMHg0NUNGLAkvKiA1 OCAqLworCTB4MDAwRiwgMHgxODE3LCAweDI4NjAsIDB4MDY0RiwgMHgwMDAwLCAweDAyMDQsIDB4 MTgwMCwgMHg2MDAwLAkvKiA2MCAqLworCTB4ODEwRiwgMHg0RjIzLCAweDQwMDAsIDB4NDQ5OCwg MHgwODUwLCAweDAwMDAsIDB4MDAwRSwgMHgxMDAyLAkvKiA2OCAqLworCTB4OUQzQSwgMHgzMDA5 LCAweEQwNjYsIDB4MDQ5MSwgMHgwMDAxLCAweDZBQjAsIDB4MDM5OSwgMHgzNzgwLAkvKiA3MCAq LworCTB4MDA0MCwgMHg1QUMwLCAweDRBODAsIDB4MDAwMCwgMHgwMURGLCAweDAwMDAsIDB4MDAw NywgMHgwMDAwLAkvKiA3OCAqLworCTB4MkQ1NCwgMHgwMEExLCAweDQwMDAsIDB4MDEwMCwgMHhB MjBBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiA4MCAqLworCTB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4NzQwMCwgMHgwRTgxLCAweDEwMDAsIDB4MTI0MiwgMHgwMjEwLAkvKiA4OCAqLwor CTB4ODBERiwgMHgwRjFGLCAweDJGM0YsIDB4NEY1RiwgMHg2RjdGLCAweDBGMUYsIDB4MkYzRiwg MHg0RjVGLAkvKiA5MCAqLworCTB4NkY3RiwgMHg0QkFELCAweDAwMDAsIDB4MDAwMCwgMHgwODAw LCAweDAwMDAsIDB4MjQwMCwgMHhCNjUxLAkvKiA5OCAqLworCTB4QzlFMCwgMHg0MjQ3LCAweDBB MjQsIDB4MDAwMCwgMHhBRjE5LCAweDEwMDQsIDB4MDAwMCwgMHgwMDAwLAkvKiBBMCAqLworCTB4 MDAwMCwgMHgwMDEzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLAkvKiBBOCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiBCMCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAs IDB4MDA2MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiBCOCAqLworCTB4MDAw MCwgMHgwMDAwLCAweDMwMTAsIDB4RkEwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAz LAkvKiBDMCAqLworCTB4MTYxOCwgMHg4MjAwLCAweDgwMDAsIDB4MDQwMCwgMHgwNTBGLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLAkvKiBDOCAqLworCTB4NEM5MywgMHgwMDAwLCAweDEwMDAsIDB4 MTEyMCwgMHgwMDEwLCAweDEyNDIsIDB4MTI0MiwgMHgxRTAwLAkvKiBEMCAqLworCTB4MDAwMCwg MHgwMDAwLCAweDAwMDAsIDB4MDBGOCwgMHgwMDAwLCAweDAwNDEsIDB4MDgwMCwgMHgwMDAwLAkv KiBEOCAqLworCTB4ODJBMCwgMHg1NzJFLCAweDI0OTAsIDB4MTRBOSwgMHg0RTAwLCAweDAwMDAs IDB4MDgwMywgMHgwNTQxLAkvKiBFMCAqLworCTB4MEMxNSwgMHgwMDAwLCAweDAwMDAsIDB4MDQw MCwgMHgyNjI2LCAweDAwMDAsIDB4MDAwMCwgMHg0MjAwLAkvKiBFOCAqLworCTB4MDAwMCwgMHhB QTU1LCAweDEwMjAsIDB4MDAwMCwgMHgwMDAwLCAweDUwMTAsIDB4MDAwMCwgMHgwMDAwLAkvKiBG MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDUwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4 MDJGMiwgMHgwMDAwLAkvKiBGOCAqLworCTB4MTAxRiwgMHhGREMwLCAweDQwMDAsIDB4ODAxMCwg MHgwMTEwLCAweDAwMDYsIDB4MDAwMCwgMHgwMDAwLAkvKjEwMCAqLworCTB4MDAwMCwgMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjEwOCAq LworCTB4MDRDRiwgMHgwMDAwLCAweDA0Q0YsIDB4MDAwMCwgMHgwNENGLCAweDAwMDAsIDB4MDRD NiwgMHgwMDAwLAkvKjExMCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjExOCAqLworCTB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjEyMCAqLwor CTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLAkvKjEyOCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjEzMCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjEzOCAqLworCTB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLAkvKjE0MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjE0OCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjE1MCAqLworCTB4MDAw MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LAkvKjE1OCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLAkvKjE2MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjE2OCAqLworCTB4MDAwMCwg MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkv KjE3MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDBGMCwgMHgwOEEyLCAweDMxMTIs IDB4MEExNCwgMHgwMDAwLAkvKjE3OCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjE4MCAqLworCTB4MDAwMCwgMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjE4 OCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLAkvKjE5MCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjE5OCAqLworCTB4MDAwMCwgMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjFBMCAq LworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLAkvKjFBOCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjFCMCAqLworCTB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjFCOCAqLwor CTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLAkvKjFDMCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjFDOCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjFEMCAqLworCTB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLAkvKjFEOCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjFFMCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKjFFOCAqLworCTB4MDAw MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LAkvKjFGMCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwCS8qMUY4ICovCiB9OwogCi1zdGF0aWMgaW50IG12ZWJ1X2EzNzAw X2NvbXBoeV9zbWModW5zaWduZWQgbG9uZyBmdW5jdGlvbiwgdW5zaWduZWQgbG9uZyBsYW5lLAot CQkJCSAgdW5zaWduZWQgbG9uZyBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIHJlZ19zZXQodm9p ZCBfX2lvbWVtICphZGRyLCB1MzIgZGF0YSwgdTMyIG1hc2spCiB7Ci0Jc3RydWN0IGFybV9zbWNj Y19yZXMgcmVzOwotCXMzMiByZXQ7CisJdTMyIHJlZ19kYXRhOwogCi0JYXJtX3NtY2NjX3NtYyhm dW5jdGlvbiwgbGFuZSwgbW9kZSwgMCwgMCwgMCwgMCwgMCwgJnJlcyk7Ci0JcmV0ID0gcmVzLmEw OworCXJlZ19kYXRhID0gcmVhZGwoYWRkcik7CisJcmVnX2RhdGEgJj0gfm1hc2s7CisJcmVnX2Rh dGEgfD0gZGF0YTsKKwl3cml0ZWwocmVnX2RhdGEsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQgcmVnX3NldDE2KHZvaWQgX19pb21lbSAqYWRkciwgdTE2IGRhdGEsIHUxNiBtYXNrKQor eworCXUxNiByZWdfZGF0YTsKKworCXJlZ19kYXRhID0gcmVhZHcoYWRkcik7CisJcmVnX2RhdGEg Jj0gfm1hc2s7CisJcmVnX2RhdGEgfD0gZGF0YTsKKwl3cml0ZXcocmVnX2RhdGEsIGFkZHIpOwor fQorCisvKiBQSFkgc2VsZWN0b3IgY29uZmlndXJlcyB3aXRoIGNvcnJlc3BvbmRpbmcgbW9kZXMg Ki8KK3N0YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X3NldF9waHlfc2VsZWN0b3Ioc3RydWN0 IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBy ZWFkbChsYW5lLT5wcml2LT5jb21waHlfcmVncyArIENPTVBIWV9TRUxFQ1RPUl9QSFlfUkVHKTsK Kwlzd2l0Y2ggKGxhbmUtPm1vZGUpIHsKKwljYXNlIFBIWV9NT0RFX1NBVEE6CisJCS8qIFNBVEEg bXVzdCBiZSBpbiBMYW5lMiAqLworCQlpZiAobGFuZS0+aWQgPT0gMikKKwkJCXJlZyAmPSB+Q09N UEhZX1NFTEVDVE9SX1VTQjNfUEhZX1NFTF9CSVQ7CisJCWVsc2UKKwkJCWdvdG8gZXJyb3I7CisJ CWJyZWFrOworCisJY2FzZSBQSFlfTU9ERV9FVEhFUk5FVDoKKwkJaWYgKGxhbmUtPmlkID09IDAp CisJCQlyZWcgJj0gfkNPTVBIWV9TRUxFQ1RPUl9VU0IzX0dCRTFfU0VMX0JJVDsKKwkJZWxzZSBp ZiAobGFuZS0+aWQgPT0gMSkKKwkJCXJlZyAmPSB+Q09NUEhZX1NFTEVDVE9SX1BDSUVfR0JFMF9T RUxfQklUOworCQllbHNlCisJCQlnb3RvIGVycm9yOworCQlicmVhazsKKworCWNhc2UgUEhZX01P REVfVVNCX0hPU1RfU1M6CisJCWlmIChsYW5lLT5pZCA9PSAyKQorCQkJcmVnIHw9IENPTVBIWV9T RUxFQ1RPUl9VU0IzX1BIWV9TRUxfQklUOworCQllbHNlIGlmIChsYW5lLT5pZCA9PSAwKQorCQkJ cmVnIHw9IENPTVBIWV9TRUxFQ1RPUl9VU0IzX0dCRTFfU0VMX0JJVDsKKwkJZWxzZQorCQkJZ290 byBlcnJvcjsKKwkJYnJlYWs7CisKKwljYXNlIFBIWV9NT0RFX1BDSUU6CisJCS8qIFBDSUUgbXVz dCBiZSBpbiBMYW5lMSAqLworCQlpZiAobGFuZS0+aWQgPT0gMSkKKwkJCXJlZyB8PSBDT01QSFlf U0VMRUNUT1JfUENJRV9HQkUwX1NFTF9CSVQ7CisJCWVsc2UKKwkJCWdvdG8gZXJyb3I7CisJCWJy ZWFrOwogCi0Jc3dpdGNoIChyZXQpIHsKLQljYXNlIFNNQ0NDX1JFVF9TVUNDRVNTOgotCQlyZXR1 cm4gMDsKLQljYXNlIFNNQ0NDX1JFVF9OT1RfU1VQUE9SVEVEOgotCQlyZXR1cm4gLUVPUE5PVFNV UFA7CiAJZGVmYXVsdDoKKwkJZ290byBlcnJvcjsKKwl9CisKKwl3cml0ZWwocmVnLCBsYW5lLT5w cml2LT5jb21waHlfcmVncyArIENPTVBIWV9TRUxFQ1RPUl9QSFlfUkVHKTsKKwlyZXR1cm4gMDsK K2Vycm9yOgorCWRldl9lcnIobGFuZS0+ZGV2LCAiQ09NUEhZWyVkXSBtb2RlWyVkXSBpcyBpbnZh bGlkXG4iLCBsYW5lLT5pZCwgbGFuZS0+bW9kZSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8q IEl0IGlzIG9ubHkgdXNlZCBmb3IgU0FUQSBhbmQgVVNCMyBvbiBjb21waHkgbGFuZTIuICovCitz dGF0aWMgdm9pZCBjb21waHlfc2V0X2luZGlyZWN0KHZvaWQgX19pb21lbSAqYmFzZV9hZGRyLCB1 MzIgb2Zmc2V0LCB1MTYgZGF0YSwKKwkJCQl1MTYgbWFzaywgYm9vbCBpc19zYXRhKQoreworCS8q CisJICogV2hlbiBMYW5lIDIgUEhZIGlzIGZvciBVU0IzLCBhY2Nlc3MgdGhlIFBIWSByZWdpc3Rl cnMKKwkgKiB0aHJvdWdoIGluZGlyZWN0IEFkZHJlc3MgYW5kIERhdGEgcmVnaXN0ZXJzOgorCSAq IElORElSX0FDQ19QSFlfQUREUiAoUkQwMEUwMTc4aCBbMzE6MF0pLAorCSAqIElORElSX0FDQ19Q SFlfREFUQSAoUkQwMEUwMTdDaCBbMzE6MF0pLAorCSAqIHdpdGhpbiB0aGUgU0FUQSBIb3N0IENv bnRyb2xsZXIgcmVnaXN0ZXJzLCBMYW5lIDIgYmFzZSByZWdpc3RlcgorCSAqIG9mZnNldCBpcyAw eDIwMAorCSAqLworCWlmIChpc19zYXRhKQorCQl3cml0ZWwob2Zmc2V0LCBiYXNlX2FkZHIgKyBD T01QSFlfTEFORTJfSU5ESVJfQUREUl9PRkZTRVQpOworCWVsc2UKKwkJd3JpdGVsKFVTQjNQSFlf TEFORTJfUkVHX0JBU0VfT0ZGU0VUICsgb2Zmc2V0LAorCQkgICAgICAgYmFzZV9hZGRyICsgQ09N UEhZX0xBTkUyX0lORElSX0FERFJfT0ZGU0VUKTsKKworCXJlZ19zZXQoYmFzZV9hZGRyICsgQ09N UEhZX0xBTkUyX0lORElSX0RBVEFfT0ZGU0VULCBkYXRhLCBtYXNrKTsKK30KKworLyogSXQgaXMg b25seSB1c2VkIGZvciBTQVRBIG9uIGNvbXBoeSBsYW5lMi4gKi8KK3N0YXRpYyB2b2lkIGNvbXBo eV9zYXRhX3NldF9pbmRpcmVjdCh2b2lkIF9faW9tZW0gKmJhc2VfYWRkciwgdTMyIHJlZ19vZmZz ZXQsCisJCQkJICAgICB1MTYgZGF0YSwgdTE2IG1hc2spCit7CisJY29tcGh5X3NldF9pbmRpcmVj dChiYXNlX2FkZHIsIHJlZ19vZmZzZXQsIGRhdGEsIG1hc2ssIHRydWUpOworfQorCisvKiBJdCBp cyBvbmx5IHVzZWQgZm9yIFVTQjMgaW5kaXJlY3QgYWNjZXNzIG9uIGNvbXBoeSBsYW5lMi4gKi8K K3N0YXRpYyB2b2lkIGNvbXBoeV91c2IzX3NldF9pbmRpcmVjdCh2b2lkIF9faW9tZW0gKmJhc2Vf YWRkciwgdTMyIHJlZ19vZmZzZXQsCisJCQkJICAgICB1MTYgZGF0YSwgdTE2IG1hc2spCit7CisJ Y29tcGh5X3NldF9pbmRpcmVjdChiYXNlX2FkZHIsIHJlZ19vZmZzZXQsIGRhdGEsIG1hc2ssIGZh bHNlKTsKK30KKworLyogSXQgaXMgb25seSB1c2VkIGZvciBVU0IzIGRpcmVjdCBhY2Nlc3Mgbm90 IG9uIGNvbXBoeSBsYW5lMi4gKi8KK3N0YXRpYyB2b2lkIGNvbXBoeV91c2IzX3NldF9kaXJlY3Qo dm9pZCBfX2lvbWVtICpiYXNlX2FkZHIsIHUzMiByZWdfb2Zmc2V0LAorCQkJCSAgIHUxNiBkYXRh LCB1MTYgbWFzaykKK3sKKwlyZWdfc2V0MTYoYmFzZV9hZGRyICsgcmVnX29mZnNldCAqIFBIWV9T SEZUKFVTQjMpLCBkYXRhLCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgY29tcGh5X2diZV9waHlf aW5pdCh2b2lkIF9faW9tZW0gKmdiZV9waHlfYmFzZSwgYm9vbCBpc18xZ2JwcykKK3sKKwljb25z dCBpbnQgZml4X2Fycl9zeiA9IEFSUkFZX1NJWkUoZ2JlX3BoeV9pbml0X2ZpeCk7CisJaW50IGFk ZHIsIGZpeF9pZHg7CisJdTE2IHZhbDsKKworCWZpeF9pZHggPSAwOworCWZvciAoYWRkciA9IDA7 IGFkZHIgPCA1MTI7IGFkZHIrKykgeworCQkvKgorCQkgKiBBbGwgUEhZIHJlZ2lzdGVyIHZhbHVl cyBhcmUgZGVmaW5lZCBpbiBmdWxsIGZvciAzLjEyNUdicHMKKwkJICogU0VSREVTIHNwZWVkLiBU aGUgdmFsdWVzIHJlcXVpcmVkIGZvciAxLjI1IEdicHMgYXJlIGFsbW9zdAorCQkgKiB0aGUgc2Ft ZSBhbmQgb25seSBmZXcgcmVnaXN0ZXJzIHNob3VsZCBiZSAiZml4ZWQiIGluCisJCSAqIGNvbXBh cmlzb24gdG8gMy4xMjUgR2JwcyB2YWx1ZXMuIFRoZXNlIHJlZ2lzdGVyIHZhbHVlcyBhcmUKKwkJ ICogc3RvcmVkIGluICJnYmVfcGh5X2luaXRfZml4IiBhcnJheS4KKwkJICovCisJCWlmICghaXNf MWdicHMgJiYgZ2JlX3BoeV9pbml0X2ZpeFtmaXhfaWR4XS5hZGRyID09IGFkZHIpIHsKKwkJCS8q IFVzZSBuZXcgdmFsdWUgKi8KKwkJCXZhbCA9IGdiZV9waHlfaW5pdF9maXhbZml4X2lkeF0udmFs dWU7CisJCQlpZiAoZml4X2lkeCA8IGZpeF9hcnJfc3opCisJCQkJZml4X2lkeCsrOworCQl9IGVs c2UgeworCQkJdmFsID0gZ2JlX3BoeV9pbml0W2FkZHJdOworCQl9CisKKwkJcmVnX3NldDE2KEdC RV9QSFlfQUREUihnYmVfcGh5X2Jhc2UsIGFkZHIpLCB2YWwsIDB4RkZGRik7CisJfQorfQorCitz dGF0aWMgaW50IG12ZWJ1X2EzNzAwX2NvbXBoeV9zYXRhX3Bvd2VyX29uKHN0cnVjdCBtdmVidV9h MzcwMF9jb21waHlfbGFuZSAqbGFuZSkKK3sKKwl2b2lkIF9faW9tZW0gKnNhdGFfcGh5X2Jhc2Ug PSBsYW5lLT5wcml2LT5zYXRhX3VzYjNfcGh5X3JlZ3M7CisJdTMyIG9mZnNldCwgZGF0YSA9IDAs IHJlZl9jbGs7CisJaW50IHJldDsKKworCS8qIENvbmZpZ3VyZSBwaHkgc2VsZWN0b3IgZm9yIFNB VEEgKi8KKwlyZXQgPSBtdmVidV9hMzcwMF9jb21waHlfc2V0X3BoeV9zZWxlY3RvcihsYW5lKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogQ2xlYXIgcGh5IGlzb2xhdGlvbiBtb2Rl IHRvIG1ha2UgaXQgd29yayBpbiBub3JtYWwgbW9kZSAqLworCW9mZnNldCA9IFNBVEFQSFlfTEFO RTJfUkVHX0JBU0VfT0ZGU0VUICsgQ09NUEhZX0lTT0xBVElPTl9DVFJMX1JFRzsKKwljb21waHlf c2F0YV9zZXRfaW5kaXJlY3Qoc2F0YV9waHlfYmFzZSwgb2Zmc2V0LCAwLCBQSFlfSVNPTEFURV9N T0RFKTsKKworCS8qIDAuIENoZWNrIHRoZSBQb2xhcml0eSBpbnZlcnQgYml0cyAqLworCWlmIChs YW5lLT5pbnZlcnRfdHgpCisJCWRhdGEgfD0gVFhEX0lOVkVSVF9CSVQ7CisJaWYgKGxhbmUtPmlu dmVydF9yeCkKKwkJZGF0YSB8PSBSWERfSU5WRVJUX0JJVDsKKworCW9mZnNldCA9IFNBVEFQSFlf TEFORTJfUkVHX0JBU0VfT0ZGU0VUICsgQ09NUEhZX1NZTkNfUEFUVEVSTl9SRUc7CisJY29tcGh5 X3NhdGFfc2V0X2luZGlyZWN0KHNhdGFfcGh5X2Jhc2UsIG9mZnNldCwgZGF0YSwgVFhEX0lOVkVS VF9CSVQgfAorCQkJCSBSWERfSU5WRVJUX0JJVCk7CisKKwkvKiAxLiBTZWxlY3QgNDAtYml0IGRh dGEgd2lkdGggKi8KKwlvZmZzZXQgPSBTQVRBUEhZX0xBTkUyX1JFR19CQVNFX09GRlNFVCArIENP TVBIWV9MT09QQkFDS19SRUcwOworCWNvbXBoeV9zYXRhX3NldF9pbmRpcmVjdChzYXRhX3BoeV9i YXNlLCBvZmZzZXQsIERBVEFfV0lEVEhfNDBCSVQsCisJCQkJIFNFTF9EQVRBX1dJRFRIX01BU0sp OworCisJLyogMi4gU2VsZWN0IHJlZmVyZW5jZSBjbG9jaygyNU0pIGFuZCBQSFkgbW9kZSAoU0FU QSkgKi8KKwlvZmZzZXQgPSBTQVRBUEhZX0xBTkUyX1JFR19CQVNFX09GRlNFVCArIENPTVBIWV9Q T1dFUl9QTExfQ1RSTDsKKwlpZiAobGFuZS0+cHJpdi0+eHRhbF9pc180MG0pCisJCXJlZl9jbGsg PSBSRUZfQ0xPQ0tfU1BFRURfNDBNOworCWVsc2UKKwkJcmVmX2NsayA9IFJFRl9DTE9DS19TUEVF RF8yNU07CisKKwljb21waHlfc2F0YV9zZXRfaW5kaXJlY3Qoc2F0YV9waHlfYmFzZSwgb2Zmc2V0 LCByZWZfY2xrIHwgQ09NUEhZX01PREVfU0FUQSwKKwkJCQkgUkVGX0ZSRUZfU0VMX01BU0sgfCBD T01QSFlfTU9ERV9NQVNLKTsKKworCS8qIDMuIFVzZSBtYXhpbXVtIFBMTCByYXRlIChubyBwb3dl ciBzYXZlKSAqLworCW9mZnNldCA9IFNBVEFQSFlfTEFORTJfUkVHX0JBU0VfT0ZGU0VUICsgQ09N UEhZX0tWQ09fQ0FMX0NUUkw7CisJY29tcGh5X3NhdGFfc2V0X2luZGlyZWN0KHNhdGFfcGh5X2Jh c2UsIG9mZnNldCwgVVNFX01BWF9QTExfUkFURV9CSVQsCisJCQkJIFVTRV9NQVhfUExMX1JBVEVf QklUKTsKKworCS8qIDQuIFJlc2V0IHJlc2VydmVkIGJpdCAqLworCWNvbXBoeV9zYXRhX3NldF9p bmRpcmVjdChzYXRhX3BoeV9iYXNlLCBDT01QSFlfUkVTRVJWRURfUkVHLCAwLAorCQkJCSBQSFlD VFJMX0ZSTV9QSU5fQklUKTsKKworCS8qIDUuIFNldCB2ZW5kb3Itc3BlY2lmaWMgY29uZmlndXJh dGlvbiAoSXQgaXMgZG9uZSBpbiBzYXRhIGRyaXZlcikgKi8KKwkvKiBYWFg6IGluIFUtQm9vdCBi ZWxvdyBzZXF1ZW5jZSB3YXMgZXhlY3V0ZWQgaW4gdGhpcyBwbGFjZSwgaW4gTGludXgKKwkgKiBu b3QuICBOb3cgaXQgaXMgZG9uZSBvbmx5IGluIFUtQm9vdCBiZWZvcmUgdGhpcyBjb21waHkKKwkg KiBpbml0aWFsaXphdGlvbiAtIHRlc3RzIHNob3dzIHRoYXQgaXQgd29ya3Mgb2ssIGJ1dCBpbiBj YXNlIG9mIGFueQorCSAqIGZ1dHVyZSBwcm9ibGVtIGl0IGlzIGxlZnQgZm9yIHJlZmVyZW5jZS4K KwkgKiAgIHJlZ19zZXQoTVZFQlVfUkVHU19CQVNFICsgMHhlMDBhMCwgMCwgMHhmZmZmZmZmZik7 CisJICogICByZWdfc2V0KE1WRUJVX1JFR1NfQkFTRSArIDB4ZTAwYTQsIEJJVCg2KSwgQklUKDYp KTsKKwkgKi8KKworCS8qIFdhaXQgZm9yID4gNTUgdXMgdG8gYWxsb3cgUExMIGJlIGVuYWJsZWQg Ki8KKwl1ZGVsYXkoUExMX1NFVF9ERUxBWV9VUyk7CisKKwkvKiBQb2xsaW5nIHN0YXR1cyAqLwor CXdyaXRlbChTQVRBUEhZX0xBTkUyX1JFR19CQVNFX09GRlNFVCArIENPTVBIWV9MT09QQkFDS19S RUcwLAorCSAgICAgICBzYXRhX3BoeV9iYXNlICsgQ09NUEhZX0xBTkUyX0lORElSX0FERFJfT0ZG U0VUKTsKKworCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChzYXRhX3BoeV9iYXNlICsgQ09NUEhZ X0xBTkUyX0lORElSX0RBVEFfT0ZGU0VULAorCQkJCSBkYXRhLCBkYXRhICYgUExMX1JFQURZX1RY X0JJVCwKKwkJCQkgQ09NUEhZX1BMTF9TTEVFUCwgQ09NUEhZX1BMTF9USU1FT1VUKTsKKwlpZiAo cmV0KSB7CisJCWRldl9lcnIobGFuZS0+ZGV2LCAiRmFpbGVkIHRvIGxvY2sgU0FUQSBQTExcbiIp OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12ZWJ1 X2EzNzAwX2NvbXBoeV9ldGhlcm5ldF9wb3dlcl9vbihzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5 X2xhbmUgKmxhbmUpCit7CisJdm9pZCBfX2lvbWVtICpjb21waHlfYmFzZSA9IGxhbmUtPnByaXYt PmNvbXBoeV9yZWdzOworCXZvaWQgX19pb21lbSAqZ2JlX3BoeV9iYXNlOworCXUzMiBtYXNrLCBk YXRhOworCWludCByZXQ7CisKKwkvKiBTZXQgc2VsZWN0b3IgKi8KKwlyZXQgPSBtdmVidV9hMzcw MF9jb21waHlfc2V0X3BoeV9zZWxlY3RvcihsYW5lKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJLyogR0JFIFBIWSBCYXNlIGFkZHJlc3MKKwkgKiBDT01QSFkgTGFuZTAgLS0gVVNCMy9H QkUxCisJICogQ09NUEhZIExhbmUxIC0tIFBDSWUvR0JFMAorCSAqLworCWlmIChsYW5lLT5pZCA9 PSAwKSB7CisJCS8qIEdldCB1c2IzIGFuZCBnYmUgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzICovCisJ CWdiZV9waHlfYmFzZSA9IGxhbmUtPnByaXYtPnVzYjNfZ2JlMV9waHlfcmVnczsKKwl9IGVsc2Ug eworCQkvKiBHZXQgcGNpZSBhbmQgZ2JlIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLworCQlnYmVf cGh5X2Jhc2UgPSBsYW5lLT5wcml2LT5wY2llX2diZTBfcGh5X3JlZ3M7CisJfQorCisJLyoKKwkg KiAxLiBSZXNldCBQSFkgYnkgc2V0dGluZyBQSFkgaW5wdXQgcG9ydCBQSU5fUkVTRVQ9MS4KKwkg KiAyLiBTZXQgUEhZIGlucHV0IHBvcnQgUElOX1RYX0lETEU9MSwgUElOX1BVX0lWUkVGPTEgdG8g a2VlcAorCSAqICAgIFBIWSBUWFAvVFhOIG91dHB1dCB0byBpZGxlIHN0YXRlIGR1cmluZyBQSFkg aW5pdGlhbGl6YXRpb24KKwkgKiAzLiBTZXQgUEhZIGlucHV0IHBvcnQgUElOX1BVX1BMTD0wLCBQ SU5fUFVfUlg9MCwgUElOX1BVX1RYPTAuCisJICovCisJZGF0YSA9IFBJTl9QVV9JVkVSRUZfQklU IHwgUElOX1RYX0lETEVfQklUIHwgUElOX1JFU0VUX0NPTVBIWV9CSVQ7CisJbWFzayA9IFBJTl9S RVNFVF9DT1JFX0JJVCB8IFBJTl9QVV9QTExfQklUIHwgUElOX1BVX1JYX0JJVCB8CisJCVBJTl9Q VV9UWF9CSVQgfCBQSFlfUlhfSU5JVF9CSVQ7CisJcmVnX3NldChjb21waHlfYmFzZSArIENPTVBI WV9QSFlfQ0ZHMV9PRkZTRVQobGFuZS0+aWQpLCBkYXRhLCBtYXNrKTsKKworCS8qIDQuIFJlbGVh c2UgcmVzZXQgdG8gdGhlIFBIWSBieSBzZXR0aW5nIFBJTl9SRVNFVD0wLiAqLworCWRhdGEgPSAw OworCW1hc2sgPSBQSU5fUkVTRVRfQ09NUEhZX0JJVDsKKwlyZWdfc2V0KGNvbXBoeV9iYXNlICsg Q09NUEhZX1BIWV9DRkcxX09GRlNFVChsYW5lLT5pZCksIGRhdGEsIG1hc2spOworCisJLyoKKwkg KiA1LiBTZXQgUElOX1BIWV9HRU5fVFhbMzowXSBhbmQgUElOX1BIWV9HRU5fUlhbMzowXSB0byBk ZWNpZGUgQ09NUEhZCisJICogYml0IHJhdGUKKwkgKi8KKwlzd2l0Y2ggKGxhbmUtPnN1Ym1vZGUp IHsKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSToKKwljYXNlIFBIWV9JTlRFUkZBQ0Vf TU9ERV8xMDAwQkFTRVg6CisJCS8qIFNHTUlJIDFHLCBTZXJEZXMgc3BlZWQgMS4yNUcgKi8KKwkJ ZGF0YSB8PSBTRVJERVNfU1BFRURfMV8yNV9HIDw8IEdFTl9SWF9TRUxfT0ZGU0VUOworCQlkYXRh IHw9IFNFUkRFU19TUEVFRF8xXzI1X0cgPDwgR0VOX1RYX1NFTF9PRkZTRVQ7CisJCWJyZWFrOwor CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDoKKwkJLyogMjUwMEJhc2UtWCwgU2Vy RGVzIHNwZWVkIDMuMTI1RyAqLworCQlkYXRhIHw9IFNFUkRFU19TUEVFRF8yXzVfRyA8PCBHRU5f UlhfU0VMX09GRlNFVDsKKwkJZGF0YSB8PSBTRVJERVNfU1BFRURfMl81X0cgPDwgR0VOX1RYX1NF TF9PRkZTRVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE90aGVyIHJhdGVzIGFyZSBub3Qg c3VwcG9ydGVkICovCisJCWRldl9lcnIobGFuZS0+ZGV2LCAidW5zdXBwb3J0ZWQgcGh5IHNwZWVk ICVkIG9uIGNvbXBoeSBsYW5lJWRcbiIsCisJCQlsYW5lLT5zdWJtb2RlLCBsYW5lLT5pZCk7CiAJ CXJldHVybiAtRUlOVkFMOwogCX0KKwltYXNrID0gR0VOX1JYX1NFTF9NQVNLIHwgR0VOX1RYX1NF TF9NQVNLOworCXJlZ19zZXQoY29tcGh5X2Jhc2UgKyBDT01QSFlfUEhZX0NGRzFfT0ZGU0VUKGxh bmUtPmlkKSwgZGF0YSwgbWFzayk7CisKKwkvKgorCSAqIDYuIFdhaXQgMTBtUyBmb3IgYmFuZGdh cCBhbmQgcmVmZXJlbmNlIGNsb2NrcyB0byBzdGFiaWxpemU7IHRoZW4KKwkgKiBzdGFydCBTVyBw cm9ncmFtbWluZy4KKwkgKi8KKwltZGVsYXkoMTApOworCisJLyogNy4gUHJvZ3JhbSBDT01QSFkg cmVnaXN0ZXIgUEhZX01PREUgKi8KKwlkYXRhID0gQ09NUEhZX01PREVfU0VSREVTOworCW1hc2sg PSBDT01QSFlfTU9ERV9NQVNLOworCXJlZ19zZXQxNihHQkVfUEhZX0FERFIoZ2JlX3BoeV9iYXNl LCBDT01QSFlfUE9XRVJfUExMX0NUUkwpLCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogOC4gU2V0 IENPTVBIWSByZWdpc3RlciBSRUZDTEtfU0VMIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBSRUZDTEsK KwkgKiBzb3VyY2UKKwkgKi8KKwlkYXRhID0gMDsKKwltYXNrID0gUEhZX1JFRl9DTEtfU0VMOwor CXJlZ19zZXQxNihHQkVfUEhZX0FERFIoZ2JlX3BoeV9iYXNlLCBDT01QSFlfTUlTQ19SRUcwX0FE RFIpLCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogOS4gU2V0IGNvcnJlY3QgcmVmZXJlbmNlIGNs b2NrIGZyZXF1ZW5jeSBpbiBDT01QSFkgcmVnaXN0ZXIKKwkgKiBSRUZfRlJFRl9TRUwuCisJICov CisJaWYgKGxhbmUtPnByaXYtPnh0YWxfaXNfNDBtKQorCQlkYXRhID0gUkVGX0NMT0NLX1NQRUVE XzUwTTsKKwllbHNlCisJCWRhdGEgPSBSRUZfQ0xPQ0tfU1BFRURfMjVNOworCisJbWFzayA9IFJF Rl9GUkVGX1NFTF9NQVNLOworCXJlZ19zZXQxNihHQkVfUEhZX0FERFIoZ2JlX3BoeV9iYXNlLCBD T01QSFlfUE9XRVJfUExMX0NUUkwpLCBkYXRhLCBtYXNrKTsKKworCS8qIDEwLiBQcm9ncmFtIENP TVBIWSByZWdpc3RlciBQSFlfR0VOX01BWFsxOjBdCisJICogVGhpcyBzdGVwIGlzIG1lbnRpb25l ZCBpbiB0aGUgZmxvdyByZWNlaXZlZCBmcm9tIHZlcmlmaWNhdGlvbiB0ZWFtLgorCSAqIEhvd2V2 ZXIgdGhlIFBIWV9HRU5fTUFYIHZhbHVlIGlzIG9ubHkgbWVhbmluZ2Z1bCBmb3Igb3RoZXIgaW50 ZXJmYWNlcworCSAqIChub3QgU0VSREVTKS4gRm9yIGluc3RhbmNlLCBpdCBzZWxlY3RzIFNBVEEg c3BlZWQgMS41LzMvNiBHYnBzIG9yIFBDSWUKKwkgKiBzcGVlZCAyLjUvNSBHYnBzCisJICovCisK KwkvKgorCSAqIDExLiBQcm9ncmFtIENPTVBIWSByZWdpc3RlciBTRUxfQklUUyB0byBzZXQgY29y cmVjdCBwYXJhbGxlbCBkYXRhCisJICogYnVzIHdpZHRoCisJICovCisJZGF0YSA9IERBVEFfV0lE VEhfMTBCSVQ7CisJbWFzayA9IFNFTF9EQVRBX1dJRFRIX01BU0s7CisJcmVnX3NldDE2KEdCRV9Q SFlfQUREUihnYmVfcGh5X2Jhc2UsIENPTVBIWV9MT09QQkFDS19SRUcwKSwgZGF0YSwgbWFzayk7 CisKKwkvKgorCSAqIDEyLiBBcyBsb25nIGFzIERGRSBmdW5jdGlvbiBuZWVkcyB0byBiZSBlbmFi bGVkIGluIGFueSBtb2RlLAorCSAqIENPTVBIWSByZWdpc3RlciBERkVfVVBEQVRFX0VOWzU6MF0g c2hhbGwgYmUgcHJvZ3JhbW1lZCB0byAweDNGCisJICogZm9yIHJlYWwgY2hpcCBkdXJpbmcgQ09N UEhZIHBvd2VyIG9uLgorCSAqIFRoZSBzdGVwIDE0IGV4aXN0cyAoYW5kIGVtcHR5KSBpbiB0aGUg b3JpZ2luYWwgaW5pdGlhbGl6YXRpb24gZmxvdworCSAqIG9idGFpbmVkIGZyb20gdGhlIHZlcmlm aWNhdGlvbiB0ZWFtLiBBY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uYWwKKwkgKiBzcGVjaWZpY2F0 aW9uIERGRV9VUERBVEVfRU4gYWxyZWFkeSBoYXMgdGhlIGRlZmF1bHQgdmFsdWUgMHgzRgorCSAq LworCisJLyoKKwkgKiAxMy4gUHJvZ3JhbSBDT01QSFkgR0VOIHJlZ2lzdGVycy4KKwkgKiBUaGVz ZSByZWdpc3RlcnMgc2hvdWxkIGJlIHByb2dyYW1tZWQgYmFzZWQgb24gdGhlIGxhYiB0ZXN0aW5n IHJlc3VsdAorCSAqIHRvIGFjaGlldmUgb3B0aW1hbCBwZXJmb3JtYW5jZS4gUGxlYXNlIGNvbnRh Y3QgdGhlIENFQSBncm91cCB0byBnZXQKKwkgKiB0aGUgcmVsYXRlZCBHRU4gdGFibGUgZHVyaW5n IHJlYWwgY2hpcCBicmluZy11cC4gV2Ugb25seSByZXF1aXJlZCB0bworCSAqIHJ1biB0aG91Z2gg dGhlIGVudGlyZSByZWdpc3RlcnMgcHJvZ3JhbW1pbmcgZmxvdyBkZWZpbmVkIGJ5CisJICogImNv bXBoeV9nYmVfcGh5X2luaXQiIHdoZW4gdGhlIFJFRiBjbG9jayBpcyA0MCBNSHouIEZvciBSRUYg Y2xvY2sKKwkgKiAyNSBNSHogdGhlIGRlZmF1bHQgdmFsdWVzIHN0b3JlZCBpbiBQSFkgcmVnaXN0 ZXJzIGFyZSBPSy4KKwkgKi8KKwlkZXZfZGJnKGxhbmUtPmRldiwgIlJ1bm5pbmcgQy1EUEkgcGh5 IGluaXQgJXMgbW9kZVxuIiwKKwkJbGFuZS0+c3VibW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVf MjUwMEJBU0VYID8gIjJHNSIgOiAiMUciKTsKKwlpZiAobGFuZS0+cHJpdi0+eHRhbF9pc180MG0p CisJCWNvbXBoeV9nYmVfcGh5X2luaXQoZ2JlX3BoeV9iYXNlLCBsYW5lLT5zdWJtb2RlICE9IFBI WV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgpOworCisJLyoKKwkgKiAxNC4gW1NpbXVsYXRpb24g T25seV0gc2hvdWxkIG5vdCBiZSB1c2VkIGZvciByZWFsIGNoaXAuCisJICogQnkgcGFzcyBwb3dl ciB1cCBjYWxpYnJhdGlvbiBieSBwcm9ncmFtbWluZyBFWFRfRk9SQ0VfQ0FMX0RPTkUKKwkgKiAo UjAyaFs5XSkgdG8gMSB0byBzaG9ydGVuIENPTVBIWSBzaW11bGF0aW9uIHRpbWUuCisJICovCisK KwkvKgorCSAqIDE1LiBbU2ltdWxhdGlvbiBPbmx5OiBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHJl YWwgY2hpcF0KKwkgKiBQcm9ncmFtIENPTVBIWSByZWdpc3RlciBGQVNUX0RGRV9USU1FUl9FTj0x IHRvIHNob3J0ZW4gUlggdHJhaW5pbmcKKwkgKiBzaW11bGF0aW9uIHRpbWUuCisJICovCisKKwkv KgorCSAqIDE2LiBDaGVjayB0aGUgUEhZIFBvbGFyaXR5IGludmVydCBiaXQKKwkgKi8KKwlkYXRh ID0gMHgwOworCWlmIChsYW5lLT5pbnZlcnRfdHgpCisJCWRhdGEgfD0gVFhEX0lOVkVSVF9CSVQ7 CisJaWYgKGxhbmUtPmludmVydF9yeCkKKwkJZGF0YSB8PSBSWERfSU5WRVJUX0JJVDsKKwltYXNr ID0gVFhEX0lOVkVSVF9CSVQgfCBSWERfSU5WRVJUX0JJVDsKKwlyZWdfc2V0MTYoR0JFX1BIWV9B RERSKGdiZV9waHlfYmFzZSwgQ09NUEhZX1NZTkNfUEFUVEVSTl9SRUcpLCBkYXRhLCBtYXNrKTsK KworCS8qCisJICogMTcuIFNldCBQSFkgaW5wdXQgcG9ydHMgUElOX1BVX1BMTCwgUElOX1BVX1RY IGFuZCBQSU5fUFVfUlggdG8gMSB0bworCSAqIHN0YXJ0IFBIWSBwb3dlciB1cCBzZXF1ZW5jZS4g QWxsIHRoZSBQSFkgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcgc2hvdWxkCisJICogYmUgZG9uZSBiZWZv cmUgUElOX1BVX1BMTD0xLiBUaGVyZSBzaG91bGQgYmUgbm8gcmVnaXN0ZXIgcHJvZ3JhbW1pbmcK KwkgKiBmb3Igbm9ybWFsIFBIWSBvcGVyYXRpb24gZnJvbSB0aGlzIHBvaW50LgorCSAqLworCXJl Z19zZXQoY29tcGh5X2Jhc2UgKyBDT01QSFlfUEhZX0NGRzFfT0ZGU0VUKGxhbmUtPmlkKSwKKwkJ UElOX1BVX1BMTF9CSVQgfCBQSU5fUFVfUlhfQklUIHwgUElOX1BVX1RYX0JJVCwKKwkJUElOX1BV X1BMTF9CSVQgfCBQSU5fUFVfUlhfQklUIHwgUElOX1BVX1RYX0JJVCk7CisKKwkvKgorCSAqIDE4 LiBXYWl0IGZvciBQSFkgcG93ZXIgdXAgc2VxdWVuY2UgdG8gZmluaXNoIGJ5IGNoZWNraW5nIG91 dHB1dCBwb3J0cworCSAqIFBJTl9QTExfUkVBRFlfVFg9MSBhbmQgUElOX1BMTF9SRUFEWV9SWD0x LgorCSAqLworCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChjb21waHlfYmFzZSArIENPTVBIWV9Q SFlfU1RBVFVTX09GRlNFVChsYW5lLT5pZCksCisJCQkJIGRhdGEsIChkYXRhICYgKFBIWV9QTExf UkVBRFlfVFhfQklUIHwgUEhZX1BMTF9SRUFEWV9SWF9CSVQpKSA9PQorCQkJCSAgICAgICAgICAg ICAgIChQSFlfUExMX1JFQURZX1RYX0JJVCB8IFBIWV9QTExfUkVBRFlfUlhfQklUKSwKKwkJCQkg Q09NUEhZX1BMTF9TTEVFUCwgQ09NUEhZX1BMTF9USU1FT1VUKTsKKwlpZiAocmV0KSB7CisJCWRl dl9lcnIobGFuZS0+ZGV2LCAiRmFpbGVkIHRvIGxvY2sgUExMIGZvciBTRVJERVMgUEhZICVkXG4i LCBsYW5lLT5pZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiAxOS4gU2V0IENPTVBI WSBpbnB1dCBwb3J0IFBJTl9UWF9JRExFPTAKKwkgKi8KKwlyZWdfc2V0KGNvbXBoeV9iYXNlICsg Q09NUEhZX1BIWV9DRkcxX09GRlNFVChsYW5lLT5pZCksCisJCTB4MCwgUElOX1RYX0lETEVfQklU KTsKKworCS8qCisJICogMjAuIEFmdGVyIHZhbGlkIGRhdGEgYXBwZWFyIG9uIFBJTl9SWERBVEEg YnVzLCBzZXQgUElOX1JYX0lOSVQ9MS4gVG8KKwkgKiBzdGFydCBSWCBpbml0aWFsaXphdGlvbi4g UElOX1JYX0lOSVRfRE9ORSB3aWxsIGJlIGNsZWFyZWQgdG8gMCBieSB0aGUKKwkgKiBQSFkgQWZ0 ZXIgUlggaW5pdGlhbGl6YXRpb24gaXMgZG9uZSwgUElOX1JYX0lOSVRfRE9ORSB3aWxsIGJlIHNl dCB0bworCSAqIDEgYnkgQ09NUEhZIFNldCBQSU5fUlhfSU5JVD0wIGFmdGVyIFBJTl9SWF9JTklU X0RPTkU9IDEuIFBsZWFzZQorCSAqIHJlZmVyIHRvIFJYIGluaXRpYWxpemF0aW9uIHBhcnQgZm9y IGRldGFpbHMuCisJICovCisJcmVnX3NldChjb21waHlfYmFzZSArIENPTVBIWV9QSFlfQ0ZHMV9P RkZTRVQobGFuZS0+aWQpLAorCQlQSFlfUlhfSU5JVF9CSVQsIFBIWV9SWF9JTklUX0JJVCk7CisK KwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoY29tcGh5X2Jhc2UgKyBDT01QSFlfUEhZX1NUQVRV U19PRkZTRVQobGFuZS0+aWQpLAorCQkJCSBkYXRhLCAoZGF0YSAmIChQSFlfUExMX1JFQURZX1RY X0JJVCB8IFBIWV9QTExfUkVBRFlfUlhfQklUKSkgPT0KKwkJCQkgICAgICAgICAgICAgICAoUEhZ X1BMTF9SRUFEWV9UWF9CSVQgfCBQSFlfUExMX1JFQURZX1JYX0JJVCksCisJCQkJIENPTVBIWV9Q TExfU0xFRVAsIENPTVBIWV9QTExfVElNRU9VVCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGxh bmUtPmRldiwgIkZhaWxlZCB0byBsb2NrIFBMTCBmb3IgU0VSREVTIFBIWSAlZFxuIiwgbGFuZS0+ aWQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChjb21w aHlfYmFzZSArIENPTVBIWV9QSFlfU1RBVFVTX09GRlNFVChsYW5lLT5pZCksCisJCQkJIGRhdGEs IGRhdGEgJiBQSFlfUlhfSU5JVF9ET05FX0JJVCwKKwkJCQkgQ09NUEhZX1BMTF9TTEVFUCwgQ09N UEhZX1BMTF9USU1FT1VUKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIobGFuZS0+ZGV2LCAiRmFp bGVkIHRvIGluaXQgUlggb2YgU0VSREVTIFBIWSAlZFxuIiwgbGFuZS0+aWQpOworCQlyZXR1cm4g cmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12ZWJ1X2EzNzAwX2NvbXBo eV91c2IzX3Bvd2VyX29uKHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSkKK3sK Kwl2b2lkICgqdXNiM19yZWdfc2V0KSh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiBvZmZzZXQsIHUx NiBkYXRhLCB1MTYgbWFzayk7CisJdTMyIG1hc2ssIGRhdGEsIGNmZywgcmVmX2NsazsKKwl2b2lk IF9faW9tZW0gKnVzYjNfcGh5X2Jhc2U7CisJaW50IHJldDsKKworCS8qIFNldCBwaHkgc2VjbGVj dG9yICovCisJcmV0ID0gbXZlYnVfYTM3MDBfY29tcGh5X3NldF9waHlfc2VsZWN0b3IobGFuZSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNldCB1c2IzIHJlZyBhY2Nlc3MgZnVu YywgTGFuZTIgaXMgaW5kaXJlY3QgYWNjZXNzICovCisJaWYgKGxhbmUtPmlkID09IDIpIHsKKwkJ dXNiM19yZWdfc2V0ID0gJmNvbXBoeV91c2IzX3NldF9pbmRpcmVjdDsKKwkJdXNiM19waHlfYmFz ZSA9IGxhbmUtPnByaXYtPnNhdGFfdXNiM19waHlfcmVnczsKKwl9IGVsc2UgeworCQkvKiBHZXQg dGhlIGRpcmVjdCBhY2Nlc3MgcmVnaXN0ZXIgcmVzb3VyY2UgYW5kIG1hcCAqLworCQl1c2IzX3Jl Z19zZXQgPSAmY29tcGh5X3VzYjNfc2V0X2RpcmVjdDsKKwkJdXNiM19waHlfYmFzZSA9IGxhbmUt PnByaXYtPnVzYjNfZ2JlMV9waHlfcmVnczsKKwl9CisKKwkvKgorCSAqIDAuIFNldCBQSFkgT1RH IENvbnRyb2woMHg1ZDAzNCksIGJpdCA0LCBQb3dlciB1cCBPVEcgbW9kdWxlIFRoZQorCSAqIHJl Z2lzdGVyIGJlbG9uZyB0byBVVE1JIG1vZHVsZSwgc28gaXQgaXMgc2V0IGluIFVUTUkgcGh5IGRy aXZlci4KKwkgKi8KKworCS8qCisJICogMS4gU2V0IFBSRF9UWERFRU1QSCAoMy41ZGIgZGUtZW1w aCkKKwkgKi8KKwltYXNrID0gUFJEX1RYREVFTVBIMF9NQVNLIHwgUFJEX1RYTUFSR0lOX01BU0sg fCBQUkRfVFhTV0lOR19NQVNLIHwKKwkJQ0ZHX1RYX0FMSUdOX1BPU19NQVNLOworCXVzYjNfcmVn X3NldCh1c2IzX3BoeV9iYXNlLCBDT01QSFlfUkVHX0xBTkVfQ0ZHMF9BRERSLCBQUkRfVFhERUVN UEgwX01BU0ssCisJCSAgICAgbWFzayk7CisKKwkvKgorCSAqIDIuIFNldCBCSVQwOiBlbmFibGUg dHJhbnNtaXR0ZXIgaW4gaGlnaCBpbXBlZGFuY2UgbW9kZQorCSAqICAgIFNldCBCSVRbMzo0XTog ZGVsYXkgMiBjbG9jayBjeWNsZXMgZm9yIEhpWiBvZmYgbGF0ZW5jeQorCSAqICAgIFNldCBCSVQ2 OiBUeCBkZXRlY3QgUnggYXQgSGlaIG1vZGUKKwkgKiAgICBVbnNldCBCSVQxNTogc2V0IHRvIDAg dG8gc2V0IFVTQjMgRGUtZW1waGFzaXplIGxldmVsIHRvIC0zLjVkYgorCSAqICAgICAgICAgICAg dG9nZXRoZXIgd2l0aCBiaXQgMCBvZiBDT01QSFlfUkVHX0xBTkVfQ0ZHMF9BRERSIHJlZ2lzdGVy CisJICovCisJbWFzayA9IFBSRF9UWERFRU1QSDFfTUFTSyB8IFRYX0RFVF9SWF9NT0RFIHwgR0VO Ml9UWF9EQVRBX0RMWV9NQVNLIHwKKwkJVFhfRUxFQ19JRExFX01PREVfRU47CisJZGF0YSA9IFRY X0RFVF9SWF9NT0RFIHwgR0VOMl9UWF9EQVRBX0RMWV9ERUZUIHwgVFhfRUxFQ19JRExFX01PREVf RU47CisJdXNiM19yZWdfc2V0KHVzYjNfcGh5X2Jhc2UsIENPTVBIWV9SRUdfTEFORV9DRkcxX0FE RFIsIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiAzLiBTZXQgU3ByZWFkIFNwZWN0cnVtIENsb2Nr IEVuYWJsZWQKKwkgKi8KKwl1c2IzX3JlZ19zZXQodXNiM19waHlfYmFzZSwgQ09NUEhZX1JFR19M QU5FX0NGRzRfQUREUiwKKwkJICAgICBTUFJFQURfU1BFQ1RSVU1fQ0xLX0VOLCBTUFJFQURfU1BF Q1RSVU1fQ0xLX0VOKTsKKworCS8qCisJICogNC4gU2V0IE92ZXJyaWRlIE1hcmdpbmluZyBDb250 cm9scyBGcm9tIHRoZSBNQUM6CisJICogICAgVXNlIG1hcmdpbmluZyBzaWduYWxzIGZyb20gbGFu ZSBjb25maWd1cmF0aW9uCisJICovCisJdXNiM19yZWdfc2V0KHVzYjNfcGh5X2Jhc2UsIENPTVBI WV9SRUdfVEVTVF9NT0RFX0NUUkxfQUREUiwKKwkJICAgICBNT0RFX01BUkdJTl9PVkVSUklERSwg MHhGRkZGKTsKKworCS8qCisJICogNS4gU2V0IExhbmUtdG8tTGFuZSBCdW5kbGUgQ2xvY2sgU2Ft cGxpbmcgUGVyaW9kID0gcGVyIFBDTEsgY3ljbGVzCisJICogICAgc2V0IE1vZGUgQ2xvY2sgU291 cmNlID0gUENMSyBpcyBnZW5lcmF0ZWQgZnJvbSBSRUZDTEsKKwkgKi8KKwl1c2IzX3JlZ19zZXQo dXNiM19waHlfYmFzZSwgQ09NUEhZX1JFR19HTE9CX0NMS19TUkNfTE9fQUREUiwgMHgwLAorCQkg ICAgIChNT0RFX0NMS19TUkMgfCBCVU5ETEVfUEVSSU9EX1NFTCB8IEJVTkRMRV9QRVJJT0RfU0NB TEUgfAorCQkgICAgICBCVU5ETEVfU0FNUExFX0NUUkwgfCBQTExfUkVBRFlfRExZKSk7CisKKwkv KgorCSAqIDYuIFNldCBHMiBTcHJlYWQgU3BlY3RydW0gQ2xvY2sgQW1wbGl0dWRlIGF0IDRLCisJ ICovCisJdXNiM19yZWdfc2V0KHVzYjNfcGh5X2Jhc2UsIENPTVBIWV9SRUdfR0VOMl9TRVRfMiwK KwkJICAgICBHMl9UWF9TU0NfQU1QX1ZBTFVFXzIwLCBHMl9UWF9TU0NfQU1QX01BU0spOworCisJ LyoKKwkgKiA3LiBVbnNldCBHMyBTcHJlYWQgU3BlY3RydW0gQ2xvY2sgQW1wbGl0dWRlCisJICog ICAgc2V0IEczIFRYIGFuZCBSWCBSZWdpc3RlciBNYXN0ZXIgQ3VycmVudCBTZWxlY3QKKwkgKi8K KwltYXNrID0gRzNfVFhfU1NDX0FNUF9NQVNLIHwgRzNfVlJFR19SWFRYX01BU19JU0VUX01BU0sg fAorCQlSU1ZEX1BIMDNGSF82XzBfTUFTSzsKKwl1c2IzX3JlZ19zZXQodXNiM19waHlfYmFzZSwg Q09NUEhZX1JFR19HRU4yX1NFVF8zLAorCQkgICAgIEczX1ZSRUdfUlhUWF9NQVNfSVNFVF82MFUs IG1hc2spOworCisJLyoKKwkgKiA4LiBDaGVjayBjcnlzdGFsIGp1bXBlciBzZXR0aW5nIGFuZCBw cm9ncmFtIHRoZSBQb3dlciBhbmQgUExMIENvbnRyb2wKKwkgKiBhY2NvcmRpbmdseSBDaGFuZ2Ug Ulggd2FpdAorCSAqLworCWlmIChsYW5lLT5wcml2LT54dGFsX2lzXzQwbSkgeworCQlyZWZfY2xr ID0gUkVGX0NMT0NLX1NQRUVEXzQwTTsKKwkJY2ZnID0gQ0ZHX1BNX1JYRExPWl9XQUlUXzEyX1VO SVQ7CisJfSBlbHNlIHsKKwkJcmVmX2NsayA9IFVTQjNfUkVGX0NMT0NLX1NQRUVEXzI1TTsKKwkJ Y2ZnID0gQ0ZHX1BNX1JYRExPWl9XQUlUXzdfVU5JVDsKKwl9CisKKwltYXNrID0gUFVfSVZSRUZf QklUIHwgUFVfUExMX0JJVCB8IFBVX1JYX0JJVCB8IFBVX1RYX0JJVCB8CisJCVBVX1RYX0lOVFBf QklUIHwgUFVfREZFX0JJVCB8IFBMTF9MT0NLX0JJVCB8IENPTVBIWV9NT0RFX01BU0sgfAorCQlS RUZfRlJFRl9TRUxfTUFTSzsKKwlkYXRhID0gUFVfSVZSRUZfQklUIHwgUFVfUExMX0JJVCB8IFBV X1JYX0JJVCB8IFBVX1RYX0JJVCB8CisJCVBVX1RYX0lOVFBfQklUIHwgUFVfREZFX0JJVCB8IENP TVBIWV9NT0RFX1VTQjMgfCByZWZfY2xrOworCXVzYjNfcmVnX3NldCh1c2IzX3BoeV9iYXNlLCBD T01QSFlfUE9XRVJfUExMX0NUUkwsIGRhdGEsIG1hc2spOworCisJbWFzayA9IENGR19QTV9PU0ND TEtfV0FJVF9NQVNLIHwgQ0ZHX1BNX1JYREVOX1dBSVRfTUFTSyB8CisJCUNGR19QTV9SWERMT1pf V0FJVF9NQVNLOworCWRhdGEgPSBDRkdfUE1fUlhERU5fV0FJVF8xX1VOSVQgfCBjZmc7CisJdXNi M19yZWdfc2V0KHVzYjNfcGh5X2Jhc2UsIENPTVBIWV9SRUdfUFdSX01HTV9USU0xX0FERFIsIGRh dGEsIG1hc2spOworCisJLyoKKwkgKiA5LiBFbmFibGUgaWRsZSBzeW5jCisJICovCisJZGF0YSA9 IFVOSVRfQ1RSTF9ERUZBVUxUX1ZBTFVFIHwgSURMRV9TWU5DX0VOOworCXVzYjNfcmVnX3NldCh1 c2IzX3BoeV9iYXNlLCBDT01QSFlfUkVHX1VOSVRfQ1RSTF9BRERSLCBkYXRhLCAweEZGRkYpOwor CisJLyoKKwkgKiAxMC4gRW5hYmxlIHRoZSBvdXRwdXQgb2YgNTAwTSBjbG9jaworCSAqLworCWRh dGEgPSBNSVNDX1JFRzBfREVGQVVMVF9WQUxVRSB8IENMSzUwME1fRU47CisJdXNiM19yZWdfc2V0 KHVzYjNfcGh5X2Jhc2UsIENPTVBIWV9NSVNDX1JFRzBfQUREUiwgZGF0YSwgMHhGRkZGKTsKKwor CS8qCisJICogMTEuIFNldCAyMC1iaXQgZGF0YSB3aWR0aAorCSAqLworCXVzYjNfcmVnX3NldCh1 c2IzX3BoeV9iYXNlLCBDT01QSFlfTE9PUEJBQ0tfUkVHMCwgREFUQV9XSURUSF8yMEJJVCwgMHhG RkZGKTsKKworCS8qCisJICogMTIuIE92ZXJyaWRlIFNwZWVkX1BMTCB2YWx1ZSBhbmQgdXNlIE1B QyBQTEwKKwkgKi8KKwl1c2IzX3JlZ19zZXQodXNiM19waHlfYmFzZSwgQ09NUEhZX0tWQ09fQ0FM X0NUUkwsCisJCSAgICAgKFNQRUVEX1BMTF9WQUxVRV8xNiB8IFVTRV9NQVhfUExMX1JBVEVfQklU KSwKKwkJICAgICAweEZGRkYpOworCisJLyoKKwkgKiAxMy4gQ2hlY2sgdGhlIFBvbGFyaXR5IGlu dmVydCBiaXQKKwkgKi8KKwlkYXRhID0gMFU7CisJaWYgKGxhbmUtPmludmVydF90eCkKKwkJZGF0 YSB8PSBUWERfSU5WRVJUX0JJVDsKKwlpZiAobGFuZS0+aW52ZXJ0X3J4KQorCQlkYXRhIHw9IFJY RF9JTlZFUlRfQklUOworCW1hc2sgPSBUWERfSU5WRVJUX0JJVCB8IFJYRF9JTlZFUlRfQklUOwor CXVzYjNfcmVnX3NldCh1c2IzX3BoeV9iYXNlLCBDT01QSFlfU1lOQ19QQVRURVJOX1JFRywgZGF0 YSwgbWFzayk7CisKKwkvKgorCSAqIDE0LiBTZXQgbWF4IHNwZWVkIGdlbmVyYXRpb24gdG8gVVNC My4wIDVHYnBzCisJICovCisJdXNiM19yZWdfc2V0KHVzYjNfcGh5X2Jhc2UsIENPTVBIWV9TWU5D X01BU0tfR0VOX1JFRywgUEhZX0dFTl9VU0IzXzVHLAorCQkgICAgIFBIWV9HRU5fTUFYX01BU0sp OworCisJLyoKKwkgKiAxNS4gU2V0IGNhcGFjaXRvciB2YWx1ZSBmb3IgRkZFIGdhaW4gcGVha2lu ZyB0byAweEYKKwkgKi8KKwl1c2IzX3JlZ19zZXQodXNiM19waHlfYmFzZSwgQ09NUEhZX1JFR19H RU4zX1NFVFRJTkdTXzMsCisJCSAgICAgQ09NUEhZX0dFTl9GRkVfQ0FQX1NFTF9WQUxVRSwgQ09N UEhZX0dFTl9GRkVfQ0FQX1NFTF9NQVNLKTsKKworCS8qCisJICogMTYuIFJlbGVhc2UgU1cgcmVz ZXQKKwkgKi8KKwlkYXRhID0gTU9ERV9DT1JFX0NMS19GUkVRX1NFTCB8IE1PREVfUElQRV9XSURU SF8zMiB8IE1PREVfUkVGRElWX0JZXzQ7CisJdXNiM19yZWdfc2V0KHVzYjNfcGh5X2Jhc2UsIENP TVBIWV9SRUdfR0xPQl9QSFlfQ1RSTDBfQUREUiwgZGF0YSwgMHhGRkZGKTsKKworCS8qIFdhaXQg Zm9yID4gNTUgdXMgdG8gYWxsb3cgUENMSyBiZSBlbmFibGVkICovCisJdWRlbGF5KFBMTF9TRVRf REVMQVlfVVMpOworCisJaWYgKGxhbmUtPmlkID09IDIpIHsKKwkJZGF0YSA9IFVTQjNQSFlfTEFO RTJfUkVHX0JBU0VfT0ZGU0VUICsgQ09NUEhZX1JFR19MQU5FX1NUQVRVUzFfQUREUjsKKwkJd3Jp dGVsKGRhdGEsIHVzYjNfcGh5X2Jhc2UgKyBDT01QSFlfTEFORTJfSU5ESVJfQUREUl9PRkZTRVQp OworCisJCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dCh1c2IzX3BoeV9iYXNlICsgQ09NUEhZX0xB TkUyX0lORElSX0RBVEFfT0ZGU0VULAorCQkJCQkgZGF0YSwgZGF0YSAmIFRYRENMS19QQ0xLX0VO LAorCQkJCQkgQ09NUEhZX1BMTF9TTEVFUCwgQ09NUEhZX1BMTF9USU1FT1VUKTsKKwl9IGVsc2Ug eworCQlyZXQgPSByZWFkd19wb2xsX3RpbWVvdXQodXNiM19waHlfYmFzZSArIExBTkVfU1RBVFVT MV9BRERSKFVTQjMpLAorCQkJCQkgZGF0YSwgZGF0YSAmIFRYRENMS19QQ0xLX0VOLAorCQkJCQkg Q09NUEhZX1BMTF9TTEVFUCwgQ09NUEhZX1BMTF9USU1FT1VUKTsKKwl9CisJaWYgKHJldCkgewor CQlkZXZfZXJyKGxhbmUtPmRldiwgIkZhaWxlZCB0byBsb2NrIFVTQjMgUExMXG4iKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdmVidV9hMzcwMF9j b21waHlfcGNpZV9wb3dlcl9vbihzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xhbmUgKmxhbmUp Cit7CisJdm9pZCBfX2lvbWVtICpwY2llX3BoeV9iYXNlID0gbGFuZS0+cHJpdi0+cGNpZV9nYmUw X3BoeV9yZWdzOworCXUzMiBtYXNrLCBkYXRhOworCXUzMiByZWZfY2xrOworCWludCByZXQ7CisK KwkvKiBDb25maWd1cmUgcGh5IHNlbGVjdG9yIGZvciBQQ0llICovCisJcmV0ID0gbXZlYnVfYTM3 MDBfY29tcGh5X3NldF9waHlfc2VsZWN0b3IobGFuZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCS8qIDEuIEVuYWJsZSBtYXggUExMLiAqLworCXJlZ19zZXQxNihwY2llX3BoeV9iYXNl ICsgTEFORV9DRkcxX0FERFIoUENJRSksCisJCSAgVVNFX01BWF9QTExfUkFURV9FTiwgVVNFX01B WF9QTExfUkFURV9FTik7CisKKwkvKiAyLiBTZWxlY3QgMjAgYml0IFNFUkRFUyBpbnRlcmZhY2Uu ICovCisJcmVnX3NldDE2KHBjaWVfcGh5X2Jhc2UgKyBHTE9CX0NMS19TUkNfTE9fQUREUihQQ0lF KSwKKwkJICBDRkdfU0VMXzIwQiwgQ0ZHX1NFTF8yMEIpOworCisJLyogMy4gRm9yY2UgdG8gdXNl IHJlZyBzZXR0aW5nIGZvciBQQ0llIG1vZGUgKi8KKwlyZWdfc2V0MTYocGNpZV9waHlfYmFzZSAr IE1JU0NfUkVHMV9BRERSKFBDSUUpLAorCQkgIFNFTF9CSVRTX1BDSUVfRk9SQ0UsIFNFTF9CSVRT X1BDSUVfRk9SQ0UpOworCisJLyogNC4gQ2hhbmdlIFJYIHdhaXQgKi8KKwlyZWdfc2V0MTYocGNp ZV9waHlfYmFzZSArIFBXUl9NR01fVElNMV9BRERSKFBDSUUpLAorCQkgIENGR19QTV9SWERFTl9X QUlUXzFfVU5JVCB8IENGR19QTV9SWERMT1pfV0FJVF8xMl9VTklULAorCQkgIChDRkdfUE1fT1ND Q0xLX1dBSVRfTUFTSyB8IENGR19QTV9SWERFTl9XQUlUX01BU0sgfAorCQkgICBDRkdfUE1fUlhE TE9aX1dBSVRfTUFTSykpOworCisJLyogNS4gRW5hYmxlIGlkbGUgc3luYyAqLworCXJlZ19zZXQx NihwY2llX3BoeV9iYXNlICsgVU5JVF9DVFJMX0FERFIoUENJRSksCisJCSAgVU5JVF9DVFJMX0RF RkFVTFRfVkFMVUUgfCBJRExFX1NZTkNfRU4sIDB4RkZGRik7CisKKwkvKiA2LiBFbmFibGUgdGhl IG91dHB1dCBvZiAxMDBNLzEyNU0vNTAwTSBjbG9jayAqLworCXJlZ19zZXQxNihwY2llX3BoeV9i YXNlICsgTUlTQ19SRUcwX0FERFIoUENJRSksCisJCSAgTUlTQ19SRUcwX0RFRkFVTFRfVkFMVUUg fCBDTEs1MDBNX0VOIHwgVFhEQ0xLXzJYX1NFTCB8IENMSzEwME1fMTI1TV9FTiwKKwkJICAweEZG RkYpOworCisJLyoKKwkgKiA3LiBFbmFibGUgVFgsIFBDSUUgZ2xvYmFsIHJlZ2lzdGVyLCAweGQw MDc0ODE0LCBpdCBpcyBkb25lIGluCisJICogUENJLUUgZHJpdmVyCisJICovCisKKwkvKgorCSAq IDguIENoZWNrIGNyeXN0YWwganVtcGVyIHNldHRpbmcgYW5kIHByb2dyYW0gdGhlIFBvd2VyIGFu ZCBQTEwKKwkgKiBDb250cm9sIGFjY29yZGluZ2x5CisJICovCisKKwlpZiAobGFuZS0+cHJpdi0+ eHRhbF9pc180MG0pCisJCXJlZl9jbGsgPSBSRUZfQ0xPQ0tfU1BFRURfNDBNOworCWVsc2UKKwkJ cmVmX2NsayA9IFBDSUVfUkVGX0NMT0NLX1NQRUVEXzI1TTsKKworCXJlZ19zZXQxNihwY2llX3Bo eV9iYXNlICsgUFdSX1BMTF9DVFJMX0FERFIoUENJRSksCisJCSAgKFBVX0lWUkVGX0JJVCB8IFBV X1BMTF9CSVQgfCBQVV9SWF9CSVQgfCBQVV9UWF9CSVQgfAorCQkgICBQVV9UWF9JTlRQX0JJVCB8 IFBVX0RGRV9CSVQgfCByZWZfY2xrIHwgQ09NUEhZX01PREVfUENJRSksCisJCSAgMHhGRkZGKTsK KworCS8qIDkuIE92ZXJyaWRlIFNwZWVkX1BMTCB2YWx1ZSBhbmQgdXNlIE1BQyBQTEwgKi8KKwly ZWdfc2V0MTYocGNpZV9waHlfYmFzZSArIEtWQ09fQ0FMX0NUUkxfQUREUihQQ0lFKSwKKwkJICBT UEVFRF9QTExfVkFMVUVfMTYgfCBVU0VfTUFYX1BMTF9SQVRFX0JJVCwgMHhGRkZGKTsKKworCS8q IDEwLiBDaGVjayB0aGUgUG9sYXJpdHkgaW52ZXJ0IGJpdCAqLworCWRhdGEgPSAwVTsKKwlpZiAo bGFuZS0+aW52ZXJ0X3R4KQorCQlkYXRhIHw9IFRYRF9JTlZFUlRfQklUOworCWlmIChsYW5lLT5p bnZlcnRfcngpCisJCWRhdGEgfD0gUlhEX0lOVkVSVF9CSVQ7CisJbWFzayA9IFRYRF9JTlZFUlRf QklUIHwgUlhEX0lOVkVSVF9CSVQ7CisJcmVnX3NldDE2KHBjaWVfcGh5X2Jhc2UgKyBTWU5DX1BB VFRFUk5fUkVHX0FERFIoUENJRSksIGRhdGEsIG1hc2spOworCisJLyogMTEuIFJlbGVhc2UgU1cg cmVzZXQgKi8KKwlyZWdfc2V0MTYocGNpZV9waHlfYmFzZSArIEdMT0JfUEhZX0NUUkwwX0FERFIo UENJRSksCisJCSAgTU9ERV9DT1JFX0NMS19GUkVRX1NFTCB8IE1PREVfUElQRV9XSURUSF8zMiwK KwkJICBTT0ZUX1JFU0VUIHwgTU9ERV9SRUZESVYpOworCisJLyogV2FpdCBmb3IgPiA1NSB1cyB0 byBhbGxvdyBQQ0xLIGJlIGVuYWJsZWQgKi8KKwl1ZGVsYXkoUExMX1NFVF9ERUxBWV9VUyk7CisK KwlyZXQgPSByZWFkd19wb2xsX3RpbWVvdXQocGNpZV9waHlfYmFzZSArIExBTkVfU1RBVFVTMV9B RERSKFBDSUUpLAorCQkJCSBkYXRhLCBkYXRhICYgVFhEQ0xLX1BDTEtfRU4sCisJCQkJIENPTVBI WV9QTExfU0xFRVAsIENPTVBIWV9QTExfVElNRU9VVCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KGxhbmUtPmRldiwgIkZhaWxlZCB0byBsb2NrIFBDSUUgUExMXG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdmVidV9hMzcwMF9jb21waHlfZ2V0 X2Z3X21vZGUoaW50IGxhbmUsCitzdGF0aWMgdm9pZCBtdmVidV9hMzcwMF9jb21waHlfdXNiM19w b3dlcl9vZmYoc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lKQoreworCS8qCisJ ICogQ3VycmVudGx5IHRoZSBVU0IzIE1BQyBzZXRzIHRoZSBVU0IzIFBIWSB0byBsb3cgc3RhdGUs IHNvIHdlIGRvIG5vdAorCSAqIG5lZWQgdG8gcG93ZXIgb2ZmIFVTQjMgUEhZIGFnYWluLgorCSAq LworfQorCitzdGF0aWMgdm9pZCBtdmVidV9hMzcwMF9jb21waHlfc2F0YV9wb3dlcl9vZmYoc3Ry dWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lKQoreworCXZvaWQgX19pb21lbSAqc2F0 YV9waHlfYmFzZSA9IGxhbmUtPnByaXYtPnNhdGFfdXNiM19waHlfcmVnczsKKwl1MzIgb2Zmc2V0 OworCisJLyogU2V0IHBoeSBpc29sYXRpb24gbW9kZSAqLworCW9mZnNldCA9IFNBVEFQSFlfTEFO RTJfUkVHX0JBU0VfT0ZGU0VUICsgQ09NUEhZX0lTT0xBVElPTl9DVFJMX1JFRzsKKwljb21waHlf c2F0YV9zZXRfaW5kaXJlY3Qoc2F0YV9waHlfYmFzZSwgb2Zmc2V0LCBQSFlfSVNPTEFURV9NT0RF LAorCQkJCSBQSFlfSVNPTEFURV9NT0RFKTsKKworCS8qIFBvd2VyIG9mZiBQTEwsIFR4LCBSeCAq LworCW9mZnNldCA9IFNBVEFQSFlfTEFORTJfUkVHX0JBU0VfT0ZGU0VUICsgQ09NUEhZX1BPV0VS X1BMTF9DVFJMOworCWNvbXBoeV9zYXRhX3NldF9pbmRpcmVjdChzYXRhX3BoeV9iYXNlLCBvZmZz ZXQsIDAsCisJCQkJIFBVX1BMTF9CSVQgfCBQVV9SWF9CSVQgfCBQVV9UWF9CSVQpOworfQorCitz dGF0aWMgdm9pZCBtdmVidV9hMzcwMF9jb21waHlfZXRoZXJuZXRfcG93ZXJfb2ZmKHN0cnVjdCBt dmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSkKK3sKKwl2b2lkIF9faW9tZW0gKmNvbXBoeV9i YXNlID0gbGFuZS0+cHJpdi0+Y29tcGh5X3JlZ3M7CisJdTMyIG1hc2ssIGRhdGE7CisKKwlkYXRh ID0gUElOX1JFU0VUX0NPUkVfQklUIHwgUElOX1JFU0VUX0NPTVBIWV9CSVQgfCBQSU5fUFVfSVZF UkVGX0JJVCB8IFBIWV9SWF9JTklUX0JJVDsKKwltYXNrID0gZGF0YTsKKwlyZWdfc2V0KGNvbXBo eV9iYXNlICsgQ09NUEhZX1BIWV9DRkcxX09GRlNFVChsYW5lLT5pZCksIGRhdGEsIG1hc2spOwor fQorCitzdGF0aWMgdm9pZCBtdmVidV9hMzcwMF9jb21waHlfcGNpZV9wb3dlcl9vZmYoc3RydWN0 IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lKQoreworCS8qIEN1cnJlbnRseSBkbyBub3Ro aW5nICovCit9CisKK3N0YXRpYyBib29sIG12ZWJ1X2EzNzAwX2NvbXBoeV9jaGVja19tb2RlKGlu dCBsYW5lLAogCQkJCQkgIGVudW0gcGh5X21vZGUgbW9kZSwKIAkJCQkJICBpbnQgc3VibW9kZSkK IHsKQEAgLTEyMiw3ICsxMTQ0LDcgQEAgc3RhdGljIGludCBtdmVidV9hMzcwMF9jb21waHlfZ2V0 X2Z3X21vZGUoaW50IGxhbmUsCiAKIAkvKiBVbnVzZWQgUEhZIG11eCB2YWx1ZSBpcyAweDAgKi8K IAlpZiAobW9kZSA9PSBQSFlfTU9ERV9JTlZBTElEKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0 dXJuIGZhbHNlOwogCiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogCQlpZiAobXZlYnVfYTM3 MDBfY29tcGh5X21vZGVzW2ldLmxhbmUgPT0gbGFuZSAmJgpAQCAtMTMyLDI1ICsxMTU0LDE5IEBA IHN0YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X2dldF9md19tb2RlKGludCBsYW5lLAogCX0K IAogCWlmIChpID09IG4pCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gZmFsc2U7CiAKLQly ZXR1cm4gbXZlYnVfYTM3MDBfY29tcGh5X21vZGVzW2ldLmZ3X21vZGU7CisJcmV0dXJuIHRydWU7 CiB9CiAKIHN0YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X3NldF9tb2RlKHN0cnVjdCBwaHkg KnBoeSwgZW51bSBwaHlfbW9kZSBtb2RlLAogCQkJCSAgICAgICBpbnQgc3VibW9kZSkKIHsKIAlz dHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xhbmUgKmxhbmUgPSBwaHlfZ2V0X2RydmRhdGEocGh5 KTsKLQlpbnQgZndfbW9kZTsKLQotCWlmIChzdWJtb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8x MDAwQkFTRVgpCi0JCXN1Ym1vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk7CiAKLQlmd19t b2RlID0gbXZlYnVfYTM3MDBfY29tcGh5X2dldF9md19tb2RlKGxhbmUtPmlkLCBtb2RlLAotCQkJ CQkJIHN1Ym1vZGUpOwotCWlmIChmd19tb2RlIDwgMCkgeworCWlmICghbXZlYnVfYTM3MDBfY29t cGh5X2NoZWNrX21vZGUobGFuZS0+aWQsIG1vZGUsIHN1Ym1vZGUpKSB7CiAJCWRldl9lcnIobGFu ZS0+ZGV2LCAiaW52YWxpZCBDT01QSFkgbW9kZVxuIik7Ci0JCXJldHVybiBmd19tb2RlOworCQly ZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBKdXN0IHJlbWVtYmVyIHRoZSBtb2RlLCAtPnBvd2Vy X29uKCkgd2lsbCBkbyB0aGUgcmVhbCBzZXR1cCAqLwpAQCAtMTYzLDcxICsxMTc5LDUyIEBAIHN0 YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X3NldF9tb2RlKHN0cnVjdCBwaHkgKnBoeSwgZW51 bSBwaHlfbW9kZSBtb2RlLAogc3RhdGljIGludCBtdmVidV9hMzcwMF9jb21waHlfcG93ZXJfb24o c3RydWN0IHBoeSAqcGh5KQogewogCXN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFu ZSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwotCXUzMiBmd19wYXJhbTsKLQlpbnQgZndfbW9kZTsK LQlpbnQgZndfcG9ydDsKLQlpbnQgcmV0OwogCi0JZndfbW9kZSA9IG12ZWJ1X2EzNzAwX2NvbXBo eV9nZXRfZndfbW9kZShsYW5lLT5pZCwKLQkJCQkJCSBsYW5lLT5tb2RlLCBsYW5lLT5zdWJtb2Rl KTsKLQlpZiAoZndfbW9kZSA8IDApIHsKKwlpZiAoIW12ZWJ1X2EzNzAwX2NvbXBoeV9jaGVja19t b2RlKGxhbmUtPmlkLCBsYW5lLT5tb2RlLCBsYW5lLT5zdWJtb2RlKSkgewogCQlkZXZfZXJyKGxh bmUtPmRldiwgImludmFsaWQgQ09NUEhZIG1vZGVcbiIpOwotCQlyZXR1cm4gZndfbW9kZTsKKwkJ cmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJc3dpdGNoIChsYW5lLT5tb2RlKSB7CiAJY2FzZSBQSFlf TU9ERV9VU0JfSE9TVF9TUzoKIAkJZGV2X2RiZyhsYW5lLT5kZXYsICJzZXQgbGFuZSAlZCB0byBV U0IzIGhvc3QgbW9kZVxuIiwgbGFuZS0+aWQpOwotCQlmd19wYXJhbSA9IENPTVBIWV9GV19NT0RF KGZ3X21vZGUpOwotCQlicmVhazsKKwkJcmV0dXJuIG12ZWJ1X2EzNzAwX2NvbXBoeV91c2IzX3Bv d2VyX29uKGxhbmUpOwogCWNhc2UgUEhZX01PREVfU0FUQToKIAkJZGV2X2RiZyhsYW5lLT5kZXYs ICJzZXQgbGFuZSAlZCB0byBTQVRBIG1vZGVcbiIsIGxhbmUtPmlkKTsKLQkJZndfcGFyYW0gPSBD T01QSFlfRldfTU9ERShmd19tb2RlKTsKLQkJYnJlYWs7CisJCXJldHVybiBtdmVidV9hMzcwMF9j b21waHlfc2F0YV9wb3dlcl9vbihsYW5lKTsKIAljYXNlIFBIWV9NT0RFX0VUSEVSTkVUOgotCQlm d19wb3J0ID0gKGxhbmUtPmlkID09IDApID8gMSA6IDA7Ci0JCXN3aXRjaCAobGFuZS0+c3VibW9k ZSkgewotCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSToKLQkJCWRldl9kYmcobGFuZS0+ ZGV2LCAic2V0IGxhbmUgJWQgdG8gU0dNSUkgbW9kZVxuIiwKLQkJCQlsYW5lLT5pZCk7Ci0JCQlm d19wYXJhbSA9IENPTVBIWV9GV19ORVQoZndfbW9kZSwgZndfcG9ydCwKLQkJCQkJCSBDT01QSFlf RldfU1BFRURfMV8yNUcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1 MDBCQVNFWDoKLQkJCWRldl9kYmcobGFuZS0+ZGV2LCAic2V0IGxhbmUgJWQgdG8gMjUwMEJBU0VY IG1vZGVcbiIsCi0JCQkJbGFuZS0+aWQpOwotCQkJZndfcGFyYW0gPSBDT01QSFlfRldfTkVUKGZ3 X21vZGUsIGZ3X3BvcnQsCi0JCQkJCQkgQ09NUEhZX0ZXX1NQRUVEXzNfMTI1Ryk7Ci0JCQlicmVh azsKLQkJZGVmYXVsdDoKLQkJCWRldl9lcnIobGFuZS0+ZGV2LCAidW5zdXBwb3J0ZWQgUEhZIHN1 Ym1vZGUgKCVkKVxuIiwKLQkJCQlsYW5lLT5zdWJtb2RlKTsKLQkJCXJldHVybiAtRU5PVFNVUFA7 Ci0JCX0KLQkJYnJlYWs7CisJCWRldl9kYmcobGFuZS0+ZGV2LCAic2V0IGxhbmUgJWQgdG8gRXRo ZXJuZXQgbW9kZVxuIiwgbGFuZS0+aWQpOworCQlyZXR1cm4gbXZlYnVfYTM3MDBfY29tcGh5X2V0 aGVybmV0X3Bvd2VyX29uKGxhbmUpOwogCWNhc2UgUEhZX01PREVfUENJRToKIAkJZGV2X2RiZyhs YW5lLT5kZXYsICJzZXQgbGFuZSAlZCB0byBQQ0llIG1vZGVcbiIsIGxhbmUtPmlkKTsKLQkJZndf cGFyYW0gPSBDT01QSFlfRldfUENJRShmd19tb2RlLCBDT01QSFlfRldfU1BFRURfNUcsCi0JCQkJ CSAgcGh5LT5hdHRycy5idXNfd2lkdGgpOwotCQlicmVhazsKKwkJcmV0dXJuIG12ZWJ1X2EzNzAw X2NvbXBoeV9wY2llX3Bvd2VyX29uKGxhbmUpOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIobGFuZS0+ ZGV2LCAidW5zdXBwb3J0ZWQgUEhZIG1vZGUgKCVkKVxuIiwgbGFuZS0+bW9kZSk7Ci0JCXJldHVy biAtRU5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9Ci0KLQlyZXQgPSBtdmVidV9h MzcwMF9jb21waHlfc21jKENPTVBIWV9TSVBfUE9XRVJfT04sIGxhbmUtPmlkLCBmd19wYXJhbSk7 Ci0JaWYgKHJldCA9PSAtRU9QTk9UU1VQUCkKLQkJZGV2X2VycihsYW5lLT5kZXYsCi0JCQkidW5z dXBwb3J0ZWQgU01DIGNhbGwsIHRyeSB1cGRhdGluZyB5b3VyIGZpcm13YXJlXG4iKTsKLQotCXJl dHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X3Bvd2VyX29mZihz dHJ1Y3QgcGh5ICpwaHkpCiB7CiAJc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5l ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CiAKLQlyZXR1cm4gbXZlYnVfYTM3MDBfY29tcGh5X3Nt YyhDT01QSFlfU0lQX1BPV0VSX09GRiwgbGFuZS0+aWQsIDApOworCXN3aXRjaCAobGFuZS0+aWQp IHsKKwljYXNlIDA6CisJCW12ZWJ1X2EzNzAwX2NvbXBoeV91c2IzX3Bvd2VyX29mZihsYW5lKTsK KwkJbXZlYnVfYTM3MDBfY29tcGh5X2V0aGVybmV0X3Bvd2VyX29mZihsYW5lKTsKKwkJcmV0dXJu IDA7CisJY2FzZSAxOgorCQltdmVidV9hMzcwMF9jb21waHlfcGNpZV9wb3dlcl9vZmYobGFuZSk7 CisJCW12ZWJ1X2EzNzAwX2NvbXBoeV9ldGhlcm5ldF9wb3dlcl9vZmYobGFuZSk7CisJCXJldHVy biAwOworCWNhc2UgMjoKKwkJbXZlYnVfYTM3MDBfY29tcGh5X3VzYjNfcG93ZXJfb2ZmKGxhbmUp OworCQltdmVidV9hMzcwMF9jb21waHlfc2F0YV9wb3dlcl9vZmYobGFuZSk7CisJCXJldHVybiAw OworCWRlZmF1bHQ6CisJCWRldl9lcnIobGFuZS0+ZGV2LCAiaW52YWxpZCBDT01QSFkgbW9kZVxu Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlf b3BzIG12ZWJ1X2EzNzAwX2NvbXBoeV9vcHMgPSB7CkBAIC0yNTYsMTMgKzEyNTMsNjggQEAgc3Rh dGljIHN0cnVjdCBwaHkgKm12ZWJ1X2EzNzAwX2NvbXBoeV94bGF0ZShzdHJ1Y3QgZGV2aWNlICpk ZXYsCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAorCWxhbmUtPmludmVydF90eCA9 IGFyZ3MtPmFyZ3NbMV0gJiBCSVQoMCk7CisJbGFuZS0+aW52ZXJ0X3J4ID0gYXJncy0+YXJnc1sx XSAmIEJJVCgxKTsKKwogCXJldHVybiBwaHk7CiB9CiAKIHN0YXRpYyBpbnQgbXZlYnVfYTM3MDBf Y29tcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IG12 ZWJ1X2EzNzAwX2NvbXBoeV9wcml2ICpwcml2OwogCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnByb3Zp ZGVyOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CisJc3RydWN0IHJlc291cmNlICpyZXM7 CisJc3RydWN0IGNsayAqY2xrOworCWludCByZXQ7CisKKwlwcml2ID0gZGV2bV9remFsbG9jKCZw ZGV2LT5kZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYs IElPUkVTT1VSQ0VfTUVNLCAiY29tcGh5Iik7CisJcHJpdi0+Y29tcGh5X3JlZ3MgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHByaXYtPmNvbXBo eV9yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+Y29tcGh5X3JlZ3MpOworCisJcmVzID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImxhbmUx X3BjaWVfZ2JlIik7CisJcHJpdi0+cGNpZV9nYmUwX3BoeV9yZWdzID0gZGV2bV9pb3JlbWFwX3Jl c291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihwcml2LT5wY2llX2diZTBfcGh5 X3JlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihwcml2LT5wY2llX2diZTBfcGh5X3JlZ3MpOworCisJ cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwg ImxhbmUwX3VzYjNfZ2JlIik7CisJcHJpdi0+dXNiM19nYmUxX3BoeV9yZWdzID0gZGV2bV9pb3Jl bWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihwcml2LT51c2IzX2di ZTFfcGh5X3JlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihwcml2LT51c2IzX2diZTFfcGh5X3JlZ3Mp OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNF X01FTSwgImxhbmUyX3NhdGFfdXNiMyIpOworCXByaXYtPnNhdGFfdXNiM19waHlfcmVncyA9IGRl dm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIocHJpdi0+ c2F0YV91c2IzX3BoeV9yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+c2F0YV91c2IzX3Bo eV9yZWdzKTsKKworCS8qCisJICogRHJpdmVyIG5lZWRzIHRvIGtub3cgaWYgcmVmZXJlbmNlIHh0 YWwgY2xvY2sgaXMgNDBNSHogb3IgMjVNSHouCisJICogT2xkIERUIGJpbmRpbmdzIGRvIG5vdCBo YXZlIHh0YWwgY2xrIHByZXNlbnQuIFNvIGRvIG5vdCBmYWlsIGhlcmUKKwkgKiBhbmQgZXhwZWN0 cyB0aGF0IGRlZmF1bHQgMjVNSHogcmVmZXJlbmNlIGNsb2NrIGlzIHVzZWQuCisJICovCisJY2xr ID0gY2xrX2dldCgmcGRldi0+ZGV2LCAieHRhbCIpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlp ZiAoUFRSX0VSUihjbGspID09IC1FUFJPQkVfREVGRVIpCisJCQlyZXR1cm4gLUVQUk9CRV9ERUZF UjsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm1pc3NpbmcgJ3h0YWwnIGNsayAoJWxkKVxuIiwg UFRSX0VSUihjbGspKTsKKwl9IGVsc2UgeworCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2xr KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImVuYWJsaW5nIHh0YWwg Y2xrIGZhaWxlZCAoJWQpXG4iLCByZXQpOworCQl9IGVsc2UgeworCQkJaWYgKGNsa19nZXRfcmF0 ZShjbGspID09IDQwMDAwMDAwKQorCQkJCXByaXYtPnh0YWxfaXNfNDBtID0gdHJ1ZTsKKwkJCWNs a19kaXNhYmxlX3VucHJlcGFyZShjbGspOworCQl9CisJCWNsa19wdXQoY2xrKTsKKwl9CisKKwlk ZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgcHJpdik7CiAKIAlmb3JfZWFjaF9hdmFpbGFibGVf Y2hpbGRfb2Zfbm9kZShwZGV2LT5kZXYub2Zfbm9kZSwgY2hpbGQpIHsKIAkJc3RydWN0IG12ZWJ1 X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lOwpAQCAtMjc3LDcgKzEzMjksNyBAQCBzdGF0aWMgaW50 IG12ZWJ1X2EzNzAwX2NvbXBoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQog CQkJY29udGludWU7CiAJCX0KIAotCQlpZiAobGFuZV9pZCA+PSBNVkVCVV9BMzcwMF9DT01QSFlf TEFORVMpIHsKKwkJaWYgKGxhbmVfaWQgPj0gMykgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAi aW52YWxpZCAncmVnJyBwcm9wZXJ0eVxuIik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjk1LDEx ICsxMzQ3LDIwIEBAIHN0YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCQlyZXR1cm4gUFRSX0VSUihwaHkpOwogCQl9CiAKKwkJ bGFuZS0+cHJpdiA9IHByaXY7CiAJCWxhbmUtPmRldiA9ICZwZGV2LT5kZXY7CiAJCWxhbmUtPm1v ZGUgPSBQSFlfTU9ERV9JTlZBTElEOwogCQlsYW5lLT5zdWJtb2RlID0gUEhZX0lOVEVSRkFDRV9N T0RFX05BOwogCQlsYW5lLT5pZCA9IGxhbmVfaWQ7CisJCWxhbmUtPmludmVydF90eCA9IGZhbHNl OworCQlsYW5lLT5pbnZlcnRfcnggPSBmYWxzZTsKIAkJcGh5X3NldF9kcnZkYXRhKHBoeSwgbGFu ZSk7CisKKwkJLyoKKwkJICogVG8gYXZvaWQgcmVseWluZyBvbiB0aGUgYm9vdGxvYWRlci9maXJt d2FyZSBjb25maWd1cmF0aW9uLAorCQkgKiBwb3dlciBvZmYgYWxsIGNvbXBoeXMuCisJCSAqLwor CQltdmVidV9hMzcwMF9jb21waHlfcG93ZXJfb2ZmKHBoeSk7CiAJfQogCiAJcHJvdmlkZXIgPSBk ZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcigmcGRldi0+ZGV2LApAQCAtMzIzLDUgKzEzODQs NiBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdmVidV9hMzcwMF9jb21waHlfZHJp dmVyID0gewogbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdmVidV9hMzcwMF9jb21waHlfZHJpdmVy KTsKIAogTU9EVUxFX0FVVEhPUigiTWlxdcOobCBSYXluYWwgPG1pcXVlbC5yYXluYWxAYm9vdGxp bi5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJQYWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPiIp OwogTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21tb24gUEhZIGRyaXZlciBmb3IgQTM3MDAiKTsKIE1P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gCjIuMzIuMAoKCi0tIApsaW51eC1waHkgbWFpbGlu ZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo=