From mboxrd@z Thu Jan 1 00:00:00 1970 From: John.C.Harrison@Intel.com Subject: [RFC 3/9] staging/android/sync: Move sync framework out of staging Date: Wed, 13 Jan 2016 17:57:29 +0000 Message-ID: <1452707855-9791-4-git-send-email-John.C.Harrison@Intel.com> References: <1452707855-9791-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 E907E6E972 for ; Wed, 13 Jan 2016 09:57:43 -0800 (PST) In-Reply-To: <1452707855-9791-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 Cc: Greg Kroah-Hartman , Riley Andrews , =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Gustavo Padovan List-Id: intel-gfx@lists.freedesktop.org RnJvbTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KClRoZSBzeW5j IGZyYW1ld29yayBpcyBub3cgdXNlZCBieSB0aGUgaTkxNSBkcml2ZXIuIFRoZXJlZm9yZSBpdCBj YW4gYmUKbW92ZWQgb3V0IG9mIHN0YWdpbmcgYW5kIGludG8gdGhlIHJlZ3VsYXIgdHJlZS4gQWxz bywgdGhlIHB1YmxpYwppbnRlcmZhY2VzIGNhbiBhY3R1YWxseSBiZSBtYWRlIHB1YmxpYyBhbmQg ZXhwb3J0ZWQuCgp2MC4zOiBOZXcgcGF0Y2ggZm9yIHNlcmllcy4KClNpZ25lZC1vZmYtYnk6IEpv aG4gSGFycmlzb24gPEpvaG4uQy5IYXJyaXNvbkBJbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IEdl b2ZmIE1pbGxlciA8Z2VvZmYubWlsbGVyQGludGVsLmNvbT4KQ2M6IEd1c3Rhdm8gUGFkb3ZhbiA8 Z3VzdGF2by5wYWRvdmFuQGNvbGxhYm9yYS5jby51az4KQ2M6IEdyZWcgS3JvYWgtSGFydG1hbiA8 Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+CkNjOiBBcnZlIEhqw7hubmV2w6VnIDxhcnZlQGFu ZHJvaWQuY29tPgpDYzogUmlsZXkgQW5kcmV3cyA8cmlhbmRyZXdzQGFuZHJvaWQuY29tPgotLS0K IGRyaXZlcnMvYW5kcm9pZC9LY29uZmlnICAgICAgICAgICAgICAgIHwgIDI4ICsrCiBkcml2ZXJz L2FuZHJvaWQvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2FuZHJvaWQv c3dfc3luYy5jICAgICAgICAgICAgICB8IDI2MCArKysrKysrKysrKysKIGRyaXZlcnMvYW5kcm9p ZC9zd19zeW5jLmggICAgICAgICAgICAgIHwgIDU5ICsrKwogZHJpdmVycy9hbmRyb2lkL3N5bmMu YyAgICAgICAgICAgICAgICAgfCA3MzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiBkcml2ZXJzL2FuZHJvaWQvc3luYy5oICAgICAgICAgICAgICAgICB8IDM2NiArKysrKysrKysr KysrKysrCiBkcml2ZXJzL2FuZHJvaWQvc3luY19kZWJ1Zy5jICAgICAgICAgICB8IDI1NSArKysr KysrKysrKysKIGRyaXZlcnMvYW5kcm9pZC90cmFjZS9zeW5jLmggICAgICAgICAgIHwgIDgyICsr KysKIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcgICAgICAgIHwgIDI4IC0tCiBkcml2 ZXJzL3N0YWdpbmcvYW5kcm9pZC9NYWtlZmlsZSAgICAgICB8ICAgMiAtCiBkcml2ZXJzL3N0YWdp bmcvYW5kcm9pZC9zd19zeW5jLmMgICAgICB8IDI2MCAtLS0tLS0tLS0tLS0KIGRyaXZlcnMvc3Rh Z2luZy9hbmRyb2lkL3N3X3N5bmMuaCAgICAgIHwgIDU5IC0tLQogZHJpdmVycy9zdGFnaW5nL2Fu ZHJvaWQvc3luYy5jICAgICAgICAgfCA3MzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmggICAgICAgICB8IDM2NiAtLS0tLS0t LS0tLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jX2RlYnVnLmMgICB8IDI1NSAt LS0tLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3RyYWNlL3N5bmMuaCAgIHwgIDgy IC0tLS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkvc3dfc3luYy5oIHwgIDMyIC0tCiBk cml2ZXJzL3N0YWdpbmcvYW5kcm9pZC91YXBpL3N5bmMuaCAgICB8ICA5NyAtLS0tLQogaW5jbHVk ZS91YXBpL0tidWlsZCAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogaW5jbHVkZS91YXBpL3N5 bmMvS2J1aWxkICAgICAgICAgICAgICAgfCAgIDMgKwogaW5jbHVkZS91YXBpL3N5bmMvc3dfc3lu Yy5oICAgICAgICAgICAgfCAgMzIgKysKIGluY2x1ZGUvdWFwaS9zeW5jL3N5bmMuaCAgICAgICAg ICAgICAgIHwgIDk3ICsrKysrCiAyMiBmaWxlcyBjaGFuZ2VkLCAxOTE5IGluc2VydGlvbnMoKyks IDE5MTUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9hbmRyb2lkL3N3 X3N5bmMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvYW5kcm9pZC9zd19zeW5jLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2FuZHJvaWQvc3luYy5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9hbmRyb2lkL3N5bmMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvYW5k cm9pZC9zeW5jX2RlYnVnLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2FuZHJvaWQvdHJh Y2Uvc3luYy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3df c3luYy5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3dfc3lu Yy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3luYy5jCiBk ZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3luYy5oCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3luY19kZWJ1Zy5jCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdHJhY2Uvc3luYy5oCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS9zd19zeW5jLmgKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC91YXBpL3N5bmMuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9zeW5jL0tidWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGluY2x1ZGUvdWFwaS9zeW5jL3N3X3N5bmMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUv dWFwaS9zeW5jL3N5bmMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9LY29uZmlnIGIv ZHJpdmVycy9hbmRyb2lkL0tjb25maWcKaW5kZXggYmRmYzZjNi4uOWVkY2Q4ZiAxMDA2NDQKLS0t IGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWcKKysrIGIvZHJpdmVycy9hbmRyb2lkL0tjb25maWcK QEAgLTMyLDYgKzMyLDM0IEBAIGNvbmZpZyBBTkRST0lEX0JJTkRFUl9JUENfMzJCSVQKIAogCSAg Tm90ZSB0aGF0IGVuYWJsaW5nIHRoaXMgd2lsbCBicmVhayBuZXdlciBBbmRyb2lkIHVzZXItc3Bh Y2UuCiAKK2NvbmZpZyBTWU5DCisJYm9vbCAiU3luY2hyb25pemF0aW9uIGZyYW1ld29yayIKKwlk ZWZhdWx0IG4KKwlzZWxlY3QgQU5PTl9JTk9ERVMKKwlzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVIK KwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmcmFtZXdvcmsgZm9yIHN5 bmNocm9uaXphdGlvbiBiZXR3ZWVuIG11bHRpcGxlCisJICBkcml2ZXJzLiAgU3luYyBpbXBsZW1l bnRhdGlvbnMgY2FuIHRha2UgYWR2YW50YWdlIG9mIGhhcmR3YXJlCisJICBzeW5jaHJvbml6YXRp b24gYnVpbHQgaW50byBkZXZpY2VzIGxpa2UgR1BVcy4KKworY29uZmlnIFNXX1NZTkMKKwlib29s ICJTb2Z0d2FyZSBzeW5jaHJvbml6YXRpb24gb2JqZWN0cyIKKwlkZWZhdWx0IG4KKwlkZXBlbmRz IG9uIFNZTkMKKwktLS1oZWxwLS0tCisJICBBIHN5bmMgb2JqZWN0IGRyaXZlciB0aGF0IHVzZXMg YSAzMmJpdCBjb3VudGVyIHRvIGNvb3JkaW5hdGUKKwkgIHN5bmNocm9uaXphdGlvbi4gIFVzZWZ1 bCB3aGVuIHRoZXJlIGlzIG5vIGhhcmR3YXJlIHByaW1pdGl2ZSBiYWNraW5nCisJICB0aGUgc3lu Y2hyb25pemF0aW9uLgorCitjb25maWcgU1dfU1lOQ19VU0VSCisJYm9vbCAiVXNlcnNwYWNlIEFQ SSBmb3IgU1dfU1lOQyIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIFNXX1NZTkMKKwktLS1oZWxw LS0tCisJICBQcm92aWRlcyBhIHVzZXIgc3BhY2UgQVBJIHRvIHRoZSBzdyBzeW5jIG9iamVjdC4K KwkgICpXQVJOSU5HKiBpbXByb3BlciB1c2Ugb2YgdGhpcyBjYW4gcmVzdWx0IGluIGRlYWRsb2Nr aW5nIGtlcm5lbAorCSAgZHJpdmVycyBmcm9tIHVzZXJzcGFjZS4KKwogZW5kaWYgIyBpZiBBTkRS T0lECiAKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9NYWtlZmlsZSBiL2Ry aXZlcnMvYW5kcm9pZC9NYWtlZmlsZQppbmRleCAzYjdlNGIwLi5hMTQ2NWRkIDEwMDY0NAotLS0g YS9kcml2ZXJzL2FuZHJvaWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9hbmRyb2lkL01ha2VmaWxl CkBAIC0xLDMgKzEsNSBAQAogY2NmbGFncy15ICs9IC1JJChzcmMpCQkJIyBuZWVkZWQgZm9yIHRy YWNlIGV2ZW50cwogCiBvYmotJChDT05GSUdfQU5EUk9JRF9CSU5ERVJfSVBDKQkrPSBiaW5kZXIu bworb2JqLSQoQ09ORklHX1NZTkMpCQkJKz0gc3luYy5vIHN5bmNfZGVidWcubworb2JqLSQoQ09O RklHX1NXX1NZTkMpCQkJKz0gc3dfc3luYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQv c3dfc3luYy5jIGIvZHJpdmVycy9hbmRyb2lkL3N3X3N5bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5jNGZmMTY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hbmRy b2lkL3N3X3N5bmMuYwpAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqIGRyaXZlcnMvYmFzZS9zd19z eW5jLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCisgKgorICogVGhp cyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBh bmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lu aXQuaD4KKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+ CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Cisj aW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisK KyNpbmNsdWRlICJzd19zeW5jLmgiCisKK3N0YXRpYyBpbnQgc3dfc3luY19jbXAodTMyIGEsIHUz MiBiKQoreworCWlmIChhID09IGIpCisJCXJldHVybiAwOworCisJcmV0dXJuICgoczMyKWEgLSAo czMyKWIpIDwgMCA/IC0xIDogMTsKK30KKworc3RydWN0IHN5bmNfcHQgKnN3X3N5bmNfcHRfY3Jl YXRlKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmosIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3Qg c3dfc3luY19wdCAqcHQ7CisKKwlwdCA9IChzdHJ1Y3Qgc3dfc3luY19wdCAqKQorCQlzeW5jX3B0 X2NyZWF0ZSgmb2JqLT5vYmosIHNpemVvZihzdHJ1Y3Qgc3dfc3luY19wdCkpOworCisJcHQtPnZh bHVlID0gdmFsdWU7CisKKwlyZXR1cm4gKHN0cnVjdCBzeW5jX3B0ICopcHQ7Cit9CitFWFBPUlRf U1lNQk9MKHN3X3N5bmNfcHRfY3JlYXRlKTsKKworc3RhdGljIHN0cnVjdCBzeW5jX3B0ICpzd19z eW5jX3B0X2R1cChzdHJ1Y3Qgc3luY19wdCAqc3luY19wdCkKK3sKKwlzdHJ1Y3Qgc3dfc3luY19w dCAqcHQgPSAoc3RydWN0IHN3X3N5bmNfcHQgKilzeW5jX3B0OworCXN0cnVjdCBzd19zeW5jX3Rp bWVsaW5lICpvYmogPQorCQkoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKilzeW5jX3B0X3BhcmVu dChzeW5jX3B0KTsKKworCXJldHVybiAoc3RydWN0IHN5bmNfcHQgKilzd19zeW5jX3B0X2NyZWF0 ZShvYmosIHB0LT52YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgc3dfc3luY19wdF9oYXNfc2lnbmFs ZWQoc3RydWN0IHN5bmNfcHQgKnN5bmNfcHQpCit7CisJc3RydWN0IHN3X3N5bmNfcHQgKnB0ID0g KHN0cnVjdCBzd19zeW5jX3B0ICopc3luY19wdDsKKwlzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAq b2JqID0KKwkJKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICopc3luY19wdF9wYXJlbnQoc3luY19w dCk7CisKKwlyZXR1cm4gc3dfc3luY19jbXAob2JqLT52YWx1ZSwgcHQtPnZhbHVlKSA+PSAwOwor fQorCitzdGF0aWMgaW50IHN3X3N5bmNfcHRfY29tcGFyZShzdHJ1Y3Qgc3luY19wdCAqYSwgc3Ry dWN0IHN5bmNfcHQgKmIpCit7CisJc3RydWN0IHN3X3N5bmNfcHQgKnB0X2EgPSAoc3RydWN0IHN3 X3N5bmNfcHQgKilhOworCXN0cnVjdCBzd19zeW5jX3B0ICpwdF9iID0gKHN0cnVjdCBzd19zeW5j X3B0ICopYjsKKworCXJldHVybiBzd19zeW5jX2NtcChwdF9hLT52YWx1ZSwgcHRfYi0+dmFsdWUp OworfQorCitzdGF0aWMgaW50IHN3X3N5bmNfZmlsbF9kcml2ZXJfZGF0YShzdHJ1Y3Qgc3luY19w dCAqc3luY19wdCwKKwkJCQkgICAgdm9pZCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IHN3 X3N5bmNfcHQgKnB0ID0gKHN0cnVjdCBzd19zeW5jX3B0ICopc3luY19wdDsKKworCWlmIChzaXpl IDwgc2l6ZW9mKHB0LT52YWx1ZSkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtY3B5KGRhdGEs ICZwdC0+dmFsdWUsIHNpemVvZihwdC0+dmFsdWUpKTsKKworCXJldHVybiBzaXplb2YocHQtPnZh bHVlKTsKK30KKworc3RhdGljIHZvaWQgc3dfc3luY190aW1lbGluZV92YWx1ZV9zdHIoc3RydWN0 IHN5bmNfdGltZWxpbmUgKnN5bmNfdGltZWxpbmUsCisJCQkJICAgICAgIGNoYXIgKnN0ciwgaW50 IHNpemUpCit7CisJc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKnRpbWVsaW5lID0KKwkJKHN0cnVj dCBzd19zeW5jX3RpbWVsaW5lICopc3luY190aW1lbGluZTsKKwlzbnByaW50ZihzdHIsIHNpemUs ICIlZCIsIHRpbWVsaW5lLT52YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHN3X3N5bmNfcHRfdmFs dWVfc3RyKHN0cnVjdCBzeW5jX3B0ICpzeW5jX3B0LAorCQkJCSBjaGFyICpzdHIsIGludCBzaXpl KQoreworCXN0cnVjdCBzd19zeW5jX3B0ICpwdCA9IChzdHJ1Y3Qgc3dfc3luY19wdCAqKXN5bmNf cHQ7CisKKwlzbnByaW50ZihzdHIsIHNpemUsICIlZCIsIHB0LT52YWx1ZSk7Cit9CisKK3N0YXRp YyBzdHJ1Y3Qgc3luY190aW1lbGluZV9vcHMgc3dfc3luY190aW1lbGluZV9vcHMgPSB7CisJLmRy aXZlcl9uYW1lID0gInN3X3N5bmMiLAorCS5kdXAgPSBzd19zeW5jX3B0X2R1cCwKKwkuaGFzX3Np Z25hbGVkID0gc3dfc3luY19wdF9oYXNfc2lnbmFsZWQsCisJLmNvbXBhcmUgPSBzd19zeW5jX3B0 X2NvbXBhcmUsCisJLmZpbGxfZHJpdmVyX2RhdGEgPSBzd19zeW5jX2ZpbGxfZHJpdmVyX2RhdGEs CisJLnRpbWVsaW5lX3ZhbHVlX3N0ciA9IHN3X3N5bmNfdGltZWxpbmVfdmFsdWVfc3RyLAorCS5w dF92YWx1ZV9zdHIgPSBzd19zeW5jX3B0X3ZhbHVlX3N0ciwKK307CisKK3N0cnVjdCBzd19zeW5j X3RpbWVsaW5lICpzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKQorewor CXN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmogPSAoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUg KikKKwkJc3luY190aW1lbGluZV9jcmVhdGUoJnN3X3N5bmNfdGltZWxpbmVfb3BzLAorCQkJCSAg ICAgc2l6ZW9mKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lKSwKKwkJCQkgICAgIG5hbWUpOworCisJ cmV0dXJuIG9iajsKK30KK0VYUE9SVF9TWU1CT0woc3dfc3luY190aW1lbGluZV9jcmVhdGUpOwor Cit2b2lkIHN3X3N5bmNfdGltZWxpbmVfaW5jKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmos IHUzMiBpbmMpCit7CisJb2JqLT52YWx1ZSArPSBpbmM7CisKKwlzeW5jX3RpbWVsaW5lX3NpZ25h bCgmb2JqLT5vYmopOworfQorRVhQT1JUX1NZTUJPTChzd19zeW5jX3RpbWVsaW5lX2luYyk7CisK KyNpZmRlZiBDT05GSUdfU1dfU1lOQ19VU0VSCisvKiAqV0FSTklORyoKKyAqCisgKiBpbXByb3Bl ciB1c2Ugb2YgdGhpcyBjYW4gcmVzdWx0IGluIGRlYWRsb2NraW5nIGtlcm5lbCBkcml2ZXJzIGZy b20gdXNlcnNwYWNlLgorICovCisKKy8qIG9wZW5pbmcgc3dfc3luYyBjcmVhdGUgYSBuZXcgc3lu YyBvYmogKi8KK3N0YXRpYyBpbnQgc3dfc3luY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0 cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmo7CisJY2hh ciB0YXNrX2NvbW1bVEFTS19DT01NX0xFTl07CisKKwlnZXRfdGFza19jb21tKHRhc2tfY29tbSwg Y3VycmVudCk7CisKKwlvYmogPSBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSh0YXNrX2NvbW0pOwor CWlmICghb2JqKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IG9i ajsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN3X3N5bmNfcmVsZWFzZShzdHJ1Y3Qg aW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc3dfc3luY190aW1l bGluZSAqb2JqID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3luY190aW1lbGluZV9kZXN0cm95 KCZvYmotPm9iaik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIHN3X3N5bmNfaW9jdGxf Y3JlYXRlX2ZlbmNlKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmosCisJCQkJICAgICAgIHVu c2lnbmVkIGxvbmcgYXJnKQoreworCWludCBmZCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoT19DTE9F WEVDKTsKKwlpbnQgZXJyOworCXN0cnVjdCBzeW5jX3B0ICpwdDsKKwlzdHJ1Y3Qgc3luY19mZW5j ZSAqZmVuY2U7CisJc3RydWN0IHN3X3N5bmNfY3JlYXRlX2ZlbmNlX2RhdGEgZGF0YTsKKworCWlm IChmZCA8IDApCisJCXJldHVybiBmZDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZv aWQgX191c2VyICopYXJnLCBzaXplb2YoZGF0YSkpKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdv dG8gZXJyOworCX0KKworCXB0ID0gc3dfc3luY19wdF9jcmVhdGUob2JqLCBkYXRhLnZhbHVlKTsK KwlpZiAoIXB0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWRhdGEu bmFtZVtzaXplb2YoZGF0YS5uYW1lKSAtIDFdID0gJ1wwJzsKKwlmZW5jZSA9IHN5bmNfZmVuY2Vf Y3JlYXRlKGRhdGEubmFtZSwgcHQpOworCWlmICghZmVuY2UpIHsKKwkJc3luY19wdF9mcmVlKHB0 KTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJZGF0YS5mZW5jZSA9IGZk OworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmZGF0YSwgc2l6ZW9mKGRh dGEpKSkgeworCQlzeW5jX2ZlbmNlX3B1dChmZW5jZSk7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdv dG8gZXJyOworCX0KKworCXN5bmNfZmVuY2VfaW5zdGFsbChmZW5jZSwgZmQpOworCisJcmV0dXJu IDA7CisKK2VycjoKKwlwdXRfdW51c2VkX2ZkKGZkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0 aWMgbG9uZyBzd19zeW5jX2lvY3RsX2luYyhzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqLCB1 bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1MzIgdmFsdWU7CisKKwlpZiAoY29weV9mcm9tX3VzZXIo JnZhbHVlLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih2YWx1ZSkpKQorCQlyZXR1cm4gLUVG QVVMVDsKKworCXN3X3N5bmNfdGltZWxpbmVfaW5jKG9iaiwgdmFsdWUpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBsb25nIHN3X3N5bmNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2ln bmVkIGludCBjbWQsCisJCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBzd19zeW5j X3RpbWVsaW5lICpvYmogPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgewor CWNhc2UgU1dfU1lOQ19JT0NfQ1JFQVRFX0ZFTkNFOgorCQlyZXR1cm4gc3dfc3luY19pb2N0bF9j cmVhdGVfZmVuY2Uob2JqLCBhcmcpOworCisJY2FzZSBTV19TWU5DX0lPQ19JTkM6CisJCXJldHVy biBzd19zeW5jX2lvY3RsX2luYyhvYmosIGFyZyk7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVO T1RUWTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN3X3N5 bmNfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHN3X3N5bmNfb3Bl biwKKwkucmVsZWFzZSA9IHN3X3N5bmNfcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBzd19z eW5jX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSBzd19zeW5jX2lvY3RsLAorfTsKKworc3RhdGlj IHN0cnVjdCBtaXNjZGV2aWNlIHN3X3N5bmNfZGV2ID0geworCS5taW5vcgk9IE1JU0NfRFlOQU1J Q19NSU5PUiwKKwkubmFtZQk9ICJzd19zeW5jIiwKKwkuZm9wcwk9ICZzd19zeW5jX2ZvcHMsCit9 OworCitzdGF0aWMgaW50IF9faW5pdCBzd19zeW5jX2RldmljZV9pbml0KHZvaWQpCit7CisJcmV0 dXJuIG1pc2NfcmVnaXN0ZXIoJnN3X3N5bmNfZGV2KTsKK30KK2RldmljZV9pbml0Y2FsbChzd19z eW5jX2RldmljZV9pbml0KTsKKworI2VuZGlmIC8qIENPTkZJR19TV19TWU5DX1VTRVIgKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9zd19zeW5jLmggYi9kcml2ZXJzL2FuZHJvaWQvc3df c3luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZjhiODYKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2FuZHJvaWQvc3dfc3luYy5oCkBAIC0wLDAgKzEsNTkgQEAK Ky8qCisgKiBpbmNsdWRlL2xpbnV4L3N3X3N5bmMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAx MiBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5 IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TV19T WU5DX0gKKyNkZWZpbmUgX0xJTlVYX1NXX1NZTkNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4KKyNpbmNsdWRlIDxsaW51eC9rY29uZmlnLmg+CisjaW5jbHVkZSA8dWFwaS9zeW5jL3N3X3N5 bmMuaD4KKyNpbmNsdWRlICJzeW5jLmgiCisKK3N0cnVjdCBzd19zeW5jX3RpbWVsaW5lIHsKKwlz dHJ1Y3QJc3luY190aW1lbGluZQlvYmo7CisKKwl1MzIJCQl2YWx1ZTsKK307CisKK3N0cnVjdCBz d19zeW5jX3B0IHsKKwlzdHJ1Y3Qgc3luY19wdAkJcHQ7CisKKwl1MzIJCQl2YWx1ZTsKK307CisK KyNpZiBJU19FTkFCTEVEKENPTkZJR19TV19TWU5DKQorc3RydWN0IHN3X3N5bmNfdGltZWxpbmUg KnN3X3N5bmNfdGltZWxpbmVfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCBzd19zeW5j X3RpbWVsaW5lX2luYyhzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqLCB1MzIgaW5jKTsKKwor c3RydWN0IHN5bmNfcHQgKnN3X3N5bmNfcHRfY3JlYXRlKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5l ICpvYmosIHUzMiB2YWx1ZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dfc3luY190 aW1lbGluZSAqc3dfc3luY190aW1lbGluZV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwly ZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3X3N5bmNfdGltZWxpbmVfaW5j KHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmosIHUzMiBpbmMpCit7Cit9CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IHN5bmNfcHQgKnN3X3N5bmNfcHRfY3JlYXRlKHN0cnVjdCBzd19zeW5jX3Rp bWVsaW5lICpvYmosCisJCQkJCQl1MzIgdmFsdWUpCit7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5k aWYgLyogSVNfRU5BQkxFRChDT05GSUdfU1dfU1lOQykgKi8KKworI2VuZGlmIC8qIF9MSU5VWF9T V19TWU5DX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9zeW5jLmMgYi9kcml2ZXJz L2FuZHJvaWQvc3luYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMGU5 MTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FuZHJvaWQvc3luYy5jCkBAIC0wLDAgKzEs NzM0IEBACisvKgorICogZHJpdmVycy9iYXNlL3N5bmMuYworICoKKyAqIENvcHlyaWdodCAoQykg MjAxMiBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24g MiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICog bWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJt cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgv ZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zp bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgor I2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1 ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUg PGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgorCisjaW5j bHVkZSAic3luYy5oIgorCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlICJ0 cmFjZS9zeW5jLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmVuY2Vfb3BzIGFuZHJvaWRfZmVu Y2Vfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3luY19mZW5jZV9m b3BzOworCitzdHJ1Y3Qgc3luY190aW1lbGluZSAqc3luY190aW1lbGluZV9jcmVhdGUoY29uc3Qg c3RydWN0IHN5bmNfdGltZWxpbmVfb3BzICpvcHMsCisJCQkJCSAgIGludCBzaXplLCBjb25zdCBj aGFyICpuYW1lKQoreworCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmo7CisKKwlpZiAoc2l6ZSA8 IHNpemVvZihzdHJ1Y3Qgc3luY190aW1lbGluZSkpCisJCXJldHVybiBOVUxMOworCisJb2JqID0g a3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiBO VUxMOworCisJa3JlZl9pbml0KCZvYmotPmtyZWYpOworCW9iai0+b3BzID0gb3BzOworCW9iai0+ Y29udGV4dCA9IGZlbmNlX2NvbnRleHRfYWxsb2MoMSk7CisJc3RybGNweShvYmotPm5hbWUsIG5h bWUsIHNpemVvZihvYmotPm5hbWUpKTsKKworCUlOSVRfTElTVF9IRUFEKCZvYmotPmNoaWxkX2xp c3RfaGVhZCk7CisJSU5JVF9MSVNUX0hFQUQoJm9iai0+YWN0aXZlX2xpc3RfaGVhZCk7CisJc3Bp bl9sb2NrX2luaXQoJm9iai0+Y2hpbGRfbGlzdF9sb2NrKTsKKworCXN5bmNfdGltZWxpbmVfZGVi dWdfYWRkKG9iaik7CisKKwlyZXR1cm4gb2JqOworfQorRVhQT1JUX1NZTUJPTChzeW5jX3RpbWVs aW5lX2NyZWF0ZSk7CisKK3N0YXRpYyB2b2lkIHN5bmNfdGltZWxpbmVfZnJlZShzdHJ1Y3Qga3Jl ZiAqa3JlZikKK3sKKwlzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqID0KKwkJY29udGFpbmVyX29m KGtyZWYsIHN0cnVjdCBzeW5jX3RpbWVsaW5lLCBrcmVmKTsKKworCXN5bmNfdGltZWxpbmVfZGVi dWdfcmVtb3ZlKG9iaik7CisKKwlpZiAob2JqLT5vcHMtPnJlbGVhc2Vfb2JqKQorCQlvYmotPm9w cy0+cmVsZWFzZV9vYmoob2JqKTsKKworCWtmcmVlKG9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHN5 bmNfdGltZWxpbmVfZ2V0KHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopCit7CisJa3JlZl9nZXQo Jm9iai0+a3JlZik7Cit9CisKK3N0YXRpYyB2b2lkIHN5bmNfdGltZWxpbmVfcHV0KHN0cnVjdCBz eW5jX3RpbWVsaW5lICpvYmopCit7CisJa3JlZl9wdXQoJm9iai0+a3JlZiwgc3luY190aW1lbGlu ZV9mcmVlKTsKK30KKwordm9pZCBzeW5jX3RpbWVsaW5lX2Rlc3Ryb3koc3RydWN0IHN5bmNfdGlt ZWxpbmUgKm9iaikKK3sKKwlvYmotPmRlc3Ryb3llZCA9IHRydWU7CisJLyoKKwkgKiBFbnN1cmUg dGltZWxpbmUgaXMgbWFya2VkIGFzIGRlc3Ryb3llZCBiZWZvcmUKKwkgKiBjaGFuZ2luZyB0aW1l bGluZSdzIGZlbmNlcyBzdGF0dXMuCisJICovCisJc21wX3dtYigpOworCisJLyoKKwkgKiBzaWdu YWwgYW55IGNoaWxkcmVuIHRoYXQgdGhlaXIgcGFyZW50IGlzIGdvaW5nIGF3YXkuCisJICovCisJ c3luY190aW1lbGluZV9zaWduYWwob2JqKTsKKwlzeW5jX3RpbWVsaW5lX3B1dChvYmopOworfQor RVhQT1JUX1NZTUJPTChzeW5jX3RpbWVsaW5lX2Rlc3Ryb3kpOworCit2b2lkIHN5bmNfdGltZWxp bmVfc2lnbmFsKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopCit7CisJdW5zaWduZWQgbG9uZyBm bGFnczsKKwlMSVNUX0hFQUQoc2lnbmFsZWRfcHRzKTsKKwlzdHJ1Y3Qgc3luY19wdCAqcHQsICpu ZXh0OworCisJdHJhY2Vfc3luY190aW1lbGluZShvYmopOworCisJc3Bpbl9sb2NrX2lycXNhdmUo Jm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUocHQsIG5leHQsICZvYmotPmFjdGl2ZV9saXN0X2hlYWQsCisJCQkJIGFjdGl2ZV9saXN0KSB7 CisJCWlmIChmZW5jZV9pc19zaWduYWxlZF9sb2NrZWQoJnB0LT5iYXNlKSkKKwkJCWxpc3RfZGVs X2luaXQoJnB0LT5hY3RpdmVfbGlzdCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm b2JqLT5jaGlsZF9saXN0X2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woc3luY190aW1l bGluZV9zaWduYWwpOworCitzdHJ1Y3Qgc3luY19wdCAqc3luY19wdF9jcmVhdGUoc3RydWN0IHN5 bmNfdGltZWxpbmUgKm9iaiwgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlz dHJ1Y3Qgc3luY19wdCAqcHQ7CisKKwlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc3luY19wdCkp CisJCXJldHVybiBOVUxMOworCisJcHQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlm IChwdCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvYmot PmNoaWxkX2xpc3RfbG9jaywgZmxhZ3MpOworCXN5bmNfdGltZWxpbmVfZ2V0KG9iaik7CisJZmVu Y2VfaW5pdCgmcHQtPmJhc2UsICZhbmRyb2lkX2ZlbmNlX29wcywgJm9iai0+Y2hpbGRfbGlzdF9s b2NrLAorCQkgICBvYmotPmNvbnRleHQsICsrb2JqLT52YWx1ZSk7CisJbGlzdF9hZGRfdGFpbCgm cHQtPmNoaWxkX2xpc3QsICZvYmotPmNoaWxkX2xpc3RfaGVhZCk7CisJSU5JVF9MSVNUX0hFQUQo JnB0LT5hY3RpdmVfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqLT5jaGlsZF9s aXN0X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcHQ7Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNfcHRf Y3JlYXRlKTsKKwordm9pZCBzeW5jX3B0X2ZyZWUoc3RydWN0IHN5bmNfcHQgKnB0KQoreworCWZl bmNlX3B1dCgmcHQtPmJhc2UpOworfQorRVhQT1JUX1NZTUJPTChzeW5jX3B0X2ZyZWUpOworCitz dGF0aWMgc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfYWxsb2MoaW50IHNpemUsIGNvbnN0 IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlOworCisJZmVuY2UgPSBr emFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChmZW5jZSA9PSBOVUxMKQorCQlyZXR1cm4g TlVMTDsKKworCWZlbmNlLT5maWxlID0gYW5vbl9pbm9kZV9nZXRmaWxlKCJzeW5jX2ZlbmNlIiwg JnN5bmNfZmVuY2VfZm9wcywKKwkJCQkJIGZlbmNlLCAwKTsKKwlpZiAoSVNfRVJSKGZlbmNlLT5m aWxlKSkKKwkJZ290byBlcnI7CisKKwlrcmVmX2luaXQoJmZlbmNlLT5rcmVmKTsKKwlzdHJsY3B5 KGZlbmNlLT5uYW1lLCBuYW1lLCBzaXplb2YoZmVuY2UtPm5hbWUpKTsKKworCWluaXRfd2FpdHF1 ZXVlX2hlYWQoJmZlbmNlLT53cSk7CisKKwlyZXR1cm4gZmVuY2U7CisKK2VycjoKKwlrZnJlZShm ZW5jZSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGZlbmNlX2NoZWNrX2NiX2Z1 bmMoc3RydWN0IGZlbmNlICpmLCBzdHJ1Y3QgZmVuY2VfY2IgKmNiKQoreworCXN0cnVjdCBzeW5j X2ZlbmNlX2NiICpjaGVjazsKKwlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2U7CisKKwljaGVjayA9 IGNvbnRhaW5lcl9vZihjYiwgc3RydWN0IHN5bmNfZmVuY2VfY2IsIGNiKTsKKwlmZW5jZSA9IGNo ZWNrLT5mZW5jZTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZmZW5jZS0+c3RhdHVzKSkK KwkJd2FrZV91cF9hbGwoJmZlbmNlLT53cSk7Cit9CisKKy8qIFRPRE86IGltcGxlbWVudCBhIGNy ZWF0ZSB3aGljaCB0YWtlcyBtb3JlIHRoYXQgb25lIHN5bmNfcHQgKi8KK3N0cnVjdCBzeW5jX2Zl bmNlICpzeW5jX2ZlbmNlX2NyZWF0ZV9kbWEoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGZlbmNl ICpwdCkKK3sKKwlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2U7CisKKwlmZW5jZSA9IHN5bmNfZmVu Y2VfYWxsb2Mob2Zmc2V0b2Yoc3RydWN0IHN5bmNfZmVuY2UsIGNic1sxXSksIG5hbWUpOworCWlm IChmZW5jZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWZlbmNlLT5udW1fZmVuY2VzID0g MTsKKwlhdG9taWNfc2V0KCZmZW5jZS0+c3RhdHVzLCAxKTsKKworCWZlbmNlLT5jYnNbMF0uc3lu Y19wdCA9IHB0OworCWZlbmNlLT5jYnNbMF0uZmVuY2UgPSBmZW5jZTsKKwlpZiAoZmVuY2VfYWRk X2NhbGxiYWNrKHB0LCAmZmVuY2UtPmNic1swXS5jYiwgZmVuY2VfY2hlY2tfY2JfZnVuYykpCisJ CWF0b21pY19kZWMoJmZlbmNlLT5zdGF0dXMpOworCisJc3luY19mZW5jZV9kZWJ1Z19hZGQoZmVu Y2UpOworCisJcmV0dXJuIGZlbmNlOworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX2NyZWF0 ZV9kbWEpOworCitzdHJ1Y3Qgc3luY19mZW5jZSAqc3luY19mZW5jZV9jcmVhdGUoY29uc3QgY2hh ciAqbmFtZSwgc3RydWN0IHN5bmNfcHQgKnB0KQoreworCXJldHVybiBzeW5jX2ZlbmNlX2NyZWF0 ZV9kbWEobmFtZSwgJnB0LT5iYXNlKTsKK30KK0VYUE9SVF9TWU1CT0woc3luY19mZW5jZV9jcmVh dGUpOworCitzdHJ1Y3Qgc3luY19mZW5jZSAqc3luY19mZW5jZV9mZGdldChpbnQgZmQpCit7CisJ c3RydWN0IGZpbGUgKmZpbGUgPSBmZ2V0KGZkKTsKKworCWlmIChmaWxlID09IE5VTEwpCisJCXJl dHVybiBOVUxMOworCisJaWYgKGZpbGUtPmZfb3AgIT0gJnN5bmNfZmVuY2VfZm9wcykKKwkJZ290 byBlcnI7CisKKwlyZXR1cm4gZmlsZS0+cHJpdmF0ZV9kYXRhOworCitlcnI6CisJZnB1dChmaWxl KTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woc3luY19mZW5jZV9mZGdldCk7CisK K3ZvaWQgc3luY19mZW5jZV9wdXQoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlKQoreworCWZwdXQo ZmVuY2UtPmZpbGUpOworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX3B1dCk7CisKK3ZvaWQg c3luY19mZW5jZV9pbnN0YWxsKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwgaW50IGZkKQorewor CWZkX2luc3RhbGwoZmQsIGZlbmNlLT5maWxlKTsKK30KK0VYUE9SVF9TWU1CT0woc3luY19mZW5j ZV9pbnN0YWxsKTsKKworc3RhdGljIHZvaWQgc3luY19mZW5jZV9hZGRfcHQoc3RydWN0IHN5bmNf ZmVuY2UgKmZlbmNlLAorCQkJICAgICAgaW50ICppLCBzdHJ1Y3QgZmVuY2UgKnB0KQoreworCWZl bmNlLT5jYnNbKmldLnN5bmNfcHQgPSBwdDsKKwlmZW5jZS0+Y2JzWyppXS5mZW5jZSA9IGZlbmNl OworCisJaWYgKCFmZW5jZV9hZGRfY2FsbGJhY2socHQsICZmZW5jZS0+Y2JzWyppXS5jYiwgZmVu Y2VfY2hlY2tfY2JfZnVuYykpIHsKKwkJZmVuY2VfZ2V0KHB0KTsKKwkJKCppKSsrOworCX0KK30K Kworc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfbWVyZ2UoY29uc3QgY2hhciAqbmFtZSwK KwkJCQkgICAgc3RydWN0IHN5bmNfZmVuY2UgKmEsIHN0cnVjdCBzeW5jX2ZlbmNlICpiKQorewor CWludCBudW1fZmVuY2VzID0gYS0+bnVtX2ZlbmNlcyArIGItPm51bV9mZW5jZXM7CisJc3RydWN0 IHN5bmNfZmVuY2UgKmZlbmNlOworCWludCBpLCBpX2EsIGlfYjsKKwl1bnNpZ25lZCBsb25nIHNp emUgPSBvZmZzZXRvZihzdHJ1Y3Qgc3luY19mZW5jZSwgY2JzW251bV9mZW5jZXNdKTsKKworCWZl bmNlID0gc3luY19mZW5jZV9hbGxvYyhzaXplLCBuYW1lKTsKKwlpZiAoZmVuY2UgPT0gTlVMTCkK KwkJcmV0dXJuIE5VTEw7CisKKwlhdG9taWNfc2V0KCZmZW5jZS0+c3RhdHVzLCBudW1fZmVuY2Vz KTsKKworCS8qCisJICogQXNzdW1lIHN5bmNfZmVuY2UgYSBhbmQgYiBhcmUgYm90aCBvcmRlcmVk IGFuZCBoYXZlIG5vCisJICogZHVwbGljYXRlcyB3aXRoIHRoZSBzYW1lIGNvbnRleHQuCisJICoK KwkgKiBJZiBhIHN5bmNfZmVuY2UgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aXRoIHN5bmNfZmVuY2Vf bWVyZ2UKKwkgKiBhbmQgc3luY19mZW5jZV9jcmVhdGUsIHRoaXMgaXMgYSByZWFzb25hYmxlIGFz c3VtcHRpb24uCisJICovCisJZm9yIChpID0gaV9hID0gaV9iID0gMDsgaV9hIDwgYS0+bnVtX2Zl bmNlcyAmJiBpX2IgPCBiLT5udW1fZmVuY2VzOyApIHsKKwkJc3RydWN0IGZlbmNlICpwdF9hID0g YS0+Y2JzW2lfYV0uc3luY19wdDsKKwkJc3RydWN0IGZlbmNlICpwdF9iID0gYi0+Y2JzW2lfYl0u c3luY19wdDsKKworCQlpZiAocHRfYS0+Y29udGV4dCA8IHB0X2ItPmNvbnRleHQpIHsKKwkJCXN5 bmNfZmVuY2VfYWRkX3B0KGZlbmNlLCAmaSwgcHRfYSk7CisKKwkJCWlfYSsrOworCQl9IGVsc2Ug aWYgKHB0X2EtPmNvbnRleHQgPiBwdF9iLT5jb250ZXh0KSB7CisJCQlzeW5jX2ZlbmNlX2FkZF9w dChmZW5jZSwgJmksIHB0X2IpOworCisJCQlpX2IrKzsKKwkJfSBlbHNlIHsKKwkJCWlmIChwdF9h LT5zZXFubyAtIHB0X2ItPnNlcW5vIDw9IElOVF9NQVgpCisJCQkJc3luY19mZW5jZV9hZGRfcHQo ZmVuY2UsICZpLCBwdF9hKTsKKwkJCWVsc2UKKwkJCQlzeW5jX2ZlbmNlX2FkZF9wdChmZW5jZSwg JmksIHB0X2IpOworCisJCQlpX2ErKzsKKwkJCWlfYisrOworCQl9CisJfQorCisJZm9yICg7IGlf YSA8IGEtPm51bV9mZW5jZXM7IGlfYSsrKQorCQlzeW5jX2ZlbmNlX2FkZF9wdChmZW5jZSwgJmks IGEtPmNic1tpX2FdLnN5bmNfcHQpOworCisJZm9yICg7IGlfYiA8IGItPm51bV9mZW5jZXM7IGlf YisrKQorCQlzeW5jX2ZlbmNlX2FkZF9wdChmZW5jZSwgJmksIGItPmNic1tpX2JdLnN5bmNfcHQp OworCisJaWYgKG51bV9mZW5jZXMgPiBpKQorCQlhdG9taWNfc3ViKG51bV9mZW5jZXMgLSBpLCAm ZmVuY2UtPnN0YXR1cyk7CisJZmVuY2UtPm51bV9mZW5jZXMgPSBpOworCisJc3luY19mZW5jZV9k ZWJ1Z19hZGQoZmVuY2UpOworCXJldHVybiBmZW5jZTsKK30KK0VYUE9SVF9TWU1CT0woc3luY19m ZW5jZV9tZXJnZSk7CisKK2ludCBzeW5jX2ZlbmNlX3dha2VfdXBfd3Eod2FpdF9xdWV1ZV90ICpj dXJyLCB1bnNpZ25lZCBtb2RlLAorCQkJCSBpbnQgd2FrZV9mbGFncywgdm9pZCAqa2V5KQorewor CXN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciAqd2FpdDsKKworCXdhaXQgPSBjb250YWluZXJfb2Yo Y3Vyciwgc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyLCB3b3JrKTsKKwlsaXN0X2RlbF9pbml0KCZ3 YWl0LT53b3JrLnRhc2tfbGlzdCk7CisKKwl3YWl0LT5jYWxsYmFjayh3YWl0LT53b3JrLnByaXZh dGUsIHdhaXQpOworCXJldHVybiAxOworfQorCitpbnQgc3luY19mZW5jZV93YWl0X2FzeW5jKHN0 cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwKKwkJCSAgc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyICp3 YWl0ZXIpCit7CisJaW50IGVyciA9IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworCisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAo IWVycikKKwkJcmV0dXJuIDE7CisKKwlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZ3YWl0ZXIt PndvcmssIHN5bmNfZmVuY2Vfd2FrZV91cF93cSk7CisJd2FpdGVyLT53b3JrLnByaXZhdGUgPSBm ZW5jZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmZW5jZS0+d3EubG9jaywgZmxhZ3MpOworCWVy ciA9IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsKKwlpZiAoZXJyID4gMCkKKwkJX19hZGRf d2FpdF9xdWV1ZV90YWlsKCZmZW5jZS0+d3EsICZ3YWl0ZXItPndvcmspOworCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmZlbmNlLT53cS5sb2NrLCBmbGFncyk7CisKKwlpZiAoZXJyIDwgMCkKKwkJ cmV0dXJuIGVycjsKKworCXJldHVybiAhZXJyOworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNl X3dhaXRfYXN5bmMpOworCitpbnQgc3luY19mZW5jZV9jYW5jZWxfYXN5bmMoc3RydWN0IHN5bmNf ZmVuY2UgKmZlbmNlLAorCQkJICAgICBzdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgKndhaXRlcikK K3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2ly cXNhdmUoJmZlbmNlLT53cS5sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZ3YWl0ZXIt PndvcmsudGFza19saXN0KSkKKwkJbGlzdF9kZWxfaW5pdCgmd2FpdGVyLT53b3JrLnRhc2tfbGlz dCk7CisJZWxzZQorCQlyZXQgPSAtRU5PRU5UOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZl bmNlLT53cS5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woc3lu Y19mZW5jZV9jYW5jZWxfYXN5bmMpOworCitpbnQgc3luY19mZW5jZV93YWl0KHN0cnVjdCBzeW5j X2ZlbmNlICpmZW5jZSwgbG9uZyB0aW1lb3V0KQoreworCWxvbmcgcmV0OworCWludCBpOworCisJ aWYgKHRpbWVvdXQgPCAwKQorCQl0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CisJZWxz ZQorCQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKworCXRyYWNlX3N5bmNf d2FpdChmZW5jZSwgMSk7CisJZm9yIChpID0gMDsgaSA8IGZlbmNlLT5udW1fZmVuY2VzOyArK2kp CisJCXRyYWNlX3N5bmNfcHQoZmVuY2UtPmNic1tpXS5zeW5jX3B0KTsKKwlyZXQgPSB3YWl0X2V2 ZW50X2ludGVycnVwdGlibGVfdGltZW91dChmZW5jZS0+d3EsCisJCQkJCSAgICAgICBhdG9taWNf cmVhZCgmZmVuY2UtPnN0YXR1cykgPD0gMCwKKwkJCQkJICAgICAgIHRpbWVvdXQpOworCXRyYWNl X3N5bmNfd2FpdChmZW5jZSwgMCk7CisKKwlpZiAocmV0IDwgMCkgeworCQlyZXR1cm4gcmV0Owor CX0gZWxzZSBpZiAocmV0ID09IDApIHsKKwkJaWYgKHRpbWVvdXQpIHsKKwkJCXByX2luZm8oImZl bmNlIHRpbWVvdXQgb24gWyVwXSBhZnRlciAlZG1zXG4iLCBmZW5jZSwKKwkJCQlqaWZmaWVzX3Rv X21zZWNzKHRpbWVvdXQpKTsKKwkJCXN5bmNfZHVtcCgpOworCQl9CisJCXJldHVybiAtRVRJTUU7 CisJfQorCisJcmV0ID0gYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpOworCWlmIChyZXQpIHsK KwkJcHJfaW5mbygiZmVuY2UgZXJyb3IgJWxkIG9uIFslcF1cbiIsIHJldCwgZmVuY2UpOworCQlz eW5jX2R1bXAoKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woc3luY19mZW5j ZV93YWl0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFuZHJvaWRfZmVuY2VfZ2V0X2RyaXZlcl9u YW1lKHN0cnVjdCBmZW5jZSAqZmVuY2UpCit7CisJc3RydWN0IHN5bmNfcHQgKnB0ID0gY29udGFp bmVyX29mKGZlbmNlLCBzdHJ1Y3Qgc3luY19wdCwgYmFzZSk7CisJc3RydWN0IHN5bmNfdGltZWxp bmUgKnBhcmVudCA9IHN5bmNfcHRfcGFyZW50KHB0KTsKKworCXJldHVybiBwYXJlbnQtPm9wcy0+ ZHJpdmVyX25hbWU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICphbmRyb2lkX2ZlbmNlX2dldF90 aW1lbGluZV9uYW1lKHN0cnVjdCBmZW5jZSAqZmVuY2UpCit7CisJc3RydWN0IHN5bmNfcHQgKnB0 ID0gY29udGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qgc3luY19wdCwgYmFzZSk7CisJc3RydWN0IHN5 bmNfdGltZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRfcGFyZW50KHB0KTsKKworCXJldHVybiBwYXJl bnQtPm5hbWU7Cit9CisKK3N0YXRpYyB2b2lkIGFuZHJvaWRfZmVuY2VfcmVsZWFzZShzdHJ1Y3Qg ZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCBzeW5jX3B0ICpwdCA9IGNvbnRhaW5lcl9vZihmZW5j ZSwgc3RydWN0IHN5bmNfcHQsIGJhc2UpOworCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJlbnQg PSBzeW5jX3B0X3BhcmVudChwdCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9j a19pcnFzYXZlKGZlbmNlLT5sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJnB0LT5jaGlsZF9saXN0 KTsKKwlpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZwdC0+YWN0aXZlX2xpc3QpKSkKKwkJ bGlzdF9kZWwoJnB0LT5hY3RpdmVfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShmZW5j ZS0+bG9jaywgZmxhZ3MpOworCisJaWYgKHBhcmVudC0+b3BzLT5mcmVlX3B0KQorCQlwYXJlbnQt Pm9wcy0+ZnJlZV9wdChwdCk7CisKKwlzeW5jX3RpbWVsaW5lX3B1dChwYXJlbnQpOworCWZlbmNl X2ZyZWUoJnB0LT5iYXNlKTsKK30KKworc3RhdGljIGJvb2wgYW5kcm9pZF9mZW5jZV9zaWduYWxl ZChzdHJ1Y3QgZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCBzeW5jX3B0ICpwdCA9IGNvbnRhaW5l cl9vZihmZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJhc2UpOworCXN0cnVjdCBzeW5jX3RpbWVsaW5l ICpwYXJlbnQgPSBzeW5jX3B0X3BhcmVudChwdCk7CisJaW50IHJldDsKKworCXJldCA9IHBhcmVu dC0+b3BzLT5oYXNfc2lnbmFsZWQocHQpOworCWlmIChyZXQgPCAwKQorCQlmZW5jZS0+c3RhdHVz ID0gcmV0OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIGFuZHJvaWRfZmVuY2VfZW5h YmxlX3NpZ25hbGluZyhzdHJ1Y3QgZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCBzeW5jX3B0ICpw dCA9IGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJhc2UpOworCXN0cnVjdCBz eW5jX3RpbWVsaW5lICpwYXJlbnQgPSBzeW5jX3B0X3BhcmVudChwdCk7CisKKwlpZiAoYW5kcm9p ZF9mZW5jZV9zaWduYWxlZChmZW5jZSkpCisJCXJldHVybiBmYWxzZTsKKworCWxpc3RfYWRkX3Rh aWwoJnB0LT5hY3RpdmVfbGlzdCwgJnBhcmVudC0+YWN0aXZlX2xpc3RfaGVhZCk7CisJcmV0dXJu IHRydWU7Cit9CisKK3N0YXRpYyBpbnQgYW5kcm9pZF9mZW5jZV9maWxsX2RyaXZlcl9kYXRhKHN0 cnVjdCBmZW5jZSAqZmVuY2UsCisJCQkJCSAgdm9pZCAqZGF0YSwgaW50IHNpemUpCit7CisJc3Ry dWN0IHN5bmNfcHQgKnB0ID0gY29udGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qgc3luY19wdCwgYmFz ZSk7CisJc3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRfcGFyZW50KHB0KTsK KworCWlmICghcGFyZW50LT5vcHMtPmZpbGxfZHJpdmVyX2RhdGEpCisJCXJldHVybiAwOworCXJl dHVybiBwYXJlbnQtPm9wcy0+ZmlsbF9kcml2ZXJfZGF0YShwdCwgZGF0YSwgc2l6ZSk7Cit9CisK K3N0YXRpYyB2b2lkIGFuZHJvaWRfZmVuY2VfdmFsdWVfc3RyKHN0cnVjdCBmZW5jZSAqZmVuY2Us CisJCQkJICAgIGNoYXIgKnN0ciwgaW50IHNpemUpCit7CisJc3RydWN0IHN5bmNfcHQgKnB0ID0g Y29udGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qgc3luY19wdCwgYmFzZSk7CisJc3RydWN0IHN5bmNf dGltZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRfcGFyZW50KHB0KTsKKworCWlmICghcGFyZW50LT5v cHMtPnB0X3ZhbHVlX3N0cikgeworCQlpZiAoc2l6ZSkKKwkJCSpzdHIgPSAwOworCQlyZXR1cm47 CisJfQorCXBhcmVudC0+b3BzLT5wdF92YWx1ZV9zdHIocHQsIHN0ciwgc2l6ZSk7Cit9CisKK3N0 YXRpYyB2b2lkIGFuZHJvaWRfZmVuY2VfdGltZWxpbmVfdmFsdWVfc3RyKHN0cnVjdCBmZW5jZSAq ZmVuY2UsCisJCQkJCSAgICAgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3luY19w dCAqcHQgPSBjb250YWluZXJfb2YoZmVuY2UsIHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKKwlzdHJ1 Y3Qgc3luY190aW1lbGluZSAqcGFyZW50ID0gc3luY19wdF9wYXJlbnQocHQpOworCisJaWYgKCFw YXJlbnQtPm9wcy0+dGltZWxpbmVfdmFsdWVfc3RyKSB7CisJCWlmIChzaXplKQorCQkJKnN0ciA9 IDA7CisJCXJldHVybjsKKwl9CisJcGFyZW50LT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cihwYXJl bnQsIHN0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmVuY2Vfb3BzIGFuZHJv aWRfZmVuY2Vfb3BzID0geworCS5nZXRfZHJpdmVyX25hbWUgPSBhbmRyb2lkX2ZlbmNlX2dldF9k cml2ZXJfbmFtZSwKKwkuZ2V0X3RpbWVsaW5lX25hbWUgPSBhbmRyb2lkX2ZlbmNlX2dldF90aW1l bGluZV9uYW1lLAorCS5lbmFibGVfc2lnbmFsaW5nID0gYW5kcm9pZF9mZW5jZV9lbmFibGVfc2ln bmFsaW5nLAorCS5zaWduYWxlZCA9IGFuZHJvaWRfZmVuY2Vfc2lnbmFsZWQsCisJLndhaXQgPSBm ZW5jZV9kZWZhdWx0X3dhaXQsCisJLnJlbGVhc2UgPSBhbmRyb2lkX2ZlbmNlX3JlbGVhc2UsCisJ LmZpbGxfZHJpdmVyX2RhdGEgPSBhbmRyb2lkX2ZlbmNlX2ZpbGxfZHJpdmVyX2RhdGEsCisJLmZl bmNlX3ZhbHVlX3N0ciA9IGFuZHJvaWRfZmVuY2VfdmFsdWVfc3RyLAorCS50aW1lbGluZV92YWx1 ZV9zdHIgPSBhbmRyb2lkX2ZlbmNlX3RpbWVsaW5lX3ZhbHVlX3N0ciwKK307CisKK3N0YXRpYyB2 b2lkIHN5bmNfZmVuY2VfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3Qgc3luY19m ZW5jZSAqZmVuY2UgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHN5bmNfZmVuY2UsIGtyZWYp OworCWludCBpLCBzdGF0dXMgPSBhdG9taWNfcmVhZCgmZmVuY2UtPnN0YXR1cyk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgZmVuY2UtPm51bV9mZW5jZXM7ICsraSkgeworCQlpZiAoc3RhdHVzKQorCQkJ ZmVuY2VfcmVtb3ZlX2NhbGxiYWNrKGZlbmNlLT5jYnNbaV0uc3luY19wdCwKKwkJCQkJICAgICAg JmZlbmNlLT5jYnNbaV0uY2IpOworCQlmZW5jZV9wdXQoZmVuY2UtPmNic1tpXS5zeW5jX3B0KTsK Kwl9CisKKwlrZnJlZShmZW5jZSk7Cit9CisKK3N0YXRpYyBpbnQgc3luY19mZW5jZV9yZWxlYXNl KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzeW5j X2ZlbmNlICpmZW5jZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN5bmNfZmVuY2VfZGVidWdf cmVtb3ZlKGZlbmNlKTsKKworCWtyZWZfcHV0KCZmZW5jZS0+a3JlZiwgc3luY19mZW5jZV9mcmVl KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzeW5jX2ZlbmNlX3BvbGwo c3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHN5bmNfZmVu Y2UgKmZlbmNlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBzdGF0dXM7CisKKwlwb2xsX3dh aXQoZmlsZSwgJmZlbmNlLT53cSwgd2FpdCk7CisKKwlzdGF0dXMgPSBhdG9taWNfcmVhZCgmZmVu Y2UtPnN0YXR1cyk7CisKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIFBPTExJTjsKKwllbHNlIGlm IChzdGF0dXMgPCAwKQorCQlyZXR1cm4gUE9MTEVSUjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGxvbmcgc3luY19mZW5jZV9pb2N0bF93YWl0KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwgdW5z aWduZWQgbG9uZyBhcmcpCit7CisJX19zMzIgdmFsdWU7CisKKwlpZiAoY29weV9mcm9tX3VzZXIo JnZhbHVlLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih2YWx1ZSkpKQorCQlyZXR1cm4gLUVG QVVMVDsKKworCXJldHVybiBzeW5jX2ZlbmNlX3dhaXQoZmVuY2UsIHZhbHVlKTsKK30KKworc3Rh dGljIGxvbmcgc3luY19mZW5jZV9pb2N0bF9tZXJnZShzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2Us IHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCBmZCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoT19D TE9FWEVDKTsKKwlpbnQgZXJyOworCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZTIsICpmZW5jZTM7 CisJc3RydWN0IHN5bmNfbWVyZ2VfZGF0YSBkYXRhOworCisJaWYgKGZkIDwgMCkKKwkJcmV0dXJu IGZkOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZkYXRhLCAodm9pZCBfX3VzZXIgKilhcmcsIHNp emVvZihkYXRhKSkpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBlcnJfcHV0X2ZkOworCX0K KworCWZlbmNlMiA9IHN5bmNfZmVuY2VfZmRnZXQoZGF0YS5mZDIpOworCWlmIChmZW5jZTIgPT0g TlVMTCkgeworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIGVycl9wdXRfZmQ7CisJfQorCisJZGF0 YS5uYW1lW3NpemVvZihkYXRhLm5hbWUpIC0gMV0gPSAnXDAnOworCWZlbmNlMyA9IHN5bmNfZmVu Y2VfbWVyZ2UoZGF0YS5uYW1lLCBmZW5jZSwgZmVuY2UyKTsKKwlpZiAoZmVuY2UzID09IE5VTEwp IHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfcHV0X2ZlbmNlMjsKKwl9CisKKwlkYXRh LmZlbmNlID0gZmQ7CisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZkYXRh LCBzaXplb2YoZGF0YSkpKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX3B1dF9mZW5j ZTM7CisJfQorCisJc3luY19mZW5jZV9pbnN0YWxsKGZlbmNlMywgZmQpOworCXN5bmNfZmVuY2Vf cHV0KGZlbmNlMik7CisJcmV0dXJuIDA7CisKK2Vycl9wdXRfZmVuY2UzOgorCXN5bmNfZmVuY2Vf cHV0KGZlbmNlMyk7CisKK2Vycl9wdXRfZmVuY2UyOgorCXN5bmNfZmVuY2VfcHV0KGZlbmNlMik7 CisKK2Vycl9wdXRfZmQ6CisJcHV0X3VudXNlZF9mZChmZCk7CisJcmV0dXJuIGVycjsKK30KKwor c3RhdGljIGludCBzeW5jX2ZpbGxfcHRfaW5mbyhzdHJ1Y3QgZmVuY2UgKmZlbmNlLCB2b2lkICpk YXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3luY19wdF9pbmZvICppbmZvID0gZGF0YTsKKwlp bnQgcmV0OworCisJaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IHN5bmNfcHRfaW5mbykpCisJCXJl dHVybiAtRU5PTUVNOworCisJaW5mby0+bGVuID0gc2l6ZW9mKHN0cnVjdCBzeW5jX3B0X2luZm8p OworCisJaWYgKGZlbmNlLT5vcHMtPmZpbGxfZHJpdmVyX2RhdGEpIHsKKwkJcmV0ID0gZmVuY2Ut Pm9wcy0+ZmlsbF9kcml2ZXJfZGF0YShmZW5jZSwgaW5mby0+ZHJpdmVyX2RhdGEsCisJCQkJCQkg ICBzaXplIC0gc2l6ZW9mKCppbmZvKSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsK KworCQlpbmZvLT5sZW4gKz0gcmV0OworCX0KKworCXN0cmxjcHkoaW5mby0+b2JqX25hbWUsIGZl bmNlLT5vcHMtPmdldF90aW1lbGluZV9uYW1lKGZlbmNlKSwKKwkJc2l6ZW9mKGluZm8tPm9ial9u YW1lKSk7CisJc3RybGNweShpbmZvLT5kcml2ZXJfbmFtZSwgZmVuY2UtPm9wcy0+Z2V0X2RyaXZl cl9uYW1lKGZlbmNlKSwKKwkJc2l6ZW9mKGluZm8tPmRyaXZlcl9uYW1lKSk7CisJaWYgKGZlbmNl X2lzX3NpZ25hbGVkKGZlbmNlKSkKKwkJaW5mby0+c3RhdHVzID0gZmVuY2UtPnN0YXR1cyA+PSAw ID8gMSA6IGZlbmNlLT5zdGF0dXM7CisJZWxzZQorCQlpbmZvLT5zdGF0dXMgPSAwOworCWluZm8t PnRpbWVzdGFtcF9ucyA9IGt0aW1lX3RvX25zKGZlbmNlLT50aW1lc3RhbXApOworCisJcmV0dXJu IGluZm8tPmxlbjsKK30KKworc3RhdGljIGxvbmcgc3luY19mZW5jZV9pb2N0bF9mZW5jZV9pbmZv KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJ c3RydWN0IHN5bmNfZmVuY2VfaW5mb19kYXRhICpkYXRhOworCV9fdTMyIHNpemU7CisJX191MzIg bGVuID0gMDsKKwlpbnQgcmV0LCBpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZzaXplLCAodm9p ZCBfX3VzZXIgKilhcmcsIHNpemVvZihzaXplKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYg KHNpemUgPCBzaXplb2Yoc3RydWN0IHN5bmNfZmVuY2VfaW5mb19kYXRhKSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlpZiAoc2l6ZSA+IDQwOTYpCisJCXNpemUgPSA0MDk2OworCisJZGF0YSA9IGt6 YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwlzdHJsY3B5KGRhdGEtPm5hbWUsIGZlbmNlLT5uYW1lLCBzaXplb2YoZGF0YS0+ bmFtZSkpOworCWRhdGEtPnN0YXR1cyA9IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsKKwlp ZiAoZGF0YS0+c3RhdHVzID49IDApCisJCWRhdGEtPnN0YXR1cyA9ICFkYXRhLT5zdGF0dXM7CisK KwlsZW4gPSBzaXplb2Yoc3RydWN0IHN5bmNfZmVuY2VfaW5mb19kYXRhKTsKKworCWZvciAoaSA9 IDA7IGkgPCBmZW5jZS0+bnVtX2ZlbmNlczsgKytpKSB7CisJCXN0cnVjdCBmZW5jZSAqcHQgPSBm ZW5jZS0+Y2JzW2ldLnN5bmNfcHQ7CisKKwkJcmV0ID0gc3luY19maWxsX3B0X2luZm8ocHQsICh1 OCAqKWRhdGEgKyBsZW4sIHNpemUgLSBsZW4pOworCisJCWlmIChyZXQgPCAwKQorCQkJZ290byBv dXQ7CisKKwkJbGVuICs9IHJldDsKKwl9CisKKwlkYXRhLT5sZW4gPSBsZW47CisKKwlpZiAoY29w eV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgZGF0YSwgbGVuKSkKKwkJcmV0ID0gLUVGQVVM VDsKKwllbHNlCisJCXJldCA9IDA7CisKK291dDoKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBsb25nIHN5bmNfZmVuY2VfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUs IHVuc2lnbmVkIGludCBjbWQsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVj dCBzeW5jX2ZlbmNlICpmZW5jZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21k KSB7CisJY2FzZSBTWU5DX0lPQ19XQUlUOgorCQlyZXR1cm4gc3luY19mZW5jZV9pb2N0bF93YWl0 KGZlbmNlLCBhcmcpOworCisJY2FzZSBTWU5DX0lPQ19NRVJHRToKKwkJcmV0dXJuIHN5bmNfZmVu Y2VfaW9jdGxfbWVyZ2UoZmVuY2UsIGFyZyk7CisKKwljYXNlIFNZTkNfSU9DX0ZFTkNFX0lORk86 CisJCXJldHVybiBzeW5jX2ZlbmNlX2lvY3RsX2ZlbmNlX2luZm8oZmVuY2UsIGFyZyk7CisKKwlk ZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZmlsZV9vcGVyYXRpb25zIHN5bmNfZmVuY2VfZm9wcyA9IHsKKwkucmVsZWFzZSA9IHN5bmNfZmVu Y2VfcmVsZWFzZSwKKwkucG9sbCA9IHN5bmNfZmVuY2VfcG9sbCwKKwkudW5sb2NrZWRfaW9jdGwg PSBzeW5jX2ZlbmNlX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSBzeW5jX2ZlbmNlX2lvY3RsLAor fTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL3N5bmMuaCBiL2RyaXZlcnMvYW5kcm9p ZC9zeW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjZmYwMQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYW5kcm9pZC9zeW5jLmgKQEAgLTAsMCArMSwzNjYgQEAK Ky8qCisgKiBpbmNsdWRlL2xpbnV4L3N5bmMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH b29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVm IF9MSU5VWF9TWU5DX0gKKyNkZWZpbmUgX0xJTlVYX1NZTkNfSAorCisjaW5jbHVkZSA8bGludXgv dHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUu aD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4K KyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvZmVuY2UuaD4KKworI2lu Y2x1ZGUgPHVhcGkvc3luYy9zeW5jLmg+CisKK3N0cnVjdCBzeW5jX3RpbWVsaW5lOworc3RydWN0 IHN5bmNfcHQ7CitzdHJ1Y3Qgc3luY19mZW5jZTsKKworLyoqCisgKiBzdHJ1Y3Qgc3luY190aW1l bGluZV9vcHMgLSBzeW5jIG9iamVjdCBpbXBsZW1lbnRhdGlvbiBvcHMKKyAqIEBkcml2ZXJfbmFt ZToJbmFtZSBvZiB0aGUgaW1wbGVtZW50YXRpb24KKyAqIEBkdXA6CQlkdXBsaWNhdGUgYSBzeW5j X3B0CisgKiBAaGFzX3NpZ25hbGVkOglyZXR1cm5zOgorICoJCQkgIDEgaWYgcHQgaGFzIHNpZ25h bGVkCisgKgkJCSAgMCBpZiBwdCBoYXMgbm90IHNpZ25hbGVkCisgKgkJCSA8MCBvbiBlcnJvcgor ICogQGNvbXBhcmU6CQlyZXR1cm5zOgorICoJCQkgIDEgaWYgYiB3aWxsIHNpZ25hbCBiZWZvcmUg YQorICoJCQkgIDAgaWYgYSBhbmQgYiB3aWxsIHNpZ25hbCBhdCB0aGUgc2FtZSB0aW1lCisgKgkJ CSAtMSBpZiBhIHdpbGwgc2lnbmFsIGJlZm9yZSBiCisgKiBAZnJlZV9wdDoJCWNhbGxlZCBiZWZv cmUgc3luY19wdCBpcyBmcmVlZAorICogQHJlbGVhc2Vfb2JqOgljYWxsZWQgYmVmb3JlIHN5bmNf dGltZWxpbmUgaXMgZnJlZWQKKyAqIEBmaWxsX2RyaXZlcl9kYXRhOgl3cml0ZSBpbXBsZW1lbnRh dGlvbiBzcGVjaWZpYyBkcml2ZXIgZGF0YSB0byBkYXRhLgorICoJCQkgIHNob3VsZCByZXR1cm4g YW4gZXJyb3IgaWYgdGhlcmUgaXMgbm90IGVub3VnaCByb29tCisgKgkJCSAgYXMgc3BlY2lmaWVk IGJ5IHNpemUuICBUaGlzIGluZm9ybWF0aW9uIGlzIHJldHVybmVkCisgKgkJCSAgdG8gdXNlcnNw YWNlIGJ5IFNZTkNfSU9DX0ZFTkNFX0lORk8uCisgKiBAdGltZWxpbmVfdmFsdWVfc3RyOiBmaWxs IHN0ciB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgc3luY190aW1lbGluZSdzIGNvdW50ZXIKKyAqIEBw dF92YWx1ZV9zdHI6CWZpbGwgc3RyIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBzeW5jX3B0CisgKi8K K3N0cnVjdCBzeW5jX3RpbWVsaW5lX29wcyB7CisJY29uc3QgY2hhciAqZHJpdmVyX25hbWU7CisK KwkvKiByZXF1aXJlZCAqLworCXN0cnVjdCBzeW5jX3B0ICogKCpkdXApKHN0cnVjdCBzeW5jX3B0 ICpwdCk7CisKKwkvKiByZXF1aXJlZCAqLworCWludCAoKmhhc19zaWduYWxlZCkoc3RydWN0IHN5 bmNfcHQgKnB0KTsKKworCS8qIHJlcXVpcmVkICovCisJaW50ICgqY29tcGFyZSkoc3RydWN0IHN5 bmNfcHQgKmEsIHN0cnVjdCBzeW5jX3B0ICpiKTsKKworCS8qIG9wdGlvbmFsICovCisJdm9pZCAo KmZyZWVfcHQpKHN0cnVjdCBzeW5jX3B0ICpzeW5jX3B0KTsKKworCS8qIG9wdGlvbmFsICovCisJ dm9pZCAoKnJlbGVhc2Vfb2JqKShzdHJ1Y3Qgc3luY190aW1lbGluZSAqc3luY190aW1lbGluZSk7 CisKKwkvKiBvcHRpb25hbCAqLworCWludCAoKmZpbGxfZHJpdmVyX2RhdGEpKHN0cnVjdCBzeW5j X3B0ICpzeW5jcHQsIHZvaWQgKmRhdGEsIGludCBzaXplKTsKKworCS8qIG9wdGlvbmFsICovCisJ dm9pZCAoKnRpbWVsaW5lX3ZhbHVlX3N0cikoc3RydWN0IHN5bmNfdGltZWxpbmUgKnRpbWVsaW5l LCBjaGFyICpzdHIsCisJCQkJICAgaW50IHNpemUpOworCisJLyogb3B0aW9uYWwgKi8KKwl2b2lk ICgqcHRfdmFsdWVfc3RyKShzdHJ1Y3Qgc3luY19wdCAqcHQsIGNoYXIgKnN0ciwgaW50IHNpemUp OworfTsKKworLyoqCisgKiBzdHJ1Y3Qgc3luY190aW1lbGluZSAtIHN5bmMgb2JqZWN0CisgKiBA a3JlZjoJCXJlZmVyZW5jZSBjb3VudCBvbiBmZW5jZS4KKyAqIEBvcHM6CQlvcHMgdGhhdCBkZWZp bmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzeW5jX3RpbWVsaW5lCisgKiBAbmFtZToJCW5h bWUgb2YgdGhlIHN5bmNfdGltZWxpbmUuIFVzZWZ1bCBmb3IgZGVidWdnaW5nCisgKiBAZGVzdHJv eWVkOgkJc2V0IHdoZW4gc3luY190aW1lbGluZSBpcyBkZXN0cm95ZWQKKyAqIEBjaGlsZF9saXN0 X2hlYWQ6CWxpc3Qgb2YgY2hpbGRyZW4gc3luY19wdHMgZm9yIHRoaXMgc3luY190aW1lbGluZQor ICogQGNoaWxkX2xpc3RfbG9jazoJbG9jayBwcm90ZWN0aW5nIEBjaGlsZF9saXN0X2hlYWQsIGRl c3Ryb3llZCwgYW5kCisgKgkJCSAgc3luY19wdC5zdGF0dXMKKyAqIEBhY3RpdmVfbGlzdF9oZWFk OglsaXN0IG9mIGFjdGl2ZSAodW5zaWduYWxlZC9lcnJvcmVkKSBzeW5jX3B0cworICogQHN5bmNf dGltZWxpbmVfbGlzdDoJbWVtYmVyc2hpcCBpbiBnbG9iYWwgc3luY190aW1lbGluZV9saXN0Cisg Ki8KK3N0cnVjdCBzeW5jX3RpbWVsaW5lIHsKKwlzdHJ1Y3Qga3JlZgkJa3JlZjsKKwljb25zdCBz dHJ1Y3Qgc3luY190aW1lbGluZV9vcHMJKm9wczsKKwljaGFyCQkJbmFtZVszMl07CisKKwkvKiBw cm90ZWN0ZWQgYnkgY2hpbGRfbGlzdF9sb2NrICovCisJYm9vbAkJCWRlc3Ryb3llZDsKKwlpbnQJ CQljb250ZXh0LCB2YWx1ZTsKKworCXN0cnVjdCBsaXN0X2hlYWQJY2hpbGRfbGlzdF9oZWFkOwor CXNwaW5sb2NrX3QJCWNoaWxkX2xpc3RfbG9jazsKKworCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZl X2xpc3RfaGVhZDsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCXN0cnVjdCBsaXN0X2hlYWQJ c3luY190aW1lbGluZV9saXN0OworI2VuZGlmCit9OworCisvKioKKyAqIHN0cnVjdCBzeW5jX3B0 IC0gc3luYyBwb2ludAorICogQGZlbmNlOgkJYmFzZSBmZW5jZSBjbGFzcworICogQGNoaWxkX2xp c3Q6CQltZW1iZXJzaGlwIGluIHN5bmNfdGltZWxpbmUuY2hpbGRfbGlzdF9oZWFkCisgKiBAYWN0 aXZlX2xpc3Q6CW1lbWJlcnNoaXAgaW4gc3luY190aW1lbGluZS5hY3RpdmVfbGlzdF9oZWFkCisg KiBAc2lnbmFsZWRfbGlzdDoJbWVtYmVyc2hpcCBpbiB0ZW1wb3Jhcnkgc2lnbmFsZWRfbGlzdCBv biBzdGFjaworICogQGZlbmNlOgkJc3luY19mZW5jZSB0byB3aGljaCB0aGUgc3luY19wdCBiZWxv bmdzCisgKiBAcHRfbGlzdDoJCW1lbWJlcnNoaXAgaW4gc3luY19mZW5jZS5wdF9saXN0X2hlYWQK KyAqIEBzdGF0dXM6CQkxOiBzaWduYWxlZCwgMDphY3RpdmUsIDwwOiBlcnJvcgorICogQHRpbWVz dGFtcDoJCXRpbWUgd2hpY2ggc3luY19wdCBzdGF0dXMgdHJhbnNpdGlvbmVkIGZyb20gYWN0aXZl IHRvCisgKgkJCSAgc2lnbmFsZWQgb3IgZXJyb3IuCisgKi8KK3N0cnVjdCBzeW5jX3B0IHsKKwlz dHJ1Y3QgZmVuY2UgYmFzZTsKKworCXN0cnVjdCBsaXN0X2hlYWQJY2hpbGRfbGlzdDsKKwlzdHJ1 Y3QgbGlzdF9oZWFkCWFjdGl2ZV9saXN0OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3lu Y190aW1lbGluZSAqc3luY19wdF9wYXJlbnQoc3RydWN0IHN5bmNfcHQgKnB0KQoreworCXJldHVy biBjb250YWluZXJfb2YocHQtPmJhc2UubG9jaywgc3RydWN0IHN5bmNfdGltZWxpbmUsCisJCQkg ICAgY2hpbGRfbGlzdF9sb2NrKTsKK30KKworc3RydWN0IHN5bmNfZmVuY2VfY2IgeworCXN0cnVj dCBmZW5jZV9jYiBjYjsKKwlzdHJ1Y3QgZmVuY2UgKnN5bmNfcHQ7CisJc3RydWN0IHN5bmNfZmVu Y2UgKmZlbmNlOworfTsKKworLyoqCisgKiBzdHJ1Y3Qgc3luY19mZW5jZSAtIHN5bmMgZmVuY2UK KyAqIEBmaWxlOgkJZmlsZSByZXByZXNlbnRpbmcgdGhpcyBmZW5jZQorICogQGtyZWY6CQlyZWZl cmVuY2UgY291bnQgb24gZmVuY2UuCisgKiBAbmFtZToJCW5hbWUgb2Ygc3luY19mZW5jZS4gIFVz ZWZ1bCBmb3IgZGVidWdnaW5nCisgKiBAcHRfbGlzdF9oZWFkOglsaXN0IG9mIHN5bmNfcHRzIGlu IHRoZSBmZW5jZS4gIGltbXV0YWJsZSBvbmNlIGZlbmNlCisgKgkJCSAgaXMgY3JlYXRlZAorICog QHN0YXR1czoJCTA6IHNpZ25hbGVkLCA+MDphY3RpdmUsIDwwOiBlcnJvcgorICoKKyAqIEB3cToJ CQl3YWl0IHF1ZXVlIGZvciBmZW5jZSBzaWduYWxpbmcKKyAqIEBzeW5jX2ZlbmNlX2xpc3Q6CW1l bWJlcnNoaXAgaW4gZ2xvYmFsIGZlbmNlIGxpc3QKKyAqLworc3RydWN0IHN5bmNfZmVuY2Ugewor CXN0cnVjdCBmaWxlCQkqZmlsZTsKKwlzdHJ1Y3Qga3JlZgkJa3JlZjsKKwljaGFyCQkJbmFtZVsz Ml07CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJc3RydWN0IGxpc3RfaGVhZAlzeW5jX2ZlbmNl X2xpc3Q7CisjZW5kaWYKKwlpbnQgbnVtX2ZlbmNlczsKKworCXdhaXRfcXVldWVfaGVhZF90CXdx OworCWF0b21pY190CQlzdGF0dXM7CisKKwlzdHJ1Y3Qgc3luY19mZW5jZV9jYgljYnNbXTsKK307 CisKK3N0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlcjsKK3R5cGVkZWYgdm9pZCAoKnN5bmNfY2FsbGJh Y2tfdCkoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlLAorCQkJCXN0cnVjdCBzeW5jX2ZlbmNlX3dh aXRlciAqd2FpdGVyKTsKKworLyoqCisgKiBzdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgLSBtZXRh ZGF0YSBmb3IgYXN5bmNocm9ub3VzIHdhaXRlciBvbiBhIGZlbmNlCisgKiBAd2FpdGVyX2xpc3Q6 CW1lbWJlcnNoaXAgaW4gc3luY19mZW5jZS53YWl0ZXJfbGlzdF9oZWFkCisgKiBAY2FsbGJhY2s6 CQlmdW5jdGlvbiBwb2ludGVyIHRvIGNhbGwgd2hlbiBmZW5jZSBzaWduYWxzCisgKiBAY2FsbGJh Y2tfZGF0YToJcG9pbnRlciB0byBwYXNzIHRvIEBjYWxsYmFjaworICovCitzdHJ1Y3Qgc3luY19m ZW5jZV93YWl0ZXIgeworCXdhaXRfcXVldWVfdCB3b3JrOworCXN5bmNfY2FsbGJhY2tfdCBjYWxs YmFjazsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX2ZlbmNlX3dhaXRlcl9pbml0KHN0 cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciAqd2FpdGVyLAorCQkJCQkgIHN5bmNfY2FsbGJhY2tfdCBj YWxsYmFjaykKK3sKKwlJTklUX0xJU1RfSEVBRCgmd2FpdGVyLT53b3JrLnRhc2tfbGlzdCk7CisJ d2FpdGVyLT5jYWxsYmFjayA9IGNhbGxiYWNrOworfQorCisvKgorICogQVBJIGZvciBzeW5jX3Rp bWVsaW5lIGltcGxlbWVudGVycworICovCisKKy8qKgorICogc3luY190aW1lbGluZV9jcmVhdGUo KSAtIGNyZWF0ZXMgYSBzeW5jIG9iamVjdAorICogQG9wczoJc3BlY2lmaWVzIHRoZSBpbXBsZW1l bnRhdGlvbiBvcHMgZm9yIHRoZSBvYmplY3QKKyAqIEBzaXplOglzaXplIHRvIGFsbG9jYXRlIGZv ciB0aGlzIG9iagorICogQG5hbWU6CXN5bmNfdGltZWxpbmUgbmFtZQorICoKKyAqIENyZWF0ZXMg YSBuZXcgc3luY190aW1lbGluZSB3aGljaCB3aWxsIHVzZSB0aGUgaW1wbGVtZW50YXRpb24gc3Bl Y2lmaWVkIGJ5CisgKiBAb3BzLiAgQHNpemUgYnl0ZXMgd2lsbCBiZSBhbGxvY2F0ZWQgYWxsb3dp bmcgZm9yIGltcGxlbWVudGF0aW9uIHNwZWNpZmljCisgKiBkYXRhIHRvIGJlIGtlcHQgYWZ0ZXIg dGhlIGdlbmVyaWMgc3luY190aW1lbGluZSBzdHJ1Y3QuCisgKi8KK3N0cnVjdCBzeW5jX3RpbWVs aW5lICpzeW5jX3RpbWVsaW5lX2NyZWF0ZShjb25zdCBzdHJ1Y3Qgc3luY190aW1lbGluZV9vcHMg Km9wcywKKwkJCQkJICAgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKioKKyAqIHN5 bmNfdGltZWxpbmVfZGVzdHJveSgpIC0gZGVzdHJveXMgYSBzeW5jIG9iamVjdAorICogQG9iajoJ c3luY190aW1lbGluZSB0byBkZXN0cm95CisgKgorICogQSBzeW5jIGltcGxlbWVudGF0aW9uIHNo b3VsZCBjYWxsIHRoaXMgd2hlbiB0aGUgQG9iaiBpcyBnb2luZyBhd2F5CisgKiAoaS5lLiBtb2R1 bGUgdW5sb2FkLikgIEBvYmogd29uJ3QgYWN0dWFsbHkgYmUgZnJlZWQgdW50aWwgYWxsIGl0cyBj aGlsZHJlbgorICogc3luY19wdHMgYXJlIGZyZWVkLgorICovCit2b2lkIHN5bmNfdGltZWxpbmVf ZGVzdHJveShzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKTsKKworLyoqCisgKiBzeW5jX3RpbWVs aW5lX3NpZ25hbCgpIC0gc2lnbmFsIGEgc3RhdHVzIGNoYW5nZSBvbiBhIHN5bmNfdGltZWxpbmUK KyAqIEBvYmo6CXN5bmNfdGltZWxpbmUgdG8gc2lnbmFsCisgKgorICogQSBzeW5jIGltcGxlbWVu dGF0aW9uIHNob3VsZCBjYWxsIHRoaXMgYW55IHRpbWUgb25lIG9mIGl0J3Mgc3luY19wdHMKKyAq IGhhcyBzaWduYWxlZCBvciBoYXMgYW4gZXJyb3IgY29uZGl0aW9uLgorICovCit2b2lkIHN5bmNf dGltZWxpbmVfc2lnbmFsKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopOworCisvKioKKyAqIHN5 bmNfcHRfY3JlYXRlKCkgLSBjcmVhdGVzIGEgc3luYyBwdAorICogQHBhcmVudDoJc3luY19wdCdz IHBhcmVudCBzeW5jX3RpbWVsaW5lCisgKiBAc2l6ZToJc2l6ZSB0byBhbGxvY2F0ZSBmb3IgdGhp cyBwdAorICoKKyAqIENyZWF0ZXMgYSBuZXcgc3luY19wdCBhcyBhIGNoaWxkIG9mIEBwYXJlbnQu ICBAc2l6ZSBieXRlcyB3aWxsIGJlCisgKiBhbGxvY2F0ZWQgYWxsb3dpbmcgZm9yIGltcGxlbWVu dGF0aW9uIHNwZWNpZmljIGRhdGEgdG8gYmUga2VwdCBhZnRlcgorICogdGhlIGdlbmVyaWMgc3lu Y190aW1lbGluZSBzdHJ1Y3QuCisgKi8KK3N0cnVjdCBzeW5jX3B0ICpzeW5jX3B0X2NyZWF0ZShz dHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50LCBpbnQgc2l6ZSk7CisKKy8qKgorICogc3luY19w dF9mcmVlKCkgLSBmcmVlcyBhIHN5bmMgcHQKKyAqIEBwdDoJCXN5bmNfcHQgdG8gZnJlZQorICoK KyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHN5bmNfcHRzIHdoaWNoIGhhdmUgYmVl biBjcmVhdGVkIGJ1dAorICogbm90IGFkZGVkIHRvIGEgZmVuY2UuCisgKi8KK3ZvaWQgc3luY19w dF9mcmVlKHN0cnVjdCBzeW5jX3B0ICpwdCk7CisKKy8qKgorICogc3luY19mZW5jZV9jcmVhdGUo KSAtIGNyZWF0ZXMgYSBzeW5jIGZlbmNlCisgKiBAbmFtZToJbmFtZSBvZiBmZW5jZSB0byBjcmVh dGUKKyAqIEBwdDoJCXN5bmNfcHQgdG8gYWRkIHRvIHRoZSBmZW5jZQorICoKKyAqIENyZWF0ZXMg YSBmZW5jZSBjb250YWluZyBAcHQuICBPbmNlIHRoaXMgaXMgY2FsbGVkLCB0aGUgZmVuY2UgdGFr ZXMKKyAqIG93bmVyc2hpcCBvZiBAcHQuCisgKi8KK3N0cnVjdCBzeW5jX2ZlbmNlICpzeW5jX2Zl bmNlX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3luY19wdCAqcHQpOworCisvKioK KyAqIHN5bmNfZmVuY2VfY3JlYXRlX2RtYSgpIC0gY3JlYXRlcyBhIHN5bmMgZmVuY2UgZnJvbSBk bWEtZmVuY2UKKyAqIEBuYW1lOgluYW1lIG9mIGZlbmNlIHRvIGNyZWF0ZQorICogQHB0OglkbWEt ZmVuY2UgdG8gYWRkIHRvIHRoZSBmZW5jZQorICoKKyAqIENyZWF0ZXMgYSBmZW5jZSBjb250YWlu ZyBAcHQuICBPbmNlIHRoaXMgaXMgY2FsbGVkLCB0aGUgZmVuY2UgdGFrZXMKKyAqIG93bmVyc2hp cCBvZiBAcHQuCisgKi8KK3N0cnVjdCBzeW5jX2ZlbmNlICpzeW5jX2ZlbmNlX2NyZWF0ZV9kbWEo Y29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGZlbmNlICpwdCk7CisKKy8qCisgKiBBUEkgZm9yIHN5 bmNfZmVuY2UgY29uc3VtZXJzCisgKi8KKworLyoqCisgKiBzeW5jX2ZlbmNlX21lcmdlKCkgLSBt ZXJnZSB0d28gZmVuY2VzCisgKiBAbmFtZToJbmFtZSBvZiBuZXcgZmVuY2UKKyAqIEBhOgkJZmVu Y2UgYQorICogQGI6CQlmZW5jZSBiCisgKgorICogQ3JlYXRlcyBhIG5ldyBmZW5jZSB3aGljaCBj b250YWlucyBjb3BpZXMgb2YgYWxsIHRoZSBzeW5jX3B0cyBpbiBib3RoCisgKiBAYSBhbmQgQGIu ICBAYSBhbmQgQGIgcmVtYWluIHZhbGlkLCBpbmRlcGVuZGVudCBmZW5jZXMuCisgKi8KK3N0cnVj dCBzeW5jX2ZlbmNlICpzeW5jX2ZlbmNlX21lcmdlKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAg IHN0cnVjdCBzeW5jX2ZlbmNlICphLCBzdHJ1Y3Qgc3luY19mZW5jZSAqYik7CisKKy8qKgorICog c3luY19mZW5jZV9mZGdldCgpIC0gZ2V0IGEgZmVuY2UgZnJvbSBhbiBmZAorICogQGZkOgkJZmQg cmVmZXJlbmNpbmcgYSBmZW5jZQorICoKKyAqIEVuc3VyZXMgQGZkIHJlZmVyZW5jZXMgYSB2YWxp ZCBmZW5jZSwgaW5jcmVtZW50cyB0aGUgcmVmY291bnQgb2YgdGhlIGJhY2tpbmcKKyAqIGZpbGUs IGFuZCByZXR1cm5zIHRoZSBmZW5jZS4KKyAqLworc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVu Y2VfZmRnZXQoaW50IGZkKTsKKworLyoqCisgKiBzeW5jX2ZlbmNlX3B1dCgpIC0gcHV0cyBhIHJl ZmVyZW5jZSBvZiBhIHN5bmMgZmVuY2UKKyAqIEBmZW5jZToJZmVuY2UgdG8gcHV0CisgKgorICog UHV0cyBhIHJlZmVyZW5jZSBvbiBAZmVuY2UuICBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5j ZSwgdGhlIGZlbmNlIGFuZAorICogYWxsIGl0J3Mgc3luY19wdHMgd2lsbCBiZSBmcmVlZAorICov Cit2b2lkIHN5bmNfZmVuY2VfcHV0KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSk7CisKKy8qKgor ICogc3luY19mZW5jZV9pbnN0YWxsKCkgLSBpbnN0YWxscyBhIGZlbmNlIGludG8gYSBmaWxlIGRl c2NyaXB0b3IKKyAqIEBmZW5jZToJZmVuY2UgdG8gaW5zdGFsbAorICogQGZkOgkJZmlsZSBkZXNj cmlwdG9yIGluIHdoaWNoIHRvIGluc3RhbGwgdGhlIGZlbmNlCisgKgorICogSW5zdGFsbHMgQGZl bmNlIGludG8gQGZkLiAgQGZkJ3Mgc2hvdWxkIGJlIGFjcXVpcmVkIHRocm91Z2gKKyAqIGdldF91 bnVzZWRfZmRfZmxhZ3MoT19DTE9FWEVDKS4KKyAqLwordm9pZCBzeW5jX2ZlbmNlX2luc3RhbGwo c3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlLCBpbnQgZmQpOworCisvKioKKyAqIHN5bmNfZmVuY2Vf d2FpdF9hc3luYygpIC0gcmVnaXN0ZXJzIGFuZCBhc3luYyB3YWl0IG9uIHRoZSBmZW5jZQorICog QGZlbmNlOgkJZmVuY2UgdG8gd2FpdCBvbgorICogQHdhaXRlcjoJCXdhaXRlciBjYWxsYmFjayBz dHJ1Y2sKKyAqCisgKiBSZXR1cm5zIDEgaWYgQGZlbmNlIGhhcyBhbHJlYWR5IHNpZ25hbGVkLgor ICoKKyAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIEBmZW5jZSBzaWdu YWxzIG9yIGhhcyBhbiBlcnJvci4KKyAqIEB3YWl0ZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdp dGggc3luY19mZW5jZV93YWl0ZXJfaW5pdCgpLgorICovCitpbnQgc3luY19mZW5jZV93YWl0X2Fz eW5jKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwKKwkJCSAgc3RydWN0IHN5bmNfZmVuY2Vfd2Fp dGVyICp3YWl0ZXIpOworCisvKioKKyAqIHN5bmNfZmVuY2VfY2FuY2VsX2FzeW5jKCkgLSBjYW5j ZWxzIGFuIGFzeW5jIHdhaXQKKyAqIEBmZW5jZToJCWZlbmNlIHRvIHdhaXQgb24KKyAqIEB3YWl0 ZXI6CQl3YWl0ZXIgY2FsbGJhY2sgc3RydWNrCisgKgorICogcmV0dXJucyAwIGlmIHdhaXRlciB3 YXMgcmVtb3ZlZCBmcm9tIGZlbmNlJ3MgYXN5bmMgd2FpdGVyIGxpc3QuCisgKiByZXR1cm5zIC1F Tk9FTlQgaWYgd2FpdGVyIHdhcyBub3QgZm91bmQgb24gZmVuY2UncyBhc3luYyB3YWl0ZXIgbGlz dC4KKyAqCisgKiBDYW5jZWxzIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGFzeW5jIHdhaXQuICBX aWxsIGZhaWwgZ3JhY2VmdWxseSBpZgorICogQHdhaXRlciB3YXMgbmV2ZXIgcmVnaXN0ZXJlZCBv ciBpZiBAZmVuY2UgaGFzIGFscmVhZHkgc2lnbmFsZWQgQHdhaXRlci4KKyAqLworaW50IHN5bmNf ZmVuY2VfY2FuY2VsX2FzeW5jKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwKKwkJCSAgICBzdHJ1 Y3Qgc3luY19mZW5jZV93YWl0ZXIgKndhaXRlcik7CisKKy8qKgorICogc3luY19mZW5jZV93YWl0 KCkgLSB3YWl0IG9uIGZlbmNlCisgKiBAZmVuY2U6CWZlbmNlIHRvIHdhaXQgb24KKyAqIEB0aWVt b3V0Ogl0aW1lb3V0IGluIG1zCisgKgorICogV2FpdCBmb3IgQGZlbmNlIHRvIGJlIHNpZ25hbGVk IG9yIGhhdmUgYW4gZXJyb3IuICBXYWl0cyBpbmRlZmluaXRlbHkKKyAqIGlmIEB0aW1lb3V0IDwg MAorICovCitpbnQgc3luY19mZW5jZV93YWl0KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwgbG9u ZyB0aW1lb3V0KTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCit2b2lkIHN5bmNfdGltZWxp bmVfZGVidWdfYWRkKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopOwordm9pZCBzeW5jX3RpbWVs aW5lX2RlYnVnX3JlbW92ZShzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKTsKK3ZvaWQgc3luY19m ZW5jZV9kZWJ1Z19hZGQoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlKTsKK3ZvaWQgc3luY19mZW5j ZV9kZWJ1Z19yZW1vdmUoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlKTsKK3ZvaWQgc3luY19kdW1w KHZvaWQpOworCisjZWxzZQorIyBkZWZpbmUgc3luY190aW1lbGluZV9kZWJ1Z19hZGQob2JqKQor IyBkZWZpbmUgc3luY190aW1lbGluZV9kZWJ1Z19yZW1vdmUob2JqKQorIyBkZWZpbmUgc3luY19m ZW5jZV9kZWJ1Z19hZGQoZmVuY2UpCisjIGRlZmluZSBzeW5jX2ZlbmNlX2RlYnVnX3JlbW92ZShm ZW5jZSkKKyMgZGVmaW5lIHN5bmNfZHVtcCgpCisjZW5kaWYKK2ludCBzeW5jX2ZlbmNlX3dha2Vf dXBfd3Eod2FpdF9xdWV1ZV90ICpjdXJyLCB1bnNpZ25lZCBtb2RlLAorCQkJCSBpbnQgd2FrZV9m bGFncywgdm9pZCAqa2V5KTsKKworI2VuZGlmIC8qIF9MSU5VWF9TWU5DX0ggKi8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvYW5kcm9pZC9zeW5jX2RlYnVnLmMgYi9kcml2ZXJzL2FuZHJvaWQvc3luY19k ZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYTE2NDkKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2FuZHJvaWQvc3luY19kZWJ1Zy5jCkBAIC0wLDAgKzEsMjU1 IEBACisvKgorICogZHJpdmVycy9iYXNlL3N5bmMuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAx MiBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5 IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVi dWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUu aD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUg PGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxp bnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgorI2luY2x1ZGUg PGxpbnV4L3RpbWU2NC5oPgorI2luY2x1ZGUgInN5bmMuaCIKKworI2lmZGVmIENPTkZJR19ERUJV R19GUworCitzdGF0aWMgTElTVF9IRUFEKHN5bmNfdGltZWxpbmVfbGlzdF9oZWFkKTsKK3N0YXRp YyBERUZJTkVfU1BJTkxPQ0soc3luY190aW1lbGluZV9saXN0X2xvY2spOworc3RhdGljIExJU1Rf SEVBRChzeW5jX2ZlbmNlX2xpc3RfaGVhZCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN5bmNf ZmVuY2VfbGlzdF9sb2NrKTsKKwordm9pZCBzeW5jX3RpbWVsaW5lX2RlYnVnX2FkZChzdHJ1Y3Qg c3luY190aW1lbGluZSAqb2JqKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xv Y2tfaXJxc2F2ZSgmc3luY190aW1lbGluZV9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90 YWlsKCZvYmotPnN5bmNfdGltZWxpbmVfbGlzdCwgJnN5bmNfdGltZWxpbmVfbGlzdF9oZWFkKTsK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX3RpbWVsaW5lX2xpc3RfbG9jaywgZmxhZ3Mp OworfQorCit2b2lkIHN5bmNfdGltZWxpbmVfZGVidWdfcmVtb3ZlKHN0cnVjdCBzeW5jX3RpbWVs aW5lICpvYmopCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZl KCZzeW5jX3RpbWVsaW5lX2xpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZvYmotPnN5bmNf dGltZWxpbmVfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3luY190aW1lbGluZV9s aXN0X2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBzeW5jX2ZlbmNlX2RlYnVnX2FkZChzdHJ1Y3Qg c3luY19mZW5jZSAqZmVuY2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9j a19pcnFzYXZlKCZzeW5jX2ZlbmNlX2xpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwo JmZlbmNlLT5zeW5jX2ZlbmNlX2xpc3QsICZzeW5jX2ZlbmNlX2xpc3RfaGVhZCk7CisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmc3luY19mZW5jZV9saXN0X2xvY2ssIGZsYWdzKTsKK30KKwordm9p ZCBzeW5jX2ZlbmNlX2RlYnVnX3JlbW92ZShzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UpCit7CisJ dW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzeW5jX2ZlbmNlX2xp c3RfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZmZW5jZS0+c3luY19mZW5jZV9saXN0KTsKKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX2ZlbmNlX2xpc3RfbG9jaywgZmxhZ3MpOworfQor CitzdGF0aWMgY29uc3QgY2hhciAqc3luY19zdGF0dXNfc3RyKGludCBzdGF0dXMpCit7CisJaWYg KHN0YXR1cyA9PSAwKQorCQlyZXR1cm4gInNpZ25hbGVkIjsKKworCWlmIChzdGF0dXMgPiAwKQor CQlyZXR1cm4gImFjdGl2ZSI7CisKKwlyZXR1cm4gImVycm9yIjsKK30KKworc3RhdGljIHZvaWQg c3luY19wcmludF9wdChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBmZW5jZSAqcHQsIGJvb2wg ZmVuY2UpCit7CisJaW50IHN0YXR1cyA9IDE7CisKKwlpZiAoZmVuY2VfaXNfc2lnbmFsZWRfbG9j a2VkKHB0KSkKKwkJc3RhdHVzID0gcHQtPnN0YXR1czsKKworCXNlcV9wcmludGYocywgIiAgJXMl c3B0ICVzIiwKKwkJICAgZmVuY2UgJiYgcHQtPm9wcy0+Z2V0X3RpbWVsaW5lX25hbWUgPworCQkg ICBwdC0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZShwdCkgOiAiIiwKKwkJICAgZmVuY2UgPyAiXyIg OiAiIiwKKwkJICAgc3luY19zdGF0dXNfc3RyKHN0YXR1cykpOworCisJaWYgKHN0YXR1cyA8PSAw KSB7CisJCXN0cnVjdCB0aW1lc3BlYzY0IHRzNjQgPQorCQkJa3RpbWVfdG9fdGltZXNwZWM2NChw dC0+dGltZXN0YW1wKTsKKworCQlzZXFfcHJpbnRmKHMsICJAJWxsZC4lMDlsZCIsIChzNjQpdHM2 NC50dl9zZWMsIHRzNjQudHZfbnNlYyk7CisJfQorCisJaWYgKCghZmVuY2UgfHwgcHQtPm9wcy0+ dGltZWxpbmVfdmFsdWVfc3RyKSAmJgorCSAgICBwdC0+b3BzLT5mZW5jZV92YWx1ZV9zdHIpIHsK KwkJY2hhciB2YWx1ZVs2NF07CisJCWJvb2wgc3VjY2VzczsKKworCQlwdC0+b3BzLT5mZW5jZV92 YWx1ZV9zdHIocHQsIHZhbHVlLCBzaXplb2YodmFsdWUpKTsKKwkJc3VjY2VzcyA9IHN0cmxlbih2 YWx1ZSk7CisKKwkJaWYgKHN1Y2Nlc3MpCisJCQlzZXFfcHJpbnRmKHMsICI6ICVzIiwgdmFsdWUp OworCisJCWlmIChzdWNjZXNzICYmIGZlbmNlKSB7CisJCQlwdC0+b3BzLT50aW1lbGluZV92YWx1 ZV9zdHIocHQsIHZhbHVlLCBzaXplb2YodmFsdWUpKTsKKworCQkJaWYgKHN0cmxlbih2YWx1ZSkp CisJCQkJc2VxX3ByaW50ZihzLCAiIC8gJXMiLCB2YWx1ZSk7CisJCX0KKwl9CisKKwlzZXFfcHV0 cyhzLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgc3luY19wcmludF9vYmooc3RydWN0IHNlcV9m aWxlICpzLCBzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQoreworCXN0cnVjdCBsaXN0X2hlYWQg KnBvczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2VxX3ByaW50ZihzLCAiJXMgJXMiLCBv YmotPm5hbWUsIG9iai0+b3BzLT5kcml2ZXJfbmFtZSk7CisKKwlpZiAob2JqLT5vcHMtPnRpbWVs aW5lX3ZhbHVlX3N0cikgeworCQljaGFyIHZhbHVlWzY0XTsKKworCQlvYmotPm9wcy0+dGltZWxp bmVfdmFsdWVfc3RyKG9iaiwgdmFsdWUsIHNpemVvZih2YWx1ZSkpOworCQlzZXFfcHJpbnRmKHMs ICI6ICVzIiwgdmFsdWUpOworCX0KKworCXNlcV9wdXRzKHMsICJcbiIpOworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaChw b3MsICZvYmotPmNoaWxkX2xpc3RfaGVhZCkgeworCQlzdHJ1Y3Qgc3luY19wdCAqcHQgPQorCQkJ Y29udGFpbmVyX29mKHBvcywgc3RydWN0IHN5bmNfcHQsIGNoaWxkX2xpc3QpOworCQlzeW5jX3By aW50X3B0KHMsICZwdC0+YmFzZSwgZmFsc2UpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZvYmotPmNoaWxkX2xpc3RfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzeW5jX3By aW50X2ZlbmNlKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlKQor eworCXdhaXRfcXVldWVfdCAqcG9zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisK KwlzZXFfcHJpbnRmKHMsICJbJXBdICVzOiAlc1xuIiwgZmVuY2UsIGZlbmNlLT5uYW1lLAorCQkg ICBzeW5jX3N0YXR1c19zdHIoYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpKSk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgZmVuY2UtPm51bV9mZW5jZXM7ICsraSkKKwkJc3luY19wcmludF9wdChzLCBm ZW5jZS0+Y2JzW2ldLnN5bmNfcHQsIHRydWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZlbmNl LT53cS5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZmZW5jZS0+d3Eu dGFza19saXN0LCB0YXNrX2xpc3QpIHsKKwkJc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyICp3YWl0 ZXI7CisKKwkJaWYgKHBvcy0+ZnVuYyAhPSAmc3luY19mZW5jZV93YWtlX3VwX3dxKQorCQkJY29u dGludWU7CisKKwkJd2FpdGVyID0gY29udGFpbmVyX29mKHBvcywgc3RydWN0IHN5bmNfZmVuY2Vf d2FpdGVyLCB3b3JrKTsKKworCQlzZXFfcHJpbnRmKHMsICJ3YWl0ZXIgJXBGXG4iLCB3YWl0ZXIt PmNhbGxiYWNrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVuY2UtPndxLmxvY2ss IGZsYWdzKTsKK30KKworc3RhdGljIGludCBzeW5jX2RlYnVnZnNfc2hvdyhzdHJ1Y3Qgc2VxX2Zp bGUgKnMsIHZvaWQgKnVudXNlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBs aXN0X2hlYWQgKnBvczsKKworCXNlcV9wdXRzKHMsICJvYmpzOlxuLS0tLS0tLS0tLS0tLS1cbiIp OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN5bmNfdGltZWxpbmVfbGlzdF9sb2NrLCBmbGFncyk7 CisJbGlzdF9mb3JfZWFjaChwb3MsICZzeW5jX3RpbWVsaW5lX2xpc3RfaGVhZCkgeworCQlzdHJ1 Y3Qgc3luY190aW1lbGluZSAqb2JqID0KKwkJCWNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBzeW5j X3RpbWVsaW5lLAorCQkJCSAgICAgc3luY190aW1lbGluZV9saXN0KTsKKworCQlzeW5jX3ByaW50 X29iaihzLCBvYmopOworCQlzZXFfcHV0cyhzLCAiXG4iKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmc3luY190aW1lbGluZV9saXN0X2xvY2ssIGZsYWdzKTsKKworCXNlcV9wdXRzKHMs ICJmZW5jZXM6XG4tLS0tLS0tLS0tLS0tLVxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3lu Y19mZW5jZV9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJnN5bmNfZmVu Y2VfbGlzdF9oZWFkKSB7CisJCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSA9CisJCQljb250YWlu ZXJfb2YocG9zLCBzdHJ1Y3Qgc3luY19mZW5jZSwgc3luY19mZW5jZV9saXN0KTsKKworCQlzeW5j X3ByaW50X2ZlbmNlKHMsIGZlbmNlKTsKKwkJc2VxX3B1dHMocywgIlxuIik7CisJfQorCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnN5bmNfZmVuY2VfbGlzdF9sb2NrLCBmbGFncyk7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgc3luY19kZWJ1Z2ZzX29wZW4oc3RydWN0IGlub2RlICppbm9k ZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHN5bmNf ZGVidWdmc19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgc3luY19kZWJ1Z2ZzX2ZvcHMgPSB7CisJLm9wZW4gICAgICAgICAg ID0gc3luY19kZWJ1Z2ZzX29wZW4sCisJLnJlYWQgICAgICAgICAgID0gc2VxX3JlYWQsCisJLmxs c2VlayAgICAgICAgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlICAgICAgICA9IHNpbmdsZV9yZWxl YXNlLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgc3luY19kZWJ1Z2ZzX2luaXQodm9pZCkKK3sK KwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzeW5jIiwgU19JUlVHTywgTlVMTCwgTlVMTCwgJnN5bmNf ZGVidWdmc19mb3BzKTsKKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwoc3luY19kZWJ1Z2Zz X2luaXQpOworCisjZGVmaW5lIERVTVBfQ0hVTksgMjU2CitzdGF0aWMgY2hhciBzeW5jX2R1bXBf YnVmWzY0ICogMTAyNF07Cit2b2lkIHN5bmNfZHVtcCh2b2lkKQoreworCXN0cnVjdCBzZXFfZmls ZSBzID0geworCQkuYnVmID0gc3luY19kdW1wX2J1ZiwKKwkJLnNpemUgPSBzaXplb2Yoc3luY19k dW1wX2J1ZikgLSAxLAorCX07CisJaW50IGk7CisKKwlzeW5jX2RlYnVnZnNfc2hvdygmcywgTlVM TCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy5jb3VudDsgaSArPSBEVU1QX0NIVU5LKSB7CisJCWlm ICgocy5jb3VudCAtIGkpID4gRFVNUF9DSFVOSykgeworCQkJY2hhciBjID0gcy5idWZbaSArIERV TVBfQ0hVTktdOworCisJCQlzLmJ1ZltpICsgRFVNUF9DSFVOS10gPSAwOworCQkJcHJfY29udCgi JXMiLCBzLmJ1ZiArIGkpOworCQkJcy5idWZbaSArIERVTVBfQ0hVTktdID0gYzsKKwkJfSBlbHNl IHsKKwkJCXMuYnVmW3MuY291bnRdID0gMDsKKwkJCXByX2NvbnQoIiVzIiwgcy5idWYgKyBpKTsK KwkJfQorCX0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvdHJhY2Uv c3luYy5oIGIvZHJpdmVycy9hbmRyb2lkL3RyYWNlL3N5bmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi43ZGNmMmZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hbmRy b2lkL3RyYWNlL3N5bmMuaApAQCAtMCwwICsxLDgyIEBACisjdW5kZWYgVFJBQ0VfU1lTVEVNCisj ZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCAuLi8uLi9kcml2ZXJzL2FuZHJvaWQvdHJhY2UKKyNk ZWZpbmUgVFJBQ0VfU1lTVEVNIHN5bmMKKworI2lmICFkZWZpbmVkKF9UUkFDRV9TWU5DX0gpIHx8 IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9TWU5DX0gK KworI2luY2x1ZGUgIi4uL3N5bmMuaCIKKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisK K1RSQUNFX0VWRU5UKHN5bmNfdGltZWxpbmUsCisJVFBfUFJPVE8oc3RydWN0IHN5bmNfdGltZWxp bmUgKnRpbWVsaW5lKSwKKworCVRQX0FSR1ModGltZWxpbmUpLAorCisJVFBfU1RSVUNUX19lbnRy eSgKKwkJCV9fc3RyaW5nKG5hbWUsIHRpbWVsaW5lLT5uYW1lKQorCQkJX19hcnJheShjaGFyLCB2 YWx1ZSwgMzIpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQkJX19hc3NpZ25fc3RyKG5hbWUs IHRpbWVsaW5lLT5uYW1lKTsKKwkJCWlmICh0aW1lbGluZS0+b3BzLT50aW1lbGluZV92YWx1ZV9z dHIpIHsKKwkJCQl0aW1lbGluZS0+b3BzLT50aW1lbGluZV92YWx1ZV9zdHIodGltZWxpbmUsCisJ CQkJCQkJX19lbnRyeS0+dmFsdWUsCisJCQkJCQkJc2l6ZW9mKF9fZW50cnktPnZhbHVlKSk7CisJ CQl9IGVsc2UgeworCQkJCV9fZW50cnktPnZhbHVlWzBdID0gJ1wwJzsKKwkJCX0KKwkpLAorCisJ VFBfcHJpbnRrKCJuYW1lPSVzIHZhbHVlPSVzIiwgX19nZXRfc3RyKG5hbWUpLCBfX2VudHJ5LT52 YWx1ZSkKKyk7CisKK1RSQUNFX0VWRU5UKHN5bmNfd2FpdCwKKwlUUF9QUk9UTyhzdHJ1Y3Qgc3lu Y19mZW5jZSAqZmVuY2UsIGludCBiZWdpbiksCisKKwlUUF9BUkdTKGZlbmNlLCBiZWdpbiksCisK KwlUUF9TVFJVQ1RfX2VudHJ5KAorCQkJX19zdHJpbmcobmFtZSwgZmVuY2UtPm5hbWUpCisJCQlf X2ZpZWxkKHMzMiwgc3RhdHVzKQorCQkJX19maWVsZCh1MzIsIGJlZ2luKQorCSksCisKKwlUUF9m YXN0X2Fzc2lnbigKKwkJCV9fYXNzaWduX3N0cihuYW1lLCBmZW5jZS0+bmFtZSk7CisJCQlfX2Vu dHJ5LT5zdGF0dXMgPSBhdG9taWNfcmVhZCgmZmVuY2UtPnN0YXR1cyk7CisJCQlfX2VudHJ5LT5i ZWdpbiA9IGJlZ2luOworCSksCisKKwlUUF9wcmludGsoIiVzIG5hbWU9JXMgc3RhdGU9JWQiLCBf X2VudHJ5LT5iZWdpbiA/ICJiZWdpbiIgOiAiZW5kIiwKKwkJCV9fZ2V0X3N0cihuYW1lKSwgX19l bnRyeS0+c3RhdHVzKQorKTsKKworVFJBQ0VfRVZFTlQoc3luY19wdCwKKwlUUF9QUk9UTyhzdHJ1 Y3QgZmVuY2UgKnB0KSwKKworCVRQX0FSR1MocHQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJ X19zdHJpbmcodGltZWxpbmUsIHB0LT5vcHMtPmdldF90aW1lbGluZV9uYW1lKHB0KSkKKwkJX19h cnJheShjaGFyLCB2YWx1ZSwgMzIpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Fzc2ln bl9zdHIodGltZWxpbmUsIHB0LT5vcHMtPmdldF90aW1lbGluZV9uYW1lKHB0KSk7CisJCWlmIChw dC0+b3BzLT5mZW5jZV92YWx1ZV9zdHIpIHsKKwkJCXB0LT5vcHMtPmZlbmNlX3ZhbHVlX3N0cihw dCwgX19lbnRyeS0+dmFsdWUsCisJCQkJCQkJc2l6ZW9mKF9fZW50cnktPnZhbHVlKSk7CisJCX0g ZWxzZSB7CisJCQlfX2VudHJ5LT52YWx1ZVswXSA9ICdcMCc7CisJCX0KKwkpLAorCisJVFBfcHJp bnRrKCJuYW1lPSVzIHZhbHVlPSVzIiwgX19nZXRfc3RyKHRpbWVsaW5lKSwgX19lbnRyeS0+dmFs dWUpCispOworCisjZW5kaWYgLyogaWYgIWRlZmluZWQoX1RSQUNFX1NZTkNfSCkgfHwgZGVmaW5l ZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkgKi8KKworLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0 c2lkZSBwcm90ZWN0aW9uICovCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYg LS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5n L2FuZHJvaWQvS2NvbmZpZwppbmRleCA0MmIxNTEyLi40YjE4ZmVlIDEwMDY0NAotLS0gYS9kcml2 ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lk L0tjb25maWcKQEAgLTM4LDM0ICszOCw2IEBAIGNvbmZpZyBBTkRST0lEX0xPV19NRU1PUllfS0lM TEVSCiAJICBzY3JpcHRzICgvaW5pdC5yYyksIGFuZCBpdCBkZWZpbmVzIHByaW9yaXR5IHZhbHVl cyB3aXRoIG1pbmltdW0gZnJlZSBtZW1vcnkgc2l6ZQogCSAgZm9yIGVhY2ggcHJpb3JpdHkuCiAK LWNvbmZpZyBTWU5DCi0JYm9vbCAiU3luY2hyb25pemF0aW9uIGZyYW1ld29yayIKLQlkZWZhdWx0 IG4KLQlzZWxlY3QgQU5PTl9JTk9ERVMKLQlzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVIKLQktLS1o ZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmcmFtZXdvcmsgZm9yIHN5bmNocm9u aXphdGlvbiBiZXR3ZWVuIG11bHRpcGxlCi0JICBkcml2ZXJzLiAgU3luYyBpbXBsZW1lbnRhdGlv bnMgY2FuIHRha2UgYWR2YW50YWdlIG9mIGhhcmR3YXJlCi0JICBzeW5jaHJvbml6YXRpb24gYnVp bHQgaW50byBkZXZpY2VzIGxpa2UgR1BVcy4KLQotY29uZmlnIFNXX1NZTkMKLQlib29sICJTb2Z0 d2FyZSBzeW5jaHJvbml6YXRpb24gb2JqZWN0cyIKLQlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIFNZ TkMKLQktLS1oZWxwLS0tCi0JICBBIHN5bmMgb2JqZWN0IGRyaXZlciB0aGF0IHVzZXMgYSAzMmJp dCBjb3VudGVyIHRvIGNvb3JkaW5hdGUKLQkgIHN5bmNocm9uaXphdGlvbi4gIFVzZWZ1bCB3aGVu IHRoZXJlIGlzIG5vIGhhcmR3YXJlIHByaW1pdGl2ZSBiYWNraW5nCi0JICB0aGUgc3luY2hyb25p emF0aW9uLgotCi1jb25maWcgU1dfU1lOQ19VU0VSCi0JYm9vbCAiVXNlcnNwYWNlIEFQSSBmb3Ig U1dfU1lOQyIKLQlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIFNXX1NZTkMKLQktLS1oZWxwLS0tCi0J ICBQcm92aWRlcyBhIHVzZXIgc3BhY2UgQVBJIHRvIHRoZSBzdyBzeW5jIG9iamVjdC4KLQkgICpX QVJOSU5HKiBpbXByb3BlciB1c2Ugb2YgdGhpcyBjYW4gcmVzdWx0IGluIGRlYWRsb2NraW5nIGtl cm5lbAotCSAgZHJpdmVycyBmcm9tIHVzZXJzcGFjZS4KLQogc291cmNlICJkcml2ZXJzL3N0YWdp bmcvYW5kcm9pZC9pb24vS2NvbmZpZyIKIAogZW5kaWYgIyBpZiBBTkRST0lECmRpZmYgLS1naXQg YS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9hbmRy b2lkL01ha2VmaWxlCmluZGV4IGM3YjZjOTkuLjM1NWFkMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv c3RhZ2luZy9hbmRyb2lkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL01h a2VmaWxlCkBAIC02LDUgKzYsMyBAQCBvYmotJChDT05GSUdfQVNITUVNKQkJCSs9IGFzaG1lbS5v CiBvYmotJChDT05GSUdfQU5EUk9JRF9USU1FRF9PVVRQVVQpCSs9IHRpbWVkX291dHB1dC5vCiBv YmotJChDT05GSUdfQU5EUk9JRF9USU1FRF9HUElPKQkrPSB0aW1lZF9ncGlvLm8KIG9iai0kKENP TkZJR19BTkRST0lEX0xPV19NRU1PUllfS0lMTEVSKQkrPSBsb3dtZW1vcnlraWxsZXIubwotb2Jq LSQoQ09ORklHX1NZTkMpCQkJKz0gc3luYy5vIHN5bmNfZGVidWcubwotb2JqLSQoQ09ORklHX1NX X1NZTkMpCQkJKz0gc3dfc3luYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9p ZC9zd19zeW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zd19zeW5jLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZmYxNjcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFn aW5nL2FuZHJvaWQvc3dfc3luYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLS8q Ci0gKiBkcml2ZXJzL2Jhc2Uvc3dfc3luYy5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdv b2dsZSwgSW5jLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCi0gKiBtYXkgYmUg Y29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwu aD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+Ci0j aW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8 bGludXgvbWlzY2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVk ZSA8bGludXgvdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSAic3dfc3luYy5oIgotCi1zdGF0aWMgaW50 IHN3X3N5bmNfY21wKHUzMiBhLCB1MzIgYikKLXsKLQlpZiAoYSA9PSBiKQotCQlyZXR1cm4gMDsK LQotCXJldHVybiAoKHMzMilhIC0gKHMzMiliKSA8IDAgPyAtMSA6IDE7Ci19Ci0KLXN0cnVjdCBz eW5jX3B0ICpzd19zeW5jX3B0X2NyZWF0ZShzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqLCB1 MzIgdmFsdWUpCi17Ci0Jc3RydWN0IHN3X3N5bmNfcHQgKnB0OwotCi0JcHQgPSAoc3RydWN0IHN3 X3N5bmNfcHQgKikKLQkJc3luY19wdF9jcmVhdGUoJm9iai0+b2JqLCBzaXplb2Yoc3RydWN0IHN3 X3N5bmNfcHQpKTsKLQotCXB0LT52YWx1ZSA9IHZhbHVlOwotCi0JcmV0dXJuIChzdHJ1Y3Qgc3lu Y19wdCAqKXB0OwotfQotRVhQT1JUX1NZTUJPTChzd19zeW5jX3B0X2NyZWF0ZSk7Ci0KLXN0YXRp YyBzdHJ1Y3Qgc3luY19wdCAqc3dfc3luY19wdF9kdXAoc3RydWN0IHN5bmNfcHQgKnN5bmNfcHQp Ci17Ci0Jc3RydWN0IHN3X3N5bmNfcHQgKnB0ID0gKHN0cnVjdCBzd19zeW5jX3B0ICopc3luY19w dDsKLQlzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqID0KLQkJKHN0cnVjdCBzd19zeW5jX3Rp bWVsaW5lICopc3luY19wdF9wYXJlbnQoc3luY19wdCk7Ci0KLQlyZXR1cm4gKHN0cnVjdCBzeW5j X3B0ICopc3dfc3luY19wdF9jcmVhdGUob2JqLCBwdC0+dmFsdWUpOwotfQotCi1zdGF0aWMgaW50 IHN3X3N5bmNfcHRfaGFzX3NpZ25hbGVkKHN0cnVjdCBzeW5jX3B0ICpzeW5jX3B0KQotewotCXN0 cnVjdCBzd19zeW5jX3B0ICpwdCA9IChzdHJ1Y3Qgc3dfc3luY19wdCAqKXN5bmNfcHQ7Ci0Jc3Ry dWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiA9Ci0JCShzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAq KXN5bmNfcHRfcGFyZW50KHN5bmNfcHQpOwotCi0JcmV0dXJuIHN3X3N5bmNfY21wKG9iai0+dmFs dWUsIHB0LT52YWx1ZSkgPj0gMDsKLX0KLQotc3RhdGljIGludCBzd19zeW5jX3B0X2NvbXBhcmUo c3RydWN0IHN5bmNfcHQgKmEsIHN0cnVjdCBzeW5jX3B0ICpiKQotewotCXN0cnVjdCBzd19zeW5j X3B0ICpwdF9hID0gKHN0cnVjdCBzd19zeW5jX3B0ICopYTsKLQlzdHJ1Y3Qgc3dfc3luY19wdCAq cHRfYiA9IChzdHJ1Y3Qgc3dfc3luY19wdCAqKWI7Ci0KLQlyZXR1cm4gc3dfc3luY19jbXAocHRf YS0+dmFsdWUsIHB0X2ItPnZhbHVlKTsKLX0KLQotc3RhdGljIGludCBzd19zeW5jX2ZpbGxfZHJp dmVyX2RhdGEoc3RydWN0IHN5bmNfcHQgKnN5bmNfcHQsCi0JCQkJICAgIHZvaWQgKmRhdGEsIGlu dCBzaXplKQotewotCXN0cnVjdCBzd19zeW5jX3B0ICpwdCA9IChzdHJ1Y3Qgc3dfc3luY19wdCAq KXN5bmNfcHQ7Ci0KLQlpZiAoc2l6ZSA8IHNpemVvZihwdC0+dmFsdWUpKQotCQlyZXR1cm4gLUVO T01FTTsKLQotCW1lbWNweShkYXRhLCAmcHQtPnZhbHVlLCBzaXplb2YocHQtPnZhbHVlKSk7Ci0K LQlyZXR1cm4gc2l6ZW9mKHB0LT52YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN3X3N5bmNfdGlt ZWxpbmVfdmFsdWVfc3RyKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpzeW5jX3RpbWVsaW5lLAotCQkJ CSAgICAgICBjaGFyICpzdHIsIGludCBzaXplKQotewotCXN0cnVjdCBzd19zeW5jX3RpbWVsaW5l ICp0aW1lbGluZSA9Ci0JCShzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqKXN5bmNfdGltZWxpbmU7 Ci0Jc25wcmludGYoc3RyLCBzaXplLCAiJWQiLCB0aW1lbGluZS0+dmFsdWUpOwotfQotCi1zdGF0 aWMgdm9pZCBzd19zeW5jX3B0X3ZhbHVlX3N0cihzdHJ1Y3Qgc3luY19wdCAqc3luY19wdCwKLQkJ CQkgY2hhciAqc3RyLCBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3Qgc3dfc3luY19wdCAqcHQgPSAoc3Ry dWN0IHN3X3N5bmNfcHQgKilzeW5jX3B0OwotCi0Jc25wcmludGYoc3RyLCBzaXplLCAiJWQiLCBw dC0+dmFsdWUpOwotfQotCi1zdGF0aWMgc3RydWN0IHN5bmNfdGltZWxpbmVfb3BzIHN3X3N5bmNf dGltZWxpbmVfb3BzID0gewotCS5kcml2ZXJfbmFtZSA9ICJzd19zeW5jIiwKLQkuZHVwID0gc3df c3luY19wdF9kdXAsCi0JLmhhc19zaWduYWxlZCA9IHN3X3N5bmNfcHRfaGFzX3NpZ25hbGVkLAot CS5jb21wYXJlID0gc3dfc3luY19wdF9jb21wYXJlLAotCS5maWxsX2RyaXZlcl9kYXRhID0gc3df c3luY19maWxsX2RyaXZlcl9kYXRhLAotCS50aW1lbGluZV92YWx1ZV9zdHIgPSBzd19zeW5jX3Rp bWVsaW5lX3ZhbHVlX3N0ciwKLQkucHRfdmFsdWVfc3RyID0gc3dfc3luY19wdF92YWx1ZV9zdHIs Ci19OwotCi1zdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqc3dfc3luY190aW1lbGluZV9jcmVhdGUo Y29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqID0gKHN0 cnVjdCBzd19zeW5jX3RpbWVsaW5lICopCi0JCXN5bmNfdGltZWxpbmVfY3JlYXRlKCZzd19zeW5j X3RpbWVsaW5lX29wcywKLQkJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSks Ci0JCQkJICAgICBuYW1lKTsKLQotCXJldHVybiBvYmo7Ci19Ci1FWFBPUlRfU1lNQk9MKHN3X3N5 bmNfdGltZWxpbmVfY3JlYXRlKTsKLQotdm9pZCBzd19zeW5jX3RpbWVsaW5lX2luYyhzdHJ1Y3Qg c3dfc3luY190aW1lbGluZSAqb2JqLCB1MzIgaW5jKQotewotCW9iai0+dmFsdWUgKz0gaW5jOwot Ci0Jc3luY190aW1lbGluZV9zaWduYWwoJm9iai0+b2JqKTsKLX0KLUVYUE9SVF9TWU1CT0woc3df c3luY190aW1lbGluZV9pbmMpOwotCi0jaWZkZWYgQ09ORklHX1NXX1NZTkNfVVNFUgotLyogKldB Uk5JTkcqCi0gKgotICogaW1wcm9wZXIgdXNlIG9mIHRoaXMgY2FuIHJlc3VsdCBpbiBkZWFkbG9j a2luZyBrZXJuZWwgZHJpdmVycyBmcm9tIHVzZXJzcGFjZS4KLSAqLwotCi0vKiBvcGVuaW5nIHN3 X3N5bmMgY3JlYXRlIGEgbmV3IHN5bmMgb2JqICovCi1zdGF0aWMgaW50IHN3X3N5bmNfb3Blbihz dHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc3dfc3lu Y190aW1lbGluZSAqb2JqOwotCWNoYXIgdGFza19jb21tW1RBU0tfQ09NTV9MRU5dOwotCi0JZ2V0 X3Rhc2tfY29tbSh0YXNrX2NvbW0sIGN1cnJlbnQpOwotCi0Jb2JqID0gc3dfc3luY190aW1lbGlu ZV9jcmVhdGUodGFza19jb21tKTsKLQlpZiAoIW9iaikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlm aWxlLT5wcml2YXRlX2RhdGEgPSBvYmo7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBz d19zeW5jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17 Ci0Jc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQot CXN5bmNfdGltZWxpbmVfZGVzdHJveSgmb2JqLT5vYmopOwotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgbG9uZyBzd19zeW5jX2lvY3RsX2NyZWF0ZV9mZW5jZShzdHJ1Y3Qgc3dfc3luY190aW1lbGlu ZSAqb2JqLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgZmQgPSBnZXRf dW51c2VkX2ZkX2ZsYWdzKE9fQ0xPRVhFQyk7Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc3luY19wdCAq cHQ7Ci0Jc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlOwotCXN0cnVjdCBzd19zeW5jX2NyZWF0ZV9m ZW5jZV9kYXRhIGRhdGE7Ci0KLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gZmQ7Ci0KLQlpZiAoY29w eV9mcm9tX3VzZXIoJmRhdGEsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGRhdGEpKSkgewot CQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlwdCA9IHN3X3N5bmNfcHRfY3Jl YXRlKG9iaiwgZGF0YS52YWx1ZSk7Ci0JaWYgKCFwdCkgewotCQllcnIgPSAtRU5PTUVNOwotCQln b3RvIGVycjsKLQl9Ci0KLQlkYXRhLm5hbWVbc2l6ZW9mKGRhdGEubmFtZSkgLSAxXSA9ICdcMCc7 Ci0JZmVuY2UgPSBzeW5jX2ZlbmNlX2NyZWF0ZShkYXRhLm5hbWUsIHB0KTsKLQlpZiAoIWZlbmNl KSB7Ci0JCXN5bmNfcHRfZnJlZShwdCk7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOwot CX0KLQotCWRhdGEuZmVuY2UgPSBmZDsKLQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAq KWFyZywgJmRhdGEsIHNpemVvZihkYXRhKSkpIHsKLQkJc3luY19mZW5jZV9wdXQoZmVuY2UpOwot CQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlzeW5jX2ZlbmNlX2luc3RhbGwo ZmVuY2UsIGZkKTsKLQotCXJldHVybiAwOwotCi1lcnI6Ci0JcHV0X3VudXNlZF9mZChmZCk7Ci0J cmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGxvbmcgc3dfc3luY19pb2N0bF9pbmMoc3RydWN0IHN3 X3N5bmNfdGltZWxpbmUgKm9iaiwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JdTMyIHZhbHVlOwot Ci0JaWYgKGNvcHlfZnJvbV91c2VyKCZ2YWx1ZSwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2Yo dmFsdWUpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlzd19zeW5jX3RpbWVsaW5lX2luYyhvYmos IHZhbHVlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgbG9uZyBzd19zeW5jX2lvY3RsKHN0 cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICB1bnNpZ25lZCBsb25nIGFy ZykKLXsKLQlzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqID0gZmlsZS0+cHJpdmF0ZV9kYXRh OwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNXX1NZTkNfSU9DX0NSRUFURV9GRU5DRToKLQkJ cmV0dXJuIHN3X3N5bmNfaW9jdGxfY3JlYXRlX2ZlbmNlKG9iaiwgYXJnKTsKLQotCWNhc2UgU1df U1lOQ19JT0NfSU5DOgotCQlyZXR1cm4gc3dfc3luY19pb2N0bF9pbmMob2JqLCBhcmcpOwotCi0J ZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UVFk7Ci0JfQotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyBzd19zeW5jX2ZvcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUs Ci0JLm9wZW4gPSBzd19zeW5jX29wZW4sCi0JLnJlbGVhc2UgPSBzd19zeW5jX3JlbGVhc2UsCi0J LnVubG9ja2VkX2lvY3RsID0gc3dfc3luY19pb2N0bCwKLQkuY29tcGF0X2lvY3RsID0gc3dfc3lu Y19pb2N0bCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBzd19zeW5jX2RldiA9IHsK LQkubWlub3IJPSBNSVNDX0RZTkFNSUNfTUlOT1IsCi0JLm5hbWUJPSAic3dfc3luYyIsCi0JLmZv cHMJPSAmc3dfc3luY19mb3BzLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc3dfc3luY19kZXZp Y2VfaW5pdCh2b2lkKQotewotCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZzd19zeW5jX2Rldik7Ci19 Ci1kZXZpY2VfaW5pdGNhbGwoc3dfc3luY19kZXZpY2VfaW5pdCk7Ci0KLSNlbmRpZiAvKiBDT05G SUdfU1dfU1lOQ19VU0VSICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9z d19zeW5jLmggYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zd19zeW5jLmgKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGM4N2FlOWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5n L2FuZHJvaWQvc3dfc3luYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAq IGluY2x1ZGUvbGludXgvc3dfc3luYy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds ZSwgSW5jLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCi0gKiBtYXkgYmUgY29w aWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgotICoKLSAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0xJTlVYX1NXX1NZTkNfSAot I2RlZmluZSBfTElOVVhfU1dfU1lOQ19ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2lu Y2x1ZGUgPGxpbnV4L2tjb25maWcuaD4KLSNpbmNsdWRlICJzeW5jLmgiCi0jaW5jbHVkZSAidWFw aS9zd19zeW5jLmgiCi0KLXN0cnVjdCBzd19zeW5jX3RpbWVsaW5lIHsKLQlzdHJ1Y3QJc3luY190 aW1lbGluZQlvYmo7Ci0KLQl1MzIJCQl2YWx1ZTsKLX07Ci0KLXN0cnVjdCBzd19zeW5jX3B0IHsK LQlzdHJ1Y3Qgc3luY19wdAkJcHQ7Ci0KLQl1MzIJCQl2YWx1ZTsKLX07Ci0KLSNpZiBJU19FTkFC TEVEKENPTkZJR19TV19TWU5DKQotc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKnN3X3N5bmNfdGlt ZWxpbmVfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUpOwotdm9pZCBzd19zeW5jX3RpbWVsaW5lX2lu YyhzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqLCB1MzIgaW5jKTsKLQotc3RydWN0IHN5bmNf cHQgKnN3X3N5bmNfcHRfY3JlYXRlKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmosIHUzMiB2 YWx1ZSk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqc3df c3luY190aW1lbGluZV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlyZXR1cm4gTlVMTDsK LX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN3X3N5bmNfdGltZWxpbmVfaW5jKHN0cnVjdCBzd19z eW5jX3RpbWVsaW5lICpvYmosIHUzMiBpbmMpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0 IHN5bmNfcHQgKnN3X3N5bmNfcHRfY3JlYXRlKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmos Ci0JCQkJCQl1MzIgdmFsdWUpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYgLyogSVNfRU5B QkxFRChDT05GSUdfU1dfU1lOQykgKi8KLQotI2VuZGlmIC8qIF9MSU5VWF9TV19TWU5DX0ggKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuYyBiL2RyaXZlcnMvc3Rh Z2luZy9hbmRyb2lkL3N5bmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwZTkx OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmMKKysrIC9kZXYv bnVsbApAQCAtMSw3MzQgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvYmFzZS9zeW5jLmMKLSAqCi0g KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBp cyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICog TGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBhbmQKLSAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQg dW5kZXIgdGhvc2UgdGVybXMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQot I2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KLSNp bmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxs aW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgv c2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvYW5vbl9p bm9kZXMuaD4KLQotI2luY2x1ZGUgInN5bmMuaCIKLQotI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9J TlRTCi0jaW5jbHVkZSAidHJhY2Uvc3luYy5oIgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZlbmNl X29wcyBhbmRyb2lkX2ZlbmNlX29wczsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHN5bmNfZmVuY2VfZm9wczsKLQotc3RydWN0IHN5bmNfdGltZWxpbmUgKnN5bmNfdGltZWxp bmVfY3JlYXRlKGNvbnN0IHN0cnVjdCBzeW5jX3RpbWVsaW5lX29wcyAqb3BzLAotCQkJCQkgICBp bnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2Jq OwotCi0JaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IHN5bmNfdGltZWxpbmUpKQotCQlyZXR1cm4g TlVMTDsKLQotCW9iaiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG9iaiA9PSBO VUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWtyZWZfaW5pdCgmb2JqLT5rcmVmKTsKLQlvYmotPm9w cyA9IG9wczsKLQlvYmotPmNvbnRleHQgPSBmZW5jZV9jb250ZXh0X2FsbG9jKDEpOwotCXN0cmxj cHkob2JqLT5uYW1lLCBuYW1lLCBzaXplb2Yob2JqLT5uYW1lKSk7Ci0KLQlJTklUX0xJU1RfSEVB RCgmb2JqLT5jaGlsZF9saXN0X2hlYWQpOwotCUlOSVRfTElTVF9IRUFEKCZvYmotPmFjdGl2ZV9s aXN0X2hlYWQpOwotCXNwaW5fbG9ja19pbml0KCZvYmotPmNoaWxkX2xpc3RfbG9jayk7Ci0KLQlz eW5jX3RpbWVsaW5lX2RlYnVnX2FkZChvYmopOwotCi0JcmV0dXJuIG9iajsKLX0KLUVYUE9SVF9T WU1CT0woc3luY190aW1lbGluZV9jcmVhdGUpOwotCi1zdGF0aWMgdm9pZCBzeW5jX3RpbWVsaW5l X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iaiA9 Ci0JCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc3luY190aW1lbGluZSwga3JlZik7Ci0KLQlz eW5jX3RpbWVsaW5lX2RlYnVnX3JlbW92ZShvYmopOwotCi0JaWYgKG9iai0+b3BzLT5yZWxlYXNl X29iaikKLQkJb2JqLT5vcHMtPnJlbGVhc2Vfb2JqKG9iaik7Ci0KLQlrZnJlZShvYmopOwotfQot Ci1zdGF0aWMgdm9pZCBzeW5jX3RpbWVsaW5lX2dldChzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2Jq KQotewotCWtyZWZfZ2V0KCZvYmotPmtyZWYpOwotfQotCi1zdGF0aWMgdm9pZCBzeW5jX3RpbWVs aW5lX3B1dChzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQotewotCWtyZWZfcHV0KCZvYmotPmty ZWYsIHN5bmNfdGltZWxpbmVfZnJlZSk7Ci19Ci0KLXZvaWQgc3luY190aW1lbGluZV9kZXN0cm95 KHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopCi17Ci0Jb2JqLT5kZXN0cm95ZWQgPSB0cnVlOwot CS8qCi0JICogRW5zdXJlIHRpbWVsaW5lIGlzIG1hcmtlZCBhcyBkZXN0cm95ZWQgYmVmb3JlCi0J ICogY2hhbmdpbmcgdGltZWxpbmUncyBmZW5jZXMgc3RhdHVzLgotCSAqLwotCXNtcF93bWIoKTsK LQotCS8qCi0JICogc2lnbmFsIGFueSBjaGlsZHJlbiB0aGF0IHRoZWlyIHBhcmVudCBpcyBnb2lu ZyBhd2F5LgotCSAqLwotCXN5bmNfdGltZWxpbmVfc2lnbmFsKG9iaik7Ci0Jc3luY190aW1lbGlu ZV9wdXQob2JqKTsKLX0KLUVYUE9SVF9TWU1CT0woc3luY190aW1lbGluZV9kZXN0cm95KTsKLQot dm9pZCBzeW5jX3RpbWVsaW5lX3NpZ25hbChzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQotewot CXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKHNpZ25hbGVkX3B0cyk7Ci0Jc3RydWN0 IHN5bmNfcHQgKnB0LCAqbmV4dDsKLQotCXRyYWNlX3N5bmNfdGltZWxpbmUob2JqKTsKLQotCXNw aW5fbG9ja19pcnFzYXZlKCZvYmotPmNoaWxkX2xpc3RfbG9jaywgZmxhZ3MpOwotCi0JbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlKHB0LCBuZXh0LCAmb2JqLT5hY3RpdmVfbGlzdF9oZWFkLAotCQkJ CSBhY3RpdmVfbGlzdCkgewotCQlpZiAoZmVuY2VfaXNfc2lnbmFsZWRfbG9ja2VkKCZwdC0+YmFz ZSkpCi0JCQlsaXN0X2RlbF9pbml0KCZwdC0+YWN0aXZlX2xpc3QpOwotCX0KLQotCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRf U1lNQk9MKHN5bmNfdGltZWxpbmVfc2lnbmFsKTsKLQotc3RydWN0IHN5bmNfcHQgKnN5bmNfcHRf Y3JlYXRlKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmosIGludCBzaXplKQotewotCXVuc2lnbmVk IGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHN5bmNfcHQgKnB0OwotCi0JaWYgKHNpemUgPCBzaXplb2Yo c3RydWN0IHN5bmNfcHQpKQotCQlyZXR1cm4gTlVMTDsKLQotCXB0ID0ga3phbGxvYyhzaXplLCBH RlBfS0VSTkVMKTsKLQlpZiAocHQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzcGluX2xv Y2tfaXJxc2F2ZSgmb2JqLT5jaGlsZF9saXN0X2xvY2ssIGZsYWdzKTsKLQlzeW5jX3RpbWVsaW5l X2dldChvYmopOwotCWZlbmNlX2luaXQoJnB0LT5iYXNlLCAmYW5kcm9pZF9mZW5jZV9vcHMsICZv YmotPmNoaWxkX2xpc3RfbG9jaywKLQkJICAgb2JqLT5jb250ZXh0LCArK29iai0+dmFsdWUpOwot CWxpc3RfYWRkX3RhaWwoJnB0LT5jaGlsZF9saXN0LCAmb2JqLT5jaGlsZF9saXN0X2hlYWQpOwot CUlOSVRfTElTVF9IRUFEKCZwdC0+YWN0aXZlX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHB0OwotfQotRVhQT1JU X1NZTUJPTChzeW5jX3B0X2NyZWF0ZSk7Ci0KLXZvaWQgc3luY19wdF9mcmVlKHN0cnVjdCBzeW5j X3B0ICpwdCkKLXsKLQlmZW5jZV9wdXQoJnB0LT5iYXNlKTsKLX0KLUVYUE9SVF9TWU1CT0woc3lu Y19wdF9mcmVlKTsKLQotc3RhdGljIHN0cnVjdCBzeW5jX2ZlbmNlICpzeW5jX2ZlbmNlX2FsbG9j KGludCBzaXplLCBjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5j ZTsKLQotCWZlbmNlID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoZmVuY2UgPT0g TlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmZW5jZS0+ZmlsZSA9IGFub25faW5vZGVfZ2V0Zmls ZSgic3luY19mZW5jZSIsICZzeW5jX2ZlbmNlX2ZvcHMsCi0JCQkJCSBmZW5jZSwgMCk7Ci0JaWYg KElTX0VSUihmZW5jZS0+ZmlsZSkpCi0JCWdvdG8gZXJyOwotCi0Ja3JlZl9pbml0KCZmZW5jZS0+ a3JlZik7Ci0Jc3RybGNweShmZW5jZS0+bmFtZSwgbmFtZSwgc2l6ZW9mKGZlbmNlLT5uYW1lKSk7 Ci0KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmZW5jZS0+d3EpOwotCi0JcmV0dXJuIGZlbmNlOwot Ci1lcnI6Ci0Ja2ZyZWUoZmVuY2UpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBm ZW5jZV9jaGVja19jYl9mdW5jKHN0cnVjdCBmZW5jZSAqZiwgc3RydWN0IGZlbmNlX2NiICpjYikK LXsKLQlzdHJ1Y3Qgc3luY19mZW5jZV9jYiAqY2hlY2s7Ci0Jc3RydWN0IHN5bmNfZmVuY2UgKmZl bmNlOwotCi0JY2hlY2sgPSBjb250YWluZXJfb2YoY2IsIHN0cnVjdCBzeW5jX2ZlbmNlX2NiLCBj Yik7Ci0JZmVuY2UgPSBjaGVjay0+ZmVuY2U7Ci0KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgm ZmVuY2UtPnN0YXR1cykpCi0JCXdha2VfdXBfYWxsKCZmZW5jZS0+d3EpOwotfQotCi0vKiBUT0RP OiBpbXBsZW1lbnQgYSBjcmVhdGUgd2hpY2ggdGFrZXMgbW9yZSB0aGF0IG9uZSBzeW5jX3B0ICov Ci1zdHJ1Y3Qgc3luY19mZW5jZSAqc3luY19mZW5jZV9jcmVhdGVfZG1hKGNvbnN0IGNoYXIgKm5h bWUsIHN0cnVjdCBmZW5jZSAqcHQpCi17Ci0Jc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlOwotCi0J ZmVuY2UgPSBzeW5jX2ZlbmNlX2FsbG9jKG9mZnNldG9mKHN0cnVjdCBzeW5jX2ZlbmNlLCBjYnNb MV0pLCBuYW1lKTsKLQlpZiAoZmVuY2UgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmZW5j ZS0+bnVtX2ZlbmNlcyA9IDE7Ci0JYXRvbWljX3NldCgmZmVuY2UtPnN0YXR1cywgMSk7Ci0KLQlm ZW5jZS0+Y2JzWzBdLnN5bmNfcHQgPSBwdDsKLQlmZW5jZS0+Y2JzWzBdLmZlbmNlID0gZmVuY2U7 Ci0JaWYgKGZlbmNlX2FkZF9jYWxsYmFjayhwdCwgJmZlbmNlLT5jYnNbMF0uY2IsIGZlbmNlX2No ZWNrX2NiX2Z1bmMpKQotCQlhdG9taWNfZGVjKCZmZW5jZS0+c3RhdHVzKTsKLQotCXN5bmNfZmVu Y2VfZGVidWdfYWRkKGZlbmNlKTsKLQotCXJldHVybiBmZW5jZTsKLX0KLUVYUE9SVF9TWU1CT0wo c3luY19mZW5jZV9jcmVhdGVfZG1hKTsKLQotc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2Vf Y3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzeW5jX3B0ICpwdCkKLXsKLQlyZXR1cm4g c3luY19mZW5jZV9jcmVhdGVfZG1hKG5hbWUsICZwdC0+YmFzZSk7Ci19Ci1FWFBPUlRfU1lNQk9M KHN5bmNfZmVuY2VfY3JlYXRlKTsKLQotc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfZmRn ZXQoaW50IGZkKQotewotCXN0cnVjdCBmaWxlICpmaWxlID0gZmdldChmZCk7Ci0KLQlpZiAoZmls ZSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChmaWxlLT5mX29wICE9ICZzeW5jX2Zl bmNlX2ZvcHMpCi0JCWdvdG8gZXJyOwotCi0JcmV0dXJuIGZpbGUtPnByaXZhdGVfZGF0YTsKLQot ZXJyOgotCWZwdXQoZmlsZSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKHN5bmNf ZmVuY2VfZmRnZXQpOwotCi12b2lkIHN5bmNfZmVuY2VfcHV0KHN0cnVjdCBzeW5jX2ZlbmNlICpm ZW5jZSkKLXsKLQlmcHV0KGZlbmNlLT5maWxlKTsKLX0KLUVYUE9SVF9TWU1CT0woc3luY19mZW5j ZV9wdXQpOwotCi12b2lkIHN5bmNfZmVuY2VfaW5zdGFsbChzdHJ1Y3Qgc3luY19mZW5jZSAqZmVu Y2UsIGludCBmZCkKLXsKLQlmZF9pbnN0YWxsKGZkLCBmZW5jZS0+ZmlsZSk7Ci19Ci1FWFBPUlRf U1lNQk9MKHN5bmNfZmVuY2VfaW5zdGFsbCk7Ci0KLXN0YXRpYyB2b2lkIHN5bmNfZmVuY2VfYWRk X3B0KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwKLQkJCSAgICAgIGludCAqaSwgc3RydWN0IGZl bmNlICpwdCkKLXsKLQlmZW5jZS0+Y2JzWyppXS5zeW5jX3B0ID0gcHQ7Ci0JZmVuY2UtPmNic1sq aV0uZmVuY2UgPSBmZW5jZTsKLQotCWlmICghZmVuY2VfYWRkX2NhbGxiYWNrKHB0LCAmZmVuY2Ut PmNic1sqaV0uY2IsIGZlbmNlX2NoZWNrX2NiX2Z1bmMpKSB7Ci0JCWZlbmNlX2dldChwdCk7Ci0J CSgqaSkrKzsKLQl9Ci19Ci0KLXN0cnVjdCBzeW5jX2ZlbmNlICpzeW5jX2ZlbmNlX21lcmdlKGNv bnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgIHN0cnVjdCBzeW5jX2ZlbmNlICphLCBzdHJ1Y3Qgc3lu Y19mZW5jZSAqYikKLXsKLQlpbnQgbnVtX2ZlbmNlcyA9IGEtPm51bV9mZW5jZXMgKyBiLT5udW1f ZmVuY2VzOwotCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZTsKLQlpbnQgaSwgaV9hLCBpX2I7Ci0J dW5zaWduZWQgbG9uZyBzaXplID0gb2Zmc2V0b2Yoc3RydWN0IHN5bmNfZmVuY2UsIGNic1tudW1f ZmVuY2VzXSk7Ci0KLQlmZW5jZSA9IHN5bmNfZmVuY2VfYWxsb2Moc2l6ZSwgbmFtZSk7Ci0JaWYg KGZlbmNlID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JYXRvbWljX3NldCgmZmVuY2UtPnN0 YXR1cywgbnVtX2ZlbmNlcyk7Ci0KLQkvKgotCSAqIEFzc3VtZSBzeW5jX2ZlbmNlIGEgYW5kIGIg YXJlIGJvdGggb3JkZXJlZCBhbmQgaGF2ZSBubwotCSAqIGR1cGxpY2F0ZXMgd2l0aCB0aGUgc2Ft ZSBjb250ZXh0LgotCSAqCi0JICogSWYgYSBzeW5jX2ZlbmNlIGNhbiBvbmx5IGJlIGNyZWF0ZWQg d2l0aCBzeW5jX2ZlbmNlX21lcmdlCi0JICogYW5kIHN5bmNfZmVuY2VfY3JlYXRlLCB0aGlzIGlz IGEgcmVhc29uYWJsZSBhc3N1bXB0aW9uLgotCSAqLwotCWZvciAoaSA9IGlfYSA9IGlfYiA9IDA7 IGlfYSA8IGEtPm51bV9mZW5jZXMgJiYgaV9iIDwgYi0+bnVtX2ZlbmNlczsgKSB7Ci0JCXN0cnVj dCBmZW5jZSAqcHRfYSA9IGEtPmNic1tpX2FdLnN5bmNfcHQ7Ci0JCXN0cnVjdCBmZW5jZSAqcHRf YiA9IGItPmNic1tpX2JdLnN5bmNfcHQ7Ci0KLQkJaWYgKHB0X2EtPmNvbnRleHQgPCBwdF9iLT5j b250ZXh0KSB7Ci0JCQlzeW5jX2ZlbmNlX2FkZF9wdChmZW5jZSwgJmksIHB0X2EpOwotCi0JCQlp X2ErKzsKLQkJfSBlbHNlIGlmIChwdF9hLT5jb250ZXh0ID4gcHRfYi0+Y29udGV4dCkgewotCQkJ c3luY19mZW5jZV9hZGRfcHQoZmVuY2UsICZpLCBwdF9iKTsKLQotCQkJaV9iKys7Ci0JCX0gZWxz ZSB7Ci0JCQlpZiAocHRfYS0+c2Vxbm8gLSBwdF9iLT5zZXFubyA8PSBJTlRfTUFYKQotCQkJCXN5 bmNfZmVuY2VfYWRkX3B0KGZlbmNlLCAmaSwgcHRfYSk7Ci0JCQllbHNlCi0JCQkJc3luY19mZW5j ZV9hZGRfcHQoZmVuY2UsICZpLCBwdF9iKTsKLQotCQkJaV9hKys7Ci0JCQlpX2IrKzsKLQkJfQot CX0KLQotCWZvciAoOyBpX2EgPCBhLT5udW1fZmVuY2VzOyBpX2ErKykKLQkJc3luY19mZW5jZV9h ZGRfcHQoZmVuY2UsICZpLCBhLT5jYnNbaV9hXS5zeW5jX3B0KTsKLQotCWZvciAoOyBpX2IgPCBi LT5udW1fZmVuY2VzOyBpX2IrKykKLQkJc3luY19mZW5jZV9hZGRfcHQoZmVuY2UsICZpLCBiLT5j YnNbaV9iXS5zeW5jX3B0KTsKLQotCWlmIChudW1fZmVuY2VzID4gaSkKLQkJYXRvbWljX3N1Yihu dW1fZmVuY2VzIC0gaSwgJmZlbmNlLT5zdGF0dXMpOwotCWZlbmNlLT5udW1fZmVuY2VzID0gaTsK LQotCXN5bmNfZmVuY2VfZGVidWdfYWRkKGZlbmNlKTsKLQlyZXR1cm4gZmVuY2U7Ci19Ci1FWFBP UlRfU1lNQk9MKHN5bmNfZmVuY2VfbWVyZ2UpOwotCi1pbnQgc3luY19mZW5jZV93YWtlX3VwX3dx KHdhaXRfcXVldWVfdCAqY3VyciwgdW5zaWduZWQgbW9kZSwKLQkJCQkgaW50IHdha2VfZmxhZ3Ms IHZvaWQgKmtleSkKLXsKLQlzdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgKndhaXQ7Ci0KLQl3YWl0 ID0gY29udGFpbmVyX29mKGN1cnIsIHN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciwgd29yayk7Ci0J bGlzdF9kZWxfaW5pdCgmd2FpdC0+d29yay50YXNrX2xpc3QpOwotCi0Jd2FpdC0+Y2FsbGJhY2so d2FpdC0+d29yay5wcml2YXRlLCB3YWl0KTsKLQlyZXR1cm4gMTsKLX0KLQotaW50IHN5bmNfZmVu Y2Vfd2FpdF9hc3luYyhzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsCi0JCQkgIHN0cnVjdCBzeW5j X2ZlbmNlX3dhaXRlciAqd2FpdGVyKQotewotCWludCBlcnIgPSBhdG9taWNfcmVhZCgmZmVuY2Ut PnN0YXR1cyk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChlcnIgPCAwKQotCQlyZXR1 cm4gZXJyOwotCi0JaWYgKCFlcnIpCi0JCXJldHVybiAxOwotCi0JaW5pdF93YWl0cXVldWVfZnVu Y19lbnRyeSgmd2FpdGVyLT53b3JrLCBzeW5jX2ZlbmNlX3dha2VfdXBfd3EpOwotCXdhaXRlci0+ d29yay5wcml2YXRlID0gZmVuY2U7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVuY2UtPndxLmxv Y2ssIGZsYWdzKTsKLQllcnIgPSBhdG9taWNfcmVhZCgmZmVuY2UtPnN0YXR1cyk7Ci0JaWYgKGVy ciA+IDApCi0JCV9fYWRkX3dhaXRfcXVldWVfdGFpbCgmZmVuY2UtPndxLCAmd2FpdGVyLT53b3Jr KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZW5jZS0+d3EubG9jaywgZmxhZ3MpOwotCi0J aWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gIWVycjsKLX0KLUVYUE9SVF9T WU1CT0woc3luY19mZW5jZV93YWl0X2FzeW5jKTsKLQotaW50IHN5bmNfZmVuY2VfY2FuY2VsX2Fz eW5jKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwKLQkJCSAgICAgc3RydWN0IHN5bmNfZmVuY2Vf d2FpdGVyICp3YWl0ZXIpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsK LQotCXNwaW5fbG9ja19pcnFzYXZlKCZmZW5jZS0+d3EubG9jaywgZmxhZ3MpOwotCWlmICghbGlz dF9lbXB0eSgmd2FpdGVyLT53b3JrLnRhc2tfbGlzdCkpCi0JCWxpc3RfZGVsX2luaXQoJndhaXRl ci0+d29yay50YXNrX2xpc3QpOwotCWVsc2UKLQkJcmV0ID0gLUVOT0VOVDsKLQlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZmZW5jZS0+d3EubG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci1F WFBPUlRfU1lNQk9MKHN5bmNfZmVuY2VfY2FuY2VsX2FzeW5jKTsKLQotaW50IHN5bmNfZmVuY2Vf d2FpdChzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsIGxvbmcgdGltZW91dCkKLXsKLQlsb25nIHJl dDsKLQlpbnQgaTsKLQotCWlmICh0aW1lb3V0IDwgMCkKLQkJdGltZW91dCA9IE1BWF9TQ0hFRFVM RV9USU1FT1VUOwotCWVsc2UKLQkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7 Ci0KLQl0cmFjZV9zeW5jX3dhaXQoZmVuY2UsIDEpOwotCWZvciAoaSA9IDA7IGkgPCBmZW5jZS0+ bnVtX2ZlbmNlczsgKytpKQotCQl0cmFjZV9zeW5jX3B0KGZlbmNlLT5jYnNbaV0uc3luY19wdCk7 Ci0JcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZmVuY2UtPndxLAotCQkJ CQkgICAgICAgYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpIDw9IDAsCi0JCQkJCSAgICAgICB0 aW1lb3V0KTsKLQl0cmFjZV9zeW5jX3dhaXQoZmVuY2UsIDApOwotCi0JaWYgKHJldCA8IDApIHsK LQkJcmV0dXJuIHJldDsKLQl9IGVsc2UgaWYgKHJldCA9PSAwKSB7Ci0JCWlmICh0aW1lb3V0KSB7 Ci0JCQlwcl9pbmZvKCJmZW5jZSB0aW1lb3V0IG9uIFslcF0gYWZ0ZXIgJWRtc1xuIiwgZmVuY2Us Ci0JCQkJamlmZmllc190b19tc2Vjcyh0aW1lb3V0KSk7Ci0JCQlzeW5jX2R1bXAoKTsKLQkJfQot CQlyZXR1cm4gLUVUSU1FOwotCX0KLQotCXJldCA9IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVz KTsKLQlpZiAocmV0KSB7Ci0JCXByX2luZm8oImZlbmNlIGVycm9yICVsZCBvbiBbJXBdXG4iLCBy ZXQsIGZlbmNlKTsKLQkJc3luY19kdW1wKCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRf U1lNQk9MKHN5bmNfZmVuY2Vfd2FpdCk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICphbmRyb2lkX2Zl bmNlX2dldF9kcml2ZXJfbmFtZShzdHJ1Y3QgZmVuY2UgKmZlbmNlKQotewotCXN0cnVjdCBzeW5j X3B0ICpwdCA9IGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJhc2UpOwotCXN0 cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJlbnQgPSBzeW5jX3B0X3BhcmVudChwdCk7Ci0KLQlyZXR1 cm4gcGFyZW50LT5vcHMtPmRyaXZlcl9uYW1lOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqYW5k cm9pZF9mZW5jZV9nZXRfdGltZWxpbmVfbmFtZShzdHJ1Y3QgZmVuY2UgKmZlbmNlKQotewotCXN0 cnVjdCBzeW5jX3B0ICpwdCA9IGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJh c2UpOwotCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJlbnQgPSBzeW5jX3B0X3BhcmVudChwdCk7 Ci0KLQlyZXR1cm4gcGFyZW50LT5uYW1lOwotfQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX2ZlbmNl X3JlbGVhc2Uoc3RydWN0IGZlbmNlICpmZW5jZSkKLXsKLQlzdHJ1Y3Qgc3luY19wdCAqcHQgPSBj b250YWluZXJfb2YoZmVuY2UsIHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKLQlzdHJ1Y3Qgc3luY190 aW1lbGluZSAqcGFyZW50ID0gc3luY19wdF9wYXJlbnQocHQpOwotCXVuc2lnbmVkIGxvbmcgZmxh Z3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShmZW5jZS0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZGVs KCZwdC0+Y2hpbGRfbGlzdCk7Ci0JaWYgKFdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmcHQtPmFj dGl2ZV9saXN0KSkpCi0JCWxpc3RfZGVsKCZwdC0+YWN0aXZlX2xpc3QpOwotCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoZmVuY2UtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChwYXJlbnQtPm9wcy0+ZnJl ZV9wdCkKLQkJcGFyZW50LT5vcHMtPmZyZWVfcHQocHQpOwotCi0Jc3luY190aW1lbGluZV9wdXQo cGFyZW50KTsKLQlmZW5jZV9mcmVlKCZwdC0+YmFzZSk7Ci19Ci0KLXN0YXRpYyBib29sIGFuZHJv aWRfZmVuY2Vfc2lnbmFsZWQoc3RydWN0IGZlbmNlICpmZW5jZSkKLXsKLQlzdHJ1Y3Qgc3luY19w dCAqcHQgPSBjb250YWluZXJfb2YoZmVuY2UsIHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKLQlzdHJ1 Y3Qgc3luY190aW1lbGluZSAqcGFyZW50ID0gc3luY19wdF9wYXJlbnQocHQpOwotCWludCByZXQ7 Ci0KLQlyZXQgPSBwYXJlbnQtPm9wcy0+aGFzX3NpZ25hbGVkKHB0KTsKLQlpZiAocmV0IDwgMCkK LQkJZmVuY2UtPnN0YXR1cyA9IHJldDsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgYm9vbCBh bmRyb2lkX2ZlbmNlX2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGZlbmNlICpmZW5jZSkKLXsKLQlz dHJ1Y3Qgc3luY19wdCAqcHQgPSBjb250YWluZXJfb2YoZmVuY2UsIHN0cnVjdCBzeW5jX3B0LCBi YXNlKTsKLQlzdHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50ID0gc3luY19wdF9wYXJlbnQocHQp OwotCi0JaWYgKGFuZHJvaWRfZmVuY2Vfc2lnbmFsZWQoZmVuY2UpKQotCQlyZXR1cm4gZmFsc2U7 Ci0KLQlsaXN0X2FkZF90YWlsKCZwdC0+YWN0aXZlX2xpc3QsICZwYXJlbnQtPmFjdGl2ZV9saXN0 X2hlYWQpOwotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW50IGFuZHJvaWRfZmVuY2VfZmls bF9kcml2ZXJfZGF0YShzdHJ1Y3QgZmVuY2UgKmZlbmNlLAotCQkJCQkgIHZvaWQgKmRhdGEsIGlu dCBzaXplKQotewotCXN0cnVjdCBzeW5jX3B0ICpwdCA9IGNvbnRhaW5lcl9vZihmZW5jZSwgc3Ry dWN0IHN5bmNfcHQsIGJhc2UpOwotCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJlbnQgPSBzeW5j X3B0X3BhcmVudChwdCk7Ci0KLQlpZiAoIXBhcmVudC0+b3BzLT5maWxsX2RyaXZlcl9kYXRhKQot CQlyZXR1cm4gMDsKLQlyZXR1cm4gcGFyZW50LT5vcHMtPmZpbGxfZHJpdmVyX2RhdGEocHQsIGRh dGEsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX2ZlbmNlX3ZhbHVlX3N0cihzdHJ1 Y3QgZmVuY2UgKmZlbmNlLAotCQkJCSAgICBjaGFyICpzdHIsIGludCBzaXplKQotewotCXN0cnVj dCBzeW5jX3B0ICpwdCA9IGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJhc2Up OwotCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJlbnQgPSBzeW5jX3B0X3BhcmVudChwdCk7Ci0K LQlpZiAoIXBhcmVudC0+b3BzLT5wdF92YWx1ZV9zdHIpIHsKLQkJaWYgKHNpemUpCi0JCQkqc3Ry ID0gMDsKLQkJcmV0dXJuOwotCX0KLQlwYXJlbnQtPm9wcy0+cHRfdmFsdWVfc3RyKHB0LCBzdHIs IHNpemUpOwotfQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX2ZlbmNlX3RpbWVsaW5lX3ZhbHVlX3N0 cihzdHJ1Y3QgZmVuY2UgKmZlbmNlLAotCQkJCQkgICAgIGNoYXIgKnN0ciwgaW50IHNpemUpCi17 Ci0Jc3RydWN0IHN5bmNfcHQgKnB0ID0gY29udGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qgc3luY19w dCwgYmFzZSk7Ci0Jc3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRfcGFyZW50 KHB0KTsKLQotCWlmICghcGFyZW50LT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cikgewotCQlpZiAo c2l6ZSkKLQkJCSpzdHIgPSAwOwotCQlyZXR1cm47Ci0JfQotCXBhcmVudC0+b3BzLT50aW1lbGlu ZV92YWx1ZV9zdHIocGFyZW50LCBzdHIsIHNpemUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IGZlbmNlX29wcyBhbmRyb2lkX2ZlbmNlX29wcyA9IHsKLQkuZ2V0X2RyaXZlcl9uYW1lID0gYW5k cm9pZF9mZW5jZV9nZXRfZHJpdmVyX25hbWUsCi0JLmdldF90aW1lbGluZV9uYW1lID0gYW5kcm9p ZF9mZW5jZV9nZXRfdGltZWxpbmVfbmFtZSwKLQkuZW5hYmxlX3NpZ25hbGluZyA9IGFuZHJvaWRf ZmVuY2VfZW5hYmxlX3NpZ25hbGluZywKLQkuc2lnbmFsZWQgPSBhbmRyb2lkX2ZlbmNlX3NpZ25h bGVkLAotCS53YWl0ID0gZmVuY2VfZGVmYXVsdF93YWl0LAotCS5yZWxlYXNlID0gYW5kcm9pZF9m ZW5jZV9yZWxlYXNlLAotCS5maWxsX2RyaXZlcl9kYXRhID0gYW5kcm9pZF9mZW5jZV9maWxsX2Ry aXZlcl9kYXRhLAotCS5mZW5jZV92YWx1ZV9zdHIgPSBhbmRyb2lkX2ZlbmNlX3ZhbHVlX3N0ciwK LQkudGltZWxpbmVfdmFsdWVfc3RyID0gYW5kcm9pZF9mZW5jZV90aW1lbGluZV92YWx1ZV9zdHIs Ci19OwotCi1zdGF0aWMgdm9pZCBzeW5jX2ZlbmNlX2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCi17 Ci0Jc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBz eW5jX2ZlbmNlLCBrcmVmKTsKLQlpbnQgaSwgc3RhdHVzID0gYXRvbWljX3JlYWQoJmZlbmNlLT5z dGF0dXMpOwotCi0JZm9yIChpID0gMDsgaSA8IGZlbmNlLT5udW1fZmVuY2VzOyArK2kpIHsKLQkJ aWYgKHN0YXR1cykKLQkJCWZlbmNlX3JlbW92ZV9jYWxsYmFjayhmZW5jZS0+Y2JzW2ldLnN5bmNf cHQsCi0JCQkJCSAgICAgICZmZW5jZS0+Y2JzW2ldLmNiKTsKLQkJZmVuY2VfcHV0KGZlbmNlLT5j YnNbaV0uc3luY19wdCk7Ci0JfQotCi0Ja2ZyZWUoZmVuY2UpOwotfQotCi1zdGF0aWMgaW50IHN5 bmNfZmVuY2VfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkK LXsKLQlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlz eW5jX2ZlbmNlX2RlYnVnX3JlbW92ZShmZW5jZSk7Ci0KLQlrcmVmX3B1dCgmZmVuY2UtPmtyZWYs IHN5bmNfZmVuY2VfZnJlZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQg c3luY19mZW5jZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQotewot CXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgc3Rh dHVzOwotCi0JcG9sbF93YWl0KGZpbGUsICZmZW5jZS0+d3EsIHdhaXQpOwotCi0Jc3RhdHVzID0g YXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpOwotCi0JaWYgKCFzdGF0dXMpCi0JCXJldHVybiBQ T0xMSU47Ci0JZWxzZSBpZiAoc3RhdHVzIDwgMCkKLQkJcmV0dXJuIFBPTExFUlI7Ci0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBsb25nIHN5bmNfZmVuY2VfaW9jdGxfd2FpdChzdHJ1Y3Qgc3luY19m ZW5jZSAqZmVuY2UsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCV9fczMyIHZhbHVlOwotCi0JaWYg KGNvcHlfZnJvbV91c2VyKCZ2YWx1ZSwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YodmFsdWUp KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gc3luY19mZW5jZV93YWl0KGZlbmNlLCB2 YWx1ZSk7Ci19Ci0KLXN0YXRpYyBsb25nIHN5bmNfZmVuY2VfaW9jdGxfbWVyZ2Uoc3RydWN0IHN5 bmNfZmVuY2UgKmZlbmNlLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgZmQgPSBnZXRfdW51 c2VkX2ZkX2ZsYWdzKE9fQ0xPRVhFQyk7Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc3luY19mZW5jZSAq ZmVuY2UyLCAqZmVuY2UzOwotCXN0cnVjdCBzeW5jX21lcmdlX2RhdGEgZGF0YTsKLQotCWlmIChm ZCA8IDApCi0JCXJldHVybiBmZDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZvaWQg X191c2VyICopYXJnLCBzaXplb2YoZGF0YSkpKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8g ZXJyX3B1dF9mZDsKLQl9Ci0KLQlmZW5jZTIgPSBzeW5jX2ZlbmNlX2ZkZ2V0KGRhdGEuZmQyKTsK LQlpZiAoZmVuY2UyID09IE5VTEwpIHsKLQkJZXJyID0gLUVOT0VOVDsKLQkJZ290byBlcnJfcHV0 X2ZkOwotCX0KLQotCWRhdGEubmFtZVtzaXplb2YoZGF0YS5uYW1lKSAtIDFdID0gJ1wwJzsKLQlm ZW5jZTMgPSBzeW5jX2ZlbmNlX21lcmdlKGRhdGEubmFtZSwgZmVuY2UsIGZlbmNlMik7Ci0JaWYg KGZlbmNlMyA9PSBOVUxMKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3B1dF9mZW5j ZTI7Ci0JfQotCi0JZGF0YS5mZW5jZSA9IGZkOwotCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191 c2VyICopYXJnLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKSkgewotCQllcnIgPSAtRUZBVUxUOwotCQln b3RvIGVycl9wdXRfZmVuY2UzOwotCX0KLQotCXN5bmNfZmVuY2VfaW5zdGFsbChmZW5jZTMsIGZk KTsKLQlzeW5jX2ZlbmNlX3B1dChmZW5jZTIpOwotCXJldHVybiAwOwotCi1lcnJfcHV0X2ZlbmNl MzoKLQlzeW5jX2ZlbmNlX3B1dChmZW5jZTMpOwotCi1lcnJfcHV0X2ZlbmNlMjoKLQlzeW5jX2Zl bmNlX3B1dChmZW5jZTIpOwotCi1lcnJfcHV0X2ZkOgotCXB1dF91bnVzZWRfZmQoZmQpOwotCXJl dHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc3luY19maWxsX3B0X2luZm8oc3RydWN0IGZlbmNl ICpmZW5jZSwgdm9pZCAqZGF0YSwgaW50IHNpemUpCi17Ci0Jc3RydWN0IHN5bmNfcHRfaW5mbyAq aW5mbyA9IGRhdGE7Ci0JaW50IHJldDsKLQotCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBzeW5j X3B0X2luZm8pKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWluZm8tPmxlbiA9IHNpemVvZihzdHJ1 Y3Qgc3luY19wdF9pbmZvKTsKLQotCWlmIChmZW5jZS0+b3BzLT5maWxsX2RyaXZlcl9kYXRhKSB7 Ci0JCXJldCA9IGZlbmNlLT5vcHMtPmZpbGxfZHJpdmVyX2RhdGEoZmVuY2UsIGluZm8tPmRyaXZl cl9kYXRhLAotCQkJCQkJICAgc2l6ZSAtIHNpemVvZigqaW5mbykpOwotCQlpZiAocmV0IDwgMCkK LQkJCXJldHVybiByZXQ7Ci0KLQkJaW5mby0+bGVuICs9IHJldDsKLQl9Ci0KLQlzdHJsY3B5KGlu Zm8tPm9ial9uYW1lLCBmZW5jZS0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZShmZW5jZSksCi0JCXNp emVvZihpbmZvLT5vYmpfbmFtZSkpOwotCXN0cmxjcHkoaW5mby0+ZHJpdmVyX25hbWUsIGZlbmNl LT5vcHMtPmdldF9kcml2ZXJfbmFtZShmZW5jZSksCi0JCXNpemVvZihpbmZvLT5kcml2ZXJfbmFt ZSkpOwotCWlmIChmZW5jZV9pc19zaWduYWxlZChmZW5jZSkpCi0JCWluZm8tPnN0YXR1cyA9IGZl bmNlLT5zdGF0dXMgPj0gMCA/IDEgOiBmZW5jZS0+c3RhdHVzOwotCWVsc2UKLQkJaW5mby0+c3Rh dHVzID0gMDsKLQlpbmZvLT50aW1lc3RhbXBfbnMgPSBrdGltZV90b19ucyhmZW5jZS0+dGltZXN0 YW1wKTsKLQotCXJldHVybiBpbmZvLT5sZW47Ci19Ci0KLXN0YXRpYyBsb25nIHN5bmNfZmVuY2Vf aW9jdGxfZmVuY2VfaW5mbyhzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsCi0JCQkJCXVuc2lnbmVk IGxvbmcgYXJnKQotewotCXN0cnVjdCBzeW5jX2ZlbmNlX2luZm9fZGF0YSAqZGF0YTsKLQlfX3Uz MiBzaXplOwotCV9fdTMyIGxlbiA9IDA7Ci0JaW50IHJldCwgaTsKLQotCWlmIChjb3B5X2Zyb21f dXNlcigmc2l6ZSwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2Yoc2l6ZSkpKQotCQlyZXR1cm4g LUVGQVVMVDsKLQotCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBzeW5jX2ZlbmNlX2luZm9fZGF0 YSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHNpemUgPiA0MDk2KQotCQlzaXplID0gNDA5 NjsKLQotCWRhdGEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChkYXRhID09IE5V TEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3RybGNweShkYXRhLT5uYW1lLCBmZW5jZS0+bmFt ZSwgc2l6ZW9mKGRhdGEtPm5hbWUpKTsKLQlkYXRhLT5zdGF0dXMgPSBhdG9taWNfcmVhZCgmZmVu Y2UtPnN0YXR1cyk7Ci0JaWYgKGRhdGEtPnN0YXR1cyA+PSAwKQotCQlkYXRhLT5zdGF0dXMgPSAh ZGF0YS0+c3RhdHVzOwotCi0JbGVuID0gc2l6ZW9mKHN0cnVjdCBzeW5jX2ZlbmNlX2luZm9fZGF0 YSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmVuY2UtPm51bV9mZW5jZXM7ICsraSkgewotCQlzdHJ1 Y3QgZmVuY2UgKnB0ID0gZmVuY2UtPmNic1tpXS5zeW5jX3B0OwotCi0JCXJldCA9IHN5bmNfZmls bF9wdF9pbmZvKHB0LCAodTggKilkYXRhICsgbGVuLCBzaXplIC0gbGVuKTsKLQotCQlpZiAocmV0 IDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCWxlbiArPSByZXQ7Ci0JfQotCi0JZGF0YS0+bGVuID0g bGVuOwotCi0JaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIGRhdGEsIGxlbikp Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JZWxzZQotCQlyZXQgPSAwOwotCi1vdXQ6Ci0Ja2ZyZWUoZGF0 YSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgbG9uZyBzeW5jX2ZlbmNlX2lvY3RsKHN0 cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICAgICB1bnNpZ25lZCBsb25n IGFyZykKLXsKLQlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UgPSBmaWxlLT5wcml2YXRlX2RhdGE7 Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU1lOQ19JT0NfV0FJVDoKLQkJcmV0dXJuIHN5bmNf ZmVuY2VfaW9jdGxfd2FpdChmZW5jZSwgYXJnKTsKLQotCWNhc2UgU1lOQ19JT0NfTUVSR0U6Ci0J CXJldHVybiBzeW5jX2ZlbmNlX2lvY3RsX21lcmdlKGZlbmNlLCBhcmcpOwotCi0JY2FzZSBTWU5D X0lPQ19GRU5DRV9JTkZPOgotCQlyZXR1cm4gc3luY19mZW5jZV9pb2N0bF9mZW5jZV9pbmZvKGZl bmNlLCBhcmcpOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UVFk7Ci0JfQotfQotCi1zdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeW5jX2ZlbmNlX2ZvcHMgPSB7Ci0JLnJl bGVhc2UgPSBzeW5jX2ZlbmNlX3JlbGVhc2UsCi0JLnBvbGwgPSBzeW5jX2ZlbmNlX3BvbGwsCi0J LnVubG9ja2VkX2lvY3RsID0gc3luY19mZW5jZV9pb2N0bCwKLQkuY29tcGF0X2lvY3RsID0gc3lu Y19mZW5jZV9pb2N0bCwKLX07Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lk L3N5bmMuaCBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggYWZhMDc1Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5k cm9pZC9zeW5jLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNjYgKzAsMCBAQAotLyoKLSAqIGluY2x1 ZGUvbGludXgvc3luYy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgot ICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0xJTlVYX1NZTkNf SAotI2RlZmluZSBfTElOVVhfU1lOQ19ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2lu Y2x1ZGUgPGxpbnV4L2tyZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgotI2luY2x1ZGUg PGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxp bnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9mZW5jZS5oPgotCi0jaW5jbHVkZSAidWFwaS9z eW5jLmgiCi0KLXN0cnVjdCBzeW5jX3RpbWVsaW5lOwotc3RydWN0IHN5bmNfcHQ7Ci1zdHJ1Y3Qg c3luY19mZW5jZTsKLQotLyoqCi0gKiBzdHJ1Y3Qgc3luY190aW1lbGluZV9vcHMgLSBzeW5jIG9i amVjdCBpbXBsZW1lbnRhdGlvbiBvcHMKLSAqIEBkcml2ZXJfbmFtZToJbmFtZSBvZiB0aGUgaW1w bGVtZW50YXRpb24KLSAqIEBkdXA6CQlkdXBsaWNhdGUgYSBzeW5jX3B0Ci0gKiBAaGFzX3NpZ25h bGVkOglyZXR1cm5zOgotICoJCQkgIDEgaWYgcHQgaGFzIHNpZ25hbGVkCi0gKgkJCSAgMCBpZiBw dCBoYXMgbm90IHNpZ25hbGVkCi0gKgkJCSA8MCBvbiBlcnJvcgotICogQGNvbXBhcmU6CQlyZXR1 cm5zOgotICoJCQkgIDEgaWYgYiB3aWxsIHNpZ25hbCBiZWZvcmUgYQotICoJCQkgIDAgaWYgYSBh bmQgYiB3aWxsIHNpZ25hbCBhdCB0aGUgc2FtZSB0aW1lCi0gKgkJCSAtMSBpZiBhIHdpbGwgc2ln bmFsIGJlZm9yZSBiCi0gKiBAZnJlZV9wdDoJCWNhbGxlZCBiZWZvcmUgc3luY19wdCBpcyBmcmVl ZAotICogQHJlbGVhc2Vfb2JqOgljYWxsZWQgYmVmb3JlIHN5bmNfdGltZWxpbmUgaXMgZnJlZWQK LSAqIEBmaWxsX2RyaXZlcl9kYXRhOgl3cml0ZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBkcml2 ZXIgZGF0YSB0byBkYXRhLgotICoJCQkgIHNob3VsZCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlcmUg aXMgbm90IGVub3VnaCByb29tCi0gKgkJCSAgYXMgc3BlY2lmaWVkIGJ5IHNpemUuICBUaGlzIGlu Zm9ybWF0aW9uIGlzIHJldHVybmVkCi0gKgkJCSAgdG8gdXNlcnNwYWNlIGJ5IFNZTkNfSU9DX0ZF TkNFX0lORk8uCi0gKiBAdGltZWxpbmVfdmFsdWVfc3RyOiBmaWxsIHN0ciB3aXRoIHRoZSB2YWx1 ZSBvZiB0aGUgc3luY190aW1lbGluZSdzIGNvdW50ZXIKLSAqIEBwdF92YWx1ZV9zdHI6CWZpbGwg c3RyIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBzeW5jX3B0Ci0gKi8KLXN0cnVjdCBzeW5jX3RpbWVs aW5lX29wcyB7Ci0JY29uc3QgY2hhciAqZHJpdmVyX25hbWU7Ci0KLQkvKiByZXF1aXJlZCAqLwot CXN0cnVjdCBzeW5jX3B0ICogKCpkdXApKHN0cnVjdCBzeW5jX3B0ICpwdCk7Ci0KLQkvKiByZXF1 aXJlZCAqLwotCWludCAoKmhhc19zaWduYWxlZCkoc3RydWN0IHN5bmNfcHQgKnB0KTsKLQotCS8q IHJlcXVpcmVkICovCi0JaW50ICgqY29tcGFyZSkoc3RydWN0IHN5bmNfcHQgKmEsIHN0cnVjdCBz eW5jX3B0ICpiKTsKLQotCS8qIG9wdGlvbmFsICovCi0Jdm9pZCAoKmZyZWVfcHQpKHN0cnVjdCBz eW5jX3B0ICpzeW5jX3B0KTsKLQotCS8qIG9wdGlvbmFsICovCi0Jdm9pZCAoKnJlbGVhc2Vfb2Jq KShzdHJ1Y3Qgc3luY190aW1lbGluZSAqc3luY190aW1lbGluZSk7Ci0KLQkvKiBvcHRpb25hbCAq LwotCWludCAoKmZpbGxfZHJpdmVyX2RhdGEpKHN0cnVjdCBzeW5jX3B0ICpzeW5jcHQsIHZvaWQg KmRhdGEsIGludCBzaXplKTsKLQotCS8qIG9wdGlvbmFsICovCi0Jdm9pZCAoKnRpbWVsaW5lX3Zh bHVlX3N0cikoc3RydWN0IHN5bmNfdGltZWxpbmUgKnRpbWVsaW5lLCBjaGFyICpzdHIsCi0JCQkJ ICAgaW50IHNpemUpOwotCi0JLyogb3B0aW9uYWwgKi8KLQl2b2lkICgqcHRfdmFsdWVfc3RyKShz dHJ1Y3Qgc3luY19wdCAqcHQsIGNoYXIgKnN0ciwgaW50IHNpemUpOwotfTsKLQotLyoqCi0gKiBz dHJ1Y3Qgc3luY190aW1lbGluZSAtIHN5bmMgb2JqZWN0Ci0gKiBAa3JlZjoJCXJlZmVyZW5jZSBj b3VudCBvbiBmZW5jZS4KLSAqIEBvcHM6CQlvcHMgdGhhdCBkZWZpbmUgdGhlIGltcGxlbWVudGF0 aW9uIG9mIHRoZSBzeW5jX3RpbWVsaW5lCi0gKiBAbmFtZToJCW5hbWUgb2YgdGhlIHN5bmNfdGlt ZWxpbmUuIFVzZWZ1bCBmb3IgZGVidWdnaW5nCi0gKiBAZGVzdHJveWVkOgkJc2V0IHdoZW4gc3lu Y190aW1lbGluZSBpcyBkZXN0cm95ZWQKLSAqIEBjaGlsZF9saXN0X2hlYWQ6CWxpc3Qgb2YgY2hp bGRyZW4gc3luY19wdHMgZm9yIHRoaXMgc3luY190aW1lbGluZQotICogQGNoaWxkX2xpc3RfbG9j azoJbG9jayBwcm90ZWN0aW5nIEBjaGlsZF9saXN0X2hlYWQsIGRlc3Ryb3llZCwgYW5kCi0gKgkJ CSAgc3luY19wdC5zdGF0dXMKLSAqIEBhY3RpdmVfbGlzdF9oZWFkOglsaXN0IG9mIGFjdGl2ZSAo dW5zaWduYWxlZC9lcnJvcmVkKSBzeW5jX3B0cwotICogQHN5bmNfdGltZWxpbmVfbGlzdDoJbWVt YmVyc2hpcCBpbiBnbG9iYWwgc3luY190aW1lbGluZV9saXN0Ci0gKi8KLXN0cnVjdCBzeW5jX3Rp bWVsaW5lIHsKLQlzdHJ1Y3Qga3JlZgkJa3JlZjsKLQljb25zdCBzdHJ1Y3Qgc3luY190aW1lbGlu ZV9vcHMJKm9wczsKLQljaGFyCQkJbmFtZVszMl07Ci0KLQkvKiBwcm90ZWN0ZWQgYnkgY2hpbGRf bGlzdF9sb2NrICovCi0JYm9vbAkJCWRlc3Ryb3llZDsKLQlpbnQJCQljb250ZXh0LCB2YWx1ZTsK LQotCXN0cnVjdCBsaXN0X2hlYWQJY2hpbGRfbGlzdF9oZWFkOwotCXNwaW5sb2NrX3QJCWNoaWxk X2xpc3RfbG9jazsKLQotCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlX2xpc3RfaGVhZDsKLQotI2lm ZGVmIENPTkZJR19ERUJVR19GUwotCXN0cnVjdCBsaXN0X2hlYWQJc3luY190aW1lbGluZV9saXN0 OwotI2VuZGlmCi19OwotCi0vKioKLSAqIHN0cnVjdCBzeW5jX3B0IC0gc3luYyBwb2ludAotICog QGZlbmNlOgkJYmFzZSBmZW5jZSBjbGFzcwotICogQGNoaWxkX2xpc3Q6CQltZW1iZXJzaGlwIGlu IHN5bmNfdGltZWxpbmUuY2hpbGRfbGlzdF9oZWFkCi0gKiBAYWN0aXZlX2xpc3Q6CW1lbWJlcnNo aXAgaW4gc3luY190aW1lbGluZS5hY3RpdmVfbGlzdF9oZWFkCi0gKiBAc2lnbmFsZWRfbGlzdDoJ bWVtYmVyc2hpcCBpbiB0ZW1wb3Jhcnkgc2lnbmFsZWRfbGlzdCBvbiBzdGFjawotICogQGZlbmNl OgkJc3luY19mZW5jZSB0byB3aGljaCB0aGUgc3luY19wdCBiZWxvbmdzCi0gKiBAcHRfbGlzdDoJ CW1lbWJlcnNoaXAgaW4gc3luY19mZW5jZS5wdF9saXN0X2hlYWQKLSAqIEBzdGF0dXM6CQkxOiBz aWduYWxlZCwgMDphY3RpdmUsIDwwOiBlcnJvcgotICogQHRpbWVzdGFtcDoJCXRpbWUgd2hpY2gg c3luY19wdCBzdGF0dXMgdHJhbnNpdGlvbmVkIGZyb20gYWN0aXZlIHRvCi0gKgkJCSAgc2lnbmFs ZWQgb3IgZXJyb3IuCi0gKi8KLXN0cnVjdCBzeW5jX3B0IHsKLQlzdHJ1Y3QgZmVuY2UgYmFzZTsK LQotCXN0cnVjdCBsaXN0X2hlYWQJY2hpbGRfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2 ZV9saXN0OwotfTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3luY190aW1lbGluZSAqc3luY19w dF9wYXJlbnQoc3RydWN0IHN5bmNfcHQgKnB0KQotewotCXJldHVybiBjb250YWluZXJfb2YocHQt PmJhc2UubG9jaywgc3RydWN0IHN5bmNfdGltZWxpbmUsCi0JCQkgICAgY2hpbGRfbGlzdF9sb2Nr KTsKLX0KLQotc3RydWN0IHN5bmNfZmVuY2VfY2IgewotCXN0cnVjdCBmZW5jZV9jYiBjYjsKLQlz dHJ1Y3QgZmVuY2UgKnN5bmNfcHQ7Ci0Jc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3Qgc3luY19mZW5jZSAtIHN5bmMgZmVuY2UKLSAqIEBmaWxlOgkJZmlsZSBy ZXByZXNlbnRpbmcgdGhpcyBmZW5jZQotICogQGtyZWY6CQlyZWZlcmVuY2UgY291bnQgb24gZmVu Y2UuCi0gKiBAbmFtZToJCW5hbWUgb2Ygc3luY19mZW5jZS4gIFVzZWZ1bCBmb3IgZGVidWdnaW5n Ci0gKiBAcHRfbGlzdF9oZWFkOglsaXN0IG9mIHN5bmNfcHRzIGluIHRoZSBmZW5jZS4gIGltbXV0 YWJsZSBvbmNlIGZlbmNlCi0gKgkJCSAgaXMgY3JlYXRlZAotICogQHN0YXR1czoJCTA6IHNpZ25h bGVkLCA+MDphY3RpdmUsIDwwOiBlcnJvcgotICoKLSAqIEB3cToJCQl3YWl0IHF1ZXVlIGZvciBm ZW5jZSBzaWduYWxpbmcKLSAqIEBzeW5jX2ZlbmNlX2xpc3Q6CW1lbWJlcnNoaXAgaW4gZ2xvYmFs IGZlbmNlIGxpc3QKLSAqLwotc3RydWN0IHN5bmNfZmVuY2UgewotCXN0cnVjdCBmaWxlCQkqZmls ZTsKLQlzdHJ1Y3Qga3JlZgkJa3JlZjsKLQljaGFyCQkJbmFtZVszMl07Ci0jaWZkZWYgQ09ORklH X0RFQlVHX0ZTCi0Jc3RydWN0IGxpc3RfaGVhZAlzeW5jX2ZlbmNlX2xpc3Q7Ci0jZW5kaWYKLQlp bnQgbnVtX2ZlbmNlczsKLQotCXdhaXRfcXVldWVfaGVhZF90CXdxOwotCWF0b21pY190CQlzdGF0 dXM7Ci0KLQlzdHJ1Y3Qgc3luY19mZW5jZV9jYgljYnNbXTsKLX07Ci0KLXN0cnVjdCBzeW5jX2Zl bmNlX3dhaXRlcjsKLXR5cGVkZWYgdm9pZCAoKnN5bmNfY2FsbGJhY2tfdCkoc3RydWN0IHN5bmNf ZmVuY2UgKmZlbmNlLAotCQkJCXN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciAqd2FpdGVyKTsKLQot LyoqCi0gKiBzdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgLSBtZXRhZGF0YSBmb3IgYXN5bmNocm9u b3VzIHdhaXRlciBvbiBhIGZlbmNlCi0gKiBAd2FpdGVyX2xpc3Q6CW1lbWJlcnNoaXAgaW4gc3lu Y19mZW5jZS53YWl0ZXJfbGlzdF9oZWFkCi0gKiBAY2FsbGJhY2s6CQlmdW5jdGlvbiBwb2ludGVy IHRvIGNhbGwgd2hlbiBmZW5jZSBzaWduYWxzCi0gKiBAY2FsbGJhY2tfZGF0YToJcG9pbnRlciB0 byBwYXNzIHRvIEBjYWxsYmFjawotICovCi1zdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgewotCXdh aXRfcXVldWVfdCB3b3JrOwotCXN5bmNfY2FsbGJhY2tfdCBjYWxsYmFjazsKLX07Ci0KLXN0YXRp YyBpbmxpbmUgdm9pZCBzeW5jX2ZlbmNlX3dhaXRlcl9pbml0KHN0cnVjdCBzeW5jX2ZlbmNlX3dh aXRlciAqd2FpdGVyLAotCQkJCQkgIHN5bmNfY2FsbGJhY2tfdCBjYWxsYmFjaykKLXsKLQlJTklU X0xJU1RfSEVBRCgmd2FpdGVyLT53b3JrLnRhc2tfbGlzdCk7Ci0Jd2FpdGVyLT5jYWxsYmFjayA9 IGNhbGxiYWNrOwotfQotCi0vKgotICogQVBJIGZvciBzeW5jX3RpbWVsaW5lIGltcGxlbWVudGVy cwotICovCi0KLS8qKgotICogc3luY190aW1lbGluZV9jcmVhdGUoKSAtIGNyZWF0ZXMgYSBzeW5j IG9iamVjdAotICogQG9wczoJc3BlY2lmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvcHMgZm9yIHRo ZSBvYmplY3QKLSAqIEBzaXplOglzaXplIHRvIGFsbG9jYXRlIGZvciB0aGlzIG9iagotICogQG5h bWU6CXN5bmNfdGltZWxpbmUgbmFtZQotICoKLSAqIENyZWF0ZXMgYSBuZXcgc3luY190aW1lbGlu ZSB3aGljaCB3aWxsIHVzZSB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWVkIGJ5Ci0gKiBAb3Bz LiAgQHNpemUgYnl0ZXMgd2lsbCBiZSBhbGxvY2F0ZWQgYWxsb3dpbmcgZm9yIGltcGxlbWVudGF0 aW9uIHNwZWNpZmljCi0gKiBkYXRhIHRvIGJlIGtlcHQgYWZ0ZXIgdGhlIGdlbmVyaWMgc3luY190 aW1lbGluZSBzdHJ1Y3QuCi0gKi8KLXN0cnVjdCBzeW5jX3RpbWVsaW5lICpzeW5jX3RpbWVsaW5l X2NyZWF0ZShjb25zdCBzdHJ1Y3Qgc3luY190aW1lbGluZV9vcHMgKm9wcywKLQkJCQkJICAgaW50 IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUpOwotCi0vKioKLSAqIHN5bmNfdGltZWxpbmVfZGVzdHJv eSgpIC0gZGVzdHJveXMgYSBzeW5jIG9iamVjdAotICogQG9iajoJc3luY190aW1lbGluZSB0byBk ZXN0cm95Ci0gKgotICogQSBzeW5jIGltcGxlbWVudGF0aW9uIHNob3VsZCBjYWxsIHRoaXMgd2hl biB0aGUgQG9iaiBpcyBnb2luZyBhd2F5Ci0gKiAoaS5lLiBtb2R1bGUgdW5sb2FkLikgIEBvYmog d29uJ3QgYWN0dWFsbHkgYmUgZnJlZWQgdW50aWwgYWxsIGl0cyBjaGlsZHJlbgotICogc3luY19w dHMgYXJlIGZyZWVkLgotICovCi12b2lkIHN5bmNfdGltZWxpbmVfZGVzdHJveShzdHJ1Y3Qgc3lu Y190aW1lbGluZSAqb2JqKTsKLQotLyoqCi0gKiBzeW5jX3RpbWVsaW5lX3NpZ25hbCgpIC0gc2ln bmFsIGEgc3RhdHVzIGNoYW5nZSBvbiBhIHN5bmNfdGltZWxpbmUKLSAqIEBvYmo6CXN5bmNfdGlt ZWxpbmUgdG8gc2lnbmFsCi0gKgotICogQSBzeW5jIGltcGxlbWVudGF0aW9uIHNob3VsZCBjYWxs IHRoaXMgYW55IHRpbWUgb25lIG9mIGl0J3Mgc3luY19wdHMKLSAqIGhhcyBzaWduYWxlZCBvciBo YXMgYW4gZXJyb3IgY29uZGl0aW9uLgotICovCi12b2lkIHN5bmNfdGltZWxpbmVfc2lnbmFsKHN0 cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopOwotCi0vKioKLSAqIHN5bmNfcHRfY3JlYXRlKCkgLSBj cmVhdGVzIGEgc3luYyBwdAotICogQHBhcmVudDoJc3luY19wdCdzIHBhcmVudCBzeW5jX3RpbWVs aW5lCi0gKiBAc2l6ZToJc2l6ZSB0byBhbGxvY2F0ZSBmb3IgdGhpcyBwdAotICoKLSAqIENyZWF0 ZXMgYSBuZXcgc3luY19wdCBhcyBhIGNoaWxkIG9mIEBwYXJlbnQuICBAc2l6ZSBieXRlcyB3aWxs IGJlCi0gKiBhbGxvY2F0ZWQgYWxsb3dpbmcgZm9yIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRh dGEgdG8gYmUga2VwdCBhZnRlcgotICogdGhlIGdlbmVyaWMgc3luY190aW1lbGluZSBzdHJ1Y3Qu Ci0gKi8KLXN0cnVjdCBzeW5jX3B0ICpzeW5jX3B0X2NyZWF0ZShzdHJ1Y3Qgc3luY190aW1lbGlu ZSAqcGFyZW50LCBpbnQgc2l6ZSk7Ci0KLS8qKgotICogc3luY19wdF9mcmVlKCkgLSBmcmVlcyBh IHN5bmMgcHQKLSAqIEBwdDoJCXN5bmNfcHQgdG8gZnJlZQotICoKLSAqIFRoaXMgc2hvdWxkIG9u bHkgYmUgY2FsbGVkIG9uIHN5bmNfcHRzIHdoaWNoIGhhdmUgYmVlbiBjcmVhdGVkIGJ1dAotICog bm90IGFkZGVkIHRvIGEgZmVuY2UuCi0gKi8KLXZvaWQgc3luY19wdF9mcmVlKHN0cnVjdCBzeW5j X3B0ICpwdCk7Ci0KLS8qKgotICogc3luY19mZW5jZV9jcmVhdGUoKSAtIGNyZWF0ZXMgYSBzeW5j IGZlbmNlCi0gKiBAbmFtZToJbmFtZSBvZiBmZW5jZSB0byBjcmVhdGUKLSAqIEBwdDoJCXN5bmNf cHQgdG8gYWRkIHRvIHRoZSBmZW5jZQotICoKLSAqIENyZWF0ZXMgYSBmZW5jZSBjb250YWluZyBA cHQuICBPbmNlIHRoaXMgaXMgY2FsbGVkLCB0aGUgZmVuY2UgdGFrZXMKLSAqIG93bmVyc2hpcCBv ZiBAcHQuCi0gKi8KLXN0cnVjdCBzeW5jX2ZlbmNlICpzeW5jX2ZlbmNlX2NyZWF0ZShjb25zdCBj aGFyICpuYW1lLCBzdHJ1Y3Qgc3luY19wdCAqcHQpOwotCi0vKioKLSAqIHN5bmNfZmVuY2VfY3Jl YXRlX2RtYSgpIC0gY3JlYXRlcyBhIHN5bmMgZmVuY2UgZnJvbSBkbWEtZmVuY2UKLSAqIEBuYW1l OgluYW1lIG9mIGZlbmNlIHRvIGNyZWF0ZQotICogQHB0OglkbWEtZmVuY2UgdG8gYWRkIHRvIHRo ZSBmZW5jZQotICoKLSAqIENyZWF0ZXMgYSBmZW5jZSBjb250YWluZyBAcHQuICBPbmNlIHRoaXMg aXMgY2FsbGVkLCB0aGUgZmVuY2UgdGFrZXMKLSAqIG93bmVyc2hpcCBvZiBAcHQuCi0gKi8KLXN0 cnVjdCBzeW5jX2ZlbmNlICpzeW5jX2ZlbmNlX2NyZWF0ZV9kbWEoY29uc3QgY2hhciAqbmFtZSwg c3RydWN0IGZlbmNlICpwdCk7Ci0KLS8qCi0gKiBBUEkgZm9yIHN5bmNfZmVuY2UgY29uc3VtZXJz Ci0gKi8KLQotLyoqCi0gKiBzeW5jX2ZlbmNlX21lcmdlKCkgLSBtZXJnZSB0d28gZmVuY2VzCi0g KiBAbmFtZToJbmFtZSBvZiBuZXcgZmVuY2UKLSAqIEBhOgkJZmVuY2UgYQotICogQGI6CQlmZW5j ZSBiCi0gKgotICogQ3JlYXRlcyBhIG5ldyBmZW5jZSB3aGljaCBjb250YWlucyBjb3BpZXMgb2Yg YWxsIHRoZSBzeW5jX3B0cyBpbiBib3RoCi0gKiBAYSBhbmQgQGIuICBAYSBhbmQgQGIgcmVtYWlu IHZhbGlkLCBpbmRlcGVuZGVudCBmZW5jZXMuCi0gKi8KLXN0cnVjdCBzeW5jX2ZlbmNlICpzeW5j X2ZlbmNlX21lcmdlKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgIHN0cnVjdCBzeW5jX2ZlbmNl ICphLCBzdHJ1Y3Qgc3luY19mZW5jZSAqYik7Ci0KLS8qKgotICogc3luY19mZW5jZV9mZGdldCgp IC0gZ2V0IGEgZmVuY2UgZnJvbSBhbiBmZAotICogQGZkOgkJZmQgcmVmZXJlbmNpbmcgYSBmZW5j ZQotICoKLSAqIEVuc3VyZXMgQGZkIHJlZmVyZW5jZXMgYSB2YWxpZCBmZW5jZSwgaW5jcmVtZW50 cyB0aGUgcmVmY291bnQgb2YgdGhlIGJhY2tpbmcKLSAqIGZpbGUsIGFuZCByZXR1cm5zIHRoZSBm ZW5jZS4KLSAqLwotc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfZmRnZXQoaW50IGZkKTsK LQotLyoqCi0gKiBzeW5jX2ZlbmNlX3B1dCgpIC0gcHV0cyBhIHJlZmVyZW5jZSBvZiBhIHN5bmMg ZmVuY2UKLSAqIEBmZW5jZToJZmVuY2UgdG8gcHV0Ci0gKgotICogUHV0cyBhIHJlZmVyZW5jZSBv biBAZmVuY2UuICBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGZlbmNlIGFuZAot ICogYWxsIGl0J3Mgc3luY19wdHMgd2lsbCBiZSBmcmVlZAotICovCi12b2lkIHN5bmNfZmVuY2Vf cHV0KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSk7Ci0KLS8qKgotICogc3luY19mZW5jZV9pbnN0 YWxsKCkgLSBpbnN0YWxscyBhIGZlbmNlIGludG8gYSBmaWxlIGRlc2NyaXB0b3IKLSAqIEBmZW5j ZToJZmVuY2UgdG8gaW5zdGFsbAotICogQGZkOgkJZmlsZSBkZXNjcmlwdG9yIGluIHdoaWNoIHRv IGluc3RhbGwgdGhlIGZlbmNlCi0gKgotICogSW5zdGFsbHMgQGZlbmNlIGludG8gQGZkLiAgQGZk J3Mgc2hvdWxkIGJlIGFjcXVpcmVkIHRocm91Z2gKLSAqIGdldF91bnVzZWRfZmRfZmxhZ3MoT19D TE9FWEVDKS4KLSAqLwotdm9pZCBzeW5jX2ZlbmNlX2luc3RhbGwoc3RydWN0IHN5bmNfZmVuY2Ug KmZlbmNlLCBpbnQgZmQpOwotCi0vKioKLSAqIHN5bmNfZmVuY2Vfd2FpdF9hc3luYygpIC0gcmVn aXN0ZXJzIGFuZCBhc3luYyB3YWl0IG9uIHRoZSBmZW5jZQotICogQGZlbmNlOgkJZmVuY2UgdG8g d2FpdCBvbgotICogQHdhaXRlcjoJCXdhaXRlciBjYWxsYmFjayBzdHJ1Y2sKLSAqCi0gKiBSZXR1 cm5zIDEgaWYgQGZlbmNlIGhhcyBhbHJlYWR5IHNpZ25hbGVkLgotICoKLSAqIFJlZ2lzdGVycyBh IGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIEBmZW5jZSBzaWduYWxzIG9yIGhhcyBhbiBlcnJv ci4KLSAqIEB3YWl0ZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggc3luY19mZW5jZV93YWl0 ZXJfaW5pdCgpLgotICovCi1pbnQgc3luY19mZW5jZV93YWl0X2FzeW5jKHN0cnVjdCBzeW5jX2Zl bmNlICpmZW5jZSwKLQkJCSAgc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyICp3YWl0ZXIpOwotCi0v KioKLSAqIHN5bmNfZmVuY2VfY2FuY2VsX2FzeW5jKCkgLSBjYW5jZWxzIGFuIGFzeW5jIHdhaXQK LSAqIEBmZW5jZToJCWZlbmNlIHRvIHdhaXQgb24KLSAqIEB3YWl0ZXI6CQl3YWl0ZXIgY2FsbGJh Y2sgc3RydWNrCi0gKgotICogcmV0dXJucyAwIGlmIHdhaXRlciB3YXMgcmVtb3ZlZCBmcm9tIGZl bmNlJ3MgYXN5bmMgd2FpdGVyIGxpc3QuCi0gKiByZXR1cm5zIC1FTk9FTlQgaWYgd2FpdGVyIHdh cyBub3QgZm91bmQgb24gZmVuY2UncyBhc3luYyB3YWl0ZXIgbGlzdC4KLSAqCi0gKiBDYW5jZWxz IGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGFzeW5jIHdhaXQuICBXaWxsIGZhaWwgZ3JhY2VmdWxs eSBpZgotICogQHdhaXRlciB3YXMgbmV2ZXIgcmVnaXN0ZXJlZCBvciBpZiBAZmVuY2UgaGFzIGFs cmVhZHkgc2lnbmFsZWQgQHdhaXRlci4KLSAqLwotaW50IHN5bmNfZmVuY2VfY2FuY2VsX2FzeW5j KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwKLQkJCSAgICBzdHJ1Y3Qgc3luY19mZW5jZV93YWl0 ZXIgKndhaXRlcik7Ci0KLS8qKgotICogc3luY19mZW5jZV93YWl0KCkgLSB3YWl0IG9uIGZlbmNl Ci0gKiBAZmVuY2U6CWZlbmNlIHRvIHdhaXQgb24KLSAqIEB0aWVtb3V0Ogl0aW1lb3V0IGluIG1z Ci0gKgotICogV2FpdCBmb3IgQGZlbmNlIHRvIGJlIHNpZ25hbGVkIG9yIGhhdmUgYW4gZXJyb3Iu ICBXYWl0cyBpbmRlZmluaXRlbHkKLSAqIGlmIEB0aW1lb3V0IDwgMAotICovCi1pbnQgc3luY19m ZW5jZV93YWl0KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwgbG9uZyB0aW1lb3V0KTsKLQotI2lm ZGVmIENPTkZJR19ERUJVR19GUwotCi12b2lkIHN5bmNfdGltZWxpbmVfZGVidWdfYWRkKHN0cnVj dCBzeW5jX3RpbWVsaW5lICpvYmopOwotdm9pZCBzeW5jX3RpbWVsaW5lX2RlYnVnX3JlbW92ZShz dHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKTsKLXZvaWQgc3luY19mZW5jZV9kZWJ1Z19hZGQoc3Ry dWN0IHN5bmNfZmVuY2UgKmZlbmNlKTsKLXZvaWQgc3luY19mZW5jZV9kZWJ1Z19yZW1vdmUoc3Ry dWN0IHN5bmNfZmVuY2UgKmZlbmNlKTsKLXZvaWQgc3luY19kdW1wKHZvaWQpOwotCi0jZWxzZQot IyBkZWZpbmUgc3luY190aW1lbGluZV9kZWJ1Z19hZGQob2JqKQotIyBkZWZpbmUgc3luY190aW1l bGluZV9kZWJ1Z19yZW1vdmUob2JqKQotIyBkZWZpbmUgc3luY19mZW5jZV9kZWJ1Z19hZGQoZmVu Y2UpCi0jIGRlZmluZSBzeW5jX2ZlbmNlX2RlYnVnX3JlbW92ZShmZW5jZSkKLSMgZGVmaW5lIHN5 bmNfZHVtcCgpCi0jZW5kaWYKLWludCBzeW5jX2ZlbmNlX3dha2VfdXBfd3Eod2FpdF9xdWV1ZV90 ICpjdXJyLCB1bnNpZ25lZCBtb2RlLAotCQkJCSBpbnQgd2FrZV9mbGFncywgdm9pZCAqa2V5KTsK LQotI2VuZGlmIC8qIF9MSU5VWF9TWU5DX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2lu Zy9hbmRyb2lkL3N5bmNfZGVidWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmNfZGVi dWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJhMTY0OS4uMDAwMDAwMAotLS0g YS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jX2RlYnVnLmMKKysrIC9kZXYvbnVsbApAQCAt MSwyNTUgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvYmFzZS9zeW5jLmMKLSAqCi0gKiBDb3B5cmln aHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2 ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBh bmQKLSAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhv c2UgdGVybXMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2luY2x1ZGUg PGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KLSNpbmNsdWRlIDxs aW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4K LSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNp bmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4K LSNpbmNsdWRlIDxsaW51eC90aW1lNjQuaD4KLSNpbmNsdWRlICJzeW5jLmgiCi0KLSNpZmRlZiBD T05GSUdfREVCVUdfRlMKLQotc3RhdGljIExJU1RfSEVBRChzeW5jX3RpbWVsaW5lX2xpc3RfaGVh ZCk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN5bmNfdGltZWxpbmVfbGlzdF9sb2NrKTsKLXN0 YXRpYyBMSVNUX0hFQUQoc3luY19mZW5jZV9saXN0X2hlYWQpOwotc3RhdGljIERFRklORV9TUElO TE9DSyhzeW5jX2ZlbmNlX2xpc3RfbG9jayk7Ci0KLXZvaWQgc3luY190aW1lbGluZV9kZWJ1Z19h ZGQoc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iaikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwot Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN5bmNfdGltZWxpbmVfbGlzdF9sb2NrLCBmbGFncyk7Ci0J bGlzdF9hZGRfdGFpbCgmb2JqLT5zeW5jX3RpbWVsaW5lX2xpc3QsICZzeW5jX3RpbWVsaW5lX2xp c3RfaGVhZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3luY190aW1lbGluZV9saXN0X2xv Y2ssIGZsYWdzKTsKLX0KLQotdm9pZCBzeW5jX3RpbWVsaW5lX2RlYnVnX3JlbW92ZShzdHJ1Y3Qg c3luY190aW1lbGluZSAqb2JqKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xv Y2tfaXJxc2F2ZSgmc3luY190aW1lbGluZV9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgm b2JqLT5zeW5jX3RpbWVsaW5lX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5bmNf dGltZWxpbmVfbGlzdF9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgc3luY19mZW5jZV9kZWJ1Z19h ZGQoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0K LQlzcGluX2xvY2tfaXJxc2F2ZSgmc3luY19mZW5jZV9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0 X2FkZF90YWlsKCZmZW5jZS0+c3luY19mZW5jZV9saXN0LCAmc3luY19mZW5jZV9saXN0X2hlYWQp OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5bmNfZmVuY2VfbGlzdF9sb2NrLCBmbGFncyk7 Ci19Ci0KLXZvaWQgc3luY19mZW5jZV9kZWJ1Z19yZW1vdmUoc3RydWN0IHN5bmNfZmVuY2UgKmZl bmNlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3lu Y19mZW5jZV9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmZmVuY2UtPnN5bmNfZmVuY2Vf bGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3luY19mZW5jZV9saXN0X2xvY2ssIGZs YWdzKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKnN5bmNfc3RhdHVzX3N0cihpbnQgc3RhdHVz KQotewotCWlmIChzdGF0dXMgPT0gMCkKLQkJcmV0dXJuICJzaWduYWxlZCI7Ci0KLQlpZiAoc3Rh dHVzID4gMCkKLQkJcmV0dXJuICJhY3RpdmUiOwotCi0JcmV0dXJuICJlcnJvciI7Ci19Ci0KLXN0 YXRpYyB2b2lkIHN5bmNfcHJpbnRfcHQoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZmVuY2Ug KnB0LCBib29sIGZlbmNlKQotewotCWludCBzdGF0dXMgPSAxOwotCi0JaWYgKGZlbmNlX2lzX3Np Z25hbGVkX2xvY2tlZChwdCkpCi0JCXN0YXR1cyA9IHB0LT5zdGF0dXM7Ci0KLQlzZXFfcHJpbnRm KHMsICIgICVzJXNwdCAlcyIsCi0JCSAgIGZlbmNlICYmIHB0LT5vcHMtPmdldF90aW1lbGluZV9u YW1lID8KLQkJICAgcHQtPm9wcy0+Z2V0X3RpbWVsaW5lX25hbWUocHQpIDogIiIsCi0JCSAgIGZl bmNlID8gIl8iIDogIiIsCi0JCSAgIHN5bmNfc3RhdHVzX3N0cihzdGF0dXMpKTsKLQotCWlmIChz dGF0dXMgPD0gMCkgewotCQlzdHJ1Y3QgdGltZXNwZWM2NCB0czY0ID0KLQkJCWt0aW1lX3RvX3Rp bWVzcGVjNjQocHQtPnRpbWVzdGFtcCk7Ci0KLQkJc2VxX3ByaW50ZihzLCAiQCVsbGQuJTA5bGQi LCAoczY0KXRzNjQudHZfc2VjLCB0czY0LnR2X25zZWMpOwotCX0KLQotCWlmICgoIWZlbmNlIHx8 IHB0LT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cikgJiYKLQkgICAgcHQtPm9wcy0+ZmVuY2VfdmFs dWVfc3RyKSB7Ci0JCWNoYXIgdmFsdWVbNjRdOwotCQlib29sIHN1Y2Nlc3M7Ci0KLQkJcHQtPm9w cy0+ZmVuY2VfdmFsdWVfc3RyKHB0LCB2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Ci0JCXN1Y2Nlc3Mg PSBzdHJsZW4odmFsdWUpOwotCi0JCWlmIChzdWNjZXNzKQotCQkJc2VxX3ByaW50ZihzLCAiOiAl cyIsIHZhbHVlKTsKLQotCQlpZiAoc3VjY2VzcyAmJiBmZW5jZSkgewotCQkJcHQtPm9wcy0+dGlt ZWxpbmVfdmFsdWVfc3RyKHB0LCB2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Ci0KLQkJCWlmIChzdHJs ZW4odmFsdWUpKQotCQkJCXNlcV9wcmludGYocywgIiAvICVzIiwgdmFsdWUpOwotCQl9Ci0JfQot Ci0Jc2VxX3B1dHMocywgIlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHN5bmNfcHJpbnRfb2JqKHN0 cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iaikKLXsKLQlzdHJ1Y3Qg bGlzdF9oZWFkICpwb3M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNlcV9wcmludGYocywg IiVzICVzIiwgb2JqLT5uYW1lLCBvYmotPm9wcy0+ZHJpdmVyX25hbWUpOwotCi0JaWYgKG9iai0+ b3BzLT50aW1lbGluZV92YWx1ZV9zdHIpIHsKLQkJY2hhciB2YWx1ZVs2NF07Ci0KLQkJb2JqLT5v cHMtPnRpbWVsaW5lX3ZhbHVlX3N0cihvYmosIHZhbHVlLCBzaXplb2YodmFsdWUpKTsKLQkJc2Vx X3ByaW50ZihzLCAiOiAlcyIsIHZhbHVlKTsKLQl9Ci0KLQlzZXFfcHV0cyhzLCAiXG4iKTsKLQot CXNwaW5fbG9ja19pcnFzYXZlKCZvYmotPmNoaWxkX2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3Rf Zm9yX2VhY2gocG9zLCAmb2JqLT5jaGlsZF9saXN0X2hlYWQpIHsKLQkJc3RydWN0IHN5bmNfcHQg KnB0ID0KLQkJCWNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBzeW5jX3B0LCBjaGlsZF9saXN0KTsK LQkJc3luY19wcmludF9wdChzLCAmcHQtPmJhc2UsIGZhbHNlKTsKLQl9Ci0Jc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmb2JqLT5jaGlsZF9saXN0X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZv aWQgc3luY19wcmludF9mZW5jZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBzeW5jX2ZlbmNl ICpmZW5jZSkKLXsKLQl3YWl0X3F1ZXVlX3QgKnBvczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwot CWludCBpOwotCi0Jc2VxX3ByaW50ZihzLCAiWyVwXSAlczogJXNcbiIsIGZlbmNlLCBmZW5jZS0+ bmFtZSwKLQkJICAgc3luY19zdGF0dXNfc3RyKGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKSkp OwotCi0JZm9yIChpID0gMDsgaSA8IGZlbmNlLT5udW1fZmVuY2VzOyArK2kpCi0JCXN5bmNfcHJp bnRfcHQocywgZmVuY2UtPmNic1tpXS5zeW5jX3B0LCB0cnVlKTsKLQotCXNwaW5fbG9ja19pcnFz YXZlKCZmZW5jZS0+d3EubG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAm ZmVuY2UtPndxLnRhc2tfbGlzdCwgdGFza19saXN0KSB7Ci0JCXN0cnVjdCBzeW5jX2ZlbmNlX3dh aXRlciAqd2FpdGVyOwotCi0JCWlmIChwb3MtPmZ1bmMgIT0gJnN5bmNfZmVuY2Vfd2FrZV91cF93 cSkKLQkJCWNvbnRpbnVlOwotCi0JCXdhaXRlciA9IGNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBz eW5jX2ZlbmNlX3dhaXRlciwgd29yayk7Ci0KLQkJc2VxX3ByaW50ZihzLCAid2FpdGVyICVwRlxu Iiwgd2FpdGVyLT5jYWxsYmFjayk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlbmNl LT53cS5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgc3luY19kZWJ1Z2ZzX3Nob3coc3Ry dWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsK LQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7Ci0KLQlzZXFfcHV0cyhzLCAib2Jqczpcbi0tLS0tLS0t LS0tLS0tXG4iKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzeW5jX3RpbWVsaW5lX2xpc3RfbG9j aywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2gocG9zLCAmc3luY190aW1lbGluZV9saXN0X2hlYWQp IHsKLQkJc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iaiA9Ci0JCQljb250YWluZXJfb2YocG9zLCBz dHJ1Y3Qgc3luY190aW1lbGluZSwKLQkJCQkgICAgIHN5bmNfdGltZWxpbmVfbGlzdCk7Ci0KLQkJ c3luY19wcmludF9vYmoocywgb2JqKTsKLQkJc2VxX3B1dHMocywgIlxuIik7Ci0JfQotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnN5bmNfdGltZWxpbmVfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQlz ZXFfcHV0cyhzLCAiZmVuY2VzOlxuLS0tLS0tLS0tLS0tLS1cbiIpOwotCi0Jc3Bpbl9sb2NrX2ly cXNhdmUoJnN5bmNfZmVuY2VfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaChwb3Ms ICZzeW5jX2ZlbmNlX2xpc3RfaGVhZCkgewotCQlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UgPQot CQkJY29udGFpbmVyX29mKHBvcywgc3RydWN0IHN5bmNfZmVuY2UsIHN5bmNfZmVuY2VfbGlzdCk7 Ci0KLQkJc3luY19wcmludF9mZW5jZShzLCBmZW5jZSk7Ci0JCXNlcV9wdXRzKHMsICJcbiIpOwot CX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX2ZlbmNlX2xpc3RfbG9jaywgZmxhZ3Mp OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN5bmNfZGVidWdmc19vcGVuKHN0cnVjdCBp bm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3Blbihm aWxlLCBzeW5jX2RlYnVnZnNfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyBj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5bmNfZGVidWdmc19mb3BzID0gewotCS5vcGVu ICAgICAgICAgICA9IHN5bmNfZGVidWdmc19vcGVuLAotCS5yZWFkICAgICAgICAgICA9IHNlcV9y ZWFkLAotCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSAgICAgICAgPSBz aW5nbGVfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBfX2luaXQgaW50IHN5bmNfZGVidWdmc19pbml0 KHZvaWQpCi17Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgic3luYyIsIFNfSVJVR08sIE5VTEwsIE5V TEwsICZzeW5jX2RlYnVnZnNfZm9wcyk7Ci0JcmV0dXJuIDA7Ci19Ci1sYXRlX2luaXRjYWxsKHN5 bmNfZGVidWdmc19pbml0KTsKLQotI2RlZmluZSBEVU1QX0NIVU5LIDI1Ngotc3RhdGljIGNoYXIg c3luY19kdW1wX2J1Zls2NCAqIDEwMjRdOwotdm9pZCBzeW5jX2R1bXAodm9pZCkKLXsKLQlzdHJ1 Y3Qgc2VxX2ZpbGUgcyA9IHsKLQkJLmJ1ZiA9IHN5bmNfZHVtcF9idWYsCi0JCS5zaXplID0gc2l6 ZW9mKHN5bmNfZHVtcF9idWYpIC0gMSwKLQl9OwotCWludCBpOwotCi0Jc3luY19kZWJ1Z2ZzX3No b3coJnMsIE5VTEwpOwotCi0JZm9yIChpID0gMDsgaSA8IHMuY291bnQ7IGkgKz0gRFVNUF9DSFVO SykgewotCQlpZiAoKHMuY291bnQgLSBpKSA+IERVTVBfQ0hVTkspIHsKLQkJCWNoYXIgYyA9IHMu YnVmW2kgKyBEVU1QX0NIVU5LXTsKLQotCQkJcy5idWZbaSArIERVTVBfQ0hVTktdID0gMDsKLQkJ CXByX2NvbnQoIiVzIiwgcy5idWYgKyBpKTsKLQkJCXMuYnVmW2kgKyBEVU1QX0NIVU5LXSA9IGM7 Ci0JCX0gZWxzZSB7Ci0JCQlzLmJ1ZltzLmNvdW50XSA9IDA7Ci0JCQlwcl9jb250KCIlcyIsIHMu YnVmICsgaSk7Ci0JCX0KLQl9Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFn aW5nL2FuZHJvaWQvdHJhY2Uvc3luYy5oIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdHJhY2Uv c3luYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2VkYjk3Li4wMDAwMDAwCi0t LSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3RyYWNlL3N5bmMuaAorKysgL2Rldi9udWxsCkBA IC0xLDgyICswLDAgQEAKLSN1bmRlZiBUUkFDRV9TWVNURU0KLSNkZWZpbmUgVFJBQ0VfSU5DTFVE RV9QQVRIIC4uLy4uL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3RyYWNlCi0jZGVmaW5lIFRSQUNF X1NZU1RFTSBzeW5jCi0KLSNpZiAhZGVmaW5lZChfVFJBQ0VfU1lOQ19IKSB8fCBkZWZpbmVkKFRS QUNFX0hFQURFUl9NVUxUSV9SRUFEKQotI2RlZmluZSBfVFJBQ0VfU1lOQ19ICi0KLSNpbmNsdWRl ICIuLi9zeW5jLmgiCi0jaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgotCi1UUkFDRV9FVkVO VChzeW5jX3RpbWVsaW5lLAotCVRQX1BST1RPKHN0cnVjdCBzeW5jX3RpbWVsaW5lICp0aW1lbGlu ZSksCi0KLQlUUF9BUkdTKHRpbWVsaW5lKSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCQlfX3N0 cmluZyhuYW1lLCB0aW1lbGluZS0+bmFtZSkKLQkJCV9fYXJyYXkoY2hhciwgdmFsdWUsIDMyKQot CSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJCV9fYXNzaWduX3N0cihuYW1lLCB0aW1lbGluZS0+ bmFtZSk7Ci0JCQlpZiAodGltZWxpbmUtPm9wcy0+dGltZWxpbmVfdmFsdWVfc3RyKSB7Ci0JCQkJ dGltZWxpbmUtPm9wcy0+dGltZWxpbmVfdmFsdWVfc3RyKHRpbWVsaW5lLAotCQkJCQkJCV9fZW50 cnktPnZhbHVlLAotCQkJCQkJCXNpemVvZihfX2VudHJ5LT52YWx1ZSkpOwotCQkJfSBlbHNlIHsK LQkJCQlfX2VudHJ5LT52YWx1ZVswXSA9ICdcMCc7Ci0JCQl9Ci0JKSwKLQotCVRQX3ByaW50aygi bmFtZT0lcyB2YWx1ZT0lcyIsIF9fZ2V0X3N0cihuYW1lKSwgX19lbnRyeS0+dmFsdWUpCi0pOwot Ci1UUkFDRV9FVkVOVChzeW5jX3dhaXQsCi0JVFBfUFJPVE8oc3RydWN0IHN5bmNfZmVuY2UgKmZl bmNlLCBpbnQgYmVnaW4pLAotCi0JVFBfQVJHUyhmZW5jZSwgYmVnaW4pLAotCi0JVFBfU1RSVUNU X19lbnRyeSgKLQkJCV9fc3RyaW5nKG5hbWUsIGZlbmNlLT5uYW1lKQotCQkJX19maWVsZChzMzIs IHN0YXR1cykKLQkJCV9fZmllbGQodTMyLCBiZWdpbikKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24o Ci0JCQlfX2Fzc2lnbl9zdHIobmFtZSwgZmVuY2UtPm5hbWUpOwotCQkJX19lbnRyeS0+c3RhdHVz ID0gYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpOwotCQkJX19lbnRyeS0+YmVnaW4gPSBiZWdp bjsKLQkpLAotCi0JVFBfcHJpbnRrKCIlcyBuYW1lPSVzIHN0YXRlPSVkIiwgX19lbnRyeS0+YmVn aW4gPyAiYmVnaW4iIDogImVuZCIsCi0JCQlfX2dldF9zdHIobmFtZSksIF9fZW50cnktPnN0YXR1 cykKLSk7Ci0KLVRSQUNFX0VWRU5UKHN5bmNfcHQsCi0JVFBfUFJPVE8oc3RydWN0IGZlbmNlICpw dCksCi0KLQlUUF9BUkdTKHB0KSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fc3RyaW5nKHRp bWVsaW5lLCBwdC0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZShwdCkpCi0JCV9fYXJyYXkoY2hhciwg dmFsdWUsIDMyKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19hc3NpZ25fc3RyKHRpbWVs aW5lLCBwdC0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZShwdCkpOwotCQlpZiAocHQtPm9wcy0+ZmVu Y2VfdmFsdWVfc3RyKSB7Ci0JCQlwdC0+b3BzLT5mZW5jZV92YWx1ZV9zdHIocHQsIF9fZW50cnkt PnZhbHVlLAotCQkJCQkJCXNpemVvZihfX2VudHJ5LT52YWx1ZSkpOwotCQl9IGVsc2UgewotCQkJ X19lbnRyeS0+dmFsdWVbMF0gPSAnXDAnOwotCQl9Ci0JKSwKLQotCVRQX3ByaW50aygibmFtZT0l cyB2YWx1ZT0lcyIsIF9fZ2V0X3N0cih0aW1lbGluZSksIF9fZW50cnktPnZhbHVlKQotKTsKLQot I2VuZGlmIC8qIGlmICFkZWZpbmVkKF9UUkFDRV9TWU5DX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVB REVSX01VTFRJX1JFQUQpICovCi0KLS8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVj dGlvbiAqLwotI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS9zd19zeW5jLmggYi9kcml2ZXJzL3N0YWdpbmcvYW5k cm9pZC91YXBpL3N3X3N5bmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI1ZDQ4 Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC91YXBpL3N3X3N5bmMuaAor KysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg R29vZ2xlLCBJbmMuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIsIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKLSAqIG1heSBi ZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCi0g KgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfVUFQSV9MSU5VWF9T V19TWU5DX0gKLSNkZWZpbmUgX1VBUElfTElOVVhfU1dfU1lOQ19ICi0KLSNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgotCi1zdHJ1Y3Qgc3dfc3luY19jcmVhdGVfZmVuY2VfZGF0YSB7Ci0JX191MzIJ dmFsdWU7Ci0JY2hhcgluYW1lWzMyXTsKLQlfX3MzMglmZW5jZTsgLyogZmQgb2YgbmV3IGZlbmNl ICovCi19OwotCi0jZGVmaW5lIFNXX1NZTkNfSU9DX01BR0lDCSdXJwotCi0jZGVmaW5lIFNXX1NZ TkNfSU9DX0NSRUFURV9GRU5DRQlfSU9XUihTV19TWU5DX0lPQ19NQUdJQywgMCxcCi0JCXN0cnVj dCBzd19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRhKQotI2RlZmluZSBTV19TWU5DX0lPQ19JTkMJCQlf SU9XKFNXX1NZTkNfSU9DX01BR0lDLCAxLCBfX3UzMikKLQotI2VuZGlmIC8qIF9VQVBJX0xJTlVY X1NXX1NZTkNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS9z eW5jLmggYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC91YXBpL3N5bmMuaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggZTk2NGM3NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcv YW5kcm9pZC91YXBpL3N5bmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0g KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfVUFQSV9MSU5VWF9TWU5DX0gKLSNkZWZpbmUgX1VBUElf TElOVVhfU1lOQ19ICi0KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+Ci0KLS8qKgotICogc3RydWN0IHN5bmNfbWVyZ2VfZGF0YSAtIGRhdGEgcGFzc2Vk IHRvIG1lcmdlIGlvY3RsCi0gKiBAZmQyOglmaWxlIGRlc2NyaXB0b3Igb2Ygc2Vjb25kIGZlbmNl Ci0gKiBAbmFtZToJbmFtZSBvZiBuZXcgZmVuY2UKLSAqIEBmZW5jZToJcmV0dXJucyB0aGUgZmQg b2YgdGhlIG5ldyBmZW5jZSB0byB1c2Vyc3BhY2UKLSAqLwotc3RydWN0IHN5bmNfbWVyZ2VfZGF0 YSB7Ci0JX19zMzIJZmQyOyAvKiBmZCBvZiBzZWNvbmQgZmVuY2UgKi8KLQljaGFyCW5hbWVbMzJd OyAvKiBuYW1lIG9mIG5ldyBmZW5jZSAqLwotCV9fczMyCWZlbmNlOyAvKiBmZCBvbiBuZXdseSBj cmVhdGVkIGZlbmNlICovCi19OwotCi0vKioKLSAqIHN0cnVjdCBzeW5jX3B0X2luZm8gLSBkZXRh aWxlZCBzeW5jX3B0IGluZm9ybWF0aW9uCi0gKiBAbGVuOgkJbGVuZ3RoIG9mIHN5bmNfcHRfaW5m byBpbmNsdWRpbmcgYW55IGRyaXZlcl9kYXRhCi0gKiBAb2JqX25hbWU6CQluYW1lIG9mIHBhcmVu dCBzeW5jX3RpbWVsaW5lCi0gKiBAZHJpdmVyX25hbWU6CW5hbWUgb2YgZHJpdmVyIGltcGxlbWVu dGluZyB0aGUgcGFyZW50Ci0gKiBAc3RhdHVzOgkJc3RhdHVzIG9mIHRoZSBzeW5jX3B0IDA6YWN0 aXZlIDE6c2lnbmFsZWQgPDA6ZXJyb3IKLSAqIEB0aW1lc3RhbXBfbnM6CXRpbWVzdGFtcCBvZiBz dGF0dXMgY2hhbmdlIGluIG5hbm9zZWNvbmRzCi0gKiBAZHJpdmVyX2RhdGE6CWFueSBkcml2ZXIg ZGVwZW5kZW50IGRhdGEKLSAqLwotc3RydWN0IHN5bmNfcHRfaW5mbyB7Ci0JX191MzIJbGVuOwot CWNoYXIJb2JqX25hbWVbMzJdOwotCWNoYXIJZHJpdmVyX25hbWVbMzJdOwotCV9fczMyCXN0YXR1 czsKLQlfX3U2NAl0aW1lc3RhbXBfbnM7Ci0KLQlfX3U4CWRyaXZlcl9kYXRhWzBdOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3Qgc3luY19mZW5jZV9pbmZvX2RhdGEgLSBkYXRhIHJldHVybmVkIGZyb20g ZmVuY2UgaW5mbyBpb2N0bAotICogQGxlbjoJaW9jdGwgY2FsbGVyIHdyaXRlcyB0aGUgc2l6ZSBv ZiB0aGUgYnVmZmVyIGl0cyBwYXNzaW5nIGluLgotICoJCWlvY3RsIHJldHVybnMgbGVuZ3RoIG9m IHN5bmNfZmVuY2VfZGF0YSByZXR1cm5lZCB0byB1c2Vyc3BhY2UKLSAqCQlpbmNsdWRpbmcgcHRf aW5mby4KLSAqIEBuYW1lOgluYW1lIG9mIGZlbmNlCi0gKiBAc3RhdHVzOglzdGF0dXMgb2YgZmVu Y2UuIDE6IHNpZ25hbGVkIDA6YWN0aXZlIDwwOmVycm9yCi0gKiBAcHRfaW5mbzoJYSBzeW5jX3B0 X2luZm8gc3RydWN0IGZvciBldmVyeSBzeW5jX3B0IGluIHRoZSBmZW5jZQotICovCi1zdHJ1Y3Qg c3luY19mZW5jZV9pbmZvX2RhdGEgewotCV9fdTMyCWxlbjsKLQljaGFyCW5hbWVbMzJdOwotCV9f czMyCXN0YXR1czsKLQotCV9fdTgJcHRfaW5mb1swXTsKLX07Ci0KLSNkZWZpbmUgU1lOQ19JT0Nf TUFHSUMJCSc+JwotCi0vKioKLSAqIERPQzogU1lOQ19JT0NfV0FJVCAtIHdhaXQgZm9yIGEgZmVu Y2UgdG8gc2lnbmFsCi0gKgotICogcGFzcyB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gIFdhaXRz IGluZGVmaW5pdGVseSB0aW1lb3V0IDwgMC4KLSAqLwotI2RlZmluZSBTWU5DX0lPQ19XQUlUCQlf SU9XKFNZTkNfSU9DX01BR0lDLCAwLCBfX3MzMikKLQotLyoqCi0gKiBET0M6IFNZTkNfSU9DX01F UkdFIC0gbWVyZ2UgdHdvIGZlbmNlcwotICoKLSAqIFRha2VzIGEgc3RydWN0IHN5bmNfbWVyZ2Vf ZGF0YS4gIENyZWF0ZXMgYSBuZXcgZmVuY2UgY29udGFpbmluZyBjb3BpZXMgb2YKLSAqIHRoZSBz eW5jX3B0cyBpbiBib3RoIHRoZSBjYWxsaW5nIGZkIGFuZCBzeW5jX21lcmdlX2RhdGEuZmQyLiAg UmV0dXJucyB0aGUKLSAqIG5ldyBmZW5jZSdzIGZkIGluIHN5bmNfbWVyZ2VfZGF0YS5mZW5jZQot ICovCi0jZGVmaW5lIFNZTkNfSU9DX01FUkdFCQlfSU9XUihTWU5DX0lPQ19NQUdJQywgMSwgc3Ry dWN0IHN5bmNfbWVyZ2VfZGF0YSkKLQotLyoqCi0gKiBET0M6IFNZTkNfSU9DX0ZFTkNFX0lORk8g LSBnZXQgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gYSBmZW5jZQotICoKLSAqIFRha2VzIGEgc3Ry dWN0IHN5bmNfZmVuY2VfaW5mb19kYXRhIHdpdGggZXh0cmEgc3BhY2UgYWxsb2NhdGVkIGZvciBw dF9pbmZvLgotICogQ2FsbGVyIHNob3VsZCB3cml0ZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGlu dG8gbGVuLiAgT24gcmV0dXJuLCBsZW4gaXMKLSAqIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgdG90 YWwgc2l6ZSBvZiB0aGUgc3luY19mZW5jZV9pbmZvX2RhdGEgaW5jbHVkaW5nCi0gKiBwdF9pbmZv LgotICoKLSAqIHB0X2luZm8gaXMgYSBidWZmZXIgY29udGFpbmluZyBzeW5jX3B0X2luZm9zIGZv ciBldmVyeSBzeW5jX3B0IGluIHRoZSBmZW5jZS4KLSAqIFRvIGl0ZXJhdGUgb3ZlciB0aGUgc3lu Y19wdF9pbmZvcywgdXNlIHRoZSBzeW5jX3B0X2luZm8ubGVuIGZpZWxkLgotICovCi0jZGVmaW5l IFNZTkNfSU9DX0ZFTkNFX0lORk8JX0lPV1IoU1lOQ19JT0NfTUFHSUMsIDIsXAotCXN0cnVjdCBz eW5jX2ZlbmNlX2luZm9fZGF0YSkKLQotI2VuZGlmIC8qIF9VQVBJX0xJTlVYX1NZTkNfSCAqLwpk aWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL0tidWlsZCBiL2luY2x1ZGUvdWFwaS9LYnVpbGQKaW5k ZXggMjQ1YWE2ZS4uN2M0MTVkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL0tidWlsZAorKysg Yi9pbmNsdWRlL3VhcGkvS2J1aWxkCkBAIC0xMywzICsxMyw0IEBAIGhlYWRlci15ICs9IGRybS8K IGhlYWRlci15ICs9IHhlbi8KIGhlYWRlci15ICs9IHNjc2kvCiBoZWFkZXIteSArPSBtaXNjLwor aGVhZGVyLXkgKz0gc3luYy8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9zeW5jL0tidWlsZCBi L2luY2x1ZGUvdWFwaS9zeW5jL0tidWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4yNzE2ZmZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91YXBpL3N5bmMvS2J1aWxk CkBAIC0wLDAgKzEsMyBAQAorIyBzeW5jIEhlYWRlciBleHBvcnQgbGlzdAoraGVhZGVyLXkgKz0g c3dfc3luYy5oCitoZWFkZXIteSArPSBzeW5jLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9z eW5jL3N3X3N5bmMuaCBiL2luY2x1ZGUvdWFwaS9zeW5jL3N3X3N5bmMuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjVkNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVk ZS91YXBpL3N5bmMvc3dfc3luYy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg KEMpIDIwMTIgR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJz aW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQK KyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2Ug dGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfVUFQ SV9MSU5VWF9TV19TWU5DX0gKKyNkZWZpbmUgX1VBUElfTElOVVhfU1dfU1lOQ19ICisKKyNpbmNs dWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qgc3dfc3luY19jcmVhdGVfZmVuY2VfZGF0YSB7 CisJX191MzIJdmFsdWU7CisJY2hhcgluYW1lWzMyXTsKKwlfX3MzMglmZW5jZTsgLyogZmQgb2Yg bmV3IGZlbmNlICovCit9OworCisjZGVmaW5lIFNXX1NZTkNfSU9DX01BR0lDCSdXJworCisjZGVm aW5lIFNXX1NZTkNfSU9DX0NSRUFURV9GRU5DRQlfSU9XUihTV19TWU5DX0lPQ19NQUdJQywgMCxc CisJCXN0cnVjdCBzd19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRhKQorI2RlZmluZSBTV19TWU5DX0lP Q19JTkMJCQlfSU9XKFNXX1NZTkNfSU9DX01BR0lDLCAxLCBfX3UzMikKKworI2VuZGlmIC8qIF9V QVBJX0xJTlVYX1NXX1NZTkNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL3N5bmMvc3lu Yy5oIGIvaW5jbHVkZS91YXBpL3N5bmMvc3luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmU5NjRjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3VhcGkvc3luYy9z eW5jLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUs IEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9VQVBJ X0xJTlVYX1NZTkNfSAorI2RlZmluZSBfVUFQSV9MSU5VWF9TWU5DX0gKKworI2luY2x1ZGUgPGxp bnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoqCisgKiBzdHJ1Y3Qg c3luY19tZXJnZV9kYXRhIC0gZGF0YSBwYXNzZWQgdG8gbWVyZ2UgaW9jdGwKKyAqIEBmZDI6CWZp bGUgZGVzY3JpcHRvciBvZiBzZWNvbmQgZmVuY2UKKyAqIEBuYW1lOgluYW1lIG9mIG5ldyBmZW5j ZQorICogQGZlbmNlOglyZXR1cm5zIHRoZSBmZCBvZiB0aGUgbmV3IGZlbmNlIHRvIHVzZXJzcGFj ZQorICovCitzdHJ1Y3Qgc3luY19tZXJnZV9kYXRhIHsKKwlfX3MzMglmZDI7IC8qIGZkIG9mIHNl Y29uZCBmZW5jZSAqLworCWNoYXIJbmFtZVszMl07IC8qIG5hbWUgb2YgbmV3IGZlbmNlICovCisJ X19zMzIJZmVuY2U7IC8qIGZkIG9uIG5ld2x5IGNyZWF0ZWQgZmVuY2UgKi8KK307CisKKy8qKgor ICogc3RydWN0IHN5bmNfcHRfaW5mbyAtIGRldGFpbGVkIHN5bmNfcHQgaW5mb3JtYXRpb24KKyAq IEBsZW46CQlsZW5ndGggb2Ygc3luY19wdF9pbmZvIGluY2x1ZGluZyBhbnkgZHJpdmVyX2RhdGEK KyAqIEBvYmpfbmFtZToJCW5hbWUgb2YgcGFyZW50IHN5bmNfdGltZWxpbmUKKyAqIEBkcml2ZXJf bmFtZToJbmFtZSBvZiBkcml2ZXIgaW1wbGVtZW50aW5nIHRoZSBwYXJlbnQKKyAqIEBzdGF0dXM6 CQlzdGF0dXMgb2YgdGhlIHN5bmNfcHQgMDphY3RpdmUgMTpzaWduYWxlZCA8MDplcnJvcgorICog QHRpbWVzdGFtcF9uczoJdGltZXN0YW1wIG9mIHN0YXR1cyBjaGFuZ2UgaW4gbmFub3NlY29uZHMK KyAqIEBkcml2ZXJfZGF0YToJYW55IGRyaXZlciBkZXBlbmRlbnQgZGF0YQorICovCitzdHJ1Y3Qg c3luY19wdF9pbmZvIHsKKwlfX3UzMglsZW47CisJY2hhcglvYmpfbmFtZVszMl07CisJY2hhcglk cml2ZXJfbmFtZVszMl07CisJX19zMzIJc3RhdHVzOworCV9fdTY0CXRpbWVzdGFtcF9uczsKKwor CV9fdTgJZHJpdmVyX2RhdGFbMF07Cit9OworCisvKioKKyAqIHN0cnVjdCBzeW5jX2ZlbmNlX2lu Zm9fZGF0YSAtIGRhdGEgcmV0dXJuZWQgZnJvbSBmZW5jZSBpbmZvIGlvY3RsCisgKiBAbGVuOglp b2N0bCBjYWxsZXIgd3JpdGVzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgaXRzIHBhc3NpbmcgaW4u CisgKgkJaW9jdGwgcmV0dXJucyBsZW5ndGggb2Ygc3luY19mZW5jZV9kYXRhIHJldHVybmVkIHRv IHVzZXJzcGFjZQorICoJCWluY2x1ZGluZyBwdF9pbmZvLgorICogQG5hbWU6CW5hbWUgb2YgZmVu Y2UKKyAqIEBzdGF0dXM6CXN0YXR1cyBvZiBmZW5jZS4gMTogc2lnbmFsZWQgMDphY3RpdmUgPDA6 ZXJyb3IKKyAqIEBwdF9pbmZvOglhIHN5bmNfcHRfaW5mbyBzdHJ1Y3QgZm9yIGV2ZXJ5IHN5bmNf cHQgaW4gdGhlIGZlbmNlCisgKi8KK3N0cnVjdCBzeW5jX2ZlbmNlX2luZm9fZGF0YSB7CisJX191 MzIJbGVuOworCWNoYXIJbmFtZVszMl07CisJX19zMzIJc3RhdHVzOworCisJX191OAlwdF9pbmZv WzBdOworfTsKKworI2RlZmluZSBTWU5DX0lPQ19NQUdJQwkJJz4nCisKKy8qKgorICogRE9DOiBT WU5DX0lPQ19XQUlUIC0gd2FpdCBmb3IgYSBmZW5jZSB0byBzaWduYWwKKyAqCisgKiBwYXNzIHRp bWVvdXQgaW4gbWlsbGlzZWNvbmRzLiAgV2FpdHMgaW5kZWZpbml0ZWx5IHRpbWVvdXQgPCAwLgor ICovCisjZGVmaW5lIFNZTkNfSU9DX1dBSVQJCV9JT1coU1lOQ19JT0NfTUFHSUMsIDAsIF9fczMy KQorCisvKioKKyAqIERPQzogU1lOQ19JT0NfTUVSR0UgLSBtZXJnZSB0d28gZmVuY2VzCisgKgor ICogVGFrZXMgYSBzdHJ1Y3Qgc3luY19tZXJnZV9kYXRhLiAgQ3JlYXRlcyBhIG5ldyBmZW5jZSBj b250YWluaW5nIGNvcGllcyBvZgorICogdGhlIHN5bmNfcHRzIGluIGJvdGggdGhlIGNhbGxpbmcg ZmQgYW5kIHN5bmNfbWVyZ2VfZGF0YS5mZDIuICBSZXR1cm5zIHRoZQorICogbmV3IGZlbmNlJ3Mg ZmQgaW4gc3luY19tZXJnZV9kYXRhLmZlbmNlCisgKi8KKyNkZWZpbmUgU1lOQ19JT0NfTUVSR0UJ CV9JT1dSKFNZTkNfSU9DX01BR0lDLCAxLCBzdHJ1Y3Qgc3luY19tZXJnZV9kYXRhKQorCisvKioK KyAqIERPQzogU1lOQ19JT0NfRkVOQ0VfSU5GTyAtIGdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBv biBhIGZlbmNlCisgKgorICogVGFrZXMgYSBzdHJ1Y3Qgc3luY19mZW5jZV9pbmZvX2RhdGEgd2l0 aCBleHRyYSBzcGFjZSBhbGxvY2F0ZWQgZm9yIHB0X2luZm8uCisgKiBDYWxsZXIgc2hvdWxkIHdy aXRlIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgaW50byBsZW4uICBPbiByZXR1cm4sIGxlbiBpcwor ICogdXBkYXRlZCB0byByZWZsZWN0IHRoZSB0b3RhbCBzaXplIG9mIHRoZSBzeW5jX2ZlbmNlX2lu Zm9fZGF0YSBpbmNsdWRpbmcKKyAqIHB0X2luZm8uCisgKgorICogcHRfaW5mbyBpcyBhIGJ1ZmZl ciBjb250YWluaW5nIHN5bmNfcHRfaW5mb3MgZm9yIGV2ZXJ5IHN5bmNfcHQgaW4gdGhlIGZlbmNl LgorICogVG8gaXRlcmF0ZSBvdmVyIHRoZSBzeW5jX3B0X2luZm9zLCB1c2UgdGhlIHN5bmNfcHRf aW5mby5sZW4gZmllbGQuCisgKi8KKyNkZWZpbmUgU1lOQ19JT0NfRkVOQ0VfSU5GTwlfSU9XUihT WU5DX0lPQ19NQUdJQywgMixcCisJc3RydWN0IHN5bmNfZmVuY2VfaW5mb19kYXRhKQorCisjZW5k aWYgLyogX1VBUElfTElOVVhfU1lOQ19IICovCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK