From mboxrd@z Thu Jan 1 00:00:00 1970 From: Akshay Jaggi Subject: [PATCH v2] gnttab: Add gntdev device mappings for FreeBSD Date: Wed, 17 Aug 2016 17:36:59 +0530 Message-ID: <1471435619-8747-1-git-send-email-akshay1994.leo@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bZzdP-000086-Uv for xen-devel@lists.xenproject.org; Wed, 17 Aug 2016 12:07:52 +0000 Received: by mail-pa0-f66.google.com with SMTP id cf3so7014164pad.2 for ; Wed, 17 Aug 2016 05:07:50 -0700 (PDT) List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , George Dunlap , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Ian Jackson , Tim Deegan , FreeBSD-Xen , Akshay Jaggi List-Id: xen-devel@lists.xenproject.org QWRkIGdyYW50IHRhYmxlIHVzZXJzcGFjZSBkZXZpY2UgbWFwcGluZ3MgZm9yCkZyZWVCU0QgKGVu YWJsZXMgc3VwcG9ydCBmb3IgcWRpc2sgYmFja2VuZApvbiBGcmVlQlNEIERvbTApLgoKU2lnbmVk LW9mZi1ieTogQWtzaGF5IEphZ2dpIDxha3NoYXkxOTk0Lmxlb0BnbWFpbC5jb20+CgotLS0KQ2hh bmdlZCBzaW5jZSB2MToKICogZml4IGNvZGluZyBzdHlsZQogKiByZW1vdmUgT19DTE9FWEVDCiAq IHJlbW92ZSBTRVRfTUFYX0dSQU5UUyBpb2N0bAogKiB1cGRhdGUgZnJlZWJzZC9nbnRkZXYuaCB0 byBsYXRlc3QgdmVyc2lvbgogKiByZXBsYWNlIGFsbG9jYSB3aXRoIG1hbGxvYwotLS0KIHRvb2xz L2luY2x1ZGUveGVuLXN5cy9GcmVlQlNEL2dudGRldi5oIHwgMTkxICsrKysrKysrKysrKysrKysr KysrCiB0b29scy9saWJzL2dudHRhYi9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMiArLQogdG9v bHMvbGlicy9nbnR0YWIvZnJlZWJzZC5jICAgICAgICAgICAgfCAzMTggKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDUxMCBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvaW5jbHVkZS94ZW4tc3lzL0Zy ZWVCU0QvZ250ZGV2LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9saWJzL2dudHRhYi9mcmVl YnNkLmMKCmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3hlbi1zeXMvRnJlZUJTRC9nbnRkZXYu aCBiL3Rvb2xzL2luY2x1ZGUveGVuLXN5cy9GcmVlQlNEL2dudGRldi5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMzFlMjEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9p bmNsdWRlL3hlbi1zeXMvRnJlZUJTRC9nbnRkZXYuaApAQCAtMCwwICsxLDE5MSBAQAorLyotCisg KiBDb3B5cmlnaHQgKGMpIDIwMTYgQWtzaGF5IEphZ2dpIDxqYWdnaUBGcmVlQlNELm9yZz4KKyAq IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICog QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP RgorICogU1VDSCBEQU1BR0UuCisgKgorICogZ250ZGV2LmgKKyAqCisgKiBJbnRlcmZhY2UgdG8g L2Rldi94ZW4vZ250ZGV2LgorICoKKyAqIFRoaXMgZGV2aWNlIHByb3ZpZGVzIHRoZSB1c2VyIHdp dGggdHdvIGtpbmRzIG9mIGZ1bmN0aW9uYWxpdGllczoKKyAqIDEuIEdyYW50IEFsbG9jYXRpb24K KyAqICAgIEFsbG9jYXRlIGEgcGFnZSBvZiBvdXIgb3duIG1lbW9yeSwgYW5kIHNoYXJlIGl0IHdp dGggYSBmb3JlaWduIGRvbWFpbi4KKyAqIDIuIEdyYW50IE1hcHBpbmcKKyAqICAgIE1hcCBhIGdy YW50IGFsbG9jYXRlZCBieSBhIGZvcmVpZ24gZG9tYWluLCBpbnRvIG91ciBvd24gbWVtb3J5Lgor ICoKKyAqCisgKiBHcmFudCBBbGxvY2F0aW9uCisgKgorICogU3RlcHMgdG8gYWxsb2NhdGUgYSBn cmFudDoKKyAqIDEuIERvIGFuIGBJT0NUTF9HTlRERVZfQUxMT0NfR1JFRiBpb2N0bGAsIHdpdGgK KyAqICAgICAtIGBkb21pZGAsIGFzIHRoZSBkb21haW4taWQgb2YgdGhlIGZvcmVpZ24gZG9tYWlu CisgKiAgICAgLSBgZmxhZ3NgLCBPUmVkIHdpdGggR05UREVWX0FMTE9DX0ZMQUdfV1JJVEFCTEUg aWYgeW91IHdhbnQgdGhlIGZvcmVpZ24KKyAqICAgICAgIGRvbWFpbiB0byBoYXZlIHdyaXRlIGFj Y2VzcyB0byB0aGUgc2hhcmVkIG1lbW9yeQorICogICAgIC0gYGNvdW50YCwgd2l0aCB0aGUgbnVt YmVyIG9mIHBhZ2VzIHRvIHNoYXJlIHdpdGggdGhlIGZvcmVpZ24gZG9tYWluCisgKgorICogICAg RW5zdXJlIHRoYXQgdGhlIHN0cnVjdHVyZSB5b3UgYWxsb2NhdGUgaGFzIGVub3VnaCBtZW1vcnkg dG8gc3RvcmUKKyAqICAgIGFsbCB0aGUgYWxsb2NhdGVkIGdyYW50LXJlZnMsIGkuZS4sIHlvdSBu ZWVkIHRvIGFsbG9jYXRlCisgKiAgICAoc2l6ZW9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfYWxsb2Nf Z3JlZikgKyAoY291bnQgLSAxKSpzaXplb2YodWludDMyX3QpKQorICogICAgYnl0ZXMgb2YgbWVt b3J5LgorICoKKyAqIDIuIE1tYXAgdGhlIGFkZHJlc3MgZ2l2ZW4gaW4gYGluZGV4YCBhZnRlciBh IHN1Y2Nlc3NmdWwgaW9jdGwuCisgKiAgICBUaGlzIHdpbGwgZ2l2ZSB5b3UgYWNjZXNzIHRvIHRo ZSBncmFudGVkIHBhZ2VzLgorICoKKyAqIE5vdGU6CisgKiAxLiBUaGUgZ3JhbnQgaXMgbm90IHJl bW92ZWQgdW50aWwgYWxsIHRocmVlIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogICAg YXJlIG1ldAorICogICAgIC0gVGhlIHJlZ2lvbiBpcyBub3QgbW1hcGVkLiBUaGF0IGlzLCBtdW5t YXAoKSBoYXMgYmVlbiBjYWxsZWQgaWYKKyAqICAgICAgIHRoZSByZWdpb24gd2FzIG1tYXBwZWQg cHJldmlvdXNseS4KKyAqICAgICAtIElPQ1RMX0dOVERFVl9ERUFMTE9DX0dSRUYgaW9jdGwgaGFz IGJlZW4gcGVyZm9ybWVkLiBBZnRlciB5b3UKKyAqICAgICAgIHBlcmZvcm0gdGhpcyBpb2N0bCwg eW91IGNhbiBubyBsb25nZXIgbW1hcCBvciBzZXQgbm90aWZ5IG9uCisgKiAgICAgICB0aGUgZ3Jh bnQuCisgKiAgICAgLSBUaGUgZm9yZWlnbiBkb21haW4gaGFzIHN0b3BwZWQgdXNpbmcgdGhlIGdy YW50LgorICogMi4gR3JhbnRlZCBwYWdlcyBjYW4gb25seSBiZWxvbmcgdG8gb25lIG1tYXAgcmVn aW9uLgorICogMy4gRXZlcnkgcGFnZSBvZiBncmFudGVkIG1lbW9yeSBpcyBhIHVuaXQgaW4gaXRz ZWxmLiBXaGF0IHRoaXMgbWVhbnMKKyAqICAgIGlzIHRoYXQgeW91IGNhbiBzZXQgYSB1bm1hcCBu b3RpZmljYXRpb24gZm9yIGVhY2ggb2YgdGhlIGdyYW50ZWQKKyAqICAgIHBhZ2VzLCBpbmRpdmlk dWFsbHk7IHlvdSBjYW4gbW1hcCBhbmQgZGVhbGxvYy1pb2N0bCBhIGNvbnRpZ3VvdXMKKyAqICAg IHJhbmdlIG9mIGFsbG9jYXRlZCBncmFudHMgKGV2ZW4gaWYgYWxsb2MtaW9jdGxzIHdlcmUgcGVy Zm9ybWVkCisgKiAgICBpbmRpdmlkdWFsbHkpLCBldGMuCisgKgorICoKKyAqIEdyYW50IE1hcHBp bmcKKyAqCisgKiBTdGVwcyB0byBtYXAgYSBncmFudDoKKyAqIDEuIERvIGEgYElPQ1RMX0dOVERF Vl9NQVBfR1JBTlRfUkVGYCBpb2N0bCwgd2l0aAorICogICAgIC0gYGNvdW50YCwgYXMgdGhlIG51 bWJlciBvZiBmb3JlaWduIGdyYW50cyB0byBtYXAKKyAqICAgICAtIGByZWZzW2ldLmRvbWlkYCwg YXMgdGhlIGRvbWFpbiBpZCBvZiB0aGUgZm9yZWlnbiBkb21haW4KKyAqICAgICAtIGByZWZzW2ld LnJlZmAsIGFzIHRoZSBncmFudC1yZWYgZm9yIHRoZSBncmFudCB0byBiZSBtYXBwZWQKKyAqCisg KiAyLiBNbWFwIHRoZSBhZGRyZXNzIGdpdmVuIGluIGBpbmRleGAgYWZ0ZXIgYSBzdWNjZXNzZnVs IGlvY3RsLgorICogICAgVGhpcyB3aWxsIGdpdmUgeW91IGFjY2VzcyB0byB0aGUgbWFwcGVkIHBh Z2VzLgorICoKKyAqIE5vdGU6CisgKiAxLiBUaGUgbWFwIGh5cGVyY2FsbCBpcyBub3QgbWFkZSB0 aWxsIHRoZSByZWdpb24gaXMgbW1hcHBlZC4KKyAqIDIuIFRoZSB1bml0IGlzIGRlZmluZWQgYnkg dGhlIG1hcCBpb2N0bC4gVGhpcyBtZWFucyB0aGF0IG9ubHkgb25lCisgKiAgICB1bm1hcCBub3Rp ZmljYXRpb24gY2FuIGJlIHNldCBvbiBhIGdyb3VwIG9mIHBhZ2VzIHRoYXQgd2VyZQorICogICAg bWFwcGVkIHRvZ2V0aGVyIGluIG9uZSBpb2N0bCwgYW5kIGFsc28gbm8gc2luZ2xlIG1tYXBpbmcg b2YgY29udGlndW91cworICogICAgZ3JhbnQtbWFwcyBpcyBwb3NzaWJsZS4KKyAqIDMuIFlvdSBj YW4gbW1hcCB0aGUgc2FtZSBncmFudC1tYXAgcmVnaW9uIG11bHRpcGxlIHRpbWVzLgorICogNC4g VGhlIGdyYW50IGlzIG5vdCB1bm1hcHBlZCB1bnRpbCBib3RoIG9mIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUgbWV0CisgKiAgICAgLSBUaGUgcmVnaW9uIGlzIG5vdCBtbWFwZWQuIFRoYXQg aXMsIG11bm1hcCgpIGhhcyBiZWVuIGNhbGxlZCBmb3IKKyAqICAgICAgIGFzIG1hbnkgdGltZXMg YXMgdGhlIGdyYW50IHdhcyBtbWFwcGVkLgorICogICAgIC0gSU9DVExfR05UREVWX1VOTUFQX0dS QU5UX1JFRiBpb2N0bCBoYXMgYmVlbiBjYWxsZWQuCisgKiA1LiBJT0NUTF9HTlRERVZfR0VUX09G RlNFVF9GT1JfVkFERFIgaW9jdGwgZ2l2ZXMgaW5kZXggYW5kIGNvdW50IG9mCisgKiAgICBhIGdy YW50LW1hcCBmcm9tIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGxvY2F0aW9uIHdoZXJlIHRo ZSBncmFudAorICogICAgaXMgbW1hcHBlZC4KKyAqCisgKgorICogSU9DVExfR05UREVWX1NFVF9V Tk1BUF9OT1RJRlkKKyAqIFRoaXMgaW9jdGwgYWxsb3dzIHVzIHRvIHNldCBub3RpZmljYXRpb25z IHRvIGJlIG1hZGUgd2hlbiB0aGUgZ3JhbnQgaXMKKyAqIGVpdGhlciB1bm1hcHBlZCAoaW4gY2Fz ZSBvZiBhIG1hcHBlZCBncmFudCksIG9yIHdoZW4gaXQgaXMgcmVhZHkgdG8gYmUKKyAqIGRlYWxs b2NhdGVkIGJ5IHVzLCBpZSwgdGhlIGdyYW50IGlzIG5vIG1vcmUgbW1hcHBlZCwgYW5kIHRoZSBk ZWFsbG9jCisgKiBpb2N0bCBoYXMgYmVlbiBjYWxsZWQgKGluIGNhc2Ugb2YgYW4gYWxsb2NhdGVk IGdyYW50KS4gT1IgYGFjdGlvbmAgd2l0aAorICogdGhlIHJlcXVpcmVkIG5vdGlmaWNhdGlvbiBt YXNrcywgYW5kIGZpbGwgaW4gdGhlIGFwcHJvcHJpYXRlIGZpZWxkcy4KKyAqICAtIFVOTUFQX05P VElGWV9DTEVBUl9CWVRFIGNsZWFycyB0aGUgYnl0ZSBhdCBgaW5kZXhgLCB3aGVyZSBpbmRleCBp cworICogICAgdGhlIGFkZHJlc3Mgb2YgdGhlIGJ5dGUgaW4gZmlsZSBhZGRyZXNzIHNwYWNlLgor ICogIC0gVU5NQVBfTk9USUZZX1NFTkRfRVZFTlQgc2VuZHMgYW4gZXZlbnQgY2hhbm5lbCBub3Rp ZmljYXRpb24gb24KKyAqICAgIGBldmVudF9jaGFubmVsX3BvcnRgCisgKiBJbiBjYXNlIG9mIG11 bHRpcGxlIG5vdGlmeSBpb2N0bHMsIG9ubHkgdGhlIGxhc3Qgb25lIHN1cnZpdmVzLgorICoKKyAq LworCisjaWZuZGVmIF9fWEVOX0dOVERFVl9IX18KKyNkZWZpbmUgX19YRU5fR05UREVWX0hfXwor CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNkZWZpbmUgSU9DVExfR05UREVWX1NFVF9VTk1B UF9OT1RJRlkJCQkJCVwKKwlfSU9XKCdFJywgMCwgc3RydWN0IGlvY3RsX2dudGRldl91bm1hcF9u b3RpZnkpCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX25vdGlmeSB7CisgICAgLyogSU4gcGFy YW1ldGVycyAqLworICAgIHVpbnQ2NF90IGluZGV4OworICAgIHVpbnQzMl90IGFjdGlvbjsKKyAg ICB1aW50MzJfdCBldmVudF9jaGFubmVsX3BvcnQ7Cit9OworCisjZGVmaW5lIFVOTUFQX05PVElG WV9DTEVBUl9CWVRFIDB4MQorI2RlZmluZSBVTk1BUF9OT1RJRllfU0VORF9FVkVOVCAweDIKKwor LyotLS0tLS0tLS0tLS0tLS0tLS0tLSBHcmFudCBBbGxvY2F0aW9uIElPQ1RMcyAgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBJT0NUTF9HTlRERVZfQUxMT0NfR1JF RgkJCQkJCVwKKwlfSU9XUignRScsIDEsIHN0cnVjdCBpb2N0bF9nbnRkZXZfYWxsb2NfZ3JlZikK K3N0cnVjdCBpb2N0bF9nbnRkZXZfYWxsb2NfZ3JlZiB7CisgICAgLyogSU4gcGFyYW1ldGVycyAq LworICAgIHVpbnQxNl90IGRvbWlkOworICAgIHVpbnQxNl90IGZsYWdzOworICAgIHVpbnQzMl90 IGNvdW50OworICAgIC8qIE9VVCBwYXJhbWV0ZXJzICovCisgICAgdWludDY0X3QgaW5kZXg7Cisg ICAgLyogVmFyaWFibGUgT1VUIHBhcmFtZXRlciAqLworICAgIHVpbnQzMl90IGdyZWZfaWRzWzFd OworfTsKKworI2RlZmluZSBHTlRERVZfQUxMT0NfRkxBR19XUklUQUJMRSAxCisKKyNkZWZpbmUg SU9DVExfR05UREVWX0RFQUxMT0NfR1JFRgkJCQkJXAorCV9JT1coJ0UnLCAyLCBzdHJ1Y3QgaW9j dGxfZ250ZGV2X2RlYWxsb2NfZ3JlZikKK3N0cnVjdCBpb2N0bF9nbnRkZXZfZGVhbGxvY19ncmVm IHsKKyAgICAvKiBJTiBwYXJhbWV0ZXJzICovCisgICAgdWludDY0X3QgaW5kZXg7CisgICAgdWlu dDMyX3QgY291bnQ7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tIEdyYW50IE1hcHBpbmcg SU9DVExzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgaW9j dGxfZ250ZGV2X2dyYW50X3JlZiB7CisgICAgdWludDMyX3QgZG9taWQ7CisgICAgdWludDMyX3Qg cmVmOworfTsKKworI2RlZmluZSBJT0NUTF9HTlRERVZfTUFQX0dSQU5UX1JFRgkJCQkJXAorCV9J T1dSKCdFJywgMywgc3RydWN0IGlvY3RsX2dudGRldl9tYXBfZ3JhbnRfcmVmKQorc3RydWN0IGlv Y3RsX2dudGRldl9tYXBfZ3JhbnRfcmVmIHsKKyAgICAvKiBJTiBwYXJhbWV0ZXJzICovCisgICAg dWludDMyX3QgY291bnQ7CisgICAgdWludDMyX3QgcGFkMDsKKyAgICAvKiBPVVQgcGFyYW1ldGVy cyAqLworICAgIHVpbnQ2NF90IGluZGV4OworICAgIC8qIFZhcmlhYmxlIElOIHBhcmFtZXRlciAq LworICAgIHN0cnVjdCBpb2N0bF9nbnRkZXZfZ3JhbnRfcmVmIHJlZnNbMV07Cit9OworCisjZGVm aW5lIElPQ1RMX0dOVERFVl9VTk1BUF9HUkFOVF9SRUYJCQkJCVwKKwlfSU9XKCdFJywgNCwgc3Ry dWN0IGlvY3RsX2dudGRldl91bm1hcF9ncmFudF9yZWYpCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X3Vu bWFwX2dyYW50X3JlZiB7CisgICAgLyogSU4gcGFyYW1ldGVycyAqLworICAgIHVpbnQ2NF90IGlu ZGV4OworICAgIHVpbnQzMl90IGNvdW50OworfTsKKworI2RlZmluZSBJT0NUTF9HTlRERVZfR0VU X09GRlNFVF9GT1JfVkFERFIJCQkJXAorCV9JT1dSKCdFJywgNSwgc3RydWN0IGlvY3RsX2dudGRl dl9nZXRfb2Zmc2V0X2Zvcl92YWRkcikKK3N0cnVjdCBpb2N0bF9nbnRkZXZfZ2V0X29mZnNldF9m b3JfdmFkZHIgeworICAgIC8qIElOIHBhcmFtZXRlcnMgKi8KKyAgICB1aW50NjRfdCB2YWRkcjsK KyAgICAvKiBPVVQgcGFyYW1ldGVycyAqLworICAgIHVpbnQ2NF90IG9mZnNldDsKKyAgICB1aW50 MzJfdCBjb3VudDsKK307CisKKyNlbmRpZiAvKiBfX1hFTl9HTlRERVZfSF9fICovClwgTm8gbmV3 bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlicy9nbnR0YWIvTWFrZWZp bGUgYi90b29scy9saWJzL2dudHRhYi9NYWtlZmlsZQppbmRleCBhZjY0NTQyLi42OWJiMjA3IDEw MDY0NAotLS0gYS90b29scy9saWJzL2dudHRhYi9NYWtlZmlsZQorKysgYi90b29scy9saWJzL2du dHRhYi9NYWtlZmlsZQpAQCAtMTQsNyArMTQsNyBAQCBTUkNTLUdOVFNIUiAgICAgICAgICAgICs9 IGdudHNocl9jb3JlLmMKIAogU1JDUy0kKENPTkZJR19MaW51eCkgICArPSAkKFNSQ1MtR05UVEFC KSAkKFNSQ1MtR05UU0hSKSBsaW51eC5jCiBTUkNTLSQoQ09ORklHX01pbmlPUykgICs9ICQoU1JD Uy1HTlRUQUIpIGdudHNocl91bmltcC5jIG1pbmlvcy5jCi1TUkNTLSQoQ09ORklHX0ZyZWVCU0Qp ICs9IGdudHRhYl91bmltcC5jIGdudHNocl91bmltcC5jCitTUkNTLSQoQ09ORklHX0ZyZWVCU0Qp ICs9ICQoU1JDUy1HTlRUQUIpICQoU1JDUy1HTlRTSFIpIGZyZWVic2QuYwogU1JDUy0kKENPTkZJ R19TdW5PUykgICArPSBnbnR0YWJfdW5pbXAuYyBnbnRzaHJfdW5pbXAuYwogU1JDUy0kKENPTkZJ R19OZXRCU0QpICArPSBnbnR0YWJfdW5pbXAuYyBnbnRzaHJfdW5pbXAuYwogCmRpZmYgLS1naXQg YS90b29scy9saWJzL2dudHRhYi9mcmVlYnNkLmMgYi90b29scy9saWJzL2dudHRhYi9mcmVlYnNk LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0N2NlOAotLS0gL2Rldi9u dWxsCisrKyBiL3Rvb2xzL2xpYnMvZ250dGFiL2ZyZWVic2QuYwpAQCAtMCwwICsxLDMxOCBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4LCBEIEcgTXVycmF5IDxEZXJlay5NdXJyYXlA Y2wuY2FtLmFjLnVrPgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIEFrc2hheSBKYWdnaSA8 amFnZ2lARnJlZUJTRC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIHZlcnNpb24gMi4xIG9m IHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBTcGxpdCBvdXQgZnJvbSBsaW51 eC5jCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs dWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4K KyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUg PHN5cy9tbWFuLmg+CisKKyNpbmNsdWRlIDx4ZW4vc3lzL2dudGRldi5oPgorCisjaW5jbHVkZSAi cHJpdmF0ZS5oIgorCisjZGVmaW5lIERFVlhFTiAiL2Rldi94ZW4vZ250ZGV2IgorCisjZGVmaW5l IFJPVU5EVVAoX3gsX3cpICgoKHVuc2lnbmVkIGxvbmcpKF94KSsoMVVMPDwoX3cpKS0xKSAmIH4o KDFVTDw8KF93KSktMSkpCisKKyNkZWZpbmUgR1RFUlJPUihfbCwgX2YuLi4pIHh0bF9sb2coX2ws IFhUTF9FUlJPUiwgZXJybm8sICJnbnR0YWIiLCBfZikKKyNkZWZpbmUgR1NFUlJPUihfbCwgX2Yu Li4pIHh0bF9sb2coX2wsIFhUTF9FUlJPUiwgZXJybm8sICJnbnRzaHIiLCBfZikKKworI2RlZmlu ZSBQQUdFX1NISUZUICAgICAgICAgICAxMgorI2RlZmluZSBQQUdFX1NJWkUgICAgICAgICAgICAo MVVMIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfTUFTSyAgICAgICAgICAgICh+KFBBR0Vf U0laRS0xKSkKKworaW50IG9zZGVwX2dudHRhYl9vcGVuKHhlbmdudHRhYl9oYW5kbGUgKnhndCkK K3sKKyAgICBpbnQgZmQgPSBvcGVuKERFVlhFTiwgT19SRFdSfE9fQ0xPRVhFQyk7CisKKyAgICBp ZiAoIGZkID09IC0xICkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHhndC0+ZmQgPSBmZDsKKwor ICAgIHJldHVybiAwOworfQorCitpbnQgb3NkZXBfZ250dGFiX2Nsb3NlKHhlbmdudHRhYl9oYW5k bGUgKnhndCkKK3sKKworICAgIGlmICggeGd0LT5mZCA9PSAtMSApCisgICAgICAgIHJldHVybiAw OworCisgICAgcmV0dXJuIGNsb3NlKHhndC0+ZmQpOworfQorCitpbnQgb3NkZXBfZ250dGFiX3Nl dF9tYXhfZ3JhbnRzKHhlbmdudHRhYl9oYW5kbGUgKnhndCwgdWludDMyX3QgY291bnQpCit7CisK KyAgICByZXR1cm4gMDsKK30KKwordm9pZCAqb3NkZXBfZ250dGFiX2dyYW50X21hcCh4ZW5nbnR0 YWJfaGFuZGxlICp4Z3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNv dW50LCBpbnQgZmxhZ3MsIGludCBwcm90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCAqZG9taWRzLCB1aW50MzJfdCAqcmVmcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3Qgbm90aWZ5X29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXZ0Y2huX3BvcnRfdCBub3RpZnlfcG9ydCkKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgZmQg PSB4Z3QtPmZkOworICAgIHN0cnVjdCBpb2N0bF9nbnRkZXZfbWFwX2dyYW50X3JlZiAqbWFwOwor ICAgIHZvaWQgKmFkZHIgPSBOVUxMOworICAgIGludCBkb21pZHNfc3RyaWRlOworICAgIHVuc2ln bmVkIGludCBtYXBfc2l6ZSA9IFJPVU5EVVAoKHNpemVvZigqbWFwKSArIChjb3VudCAtIDEpICoK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW9jdGxf Z250ZGV2X21hcF9ncmFudF9yZWYpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBBR0VfU0hJRlQpOworCisgICAgZG9taWRzX3N0cmlkZSA9ICggZmxhZ3MgJiBYRU5HTlRU QUJfR1JBTlRfTUFQX1NJTkdMRV9ET01BSU4gKSA/IDAgOiAxOworICAgIGlmICggbWFwX3NpemUg PD0gUEFHRV9TSVpFICkKKyAgICAgICAgbWFwID0gbWFsbG9jKHNpemVvZigqbWFwKSArCisgICAg ICAgICAgICAgICAgICAgICAoY291bnQgLSAxKSAqIHNpemVvZihzdHJ1Y3QgaW9jdGxfZ250ZGV2 X21hcF9ncmFudF9yZWYpKTsKKyAgICBlbHNlCisgICAgeworICAgICAgICBtYXAgPSBtbWFwKE5V TEwsIG1hcF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorICAgICAgICAgICAgICAgICAg IE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAgICAgICAgaWYgKCBtYXAgPT0gTUFQ X0ZBSUxFRCApCisgICAgICAgIHsKKyAgICAgICAgICAgIEdURVJST1IoeGd0LT5sb2dnZXIsICJh bm9uIG1tYXAgb2YgbWFwIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKQorICAgIHsK KyAgICAgICAgbWFwLT5yZWZzW2ldLmRvbWlkID0gZG9taWRzW2kgKiBkb21pZHNfc3RyaWRlXTsK KyAgICAgICAgbWFwLT5yZWZzW2ldLnJlZiA9IHJlZnNbaV07CisgICAgfQorCisgICAgbWFwLT5j b3VudCA9IGNvdW50OworCisgICAgaWYgKCBpb2N0bChmZCwgSU9DVExfR05UREVWX01BUF9HUkFO VF9SRUYsIG1hcCkgKQorICAgIHsKKyAgICAgICAgR1RFUlJPUih4Z3QtPmxvZ2dlciwgImlvY3Rs IE1BUF9HUkFOVF9SRUYgZmFpbGVkIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAg IGFkZHIgPSBtbWFwKE5VTEwsIFBBR0VfU0laRSAqIGNvdW50LCBwcm90LCBNQVBfU0hBUkVELCBm ZCwKKyAgICAgICAgICAgICAgICBtYXAtPmluZGV4KTsKKyAgICBpZiAoIGFkZHIgIT0gTUFQX0ZB SUxFRCApCisgICAgeworICAgICAgICBpbnQgcnYgPSAwOworICAgICAgICBzdHJ1Y3QgaW9jdGxf Z250ZGV2X3VubWFwX25vdGlmeSBub3RpZnk7CisKKyAgICAgICAgbm90aWZ5LmluZGV4ID0gbWFw LT5pbmRleDsKKyAgICAgICAgbm90aWZ5LmFjdGlvbiA9IDA7CisgICAgICAgIGlmICggbm90aWZ5 X29mZnNldCA8IFBBR0VfU0laRSAqIGNvdW50ICkKKwl7CisgICAgICAgICAgICBub3RpZnkuaW5k ZXggKz0gbm90aWZ5X29mZnNldDsKKyAgICAgICAgICAgIG5vdGlmeS5hY3Rpb24gfD0gVU5NQVBf Tk9USUZZX0NMRUFSX0JZVEU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBub3RpZnlfcG9ydCAh PSAtMSApIHsKKyAgICAgICAgICAgIG5vdGlmeS5ldmVudF9jaGFubmVsX3BvcnQgPSBub3RpZnlf cG9ydDsKKyAgICAgICAgICAgIG5vdGlmeS5hY3Rpb24gfD0gVU5NQVBfTk9USUZZX1NFTkRfRVZF TlQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBub3RpZnkuYWN0aW9uICkKKyAgICAgICAgICAg IHJ2ID0gaW9jdGwoZmQsIElPQ1RMX0dOVERFVl9TRVRfVU5NQVBfTk9USUZZLCAmbm90aWZ5KTsK KyAgICAgICAgaWYgKCBydiApCisJeworICAgICAgICAgICAgR1RFUlJPUih4Z3QtPmxvZ2dlciwg ImlvY3RsIFNFVF9VTk1BUF9OT1RJRlkgZmFpbGVkIik7CisgICAgICAgICAgICBtdW5tYXAoYWRk ciwgY291bnQgKiBQQUdFX1NJWkUpOworICAgICAgICAgICAgYWRkciA9IE1BUF9GQUlMRUQ7Cisg ICAgICAgIH0KKyAgICB9CisgICAgaWYgKCBhZGRyID09IE1BUF9GQUlMRUQgKQorICAgIHsKKyAg ICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisgICAgICAgIHN0cnVjdCBpb2N0bF9nbnRk ZXZfdW5tYXBfZ3JhbnRfcmVmIHVubWFwX2dyYW50OworCisgICAgICAgIC8qIFVubWFwIHRoZSBk cml2ZXIgc2xvdHMgdXNlZCB0byBzdG9yZSB0aGUgZ3JhbnQgaW5mb3JtYXRpb24uICovCisgICAg ICAgIEdURVJST1IoeGd0LT5sb2dnZXIsICJtbWFwIGZhaWxlZCIpOworICAgICAgICB1bm1hcF9n cmFudC5pbmRleCA9IG1hcC0+aW5kZXg7CisgICAgICAgIHVubWFwX2dyYW50LmNvdW50ID0gY291 bnQ7CisgICAgICAgIGlvY3RsKGZkLCBJT0NUTF9HTlRERVZfVU5NQVBfR1JBTlRfUkVGLCAmdW5t YXBfZ3JhbnQpOworICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgICBhZGRyID0g TlVMTDsKKyAgICB9CisKKyBvdXQ6CisgICAgaWYgKCBtYXBfc2l6ZSA+IFBBR0VfU0laRSApCisg ICAgICAgIG11bm1hcChtYXAsIG1hcF9zaXplKTsKKyAgICBlbHNlCisgICAgICAgIGZyZWUobWFw KTsKKworICAgIHJldHVybiBhZGRyOworfQorCitpbnQgb3NkZXBfZ250dGFiX3VubWFwKHhlbmdu dHRhYl9oYW5kbGUgKnhndCwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3RhcnRfYWRk cmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY291bnQpCit7CisgICAgaW50 IHJjOworICAgIGludCBmZCA9IHhndC0+ZmQ7CisgICAgc3RydWN0IGlvY3RsX2dudGRldl91bm1h cF9ncmFudF9yZWYgdW5tYXBfZ3JhbnQ7CisgICAgc3RydWN0IGlvY3RsX2dudGRldl9nZXRfb2Zm c2V0X2Zvcl92YWRkciBnZXRfb2Zmc2V0OworCisgICAgaWYgKCBzdGFydF9hZGRyZXNzID09IE5V TEwgKQorICAgIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsK KyAgICB9CisKKyAgICAvKgorICAgICAqIEZpcnN0LCBpdCBpcyBuZWNlc3NhcnkgdG8gZ2V0IHRo ZSBvZmZzZXQgd2hpY2ggd2FzIGluaXRpYWxseSB1c2VkIHRvCisgICAgICogbW1hcCgpIHRoZSBw YWdlcy4KKyAgICAgKi8KKyAgICBnZXRfb2Zmc2V0LnZhZGRyID0gKHVuc2lnbmVkIGxvbmcpc3Rh cnRfYWRkcmVzczsKKyAgICBpZiAoIChyYyA9IGlvY3RsKGZkLCBJT0NUTF9HTlRERVZfR0VUX09G RlNFVF9GT1JfVkFERFIsCisgICAgICAgICAgICAgICAgICAgICAmZ2V0X29mZnNldCkpICkKKyAg ICAgICAgcmV0dXJuIHJjOworCisgICAgaWYgKCBnZXRfb2Zmc2V0LmNvdW50ICE9IGNvdW50ICkK KyAgICB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAg fQorCisgICAgLyogTmV4dCwgdW5tYXAgdGhlIG1lbW9yeS4gKi8KKyAgICBpZiAoIChyYyA9IG11 bm1hcChzdGFydF9hZGRyZXNzLCBjb3VudCAqIFBBR0VfU0laRSkpICkKKyAgICAgICAgcmV0dXJu IHJjOworCisgICAgLyogRmluYWxseSwgdW5tYXAgdGhlIGRyaXZlciBzbG90cyB1c2VkIHRvIHN0 b3JlIHRoZSBncmFudCBpbmZvcm1hdGlvbi4gKi8KKyAgICB1bm1hcF9ncmFudC5pbmRleCA9IGdl dF9vZmZzZXQub2Zmc2V0OworICAgIHVubWFwX2dyYW50LmNvdW50ID0gY291bnQ7CisgICAgaWYg KCAocmMgPSBpb2N0bChmZCwgSU9DVExfR05UREVWX1VOTUFQX0dSQU5UX1JFRiwgJnVubWFwX2dy YW50KSkgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IG9z ZGVwX2dudHNocl9vcGVuKHhlbmdudHNocl9oYW5kbGUgKnhncykKK3sKKworICAgIGludCBmZCA9 IG9wZW4oREVWWEVOLCBPX1JEV1IpOworICAgIGlmICggZmQgPT0gLTEgKQorICAgICAgICByZXR1 cm4gLTE7CisgICAgeGdzLT5mZCA9IGZkOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBvc2Rl cF9nbnRzaHJfY2xvc2UoeGVuZ250c2hyX2hhbmRsZSAqeGdzKQoreworCisgICAgaWYgKCB4Z3Mt PmZkID09IC0xICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY2xvc2UoeGdzLT5m ZCk7Cit9CisKK3ZvaWQgKm9zZGVwX2dudHNocl9zaGFyZV9wYWdlcyh4ZW5nbnRzaHJfaGFuZGxl ICp4Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsIGlu dCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcmVmcywg aW50IHdyaXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG5v dGlmeV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0Y2huX3BvcnRf dCBub3RpZnlfcG9ydCkKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBmZCA9IHhncy0+ZmQ7Cisg ICAgdm9pZCAqYXJlYSA9IE5VTEw7CisgICAgc3RydWN0IGlvY3RsX2dudGRldl91bm1hcF9ub3Rp Znkgbm90aWZ5OworICAgIHN0cnVjdCBpb2N0bF9nbnRkZXZfZGVhbGxvY19ncmVmIGdyZWZfZHJv cDsKKyAgICBzdHJ1Y3QgaW9jdGxfZ250ZGV2X2FsbG9jX2dyZWYgKmdyZWZfaW5mbyA9IE5VTEw7 CisKKyAgICBncmVmX2luZm8gPSBtYWxsb2Moc2l6ZW9mKCpncmVmX2luZm8pICsgY291bnQgKiBz aXplb2YodWludDMyX3QpKTsKKyAgICBpZiAoIGdyZWZfaW5mbyA9PSBOVUxMICkKKyAgICAgICAg cmV0dXJuIE5VTEw7CisgICAgZ3JlZl9pbmZvLT5kb21pZCA9IGRvbWlkOworICAgIGdyZWZfaW5m by0+ZmxhZ3MgPSB3cml0YWJsZSA/IEdOVERFVl9BTExPQ19GTEFHX1dSSVRBQkxFIDogMDsKKyAg ICBncmVmX2luZm8tPmNvdW50ID0gY291bnQ7CisKKyAgICBlcnIgPSBpb2N0bChmZCwgSU9DVExf R05UREVWX0FMTE9DX0dSRUYsIGdyZWZfaW5mbyk7CisgICAgaWYgKCBlcnIgKQorICAgIHsKKyAg ICAgICAgR1NFUlJPUih4Z3MtPmxvZ2dlciwgImlvY3RsIGZhaWxlZCIpOworICAgICAgICBnb3Rv IG91dDsKKyAgICB9CisKKyAgICBhcmVhID0gbW1hcChOVUxMLCBjb3VudCAqIFBBR0VfU0laRSwg UFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKyAgICAgICAgTUFQX1NIQVJFRCwgZmQsIGdyZWZfaW5m by0+aW5kZXgpOworCisgICAgaWYgKCBhcmVhID09IE1BUF9GQUlMRUQgKQorICAgIHsKKyAgICAg ICAgYXJlYSA9IE5VTEw7CisgICAgICAgIEdTRVJST1IoeGdzLT5sb2dnZXIsICJtbWFwIGZhaWxl ZCIpOworICAgICAgICBnb3RvIG91dF9yZW1vdmVfZmRtYXA7CisgICAgfQorCisgICAgbm90aWZ5 LmluZGV4ID0gZ3JlZl9pbmZvLT5pbmRleDsKKyAgICBub3RpZnkuYWN0aW9uID0gMDsKKyAgICBp ZiAoIG5vdGlmeV9vZmZzZXQgPCBQQUdFX1NJWkUgKiBjb3VudCApCisgICAgeworICAgICAgICBu b3RpZnkuaW5kZXggKz0gbm90aWZ5X29mZnNldDsKKyAgICAgICAgbm90aWZ5LmFjdGlvbiB8PSBV Tk1BUF9OT1RJRllfQ0xFQVJfQllURTsKKyAgICB9CisgICAgaWYgKCBub3RpZnlfcG9ydCAhPSAt MSApCisgICAgeworICAgICAgICBub3RpZnkuZXZlbnRfY2hhbm5lbF9wb3J0ID0gbm90aWZ5X3Bv cnQ7CisgICAgICAgIG5vdGlmeS5hY3Rpb24gfD0gVU5NQVBfTk9USUZZX1NFTkRfRVZFTlQ7Cisg ICAgfQorICAgIGlmICggbm90aWZ5LmFjdGlvbiApCisgICAgICAgIGVyciA9IGlvY3RsKGZkLCBJ T0NUTF9HTlRERVZfU0VUX1VOTUFQX05PVElGWSwgJm5vdGlmeSk7CisgICAgaWYgKCBlcnIgKQor ICAgIHsKKyAgICAgICAgR1NFUlJPUih4Z3MtPmxvZ2dlciwgImlvY3RsIFNFVF9VTk1BUF9OT1RJ RlkgZmFpbGVkIik7CisgICAgICAgIG11bm1hcChhcmVhLCBjb3VudCAqIFBBR0VfU0laRSk7Cisg ICAgICAgIGFyZWEgPSBOVUxMOworICAgIH0KKworICAgIG1lbWNweShyZWZzLCBncmVmX2luZm8t PmdyZWZfaWRzLCBjb3VudCAqIHNpemVvZih1aW50MzJfdCkpOworCisgb3V0X3JlbW92ZV9mZG1h cDoKKyAgICAvKgorICAgICAqIFJlbW92aW5nIHRoZSBtYXBwaW5nIGZyb20gdGhlIGZpbGUgZGVz Y3JpcHRvciBkb2VzIG5vdCBjYXVzZSB0aGUKKyAgICAgKiBwYWdlcyB0byBiZSBkZWFsbG9jYXRl ZCB1bnRpbCB0aGUgbWFwcGluZyBpcyByZW1vdmVkLgorICAgICAqLworICAgIGdyZWZfZHJvcC5p bmRleCA9IGdyZWZfaW5mby0+aW5kZXg7CisgICAgZ3JlZl9kcm9wLmNvdW50ID0gY291bnQ7Cisg ICAgaW9jdGwoZmQsIElPQ1RMX0dOVERFVl9ERUFMTE9DX0dSRUYsICZncmVmX2Ryb3ApOworIG91 dDoKKyAgICBmcmVlKGdyZWZfaW5mbyk7CisKKyAgICByZXR1cm4gYXJlYTsKK30KKworaW50IG9z ZGVwX2dudHNocl91bnNoYXJlKHhlbmdudHNocl9oYW5kbGUgKnhncywKKyAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpzdGFydF9hZGRyZXNzLCB1aW50MzJfdCBjb3VudCkKK3sKKworICAg IHJldHVybiBtdW5tYXAoc3RhcnRfYWRkcmVzcywgY291bnQgKiBQQUdFX1NJWkUpOworfQorCisv KgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNE IgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMt bW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuOC4yCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2 ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==