From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH 10/14] drm: Extract drm_atomic_state_helper.[hc] Date: Mon, 3 Sep 2018 18:54:35 +0200 Message-ID: <20180903165439.24845-10-daniel.vetter@ffwll.ch> References: <20180903165439.24845-1-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180903165439.24845-1-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: DRI Development Cc: Daniel Vetter , Intel Graphics Development , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org V2UgYWxyZWFkeSBoYXZlIGEgc2VwYXJhdGUgb3ZlcnZpZXcgZG9jIGZvciB0aGlzLCBtYWtlcyBz ZW5zZSB0bwp1bnRhbmdsZSBpdCBmcm9tIHRoZSBvdmVyYWxsIGF0b21pYyBoZWxwZXJzLgoKU2ln bmVkLW9mZi1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBpbnRlbC5jb20+Ci0tLQog RG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdCAgICAgfCAgMTkgKy0KIGRyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgICAzICstCiBkcml2ZXJzL2dw dS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYyAgICAgICB8IDU2OCAtLS0tLS0tLS0tLS0tLS0tLS0t LQogZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVyLmMgfCA2MDMgKysrKysr KysrKysrKysrKysrKysrKwogaW5jbHVkZS9kcm0vZHJtX2F0b21pY19oZWxwZXIuaCAgICAgICAg ICAgfCAgNDQgKy0KIGluY2x1ZGUvZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVyLmggICAgIHwg IDgwICsrKwogNiBmaWxlcyBjaGFuZ2VkLCA3MDAgaW5zZXJ0aW9ucygrKSwgNjE3IGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX3N0YXRl X2hlbHBlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJtX2F0b21pY19zdGF0 ZV9oZWxwZXIuaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVy cy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0CmluZGV4IGY5Y2Zj ZGNkZjAyNC4uNGI0ZGMyMzZlZjZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0t a21zLWhlbHBlcnMucnN0CisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5y c3QKQEAgLTU5LDE5ICs1OSwyOCBAQCBJbXBsZW1lbnRpbmcgQXN5bmNocm9ub3VzIEF0b21pYyBD b21taXQKIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIu YwogICAgOmRvYzogaW1wbGVtZW50aW5nIG5vbmJsb2NraW5nIGNvbW1pdAogCitIZWxwZXIgRnVu Y3Rpb25zIFJlZmVyZW5jZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4ga2VybmVs LWRvYzo6IGluY2x1ZGUvZHJtL2RybV9hdG9taWNfaGVscGVyLmgKKyAgIDppbnRlcm5hbDoKKwor Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCisgICA6 ZXhwb3J0OgorCiBBdG9taWMgU3RhdGUgUmVzZXQgYW5kIEluaXRpYWxpemF0aW9uCiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS4uIGtlcm5lbC1kb2M6OiBkcml2ZXJz L2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYworLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1 L2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5jCiAgICA6ZG9jOiBhdG9taWMgc3RhdGUgcmVz ZXQgYW5kIGluaXRpYWxpemF0aW9uCiAKLUhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXRvbWljIFN0YXRlIEhlbHBlciBSZWZlcmVuY2UKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2Ry bS9kcm1fYXRvbWljX2hlbHBlci5oCisuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9kcm0vZHJtX2F0 b21pY19zdGF0ZV9oZWxwZXIuaAogICAgOmludGVybmFsOgogCi0uLiBrZXJuZWwtZG9jOjogZHJp dmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJz L2dwdS9kcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuYwogICAgOmV4cG9ydDoKIAogU2ltcGxl IEtNUyBIZWxwZXIgUmVmZXJlbmNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggYmM2YTE2YTNjMzZlLi41NzZiYTk4 NWUxMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUKQEAgLTM2LDcgKzM2LDggQEAgZHJtX2ttc19oZWxwZXIteSA6PSBk cm1fY3J0Y19oZWxwZXIubyBkcm1fZHBfaGVscGVyLm8gZHJtX3Byb2JlX2hlbHBlci5vIFwKIAkJ ZHJtX3BsYW5lX2hlbHBlci5vIGRybV9kcF9tc3RfdG9wb2xvZ3kubyBkcm1fYXRvbWljX2hlbHBl ci5vIFwKIAkJZHJtX2ttc19oZWxwZXJfY29tbW9uLm8gZHJtX2RwX2R1YWxfbW9kZV9oZWxwZXIu byBcCiAJCWRybV9zaW1wbGVfa21zX2hlbHBlci5vIGRybV9tb2Rlc2V0X2hlbHBlci5vIFwKLQkJ ZHJtX3NjZGNfaGVscGVyLm8gZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIubworCQlkcm1fc2Nk Y19oZWxwZXIubyBkcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5vIFwKKwkJZHJtX2F0b21pY19z dGF0ZV9oZWxwZXIubwogCiBkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fUEFORUxfQlJJREdF KSArPSBicmlkZ2UvcGFuZWwubwogZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0ZCREVWX0VN VUxBVElPTikgKz0gZHJtX2ZiX2hlbHBlci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2F0b21pY19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5j CmluZGV4IDMzNGIxMjFiZDRkOS4uYTVlZGM4NzU3MDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21p Y19oZWxwZXIuYwpAQCAtMzM4Miw1NzEgKzMzODIsMyBAQCBpbnQgZHJtX2F0b21pY19oZWxwZXJf cGFnZV9mbGlwX3RhcmdldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJcmV0dXJuIHJldDsKIH0K IEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwX3RhcmdldCk7Ci0KLS8q KgotICogRE9DOiBhdG9taWMgc3RhdGUgcmVzZXQgYW5kIGluaXRpYWxpemF0aW9uCi0gKgotICog Qm90aCB0aGUgZHJtIGNvcmUgYW5kIHRoZSBhdG9taWMgaGVscGVycyBhc3N1bWUgdGhhdCB0aGVy ZSBpcyBhbHdheXMgdGhlIGZ1bGwKLSAqIGFuZCBjb3JyZWN0IGF0b21pYyBzb2Z0d2FyZSBzdGF0 ZSBmb3IgYWxsIGNvbm5lY3RvcnMsIENSVENzIGFuZCBwbGFuZXMKLSAqIGF2YWlsYWJsZS4gV2hp Y2ggaXMgYSBiaXQgYSBwcm9ibGVtIG9uIGRyaXZlciBsb2FkIGFuZCBhbHNvIGFmdGVyIHN5c3Rl bQotICogc3VzcGVuZC4gT25lIHdheSB0byBzb2x2ZSB0aGlzIGlzIHRvIGhhdmUgYSBoYXJkd2Fy ZSBzdGF0ZSByZWFkLW91dAotICogaW5mcmFzdHJ1Y3R1cmUgd2hpY2ggcmVjb25zdHJ1Y3RzIHRo ZSBmdWxsIHNvZnR3YXJlIHN0YXRlIChlLmcuIHRoZSBpOTE1Ci0gKiBkcml2ZXIpLgotICoKLSAq IFRoZSBzaW1wbGVyIHNvbHV0aW9uIGlzIHRvIGp1c3QgcmVzZXQgdGhlIHNvZnR3YXJlIHN0YXRl IHRvIGV2ZXJ5dGhpbmcgb2ZmLAotICogd2hpY2ggaXMgZWFzaWVzdCB0byBkbyBieSBjYWxsaW5n IGRybV9tb2RlX2NvbmZpZ19yZXNldCgpLiBUbyBmYWNpbGl0YXRlIHRoaXMKLSAqIHRoZSBhdG9t aWMgaGVscGVycyBwcm92aWRlIGRlZmF1bHQgcmVzZXQgaW1wbGVtZW50YXRpb25zIGZvciBhbGwg aG9va3MuCi0gKgotICogT24gdGhlIHVwc2lkZSB0aGUgcHJlY2lzZSBzdGF0ZSB0cmFja2luZyBv ZiBhdG9taWMgc2ltcGxpZmllcyBzeXN0ZW0gc3VzcGVuZAotICogYW5kIHJlc3VtZSBhIGxvdC4g Rm9yIGRyaXZlcnMgdXNpbmcgZHJtX21vZGVfY29uZmlnX3Jlc2V0KCkgYSBjb21wbGV0ZSByZWNp cGUKLSAqIGlzIGltcGxlbWVudGVkIGluIGRybV9hdG9taWNfaGVscGVyX3N1c3BlbmQoKSBhbmQg ZHJtX2F0b21pY19oZWxwZXJfcmVzdW1lKCkuCi0gKiBGb3Igb3RoZXIgZHJpdmVycyB0aGUgYnVp bGRpbmcgYmxvY2tzIGFyZSBzcGxpdCBvdXQsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbgotICogZm9y IHRoZXNlIGZ1bmN0aW9ucy4KLSAqLwotCi0vKioKLSAqIGRybV9hdG9taWNfaGVscGVyX2NydGNf cmVzZXQgLSBkZWZhdWx0ICZkcm1fY3J0Y19mdW5jcy5yZXNldCBob29rIGZvciBDUlRDcwotICog QGNydGM6IGRybSBDUlRDCi0gKgotICogUmVzZXRzIHRoZSBhdG9taWMgc3RhdGUgZm9yIEBjcnRj IGJ5IGZyZWVpbmcgdGhlIHN0YXRlIHBvaW50ZXIgKHdoaWNoIG1pZ2h0Ci0gKiBiZSBOVUxMLCBl LmcuIGF0IGRyaXZlciBsb2FkIHRpbWUpIGFuZCBhbGxvY2F0aW5nIGEgbmV3IGVtcHR5IHN0YXRl IG9iamVjdC4KLSAqLwotdm9pZCBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0KHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKLXsKLQlpZiAoY3J0Yy0+c3RhdGUpCi0JCV9fZHJtX2F0b21pY19oZWxw ZXJfY3J0Y19kZXN0cm95X3N0YXRlKGNydGMtPnN0YXRlKTsKLQotCWtmcmVlKGNydGMtPnN0YXRl KTsKLQljcnRjLT5zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpjcnRjLT5zdGF0ZSksIEdGUF9LRVJO RUwpOwotCi0JaWYgKGNydGMtPnN0YXRlKQotCQljcnRjLT5zdGF0ZS0+Y3J0YyA9IGNydGM7Ci19 Ci1FWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQpOwotCi0vKioKLSAq IF9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUgLSBjb3B5IGF0b21pYyBD UlRDIHN0YXRlCi0gKiBAY3J0YzogQ1JUQyBvYmplY3QKLSAqIEBzdGF0ZTogYXRvbWljIENSVEMg c3RhdGUKLSAqCi0gKiBDb3BpZXMgYXRvbWljIHN0YXRlIGZyb20gYSBDUlRDJ3MgY3VycmVudCBz dGF0ZSBhbmQgcmVzZXRzIGluZmVycmVkIHZhbHVlcy4KLSAqIFRoaXMgaXMgdXNlZnVsIGZvciBk cml2ZXJzIHRoYXQgc3ViY2xhc3MgdGhlIENSVEMgc3RhdGUuCi0gKi8KLXZvaWQgX19kcm1fYXRv bWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0J CQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCi17Ci0JbWVtY3B5KHN0YXRl LCBjcnRjLT5zdGF0ZSwgc2l6ZW9mKCpzdGF0ZSkpOwotCi0JaWYgKHN0YXRlLT5tb2RlX2Jsb2Ip Ci0JCWRybV9wcm9wZXJ0eV9ibG9iX2dldChzdGF0ZS0+bW9kZV9ibG9iKTsKLQlpZiAoc3RhdGUt PmRlZ2FtbWFfbHV0KQotCQlkcm1fcHJvcGVydHlfYmxvYl9nZXQoc3RhdGUtPmRlZ2FtbWFfbHV0 KTsKLQlpZiAoc3RhdGUtPmN0bSkKLQkJZHJtX3Byb3BlcnR5X2Jsb2JfZ2V0KHN0YXRlLT5jdG0p OwotCWlmIChzdGF0ZS0+Z2FtbWFfbHV0KQotCQlkcm1fcHJvcGVydHlfYmxvYl9nZXQoc3RhdGUt PmdhbW1hX2x1dCk7Ci0Jc3RhdGUtPm1vZGVfY2hhbmdlZCA9IGZhbHNlOwotCXN0YXRlLT5hY3Rp dmVfY2hhbmdlZCA9IGZhbHNlOwotCXN0YXRlLT5wbGFuZXNfY2hhbmdlZCA9IGZhbHNlOwotCXN0 YXRlLT5jb25uZWN0b3JzX2NoYW5nZWQgPSBmYWxzZTsKLQlzdGF0ZS0+Y29sb3JfbWdtdF9jaGFu Z2VkID0gZmFsc2U7Ci0Jc3RhdGUtPnpwb3NfY2hhbmdlZCA9IGZhbHNlOwotCXN0YXRlLT5jb21t aXQgPSBOVUxMOwotCXN0YXRlLT5ldmVudCA9IE5VTEw7Ci0Jc3RhdGUtPnBhZ2VmbGlwX2ZsYWdz ID0gMDsKLX0KLUVYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0 ZV9zdGF0ZSk7Ci0KLS8qKgotICogZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3Rh dGUgLSBkZWZhdWx0IHN0YXRlIGR1cGxpY2F0ZSBob29rCi0gKiBAY3J0YzogZHJtIENSVEMKLSAq Ci0gKiBEZWZhdWx0IENSVEMgc3RhdGUgZHVwbGljYXRlIGhvb2sgZm9yIGRyaXZlcnMgd2hpY2gg ZG9uJ3QgaGF2ZSB0aGVpciBvd24KLSAqIHN1YmNsYXNzZWQgQ1JUQyBzdGF0ZSBzdHJ1Y3R1cmUu Ci0gKi8KLXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqCi1kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1 cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRybV9jcnRj X3N0YXRlICpzdGF0ZTsKLQotCWlmIChXQVJOX09OKCFjcnRjLT5zdGF0ZSkpCi0JCXJldHVybiBO VUxMOwotCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlp ZiAoc3RhdGUpCi0JCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUoY3J0 Yywgc3RhdGUpOwotCi0JcmV0dXJuIHN0YXRlOwotfQotRVhQT1JUX1NZTUJPTChkcm1fYXRvbWlj X2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSk7Ci0KLS8qKgotICogX19kcm1fYXRvbWljX2hl bHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUgLSByZWxlYXNlIENSVEMgc3RhdGUKLSAqIEBzdGF0ZTog Q1JUQyBzdGF0ZSBvYmplY3QgdG8gcmVsZWFzZQotICoKLSAqIFJlbGVhc2VzIGFsbCByZXNvdXJj ZXMgc3RvcmVkIGluIHRoZSBDUlRDIHN0YXRlIHdpdGhvdXQgYWN0dWFsbHkgZnJlZWluZwotICog dGhlIG1lbW9yeSBvZiB0aGUgQ1JUQyBzdGF0ZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGRyaXZlcnMg dGhhdCBzdWJjbGFzcyB0aGUKLSAqIENSVEMgc3RhdGUuCi0gKi8KLXZvaWQgX19kcm1fYXRvbWlj X2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkK LXsKLQlpZiAoc3RhdGUtPmNvbW1pdCkgewotCQkvKgotCQkgKiBJbiB0aGUgZXZlbnQgdGhhdCBh IG5vbi1ibG9ja2luZyBjb21taXQgcmV0dXJucwotCQkgKiAtRVJFU1RBUlRTWVMgYmVmb3JlIHRo ZSBjb21taXRfdGFpbCB3b3JrIGlzIHF1ZXVlZCwgd2Ugd2lsbAotCQkgKiBoYXZlIGFuIGV4dHJh IHJlZmVyZW5jZSB0byB0aGUgY29tbWl0IG9iamVjdC4gUmVsZWFzZSBpdCwgaWYKLQkJICogdGhl IGV2ZW50IGhhcyBub3QgYmVlbiBjb25zdW1lZCBieSB0aGUgd29ya2VyLgotCQkgKgotCQkgKiBz dGF0ZS0+ZXZlbnQgbWF5IGJlIGZyZWVkLCBzbyB3ZSBjYW4ndCBkaXJlY3RseSBsb29rIGF0Ci0J CSAqIHN0YXRlLT5ldmVudC0+YmFzZS5jb21wbGV0aW9uLgotCQkgKi8KLQkJaWYgKHN0YXRlLT5l dmVudCAmJiBzdGF0ZS0+Y29tbWl0LT5hYm9ydF9jb21wbGV0aW9uKQotCQkJZHJtX2NydGNfY29t bWl0X3B1dChzdGF0ZS0+Y29tbWl0KTsKLQotCQlrZnJlZShzdGF0ZS0+Y29tbWl0LT5ldmVudCk7 Ci0JCXN0YXRlLT5jb21taXQtPmV2ZW50ID0gTlVMTDsKLQotCQlkcm1fY3J0Y19jb21taXRfcHV0 KHN0YXRlLT5jb21taXQpOwotCX0KLQotCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChzdGF0ZS0+bW9k ZV9ibG9iKTsKLQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoc3RhdGUtPmRlZ2FtbWFfbHV0KTsKLQlk cm1fcHJvcGVydHlfYmxvYl9wdXQoc3RhdGUtPmN0bSk7Ci0JZHJtX3Byb3BlcnR5X2Jsb2JfcHV0 KHN0YXRlLT5nYW1tYV9sdXQpOwotfQotRVhQT1JUX1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVy X2NydGNfZGVzdHJveV9zdGF0ZSk7Ci0KLS8qKgotICogZHJtX2F0b21pY19oZWxwZXJfY3J0Y19k ZXN0cm95X3N0YXRlIC0gZGVmYXVsdCBzdGF0ZSBkZXN0cm95IGhvb2sKLSAqIEBjcnRjOiBkcm0g Q1JUQwotICogQHN0YXRlOiBDUlRDIHN0YXRlIG9iamVjdCB0byByZWxlYXNlCi0gKgotICogRGVm YXVsdCBDUlRDIHN0YXRlIGRlc3Ryb3kgaG9vayBmb3IgZHJpdmVycyB3aGljaCBkb24ndCBoYXZl IHRoZWlyIG93bgotICogc3ViY2xhc3NlZCBDUlRDIHN0YXRlIHN0cnVjdHVyZS4KLSAqLwotdm9p ZCBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRjICpj cnRjLAotCQkJCQkgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCi17Ci0JX19kcm1fYXRv bWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RhdGUpOwotCWtmcmVlKHN0YXRlKTsKLX0K LUVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlKTsKLQot LyoqCi0gKiBfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0IC0gcmVzZXRzIHBsYW5lcyBz dGF0ZSB0byBkZWZhdWx0IHZhbHVlcwotICogQHBsYW5lOiBwbGFuZSBvYmplY3QsIG11c3Qgbm90 IGJlIE5VTEwKLSAqIEBzdGF0ZTogYXRvbWljIHBsYW5lIHN0YXRlLCBtdXN0IG5vdCBiZSBOVUxM Ci0gKgotICogSW5pdGlhbGl6ZXMgcGxhbmUgc3RhdGUgdG8gZGVmYXVsdC4gVGhpcyBpcyB1c2Vm dWwgZm9yIGRyaXZlcnMgdGhhdCBzdWJjbGFzcwotICogdGhlIHBsYW5lIHN0YXRlLgotICovCi12 b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCi0JCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKLXsKLQlzdGF0ZS0+ cGxhbmUgPSBwbGFuZTsKLQlzdGF0ZS0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKLQot CS8qIFJlc2V0IHRoZSBhbHBoYSB2YWx1ZSB0byBmdWxseSBvcGFxdWUgaWYgaXQgbWF0dGVycyAq LwotCWlmIChwbGFuZS0+YWxwaGFfcHJvcGVydHkpCi0JCXN0YXRlLT5hbHBoYSA9IHBsYW5lLT5h bHBoYV9wcm9wZXJ0eS0+dmFsdWVzWzFdOwotCXN0YXRlLT5waXhlbF9ibGVuZF9tb2RlID0gRFJN X01PREVfQkxFTkRfUFJFTVVMVEk7Ci0KLQlwbGFuZS0+c3RhdGUgPSBzdGF0ZTsKLX0KLUVYUE9S VF9TWU1CT0woX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldCk7Ci0KLS8qKgotICogZHJt X2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQgLSBkZWZhdWx0ICZkcm1fcGxhbmVfZnVuY3MucmVz ZXQgaG9vayBmb3IgcGxhbmVzCi0gKiBAcGxhbmU6IGRybSBwbGFuZQotICoKLSAqIFJlc2V0cyB0 aGUgYXRvbWljIHN0YXRlIGZvciBAcGxhbmUgYnkgZnJlZWluZyB0aGUgc3RhdGUgcG9pbnRlciAo d2hpY2ggbWlnaHQKLSAqIGJlIE5VTEwsIGUuZy4gYXQgZHJpdmVyIGxvYWQgdGltZSkgYW5kIGFs bG9jYXRpbmcgYSBuZXcgZW1wdHkgc3RhdGUgb2JqZWN0LgotICovCi12b2lkIGRybV9hdG9taWNf aGVscGVyX3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQotewotCWlmIChwbGFu ZS0+c3RhdGUpCi0JCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShwbGFu ZS0+c3RhdGUpOwotCi0Ja2ZyZWUocGxhbmUtPnN0YXRlKTsKLQlwbGFuZS0+c3RhdGUgPSBremFs bG9jKHNpemVvZigqcGxhbmUtPnN0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBsYW5lLT5zdGF0 ZSkKLQkJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldChwbGFuZSwgcGxhbmUtPnN0YXRl KTsKLX0KLUVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQpOwotCi0v KioKLSAqIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlIC0gY29weSBh dG9taWMgcGxhbmUgc3RhdGUKLSAqIEBwbGFuZTogcGxhbmUgb2JqZWN0Ci0gKiBAc3RhdGU6IGF0 b21pYyBwbGFuZSBzdGF0ZQotICoKLSAqIENvcGllcyBhdG9taWMgc3RhdGUgZnJvbSBhIHBsYW5l J3MgY3VycmVudCBzdGF0ZS4gVGhpcyBpcyB1c2VmdWwgZm9yCi0gKiBkcml2ZXJzIHRoYXQgc3Vi Y2xhc3MgdGhlIHBsYW5lIHN0YXRlLgotICovCi12b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxh bmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotCQkJCQkgICAgICAg c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCi17Ci0JbWVtY3B5KHN0YXRlLCBwbGFuZS0+ c3RhdGUsIHNpemVvZigqc3RhdGUpKTsKLQotCWlmIChzdGF0ZS0+ZmIpCi0JCWRybV9mcmFtZWJ1 ZmZlcl9nZXQoc3RhdGUtPmZiKTsKLQotCXN0YXRlLT5mZW5jZSA9IE5VTEw7Ci0Jc3RhdGUtPmNv bW1pdCA9IE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVf ZHVwbGljYXRlX3N0YXRlKTsKLQotLyoqCi0gKiBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBs aWNhdGVfc3RhdGUgLSBkZWZhdWx0IHN0YXRlIGR1cGxpY2F0ZSBob29rCi0gKiBAcGxhbmU6IGRy bSBwbGFuZQotICoKLSAqIERlZmF1bHQgcGxhbmUgc3RhdGUgZHVwbGljYXRlIGhvb2sgZm9yIGRy aXZlcnMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KLSAqIHN1YmNsYXNzZWQgcGxhbmUgc3Rh dGUgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICoKLWRybV9hdG9taWNf aGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKLXsK LQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZTsKLQotCWlmIChXQVJOX09OKCFwbGFuZS0+ c3RhdGUpKQotCQlyZXR1cm4gTlVMTDsKLQotCXN0YXRlID0ga21hbGxvYyhzaXplb2YoKnN0YXRl KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN0YXRlKQotCQlfX2RybV9hdG9taWNfaGVscGVyX3BsYW5l X2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSwgc3RhdGUpOwotCi0JcmV0dXJuIHN0YXRlOwotfQotRVhQ T1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUpOwotCi0v KioKLSAqIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZSAtIHJlbGVhc2Ug cGxhbmUgc3RhdGUKLSAqIEBzdGF0ZTogcGxhbmUgc3RhdGUgb2JqZWN0IHRvIHJlbGVhc2UKLSAq Ci0gKiBSZWxlYXNlcyBhbGwgcmVzb3VyY2VzIHN0b3JlZCBpbiB0aGUgcGxhbmUgc3RhdGUgd2l0 aG91dCBhY3R1YWxseSBmcmVlaW5nCi0gKiB0aGUgbWVtb3J5IG9mIHRoZSBwbGFuZSBzdGF0ZS4g VGhpcyBpcyB1c2VmdWwgZm9yIGRyaXZlcnMgdGhhdCBzdWJjbGFzcyB0aGUKLSAqIHBsYW5lIHN0 YXRlLgotICovCi12b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKLXsKLQlpZiAoc3RhdGUtPmZiKQotCQlkcm1f ZnJhbWVidWZmZXJfcHV0KHN0YXRlLT5mYik7Ci0KLQlpZiAoc3RhdGUtPmZlbmNlKQotCQlkbWFf ZmVuY2VfcHV0KHN0YXRlLT5mZW5jZSk7Ci0KLQlpZiAoc3RhdGUtPmNvbW1pdCkKLQkJZHJtX2Ny dGNfY29tbWl0X3B1dChzdGF0ZS0+Y29tbWl0KTsKLX0KLUVYUE9SVF9TWU1CT0woX19kcm1fYXRv bWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKTsKLQotLyoqCi0gKiBkcm1fYXRvbWljX2hl bHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlIC0gZGVmYXVsdCBzdGF0ZSBkZXN0cm95IGhvb2sKLSAq IEBwbGFuZTogZHJtIHBsYW5lCi0gKiBAc3RhdGU6IHBsYW5lIHN0YXRlIG9iamVjdCB0byByZWxl YXNlCi0gKgotICogRGVmYXVsdCBwbGFuZSBzdGF0ZSBkZXN0cm95IGhvb2sgZm9yIGRyaXZlcnMg d2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KLSAqIHN1YmNsYXNzZWQgcGxhbmUgc3RhdGUgc3Ry dWN0dXJlLgotICovCi12b2lkIGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCQkJCSAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg KnN0YXRlKQotewotCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShzdGF0 ZSk7Ci0Ja2ZyZWUoc3RhdGUpOwotfQotRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9w bGFuZV9kZXN0cm95X3N0YXRlKTsKLQotLyoqCi0gKiBfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9yZXNldCAtIHJlc2V0IHN0YXRlIG9uIGNvbm5lY3RvcgotICogQGNvbm5lY3RvcjogZHJt IGNvbm5lY3RvcgotICogQGNvbm5fc3RhdGU6IGNvbm5lY3RvciBzdGF0ZSB0byBhc3NpZ24KLSAq Ci0gKiBJbml0aWFsaXplcyB0aGUgbmV3bHkgYWxsb2NhdGVkIEBjb25uX3N0YXRlIGFuZCBhc3Np Z25zIGl0IHRvCi0gKiB0aGUgJmRybV9jb25lY3Rvci0+c3RhdGUgcG9pbnRlciBvZiBAY29ubmVj dG9yLCB1c3VhbGx5IHJlcXVpcmVkIHdoZW4KLSAqIGluaXRpYWxpemluZyB0aGUgZHJpdmVycyBv ciB3aGVuIGNhbGxlZCBmcm9tIHRoZSAmZHJtX2Nvbm5lY3Rvcl9mdW5jcy5yZXNldAotICogaG9v ay4KLSAqCi0gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZHJpdmVycyB0aGF0IHN1YmNsYXNzIHRoZSBj b25uZWN0b3Igc3RhdGUuCi0gKi8KLXZvaWQKLV9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9y X3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQkJICAgIHN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQotewotCWlmIChjb25uX3N0YXRlKQotCQlj b25uX3N0YXRlLT5jb25uZWN0b3IgPSBjb25uZWN0b3I7Ci0KLQljb25uZWN0b3ItPnN0YXRlID0g Y29ubl9zdGF0ZTsKLX0KLUVYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0 b3JfcmVzZXQpOwotCi0vKioKLSAqIGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCAt IGRlZmF1bHQgJmRybV9jb25uZWN0b3JfZnVuY3MucmVzZXQgaG9vayBmb3IgY29ubmVjdG9ycwot ICogQGNvbm5lY3RvcjogZHJtIGNvbm5lY3RvcgotICoKLSAqIFJlc2V0cyB0aGUgYXRvbWljIHN0 YXRlIGZvciBAY29ubmVjdG9yIGJ5IGZyZWVpbmcgdGhlIHN0YXRlIHBvaW50ZXIgKHdoaWNoCi0g KiBtaWdodCBiZSBOVUxMLCBlLmcuIGF0IGRyaXZlciBsb2FkIHRpbWUpIGFuZCBhbGxvY2F0aW5n IGEgbmV3IGVtcHR5IHN0YXRlCi0gKiBvYmplY3QuCi0gKi8KLXZvaWQgZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0J c3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUgPQotCQlremFsbG9jKHNpemVv ZigqY29ubl9zdGF0ZSksIEdGUF9LRVJORUwpOwotCi0JaWYgKGNvbm5lY3Rvci0+c3RhdGUpCi0J CV9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUoY29ubmVjdG9yLT5z dGF0ZSk7Ci0KLQlrZnJlZShjb25uZWN0b3ItPnN0YXRlKTsKLQlfX2RybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9yZXNldChjb25uZWN0b3IsIGNvbm5fc3RhdGUpOwotfQotRVhQT1JUX1NZTUJP TChkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQpOwotCi0vKioKLSAqIF9fZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSAtIGNvcHkgYXRvbWljIGNvbm5l Y3RvciBzdGF0ZQotICogQGNvbm5lY3RvcjogY29ubmVjdG9yIG9iamVjdAotICogQHN0YXRlOiBh dG9taWMgY29ubmVjdG9yIHN0YXRlCi0gKgotICogQ29waWVzIGF0b21pYyBzdGF0ZSBmcm9tIGEg Y29ubmVjdG9yJ3MgY3VycmVudCBzdGF0ZS4gVGhpcyBpcyB1c2VmdWwgZm9yCi0gKiBkcml2ZXJz IHRoYXQgc3ViY2xhc3MgdGhlIGNvbm5lY3RvciBzdGF0ZS4KLSAqLwotdm9pZAotX19kcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCi0JCQkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUp Ci17Ci0JbWVtY3B5KHN0YXRlLCBjb25uZWN0b3ItPnN0YXRlLCBzaXplb2YoKnN0YXRlKSk7Ci0J aWYgKHN0YXRlLT5jcnRjKQotCQlkcm1fY29ubmVjdG9yX2dldChjb25uZWN0b3IpOwotCXN0YXRl LT5jb21taXQgPSBOVUxMOwotCi0JLyogRG9uJ3QgY29weSBvdmVyIGEgd3JpdGViYWNrIGpvYiwg dGhleSBhcmUgdXNlZCBvbmx5IG9uY2UgKi8KLQlzdGF0ZS0+d3JpdGViYWNrX2pvYiA9IE5VTEw7 Ci19Ci1FWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0 ZV9zdGF0ZSk7Ci0KLS8qKgotICogZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0 ZV9zdGF0ZSAtIGRlZmF1bHQgc3RhdGUgZHVwbGljYXRlIGhvb2sKLSAqIEBjb25uZWN0b3I6IGRy bSBjb25uZWN0b3IKLSAqCi0gKiBEZWZhdWx0IGNvbm5lY3RvciBzdGF0ZSBkdXBsaWNhdGUgaG9v ayBmb3IgZHJpdmVycyB3aGljaCBkb24ndCBoYXZlIHRoZWlyIG93bgotICogc3ViY2xhc3NlZCBj b25uZWN0b3Igc3RhdGUgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqCi1kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg KnN0YXRlOwotCi0JaWYgKFdBUk5fT04oIWNvbm5lY3Rvci0+c3RhdGUpKQotCQlyZXR1cm4gTlVM TDsKLQotCXN0YXRlID0ga21hbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KHN0YXRlKQotCQlfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUo Y29ubmVjdG9yLCBzdGF0ZSk7Ci0KLQlyZXR1cm4gc3RhdGU7Ci19Ci1FWFBPUlRfU1lNQk9MKGRy bV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUpOwotCi0vKioKLSAqIGRy bV9hdG9taWNfaGVscGVyX2R1cGxpY2F0ZV9zdGF0ZSAtIGR1cGxpY2F0ZSBhbiBhdG9taWMgc3Rh dGUgb2JqZWN0Ci0gKiBAZGV2OiBEUk0gZGV2aWNlCi0gKiBAY3R4OiBsb2NrIGFjcXVpc2l0aW9u IGNvbnRleHQKLSAqCi0gKiBNYWtlcyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgYXRvbWljIHN0YXRl IGJ5IGxvb3Bpbmcgb3ZlciBhbGwgb2JqZWN0cyBhbmQKLSAqIGR1cGxpY2F0aW5nIHRoZWlyIHJl c3BlY3RpdmUgc3RhdGVzLiBUaGlzIGlzIHVzZWQgZm9yIGV4YW1wbGUgYnkgc3VzcGVuZC8KLSAq IHJlc3VtZSBzdXBwb3J0IGNvZGUgdG8gc2F2ZSB0aGUgc3RhdGUgcHJpb3IgdG8gc3VzcGVuZCBz dWNoIHRoYXQgaXQgY2FuCi0gKiBiZSByZXN0b3JlZCB1cG9uIHJlc3VtZS4KLSAqCi0gKiBOb3Rl IHRoYXQgdGhpcyB0cmVhdHMgYXRvbWljIHN0YXRlIGFzIHBlcnNpc3RlbnQgYmV0d2VlbiBzYXZl IGFuZCByZXN0b3JlLgotICogRHJpdmVycyBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgcG9z c2libGUgYW5kIHdvbid0IHJlc3VsdCBpbiBjb25mdXNpb24KLSAqIG9yIGVycm9uZW91cyBiZWhh dmlvdXIuCi0gKgotICogTm90ZSB0aGF0IGlmIGNhbGxlcnMgaGF2ZW4ndCBhbHJlYWR5IGFjcXVp cmVkIGFsbCBtb2Rlc2V0IGxvY2tzIHRoaXMgbWlnaHQKLSAqIHJldHVybiAtRURFQURMSywgd2hp Y2ggbXVzdCBiZSBoYW5kbGVkIGJ5IGNhbGxpbmcgZHJtX21vZGVzZXRfYmFja29mZigpLgotICoK LSAqIFJldHVybnM6Ci0gKiBBIHBvaW50ZXIgdG8gdGhlIGNvcHkgb2YgdGhlIGF0b21pYyBzdGF0 ZSBvYmplY3Qgb24gc3VjY2VzcyBvciBhbgotICogRVJSX1BUUigpLWVuY29kZWQgZXJyb3IgY29k ZSBvbiBmYWlsdXJlLgotICoKLSAqIFNlZSBhbHNvOgotICogZHJtX2F0b21pY19oZWxwZXJfc3Vz cGVuZCgpLCBkcm1fYXRvbWljX2hlbHBlcl9yZXN1bWUoKQotICovCi1zdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqCi1kcm1fYXRvbWljX2hlbHBlcl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KQot ewotCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXIgY29ubl9pdGVyOwotCXN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlpbnQgZXJy ID0gMDsKLQotCXN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhkZXYpOwotCWlmICghc3Rh dGUpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0Jc3RhdGUtPmFjcXVpcmVfY3R4ID0g Y3R4OwotCi0JZHJtX2Zvcl9lYWNoX2NydGMoY3J0YywgZGV2KSB7Ci0JCXN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQotCQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0 Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7Ci0JCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpIHsKLQkJCWVy ciA9IFBUUl9FUlIoY3J0Y19zdGF0ZSk7Ci0JCQlnb3RvIGZyZWU7Ci0JCX0KLQl9Ci0KLQlkcm1f Zm9yX2VhY2hfcGxhbmUocGxhbmUsIGRldikgewotCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZTsKLQotCQlwbGFuZV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRl KHN0YXRlLCBwbGFuZSk7Ci0JCWlmIChJU19FUlIocGxhbmVfc3RhdGUpKSB7Ci0JCQllcnIgPSBQ VFJfRVJSKHBsYW5lX3N0YXRlKTsKLQkJCWdvdG8gZnJlZTsKLQkJfQotCX0KLQotCWRybV9jb25u ZWN0b3JfbGlzdF9pdGVyX2JlZ2luKGRldiwgJmNvbm5faXRlcik7Ci0JZHJtX2Zvcl9lYWNoX2Nv bm5lY3Rvcl9pdGVyKGNvbm4sICZjb25uX2l0ZXIpIHsKLQkJc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKmNvbm5fc3RhdGU7Ci0KLQkJY29ubl9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2Nvbm5l Y3Rvcl9zdGF0ZShzdGF0ZSwgY29ubik7Ci0JCWlmIChJU19FUlIoY29ubl9zdGF0ZSkpIHsKLQkJ CWVyciA9IFBUUl9FUlIoY29ubl9zdGF0ZSk7Ci0JCQlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9l bmQoJmNvbm5faXRlcik7Ci0JCQlnb3RvIGZyZWU7Ci0JCX0KLQl9Ci0JZHJtX2Nvbm5lY3Rvcl9s aXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwotCi0JLyogY2xlYXIgdGhlIGFjcXVpcmUgY29udGV4 dCBzbyB0aGF0IGl0IGlzbid0IGFjY2lkZW50YWxseSByZXVzZWQgKi8KLQlzdGF0ZS0+YWNxdWly ZV9jdHggPSBOVUxMOwotCi1mcmVlOgotCWlmIChlcnIgPCAwKSB7Ci0JCWRybV9hdG9taWNfc3Rh dGVfcHV0KHN0YXRlKTsKLQkJc3RhdGUgPSBFUlJfUFRSKGVycik7Ci0JfQotCi0JcmV0dXJuIHN0 YXRlOwotfQotRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9kdXBsaWNhdGVfc3RhdGUp OwotCi0vKioKLSAqIF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUg LSByZWxlYXNlIGNvbm5lY3RvciBzdGF0ZQotICogQHN0YXRlOiBjb25uZWN0b3Igc3RhdGUgb2Jq ZWN0IHRvIHJlbGVhc2UKLSAqCi0gKiBSZWxlYXNlcyBhbGwgcmVzb3VyY2VzIHN0b3JlZCBpbiB0 aGUgY29ubmVjdG9yIHN0YXRlIHdpdGhvdXQgYWN0dWFsbHkKLSAqIGZyZWVpbmcgdGhlIG1lbW9y eSBvZiB0aGUgY29ubmVjdG9yIHN0YXRlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZHJpdmVycyB0aGF0 Ci0gKiBzdWJjbGFzcyB0aGUgY29ubmVjdG9yIHN0YXRlLgotICovCi12b2lkCi1fX2RybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0 YXRlICpzdGF0ZSkKLXsKLQlpZiAoc3RhdGUtPmNydGMpCi0JCWRybV9jb25uZWN0b3JfcHV0KHN0 YXRlLT5jb25uZWN0b3IpOwotCi0JaWYgKHN0YXRlLT5jb21taXQpCi0JCWRybV9jcnRjX2NvbW1p dF9wdXQoc3RhdGUtPmNvbW1pdCk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUpOwotCi0vKioKLSAqIGRybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlIC0gZGVmYXVsdCBzdGF0ZSBkZXN0cm95IGhvb2sKLSAq IEBjb25uZWN0b3I6IGRybSBjb25uZWN0b3IKLSAqIEBzdGF0ZTogY29ubmVjdG9yIHN0YXRlIG9i amVjdCB0byByZWxlYXNlCi0gKgotICogRGVmYXVsdCBjb25uZWN0b3Igc3RhdGUgZGVzdHJveSBo b29rIGZvciBkcml2ZXJzIHdoaWNoIGRvbid0IGhhdmUgdGhlaXIgb3duCi0gKiBzdWJjbGFzc2Vk IGNvbm5lY3RvciBzdGF0ZSBzdHJ1Y3R1cmUuCi0gKi8KLXZvaWQgZHJtX2F0b21pY19oZWxwZXJf Y29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwK LQkJCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpCi17Ci0JX19kcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZShzdGF0ZSk7Ci0Ja2ZyZWUoc3RhdGUp OwotfQotRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9z dGF0ZSk7Ci0KLS8qKgotICogZHJtX2F0b21pY19oZWxwZXJfbGVnYWN5X2dhbW1hX3NldCAtIHNl dCB0aGUgbGVnYWN5IGdhbW1hIGNvcnJlY3Rpb24gdGFibGUKLSAqIEBjcnRjOiBDUlRDIG9iamVj dAotICogQHJlZDogcmVkIGNvcnJlY3Rpb24gdGFibGUKLSAqIEBncmVlbjogZ3JlZW4gY29ycmVj dGlvbiB0YWJsZQotICogQGJsdWU6IGdyZWVuIGNvcnJlY3Rpb24gdGFibGUKLSAqIEBzaXplOiBz aXplIG9mIHRoZSB0YWJsZXMKLSAqIEBjdHg6IGxvY2sgYWNxdWlyZSBjb250ZXh0Ci0gKgotICog SW1wbGVtZW50cyBzdXBwb3J0IGZvciBsZWdhY3kgZ2FtbWEgY29ycmVjdGlvbiB0YWJsZSBmb3Ig ZHJpdmVycwotICogdGhhdCBzdXBwb3J0IGNvbG9yIG1hbmFnZW1lbnQgdGhyb3VnaCB0aGUgREVH QU1NQV9MVVQvR0FNTUFfTFVUCi0gKiBwcm9wZXJ0aWVzLiBTZWUgZHJtX2NydGNfZW5hYmxlX2Nv bG9yX21nbXQoKSBhbmQgdGhlIGNvbnRhaW5pbmcgY2hhcHRlciBmb3IKLSAqIGhvdyB0aGUgYXRv bWljIGNvbG9yIG1hbmFnZW1lbnQgYW5kIGdhbW1hIHRhYmxlcyB3b3JrLgotICovCi1pbnQgZHJt X2F0b21pY19oZWxwZXJfbGVnYWN5X2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0J CQkJICAgICAgIHUxNiAqcmVkLCB1MTYgKmdyZWVuLCB1MTYgKmJsdWUsCi0JCQkJICAgICAgIHVp bnQzMl90IHNpemUsCi0JCQkJICAgICAgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAq Y3R4KQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0Jc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlOwotCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZTsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IgPSBOVUxMOwotCXN0cnVjdCBkcm1f Y29sb3JfbHV0ICpibG9iX2RhdGE7Ci0JaW50IGksIHJldCA9IDA7Ci0JYm9vbCByZXBsYWNlZDsK LQotCXN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhjcnRjLT5kZXYpOwotCWlmICghc3Rh dGUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYmxvYiA9IGRybV9wcm9wZXJ0eV9jcmVhdGVfYmxv YihkZXYsCi0JCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCkgKiBzaXplLAotCQkJCQlO VUxMKTsKLQlpZiAoSVNfRVJSKGJsb2IpKSB7Ci0JCXJldCA9IFBUUl9FUlIoYmxvYik7Ci0JCWJs b2IgPSBOVUxMOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JLyogUHJlcGFyZSBHQU1NQV9MVVQgd2l0 aCB0aGUgbGVnYWN5IHZhbHVlcy4gKi8KLQlibG9iX2RhdGEgPSBibG9iLT5kYXRhOwotCWZvciAo aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJYmxvYl9kYXRhW2ldLnJlZCA9IHJlZFtpXTsKLQkJ YmxvYl9kYXRhW2ldLmdyZWVuID0gZ3JlZW5baV07Ci0JCWJsb2JfZGF0YVtpXS5ibHVlID0gYmx1 ZVtpXTsKLQl9Ci0KLQlzdGF0ZS0+YWNxdWlyZV9jdHggPSBjdHg7Ci0JY3J0Y19zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwotCWlmIChJU19FUlIoY3J0Y19z dGF0ZSkpIHsKLQkJcmV0ID0gUFRSX0VSUihjcnRjX3N0YXRlKTsKLQkJZ290byBmYWlsOwotCX0K LQotCS8qIFJlc2V0IERFR0FNTUFfTFVUIGFuZCBDVE0gcHJvcGVydGllcy4gKi8KLQlyZXBsYWNl ZCAgPSBkcm1fcHJvcGVydHlfcmVwbGFjZV9ibG9iKCZjcnRjX3N0YXRlLT5kZWdhbW1hX2x1dCwg TlVMTCk7Ci0JcmVwbGFjZWQgfD0gZHJtX3Byb3BlcnR5X3JlcGxhY2VfYmxvYigmY3J0Y19zdGF0 ZS0+Y3RtLCBOVUxMKTsKLQlyZXBsYWNlZCB8PSBkcm1fcHJvcGVydHlfcmVwbGFjZV9ibG9iKCZj cnRjX3N0YXRlLT5nYW1tYV9sdXQsIGJsb2IpOwotCWNydGNfc3RhdGUtPmNvbG9yX21nbXRfY2hh bmdlZCB8PSByZXBsYWNlZDsKLQotCXJldCA9IGRybV9hdG9taWNfY29tbWl0KHN0YXRlKTsKLQot ZmFpbDoKLQlkcm1fYXRvbWljX3N0YXRlX3B1dChzdGF0ZSk7Ci0JZHJtX3Byb3BlcnR5X2Jsb2Jf cHV0KGJsb2IpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVs cGVyX2xlZ2FjeV9nYW1tYV9zZXQpOwotCi0vKioKLSAqIF9fZHJtX2F0b21pY19oZWxwZXJfcHJp dmF0ZV9kdXBsaWNhdGVfc3RhdGUgLSBjb3B5IGF0b21pYyBwcml2YXRlIHN0YXRlCi0gKiBAb2Jq OiBDUlRDIG9iamVjdAotICogQHN0YXRlOiBuZXcgcHJpdmF0ZSBvYmplY3Qgc3RhdGUKLSAqCi0g KiBDb3BpZXMgYXRvbWljIHN0YXRlIGZyb20gYSBwcml2YXRlIG9iamVjdHMncyBjdXJyZW50IHN0 YXRlIGFuZCByZXNldHMgaW5mZXJyZWQgdmFsdWVzLgotICogVGhpcyBpcyB1c2VmdWwgZm9yIGRy aXZlcnMgdGhhdCBzdWJjbGFzcyB0aGUgcHJpdmF0ZSBzdGF0ZS4KLSAqLwotdm9pZCBfX2RybV9h dG9taWNfaGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZh dGVfb2JqICpvYmosCi0JCQkJCQkgICAgIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqc3RhdGUp Ci17Ci0JbWVtY3B5KHN0YXRlLCBvYmotPnN0YXRlLCBzaXplb2YoKnN0YXRlKSk7Ci19Ci1FWFBP UlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfcHJpdmF0ZV9vYmpfZHVwbGljYXRlX3N0YXRl KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5j IGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVyLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42YzY0OTliOWRiZWEKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuYwpAQCAtMCwwICsx LDYwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJbnRlbCBDb3JwLgorICoKKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgor ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug c2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykg T1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhF UiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRX QVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+ CisgKiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgorICovCisKKyNpbmNs dWRlIDxkcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Ny dGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jb25u ZWN0b3IuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1f ZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZG1h LWZlbmNlLmg+CisKKy8qKgorICogRE9DOiBhdG9taWMgc3RhdGUgcmVzZXQgYW5kIGluaXRpYWxp emF0aW9uCisgKgorICogQm90aCB0aGUgZHJtIGNvcmUgYW5kIHRoZSBhdG9taWMgaGVscGVycyBh c3N1bWUgdGhhdCB0aGVyZSBpcyBhbHdheXMgdGhlIGZ1bGwKKyAqIGFuZCBjb3JyZWN0IGF0b21p YyBzb2Z0d2FyZSBzdGF0ZSBmb3IgYWxsIGNvbm5lY3RvcnMsIENSVENzIGFuZCBwbGFuZXMKKyAq IGF2YWlsYWJsZS4gV2hpY2ggaXMgYSBiaXQgYSBwcm9ibGVtIG9uIGRyaXZlciBsb2FkIGFuZCBh bHNvIGFmdGVyIHN5c3RlbQorICogc3VzcGVuZC4gT25lIHdheSB0byBzb2x2ZSB0aGlzIGlzIHRv IGhhdmUgYSBoYXJkd2FyZSBzdGF0ZSByZWFkLW91dAorICogaW5mcmFzdHJ1Y3R1cmUgd2hpY2gg cmVjb25zdHJ1Y3RzIHRoZSBmdWxsIHNvZnR3YXJlIHN0YXRlIChlLmcuIHRoZSBpOTE1CisgKiBk cml2ZXIpLgorICoKKyAqIFRoZSBzaW1wbGVyIHNvbHV0aW9uIGlzIHRvIGp1c3QgcmVzZXQgdGhl IHNvZnR3YXJlIHN0YXRlIHRvIGV2ZXJ5dGhpbmcgb2ZmLAorICogd2hpY2ggaXMgZWFzaWVzdCB0 byBkbyBieSBjYWxsaW5nIGRybV9tb2RlX2NvbmZpZ19yZXNldCgpLiBUbyBmYWNpbGl0YXRlIHRo aXMKKyAqIHRoZSBhdG9taWMgaGVscGVycyBwcm92aWRlIGRlZmF1bHQgcmVzZXQgaW1wbGVtZW50 YXRpb25zIGZvciBhbGwgaG9va3MuCisgKgorICogT24gdGhlIHVwc2lkZSB0aGUgcHJlY2lzZSBz dGF0ZSB0cmFja2luZyBvZiBhdG9taWMgc2ltcGxpZmllcyBzeXN0ZW0gc3VzcGVuZAorICogYW5k IHJlc3VtZSBhIGxvdC4gRm9yIGRyaXZlcnMgdXNpbmcgZHJtX21vZGVfY29uZmlnX3Jlc2V0KCkg YSBjb21wbGV0ZSByZWNpcGUKKyAqIGlzIGltcGxlbWVudGVkIGluIGRybV9hdG9taWNfaGVscGVy X3N1c3BlbmQoKSBhbmQgZHJtX2F0b21pY19oZWxwZXJfcmVzdW1lKCkuCisgKiBGb3Igb3RoZXIg ZHJpdmVycyB0aGUgYnVpbGRpbmcgYmxvY2tzIGFyZSBzcGxpdCBvdXQsIHNlZSB0aGUgZG9jdW1l bnRhdGlvbgorICogZm9yIHRoZXNlIGZ1bmN0aW9ucy4KKyAqLworCisvKioKKyAqIGRybV9hdG9t aWNfaGVscGVyX2NydGNfcmVzZXQgLSBkZWZhdWx0ICZkcm1fY3J0Y19mdW5jcy5yZXNldCBob29r IGZvciBDUlRDcworICogQGNydGM6IGRybSBDUlRDCisgKgorICogUmVzZXRzIHRoZSBhdG9taWMg c3RhdGUgZm9yIEBjcnRjIGJ5IGZyZWVpbmcgdGhlIHN0YXRlIHBvaW50ZXIgKHdoaWNoIG1pZ2h0 CisgKiBiZSBOVUxMLCBlLmcuIGF0IGRyaXZlciBsb2FkIHRpbWUpIGFuZCBhbGxvY2F0aW5nIGEg bmV3IGVtcHR5IHN0YXRlIG9iamVjdC4KKyAqLwordm9pZCBkcm1fYXRvbWljX2hlbHBlcl9jcnRj X3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlpZiAoY3J0Yy0+c3RhdGUpCisJCV9f ZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlKGNydGMtPnN0YXRlKTsKKworCWtm cmVlKGNydGMtPnN0YXRlKTsKKwljcnRjLT5zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpjcnRjLT5z dGF0ZSksIEdGUF9LRVJORUwpOworCisJaWYgKGNydGMtPnN0YXRlKQorCQljcnRjLT5zdGF0ZS0+ Y3J0YyA9IGNydGM7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVz ZXQpOworCisvKioKKyAqIF9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUg LSBjb3B5IGF0b21pYyBDUlRDIHN0YXRlCisgKiBAY3J0YzogQ1JUQyBvYmplY3QKKyAqIEBzdGF0 ZTogYXRvbWljIENSVEMgc3RhdGUKKyAqCisgKiBDb3BpZXMgYXRvbWljIHN0YXRlIGZyb20gYSBD UlRDJ3MgY3VycmVudCBzdGF0ZSBhbmQgcmVzZXRzIGluZmVycmVkIHZhbHVlcy4KKyAqIFRoaXMg aXMgdXNlZnVsIGZvciBkcml2ZXJzIHRoYXQgc3ViY2xhc3MgdGhlIENSVEMgc3RhdGUuCisgKi8K K3ZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCisJCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7 CisJbWVtY3B5KHN0YXRlLCBjcnRjLT5zdGF0ZSwgc2l6ZW9mKCpzdGF0ZSkpOworCisJaWYgKHN0 YXRlLT5tb2RlX2Jsb2IpCisJCWRybV9wcm9wZXJ0eV9ibG9iX2dldChzdGF0ZS0+bW9kZV9ibG9i KTsKKwlpZiAoc3RhdGUtPmRlZ2FtbWFfbHV0KQorCQlkcm1fcHJvcGVydHlfYmxvYl9nZXQoc3Rh dGUtPmRlZ2FtbWFfbHV0KTsKKwlpZiAoc3RhdGUtPmN0bSkKKwkJZHJtX3Byb3BlcnR5X2Jsb2Jf Z2V0KHN0YXRlLT5jdG0pOworCWlmIChzdGF0ZS0+Z2FtbWFfbHV0KQorCQlkcm1fcHJvcGVydHlf YmxvYl9nZXQoc3RhdGUtPmdhbW1hX2x1dCk7CisJc3RhdGUtPm1vZGVfY2hhbmdlZCA9IGZhbHNl OworCXN0YXRlLT5hY3RpdmVfY2hhbmdlZCA9IGZhbHNlOworCXN0YXRlLT5wbGFuZXNfY2hhbmdl ZCA9IGZhbHNlOworCXN0YXRlLT5jb25uZWN0b3JzX2NoYW5nZWQgPSBmYWxzZTsKKwlzdGF0ZS0+ Y29sb3JfbWdtdF9jaGFuZ2VkID0gZmFsc2U7CisJc3RhdGUtPnpwb3NfY2hhbmdlZCA9IGZhbHNl OworCXN0YXRlLT5jb21taXQgPSBOVUxMOworCXN0YXRlLT5ldmVudCA9IE5VTEw7CisJc3RhdGUt PnBhZ2VmbGlwX2ZsYWdzID0gMDsKK30KK0VYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2hlbHBl cl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSk7CisKKy8qKgorICogZHJtX2F0b21pY19oZWxwZXJfY3J0 Y19kdXBsaWNhdGVfc3RhdGUgLSBkZWZhdWx0IHN0YXRlIGR1cGxpY2F0ZSBob29rCisgKiBAY3J0 YzogZHJtIENSVEMKKyAqCisgKiBEZWZhdWx0IENSVEMgc3RhdGUgZHVwbGljYXRlIGhvb2sgZm9y IGRyaXZlcnMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KKyAqIHN1YmNsYXNzZWQgQ1JUQyBz dGF0ZSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqCitkcm1fYXRvbWlj X2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJ c3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZTsKKworCWlmIChXQVJOX09OKCFjcnRjLT5zdGF0 ZSkpCisJCXJldHVybiBOVUxMOworCisJc3RhdGUgPSBrbWFsbG9jKHNpemVvZigqc3RhdGUpLCBH RlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUpCisJCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBs aWNhdGVfc3RhdGUoY3J0Yywgc3RhdGUpOworCisJcmV0dXJuIHN0YXRlOworfQorRVhQT1JUX1NZ TUJPTChkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSk7CisKKy8qKgorICog X19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUgLSByZWxlYXNlIENSVEMgc3Rh dGUKKyAqIEBzdGF0ZTogQ1JUQyBzdGF0ZSBvYmplY3QgdG8gcmVsZWFzZQorICoKKyAqIFJlbGVh c2VzIGFsbCByZXNvdXJjZXMgc3RvcmVkIGluIHRoZSBDUlRDIHN0YXRlIHdpdGhvdXQgYWN0dWFs bHkgZnJlZWluZworICogdGhlIG1lbW9yeSBvZiB0aGUgQ1JUQyBzdGF0ZS4gVGhpcyBpcyB1c2Vm dWwgZm9yIGRyaXZlcnMgdGhhdCBzdWJjbGFzcyB0aGUKKyAqIENSVEMgc3RhdGUuCisgKi8KK3Zv aWQgX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRj X3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoc3RhdGUtPmNvbW1pdCkgeworCQkvKgorCQkgKiBJbiB0 aGUgZXZlbnQgdGhhdCBhIG5vbi1ibG9ja2luZyBjb21taXQgcmV0dXJucworCQkgKiAtRVJFU1RB UlRTWVMgYmVmb3JlIHRoZSBjb21taXRfdGFpbCB3b3JrIGlzIHF1ZXVlZCwgd2Ugd2lsbAorCQkg KiBoYXZlIGFuIGV4dHJhIHJlZmVyZW5jZSB0byB0aGUgY29tbWl0IG9iamVjdC4gUmVsZWFzZSBp dCwgaWYKKwkJICogdGhlIGV2ZW50IGhhcyBub3QgYmVlbiBjb25zdW1lZCBieSB0aGUgd29ya2Vy LgorCQkgKgorCQkgKiBzdGF0ZS0+ZXZlbnQgbWF5IGJlIGZyZWVkLCBzbyB3ZSBjYW4ndCBkaXJl Y3RseSBsb29rIGF0CisJCSAqIHN0YXRlLT5ldmVudC0+YmFzZS5jb21wbGV0aW9uLgorCQkgKi8K KwkJaWYgKHN0YXRlLT5ldmVudCAmJiBzdGF0ZS0+Y29tbWl0LT5hYm9ydF9jb21wbGV0aW9uKQor CQkJZHJtX2NydGNfY29tbWl0X3B1dChzdGF0ZS0+Y29tbWl0KTsKKworCQlrZnJlZShzdGF0ZS0+ Y29tbWl0LT5ldmVudCk7CisJCXN0YXRlLT5jb21taXQtPmV2ZW50ID0gTlVMTDsKKworCQlkcm1f Y3J0Y19jb21taXRfcHV0KHN0YXRlLT5jb21taXQpOworCX0KKworCWRybV9wcm9wZXJ0eV9ibG9i X3B1dChzdGF0ZS0+bW9kZV9ibG9iKTsKKwlkcm1fcHJvcGVydHlfYmxvYl9wdXQoc3RhdGUtPmRl Z2FtbWFfbHV0KTsKKwlkcm1fcHJvcGVydHlfYmxvYl9wdXQoc3RhdGUtPmN0bSk7CisJZHJtX3By b3BlcnR5X2Jsb2JfcHV0KHN0YXRlLT5nYW1tYV9sdXQpOworfQorRVhQT1JUX1NZTUJPTChfX2Ry bV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSk7CisKKy8qKgorICogZHJtX2F0b21p Y19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlIC0gZGVmYXVsdCBzdGF0ZSBkZXN0cm95IGhvb2sK KyAqIEBjcnRjOiBkcm0gQ1JUQworICogQHN0YXRlOiBDUlRDIHN0YXRlIG9iamVjdCB0byByZWxl YXNlCisgKgorICogRGVmYXVsdCBDUlRDIHN0YXRlIGRlc3Ryb3kgaG9vayBmb3IgZHJpdmVycyB3 aGljaCBkb24ndCBoYXZlIHRoZWlyIG93bgorICogc3ViY2xhc3NlZCBDUlRDIHN0YXRlIHN0cnVj dHVyZS4KKyAqLwordm9pZCBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3Ry dWN0IGRybV9jcnRjICpjcnRjLAorCQkJCQkgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUp Cit7CisJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RhdGUpOworCWtm cmVlKHN0YXRlKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0 cm95X3N0YXRlKTsKKworLyoqCisgKiBfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0IC0g cmVzZXRzIHBsYW5lcyBzdGF0ZSB0byBkZWZhdWx0IHZhbHVlcworICogQHBsYW5lOiBwbGFuZSBv YmplY3QsIG11c3Qgbm90IGJlIE5VTEwKKyAqIEBzdGF0ZTogYXRvbWljIHBsYW5lIHN0YXRlLCBt dXN0IG5vdCBiZSBOVUxMCisgKgorICogSW5pdGlhbGl6ZXMgcGxhbmUgc3RhdGUgdG8gZGVmYXVs dC4gVGhpcyBpcyB1c2VmdWwgZm9yIGRyaXZlcnMgdGhhdCBzdWJjbGFzcworICogdGhlIHBsYW5l IHN0YXRlLgorICovCit2b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0 ZSkKK3sKKwlzdGF0ZS0+cGxhbmUgPSBwbGFuZTsKKwlzdGF0ZS0+cm90YXRpb24gPSBEUk1fTU9E RV9ST1RBVEVfMDsKKworCS8qIFJlc2V0IHRoZSBhbHBoYSB2YWx1ZSB0byBmdWxseSBvcGFxdWUg aWYgaXQgbWF0dGVycyAqLworCWlmIChwbGFuZS0+YWxwaGFfcHJvcGVydHkpCisJCXN0YXRlLT5h bHBoYSA9IHBsYW5lLT5hbHBoYV9wcm9wZXJ0eS0+dmFsdWVzWzFdOworCXN0YXRlLT5waXhlbF9i bGVuZF9tb2RlID0gRFJNX01PREVfQkxFTkRfUFJFTVVMVEk7CisKKwlwbGFuZS0+c3RhdGUgPSBz dGF0ZTsKK30KK0VYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldCk7 CisKKy8qKgorICogZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQgLSBkZWZhdWx0ICZkcm1f cGxhbmVfZnVuY3MucmVzZXQgaG9vayBmb3IgcGxhbmVzCisgKiBAcGxhbmU6IGRybSBwbGFuZQor ICoKKyAqIFJlc2V0cyB0aGUgYXRvbWljIHN0YXRlIGZvciBAcGxhbmUgYnkgZnJlZWluZyB0aGUg c3RhdGUgcG9pbnRlciAod2hpY2ggbWlnaHQKKyAqIGJlIE5VTEwsIGUuZy4gYXQgZHJpdmVyIGxv YWQgdGltZSkgYW5kIGFsbG9jYXRpbmcgYSBuZXcgZW1wdHkgc3RhdGUgb2JqZWN0LgorICovCit2 b2lkIGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l KQoreworCWlmIChwbGFuZS0+c3RhdGUpCisJCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVz dHJveV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCisJa2ZyZWUocGxhbmUtPnN0YXRlKTsKKwlwbGFu ZS0+c3RhdGUgPSBremFsbG9jKHNpemVvZigqcGxhbmUtPnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKHBsYW5lLT5zdGF0ZSkKKwkJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldChwbGFu ZSwgcGxhbmUtPnN0YXRlKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfcGxh bmVfcmVzZXQpOworCisvKioKKyAqIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRl X3N0YXRlIC0gY29weSBhdG9taWMgcGxhbmUgc3RhdGUKKyAqIEBwbGFuZTogcGxhbmUgb2JqZWN0 CisgKiBAc3RhdGU6IGF0b21pYyBwbGFuZSBzdGF0ZQorICoKKyAqIENvcGllcyBhdG9taWMgc3Rh dGUgZnJvbSBhIHBsYW5lJ3MgY3VycmVudCBzdGF0ZS4gVGhpcyBpcyB1c2VmdWwgZm9yCisgKiBk cml2ZXJzIHRoYXQgc3ViY2xhc3MgdGhlIHBsYW5lIHN0YXRlLgorICovCit2b2lkIF9fZHJtX2F0 b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAorCQkJCQkgICAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJbWVtY3B5 KHN0YXRlLCBwbGFuZS0+c3RhdGUsIHNpemVvZigqc3RhdGUpKTsKKworCWlmIChzdGF0ZS0+ZmIp CisJCWRybV9mcmFtZWJ1ZmZlcl9nZXQoc3RhdGUtPmZiKTsKKworCXN0YXRlLT5mZW5jZSA9IE5V TEw7CisJc3RhdGUtPmNvbW1pdCA9IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21p Y19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKTsKKworLyoqCisgKiBkcm1fYXRvbWljX2hl bHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUgLSBkZWZhdWx0IHN0YXRlIGR1cGxpY2F0ZSBob29r CisgKiBAcGxhbmU6IGRybSBwbGFuZQorICoKKyAqIERlZmF1bHQgcGxhbmUgc3RhdGUgZHVwbGlj YXRlIGhvb2sgZm9yIGRyaXZlcnMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KKyAqIHN1YmNs YXNzZWQgcGxhbmUgc3RhdGUgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICoKK2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZTsKKworCWlmIChX QVJOX09OKCFwbGFuZS0+c3RhdGUpKQorCQlyZXR1cm4gTlVMTDsKKworCXN0YXRlID0ga21hbGxv YyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlKQorCQlfX2RybV9hdG9t aWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSwgc3RhdGUpOworCisJcmV0dXJu IHN0YXRlOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNh dGVfc3RhdGUpOworCisvKioKKyAqIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9z dGF0ZSAtIHJlbGVhc2UgcGxhbmUgc3RhdGUKKyAqIEBzdGF0ZTogcGxhbmUgc3RhdGUgb2JqZWN0 IHRvIHJlbGVhc2UKKyAqCisgKiBSZWxlYXNlcyBhbGwgcmVzb3VyY2VzIHN0b3JlZCBpbiB0aGUg cGxhbmUgc3RhdGUgd2l0aG91dCBhY3R1YWxseSBmcmVlaW5nCisgKiB0aGUgbWVtb3J5IG9mIHRo ZSBwbGFuZSBzdGF0ZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGRyaXZlcnMgdGhhdCBzdWJjbGFzcyB0 aGUKKyAqIHBsYW5lIHN0YXRlLgorICovCit2b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVf ZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoc3Rh dGUtPmZiKQorCQlkcm1fZnJhbWVidWZmZXJfcHV0KHN0YXRlLT5mYik7CisKKwlpZiAoc3RhdGUt PmZlbmNlKQorCQlkbWFfZmVuY2VfcHV0KHN0YXRlLT5mZW5jZSk7CisKKwlpZiAoc3RhdGUtPmNv bW1pdCkKKwkJZHJtX2NydGNfY29tbWl0X3B1dChzdGF0ZS0+Y29tbWl0KTsKK30KK0VYUE9SVF9T WU1CT0woX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKTsKKworLyoqCisg KiBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlIC0gZGVmYXVsdCBzdGF0ZSBk ZXN0cm95IGhvb2sKKyAqIEBwbGFuZTogZHJtIHBsYW5lCisgKiBAc3RhdGU6IHBsYW5lIHN0YXRl IG9iamVjdCB0byByZWxlYXNlCisgKgorICogRGVmYXVsdCBwbGFuZSBzdGF0ZSBkZXN0cm95IGhv b2sgZm9yIGRyaXZlcnMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KKyAqIHN1YmNsYXNzZWQg cGxhbmUgc3RhdGUgc3RydWN0dXJlLgorICovCit2b2lkIGRybV9hdG9taWNfaGVscGVyX3BsYW5l X2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJCSAgIHN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVz dHJveV9zdGF0ZShzdGF0ZSk7CisJa2ZyZWUoc3RhdGUpOworfQorRVhQT1JUX1NZTUJPTChkcm1f YXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKTsKKworLyoqCisgKiBfX2RybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCAtIHJlc2V0IHN0YXRlIG9uIGNvbm5lY3RvcgorICog QGNvbm5lY3RvcjogZHJtIGNvbm5lY3RvcgorICogQGNvbm5fc3RhdGU6IGNvbm5lY3RvciBzdGF0 ZSB0byBhc3NpZ24KKyAqCisgKiBJbml0aWFsaXplcyB0aGUgbmV3bHkgYWxsb2NhdGVkIEBjb25u X3N0YXRlIGFuZCBhc3NpZ25zIGl0IHRvCisgKiB0aGUgJmRybV9jb25lY3Rvci0+c3RhdGUgcG9p bnRlciBvZiBAY29ubmVjdG9yLCB1c3VhbGx5IHJlcXVpcmVkIHdoZW4KKyAqIGluaXRpYWxpemlu ZyB0aGUgZHJpdmVycyBvciB3aGVuIGNhbGxlZCBmcm9tIHRoZSAmZHJtX2Nvbm5lY3Rvcl9mdW5j cy5yZXNldAorICogaG9vay4KKyAqCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZHJpdmVycyB0aGF0 IHN1YmNsYXNzIHRoZSBjb25uZWN0b3Igc3RhdGUuCisgKi8KK3ZvaWQKK19fZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJ CQkJICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQoreworCWlmIChj b25uX3N0YXRlKQorCQljb25uX3N0YXRlLT5jb25uZWN0b3IgPSBjb25uZWN0b3I7CisKKwljb25u ZWN0b3ItPnN0YXRlID0gY29ubl9zdGF0ZTsKK30KK0VYUE9SVF9TWU1CT0woX19kcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfcmVzZXQpOworCisvKioKKyAqIGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9yZXNldCAtIGRlZmF1bHQgJmRybV9jb25uZWN0b3JfZnVuY3MucmVzZXQgaG9vayBm b3IgY29ubmVjdG9ycworICogQGNvbm5lY3RvcjogZHJtIGNvbm5lY3RvcgorICoKKyAqIFJlc2V0 cyB0aGUgYXRvbWljIHN0YXRlIGZvciBAY29ubmVjdG9yIGJ5IGZyZWVpbmcgdGhlIHN0YXRlIHBv aW50ZXIgKHdoaWNoCisgKiBtaWdodCBiZSBOVUxMLCBlLmcuIGF0IGRyaXZlciBsb2FkIHRpbWUp IGFuZCBhbGxvY2F0aW5nIGEgbmV3IGVtcHR5IHN0YXRlCisgKiBvYmplY3QuCisgKi8KK3ZvaWQg ZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUgPQor CQlremFsbG9jKHNpemVvZigqY29ubl9zdGF0ZSksIEdGUF9LRVJORUwpOworCisJaWYgKGNvbm5l Y3Rvci0+c3RhdGUpCisJCV9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3Rh dGUoY29ubmVjdG9yLT5zdGF0ZSk7CisKKwlrZnJlZShjb25uZWN0b3ItPnN0YXRlKTsKKwlfX2Ry bV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldChjb25uZWN0b3IsIGNvbm5fc3RhdGUpOwor fQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQpOworCisv KioKKyAqIF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSAtIGNv cHkgYXRvbWljIGNvbm5lY3RvciBzdGF0ZQorICogQGNvbm5lY3RvcjogY29ubmVjdG9yIG9iamVj dAorICogQHN0YXRlOiBhdG9taWMgY29ubmVjdG9yIHN0YXRlCisgKgorICogQ29waWVzIGF0b21p YyBzdGF0ZSBmcm9tIGEgY29ubmVjdG9yJ3MgY3VycmVudCBzdGF0ZS4gVGhpcyBpcyB1c2VmdWwg Zm9yCisgKiBkcml2ZXJzIHRoYXQgc3ViY2xhc3MgdGhlIGNvbm5lY3RvciBzdGF0ZS4KKyAqLwor dm9pZAorX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqc3RhdGUpCit7CisJbWVtY3B5KHN0YXRlLCBjb25uZWN0b3ItPnN0YXRlLCBzaXpl b2YoKnN0YXRlKSk7CisJaWYgKHN0YXRlLT5jcnRjKQorCQlkcm1fY29ubmVjdG9yX2dldChjb25u ZWN0b3IpOworCXN0YXRlLT5jb21taXQgPSBOVUxMOworCisJLyogRG9uJ3QgY29weSBvdmVyIGEg d3JpdGViYWNrIGpvYiwgdGhleSBhcmUgdXNlZCBvbmx5IG9uY2UgKi8KKwlzdGF0ZS0+d3JpdGVi YWNrX2pvYiA9IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSk7CisKKy8qKgorICogZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSAtIGRlZmF1bHQgc3RhdGUgZHVwbGljYXRlIGhvb2sKKyAq IEBjb25uZWN0b3I6IGRybSBjb25uZWN0b3IKKyAqCisgKiBEZWZhdWx0IGNvbm5lY3RvciBzdGF0 ZSBkdXBsaWNhdGUgaG9vayBmb3IgZHJpdmVycyB3aGljaCBkb24ndCBoYXZlIHRoZWlyIG93bgor ICogc3ViY2xhc3NlZCBjb25uZWN0b3Igc3RhdGUgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqCitkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRl X3N0YXRlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9j b25uZWN0b3Jfc3RhdGUgKnN0YXRlOworCisJaWYgKFdBUk5fT04oIWNvbm5lY3Rvci0+c3RhdGUp KQorCQlyZXR1cm4gTlVMTDsKKworCXN0YXRlID0ga21hbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKHN0YXRlKQorCQlfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9k dXBsaWNhdGVfc3RhdGUoY29ubmVjdG9yLCBzdGF0ZSk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CitF WFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUp OworCisvKioKKyAqIGRybV9hdG9taWNfaGVscGVyX2R1cGxpY2F0ZV9zdGF0ZSAtIGR1cGxpY2F0 ZSBhbiBhdG9taWMgc3RhdGUgb2JqZWN0CisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAY3R4OiBs b2NrIGFjcXVpc2l0aW9uIGNvbnRleHQKKyAqCisgKiBNYWtlcyBhIGNvcHkgb2YgdGhlIGN1cnJl bnQgYXRvbWljIHN0YXRlIGJ5IGxvb3Bpbmcgb3ZlciBhbGwgb2JqZWN0cyBhbmQKKyAqIGR1cGxp Y2F0aW5nIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGVzLiBUaGlzIGlzIHVzZWQgZm9yIGV4YW1wbGUg Ynkgc3VzcGVuZC8KKyAqIHJlc3VtZSBzdXBwb3J0IGNvZGUgdG8gc2F2ZSB0aGUgc3RhdGUgcHJp b3IgdG8gc3VzcGVuZCBzdWNoIHRoYXQgaXQgY2FuCisgKiBiZSByZXN0b3JlZCB1cG9uIHJlc3Vt ZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyB0cmVhdHMgYXRvbWljIHN0YXRlIGFzIHBlcnNpc3Rl bnQgYmV0d2VlbiBzYXZlIGFuZCByZXN0b3JlLgorICogRHJpdmVycyBtdXN0IG1ha2Ugc3VyZSB0 aGF0IHRoaXMgaXMgcG9zc2libGUgYW5kIHdvbid0IHJlc3VsdCBpbiBjb25mdXNpb24KKyAqIG9y IGVycm9uZW91cyBiZWhhdmlvdXIuCisgKgorICogTm90ZSB0aGF0IGlmIGNhbGxlcnMgaGF2ZW4n dCBhbHJlYWR5IGFjcXVpcmVkIGFsbCBtb2Rlc2V0IGxvY2tzIHRoaXMgbWlnaHQKKyAqIHJldHVy biAtRURFQURMSywgd2hpY2ggbXVzdCBiZSBoYW5kbGVkIGJ5IGNhbGxpbmcgZHJtX21vZGVzZXRf YmFja29mZigpLgorICoKKyAqIFJldHVybnM6CisgKiBBIHBvaW50ZXIgdG8gdGhlIGNvcHkgb2Yg dGhlIGF0b21pYyBzdGF0ZSBvYmplY3Qgb24gc3VjY2VzcyBvciBhbgorICogRVJSX1BUUigpLWVu Y29kZWQgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICoKKyAqIFNlZSBhbHNvOgorICogZHJtX2F0 b21pY19oZWxwZXJfc3VzcGVuZCgpLCBkcm1fYXRvbWljX2hlbHBlcl9yZXN1bWUoKQorICovCitz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqCitkcm1fYXRvbWljX2hlbHBlcl9kdXBsaWNhdGVfc3Rh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1 aXJlX2N0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXIg Y29ubl9pdGVyOworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOworCXN0cnVjdCBkcm1fY3J0YyAq Y3J0YzsKKwlpbnQgZXJyID0gMDsKKworCXN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhk ZXYpOworCWlmICghc3RhdGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJc3RhdGUt PmFjcXVpcmVfY3R4ID0gY3R4OworCisJZHJtX2Zvcl9lYWNoX2NydGMoY3J0YywgZGV2KSB7CisJ CXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKworCQljcnRjX3N0YXRlID0gZHJt X2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7CisJCWlmIChJU19FUlIoY3J0Y19z dGF0ZSkpIHsKKwkJCWVyciA9IFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisJCQlnb3RvIGZyZWU7CisJ CX0KKwl9CisKKwlkcm1fZm9yX2VhY2hfcGxhbmUocGxhbmUsIGRldikgeworCQlzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQlwbGFuZV9zdGF0ZSA9IGRybV9hdG9taWNf Z2V0X3BsYW5lX3N0YXRlKHN0YXRlLCBwbGFuZSk7CisJCWlmIChJU19FUlIocGxhbmVfc3RhdGUp KSB7CisJCQllcnIgPSBQVFJfRVJSKHBsYW5lX3N0YXRlKTsKKwkJCWdvdG8gZnJlZTsKKwkJfQor CX0KKworCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2luKGRldiwgJmNvbm5faXRlcik7CisJ ZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm4sICZjb25uX2l0ZXIpIHsKKwkJc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7CisKKwkJY29ubl9zdGF0ZSA9IGRybV9h dG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubik7CisJCWlmIChJU19FUlIoY29u bl9zdGF0ZSkpIHsKKwkJCWVyciA9IFBUUl9FUlIoY29ubl9zdGF0ZSk7CisJCQlkcm1fY29ubmVj dG9yX2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7CisJCQlnb3RvIGZyZWU7CisJCX0KKwl9CisJ ZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOworCisJLyogY2xlYXIgdGhl IGFjcXVpcmUgY29udGV4dCBzbyB0aGF0IGl0IGlzbid0IGFjY2lkZW50YWxseSByZXVzZWQgKi8K KwlzdGF0ZS0+YWNxdWlyZV9jdHggPSBOVUxMOworCitmcmVlOgorCWlmIChlcnIgPCAwKSB7CisJ CWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKKwkJc3RhdGUgPSBFUlJfUFRSKGVycik7CisJ fQorCisJcmV0dXJuIHN0YXRlOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9k dXBsaWNhdGVfc3RhdGUpOworCisvKioKKyAqIF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9y X2Rlc3Ryb3lfc3RhdGUgLSByZWxlYXNlIGNvbm5lY3RvciBzdGF0ZQorICogQHN0YXRlOiBjb25u ZWN0b3Igc3RhdGUgb2JqZWN0IHRvIHJlbGVhc2UKKyAqCisgKiBSZWxlYXNlcyBhbGwgcmVzb3Vy Y2VzIHN0b3JlZCBpbiB0aGUgY29ubmVjdG9yIHN0YXRlIHdpdGhvdXQgYWN0dWFsbHkKKyAqIGZy ZWVpbmcgdGhlIG1lbW9yeSBvZiB0aGUgY29ubmVjdG9yIHN0YXRlLiBUaGlzIGlzIHVzZWZ1bCBm b3IgZHJpdmVycyB0aGF0CisgKiBzdWJjbGFzcyB0aGUgY29ubmVjdG9yIHN0YXRlLgorICovCit2 b2lkCitfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKHN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoc3RhdGUtPmNydGMpCisJCWRybV9j b25uZWN0b3JfcHV0KHN0YXRlLT5jb25uZWN0b3IpOworCisJaWYgKHN0YXRlLT5jb21taXQpCisJ CWRybV9jcnRjX2NvbW1pdF9wdXQoc3RhdGUtPmNvbW1pdCk7Cit9CitFWFBPUlRfU1lNQk9MKF9f ZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUpOworCisvKioKKyAqIGRy bV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlIC0gZGVmYXVsdCBzdGF0ZSBk ZXN0cm95IGhvb2sKKyAqIEBjb25uZWN0b3I6IGRybSBjb25uZWN0b3IKKyAqIEBzdGF0ZTogY29u bmVjdG9yIHN0YXRlIG9iamVjdCB0byByZWxlYXNlCisgKgorICogRGVmYXVsdCBjb25uZWN0b3Ig c3RhdGUgZGVzdHJveSBob29rIGZvciBkcml2ZXJzIHdoaWNoIGRvbid0IGhhdmUgdGhlaXIgb3du CisgKiBzdWJjbGFzc2VkIGNvbm5lY3RvciBzdGF0ZSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKKwkJCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUp Cit7CisJX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZShzdGF0ZSk7 CisJa2ZyZWUoc3RhdGUpOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9jb25u ZWN0b3JfZGVzdHJveV9zdGF0ZSk7CisKKy8qKgorICogZHJtX2F0b21pY19oZWxwZXJfbGVnYWN5 X2dhbW1hX3NldCAtIHNldCB0aGUgbGVnYWN5IGdhbW1hIGNvcnJlY3Rpb24gdGFibGUKKyAqIEBj cnRjOiBDUlRDIG9iamVjdAorICogQHJlZDogcmVkIGNvcnJlY3Rpb24gdGFibGUKKyAqIEBncmVl bjogZ3JlZW4gY29ycmVjdGlvbiB0YWJsZQorICogQGJsdWU6IGdyZWVuIGNvcnJlY3Rpb24gdGFi bGUKKyAqIEBzaXplOiBzaXplIG9mIHRoZSB0YWJsZXMKKyAqIEBjdHg6IGxvY2sgYWNxdWlyZSBj b250ZXh0CisgKgorICogSW1wbGVtZW50cyBzdXBwb3J0IGZvciBsZWdhY3kgZ2FtbWEgY29ycmVj dGlvbiB0YWJsZSBmb3IgZHJpdmVycworICogdGhhdCBzdXBwb3J0IGNvbG9yIG1hbmFnZW1lbnQg dGhyb3VnaCB0aGUgREVHQU1NQV9MVVQvR0FNTUFfTFVUCisgKiBwcm9wZXJ0aWVzLiBTZWUgZHJt X2NydGNfZW5hYmxlX2NvbG9yX21nbXQoKSBhbmQgdGhlIGNvbnRhaW5pbmcgY2hhcHRlciBmb3IK KyAqIGhvdyB0aGUgYXRvbWljIGNvbG9yIG1hbmFnZW1lbnQgYW5kIGdhbW1hIHRhYmxlcyB3b3Jr LgorICovCitpbnQgZHJtX2F0b21pY19oZWxwZXJfbGVnYWN5X2dhbW1hX3NldChzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCisJCQkJICAgICAgIHUxNiAqcmVkLCB1MTYgKmdyZWVuLCB1MTYgKmJsdWUs CisJCQkJICAgICAgIHVpbnQzMl90IHNpemUsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fbW9kZXNl dF9hY3F1aXJlX2N0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5k ZXY7CisJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCXN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IgPSBOVUxM OworCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpibG9iX2RhdGE7CisJaW50IGksIHJldCA9IDA7CisJ Ym9vbCByZXBsYWNlZDsKKworCXN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhjcnRjLT5k ZXYpOworCWlmICghc3RhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJYmxvYiA9IGRybV9wcm9w ZXJ0eV9jcmVhdGVfYmxvYihkZXYsCisJCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCkg KiBzaXplLAorCQkJCQlOVUxMKTsKKwlpZiAoSVNfRVJSKGJsb2IpKSB7CisJCXJldCA9IFBUUl9F UlIoYmxvYik7CisJCWJsb2IgPSBOVUxMOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogUHJlcGFy ZSBHQU1NQV9MVVQgd2l0aCB0aGUgbGVnYWN5IHZhbHVlcy4gKi8KKwlibG9iX2RhdGEgPSBibG9i LT5kYXRhOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJYmxvYl9kYXRhW2ldLnJl ZCA9IHJlZFtpXTsKKwkJYmxvYl9kYXRhW2ldLmdyZWVuID0gZ3JlZW5baV07CisJCWJsb2JfZGF0 YVtpXS5ibHVlID0gYmx1ZVtpXTsKKwl9CisKKwlzdGF0ZS0+YWNxdWlyZV9jdHggPSBjdHg7CisJ Y3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOworCWlm IChJU19FUlIoY3J0Y19zdGF0ZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihjcnRjX3N0YXRlKTsKKwkJ Z290byBmYWlsOworCX0KKworCS8qIFJlc2V0IERFR0FNTUFfTFVUIGFuZCBDVE0gcHJvcGVydGll cy4gKi8KKwlyZXBsYWNlZCAgPSBkcm1fcHJvcGVydHlfcmVwbGFjZV9ibG9iKCZjcnRjX3N0YXRl LT5kZWdhbW1hX2x1dCwgTlVMTCk7CisJcmVwbGFjZWQgfD0gZHJtX3Byb3BlcnR5X3JlcGxhY2Vf YmxvYigmY3J0Y19zdGF0ZS0+Y3RtLCBOVUxMKTsKKwlyZXBsYWNlZCB8PSBkcm1fcHJvcGVydHlf cmVwbGFjZV9ibG9iKCZjcnRjX3N0YXRlLT5nYW1tYV9sdXQsIGJsb2IpOworCWNydGNfc3RhdGUt PmNvbG9yX21nbXRfY2hhbmdlZCB8PSByZXBsYWNlZDsKKworCXJldCA9IGRybV9hdG9taWNfY29t bWl0KHN0YXRlKTsKKworZmFpbDoKKwlkcm1fYXRvbWljX3N0YXRlX3B1dChzdGF0ZSk7CisJZHJt X3Byb3BlcnR5X2Jsb2JfcHV0KGJsb2IpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9M KGRybV9hdG9taWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQpOworCisvKioKKyAqIF9fZHJtX2F0 b21pY19oZWxwZXJfcHJpdmF0ZV9kdXBsaWNhdGVfc3RhdGUgLSBjb3B5IGF0b21pYyBwcml2YXRl IHN0YXRlCisgKiBAb2JqOiBDUlRDIG9iamVjdAorICogQHN0YXRlOiBuZXcgcHJpdmF0ZSBvYmpl Y3Qgc3RhdGUKKyAqCisgKiBDb3BpZXMgYXRvbWljIHN0YXRlIGZyb20gYSBwcml2YXRlIG9iamVj dHMncyBjdXJyZW50IHN0YXRlIGFuZCByZXNldHMgaW5mZXJyZWQgdmFsdWVzLgorICogVGhpcyBp cyB1c2VmdWwgZm9yIGRyaXZlcnMgdGhhdCBzdWJjbGFzcyB0aGUgcHJpdmF0ZSBzdGF0ZS4KKyAq Lwordm9pZCBfX2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShz dHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmosCisJCQkJCQkgICAgIHN0cnVjdCBkcm1fcHJpdmF0 ZV9zdGF0ZSAqc3RhdGUpCit7CisJbWVtY3B5KHN0YXRlLCBvYmotPnN0YXRlLCBzaXplb2YoKnN0 YXRlKSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfcHJpdmF0ZV9vYmpf ZHVwbGljYXRlX3N0YXRlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9hdG9taWNfaGVs cGVyLmggYi9pbmNsdWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oCmluZGV4IDI3YWVmOTFjYTFj My4uNmQ2NDQ4Yzk3Y2UwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fYXRvbWljX2hlbHBl ci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9hdG9taWNfaGVscGVyLmgKQEAgLTMxLDYgKzMxLDcg QEAKICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KICNpbmNsdWRlIDxkcm0vZHJtX21vZGVzZXRf aGVscGVyX3Z0YWJsZXMuaD4KICNpbmNsdWRlIDxkcm0vZHJtX21vZGVzZXRfaGVscGVyLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2tl cm5lbC5oPgogCiBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZTsKQEAgLTE0NSw0OSArMTQ2LDYgQEAg aW50IGRybV9hdG9taWNfaGVscGVyX3BhZ2VfZmxpcF90YXJnZXQoCiAJCQkJdWludDMyX3QgdGFy Z2V0LAogCQkJCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KTsKIAotLyogZGVm YXVsdCBpbXBsZW1lbnRhdGlvbnMgZm9yIHN0YXRlIGhhbmRsaW5nICovCi12b2lkIGRybV9hdG9t aWNfaGVscGVyX2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKLXZvaWQgX19kcm1f YXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMs Ci0JCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpOwotc3RydWN0IGRybV9j cnRjX3N0YXRlICoKLWRybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVj dCBkcm1fY3J0YyAqY3J0Yyk7Ci12b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95 X3N0YXRlKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpOwotdm9pZCBkcm1fYXRvbWljX2hl bHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJCQkgIHN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpOwotCi12b2lkIF9fZHJtX2F0b21pY19oZWxwZXJf cGxhbmVfcmVzZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCQkJICAgICBzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpzdGF0ZSk7Ci12b2lkIGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0 KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKLXZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9wbGFu ZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCQkJCSAgICAgICBz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Ci1zdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICoK LWRybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSk7Ci12b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Ci12b2lkIGRybV9hdG9taWNfaGVscGVyX3Bs YW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCQkJCSAgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpOwotCi12b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQkJCSBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSk7Ci12b2lkIGRybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKLXZv aWQKLV9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJCQkgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqc3RhdGUpOwotc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKgotZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKTsKLXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICoKLWRybV9hdG9taWNfaGVscGVyX2R1 cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGRybV9t b2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpOwotdm9pZAotX19kcm1fYXRvbWljX2hlbHBlcl9jb25u ZWN0b3JfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpOwot dm9pZCBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl ICpzdGF0ZSk7Ci1pbnQgZHJtX2F0b21pY19oZWxwZXJfbGVnYWN5X2dhbW1hX3NldChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCi0JCQkJICAgICAgIHUxNiAqcmVkLCB1MTYgKmdyZWVuLCB1MTYgKmJs dWUsCi0JCQkJICAgICAgIHVpbnQzMl90IHNpemUsCi0JCQkJICAgICAgIHN0cnVjdCBkcm1fbW9k ZXNldF9hY3F1aXJlX2N0eCAqY3R4KTsKLXZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9wcml2YXRl X29ial9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqLAotCQkJCQkJ ICAgICBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKTsKLQogLyoqCiAgKiBkcm1fYXRv bWljX2NydGNfZm9yX2VhY2hfcGxhbmUgLSBpdGVyYXRlIG92ZXIgcGxhbmVzIGN1cnJlbnRseSBh dHRhY2hlZCB0byBDUlRDCiAgKiBAcGxhbmU6IHRoZSBsb29wIGN1cnNvcgpkaWZmIC0tZ2l0IGEv aW5jbHVkZS9kcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9h dG9taWNfc3RhdGVfaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi41YjgyY2NmZGI1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9kcm1fYXRv bWljX3N0YXRlX2hlbHBlci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp IDIwMTggSW50ZWwgQ29ycC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAq IE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogUm9i IENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgorICogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZl dHRlckBmZndsbC5jaD4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0 IGRybV9jcnRjOworc3RydWN0IGRybV9jcnRjX3N0YXRlOworc3RydWN0IGRybV9wbGFuZTsKK3N0 cnVjdCBkcm1fcGxhbmVfc3RhdGU7CitzdHJ1Y3QgZHJtX2Nvbm5lY3RvcjsKK3N0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlOworc3RydWN0IGRybV9wcml2YXRlX29iajsKK3N0cnVjdCBkcm1fcHJp dmF0ZV9zdGF0ZTsKK3N0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eDsKK3N0cnVjdCBkcm1f ZGV2aWNlOworCit2b2lkIGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQoc3RydWN0IGRybV9j cnRjICpjcnRjKTsKK3ZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0 ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqc3RhdGUpOworc3RydWN0IGRybV9jcnRjX3N0YXRlICoKK2RybV9hdG9taWNfaGVscGVyX2Ny dGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lkIF9fZHJtX2F0 b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3Rh dGUpOwordm9pZCBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRy bV9jcnRjICpjcnRjLAorCQkJCQkgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpOworCit2 b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cit2b2lkIGRybV9h dG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKK3ZvaWQg X19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCisJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Citz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICoKK2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0 ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSk7Cit2b2lkIF9fZHJtX2F0b21pY19oZWxw ZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cit2 b2lkIGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCisJCQkJCSAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpOworCit2b2lk IF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCisJCQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0 ZSk7Cit2b2lkIGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKTsKK3ZvaWQKK19fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9y X2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQkg ICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpOworc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKgorZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZShz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKK3N0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICoKK2RybV9hdG9taWNfaGVscGVyX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAorCQkJCSAgc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgpOwordm9pZAor X19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqc3RhdGUpOwordm9pZCBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jf ZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQkgIHN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSk7CitpbnQgZHJtX2F0b21pY19oZWxwZXJf bGVnYWN5X2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAgIHUxNiAq cmVkLCB1MTYgKmdyZWVuLCB1MTYgKmJsdWUsCisJCQkJICAgICAgIHVpbnQzMl90IHNpemUsCisJ CQkJICAgICAgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KTsKK3ZvaWQgX19k cm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9w cml2YXRlX29iaiAqb2JqLAorCQkJCQkJICAgICBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0 YXRlKTsKLS0gCjIuMTguMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==