From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: =?utf-8?q?=5BPATCH_02/15=5D_drm/i915=3A_Embedded_micr?= =?utf-8?q?ocontroller_=28uC=29_firmware_loading_support?= Date: Mon, 15 Jun 2015 19:36:20 +0100 Message-ID: <1434393394-21002-3-git-send-email-david.s.gordon@intel.com> References: <1434393394-21002-1-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 1B69F6E890 for ; Mon, 15 Jun 2015 11:37:23 -0700 (PDT) In-Reply-To: <1434393394-21002-1-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q3VycmVudCBkZXZpY2VzIG1heSBjb250YWluIG9uZSBvciBtb3JlIHByb2dyYW1tYWJsZSBtaWNy b2NvbnRyb2xsZXJzCnRoYXQgbmVlZCB0byBoYXZlIGEgZmlybXdhcmUgaW1hZ2UgKGFrYSAiYmlu YXJ5IGJsb2IiKSBsb2FkZWQgZnJvbSBhbgpleHRlcm5hbCBtZWRpdW0gYW5kIHRyYW5zZmVycmVk IHRvIHRoZSBkZXZpY2UncyBtZW1vcnkuCgpUaGlzIGZpbGUgcHJvdmlkZXMgZ2VuZXJpYyBzdXBw b3J0IGZ1bmN0aW9ucyBmb3IgZG9pbmcgdGhpczsgdGhleSBjYW4KdGhlbiBiZSB1c2VkIGJ5IGVh Y2ggdUMtc3BlY2lmaWMgbG9hZGVyLCB0aHVzIHJlZHVjaW5nIGNvZGUgZHVwbGljYXRpb24KYW5k IHRlc3RpbmcgZWZmb3J0LgoKU2lnbmVkLW9mZi1ieTogRGF2ZSBHb3Jkb24gPGRhdmlkLnMuZ29y ZG9uQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+ Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgfCAgICAzICsKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5jIHwgIDMxMiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfbG9hZGVy LmggfCAgIDgyICsrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAzOTcgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfbG9hZGVy LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGI3ZGRmNDguLjYwN2ZhMmEgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCkBAIC0zOCw2ICszOCw5IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBc CiAJICBpbnRlbF9yaW5nYnVmZmVyLm8gXAogCSAgaW50ZWxfdW5jb3JlLm8KIAorIyBnZW5lcmlj IGFuY2lsbGlhcnkgbWljcm9jb250cm9sbGVyIHN1cHBvcnQKK2k5MTUteSArPSBpbnRlbF91Y19s b2FkZXIubworCiAjIGF1dG9nZW5lcmF0ZWQgbnVsbCByZW5kZXIgc3RhdGUKIGk5MTUteSArPSBp bnRlbF9yZW5kZXJzdGF0ZV9nZW42Lm8gXAogCSAgaW50ZWxfcmVuZGVyc3RhdGVfZ2VuNy5vIFwK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfbG9hZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMjZmMGZiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3VjX2xvYWRlci5jCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogQ29weXJp Z2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisg KiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yOgorICoJRGF2ZSBHb3Jkb24gPGRhdmlk LnMuZ29yZG9uQGludGVsLmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Cisj aW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF91Y19sb2FkZXIuaCIKKworLyoq CisgKiBET0M6IEdlbmVyaWMgZW1iZWRkZWQgbWljcm9jb250cm9sbGVyICh1QykgZmlybXdhcmUg bG9hZGluZyBzdXBwb3J0CisgKgorICogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgcHJvdmlk ZSBhIGdlbmVyaWMgd2F5IHRvIGxvYWQgdGhlIGZpcm13YXJlIHRoYXQKKyAqIG1heSBiZSByZXF1 aXJlZCBieSBhbiBlbWJlZGRlZCBtaWNyb2NvbnRyb2xsZXIgKHVDKS4KKyAqCisgKiBUaGUgZnVu Y3Rpb24gaW50ZWxfdWNfZndfaW5pdCgpIHNob3VsZCBiZSBjYWxsZWQgZWFybHksIGFuZCB3aWxs IGluaXRpYXRlCisgKiBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCB0byBmZXRjaCB0aGUgZmlybXdh cmUgaW1hZ2UgKGFrYSAiYmluYXJ5IGJsb2IiKS4KKyAqIFdoZW4gdGhlIGltYWdlIGhhcyBiZWVu IGZldGNoZWQgaW50byBtZW1vcnksIHRoZSBrZXJuZWwgd2lsbCBjYWxsIGJhY2sgdG8KKyAqIHVj X2Z3X2ZldGNoX2NhbGxiYWNrKCkgd2hvc2UgZnVuY3Rpb24gaXMgc2ltcGx5IHRvIHJlY29yZCB0 aGUgY29tcGxldGlvbgorICogc3RhdHVzLCBhbmQgc3Rhc2ggdGhlIGZpcm13YXJlIGJsb2IgZm9y IGxhdGVyLgorICoKKyAqIEF0IHNvbWUgY29udmVuaWVudCBwb2ludCBhZnRlciBHRU0gaW5pdGlh bGlzYXRpb24sIHRoZSBkcml2ZXIgc2hvdWxkIGNhbGwKKyAqIGludGVsX3VjX2Z3X2NoZWNrKCk7 IHRoaXMgd2lsbCBjaGVjayB3aGV0aGVyIHRoZSBhc3luY2hyb25vdXMgdGhyZWFkIGhhcworICog Y29tcGxldGVkIGFuZCB3YWl0IGZvciBpdCBpZiBub3QsIGNoZWNrIHdoZXRoZXIgdGhlIGltYWdl IHdhcyBzdWNjZXNzZnVsbHkKKyAqIGZldGNoZWQ7IGFuZCB0aGVuIGFsbG93IHRoZSBjYWxsYmFj aygpIGZ1bmN0aW9uIChpZiBwcm92aWRlZCkgdG8gdmFsaWRhdGUKKyAqIHRoZSBpbWFnZSBhbmQv b3Igc2F2ZSB0aGUgZGF0YSBpbiBhIEdFTSBvYmplY3QuCisgKgorICogVGhlcmVhZnRlciB0aGUg dUMtc3BlY2lmaWMgY29kZSBjYW4gdHJhbnNmZXIgdGhlIGRhdGEgaW4gdGhlIEdFTSBvYmplY3QK KyAqIHRvIHRoZSB1QydzIG1lbW9yeSAoaW4gc29tZSB1Qy1zcGVjaWZpYyB3YXksIG5vdCBoYW5k bGVkIGhlcmUpLgorICoKKyAqIER1cmluZyBkcml2ZXIgc2h1dGRvd24sIG9yIGlmIGRyaXZlciBs b2FkIGlzIGFib3J0ZWQsIGludGVsX3VjX2Z3X2ZpbmkoKQorICogc2hvdWxkIGJlIGNhbGxlZCB0 byByZWxlYXNlIGFueSByZW1haW5pbmcgcmVzb3VyY2VzLgorICovCisKKworLyoKKyAqIENhbGxl ZCBvbmNlIHBlciB1QywgbGF0ZSBpbiBkcml2ZXIgaW5pdGlhbGlzYXRpb24uIEdFTSBpcyBub3cg cmVhZHksIGFuZCBzbworICogd2UgY2FuIG5vdyBjcmVhdGUgYSBHRU0gb2JqZWN0IHRvIGhvbGQg dGhlIHVDIGZpcm13YXJlLiBCdXQgZmlyc3QsIHdlIG11c3QKKyAqIHN5bmNocm9uaXNlIHdpdGgg dGhlIGZpcm13YXJlLWZldGNoaW5nIHRocmVhZCB0aGF0IHdhcyBpbml0aWF0ZWQgZHVyaW5nCisg KiBlYXJseSBkcml2ZXIgbG9hZCwgaW4gaW50ZWxfdWNfZndfaW5pdCgpLCBhbmQgc2VlIHdoZXRo ZXIgaXQgc3VjY2Vzc2Z1bGx5CisgKiBmZXRjaGVkIHRoZSBmaXJtd2FyZSBibG9iLgorICovCitz dGF0aWMgdm9pZAordWNfZndfZmV0Y2hfd2FpdChzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3LAor CQkgYm9vbCBjYWxsYmFjayhzdHJ1Y3QgaW50ZWxfdWNfZncgKikpCit7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IHVjX2Z3LT51Y19kZXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCisJRFJNX0RFQlVHX0RSSVZFUigi YmVmb3JlIHdhaXRpbmc6ICVzIGZ3IGZldGNoIHN0YXR1cyAlZCwgZncgJXBcbiIsCisJCXVjX2Z3 LT51Y19uYW1lLCB1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzLCB1Y19mdy0+dWNfZndfYmxvYik7 CisKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4KSk7CisJV0FS Tl9PTih1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzICE9IElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJ TkcpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmdWNfZnctPnVjX2Z3X2ZldGNoZWQpOworCisJ RFJNX0RFQlVHX0RSSVZFUigiYWZ0ZXIgd2FpdGluZzogJXMgZncgZmV0Y2ggc3RhdHVzICVkLCBm dyAlcFxuIiwKKwkJdWNfZnctPnVjX25hbWUsIHVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMsIHVj X2Z3LT51Y19md19ibG9iKTsKKworCWZ3ID0gdWNfZnctPnVjX2Z3X2Jsb2I7CisJaWYgKCFmdykg eworCQkvKiBubyBmaXJtd2FyZSBmb3VuZDsgdHJ5IGFnYWluIGluIGNhc2UgRlMgd2FzIG5vdCBt b3VudGVkICovCisJCURSTV9ERUJVR19EUklWRVIoInJldHJ5IGZldGNoaW5nICVzIGZ3IGZyb20g PCVzPlxuIiwKKwkJCXVjX2Z3LT51Y19uYW1lLCB1Y19mdy0+dWNfZndfcGF0aCk7CisJCWlmIChy ZXF1ZXN0X2Zpcm13YXJlKCZmdywgdWNfZnctPnVjX2Z3X3BhdGgsICZkZXYtPnBkZXYtPmRldikp CisJCQlnb3RvIGZhaWw7CisJCWlmICghZncpCisJCQlnb3RvIGZhaWw7CisJCURSTV9ERUJVR19E UklWRVIoImZldGNoICVzIGZ3IGZyb20gPCVzPiBzdWNjZWVkZWQsIGZ3ICVwXG4iLAorCQkJdWNf ZnctPnVjX25hbWUsIHVjX2Z3LT51Y19md19wYXRoLCBmdyk7CisJCXVjX2Z3LT51Y19md19ibG9i ID0gZnc7CisJfQorCisJLyogQ2FsbGJhY2sgdG8gdGhlIG9wdGlvbmFsIHVDLXNwZWNpZmljIGZ1 bmN0aW9uLCBpZiBzdXBwbGllZCAqLworCWlmIChjYWxsYmFjayAmJiAhY2FsbGJhY2sodWNfZncp KQorCQlnb3RvIGZhaWw7CisKKwkvKiBDYWxsYmFjayBtYXkgaGF2ZSBkb25lIHRoZSBvYmplY3Qg YWxsb2NhdGlvbiAmIHdyaXRlIGl0c2VsZiAqLworCW9iaiA9IHVjX2Z3LT51Y19md19vYmo7CisJ aWYgKCFvYmopIHsKKwkJc2l6ZV90IHBhZ2VzID0gcm91bmRfdXAoZnctPnNpemUsIFBBR0VfU0la RSk7CisJCW9iaiA9IGk5MTVfZ2VtX2FsbG9jX29iamVjdChkZXYsIHBhZ2VzKTsKKwkJaWYgKCFv YmopCisJCQlnb3RvIGZhaWw7CisKKwkJdWNfZnctPnVjX2Z3X29iaiA9IG9iajsKKwkJdWNfZnct PnVjX2Z3X3NpemUgPSBmdy0+c2l6ZTsKKwkJaWYgKGk5MTVfZ2VtX29iamVjdF93cml0ZShvYmos IGZ3LT5kYXRhLCBmdy0+c2l6ZSkpCisJCQlnb3RvIGZhaWw7CisJfQorCisJRFJNX0RFQlVHX0RS SVZFUigiJXMgZncgZmV0Y2ggc3RhdHVzIFNVQ0NFU1NcbiIsIHVjX2Z3LT51Y19uYW1lKTsKKwly ZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwl1Y19mdy0+dWNfZndfYmxvYiA9IE5VTEw7CisJdWNfZnct PnVjX2Z3X2ZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX1NVQ0NFU1M7CisJcmV0dXJu OworCitmYWlsOgorCURSTV9ERUJVR19EUklWRVIoIiVzIGZ3IGZldGNoIHN0YXR1cyBGQUlMOyBm dyAlcCwgb2JqICVwXG4iLAorCQl1Y19mdy0+dWNfbmFtZSwgZncsIHVjX2Z3LT51Y19md19vYmop OworCURSTV9FUlJPUigiRmFpbGVkIHRvIGZldGNoICVzIGZpcm13YXJlIGZyb20gPCVzPlxuIiwK KwkJICB1Y19mdy0+dWNfbmFtZSwgdWNfZnctPnVjX2Z3X3BhdGgpOworCisJb2JqID0gdWNfZnct PnVjX2Z3X29iajsKKwlpZiAob2JqKQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2Jq LT5iYXNlKTsKKwl1Y19mdy0+dWNfZndfb2JqID0gTlVMTDsKKworCXJlbGVhc2VfZmlybXdhcmUo ZncpOwkJLyogT0sgZXZlbiBpZiBmdyBpcyBOVUxMICovCisJdWNfZnctPnVjX2Z3X2Jsb2IgPSBO VUxMOworCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9GQUlM OworfQorCisvKioKKyAqIGludGVsX3VjX2Z3X2NoZWNrKCkgLSBjaGVjayB0aGUgc3RhdHVzIG9m IHRoZSBmaXJtd2FyZSBmZXRjaGluZyBwcm9jZXNzCisgKiBAdWNfZnc6CWludGVsX3VjX2Z3IHN0 cnVjdHVyZQorICogQGNhbGxiYWNrOglvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byB2YWxp ZGF0ZSBhbmQvb3Igc2F2ZSB0aGUgaW1hZ2UKKyAqCisgKiBJZiB0aGUgZmV0Y2ggaXMgc3RpbGwg UEVORElORywgd2FpdCBmb3IgY29tcGxldGlvbiBmaXJzdCwgdGhlbiBjaGVjayBhbmQKKyAqIHJl dHVybiB0aGUgb3V0Y29tZS4gU3Vic2VxdWVudCBjYWxscyB3aWxsIGp1c3QgcmV0dXJuIHRoZSBz YW1lIG91dGNvbWUKKyAqIGJhc2VkIG9uIHRoZSByZWNvcmRlZCBmZXRjaCBzdGF0dXMsIHdpdGhv dXQgdHJpZ2dlcmluZyBhbm90aGVyIGZldGNoCisgKiBhbmQgd2l0aG91dCBjYWxsaW5nIEBjYWxs YmFjaygpLgorICoKKyAqIEFmdGVyIHRoaXMgY2FsbCwgQHVjX2Z3LT51Y19md19mZXRjaF9zdGF0 dXMgd2lsbCBzaG93IHdoZXRoZXIgdGhlIGZpcm13YXJlCisgKiBpbWFnZSB3YXMgc3VjY2Vzc2Z1 bGx5IGZldGNoZWQgYW5kIHRyYW5zZmVycmVkIHRvIGEgR0VNIG9iamVjdC4gSWYgaXQgaXMKKyAq IElOVEVMX1VDX0ZJUk1XQVJFX1NVQ0NFU1MsIEB1Y19mdy0+dWNfZndfb2JqIHdpbGwgYmUgcG9p bnQgdG8gdGhlIEdFTQorICogb2JqZWN0LCBhbmQgdGhlIHNpemUgb2YgdGhlIGltYWdlIHdpbGwg YmUgaW4gQHVjX2Z3LT51Y19md19zaXplLiAgRm9yIGFueQorICogb3RoZXIgc3RhdHVzIHZhbHVl LCB0aGVzZSBtZW1iZXJzIGFyZSB1bmRlZmluZWQuCisgKgorICogVGhlIEBjYWxsYmFjaygpIHBh cmFtZXRlciBhbGxvd3MgdGhlIHVDLXNwZWNpZmljIGNvZGUgdG8gdmFsaWRhdGUgdGhlCisgKiBp bWFnZSBiZWZvcmUgaXQgaXMgc2F2ZWQsIGFuZCBhbHNvIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0 IHNhdmUgbWVjaGFuaXNtCisgKiBpZiByZXF1aXJlZC4gV2hlbiBpdCBpcyBjYWxsZWQsIEB1Y19m dy0+dWNfZndfYmxvYiByZWZlcnMgdG8gdGhlIGZldGNoZWQKKyAqIGZpcm13YXJlIGltYWdlLCBh bmQgQHVjX2Z3LT51Y19md19vYmogaXMgTlVMTC4KKyAqCisgKiBJZiBAY2FsbGJhY2soKSByZXR1 cm5zIEZBTFNFLCB0aGUgZmV0Y2hlZCBpbWFnZSBpcyBjb25zaWRlcmVkIGludmFsaWQuCisgKiBU aGUgZmV0Y2ggc3RhdHVzIHdpbGwgYmUgc2V0IHRvIEZBSUwsIGFuZCB0aGlzIGZ1bmN0aW9uIHdp bGwgcmV0dXJuIC1FSU8uCisgKgorICogSWYgQGNhbGxiYWNrKCkgcmV0dXJucyBUUlVFIGJ1dCBk b2Vzbid0IHNldCBAdWNfZnctPnVjX2Z3X29iaiwgdGhlIGltYWdlCisgKiBpcyBjb25zaWRlcmVk IGdvb2Q7IGl0IHdpbGwgYmUgc2F2ZWQgaW4gYSBHRU0gb2JqZWN0IGFzIGRlc2NyaWJlZCBhYm92 ZS4KKyAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgbm8gQGNhbGxiYWNrKCkgaXMgc3VwcGxpZWQu CisgKgorICogSWYgQGNhbGxiYWNrKCkgcmV0dXJucyBUUlVFIGFmdGVyIHNldHRpbmcgQHVjX2Z3 LT51Y19md19vYmosIHRoaXMgbWVhbnMKKyAqIHRoYXQgdGhlIGltYWdlIGhhcyBhbHJlYWR5IGJl ZW4gc2F2ZWQgYnkgQGNhbGxiYWNrKCkgaXRzZWxmLiBUaGlzIGFsbG93cworICogQGNhbGxiYWNr KCkgdG8gY3VzdG9taXNlIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgaW4gdGhlIEdFTSBvYmplY3Qs IGZvcgorICogZXhhbXBsZSBpZiBpdCBuZWVkcyB0byBzYXZlIG9ubHkgYSBwb3J0aW9uIG9mIHRo ZSBsb2FkZWQgaW1hZ2UuCisgKgorICogSW4gYWxsIGNhc2VzIHRoZSBmaXJtd2FyZSBibG9iIGlz IHJlbGVhc2VkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisgKgorICogUmV0dXJuOglu b24temVybyBjb2RlIG9uIGVycm9yCisgKi8KK2ludAoraW50ZWxfdWNfZndfY2hlY2soc3RydWN0 IGludGVsX3VjX2Z3ICp1Y19mdywKKwkJICBib29sIGNhbGxiYWNrKHN0cnVjdCBpbnRlbF91Y19m dyAqKSkKK3sKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnVjX2Z3LT51Y19kZXYtPnN0cnVj dF9tdXRleCkpOworCisJaWYgKHVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPT0gSU5URUxfVUNf RklSTVdBUkVfUEVORElORykgeworCQkvKiBXZSBvbmx5IGNvbWUgaGVyZSBvbmNlICovCisJCXVj X2Z3X2ZldGNoX3dhaXQodWNfZncsIGNhbGxiYWNrKTsKKwkJLyogc3RhdGUgbXVzdCBub3cgYmUg RkFJTCBvciBTVUNDRVNTICovCisJfQorCisJRFJNX0RFQlVHX0RSSVZFUigiJXMgZncgZmV0Y2gg c3RhdHVzICVkXG4iLAorCQl1Y19mdy0+dWNfbmFtZSwgdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1 cyk7CisKKwlzd2l0Y2ggKHVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMpIHsKKwljYXNlIElOVEVM X1VDX0ZJUk1XQVJFX0ZBSUw6CisJCS8qIHNvbWV0aGluZyB3ZW50IHdyb25nIDooICovCisJCXJl dHVybiAtRUlPOworCisJY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9OT05FOgorCQkvKiBubyBmaXJt d2FyZSwgbm90aGluZyB0byBkbyAobm90IGFuIGVycm9yKSAqLworCQlyZXR1cm4gMDsKKworCWNh c2UgSU5URUxfVUNfRklSTVdBUkVfUEVORElORzoKKwlkZWZhdWx0OgorCQkvKiAiY2FuJ3QgaGFw cGVuIiAqLworCQlXQVJOX09OQ0UoMSwgIiVzIGZ3IDwlcz4gaW52YWxpZCB1Y19md19mZXRjaF9z dGF0dXMgJWQhXG4iLAorCQkJdWNfZnctPnVjX25hbWUsIHVjX2Z3LT51Y19md19wYXRoLAorCQkJ dWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyk7CisJCXJldHVybiAtRU5YSU87CisKKwljYXNlIElO VEVMX1VDX0ZJUk1XQVJFX1NVQ0NFU1M6CisJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIENh bGxiYWNrIGZyb20gdGhlIGtlcm5lbCdzIGFzeW5jaHJvbm91cyBmaXJtd2FyZS1mZXRjaGluZyBz dWJzeXN0ZW0uCisgKiBBbGwgd2UgaGF2ZSB0byBkbyBoZXJlIGlzIHN0YXNoIHRoZSBibG9iIGFu ZCBzaWduYWwgY29tcGxldGlvbi4KKyAqIEVycm9yIGNoZWNraW5nIChlLmcuIG5vIGZpcm13YXJl IGZvdW5kKSBpcyBsZWZ0IHRvIG1haW5saW5lIGNvZGUuCisgKiBXZSBkb24ndCBoYXZlIChhbmQg ZG9uJ3Qgd2FudCBvciBuZWVkIHRvIGFjcXVpcmUpIHRoZSBzdHJ1Y3RfbXV0ZXggaGVyZS4KKyAq Lworc3RhdGljIHZvaWQKK3VjX2Z3X2ZldGNoX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBmaXJtd2Fy ZSAqZncsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdyA9IGNv bnRleHQ7CisKKwlXQVJOX09OKHVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgIT0gSU5URUxfVUNf RklSTVdBUkVfUEVORElORyk7CisJRFJNX0RFQlVHX0RSSVZFUigiJXMgZmlybXdhcmUgZmV0Y2gg ZnJvbSA8JXM+IHN0YXR1cyAlZCwgZncgJXBcbiIsCisJCQl1Y19mdy0+dWNfbmFtZSwgdWNfZnct PnVjX2Z3X3BhdGgsCisJCQl1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzLCBmdyk7CisKKwl1Y19m dy0+dWNfZndfYmxvYiA9IGZ3OworCWNvbXBsZXRlKCZ1Y19mdy0+dWNfZndfZmV0Y2hlZCk7Cit9 CisKKy8qKgorICogaW50ZWxfdWNfZndfaW5pdCgpIC0gaW5pdGlhdGUgdGhlIGZldGNoaW5nIG9m IGZpcm13YXJlCisgKiBAZGV2Oglkcm0gZGV2aWNlCisgKiBAdWNfZnc6CWludGVsX3VjX2Z3IHN0 cnVjdHVyZQorICogQG5hbWU6CWh1bWFuLXJlYWRhYmxlIGRldmljZSBuYW1lIChlLmcuICJHdUMi KSBmb3IgbWVzc2FnZXMKKyAqIEBmd19wYXRoOgkodHJhaWxpbmcgcGFydHMgb2YpIHBhdGggdG8g ZmlybXdhcmUgKGUuZy4gImk5MTUvZ3VjX2Z3LmJpbiIpCisgKiAJCUBmd19wYXRoID09IE5VTEwg bWVhbnMgIm5vIGZpcm13YXJlIGV4cGVjdGVkIiAobm90IGFuIGVycm9yKSwKKyAqIAkJQGZ3X3Bh dGggPT0gIiIgKGVtcHR5IHN0cmluZykgbWVhbnMgImZpcm13YXJlIHVua25vd24iIGkuZS4KKyAq IAkJdGhlIHVDIHJlcXVpcmVzIGZpcm13YXJlLCBidXQgdGhlIGRyaXZlciBkb2Vzbid0IGtub3cg d2hlcmUKKyAqIAkJdG8gZmluZCB0aGUgcHJvcGVyIHZlcnNpb24uIFRoaXMgd2lsbCBiZSBsb2dn ZWQgYXMgYW4gZXJyb3IuCisgKgorICogVGhpcyBpcyBjYWxsZWQganVzdCBvbmNlIHBlciB1Qywg ZHVyaW5nIGRyaXZlciBsb2FkaW5nLiBJdCBpcyB0aGVyZWZvcmUKKyAqIGF1dG9tYXRpY2FsbHkg c2luZ2xlLXRocmVhZGVkIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGFjcXVpcmUgYW55IG11dGV4ZXMK KyAqIG9yIHNwaW5sb2Nrcy4gT1RPSCwgR0VNIGlzIG5vdCB5ZXQgZnVsbHkgaW5pdGlhbGlzZWQs IHNvIHdlIGNhbid0IGRvCisgKiB2ZXJ5IG11Y2ggaGVyZS4KKyAqCisgKiBUaGUgbWFpbiB0YXNr IGhlcmUgaXMgdG8gaW5pdGlhdGUgdGhlIGZldGNoaW5nIG9mIHRoZSB1QyBmaXJtd2FyZSBpbnRv CisgKiBtZW1vcnksIHVzaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgZmlybXdhcmUgZmV0Y2hpbmcg c3VwcG9ydC4gIFRoZSBhY3R1YWwKKyAqIGZldGNoaW5nIHdpbGwgdGhlbiBwcm9jZWVkIGFzeW5j aHJvbm91c2x5IGFuZCBpbiBwYXJhbGxlbCB3aXRoIHRoZSByZXN0CisgKiBvZiBkcml2ZXIgaW5p dGlhbGlzYXRpb247IGxhdGVyIGluIHRoZSBsb2FkaW5nIHByb2Nlc3Mgd2Ugd2lsbCBzeW5jaHJv bmlzZQorICogd2l0aCB0aGUgZmlybXdhcmUtZmV0Y2hpbmcgdGhyZWFkIGJlZm9yZSB0cmFuc2Zl cnJpbmcgdGhlIGZpcm13YXJlIGltYWdlCisgKiBmaXJzdGx5IGludG8gYSBHRU0gb2JqZWN0IGFu ZCB0aGVuIGludG8gdGhlIHVDJ3MgbWVtb3J5LgorICovCit2b2lkCitpbnRlbF91Y19md19pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncsCisJCSBj b25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmd19wYXRoKQoreworCXVjX2Z3LT51Y19kZXYg PSBkZXY7CisJdWNfZnctPnVjX25hbWUgPSBuYW1lOworCXVjX2Z3LT51Y19md19wYXRoID0gZndf cGF0aDsKKwl1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzID0gSU5URUxfVUNfRklSTVdBUkVfTk9O RTsKKwl1Y19mdy0+dWNfZndfbG9hZF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9OT05FOwor CWluaXRfY29tcGxldGlvbigmdWNfZnctPnVjX2Z3X2ZldGNoZWQpOworCisJaWYgKGZ3X3BhdGgg PT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKCpmd19wYXRoID09ICdcMCcpIHsKKwkJRFJNX0VS Uk9SKCJObyAlcyBmaXJtd2FyZSBrbm93biBmb3IgdGhpcyBwbGF0Zm9ybVxuIiwgbmFtZSk7CisJ CXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9GQUlMOworCQly ZXR1cm47CisJfQorCisJdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1X QVJFX1BFTkRJTkc7CisKKwlpZiAocmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUs IHRydWUsIGZ3X3BhdGgsCisJCQkJICAgICZkZXYtPnBkZXYtPmRldiwKKwkJCQkgICAgR0ZQX0tF Uk5FTCwgdWNfZncsCisJCQkJICAgIHVjX2Z3X2ZldGNoX2NhbGxiYWNrKSkgeworCQlEUk1fRVJS T1IoIkZhaWxlZCB0byByZXF1ZXN0ICVzIGZpcm13YXJlIGZyb20gPCVzPlxuIiwKKwkJCSAgbmFt ZSwgZndfcGF0aCk7CisJCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJN V0FSRV9GQUlMOworCQlyZXR1cm47CisJfQorCisJLyogZmlybXdhcmUgZmV0Y2ggaW5pdGlhdGVk LCBjYWxsYmFjayB3aWxsIHNpZ25hbCBjb21wbGV0aW9uICovCisJRFJNX0RFQlVHX0RSSVZFUigi aW5pdGlhdGVkIGZldGNoaW5nICVzIGZpcm13YXJlIGZyb20gPCVzPlxuIiwKKwkJbmFtZSwgZndf cGF0aCk7Cit9CisKKy8qKgorICogaW50ZWxfdWNfZndfZmluaSgpIC0gY2xlYW4gdXAgYWxsIHVD IGZpcm13YXJlLXJlbGF0ZWQgZGF0YQorICogQHVjX2Z3OglpbnRlbF91Y19mdyBzdHJ1Y3R1cmUK KyAqLwordm9pZAoraW50ZWxfdWNfZndfZmluaShzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3KQor eworCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmdWNfZnctPnVjX2Rldi0+c3RydWN0X211dGV4 KSk7CisKKwkvKgorCSAqIEdlbmVyYWxseSwgdGhlIGJsb2Igc2hvdWxkIGhhdmUgYmVlbiByZWxl YXNlZCBlYXJsaWVyLCBidXQKKwkgKiBpZiB0aGUgZHJpdmVyIGxvYWQgd2VyZSBhYm9ydGVkIGFm dGVyIHRoZSBmZXRjaCBoYWQgYmVlbgorCSAqIGluaXRpYXRlZCBidXQgbm90IGNvbXBsZXRlZCBp dCBtaWdodCBzdGlsbCBiZSBhcm91bmQKKwkgKi8KKwlpZiAodWNfZnctPnVjX2Z3X2ZldGNoX3N0 YXR1cyA9PSBJTlRFTF9VQ19GSVJNV0FSRV9QRU5ESU5HKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9u KCZ1Y19mdy0+dWNfZndfZmV0Y2hlZCk7CisJcmVsZWFzZV9maXJtd2FyZSh1Y19mdy0+dWNfZndf YmxvYik7CS8qIE9LIGV2ZW4gaWYgTlVMTCAqLworCXVjX2Z3LT51Y19md19ibG9iID0gTlVMTDsK KworCWlmICh1Y19mdy0+dWNfZndfb2JqKQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgm dWNfZnctPnVjX2Z3X29iai0+YmFzZSk7CisJdWNfZnctPnVjX2Z3X29iaiA9IE5VTEw7Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19sb2FkZXIuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjIyNTAyZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF91Y19sb2FkZXIuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0 IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQK KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJ TiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yOgorICoJRGF2ZSBHb3Jkb24gPGRhdmlkLnMu Z29yZG9uQGludGVsLmNvbT4KKyAqLworI2lmbmRlZiBfSU5URUxfVUNfTE9BREVSX0gKKyNkZWZp bmUgX0lOVEVMX1VDX0xPQURFUl9ICisKKy8qCisgKiBNaWNyb2NvbnRyb2xsZXIgKHVDKSBmaXJt d2FyZSBsb2FkaW5nIHN1cHBvcnQKKyAqLworCisvKgorICogVGhlc2UgdmFsdWVzIGFyZSB1c2Vk IHRvIHRyYWNrIHRoZSBzdGFnZXMgb2YgZ2V0dGluZyB0aGUgcmVxdWlyZWQgZmlybXdhcmUKKyAq IGludG8gYW4gb25ib2FyZCBtaWNyb2NvbnRyb2xsZXIuIFRoZSBjb21tb24gY29kZSB0cmFja3Mg dGhlIHBoYXNlcyBvZgorICogZmV0Y2hpbmcgdGhlIGZpcm13YXJlIChha2EgImJpbmFyeSBibG9i IikgZnJvbSBhbiBleHRlcm5hbCBmaWxlIGludG8gYSBHRU0KKyAqIG9iamVjdCBpbiB0aGUgJ3Vj X2Z3X2ZldGNoX3N0YXR1cycgZmllbGQgYmVsb3c7IHRoZSB1Qy1zcGVjaWZpYyBETUEgY29kZQor ICogdXNlcyB0aGUgJ3VjX2Z3X2xvYWRfc3RhdHVzJyBmaWVsZCB0byB0cmFjayB0aGUgdHJhbnNm ZXIgZnJvbSBHRU0gb2JqZWN0CisgKiB0byB1QyBtZW1vcnkuCisgKgorICogRm9yIHRoZSBmaXJz dCAoZmV0Y2gpIHN0YWdlLCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHZhbHVlcyBpczoKKyAq IE5PTkUgLSBubyBmaXJtd2FyZSBpcyBiZWluZyBmZXRjaGVkIGUuZy4gYmVjYXVzZSB0aGVyZSBp cyBubyB1QworICogUEVORElORyAtIGZpcm13YXJlIGZldGNoIGluaXRpYXRlZDsgY2FsbGJhY2sg d2lsbCBjb21wbGV0ZSAndWNfZndfZmV0Y2hlZCcKKyAqIFNVQ0NFU1MgLSB1QyBmaXJtd2FyZSBm ZXRjaGVkIGludG8gYSBHRU0gb2JqZWN0IGFuZCByZWFkeSBmb3IgdXNlCisgKiBGQUlMIC0gc29t ZXRoaW5nIHdlbnQgd3Jvbmc7IHVDIGZpcm13YXJlIGlzIG5vdCBhdmFpbGFibGUKKyAqCisgKiBU aGUgc2Vjb25kIChsb2FkKSBzdGFnZSBpcyBzaW1wbGVyIGFzIHRoZXJlIGlzIG5vIGFzeW5jaHJv bm91cyBoYW5kb2ZmOgorICogTk9ORSAtIG5vIGZpcm13YXJlIGlzIGJlaW5nIGxvYWRlZCBlLmcu IGJlY2F1c2UgdGhlcmUgaXMgbm8gdUMKKyAqIFBFTkRJTkcgLSBmaXJtd2FyZSBETUEgbG9hZCBp biBwcm9ncmVzcworICogU1VDQ0VTUyAtIHVDIGZpcm13YXJlIGxvYWRlZCBpbnRvIHVDIG1lbW9y eSBhbmQgcmVhZHkgZm9yIHVzZQorICogRkFJTCAtIHNvbWV0aGluZyB3ZW50IHdyb25nOyB1QyBm aXJtd2FyZSBpcyBub3QgYXZhaWxhYmxlCisgKi8KK2VudW0gaW50ZWxfdWNfZndfc3RhdHVzIHsK KwlJTlRFTF9VQ19GSVJNV0FSRV9GQUlMID0gLTEsCisJSU5URUxfVUNfRklSTVdBUkVfTk9ORSA9 IDAsCisJSU5URUxfVUNfRklSTVdBUkVfUEVORElORywKKwlJTlRFTF9VQ19GSVJNV0FSRV9TVUND RVNTCit9OworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzIGFsbCB0aGUgZGF0 YSBuZWVkZWQgZHVyaW5nIHRoZSBwcm9jZXNzIG9mCisgKiBmZXRjaGluZywgY2FjaGluZywgYW5k IGxvYWRpbmcgdGhlIGZpcm13YXJlIGltYWdlIGludG8gdGhlIHVDLgorICovCitzdHJ1Y3QgaW50 ZWxfdWNfZncgeworCXN0cnVjdCBkcm1fZGV2aWNlICoJCXVjX2RldjsKKwljb25zdCBjaGFyICoJ CQl1Y19uYW1lOworCWNvbnN0IGNoYXIgKgkJCXVjX2Z3X3BhdGg7CisJY29uc3Qgc3RydWN0IGZp cm13YXJlICoJCXVjX2Z3X2Jsb2I7CisJc3RydWN0IGNvbXBsZXRpb24JCXVjX2Z3X2ZldGNoZWQ7 CisJc2l6ZV90CQkJCXVjX2Z3X3NpemU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKgl1 Y19md19vYmo7CisJZW51bSBpbnRlbF91Y19md19zdGF0dXMJCXVjX2Z3X2ZldGNoX3N0YXR1czsK KwllbnVtIGludGVsX3VjX2Z3X3N0YXR1cwkJdWNfZndfbG9hZF9zdGF0dXM7Cit9OworCit2b2lk IGludGVsX3VjX2Z3X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGludGVsX3Vj X2Z3ICp1Y19mdywKKwkJY29uc3QgY2hhciAqdWNfbmFtZSwgY29uc3QgY2hhciAqZndfcGF0aCk7 CitpbnQgaW50ZWxfdWNfZndfY2hlY2soc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdywKKwkJYm9v bCBjYWxsYmFjayhzdHJ1Y3QgaW50ZWxfdWNfZncgKikpOwordm9pZCBpbnRlbF91Y19md19maW5p KHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncpOworCisjZW5kaWYKLS0gCjEuNy45LjUKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==