From mboxrd@z Thu Jan 1 00:00:00 1970 From: John.C.Harrison@Intel.com Subject: [PATCH v4 07/38] drm/i915: Start of GPU scheduler Date: Mon, 11 Jan 2016 18:42:36 +0000 Message-ID: <1452537788-32136-8-git-send-email-John.C.Harrison@Intel.com> References: <1448278774-31376-1-git-send-email-John.C.Harrison@Intel.com> <1452537788-32136-1-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id F080689CF2 for ; Mon, 11 Jan 2016 10:43:17 -0800 (PST) In-Reply-To: <1452537788-32136-1-git-send-email-John.C.Harrison@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 RnJvbTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KCkluaXRpYWwg Y3JlYXRpb24gb2Ygc2NoZWR1bGVyIHNvdXJjZSBmaWxlcy4gTm90ZSB0aGF0IHRoaXMgcGF0Y2gK aW1wbGVtZW50cyBtb3N0IG9mIHRoZSBzY2hlZHVsZXIgZnVuY3Rpb25hbGl0eSBidXQgZG9lcyBu b3QgaG9vayBpdCBpbgp0byB0aGUgZHJpdmVyIHlldC4gSXQgYWxzbyBsZWF2ZXMgdGhlIHNjaGVk dWxlciBjb2RlIGluICdwYXNzIHRocm91Z2gnCm1vZGUgc28gdGhhdCBldmVuIHdoZW4gaXQgaXMg aG9va2VkIGluLCBpdCB3aWxsIG5vdCBhY3R1YWxseSBkbyB2ZXJ5Cm11Y2guIFRoaXMgYWxsb3dz IHRoZSBob29rcyB0byBiZSBhZGRlZCBvbmUgYXQgYSB0aW1lIGluIGJpdGUgc2l6ZQpjaHVua3Mg YW5kIG9ubHkgd2hlbiB0aGUgc2NoZWR1bGVyIGlzIGZpbmFsbHkgZW5hYmxlZCBhdCB0aGUgZW5k IGRvZXMKYW55dGhpbmcgc3RhcnQgaGFwcGVuaW5nLgoKVGhlIGdlbmVyYWwgdGhlb3J5IG9mIG9w ZXJhdGlvbiBpcyB0aGF0IHdoZW4gYmF0Y2ggYnVmZmVycyBhcmUKc3VibWl0dGVkIHRvIHRoZSBk cml2ZXIsIHRoZSBleGVjYnVmZmVyKCkgY29kZSBwYWNrYWdlcyB1cCBhbGwgdGhlCmluZm9ybWF0 aW9uIHJlcXVpcmVkIHRvIGV4ZWN1dGUgdGhlIGJhdGNoIGJ1ZmZlciBhdCBhIGxhdGVyIHRpbWUu IFRoaXMKcGFja2FnZSBpcyBnaXZlbiBvdmVyIHRvIHRoZSBzY2hlZHVsZXIgd2hpY2ggYWRkcyBp dCB0byBhbiBpbnRlcm5hbApub2RlIGxpc3QuIFRoZSBzY2hlZHVsZXIgYWxzbyBzY2FucyB0aGUg bGlzdCBvZiBvYmplY3RzIGFzc29jaWF0ZWQKd2l0aCB0aGUgYmF0Y2ggYnVmZmVyIGFuZCBjb21w YXJlcyB0aGVtIGFnYWluc3QgdGhlIG9iamVjdHMgYWxyZWFkeSBpbgp1c2UgYnkgb3RoZXIgYnVm ZmVycyBpbiB0aGUgbm9kZSBsaXN0LiBJZiBtYXRjaGVzIGFyZSBmb3VuZCB0aGVuIHRoZQpuZXcg YmF0Y2ggYnVmZmVyIG5vZGUgaXMgbWFya2VkIGFzIGJlaW5nIGRlcGVuZGVudCB1cG9uIHRoZSBt YXRjaGluZwpub2RlLiBUaGUgc2FtZSBpcyBkb25lIGZvciB0aGUgY29udGV4dCBvYmplY3QuIFRo ZSBzY2hlZHVsZXIgYWxzbwpidW1wcyB1cCB0aGUgcHJpb3JpdHkgb2Ygc3VjaCBtYXRjaGluZyBu b2RlcyBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZQptb3JlIGRlcGVuZGVuY2llcyBhIGdpdmVuIGJh dGNoIGJ1ZmZlciBoYXMgdGhlIG1vcmUgaW1wb3J0YW50IGl0IGlzCmxpa2VseSB0byBiZS4KClRo ZSBzY2hlZHVsZXIgYWltcyB0byBoYXZlIGEgZ2l2ZW4gKHR1bmVhYmxlKSBudW1iZXIgb2YgYmF0 Y2ggYnVmZmVycwppbiBmbGlnaHQgb24gdGhlIGhhcmR3YXJlIGF0IGFueSBnaXZlbiB0aW1lLiBJ ZiBmZXdlciB0aGFuIHRoaXMgYXJlCmN1cnJlbnRseSBleGVjdXRpbmcgd2hlbiBhIG5ldyBub2Rl IGlzIHF1ZXVlZCwgdGhlbiB0aGUgbm9kZSBpcyBwYXNzZWQKc3RyYWlnaHQgdGhyb3VnaCB0byB0 aGUgc3VibWl0IGZ1bmN0aW9uLiBPdGhlcndpc2UgaXQgaXMgc2ltcGx5IGFkZGVkCnRvIHRoZSBx dWV1ZSBhbmQgdGhlIGRyaXZlciByZXR1cm5zIGJhY2sgdG8gdXNlciBsYW5kLgoKVGhlIHNjaGVk dWxlciBpcyBub3RpZmllZCB3aGVuIGVhY2ggYmF0Y2ggYnVmZmVyIGNvbXBsZXRlcyBhbmQgdXBk YXRlcwppdHMgaW50ZXJuYWwgdHJhY2tpbmcgYWNjb3JkaW5nbHkuIEF0IHRoZSBlbmQgb2YgdGhl IGNvbXBsZXRpb24KaW50ZXJydXB0IHByb2Nlc3NpbmcsIGlmIGFueSBzY2hlZHVsZXIgdHJhY2tl ZCBiYXRjaGVzIHdlcmUgcHJvY2Vzc2VkLAp0aGUgc2NoZWR1bGVyJ3MgZGVmZXJyZWQgd29ya2Vy IHRocmVhZCBpcyB3b2tlbiB1cC4gVGhpcyBjYW4gZG8gbW9yZQppbnZvbHZlZCBwcm9jZXNzaW5n IHN1Y2ggYXMgYWN0dWFsbHkgcmVtb3ZpbmcgY29tcGxldGVkIG5vZGVzIGZyb20gdGhlCnF1ZXVl IGFuZCBmcmVlaW5nIHVwIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gKGludGVy bmFsCm1lbW9yeSBhbGxvY2F0aW9ucywgRFJNIG9iamVjdCByZWZlcmVuY2VzLCBjb250ZXh0IHJl ZmVyZW5jZSwgZXRjLikuClRoZSB3b3JrIGhhbmRsZXIgYWxzbyBjaGVja3MgdGhlIGluIGZsaWdo dCBjb3VudCBhbmQgY2FsbHMgdGhlCnN1Ym1pc3Npb24gY29kZSBpZiBhIG5ldyBzbG90IGhhcyBh cHBlYXJlZC4KCldoZW4gdGhlIHNjaGVkdWxlcidzIHN1Ym1pdCBjb2RlIGlzIGNhbGxlZCwgaXQg c2NhbnMgdGhlIHF1ZXVlZCBub2RlCmxpc3QgZm9yIHRoZSBoaWdoZXN0IHByaW9yaXR5IG5vZGUg dGhhdCBoYXMgbm8gdW5tZXQgZGVwZW5kZW5jaWVzLgpOb3RlIHRoYXQgdGhlIGRlcGVuZGVuY3kg Y2FsY3VsYXRpb24gaXMgY29tcGxleCBhcyBpdCBtdXN0IHRha2UKaW50ZXItcmluZyBkZXBlbmRl bmNpZXMgYW5kIHBvdGVudGlhbCBwcmVlbXB0aW9ucyBpbnRvIGFjY291bnQuIE5vdGUKYWxzbyB0 aGF0IGluIHRoZSBmdXR1cmUgdGhpcyB3aWxsIGJlIGV4dGVuZGVkIHRvIGluY2x1ZGUgZXh0ZXJu YWwKZGVwZW5kZW5jaWVzIHN1Y2ggYXMgdGhlIEFuZHJvaWQgTmF0aXZlIFN5bmMgZmlsZSBkZXNj cmlwdG9ycyBhbmQvb3IKdGhlIGxpbnV4IGRtYS1idWZmIHN5bmNocm9uaXNhdGlvbiBzY2hlbWUu CgpJZiBhIHN1aXRhYmxlIG5vZGUgaXMgZm91bmQgdGhlbiBpdCBpcyBzZW50IHRvIGV4ZWNidWZm X2ZpbmFsKCkgZm9yCnN1Ym1pc3Npb24gdG8gdGhlIGhhcmR3YXJlLiBUaGUgaW4gZmxpZ2h0IGNv dW50IGlzIHRoZW4gcmUtY2hlY2tlZCBhbmQKYSBuZXcgbm9kZSBwb3BwZWQgZnJvbSB0aGUgbGlz dCBpZiBhcHByb3ByaWF0ZS4KCk5vdGUgdGhhdCB0aGlzIHBhdGNoIGRvZXMgbm90IGltcGxlbWVu dCBwcmUtZW1wdGl2ZSBzY2hlZHVsaW5nLiBPbmx5CmJhc2ljIHNjaGVkdWxpbmcgYnkgcmUtb3Jk ZXJpbmcgYmF0Y2ggYnVmZmVyIHN1Ym1pc3Npb24gaXMgY3VycmVudGx5CmltcGxlbWVudGVkLiBQ cmUtZW1wdGlvbiBvZiBhY3RpdmVseSBleGVjdXRpbmcgYmF0Y2ggYnVmZmVycyBjb21lcyBpbgp0 aGUgbmV4dCBwYXRjaCBzZXJpZXMuCgp2MjogQ2hhbmdlZCBwcmlvcml0eSBsZXZlbHMgdG8gKy8t MTAyMyBkdWUgdG8gZmVlZGJhY2sgZnJvbSBDaHJpcwpXaWxzb24uCgpSZW1vdmVkIHJlZHVuZGFu dCBpbmRleCBmcm9tIHNjaGVkdWxlciBub2RlLgoKQ2hhbmdlZCB0aW1lIHN0YW1wcyB0byB1c2Ug amlmZmllcyBpbnN0ZWFkIG9mIHJhdyBtb25vdG9uaWMuIFRoaXMKcHJvdmlkZXMgbG93ZXIgcmVz b2x1dGlvbiBidXQgaW1wcm92ZWQgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGk5MTUKY29kZS4K Ck1ham9yIHJlLXdyaXRlIG9mIGNvbXBsZXRpb24gdHJhY2tpbmcgY29kZSBkdWUgdG8gc3RydWN0 IGZlbmNlCmNvbnZlcnNpb24uIFRoZSBzY2hlZHVsZXIgbm8gbG9uZ2VyIGhhcyBpdCdzIG93biBw cml2YXRlIElSUSBoYW5kbGVyCmJ1dCBqdXN0IGxldHMgdGhlIGV4aXN0aW5nIHJlcXVlc3QgY29k ZSBoYW5kbGUgY29tcGxldGlvbiBldmVudHMuCkluc3RlYWQsIHRoZSBzY2hlZHVsZXIgbm93IGhv b2tzIGludG8gdGhlIHJlcXVlc3Qgbm90aWZ5IGNvZGUgdG8gYmUKdG9sZCB3aGVuIGEgcmVxdWVz dCBoYXMgY29tcGxldGVkLgoKUmVkdWNlZCBkcml2ZXIgbXV0ZXggbG9ja2luZyBzY29wZS4gUmVt b3ZhbCBvZiBzY2hlZHVsZXIgbm9kZXMgbm8KbG9uZ2VyIGdyYWJzIHRoZSBtdXRleCBsb2NrLgoK djM6IFJlZmFjdG9yIG9mIGRlcGVuZGVuY3kgZ2VuZXJhdGlvbiB0byBtYWtlIHRoZSBjb2RlIG1v cmUgcmVhZGFibGUuCkFsc28gYWRkZWQgaW4gcmVhZC1yZWFkIG9wdGltaXNhdGlvbiBzdXBwb3J0 IC0gaS5lLiwgZG9uJ3QgdHJlYXQgYQpzaGFyZWQgcmVhZC1vbmx5IGJ1ZmZlciBhcyBiZWluZyBh IGRlcGVuZGVuY3kuCgpBbGxvd2VkIHRoZSBraWxsaW5nIG9mIHF1ZXVlZCBub2RlcyByYXRoZXIg dGhhbiBvbmx5IGZseWluZyBvbmVzLgoKdjQ6IFVwZGF0ZWQgdGhlIGNvbW1pdCBtZXNzYWdlIHRv IGJldHRlciByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mCnRoZSBjb2RlLiBEb3duZ3JhZGVk IHNvbWUgQlVHX09OcyB0byBXQVJOX09Ocy4gVXNlZCB0aGUgY29ycmVjdCBhcnJheQptZW1vcnkg YWxsb2NhdG9yIGZ1bmN0aW9uIChrbWFsbG9jX2FycmF5IGluc3RlYWQgb2Yga21hbGxvYykuCkNv cnJlY3RlZCB0aGUgZm9ybWF0IG9mIHNvbWUgY29tbWVudHMuIFdyYXBwZWQgc29tZSBsaW5lcyBk aWZmZXJlbnRseQp0byBrZWVwIHRoZSBzdHlsZSBjaGVja2VyIGhhcHB5LgoKRml4ZWQgYSBXQVJO X09OIHdoZW4ga2lsbGluZyBub2Rlcy4gVGhlIGRlcGVuZGVuY3kgcmVtb3ZhbCBjb2RlIGNoZWNr cwp0aGF0IG5vZGVzIGJlaW5nIGRlc3Ryb3llZCBkbyBub3QgaGF2ZSBhbnkgb3VzdGFuZGluZyBk ZXBlbmRlbmNpZXMKKHdoaWNoIHdvdWxkIGltcGx5IHRoZXkgc2hvdWxkIG5vdCBoYXZlIGJlZW4g ZXhlY3V0ZWQgeWV0KS4gSW4gdGhlCmNhc2Ugb2Ygbm9kZXMgYmVpbmcgZGVzdHJveWVkLCBlLmcu IGR1ZSB0byBjb250ZXh0IGJhbm5pbmcsIHRoZW4gdGhpcwptaWdodCB3ZWxsIGJlIHRoZSBjYXNl IC0gdGhleSBoYXZlIG5vdCBiZWVuIGV4ZWN1dGVkIGFuZCBkbyBpbmRlZWQKaGF2ZSBvdXRzdGFu ZGluZyBkZXBlbmRlbmNpZXMuCgpSZS1pbnN0YXRlZCB0aGUgY29kZSB0byBkaXNibGUgaW50ZXJy dXB0cyB3aGVuIG5vdCBpbiB1c2UuIFRoZQp1bmRlcmx5aW5nIHByb2JsZW0gY2F1c2luZyBicm9r ZW4gSVJRIHJlZmVyZW5jZSBjb3VudHMgc2VlbXMgdG8gaGF2ZQpiZWVuIGZpeGVkIG5vdy4KCkZv cjogVklaLTE1ODcKU2lnbmVkLW9mZi1ieTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29u QEludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgfCAgIDQgKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICB8ICAgNSArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jIHwgNzk3ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmggfCAgOTEgKysr KwogNSBmaWxlcyBjaGFuZ2VkLCA4OTggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5oCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQppbmRleCAxNTM5OGM1Li43OWNiMzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMTAsNiAr MTAsNyBAQCBjY2ZsYWdzLXkgOj0gLVdlcnJvcgogaTkxNS15IDo9IGk5MTVfZHJ2Lm8gXAogCSAg aTkxNV9pcnEubyBcCiAJICBpOTE1X3BhcmFtcy5vIFwKKwkgIGk5MTVfc2NoZWR1bGVyLm8gXAog ICAgICAgICAgIGk5MTVfc3VzcGVuZC5vIFwKIAkgIGk5MTVfc3lzZnMubyBcCiAJICBpbnRlbF9j c3IubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCAxMGRmZmRkLi4zOGY0MjNiIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTE2OTUsNiArMTY5NSw4IEBAIHN0cnVjdCBpOTE1X2V4 ZWNidWZmZXJfcGFyYW1zIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgICAgICpyZXF1 ZXN0OwogfTsKIAorc3RydWN0IGk5MTVfc2NoZWR1bGVyOworCiAvKiB1c2VkIGluIGNvbXB1dGlu ZyB0aGUgbmV3IHdhdGVybWFya3Mgc3RhdGUgKi8KIHN0cnVjdCBpbnRlbF93bV9jb25maWcgewog CXVuc2lnbmVkIGludCBudW1fcGlwZXNfYWN0aXZlOwpAQCAtMTk0Nyw2ICsxOTQ5LDggQEAgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgewogCiAJc3RydWN0IGk5MTVfcnVudGltZV9wbSBwbTsKIAor CXN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyOworCiAJLyogQWJzdHJhY3QgdGhlIHN1 Ym1pc3Npb24gbWVjaGFuaXNtIChsZWdhY3kgcmluZ2J1ZmZlciBvciBleGVjbGlzdHMpIGF3YXkg Ki8KIAlzdHJ1Y3QgewogCQlpbnQgKCpleGVjYnVmX3N1Ym1pdCkoc3RydWN0IGk5MTVfZXhlY2J1 ZmZlcl9wYXJhbXMgKnBhcmFtcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IGNmZjM3Njgu LjQ3YWE4NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMzcsNiArMzcsNyBAQAogI2lu Y2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxs aW51eC9kbWEtYnVmLmg+CisjaW5jbHVkZSAiaTkxNV9zY2hlZHVsZXIuaCIKIAogI2RlZmluZSBS UV9CVUdfT04oZXhwcikKIApAQCAtNTI0Miw2ICs1MjQzLDEwIEBAIGludCBpOTE1X2dlbV9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJICovCiAJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9n ZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOwogCisJcmV0ID0gaTkxNV9zY2hlZHVsZXJfaW5p dChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCXJldCA9IGk5MTVfZ2Vt X2luaXRfdXNlcnB0cihkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VubG9jazsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjhjYjkwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3NjaGVkdWxlci5jCkBAIC0wLDAgKzEsNzk3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy MDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhF IFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJp bnRlbF9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X3NjaGVkdWxlci5oIgorCitzdGF0aWMgaW50ICAg ICAgICAgaTkxNV9zY2hlZHVsZXJfZmx5X25vZGUoc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVl X2VudHJ5ICpub2RlKTsKK3N0YXRpYyBpbnQgICAgICAgICBpOTE1X3NjaGVkdWxlcl9yZW1vdmVf ZGVwZW5kZW50KHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCQkJICAgc3Ry dWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpyZW1vdmUpOworc3RhdGljIGludCAgICAg ICAgIGk5MTVfc2NoZWR1bGVyX3N1Ym1pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAor CQkJCQkgYm9vbCBpc19sb2NrZWQpOworc3RhdGljIHVpbnQzMl90ICAgIGk5MTVfc2NoZWR1bGVy X2NvdW50X2ZseWluZyhzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciwKKwkJCQkJICAg ICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOworc3RhdGljIHZvaWQgICAgICAgIGk5 MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1bXBfY2xlYXIoc3RydWN0IGk5MTVfc2NoZWR1bGVyICpz Y2hlZHVsZXIpOworc3RhdGljIGludCAgICAgICAgIGk5MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1 bXAoc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIsCisJCQkJCQlzdHJ1Y3QgaTkxNV9z Y2hlZHVsZXJfcXVldWVfZW50cnkgKnRhcmdldCwKKwkJCQkJCXVpbnQzMl90IGJ1bXApOworCitp bnQgaTkxNV9zY2hlZHVsZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0 IGk5MTVfc2NoZWR1bGVyICAgKnNjaGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7CisJaW50 ICAgICAgICAgICAgICAgICAgICAgcjsKKworCWlmIChzY2hlZHVsZXIpCisJCXJldHVybiAwOwor CisJc2NoZWR1bGVyID0ga3phbGxvYyhzaXplb2YoKnNjaGVkdWxlciksIEdGUF9LRVJORUwpOwor CWlmICghc2NoZWR1bGVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pbml0KCZz Y2hlZHVsZXItPmxvY2spOworCisJZm9yIChyID0gMDsgciA8IEk5MTVfTlVNX1JJTkdTOyByKysp CisJCUlOSVRfTElTVF9IRUFEKCZzY2hlZHVsZXItPm5vZGVfcXVldWVbcl0pOworCisJLyogRGVm YXVsdCB0dW5pbmcgdmFsdWVzOiAqLworCXNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWluICAg ICA9IC0xMDIzOworCXNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWF4ICAgICA9IDEwMjM7CisJ c2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9wcmVlbXB0ID0gOTAwOworCXNjaGVkdWxlci0+bWlu X2ZseWluZyAgICAgICAgICAgICA9IDI7CisKKwlkZXZfcHJpdi0+c2NoZWR1bGVyID0gc2NoZWR1 bGVyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfZ2VuZXJhdGVfZGVwZW5k ZW5jaWVzKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCSAgICAgICBzdHJ1 Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGUsCisJCQkJICAgICAgIHVpbnQzMl90 IHJpbmcpCit7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyX29ial9lbnRyeSAqdGhpcywgKnRoYXQ7 CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICAqdGVzdDsKKwlpbnQgICAgICAg ICAgICAgICAgIGksIGo7CisJYm9vbCAgICAgICAgICAgICAgICBmb3VuZDsKKworCWxpc3RfZm9y X2VhY2hfZW50cnkodGVzdCwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyaW5nXSwgbGluaykgewor CQlpZiAoSTkxNV9TUVNfSVNfQ09NUExFVEUodGVzdCkpCisJCQljb250aW51ZTsKKworCQkvKgor CQkgKiBCYXRjaGVzIG9uIHRoZSBzYW1lIHJpbmcgZm9yIHRoZSBzYW1lCisJCSAqIGNvbnRleHQg bXVzdCBiZSBrZXB0IGluIG9yZGVyLgorCQkgKi8KKwkJZm91bmQgPSAobm9kZS0+cGFyYW1zLmN0 eCA9PSB0ZXN0LT5wYXJhbXMuY3R4KSAmJgorCQkJKG5vZGUtPnBhcmFtcy5yaW5nID09IHRlc3Qt PnBhcmFtcy5yaW5nKTsKKworCQlpZiAoZm91bmQpCisJCQlnb3RvIGRlcGVuZHM7CisKKwkJLyoK KwkJICogQmF0Y2hlcyB3b3JraW5nIG9uIHRoZSBzYW1lIG9iamVjdHMgbXVzdAorCQkgKiBiZSBr ZXB0IGluIG9yZGVyLgorCQkgKi8KKwkJZm9yIChpID0gMDsgKGkgPCBub2RlLT5udW1fb2Jqcykg JiYgIWZvdW5kOyBpKyspIHsKKwkJCXRoaXMgPSBub2RlLT5zYXZlZF9vYmplY3RzICsgaTsKKwor CQkJZm9yIChqID0gMDsgaiA8IHRlc3QtPm51bV9vYmpzOyBqKyspIHsKKwkJCQl0aGF0ID0gdGVz dC0+c2F2ZWRfb2JqZWN0cyArIGo7CisKKwkJCQlpZiAodGhpcy0+b2JqICE9IHRoYXQtPm9iaikK KwkJCQkJY29udGludWU7CisKKwkJCQkvKiBPbmx5IG5lZWQgdG8gd29ycnkgYWJvdXQgd3JpdGVz ICovCisJCQkJaWYgKHRoaXMtPnJlYWRfb25seSAmJiB0aGF0LT5yZWFkX29ubHkpCisJCQkJCWNv bnRpbnVlOworCisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJ aWYgKCFmb3VuZCkKKwkJCWNvbnRpbnVlOworCitkZXBlbmRzOgorCQlub2RlLT5kZXBfbGlzdFtu b2RlLT5udW1fZGVwc10gPSB0ZXN0OworCQlub2RlLT5udW1fZGVwcysrOworCX0KK30KKworaW50 IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2V4ZWNidWZmZXIoc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1 ZXVlX2VudHJ5ICpxZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBx ZS0+cGFyYW1zLmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyICAgKnNj aGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAg KnJpbmcgPSBxZS0+cGFyYW1zLnJpbmc7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2Vu dHJ5ICAqbm9kZTsKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgICp0ZXN0Owor CXVuc2lnbmVkIGxvbmcgICAgICAgZmxhZ3M7CisJYm9vbCAgICAgICAgICAgICAgICBub3RfZmx5 aW5nOworCWludCAgICAgICAgICAgICAgICAgaSwgcjsKKwlpbnQgICAgICAgICAgICAgICAgIGlu Y29tcGxldGUgPSAwOworCisJV0FSTl9PTighc2NoZWR1bGVyKTsKKworCWlmICgxLyppOTE1LnNj aGVkdWxlcl9vdmVycmlkZSAmIGk5MTVfc29fZGlyZWN0X3N1Ym1pdCovKSB7CisJCWludCByZXQ7 CisKKwkJc2NoZWR1bGVyLT5mbGFnc1txZS0+cGFyYW1zLnJpbmctPmlkXSB8PSBpOTE1X3NmX3N1 Ym1pdHRpbmc7CisJCXJldCA9IGRldl9wcml2LT5ndC5leGVjYnVmX2ZpbmFsKCZxZS0+cGFyYW1z KTsKKwkJc2NoZWR1bGVyLT5mbGFnc1txZS0+cGFyYW1zLnJpbmctPmlkXSAmPSB+aTkxNV9zZl9z dWJtaXR0aW5nOworCisJCS8qCisJCSAqIERvbid0IGRvIGFueSBjbGVhbiB1cCBvbiBmYWlsdXJl IGJlY2F1c2UgdGhlIGNhbGxlciB3aWxsCisJCSAqIGRvIGl0IGFsbCBhbnl3YXkuCisJCSAqLwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBGcmVlIGV2ZXJ5dGhpbmcgdGhhdCBp cyBvd25lZCBieSB0aGUgUUUgc3RydWN0dXJlOiAqLworCQlrZnJlZShxZS0+cGFyYW1zLmNsaXBy ZWN0cyk7CisJCWlmIChxZS0+cGFyYW1zLmRpc3BhdGNoX2ZsYWdzICYgSTkxNV9ESVNQQVRDSF9T RUNVUkUpCisJCQlpOTE1X2dlbV9leGVjYnVmZl9yZWxlYXNlX2JhdGNoX29iaihxZS0+cGFyYW1z LmJhdGNoX29iaik7CisKKwkJcmV0dXJuIDA7CisJfQorCisJbm9kZSA9IGttYWxsb2Moc2l6ZW9m KCpub2RlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFub2RlKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CSpub2RlID0gKnFlOworCUlOSVRfTElTVF9IRUFEKCZub2RlLT5saW5rKTsKKwlub2RlLT5zdGF0 dXMgPSBpOTE1X3Nxc19xdWV1ZWQ7CisJbm9kZS0+c3RhbXAgID0gamlmZmllczsKKwlpOTE1X2dl bV9yZXF1ZXN0X3JlZmVyZW5jZShub2RlLT5wYXJhbXMucmVxdWVzdCk7CisKKwkvKiBOZWVkIHRv IGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGluY29tcGxldGUgZW50cmllcyBpbiB0aGUgbGlzdCBh cworCSAqIHRoYXQgd2lsbCBiZSB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBkZXBlbmRlbmN5IGxp c3QuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIGFsbG9jYXRpb24gbXVzdCBub3QgYmUgbWFkZSB3 aXRoIHRoZSBzcGlubG9jayBhY3F1aXJlZAorCSAqIGFzIGttYWxsb2MgY2FuIHNsZWVwLiBIb3dl dmVyLCB0aGUgdW5sb2NrL3JlbG9jayBpcyBzYWZlIGJlY2F1c2Ugbm8KKwkgKiBuZXcgZW50cmll cyBjYW4gYmUgcXVldWVkIHVwIGR1cmluZyB0aGUgdW5sb2NrIGFzIHRoZSBpOTE1IGRyaXZlcgor CSAqIG11dGV4IGlzIHN0aWxsIGhlbGQuIEVudHJpZXMgY291bGQgYmUgcmVtb3ZlZCBmcm9tIHRo ZSBsaXN0IGJ1dCB0aGF0CisJICoganVzdCBtZWFucyB0aGUgZGVwX2xpc3Qgd2lsbCBiZSBvdmVy LWFsbG9jYXRlZCB3aGljaCBpcyBmaW5lLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZzY2hl ZHVsZXItPmxvY2ssIGZsYWdzKTsKKwlmb3IgKHIgPSAwOyByIDwgSTkxNV9OVU1fUklOR1M7IHIr KykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlc3QsICZzY2hlZHVsZXItPm5vZGVfcXVldWVb cl0sIGxpbmspIHsKKwkJCWlmIChJOTE1X1NRU19JU19DT01QTEVURSh0ZXN0KSkKKwkJCQljb250 aW51ZTsKKworCQkJaW5jb21wbGV0ZSsrOworCQl9CisJfQorCisJLyogVGVtcG9yYXJpbHkgdW5s b2NrIHRvIGFsbG9jYXRlIG1lbW9yeTogKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hl ZHVsZXItPmxvY2ssIGZsYWdzKTsKKwlpZiAoaW5jb21wbGV0ZSkgeworCQlub2RlLT5kZXBfbGlz dCA9IGttYWxsb2NfYXJyYXkoaW5jb21wbGV0ZSwKKwkJCQkJICAgICAgIHNpemVvZigqbm9kZS0+ ZGVwX2xpc3QpLAorCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghbm9kZS0+ZGVwX2xp c3QpIHsKKwkJCWtmcmVlKG5vZGUpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9IGVsc2UK KwkJbm9kZS0+ZGVwX2xpc3QgPSBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaGVkdWxl ci0+bG9jaywgZmxhZ3MpOworCW5vZGUtPm51bV9kZXBzID0gMDsKKworCWlmIChub2RlLT5kZXBf bGlzdCkgeworCQlmb3IgKHIgPSAwOyByIDwgSTkxNV9OVU1fUklOR1M7IHIrKykKKwkJCWk5MTVf Z2VuZXJhdGVfZGVwZW5kZW5jaWVzKHNjaGVkdWxlciwgbm9kZSwgcik7CisKKwkJV0FSTl9PTihu b2RlLT5udW1fZGVwcyA+IGluY29tcGxldGUpOworCX0KKworCWlmIChub2RlLT5wcmlvcml0eSA+ IHNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWF4KQorCQlub2RlLT5wcmlvcml0eSA9IHNjaGVk dWxlci0+cHJpb3JpdHlfbGV2ZWxfbWF4OworCWVsc2UgaWYgKG5vZGUtPnByaW9yaXR5IDwgc2No ZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9taW4pCisJCW5vZGUtPnByaW9yaXR5ID0gc2NoZWR1bGVy LT5wcmlvcml0eV9sZXZlbF9taW47CisKKwlpZiAoKG5vZGUtPnByaW9yaXR5ID4gMCkgJiYgbm9k ZS0+bnVtX2RlcHMpIHsKKwkJaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcF9jbGVhcihzY2hl ZHVsZXIpOworCisJCWZvciAoaSA9IDA7IGkgPCBub2RlLT5udW1fZGVwczsgaSsrKQorCQkJaTkx NV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcChzY2hlZHVsZXIsCisJCQkJCW5vZGUtPmRlcF9saXN0 W2ldLCBub2RlLT5wcmlvcml0eSk7CisJfQorCisJbGlzdF9hZGRfdGFpbCgmbm9kZS0+bGluaywg JnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyaW5nLT5pZF0pOworCisJbm90X2ZseWluZyA9IGk5MTVf c2NoZWR1bGVyX2NvdW50X2ZseWluZyhzY2hlZHVsZXIsIHJpbmcpIDwKKwkJCQkJCSBzY2hlZHVs ZXItPm1pbl9mbHlpbmc7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZHVsZXItPmxv Y2ssIGZsYWdzKTsKKworCWlmIChub3RfZmx5aW5nKQorCQlpOTE1X3NjaGVkdWxlcl9zdWJtaXQo cmluZywgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X3NjaGVkdWxl cl9mbHlfbm9kZShzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGUpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZS0+cGFyYW1zLmRldi0+ZGV2 X3ByaXZhdGU7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyICAgKnNjaGVkdWxlciA9IGRldl9wcml2 LT5zY2hlZHVsZXI7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAgKnJpbmc7CisKKwlXQVJOX09O KCFzY2hlZHVsZXIpOworCVdBUk5fT04oIW5vZGUpOworCVdBUk5fT04obm9kZS0+c3RhdHVzICE9 IGk5MTVfc3FzX3BvcHBlZCk7CisKKwlyaW5nID0gbm9kZS0+cGFyYW1zLnJpbmc7CisKKwkvKgor CSAqIEFkZCB0aGUgbm9kZSAod2hpY2ggc2hvdWxkIGN1cnJlbnRseSBiZSBpbiBzdGF0ZSBwb3Bw ZWQpIHRvIHRoZQorCSAqIGZyb250IG9mIHRoZSBxdWV1ZS4gVGhpcyBlbnN1cmUgdGhhdCBmbHlp bmcgbm9kZXMgYXJlIGFsd2F5cyBoZWxkCisJICogaW4gaGFyZHdhcmUgc3VibWlzc2lvbiBvcmRl ci4KKwkgKi8KKwlsaXN0X2FkZCgmbm9kZS0+bGluaywgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVty aW5nLT5pZF0pOworCisJbm9kZS0+c3RhdHVzID0gaTkxNV9zcXNfZmx5aW5nOworCisJaWYgKCEo c2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5pZF0gJiBpOTE1X3NmX2ludGVycnVwdHNfZW5hYmxlZCkp IHsKKwkJYm9vbCAgICBzdWNjZXNzID0gdHJ1ZTsKKworCQlzdWNjZXNzID0gcmluZy0+aXJxX2dl dChyaW5nKTsKKwkJaWYgKHN1Y2Nlc3MpCisJCQlzY2hlZHVsZXItPmZsYWdzW3JpbmctPmlkXSB8 PSBpOTE1X3NmX2ludGVycnVwdHNfZW5hYmxlZDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBOb2RlcyBhcmUgY29uc2lkZXJlZCB2YWxp ZCBkZXBlbmRlbmNpZXMgaWYgdGhleSBhcmUgcXVldWVkIG9uIGFueSByaW5nIG9yCisgKiBpZiB0 aGV5IGFyZSBpbiBmbGlnaHQgb24gYSBkaWZmZXJlbnQgcmluZy4gSW4gZmxpZ2h0IG9uIHRoZSBz YW1lIHJpbmcgaXMgbm8KKyAqIGxvbmdlciBpbnRlcmVzdGluZyBmb3Igbm9uLXByZW1wdGl2ZSBu b2RlcyBhcyB0aGUgcmluZyBzZXJpYWxpc2VzIGV4ZWN1dGlvbi4KKyAqIEZvciBwcmUtZW1wdGlu ZyBub2RlcywgYWxsIGluIGZsaWdodCBkZXBlbmRlbmNpZXMgYXJlIHZhbGlkIGFzIHRoZXkgbXVz dCBub3QKKyAqIGJlIGp1bXBlZCBieSB0aGUgYWN0IG9mIHByZS1lbXB0aW5nLgorICoKKyAqIEFu eXRoaW5nIHRoYXQgaXMgbmVpdGhlciBxdWV1ZWQgbm9yIGZseWluZyBpcyB1bmludGVyZXN0aW5n LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9zY2hlZHVsZXJfaXNfZGVwZW5kZW5jeV92 YWxpZCgKKwkJCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZSwgdWludDMy X3QgaWR4KQoreworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqZGVwOworCisJ ZGVwID0gbm9kZS0+ZGVwX2xpc3RbaWR4XTsKKwlpZiAoIWRlcCkKKwkJcmV0dXJuIGZhbHNlOwor CisJaWYgKEk5MTVfU1FTX0lTX1FVRVVFRChkZXApKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChJ OTE1X1NRU19JU19GTFlJTkcoZGVwKSkgeworCQlpZiAobm9kZS0+cGFyYW1zLnJpbmcgIT0gZGVw LT5wYXJhbXMucmluZykKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30K Kworc3RhdGljIHVpbnQzMl90IGk5MTVfc2NoZWR1bGVyX2NvdW50X2ZseWluZyhzdHJ1Y3QgaTkx NV9zY2hlZHVsZXIgKnNjaGVkdWxlciwKKwkJCQkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmcpCit7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlOworCXVp bnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICBmbHlpbmcgPSAwOworCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeShub2RlLCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmctPmlkXSwgbGluaykK KwkJaWYgKEk5MTVfU1FTX0lTX0ZMWUlORyhub2RlKSkKKwkJCWZseWluZysrOworCisJcmV0dXJu IGZseWluZzsKK30KKworLyoKKyAqIEFkZCBhIHBvcHBlZCBub2RlIGJhY2sgaW4gdG8gdGhlIHF1 ZXVlLiBGb3IgZXhhbXBsZSwgYmVjYXVzZSB0aGUgcmluZyB3YXMKKyAqIGh1bmcgd2hlbiBleGVj ZmluYWwoKSB3YXMgY2FsbGVkIGFuZCB0aHVzIHRoZSByaW5nIHN1Ym1pc3Npb24gbmVlZHMgdG8g YmUKKyAqIHJldHJpZWQgbGF0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIGk5MTVfc2NoZWR1bGVyX25v ZGVfcmVxdWV1ZShzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGUpCit7CisJ V0FSTl9PTighbm9kZSk7CisJV0FSTl9PTighSTkxNV9TUVNfSVNfRkxZSU5HKG5vZGUpKTsKKwor CS8qIFNlcW5vIHdpbGwgYmUgcmVhc3NpZ25lZCBvbiByZWxhdW5jaCAqLworCW5vZGUtPnBhcmFt cy5yZXF1ZXN0LT5zZXFubyA9IDA7CisJbm9kZS0+c3RhdHVzID0gaTkxNV9zcXNfcXVldWVkOwor fQorCisvKgorICogR2l2ZSB1cCBvbiBhIG5vZGUgY29tcGxldGVseS4gRm9yIGV4YW1wbGUsIGJl Y2F1c2UgaXQgaXMgY2F1c2luZyB0aGUKKyAqIHJpbmcgdG8gaGFuZyBvciBpcyB1c2luZyBzb21l IHJlc291cmNlIHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy4KKyAqLworc3RhdGljIHZvaWQgaTkxNV9z Y2hlZHVsZXJfbm9kZV9raWxsKHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9k ZSkKK3sKKwlXQVJOX09OKCFub2RlKTsKKwlXQVJOX09OKEk5MTVfU1FTX0lTX0NPTVBMRVRFKG5v ZGUpKTsKKworCW5vZGUtPnN0YXR1cyA9IGk5MTVfc3FzX2RlYWQ7Cit9CisKKy8qCisgKiBBIHNl cXVlbmNlIG51bWJlciBoYXMgcG9wcGVkIG91dCBvZiB0aGUgaGFyZHdhcmUgYW5kIHRoZSByZXF1 ZXN0IGhhbmRsaW5nCisgKiBjb2RlIGhhcyBtYXBwZWQgaXQgYmFjayB0byBhIHJlcXVlc3QgYW5k IHdpbGwgbWFyayB0aGF0IHJlcXVlc3QgY29tcGxldGUuCisgKiBJdCBhbHNvIGNhbGxzIHRoaXMg ZnVuY3Rpb24gdG8gbm90aWZ5IHRoZSBzY2hlZHVsZXIgYWJvdXQgdGhlIGNvbXBsZXRpb24KKyAq IHNvIHRoZSBzY2hlZHVsZXIncyBub2RlIGNhbiBiZSB1cGRhdGVkIGFwcHJvcHJpYXRlbHkuCisg KiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3QgaXMgc2NoZWR1bGVyIG1hbmFnZWQsIGZhbHNl IGlmIG5vdC4KKyAqLworYm9vbCBpOTE1X3NjaGVkdWxlcl9ub3RpZnlfcmVxdWVzdChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgID0gdG9faTkxNShyZXEtPnJpbmctPmRldik7CisJc3RydWN0IGk5MTVfc2NoZWR1 bGVyICAgKnNjaGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7CisJLyogWFhYOiBOZWVkIHRv IG1hcCBiYWNrIGZyb20gcmVxdWVzdCB0byBub2RlICovCisJc3RydWN0IGk5MTVfc2NoZWR1bGVy X3F1ZXVlX2VudHJ5ICpub2RlID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nICAgICAgIGZsYWdzOwor CisJaWYgKCFub2RlKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2No ZWR1bGVyLT5sb2NrLCBmbGFncyk7CisKKwlXQVJOX09OKCFJOTE1X1NRU19JU19GTFlJTkcobm9k ZSkpOworCisJLyogTm9kZSB3YXMgaW4gZmxpZ2h0IHNvIG1hcmsgaXQgYXMgY29tcGxldGUuICov CisJaWYgKHJlcS0+Y2FuY2VsbGVkKQorCQlub2RlLT5zdGF0dXMgPSBpOTE1X3Nxc19kZWFkOwor CWVsc2UKKwkJbm9kZS0+c3RhdHVzID0gaTkxNV9zcXNfY29tcGxldGU7CisKKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogWFhYOiBJ ZiB0aGUgaW4tZmxpZ2h0IGxpc3QgaXMgbm93IGVtcHR5IHRoZW4gbmV3IHdvcmsgc2hvdWxkIGJl CisJICogc3VibWl0dGVkLiBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGlu dGVycnVwdCBjb250ZXh0CisJICogYW5kIHRodXMgY2Fubm90IGFjcXVpcmUgbXV0ZXggbG9ja3Mg YW5kIG90aGVyIHN1Y2ggdGhpbmdzIHRoYXQgYXJlCisJICogbmVjZXNzYXJ5IGZvciBmcmVzaCBz dWJtaXNzaW9uLgorCSAqLworCisJcmV0dXJuIHRydWU7Cit9CisKK2ludCBpOTE1X3NjaGVkdWxl cl9yZW1vdmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5nLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBp OTE1X3NjaGVkdWxlciAgICpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+c2NoZWR1bGVyOworCXN0cnVj dCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAgKm5vZGUsICpub2RlX25leHQ7CisJdW5zaWdu ZWQgbG9uZyAgICAgICBmbGFnczsKKwlpbnQgICAgICAgICAgICAgICAgIGZseWluZyA9IDAsIHF1 ZXVlZCA9IDA7CisJaW50ICAgICAgICAgICAgICAgICByZXQgPSAwOworCWJvb2wgICAgICAgICAg ICAgICAgZG9fc3VibWl0OworCXVpbnQzMl90ICAgICAgICAgICAgbWluX3NlcW5vOworCXN0cnVj dCBsaXN0X2hlYWQgICAgcmVtb3ZlOworCisJaWYgKGxpc3RfZW1wdHkoJnNjaGVkdWxlci0+bm9k ZV9xdWV1ZVtyaW5nLT5pZF0pKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZz Y2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKworCS8qIC9pOTE1X3NjaGVkdWxlcl9kdW1wX2xvY2tl ZChyaW5nLCAicmVtb3ZlL3ByZSIpOy8gKi8KKworCS8qCisJICogSW4gdGhlIGNhc2Ugd2hlcmUg dGhlIHN5c3RlbSBpcyBpZGxlLCBzdGFydGluZyAnbWluX3NlcW5vJyBmcm9tIGEgYmlnCisJICog bnVtYmVyIHdpbGwgY2F1c2UgYWxsIG5vZGVzIHRvIGJlIHJlbW92ZWQgYXMgdGhleSBhcmUgbm93 IGJhY2sgdG8KKwkgKiBiZWluZyBpbi1vcmRlci4gSG93ZXZlciwgdGhpcyB3aWxsIGJlIGEgcHJv YmxlbSBpZiB0aGUgbGFzdCBvbmUgdG8KKwkgKiBjb21wbGV0ZSB3YXMgYWN0dWFsbHkgb3V0LW9m LW9yZGVyIGFzIHRoZSByaW5nIHNlcW5vIHZhbHVlIHdpbGwgYmUKKwkgKiBsb3dlciB0aGFuIG9u ZSBvciBtb3JlIGNvbXBsZXRlZCBidWZmZXJzLiBUaHVzIGNvZGUgbG9va2luZyBmb3IgdGhlCisJ ICogY29tcGxldGlvbiBvZiBzYWlkIGJ1ZmZlcnMgd2lsbCB3YWl0IGZvcmV2ZXIuCisJICogSW5z dGVhZCwgdXNlIHRoZSBoYXJkd2FyZSBzZXFubyBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoaXMg bWVhbnMKKwkgKiB0aGF0IHNvbWUgYnVmZmVycyBtaWdodCBiZSBrZXB0IGFyb3VuZCBldmVuIGlu IGEgY29tcGxldGVseSBpZGxlCisJICogc3lzdGVtIGJ1dCBpdCBzaG91bGQgZ3VhcmFudGVlIHRo YXQgbm8tb25lIGV2ZXIgZ2V0cyBjb25mdXNlZCB3aGVuCisJICogd2FpdGluZyBmb3IgYnVmZmVy IGNvbXBsZXRpb24uCisJICovCisJbWluX3NlcW5vID0gcmluZy0+Z2V0X3NlcW5vKHJpbmcsIHRy dWUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVl W3JpbmctPmlkXSwgbGluaykgeworCQlpZiAoSTkxNV9TUVNfSVNfUVVFVUVEKG5vZGUpKQorCQkJ cXVldWVkKys7CisJCWVsc2UgaWYgKEk5MTVfU1FTX0lTX0ZMWUlORyhub2RlKSkKKwkJCWZseWlu ZysrOworCQllbHNlIGlmIChJOTE1X1NRU19JU19DT01QTEVURShub2RlKSkKKwkJCWNvbnRpbnVl OworCisJCWlmIChub2RlLT5wYXJhbXMucmVxdWVzdC0+c2Vxbm8gPT0gMCkKKwkJCWNvbnRpbnVl OworCisJCWlmICghaTkxNV9zZXFub19wYXNzZWQobm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5v LCBtaW5fc2Vxbm8pKQorCQkJbWluX3NlcW5vID0gbm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5v OworCX0KKworCUlOSVRfTElTVF9IRUFEKCZyZW1vdmUpOworCWxpc3RfZm9yX2VhY2hfZW50cnlf c2FmZShub2RlLCBub2RlX25leHQsICZzY2hlZHVsZXItPm5vZGVfcXVldWVbcmluZy0+aWRdLCBs aW5rKSB7CisJCS8qCisJCSAqIE9ubHkgcmVtb3ZlIGNvbXBsZXRlZCBub2RlcyB3aGljaCBoYXZl IGEgbG93ZXIgc2Vxbm8gdGhhbgorCQkgKiBhbGwgcGVuZGluZyBub2Rlcy4gV2hpbGUgdGhlcmUg aXMgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZQorCQkgKiByaW5nJ3Mgc2Vxbm8gY291bnRpbmcgYmFj a3dhcmRzLCBhbGwgaGlnaGVyIGJ1ZmZlcnMgbXVzdAorCQkgKiBiZSByZW1lbWJlcmVkIHNvIHRo YXQgdGhlICdpOTE1X3NlcW5vX3Bhc3NlZCgpJyB0ZXN0IGNhbgorCQkgKiByZXBvcnQgdGhhdCB0 aGV5IGhhdmUgaW4gZmFjdCBwYXNzZWQuCisJCSAqCisJCSAqIE5COiBUaGlzIGlzIG5vdCB0cnVl IGZvciAnZGVhZCcgbm9kZXMuIFRoZSBHUFUgcmVzZXQgY2F1c2VzCisJCSAqIHRoZSBzb2Z0d2Fy ZSBzZXFubyB0byByZXN0YXJ0IGZyb20gaXRzIGluaXRpYWwgdmFsdWUuIFRodXMKKwkJICogdGhl IGRlYWQgbm9kZXMgbXVzdCBiZSByZW1vdmVkIGV2ZW4gdGhvdWdoIHRoZWlyIHNlcW5vIHZhbHVl cworCQkgKiBhcmUgcG90ZW50aWFsbHkgdmFzdGx5IGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBy aW5nIHNlcW5vLgorCQkgKi8KKwkJaWYgKCFJOTE1X1NRU19JU19DT01QTEVURShub2RlKSkKKwkJ CWNvbnRpbnVlOworCisJCWlmIChub2RlLT5zdGF0dXMgIT0gaTkxNV9zcXNfZGVhZCkgeworCQkJ aWYgKGk5MTVfc2Vxbm9fcGFzc2VkKG5vZGUtPnBhcmFtcy5yZXF1ZXN0LT5zZXFubywgbWluX3Nl cW5vKSAmJgorCQkJICAgIChub2RlLT5wYXJhbXMucmVxdWVzdC0+c2Vxbm8gIT0gbWluX3NlcW5v KSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWxpc3RfZGVsKCZub2RlLT5saW5rKTsKKwkJbGlz dF9hZGQoJm5vZGUtPmxpbmssICZyZW1vdmUpOworCisJCS8qIFN0cmlwIHRoZSBkZXBlbmRlbmN5 IGluZm8gd2hpbGUgdGhlIG11dGV4IGlzIHN0aWxsIGxvY2tlZCAqLworCQlpOTE1X3NjaGVkdWxl cl9yZW1vdmVfZGVwZW5kZW50KHNjaGVkdWxlciwgbm9kZSk7CisKKwkJY29udGludWU7CisJfQor CisJLyoKKwkgKiBSZWxlYXNlIHRoZSBpbnRlcnJ1cHQgcmVmZXJlbmNlIGNvdW50IGlmIHRoZXJl IGFyZSBubyBsb25nZXIgYW55CisJICogbm9kZXMgdG8gd29ycnkgYWJvdXQuCisJICovCisJaWYg KCFmbHlpbmcgJiYgIXF1ZXVlZCAmJgorCSAgICAoc2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5pZF0g JiBpOTE1X3NmX2ludGVycnVwdHNfZW5hYmxlZCkpIHsKKwkJcmluZy0+aXJxX3B1dChyaW5nKTsK KwkJc2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5pZF0gJj0gfmk5MTVfc2ZfaW50ZXJydXB0c19lbmFi bGVkOworCX0KKworCS8qIExhdW5jaCBtb3JlIHBhY2tldHMgbm93PyAqLworCWRvX3N1Ym1pdCA9 IChxdWV1ZWQgPiAwKSAmJiAoZmx5aW5nIDwgc2NoZWR1bGVyLT5taW5fZmx5aW5nKTsKKworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOworCisJaWYgKCFk b19zdWJtaXQgJiYgbGlzdF9lbXB0eSgmcmVtb3ZlKSkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4 X2xvY2soJnJpbmctPmRldi0+c3RydWN0X211dGV4KTsKKworCWlmIChkb19zdWJtaXQpCisJCXJl dCA9IGk5MTVfc2NoZWR1bGVyX3N1Ym1pdChyaW5nLCB0cnVlKTsKKworCXdoaWxlICghbGlzdF9l bXB0eSgmcmVtb3ZlKSkgeworCQlub2RlID0gbGlzdF9maXJzdF9lbnRyeSgmcmVtb3ZlLCB0eXBl b2YoKm5vZGUpLCBsaW5rKTsKKwkJbGlzdF9kZWwoJm5vZGUtPmxpbmspOworCisJCS8qCisJCSAq IFRoZSBiYXRjaCBidWZmZXIgbXVzdCBiZSB1bnBpbm5lZCBiZWZvcmUgaXQgaXMgdW5yZWZlcmVu Y2VkCisJCSAqIG90aGVyd2lzZSB0aGUgdW5waW4gZmFpbHMgd2l0aCBhIG1pc3Npbmcgdm1hIT8K KwkJICovCisJCWlmIChub2RlLT5wYXJhbXMuZGlzcGF0Y2hfZmxhZ3MgJiBJOTE1X0RJU1BBVENI X1NFQ1VSRSkKKwkJCWk5MTVfZ2VtX2V4ZWNidWZmX3JlbGVhc2VfYmF0Y2hfb2JqKG5vZGUtPnBh cmFtcy5iYXRjaF9vYmopOworCisJCS8qIEZyZWUgZXZlcnl0aGluZyB0aGF0IGlzIG93bmVkIGJ5 IHRoZSBub2RlOiAqLworCQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKG5vZGUtPnBhcmFt cy5yZXF1ZXN0KTsKKwkJa2ZyZWUobm9kZS0+cGFyYW1zLmNsaXByZWN0cyk7CisJCWtmcmVlKG5v ZGUtPmRlcF9saXN0KTsKKwkJa2ZyZWUobm9kZSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZyaW5n LT5kZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBp OTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1wX2NsZWFyKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAq c2NoZWR1bGVyKQoreworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZTsK KwlpbnQgaTsKKworCS8qCisJICogRW5zdXJlIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBkb24ndCBj YXVzZSBwcm9ibGVtcyBhbmQgdGhhdCBhIGJ1bXAKKwkgKiBieSBvYmplY3QgdXNhZ2Ugb25seSBi dW1wcyBlYWNoIHVzaW5nIGJ1ZmZlciBvbmNlOgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBJOTE1 X05VTV9SSU5HUzsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnNjaGVkdWxl ci0+bm9kZV9xdWV1ZVtpXSwgbGluaykKKwkJCW5vZGUtPmJ1bXBlZCA9IGZhbHNlOworCX0KK30K Kworc3RhdGljIGludCBpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1wKHN0cnVjdCBpOTE1X3Nj aGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRy eSAqdGFyZ2V0LAorCQkJCXVpbnQzMl90IGJ1bXApCit7CisJdWludDMyX3QgbmV3X3ByaW9yaXR5 OworCWludCAgICAgIGksIGNvdW50OworCisJaWYgKHRhcmdldC0+cHJpb3JpdHkgPj0gc2NoZWR1 bGVyLT5wcmlvcml0eV9sZXZlbF9tYXgpCisJCXJldHVybiAxOworCisJaWYgKHRhcmdldC0+YnVt cGVkKQorCQlyZXR1cm4gMDsKKworCW5ld19wcmlvcml0eSA9IHRhcmdldC0+cHJpb3JpdHkgKyBi dW1wOworCWlmICgobmV3X3ByaW9yaXR5IDw9IHRhcmdldC0+cHJpb3JpdHkpIHx8CisJICAgIChu ZXdfcHJpb3JpdHkgPiBzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX21heCkpCisJCXRhcmdldC0+ cHJpb3JpdHkgPSBzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX21heDsKKwllbHNlCisJCXRhcmdl dC0+cHJpb3JpdHkgPSBuZXdfcHJpb3JpdHk7CisKKwljb3VudCA9IDE7CisJdGFyZ2V0LT5idW1w ZWQgPSB0cnVlOworCisJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+bnVtX2RlcHM7IGkrKykgewor CQlpZiAoIXRhcmdldC0+ZGVwX2xpc3RbaV0pCisJCQljb250aW51ZTsKKworCQlpZiAodGFyZ2V0 LT5kZXBfbGlzdFtpXS0+YnVtcGVkKQorCQkJY29udGludWU7CisKKwkJY291bnQgKz0gaTkxNV9z Y2hlZHVsZXJfcHJpb3JpdHlfYnVtcChzY2hlZHVsZXIsCisJCQkJCQkgICAgICB0YXJnZXQtPmRl cF9saXN0W2ldLAorCQkJCQkJICAgICAgYnVtcCk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQor CitzdGF0aWMgaW50IGk5MTVfc2NoZWR1bGVyX3BvcF9mcm9tX3F1ZXVlX2xvY2tlZChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLAorCQkJCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9l bnRyeSAqKnBvcF9ub2RlLAorCQkJCXVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICAgICAgICAgICAgKmRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJp dmF0ZTsKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgICAgICAgICAgICAgICpzY2hlZHVsZXIgPSBk ZXZfcHJpdi0+c2NoZWR1bGVyOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAg KmJlc3Q7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICAqbm9kZTsKKwlpbnQg ICAgIHJldDsKKwlpbnQgICAgIGk7CisJYm9vbAlhbnlfcXVldWVkOworCWJvb2wJaGFzX2xvY2Fs LCBoYXNfcmVtb3RlLCBvbmx5X3JlbW90ZTsKKworCSpwb3Bfbm9kZSA9IE5VTEw7CisJcmV0ID0g LUVOT0RBVEE7CisKKwlhbnlfcXVldWVkID0gZmFsc2U7CisJb25seV9yZW1vdGUgPSBmYWxzZTsK KwliZXN0ID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnNjaGVkdWxlci0+ bm9kZV9xdWV1ZVtyaW5nLT5pZF0sIGxpbmspIHsKKwkJaWYgKCFJOTE1X1NRU19JU19RVUVVRUQo bm9kZSkpCisJCQljb250aW51ZTsKKwkJYW55X3F1ZXVlZCA9IHRydWU7CisKKwkJaGFzX2xvY2Fs ICA9IGZhbHNlOworCQloYXNfcmVtb3RlID0gZmFsc2U7CisJCWZvciAoaSA9IDA7IGkgPCBub2Rl LT5udW1fZGVwczsgaSsrKSB7CisJCQlpZiAoIWk5MTVfc2NoZWR1bGVyX2lzX2RlcGVuZGVuY3lf dmFsaWQobm9kZSwgaSkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChub2RlLT5kZXBfbGlzdFtp XS0+cGFyYW1zLnJpbmcgPT0gbm9kZS0+cGFyYW1zLnJpbmcpCisJCQkJaGFzX2xvY2FsID0gdHJ1 ZTsKKwkJCWVsc2UKKwkJCQloYXNfcmVtb3RlID0gdHJ1ZTsKKwkJfQorCisJCWlmIChoYXNfcmVt b3RlICYmICFoYXNfbG9jYWwpCisJCQlvbmx5X3JlbW90ZSA9IHRydWU7CisKKwkJaWYgKCFoYXNf bG9jYWwgJiYgIWhhc19yZW1vdGUpIHsKKwkJCWlmICghYmVzdCB8fAorCQkJICAgIChub2RlLT5w cmlvcml0eSA+IGJlc3QtPnByaW9yaXR5KSkKKwkJCQliZXN0ID0gbm9kZTsKKwkJfQorCX0KKwor CWlmIChiZXN0KSB7CisJCWxpc3RfZGVsKCZiZXN0LT5saW5rKTsKKworCQlJTklUX0xJU1RfSEVB RCgmYmVzdC0+bGluayk7CisJCWJlc3QtPnN0YXR1cyAgPSBpOTE1X3Nxc19wb3BwZWQ7CisKKwkJ cmV0ID0gMDsKKwl9IGVsc2UgeworCQkvKiBDYW4gb25seSBnZXQgaGVyZSBpZjoKKwkJICogKGEp IHRoZXJlIGFyZSBubyBidWZmZXJzIGluIHRoZSBxdWV1ZQorCQkgKiAoYikgYWxsIHF1ZXVlZCBi dWZmZXJzIGFyZSBkZXBlbmRlbnQgb24gb3RoZXIgYnVmZmVycworCQkgKiAgICAgZS5nLiBvbiBh IGJ1ZmZlciB0aGF0IGlzIGluIGZsaWdodCBvbiBhIGRpZmZlcmVudCByaW5nCisJCSAqLworCQlp ZiAob25seV9yZW1vdGUpIHsKKwkJCS8qIFRoZSBvbmx5IGRlcGVuZGVudCBidWZmZXJzIGFyZSBv biBhbm90aGVyIHJpbmcuICovCisJCQlyZXQgPSAtRUFHQUlOOworCQl9IGVsc2UgaWYgKGFueV9x dWV1ZWQpIHsKKwkJCS8qIEl0IHNlZW1zIHRoYXQgc29tZXRoaW5nIGhhcyBnb25lIGhvcnJpYmx5 IHdyb25nISAqLworCQkJRFJNX0VSUk9SKCJCcm9rZW4gZGVwZW5kZW5jeSB0cmFja2luZyBvbiBy aW5nICVkIVxuIiwKKwkJCQkgIChpbnQpIHJpbmctPmlkKTsKKwkJfQorCX0KKworCS8qIGk5MTVf c2NoZWR1bGVyX2R1bXBfcXVldWVfcG9wKHJpbmcsIGJlc3QpOyAqLworCisJKnBvcF9ub2RlID0g YmVzdDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGk5MTVfc2NoZWR1bGVyX3N1Ym1p dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLCBib29sIHdhc19sb2NrZWQpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgICAqZGV2ID0gcmluZy0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVy ICAgKnNjaGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7CisJc3RydWN0IGk5MTVfc2NoZWR1 bGVyX3F1ZXVlX2VudHJ5ICAqbm9kZTsKKwl1bnNpZ25lZCBsb25nICAgICAgIGZsYWdzOworCWlu dCAgICAgICAgICAgICAgICAgcmV0ID0gMCwgY291bnQgPSAwOworCisJaWYgKCF3YXNfbG9ja2Vk KSB7CisJCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGRldik7CisJCWlmIChy ZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2 LT5zdHJ1Y3RfbXV0ZXgpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzY2hlZHVsZXItPmxvY2ss IGZsYWdzKTsKKworCS8qIEZpcnN0IHRpbWUgYXJvdW5kLCBjb21wbGFpbiBpZiBhbnl0aGluZyB1 bmV4cGVjdGVkIG9jY3VyczogKi8KKwlyZXQgPSBpOTE1X3NjaGVkdWxlcl9wb3BfZnJvbV9xdWV1 ZV9sb2NrZWQocmluZywgJm5vZGUsICZmbGFncyk7CisJaWYgKHJldCkgeworCQlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKKworCQlpZiAoIXdhc19sb2Nr ZWQpCisJCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCQlyZXR1cm4gcmV0 OworCX0KKworCWRvIHsKKwkJV0FSTl9PTighbm9kZSk7CisJCVdBUk5fT04obm9kZS0+cGFyYW1z LnJpbmcgIT0gcmluZyk7CisJCVdBUk5fT04obm9kZS0+c3RhdHVzICE9IGk5MTVfc3FzX3BvcHBl ZCk7CisJCWNvdW50Kys7CisKKwkJLyoKKwkJICogVGhlIGNhbGwgdG8gcG9wIGFib3ZlIHdpbGwg aGF2ZSByZW1vdmVkIHRoZSBub2RlIGZyb20gdGhlCisJCSAqIGxpc3QuIFNvIGFkZCBpdCBiYWNr IGluIGFuZCBtYXJrIGl0IGFzIGluIGZsaWdodC4KKwkJICovCisJCWk5MTVfc2NoZWR1bGVyX2Zs eV9ub2RlKG5vZGUpOworCisJCXNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdIHw9IGk5MTVfc2Zf c3VibWl0dGluZzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoZWR1bGVyLT5sb2NrLCBm bGFncyk7CisJCXJldCA9IGRldl9wcml2LT5ndC5leGVjYnVmX2ZpbmFsKCZub2RlLT5wYXJhbXMp OworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7CisJCXNjaGVk dWxlci0+ZmxhZ3NbcmluZy0+aWRdICY9IH5pOTE1X3NmX3N1Ym1pdHRpbmc7CisKKwkJaWYgKHJl dCkgeworCQkJaW50IHJlcXVldWUgPSAxOworCisJCQkvKgorCQkJICogT2ggZGVhciEgRWl0aGVy IHRoZSBub2RlIGlzIGJyb2tlbiBvciB0aGUgcmluZyBpcworCQkJICogYnVzeS4gU28gbmVlZCB0 byBraWxsIHRoZSBub2RlIG9yIHJlcXVldWUgaXQgYW5kIHRyeQorCQkJICogYWdhaW4gbGF0ZXIg YXMgYXBwcm9wcmlhdGUuCisJCQkgKi8KKworCQkJc3dpdGNoICgtcmV0KSB7CisJCQljYXNlIEVO T0RFVjoKKwkJCWNhc2UgRU5PRU5UOgorCQkJCS8qIEZhdGFsIGVycm9ycy4gS2lsbCB0aGUgbm9k ZS4gKi8KKwkJCQlyZXF1ZXVlID0gLTE7CisJCQlicmVhazsKKworCQkJY2FzZSBFQUdBSU46CisJ CQljYXNlIEVCVVNZOgorCQkJY2FzZSBFSU86CisJCQljYXNlIEVOT01FTToKKwkJCWNhc2UgRVJF U1RBUlRTWVM6CisJCQljYXNlIEVJTlRSOgorCQkJCS8qIFN1cHBvc2VkbHkgcmVjb3ZlcmFibGUg ZXJyb3JzLiAqLworCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJLyoKKwkJCQkgKiBBc3N1 bWUgdGhlIGVycm9yIGlzIHJlY292ZXJhYmxlIGFuZCBob3BlCisJCQkJICogZm9yIHRoZSBiZXN0 LgorCQkJCSAqLworCQkJCURSTV9ERUJVR19EUklWRVIoIjwlcz4gR290IHVuZXhwZWN0ZWQgZXJy b3IgZnJvbSBleGVjZmluYWwoKTogJWQhXG4iLAorCQkJCQkJIHJpbmctPm5hbWUsIHJldCk7CisJ CQlicmVhazsKKwkJCX0KKworCQkJLyoKKwkJCSAqIENoZWNrIHRoYXQgdGhlIHdhdGNoZG9nL3Jl c2V0IGNvZGUgaGFzIG5vdCBudWtlZAorCQkJICogdGhlIG5vZGUgd2hpbGUgd2Ugd2VyZW4ndCBs b29raW5nOgorCQkJICovCisJCQlpZiAobm9kZS0+c3RhdHVzID09IGk5MTVfc3FzX2RlYWQpCisJ CQkJcmVxdWV1ZSA9IDA7CisKKwkJCWlmIChyZXF1ZXVlID09IDEpIHsKKwkJCQlpOTE1X3NjaGVk dWxlcl9ub2RlX3JlcXVldWUobm9kZSk7CisJCQkJLyoKKwkJCQkgKiBObyBwb2ludCBzcGlubmlu ZyBpZiB0aGUgcmluZyBpcyBjdXJyZW50bHkKKwkJCQkgKiB1bmF2YWlsYWJsZSBzbyBqdXN0IGdp dmUgdXAgYW5kIGNvbWUgYmFjaworCQkJCSAqIGxhdGVyLgorCQkJCSAqLworCQkJCWJyZWFrOwor CQkJfSBlbHNlIGlmIChyZXF1ZXVlID09IC0xKQorCQkJCWk5MTVfc2NoZWR1bGVyX25vZGVfa2ls bChub2RlKTsKKwkJfQorCisJCS8qIEtlZXAgbGF1bmNoaW5nIHVudGlsIHRoZSBza3kgaXMgc3Vm ZmljaWVudGx5IGZ1bGwuICovCisJCWlmIChpOTE1X3NjaGVkdWxlcl9jb3VudF9mbHlpbmcoc2No ZWR1bGVyLCByaW5nKSA+PQorCQkJCQkJc2NoZWR1bGVyLT5taW5fZmx5aW5nKQorCQkJYnJlYWs7 CisKKwkJcmV0ID0gaTkxNV9zY2hlZHVsZXJfcG9wX2Zyb21fcXVldWVfbG9ja2VkKHJpbmcsICZu b2RlLCAmZmxhZ3MpOworCX0gd2hpbGUgKHJldCA9PSAwKTsKKworCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOworCisJaWYgKCF3YXNfbG9ja2VkKQorCQlt dXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCS8qIERvbid0IGNvbXBsYWluIGFi b3V0IG5vdCBiZWluZyBhYmxlIHRvIHN1Ym1pdCBleHRyYSBlbnRyaWVzICovCisJaWYgKHJldCA9 PSAtRU5PREFUQSkKKwkJcmV0ID0gMDsKKworCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiBjb3Vu dDsKK30KKworc3RhdGljIGludCBpOTE1X3NjaGVkdWxlcl9yZW1vdmVfZGVwZW5kZW50KHN0cnVj dCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9x dWV1ZV9lbnRyeSAqcmVtb3ZlKQoreworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRy eSAgKm5vZGU7CisJaW50ICAgICBpLCByOworCWludCAgICAgY291bnQgPSAwOworCisJLyoKKwkg KiBFbnN1cmUgdGhhdCBhIG5vZGUgaXMgbm90IGJlaW5nIHJlbW92ZWQgd2hpY2ggaXMgc3RpbGwg ZGVwZW5kZW50CisJICogdXBvbiBvdGhlciAobm90IGNvbXBsZXRlZCkgd29yay4gSWYgdGhhdCBo YXBwZW5zLCBpdCBpbXBsaWVzCisJICogc29tZXRoaW5nIGhhcyBnb25lIHZlcnkgd3Jvbmcgd2l0 aCB0aGUgZGVwZW5kZW5jeSB0cmFja2luZyEgTm90ZQorCSAqIHRoYXQgdGhlcmUgaXMgbm8gbmVl ZCB0byB3b3JyeSBpZiB0aGlzIG5vZGUgaGFzIGJlZW4gZXhwbGljaXRseQorCSAqIGtpbGxlZCBm b3Igc29tZSByZWFzb24gLSBpdCBtaWdodCBiZSBiZWluZyBraWxsZWQgYmVmb3JlIGl0IGdvdAor CSAqIHNlbnQgdG8gdGhlIGhhcmR3YXJlLgorCSAqLworCWlmIChyZW1vdmUtPnN0YXR1cyAhPSBp OTE1X3Nxc19kZWFkKSB7CisJCWZvciAoaSA9IDA7IGkgPCByZW1vdmUtPm51bV9kZXBzOyBpKysp CisJCQlpZiAoKHJlbW92ZS0+ZGVwX2xpc3RbaV0pICYmCisJCQkgICAgKCFJOTE1X1NRU19JU19D T01QTEVURShyZW1vdmUtPmRlcF9saXN0W2ldKSkpCisJCQkJY291bnQrKzsKKwkJV0FSTl9PTihj b3VudCk7CisJfQorCisJLyoKKwkgKiBSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRlcGVuZGVu Y3kgbGlzdHMgb2YgYW55IG90aGVyIG5vZGUgd2hpY2gKKwkgKiBtaWdodCBiZSB3YWl0aW5nIG9u IGl0LgorCSAqLworCWZvciAociA9IDA7IHIgPCBJOTE1X05VTV9SSU5HUzsgcisrKSB7CisJCWxp c3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyXSwgbGluaykg eworCQkJZm9yIChpID0gMDsgaSA8IG5vZGUtPm51bV9kZXBzOyBpKyspIHsKKwkJCQlpZiAobm9k ZS0+ZGVwX2xpc3RbaV0gIT0gcmVtb3ZlKQorCQkJCQljb250aW51ZTsKKworCQkJCW5vZGUtPmRl cF9saXN0W2ldID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMDBkYzdmMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfc2NoZWR1bGVyLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx NCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF UgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBT T0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBfSTkxNV9TQ0hFRFVMRVJfSF8KKyNkZWZpbmUg X0k5MTVfU0NIRURVTEVSX0hfCisKK2VudW0gaTkxNV9zY2hlZHVsZXJfcXVldWVfc3RhdHVzIHsK KwkvKiBMaW1ibzogKi8KKwlpOTE1X3Nxc19ub25lID0gMCwKKwkvKiBOb3QgeWV0IHN1Ym1pdHRl ZCB0byBoYXJkd2FyZTogKi8KKwlpOTE1X3Nxc19xdWV1ZWQsCisJLyogUG9wcGVkIGZyb20gcXVl dWUsIHJlYWR5IHRvIGZseTogKi8KKwlpOTE1X3Nxc19wb3BwZWQsCisJLyogU2VudCB0byBoYXJk d2FyZSBmb3IgcHJvY2Vzc2luZzogKi8KKwlpOTE1X3Nxc19mbHlpbmcsCisJLyogRmluaXNoZWQg cHJvY2Vzc2luZyBvbiB0aGUgaGFyZHdhcmU6ICovCisJaTkxNV9zcXNfY29tcGxldGUsCisJLyog S2lsbGVkIGJ5IHdhdGNoZG9nIG9yIGNhdGFzdHJvcGhpYyBzdWJtaXNzaW9uIGZhaWx1cmU6ICov CisJaTkxNV9zcXNfZGVhZCwKKwkvKiBMaW1pdCB2YWx1ZSBmb3IgdXNlIHdpdGggYXJyYXlzL2xv b3BzICovCisJaTkxNV9zcXNfTUFYCit9OworCisjZGVmaW5lIEk5MTVfU1FTX0lTX1FVRVVFRChu b2RlKQkoKChub2RlKS0+c3RhdHVzID09IGk5MTVfc3FzX3F1ZXVlZCkpCisjZGVmaW5lIEk5MTVf U1FTX0lTX0ZMWUlORyhub2RlKQkoKChub2RlKS0+c3RhdHVzID09IGk5MTVfc3FzX2ZseWluZykp CisjZGVmaW5lIEk5MTVfU1FTX0lTX0NPTVBMRVRFKG5vZGUpCSgoKG5vZGUpLT5zdGF0dXMgPT0g aTkxNV9zcXNfY29tcGxldGUpIHx8IFwKKwkJCQkJICgobm9kZSktPnN0YXR1cyA9PSBpOTE1X3Nx c19kZWFkKSkKKworc3RydWN0IGk5MTVfc2NoZWR1bGVyX29ial9lbnRyeSB7CisJc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgICAgICAgICAgKm9iajsKKwlib29sICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZWFkX29ubHk7Cit9OworCitzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVl dWVfZW50cnkgeworCXN0cnVjdCBpOTE1X2V4ZWNidWZmZXJfcGFyYW1zICAgICAgIHBhcmFtczsK KwkvKiAtMTAyMyA9IGxvd2VzdCBwcmlvcml0eSwgMCA9IGRlZmF1bHQsIDEwMjMgPSBoaWdoZXN0 ICovCisJaW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk7CisJc3Ry dWN0IGk5MTVfc2NoZWR1bGVyX29ial9lbnRyeSAgICAgKnNhdmVkX29iamVjdHM7CisJaW50ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX29ianM7CisJYm9vbCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnVtcGVkOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1 ZV9lbnRyeSAgICoqZGVwX2xpc3Q7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnVtX2RlcHM7CisJZW51bSBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9zdGF0dXMgICAgc3RhdHVz OworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgICAgICAgIHN0YW1wOworCXN0cnVjdCBs aXN0X2hlYWQgICAgICAgICAgICAgICAgICAgIGxpbms7Cit9OworCitzdHJ1Y3QgaTkxNV9zY2hl ZHVsZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgbm9kZV9xdWV1ZVtJOTE1X05VTV9SSU5HU107 CisJdWludDMyX3QgICAgICAgICAgICBmbGFnc1tJOTE1X05VTV9SSU5HU107CisJc3BpbmxvY2tf dCAgICAgICAgICBsb2NrOworCisJLyogVHVuaW5nIHBhcmFtZXRlcnM6ICovCisJaW50MzJfdCAg ICAgICAgICAgICBwcmlvcml0eV9sZXZlbF9taW47CisJaW50MzJfdCAgICAgICAgICAgICBwcmlv cml0eV9sZXZlbF9tYXg7CisJaW50MzJfdCAgICAgICAgICAgICBwcmlvcml0eV9sZXZlbF9wcmVl bXB0OworCXVpbnQzMl90ICAgICAgICAgICAgbWluX2ZseWluZzsKK307CisKKy8qIEZsYWcgYml0 cyBmb3IgaTkxNV9zY2hlZHVsZXI6OmZsYWdzICovCitlbnVtIHsKKwlpOTE1X3NmX2ludGVycnVw dHNfZW5hYmxlZCAgPSAoMSA8PCAwKSwKKwlpOTE1X3NmX3N1Ym1pdHRpbmcgICAgICAgICAgPSAo MSA8PCAxKSwKK307CisKK2ludCAgICAgICAgIGk5MTVfc2NoZWR1bGVyX2luaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7CitpbnQgICAgICAgICBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9leGVjYnVm ZmVyKHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqcWUpOworYm9vbCAgICAgICAg aTkxNV9zY2hlZHVsZXJfbm90aWZ5X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpyZXEpOworCisjZW5kaWYgIC8qIF9JOTE1X1NDSEVEVUxFUl9IXyAqLwotLSAKMS45LjEKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==