From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v3 3/3] xen: add pvUSB backend Date: Fri, 6 May 2016 11:42:46 +0200 Message-ID: <1462527766-26462-4-git-send-email-jgross@suse.com> References: <1462527766-26462-1-git-send-email-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1462527766-26462-1-git-send-email-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: qemu-devel@nongnu.org, xen-devel@lists.xensource.com Cc: anthony.perard@citrix.com, Juergen Gross , kraxel@redhat.com, stefano.stabellini@eu.citrix.com List-Id: xen-devel@lists.xenproject.org QWRkIGEgYmFja2VuZCBmb3IgcGFyYS12aXJ0dWFsaXplZCBVU0IgZGV2aWNlcyBmb3IgeGVuIGRv bWFpbnMuCgpUaGUgYmFja2VuZCBpcyB1c2luZyBob3N0LWxpYnVzYiB0byBmb3J3YXJkIFVTQiBy ZXF1ZXN0cyBmcm9tIGEKZG9tYWluIHZpYSBsaWJ1c2IgdG8gdGhlIHJlYWwgZGV2aWNlKHMpIHBh c3NlZCB0aHJvdWdoLgoKU2lnbmVkLW9mZi1ieTogSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2Uu Y29tPgotLS0KVjM6IG11bHRpcGxlIHNtYWxsIGNoYW5nZXMgYXMgcmVxdWVzdGVkIGJ5IEFudGhv bnkgUGVyYXJkCiAgICBjaGVjayBmb3IgZnVsbCByaW5nIGluIGNhc2Ugb2YgaG90cGx1ZyBldmVu dHMgYXMgcmVxdWVzdGVkIGJ5CiAgICBBbnRob255IFBlcmFyZAogICAgdXNlIFJJTkdfQ09QWV9S RVFVRVNUKCkgaW5zdGVhZCBvZiBSSU5HX0dFVF9SRVFVRVNUKCkKICAgIGFkZCBjaGVjayBmb3Ig cmVxdWlyZWQgaGVhZGVyIHZlcnNpb24gYW5kIGRpc2FibGUgYmFja2VuZCBpbgogICAgY2FzZSBo ZWFkZXIgaXMgdG9vIG9sZAoKVjI6IHVzZSB4ZW5fYmVfcHJpbnRmKCkgaW5zdGVhZCBvZiBmcHJp bnRmKCkgZm9yIGRpYWdub3N0aWMgcHJpbnRzIGFzCiAgICByZXF1ZXN0ZWQgYnkgU3RlZmFubyBT dGFiZWxsaW5pCiAgICBsb3RzIG9mIHNtYWxsIGNoYW5nZXMgcmVxdWVzdGVkIGJ5IEtvbnJhZCBX aWxrCiAgICByZW1vdmVkIGlzb2MgcmVxdWVzdCBzdXBwb3J0LCB3aWxsIGJlIGluIHNlcGFyYXRl IHBhdGNoCi0tLQogaHcvdXNiL01ha2VmaWxlLm9ianMgICAgICAgICB8ICAgIDQgKwogaHcvdXNi L3hlbi11c2IuYyAgICAgICAgICAgICB8IDEwODAgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiBody94ZW5wdi94ZW5fbWFjaGluZV9wdi5jICAgIHwgICAgMyArCiBp bmNsdWRlL2h3L3hlbi94ZW5fYmFja2VuZC5oIHwgICAgMyArCiBpbmNsdWRlL2h3L3hlbi94ZW5f Y29tbW9uLmggIHwgICAgMiArCiA1IGZpbGVzIGNoYW5nZWQsIDEwOTIgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGh3L3VzYi94ZW4tdXNiLmMKCmRpZmYgLS1naXQgYS9ody91c2Iv TWFrZWZpbGUub2JqcyBiL2h3L3VzYi9NYWtlZmlsZS5vYmpzCmluZGV4IDI3MTcwMjcuLjk4YjVj OWQgMTAwNjQ0Ci0tLSBhL2h3L3VzYi9NYWtlZmlsZS5vYmpzCisrKyBiL2h3L3VzYi9NYWtlZmls ZS5vYmpzCkBAIC0zOCwzICszOCw3IEBAIGNvbW1vbi1vYmotJChDT05GSUdfVVNCX1JFRElSKSAr PSByZWRpcmVjdC5vIHF1aXJrcy5vCiAKICMgdXNiIHBhc3MtdGhyb3VnaAogY29tbW9uLW9iai15 ICs9ICQocGF0c3Vic3QgJSxob3N0LSUubywkKEhPU1RfVVNCKSkKKworaWZlcSAoJChDT05GSUdf VVNCX0xJQlVTQikseSkKK2NvbW1vbi1vYmotJChDT05GSUdfWEVOX0JBQ0tFTkQpICs9IHhlbi11 c2IubworZW5kaWYKZGlmZiAtLWdpdCBhL2h3L3VzYi94ZW4tdXNiLmMgYi9ody91c2IveGVuLXVz Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NGRmMDQKLS0tIC9kZXYv bnVsbAorKysgYi9ody91c2IveGVuLXVzYi5jCkBAIC0wLDAgKzEsMTA4MCBAQAorLyoKKyAqICB4 ZW4gcGFyYXZpcnQgdXNiIGRldmljZSBiYWNrZW5kCisgKgorICogIChjKSBKdWVyZ2VuIEdyb3Nz IDxqZ3Jvc3NAc3VzZS5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB1bmRlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiAgQ29udHJpYnV0aW9ucyBhZnRlciAyMDEyLTAxLTEz IGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiAgR05VIEdQTCwgdmVyc2lv biAyIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1 ZGUgPGxpYnVzYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVk ZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUtY29tbW9uLmgiCisjaW5jbHVkZSAicWVt dS9jb25maWctZmlsZS5oIgorI2luY2x1ZGUgImh3L3N5c2J1cy5oIgorI2luY2x1ZGUgImh3L3Vz Yi5oIgorI2luY2x1ZGUgImh3L3hlbi94ZW5fYmFja2VuZC5oIgorI2luY2x1ZGUgIm1vbml0b3Iv cWRldi5oIgorI2luY2x1ZGUgInFhcGkvcW1wL3Fib29sLmgiCisjaW5jbHVkZSAicWFwaS9xbXAv cWludC5oIgorI2luY2x1ZGUgInFhcGkvcW1wL3FzdHJpbmcuaCIKKyNpbmNsdWRlICJzeXMvdXNl ci5oIgorCisjaW5jbHVkZSA8eGVuL2lvL3JpbmcuaD4KKyNpbmNsdWRlIDx4ZW4vaW8vdXNiaWYu aD4KKworLyoKKyAqIENoZWNrIGZvciByZXF1aXJlZCBzdXBwb3J0IG9mIHVzYmlmLmg6IFVTQklG X1NIT1JUX05PVF9PSyB3YXMgdGhlIGxhc3QKKyAqIG1hY3JvIGFkZGVkIHdlIHJlbHkgb24uCisg Ki8KKyNpZmRlZiBVU0JJRl9TSE9SVF9OT1RfT0sKKworI2RlZmluZSBUUih4ZW5kZXYsIGx2bCwg Zm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdldHRpbWVvZmRheSgmdHYs IE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeGVu X2JlX3ByaW50Zih4ZW5kZXYsIGx2bCwgIiU4bGQuJTA2bGQgeGVuLXVzYiglcyk6IiBmbXQsICAg XAorICAgICAgICAgICAgICAgICAgICAgIHR2LnR2X3NlYywgdHYudHZfdXNlYywgX19mdW5jX18s ICMjYXJncyk7ICAgICBcCisgICAgfQorI2RlZmluZSBUUl9CVVMoeGVuZGV2LCBmbXQsIGFyZ3Mu Li4pIFRSKHhlbmRldiwgMiwgZm10LCAjI2FyZ3MpCisjZGVmaW5lIFRSX1JFUSh4ZW5kZXYsIGZt dCwgYXJncy4uLikgVFIoeGVuZGV2LCAzLCBmbXQsICMjYXJncykKKworI2RlZmluZSBVU0JCQUNL X01BWFBPUlRTICAgICAgICBVU0JJRl9QSVBFX1BPUlRfTUFTSworI2RlZmluZSBVU0JfREVWX0FE RFJfU0laRSAgICAgICAoVVNCSUZfUElQRV9ERVZfTUFTSyArIDEpCisKKy8qIFVTQiB3aXJlIHBy b3RvY29sOiBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBjb250cm9sIHJlcXVlc3QgcGFyYW1ldGVyLiAq Lworc3RydWN0IHVzYmlmX2N0cmxyZXF1ZXN0IHsKKyAgICB1aW50OF90ICAgIGJSZXF1ZXN0VHlw ZTsKKyAgICB1aW50OF90ICAgIGJSZXF1ZXN0OworICAgIHVpbnQxNl90ICAgd1ZhbHVlOworICAg IHVpbnQxNl90ICAgd0luZGV4OworICAgIHVpbnQxNl90ICAgd0xlbmd0aDsKK307CisKK3N0cnVj dCB1c2JiYWNrX2luZm87CitzdHJ1Y3QgdXNiYmFja19yZXE7CisKK3N0cnVjdCB1c2JiYWNrX3N0 dWIgeworICAgIFVTQkRldmljZSAgICAgKmRldjsKKyAgICBVU0JQb3J0ICAgICAgIHBvcnQ7Cisg ICAgdW5zaWduZWQgaW50ICBzcGVlZDsKKyAgICBib29sICAgICAgICAgIGF0dGFjaGVkOworICAg IFFUQUlMUV9IRUFEKHN1Ym1pdF9xX2hlYWQsIHVzYmJhY2tfcmVxKSBzdWJtaXRfcTsKK307CisK K3N0cnVjdCB1c2JiYWNrX3JlcSB7CisgICAgc3RydWN0IHVzYmJhY2tfaW5mbyAgICAgICp1c2Jp ZjsKKyAgICBzdHJ1Y3QgdXNiYmFja19zdHViICAgICAgKnN0dWI7CisgICAgc3RydWN0IHVzYmlm X3VyYl9yZXF1ZXN0IHJlcTsKKyAgICBVU0JQYWNrZXQgICAgICAgICAgICAgICAgcGFja2V0Owor CisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgIG5yX2J1ZmZlcl9zZWdzOyAvKiAjIG9mIHRy YW5zZmVyX2J1ZmZlciBzZWdtZW50cyAqLworICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICBu cl9leHRyYV9zZWdzOyAgLyogIyBvZiBpc29fZnJhbWVfZGVzYyBzZWdtZW50cyAgKi8KKworICAg IFFUQUlMUV9FTlRSWSh1c2JiYWNrX3JlcSkgcTsKKworICAgIHZvaWQgICAgICAgICAgICAgICAg ICAgICAqYnVmZmVyOworICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAqaXNvY19idWZmZXI7 CisgICAgc3RydWN0IGxpYnVzYl90cmFuc2ZlciAgICp4ZmVyOworfTsKKworc3RydWN0IHVzYmJh Y2tfaG90cGx1ZyB7CisgICAgUVNJTVBMRVFfRU5UUlkodXNiYmFja19ob3RwbHVnKSBxOworICAg IHVuc2lnbmVkICAgICAgICAgICAgICAgICBwb3J0OworfTsKKworc3RydWN0IHVzYmJhY2tfaW5m byB7CisgICAgc3RydWN0IFhlbkRldmljZSAgICAgICAgIHhlbmRldjsgIC8qIG11c3QgYmUgZmly c3QgKi8KKyAgICBVU0JCdXMgICAgICAgICAgICAgICAgICAgYnVzOworICAgIHZvaWQgICAgICAg ICAgICAgICAgICAgICAqdXJiX3NyaW5nOworICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAq Y29ubl9zcmluZzsKKyAgICBzdHJ1Y3QgdXNiaWZfdXJiX2JhY2tfcmluZyB1cmJfcmluZzsKKyAg ICBzdHJ1Y3QgdXNiaWZfY29ubl9iYWNrX3JpbmcgY29ubl9yaW5nOworICAgIGludCAgICAgICAg ICAgICAgICAgICAgICBudW1fcG9ydHM7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgIHVz Yl92ZXI7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgIHJpbmdfZXJyb3I7CisgICAgUVRB SUxRX0hFQUQocmVxX2ZyZWVfcV9oZWFkLCB1c2JiYWNrX3JlcSkgcmVxX2ZyZWVfcTsKKyAgICBR U0lNUExFUV9IRUFEKGhvdHBsdWdfcV9oZWFkLCB1c2JiYWNrX2hvdHBsdWcpIGhvdHBsdWdfcTsK KyAgICBzdHJ1Y3QgdXNiYmFja19zdHViICAgICAgcG9ydHNbVVNCQkFDS19NQVhQT1JUU107Cisg ICAgc3RydWN0IHVzYmJhY2tfc3R1YiAgICAgICphZGRyX3RhYmxlW1VTQl9ERVZfQUREUl9TSVpF XTsKKyAgICBRRU1VQkggICAgICAgICAgICAgICAgICAgKmJoOworfTsKKworc3RhdGljIHN0cnVj dCB1c2JiYWNrX3JlcSAqdXNiYmFja19nZXRfcmVxKHN0cnVjdCB1c2JiYWNrX2luZm8gKnVzYmlm KQoreworICAgIHN0cnVjdCB1c2JiYWNrX3JlcSAqdXNiYmFja19yZXE7CisKKyAgICBpZiAoUVRB SUxRX0VNUFRZKCZ1c2JpZi0+cmVxX2ZyZWVfcSkpIHsKKyAgICAgICAgdXNiYmFja19yZXEgPSBn X25ldzAoc3RydWN0IHVzYmJhY2tfcmVxLCAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1c2Ji YWNrX3JlcSA9IFFUQUlMUV9GSVJTVCgmdXNiaWYtPnJlcV9mcmVlX3EpOworICAgICAgICBRVEFJ TFFfUkVNT1ZFKCZ1c2JpZi0+cmVxX2ZyZWVfcSwgdXNiYmFja19yZXEsIHEpOworICAgIH0KKyAg ICByZXR1cm4gdXNiYmFja19yZXE7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmJhY2tfcHV0X3JlcShz dHJ1Y3QgdXNiYmFja19yZXEgKnVzYmJhY2tfcmVxKQoreworICAgIHN0cnVjdCB1c2JiYWNrX2lu Zm8gKnVzYmlmOworCisgICAgdXNiaWYgPSB1c2JiYWNrX3JlcS0+dXNiaWY7CisgICAgbWVtc2V0 KHVzYmJhY2tfcmVxLCAwLCBzaXplb2YoKnVzYmJhY2tfcmVxKSk7CisgICAgUVRBSUxRX0lOU0VS VF9IRUFEKCZ1c2JpZi0+cmVxX2ZyZWVfcSwgdXNiYmFja19yZXEsIHEpOworfQorCitzdGF0aWMg aW50IHVzYmJhY2tfZ250dGFiX21hcChzdHJ1Y3QgdXNiYmFja19yZXEgKnVzYmJhY2tfcmVxKQor eworICAgIHVuc2lnbmVkIGludCBucl9zZWdzLCBpLCBwcm90OworICAgIHVpbnQzMl90IHJlZltV U0JJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1RdOworICAgIHN0cnVjdCB1c2JiYWNrX2luZm8g KnVzYmlmID0gdXNiYmFja19yZXEtPnVzYmlmOworICAgIHN0cnVjdCBYZW5EZXZpY2UgKnhlbmRl diA9ICZ1c2JpZi0+eGVuZGV2OworICAgIHN0cnVjdCB1c2JpZl9yZXF1ZXN0X3NlZ21lbnQgKnNl ZzsKKyAgICB2b2lkICphZGRyOworCisgICAgbnJfc2VncyA9IHVzYmJhY2tfcmVxLT5ucl9idWZm ZXJfc2VncyArIHVzYmJhY2tfcmVxLT5ucl9leHRyYV9zZWdzOworICAgIGlmICghbnJfc2Vncykg eworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAobnJfc2VncyA+IFVTQklGX01B WF9TRUdNRU5UU19QRVJfUkVRVUVTVCkgeworICAgICAgICB4ZW5fYmVfcHJpbnRmKHhlbmRldiwg MCwgImJhZCBudW1iZXIgb2Ygc2VnbWVudHMgaW4gcmVxdWVzdCAoJWQpXG4iLAorICAgICAgICAg ICAgICAgICAgICAgIG5yX3NlZ3MpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisK KyAgICBmb3IgKGkgPSAwOyBpIDwgbnJfc2VnczsgaSsrKSB7CisgICAgICAgIGlmICgodW5zaWdu ZWQpdXNiYmFja19yZXEtPnJlcS5zZWdbaV0ub2Zmc2V0ICsKKyAgICAgICAgICAgICh1bnNpZ25l ZCl1c2JiYWNrX3JlcS0+cmVxLnNlZ1tpXS5sZW5ndGggPiBQQUdFX1NJWkUpIHsKKyAgICAgICAg ICAgIHhlbl9iZV9wcmludGYoeGVuZGV2LCAwLCAic2VnbWVudCBjcm9zc2VzIHBhZ2UgYm91bmRh cnlcbiIpOworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKyAgICB9CisK KyAgICBpZiAodXNiYmFja19yZXEtPm5yX2J1ZmZlcl9zZWdzKSB7CisgICAgICAgIHByb3QgPSBQ Uk9UX1JFQUQ7CisgICAgICAgIGlmICh1c2JpZl9waXBlaW4odXNiYmFja19yZXEtPnJlcS5waXBl KSkgeworICAgICAgICAgICAgICAgIHByb3QgfD0gUFJPVF9XUklURTsKKyAgICAgICAgfQorICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgdXNiYmFja19yZXEtPm5yX2J1ZmZlcl9zZWdzOyBpKyspIHsK KyAgICAgICAgICAgIHJlZltpXSA9IHVzYmJhY2tfcmVxLT5yZXEuc2VnW2ldLmdyZWY7CisgICAg ICAgIH0KKyAgICAgICAgdXNiYmFja19yZXEtPmJ1ZmZlciA9IHhlbmdudHRhYl9tYXBfZG9tYWlu X2dyYW50X3JlZnMoeGVuZGV2LT5nbnR0YWJkZXYsCisgICAgICAgICAgICB1c2JiYWNrX3JlcS0+ bnJfYnVmZmVyX3NlZ3MsIHhlbmRldi0+ZG9tLCByZWYsIHByb3QpOworCisgICAgICAgIGlmICgh dXNiYmFja19yZXEtPmJ1ZmZlcikgeworICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAg ICAgIH0KKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdXNiYmFja19yZXEtPm5yX2J1ZmZlcl9z ZWdzOyBpKyspIHsKKyAgICAgICAgICAgIHNlZyA9IHVzYmJhY2tfcmVxLT5yZXEuc2VnICsgaTsK KyAgICAgICAgICAgIGFkZHIgPSB1c2JiYWNrX3JlcS0+YnVmZmVyICsgaSAqIFBBR0VfU0laRSAr IHNlZy0+b2Zmc2V0OworICAgICAgICAgICAgcWVtdV9pb3ZlY19hZGQoJnVzYmJhY2tfcmVxLT5w YWNrZXQuaW92LCBhZGRyLCBzZWctPmxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp ZiAoIXVzYmlmX3BpcGVpc29jKHVzYmJhY2tfcmVxLT5yZXEucGlwZSkpIHsKKyAgICAgICAgcmV0 dXJuIDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSaWdodCBub3cgaXNvYyByZXF1ZXN0cyBh cmUgbm90IHN1cHBvcnRlZC4KKyAgICAgKiBQcmVwYXJlIHN1cHBvcnRpbmcgdGhvc2UgYnkgZG9p bmcgdGhlIHdvcmsgbmVlZGVkIG9uIHRoZSBndWVzdAorICAgICAqIGludGVyZmFjZSBzaWRlLgor ICAgICAqLworCisgICAgaWYgKCF1c2JiYWNrX3JlcS0+bnJfZXh0cmFfc2VncykgeworICAgICAg ICB4ZW5fYmVfcHJpbnRmKHhlbmRldiwgMCwgImlzbyByZXF1ZXN0IHdpdGhvdXQgZGVzY3JpcHRv ciBzZWdtZW50c1xuIik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIHBy b3QgPSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFOworICAgIGZvciAoaSA9IDA7IGkgPCB1c2JiYWNr X3JlcS0+bnJfZXh0cmFfc2VnczsgaSsrKSB7CisgICAgICAgIHJlZltpXSA9IHVzYmJhY2tfcmVx LT5yZXEuc2VnW2kgKyB1c2JiYWNrX3JlcS0+cmVxLm5yX2J1ZmZlcl9zZWdzXS5ncmVmOworICAg IH0KKyAgICB1c2JiYWNrX3JlcS0+aXNvY19idWZmZXIgPSB4ZW5nbnR0YWJfbWFwX2RvbWFpbl9n cmFudF9yZWZzKAorICAgICAgICAgeGVuZGV2LT5nbnR0YWJkZXYsIHVzYmJhY2tfcmVxLT5ucl9l eHRyYV9zZWdzLCB4ZW5kZXYtPmRvbSwgcmVmLCBwcm90KTsKKworICAgIGlmICghdXNiYmFja19y ZXEtPmlzb2NfYnVmZmVyKSB7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYmJhY2tfaW5pdF9wYWNrZXQoc3RydWN0IHVz YmJhY2tfcmVxICp1c2JiYWNrX3JlcSkKK3sKKyAgICBzdHJ1Y3QgWGVuRGV2aWNlICp4ZW5kZXYg PSAmdXNiYmFja19yZXEtPnVzYmlmLT54ZW5kZXY7CisgICAgVVNCUGFja2V0ICpwYWNrZXQgPSAm dXNiYmFja19yZXEtPnBhY2tldDsKKyAgICBVU0JEZXZpY2UgKmRldiA9IHVzYmJhY2tfcmVxLT5z dHViLT5kZXY7CisgICAgVVNCRW5kcG9pbnQgKmVwOworICAgIHVuc2lnbmVkIGludCBwaWQsIGVw X25yOworICAgIGJvb2wgc29rOworICAgIGludCByZXQgPSAwOworCisgICAgcWVtdV9pb3ZlY19p bml0KCZwYWNrZXQtPmlvdiwgVVNCSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKTsKKyAgICBw aWQgPSB1c2JpZl9waXBlaW4odXNiYmFja19yZXEtPnJlcS5waXBlKSA/IFVTQl9UT0tFTl9JTiA6 IFVTQl9UT0tFTl9PVVQ7CisgICAgZXBfbnIgPSB1c2JpZl9waXBlZW5kcG9pbnQodXNiYmFja19y ZXEtPnJlcS5waXBlKTsKKyAgICBzb2sgPSAhISh1c2JiYWNrX3JlcS0+cmVxLnRyYW5zZmVyX2Zs YWdzICYgVVNCSUZfU0hPUlRfTk9UX09LKTsKKyAgICBpZiAodXNiaWZfcGlwZWN0cmwodXNiYmFj a19yZXEtPnJlcS5waXBlKSkgeworICAgICAgICBlcF9uciA9IDA7CisgICAgICAgIHNvayA9IGZh bHNlOworICAgIH0KKyAgICBlcCA9IHVzYl9lcF9nZXQoZGV2LCBwaWQsIGVwX25yKTsKKyAgICB1 c2JfcGFja2V0X3NldHVwKHBhY2tldCwgcGlkLCBlcCwgMCwgMSwgc29rLCB0cnVlKTsKKworICAg IHN3aXRjaCAodXNiaWZfcGlwZXR5cGUodXNiYmFja19yZXEtPnJlcS5waXBlKSkgeworICAgIGNh c2UgVVNCSUZfUElQRV9UWVBFX0lTT0M6CisgICAgICAgIFRSX1JFUSh4ZW5kZXYsICJpc28gdHJh bnNmZXIgJXM6IGJ1ZmxlbjogJXgsICVkIGZyYW1lc1xuIiwKKyAgICAgICAgICAgICAgIChwaWQg PT0gVVNCX1RPS0VOX0lOKSA/ICJpbiIgOiAib3V0IiwKKyAgICAgICAgICAgICAgIHVzYmJhY2tf cmVxLT5yZXEuYnVmZmVyX2xlbmd0aCwKKyAgICAgICAgICAgICAgIHVzYmJhY2tfcmVxLT5yZXEu dS5pc29jLm5yX2ZyYW1lX2Rlc2Nfc2Vncyk7CisgICAgICAgIHJldCA9IC1FSU5WQUw7ICAvKiBp c29jIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFVT QklGX1BJUEVfVFlQRV9JTlQ6CisgICAgICAgIFRSX1JFUSh4ZW5kZXYsICJpbnQgdHJhbnNmZXIg JXM6IGJ1ZmxlbjogJXhcbiIsCisgICAgICAgICAgICAgICAocGlkID09IFVTQl9UT0tFTl9JTikg PyAiaW4iIDogIm91dCIsCisgICAgICAgICAgICAgICB1c2JiYWNrX3JlcS0+cmVxLmJ1ZmZlcl9s ZW5ndGgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgVVNCSUZfUElQRV9UWVBFX0NUUkw6 CisgICAgICAgIHBhY2tldC0+cGFyYW1ldGVyID0gKih1aW50NjRfdCAqKXVzYmJhY2tfcmVxLT5y ZXEudS5jdHJsOworICAgICAgICBUUl9SRVEoeGVuZGV2LCAiY3RybCBwYXJhbWV0ZXI6ICVseCwg YnVmbGVuOiAleFxuIiwgcGFja2V0LT5wYXJhbWV0ZXIsCisgICAgICAgICAgICAgICB1c2JiYWNr X3JlcS0+cmVxLmJ1ZmZlcl9sZW5ndGgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgVVNC SUZfUElQRV9UWVBFX0JVTEs6CisgICAgICAgIFRSX1JFUSh4ZW5kZXYsICJidWxrIHRyYW5zZmVy ICVzOiBidWZsZW46ICV4XG4iLAorICAgICAgICAgICAgICAgKHBpZCA9PSBVU0JfVE9LRU5fSU4p ID8gImluIiA6ICJvdXQiLAorICAgICAgICAgICAgICAgdXNiYmFja19yZXEtPnJlcS5idWZmZXJf bGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0ID0gLUVJ TlZBTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworc3Rh dGljIHZvaWQgdXNiYmFja19kb19yZXNwb25zZShzdHJ1Y3QgdXNiYmFja19yZXEgKnVzYmJhY2tf cmVxLCBpbnQzMl90IHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 MzJfdCBhY3R1YWxfbGVuZ3RoLCBpbnQzMl90IGVycm9yX2NvdW50KQoreworICAgIHN0cnVjdCB1 c2JiYWNrX2luZm8gKnVzYmlmOworICAgIHN0cnVjdCB1c2JpZl91cmJfcmVzcG9uc2UgKnJlczsK KyAgICBzdHJ1Y3QgWGVuRGV2aWNlICp4ZW5kZXY7CisgICAgdW5zaWduZWQgaW50IG5vdGlmeTsK KworICAgIHVzYmlmID0gdXNiYmFja19yZXEtPnVzYmlmOworICAgIHhlbmRldiA9ICZ1c2JpZi0+ eGVuZGV2OworCisgICAgVFJfUkVRKHhlbmRldiwgImlkICVkLCBzdGF0dXMgJWQsIGxlbmd0aCAl ZCwgZXJyY250ICVkXG4iLAorICAgICAgICAgICB1c2JiYWNrX3JlcS0+cmVxLmlkLCBzdGF0dXMs IGFjdHVhbF9sZW5ndGgsIGVycm9yX2NvdW50KTsKKworICAgIGlmICh1c2JiYWNrX3JlcS0+cGFj a2V0Lmlvdi5pb3YpIHsKKyAgICAgICAgcWVtdV9pb3ZlY19kZXN0cm95KCZ1c2JiYWNrX3JlcS0+ cGFja2V0Lmlvdik7CisgICAgfQorCisgICAgaWYgKHVzYmJhY2tfcmVxLT5idWZmZXIpIHsKKyAg ICAgICAgeGVuZ250dGFiX3VubWFwKHhlbmRldi0+Z250dGFiZGV2LCB1c2JiYWNrX3JlcS0+YnVm ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNiYmFja19yZXEtPm5yX2J1ZmZlcl9zZWdz KTsKKyAgICAgICAgdXNiYmFja19yZXEtPmJ1ZmZlciA9IE5VTEw7CisgICAgfQorCisgICAgaWYg KHVzYmJhY2tfcmVxLT5pc29jX2J1ZmZlcikgeworICAgICAgICB4ZW5nbnR0YWJfdW5tYXAoeGVu ZGV2LT5nbnR0YWJkZXYsIHVzYmJhY2tfcmVxLT5pc29jX2J1ZmZlciwKKyAgICAgICAgICAgICAg ICAgICAgICAgIHVzYmJhY2tfcmVxLT5ucl9leHRyYV9zZWdzKTsKKyAgICAgICAgdXNiYmFja19y ZXEtPmlzb2NfYnVmZmVyID0gTlVMTDsKKyAgICB9CisKKyAgICByZXMgPSBSSU5HX0dFVF9SRVNQ T05TRSgmdXNiaWYtPnVyYl9yaW5nLCB1c2JpZi0+dXJiX3JpbmcucnNwX3Byb2RfcHZ0KTsKKyAg ICByZXMtPmlkID0gdXNiYmFja19yZXEtPnJlcS5pZDsKKyAgICByZXMtPnN0YXR1cyA9IHN0YXR1 czsKKyAgICByZXMtPmFjdHVhbF9sZW5ndGggPSBhY3R1YWxfbGVuZ3RoOworICAgIHJlcy0+ZXJy b3JfY291bnQgPSBlcnJvcl9jb3VudDsKKyAgICByZXMtPnN0YXJ0X2ZyYW1lID0gMDsKKyAgICB1 c2JpZi0+dXJiX3JpbmcucnNwX3Byb2RfcHZ0Kys7CisgICAgUklOR19QVVNIX1JFU1BPTlNFU19B TkRfQ0hFQ0tfTk9USUZZKCZ1c2JpZi0+dXJiX3JpbmcsIG5vdGlmeSk7CisKKyAgICBpZiAobm90 aWZ5KSB7CisgICAgICAgIHhlbl9iZV9zZW5kX25vdGlmeSh4ZW5kZXYpOworICAgIH0KKworICAg IHVzYmJhY2tfcHV0X3JlcSh1c2JiYWNrX3JlcSk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmJhY2tf ZG9fcmVzcG9uc2VfcmV0KHN0cnVjdCB1c2JiYWNrX3JlcSAqdXNiYmFja19yZXEsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0YXR1cykKK3sKKyAgICB1c2Ji YWNrX2RvX3Jlc3BvbnNlKHVzYmJhY2tfcmVxLCBzdGF0dXMsIDAsIDApOworfQorCitzdGF0aWMg aW50MzJfdCB1c2JiYWNrX3hsYXRfc3RhdHVzKGludCBzdGF0dXMpCit7CisgICAgc3dpdGNoIChz dGF0dXMpIHsKKyAgICBjYXNlIFVTQl9SRVRfU1VDQ0VTUzoKKyAgICAgICAgcmV0dXJuIDA7Cisg ICAgY2FzZSBVU0JfUkVUX05PREVWOgorICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICBjYXNl IFVTQl9SRVRfU1RBTEw6CisgICAgICAgIHJldHVybiAtRVBJUEU7CisgICAgY2FzZSBVU0JfUkVU X0JBQkJMRToKKyAgICAgICAgcmV0dXJuIC1FT1ZFUkZMT1c7CisgICAgY2FzZSBVU0JfUkVUX0lP RVJST1I6CisgICAgICAgIHJldHVybiAtRVBST1RPOworICAgIH0KKworICAgIHJldHVybiAtRVNI VVRET1dOOworfQorCitzdGF0aWMgdm9pZCB1c2JiYWNrX3BhY2tldF9jb21wbGV0ZShVU0JQYWNr ZXQgKnBhY2tldCkKK3sKKyAgICBzdHJ1Y3QgdXNiYmFja19yZXEgKnVzYmJhY2tfcmVxOworICAg IGludDMyX3Qgc3RhdHVzOworCisgICAgdXNiYmFja19yZXEgPSBjb250YWluZXJfb2YocGFja2V0 LCBzdHJ1Y3QgdXNiYmFja19yZXEsIHBhY2tldCk7CisKKyAgICBRVEFJTFFfUkVNT1ZFKCZ1c2Ji YWNrX3JlcS0+c3R1Yi0+c3VibWl0X3EsIHVzYmJhY2tfcmVxLCBxKTsKKworICAgIHN0YXR1cyA9 IHVzYmJhY2tfeGxhdF9zdGF0dXMocGFja2V0LT5zdGF0dXMpOworICAgIHVzYmJhY2tfZG9fcmVz cG9uc2UodXNiYmFja19yZXEsIHN0YXR1cywgcGFja2V0LT5hY3R1YWxfbGVuZ3RoLCAwKTsKK30K Kworc3RhdGljIHZvaWQgdXNiYmFja19zZXRfYWRkcmVzcyhzdHJ1Y3QgdXNiYmFja19pbmZvICp1 c2JpZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzYmJhY2tfc3R1 YiAqc3R1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGN1 cl9hZGRyLCB1bnNpZ25lZCBpbnQgbmV3X2FkZHIpCit7CisgICAgaWYgKGN1cl9hZGRyKSB7Cisg ICAgICAgIHVzYmlmLT5hZGRyX3RhYmxlW2N1cl9hZGRyXSA9IE5VTEw7CisgICAgfQorICAgIGlm IChuZXdfYWRkcikgeworICAgICAgICB1c2JpZi0+YWRkcl90YWJsZVtuZXdfYWRkcl0gPSBzdHVi OworICAgIH0KK30KKworc3RhdGljIGJvb2wgdXNiYmFja19jYW5jZWxfcmVxKHN0cnVjdCB1c2Ji YWNrX3JlcSAqdXNiYmFja19yZXEpCit7CisgICAgYm9vbCByZXQgPSBmYWxzZTsKKworICAgIGlm ICh1c2JfcGFja2V0X2lzX2luZmxpZ2h0KCZ1c2JiYWNrX3JlcS0+cGFja2V0KSkgeworICAgICAg ICB1c2JfY2FuY2VsX3BhY2tldCgmdXNiYmFja19yZXEtPnBhY2tldCk7CisgICAgICAgIHJldCA9 IHRydWU7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmJhY2tf cHJvY2Vzc191bmxpbmtfcmVxKHN0cnVjdCB1c2JiYWNrX3JlcSAqdXNiYmFja19yZXEpCit7Cisg ICAgc3RydWN0IHVzYmJhY2tfaW5mbyAqdXNiaWY7CisgICAgc3RydWN0IHVzYmJhY2tfcmVxICp1 bmxpbmtfcmVxOworICAgIHVuc2lnbmVkIGludCBpZCwgZGV2bnVtOworICAgIGludCByZXQ7CisK KyAgICB1c2JpZiA9IHVzYmJhY2tfcmVxLT51c2JpZjsKKyAgICByZXQgPSAwOworICAgIGlkID0g dXNiYmFja19yZXEtPnJlcS51LnVubGluay51bmxpbmtfaWQ7CisgICAgVFJfUkVRKCZ1c2JpZi0+ eGVuZGV2LCAidW5saW5rIGlkICVkXG4iLCBpZCk7CisgICAgZGV2bnVtID0gdXNiaWZfcGlwZWRl dmljZSh1c2JiYWNrX3JlcS0+cmVxLnBpcGUpOworICAgIGlmICh1bmxpa2VseShkZXZudW0gPT0g MCkpIHsKKyAgICAgICAgdXNiYmFja19yZXEtPnN0dWIgPSB1c2JpZi0+cG9ydHMgKworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVzYmlmX3BpcGVwb3J0bnVtKHVzYmJhY2tfcmVxLT5yZXEu cGlwZSk7CisgICAgICAgIGlmICh1bmxpa2VseSghdXNiYmFja19yZXEtPnN0dWIpKSB7CisgICAg ICAgICAgICByZXQgPSAtRU5PREVWOworICAgICAgICAgICAgZ290byBmYWlsX3Jlc3BvbnNlOwor ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHVubGlrZWx5KCF1c2JpZi0+YWRk cl90YWJsZVtkZXZudW1dKSkgeworICAgICAgICAgICAgcmV0ID0gLUVOT0RFVjsKKyAgICAgICAg ICAgIGdvdG8gZmFpbF9yZXNwb25zZTsKKyAgICAgICAgfQorICAgICAgICB1c2JiYWNrX3JlcS0+ c3R1YiA9IHVzYmlmLT5hZGRyX3RhYmxlW2Rldm51bV07CisgICAgfQorCisgICAgUVRBSUxRX0ZP UkVBQ0godW5saW5rX3JlcSwgJnVzYmJhY2tfcmVxLT5zdHViLT5zdWJtaXRfcSwgcSkgeworICAg ICAgICBpZiAodW5saW5rX3JlcS0+cmVxLmlkID09IGlkKSB7CisgICAgICAgICAgICBpZiAodXNi YmFja19jYW5jZWxfcmVxKHVubGlua19yZXEpKSB7CisgICAgICAgICAgICAgICAgdXNiYmFja19k b19yZXNwb25zZV9yZXQodW5saW5rX3JlcSwgLUVQUk9UTyk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworZmFpbF9yZXNwb25zZToKKyAgICB1 c2JiYWNrX2RvX3Jlc3BvbnNlX3JldCh1c2JiYWNrX3JlcSwgcmV0KTsKK30KKworLyoKKyAqIENo ZWNrcyB3aGV0aGVyIGEgcmVxdWVzdCBjYW4gYmUgaGFuZGxlZCBhdCBvbmNlIG9yIHNob3VsZCBi ZSBmb3J3YXJkZWQKKyAqIHRvIHRoZSB1c2IgZnJhbWV3b3JrLgorICogUmV0dXJuIHZhbHVlIGlz OgorICogMCBpbiBjYXNlIG9mIHVzYiBmcmFtZXdvcmsgaXMgbmVlZGVkCisgKiAxIGluIGNhc2Ug b2YgbG9jYWwgaGFuZGxpbmcgKG5vIGVycm9yKQorICogVGhlIHJlcXVlc3QgcmVzcG9uc2UgaGFz IGJlZW4gcXVldWVkIGFscmVhZHkgaWYgcmV0dXJuIHZhbHVlIG5vdCAwLgorICovCitzdGF0aWMg aW50IHVzYmJhY2tfY2hlY2tfYW5kX3N1Ym1pdChzdHJ1Y3QgdXNiYmFja19yZXEgKnVzYmJhY2tf cmVxKQoreworICAgIHN0cnVjdCB1c2JiYWNrX2luZm8gKnVzYmlmOworICAgIHVuc2lnbmVkIGlu dCBkZXZudW07CisgICAgc3RydWN0IHVzYmJhY2tfc3R1YiAqc3R1YjsKKyAgICBzdHJ1Y3QgdXNi aWZfY3RybHJlcXVlc3QgKmN0cmw7CisgICAgaW50IHJldDsKKyAgICB1aW50MTZfdCB3VmFsdWU7 CisKKyAgICB1c2JpZiA9IHVzYmJhY2tfcmVxLT51c2JpZjsKKyAgICBzdHViID0gTlVMTDsKKyAg ICBkZXZudW0gPSB1c2JpZl9waXBlZGV2aWNlKHVzYmJhY2tfcmVxLT5yZXEucGlwZSk7CisgICAg Y3RybCA9IChzdHJ1Y3QgdXNiaWZfY3RybHJlcXVlc3QgKil1c2JiYWNrX3JlcS0+cmVxLnUuY3Ry bDsKKyAgICB3VmFsdWUgPSBsZTE2X3RvX2NwdShjdHJsLT53VmFsdWUpOworCisgICAgLyoKKyAg ICAgKiBXaGVuIHRoZSBkZXZpY2UgaXMgZmlyc3QgY29ubmVjdGVkIG9yIHJlc2V0dGVkLCBVU0Ig ZGV2aWNlIGhhcyBubworICAgICAqIGFkZHJlc3MuIEluIHRoaXMgaW5pdGlhbCBzdGF0ZSwgZm9s bG93aW5nIHJlcXVlc3RzIGFyZSBzZW50IHRvIGRldmljZQorICAgICAqIGFkZHJlc3MgKCMwKSwK KyAgICAgKgorICAgICAqICAxLiBHRVRfREVTQ1JJUFRPUiAod2l0aCBEZXNjcmlwdG9yIFR5cGUg aXMgIkRFVklDRSIpIGlzIHNlbnQsCisgICAgICogICAgIGFuZCBPUyBrbm93cyB3aGF0IGRldmlj ZSBpcyBjb25uZWN0ZWQgdG8uCisgICAgICoKKyAgICAgKiAgMi4gU0VUX0FERFJFU1MgaXMgc2Vu dCwgYW5kIHRoZW4gZGV2aWNlIGhhcyBpdHMgYWRkcmVzcy4KKyAgICAgKgorICAgICAqIEluIHRo ZSBuZXh0IHN0ZXAsIFNFVF9DT05GSUdVUkFUSU9OIGlzIHNlbnQgdG8gYWRkcmVzc2VkIGRldmlj ZSwgYW5kCisgICAgICogdGhlbiB0aGUgZGV2aWNlIGlzIGZpbmFsbHkgcmVhZHkgdG8gdXNlLgor ICAgICAqLworICAgIGlmICh1bmxpa2VseShkZXZudW0gPT0gMCkpIHsKKyAgICAgICAgc3R1YiA9 IHVzYmlmLT5wb3J0cyArIHVzYmlmX3BpcGVwb3J0bnVtKHVzYmJhY2tfcmVxLT5yZXEucGlwZSkg LSAxOworICAgICAgICBpZiAoIXN0dWItPmRldiB8fCAhc3R1Yi0+YXR0YWNoZWQpIHsKKyAgICAg ICAgICAgIHJldCA9IC1FTk9ERVY7CisgICAgICAgICAgICBnb3RvIGRvX3Jlc3BvbnNlOworICAg ICAgICB9CisKKyAgICAgICAgc3dpdGNoIChjdHJsLT5iUmVxdWVzdCkgeworICAgICAgICBjYXNl IFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICog R0VUX0RFU0NSSVBUT1IgcmVxdWVzdCB0byBkZXZpY2UgIzAuCisgICAgICAgICAgICAgKiB0aHJv dWdoIG5vcm1hbCB0cmFuc2Zlci4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgVFJfUkVR KCZ1c2JpZi0+eGVuZGV2LCAiZGV2bnVtIDAgR0VUX0RFU0NSSVBUT1JcbiIpOworICAgICAgICAg ICAgdXNiYmFja19yZXEtPnN0dWIgPSBzdHViOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg ICAgIGNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAg ICAgKiBTRVRfQUREUkVTUyByZXF1ZXN0IHRvIGRldmljZSAjMC4KKyAgICAgICAgICAgICAqIGFk ZCBhdHRhY2hlZCBkZXZpY2UgdG8gYWRkcl90YWJsZS4KKyAgICAgICAgICAgICAqLworICAgICAg ICAgICAgVFJfUkVRKCZ1c2JpZi0+eGVuZGV2LCAiZGV2bnVtIDAgU0VUX0FERFJFU1NcbiIpOwor ICAgICAgICAgICAgdXNiYmFja19zZXRfYWRkcmVzcyh1c2JpZiwgc3R1YiwgMCwgd1ZhbHVlKTsK KyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs dDoKKyAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorICAgICAgICBnb3RvIGRvX3Jlc3BvbnNlOworICAgIH0KKworICAgIGlmICh1bmxpa2Vs eSghdXNiaWYtPmFkZHJfdGFibGVbZGV2bnVtXSkpIHsKKyAgICAgICAgICAgIHJldCA9IC1FTk9E RVY7CisgICAgICAgICAgICBnb3RvIGRvX3Jlc3BvbnNlOworICAgIH0KKyAgICB1c2JiYWNrX3Jl cS0+c3R1YiA9IHVzYmlmLT5hZGRyX3RhYmxlW2Rldm51bV07CisKKyAgICAvKgorICAgICAqIENo ZWNrIHNwZWNpYWwgcmVxdWVzdAorICAgICAqLworICAgIGlmIChjdHJsLT5iUmVxdWVzdCAhPSBV U0JfUkVRX1NFVF9BRERSRVNTKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8q CisgICAgICogU0VUX0FERFJFU1MgcmVxdWVzdCB0byBhZGRyZXNzZWQgZGV2aWNlLgorICAgICAq IGNoYW5nZSBhZGRyIG9yIHJlbW92ZSBmcm9tIGFkZHJfdGFibGUuCisgICAgICovCisgICAgdXNi YmFja19zZXRfYWRkcmVzcyh1c2JpZiwgdXNiYmFja19yZXEtPnN0dWIsIGRldm51bSwgd1ZhbHVl KTsKKyAgICByZXQgPSAwOworCitkb19yZXNwb25zZToKKyAgICB1c2JiYWNrX2RvX3Jlc3BvbnNl X3JldCh1c2JiYWNrX3JlcSwgcmV0KTsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQg dXNiYmFja19kaXNwYXRjaChzdHJ1Y3QgdXNiYmFja19yZXEgKnVzYmJhY2tfcmVxKQoreworICAg IGludCByZXQ7CisgICAgdW5zaWduZWQgaW50IGRldm51bTsKKyAgICBzdHJ1Y3QgdXNiYmFja19p bmZvICp1c2JpZjsKKworICAgIHVzYmlmID0gdXNiYmFja19yZXEtPnVzYmlmOworCisgICAgVFJf UkVRKCZ1c2JpZi0+eGVuZGV2LCAic3RhcnQgcmVxX2lkICVkIHBpcGUgJTA4eFxuIiwgdXNiYmFj a19yZXEtPnJlcS5pZCwKKyAgICAgICAgICAgdXNiYmFja19yZXEtPnJlcS5waXBlKTsKKworICAg IC8qIHVubGluayByZXF1ZXN0ICovCisgICAgaWYgKHVubGlrZWx5KHVzYmlmX3BpcGV1bmxpbmso dXNiYmFja19yZXEtPnJlcS5waXBlKSkpIHsKKyAgICAgICAgdXNiYmFja19wcm9jZXNzX3VubGlu a19yZXEodXNiYmFja19yZXEpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHVz YmlmX3BpcGVjdHJsKHVzYmJhY2tfcmVxLT5yZXEucGlwZSkpIHsKKyAgICAgICAgaWYgKHVzYmJh Y2tfY2hlY2tfYW5kX3N1Ym1pdCh1c2JiYWNrX3JlcSkpIHsKKyAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGRldm51bSA9IHVzYmlmX3BpcGVkZXZp Y2UodXNiYmFja19yZXEtPnJlcS5waXBlKTsKKyAgICAgICAgdXNiYmFja19yZXEtPnN0dWIgPSB1 c2JpZi0+YWRkcl90YWJsZVtkZXZudW1dOworCisgICAgICAgIGlmICghdXNiYmFja19yZXEtPnN0 dWIgfHwgIXVzYmJhY2tfcmVxLT5zdHViLT5hdHRhY2hlZCkgeworICAgICAgICAgICAgcmV0ID0g LUVOT0RFVjsKKyAgICAgICAgICAgIGdvdG8gZmFpbF9yZXNwb25zZTsKKyAgICAgICAgfQorICAg IH0KKworICAgIFFUQUlMUV9JTlNFUlRfVEFJTCgmdXNiYmFja19yZXEtPnN0dWItPnN1Ym1pdF9x LCB1c2JiYWNrX3JlcSwgcSk7CisKKyAgICB1c2JiYWNrX3JlcS0+bnJfYnVmZmVyX3NlZ3MgPSB1 c2JiYWNrX3JlcS0+cmVxLm5yX2J1ZmZlcl9zZWdzOworICAgIHVzYmJhY2tfcmVxLT5ucl9leHRy YV9zZWdzID0gdXNiaWZfcGlwZWlzb2ModXNiYmFja19yZXEtPnJlcS5waXBlKSA/CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JiYWNrX3JlcS0+cmVxLnUuaXNvYy5ucl9mcmFt ZV9kZXNjX3NlZ3MgOiAwOworCisgICAgcmV0ID0gdXNiYmFja19pbml0X3BhY2tldCh1c2JiYWNr X3JlcSk7CisgICAgaWYgKHJldCkgeworICAgICAgICB4ZW5fYmVfcHJpbnRmKCZ1c2JpZi0+eGVu ZGV2LCAwLCAiaW52YWxpZCByZXF1ZXN0XG4iKTsKKyAgICAgICAgcmV0ID0gLUVTSFVURE9XTjsK KyAgICAgICAgZ290byBmYWlsX2ZyZWVfdXJiOworICAgIH0KKworICAgIHJldCA9IHVzYmJhY2tf Z250dGFiX21hcCh1c2JiYWNrX3JlcSk7CisgICAgaWYgKHJldCkgeworICAgICAgICB4ZW5fYmVf cHJpbnRmKCZ1c2JpZi0+eGVuZGV2LCAwLCAiaW52YWxpZCBidWZmZXIsIHJldD0lZFxuIiwgcmV0 KTsKKyAgICAgICAgcmV0ID0gLUVTSFVURE9XTjsKKyAgICAgICAgZ290byBmYWlsX2ZyZWVfdXJi OworICAgIH0KKworICAgIHVzYl9oYW5kbGVfcGFja2V0KHVzYmJhY2tfcmVxLT5zdHViLT5kZXYs ICZ1c2JiYWNrX3JlcS0+cGFja2V0KTsKKyAgICBpZiAodXNiYmFja19yZXEtPnBhY2tldC5zdGF0 dXMgIT0gVVNCX1JFVF9BU1lOQykgeworICAgICAgICB1c2JiYWNrX3BhY2tldF9jb21wbGV0ZSgm dXNiYmFja19yZXEtPnBhY2tldCk7CisgICAgfQorICAgIHJldHVybjsKKworZmFpbF9mcmVlX3Vy YjoKKyAgICBRVEFJTFFfUkVNT1ZFKCZ1c2JiYWNrX3JlcS0+c3R1Yi0+c3VibWl0X3EsIHVzYmJh Y2tfcmVxLCBxKTsKKworZmFpbF9yZXNwb25zZToKKyAgICB1c2JiYWNrX2RvX3Jlc3BvbnNlX3Jl dCh1c2JiYWNrX3JlcSwgcmV0KTsKK30KKworc3RhdGljIHZvaWQgdXNiYmFja19ob3RwbHVnX25v dGlmeShzdHJ1Y3QgdXNiYmFja19pbmZvICp1c2JpZikKK3sKKyAgICBzdHJ1Y3QgdXNiaWZfY29u bl9iYWNrX3JpbmcgKnJpbmcgPSAmdXNiaWYtPmNvbm5fcmluZzsKKyAgICBzdHJ1Y3QgdXNiaWZf Y29ubl9yZXF1ZXN0IHJlcTsKKyAgICBzdHJ1Y3QgdXNiaWZfY29ubl9yZXNwb25zZSAqcmVzOwor ICAgIHN0cnVjdCB1c2JiYWNrX2hvdHBsdWcgKnVzYl9ocDsKKyAgICB1bnNpZ25lZCBpbnQgbm90 aWZ5OworCisgICAgaWYgKCF1c2JpZi0+Y29ubl9zcmluZykgeworICAgICAgICByZXR1cm47Cisg ICAgfQorCisgICAgLyogQ2hlY2sgZm9yIGZ1bGwgcmluZy4gKi8KKyAgICBpZiAoKFJJTkdfU0la RShyaW5nKSAtIHJpbmctPnJzcF9wcm9kX3B2dCAtIHJpbmctPnJlcV9jb25zKSA9PSAwKSB7Cisg ICAgICAgIHhlbl9iZV9zZW5kX25vdGlmeSgmdXNiaWYtPnhlbmRldik7CisgICAgICAgIHJldHVy bjsKKyAgICB9CisKKyAgICB1c2JfaHAgPSBRU0lNUExFUV9GSVJTVCgmdXNiaWYtPmhvdHBsdWdf cSk7CisgICAgUVNJTVBMRVFfUkVNT1ZFX0hFQUQoJnVzYmlmLT5ob3RwbHVnX3EsIHEpOworCisg ICAgUklOR19DT1BZX1JFUVVFU1QocmluZywgcmluZy0+cmVxX2NvbnMsICZyZXEpOworICAgIHJp bmctPnJlcV9jb25zKys7CisgICAgcmluZy0+c3JpbmctPnJlcV9ldmVudCA9IHJpbmctPnJlcV9j b25zICsgMTsKKworICAgIHJlcyA9IFJJTkdfR0VUX1JFU1BPTlNFKHJpbmcsIHJpbmctPnJzcF9w cm9kX3B2dCk7CisgICAgcmVzLT5pZCA9IHJlcS5pZDsKKyAgICByZXMtPnBvcnRudW0gPSB1c2Jf aHAtPnBvcnQ7CisgICAgcmVzLT5zcGVlZCA9IHVzYmlmLT5wb3J0c1t1c2JfaHAtPnBvcnQgLSAx XS5zcGVlZDsKKyAgICByaW5nLT5yc3BfcHJvZF9wdnQrKzsKKyAgICBSSU5HX1BVU0hfUkVTUE9O U0VTX0FORF9DSEVDS19OT1RJRlkocmluZywgbm90aWZ5KTsKKworICAgIGlmIChub3RpZnkpIHsK KyAgICAgICAgeGVuX2JlX3NlbmRfbm90aWZ5KCZ1c2JpZi0+eGVuZGV2KTsKKyAgICB9CisKKyAg ICBUUl9CVVMoJnVzYmlmLT54ZW5kZXYsICJob3RwbHVnIHBvcnQgJWQgc3BlZWQgJWRcbiIsIHVz Yl9ocC0+cG9ydCwKKyAgICAgICAgICAgcmVzLT5zcGVlZCk7CisKKyAgICBnX2ZyZWUodXNiX2hw KTsKKworICAgIGlmICghUVNJTVBMRVFfRU1QVFkoJnVzYmlmLT5ob3RwbHVnX3EpKSB7CisgICAg ICAgIHFlbXVfYmhfc2NoZWR1bGUodXNiaWYtPmJoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IHVzYmJhY2tfYmgodm9pZCAqb3BhcXVlKQoreworICAgIHN0cnVjdCB1c2JiYWNrX2luZm8gKnVz YmlmOworICAgIHN0cnVjdCB1c2JpZl91cmJfYmFja19yaW5nICp1cmJfcmluZzsKKyAgICBzdHJ1 Y3QgdXNiYmFja19yZXEgKnVzYmJhY2tfcmVxOworICAgIFJJTkdfSURYIHJjLCBycDsKKyAgICB1 bnNpZ25lZCBpbnQgbW9yZV90b19kbzsKKworICAgIHVzYmlmID0gb3BhcXVlOworICAgIGlmICh1 c2JpZi0+cmluZ19lcnJvcikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFR U0lNUExFUV9FTVBUWSgmdXNiaWYtPmhvdHBsdWdfcSkpIHsKKyAgICAgICAgdXNiYmFja19ob3Rw bHVnX25vdGlmeSh1c2JpZik7CisgICAgfQorCisgICAgdXJiX3JpbmcgPSAmdXNiaWYtPnVyYl9y aW5nOworICAgIHJjID0gdXJiX3JpbmctPnJlcV9jb25zOworICAgIHJwID0gdXJiX3JpbmctPnNy aW5nLT5yZXFfcHJvZDsKKyAgICB4ZW5fcm1iKCk7IC8qIEVuc3VyZSB3ZSBzZWUgcXVldWVkIHJl cXVlc3RzIHVwIHRvICdycCcuICovCisKKyAgICBpZiAoUklOR19SRVFVRVNUX1BST0RfT1ZFUkZM T1codXJiX3JpbmcsIHJwKSkgeworICAgICAgICByYyA9IHVyYl9yaW5nLT5yc3BfcHJvZF9wdnQ7 CisgICAgICAgIHhlbl9iZV9wcmludGYoJnVzYmlmLT54ZW5kZXYsIDAsICJkb21VIHByb3ZpZGVk IGJvZ3VzIHJpbmcgcmVxdWVzdHMgIgorICAgICAgICAgICAgICAgICAgICAgICIoJSN4IC0gJSN4 ID0gJXUpLiBIYWx0aW5nIHJpbmcgcHJvY2Vzc2luZy5cbiIsCisgICAgICAgICAgICAgICAgICAg ICAgcnAsIHJjLCBycCAtIHJjKTsKKyAgICAgICAgdXNiaWYtPnJpbmdfZXJyb3IgPSB0cnVlOwor ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd2hpbGUgKHJjICE9IHJwKSB7CisgICAgICAg IGlmIChSSU5HX1JFUVVFU1RfQ09OU19PVkVSRkxPVyh1cmJfcmluZywgcmMpKSB7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB1c2JiYWNrX3JlcSA9IHVzYmJhY2tfZ2V0 X3JlcSh1c2JpZik7CisKKyAgICAgICAgUklOR19DT1BZX1JFUVVFU1QodXJiX3JpbmcsIHJjLCAm dXNiYmFja19yZXEtPnJlcSk7CisgICAgICAgIHVzYmJhY2tfcmVxLT51c2JpZiA9IHVzYmlmOwor CisgICAgICAgIHVzYmJhY2tfZGlzcGF0Y2godXNiYmFja19yZXEpOworCisgICAgICAgIHVyYl9y aW5nLT5yZXFfY29ucyA9ICsrcmM7CisgICAgfQorCisgICAgUklOR19GSU5BTF9DSEVDS19GT1Jf UkVRVUVTVFModXJiX3JpbmcsIG1vcmVfdG9fZG8pOworICAgIGlmIChtb3JlX3RvX2RvKSB7Cisg ICAgICAgIHFlbXVfYmhfc2NoZWR1bGUodXNiaWYtPmJoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2 b2lkIHVzYmJhY2tfaG90cGx1Z19lbnEoc3RydWN0IHVzYmJhY2tfaW5mbyAqdXNiaWYsIHVuc2ln bmVkIHBvcnQpCit7CisgICAgc3RydWN0IHVzYmJhY2tfaG90cGx1ZyAqdXNiX2hwOworCisgICAg dXNiX2hwID0gZ19uZXcwKHN0cnVjdCB1c2JiYWNrX2hvdHBsdWcsIDEpOworICAgIHVzYl9ocC0+ cG9ydCA9IHBvcnQ7CisgICAgUVNJTVBMRVFfSU5TRVJUX1RBSUwoJnVzYmlmLT5ob3RwbHVnX3Es IHVzYl9ocCwgcSk7CisgICAgdXNiYmFja19ob3RwbHVnX25vdGlmeSh1c2JpZik7Cit9CisKK3N0 YXRpYyB2b2lkIHVzYmJhY2tfcG9ydGlkX3JlbW92ZShzdHJ1Y3QgdXNiYmFja19pbmZvICp1c2Jp ZiwgdW5zaWduZWQgcG9ydCkKK3sKKyAgICBVU0JQb3J0ICpwOworCisgICAgaWYgKCF1c2JpZi0+ cG9ydHNbcG9ydCAtIDFdLmRldikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcCA9 ICYodXNiaWYtPnBvcnRzW3BvcnQgLSAxXS5wb3J0KTsKKyAgICBzbnByaW50ZihwLT5wYXRoLCBz aXplb2YocC0+cGF0aCksICIlZCIsIDk5KTsKKworICAgIG9iamVjdF91bnBhcmVudChPQkpFQ1Qo dXNiaWYtPnBvcnRzW3BvcnQgLSAxXS5kZXYpKTsKKyAgICB1c2JpZi0+cG9ydHNbcG9ydCAtIDFd LmRldiA9IE5VTEw7CisgICAgdXNiaWYtPnBvcnRzW3BvcnQgLSAxXS5zcGVlZCA9IFVTQklGX1NQ RUVEX05PTkU7CisgICAgdXNiaWYtPnBvcnRzW3BvcnQgLSAxXS5hdHRhY2hlZCA9IGZhbHNlOwor ICAgIHVzYmJhY2tfaG90cGx1Z19lbnEodXNiaWYsIHBvcnQpOworCisgICAgVFJfQlVTKCZ1c2Jp Zi0+eGVuZGV2LCAicG9ydCAlZCByZW1vdmVkXG4iLCBwb3J0KTsKK30KKworc3RhdGljIHZvaWQg dXNiYmFja19wb3J0aWRfYWRkKHN0cnVjdCB1c2JiYWNrX2luZm8gKnVzYmlmLCB1bnNpZ25lZCBw b3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1c2lkKQoreworICAg IHVuc2lnbmVkIHNwZWVkOworICAgIGNoYXIgKnBvcnRuYW1lOworICAgIFVTQlBvcnQgKnA7Cisg ICAgRXJyb3IgKmxvY2FsX2VyciA9IE5VTEw7CisgICAgUURpY3QgKnFkaWN0OworICAgIFFlbXVP cHRzICpvcHRzOworCisgICAgaWYgKHVzYmlmLT5wb3J0c1twb3J0IC0gMV0uZGV2KSB7CisgICAg ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwb3J0bmFtZSA9IHN0cmNocihidXNpZCwgJy0nKTsK KyAgICBpZiAoIXBvcnRuYW1lKSB7CisgICAgICAgIHhlbl9iZV9wcmludGYoJnVzYmlmLT54ZW5k ZXYsIDAsICJkZXZpY2UgJXMgaWxsZWdhbCBzcGVjaWZpY2F0aW9uXG4iLAorICAgICAgICAgICAg ICAgICAgICAgIGJ1c2lkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwb3J0bmFtZSsr OworICAgIHAgPSAmKHVzYmlmLT5wb3J0c1twb3J0IC0gMV0ucG9ydCk7CisgICAgc25wcmludGYo cC0+cGF0aCwgc2l6ZW9mKHAtPnBhdGgpLCAiJXMiLCBwb3J0bmFtZSk7CisKKyAgICBxZGljdCA9 IHFkaWN0X25ldygpOworICAgIHFkaWN0X3B1dChxZGljdCwgImRyaXZlciIsIHFzdHJpbmdfZnJv bV9zdHIoInVzYi1ob3N0IikpOworICAgIHFkaWN0X3B1dChxZGljdCwgImhvc3RidXMiLCBxaW50 X2Zyb21faW50KGF0b2koYnVzaWQpKSk7CisgICAgcWRpY3RfcHV0KHFkaWN0LCAiaG9zdHBvcnQi LCBxc3RyaW5nX2Zyb21fc3RyKHBvcnRuYW1lKSk7CisgICAgb3B0cyA9IHFlbXVfb3B0c19mcm9t X3FkaWN0KHFlbXVfZmluZF9vcHRzKCJkZXZpY2UiKSwgcWRpY3QsICZsb2NhbF9lcnIpOworICAg IGlmIChsb2NhbF9lcnIpIHsKKyAgICAgICAgZ290byBlcnI7CisgICAgfQorICAgIHVzYmlmLT5w b3J0c1twb3J0IC0gMV0uZGV2ID0gVVNCX0RFVklDRShxZGV2X2RldmljZV9hZGQob3B0cywgJmxv Y2FsX2VycikpOworICAgIGlmICghdXNiaWYtPnBvcnRzW3BvcnQgLSAxXS5kZXYpIHsKKyAgICAg ICAgZ290byBlcnI7CisgICAgfQorICAgIFFERUNSRUYocWRpY3QpOworICAgIHNucHJpbnRmKHAt PnBhdGgsIHNpemVvZihwLT5wYXRoKSwgIiVkIiwgcG9ydCk7CisgICAgc3BlZWQgPSB1c2JpZi0+ cG9ydHNbcG9ydCAtIDFdLmRldi0+c3BlZWQ7CisgICAgc3dpdGNoIChzcGVlZCkgeworICAgIGNh c2UgVVNCX1NQRUVEX0xPVzoKKyAgICAgICAgc3BlZWQgPSBVU0JJRl9TUEVFRF9MT1c7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgVVNCX1NQRUVEX0ZVTEw6CisgICAgICAgIHNwZWVkID0gVVNC SUZfU1BFRURfRlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVU0JfU1BFRURfSElHSDoK KyAgICAgICAgc3BlZWQgPSAodXNiaWYtPnVzYl92ZXIgPCBVU0JfVkVSX1VTQjIwKSA/CisgICAg ICAgICAgICAgICAgVVNCSUZfU1BFRURfTk9ORSA6IFVTQklGX1NQRUVEX0hJR0g7CisgICAgICAg IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHNwZWVkID0gVVNCSUZfU1BFRURfTk9ORTsK KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChzcGVlZCA9PSBVU0JJRl9TUEVFRF9OT05F KSB7CisgICAgICAgIHhlbl9iZV9wcmludGYoJnVzYmlmLT54ZW5kZXYsIDAsICJkZXZpY2UgJXMg d3Jvbmcgc3BlZWRcbiIsIGJ1c2lkKTsKKyAgICAgICAgb2JqZWN0X3VucGFyZW50KE9CSkVDVCh1 c2JpZi0+cG9ydHNbcG9ydCAtIDFdLmRldikpOworICAgICAgICB1c2JpZi0+cG9ydHNbcG9ydCAt IDFdLmRldiA9IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdXNiX2RldmljZV9y ZXNldCh1c2JpZi0+cG9ydHNbcG9ydCAtIDFdLmRldik7CisgICAgdXNiaWYtPnBvcnRzW3BvcnQg LSAxXS5zcGVlZCA9IHNwZWVkOworICAgIHVzYmlmLT5wb3J0c1twb3J0IC0gMV0uYXR0YWNoZWQg PSB0cnVlOworICAgIFFUQUlMUV9JTklUKCZ1c2JpZi0+cG9ydHNbcG9ydCAtIDFdLnN1Ym1pdF9x KTsKKyAgICB1c2JiYWNrX2hvdHBsdWdfZW5xKHVzYmlmLCBwb3J0KTsKKworICAgIFRSX0JVUygm dXNiaWYtPnhlbmRldiwgInBvcnQgJWQgYXR0YWNoZWRcbiIsIHBvcnQpOworICAgIHJldHVybjsK KworZXJyOgorICAgIFFERUNSRUYocWRpY3QpOworICAgIHNucHJpbnRmKHAtPnBhdGgsIHNpemVv ZihwLT5wYXRoKSwgIiVkIiwgOTkpOworICAgIHhlbl9iZV9wcmludGYoJnVzYmlmLT54ZW5kZXYs IDAsICJkZXZpY2UgJXMgY291bGQgbm90IGJlIG9wZW5lZFxuIiwgYnVzaWQpOworfQorCitzdGF0 aWMgdm9pZCB1c2JiYWNrX3Byb2Nlc3NfcG9ydChzdHJ1Y3QgdXNiYmFja19pbmZvICp1c2JpZiwg dW5zaWduZWQgcG9ydCkKK3sKKyAgICBjaGFyIG5vZGVbOF07CisgICAgY2hhciAqYnVzaWQ7CisK KyAgICBzbnByaW50Zihub2RlLCBzaXplb2Yobm9kZSksICJwb3J0LyVkIiwgcG9ydCk7CisgICAg YnVzaWQgPSB4ZW5zdG9yZV9yZWFkX2JlX3N0cigmdXNiaWYtPnhlbmRldiwgbm9kZSk7CisgICAg aWYgKGJ1c2lkID09IE5VTEwpIHsKKyAgICAgICAgeGVuX2JlX3ByaW50ZigmdXNiaWYtPnhlbmRl diwgMCwgInhlbnN0b3JlX3JlYWQgJXMgZmFpbGVkXG4iLCBub2RlKTsKKyAgICAgICAgcmV0dXJu OworICAgIH0KKworICAgIC8qIFJlbW92ZSBwb3J0aWQsIGlmIHRoZSBwb3J0IGlzIG5vdCBjb25u ZWN0ZWQuICAqLworICAgIGlmIChzdHJsZW4oYnVzaWQpID09IDApIHsKKyAgICAgICAgdXNiYmFj a19wb3J0aWRfcmVtb3ZlKHVzYmlmLCBwb3J0KTsKKyAgICB9IGVsc2UgeworICAgICAgICB1c2Ji YWNrX3BvcnRpZF9hZGQodXNiaWYsIHBvcnQsIGJ1c2lkKTsKKyAgICB9CisKKyAgICBnX2ZyZWUo YnVzaWQpOworfQorCitzdGF0aWMgdm9pZCB1c2JiYWNrX2Rpc2Nvbm5lY3Qoc3RydWN0IFhlbkRl dmljZSAqeGVuZGV2KQoreworICAgIHN0cnVjdCB1c2JiYWNrX2luZm8gKnVzYmlmOworICAgIHN0 cnVjdCB1c2JiYWNrX3JlcSAqcmVxLCAqdG1wOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAg VFJfQlVTKHhlbmRldiwgInN0YXJ0XG4iKTsKKworICAgIHVzYmlmID0gY29udGFpbmVyX29mKHhl bmRldiwgc3RydWN0IHVzYmJhY2tfaW5mbywgeGVuZGV2KTsKKworICAgIHhlbl9iZV91bmJpbmRf ZXZ0Y2huKHhlbmRldik7CisKKyAgICBpZiAodXNiaWYtPnVyYl9zcmluZykgeworICAgICAgICB4 ZW5nbnR0YWJfdW5tYXAoeGVuZGV2LT5nbnR0YWJkZXYsIHVzYmlmLT51cmJfc3JpbmcsIDEpOwor ICAgICAgICB1c2JpZi0+dXJiX3NyaW5nID0gTlVMTDsKKyAgICB9CisgICAgaWYgKHVzYmlmLT5j b25uX3NyaW5nKSB7CisgICAgICAgIHhlbmdudHRhYl91bm1hcCh4ZW5kZXYtPmdudHRhYmRldiwg dXNiaWYtPmNvbm5fc3JpbmcsIDEpOworICAgICAgICB1c2JpZi0+Y29ubl9zcmluZyA9IE5VTEw7 CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IHVzYmlmLT5udW1fcG9ydHM7IGkrKykgewor ICAgICAgICBpZiAoIXVzYmlmLT5wb3J0c1tpXS5kZXYpIHsKKyAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICB9CisgICAgICAgIFFUQUlMUV9GT1JFQUNIX1NBRkUocmVxLCAmdXNiaWYtPnBv cnRzW2ldLnN1Ym1pdF9xLCBxLCB0bXApIHsKKyAgICAgICAgICAgIHVzYmJhY2tfY2FuY2VsX3Jl cShyZXEpOworICAgICAgICB9CisgICAgfQorCisgICAgVFJfQlVTKHhlbmRldiwgImZpbmlzaGVk XG4iKTsKK30KKworc3RhdGljIGludCB1c2JiYWNrX2Nvbm5lY3Qoc3RydWN0IFhlbkRldmljZSAq eGVuZGV2KQoreworICAgIHN0cnVjdCB1c2JiYWNrX2luZm8gKnVzYmlmOworICAgIHN0cnVjdCB1 c2JpZl91cmJfc3JpbmcgKnVyYl9zcmluZzsKKyAgICBzdHJ1Y3QgdXNiaWZfY29ubl9zcmluZyAq Y29ubl9zcmluZzsKKyAgICBpbnQgdXJiX3JpbmdfcmVmOworICAgIGludCBjb25uX3JpbmdfcmVm OworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgVFJfQlVTKHhlbmRldiwgInN0YXJ0XG4iKTsK KworICAgIHVzYmlmID0gY29udGFpbmVyX29mKHhlbmRldiwgc3RydWN0IHVzYmJhY2tfaW5mbywg eGVuZGV2KTsKKworICAgIGlmICh4ZW5zdG9yZV9yZWFkX2ZlX2ludCh4ZW5kZXYsICJ1cmItcmlu Zy1yZWYiLCAmdXJiX3JpbmdfcmVmKSkgeworICAgICAgICB4ZW5fYmVfcHJpbnRmKHhlbmRldiwg MCwgImVycm9yIHJlYWRpbmcgdXJiLXJpbmctcmVmXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKyAgICBpZiAoeGVuc3RvcmVfcmVhZF9mZV9pbnQoeGVuZGV2LCAiY29ubi1yaW5nLXJl ZiIsICZjb25uX3JpbmdfcmVmKSkgeworICAgICAgICB4ZW5fYmVfcHJpbnRmKHhlbmRldiwgMCwg ImVycm9yIHJlYWRpbmcgY29ubi1yaW5nLXJlZlxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAg ICB9CisgICAgaWYgKHhlbnN0b3JlX3JlYWRfZmVfaW50KHhlbmRldiwgImV2ZW50LWNoYW5uZWwi LCAmeGVuZGV2LT5yZW1vdGVfcG9ydCkpIHsKKyAgICAgICAgeGVuX2JlX3ByaW50Zih4ZW5kZXYs IDAsICJlcnJvciByZWFkaW5nIGV2ZW50LWNoYW5uZWxcbiIpOworICAgICAgICByZXR1cm4gLTE7 CisgICAgfQorCisgICAgdXNiaWYtPnVyYl9zcmluZyA9IHhlbmdudHRhYl9tYXBfZ3JhbnRfcmVm KHhlbmRldi0+Z250dGFiZGV2LCB4ZW5kZXYtPmRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdXJiX3JpbmdfcmVmLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKyAg ICB1c2JpZi0+Y29ubl9zcmluZyA9IHhlbmdudHRhYl9tYXBfZ3JhbnRfcmVmKHhlbmRldi0+Z250 dGFiZGV2LCB4ZW5kZXYtPmRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbm5fcmluZ19yZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKyAgICBpZiAoIXVz YmlmLT51cmJfc3JpbmcgfHwgIXVzYmlmLT5jb25uX3NyaW5nKSB7CisgICAgICAgIHhlbl9iZV9w cmludGYoeGVuZGV2LCAwLCAiZXJyb3IgbWFwcGluZyByaW5nc1xuIik7CisgICAgICAgIHVzYmJh Y2tfZGlzY29ubmVjdCh4ZW5kZXYpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAg dXJiX3NyaW5nID0gdXNiaWYtPnVyYl9zcmluZzsKKyAgICBjb25uX3NyaW5nID0gdXNiaWYtPmNv bm5fc3Jpbmc7CisgICAgQkFDS19SSU5HX0lOSVQoJnVzYmlmLT51cmJfcmluZywgdXJiX3NyaW5n LCBYQ19QQUdFX1NJWkUpOworICAgIEJBQ0tfUklOR19JTklUKCZ1c2JpZi0+Y29ubl9yaW5nLCBj b25uX3NyaW5nLCBYQ19QQUdFX1NJWkUpOworCisgICAgeGVuX2JlX2JpbmRfZXZ0Y2huKHhlbmRl dik7CisKKyAgICB4ZW5fYmVfcHJpbnRmKHhlbmRldiwgMSwgInVyYi1yaW5nLXJlZiAlZCwgY29u bi1yaW5nLXJlZiAlZCwgIgorICAgICAgICAgICAgICAgICAgInJlbW90ZSBwb3J0ICVkLCBsb2Nh bCBwb3J0ICVkXG4iLCB1cmJfcmluZ19yZWYsCisgICAgICAgICAgICAgICAgICBjb25uX3Jpbmdf cmVmLCB4ZW5kZXYtPnJlbW90ZV9wb3J0LCB4ZW5kZXYtPmxvY2FsX3BvcnQpOworCisgICAgZm9y IChpID0gMTsgaSA8PSB1c2JpZi0+bnVtX3BvcnRzOyBpKyspIHsKKyAgICAgICAgaWYgKHVzYmlm LT5wb3J0c1tpIC0gMV0uZGV2KSB7CisgICAgICAgICAgICB1c2JiYWNrX2hvdHBsdWdfZW5xKHVz YmlmLCBpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCB1c2JiYWNrX2JhY2tlbmRfY2hhbmdlZChzdHJ1Y3QgWGVuRGV2aWNlICp4ZW5kZXYsIGNv bnN0IGNoYXIgKm5vZGUpCit7CisgICAgc3RydWN0IHVzYmJhY2tfaW5mbyAqdXNiaWY7CisgICAg dW5zaWduZWQgaW50IGk7CisKKyAgICBUUl9CVVMoeGVuZGV2LCAicGF0aCAlc1xuIiwgbm9kZSk7 CisKKyAgICB1c2JpZiA9IGNvbnRhaW5lcl9vZih4ZW5kZXYsIHN0cnVjdCB1c2JiYWNrX2luZm8s IHhlbmRldik7CisgICAgZm9yIChpID0gMTsgaSA8PSB1c2JpZi0+bnVtX3BvcnRzOyBpKyspIHsK KyAgICAgICAgdXNiYmFja19wcm9jZXNzX3BvcnQodXNiaWYsIGkpOworICAgIH0KK30KKworc3Rh dGljIGludCB1c2JiYWNrX2luaXQoc3RydWN0IFhlbkRldmljZSAqeGVuZGV2KQoreworICAgIHN0 cnVjdCB1c2JiYWNrX2luZm8gKnVzYmlmOworCisgICAgVFJfQlVTKHhlbmRldiwgInN0YXJ0XG4i KTsKKworICAgIHVzYmlmID0gY29udGFpbmVyX29mKHhlbmRldiwgc3RydWN0IHVzYmJhY2tfaW5m bywgeGVuZGV2KTsKKworICAgIGlmICh4ZW5zdG9yZV9yZWFkX2JlX2ludCh4ZW5kZXYsICJudW0t cG9ydHMiLCAmdXNiaWYtPm51bV9wb3J0cykgfHwKKyAgICAgICAgdXNiaWYtPm51bV9wb3J0cyA8 IDEgfHwgdXNiaWYtPm51bV9wb3J0cyA+IFVTQkJBQ0tfTUFYUE9SVFMpIHsKKyAgICAgICAgeGVu X2JlX3ByaW50Zih4ZW5kZXYsIDAsICJudW0tcG9ydHMgbm90IHJlYWRhYmxlIG9yIG91dCBvZiBi b3VuZHNcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICh4ZW5zdG9yZV9y ZWFkX2JlX2ludCh4ZW5kZXYsICJ1c2ItdmVyIiwgJnVzYmlmLT51c2JfdmVyKSB8fAorICAgICAg ICAodXNiaWYtPnVzYl92ZXIgIT0gVVNCX1ZFUl9VU0IxMSAmJiB1c2JpZi0+dXNiX3ZlciAhPSBV U0JfVkVSX1VTQjIwKSkgeworICAgICAgICB4ZW5fYmVfcHJpbnRmKHhlbmRldiwgMCwgInVzYi12 ZXIgbm90IHJlYWRhYmxlIG9yIG91dCBvZiBib3VuZHNcbiIpOworICAgICAgICByZXR1cm4gLTE7 CisgICAgfQorCisgICAgdXNiYmFja19iYWNrZW5kX2NoYW5nZWQoeGVuZGV2LCAicG9ydCIpOwor CisgICAgVFJfQlVTKHhlbmRldiwgImZpbmlzaGVkXG4iKTsKKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCB4ZW5fYnVzX2F0dGFjaChVU0JQb3J0ICpwb3J0KQoreworICAgIHN0cnVj dCB1c2JiYWNrX2luZm8gKnVzYmlmOworCisgICAgdXNiaWYgPSBwb3J0LT5vcGFxdWU7CisgICAg VFJfQlVTKCZ1c2JpZi0+eGVuZGV2LCAiXG4iKTsKKyAgICB1c2JpZi0+cG9ydHNbcG9ydC0+aW5k ZXhdLmF0dGFjaGVkID0gdHJ1ZTsKKyAgICB1c2JiYWNrX2hvdHBsdWdfZW5xKHVzYmlmLCBwb3J0 LT5pbmRleCArIDEpOworfQorCitzdGF0aWMgdm9pZCB4ZW5fYnVzX2RldGFjaChVU0JQb3J0ICpw b3J0KQoreworICAgIHN0cnVjdCB1c2JiYWNrX2luZm8gKnVzYmlmOworCisgICAgdXNiaWYgPSBw b3J0LT5vcGFxdWU7CisgICAgVFJfQlVTKCZ1c2JpZi0+eGVuZGV2LCAiXG4iKTsKKyAgICB1c2Jp Zi0+cG9ydHNbcG9ydC0+aW5kZXhdLmF0dGFjaGVkID0gZmFsc2U7CisgICAgdXNiYmFja19ob3Rw bHVnX2VucSh1c2JpZiwgcG9ydC0+aW5kZXggKyAxKTsKK30KKworc3RhdGljIHZvaWQgeGVuX2J1 c19jaGlsZF9kZXRhY2goVVNCUG9ydCAqcG9ydCwgVVNCRGV2aWNlICpjaGlsZCkKK3sKKyAgICBz dHJ1Y3QgdXNiYmFja19pbmZvICp1c2JpZjsKKworICAgIHVzYmlmID0gcG9ydC0+b3BhcXVlOwor ICAgIFRSX0JVUygmdXNiaWYtPnhlbmRldiwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9i dXNfY29tcGxldGUoVVNCUG9ydCAqcG9ydCwgVVNCUGFja2V0ICpwYWNrZXQpCit7CisgICAgc3Ry dWN0IHVzYmJhY2tfaW5mbyAqdXNiaWY7CisKKyAgICB1c2JpZiA9IHBvcnQtPm9wYXF1ZTsKKyAg ICBUUl9SRVEoJnVzYmlmLT54ZW5kZXYsICJcbiIpOworICAgIHVzYmJhY2tfcGFja2V0X2NvbXBs ZXRlKHBhY2tldCk7Cit9CisKK3N0YXRpYyBVU0JQb3J0T3BzIHhlbl91c2JfcG9ydF9vcHMgPSB7 CisgICAgLmF0dGFjaCA9IHhlbl9idXNfYXR0YWNoLAorICAgIC5kZXRhY2ggPSB4ZW5fYnVzX2Rl dGFjaCwKKyAgICAuY2hpbGRfZGV0YWNoID0geGVuX2J1c19jaGlsZF9kZXRhY2gsCisgICAgLmNv bXBsZXRlID0geGVuX2J1c19jb21wbGV0ZSwKK307CisKK3N0YXRpYyBVU0JCdXNPcHMgeGVuX3Vz Yl9idXNfb3BzID0geworfTsKKworc3RhdGljIHZvaWQgdXNiYmFja19hbGxvYyhzdHJ1Y3QgWGVu RGV2aWNlICp4ZW5kZXYpCit7CisgICAgc3RydWN0IHVzYmJhY2tfaW5mbyAqdXNiaWY7CisgICAg VVNCUG9ydCAqcDsKKyAgICB1bnNpZ25lZCBpbnQgaSwgbWF4X2dyYW50czsKKworICAgIHVzYmlm ID0gY29udGFpbmVyX29mKHhlbmRldiwgc3RydWN0IHVzYmJhY2tfaW5mbywgeGVuZGV2KTsKKwor ICAgIHVzYl9idXNfbmV3KCZ1c2JpZi0+YnVzLCBzaXplb2YodXNiaWYtPmJ1cyksICZ4ZW5fdXNi X2J1c19vcHMsIHhlbl9zeXNkZXYpOworICAgIGZvciAoaSA9IDA7IGkgPCBVU0JCQUNLX01BWFBP UlRTOyBpKyspIHsKKyAgICAgICAgcCA9ICYodXNiaWYtPnBvcnRzW2ldLnBvcnQpOworICAgICAg ICB1c2JfcmVnaXN0ZXJfcG9ydCgmdXNiaWYtPmJ1cywgcCwgdXNiaWYsIGksICZ4ZW5fdXNiX3Bv cnRfb3BzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfU1BFRURfTUFTS19MT1cgfCBV U0JfU1BFRURfTUFTS19GVUxMIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1NQRUVE X01BU0tfSElHSCk7CisgICAgICAgIHNucHJpbnRmKHAtPnBhdGgsIHNpemVvZihwLT5wYXRoKSwg IiVkIiwgOTkpOworICAgIH0KKworICAgIFFUQUlMUV9JTklUKCZ1c2JpZi0+cmVxX2ZyZWVfcSk7 CisgICAgUVNJTVBMRVFfSU5JVCgmdXNiaWYtPmhvdHBsdWdfcSk7CisgICAgdXNiaWYtPmJoID0g cWVtdV9iaF9uZXcodXNiYmFja19iaCwgdXNiaWYpOworCisgICAgLyogbWF4X2dyYW50czogZm9y IGVhY2ggcmVxdWVzdCBhbmQgZm9yIHRoZSByaW5ncyAocmVxdWVzdCBhbmQgY29ubmVjdCkuICov CisgICAgbWF4X2dyYW50cyA9IFVTQklGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCAqIFVTQl9V UkJfUklOR19TSVpFICsgMjsKKyAgICBpZiAoeGVuZ250dGFiX3NldF9tYXhfZ3JhbnRzKHhlbmRl di0+Z250dGFiZGV2LCBtYXhfZ3JhbnRzKSA8IDApIHsKKyAgICAgICAgeGVuX2JlX3ByaW50Zih4 ZW5kZXYsIDAsICJ4ZW5nbnR0YWJfc2V0X21heF9ncmFudHMgZmFpbGVkOiAlc1xuIiwKKyAgICAg ICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgIH0KK30KKworc3RhdGljIGlu dCB1c2JiYWNrX2ZyZWUoc3RydWN0IFhlbkRldmljZSAqeGVuZGV2KQoreworICAgIHN0cnVjdCB1 c2JiYWNrX2luZm8gKnVzYmlmOworICAgIHN0cnVjdCB1c2JiYWNrX3JlcSAqdXNiYmFja19yZXE7 CisgICAgc3RydWN0IHVzYmJhY2tfaG90cGx1ZyAqdXNiX2hwOworICAgIHVuc2lnbmVkIGludCBp OworCisgICAgVFJfQlVTKHhlbmRldiwgInN0YXJ0XG4iKTsKKworICAgIHVzYmJhY2tfZGlzY29u bmVjdCh4ZW5kZXYpOworICAgIHVzYmlmID0gY29udGFpbmVyX29mKHhlbmRldiwgc3RydWN0IHVz YmJhY2tfaW5mbywgeGVuZGV2KTsKKyAgICBmb3IgKGkgPSAxOyBpIDw9IHVzYmlmLT5udW1fcG9y dHM7IGkrKykgeworICAgICAgICB1c2JiYWNrX3BvcnRpZF9yZW1vdmUodXNiaWYsIGkpOworICAg IH0KKworICAgIHdoaWxlICghUVRBSUxRX0VNUFRZKCZ1c2JpZi0+cmVxX2ZyZWVfcSkpIHsKKyAg ICAgICAgdXNiYmFja19yZXEgPSBRVEFJTFFfRklSU1QoJnVzYmlmLT5yZXFfZnJlZV9xKTsKKyAg ICAgICAgUVRBSUxRX1JFTU9WRSgmdXNiaWYtPnJlcV9mcmVlX3EsIHVzYmJhY2tfcmVxLCBxKTsK KyAgICAgICAgZ19mcmVlKHVzYmJhY2tfcmVxKTsKKyAgICB9CisgICAgd2hpbGUgKCFRU0lNUExF UV9FTVBUWSgmdXNiaWYtPmhvdHBsdWdfcSkpIHsKKyAgICAgICAgdXNiX2hwID0gUVNJTVBMRVFf RklSU1QoJnVzYmlmLT5ob3RwbHVnX3EpOworICAgICAgICBRU0lNUExFUV9SRU1PVkVfSEVBRCgm dXNiaWYtPmhvdHBsdWdfcSwgcSk7CisgICAgICAgIGdfZnJlZSh1c2JfaHApOworICAgIH0KKwor ICAgIHFlbXVfYmhfZGVsZXRlKHVzYmlmLT5iaCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgVVNC QkFDS19NQVhQT1JUUzsgaSsrKSB7CisgICAgICAgIHVzYl91bnJlZ2lzdGVyX3BvcnQoJnVzYmlm LT5idXMsICYodXNiaWYtPnBvcnRzW2ldLnBvcnQpKTsKKyAgICB9CisKKyAgICB1c2JfYnVzX3Jl bGVhc2UoJnVzYmlmLT5idXMpOworCisgICAgVFJfQlVTKHhlbmRldiwgImZpbmlzaGVkXG4iKTsK KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2JiYWNrX2V2ZW50KHN0cnVjdCBY ZW5EZXZpY2UgKnhlbmRldikKK3sKKyAgICBzdHJ1Y3QgdXNiYmFja19pbmZvICp1c2JpZjsKKwor ICAgIHVzYmlmID0gY29udGFpbmVyX29mKHhlbmRldiwgc3RydWN0IHVzYmJhY2tfaW5mbywgeGVu ZGV2KTsKKyAgICBxZW11X2JoX3NjaGVkdWxlKHVzYmlmLT5iaCk7Cit9CisKK3N0cnVjdCBYZW5E ZXZPcHMgeGVuX3VzYl9vcHMgPSB7CisgICAgLnNpemUgICAgICAgICAgICA9IHNpemVvZihzdHJ1 Y3QgdXNiYmFja19pbmZvKSwKKyAgICAuZmxhZ3MgICAgICAgICAgID0gREVWT1BTX0ZMQUdfTkVF RF9HTlRERVYsCisgICAgLmluaXQgICAgICAgICAgICA9IHVzYmJhY2tfaW5pdCwKKyAgICAuYWxs b2MgICAgICAgICAgID0gdXNiYmFja19hbGxvYywKKyAgICAuZnJlZSAgICAgICAgICAgID0gdXNi YmFja19mcmVlLAorICAgIC5iYWNrZW5kX2NoYW5nZWQgPSB1c2JiYWNrX2JhY2tlbmRfY2hhbmdl ZCwKKyAgICAuaW5pdGlhbGlzZSAgICAgID0gdXNiYmFja19jb25uZWN0LAorICAgIC5kaXNjb25u ZWN0ICAgICAgPSB1c2JiYWNrX2Rpc2Nvbm5lY3QsCisgICAgLmV2ZW50ICAgICAgICAgICA9IHVz YmJhY2tfZXZlbnQsCit9OworCisjZWxzZSAvKiBVU0JJRl9TSE9SVF9OT1RfT0sgKi8KKworc3Rh dGljIGludCB1c2JiYWNrX25vdF9zdXBwb3J0ZWQodm9pZCkKK3sKKyAgICByZXR1cm4gLUVJTlZB TDsKK30KKworc3RydWN0IFhlbkRldk9wcyB4ZW5fdXNiX29wcyA9IHsKKyAgICAuYmFja2VuZF9y ZWdpc3RlciA9IHVzYmJhY2tfbm90X3N1cHBvcnRlZCwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0 IGEvaHcveGVucHYveGVuX21hY2hpbmVfcHYuYyBiL2h3L3hlbnB2L3hlbl9tYWNoaW5lX3B2LmMK aW5kZXggNDhkNWJjNi4uZjY4Y2Y0OCAxMDA2NDQKLS0tIGEvaHcveGVucHYveGVuX21hY2hpbmVf cHYuYworKysgYi9ody94ZW5wdi94ZW5fbWFjaGluZV9wdi5jCkBAIC04MCw2ICs4MCw5IEBAIHN0 YXRpYyB2b2lkIHhlbl9pbml0X3B2KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSkKICAgICB4ZW5fYmVf cmVnaXN0ZXIoInZmYiIsICZ4ZW5fZnJhbWVidWZmZXJfb3BzKTsKICAgICB4ZW5fYmVfcmVnaXN0 ZXIoInFkaXNrIiwgJnhlbl9ibGtkZXZfb3BzKTsKICAgICB4ZW5fYmVfcmVnaXN0ZXIoInFuaWMi LCAmeGVuX25ldGRldl9vcHMpOworI2lmZGVmIENPTkZJR19VU0JfTElCVVNCCisgICAgeGVuX2Jl X3JlZ2lzdGVyKCJxdXNiIiwgJnhlbl91c2Jfb3BzKTsKKyNlbmRpZgogCiAgICAgLyogY29uZmln dXJlIGZyYW1lYnVmZmVyICovCiAgICAgaWYgKHhlbmZiX2VuYWJsZWQpIHsKZGlmZiAtLWdpdCBh L2luY2x1ZGUvaHcveGVuL3hlbl9iYWNrZW5kLmggYi9pbmNsdWRlL2h3L3hlbi94ZW5fYmFja2Vu ZC5oCmluZGV4IDYzMzY0ZjcuLjZlMThhNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaHcveGVuL3hl bl9iYWNrZW5kLmgKKysrIGIvaW5jbHVkZS9ody94ZW4veGVuX2JhY2tlbmQuaApAQCAtMTAxLDYg KzEwMSw5IEBAIGV4dGVybiBzdHJ1Y3QgWGVuRGV2T3BzIHhlbl9rYmRtb3VzZV9vcHM7ICAgICAv KiB4ZW5fZnJhbWVidWZmZXIuYyAqLwogZXh0ZXJuIHN0cnVjdCBYZW5EZXZPcHMgeGVuX2ZyYW1l YnVmZmVyX29wczsgIC8qIHhlbl9mcmFtZWJ1ZmZlci5jICovCiBleHRlcm4gc3RydWN0IFhlbkRl dk9wcyB4ZW5fYmxrZGV2X29wczsgICAgICAgLyogeGVuX2Rpc2suYyAgICAgICAgKi8KIGV4dGVy biBzdHJ1Y3QgWGVuRGV2T3BzIHhlbl9uZXRkZXZfb3BzOyAgICAgICAvKiB4ZW5fbmljLmMgICAg ICAgICAqLworI2lmZGVmIENPTkZJR19VU0JfTElCVVNCCitleHRlcm4gc3RydWN0IFhlbkRldk9w cyB4ZW5fdXNiX29wczsgICAgICAgICAgLyogeGVuLXVzYi5jICAgICAgICAgKi8KKyNlbmRpZgog CiB2b2lkIHhlbl9pbml0X2Rpc3BsYXkoaW50IGRvbWlkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9ody94ZW4veGVuX2NvbW1vbi5oIGIvaW5jbHVkZS9ody94ZW4veGVuX2NvbW1vbi5oCmluZGV4 IGJkNjVlNjcuLmQwMTBjZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaHcveGVuL3hlbl9jb21tb24u aAorKysgYi9pbmNsdWRlL2h3L3hlbi94ZW5fY29tbW9uLmgKQEAgLTQ5LDYgKzQ5LDggQEAgdHlw ZWRlZiB4Y19nbnR0YWIgeGVuZ250dGFiX2hhbmRsZTsKICNkZWZpbmUgeGVuZ250dGFiX3VubWFw KGgsIGEsIG4pIHhjX2dudHRhYl9tdW5tYXAoaCwgYSwgbikKICNkZWZpbmUgeGVuZ250dGFiX21h cF9ncmFudF9yZWZzKGgsIGMsIGQsIHIsIHApIFwKICAgICB4Y19nbnR0YWJfbWFwX2dyYW50X3Jl ZnMoaCwgYywgZCwgciwgcCkKKyNkZWZpbmUgeGVuZ250dGFiX21hcF9kb21haW5fZ3JhbnRfcmVm cyhoLCBjLCBkLCByLCBwKSBcCisgICAgeGNfZ250dGFiX21hcF9kb21haW5fZ3JhbnRfcmVmcyho LCBjLCBkLCByLCBwKQogCiAjZGVmaW5lIHhlbmZvcmVpZ25tZW1vcnlfb3BlbihsLCBmKSB4ZW5f eGMKIAotLSAKMi42LjYKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0 dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=