From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4339 invoked by alias); 6 Oct 2009 01:35:57 -0000 Received: (qmail 4327 invoked by uid 22791); 6 Oct 2009 01:35:51 -0000 X-SWARE-Spam-Status: No, hits=0.2 required=5.0 tests=AWL,BAYES_40,SARE_BAYES_5x8,SARE_BAYES_6x8,SARE_BAYES_7x8 X-Spam-Check-By: sourceware.org Received: from shell4.bayarea.net (HELO shell4.bayarea.net) (209.128.82.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 06 Oct 2009 01:35:42 +0000 Received: (qmail 12786 invoked from network); 5 Oct 2009 18:35:40 -0700 Received: from 209-128-106-254.bayarea.net (HELO redwood.eagercon.com) (209.128.106.254) by shell4.bayarea.net with SMTP; 5 Oct 2009 18:35:37 -0700 Message-ID: <4ACA9EE8.1040007@eagercon.com> Date: Tue, 06 Oct 2009 01:35:00 -0000 From: Michael Eager User-Agent: Thunderbird 2.0.0.23 (X11/20090825) MIME-Version: 1.0 To: "gdb-patches@sourceware.org" CC: Joel Brobecker , Eli Zaretskii Subject: [PATCH] Support for Xilinx MicroBlaze Content-Type: multipart/mixed; boundary="------------020601040508010607090309" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-10/txt/msg00113.txt.bz2 This is a multi-part message in MIME format. --------------020601040508010607090309 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1059 Revised patch. I believe that I have addressed all of the comments. 2009-10-05 Michael Eager * config/djgpp/fnchange.lst: Add translations for cpu-microblaze.c, elf32-microblaze.c, microblaze-rom.c, microblaze-linux-tdep.c, microblaze-tdep.h, microblaze-tdep.c, microblaze-opc.h, microblaze-opcm.h, microblaze-dis.c, microblaze-dis.h, sim/microblaze, microblaze.h, and microblaze.isa. * configure.tgt: Add targets microblaze*-linux-*, microblaze*-xilinx-*. * doc/gdb.texinfo: Add MicroBlaze. * MAINTAINERS: Add self as maintainer for MicroBlaze. * Makefile.in: Build microblaze-tdep.o, microblaze-linux-tdep.o. HFILES_NO_SRCDIR: Add microblaze-tdep.h. * microblaze-linux-tdep.c: New. * microblaze-rom.c: New. * microblaze-tdep.c: New. * microblaze-tdep.h: New. * NEWS: Announce Xilinx MicroBlaze support. There are some required changes to opcodes/microblaze* which I'll send to the Binutils list. -- Michael Eager eager@eagercon.com 1960 Park Blvd., Palo Alto, CA 94306 650-325-8077 --------------020601040508010607090309 Content-Type: text/plain; name="mb-gdb.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="mb-gdb.patch" Content-length: 74587 ZGlmZiAtdXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4Y2x1ZGUgREVWLVBI QVNFIC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMgZ2RiL2dkYi9jb25m aWcvZGpncHAvZm5jaGFuZ2UubHN0IG1iLWdkYi9nZGIvY29uZmlnL2RqZ3Bw L2ZuY2hhbmdlLmxzdAotLS0gZ2RiL2dkYi9jb25maWcvZGpncHAvZm5jaGFu Z2UubHN0CTIwMDktMDktMTkgMDI6NDY6NDQuMDAwMDAwMDAwIC0wNzAwCisr KyBtYi1nZGIvZ2RiL2NvbmZpZy9kamdwcC9mbmNoYW5nZS5sc3QJMjAwOS0x MC0wNSAxNzo0NDozMC4wMDAwMDAwMDAgLTA3MDAKQEAgLTE4LDYgKzE4LDcg QEAKIEBWQC9iZmQvY3B1LWNyMTYuYyBAVkAvYmZkL2NwdWNyMTYuYwogQFZA L2JmZC9jcHUtY3IxNmMuYyBAVkAvYmZkL2NwdWNyMTZjLmMKIEBWQC9iZmQv Y3B1LWlhNjQtb3BjLmMgQFZAL2JmZC9jcHVpYTY0LW9wYy5jCitAVkAvYmZk L2NwdS1taWNyb2JsYXplLmMgQFZAL2JmZC9jcHVtYi5jCiBAVkAvYmZkL2Nw dS1tNjhoYzExLmMgQFZAL2JmZC9jbTY4aGMxMS5jCiBAVkAvYmZkL2NwdS1t NjhoYzEyLmMgQFZAL2JmZC9jbTY4aGMxMi5jCiBAVkAvYmZkL2VmaS1hcHAt aWEzMi5jIEBWQC9iZmQvZWZpaWEzMmFwcC5jCkBAIC0zNCw2ICszNSw3IEBA CiBAVkAvYmZkL2VsZjMyLWZydi5jIEBWQC9iZmQvZWxmMzJmdi5jCiBAVkAv YmZkL2VsZjMyLWkzNzAuYyBAVkAvYmZkL2UzMmkzNzAuYwogQFZAL2JmZC9l bGYzMi1pMzg2LmMgQFZAL2JmZC9lMzJpODYuYworQFZAL2JmZC9lbGYzMi1t aWNyb2JsYXplLmMgQFZAZTMybWIuYwogQFZAL2JmZC9lbGYzMi1tMzJjLmMg QFZAL2JmZC9lbTMyYy5jCiBAVkAvYmZkL2VsZjMyLW0zMnIuYyBAVkAvYmZk L2VtMzJyLmMKIEBWQC9iZmQvZWxmMzItbTY4aGMxMS5jIEBWQC9iZmQvZW02 OGhjMTEuYwpAQCAtMjc5LDYgKzI4MSwxMCBAQAogQFZAL2dkYi9tNjhrYnNk LXRkZXAuYyBAVkAvZ2RiL202OGJzZC10ZGVwLmMKIEBWQC9nZGIvbTY4a25i c2QtbmF0LmMgQFZAL2dkYi9tNm5ic2QtbmF0LmMKIEBWQC9nZGIvbTY4a25i c2QtdGRlcC5jIEBWQC9nZGIvbTZuYnNkLXRkZXAuYworQFZAL2dkYi9taWNy b2JsYXplLXJvbS5jIEBWQC9nZGIvbWItcm9tLmMKK0BWQC9nZGIvbWljcm9i bGF6ZS1saW51eC10ZGVwLmMgQFZAL2dkYi9tYmwtdGRlcC5jCitAVkAvZ2Ri L21pY3JvYmxhemUtdGRlcC5oIEBWQC9nZGIvbWItdGRlcC5oCitAVkAvZ2Ri L21pY3JvYmxhemUtdGRlcC5jIEBWQC9nZGIvbWItdGRlcC5jCiBAVkAvZ2Ri L21pcHMtbGludXgtbmF0LmMgQFZAL2dkYi9taXBzbG54bmF0LmMKIEBWQC9n ZGIvbWlwcy1saW51eC10ZGVwLmMgQFZAL2dkYi9taXBzbG54dGRlcC5jCiBA VkAvZ2RiL21pcHNuYnNkLW5hdC5jIEBWQC9nZGIvbWlwc25ibmF0LmMKQEAg LTUxMSw2ICs1MTcsMTAgQEAKIEBWQC9vcGNvZGVzL2lhNjQtb3BjLmMgQFZA L29wY29kZXMvaWE2NC1vcGMuYwogQFZAL29wY29kZXMvaXEyMDAwLWRlc2Mu YyBAVkAvb3Bjb2Rlcy9pcTIwMDBkZXNjLmMKIEBWQC9vcGNvZGVzL2lxMjAw MC1kaXMuYyBAVkAvb3Bjb2Rlcy9pcTIwMDBkaXMuYworQFZAL29wY29kZXMv bWljcm9ibGF6ZS1vcGMuaCBAVkAvb3Bjb2Rlcy9tYi1vcGMuaAorQFZAL29w Y29kZXMvbWljcm9ibGF6ZS1kaXMuYyBAVkAvb3Bjb2Rlcy9tYi1kaXMuYwor QFZAL29wY29kZXMvbWljcm9ibGF6ZS1kaXMuaCBAVkAvb3Bjb2Rlcy9tYi1k aXMuaAorQFZAL29wY29kZXMvbWljcm9ibGF6ZS1vcGNtLmggQFZAL29wY29k ZXMvbWItb3BjbS5oCiBAVkAvb3Bjb2Rlcy9tNjhoYzExLWRpcy5jIEBWQC9v cGNvZGVzL202OGhjMTFkaXMuYwogQFZAL29wY29kZXMvbTY4aGMxMS1vcGMu YyBAVkAvb3Bjb2Rlcy9tNjhoYzExb3BjLmMKIEBWQC9vcGNvZGVzL21pY3Jv YmxhemUtb3BjLmggQFZAL29wY29kZXMvbWJsLW9wYy5oCkBAIC01NDAsNiAr NTUwLDkgQEAKIEBWQC9zaW0vZnJ2L3Byb2ZpbGUtZnI1MDAuaCBAVkAvc2lt L2Zydi9mcjUwMC1wcm9maWxlLmgKIEBWQC9zaW0vZnJ2L3Byb2ZpbGUtZnI1 NTAuYyBAVkAvc2ltL2Zydi9mcjU1MC1wcm9maWxlLmMKIEBWQC9zaW0vZnJ2 L3Byb2ZpbGUtZnI1NTAuaCBAVkAvc2ltL2Zydi9mcjU1MC1wcm9maWxlLmgK K0BWQC9zaW0vbWljcm9ibGF6ZSBAVkAvc2ltL21iCitAVkAvc2ltL21pY3Jv YmxhemUvbWljcm9ibGF6ZS5oIEBWQC9zaW0vbWIvbWIuaAorQFZAL3NpbS9t aWNyb2JsYXplL21pY3JvYmxhemUuaXNhIEBWQC9zaW0vbWIvbWIuaXNhCiBA VkAvc2ltL202OGhjMTEvZHYtbTY4aGMxMWVlcHIuYyBAVkAvc2ltL202OGhj MTEvZHYtZWVwci5jCiBAVkAvc2ltL202OGhjMTEvZHYtbTY4aGMxMXNpby5j IEBWQC9zaW0vbTY4aGMxMS9kdi1zaW8uYwogQFZAL3NpbS9tNjhoYzExL2R2 LW02OGhjMTFzcGkuYyBAVkAvc2ltL202OGhjMTEvZHYtc3BpLmMKZGlmZiAt dXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4Y2x1ZGUgREVWLVBIQVNFIC0t ZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMgZ2RiL2dkYi9jb25maWd1cmUu dGd0IG1iLWdkYi9nZGIvY29uZmlndXJlLnRndAotLS0gZ2RiL2dkYi9jb25m aWd1cmUudGd0CTIwMDktMDktMjcgMTM6NDY6MzUuMDAwMDAwMDAwIC0wNzAw CisrKyBtYi1nZGIvZ2RiL2NvbmZpZ3VyZS50Z3QJMjAwOS0xMC0wNSAxMDo1 Mjo0Ny4wMDAwMDAwMDAgLTA3MDAKQEAgLTMxMyw2ICszMTMsMTkgQEAgbWVw LSotKikKIAkjIE5vIHNpbSBuZWVkZWQuIFRhcmdldCB1c2VzIFNJRC4KIAk7 OwogCittaWNyb2JsYXplKi1saW51eC0qKQorCSMgVGFyZ2V0OiBYaWxpbngg TWljcm9CbGF6ZSBydW5uaW5nIExpbnV4CisJZ2RiX3RhcmdldF9vYnM9Im1p Y3JvYmxhemUtdGRlcC5vIG1pY3JvYmxhemUtbGludXgtdGRlcC5vIG1pY3Jv YmxhemUtcm9tLm8gXAorCQkJbW9uaXRvci5vIGRzcmVjLm8gc29saWIubyBz b2xpYi1zdnI0Lm8gY29yZWxvdy5vIFwKKwkJCXN5bWZpbGUtbWVtLm8iCisJ Z2RiX3NpbT0uLi9zaW0vbWljcm9ibGF6ZS9saWJzaW0uYQorCTs7CittaWNy b2JsYXplKi14aWxpbngtKikKKwkjIFRhcmdldDogWGlsaW54IE1pY3JvQmxh emUgcnVubmluZyBzdGFuZGFsb25lCisJZ2RiX3RhcmdldF9vYnM9Im1pY3Jv YmxhemUtdGRlcC5vIG1pY3JvYmxhemUtcm9tLm8gbW9uaXRvci5vIGRzcmVj Lm8iCisJZ2RiX3NpbT0uLi9zaW0vbWljcm9ibGF6ZS9saWJzaW0uYQorCTs7 CisKIG1pcHMqLXNnaS1pcml4NSopCiAJIyBUYXJnZXQ6IE1JUFMgU0dJIHJ1 bm5pbmcgSXJpeCA1CiAJZ2RiX3RhcmdldF9vYnM9Im1pcHMtdGRlcC5vIG1p cHMtaXJpeC10ZGVwLm8gc29saWIubyBzb2xpYi1pcml4Lm8iCmRpZmYgLXVy TnAgLS1leGNsdWRlICcqLnN3cCcgLS1leGNsdWRlIERFVi1QSEFTRSAtLWV4 Y2x1ZGUgLnN2biAtLWV4Y2x1ZGUgQ1ZTIGdkYi9nZGIvZG9jL2dkYi50ZXhp bmZvIG1iLWdkYi9nZGIvZG9jL2dkYi50ZXhpbmZvCi0tLSBnZGIvZ2RiL2Rv Yy9nZGIudGV4aW5mbwkyMDA5LTEwLTA0IDEwOjM3OjU3LjAwMDAwMDAwMCAt MDcwMAorKysgbWItZ2RiL2dkYi9kb2MvZ2RiLnRleGluZm8JMjAwOS0xMC0w NSAxMDo1Mjo1Ni4wMDAwMDAwMDAgLTA3MDAKQEAgLTUxNyw2ICs1MTcsOSBA QCBUZW5zaWxpY2EsIEluYy5AOiBjb250cmlidXRlZCBzdXBwb3J0IGZvCiB3 aG8gaGF2ZSB3b3JrZWQgb24gdGhlIFh0ZW5zYSBwb3J0IG9mIEB2YWx1ZXtH REJOfSBpbiB0aGUgcGFzdCBpbmNsdWRlCiBTdGV2ZSBUamlhbmcsIEpvaG4g TmV3bGluLCBhbmQgU2NvdHQgRm9laG5lci4KIAorTWljaGFlbCBFYWdlciBh bmQgc3RhZmYgb2YgWGlsaW54LCBJbmMuLCBjb250cmlidXRlZCBzdXBwb3J0 IGZvciB0aGUKK1hpbGlueCBNaWNyb0JsYXplIGFyY2hpdGVjdHVyZS4KKwog QG5vZGUgU2FtcGxlIFNlc3Npb24KIEBjaGFwdGVyIEEgU2FtcGxlIEB2YWx1 ZXtHREJOfSBTZXNzaW9uCiAKQEAgLTE2NTcwLDYgKzE2NTczLDcgQEAgYWNj ZXB0YWJsZSBjb21tYW5kcy4KICogQVJNOjogICAgICAgICAgICAgICAgICAg ICAgICAgQVJNIFJESQogKiBNMzJSL0Q6OiAgICAgICAgICAgICAgICAgICAg ICBSZW5lc2FzIE0zMlIvRAogKiBNNjhLOjogICAgICAgICAgICAgICAgICAg ICAgICBNb3Rvcm9sYSBNNjhLCisqIE1pY3JvQmxhemU6OgkJCVhpbGlueCBN aWNyb0JsYXplCiAqIE1JUFMgRW1iZWRkZWQ6OiAgICAgICAgICAgICAgIE1J UFMgRW1iZWRkZWQKICogT3BlblJJU0MgMTAwMDo6ICAgICAgICAgICAgICAg T3BlblJpc2MgMTAwMAogKiBQQTo6ICAgICAgICAgICAgICAgICAgICAgICAg ICBIUCBQQSBFbWJlZGRlZApAQCAtMTY4MjEsNiArMTY4MjUsNDQgQEAgZEJV RyBST00gbW9uaXRvciBmb3IgTW90b3JvbGEgQ29sZEZpcmUuCiAKIEBlbmQg dGFibGUKIAorQG5vZGUgTWljcm9CbGF6ZQorQHN1YnNlY3Rpb24gTWljcm9C bGF6ZQorQGNpbmRleCBYaWxpbnggTWljcm9CbGF6ZQorQGNpbmRleCBYTUQs IFhpbGlueCBNaWNyb3Byb2Nlc3NvciBEZWJ1Z2dlcgorCitUaGUgTWljcm9C bGF6ZSBpcyBhIHNvZnQtY29yZSBwcm9jZXNzb3Igc3VwcG9ydGVkIG9uIHZh cmlvdXMgWGlsaW54CitGUEdBcywgc3VjaCBhcyBTcGFydGFuIG9yIFZpcnRl eCBzZXJpZXMuICBCb2FyZHMgd2l0aCB0aGVzZSBwcm9jZXNzb3JzCit1c3Vh bGx5IGhhdmUgSlRBRyBwb3J0cyB3aGljaCBjb25uZWN0IHRvIGEgaG9zdCBz eXN0ZW0gcnVubmluZyB0aGUgWGlsaW54CitFbWJlZGRlZCBEZXZlbG9wbWVu dCBLaXQgKEVESykgb3IgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREsp LgorVGhpcyBob3N0IHN5c3RlbSBpcyB1c2VkIHRvIGRvd25sb2FkIHRoZSBj b25maWd1cmF0aW9uIGJpdHN0cmVhbSB0bwordGhlIHRhcmdldCBGUEdBLiAg VGhlIFhpbGlueCBNaWNyb3Byb2Nlc3NvciBEZWJ1Z2dlciAoWE1EKSBwcm9n cmFtCitjb21tdW5pY2F0ZXMgd2l0aCB0aGUgdGFyZ2V0IGJvYXJkIHVzaW5n IHRoZSBKVEFHIGludGVyZmFjZSBhbmQKK3ByZXNlbnRzIGEgQGNvZGV7Z2Ri c2VydmVyfSBpbnRlcmZhY2UgdG8gdGhlIGJvYXJkLiAgQnkgZGVmYXVsdAor QGNvZGV7eG1kfSB1c2VzIHBvcnQgQGNvZGV7MTIzNH0uICAoV2hpbGUgaXQg aXMgcG9zc2libGUgdG8gY2hhbmdlIAordGhpcyBkZWZhdWx0IHBvcnQsIGl0 IHJlcXVpcmVzIHRoZSB1c2Ugb2YgdW5kb2N1bWVudGVkIEBjb2Rle3htZH0g Citjb21tYW5kcy4gIENvbnRhY3QgWGlsaW54IHN1cHBvcnQgaWYgeW91IG5l ZWQgdG8gZG8gdGhpcy4pCisKK1VzZSB0aGVzZSBHREIgY29tbWFuZHMgdG8g Y29ubmVjdCB0byB0aGUgTWljcm9CbGF6ZSB0YXJnZXQgcHJvY2Vzc29yLgor CitAdGFibGUgQGNvZGUKK0BpdGVtIHRhcmdldCByZW1vdGUgOjEyMzQKK1Vz ZSB0aGlzIGNvbW1hbmQgdG8gY29ubmVjdCB0byB0aGUgdGFyZ2V0IGlmIHlv dSBhcmUgcnVubmluZyBAdmFsdWV7R0RCTn0KK29uIHRoZSBzYW1lIHN5c3Rl bSBhcyBAY29kZXt4bWR9LgorCitAaXRlbSB0YXJnZXQgcmVtb3RlIEB2YXJ7 eG1kLWhvc3R9OjEyMzQKK1VzZSB0aGlzIGNvbW1hbmQgdG8gY29ubmVjdCB0 byB0aGUgdGFyZ2V0IGlmIGl0IGlzIGNvbm5lY3RlZCB0byBAY29kZXt4bWR9 CitydW5uaW5nIG9uIGEgZGlmZmVyZW50IHN5c3RlbSBuYW1lZCBAdmFye3ht ZC1ob3N0fS4KKworQGl0ZW0gbG9hZAorVXNlIHRoaXMgY29tbWFuZCB0byBk b3dubG9hZCBhIHByb2dyYW0gdG8gdGhlIE1pY3JvQmxhemUgdGFyZ2V0Lgor CitAaXRlbSBzZXQgZGVidWcgbWljcm9ibGF6ZSBAdmFye259CitFbmFibGUg TWljcm9CbGF6ZS1zcGVjaWZpYyBkZWJ1Z2dpbmcgbWVzc2FnZXMgaWYgbm9u LXplcm8uCisKK0BpdGVtIHNob3cgZGVidWcgbWljcm9ibGF6ZSBAdmFye259 CitTaG93IE1pY3JvQmxhemUtc3BlY2lmaWMgZGVidWdnaW5nIGxldmVsLgor QGVuZCB0YWJsZQorCiBAbm9kZSBNSVBTIEVtYmVkZGVkCiBAc3Vic2VjdGlv biBNSVBTIEVtYmVkZGVkCiAKZGlmZiAtdXJOcCAtLWV4Y2x1ZGUgJyouc3dw JyAtLWV4Y2x1ZGUgREVWLVBIQVNFIC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVk ZSBDVlMgZ2RiL2dkYi9NQUlOVEFJTkVSUyBtYi1nZGIvZ2RiL01BSU5UQUlO RVJTCi0tLSBnZGIvZ2RiL01BSU5UQUlORVJTCTIwMDktMTAtMDEgMTY6MTE6 MDIuMDAwMDAwMDAwIC0wNzAwCisrKyBtYi1nZGIvZ2RiL01BSU5UQUlORVJT CTIwMDktMTAtMDUgMTA6NTI6NDYuMDAwMDAwMDAwIC0wNzAwCkBAIC0yOTAs NiArMjkwLDEwIEBAIHRoZSBuYXRpdmUgbWFpbnRhaW5lciB3aGVuIHJlc29s dmluZyBBQkkKIAltZXAJCS0tdGFyZ2V0PW1lcC1lbGYgLC1XZXJyb3IKIAkJ CUtldmluIEJ1ZXR0bmVyCQlrZXZpbmJAcmVkaGF0LmNvbQogCisJbWljcm9i bGF6ZQktLXRhcmdldD1taWNyb2JsYXplLXhpbGlueC1lbGYgLC1XZXJyb3IK KwkJCS0tdGFyZ2V0PW1pY3JvYmxhemUtbGludXgtZ251ICwtV2Vycm9yCisJ CQlNaWNoYWVsIEVhZ2VyCQllYWdlckBlYWdlcmNvbi5jb20KKwogCW1pcHMJ CS0tdGFyZ2V0PW1pcHMtZWxmICwtV2Vycm9yCiAKIAltbjEwMzAwCQktLXRh cmdldD1tbjEwMzAwLWVsZiBicm9rZW4KZGlmZiAtdXJOcCAtLWV4Y2x1ZGUg Jyouc3dwJyAtLWV4Y2x1ZGUgREVWLVBIQVNFIC0tZXhjbHVkZSAuc3ZuIC0t ZXhjbHVkZSBDVlMgZ2RiL2dkYi9NYWtlZmlsZS5pbiBtYi1nZGIvZ2RiL01h a2VmaWxlLmluCi0tLSBnZGIvZ2RiL01ha2VmaWxlLmluCTIwMDktMDktMTYg MTQ6NTU6NTcuMDAwMDAwMDAwIC0wNzAwCisrKyBtYi1nZGIvZ2RiL01ha2Vm aWxlLmluCTIwMDktMTAtMDUgMTE6NTk6MjEuMDAwMDAwMDAwIC0wNzAwCkBA IC01MDEsNiArNTAxLDcgQEAgQUxMX1RBUkdFVF9PQlMgPSBcCiAJbTY4a2Jz ZC10ZGVwLm8gbTY4a2xpbnV4LXRkZXAubyBtNjhrLXRkZXAubyBcCiAJbTg4 ay10ZGVwLm8gXAogCW1lcC10ZGVwLm8gXAorCW1pY3JvYmxhemUtdGRlcC5v IG1pY3JvYmxhemUtbGludXgtdGRlcC5vIFwKIAltaXBzLWlyaXgtdGRlcC5v IG1pcHMtbGludXgtdGRlcC5vIFwKIAltaXBzbmJzZC10ZGVwLm8gbWlwcy10 ZGVwLm8gXAogCW1uMTAzMDAtbGludXgtdGRlcC5vIG1uMTAzMDAtdGRlcC5v IFwKQEAgLTc1MCw3ICs3NTEsNyBAQCBjb25maWcvcnM2MDAwL25tLXJzNjAw MC5oIHRvcC5oIGJzZC1rdm0uCiBhbm5vdGF0ZS5oIHNpbS1yZWduby5oIGRp Y3Rpb25hcnkuaCBkZnAuaCBtYWluLmggZnJhbWUtdW53aW5kLmgJXAogcmVt b3RlLWZpbGVpby5oIGkzODYtbGludXgtdGRlcC5oIHZheC10ZGVwLmggb2Jq Yy1sYW5nLmggXAogc2VudGluZWwtZnJhbWUuaCBiY2FjaGUuaCBzeW1maWxl Lmggd2luZG93cy10ZGVwLmggbGludXgtdGRlcC5oIFwKLWdkYl91c2xlZXAu aCBqaXQuaCB4bWwtc3lzY2FsbC5oIGFkYS1vcGVyYXRvci5pbmMKK2dkYl91 c2xlZXAuaCBqaXQuaCB4bWwtc3lzY2FsbC5oIGFkYS1vcGVyYXRvci5pbmMg bWljcm9ibGF6ZS10ZGVwLmgKIAogIyBIZWFkZXIgZmlsZXMgdGhhdCBhbHJl YWR5IGhhdmUgc3JjZGlyIGluIHRoZW0sIG9yIHdoaWNoIGFyZSBpbiBvYmpk aXIuCiAKQEAgLTE0MzQsNiArMTQzNSw3IEBAIEFMTERFUEZJTEVTID0gXAog CW02OGtic2QtbmF0LmMgbTY4a2JzZC10ZGVwLmMgXAogCW02OGtsaW51eC1u YXQuYyBtNjhrbGludXgtdGRlcC5jIFwKIAltODhrLXRkZXAuYyBtODhrYnNk LW5hdC5jIFwKKwltaWNyb2JsYXplLXRkZXAuYyBtaWNyb2JsYXplLWxpbnV4 LXRkZXAuYyBcCiAJbWluZ3ctaGRlcC5jIFwKIAltaXBzLWxpbnV4LW5hdC5j IG1pcHMtbGludXgtdGRlcC5jIFwKIAltaXBzLWlyaXgtdGRlcC5jIFwKZGlm ZiAtdXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4Y2x1ZGUgREVWLVBIQVNF IC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMgZ2RiL2dkYi9taWNyb2Js YXplLWxpbnV4LXRkZXAuYyBtYi1nZGIvZ2RiL21pY3JvYmxhemUtbGludXgt dGRlcC5jCi0tLSBnZGIvZ2RiL21pY3JvYmxhemUtbGludXgtdGRlcC5jCTE5 NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBtYi1nZGIv Z2RiL21pY3JvYmxhemUtbGludXgtdGRlcC5jCTIwMDktMDktMzAgMTE6NTE6 MzguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMTQyIEBACisvKiBUYXJn ZXQtZGVwZW5kZW50IGNvZGUgZm9yIFhpbGlueCBNaWNyb0JsYXplLgorCisg ICBDb3B5cmlnaHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAiZGVmcy5oIgorI2lu Y2x1ZGUgImZyYW1lLmgiCisjaW5jbHVkZSAiaW5mZXJpb3IuaCIKKyNpbmNs dWRlICJzeW10YWIuaCIKKyNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRl ICJnZGJjb3JlLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisjaW5jbHVkZSAi c3ltZmlsZS5oIgorI2luY2x1ZGUgIm9iamZpbGVzLmgiCisjaW5jbHVkZSAi cmVnY2FjaGUuaCIKKyNpbmNsdWRlICJ2YWx1ZS5oIgorI2luY2x1ZGUgIm9z YWJpLmgiCisjaW5jbHVkZSAicmVnc2V0LmgiCisjaW5jbHVkZSAic29saWIt c3ZyNC5oIgorI2luY2x1ZGUgIm1pY3JvYmxhemUtdGRlcC5oIgorI2luY2x1 ZGUgInRyYWQtZnJhbWUuaCIKKyNpbmNsdWRlICJmcmFtZS11bndpbmQuaCIK KyNpbmNsdWRlICJ0cmFtcC1mcmFtZS5oIgorCisKK3N0YXRpYyBpbnQKK21p Y3JvYmxhemVfbGludXhfbWVtb3J5X3JlbW92ZV9icmVha3BvaW50IChzdHJ1 Y3QgYnBfdGFyZ2V0X2luZm8gKmJwX3RndCkKK3sKKyAgQ09SRV9BRERSIGFk ZHIgPSBicF90Z3QtPnBsYWNlZF9hZGRyZXNzOworICBjb25zdCBnZGJfYnl0 ZSAqYnA7CisgIGludCB2YWw7CisgIGludCBicGxlbjsKKyAgZ2RiX2J5dGUg b2xkX2NvbnRlbnRzW0JSRUFLUE9JTlRfTUFYXTsKKworICAvKiBEZXRlcm1p bmUgYXBwcm9wcmlhdGUgYnJlYWtwb2ludCBjb250ZW50cyBhbmQgc2l6ZSBm b3IgdGhpcyBhZGRyZXNzLiAgKi8KKyAgYnAgPSBnZGJhcmNoX2JyZWFrcG9p bnRfZnJvbV9wYyAoZ2RiYXJjaCwgJmFkZHIsICZicGxlbik7CisgIGlmIChi cCA9PSBOVUxMKQorICAgIGVycm9yIChfKCJTb2Z0d2FyZSBicmVha3BvaW50 cyBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgdGFyZ2V0LiIpKTsKKworICB2 YWwgPSB0YXJnZXRfcmVhZF9tZW1vcnkgKGFkZHIsIG9sZF9jb250ZW50cywg YnBsZW4pOworCisgIC8qIElmIG91ciBicmVha3BvaW50IGlzIG5vIGxvbmdl ciBhdCB0aGUgYWRkcmVzcywgdGhpcyBtZWFucyB0aGF0IHRoZQorICAgICBw cm9ncmFtIG1vZGlmaWVkIHRoZSBjb2RlIG9uIHVzLCBzbyBpdCBpcyB3cm9u ZyB0byBwdXQgYmFjayB0aGUKKyAgICAgb2xkIHZhbHVlLiAgKi8KKyAgaWYg KHZhbCA9PSAwICYmIG1lbWNtcCAoYnAsIG9sZF9jb250ZW50cywgYnBsZW4p ID09IDApCisgICAgdmFsID0gdGFyZ2V0X3dyaXRlX21lbW9yeSAoYWRkciwg YnBfdGd0LT5zaGFkb3dfY29udGVudHMsIGJwbGVuKTsKKworICByZXR1cm4g dmFsOworfQorCitzdGF0aWMgdm9pZAorbWljcm9ibGF6ZV9saW51eF9zaWd0 cmFtcF9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUsCisJ CQkJIHN0cnVjdCB0cmFkX2ZyYW1lX2NhY2hlICp0aGlzX2NhY2hlLAorCQkJ CSBDT1JFX0FERFIgZnVuYywgTE9OR0VTVCBvZmZzZXQsCisJCQkJIGludCBi aWFzKQoreworICBDT1JFX0FERFIgYmFzZTsKKyAgQ09SRV9BRERSIGdwcmVn czsKKyAgaW50IHJlZ251bTsKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gg PSBnZXRfZnJhbWVfYXJjaCAobmV4dF9mcmFtZSk7CisgIHN0cnVjdCBnZGJh cmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworCisg IGJhc2UgPSBmcmFtZV91bndpbmRfcmVnaXN0ZXJfdW5zaWduZWQgKG5leHRf ZnJhbWUsIFNQX1JFR05VTSk7CisgIGlmIChiaWFzID4gMCAmJiBmcmFtZV9w Y191bndpbmQgKG5leHRfZnJhbWUpICE9IGZ1bmMpCisgICAgLyogU2VlIGJl bG93LCBzb21lIHNpZ25hbCB0cmFtcG9saW5lcyBpbmNyZW1lbnQgdGhlIHN0 YWNrIGFzIHRoZWlyCisgICAgICAgZmlyc3QgaW5zdHJ1Y3Rpb24sIG5lZWQg dG8gY29tcGVuc2F0ZSBmb3IgdGhhdC4gICovCisgICAgYmFzZSAtPSBiaWFz OworCisgIC8qIEZpbmQgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIGJ1 ZmZlci4gICovCisgIGdwcmVncyA9IGJhc2UgKyBvZmZzZXQ7CisKKyAgLyog UmVnaXN0ZXJzIHNhdmVkIG9uIHN0YWNrLiAgKi8KKyAgZm9yIChyZWdudW0g PSAwOyByZWdudW0gPCBNSUNST0JMQVpFX0JUUl9SRUdOVU07IHJlZ251bSsr KQorICAgIHRyYWRfZnJhbWVfc2V0X3JlZ19hZGRyICh0aGlzX2NhY2hlLCBy ZWdudW0sIAorCQkJICAgICBncHJlZ3MgKyByZWdudW0gKiBNSUNST0JMQVpF X1JFR0lTVEVSX1NJWkUpOworICB0cmFkX2ZyYW1lX3NldF9pZCAodGhpc19j YWNoZSwgZnJhbWVfaWRfYnVpbGQgKGJhc2UsIGZ1bmMpKTsKK30KKworCitz dGF0aWMgdm9pZAorbWljcm9ibGF6ZV9saW51eF9zaWdoYW5kbGVyX2NhY2hl X2luaXQgKGNvbnN0IHN0cnVjdCB0cmFtcF9mcmFtZSAqc2VsZiwKKwkJCQkJ c3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUsCisJCQkJCXN0cnVjdCB0 cmFkX2ZyYW1lX2NhY2hlICp0aGlzX2NhY2hlLAorCQkJCQlDT1JFX0FERFIg ZnVuYykKK3sKKyAgbWljcm9ibGF6ZV9saW51eF9zaWd0cmFtcF9jYWNoZSAo bmV4dF9mcmFtZSwgdGhpc19jYWNoZSwgZnVuYywKKwkJCQkgICAwIC8qIE9m ZnNldCB0byB1Y29udGV4dF90LiAgKi8KKwkJCQkgICArIDI0IC8qIE9mZnNl dCB0byAucmVnLiAgKi8sCisJCQkJICAgMCk7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgdHJhbXBfZnJhbWUgbWljcm9ibGF6ZV9saW51eF9zaWdoYW5kbGVyX3Ry YW1wX2ZyYW1lID0gCit7CisgIFNJR1RSQU1QX0ZSQU1FLAorICA0LAorICB7 CisgICAgeyAweDMxODAwMDc3LCAtMSB9LCAvKiBhZGRpayBSMTIsUjAsMTE5 LiAgKi8KKyAgICB7IDB4YjljYzAwMDgsIC0xIH0sIC8qIGJya2kgUjE0LDgu ICAqLworICAgIHsgVFJBTVBfU0VOVElORUxfSU5TTiB9LAorICB9LAorICBt aWNyb2JsYXplX2xpbnV4X3NpZ2hhbmRsZXJfY2FjaGVfaW5pdAorfTsKKwor CitzdGF0aWMgdm9pZAorbWljcm9ibGF6ZV9saW51eF9pbml0X2FiaSAoc3Ry dWN0IGdkYmFyY2hfaW5mbyBpbmZvLAorCQkJICAgc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gpCit7CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBn ZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworCisgIHNldF9nZGJhcmNoX21lbW9y eV9yZW1vdmVfYnJlYWtwb2ludCAoZ2RiYXJjaCwKKwkJCQkJbWljcm9ibGF6 ZV9saW51eF9tZW1vcnlfcmVtb3ZlX2JyZWFrcG9pbnQpOworCisgIC8qIFNo YXJlZCBsaWJyYXJ5IGhhbmRsaW5nLiAgKi8KKyAgc2V0X3NvbGliX3N2cjRf ZmV0Y2hfbGlua19tYXBfb2Zmc2V0cyAoZ2RiYXJjaCwKKwkJCQkJIHN2cjRf aWxwMzJfZmV0Y2hfbGlua19tYXBfb2Zmc2V0cyk7CisKKyAgLyogVHJhbXBv bGluZXMuICAqLworICB0cmFtcF9mcmFtZV9wcmVwZW5kX3Vud2luZGVyIChn ZGJhcmNoLAorCQkJCSZtaWNyb2JsYXplX2xpbnV4X3NpZ2hhbmRsZXJfdHJh bXBfZnJhbWUpOworfQorCit2b2lkCitfaW5pdGlhbGl6ZV9taWNyb2JsYXpl X2xpbnV4X3RkZXAgKHZvaWQpCit7CisgIGdkYmFyY2hfcmVnaXN0ZXJfb3Nh YmkgKGJmZF9hcmNoX21pY3JvYmxhemUsIDAsIEdEQl9PU0FCSV9MSU5VWCwg CisJCQkgIG1pY3JvYmxhemVfbGludXhfaW5pdF9hYmkpOworfQpkaWZmIC11 ck5wIC0tZXhjbHVkZSAnKi5zd3AnIC0tZXhjbHVkZSBERVYtUEhBU0UgLS1l eGNsdWRlIC5zdm4gLS1leGNsdWRlIENWUyBnZGIvZ2RiL21pY3JvYmxhemUt cm9tLmMgbWItZ2RiL2dkYi9taWNyb2JsYXplLXJvbS5jCi0tLSBnZGIvZ2Ri L21pY3JvYmxhemUtcm9tLmMJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAw MDAgLTA4MDAKKysrIG1iLWdkYi9nZGIvbWljcm9ibGF6ZS1yb20uYwkyMDA5 LTA5LTMwIDEwOjQ5OjAwLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDE5 MSBAQAorLyogUmVtb3RlIGRlYnVnZ2luZyBpbnRlcmZhY2UgdG8gWGlsaW54 IE1pY3JvQmxhemUuCisKKyAgIENvcHlyaWdodCAyMDA5IEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBv ZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNs dWRlICJkZWZzLmgiCisjaW5jbHVkZSAiZ2RiY29yZS5oIgorI2luY2x1ZGUg InRhcmdldC5oIgorI2luY2x1ZGUgIm1vbml0b3IuaCIKKyNpbmNsdWRlICJn ZGJfc3RyaW5nLmgiCisjaW5jbHVkZSAic2VyaWFsLmgiCisjaW5jbHVkZSAi cmVnY2FjaGUuaCIKKworc3RhdGljIGNoYXIgKnBpY29idWdfaW5pdHNbXSA9 Cit7IlxyIiwgTlVMTH07CisKK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyBw aWNvYnVnX29wczsKK3N0YXRpYyBzdHJ1Y3QgbW9uaXRvcl9vcHMgcGljb2J1 Z19jbWRzOworCisvKiBQaWNvYnVnIG9ubHkgc3VwcG9ydHMgYSBzdWJzZXQg b2YgcmVnaXN0ZXJzIGZyb20gTUNvcmUuIEluIHJlYWxpdHksCisgICBpdCBk b2Vzbid0IHN1cHBvcnQgc3MxLCBlaXRoZXIuICAqLworc3RhdGljIGNoYXIg KnBpY29idWdfcmVnbmFtZXNbXSA9IHsKKyAgInIwIiwgICAicjEiLCAgICJy MiIsICAgInIzIiwgICAicjQiLCAgICJyNSIsICAgInI2IiwgICAicjciLAor ICAicjgiLCAgICJyOSIsICAgInIxMCIsICAicjExIiwgICJyMTIiLCAgInIx MyIsICAicjE0IiwgICJyMTUiLAorICAwLCAgICAgIDAsICAgICAgMCwgICAg ICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsCisgIDAsICAg ICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAs ICAgICAgMCwKKyAgInBzciIsICAidmJyIiwgICJlcHNyIiwgImZwc3IiLCAi ZXBjIiwgICJmcGMiLCAgMCwgICAgICAic3MxIiwKKyAgInNzMiIsICAic3Mz IiwgICJzczQiLCAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAw LAorICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAg MCwgICAgICAwLCAgICAgIDAsCisgIDAsICAgICAgMCwgICAgICAwLCAgICAg IDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMCwKKyAgInBjIiB9 OworCisKKworc3RhdGljIHZvaWQKK3BpY29idWdfb3BlbiAoY2hhciAqYXJn cywgaW50IGZyb21fdHR5KQoreworICBtb25pdG9yX29wZW4gKGFyZ3MsICZw aWNvYnVnX2NtZHMsIGZyb21fdHR5KTsKK30KKy8qIFdlIGNob29zZSB0byB3 cml0ZSBvdXIgb3duIGR1bXByZWdzIHJvdXRpbmUsIHNpbmNlIHRoZSBvdXRw dXQgb2YKKyAgIHRoZSByZWdpc3RlciBkdW1waW5nIGlzIHJhdGhlciBkaWZm aWN1bHQgdG8gZW5jYXBzdWxhdGUgaW4gYQorICAgcmVnZXhwOgorCitwaWNv YnVnPiByZAorICAgICBwYyAyZjAwMDMxZSAgICAgIGVwYyAyZjAwMDMxZSAg ICAgIGZwYyAwMDAwMDAwMAorICAgIHBzciA4MDAwMDEwMSAgICAgZXBzciA4 MDAwMDEwMSAgICAgZnBzciAwMDAwMDAwMAorc3MwLXNzNCBiYWQwYmVlZiAw MDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAgICAgIHZiciAz MDAwNWMwMAorICByMC1yNyAyZjBmZmY0YyAwMDAwMDA5MCAwMDAwMDAwMSAw MDAwMDAwMiAwMDAwMDAwMyAwMDAwMDAwNCAwMDAwMDAwNSAwMDAwMDAwNgor IHI4LXIxNSAyZjBmZmY2NCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAw MDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAyZjAwMDMxZQorKi8KKworc3Rh dGljIGludAorcGljb2J1Z19kdW1wcmVncyAoc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSkKK3sKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRf cmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpOworICBjaGFyIGJ1ZlsxMDI0XTsK KyAgaW50IHJlc3BfbGVuOworICBjaGFyICpwOworCisgIC8qIFNlbmQgdGhl IGR1bXAgcmVnaXN0ZXIgY29tbWFuZCB0byB0aGUgbW9uaXRvciBhbmQKKyAg ICAgZ2V0IHRoZSByZXBseS4gICovCisgIG1vbml0b3JfcHJpbnRmIChwaWNv YnVnX2NtZHMuZHVtcF9yZWdpc3RlcnMpOworICByZXNwX2xlbiA9IG1vbml0 b3JfZXhwZWN0X3Byb21wdCAoYnVmLCBzaXplb2YgKGJ1ZikpOworCisgIHAg PSBzdHJ0b2sgKGJ1ZiwgIiBcdFxyXG4iKTsKKyAgd2hpbGUgKHApCisgICAg eworICAgICAgaWYgKHN0cmNociAocCwgJy0nKSkKKwl7CisJICAvKiBnb3Qg YSByYW5nZS4gZWl0aGVyIHIwLXI3LCByOC1yMTUgb3Igc3MwLXNzNC4gICov CisJICBpZiAoc3RybmNtcCAocCwgInIwIiwgMikgPT0gMCB8fCBzdHJuY21w IChwLCAicjgiLCAyKSA9PSAwKQorCSAgICB7CisJICAgICAgaW50IHJuID0g KHBbMV0gPT0gJzAnID8gMCA6IDgpOworCSAgICAgIGludCBpID0gMDsKKwor CSAgICAgIC8qIEdldCB0aGUgbmV4dCA4IHZhbHVlcyBhbmQgcmVjb3JkIHRo ZW0uICAqLworCSAgICAgIHdoaWxlIChpIDwgOCkKKwkJeworCQkgIHAgPSBz dHJ0b2sgKE5VTEwsICIgXHRcclxuIik7CisJCSAgaWYgKHApCisJCSAgICBt b25pdG9yX3N1cHBseV9yZWdpc3RlciAocmVnY2FjaGUsIHJuICsgaSwgcCk7 CisJCSAgaSsrOworCQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKHN0cm5jbXAg KHAsICJzcyIsIDIpID09IDApCisJICAgIHsKKwkgICAgICAvKiBnZXQgdGhl IG5leHQgZml2ZSB2YWx1ZXMsIGlnbm9yaW5nIHRoZSBmaXJzdC4gICovCisJ ICAgICAgaW50IHJuOworCSAgICAgIHAgPSBzdHJ0b2sgKE5VTEwsICIgXHRc clxuIik7CisJICAgICAgZm9yIChybiA9IDM5OyBybiA8IDQzOyBybisrKQor CQl7CisJCSAgcCA9IHN0cnRvayAoTlVMTCwgIiBcdFxyXG4iKTsKKwkJICBp ZiAocCkKKwkJICAgIG1vbml0b3Jfc3VwcGx5X3JlZ2lzdGVyIChyZWdjYWNo ZSwgcm4sIHApOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAg ICAgIGJyZWFrOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8q IFNpbXBsZSByZWdpc3RlciB0eXBlLCBwYWlyZWQuICAqLworCSAgY2hhciAq bmFtZSA9IHA7CisJICBpbnQgaTsKKworCSAgLyogR2V0IGFuZCByZWNvcmQg dmFsdWUuICAqLworCSAgcCA9IHN0cnRvayAoTlVMTCwgIiBcdFxyXG4iKTsK KwkgIGlmIChwKQorCSAgICB7CisJICAgICAgZm9yIChpID0gMDsgaSA8IGdk YmFyY2hfbnVtX3JlZ3MgKGdkYmFyY2gpOyBpKyspCisJCXsKKwkJICBpZiAo cGljb2J1Z19yZWduYW1lc1tpXQorCQkgICAgICAmJiAoc3RyY21wIChwaWNv YnVnX3JlZ25hbWVzW2ldLCBuYW1lKSA9PSAwKSkKKwkJICAgIGJyZWFrOwor CQl9CisKKwkgICAgICBpZiAoaSA8PSBnZGJhcmNoX251bV9yZWdzIChnZGJh cmNoKSkKKwkJbW9uaXRvcl9zdXBwbHlfcmVnaXN0ZXIgKHJlZ2NhY2hlLCBp LCBwKTsKKwkgICAgfQorCX0KKyAgICAgIHAgPSBzdHJ0b2sgKE5VTEwsICIg XHRcclxuIik7CisgICAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0aWMg dm9pZAoraW5pdF9waWNvYnVnX2NtZHMgKHZvaWQpCit7CisgIHBpY29idWdf Y21kcy5mbGFncyA9IE1PX0dFVE1FTV9ORUVEU19SQU5HRSB8IE1PX0NMUl9C UkVBS19VU0VTX0FERFIKKwkJICAgICAgIHwgTU9fUFJJTlRfUFJPR1JBTV9P VVRQVVQ7CisKKyAgcGljb2J1Z19jbWRzLmluaXQgPSBwaWNvYnVnX2luaXRz OwkJLyogSW5pdCBzdHJpbmdzCQkqLworICBwaWNvYnVnX2NtZHMuY29udCA9 ICJnXG4iOwkJCS8qIGNvbnRpbnVlIGNvbW1hbmQJKi8KKyAgcGljb2J1Z19j bWRzLnN0ZXAgPSAic1xuIjsJCQkvKiBzaW5nbGUgc3RlcAkJKi8KKyAgcGlj b2J1Z19jbWRzLnNldF9icmVhayA9ICJiciAleFxuIjsJCS8qIHNldCBhIGJy ZWFrcG9pbnQJKi8KKyAgcGljb2J1Z19jbWRzLmNscl9icmVhayA9ICJub2Jy ICV4XG4iOwkJLyogY2xlYXIgYSBicmVha3BvaW50CSovCisgIHBpY29idWdf Y21kcy5jbHJfYWxsX2JyZWFrID0gIm5vYnJcbiI7CS8qIGNsZWFyIGFsbCBi cmVha3BvaW50cyAqLworICBwaWNvYnVnX2NtZHMuc2V0bWVtLmNtZGIgPSAi bW0gJXggJXggO2JcbiI7CS8qIHNldG1lbS5jbWRiIChhZGRyLCB2YWx1ZSkg Ki8KKyAgcGljb2J1Z19jbWRzLnNldG1lbS5jbWR3ID0gIm1tICV4ICV4IDto XG4iOwkvKiBzZXRtZW0uY21kdyAoYWRkciwgdmFsdWUpICovCisgIHBpY29i dWdfY21kcy5zZXRtZW0uY21kbCA9ICJtbSAleCAleCA7d1xuIjsJLyogc2V0 bWVtLmNtZGwgKGFkZHIsIHZhbHVlKSAqLworICBwaWNvYnVnX2NtZHMuZ2V0 bWVtLmNtZGIgPSAibWQgJXggJXhcbiI7CS8qIGdldG1lbS5jbWRiIChzdGFy dCBhZGRyLAorCQkJCQkJICAgZW5kIGFkZHIpIAkJKi8KKyAgcGljb2J1Z19j bWRzLmdldG1lbS5yZXNwX2RlbGltID0gIjoiOwkJLyogZ2V0bWVtLnJlc3Bf ZGVsaW0JKi8KKyAgcGljb2J1Z19jbWRzLnNldHJlZy5jbWQgPSAicm0gJXMg JXhcbiI7CS8qIHNldHJlZy5jbWQgKG5hbWUsIHZhbHVlKSAqLworICBwaWNv YnVnX2NtZHMuZ2V0cmVnLmNtZCA9ICJyZCAlc1xuIjsJCS8qIGdldHJlZy5j bWQgKG5hbWUpCSovCisgIHBpY29idWdfY21kcy5nZXRyZWcucmVzcF9kZWxp bSA9ICI6IjsJCS8qIGdldHJlZy5yZXNwX2RlbGltCSovCisgIHBpY29idWdf Y21kcy5kdW1wX3JlZ2lzdGVycyA9ICJyZFxuIjsJCS8qIGR1bXBfcmVnaXN0 ZXJzCSovCisgIHBpY29idWdfY21kcy5kdW1wcmVncyA9IHBpY29idWdfZHVt cHJlZ3M7CS8qIGR1bXAgcmVnaXN0ZXJzIHBhcnNlciAqLworICBwaWNvYnVn X2NtZHMubG9hZCA9ICJsb1xuIjsJCQkvKiBkb3dubG9hZCBjb21tYW5kCSov CisgIHBpY29idWdfY21kcy5wcm9tcHQgPSAicGljb2J1Zz4gIjsJCS8qIG1v bml0b3IgY29tbWFuZCBwcm9tcHQgKi8KKyAgcGljb2J1Z19jbWRzLmxpbmVf dGVybSA9ICJcbiI7CQkvKiBlbmQtb2YtbGluZSB0ZXJtaW5hdG9yICovCisg IHBpY29idWdfY21kcy50YXJnZXQgPSAmcGljb2J1Z19vcHM7CQkvKiB0YXJn ZXQgb3BlcmF0aW9ucwkqLworICBwaWNvYnVnX2NtZHMuc3RvcGJpdHMgPSBT RVJJQUxfMV9TVE9QQklUUzsJLyogbnVtYmVyIG9mIHN0b3AgYml0cwkqLwor ICBwaWNvYnVnX2NtZHMucmVnbmFtZXMgPSBwaWNvYnVnX3JlZ25hbWVzOwkv KiByZWdpc3RlcnMgbmFtZXMJKi8KKyAgcGljb2J1Z19jbWRzLm51bV9icmVh a3BvaW50cyA9IDIwOwkJLyogbnVtYmVyIG9mIGJyZWFrcG9pbnRzICovCisg IHBpY29idWdfY21kcy5tYWdpYyA9IE1PTklUT1JfT1BTX01BR0lDOwkvKiBt YWdpYwkJKi8KK30KKwordm9pZAorX2luaXRpYWxpemVfcGljb2J1Z19yb20g KCkKK3sKKyAgaW50IGk7CisKKyAgLyogSW5pdGlhbGl6ZSBtMzJyIFJldkMg bW9uaXRvciB0YXJnZXQuICAqLworICBpbml0X3BpY29idWdfY21kcyAoKTsK KyAgaW5pdF9tb25pdG9yX29wcyAoJnBpY29idWdfb3BzKTsKKyAgcGljb2J1 Z19vcHMudG9fc2hvcnRuYW1lID0gInBpY29idWciOworICBwaWNvYnVnX29w cy50b19sb25nbmFtZSA9ICJwaWNvYnVnIG1vbml0b3IiOworICBwaWNvYnVn X29wcy50b19kb2MgPSAiRGVidWcgdmlhIHRoZSBwaWNvYnVnIG1vbml0b3Iu XG5cCitTcGVjaWZ5IHRoZSBzZXJpYWwgZGV2aWNlIGl0IGlzIGNvbm5lY3Rl ZCB0byAoZS5nLiAvZGV2L3R0eWEpLiI7CisgIHBpY29idWdfb3BzLnRvX29w ZW4gPSBwaWNvYnVnX29wZW47CisKKyAgYWRkX3RhcmdldCAoJnBpY29idWdf b3BzKTsKK30KZGlmZiAtdXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4Y2x1 ZGUgREVWLVBIQVNFIC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMgZ2Ri L2dkYi9taWNyb2JsYXplLXRkZXAuYyBtYi1nZGIvZ2RiL21pY3JvYmxhemUt dGRlcC5jCi0tLSBnZGIvZ2RiL21pY3JvYmxhemUtdGRlcC5jCTE5NjktMTIt MzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBtYi1nZGIvZ2RiL21p Y3JvYmxhemUtdGRlcC5jCTIwMDktMTAtMDUgMTQ6MDk6MDIuMDAwMDAwMDAw IC0wNzAwCkBAIC0wLDAgKzEsODc3IEBACisvKiBUYXJnZXQtZGVwZW5kZW50 IGNvZGUgZm9yIFhpbGlueCBNaWNyb0JsYXplLgorCisgICBDb3B5cmlnaHQg MjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhp cyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uICAqLworCisjaW5jbHVkZSAiZGVmcy5oIgorI2luY2x1ZGUgImFyY2gt dXRpbHMuaCIKKyNpbmNsdWRlICJkaXMtYXNtLmgiCisjaW5jbHVkZSAiZnJh bWUuaCIKKyNpbmNsdWRlICJ0cmFkLWZyYW1lLmgiCisjaW5jbHVkZSAic3lt dGFiLmgiCisjaW5jbHVkZSAidmFsdWUuaCIKKyNpbmNsdWRlICJnZGJjbWQu aCIKKyNpbmNsdWRlICJicmVha3BvaW50LmgiCisjaW5jbHVkZSAiaW5mZXJp b3IuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgInRhcmdl dC5oIgorI2luY2x1ZGUgImZyYW1lLmgiCisjaW5jbHVkZSAiZnJhbWUtYmFz ZS5oIgorI2luY2x1ZGUgImZyYW1lLXVud2luZC5oIgorI2luY2x1ZGUgImR3 YXJmMi1mcmFtZS5oIgorI2luY2x1ZGUgIm9zYWJpLmgiCisKKyNpbmNsdWRl ICJnZGJfYXNzZXJ0LmgiCisjaW5jbHVkZSAiZ2RiX3N0cmluZy5oIgorI2lu Y2x1ZGUgInRhcmdldC1kZXNjcmlwdGlvbnMuaCIKKyNpbmNsdWRlICJvcGNv ZGVzL21pY3JvYmxhemUtb3BjbS5oIgorI2luY2x1ZGUgIm9wY29kZXMvbWlj cm9ibGF6ZS1kaXMuaCIKKyNpbmNsdWRlICJtaWNyb2JsYXplLXRkZXAuaCIK KwwKKy8qIEluc3RydWN0aW9uIG1hY3JvcyB1c2VkIGZvciBhbmFseXppbmcg dGhlIHByb2xvZ3VlLiAgKi8KKy8qIFRoaXMgc2V0IG9mIGluc3RydWN0aW9u IG1hY3JvcyBuZWVkIHRvIGJlIGNoYW5nZWQgd2hlbmV2ZXIgdGhlCisgICBw cm9sb2d1ZSBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIGNvdWxkIGhhdmUg bW9yZSBpbnN0cnVjdGlvbnMgb3IKKyAgIGRpZmZlcmVudCB0eXBlIG9mIGlu c3RydWN0aW9ucy4KKyAgIFRoaXMgc2V0IGFsc28gbmVlZHMgdG8gYmUgdmVy aWZpZWQgaWYgaXQgaXMgY29tcGxldGUuICAqLworI2RlZmluZSBJU19SRVRV Uk4ob3ApIChvcCA9PSBydHNkIHx8IG9wID09IHJ0aWQpCisjZGVmaW5lIElT X1VQREFURV9TUChvcCwgcmQsIHJhKSBcCisJKChvcCA9PSBhZGRpayB8fCBv cCA9PSBhZGRpKSAmJiByZCA9PSBSRUdfU1AgJiYgcmEgPT0gUkVHX1NQKQor I2RlZmluZSBJU19TUElMTF9TUChvcCwgcmQsIHJhKSBcCisJKChvcCA9PSBz d2kgfHwgb3AgPT0gc3cpICYmIHJkID09IFJFR19TUCAmJiByYSA9PSBSRUdf U1ApCisjZGVmaW5lIElTX1NQSUxMX1JFRyhvcCwgcmQsIHJhKSBcCisJKChv cCA9PSBzd2kgfHwgb3AgPT0gc3cpICYmIHJkICE9IFJFR19TUCAmJiByYSA9 PSBSRUdfU1ApCisjZGVmaW5lIElTX0FMU09fU1BJTExfUkVHKG9wLCByZCwg cmEsIHJiKSBcCisJKChvcCA9PSBzd2kgfHwgb3AgPT0gc3cpICYmIHJkICE9 IFJFR19TUCAmJiByYSA9PSAwICYmIHJiID09IFJFR19TUCkKKyNkZWZpbmUg SVNfU0VUVVBfRlAob3AsIHJhLCByYikgXAorCSgob3AgPT0gYWRkIHx8IG9w ID09IGFkZGlrIHx8IG9wID09IGFkZGspICYmIHJhID09IFJFR19TUCAmJiBy YiA9PSAwKQorI2RlZmluZSBJU19TUElMTF9SRUdfRlAob3AsIHJkLCByYSwg ZnByZWdudW0pIFwKKwkoKG9wID09IHN3aSB8fCBvcCA9PSBzdykgJiYgcmQg IT0gUkVHX1NQICYmIHJhID09IGZwcmVnbnVtICYmIHJhICE9IDApCisjZGVm aW5lIElTX1NBVkVfSElEREVOX1BUUihvcCwgcmQsIHJhLCByYikgXAorCSgo b3AgPT0gYWRkIHx8IG9wID09IGFkZGlrKSAmJiByYSA9PSBNSUNST0JMQVpF X0ZJUlNUX0FSR1JFRyAmJiByYiA9PSAwKQorCisvKiBBbGwgcmVnaXN0ZXJz IGFyZSAzMiBiaXRzLiAgKi8KKyNkZWZpbmUgTUlDUk9CTEFaRV9SRUdJU1RF Ul9TSVpFIDQKKworLyogVGhlIHJlZ2lzdGVycyBvZiB0aGUgWGlsaW54IG1p Y3JvYmxhemUgcHJvY2Vzc29yLiAgKi8KKworc3RhdGljIGNvbnN0IGNoYXIg Km1pY3JvYmxhemVfcmVnaXN0ZXJfbmFtZXNbXSA9Cit7CisgICJyMCIsICAg InIxIiwgICJyMiIsICAgICJyMyIsICAgInI0IiwgICAicjUiLCAgICJyNiIs ICAgInI3IiwKKyAgInI4IiwgICAicjkiLCAgInIxMCIsICAgInIxMSIsICAi cjEyIiwgICJyMTMiLCAgInIxNCIsICAicjE1IiwKKyAgInIxNiIsICAicjE3 IiwgInIxOCIsICAgInIxOSIsICAicjIwIiwgICJyMjEiLCAgInIyMiIsICAi cjIzIiwKKyAgInIyNCIsICAicjI1IiwgInIyNiIsICAgInIyNyIsICAicjI4 IiwgICJyMjkiLCAgInIzMCIsICAicjMxIiwKKyAgInJwYyIsICAicm1zciIs ICJyZWFyIiwgInJlc3IiLCAicmZzciIsICJyYnRyIiwKKyAgInJwdnIwIiwg InJwdnIxIiwgInJwdnIyIiwgInJwdnIzIiwgInJwdnI0IiwgInJwdnI1Iiwg InJwdnI2IiwKKyAgInJwdnI3IiwgInJwdnI4IiwgInJwdnI5IiwgInJwdnIx MCIsICJycHZyMTEiLAorICAicmVkciIsICJycGlkIiwgInJ6cHIiLCAicnRs YngiLCAicnRsYnN4IiwgInJ0bGJsbyIsICJydGxiaGkiCit9OworCisjZGVm aW5lIE1JQ1JPQkxBWkVfTlVNX1JFR1MgQVJSQVlfU0laRSAobWljcm9ibGF6 ZV9yZWdpc3Rlcl9uYW1lcykKKwwKK3N0YXRpYyBpbnQgbWljcm9ibGF6ZV9k ZWJ1ZyA9IDA7CisKKyNkZWZpbmUgbWljcm9ibGF6ZV9pbnNuX2RlYnVnKGFy Z3MpIFwKKwl7IGlmIChtaWNyb2JsYXplX2RlYnVnKSB7IHByaW50Zl9maWx0 ZXJlZCBhcmdzOyB9IH0KKwwKKy8qIFJldHVybiB0aGUgbmFtZSBvZiByZWdp c3RlciBSRUdOVU0uICAqLworCitzdGF0aWMgY29uc3QgY2hhciAqCittaWNy b2JsYXplX3JlZ2lzdGVyX25hbWUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNo LCBpbnQgcmVnbnVtKQoreworICBpZiAocmVnbnVtID49IDAgJiYgcmVnbnVt IDwgTUlDUk9CTEFaRV9OVU1fUkVHUykKKyAgICByZXR1cm4gbWljcm9ibGF6 ZV9yZWdpc3Rlcl9uYW1lc1tyZWdudW1dOworICByZXR1cm4gTlVMTDsKK30K Kworc3RhdGljIHN0cnVjdCB0eXBlICoKK21pY3JvYmxhemVfcmVnaXN0ZXJf dHlwZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCByZWdudW0pCit7 CisgIGlmIChyZWdudW0gPT0gTUlDUk9CTEFaRV9TUF9SRUdOVU0pCisgICAg cmV0dXJuIGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCktPmJ1aWx0aW5fZGF0YV9w dHI7CisKKyAgaWYgKHJlZ251bSA9PSBNSUNST0JMQVpFX1BDX1JFR05VTSkK KyAgICByZXR1cm4gYnVpbHRpbl90eXBlIChnZGJhcmNoKS0+YnVpbHRpbl9m dW5jX3B0cjsKKworICByZXR1cm4gYnVpbHRpbl90eXBlIChnZGJhcmNoKS0+ YnVpbHRpbl9pbnQ7Cit9CisKKwwKKy8qIEZldGNoIHRoZSBpbnN0cnVjdGlv biBhdCBQQy4gICovCisKK3Vuc2lnbmVkIGxvbmcKK21pY3JvYmxhemVfZmV0 Y2hfaW5zdHJ1Y3Rpb24gKENPUkVfQUREUiBwYykKK3sKKyAgZW51bSBiZmRf ZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIgKHRhcmdl dF9nZGJhcmNoKTsKKyAgZ2RiX2J5dGUgYnVmWzRdOworCisgIC8qIElmIHdl IGNhbid0IHJlYWQgdGhlIGluc3RydWN0aW9uIGF0IFBDLCByZXR1cm4gemVy by4gICovCisgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKHBjLCBidWYsIHNp emVvZiAoYnVmKSkpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIGV4dHJh Y3RfdW5zaWduZWRfaW50ZWdlciAoYnVmLCA0LCBieXRlX29yZGVyKTsKK30K KwwKKworc3RhdGljIENPUkVfQUREUgorbWljcm9ibGF6ZV9wdXNoX2R1bW15 X2NvZGUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIgc3As CisJCQkgICAgQ09SRV9BRERSIGZ1bmNhZGRyLAorCQkJICAgIHN0cnVjdCB2 YWx1ZSAqKmFyZ3MsIGludCBuYXJncywKKwkJCSAgICBzdHJ1Y3QgdHlwZSAq dmFsdWVfdHlwZSwKKwkJCSAgICBDT1JFX0FERFIgKnJlYWxfcGMsIENPUkVf QUREUiAqYnBfYWRkciwKKwkJCSBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hl KQoreworICBlcnJvciAoXygicHVzaF9kdW1teV9jb2RlIG5vdCBpbXBsZW1l bnRlZCIpKTsKKyAgcmV0dXJuIHNwOworfQorCisKK3N0YXRpYyBDT1JFX0FE RFIKK21pY3JvYmxhemVfcHVzaF9kdW1teV9jYWxsIChzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCwgc3RydWN0IHZhbHVlICpmdW5jdGlvbiwKKwkJCSAgICBz dHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBDT1JFX0FERFIgYnBfYWRkciwK KwkJCSAgICBpbnQgbmFyZ3MsIHN0cnVjdCB2YWx1ZSAqKmFyZ3MsIENPUkVf QUREUiBzcCwKKwkJCSAgICBpbnQgc3RydWN0X3JldHVybiwgQ09SRV9BRERS IHN0cnVjdF9hZGRyKQoreworICBlcnJvciAoXygic3RvcmVfYXJndW1lbnRz IG5vdCBpbXBsZW1lbnRlZCIpKTsKKyAgcmV0dXJuIHNwOworfQorCitzdGF0 aWMgY29uc3QgZ2RiX2J5dGUgKgorbWljcm9ibGF6ZV9icmVha3BvaW50X2Zy b21fcGMgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FERFIgKnBj LCAKKwkJCSAgICAgICBpbnQgKmxlbikKK3sKKyAgc3RhdGljIGdkYl9ieXRl IGJyZWFrX2luc25bXSA9IE1JQ1JPQkxBWkVfQlJFQUtQT0lOVDsKKworICAq bGVuID0gc2l6ZW9mIChicmVha19pbnNuKTsKKyAgcmV0dXJuIGJyZWFrX2lu c247Cit9CisMCisvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGZyYW1l IGNhY2hlLiAgKi8KKworc3RhdGljIHN0cnVjdCBtaWNyb2JsYXplX2ZyYW1l X2NhY2hlICoKK21pY3JvYmxhemVfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQp Cit7CisgIHN0cnVjdCBtaWNyb2JsYXplX2ZyYW1lX2NhY2hlICpjYWNoZTsK KyAgaW50IGk7CisKKyAgY2FjaGUgPSBGUkFNRV9PQlNUQUNLX1pBTExPQyAo c3RydWN0IG1pY3JvYmxhemVfZnJhbWVfY2FjaGUpOworCisgIC8qIEJhc2Ug YWRkcmVzcy4gICovCisgIGNhY2hlLT5iYXNlID0gMDsKKyAgY2FjaGUtPnBj ID0gMDsKKworICAvKiBGcmFtZWxlc3MgdW50aWwgcHJvdmVuIG90aGVyd2lz ZS4gICovCisgIGNhY2hlLT5mcmFtZWxlc3NfcCA9IDE7CisKKyAgcmV0dXJu IGNhY2hlOworfQorCisvKiBUaGUgYmFzZSBvZiB0aGUgY3VycmVudCBmcmFt ZSBpcyBhY3R1YWxseSBpbiB0aGUgc3RhY2sgcG9pbnRlci4KKyAgIFRoaXMg aGFwcGVucyB3aGVuIHRoZXJlIGlzIG5vIGZyYW1lIHBvaW50ZXIgKG1pY3Jv YmxhemUgQUJJIGRvZXMgbm90CisgICByZXF1aXJlIGEgZnJhbWUgcG9pbnRl cikgb3Igd2hlbiB3ZSdyZSBzdG9wcGVkIGluIHRoZSBwcm9sb2d1ZSBvcgor ICAgZXBpbG9ndWUgaXRzZWxmLiAgSW4gdGhlc2UgY2FzZXMsIG1pY3JvYmxh emVfYW5hbHl6ZV9wcm9sb2d1ZSB3aWxsIG5lZWQKKyAgIHRvIHVwZGF0ZSBm aS0+ZnJhbWUgYmVmb3JlIHJldHVybmluZyBvciBhbmFseXppbmcgdGhlIHJl Z2lzdGVyCisgICBzYXZlIGluc3RydWN0aW9ucy4gICovCisjZGVmaW5lIE1J Q1JPQkxBWkVfTVlfRlJBTUVfSU5fU1AgMHgxCisKKy8qIFRoZSBiYXNlIG9m IHRoZSBjdXJyZW50IGZyYW1lIGlzIGluIGEgZnJhbWUgcG9pbnRlciByZWdp c3Rlci4KKyAgIFRoaXMgcmVnaXN0ZXIgaXMgbm90ZWQgaW4gZnJhbWVfZXh0 cmFfaW5mby0+ZnBfcmVnbnVtLgorCisgICBOb3RlIHRoYXQgdGhlIGV4aXN0 YW5jZSBvZiBhbiBGUCBtaWdodCBhbHNvIGluZGljYXRlIHRoYXQgdGhlCisg ICBmdW5jdGlvbiBoYXMgY2FsbGVkIGFsbG9jYS4gICovCisjZGVmaW5lIE1J Q1JPQkxBWkVfTVlfRlJBTUVfSU5fRlAgMHgyCisKKy8qIEZ1bmN0aW9uIHBy b2xvZ3VlcyBvbiB0aGUgWGlsaW54IG1pY3JvYmxhemUgcHJvY2Vzc29ycyBj b25zaXN0IG9mOgorCisgICAtIGFkanVzdG1lbnRzIHRvIHRoZSBzdGFjayBw b2ludGVyIChyMSkgKGFkZGkgcjEsIHIxLCBpbW0pCisgICAtIG1ha2luZyBh IGNvcHkgb2YgcjEgaW50byBhbm90aGVyIHJlZ2lzdGVyIChhICJmcmFtZSIg cG9pbnRlcikKKyAgICAgKGFkZCByPywgcjEsIHIwKQorICAgLSBzdG9yZSB3 b3JkL211bHRpcGxlcyB0aGF0IHVzZSByMSBvciB0aGUgZnJhbWUgcG9pbnRl ciBhcyB0aGUKKyAgICAgYmFzZSBhZGRyZXNzIChzd2kgcj8sIHIxLCBpbW0g T1Igc3dpIHI/LCBmcCwgaW1tKQorCisgICBOb3RlIHRoYXQgbWljcm9ibGF6 ZSByZWFsbHkgZG9lc24ndCBoYXZlIGEgcmVhbCBmcmFtZSBwb2ludGVyLgor ICAgSW5zdGVhZCwgdGhlIGNvbXBpbGVyIG1heSBjb3B5IHRoZSBTUCBpbnRv IGEgcmVnaXN0ZXIgKHVzdWFsbHkKKyAgIHIxOSkgdG8gYWN0IGFzIGFuIGFy ZyBwb2ludGVyLiAgRm9yIG91ciB0YXJnZXQtZGVwZW5kZW50IHB1cnBvc2Vz LAorICAgdGhlIGZyYW1lIGluZm8ncyAiZnJhbWUiIG1lbWJlciB3aWxsIGJl IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICBmcmFtZS4gIFRoZSBTUCBjb3Vs ZCwgaW4gZmFjdCwgcG9pbnQgYmVsb3cgdGhpcy4KKworICAgVGhlIHByb2xv Z3VlIGVuZHMgd2hlbiBhbiBpbnN0cnVjdGlvbiBmYWlscyB0byBtZWV0IGVp dGhlciBvZgorICAgdGhlc2UgY3JpdGVyaWEuICAqLworCisvKiBBbmFseXpl IHRoZSBwcm9sb2d1ZSB0byBkZXRlcm1pbmUgd2hlcmUgcmVnaXN0ZXJzIGFy ZSBzYXZlZCwKKyAgIHRoZSBlbmQgb2YgdGhlIHByb2xvZ3VlLCBldGMuICBS ZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGxpbmUKKyAgIG9mICJy ZWFsIiBjb2RlIChpLmUuLCB0aGUgZW5kIG9mIHRoZSBwcm9sb2d1ZSkuICov CisKK0NPUkVfQUREUgorbWljcm9ibGF6ZV9hbmFseXplX3Byb2xvZ3VlIChD T1JFX0FERFIgcGMsIENPUkVfQUREUiBjdXJyZW50X3BjLAorCQkJICAgICBz dHJ1Y3QgbWljcm9ibGF6ZV9mcmFtZV9jYWNoZSAqY2FjaGUpCit7CisgIGNo YXIgKm5hbWU7CisgIENPUkVfQUREUiBmdW5jX2FkZHIsIGZ1bmNfZW5kLCBh ZGRyLCBzdG9wLCBwcm9sb2d1ZV9lbmRfYWRkciA9IDA7CisgIHVuc2lnbmVk IGxvbmcgaW5zbjsKKyAgaW50IHJuLCByZCwgcmEsIHJiLCBpbW07CisgIGVu dW0gbWljcm9ibGF6ZV9pbnN0ciBvcDsKKyAgaW50IGZsYWdzID0gMDsKKyAg aW50IHNhdmVfaGlkZGVuX3BvaW50ZXJfZm91bmQgPSAwOworICBpbnQgbm9u X3N0YWNrX2luc3RydWN0aW9uX2ZvdW5kID0gMDsKKworICAvKiBGaW5kIHRo ZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uLiAqLworICBmaW5kX3BjX3BhcnRp YWxfZnVuY3Rpb24gKHBjLCAmbmFtZSwgJmZ1bmNfYWRkciwgJmZ1bmNfZW5k KTsKKyAgaWYgKGZ1bmNfYWRkciA8IHBjKQorICAgIHBjID0gZnVuY19hZGRy OworCisgIGlmIChjdXJyZW50X3BjIDwgcGMpCisgICAgcmV0dXJuIGN1cnJl bnRfcGM7CisKKyAgIC8qIEluaXRpYWxpemUgaW5mbyBhYm91dCBmcmFtZS4g ICovCisgICBjYWNoZS0+ZnJhbWVzaXplID0gMDsKKyAgIGNhY2hlLT5mcF9y ZWdudW0gPSBNSUNST0JMQVpFX1NQX1JFR05VTTsKKyAgIGNhY2hlLT5mcmFt ZWxlc3NfcCA9IDE7CisKKyAgLyogU3RhcnQgZGVjb2RpbmcgdGhlIHByb2xv Z3VlLiAgV2Ugc3RhcnQgYnkgY2hlY2tpbmcgdHdvIHNwZWNpYWwgY2FzZXM6 CisKKyAgICAgMS4gV2UncmUgYWJvdXQgdG8gcmV0dXJuCisgICAgIDIuIFdl J3JlIGF0IHRoZSBmaXJzdCBpbnNuIG9mIHRoZSBwcm9sb2d1ZS4KKworICAg ICBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4sIG91ciBmcmFtZSBoYXMgYWxy ZWFkeSBiZWVuIGRlYWxsb2NhdGVkLgorICAgICBJZiB3ZSBhcmUgc3RvcHBl ZCBhdCB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gb2YgYSBwcm9sb2d1ZSwKKyAg ICAgdGhlbiBvdXIgZnJhbWUgaGFzIG5vdCB5ZXQgYmVlbiBzZXQgdXAuICov CisKKyAgLyogR2V0IHRoZSBmaXJzdCBpbnNuIGZyb20gbWVtb3J5LiAgKi8K KworICBpbnNuID0gbWljcm9ibGF6ZV9mZXRjaF9pbnN0cnVjdGlvbiAocGMp OworICBvcCA9IG1pY3JvYmxhemVfZGVjb2RlX2luc24gKGluc24sICZyZCwg JnJhLCAmcmIsICZpbW0pOworCisgIGlmIChJU19SRVRVUk4ob3ApKQorICAg IHJldHVybiBwYzsKKworICAvKiBTdGFydCBhdCBiZWdpbm5pbmcgb2YgZnVu Y3Rpb24gYW5kIGFuYWx5emUgdW50aWwgd2UgZ2V0IHRvIHRoZQorICAgICBj dXJyZW50IHBjLCBvciB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwgd2hpY2hl dmVyIGlzIGZpcnN0LiAgKi8KKyAgc3RvcCA9IChjdXJyZW50X3BjIDwgZnVu Y19lbmQgPyBjdXJyZW50X3BjIDogZnVuY19lbmQpOworCisgIG1pY3JvYmxh emVfaW5zbl9kZWJ1ZyAoKCJNSUNST0JMQVpFOiBTY2FubmluZyBwcm9sb2d1 ZTogbmFtZT0lcywgIgorCQkJICJmdW5jX2FkZHI9MHgleCwgc3RvcD0weCV4 XG4iLAorCQkJIG5hbWUsICh1bnNpZ25lZCBpbnQpIGZ1bmNfYWRkciwKKwkJ CSAodW5zaWduZWQgaW50KSBzdG9wKSk7CisKKyAgZm9yIChhZGRyID0gZnVu Y19hZGRyOyBhZGRyIDwgc3RvcDsgYWRkciArPSBJTlNUX1dPUkRfU0laRSkK KyAgICB7CisgICAgICBpbnNuID0gbWljcm9ibGF6ZV9mZXRjaF9pbnN0cnVj dGlvbiAoYWRkcik7CisgICAgICBvcCA9IG1pY3JvYmxhemVfZGVjb2RlX2lu c24gKGluc24sICZyZCwgJnJhLCAmcmIsICZpbW0pOworICAgICAgaWYgKG1p Y3JvYmxhemVfZGVidWcpIAorCXByaW50Zl9maWx0ZXJlZCAoIk1JQ1JPQkxB WkU6ICUwOHggJTA4bHhcbiIsICh1bnNpZ25lZCBpbnQpIHBjLCBpbnNuKTsK KworICAgICAgLyogVGhpcyBjb2RlIGlzIHZlcnkgc2Vuc2l0aXZlIHRvIHdo YXQgZnVuY3Rpb25zIGFyZSBwcmVzZW50IGluIHRoZQorCSBwcm9sb2d1ZS4g IEl0IGFzc3VtZXMgdGhhdCB0aGUgKGFkZGksIGFkZGlrLCBzd2ksIHN3KSBj YW4gYmUgdGhlIAorCSBvbmx5IGluc3RydWN0aW9ucyBpbiB0aGUgcHJvbG9n dWUuICAqLworICAgICAgaWYgKElTX1VQREFURV9TUChvcCwgcmQsIHJhKSkK Kwl7CisJICBtaWNyb2JsYXplX2luc25fZGVidWcgKCgKKwkJIk1JQ1JPQkxB WkU6IGdvdCBhZGRpIHIxLHIxLCVkOyBjb250bnVpbmdcbiIsIGltbSkpOwor CSAgaWYgKGNhY2hlLT5mcmFtZXNpemUpCisJICAgIGJyZWFrOwkvKiBicmVh ayBpZiBmcmFtZXNpemUgYWxyZWFkeSBjb21wdXRlZC4gICovCisJICBjYWNo ZS0+ZnJhbWVzaXplID0gLWltbTsgLyogc3RhY2sgZ3Jvd3MgdG93YXJkcyBs b3cgbWVtb3J5LiAgKi8KKwkgIGNhY2hlLT5mcmFtZWxlc3NfcCA9IDA7IC8q IEZyYW1lIGZvdW5kLiAgKi8KKwkgIHNhdmVfaGlkZGVuX3BvaW50ZXJfZm91 bmQgPSAwOworCSAgbm9uX3N0YWNrX2luc3RydWN0aW9uX2ZvdW5kID0gMDsK KwkgIGNvbnRpbnVlOworCX0KKyAgICAgIGVsc2UgaWYgKElTX1NQSUxMX1NQ KG9wLCByZCwgcmEpKQorCXsKKwkgIC8qIFNwaWxsIHN0YWNrIHBvaW50ZXIu ICAqLworCSAgY2FjaGUtPnJlZ2lzdGVyX29mZnNldHNbcmRdID0gaW1tOyAv KiBTUCBzcGlsbGVkIGJlZm9yZSB1cGRhdGluZy4gICovCisKKwkgIG1pY3Jv YmxhemVfaW5zbl9kZWJ1ZyAoCisJCSgiTUlDUk9CTEFaRTogc3dpIHIxIHIx ICVkLCBjb250aW51aW5nXG4iLCBpbW0pKTsKKwkgIHNhdmVfaGlkZGVuX3Bv aW50ZXJfZm91bmQgPSAwOworCSAgaWYgKCFjYWNoZS0+ZnJhbWVzaXplKQor CSAgICBub25fc3RhY2tfaW5zdHJ1Y3Rpb25fZm91bmQgPSAwOworCSAgY29u dGludWU7CisJfQorICAgICAgZWxzZSBpZiAoSVNfU1BJTExfUkVHKG9wLCBy ZCwgcmEpKQorCXsKKwkgIC8qIFNwaWxsIHJlZ2lzdGVyLiAgKi8KKwkgIGNh Y2hlLT5yZWdpc3Rlcl9vZmZzZXRzW3JkXSA9IGltbSAtIGNhY2hlLT5mcmFt ZXNpemU7CisKKwkgIG1pY3JvYmxhemVfaW5zbl9kZWJ1ZyAoCisJCSgiTUlD Uk9CTEFaRTogc3dpICVkIHIxICVkLCBjb250aW51aW5nXG4iLCByZCwgaW1t KSk7CisJICBzYXZlX2hpZGRlbl9wb2ludGVyX2ZvdW5kID0gMDsKKwkgIGlm ICghY2FjaGUtPmZyYW1lc2l6ZSkKKwkgICAgbm9uX3N0YWNrX2luc3RydWN0 aW9uX2ZvdW5kID0gMDsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIGVsc2Ug aWYgKElTX0FMU09fU1BJTExfUkVHKG9wLCByZCwgcmEsIHJiKSkKKwl7CisJ ICAvKiBTcGlsbCByZWdpc3Rlci4gICovCisJICBjYWNoZS0+cmVnaXN0ZXJf b2Zmc2V0c1tyZF0gPSAwIC0gY2FjaGUtPmZyYW1lc2l6ZTsKKworCSAgbWlj cm9ibGF6ZV9pbnNuX2RlYnVnICgKKwkJKCJNSUNST0JMQVpFOiBzdyAlZCBy MCByMSwgY29udGludWluZ1xuIiwgcmQpKTsKKwkgIHNhdmVfaGlkZGVuX3Bv aW50ZXJfZm91bmQgPSAwOworCSAgaWYgKCFjYWNoZS0+ZnJhbWVzaXplKQor CSAgICBub25fc3RhY2tfaW5zdHJ1Y3Rpb25fZm91bmQgPSAwOworCSAgY29u dGludWU7CisJfQorICAgICAgZWxzZSBpZiAoSVNfU0VUVVBfRlAob3AsIHJh LCByYikpCisJeworCSAgLyogV2UgaGF2ZSBhIGZyYW1lIHBvaW50ZXIuICBO b3RlIHRoZSByZWdpc3RlciB3aGljaCBpcyAKKyAgICAgICAgICAgICBhY3Rp bmcgYXMgdGhlIGZyYW1lIHBvaW50ZXIuICovCisJICBmbGFncyB8PSBNSUNS T0JMQVpFX01ZX0ZSQU1FX0lOX0ZQOworCSAgZmxhZ3MgJj0gfk1JQ1JPQkxB WkVfTVlfRlJBTUVfSU5fU1A7CisJICBjYWNoZS0+ZnBfcmVnbnVtID0gcmQ7 CisJICBtaWNyb2JsYXplX2luc25fZGVidWcgKAorCQkoIk1JQ1JPQkxBWkU6 IEZvdW5kIGEgZnJhbWUgcG9pbnRlcjogciVkXG4iLAorCQkgY2FjaGUtPmZw X3JlZ251bSkpOworCSAgc2F2ZV9oaWRkZW5fcG9pbnRlcl9mb3VuZCA9IDA7 CisJICBpZiAoIWNhY2hlLT5mcmFtZXNpemUpCisJICAgIG5vbl9zdGFja19p bnN0cnVjdGlvbl9mb3VuZCA9IDA7CisJICBjb250aW51ZTsKKwl9CisgICAg ICBlbHNlIGlmIChJU19TUElMTF9SRUdfRlAob3AsIHJkLCByYSwgY2FjaGUt PmZwX3JlZ251bSkpCisJeworCSAgY2FjaGUtPnJlZ2lzdGVyX29mZnNldHNb cmRdID0gaW1tIC0gY2FjaGUtPmZyYW1lc2l6ZTsKKwkJLyogcmVnIHNwaWxs ZWQgYWZ0ZXIgdXBkYXRpbmcuICAqLworCisJICBtaWNyb2JsYXplX2luc25f ZGVidWcgKAorCQkoIk1JQ1JPQkxBWkU6IHN3aSAlZCAlZCAlZCwgY29udGlu dWluZ1xuIiwgcmQsIHJhLCBpbW0pKTsKKwkgIHNhdmVfaGlkZGVuX3BvaW50 ZXJfZm91bmQgPSAwOworCSAgaWYgKCFjYWNoZS0+ZnJhbWVzaXplKQorCSAg ICBub25fc3RhY2tfaW5zdHJ1Y3Rpb25fZm91bmQgPSAwOworCSAgY29udGlu dWU7CisJfQorICAgICAgZWxzZSBpZiAoSVNfU0FWRV9ISURERU5fUFRSKG9w LCByZCwgcmEsIHJiKSkKKwl7CisJICAvKiBJZiB0aGUgZmlyc3QgYXJndW1l bnQgaXMgYSBoaWRkZW4gcG9pbnRlciB0byB0aGUgYXJlYSB3aGVyZSB0aGUK KwkgICAgIHJldHVybiBzdHJ1Y3R1cmUgaXMgdG8gYmUgc2F2ZWQsIHRoZW4g aXQgaXMgc2F2ZWQgYXMgcGFydCBvZiB0aGUKKwkgICAgIHByb2xvZ3VlLiAg Ki8KKworCSAgbWljcm9ibGF6ZV9pbnNuX2RlYnVnICgKKwkJKCJNSUNST0JM QVpFOiBhZGQgJWQgJWQgJWQsIGNvbnRpbnVpbmdcbiIsIHJkLCByYSwgcmIp KTsKKwkgIHNhdmVfaGlkZGVuX3BvaW50ZXJfZm91bmQgPSAxOworCSAgaWYg KCFjYWNoZS0+ZnJhbWVzaXplKQorCSAgICBub25fc3RhY2tfaW5zdHJ1Y3Rp b25fZm91bmQgPSAwOworCSAgY29udGludWU7CisJfQorCisgICAgICAvKiBB cyBhIHJlc3VsdCBvZiB0aGUgbW9kaWZpY2F0aW9uIGluIHRoZSBuZXh0IHN0 ZXAgd2hlcmUgd2UgY29udGludWUKKwkgdG8gYW5hbHl6ZSB0aGUgcHJvbG9n dWUgdGlsbCB3ZSByZWFjaCBhIGNvbnRyb2wgZmxvdyBpbnN0cnVjdGlvbiwK Kwkgd2UgbmVlZCBhbm90aGVyIHZhcmlhYmxlIHRvIHN0b3JlIHdoZW4gZXhh Y3RseSBhIG5vbi1zdGFjaworCSBpbnN0cnVjdGlvbiB3YXMgZW5jb3VudGVy ZWQsIHdoaWNoIGlzIHRoZSBjdXJyZW50IGRlZmluaXRpb24KKwkgb2YgYSBw cm9sb2d1ZS4gICovCisgICAgICBpZiAoIW5vbl9zdGFja19pbnN0cnVjdGlv bl9mb3VuZCkKKwlwcm9sb2d1ZV9lbmRfYWRkciA9IGFkZHI7CisgICAgICBu b25fc3RhY2tfaW5zdHJ1Y3Rpb25fZm91bmQgPSAxOworCisgICAgICAvKiBX aGVuIG9wdGltaXphdGlvbnMgYXJlIGVuYWJsZWQsIGl0IGlzIG5vdCBndWFy YW50ZWVkIHRoYXQgcHJvbG9ndWUKKwkgaW5zdHJ1Y3Rpb25zIGFyZSBub3Qg bWl4ZWQgaW4gd2l0aCBvdGhlciBpbnN0cnVjdGlvbnMgZnJvbSB0aGUKKwkg cHJvZ3JhbS4gU29tZSBwcm9ncmFtcyBzaG93IHRoaXMgYmVoYXZpb3IgYXQg LU8yLiBUaGlzIGNhbiBiZQorCSBhdm9pZGVkIGJ5IGFkZGluZyAtZm5vLXNj aGVkdWxlLWluc25zMiBzd2l0Y2ggYXMgb2Ygbm93IChlZGsgOC4xKQorCSBJ biBzdWNoIGNhc2VzLCB3ZSBzY2FuIHRoZSBmdW5jdGlvbiB1bnRpbCB3ZSBz ZWUgdGhlIGZpcnN0IGNvbnRyb2wKKwkgaW5zdHJ1Y3Rpb24uICAqLworCisg ICAgICB7CisJdW5zaWduZWQgb3AgPSAodW5zaWduZWQpaW5zbiA+PiAyNjsK KworCWlmICghKG9wID09IDB4MjYgfHwgb3AgPT0gMHgyNyB8fCBvcCA9PSAw eDJkIHx8IG9wID09IDB4MmUgfHwgb3AgPT0gMHgyZikpCisJICAvKiBjb250 aW51ZSBpZiBub3QgY29udHJvbCBmbG93IChicmFuY2gsIHJldHVybikuICAq LworCSAgY29udGludWU7CisJZWxzZSBpZiAob3AgPT0gMHgyYykKKwkgIGNv bnRpbnVlOyAgICAvKiBjb250aW51ZSBpZiBpbW0uICAqLworICAgICAgfQor CisgICAgICAvKiBUaGlzIGlzIG5vdCBhIHByb2xvZ3VlIGluc24sIHNvIHN0 b3AgaGVyZS4gKi8KKyAgICAgIG1pY3JvYmxhemVfaW5zbl9kZWJ1ZyAoCisJ CSgibWljcm9ibGF6ZTogaW5zbiBpcyBub3QgYSBwcm9sb2d1ZSBpbnNuIC0t IGVuZGluZyBzY2FuXG4iKSk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAg bWljcm9ibGF6ZV9pbnNuX2RlYnVnICgoIm1pY3JvYmxhemU6IGRvbmUgYW5h bHl6aW5nIHByb2xvZ3VlXG4iKSk7CisgIG1pY3JvYmxhemVfaW5zbl9kZWJ1 ZyAoKCJtaWNyb2JsYXplOiBwcm9sb2d1ZSBlbmQgPSAweCV4XG4iLCAoaW50 KSBhZGRyKSk7CisKKyAgLyogSWYgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gd2Fz IGFuIGFkZCByZCwgcjUsIHIwIHRoZW4gZG9uJ3QgY291bnQgaXQgYXMKKyAg ICAgcGFydCBvZiB0aGUgcHJvbG9ndWUuICAqLworICBpZiAoc2F2ZV9oaWRk ZW5fcG9pbnRlcl9mb3VuZCkKKyAgICBwcm9sb2d1ZV9lbmRfYWRkciAtPSBJ TlNUX1dPUkRfU0laRTsKKworICByZXR1cm4gcHJvbG9ndWVfZW5kX2FkZHI7 Cit9CisKK3N0YXRpYyBDT1JFX0FERFIKK21pY3JvYmxhemVfdW53aW5kX3Bj IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IGZyYW1lX2luZm8g Km5leHRfZnJhbWUpCit7CisgIGdkYl9ieXRlIGJ1Zls0XTsKKyAgQ09SRV9B RERSIHBjOworCisgIGZyYW1lX3Vud2luZF9yZWdpc3RlciAobmV4dF9mcmFt ZSwgTUlDUk9CTEFaRV9QQ19SRUdOVU0sIGJ1Zik7CisgIHBjID0gZXh0cmFj dF90eXBlZF9hZGRyZXNzIChidWYsIGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCkt PmJ1aWx0aW5fZnVuY19wdHIpOworICAvKiBGb3Igc2VudGluZWwgZnJhbWUs IHJldHVybiBhZGRyZXNzIGlzIGFjdHVhbCBQQy4gIEZvciBvdGhlciBmcmFt ZXMsCisgICAgIHJldHVybiBhZGRyZXNzIGlzIHBjKzguICBUaGlzIGlzIGEg d29ya2Fyb3VuZCBiZWNhdXNlIGdjYyBkb2VzIG5vdAorICAgICBnZW5lcmF0 ZSBjb3JyZWN0IHJldHVybiBhZGRyZXNzIGluIENJRS4gICovCisgIGlmIChm cmFtZV9yZWxhdGl2ZV9sZXZlbCAobmV4dF9mcmFtZSkgPj0gMCkKKyAgICBw YyArPSA4OworICByZXR1cm4gcGM7Cit9CisKKy8qIFJldHVybiBQQyBvZiBm aXJzdCByZWFsIGluc3RydWN0aW9uIG9mIHRoZSBmdW5jdGlvbiBzdGFydGlu ZyBhdAorICAgU1RBUlRfUEMuICAqLworCitDT1JFX0FERFIKK21pY3JvYmxh emVfc2tpcF9wcm9sb2d1ZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIENP UkVfQUREUiBzdGFydF9wYykKK3sKKyAgc3RydWN0IHN5bXRhYl9hbmRfbGlu ZSBzYWw7CisgIENPUkVfQUREUiBmdW5jX3N0YXJ0LCBmdW5jX2VuZCwgb3N0 YXJ0X3BjOworICBzdHJ1Y3QgbWljcm9ibGF6ZV9mcmFtZV9jYWNoZSBjYWNo ZTsKKworICAvKiBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kLCBmaW5k IHRoZSBlbmQgb2YgdGhlIHByb2xvZ3VlIGJ5CisgICAgIHVzaW5nIHRoZSBk ZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBEZWJ1Z2dpbmcgaW5mbyBkb2VzIG5v dCBhbHdheXMKKyAgICAgZ2l2ZSB0aGUgcmlnaHQgYW5zd2VyIHNpbmNlIHBh cmFtZXRlcnMgYXJlIHN0b3JlZCBvbiBzdGFjayBhZnRlciB0aGlzLgorICAg ICBBbHdheXMgYW5hbHl6ZSB0aGUgcHJvbG9ndWUuICAqLworICBpZiAoZmlu ZF9wY19wYXJ0aWFsX2Z1bmN0aW9uIChzdGFydF9wYywgTlVMTCwgJmZ1bmNf c3RhcnQsICZmdW5jX2VuZCkpCisgICAgeworICAgICAgc2FsID0gZmluZF9w Y19saW5lIChmdW5jX3N0YXJ0LCAwKTsKKworICAgICAgaWYgKHNhbC5lbmQg PCBmdW5jX2VuZAorCSAgJiYgc3RhcnRfcGMgPD0gc2FsLmVuZCkKKwlzdGFy dF9wYyA9IHNhbC5lbmQ7CisgICAgfQorCisgIG9zdGFydF9wYyA9IG1pY3Jv YmxhemVfYW5hbHl6ZV9wcm9sb2d1ZSAoZnVuY19zdGFydCwgMHhmZmZmZmZm ZlVMLCAmY2FjaGUpOworCisgIGlmIChvc3RhcnRfcGMgPiBzdGFydF9wYykK KyAgICByZXR1cm4gb3N0YXJ0X3BjOworICByZXR1cm4gc3RhcnRfcGM7Cit9 CisKKy8qIE5vcm1hbCBmcmFtZXMuICAqLworCitzdHJ1Y3QgbWljcm9ibGF6 ZV9mcmFtZV9jYWNoZSAqCittaWNyb2JsYXplX2ZyYW1lX2NhY2hlIChzdHJ1 Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUp Cit7CisgIHN0cnVjdCBtaWNyb2JsYXplX2ZyYW1lX2NhY2hlICpjYWNoZTsK KyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJhbWVfYXJjaCAo bmV4dF9mcmFtZSk7CisgIENPUkVfQUREUiBmdW5jLCBwYywgZnA7CisgIGlu dCBybjsKKworICBpZiAoKnRoaXNfY2FjaGUpCisgICAgcmV0dXJuICp0aGlz X2NhY2hlOworCisgIGNhY2hlID0gbWljcm9ibGF6ZV9hbGxvY19mcmFtZV9j YWNoZSAoKTsKKyAgKnRoaXNfY2FjaGUgPSBjYWNoZTsKKyAgY2FjaGUtPnNh dmVkX3JlZ3MgPSB0cmFkX2ZyYW1lX2FsbG9jX3NhdmVkX3JlZ3MgKG5leHRf ZnJhbWUpOworCisgIC8qIENsZWFyIG9mZnNldHMgdG8gc2F2ZWQgcmVncyBp biBmcmFtZS4gICovCisgIGZvciAocm4gPSAwOyBybiA8IGdkYmFyY2hfbnVt X3JlZ3MgKGdkYmFyY2gpOyBybisrKQorICAgIGNhY2hlLT5yZWdpc3Rlcl9v ZmZzZXRzW3JuXSA9IC0xOworCisgIGZ1bmMgPSBnZXRfZnJhbWVfZnVuYyAo bmV4dF9mcmFtZSk7CisKKyAgY2FjaGUtPnBjID0gZ2V0X2ZyYW1lX2FkZHJl c3NfaW5fYmxvY2sgKG5leHRfZnJhbWUpOworCisgIHJldHVybiBjYWNoZTsK K30KKworc3RhdGljIHZvaWQKK21pY3JvYmxhemVfZnJhbWVfdGhpc19pZCAo c3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUsIHZvaWQgKip0aGlzX2Nh Y2hlLAorCQkgICAgICAgc3RydWN0IGZyYW1lX2lkICp0aGlzX2lkKQorewor ICBzdHJ1Y3QgbWljcm9ibGF6ZV9mcmFtZV9jYWNoZSAqY2FjaGUgPQorICAg IG1pY3JvYmxhemVfZnJhbWVfY2FjaGUgKG5leHRfZnJhbWUsIHRoaXNfY2Fj aGUpOworCisgIC8qIFRoaXMgbWFya3MgdGhlIG91dGVybW9zdCBmcmFtZS4g ICovCisgIGlmIChjYWNoZS0+YmFzZSA9PSAwKQorICAgIHJldHVybjsKKwor ICAoKnRoaXNfaWQpID0gZnJhbWVfaWRfYnVpbGQgKGNhY2hlLT5iYXNlLCBj YWNoZS0+cGMpOworfQorCitzdGF0aWMgc3RydWN0IHZhbHVlICoKK21pY3Jv YmxhemVfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8g KnRoaXNfZnJhbWUsCisJCQkJIHZvaWQgKip0aGlzX2NhY2hlLCBpbnQgcmVn bnVtKQoreworICBzdHJ1Y3QgbWljcm9ibGF6ZV9mcmFtZV9jYWNoZSAqY2Fj aGUgPQorICAgIG1pY3JvYmxhemVfZnJhbWVfY2FjaGUgKHRoaXNfZnJhbWUs IHRoaXNfY2FjaGUpOworCisgIGlmIChjYWNoZS0+ZnJhbWVsZXNzX3ApCisg ICAgeworICAgICAgaWYgKHJlZ251bSA9PSBNSUNST0JMQVpFX1BDX1JFR05V TSkKKyAgICAgICAgcmVnbnVtID0gMTU7CisgICAgICBpZiAocmVnbnVtID09 IE1JQ1JPQkxBWkVfU1BfUkVHTlVNKQorICAgICAgICByZWdudW0gPSAxOwor ICAgICAgcmV0dXJuIHRyYWRfZnJhbWVfZ2V0X3ByZXZfcmVnaXN0ZXIgKHRo aXNfZnJhbWUsIGNhY2hlLT5zYXZlZF9yZWdzLCByZWdudW0pOworICAgIH0K KyAgZWxzZQorICAgIHJldHVybiB0cmFkX2ZyYW1lX2dldF9wcmV2X3JlZ2lz dGVyICh0aGlzX2ZyYW1lLCBjYWNoZS0+c2F2ZWRfcmVncywKKwkJCQkJIHJl Z251bSk7CisKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmcmFtZV91bndp bmQgbWljcm9ibGF6ZV9mcmFtZV91bndpbmQgPQoreworICBOT1JNQUxfRlJB TUUsCisgIG1pY3JvYmxhemVfZnJhbWVfdGhpc19pZCwKKyAgbWljcm9ibGF6 ZV9mcmFtZV9wcmV2X3JlZ2lzdGVyLAorICBOVUxMLAorICBkZWZhdWx0X2Zy YW1lX3NuaWZmZXIKK307CisMCitzdGF0aWMgQ09SRV9BRERSCittaWNyb2Js YXplX2ZyYW1lX2Jhc2VfYWRkcmVzcyAoc3RydWN0IGZyYW1lX2luZm8gKm5l eHRfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQoreworICBzdHJ1Y3QgbWlj cm9ibGF6ZV9mcmFtZV9jYWNoZSAqY2FjaGUgPQorICAgIG1pY3JvYmxhemVf ZnJhbWVfY2FjaGUgKG5leHRfZnJhbWUsIHRoaXNfY2FjaGUpOworCisgIHJl dHVybiBjYWNoZS0+YmFzZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBm cmFtZV9iYXNlIG1pY3JvYmxhemVfZnJhbWVfYmFzZSA9Cit7CisgICZtaWNy b2JsYXplX2ZyYW1lX3Vud2luZCwKKyAgbWljcm9ibGF6ZV9mcmFtZV9iYXNl X2FkZHJlc3MsCisgIG1pY3JvYmxhemVfZnJhbWVfYmFzZV9hZGRyZXNzLAor ICBtaWNyb2JsYXplX2ZyYW1lX2Jhc2VfYWRkcmVzcworfTsKKwwKKy8qIEV4 dHJhY3QgZnJvbSBhbiBhcnJheSBSRUdCVUYgY29udGFpbmluZyB0aGUgKHJh dykgcmVnaXN0ZXIgc3RhdGUsIGEKKyAgIGZ1bmN0aW9uIHJldHVybiB2YWx1 ZSBvZiBUWVBFLCBhbmQgY29weSB0aGF0IGludG8gVkFMQlVGLiAgKi8KK3N0 YXRpYyB2b2lkCittaWNyb2JsYXplX2V4dHJhY3RfcmV0dXJuX3ZhbHVlIChz dHJ1Y3QgdHlwZSAqdHlwZSwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwK KwkJCQkgZ2RiX2J5dGUgKnZhbGJ1ZikKK3sKKyAgZ2RiX2J5dGUgYnVmWzhd OworCisgIC8qIENvcHkgdGhlIHJldHVybiB2YWx1ZSAoc3RhcnRpbmcpIGlu IFJFVFZBTF9SRUdOVU0gdG8gVkFMQlVGLiAgKi8KKyAgc3dpdGNoIChUWVBF X0xFTkdUSCAodHlwZSkpCisgICAgeworICAgICAgY2FzZSAxOgkvKiByZXR1 cm4gbGFzdCBieXRlIGluIHRoZSByZWdpc3Rlci4gICovCisJcmVnY2FjaGVf Y29va2VkX3JlYWQgKHJlZ2NhY2hlLCBNSUNST0JMQVpFX1JFVFZBTF9SRUdO VU0sIGJ1Zik7CisJbWVtY3B5KHZhbGJ1ZiwgYnVmICsgTUlDUk9CTEFaRV9S RUdJU1RFUl9TSVpFIC0gMSwgMSk7CisJcmV0dXJuOworICAgICAgY2FzZSAy OgkvKiByZXR1cm4gbGFzdCAyIGJ5dGVzIGluIHJlZ2lzdGVyLiAgKi8KKwlt ZW1jcHkodmFsYnVmLCBidWYgKyBNSUNST0JMQVpFX1JFR0lTVEVSX1NJWkUg LSAyLCAyKTsKKwlyZXR1cm47CisgICAgICBjYXNlIDQ6CS8qIGZvciBzaXpl cyA0IG9yIDgsIGNvcHkgdGhlIHJlcXVpcmVkIGxlbmd0aC4gICovCisgICAg ICBjYXNlIDg6CisJcmVnY2FjaGVfY29va2VkX3JlYWQgKHJlZ2NhY2hlLCBN SUNST0JMQVpFX1JFVFZBTF9SRUdOVU0sIGJ1Zik7CisJcmVnY2FjaGVfY29v a2VkX3JlYWQgKHJlZ2NhY2hlLCBNSUNST0JMQVpFX1JFVFZBTF9SRUdOVU0r MSwgYnVmKzQpOworCW1lbWNweSAodmFsYnVmLCBidWYsIFRZUEVfTEVOR1RI ICh0eXBlKSk7CisJcmV0dXJuOworICAgICAgZGVmYXVsdDoKKwlmYXRhbCAo XygiVW5zdXBwb3J0ZWQgcmV0dXJuIHZhbHVlIHNpemUgcmVxdWVzdGVkIikp OworICAgIH0KK30KKworLyogU3RvcmUgdGhlIHJldHVybiB2YWx1ZSBpbiBW QUxCVUYgKG9mIHR5cGUgVFlQRSkgd2hlcmUgdGhlIGNhbGxlcgorICAgZXhw ZWN0cyB0byBzZWUgaXQuCisKKyAgIEludGVnZXJzIHVwIHRvIGZvdXIgYnl0 ZXMgYXJlIHN0b3JlZCBpbiByMy4KKworICAgTG9uZ3MgYXJlIHN0b3JlZCBp biByMyAobW9zdCBzaWduaWZpY2FudCB3b3JkKSBhbmQgcjQgKGxlYXN0Cisg ICBzaWduaWZpY2FudCB3b3JkKS4KKworICAgU21hbGwgc3RydWN0dXJlcyBh cmUgYWx3YXlzIHJldHVybmVkIG9uIHN0YWNrLgorKi8KKworc3RhdGljIHZv aWQKK21pY3JvYmxhemVfc3RvcmVfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlw ZSAqdHlwZSwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKwkJCSAgICAg ICBjb25zdCBnZGJfYnl0ZSAqdmFsYnVmKQoreworICBpbnQgbGVuID0gVFlQ RV9MRU5HVEggKHR5cGUpOworICBnZGJfYnl0ZSBidWZbOF07CisKKyAgbWVt c2V0IChidWYsIDAsIHNpemVvZihidWYpKTsKKworICAvKiBJbnRlZ3JhbCBh bmQgcG9pbnRlciByZXR1cm4gdmFsdWVzLiAgKi8KKworICBpZiAobGVuID4g NCkKKyAgICB7CisgICAgICAgZ2RiX2Fzc2VydCAobGVuID09IDgpOworICAg ICAgIG1lbWNweSAoYnVmLCB2YWxidWYsIDgpOworICAgICAgIHJlZ2NhY2hl X2Nvb2tlZF93cml0ZSAocmVnY2FjaGUsIE1JQ1JPQkxBWkVfUkVUVkFMX1JF R05VTSsxLCBidWYgKyA0KTsKKyAgICB9CisgIGVsc2UKKyAgICAvKiA/Pz8g RG8gd2UgbmVlZCB0byBkbyBhbnkgc2lnbi1leHRlbnNpb24gaGVyZT8gICov CisgICAgbWVtY3B5IChidWYgKyA0IC0gbGVuLCB2YWxidWYsIGxlbik7CisK KyAgcmVnY2FjaGVfY29va2VkX3dyaXRlIChyZWdjYWNoZSwgTUlDUk9CTEFa RV9SRVRWQUxfUkVHTlVNLCBidWYpOworfQorCitzdGF0aWMgZW51bSByZXR1 cm5fdmFsdWVfY29udmVudGlvbgorbWljcm9ibGF6ZV9yZXR1cm5fdmFsdWUg KHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBzdHJ1Y3QgdHlwZSAqZnVuY190 eXBlLAorCQkJIHN0cnVjdCB0eXBlICp0eXBlLCBzdHJ1Y3QgcmVnY2FjaGUg KnJlZ2NhY2hlLAorCQkJIGdkYl9ieXRlICpyZWFkYnVmLCBjb25zdCBnZGJf Ynl0ZSAqd3JpdGVidWYpCit7CisgIGlmIChyZWFkYnVmKQorICAgIG1pY3Jv YmxhemVfZXh0cmFjdF9yZXR1cm5fdmFsdWUgKHR5cGUsIHJlZ2NhY2hlLCBy ZWFkYnVmKTsKKyAgaWYgKHdyaXRlYnVmKQorICAgIG1pY3JvYmxhemVfc3Rv cmVfcmV0dXJuX3ZhbHVlICh0eXBlLCByZWdjYWNoZSwgd3JpdGVidWYpOwor CisgIHJldHVybiBSRVRVUk5fVkFMVUVfUkVHSVNURVJfQ09OVkVOVElPTjsK K30KKworc3RhdGljIGludAorbWljcm9ibGF6ZV9zdGFic19hcmd1bWVudF9o YXNfYWRkciAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCB0eXBl ICp0eXBlKQoreworICByZXR1cm4gKFRZUEVfTEVOR1RIICh0eXBlKSA9PSAx Nik7Cit9CisMCitpbnQKK21pY3JvYmxhemVfY2FuX3VzZV9oYXJkd2FyZV93 YXRjaHBvaW50cyAoZW51bSBicHR5cGUgdHlwZSwgaW50IGNvdW50LCBpbnQg b3QpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgICAgeworCWNhc2UgYnBf aGFyZHdhcmVfYnJlYWtwb2ludDoKKwkgIGlmIChjb3VudCA8PSAyKSAKKwkg ICAgcmV0dXJuIDE7CisJICBicmVhazsKKwljYXNlIGJwX3JlYWRfd2F0Y2hw b2ludDoKKwljYXNlIGJwX2hhcmR3YXJlX3dhdGNocG9pbnQ6CisJICBpZiAo Y291bnQgPD0gMSkgCisJICAgIHJldHVybiAxOworCSAgYnJlYWs7CisJZGVm YXVsdDoKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICByZXR1 cm4gLTE7Cit9CisKKy8qIFNpbXVsYXRlIHNpbmdsZS1zdGVwIGNhbGxzLCBz aW5jZSBtaWNyb2JsYXplIGRvZXMgbm90IHN1cHBvcnQgCisgICBzaW5nbGUt c3RlcHBpbmcuICAqLworCisvKiBzaW5nbGVfc3RlcCgpIGlzIGNhbGxlZCBq dXN0IGJlZm9yZSB3ZSB3YW50IHRvIHJlc3VtZSB0aGUgaW5mZXJpb3IsCisg ICBpZiB3ZSB3YW50IHRvIHNpbmdsZS1zdGVwIGl0IGJ1dCB0aGVyZSBpcyBu byBoYXJkd2FyZSBvciBrZXJuZWwKKyAgIHNpbmdsZS1zdGVwIHN1cHBvcnQu ICBXZSBmaW5kIGFsbCB0aGUgcG9zc2libGUgdGFyZ2V0cyBvZiB0aGUKKyAg IGNvbWluZyBpbnN0cnVjdGlvbiBhbmQgYnJlYWtwb2ludCB0aGVtLgorCisg ICBzaW5nbGVfc3RlcCBpcyBhbHNvIGNhbGxlZCBqdXN0IGFmdGVyIHRoZSBp bmZlcmlvciBzdG9wcy4gIElmIHdlIGhhZAorICAgc2V0IHVwIGEgc2ltdWxh dGVkIHNpbmdsZS1zdGVwLCB3ZSB1bmRvIG91ciBkYW1hZ2UuICAqLworCitp bnQKK21pY3JvYmxhemVfc29mdHdhcmVfc2luZ2xlX3N0ZXAgKHN0cnVjdCBm cmFtZV9pbmZvICpmcmFtZSkKK3sKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2ggPSBnZXRfZnJhbWVfYXJjaCAoZnJhbWUpOworICBzdHJ1Y3QgZ2RiYXJj aF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKyAgc3Ry dWN0IHJlZ2NhY2hlICpyZWdjYWNoZSA9IGdldF9jdXJyZW50X3JlZ2NhY2hl ICgpOworCisgIC8qIFNhdmUgdGhlIGFkZHJlc3MgYW5kIHRoZSB2YWx1ZXMg b2YgdGhlIG5leHRfcGMgYW5kIHRoZSB0YXJnZXQuICAqLworICBzdGF0aWMg c3RydWN0IHNzdGVwX2JyZWFrcworICB7CisgICAgQ09SRV9BRERSIGFkZHJl c3M7CisgICAgYmZkX2Jvb2xlYW4gdmFsaWQ7CisgIH0gc3RlcGJyZWFrc1sy XTsKKworICBDT1JFX0FERFIgcGM7CisgIGxvbmcgaW5zbjsKKyAgZW51bSBt aWNyb2JsYXplX2luc3RyIG1pbnN0cjsKKyAgaW50IGlzX3Vuc2lnbmVkX251 bTsKKyAgZW51bSBtaWNyb2JsYXplX2luc3RyX3R5cGUgaW5zbl90eXBlOwor ICBzaG9ydCBkZWxheV9zbG90czsKKyAgaW50IGltbTsKKyAgaW50IGltbWZv dW5kID0gMDsKKworICAvKiBTZXQgYSBicmVha3BvaW50IGF0IHRoZSBuZXh0 IGluc3RydWN0aW9uLiAgKi8KKyAgLyogSWYgdGhlIGN1cnJlbnQgaW5zdHJ1 Y3Rpb24gaXMgYW4gaW1tLCBzZXQgaXQgYXQgdGhlIGluc3QgYWZ0ZXIuICAq LworICAvKiBJZiB0aGUgaW5zdHJ1Y3Rpb24gaGFzIGEgZGVsYXkgc2xvdCwg c2tpcCB0aGUgZGVsYXkgc2xvdC4gICovCisgIHBjID0gZ2V0X2ZyYW1lX3Jl Z2lzdGVyX3Vuc2lnbmVkIChmcmFtZSwgTUlDUk9CTEFaRV9QQ19SRUdOVU0p OworICBpbnNuID0gbWljcm9ibGF6ZV9mZXRjaF9pbnN0cnVjdGlvbiAocGMp OworICBtaW5zdHIgPSBnZXRfaW5zbl9taWNyb2JsYXplIChpbnNuLCAmaXNf dW5zaWduZWRfbnVtLCAmaW5zbl90eXBlLAorCQkJCSZkZWxheV9zbG90cyk7 CisgIGlmIChpbnNuX3R5cGUgPT0gaW1tZWRpYXRlX2luc3QpCisgICAgewor ICAgICAgaW50IHJkLCByYSwgcmI7CisgICAgICBpbW1mb3VuZCA9IDE7Cisg ICAgICBtaW5zdHIgPSBtaWNyb2JsYXplX2RlY29kZV9pbnNuIChpbnNuLCAm cmQsICZyYSwgJnJiLCAmaW1tKTsKKyAgICAgIHBjID0gcGMgKyBJTlNUX1dP UkRfU0laRTsKKyAgICAgIGluc24gPSBtaWNyb2JsYXplX2ZldGNoX2luc3Ry dWN0aW9uIChwYyk7CisgICAgICBtaW5zdHIgPSBnZXRfaW5zbl9taWNyb2Js YXplIChpbnNuLCAmaXNfdW5zaWduZWRfbnVtLCAmaW5zbl90eXBlLAorCQkJ CSAgICAmZGVsYXlfc2xvdHMpOworICAgIH0KKyAgc3RlcGJyZWFrc1swXS5h ZGRyZXNzID0gcGMgKyAoZGVsYXlfc2xvdHMgKiBJTlNUX1dPUkRfU0laRSkg KyBJTlNUX1dPUkRfU0laRTsKKyAgaWYgKGluc25fdHlwZSAhPSByZXR1cm5f aW5zdCkKKyAgICBzdGVwYnJlYWtzWzBdLnZhbGlkID0gMTsKKyAgZWxzZQor ICAgIHN0ZXBicmVha3NbMF0udmFsaWQgPSAwOworCisgIC8qIE5vdyBjaGVj ayBmb3IgYnJhbmNoIG9yIHJldHVybiBpbnN0cnVjdGlvbnMuICAqLworICBp ZiAoaW5zbl90eXBlID09IGJyYW5jaF9pbnN0IHx8IGluc25fdHlwZSA9PSBy ZXR1cm5faW5zdCkKKyAgICB7CisgICAgICBpbnQgbGltbTsKKyAgICAgIGlu dCBscmQsIGxyYSwgbHJiOworICAgICAgVUxPTkdFU1QgcmEsIHJiOworICAg ICAgYmZkX2Jvb2xlYW4gdGFyZ2V0dmFsaWQ7CisgICAgICBiZmRfYm9vbGVh biB1bmNvbmRpdGlvbmFsYnJhbmNoOworICAgICAgbWljcm9ibGF6ZV9kZWNv ZGVfaW5zbihpbnNuLCAmbHJkLCAmbHJhLCAmbHJiLCAmbGltbSk7CisgICAg ICBpZiAobHJhID49IDAgJiYgbHJhIDwgZ2RiYXJjaF9udW1fcmVncyAoZ2Ri YXJjaCkpCisJcmVnY2FjaGVfY29va2VkX3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCBscmEsICZyYSk7CisgICAgICBlbHNlCisJcmEgPSAwOworICAgICAg aWYgKGxyYiA+PSAwICYmIGxyYiA8IGdkYmFyY2hfbnVtX3JlZ3MgKGdkYmFy Y2gpKQorCXJlZ2NhY2hlX2Nvb2tlZF9yZWFkX3Vuc2lnbmVkIChyZWdjYWNo ZSwgbHJiLCAmcmIpOworICAgICAgZWxzZQorCXJiID0gMDsKKyAgICAgIHN0 ZXBicmVha3NbMV0uYWRkcmVzcyA9CisJIG1pY3JvYmxhemVfZ2V0X3Rhcmdl dF9hZGRyZXNzIChpbnNuLCBpbW1mb3VuZCwgaW1tLCBwYywKKwkJCQkJcmEs IHJiLCAmdGFyZ2V0dmFsaWQsCisJCQkJCSZ1bmNvbmRpdGlvbmFsYnJhbmNo KTsKKyAgICAgIGlmICh1bmNvbmRpdGlvbmFsYnJhbmNoKQorCS8qIFRoaXMg aXMgYSB1bmNvbmRpdGlvbmFsIGJyYW5jaDogd2lsbCBub3QgY29tZSB0byB0 aGUgbmV4dCBhZGRyZXNzLiAgKi8KKwlzdGVwYnJlYWtzWzBdLnZhbGlkID0g MDsKKyAgICAgIGlmICh0YXJnZXR2YWxpZAorCSAgJiYgKHN0ZXBicmVha3Nb MF0udmFsaWQgPT0gMAorCSAgICAgIHx8IChzdGVwYnJlYWtzWzBdLmFkZHJl c3MgIT0gc3RlcGJyZWFrc1sxXS5hZGRyZXNzKSkKKwkgICYmIChzdGVwYnJl YWtzWzFdLmFkZHJlc3MgIT0gcGMpKQorCXN0ZXBicmVha3NbMV0udmFsaWQg PSAxOworICAgICAgZWxzZQorCXN0ZXBicmVha3NbMV0udmFsaWQgPSAwOwor ICAgIH0KKyAgZWxzZQorICAgIHN0ZXBicmVha3NbMV0udmFsaWQgPSAwOwor CisgIC8qIEluc2VydCB0aGUgYnJlYWtwb2ludHMuICAqLworICBpZiAoc3Rl cGJyZWFrc1swXS52YWxpZCkKKyAgICBpbnNlcnRfc2luZ2xlX3N0ZXBfYnJl YWtwb2ludCAoZ2RiYXJjaCwgIHN0ZXBicmVha3NbMF0uYWRkcmVzcyk7Cisg IGlmIChzdGVwYnJlYWtzWzFdLnZhbGlkKQorICAgIGluc2VydF9zaW5nbGVf c3RlcF9icmVha3BvaW50IChnZGJhcmNoLCAgc3RlcGJyZWFrc1sxXS5hZGRy ZXNzKTsKKworICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK21pY3Jv YmxhemVfd3JpdGVfcGMgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIENP UkVfQUREUiBwYykKK3sKKyAgcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2ln bmVkIChyZWdjYWNoZSwgTUlDUk9CTEFaRV9QQ19SRUdOVU0sIHBjKTsKK30K KwwKK3N0YXRpYyBpbnQgZHdhcmYyX3RvX3JlZ19tYXBbNzhdID0KK3sgMCAg LyogcjAgICovLCAgIDEgIC8qIHIxICAqLywgICAyICAvKiByMiAgKi8sICAg MyAgLyogcjMgICovLCAgLyogIDAtIDMgKi8KKyAgNCAgLyogcjQgICovLCAg IDUgIC8qIHI1ICAqLywgICA2ICAvKiByNiAgKi8sICAgNyAgLyogcjcgICov LCAgLyogIDQtIDcgKi8KKyAgOCAgLyogcjggICovLCAgIDkgIC8qIHI5ICAq LywgIDEwICAvKiByMTAgKi8sICAxMSAgLyogcjExICovLCAgLyogIDgtMTEg Ki8KKyAgMTIgLyogcjEyICovLCAgMTMgIC8qIHIxMyAqLywgIDE0ICAvKiBy MTQgKi8sICAxNSAgLyogcjE1ICovLCAgLyogMTItMTUgKi8KKyAgMTYgLyog cjE2ICovLCAgMTcgIC8qIHIxNyAqLywgIDE4ICAvKiByMTggKi8sICAxOSAg LyogcjE5ICovLCAgLyogMTYtMTkgKi8KKyAgMjAgLyogcjIwICovLCAgMjEg IC8qIHIyMSAqLywgIDIyICAvKiByMjIgKi8sICAyMyAgLyogcjIzICovLCAg LyogMjAtMjMgKi8KKyAgMjQgLyogcjI0ICovLCAgMjUgIC8qIHIyNSAqLywg IDI2ICAvKiByMjYgKi8sICAyNyAgLyogcjI3ICovLCAgLyogMjQtMjUgKi8K KyAgMjggLyogcjI4ICovLCAgMjkgIC8qIHIyOSAqLywgIDMwICAvKiByMzAg Ki8sICAzMSAgLyogcjMxICovLCAgLyogMjgtMzEgKi8KKyAgLTEgLyogJGYw ICovLCAgLTEgIC8qICRmMSAqLywgIC0xICAvKiAkZjIgKi8sICAtMSAgLyog JGYzICovLCAgLyogMzItMzUgKi8KKyAgLTEgLyogJGY0ICovLCAgLTEgIC8q ICRmNSAqLywgIC0xICAvKiAkZjYgKi8sICAtMSAgLyogJGY3ICovLCAgLyog MzYtMzkgKi8KKyAgLTEgLyogJGY4ICovLCAgLTEgIC8qICRmOSAqLywgIC0x ICAvKiAkZjEwICovLCAtMSAgLyogJGYxMSAqLywgLyogNDAtNDMgKi8KKyAg LTEgLyogJGYxMiAqLywgLTEgIC8qICRmMTMgKi8sIC0xICAvKiAkZjE0ICov LCAtMSAgLyogJGYxNSAqLywgLyogNDQtNDcgKi8KKyAgLTEgLyogJGYxNiAq LywgLTEgIC8qICRmMTcgKi8sIC0xICAvKiAkZjE4ICovLCAtMSAgLyogJGYx OSAqLywgLyogNDgtNTEgKi8KKyAgLTEgLyogJGYyMCAqLywgLTEgIC8qICRm MjEgKi8sIC0xICAvKiAkZjIyICovLCAtMSAgLyogJGYyMyAqLywgLyogNTIt NTUgKi8KKyAgLTEgLyogJGYyNCAqLywgLTEgIC8qICRmMjUgKi8sIC0xICAv KiAkZjI2ICovLCAtMSAgLyogJGYyNyAqLywgLyogNTYtNTkgKi8KKyAgLTEg LyogJGYyOCAqLywgLTEgIC8qICRmMjkgKi8sIC0xICAvKiAkZjMwICovLCAt MSAgLyogJGYzMSAqLywgLyogNjAtNjMgKi8KKyAgLTEgLyogaGkgICAqLywg LTEgIC8qIGxvICAgKi8sIC0xICAvKiBhY2N1bSovLCAzMyAgLyogcm1zciAq LywgLyogNjQtNjcgKi8KKyAgLTEgLyogJGZjYzEqLywgLTEgIC8qICRmY2My Ki8sIC0xICAvKiAkZmNjMyovLCAtMSAgLyogJGZjYzQqLywgLyogNjgtNzEg Ki8KKyAgLTEgLyogJGZjYzUqLywgLTEgIC8qICRmY2M2Ki8sIC0xICAvKiAk ZmNjNyovLCAtMSAgLyogJGFwICAqLywgLyogNzItNzUgKi8KKyAgLTEgLyog JHJhcCAqLywgLTEgIC8qICRmcnAgKi8JCQkJCSAvKiA3Ni03NyAqLworfTsK Kworc3RhdGljIGludAorbWljcm9ibGF6ZV9kd2FyZjJfcmVnX3RvX3JlZ251 bSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGludCByZWcpCit7CisgIGdk Yl9hc3NlcnQgKHJlZyA8IHNpemVvZiAoZHdhcmYyX3RvX3JlZ19tYXApKTsK KyAgcmV0dXJuIGR3YXJmMl90b19yZWdfbWFwW3JlZ107Cit9CisKK3N0YXRp YyBzdHJ1Y3QgZ2RiYXJjaCAqCittaWNyb2JsYXplX2dkYmFyY2hfaW5pdCAo c3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0 ICphcmNoZXMpCit7CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXA7Cisg IHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOworCisgIC8qIElmIHRoZXJlIGlz IGFscmVhZHkgYSBjYW5kaWRhdGUsIHVzZSBpdC4gICovCisgIGFyY2hlcyA9 IGdkYmFyY2hfbGlzdF9sb29rdXBfYnlfaW5mbyAoYXJjaGVzLCAmaW5mbyk7 CisgIGlmIChhcmNoZXMgIT0gTlVMTCkKKyAgICByZXR1cm4gYXJjaGVzLT5n ZGJhcmNoOworCisgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgbmV3IGFy Y2hpdGVjdHVyZS4gICovCisgIHRkZXAgPSBYTUFMTE9DIChzdHJ1Y3QgZ2Ri YXJjaF90ZGVwKTsKKyAgZ2RiYXJjaCA9IGdkYmFyY2hfYWxsb2MgKCZpbmZv LCB0ZGVwKTsKKworICBzZXRfZ2RiYXJjaF9sb25nX2RvdWJsZV9iaXQgKGdk YmFyY2gsIDEyOCk7CisKKyAgc2V0X2dkYmFyY2hfbnVtX3JlZ3MgKGdkYmFy Y2gsIE1JQ1JPQkxBWkVfTlVNX1JFR1MpOworICBzZXRfZ2RiYXJjaF9yZWdp c3Rlcl9uYW1lIChnZGJhcmNoLCBtaWNyb2JsYXplX3JlZ2lzdGVyX25hbWUp OworICBzZXRfZ2RiYXJjaF9yZWdpc3Rlcl90eXBlIChnZGJhcmNoLCBtaWNy b2JsYXplX3JlZ2lzdGVyX3R5cGUpOworCisgIC8qIFJlZ2lzdGVyIG51bWJl cnMgb2YgdmFyaW91cyBpbXBvcnRhbnQgcmVnaXN0ZXJzLiAgKi8KKyAgc2V0 X2dkYmFyY2hfc3BfcmVnbnVtIChnZGJhcmNoLCBNSUNST0JMQVpFX1NQX1JF R05VTSk7IAorICBzZXRfZ2RiYXJjaF9wY19yZWdudW0gKGdkYmFyY2gsIE1J Q1JPQkxBWkVfUENfUkVHTlVNKTsgCisKKyAgLyogTWFwIER3YXJmMiByZWdp c3RlcnMgdG8gR0RCIHJlZ2lzdGVycy4gICovCisgIHNldF9nZGJhcmNoX2R3 YXJmMl9yZWdfdG9fcmVnbnVtIChnZGJhcmNoLCBtaWNyb2JsYXplX2R3YXJm Ml9yZWdfdG9fcmVnbnVtKTsKKworICAvKiBDYWxsIGR1bW15IGNvZGUuICAq LworICBzZXRfZ2RiYXJjaF9jYWxsX2R1bW15X2xvY2F0aW9uIChnZGJhcmNo LCBPTl9TVEFDSyk7CisgIHNldF9nZGJhcmNoX3B1c2hfZHVtbXlfY29kZSAo Z2RiYXJjaCwgbWljcm9ibGF6ZV9wdXNoX2R1bW15X2NvZGUpOworICBzZXRf Z2RiYXJjaF9wdXNoX2R1bW15X2NhbGwgKGdkYmFyY2gsIG1pY3JvYmxhemVf cHVzaF9kdW1teV9jYWxsKTsKKworICBzZXRfZ2RiYXJjaF9yZXR1cm5fdmFs dWUgKGdkYmFyY2gsIG1pY3JvYmxhemVfcmV0dXJuX3ZhbHVlKTsKKyAgc2V0 X2dkYmFyY2hfc3RhYnNfYXJndW1lbnRfaGFzX2FkZHIKKyAgICAoZ2RiYXJj aCwgbWljcm9ibGF6ZV9zdGFic19hcmd1bWVudF9oYXNfYWRkcik7CisKKyAg c2V0X2dkYmFyY2hfc2tpcF9wcm9sb2d1ZSAoZ2RiYXJjaCwgbWljcm9ibGF6 ZV9za2lwX3Byb2xvZ3VlKTsKKworICAvKiBTdGFjayBncm93cyBkb3dud2Fy ZC4gICovCisgIHNldF9nZGJhcmNoX2lubmVyX3RoYW4gKGdkYmFyY2gsIGNv cmVfYWRkcl9sZXNzdGhhbik7CisKKyAgc2V0X2dkYmFyY2hfYnJlYWtwb2lu dF9mcm9tX3BjIChnZGJhcmNoLCBtaWNyb2JsYXplX2JyZWFrcG9pbnRfZnJv bV9wYyk7CisKKyAgc2V0X2dkYmFyY2hfZnJhbWVfYXJnc19za2lwIChnZGJh cmNoLCA4KTsKKworICBzZXRfZ2RiYXJjaF9wcmludF9pbnNuIChnZGJhcmNo LCBwcmludF9pbnNuX21pY3JvYmxhemUpOworCisgIHNldF9nZGJhcmNoX3Nv ZnR3YXJlX3NpbmdsZV9zdGVwIChnZGJhcmNoLCBtaWNyb2JsYXplX3NvZnR3 YXJlX3NpbmdsZV9zdGVwKTsKKyAgc2V0X2dkYmFyY2hfd3JpdGVfcGMgKGdk YmFyY2gsIG1pY3JvYmxhemVfd3JpdGVfcGMpOworCisgIHNldF9nZGJhcmNo X3Vud2luZF9wYyAoZ2RiYXJjaCwgbWljcm9ibGF6ZV91bndpbmRfcGMpOwor CisgIGZyYW1lX2Jhc2Vfc2V0X2RlZmF1bHQgKGdkYmFyY2gsICZtaWNyb2Js YXplX2ZyYW1lX2Jhc2UpOworCisgIC8qIEhvb2sgaW4gQUJJLXNwZWNpZmlj IG92ZXJyaWRlcywgaWYgdGhleSBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4gICov CisgIGdkYmFyY2hfaW5pdF9vc2FiaSAoaW5mbywgZ2RiYXJjaCk7CisKKyAg LyogVW53aW5kIHRoZSBmcmFtZS4gKi8KKyAgZHdhcmYyX2FwcGVuZF91bndp bmRlcnMgKGdkYmFyY2gpOworICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2lu ZGVyIChnZGJhcmNoLCAmbWljcm9ibGF6ZV9mcmFtZV91bndpbmQpOworICBm cmFtZV9iYXNlX2FwcGVuZF9zbmlmZmVyIChnZGJhcmNoLCBkd2FyZjJfZnJh bWVfYmFzZV9zbmlmZmVyKTsKKworICByZXR1cm4gZ2RiYXJjaDsKK30KKwor aW50CittaWNyb2JsYXplX2ZyYW1lX251bV9hcmdzX3AgKHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoKQoreworICByZXR1cm4gMDsKK30KKworLyogUHJvdmlk ZSBhIHByb3RvdHlwZSB0byBzaWxlbmNlIC1XbWlzc2luZy1wcm90b3R5cGVz LiAgKi8KK3ZvaWQgX2luaXRpYWxpemVfbWljcm9ibGF6ZV90ZGVwICh2b2lk KTsKKwordm9pZAorX2luaXRpYWxpemVfbWljcm9ibGF6ZV90ZGVwICh2b2lk KQoreworICByZWdpc3Rlcl9nZGJhcmNoX2luaXQgKGJmZF9hcmNoX21pY3Jv YmxhemUsIG1pY3JvYmxhemVfZ2RiYXJjaF9pbml0KTsKKworICAvKiBEZWJ1 ZyB0aGlzIGZpbGVzIGludGVybmFscy4gKi8KKyAgYWRkX3NldHNob3dfemlu dGVnZXJfY21kICgibWljcm9ibGF6ZSIsIGNsYXNzX21haW50ZW5hbmNlLAor CQkJICAgICZtaWNyb2JsYXplX2RlYnVnLCBfKCJcCitTZXQgbWljcm9ibGF6 ZSBkZWJ1Z2dpbmcuIiksIF8oIlwKK1Nob3cgbWljcm9ibGF6ZSBkZWJ1Z2dp bmcuIiksIF8oIlwKK1doZW4gbm9uLXplcm8sIG1pY3JvYmxhemUgc3BlY2lm aWMgZGVidWdnaW5nIGlzIGVuYWJsZWQuIiksCisJCQkgICAgTlVMTCwKKwkJ CSAgICBOVUxMLCAKKwkJCSAgICAmc2V0ZGVidWdsaXN0LCAmc2hvd2RlYnVn bGlzdCk7CisKK30KZGlmZiAtdXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4 Y2x1ZGUgREVWLVBIQVNFIC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMg Z2RiL2dkYi9taWNyb2JsYXplLXRkZXAuaCBtYi1nZGIvZ2RiL21pY3JvYmxh emUtdGRlcC5oCi0tLSBnZGIvZ2RiL21pY3JvYmxhemUtdGRlcC5oCTE5Njkt MTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBtYi1nZGIvZ2Ri L21pY3JvYmxhemUtdGRlcC5oCTIwMDktMTAtMDUgMTQ6MzQ6MTQuMDAwMDAw MDAwIC0wNzAwCkBAIC0wLDAgKzEsMTIxIEBACisvKiBUYXJnZXQtZGVwZW5k ZW50IGNvZGUgZm9yIFhpbGlueCBNaWNyb0JsYXplLgorCisgICBDb3B5cmln aHQgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAg VGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uICAqLworCisjaWZuZGVmIE1JQ1JPQkxBWkVfVERFUF9ICisjZGVm aW5lIE1JQ1JPQkxBWkVfVERFUF9IIDEKKworCisvKiBNaWNyb2JsYXplIGFy Y2hpdGVjdHVyZS1zcGVjaWZpYyBpbmZvcm1hdGlvbi4gICovCitzdHJ1Y3Qg Z2RiYXJjaF90ZGVwCit7Cit9OworCitzdHJ1Y3QgbWljcm9ibGF6ZV9mcmFt ZV9jYWNoZQoreworICAvKiBCYXNlIGFkZHJlc3MuICAqLworICBDT1JFX0FE RFIgYmFzZTsKKyAgQ09SRV9BRERSIHBjOworCisgIC8qIERvIHdlIGhhdmUg YSBmcmFtZT8gICovCisgIGludCBmcmFtZWxlc3NfcDsKKworICAvKiBGcmFt ZSBzaXplLiAgKi8KKyAgaW50IGZyYW1lc2l6ZTsKKworICAvKiBGcmFtZSBy ZWdpc3Rlci4gICovCisgIGludCBmcF9yZWdudW07CisKKyAgLyogT2Zmc2V0 cyB0byBzYXZlZCByZWdpc3RlcnMuICAqLworICBpbnQgcmVnaXN0ZXJfb2Zm c2V0c1s1N107CS8qIE11c3QgbWF0Y2ggTUlDUk9CTEFaRV9OVU1fUkVHUy4g ICovCisKKyAgLyogVGFibGUgb2Ygc2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKyAg c3RydWN0IHRyYWRfZnJhbWVfc2F2ZWRfcmVnICpzYXZlZF9yZWdzOworfTsK KworLyogUmVnaXN0ZXIgbnVtYmVycy4gICovCitlbnVtIG1pY3JvYmxhemVf cmVnbnVtIAoreworICBNSUNST0JMQVpFX1IwX1JFR05VTSwKKyAgTUlDUk9C TEFaRV9SMV9SRUdOVU0sIE1JQ1JPQkxBWkVfU1BfUkVHTlVNID0gTUlDUk9C TEFaRV9SMV9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjJfUkVHTlVNLAorICBN SUNST0JMQVpFX1IzX1JFR05VTSwgTUlDUk9CTEFaRV9SRVRWQUxfUkVHTlVN ID0gTUlDUk9CTEFaRV9SM19SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjRfUkVH TlVNLAorICBNSUNST0JMQVpFX1I1X1JFR05VTSwgTUlDUk9CTEFaRV9GSVJT VF9BUkdSRUcgPSBNSUNST0JMQVpFX1I1X1JFR05VTSwKKyAgTUlDUk9CTEFa RV9SNl9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjdfUkVHTlVNLAorICBNSUNS T0JMQVpFX1I4X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SOV9SRUdOVU0sCisg IE1JQ1JPQkxBWkVfUjEwX1JFR05VTSwgTUlDUk9CTEFaRV9MQVNUX0FSR1JF RyA9IE1JQ1JPQkxBWkVfUjEwX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SMTFf UkVHTlVNLAorICBNSUNST0JMQVpFX1IxMl9SRUdOVU0sCisgIE1JQ1JPQkxB WkVfUjEzX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SMTRfUkVHTlVNLAorICBN SUNST0JMQVpFX1IxNV9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjE2X1JFR05V TSwKKyAgTUlDUk9CTEFaRV9SMTdfUkVHTlVNLAorICBNSUNST0JMQVpFX1Ix OF9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjE5X1JFR05VTSwKKyAgTUlDUk9C TEFaRV9SMjBfUkVHTlVNLAorICBNSUNST0JMQVpFX1IyMV9SRUdOVU0sCisg IE1JQ1JPQkxBWkVfUjIyX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SMjNfUkVH TlVNLAorICBNSUNST0JMQVpFX1IyNF9SRUdOVU0sCisgIE1JQ1JPQkxBWkVf UjI1X1JFR05VTSwKKyAgTUlDUk9CTEFaRV9SMjZfUkVHTlVNLAorICBNSUNS T0JMQVpFX1IyN19SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUjI4X1JFR05VTSwK KyAgTUlDUk9CTEFaRV9SMjlfUkVHTlVNLAorICBNSUNST0JMQVpFX1IzMF9S RUdOVU0sCisgIE1JQ1JPQkxBWkVfUjMxX1JFR05VTSwKKyAgTUlDUk9CTEFa RV9QQ19SRUdOVU0sCisgIE1JQ1JPQkxBWkVfTVNSX1JFR05VTSwKKyAgTUlD Uk9CTEFaRV9FQVJfUkVHTlVNLAorICBNSUNST0JMQVpFX0VTUl9SRUdOVU0s CisgIE1JQ1JPQkxBWkVfRlNSX1JFR05VTSwKKyAgTUlDUk9CTEFaRV9CVFJf UkVHTlVNLAorICBNSUNST0JMQVpFX1BWUjBfUkVHTlVNLAorICBNSUNST0JM QVpFX1BWUjFfUkVHTlVNLAorICBNSUNST0JMQVpFX1BWUjJfUkVHTlVNLAor ICBNSUNST0JMQVpFX1BWUjNfUkVHTlVNLAorICBNSUNST0JMQVpFX1BWUjRf UkVHTlVNLAorICBNSUNST0JMQVpFX1BWUjVfUkVHTlVNLAorICBNSUNST0JM QVpFX1BWUjZfUkVHTlVNLAorICBNSUNST0JMQVpFX1BWUjdfUkVHTlVNLAor ICBNSUNST0JMQVpFX1BWUjhfUkVHTlVNLAorICBNSUNST0JMQVpFX1BWUjlf UkVHTlVNLAorICBNSUNST0JMQVpFX1BWUjEwX1JFR05VTSwKKyAgTUlDUk9C TEFaRV9QVlIxMV9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUkVEUl9SRUdOVU0s CisgIE1JQ1JPQkxBWkVfUlBJRF9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUlpQ Ul9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUlRMQlhfUkVHTlVNLAorICBNSUNS T0JMQVpFX1JUTEJTWF9SRUdOVU0sCisgIE1JQ1JPQkxBWkVfUlRMQkxPX1JF R05VTSwKKyAgTUlDUk9CTEFaRV9SVExCSElfUkVHTlVNCit9OworCisvKiBN SUNST0JMQVpFX0JSRUFLUE9JTlQgZGVmaW5lcyB0aGUgYnJlYWtwb2ludCB0 aGF0IHNob3VsZCBiZSB1c2VkLgorICAgT25seSB1c2VkIGZvciBuYXRpdmUg ZGVidWdnaW5nLiAgKi8KKyNkZWZpbmUgTUlDUk9CTEFaRV9CUkVBS1BPSU5U IHsweGI5LCAweGNjLCAweDAwLCAweDYwfQorCitleHRlcm4gQ09SRV9BRERS IG1pY3JvYmxhemVfYW5hbHl6ZV9wcm9sb2d1ZSAoQ09SRV9BRERSLCBDT1JF X0FERFIsIAorCQkJCQkgICAgICBzdHJ1Y3QgbWljcm9ibGF6ZV9mcmFtZV9j YWNoZSAqKTsKKworCisjZW5kaWYgLyogbWljcm9ibGF6ZS10ZGVwLmggKi8K ZGlmZiAtdXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4Y2x1ZGUgREVWLVBI QVNFIC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMgZ2RiL2dkYi9ORVdT IG1iLWdkYi9nZGIvTkVXUwotLS0gZ2RiL2dkYi9ORVdTCTIwMDktMTAtMDQg MTA6Mzk6MzAuMDAwMDAwMDAwIC0wNzAwCisrKyBtYi1nZGIvZ2RiL05FV1MJ MjAwOS0xMC0wNSAxMDo1Mjo0Ny4wMDAwMDAwMDAgLTA3MDAKQEAgLTQ4Miw2 ICs0ODIsMTEgQEAgTGF0dGljZSBNaWNvMzIgICAgICAgICAgICAgICAgICBs bTMyLSoKIHg4NiBESUNPUwkJCWlbMzQ1NjddODYtKi1kaWNvcyoKIHg4Nl82 NCBESUNPUwkJICAgICAgICB4ODZfNjQtKi1kaWNvcyoKIFMrY29yZSAzCQkJ c2NvcmUtKi0qCitYaWxpbnggTWljcm9CbGF6ZQkJbWljcm9ibGF6ZS0qLSoK KworKiBOZXcgU2ltdWxhdG9ycworCitYaWxpbnggTWljcm9CbGF6ZQkJbWlj cm9ibGF6ZQogCiAqIFRoZSBHREIgcmVtb3RlIHN0dWIsIGdkYnNlcnZlciwg bm93IHN1cHBvcnRzIHg4NiBXaW5kb3dzIENFCiAgIChtaW5ndzMyY2UpIGRl YnVnZ2luZy4KZGlmZiAtdXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4Y2x1 ZGUgREVWLVBIQVNFIC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMgZ2Ri L29wY29kZXMvbWljcm9ibGF6ZS1kaXMuYyBtYi1nZGIvb3Bjb2Rlcy9taWNy b2JsYXplLWRpcy5jCi0tLSBnZGIvb3Bjb2Rlcy9taWNyb2JsYXplLWRpcy5j CTIwMDktMDktMjUgMTI6NTk6NTEuMDAwMDAwMDAwIC0wNzAwCisrKyBtYi1n ZGIvb3Bjb2Rlcy9taWNyb2JsYXplLWRpcy5jCTIwMDktMTAtMDUgMTQ6MTg6 NTguMDAwMDAwMDAwIC0wNzAwCkBAIC0yNCw5ICsyNCwxMCBAQAogI2RlZmlu ZSBTVEFUSUNfVEFCTEUKICNkZWZpbmUgREVGSU5FX1RBQkxFCiAKLSNpbmNs dWRlICJtaWNyb2JsYXplLW9wYy5oIgogI2luY2x1ZGUgImRpcy1hc20uaCIK ICNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSAibWljcm9ibGF6ZS1v cGMuaCIKKyNpbmNsdWRlICJtaWNyb2JsYXplLWRpcy5oIgogCiAjZGVmaW5l IGdldF9maWVsZF9yZChpbnN0cikgICAgICAgIGdldF9maWVsZCAoaW5zdHIs IFJEX01BU0ssIFJEX0xPVykKICNkZWZpbmUgZ2V0X2ZpZWxkX3IxKGluc3Ry KSAgICAgICAgZ2V0X2ZpZWxkIChpbnN0ciwgUkFfTUFTSywgUkFfTE9XKQpA QCAtMzUsMTEgKzM2LDYgQEAKICNkZWZpbmUgZ2V0X2ludF9maWVsZF9yMShp bnN0cikgICAgKChpbnN0ciAmIFJBX01BU0spID4+IFJBX0xPVykKIAogCi1l bnVtIG1pY3JvYmxhemVfaW5zdHIgZ2V0X2luc25fbWljcm9ibGF6ZSAobG9u ZywgYmZkX2Jvb2xlYW4gKiwgCi0JCQkJCSAgIGVudW0gbWljcm9ibGF6ZV9p bnN0cl90eXBlICosIHNob3J0ICopOwotdW5zaWduZWQgbG9uZyBtaWNyb2Js YXplX2dldF90YXJnZXRfYWRkcmVzcyAobG9uZywgYmZkX2Jvb2xlYW4sIGlu dCwgbG9uZywgbG9uZywKLQkJCQkJICAgICBsb25nLCBiZmRfYm9vbGVhbiAq LCBiZmRfYm9vbGVhbiAqKTsKLWVudW0gbWljcm9ibGF6ZV9pbnN0ciBtaWNy b2JsYXplX2RlY29kZV9pbnNuIChsb25nIGluc24sIGludCAqcmQsIGludCAq cmEsIGludCAqcmIsIGludCAqaW1tKTsKIAogc3RhdGljIGNoYXIgKgogZ2V0 X2ZpZWxkIChsb25nIGluc3RyLCBsb25nIG1hc2ssIHVuc2lnbmVkIHNob3J0 IGxvdykKZGlmZiAtdXJOcCAtLWV4Y2x1ZGUgJyouc3dwJyAtLWV4Y2x1ZGUg REVWLVBIQVNFIC0tZXhjbHVkZSAuc3ZuIC0tZXhjbHVkZSBDVlMgZ2RiL29w Y29kZXMvbWljcm9ibGF6ZS1kaXMuaCBtYi1nZGIvb3Bjb2Rlcy9taWNyb2Js YXplLWRpcy5oCi0tLSBnZGIvb3Bjb2Rlcy9taWNyb2JsYXplLWRpcy5oCTE5 NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBtYi1nZGIv b3Bjb2Rlcy9taWNyb2JsYXplLWRpcy5oCTIwMDktMTAtMDUgMTQ6MTE6MTUu MDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMzQgQEAKKy8qIERpc2Fzc2Vt YmxlIFhpbGlueCBtaWNyb2JsYXplIGluc3RydWN0aW9ucy4KKworICAgQ29w eXJpZ2h0IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisK KyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgb3Bjb2RlcyBsaWJy YXJ5LgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikK KyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBJdCBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lU SE9VVAorICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVy YWwgUHVibGljCisgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgZmls ZTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRo ZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBT dHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICAgTUEgMDIxMTAtMTMw MSwgVVNBLiAgKi8KKworI2lmbmRlZiBNSUNST0JMQVpFX0RJU19ICisjZGVm aW5lIE1JQ1JPQkxBWkVfRElTX0ggMQorCitleHRlcm4gZW51bSBtaWNyb2Js YXplX2luc3RyIG1pY3JvYmxhemVfZGVjb2RlX2luc24gKGxvbmcsIGludCAq LCBpbnQgKiwgCisJCQkJCQkgICAgIGludCAqLCBpbnQgKik7CitleHRlcm4g dW5zaWduZWQgbG9uZyBtaWNyb2JsYXplX2dldF90YXJnZXRfYWRkcmVzcyAo bG9uZywgYmZkX2Jvb2xlYW4sIGludCwKKwkJCSAgICAgICBsb25nLCBsb25n LCBsb25nLCBiZmRfYm9vbGVhbiAqLCBiZmRfYm9vbGVhbiAqKTsKKworZXh0 ZXJuIGVudW0gbWljcm9ibGF6ZV9pbnN0ciBnZXRfaW5zbl9taWNyb2JsYXpl IChsb25nLCBiZmRfYm9vbGVhbiAqLCAKKwkJCQkJCSAgZW51bSBtaWNyb2Js YXplX2luc3RyX3R5cGUgKiwKKyAgCQkgICAgIAkJCQkgIHNob3J0ICopOwor CisjZW5kaWYgLyogbWljcm9ibGF6ZS1kaXMuaCAqLwo= --------------020601040508010607090309--