From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 637 invoked by alias); 4 Feb 2013 22:52:08 -0000 Received: (qmail 606 invoked by uid 22791); 4 Feb 2013 22:52:04 -0000 X-SWARE-Spam-Status: No, hits=-4.5 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CP,TW_EG,TW_RV,TW_TR,TW_XS,TW_XZ X-Spam-Check-By: sourceware.org Received: from mail-ob0-f172.google.com (HELO mail-ob0-f172.google.com) (209.85.214.172) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 04 Feb 2013 22:51:50 +0000 Received: by mail-ob0-f172.google.com with SMTP id tb18so6947670obb.17 for ; Mon, 04 Feb 2013 14:51:49 -0800 (PST) X-Received: by 10.60.27.136 with SMTP id t8mr10675979oeg.92.1360018309585; Mon, 04 Feb 2013 14:51:49 -0800 (PST) MIME-Version: 1.0 Received: by 10.60.46.133 with HTTP; Mon, 4 Feb 2013 14:51:09 -0800 (PST) In-Reply-To: References: <1358519377.21794.2@abidh-ubunto1104> From: Hui Zhu Date: Mon, 04 Feb 2013 22:52:00 -0000 Message-ID: Subject: Re: [PATCH] Add CTF support to GDB [1/4] Add "-ctf" to tsave command To: "Abid, Hafiz" Cc: Tom Tromey , "Zhu, Hui" , "gdb-patches@sourceware.org" Content-Type: multipart/mixed; boundary=e89a8fb1fe2a3b1c9904d4edf08c 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: 2013-02/txt/msg00103.txt.bz2 --e89a8fb1fe2a3b1c9904d4edf08c Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Content-length: 19992 On Mon, Feb 4, 2013 at 11:33 PM, Abid, Hafiz wrote: > Hi Hui, > I tested the latest patch. I get some build error due to uninitialized lo= cal variables. > ../../gdb/gdb/ctf.c: In function =91ctf_save_collect_get_1=92: > ../../gdb/gdb/ctf.c:636:21: error: =91type=92 may be used uninitialised i= n this function [-Werror=3Duninitialized] > ../../gdb/gdb/ctf.c: In function =91ctf_save_collect_get=92: > ../../gdb/gdb/ctf.c:734:28: error: =91pc=92 may be used uninitialised in = this function [-Werror=3Duninitialized] > ../../gdb/gdb/ctf.c: In function =91ctf_save_tp_find=92: > ../../gdb/gdb/ctf.c:823:7: error: =91pc=92 may be used uninitialised in t= his function [-Werror=3Duninitialized] > ../../gdb/gdb/ctf.c: In function =91ctf_save=92: > ../../gdb/gdb/ctf.c:1323:33: error: =91content=92 may be used uninitialis= ed in this function [-Werror=3Duninitialized] > ../../gdb/gdb/ctf.c:1307:56: error: =91val=92 may be used uninitialised i= n this function [-Werror=3Duninitialized] > > After fixing that, I can see that array and while-stepping are working OK= . As I understand, bitfields are not yet supported in babeltrace. So that t= akes care of most of the issues I reported. > > Regards, > Abid Hi Abid, Thanks for your help. I just post a new version that fixed these issues. Best, Hui 2013-02-05 Hui Zhu * Makefile.in (REMOTE_OBS): Add ctf.o. (SFILES): Add ctf.c. (HFILES_NO_SRCDIR): Add ctf.h. * ctf.c, ctf.h: New files. * breakpoint.c (tracepoint_count): Remove static. * mi/mi-main.c (ctf.h): New include. (mi_cmd_trace_save): Add "-ctf". * tracepoint.c (ctf.h): New include. (collect_pseudocommand): Remove static. (trace_save_command): Add "-ctf". (_initialize_tracepoint): Ditto. * tracepoint.h (stack.h): New include. (collect_pseudocommand): Add extern. > ________________________________________ > From: Hui Zhu [teawater@gmail.com] > Sent: Wednesday, January 23, 2013 1:32 PM > To: Abid, Hafiz > Cc: Tom Tromey; Zhu, Hui; gdb-patches@sourceware.org > Subject: Re: [PATCH] Add CTF support to GDB [1/4] Add "-ctf" to tsave com= mand > > Hi Abid, > > I post a new version according to your comments. > > Following part have the reply for your comments. > > Thanks, > Hui > > 2013-01-23 Hui Zhu > > * Makefile.in (REMOTE_OBS): Add ctf.o. > (SFILES): Add ctf.c. > (HFILES_NO_SRCDIR): Add ctf.h. > * ctf.c, ctf.h: New files. > * breakpoint.c (tracepoint_count): Remove static. > * mi/mi-main.c (ctf.h): New include. > (mi_cmd_trace_save): Add "-ctf". > * tracepoint.c (ctf.h): New include. > (collect_pseudocommand): Remove static. > (trace_save_command): Add "-ctf". > (_initialize_tracepoint): Ditto. > * tracepoint.h (stack.h): New include. > (collect_pseudocommand): Add extern. > > On Fri, Jan 18, 2013 at 10:29 PM, Hafiz Abid Qadeer > wrote: >> On 18/01/13 01:16:24, Hui Zhu wrote: >>> >>> Hi Abid, >>> >>> Thanks for your review. >>> >>> On Mon, Jan 14, 2013 at 10:27 PM, Abid, Hafiz >>> wrote: >>> > Hi Hui, >>> > I tested your patch and found a few problems. I used 'tsave -ctf outp= ut' >>> > and then used babeltrace to get a text dump of the output. >>> > >>> > 1. In case of array, the tracing results are off by one. >>> > 2. Struct members values are not shown correctly in case of bitfields. >>> >>> Could you give me some example about this 2 issues? >>> And I just fixed some type issue with while-stepping. I think maybe >>> they were fixed in the new patch. >>> >> I made an array of size 5 and gave it elements values from 5 to 9. I >> collected this array in trace. After trace was finished, GDB will show >> correct values of all the array elements. But in babeltrace, the first >> element would have value of 6 and last will have a garbage value. So it >> looked that values are off by one index. >> >> For bitfield, I had a structure like this and I observed that value of b= was >> not correct in babeltrace. >> struct test_main >> { >> int a; >> int b: 16; >> int c: 16; >> }; >> >> I will send you my test application offline. > > Thanks. This issue is because old patch doesn't support bitfields. I > add them in the new patch. But babeltrace doesn't support gcc > bitfields. So I didn't update test for bitfields. > >> >> >>> > 3. When I use while-stepping on tracepoints actions, I see some error= in >>> > the babeltrace. >>> >>> Fixed. And I think it is a good idea for test. So I updated test for >>> this issue. >>> >>> > 4. It looks that TYPE_CODE_FLT is not supported which cause the >>> > following warning when I use collect $reg on the tracepoint actions. >>> > "warning: error saving tracepoint 2 "$st0" to CTF file: type is not >>> > support." >>> >>> Yes. current patch is still not support all the type of GDB. >>> >>> > >>> > Below are some comments on the code. I see many tab characters in the >>> > patch. It may be problem in my editor but something to keep an eye on. >>> > >>> >>+#define CTF_PACKET_SIZE 4096 >>> > It may be my ignorance but is this size sufficient? Should it be >>> > possible to increase the limit using some command? >>> >>> Yes, add a command to change current ctf_packet_size is a good idea. >>> Do you mind I add it after CTF patch get commit? Then we can keep >>> focus on the current function of CTF patch. >> >> I dont have any problem with fixed size. I was just giving an idea that = you >> may want to implement in future. >> >> >>> >>> > >>> >>+ /* This is the content size of current packet. */ >>> >>+ size_t content_size; >>> > ... >>> >>+ /* This is the content size of current packet and event that is >>> >>+ being written to file. >>> >>+ Check size use it. */ >>> >>+ size_t current_content_size; >>> > I don't fully understand the difference between these 2 variables. >>> > Probably they need a more helpful comment. >>> > >>> >>> I update it to: >>> /* This is the temp value of CONTENT_SIZE when GDB write a event to >>> CTF file. >>> If this event save success, CURRENT_CONTENT_SIZE will set to >>> CONTENT_SIZE. */ >>> size_t current_content_size; >>> >>> >> +error saving tracepoint %d \"%s\" to CTF file: type is not support.= "), >>> > 'supported' instead of 'support'. >>> >>> Fixed. >>> >>> > >>> >>+ sprintf (regname, "$%s", name); >>> >>+ sprintf (file_name, "%s/%s", dirname, CTF_METADATA_NAME); >>> >>+ sprintf (file_name, "%s/%s", dirname, CTF_DATASTREAM_NAME); >>> > Please use xsnprintf. There are also a bunch of snprintf calls in this >>> > file. >>> >>> The size of file_name is alloca as the right size for both this >>> string. So I think this part doesn't need xsnprintf. >>> file_name =3D alloca (strlen (dirname) + 1 >>> + strlen (CTF_DATASTREAM_NAME) + 1); >>> > >>> >>+ case '$': >>> >>+ collect->ctf_str >>> >>+ =3D ctf_save_metadata_change_char >>> >> (collect->ctf_str, >>> >>+ i, "dollar"= ); >>> > This will change expression like $eip in gdb to dollar_eip in ctf. Do= es >>> > CTF forbid these characters? >>> >>> No. >> >> In that case, the question will be why we do this change from $eip to >> dollar_eip. > > Oops, sorry for my mistake. CTF doesn't support this char like $ or > something else. > >> >> >>> >>> > >>> >>+static void >>> >>+tsv_save_do_loc_arg_collect (const char *print_name, >>> >>+ struct symbol *sym, >>> >>+ void *cb_data) >>> >>+{ >>> >>+ struct loc_arg_collect_data *p =3D cb_data; >>> >>+ char *name; >>> >>+ >>> >>+ name =3D alloca (strlen (print_name) + 1); >>> >>+ strcpy (name, print_name); >>> >>+ ctf_save_collect_get_1 (p->tcsp, p->tps, name); >>> >>+} >>> > Is there any real need to make a copy of the print_name? I think it c= an >>> > be passed directly to the ctf_save_collect_get_1. >>> >>> This is because print_name is a const but ctf_save_collect_get_1's >>> argument name need to be a string that is not a const. >>> Added comments for that. >> >> You probably would have done a cast or perhaps ctf_save_collect_get_1's >> argument can be changed to const. >> > > Fixed. > >> >>> >>> > >>> >>+ tmp =3D alloca (strlen (collect->ctf_str) + 30); >>> >>+ strcpy (tmp, collect->ctf_str); >>> >>+ while (1) >>> >>+ { >>> >>+ struct ctf_save_collect_s *collect2; >>> >>+ int i =3D 0; >>> >>+ >>> >>+ for (collect2 =3D tps->collect; collect2; >>> >>+ collect2 =3D collect2->next) >>> >>+ { >>> >>+ if (collect2->ctf_str >>> >>+ && strcmp (collect2->ctf_str, tmp) =3D=3D 0) >>> >>+ break; >>> >>+ } >>> >>+ if (collect2 =3D=3D NULL) >>> >>+ break; >>> >>+ >>> >>+ snprintf (tmp, strlen (collect->ctf_str) + 30, >>> >>+ "%s_%d", collect->ctf_str, i++); >>> >>+ } >>> > What is the purpose of this loop? It only writes a new string in the = tmp >>> > local variable which is not used after the loop. >>> >>> Fixed. >>> >>> > >>> >>+\"%s\" of tracepoint %d rename to \"%s\" in CTF file."), >>> > I think 'is renamed' will be better instead of rename here. >>> >>> Fixed. >>> >>> > >>> >>+ if (try_count > 1 || 4 + 4 + 4 =3D=3D tcs.content_size) >>> > what is the significance of this 4 + 4 + 4 >>> >>> Change it to CONTENT_HEADER_SIZE >>> >>> > >>> >>+traceframe %d of tracepoint %d need save data that bigger than packet >>> >> size %d.\n\ >>> > should be "needs to save data that is bigger than the packet size" >>> >>> Fixed. >>> >>> > >>> >>+traceframe %d is dropped because try to get the value of \"%s\" got >>> >> error: %s"), >>> > This probably needs to re-phrased. >>> >>> Fixed. >>> >>> > >>> > Also many comments can be improved grammatically. This will make them >>> > easier to understand. Please let me know if I need any help there. >>> > >>> > Thanks, >>> > Abid >>> >>> Post a new version according to your comments. >>> >>> Thanks, >>> Hui >>> >>> 2013-01-18 Hui Zhu >>> >>> * Makefile.in (REMOTE_OBS): Add ctf.o. >>> (SFILES): Add ctf.c. >>> (HFILES_NO_SRCDIR): Add ctf.h. >>> * ctf.c, ctf.h: New files. >>> * breakpoint.c (tracepoint_count): Remove static. >>> * mi/mi-main.c (ctf.h): New include. >>> (mi_cmd_trace_save): Add "-ctf". >>> * tracepoint.c (ctf.h): New include. >>> (collect_pseudocommand): Remove static. >>> (trace_save_command): Add "-ctf". >>> (_initialize_tracepoint): Ditto. >>> * tracepoint.h (stack.h): New include. >>> (collect_pseudocommand): Add extern. >>> >>> > >>> > ________________________________________ >>> > From: gdb-patches-owner@sourceware.org >>> > [gdb-patches-owner@sourceware.org] on behalf of Hui Zhu [teawater@gma= il.com] >>> > Sent: Monday, January 14, 2013 5:18 AM >>> > To: Tom Tromey >>> > Cc: Zhu, Hui; gdb-patches@sourceware.org >>> > Subject: Re: [PATCH] Add CTF support to GDB [1/4] Add "-ctf" to tsave >>> > command >>> > >>> > Hi Tom, >>> > >>> > I found a bug when I use test to test this patch. >>> > So I post a new version to fix this bug. >>> > The change of this patch is change the same type check to: >>> > static void >>> > ctf_save_type_define_write (struct ctf_save_s *tcsp, struct type *typ= e) >>> > { >>> > struct ctf_save_type_s *t; >>> > >>> > for (t =3D tcsp->type; t; t =3D t->next) >>> > { >>> > if (t->type =3D=3D type >>> > || (TYPE_NAME (t->type) && TYPE_NAME (type) >>> > && strcmp (TYPE_NAME (t->type), TYPE_NAME (type)) =3D= =3D 0)) >>> > return; >>> > } >>> > >>> > Thanks, >>> > Hui >>> > >>> > On Tue, Jan 8, 2013 at 9:40 AM, Hui Zhu wrote: >>> >> Hi Tom, >>> >> >>> >> Thanks for your review. >>> >> >>> >> On Fri, Jan 4, 2013 at 5:36 AM, Tom Tromey wrote: >>> >>>>>>>> "Hui" =3D=3D Hui Zhu writes: >>> >>> >>> >>> Hui> +struct ctf_save_collect_s >>> >>> Hui> +{ >>> >>> Hui> + struct ctf_save_collect_s *next; >>> >>> Hui> + char *str; >>> >>> Hui> + char *ctf_str; >>> >>> Hui> + int align_size; >>> >>> Hui> + struct expression *expr; >>> >>> Hui> + struct type *type; >>> >>> Hui> + int is_ret; >>> >>> Hui> +}; >>> >>> >>> >>>>> Like Hafiz said -- comments would be nice. >>> >>> >>> >>> Hui> I added some comments in the new patches. >>> >>> >>> >>> I looked at the new patches and did not see comments. For example,= I >>> >>> looked at this struct I quoted above. >>> >>> >>> >>> Every new structure, field, and function ought to have a comment. >>> >> >>> >> OK. I added comments for them in the new patch. >>> >> >>> >>> >>> >>> >>> >>> Hui> + case TYPE_CODE_ARRAY: >>> >>> Hui> + for (; TYPE_CODE (type) =3D=3D TYPE_CODE_ARRAY; >>> >>> Hui> + type =3D TYPE_TARGET_TYPE (type)) >>> >>> Hui> + ; >>> >>> >>> >>> Tom> You probably want some check_typedef calls in there. >>> >>> >>> >>> Hui> Because typedef will be handle as a type in this part, so this >>> >>> part >>> >>> Hui> doesn't need check_typedef. >>> >>> >>> >>> That seems peculiar to me, but I don't really know CTF. >>> >>> In this case you need a comment, since the result will be non-obvio= us >>> >>> to >>> >>> gdb developers. >>> >>> >>> >>> Tom> check_typedef; though if your intent is to peel just a single >>> >>> layer, >>> >>> Tom> then it is a bit trickier -- I think the best you can do is >>> >>> always call >>> >>> Tom> it, then use TYPE_TARGET_TYPE if it is non-NULL or the result = of >>> >>> Tom> check_typedef otherwise. >>> >>> >>> >>> Hui> If use check_typedef, this part will generate the define that >>> >>> Hui> different with the type descriptor of the code. >>> >>> >>> >>> You need to call check_typedef before you can even examine >>> >>> TYPE_TARGET_TYPE of a typedef. This is what I meant by using it >>> >>> before >>> >>> using TYPE_TARGET_TYPE. Otherwise with stubs I think you will see >>> >>> crashes -- check_typedef is what sets this field. >>> >>> >>> >>> If you then use TYPE_TARGET_TYPE and get NULL, you ought to instead >>> >>> use >>> >>> the result of check_typedef. This means the stub had to resolve to= a >>> >>> typedef in a different objfile. >>> >> >>> >> I change it to following part: >>> >> case TYPE_CODE_ARRAY: >>> >> /* This part just to get the real name of this array. >>> >> This part should keep typedef if it can. */ >>> >> for (; TYPE_CODE (type) =3D=3D TYPE_CODE_ARRAY; >>> >> type =3D TYPE_TARGET_TYPE (type) ? TYPE_TARGET_TYPE (type) >>> >> : check_typedef (type)) >>> >> ; >>> >> >>> >>> >>> >>> Hui> If use TYPE_TARGET_TYPE, it will generate following metadata: >>> >>> Hui> typedef char test_t1; >>> >>> Hui> typedef test_t1 test_t2; >>> >>> Hui> typedef test_t2 test_t3; >>> >>> >>> >>> I suppose there should be a test case doing this. >>> >> >>> >> OK. I will write a test for all this function. >>> >> >>> >>> >>> >>> Hui> + case TYPE_CODE_PTR: >>> >>> Hui> + align_size =3D TYPE_LENGTH (type); >>> >>> Hui> + break; >>> >>> >>> >>> Tom> Surely the alignment rules are ABI dependent. >>> >>> Tom> I would guess that what you have will work in many cases, but >>> >>> definitely >>> >>> Tom> not all of them. >>> >>> >>> >>> Hui> All the type will be handle and record in function >>> >>> Hui> ctf_save_type_check_and_write. >>> >>> Hui> The size align will be handle in this function too. >>> >>> >>> >>> I don't think this really addresses the issue. >>> >>> Not all platforms use the alignment rules currently coded in >>> >>> ctf_save_type_check_and_write. But maybe it doesn't matter. >>> >>> >>> >>> Hui> + frame =3D get_current_frame (); >>> >>> Hui> + if (!frame) >>> >>> Hui> + error (_("get current frame fail")); >>> >>> Hui> + frame =3D get_prev_frame (frame); >>> >>> Hui> + if (!frame) >>> >>> Hui> + error (_("get prev frame fail")); >>> >>> Tom> >>> >>> Tom> These messages could be improved. >>> >>> >>> >>> Actually, I don't think get_current_frame can return NULL, can it? >>> >>> >>> >>> For the second error, how about "could not find previous frame"? >>> >> >>> >> Fixed. >>> >> >>> >>> >>> >>> Hui> + warning (_("\ >>> >>> Hui> +Not save \"%s\" of tracepoint %d to ctf file because get its >>> >>> Hui> value fail: %s"), >>> >>> Hui> + str, tps->tp->base.number, e.message); >>> >>> Tom> >>> >>> Tom> Likewise. >>> >>> >>> >>> Hui> Could you help me with this part? :) >>> >>> >>> >>> How about "error saving tracepoint %d to CTF file %s: %s". >>> >> >>> >> It is more better. I updated them all. >>> >> >>> >>> >>> >>> Tom> Although, this approach just seems weird, since it seems like = you >>> >>> Tom> already have the symbol and you want its value; constructing a= nd >>> >>> parsing >>> >>> Tom> an expression to get this is very roundabout. >>> >>> Tom> >>> >>> Tom> I'm not sure I really understand the goal here; but the parsing >>> >>> approach >>> >>> Tom> is particularly fragile if you have shadowing. >>> >>> >>> >>> Hui> Function ctf_save_collect_get will parse the collect string and >>> >>> add >>> >>> Hui> them to struct. >>> >>> Hui> Each tracepoint will call this function just once. >>> >>> >>> >>> Ok, I don't know the answer here. >>> >> >>> >> I am sorry that this part is not very clear. So I update the commen= ts >>> >> of ctf_save_collect_get to: >>> >> /* Get var that want to collect from STR and put them to TPS->collec= t. >>> >> This function will not be call when GDB add a new TP. */ >>> >> >>> >> static void >>> >> ctf_save_collect_get (struct ctf_save_s *tcsp, struct ctf_save_tp_s >>> >> *tps, >>> >> char *str) >>> >> >>> >> How about this? >>> >> >>> >>> >>> >>> Tom> Hmm, a lot of this code looks like code from tracepoint.c. >>> >>> Tom> I think it would be better to share the code if that is possib= le. >>> >>> >>> >>> Hui> I tried to share code with function add_local_symbols. But it= is >>> >>> not >>> >>> Hui> a big function and use different way to get block. >>> >>> >>> >>> I wonder why, and whether this means that the different ways of sav= ing >>> >>> will in fact write out different data. >>> >> >>> >> I added function add_local_symbols_1 for that. >>> >> >>> >>> >>> >>> Hui> + if (collect->expr) >>> >>> Hui> + free_current_contents (&collect->expr); >>> >>> >>> >>> Tom> Why free_current_contents here? >>> >>> Tom> That seems weird. >>> >>> >>> >>> Hui> If this collect is $_ret, it will not have collect->expr. Or >>> >>> maybe >>> >>> Hui> this collect will be free because when setup this collect get >>> >>> Hui> error. So check it before free it. >>> >>> >>> >>> You can just write xfree (collect->expr). >>> >>> You don't need a NULL check here. >>> >>> This applies to all those xfree calls. >>> >>> >>> >> >>> >> OK. Fixed. >>> >> >>> >> I post a new version. Please help me review it. >>> >> >>> >> Thanks, >>> >> Hui >>> >> >>> >> 2013-01-08 Hui Zhu >>> >> >>> >> * Makefile.in (REMOTE_OBS): Add ctf.o. >>> >> (SFILES): Add ctf.c. >>> >> (HFILES_NO_SRCDIR): Add ctf.h. >>> >> * ctf.c, ctf.h: New files. >>> >> * mi/mi-main.c (ctf.h): New include. >>> >> (mi_cmd_trace_save): Add "-ctf". >>> >> * tracepoint.c (ctf.h): New include. >>> >> (collect_pseudocommand): Remove static. >>> >> (trace_save_command): Add "-ctf". >>> >> (_initialize_tracepoint): Ditto. >>> >> * tracepoint.h (stack.h): New include. >>> >> (collect_pseudocommand): Add extern. >>> >> --e89a8fb1fe2a3b1c9904d4edf08c Content-Type: text/plain; charset=US-ASCII; name="tsave-ctf.txt" Content-Disposition: attachment; filename="tsave-ctf.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hcs7qtdp0 Content-length: 58804 LS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTUxMCw3 ICs1MTAsNyBAQCBTRVJfSEFSRFdJUkUgPSBAU0VSX0hBUkRXSVJFQAogIyBU aGUgYHJlbW90ZScgZGVidWdnaW5nIHRhcmdldCBpcyBzdXBwb3J0ZWQgZm9y IG1vc3QgYXJjaGl0ZWN0dXJlcywKICMgYnV0IG5vdCBhbGwgKGUuZy4gOTYw KQogUkVNT1RFX09CUyA9IHJlbW90ZS5vIGRjYWNoZS5vIHRyYWNlcG9pbnQu byBheC1nZW5lcmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vIFwKLQly ZW1vdGUtbm90aWYubworCXJlbW90ZS1ub3RpZi5vIGN0Zi5vCiAKICMgVGhp cyBpcyByZW1vdGUtc2ltLm8gaWYgYSBzaW11bGF0b3IgaXMgdG8gYmUgbGlu a2VkIGluLgogU0lNX09CUyA9IEBTSU1fT0JTQApAQCAtNzU5LDcgKzc1OSw3 IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFkYS10eXBlcHIK IAlyZWdzZXQuYyBzb2wtdGhyZWFkLmMgd2luZG93cy10ZXJtY2FwLmMgXAog CWNvbW1vbi9nZGJfdmVjcy5jIGNvbW1vbi9jb21tb24tdXRpbHMuYyBjb21t b24veG1sLXV0aWxzLmMgXAogCWNvbW1vbi9wdGlkLmMgY29tbW9uL2J1ZmZl ci5jIGdkYi1kbGZjbi5jIGNvbW1vbi9hZ2VudC5jIFwKLQljb21tb24vZm9y bWF0LmMKKwljb21tb24vZm9ybWF0LmMgY3RmLmMKIAogTElOVEZJTEVTID0g JChTRklMRVMpICQoWVlGSUxFUykgJChDT05GSUdfU1JDUykgaW5pdC5jCiAK QEAgLTgzNSw3ICs4MzUsNyBAQCBnbnVsaWIvaW1wb3J0L3N0ZGRlZi5pbi5o IGdudWxpYi9pbXBvcnQvCiBjb21tb24vY29tbW9uLXV0aWxzLmggY29tbW9u L3htbC11dGlscy5oIGNvbW1vbi9idWZmZXIuaCBjb21tb24vcHRpZC5oIFwK IGNvbW1vbi9mb3JtYXQuaCBjb21tb24vaG9zdC1kZWZzLmggdXRpbHMuaCBj b21tb24vcXVldWUuaCBcCiBjb21tb24vbGludXgtb3NkYXRhLmggZ2RiLWRs ZmNuLmggYXV0by1sb2FkLmggcHJvYmUuaCBzdGFwLXByb2JlLmggXAotZ2Ri X2JmZC5oIHNwYXJjLXJhdmVuc2Nhci10aHJlYWQuaCBwcGMtcmF2ZW5zY2Fy LXRocmVhZC5oCitnZGJfYmZkLmggc3BhcmMtcmF2ZW5zY2FyLXRocmVhZC5o IHBwYy1yYXZlbnNjYXItdGhyZWFkLmggY3RmLmgKIAogIyBIZWFkZXIgZmls ZXMgdGhhdCBhbHJlYWR5IGhhdmUgc3JjZGlyIGluIHRoZW0sIG9yIHdoaWNo IGFyZSBpbiBvYmpkaXIuCiAKLS0tIGEvYnJlYWtwb2ludC5jCisrKyBiL2Jy ZWFrcG9pbnQuYwpAQCAtNjEwLDcgKzYxMCw3IEBAIHN0YXRpYyBpbnQgcHJl dl9icmVha3BvaW50X2NvdW50OwogCiAvKiBOdW1iZXIgb2YgbGFzdCB0cmFj ZXBvaW50IG1hZGUuICAqLwogCi1zdGF0aWMgaW50IHRyYWNlcG9pbnRfY291 bnQ7CitpbnQgdHJhY2Vwb2ludF9jb3VudDsKIAogc3RhdGljIHN0cnVjdCBj bWRfbGlzdF9lbGVtZW50ICpicmVha3BvaW50X3NldF9jbWRsaXN0Owogc3Rh dGljIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpicmVha3BvaW50X3Nob3df Y21kbGlzdDsKLS0tIC9kZXYvbnVsbAorKysgYi9jdGYuYwpAQCAtMCwwICsx LDEzNDQgQEAKKy8qIENURiBmb3JtYXQgc3VwcG9ydC4KKworICAgQ29weXJp Z2h0IChDKSAyMDEyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNp bmNsdWRlICJjdGYuaCIKKyNpbmNsdWRlICJ0cmFjZXBvaW50LmgiCisjaW5j bHVkZSAicmVnY2FjaGUuaCIKKyNpbmNsdWRlICJnZGJjbWQuaCIKKyNpbmNs dWRlICJleGNlcHRpb25zLmgiCisjaW5jbHVkZSAic3RhY2suaCIKKworI2lu Y2x1ZGUgPGN0eXBlLmg+CisKKy8qIEZvbGxvd2luZyBwYXJ0IGlzIGZvciB0 c2F2ZS4gICovCisKKyNkZWZpbmUgQ1RGX01BR0lDCQkweEMxRkMxRkMxCisj ZGVmaW5lIENURl9TQVZFX01BSk9SCQkxCisjZGVmaW5lIENURl9TQVZFX01J Tk9SCQk4CisKKyNkZWZpbmUgQ1RGX01FVEFEQVRBX05BTUUJIm1ldGFkYXRh IgorI2RlZmluZSBDVEZfREFUQVNUUkVBTV9OQU1FCSJkYXRhc3RyZWFtIgor CisjZGVmaW5lIENURl9QQUNLRVRfU0laRQkJNDA5NgorCisjZGVmaW5lIEFM SUdOX1NJWkUoc2l6ZSwgYWxpZ24pIFwKKwkoKCgoYWxpZ24pICsgKHNpemUp IC0gMSkgJiAofigoYWxpZ24pIC0gMSkpKSAtIChzaXplKSkKKworLyogVGhl IGVudHJ5IG9mIGNvbGxlY3QgbGlzdCBvZiBhIFRQLiAgKi8KKworc3RydWN0 IGN0Zl9zYXZlX2NvbGxlY3RfcworeworICBzdHJ1Y3QgY3RmX3NhdmVfY29s bGVjdF9zICpuZXh0OworCisgIC8qIFBvaW50IHRoZSBvcmlnaW5hbCBjb2xs ZWN0IHN0cmluZy4gICovCisKKyAgY2hhciAqc3RyOworCisgIC8qIFBvaW50 IHN0cmluZyB0aGUgY29udmVydCBmcm9tIFNUUiB0byB0aGUgZm9ybWF0Cisg ICAgIHRoYXQgY2FuIHNhdmUgdG8gQ1RGLiAqLworCisgIGNoYXIgKmN0Zl9z dHI7CisKKyAgLyogQWxpZ24gc2l6ZSBvZiB0aGlzIGNvbGxlY3QuICAqLwor CisgIGludCBhbGlnbl9zaXplOworCisgIC8qIFRoZSBleHByZXNzaW9uIHRo YXQgZ2V0IGZyb20gU1RSLiAqLworCisgIHN0cnVjdCBleHByZXNzaW9uICpl eHByOworCisgIC8qIFRoZSB0eXBlIG9mIHRoaXMgY29sbGVjdC4gICovCisK KyAgc3RydWN0IHR5cGUgKnR5cGU7CisKKyAgLyogSWYgdHJ1ZSwgdGhpcyBj b2xsZWN0IGlzICRfcmV0LiAgKi8KKworICBpbnQgaXNfcmV0OworfTsKKwor LyogVGhlIGVudHJ5IG9mIHRyYWNlcG9pbnQgbGlzdCB0aGF0IHdpbGwgc2F2 ZSB0byBDVEYuICAqLworCitzdHJ1Y3QgY3RmX3NhdmVfdHBfcworeworICBz dHJ1Y3QgY3RmX3NhdmVfdHBfcyAqbmV4dDsKKworICBzdHJ1Y3QgdHJhY2Vw b2ludCAqdHA7CisKKyAgLyogSWYgdHJ1ZSwgdGhpcyBpcyB0aGUgc3RlcCBj b2xsZWN0IG9mIHRoaXMgVFAuCisgICAgIERpdmlkZSBUUCB0byBub24tc3Rl cCBjb2xsZWN0IGFuZCBzdGVwIGNvbGxlY3QKKyAgICAgYmVjYXVzZSB0aGV5 IGNvbGxlY3QgZGlmZmVyZW50IHZhbHVlLiAgKi8KKworICBpbnQgc3RlcHBp bmdfZnJhbWU7CisKKyAgLyogVGhpcyBpcyB0aGUgaWQgdGhhdCB3aWxsIHNh dmUgdG8gQ1RGIGZpbGUuCisgICAgIERvZXNuJ3QgdXNlIFRQUy0+VFAtPkJB U0UuTlVNQkVSIGRpcmVjdGx5IGJlY2F1c2Ugc3RlcHBpbmdfZnJhbWUKKyAg ICAgZXZlbnQgbmVlZCB1c2UgZGlmZmVyZW50IHdpdGggb3JpZ2luYWwgZXZl bnQuICAqLworICBpbnQgaWQ7CisKKyAgLyogVGhlIGNvbGxlY3QgbGlzdCBm b3IgdGhpcyBUUC4gICovCisKKyAgc3RydWN0IGN0Zl9zYXZlX2NvbGxlY3Rf cyAqY29sbGVjdDsKKworICAvKiBFYWNoIHRyYWNlZnJhbWUgZW50cnkgb2Yg YSB0cmFjZXBvaW50IHdpbGwgc2F2ZSBhcyBhIGRhdGEgZm9ybWF0CisgICAg IGxpa2UgYSBzdHJ1Y3QuCisgICAgIFRoaXMgaXMgdGhlIGFsaWduIHNpemUg b2YgdGhpcyBzdHJ1Y3QuICAqLworCisgIGludCBhbGlnbl9zaXplOworCisg IC8qIElmIHRydWUsIHRoZSBzaXplIG9mIHRoaXMgc3RydWN0IGlzIHZhcmlh YmxlLiAgKi8KKworICBpbnQgaXNfdmFyaWFibGVfbGVuZ3RoOworCisgIC8q IElmIHRydWUsIGFsbCB0aGUgdHJhY2VmcmFtZSBlbnRyeSBvZiB0aGlzIFRQ IHdpbGwgbm90IHNhdmUgdG8gQ1RGLgorICAgICBBZGQgYSBmbGFnIGluc3Rl YWQgb2YganVzdCByZW1vdmUgdGhpcyBzdHJ1Y3QgYmVjYXVzZSBHREIganVz dCBjYW4KKyAgICAgZ2V0IHRyYWNlcG9pbnQgaW5mb3JtYXRpb24gdGhyb3Vn aCB0cmFjZWZyYW1lIGVudHJ5LgorICAgICBJZiBqdXN0IHJlbW92ZSB0aGlz IHN0cnVjdCwgR0RCIHdpbGwgYWRkIGEgbmV3IHN0cnVjdCB3aGVuIEdEQiBn ZXQKKyAgICAgYW5vdGhlciB0cmFjZWZyYW1lIG9mIHRoaXMgVFAuCisgICAg IFVzZSBhIGZsYWcsIHdoZW4gR0RCIGdldCBhbm90aGVyIHRyYWNlZnJhbWUg b2YgdGhpcyBUUCwgR0RCIHdpbGwKKyAgICAga25vdyB0aGlzIHRyYWNlZnJh bWUgbmVlZCB0byBiZSBkcm9wcGVkIHdoZW4gaXQgZ2V0IGl0IHRocm91Z2gK KyAgICAgdGhpcyBmbGFnLiAgKi8KKworICBpbnQgaXNfZHJvcHBlZDsKK307 CisKKy8qIFRoZSBlbnRyeSBvZiB0eXBlIGxpc3QgdGhhdCB3aWxsIHNhdmUg dG8gQ1RGLiAgKi8KKworc3RydWN0IGN0Zl9zYXZlX3R5cGVfcworeworICBz dHJ1Y3QgY3RmX3NhdmVfdHlwZV9zICpuZXh0OworCisgIHN0cnVjdCB0eXBl ICp0eXBlOworfTsKKworLyogVGhlIGRhdGEgc3RydWN0IGZvciBDVEZfU0FW RS4gICovCisKK3N0cnVjdCBjdGZfc2F2ZV9zCit7CisgIEZJTEUgKm1ldGFk YXRhX2ZkOworICBGSUxFICpkYXRhc3RyZWFtX2ZkOworCisgIC8qIFRoaXMg aXMgdGhlIGNvbnRlbnQgc2l6ZSBvZiBjdXJyZW50IHBhY2tldC4gICovCisg IHNpemVfdCBjb250ZW50X3NpemU7CisKKyAgLyogVGhpcyBpcyB0aGUgYmVn aW4gb2Zmc2V0IG9mIGN1cnJlbnQgcGFja2V0LiAgKi8KKyAgbG9uZyBwYWNr ZXRfYmVnaW47CisKKyAgLyogSWYgdHJ1ZSwgbmVlZCBjaGVjayBpZiBjb250 ZW50X3NpemUgYmlnZ2VyIHRoYW4gQ1RGX1BBQ0tFVF9TSVpFLiAgKi8KKyAg aW50IGNoZWNrX3NpemU7CisKKyAgLyogVGhpcyBpcyB0aGUgdGVtcCB2YWx1 ZSBvZiBDT05URU5UX1NJWkUgd2hlbiBHREIgd3JpdGUgYSBldmVudCB0bwor ICAgICBDVEYgZmlsZS4KKyAgICAgSWYgdGhpcyBldmVudCBzYXZlIHN1Y2Nl c3MsIENVUlJFTlRfQ09OVEVOVF9TSVpFIHdpbGwgc2V0IHRvCisgICAgIENP TlRFTlRfU0laRS4gICovCisgIHNpemVfdCBjdXJyZW50X2NvbnRlbnRfc2l6 ZTsKKworICAvKiBTYXZlIHRoZSBudW1iZXIgb2YgdHJhY2UgZnJhbWUgYmVm b3JlIGNhbGwgY3RmX3NhdmUuCisgICAgIFNldCBpdCBiYWNrIHdoZW4gcmV0 dXJuIGN0Zl9zYXZlLiAgKi8KKyAgaW50IG9sZF90cmFjZWZyYW1lX251bTsK KworICAvKiBUcmFjZXBvaW50IGxpc3QuICAqLworICBzdHJ1Y3QgY3RmX3Nh dmVfdHBfcyAqdHA7CisKKyAgLyogVHlwZSBsaXN0LiAgKi8KKyAgc3RydWN0 IGN0Zl9zYXZlX3R5cGVfcyAqdHlwZTsKKworICBjb25zdCBjaGFyICp0YWI7 Cit9OworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfZndyaXRlIChGSUxFICpm ZCwgY29uc3QgZ2RiX2J5dGUgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisgIGlm IChmd3JpdGUgKGJ1Ziwgc2l6ZSwgMSwgZmQpICE9IDEpCisgICAgZXJyb3Ig KF8oIlVuYWJsZSB0byB3cml0ZSBmaWxlIGZvciBzYXZpbmcgdHJhY2UgZGF0 YSAoJXMpIiksCisJICAgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKK30KKwor c3RhdGljIHZvaWQKK2N0Zl9zYXZlX2Z3cml0ZV9mb3JtYXRfMSAoRklMRSAq ZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworICBj aGFyICpsaW5lYnVmZmVyOworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFu dXBzOworCisgIGxpbmVidWZmZXIgPSB4c3RydnByaW50ZiAoZm9ybWF0LCBh cmdzKTsKKyAgb2xkX2NsZWFudXBzID0gbWFrZV9jbGVhbnVwICh4ZnJlZSwg bGluZWJ1ZmZlcik7CisgIGN0Zl9zYXZlX2Z3cml0ZSAoZmQsIGxpbmVidWZm ZXIsIHN0cmxlbiAobGluZWJ1ZmZlcikpOworICBkb19jbGVhbnVwcyAob2xk X2NsZWFudXBzKTsKK30KKworLyogV3JpdGUgZGF0YSBpbiBGT1JNQVQgdG8g RkQuICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfZndyaXRlX2Zvcm1h dCAoRklMRSAqZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2 YV9saXN0IGFyZ3M7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7Cisg IGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXRfMSAoZmQsIGZvcm1hdCwgYXJncyk7 CisgIHZhX2VuZCAoYXJncyk7Cit9CisKKy8qIFdyaXRlIEJVRiB0aGF0IHNp emUgaXMgU0laRSB0byBkYXRhc3RyZWFtIGZpbGUuICAqLworCitzdGF0aWMg aW50CitjdGZfc2F2ZV93cml0ZSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3As IGNvbnN0IGdkYl9ieXRlICpidWYsIHNpemVfdCBzaXplKQoreworICBpZiAo dGNzcC0+Y2hlY2tfc2l6ZSkKKyAgICB7CisgICAgICBpZiAodGNzcC0+Y3Vy cmVudF9jb250ZW50X3NpemUgKyBzaXplID4gQ1RGX1BBQ0tFVF9TSVpFKQor ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGN0Zl9zYXZlX2Z3cml0 ZSAodGNzcC0+ZGF0YXN0cmVhbV9mZCwgYnVmLCBzaXplKTsKKworICB0Y3Nw LT5jdXJyZW50X2NvbnRlbnRfc2l6ZSArPSBzaXplOworCisgIHJldHVybiAw OworfQorCisvKiBTZXQgZGF0YXN0cmVhbSBmaWxlIHBvc2l0aW9uIGluZGlj YXRvciBhY2NvcmRpbmcgdG8gT0ZGU0VUCisgICBhbmQgV0hFTkNFLiAgKi8K Kworc3RhdGljIGludAorY3RmX3NhdmVfZnNlZWsgKHN0cnVjdCBjdGZfc2F2 ZV9zICp0Y3NwLCBsb25nIG9mZnNldCwgaW50IHdoZW5jZSkKK3sKKyAgaWYg KHdoZW5jZSA9PSBTRUVLX0NVUiAmJiB0Y3NwLT5jaGVja19zaXplKQorICAg IHsKKyAgICAgIGlmICh0Y3NwLT5jdXJyZW50X2NvbnRlbnRfc2l6ZSArIG9m ZnNldCA+IENURl9QQUNLRVRfU0laRSkKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKworICBpZiAoZnNlZWsgKHRjc3AtPmRhdGFzdHJlYW1fZmQsIG9m ZnNldCwgd2hlbmNlKSkKKyAgICBlcnJvciAoXygiVW5hYmxlIHRvIHNlZWsg ZmlsZSBmb3Igc2F2aW5nIHRyYWNlIGRhdGEgKCVzKSIpLAorCSAgIHNhZmVf c3RyZXJyb3IgKGVycm5vKSk7CisKKyAgaWYgKHdoZW5jZSA9PSBTRUVLX0NV UikKKyAgICB0Y3NwLT5jdXJyZW50X2NvbnRlbnRfc2l6ZSArPSBvZmZzZXQ7 CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEFsaWduZWQgQUxJR05fU0laRSB3 cml0ZSBCVUYgdGhhdCBzaXplIGlzIFNJWkUKKyAgIHRvIGRhdGFzdHJlYW0g ZmlsZS4gICovCisKK3N0YXRpYyBpbnQKK2N0Zl9zYXZlX2FsaWduX3dyaXRl IChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgY29uc3QgZ2RiX2J5dGUgKmJ1 ZiwKKwkJICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbl9zaXplKQor eworICBpZiAoY3RmX3NhdmVfZnNlZWsgKHRjc3AsCisJCSAgICAgIEFMSUdO X1NJWkUgKHRjc3AtPmN1cnJlbnRfY29udGVudF9zaXplLCBhbGlnbl9zaXpl KSwKKwkJICAgICAgU0VFS19DVVIpKQorICAgIHJldHVybiAtMTsKKworICBp ZiAoY3RmX3NhdmVfd3JpdGUgKHRjc3AsIGJ1Ziwgc2l6ZSkpCisgICAgcmV0 dXJuIC0xOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjdGZf c2F2ZV90eXBlX2RlZmluZV93cml0ZSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRj c3AsCisJCQkJCXN0cnVjdCB0eXBlICp0eXBlLCBpbnQgbG9jYWwpOworCisv KiBXcml0ZSB0aGUgdHlwZSBwYXJ0IG9mIGEgdmFyIGRlZmluZSB0byBDVEYg bWV0YWRhdGEgZmlsZS4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV90 eXBlX25hbWVfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1 Y3QgdHlwZSAqdHlwZSkKK3sKKyAgc3dpdGNoIChUWVBFX0NPREUgKHR5cGUp KQorICAgIHsKKyAgICBjYXNlIFRZUEVfQ09ERV9BUlJBWToKKyAgICAgIC8q IFRoaXMgcGFydCBqdXN0IHRvIGdldCB0aGUgcmVhbCBuYW1lIG9mIHRoaXMg YXJyYXkuCisgICAgICAgICBUaGlzIHBhcnQgc2hvdWxkIGtlZXAgdHlwZWRl ZiBpZiBpdCBjYW4uICAqLworICAgICAgZm9yICg7IFRZUEVfQ09ERSAodHlw ZSkgPT0gVFlQRV9DT0RFX0FSUkFZOworCSAgIHR5cGUgPSBUWVBFX1RBUkdF VF9UWVBFICh0eXBlKSA/IFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpCisJCQkJ CSAgOiBjaGVja190eXBlZGVmICh0eXBlKSkKKwk7CisgICAgICBpZiAoVFlQ RV9OQU1FICh0eXBlKSkKKyAgICAgICAgY3RmX3NhdmVfZndyaXRlX2Zvcm1h dCAodGNzcC0+bWV0YWRhdGFfZmQsICIlcyIsIFRZUEVfTkFNRSAodHlwZSkp OworICAgICAgZWxzZQorCWN0Zl9zYXZlX3R5cGVfZGVmaW5lX3dyaXRlICh0 Y3NwLCB0eXBlLCAxKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUWVBF X0NPREVfUFRSOgorICAgICAgaWYgKFRZUEVfTEVOR1RIICh0eXBlKSA9PSA4 KQorCWN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2Zk LCAidWludDY0X3QiKTsKKyAgICAgIGVsc2UKKwljdGZfc2F2ZV9md3JpdGVf Zm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgInVpbnQzMl90Iik7CisgICAg ICBicmVhazsKKworICAgIGNhc2UgVFlQRV9DT0RFX1NUUlVDVDoKKyAgICBj YXNlIFRZUEVfQ09ERV9FTlVNOgorICAgICAgaWYgKFRZUEVfVEFHX05BTUUg KHR5cGUpKQorICAgICAgICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3Nw LT5tZXRhZGF0YV9mZCwgIiVzICVzIiwKKwkJCQlUWVBFX0NPREUgKHR5cGUp ID09IFRZUEVfQ09ERV9TVFJVQ1QgPworCQkJCSJzdHJ1Y3QiIDogImVudW0i LAorCQkJCVRZUEVfVEFHX05BTUUgKHR5cGUpKTsKKyAgICAgIGVsc2UKKwlj dGZfc2F2ZV90eXBlX2RlZmluZV93cml0ZSAodGNzcCwgdHlwZSwgMSk7Cisg ICAgICBicmVhazsKKworICAgIGNhc2UgVFlQRV9DT0RFX1VOSU9OOgorICAg ICAgeworCWludCBpLCBiaWdnZXN0X2lkLCBiaWdnZXN0X3NpemUgPSAwOwor CisJZm9yIChpID0gMDsgaSA8IFRZUEVfTkZJRUxEUyAodHlwZSk7ICsraSkK KwkgIHsKKwkgICAgaWYgKGJpZ2dlc3Rfc2l6ZSA8IFRZUEVfTEVOR1RIIChU WVBFX0ZJRUxEX1RZUEUgKHR5cGUsIGkpKSkKKwkgICAgICB7CisJCWJpZ2dl c3Rfc2l6ZSA9IFRZUEVfTEVOR1RIIChUWVBFX0ZJRUxEX1RZUEUgKHR5cGUs IGkpKTsKKwkJYmlnZ2VzdF9pZCA9IGk7CisJICAgICAgfQorCSAgfQorCWN0 Zl9zYXZlX3R5cGVfbmFtZV93cml0ZSAodGNzcCwgVFlQRV9GSUVMRF9UWVBF ICh0eXBlLCBiaWdnZXN0X2lkKSk7CisJYnJlYWs7CisgICAgICB9CisKKyAg ICBkZWZhdWx0OgorICAgICAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNz cC0+bWV0YWRhdGFfZmQsICIlcyIsIFRZUEVfTkFNRSAodHlwZSkpOworICAg ICAgYnJlYWs7CisgICAgfQorfQorCisvKiBXcml0ZSB0aGUgc2l6ZSBwYXJ0 IG9mIGEgdmFyIGRlZmluZSB0byBDVEYgbWV0YWRhdGEgZmlsZS4gICovCisK K3N0YXRpYyB2b2lkCitjdGZfc2F2ZV90eXBlX3NpemVfd3JpdGUgKHN0cnVj dCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3QgdHlwZSAqdHlwZSkKK3sKKyAg aWYgKFRZUEVfQ09ERSAodHlwZSkgPT0gVFlQRV9DT0RFX0FSUkFZKQorICAg IHsKKyAgICAgIC8qIFRoaXMgcGFydCBqdXN0IHRvIGdldCB0aGUgcmVhbCBu YW1lIG9mIHRoaXMgYXJyYXkuCisgICAgICAgICBUaGlzIHBhcnQgc2hvdWxk IGtlZXAgdHlwZWRlZiBpZiBpdCBjYW4uICAqLworICAgICAgZm9yICg7IFRZ UEVfQ09ERSAodHlwZSkgPT0gVFlQRV9DT0RFX0FSUkFZOworCSAgIHR5cGUg PSBUWVBFX1RBUkdFVF9UWVBFICh0eXBlKSA/IFRZUEVfVEFSR0VUX1RZUEUg KHR5cGUpCisJCQkJCSAgOiBjaGVja190eXBlZGVmICh0eXBlKSkKKwljdGZf c2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIlslZF0i LAorCQkJCVRZUEVfTEVOR1RIICh0eXBlKSAvCisJCQkJVFlQRV9MRU5HVEgg KFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpKSk7CisgICAgfQorfQorCisvKiBX cml0ZSBhIHZhciBkZWZpbmUgdG8gQ1RGIG1ldGFkYXRhIGZpbGUuICAqLwor CitzdGF0aWMgdm9pZAorY3RmX3NhdmVfdmFyX2RlZmluZV93cml0ZSAoc3Ry dWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCB0eXBlICp0eXBlLAorCQkJ ICAgY29uc3QgY2hhciAqbmFtZSwgaW50IGJpdHNpemUpCit7CisgIGN0Zl9z YXZlX3R5cGVfbmFtZV93cml0ZSAodGNzcCwgdHlwZSk7CisgIGN0Zl9zYXZl X2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiICVzIiwgbmFt ZSk7CisgIGlmIChiaXRzaXplKQorICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3Jt YXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiOiVkIiwgYml0c2l6ZSk7CisgIGN0 Zl9zYXZlX3R5cGVfc2l6ZV93cml0ZSAodGNzcCwgdHlwZSk7CisgIGN0Zl9z YXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiO1xuIik7 Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIFQxIGFuZCBUMiBpcyBzYW1lLiAg Ki8KKworc3RhdGljIGludAorY3RmX3NhdmVfdHlwZV9pc19zYW1lIChzdHJ1 Y3QgdHlwZSAqdDEsIHN0cnVjdCB0eXBlICp0MikKK3sKKyAgY29uc3QgY2hh ciAqbmFtZTEsICpuYW1lMjsKKworICBpZiAodDEgPT0gdDIpCisgICAgcmV0 dXJuIDE7CisKKyAgaWYgKFRZUEVfQ09ERSAodDEpICE9IFRZUEVfQ09ERSAo dDIpKQorICAgIHJldHVybiAwOworCisgIGlmIChUWVBFX0NPREUgKHQxKSA9 PSBUWVBFX0NPREVfU1RSVUNUIHx8IFRZUEVfQ09ERSAodDEpID09IFRZUEVf Q09ERV9FTlVNKQorICAgIHsKKyAgICAgIG5hbWUxID0gVFlQRV9UQUdfTkFN RSAodDEpOworICAgICAgbmFtZTIgPSBUWVBFX1RBR19OQU1FICh0Mik7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgbmFtZTEgPSBUWVBFX05BTUUg KHQxKTsKKyAgICAgIG5hbWUyID0gVFlQRV9OQU1FICh0Mik7CisgICAgfQor CisgIGlmIChuYW1lMSAmJiBuYW1lMiAmJiBzdHJjbXAgKG5hbWUxLCBuYW1l MikgPT0gMCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKwor LyogQ2hlY2sgaWYgVFlQRSBpbiBUQ1NQLT5UWVBFLgorICAgSWYgbm90LCB3 cml0ZSBUWVBFIHRvIFRDU1AtPm1ldGFkYXRhX2ZkLgorICAgSWYgTE9DQUwg aXMgdHJ1ZSwgdGhpcyB0eXBlIGRlZmluZSBqdXN0IGRlZmluZSB3aXRoIGEg dmFyLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3R5cGVfZGVmaW5l X3dyaXRlIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3RydWN0IHR5cGUg KnR5cGUsCisJCQkgICAgaW50IGxvY2FsKQoreworICBzdHJ1Y3QgY3RmX3Nh dmVfdHlwZV9zICp0OworCisgIC8qIElnbm9yZSB0eXBlIHVpbnQzMl90IGFu ZCB1aW50NjRfdCBiZWNhdXNlIHRoZXkgaGF2ZSB3cml0dGVuCisgICAgIGlu IGZ1bmN0aW9uIGN0Zl9zYXZlX21ldGFkYXRhX2hlYWRlci4gICovCisgIGlm IChUWVBFX05BTUUgKHR5cGUpICYmIChzdHJjbXAgKFRZUEVfTkFNRSAodHlw ZSksICJ1aW50MzJfdCIpID09IDAKKwkJCSAgIHx8IHN0cmNtcCAoVFlQRV9O QU1FICh0eXBlKSwgInVpbnQ2NF90IikgPT0gMCkpCisgICAgcmV0dXJuOwor CisgIGlmICghbG9jYWwpCisgICAgeworICAgICAgZm9yICh0ID0gdGNzcC0+ dHlwZTsgdDsgdCA9IHQtPm5leHQpCisJeworCSAgaWYgKGN0Zl9zYXZlX3R5 cGVfaXNfc2FtZSAodHlwZSwgdC0+dHlwZSkpCisJICAgIHJldHVybjsKKwl9 CisKKyAgICAgIHQgPSAoc3RydWN0IGN0Zl9zYXZlX3R5cGVfcyAqKSB4emFs bG9jIChzaXplb2YgKCp0KSk7CisgICAgICB0LT50eXBlID0gdHlwZTsKKyAg ICAgIHQtPm5leHQgPSB0Y3NwLT50eXBlOworICAgICAgdGNzcC0+dHlwZSA9 IHQ7CisgICAgfQorCisgIHN3aXRjaCAoVFlQRV9DT0RFICh0eXBlKSkKKyAg ICB7CisgICAgICBjYXNlIFRZUEVfQ09ERV9UWVBFREVGOgorCWN0Zl9zYXZl X2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAidHlwZWRlZiAi KTsKKwljdGZfc2F2ZV92YXJfZGVmaW5lX3dyaXRlICh0Y3NwLCBUWVBFX1RB UkdFVF9UWVBFICh0eXBlKSwKKwkJCQkgICBUWVBFX05BTUUgKHR5cGUpLCAw KTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfSU5UOgorCWN0 Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiXAor dHlwZWFsaWFzIGludGVnZXIgeyBzaXplID0gJWQ7IGFsaWduID0gJWQ7IHNp Z25lZCA9ICVzOyB9IDo9ICVzO1xuIiwKKwkJCQlUWVBFX0xFTkdUSCAodHlw ZSkgKiBUQVJHRVRfQ0hBUl9CSVQsCisJCQkJVFlQRV9MRU5HVEggKHR5cGUp ICogVEFSR0VUX0NIQVJfQklULAorCQkJCSFUWVBFX1VOU0lHTkVEICh0eXBl KSA/ICJ0cnVlIiA6ICJmYWxzZSIsCisJCQkJVFlQRV9OQU1FICh0eXBlKSk7 CisJYnJlYWs7CisKKyAgICAgIGNhc2UgVFlQRV9DT0RFX1NUUlVDVDoKKyAg ICAgIGNhc2UgVFlQRV9DT0RFX0VOVU06CisgICAgICAgIHsKKwkgIGludCBp OworCSAgY2hhciB0YWJbMjU2XTsKKwkgIGNvbnN0IGNoYXIgKm9sZF90YWI7 CisKKwkgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRh X2ZkLCAiJXMgJXMge1xuIiwKKwkJCQkgIFRZUEVfQ09ERSAodHlwZSkgPT0g VFlQRV9DT0RFX1NUUlVDVCA/CisJCQkJICAic3RydWN0IiA6ICJlbnVtIiwK KwkJCQkgIFRZUEVfVEFHX05BTUUgKHR5cGUpID8gVFlQRV9UQUdfTkFNRSAo dHlwZSkKKwkJCQkJCSAgICAgICA6ICIiKTsKKworCSAgb2xkX3RhYiA9IHRj c3AtPnRhYjsKKwkgIHNucHJpbnRmICh0YWIsIDI1NiwgIiVzXHQiLCBvbGRf dGFiKTsKKwkgIHRjc3AtPnRhYiA9IHRhYjsKKwkgIGZvciAoaSA9IDA7IGkg PCBUWVBFX05GSUVMRFMgKHR5cGUpOyArK2kpCisJICAgIHsKKwkgICAgICBp ZiAoVFlQRV9DT0RFICh0eXBlKSA9PSBUWVBFX0NPREVfU1RSVUNUKQorCSAg ICAgICAgeworCQkgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1l dGFkYXRhX2ZkLCB0Y3NwLT50YWIpOworCQkgIGN0Zl9zYXZlX3Zhcl9kZWZp bmVfd3JpdGUgKHRjc3AsIFRZUEVfRklFTERfVFlQRSAodHlwZSwgaSksCisJ CQkJCSAgICAgVFlQRV9GSUVMRF9OQU1FICh0eXBlLCBpKSwKKwkJCQkJICAg ICBUWVBFX0ZJRUxEX0JJVFNJWkUgKHR5cGUsIGkpKTsKKwkJfQorCSAgICAg IGVsc2UKKwkJY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRh dGFfZmQsICIlcyVzID0gJXMsXG4iLAorCQkJCQl0Y3NwLT50YWIsIFRZUEVf RklFTERfTkFNRSAodHlwZSwgaSksCisJCQkJCXBsb25nZXN0IChUWVBFX0ZJ RUxEX0VOVU1WQUwgKHR5cGUsIGkpKSk7CisJICAgIH0KKwkgIHRjc3AtPnRh YiA9IG9sZF90YWI7CisJICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3Nw LT5tZXRhZGF0YV9mZCwgIiVzfSIsIHRjc3AtPnRhYik7CisJICBpZiAoVFlQ RV9UQUdfTkFNRSAodHlwZSkpCisJICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3Jt YXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiO1xuIik7CisJICBicmVhazsKKwl9 CisgICAgfQorfQorCisvKiBDaGVjayBpZiB0aGlzIHR5cGUgaXMgc3VwcG9y dGVkIGJ5IEdEQi4KKyAgIFJldHVybiB0aGUgYWxpZ24gc2l6ZS4gICovCisK K3N0YXRpYyBpbnQKK2N0Zl9zYXZlX3R5cGVfY2hlY2tfYW5kX3dyaXRlIChz dHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3RydWN0IHR5cGUgKnR5cGUpCit7 CisgIGludCBhbGlnbl9zaXplID0gMDsKKworICBzd2l0Y2ggKFRZUEVfQ09E RSAodHlwZSkpCisgICAgeworICAgICAgY2FzZSBUWVBFX0NPREVfVFlQRURF RjoKKwlhbGlnbl9zaXplID0gY3RmX3NhdmVfdHlwZV9jaGVja19hbmRfd3Jp dGUgKHRjc3AsCisJCQkJCQkgICAgVFlQRV9UQVJHRVRfVFlQRSAodHlwZSkp OworCWlmIChhbGlnbl9zaXplIDwgMCkKKwkgIHJldHVybiBhbGlnbl9zaXpl OworCWN0Zl9zYXZlX3R5cGVfZGVmaW5lX3dyaXRlICh0Y3NwLCB0eXBlLCAw KTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfQVJSQVk6CisJ YWxpZ25fc2l6ZSA9IGN0Zl9zYXZlX3R5cGVfY2hlY2tfYW5kX3dyaXRlICh0 Y3NwLAorCQkJCQkJICAgIFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpKTsKKwlp ZiAoYWxpZ25fc2l6ZSA8IDApCisJICByZXR1cm4gYWxpZ25fc2l6ZTsKKwli cmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfSU5UOgorCWN0Zl9zYXZl X3R5cGVfZGVmaW5lX3dyaXRlICh0Y3NwLCB0eXBlLCAwKTsKKwlhbGlnbl9z aXplID0gVFlQRV9MRU5HVEggKHR5cGUpOworCWJyZWFrOworCisgICAgICBj YXNlIFRZUEVfQ09ERV9QVFI6CisJYWxpZ25fc2l6ZSA9IFRZUEVfTEVOR1RI ICh0eXBlKTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfU1RS VUNUOgorICAgICAgICB7CisJICBpbnQgaSwgc19hbGlnbl9zaXplOworCisJ ICBmb3IgKGkgPSAwOyBpIDwgVFlQRV9ORklFTERTICh0eXBlKTsgKytpKQor CSAgICB7CisJICAgICAgc19hbGlnbl9zaXplCisJCSAgPSBjdGZfc2F2ZV90 eXBlX2NoZWNrX2FuZF93cml0ZSAodGNzcCwKKwkJCQkJCSAgIFRZUEVfRklF TERfVFlQRSAodHlwZSwgaSkpOworCSAgICAgIGlmIChzX2FsaWduX3NpemUg PCAwKQorCQlyZXR1cm4gc19hbGlnbl9zaXplOworCisJICAgICAgaWYgKGFs aWduX3NpemUgPCBzX2FsaWduX3NpemUpCisJCWFsaWduX3NpemUgPSBzX2Fs aWduX3NpemU7CisJICAgIH0KKwkgIGlmIChUWVBFX1RBR19OQU1FICh0eXBl KSkKKwkgICAgY3RmX3NhdmVfdHlwZV9kZWZpbmVfd3JpdGUgKHRjc3AsIHR5 cGUsIDApOworCSAgYnJlYWs7CisJfQorCisgICAgICBjYXNlIFRZUEVfQ09E RV9FTlVNOgorCWFsaWduX3NpemUgPSBUWVBFX0xFTkdUSCAodHlwZSk7CisJ aWYgKFRZUEVfVEFHX05BTUUgKHR5cGUpKQorCSAgY3RmX3NhdmVfdHlwZV9k ZWZpbmVfd3JpdGUgKHRjc3AsIHR5cGUsIDApOworCWJyZWFrOworCisgICAg ICBjYXNlIFRZUEVfQ09ERV9VTklPTjoKKyAgICAgICAgeworCSAgaW50IGks IHNfYWxpZ25fc2l6ZTsKKworCSAgZm9yIChpID0gMDsgaSA8IFRZUEVfTkZJ RUxEUyAodHlwZSk7ICsraSkKKwkgICAgeworCSAgICAgIHNfYWxpZ25fc2l6 ZQorCQkgID0gY3RmX3NhdmVfdHlwZV9jaGVja19hbmRfd3JpdGUgKHRjc3As CisJCQkJCQkgICBUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIGkpKTsKKwkgICAg ICBpZiAoc19hbGlnbl9zaXplIDwgMCkKKwkJcmV0dXJuIHNfYWxpZ25fc2l6 ZTsKKworCSAgICAgIGlmIChhbGlnbl9zaXplIDwgc19hbGlnbl9zaXplKQor CQlhbGlnbl9zaXplID0gc19hbGlnbl9zaXplOworCSAgICB9CisJICBicmVh azsKKwl9CisKKyAgICAgIGRlZmF1bHQ6CisJYWxpZ25fc2l6ZSA9IC0xOwor CWJyZWFrOworICAgIH0KKworICByZXR1cm4gYWxpZ25fc2l6ZTsKK30KKwor c3RhdGljIHZvaWQKK2N0Zl9zYXZlX2NvbGxlY3RfZ2V0XzEgKHN0cnVjdCBj dGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAqdHBzLAor CQkJY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgc3RydWN0IGV4cHJlc3Npb24g KmV4cHI7CisgIHN0cnVjdCBjdGZfc2F2ZV9jb2xsZWN0X3MgKmNvbGxlY3Q7 CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGU7CisgIHN0cnVj dCB0eXBlICp0eXBlID0gTlVMTDsKKyAgaW50IGlzX3JldCA9IDA7CisgIGlu dCBhbGlnbl9zaXplOworICBjaGFyICpzdHI7CisKKyAgLyogQWxsb2NhIFNU UiBiZWNhdXNlIFBBUlNFX0VYUFJFU1NJT04gbmVlZCBhcmd1bWVudAorICAg ICBpcyBub3QgYSBjb25zdCBzdHJpbmcuICAqLworICBzdHIgPSBhbGxvY2Eg KHN0cmxlbiAobmFtZSkgKyAxKTsKKyAgc3RyY3B5IChzdHIsIG5hbWUpOwor CisgIC8qIENoZWNrIGlmIGFjdGlvbl9leHAgaXMgYWxyZWFkeSBleGlzdCBp biB0cHMtPmNvbGxlY3QuICAqLworICBmb3IgKGNvbGxlY3QgPSB0cHMtPmNv bGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xsZWN0LT5uZXh0KQorICAg IHsKKyAgICAgIGlmIChzdHJjbXAgKGNvbGxlY3QtPnN0ciwgc3RyKSA9PSAw KQorCXJldHVybjsKKyAgICB9CisKKyAgaWYgKDAgPT0gc3RybmNhc2VjbXAg KHN0ciwgIiRfcmV0IiwgNSkpCisgICAgaXNfcmV0ID0gMTsKKworICBUUllf Q0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VSUk9SKQorICAgIHsKKyAgICAgIGlm IChpc19yZXQpCisgICAgICAgIHsKKwkgIENPUkVfQUREUiBwYzsKKwkgIHN0 cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsKKworCSAgZnJhbWUgPSBnZXRfcHJl dl9mcmFtZSAoZ2V0X2N1cnJlbnRfZnJhbWUgKCkpOworCSAgaWYgKCFmcmFt ZSkKKwkgICAgZXJyb3IgKF8oImNvdWxkIG5vdCBmaW5kIHByZXZpb3VzIGZy YW1lIikpOworCisJICBpZiAoIWdldF9mcmFtZV9wY19pZl9hdmFpbGFibGUg KGZyYW1lLCAmcGMpKQorCSAgICBlcnJvciAoXygiUEMgdW5hdmFpbGFibGUi KSk7CisJfQorICAgICAgZWxzZQorICAgICAgICB7CisJICBzdHJ1Y3QgY2xl YW51cCAqb2xkX2NoYWluOworCSAgc3RydWN0IHZhbHVlICp2YWw7CisKKwkg IGV4cHIgPSBwYXJzZV9leHByZXNzaW9uIChzdHIpOworCSAgb2xkX2NoYWlu ID0gbWFrZV9jbGVhbnVwIChmcmVlX2N1cnJlbnRfY29udGVudHMsICZleHBy KTsKKwkgIHR5cGUgPSB2YWx1ZV90eXBlIChldmFsdWF0ZV9leHByZXNzaW9u IChleHByKSk7CisJICBkb19jbGVhbnVwcyAob2xkX2NoYWluKTsKKwl9Cisg ICAgfQorICBpZiAoZS5yZWFzb24gPCAwKQorICAgIHsKKyAgICAgIHdhcm5p bmcgKF8oImVycm9yIHNhdmluZyB0cmFjZXBvaW50ICVkIFwiJXNcIiB0byBD VEYgZmlsZTogJXMiKSwKKwkgICAgICAgdHBzLT50cC0+YmFzZS5udW1iZXIs IHN0ciwgZS5tZXNzYWdlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAg aWYgKGlzX3JldCkKKyAgICBhbGlnbl9zaXplID0gODsKKyAgZWxzZQorICAg IHsKKyAgICAgIGFsaWduX3NpemUgPSBjdGZfc2F2ZV90eXBlX2NoZWNrX2Fu ZF93cml0ZSAodGNzcCwgdHlwZSk7CisgICAgICBpZiAoYWxpZ25fc2l6ZSA8 IDApCisJeworCSAgd2FybmluZyAoXygiXAorZXJyb3Igc2F2aW5nIHRyYWNl cG9pbnQgJWQgXCIlc1wiIHRvIENURiBmaWxlOiB0eXBlIGlzIG5vdCBzdXBw b3J0ZWQuIiksCisJCSAgIHRwcy0+dHAtPmJhc2UubnVtYmVyLCBzdHIpOwor CSAgcmV0dXJuOworCX0KKyAgICB9CisKKyAgY29sbGVjdCA9IChzdHJ1Y3Qg Y3RmX3NhdmVfY29sbGVjdF9zICopIHh6YWxsb2MgKHNpemVvZiAoKmNvbGxl Y3QpKTsKKworICAvKiBBZGQgdHAgdG8gdGhlIGxpc3QuICAqLworICBjb2xs ZWN0LT5uZXh0ID0gdHBzLT5jb2xsZWN0OworICB0cHMtPmNvbGxlY3QgPSBj b2xsZWN0OworCisgIGNvbGxlY3QtPnN0ciA9IHhzdHJkdXAgKHN0cik7Cisg IGNvbGxlY3QtPmlzX3JldCA9IGlzX3JldDsKKworICBpZiAoIWlzX3JldCkK KyAgICB7CisgICAgICBjb2xsZWN0LT50eXBlID0gdHlwZTsKKworICAgICAg Y29sbGVjdC0+YWxpZ25fc2l6ZSA9IGFsaWduX3NpemU7CisgICAgICBpZiAo Y29sbGVjdC0+YWxpZ25fc2l6ZSA+IHRwcy0+YWxpZ25fc2l6ZSkKKyAgICAg ICAgdHBzLT5hbGlnbl9zaXplID0gY29sbGVjdC0+YWxpZ25fc2l6ZTsKKwor ICAgICAgY29sbGVjdC0+ZXhwciA9IHBhcnNlX2V4cHJlc3Npb24gKHN0cik7 CisgICAgfQorfQorCitzdHJ1Y3QgbG9jX2FyZ19jb2xsZWN0X2RhdGEKK3sK KyAgc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3A7CisgIHN0cnVjdCBjdGZfc2F2 ZV90cF9zICp0cHM7Cit9OworCitzdGF0aWMgdm9pZAordHN2X3NhdmVfZG9f bG9jX2FyZ19jb2xsZWN0IChjb25zdCBjaGFyICpwcmludF9uYW1lLAorCQkJ ICAgICBzdHJ1Y3Qgc3ltYm9sICpzeW0sCisJCQkgICAgIHZvaWQgKmNiX2Rh dGEpCit7CisgIHN0cnVjdCBsb2NfYXJnX2NvbGxlY3RfZGF0YSAqcCA9IGNi X2RhdGE7CisKKyAgY3RmX3NhdmVfY29sbGVjdF9nZXRfMSAocC0+dGNzcCwg cC0+dHBzLCBwcmludF9uYW1lKTsKK30KKworLyogd29ya2VyIGZ1bmN0aW9u IChjbGVhbnVwKSAqLworc3RhdGljIHZvaWQKK3JlcGxhY2VfY29tbWEgKHZv aWQgKmRhdGEpCit7CisgIGNoYXIgKmNvbW1hID0gZGF0YTsKKyAgKmNvbW1h ID0gJywnOworfQorCisvKiBHZXQgdmFyIHRoYXQgd2FudCB0byBjb2xsZWN0 IGZyb20gU1RSIGFuZCBwdXQgdGhlbSB0byBUUFMtPmNvbGxlY3QuCisgICBU aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGwgd2hlbiBHREIgYWRkIGEg bmV3IFRQLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX2NvbGxlY3Rf Z2V0IChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3RydWN0IGN0Zl9zYXZl X3RwX3MgKnRwcywKKwkJICAgICAgY2hhciAqc3RyKQoreworICBjaGFyICph Y3Rpb25fZXhwID0gc3RyLCAqbmV4dF9jb21tYTsKKyAgc3RydWN0IGNsZWFu dXAgKm9sZF9jaGFpbjsKKworICBkbworICAgIHsKKyAgICAgIGlmICgqYWN0 aW9uX2V4cCA9PSAnLCcpCisJYWN0aW9uX2V4cCsrOworICAgICAgd2hpbGUg KGlzc3BhY2UgKChpbnQpICphY3Rpb25fZXhwKSkKKwlhY3Rpb25fZXhwKys7 CisKKyAgICAgIG5leHRfY29tbWEgPSBzdHJjaHIgKGFjdGlvbl9leHAsICcs Jyk7CisgICAgICBpZiAobmV4dF9jb21tYSkKKwl7CisJICBvbGRfY2hhaW4g PSBtYWtlX2NsZWFudXAgKHJlcGxhY2VfY29tbWEsIG5leHRfY29tbWEpOwor CSAgKm5leHRfY29tbWEgPSAnXDAnOworCX0KKworICAgICAgaWYgKDAgPT0g c3RybmNhc2VjbXAgKGFjdGlvbl9leHAsICIkcmVnIiwgNCkpCisgICAgICAg IHsKKwkgIGludCBpOworCSAgc3RydWN0IGdkYmFyY2ggKmFyY2ggPSB0cHMt PnRwLT5iYXNlLmxvYy0+Z2RiYXJjaDsKKworCSAgZm9yIChpID0gMDsgaSA8 IGdkYmFyY2hfbnVtX3JlZ3MgKGFyY2gpOyBpKyspCisJICAgIHsKKwkgICAg ICBjb25zdCBjaGFyICpuYW1lID0gZ2RiYXJjaF9yZWdpc3Rlcl9uYW1lIChh cmNoLCBpKTsKKwkgICAgICBpbnQgbmFtZV9zaXplID0gc3RybGVuIChuYW1l KTsKKwkgICAgICBjaGFyIHJlZ25hbWVbMSArIG5hbWVfc2l6ZSArIDFdOwor CisJICAgICAgaWYgKG5hbWVfc2l6ZSA9PSAwKQorCQljb250aW51ZTsKKwor CSAgICAgIHNwcmludGYgKHJlZ25hbWUsICIkJXMiLCBuYW1lKTsKKworCSAg ICAgIGN0Zl9zYXZlX2NvbGxlY3RfZ2V0XzEgKHRjc3AsIHRwcywgcmVnbmFt ZSk7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICgwID09IHN0cm5jYXNl Y21wIChhY3Rpb25fZXhwLCAiJGxvYyIsIDQpCisJICAgICAgIHx8IDAgPT0g c3RybmNhc2VjbXAgKGFjdGlvbl9leHAsICIkYXJnIiwgNCkpCisJeworCSAg Q09SRV9BRERSIHBjID0gMDsKKwkgIHN0cnVjdCBsb2NfYXJnX2NvbGxlY3Rf ZGF0YSBjYl9kYXRhOworCSAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRp b24gZTsKKworCSAgY2JfZGF0YS50Y3NwID0gdGNzcDsKKwkgIGNiX2RhdGEu dHBzID0gdHBzOworCisJICBUUllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VS Uk9SKQorCSAgICB7CisJICAgICAgcGMgPSByZWdjYWNoZV9yZWFkX3BjIChn ZXRfY3VycmVudF9yZWdjYWNoZSAoKSk7CisJICAgIH0KKwkgIGlmIChlLnJl YXNvbiA8IDApCisJICAgIHsKKwkgICAgICB3YXJuaW5nIChfKCJlcnJvciBz YXZpbmcgdHJhY2Vwb2ludCAlZCBcIiVzXCIgdG8gQ1RGIGZpbGU6ICVzIiks CisJCSAgICAgICB0cHMtPnRwLT5iYXNlLm51bWJlciwgYWN0aW9uX2V4cCwg ZS5tZXNzYWdlKTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICBp ZiAoYWRkX2xvY2FsX3N5bWJvbHNfMSAoKDAgPT0gc3RybmNhc2VjbXAgKGFj dGlvbl9leHAsICIkbG9jIiwgNCkKKwkJCQkJPyAnTCcgOiAnQScpLAorCQkJ CSAgIHBjLCB0c3Zfc2F2ZV9kb19sb2NfYXJnX2NvbGxlY3QsCisJCQkJICAg JmNiX2RhdGEpKQorCSAgICB7CisJICAgICAgd2FybmluZyAoXygiXAorZXJy b3Igc2F2aW5nIHRyYWNlcG9pbnQgJWQgXCIlc1wiIHRvIENURiBmaWxlOiBu byBzeW1ib2wgdGFibGUgaW5mbyBhdmFpbGFibGUuIiksCisJCSAgICAgICB0 cHMtPnRwLT5iYXNlLm51bWJlciwgYWN0aW9uX2V4cCk7CisJICAgICAgY29u dGludWU7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJY3RmX3NhdmVfY29s bGVjdF9nZXRfMSAodGNzcCwgdHBzLCBhY3Rpb25fZXhwKTsKKworICAgICAg aWYgKG5leHRfY29tbWEpCisJZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7Cisg ICAgICBhY3Rpb25fZXhwID0gbmV4dF9jb21tYTsKKyAgICB9CisgIHdoaWxl IChhY3Rpb25fZXhwICYmICphY3Rpb25fZXhwID09ICcsJyk7Cit9CisKKy8q IENhbGwgZnVuY3Rpb24gY3RmX3NhdmVfY29sbGVjdF9nZXQgQWRkIGFjdGlv biBsaXN0IEFDVElPTiBvZiBUUFMKKyAgIHRvIFRQUy0+Y29sbGVjdC4KKyAg IFNURVBQSU5HX0ZSQU1FIGlzIHRydWUgaWYgaXQgaXMgc3RlcCBhY3Rpb24u ICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfdHBfYWN0aW9ucyAoc3Ry dWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCBjdGZfc2F2ZV90cF9zICp0 cHMsCisJCSAgICAgc3RydWN0IGNvbW1hbmRfbGluZSAqYWN0aW9uLCBpbnQg c3RlcHBpbmdfZnJhbWUpCit7CisgIGZvciAoOyBhY3Rpb24gIT0gTlVMTDsg YWN0aW9uID0gYWN0aW9uLT5uZXh0KQorICAgIHsKKyAgICAgIGNoYXIgKmFj dGlvbl9leHA7CisgICAgICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqY21k OworCisgICAgICBRVUlUOworICAgICAgYWN0aW9uX2V4cCA9IGFjdGlvbi0+ bGluZTsKKyAgICAgIHdoaWxlIChpc3NwYWNlICgoaW50KSAqYWN0aW9uX2V4 cCkpCisJYWN0aW9uX2V4cCsrOworICAgICAgaWYgKCphY3Rpb25fZXhwID09 ICcjJykKKwljb250aW51ZTsKKworICAgICAgY21kID0gbG9va3VwX2NtZCAo JmFjdGlvbl9leHAsIGNtZGxpc3QsICIiLCAtMSwgMSk7CisgICAgICBpZiAo Y21kID09IDApCisJZXJyb3IgKF8oIkJhZCBhY3Rpb24gbGlzdCBpdGVtOiAl cyIpLCBhY3Rpb25fZXhwKTsKKworICAgICAgaWYgKGNtZF9jZnVuY19lcSAo Y21kLCB3aGlsZV9zdGVwcGluZ19wc2V1ZG9jb21tYW5kKSkKKwl7CisJICBp bnQgaTsKKworCSAgZm9yIChpID0gMDsgaSA8IGFjdGlvbi0+Ym9keV9jb3Vu dDsgKytpKQorCSAgICBjdGZfc2F2ZV90cF9hY3Rpb25zICh0Y3NwLCB0cHMs IGFjdGlvbi0+Ym9keV9saXN0W2ldLCAxKTsKKwl9CisgICAgICBlbHNlIGlm IChjbWRfY2Z1bmNfZXEgKGNtZCwgY29sbGVjdF9wc2V1ZG9jb21tYW5kKSkK Kwl7CisJICBpZiAoc3RlcHBpbmdfZnJhbWUgIT0gdHBzLT5zdGVwcGluZ19m cmFtZSkKKwkgICAgY29udGludWU7CisJICBpZiAoKmFjdGlvbl9leHAgPT0g Jy8nKQorCSAgICBhY3Rpb25fZXhwID0gZGVjb2RlX2FnZW50X29wdGlvbnMg KGFjdGlvbl9leHApOworCSAgY3RmX3NhdmVfY29sbGVjdF9nZXQgKHRjc3As IHRwcywgYWN0aW9uX2V4cCk7CisJfQorICAgIH0KK30KKworCisvKiBUcnkg dG8gZmluZCB0aGUgY3RmX3NhdmVfdHBfcyBzdHJ1Y3QgaW4gdGhlIFRDU1At PnRwLgorICAgSWYgY2Fubm90IGZpbmQgaXQgaW4gdGhlIFRDU1AtPnRwLCBt YWtlIGEgbmV3IG9uZSBmb3IgVFAKKyAgIGFuZCBhZGQgaXQgdG8gVENTUC0+ dHAuICAqLworCitzdGF0aWMgc3RydWN0IGN0Zl9zYXZlX3RwX3MgKgorY3Rm X3NhdmVfdHBfZmluZCAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVj dCB0cmFjZXBvaW50ICp0cCkKK3sKKyAgc3RydWN0IGN0Zl9zYXZlX3RwX3Mg KnJldDsKKyAgc3RydWN0IGJwX2xvY2F0aW9uICpsb2M7CisgIHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGU7CisgIGludCBzdGVwcGluZ19mcmFtZSA9IDA7 CisgIHN0cnVjdCBjb21tYW5kX2xpbmUgKmFjdGlvbjsKKyAgdm9sYXRpbGUg c3RydWN0IGdkYl9leGNlcHRpb24gZTsKKyAgQ09SRV9BRERSIHBjID0gMDsK KyAgZXh0ZXJuIGludCB0cmFjZXBvaW50X2NvdW50OworCisgIFRSWV9DQVRD SCAoZSwgUkVUVVJOX01BU0tfRVJST1IpCisgICAgeworICAgICAgcGMgPSBy ZWdjYWNoZV9yZWFkX3BjIChnZXRfY3VycmVudF9yZWdjYWNoZSAoKSk7Cisg ICAgfQorICBpZiAoZS5yZWFzb24gPj0gMCkKKyAgICB7CisgICAgICBzdGVw cGluZ19mcmFtZSA9IDE7CisgICAgICBmb3IgKGxvYyA9IHRwLT5iYXNlLmxv YzsgbG9jOyBsb2MgPSBsb2MtPm5leHQpCisJeworCSAgaWYgKGxvYy0+YWRk cmVzcyA9PSBwYykKKyAgICAgICAgICAgIHsKKwkgICAgICBzdGVwcGluZ19m cmFtZSA9IDA7CisJICAgICAgYnJlYWs7CisJICAgIH0KKyAgICAgICAgfQor ICAgIH0KKworICBmb3IgKHJldCA9IHRjc3AtPnRwOyByZXQ7IHJldCA9IHJl dC0+bmV4dCkKKyAgICB7CisgICAgICBpZiAocmV0LT50cCA9PSB0cCAmJiBy ZXQtPnN0ZXBwaW5nX2ZyYW1lID09IHN0ZXBwaW5nX2ZyYW1lKQorCXJldHVy biByZXQ7CisgICAgfQorCisgIHJldCA9IChzdHJ1Y3QgY3RmX3NhdmVfdHBf cyAqKSB4emFsbG9jIChzaXplb2YgKCpyZXQpKTsKKworICAvKiBBZGQgdHAg dG8gdGhlIGxpc3QuICAqLworICByZXQtPm5leHQgPSB0Y3NwLT50cDsKKyAg dGNzcC0+dHAgPSByZXQ7CisKKyAgcmV0LT5zdGVwcGluZ19mcmFtZSA9IHN0 ZXBwaW5nX2ZyYW1lOworICBpZiAoc3RlcHBpbmdfZnJhbWUpCisgICAgcmV0 LT5pZCA9IHRyYWNlcG9pbnRfY291bnQgKyB0cC0+YmFzZS5udW1iZXI7Cisg IGVsc2UKKyAgICByZXQtPmlkID0gdHAtPmJhc2UubnVtYmVyOworICByZXQt PnRwID0gdHA7CisKKyAgaWYgKCFzdGVwcGluZ19mcmFtZSAmJiAqZGVmYXVs dF9jb2xsZWN0KQorICAgIGN0Zl9zYXZlX2NvbGxlY3RfZ2V0ICh0Y3NwLCBy ZXQsIGRlZmF1bHRfY29sbGVjdCk7CisKKyAgY3RmX3NhdmVfdHBfYWN0aW9u cyAodGNzcCwgcmV0LCBicmVha3BvaW50X2NvbW1hbmRzICgmdHAtPmJhc2Up LCAwKTsKKworICByZXR1cm4gcmV0OworfQorCisvKiBMZXQgVENTUC0+ZGF0 YXN0cmVhbV9mZCBwb2ludCB0byB0aGUgcGFydCBmb3IgbmV4dCBwYWNrZXQu ICAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfbmV4dF9wYWNrZXQgKHN0 cnVjdCBjdGZfc2F2ZV9zICp0Y3NwKQoreworICB0Y3NwLT5wYWNrZXRfYmVn aW4gKz0gQ1RGX1BBQ0tFVF9TSVpFOworICBjdGZfc2F2ZV9mc2VlayAodGNz cCwgdGNzcC0+cGFja2V0X2JlZ2luLCBTRUVLX1NFVCk7CisgIHRjc3AtPmNv bnRlbnRfc2l6ZSA9IDA7Cit9CisKKy8qIFdyaXRlIHRoZSBjb250ZW50IHNp emUgdG8gcGFja2V0IGhlYWRlciBjb250ZXh0LiAqLworCitzdGF0aWMgdm9p ZAorY3RmX3NhdmVfd3JpdGVfY29udGVudF9zaXplIChzdHJ1Y3QgY3RmX3Nh dmVfcyAqdGNzcCkKK3sKKyAgdWludDMyX3QgdTMyOworCisgIGN0Zl9zYXZl X2ZzZWVrICh0Y3NwLCB0Y3NwLT5wYWNrZXRfYmVnaW4gKyA0LCBTRUVLX1NF VCk7CisgIHUzMiA9IHRjc3AtPmNvbnRlbnRfc2l6ZSAqIFRBUkdFVF9DSEFS X0JJVDsKKyAgY3RmX3NhdmVfd3JpdGUgKHRjc3AsICh2b2lkICopJnUzMiwg NCk7Cit9CisKKy8qIFdyaXRlIHRoZSBDVEYgZGF0YSBwYWNrZXQgaGVhZGVy IGNvbnRleHQuICAqLworCisjZGVmaW5lIFBBQ0tFVF9IRUFERVJfU0laRQko NCArIDQgKyA0KQorCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfd3JpdGVfcGFj a2V0X2hlYWRlcl9jb250ZXh0IChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCkK K3sKKyAgdWludDMyX3QgdTMyOworCisgIC8qIG1hZ2ljLiAgKi8KKyAgdTMy ID0gQ1RGX01BR0lDOworICBjdGZfc2F2ZV93cml0ZSAodGNzcCwgKHZvaWQg KikmdTMyLCA0KTsKKyAgdGNzcC0+Y29udGVudF9zaXplICs9IDQ7CisKKyAg LyogY29udGVudF9zaXplLiAgV2Ugc3RpbGwgZG9uJ3Qga25vdyB0aGUgc2l6 ZSwgd3JpdGUgaXQgbGF0ZXIuICAqLworICBjdGZfc2F2ZV9mc2VlayAodGNz cCwgNCwgU0VFS19DVVIpOworICB0Y3NwLT5jb250ZW50X3NpemUgKz0gNDsK KworICAvKiBwYWNrZXRfc2l6ZSAqLworICB1MzIgPSBDVEZfUEFDS0VUX1NJ WkUgKiBUQVJHRVRfQ0hBUl9CSVQ7CisgIGN0Zl9zYXZlX3dyaXRlICh0Y3Nw LCAodm9pZCAqKSZ1MzIsIDQpOworICB0Y3NwLT5jb250ZW50X3NpemUgKz0g NDsKKworICB0Y3NwLT5jdXJyZW50X2NvbnRlbnRfc2l6ZSA9IHRjc3AtPmNv bnRlbnRfc2l6ZTsKKworICAvKiBNYWtlIHRoaXMgcGFja2V0IGFsbCBpbnRv IGZpbGUuICAqLworICBjdGZfc2F2ZV9mc2VlayAodGNzcCwgdGNzcC0+cGFj a2V0X2JlZ2luICsgQ1RGX1BBQ0tFVF9TSVpFIC0gNCwgU0VFS19TRVQpOwor ICB1MzIgPSAwOworICBjdGZfc2F2ZV93cml0ZSAodGNzcCwgKHZvaWQgKikm dTMyLCA0KTsKKyAgY3RmX3NhdmVfZnNlZWsgKHRjc3AsIHRjc3AtPnBhY2tl dF9iZWdpbiArIHRjc3AtPmNvbnRlbnRfc2l6ZSwgU0VFS19TRVQpOworfQor CisvKiBDaGFuZ2UgSS10aCBjaGFyIGluIENURl9TVFIgdG8gU1RSLiAgKi8K Kworc3RhdGljIGNoYXIgKgorY3RmX3NhdmVfbWV0YWRhdGFfY2hhbmdlX2No YXIgKGNoYXIgKmN0Zl9zdHIsIGludCBpLCBjb25zdCBjaGFyICpzdHIpCit7 CisgIGNoYXIgKm5ldzsKKworICBjdGZfc3RyW2ldID0gJ1wwJzsKKyAgbmV3 ID0geHN0cnByaW50ZiAoIiVzJXMlc18lcyIsIGN0Zl9zdHIsIChpID8gIl8i IDogIiIpLAorCQkgICAgc3RyLCBjdGZfc3RyICsgaSArIDEpOworICB4ZnJl ZSAoY3RmX3N0cik7CisKKyAgcmV0dXJuIG5ldzsKK30KKworLyogV3JpdGUg dGhlIGhlYWRlciBvZiBDVEYncyBtZXRhZGF0YSB0byBUQ1NQLT5NRVRBREFU QV9GRC4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV9tZXRhZGF0YV9o ZWFkZXIgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwKQoreworICBjb25zdCBj aGFyIG1ldGFkYXRhX2ZtdFtdID0KKyAgIlxudHJhY2Uge1xuIgorICAiCW1h am9yID0gJXU7XG4iCisgICIJbWlub3IgPSAldTtcbiIKKyAgIglieXRlX29y ZGVyID0gJXM7XG4iCQkvKiBiZSBvciBsZSAqLworICAiCXBhY2tldC5oZWFk ZXIgOj0gc3RydWN0IHtcbiIKKyAgIgkJdWludDMyX3QgbWFnaWM7XG4iCisg ICIJfTtcbiIKKyAgIn07XG4iCisgICJcbiIKKyAgInN0cmVhbSB7XG4iCisg ICIJcGFja2V0LmNvbnRleHQgOj0gc3RydWN0IHtcbiIKKyAgIgkJdWludDMy X3QgY29udGVudF9zaXplO1xuIgorICAiCQl1aW50MzJfdCBwYWNrZXRfc2l6 ZTtcbiIKKyAgIgl9O1xuIgorICAiCWV2ZW50LmhlYWRlciA6PSBzdHJ1Y3Qg e1xuIgorICAiCQl1aW50MzJfdCBpZDtcbiIKKyAgIgl9O1xuIgorICAifTtc biI7CisKKyAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRh dGFfZmQsICIvKiBDVEYgJWQuJWQgKi9cbiIsCisJCQkgIENURl9TQVZFX01B Sk9SLCBDVEZfU0FWRV9NSU5PUik7CisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3Jt YXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiXAordHlwZWFsaWFzIGludGVnZXIg eyBzaXplID0gMzI7IGFsaWduID0gMzI7IHNpZ25lZCA9IGZhbHNlOyB9IDo9 IHVpbnQzMl90O1xuIik7CisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRj c3AtPm1ldGFkYXRhX2ZkLCAiXAordHlwZWFsaWFzIGludGVnZXIgeyBzaXpl ID0gNjQ7IGFsaWduID0gNjQ7IHNpZ25lZCA9IGZhbHNlOyB9IDo9IHVpbnQ2 NF90O1xuIik7CisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1l dGFkYXRhX2ZkLCAiXG4iKTsKKworICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0 ICh0Y3NwLT5tZXRhZGF0YV9mZCwgbWV0YWRhdGFfZm10LAorCQkJICBDVEZf U0FWRV9NQUpPUiwgQ1RGX1NBVkVfTUlOT1IsCisJCQkgIEJZVEVfT1JERVIg PT0gTElUVExFX0VORElBTiA/ICJsZSIgOiAiYmUiKTsKKyAgY3RmX3NhdmVf ZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICJcbiIpOworfQor CisvKiBXcml0ZSB0aGUgYm9keSBvZiBDVEYncyBtZXRhZGF0YSB0byBUQ1NQ LT5NRVRBREFUQV9GRC4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV9t ZXRhZGF0YSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3ApCit7CisgIHN0cnVj dCBjdGZfc2F2ZV90cF9zICp0cHM7CisgIHN0cnVjdCBjdGZfc2F2ZV9jb2xs ZWN0X3MgKmNvbGxlY3Q7CisgIHN0cnVjdCBjdGZfc2F2ZV90eXBlX3MgKnQ7 CisKKyAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFf ZmQsICJcbiIpOworCisgIC8qIFdyaXRlIGV2ZW50LiAgKi8KKyAgZm9yICh0 cHMgPSB0Y3NwLT50cDsgdHBzOyB0cHMgPSB0cHMtPm5leHQpCisgICAgewor ICAgICAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFf ZmQsCisJCQkgICAgICAiZXZlbnQge1xuXHRuYW1lID0gXCIlcyVzXCI7XG5c dGlkID0gJXU7XG4iCisJCQkgICAgICAiXHRmaWVsZHMgOj0gc3RydWN0IHsg XG4iLAorCQkJICAgICAgdHBzLT50cC0+YmFzZS5hZGRyX3N0cmluZywKKwkJ CSAgICAgIHRwcy0+c3RlcHBpbmdfZnJhbWUgPyAiIHdoaWxlLXN0ZXBwaW5n IiA6ICIiLAorCQkJICAgICAgdHBzLT5pZCk7CisgICAgICBmb3IgKGNvbGxl Y3QgPSB0cHMtPmNvbGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xsZWN0 LT5uZXh0KQorICAgICAgICB7CisJICBjaGFyICp0bXA7CisJICBjb25zdCBj aGFyICpvbGRfdGFiOworCSAgaW50IGZpbmRfc2FtZSA9IDA7CisKKwkgIGlm IChjb2xsZWN0LT5pc19yZXQpCisJICAgIGNvbGxlY3QtPmN0Zl9zdHIgPSB4 c3RyZHVwICgicmV0X3BjIik7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBj aGFyICpuZXc7CisJICAgICAgaW50IG5lZWRfcmVjaGVjazsKKwkgICAgICBp bnQgaTsKKworCSAgICAgIGNvbGxlY3QtPmN0Zl9zdHIgPSB4c3RyZHVwIChj b2xsZWN0LT5zdHIpOworCSAgICAgIGZvciAoaSA9IDA7IGNvbGxlY3QtPmN0 Zl9zdHJbaV0gIT0gJ1wwJzsgKytpKQorCSAgICAgICAgeworCQkgIHN3aXRj aCAoY29sbGVjdC0+Y3RmX3N0cltpXSkKKwkJICAgIHsKKwkJICAgIGNhc2Ug JyQnOgorCQkgICAgICBjb2xsZWN0LT5jdGZfc3RyCisJCQkgID0gY3RmX3Nh dmVfbWV0YWRhdGFfY2hhbmdlX2NoYXIgKGNvbGxlY3QtPmN0Zl9zdHIsCisJ CQkJCQkJICAgaSwgImRvbGxhciIpOworCQkgICAgICBicmVhazsKKwkJICAg IGNhc2UgJyonOgorCQkgICAgICBjb2xsZWN0LT5jdGZfc3RyCisJCQkgID0g Y3RmX3NhdmVfbWV0YWRhdGFfY2hhbmdlX2NoYXIgKGNvbGxlY3QtPmN0Zl9z dHIsCisJCQkJCQkJICAgaSwgInN0YXIiKTsKKwkJICAgICAgYnJlYWs7CisJ CSAgICBjYXNlICcgJzoKKwkJICAgICAgY29sbGVjdC0+Y3RmX3N0cltpXSA9 ICdfJzsKKwkJICAgICAgYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQor CisJICAvKiBDaGVjayBpZiBUUFMgaW5jbHVkZSBhIGNvbGxlY3QgdGhhdCBD VEZfU1RSIHNhbWUKKwkgICAgIHdpdGggQ09MTEVDVC0+Q1RGX1NUUi4KKwkg ICAgIElmIHNvLCByZW5hbWUgaXQgYW5kIGtlZXAgY2hlY2suICAqLworCSAg dG1wID0gYWxsb2NhIChzdHJsZW4gKGNvbGxlY3QtPmN0Zl9zdHIpICsgMzAp OworCSAgc3RyY3B5ICh0bXAsIGNvbGxlY3QtPmN0Zl9zdHIpOworCSAgd2hp bGUgKDEpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgY3RmX3NhdmVfY29sbGVj dF9zICpjb2xsZWN0MjsKKwkgICAgICBpbnQgaSA9IDA7CisKKwkgICAgICBm b3IgKGNvbGxlY3QyID0gdHBzLT5jb2xsZWN0OyBjb2xsZWN0MjsKKwkJICAg Y29sbGVjdDIgPSBjb2xsZWN0Mi0+bmV4dCkKKwkJeworCQkgIGlmIChjb2xs ZWN0ICE9IGNvbGxlY3QyICYmIGNvbGxlY3QyLT5jdGZfc3RyCisJCSAgICAg ICYmIHN0cmNtcCAoY29sbGVjdDItPmN0Zl9zdHIsIHRtcCkgPT0gMCkKKwkJ ICAgIGJyZWFrOworCQl9CisJICAgICAgaWYgKGNvbGxlY3QyID09IE5VTEwp CisJCWJyZWFrOworCisJICAgICAgZmluZF9zYW1lID0gMTsKKwkgICAgICB4 c25wcmludGYgKHRtcCwgc3RybGVuIChjb2xsZWN0LT5jdGZfc3RyKSArIDMw LAorCQkJICIlc18lZCIsIGNvbGxlY3QtPmN0Zl9zdHIsIGkrKyk7CisJICAg IH0KKwkgIGlmIChmaW5kX3NhbWUpCisJICAgIHsKKwkgICAgICB4ZnJlZSAo Y29sbGVjdC0+Y3RmX3N0cik7CisJICAgICAgY29sbGVjdC0+Y3RmX3N0ciA9 IHhzdHJkdXAgKHRtcCk7CisJICAgIH0KKworCSAgaWYgKHN0cmNtcCAoY29s bGVjdC0+Y3RmX3N0ciwgY29sbGVjdC0+c3RyKSkKKwkgICAgd2FybmluZyAo XygiXAorXCIlc1wiIG9mIHRyYWNlcG9pbnQgJWQgcmVuYW1lZCB0byBcIiVz XCIgaW4gQ1RGIGZpbGUuIiksCisJCSAgICAgICBjb2xsZWN0LT5zdHIsIHRw cy0+dHAtPmJhc2UubnVtYmVyLAorCQkgICAgICAgY29sbGVjdC0+Y3RmX3N0 cik7CisKKwkgIG9sZF90YWIgPSB0Y3NwLT50YWI7CisJICB0Y3NwLT50YWIg PSAiXHRcdCI7CisJICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5t ZXRhZGF0YV9mZCwgdGNzcC0+dGFiKTsKKwkgIGlmIChjb2xsZWN0LT5pc19y ZXQpCisJICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFk YXRhX2ZkLCAidWludDY0X3QgJXM7XG4iLAorCQkJCSAgICBjb2xsZWN0LT5j dGZfc3RyKTsKKwkgIGVsc2UKKwkgICAgY3RmX3NhdmVfdmFyX2RlZmluZV93 cml0ZSAodGNzcCwgY29sbGVjdC0+dHlwZSwKKwkJCQkgICAgICAgY29sbGVj dC0+Y3RmX3N0ciwgMCk7CisJICB0Y3NwLT50YWIgPSBvbGRfdGFiOworCX0K KyAgICAgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRh X2ZkLCAiXHR9O1xufTtcbiIpOworICAgIH0KK30KKworLyogQ2xlYW4gZnVu Y3Rpb24gZm9yIGN0Zl9zYXZlLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9z YXZlX2NsZWFudXAgKHZvaWQgKnApCit7CisgIHN0cnVjdCBjdGZfc2F2ZV9z ICp0Y3NwID0gcDsKKyAgc3RydWN0IGN0Zl9zYXZlX3RwX3MgKnRwLCAqdG1w X3RwOworICBzdHJ1Y3QgY3RmX3NhdmVfdHlwZV9zICp0eXBlLCAqdG1wX3R5 cGU7CisKKyAgaWYgKHRjc3AtPm1ldGFkYXRhX2ZkKQorICAgIHsKKyAgICAg IGN0Zl9zYXZlX21ldGFkYXRhICh0Y3NwKTsKKyAgICAgIGZjbG9zZSAodGNz cC0+bWV0YWRhdGFfZmQpOworICAgIH0KKworICBpZiAodGNzcC0+ZGF0YXN0 cmVhbV9mZCkKKyAgICBmY2xvc2UgKHRjc3AtPmRhdGFzdHJlYW1fZmQpOwor CisgIGZvciAodHAgPSB0Y3NwLT50cDsgdHA7IHRwID0gdG1wX3RwKQorICAg IHsKKyAgICAgIHN0cnVjdCBjdGZfc2F2ZV9jb2xsZWN0X3MgKmNvbGxlY3Qs ICp0bXBfY29sbGVjdDsKKworICAgICAgZm9yIChjb2xsZWN0ID0gdHAtPmNv bGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSB0bXBfY29sbGVjdCkKKyAgICAg ICAgeworCSAgeGZyZWUgKGNvbGxlY3QtPmV4cHIpOworCSAgeGZyZWUgKGNv bGxlY3QtPnN0cik7CisJICB4ZnJlZSAoY29sbGVjdC0+Y3RmX3N0cik7CisJ ICB0bXBfY29sbGVjdCA9IGNvbGxlY3QtPm5leHQ7CisJICB4ZnJlZSAoY29s bGVjdCk7CisgICAgICAgIH0KKyAgICAgIHRtcF90cCA9IHRwLT5uZXh0Owor ICAgICAgeGZyZWUgKHRwKTsKKyAgICB9CisKKyAgZm9yICh0eXBlID0gdGNz cC0+dHlwZTsgdHlwZTsgdHlwZSA9IHRtcF90eXBlKQorICAgIHsKKyAgICAg IHRtcF90eXBlID0gdHlwZS0+bmV4dDsKKyAgICAgIHhmcmVlICh0eXBlKTsK KyAgICB9CisKKyAgcmVpbml0X2ZyYW1lX2NhY2hlICgpOworICB0YXJnZXRf ZGNhY2hlX2ludmFsaWRhdGUgKCk7CisgIHNldF9jdXJyZW50X3RyYWNlZnJh bWUgKHRjc3AtPm9sZF90cmFjZWZyYW1lX251bSk7Cit9CisKKy8qIFNhdmUg Y3VycmVudCB0cmFjZSBmcmFtZSB0byBESVJOQU1FLiAgKi8KKwordm9pZAor Y3RmX3NhdmUgKGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisgIHN0cnVjdCBj dGZfc2F2ZV9zIHRjczsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbjsK KyAgaW50IGZyYW1lX251bTsKKyAgY2hhciAqZmlsZV9uYW1lOworICBzdHJ1 Y3QgY3RmX3NhdmVfdHlwZV9zICp0OworICBjaGFyIHRhYltdID0gIiI7CisK KyAgLyogQ3JlYXRlIERJUk5BTUUuICAqLworICBmaWxlX25hbWUgPSBhbGxv Y2EgKHN0cmxlbiAoZGlybmFtZSkgKyAxCisJCSAgICAgICsgc3RybGVuIChD VEZfREFUQVNUUkVBTV9OQU1FKSArIDEpOworICBpZiAobWtkaXIgKGRpcm5h bWUsIFNfSVJXWFUgfCBTX0lSR1JQIHwgU19JWEdSUCB8IFNfSVJPVEggfCBT X0lYT1RIKQorICAgICAgJiYgZXJybm8gIT0gRUVYSVNUKQorICAgIGVycm9y IChfKCJVbmFibGUgdG8gb3BlbiBkaXJlY3RvcnkgJyVzJyBmb3Igc2F2aW5n IHRyYWNlIGRhdGEgKCVzKSIpLAorCSAgIGRpcm5hbWUsIHNhZmVfc3RyZXJy b3IgKGVycm5vKSk7CisKKyAgbWVtc2V0ICgmdGNzLCAnXDAnLCBzaXplb2Yg KHRjcykpOworICB0Y3Mub2xkX3RyYWNlZnJhbWVfbnVtID0gZ2V0X3RyYWNl ZnJhbWVfbnVtYmVyICgpOworICBvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXAg KGN0Zl9zYXZlX2NsZWFudXAsICZ0Y3MpOworICB0Y3MudGFiID0gdGFiOwor CisgIHNwcmludGYgKGZpbGVfbmFtZSwgIiVzLyVzIiwgZGlybmFtZSwgQ1RG X01FVEFEQVRBX05BTUUpOworICB0Y3MubWV0YWRhdGFfZmQgPSBmb3BlbiAo ZmlsZV9uYW1lLCAidyIpOworICBpZiAoIXRjcy5tZXRhZGF0YV9mZCkKKyAg ICBlcnJvciAoXygiVW5hYmxlIHRvIG9wZW4gZmlsZSAnJXMnIGZvciBzYXZp bmcgdHJhY2UgZGF0YSAoJXMpIiksCisJICAgZmlsZV9uYW1lLCBzYWZlX3N0 cmVycm9yIChlcnJubykpOworICBjdGZfc2F2ZV9tZXRhZGF0YV9oZWFkZXIg KCZ0Y3MpOworCisgIHNwcmludGYgKGZpbGVfbmFtZSwgIiVzLyVzIiwgZGly bmFtZSwgQ1RGX0RBVEFTVFJFQU1fTkFNRSk7CisgIHRjcy5kYXRhc3RyZWFt X2ZkID0gZm9wZW4gKGZpbGVfbmFtZSwgInciKTsKKyAgaWYgKCF0Y3MuZGF0 YXN0cmVhbV9mZCkKKyAgICBlcnJvciAoXygiVW5hYmxlIHRvIG9wZW4gZmls ZSAnJXMnIGZvciBzYXZpbmcgdHJhY2UgZGF0YSAoJXMpIiksCisJICAgZmls ZV9uYW1lLCBzYWZlX3N0cmVycm9yIChlcnJubykpOworCisgIGN0Zl9zYXZl X3dyaXRlX3BhY2tldF9oZWFkZXJfY29udGV4dCAoJnRjcyk7CisKKyAgZm9y IChmcmFtZV9udW0gPSAwOyAxOyBmcmFtZV9udW0gKyspCisgICAgeworICAg ICAgaW50IHRudW07CisgICAgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHA7Cisg ICAgICBpbnQgdHJ5X2NvdW50OworICAgICAgdWludDMyX3QgdTMyOworICAg ICAgc3RydWN0IGN0Zl9zYXZlX3RwX3MgKnRwczsKKyAgICAgIHN0cnVjdCBj dGZfc2F2ZV9jb2xsZWN0X3MgKmNvbGxlY3Q7CisgICAgICBpbnQgdHJhY2Vm cmFtZV9pc19kcm9wcGVkID0gMDsKKworICAgICAgLyogQWxsb3cgdXNlciB0 byBiYWlsIG91dCB3aXRoIF5DLiAgKi8KKyAgICAgIFFVSVQ7CisKKyAgICAg IC8qIEdvdG8gdHJhY2VmcmFtZSBmcmFtZV9udW0gYW5kIHNldCB0cC4gICov CisgICAgICBmcmFtZV9udW0gPSB0YXJnZXRfdHJhY2VfZmluZCAodGZpbmRf bnVtYmVyLCBmcmFtZV9udW0sIDAsIDAsICZ0bnVtKTsKKyAgICAgIGlmIChm cmFtZV9udW0gPCAwKQorCWJyZWFrOworICAgICAgdHAgPSBnZXRfdHJhY2Vw b2ludF9ieV9udW1iZXJfb25fdGFyZ2V0ICh0bnVtKTsKKyAgICAgIGlmICgh dHApCisgICAgICAgIHsKKwkgIHdhcm5pbmcgKF8oImRyb3AgdHJhY2VmcmFt ZSAlZCBiZWNhdXNlIGNhbm5vdCBmaW5kIHRyYWNlcG9pbnQgJWQuIiksCisJ CSAgIGZyYW1lX251bSwgdG51bSk7CisJICBjb250aW51ZTsKKwl9CisgICAg ICBpZiAoIXRwLT5iYXNlLmxvYykKKyAgICAgICAgeworCSAgd2FybmluZyAo XygiZHJvcCB0cmFjZWZyYW1lICVkIGJlY2F1c2UgdHJhY2Vwb2ludCAlZCBp cyBwZW5kaW5nLiIpLAorCQkgICBmcmFtZV9udW0sIHRwLT5iYXNlLm51bWJl cik7CisJICBjb250aW51ZTsKKwl9CisgICAgICByZWluaXRfZnJhbWVfY2Fj aGUgKCk7CisgICAgICB0YXJnZXRfZGNhY2hlX2ludmFsaWRhdGUgKCk7Cisg ICAgICBzZXRfY3VycmVudF90cmFjZWZyYW1lIChmcmFtZV9udW0pOworCisg ICAgICB0cHMgPSBjdGZfc2F2ZV90cF9maW5kICgmdGNzLCB0cCk7CisKKyAg ICAgIC8qIFRoZSB0cCBpcyBub3QgdmFyaWFibGUtbGVuZ3RoIGFuZCBiaWdn ZXIgdGhhbiBDVEZfUEFDS0VUX1NJWkUuCisgICAgICAgICBTbyBkcm9wIGl0 LiAgKi8KKyAgICAgIGlmICh0cHMtPmlzX2Ryb3BwZWQpCisJY29udGludWU7 CisKKyAgICAgIC8qIFRyeSBjb3VudCBmb3IgY3VycmVudCB0cCB3cml0ZS4K KyAgICAgICAgIElmIHRyeSBzZWNvbmQgdGltZSwgdGhlIGV2ZW50IHNpemUg YmlnZ2VyIHRoYW4gYSBwYWNrZXQuCisgICAgICAgICBUaGVuIGRyb3AgdGhp cyBldmVudC4gICovCisgICAgICB0cnlfY291bnQgPSAwOworCityZV93cml0 ZV90cDoKKyAgICAgIGlmICh0cnlfY291bnQgPiAwKQorICAgICAgICB7CisJ ICAvKiBIYW5kbGUgcmV0cnkuICAqLworCSAgaWYgKHRyeV9jb3VudCA+IDEg fHwgUEFDS0VUX0hFQURFUl9TSVpFID09IHRjcy5jb250ZW50X3NpemUpCisJ ICAgIHsKKwkgICAgICAvKiBTZWNvbmQgcmV0cnkgb3IgcGFja2V0IGp1c3Qg d3JpdGUgdGhhdCBwYWNrZXQgbWVhbnMKKwkgICAgICAgICB0aGlzIFRQIGlz IHRvbyBiaWcuICBTbyBkcm9wIGl0LiAgKi8KKwkgICAgICBpZiAodHBzLT5p c192YXJpYWJsZV9sZW5ndGgpCisJICAgICAgICB7CisJCSAgLyogVGhlIHRw IGlzIHZhcmlhYmxlLWxlbmd0aC4gICovCisJCSAgd2FybmluZyAoXygiXAor dHJhY2VmcmFtZSAlZCBvZiB0cmFjZXBvaW50ICVkIG5lZWRzIHRvIHNhdmUg ZGF0YSB0aGF0IGlzIGJpZ2dlciB0aGFuIHBhY2tldCBzaXplICVkLlxuXAor U28gaXQgd2lsbCBiZSBkcm9wcGVkLiIpLCBmcmFtZV9udW0sIHRwcy0+dHAt PmJhc2UubnVtYmVyLCBDVEZfUEFDS0VUX1NJWkUpOworCQl9CisJICAgICAg ZWxzZQorCSAgICAgICAgeworCQkgIC8qIFRoZSB0cCBpcyBub3QgdmFyaWFi bGUtbGVuZ3RoLiAgKi8KKwkJICB3YXJuaW5nIChfKCJcCit0cmFjZXBvaW50 ICVkIG5lZWQgc2F2ZSBkYXRhIHRoYXQgYmlnZ2VyIHRoYW4gcGFja2V0IHNp emUgJWQuXG5cCitTbyBhbGwgb2YgaXRzIHRyYWNlZnJhbWVzIHdpbGwgYmUg ZHJvcHBlZC4iKSwKKwkJCSAgIHRwcy0+dHAtPmJhc2UubnVtYmVyLCBDVEZf UEFDS0VUX1NJWkUpOworCQkgIC8qIE1hcmsgdGhpcyB0cCB0byBsZXQgR0RC IGRyb3AgaXRzIHRyYWNlZnJhbWVzLiAgKi8KKwkJICB0cHMtPmlzX2Ryb3Bw ZWQgPSAxOworCQl9CisJICAgICAgY29udGludWU7CisJICAgIH0KKworCSAg dGNzLmNoZWNrX3NpemUgPSAwOworCSAgY3RmX3NhdmVfd3JpdGVfY29udGVu dF9zaXplICgmdGNzKTsKKyAgICAgICAgICBjdGZfc2F2ZV9uZXh0X3BhY2tl dCAoJnRjcyk7CisJICBjdGZfc2F2ZV93cml0ZV9wYWNrZXRfaGVhZGVyX2Nv bnRleHQgKCZ0Y3MpOworCX0KKworICAgICAgdHJ5X2NvdW50ICsrOworCisg ICAgICB0Y3MuY3VycmVudF9jb250ZW50X3NpemUgPSB0Y3MuY29udGVudF9z aXplOworICAgICAgdGNzLmNoZWNrX3NpemUgPSAxOworCisgICAgICB1MzIg PSAodWludDMyX3QpIHRwcy0+aWQ7CisgICAgICBpZiAoY3RmX3NhdmVfYWxp Z25fd3JpdGUgKCZ0Y3MsICh2b2lkICopJnUzMiwgc2l6ZW9mICh1MzIpLAor CQkJCXNpemVvZiAodTMyKSkpCisJZ290byByZV93cml0ZV90cDsKKworICAg ICAgLyogQWxpZ24uICAqLworICAgICAgaWYgKHRwcy0+YWxpZ25fc2l6ZSkK KyAgICAgICAgeworCSAgaWYgKGN0Zl9zYXZlX2ZzZWVrICgmdGNzLAorCQkJ ICAgICAgQUxJR05fU0laRSAodGNzLmN1cnJlbnRfY29udGVudF9zaXplLAor CQkJCQkgIHRwcy0+YWxpZ25fc2l6ZSksCisJCQkgICAgICBTRUVLX0NVUikp CisJICAgIGdvdG8gcmVfd3JpdGVfdHA7CisJfQorCisgICAgICBmb3IgKGNv bGxlY3QgPSB0cHMtPmNvbGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xs ZWN0LT5uZXh0KQorICAgICAgICB7CisJICB2b2xhdGlsZSBzdHJ1Y3QgZ2Ri X2V4Y2VwdGlvbiBlOworCisJICBpZiAoY29sbGVjdC0+aXNfcmV0KQorCSAg ICB7CisJICAgICAgQ09SRV9BRERSIHBjOworCSAgICAgIHVpbnQ2NF90IHU2 NDsKKworCSAgICAgIFRSWV9DQVRDSCAoZSwgUkVUVVJOX01BU0tfRVJST1Ip CisJCXsKKwkJICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWU7CisKKwkJICBm cmFtZSA9IGdldF9jdXJyZW50X2ZyYW1lICgpOworCQkgIGlmICghZnJhbWUp CisJCSAgICBlcnJvciAoXygiZ2V0IGN1cnJlbnQgZnJhbWUgZmFpbCIpKTsK KwkJICBmcmFtZSA9IGdldF9wcmV2X2ZyYW1lIChmcmFtZSk7CisJCSAgaWYg KCFmcmFtZSkKKwkJICAgIGVycm9yIChfKCJnZXQgcHJldiBmcmFtZSBmYWls IikpOworCisJCSAgaWYgKCFnZXRfZnJhbWVfcGNfaWZfYXZhaWxhYmxlIChm cmFtZSwgJnBjKSkKKwkJICAgIGVycm9yIChfKCJQQyB1bmF2YWlsYWJsZSIp KTsKKwkJfQorCSAgICAgIGlmIChlLnJlYXNvbiA8IDApCisJCXsKKwkJICB3 YXJuaW5nIChfKCJcCit0cmFjZWZyYW1lICVkIGlzIGRyb3BwZWQgYmVjYXVz ZSBHREIgdHJ5IHRvIGdldCB0aGUgdmFsdWUgb2YgXCIlc1wiIGdvdCBlcnJv cjogJXMiKSwKKwkJCSAgIGZyYW1lX251bSwgY29sbGVjdC0+c3RyLCBlLm1l c3NhZ2UpOworCQkgIHRyYWNlZnJhbWVfaXNfZHJvcHBlZCA9IDE7CisJCSAg YnJlYWs7CisJCX0KKworCSAgICAgIHU2NCA9IHBjOworCSAgICAgIGlmIChj dGZfc2F2ZV9hbGlnbl93cml0ZSAoJnRjcywgKGdkYl9ieXRlICopICZ1NjQs CisJCQkJCXNpemVvZiAodTY0KSwgc2l6ZW9mICh1NjQpKSkKKwkJZ290byBy ZV93cml0ZV90cDsKKwkgICAgfQorCSAgZWxzZQorICAgICAgICAgICAgewor CSAgICAgIHN0cnVjdCB2YWx1ZSAqdmFsID0gTlVMTDsKKwkgICAgICBzdHJ1 Y3QgY2xlYW51cCAqYmFja19jaGFpbjsKKwkgICAgICBjb25zdCBnZGJfYnl0 ZSAqY29udGVudCA9IE5VTEw7CisKKwkgICAgICBiYWNrX2NoYWluID0gbWFr ZV9jbGVhbnVwIChudWxsX2NsZWFudXAsIE5VTEwpOworCSAgICAgIFRSWV9D QVRDSCAoZSwgUkVUVVJOX01BU0tfRVJST1IpCisJICAgICAgICB7CisJCSAg dmFsID0gZXZhbHVhdGVfZXhwcmVzc2lvbiAoY29sbGVjdC0+ZXhwcik7CisJ CSAgY29udGVudCA9IHZhbHVlX2NvbnRlbnRzICh2YWwpOworCQl9CisJICAg ICAgaWYgKGUucmVhc29uIDwgMCB8fCBjb2xsZWN0LT50eXBlICE9IHZhbHVl X3R5cGUgKHZhbCkpCisJCXsKKwkJICBpZiAoZS5yZWFzb24gPCAwKQorCQkg ICAgd2FybmluZyAoXygiXAordHJhY2VmcmFtZSAlZCBpcyBkcm9wcGVkIGJl Y2F1c2UgdHJ5IHRvIGdldCB0aGUgdmFsdWUgb2YgXCIlc1wiIGdvdCBlcnJv cjogJXMiKSwKKwkJCSAgICAgZnJhbWVfbnVtLCBjb2xsZWN0LT5zdHIsIGUu bWVzc2FnZSk7CisJCSAgZWxzZQorCQkgICAgd2FybmluZyAoXygiXAordHJh Y2VmcmFtZSAlZCBpcyBkcm9wcGVkIGJlY2F1c2UgdHlwZSBvZiBcIiVzXCIg aXMgd3JvbmcuIiksCisJCQkgICAgIGZyYW1lX251bSwgY29sbGVjdC0+c3Ry KTsKKwkJICB0cmFjZWZyYW1lX2lzX2Ryb3BwZWQgPSAxOworCQkgIGRvX2Ns ZWFudXBzIChiYWNrX2NoYWluKTsKKwkJICBicmVhazsKKwkJfQorCisJICAg ICAgLyogV3JpdGUgdGhpcyB2YWwgYWNjb3JkaW5nIHRvIHR5cGUuICAqLwor CSAgICAgIGlmIChjdGZfc2F2ZV9hbGlnbl93cml0ZSAoJnRjcywgY29udGVu dCwKKwkJCQkJVFlQRV9MRU5HVEggKGNvbGxlY3QtPnR5cGUpLAorCQkJCQlj b2xsZWN0LT5hbGlnbl9zaXplKSkKKwkJeworCQkgIGRvX2NsZWFudXBzIChi YWNrX2NoYWluKTsKKwkJICBnb3RvIHJlX3dyaXRlX3RwOworCQl9CisKKwkg ICAgICAvKiBGcmVlIHRoZSBtZW1vcnkgdGhhdCBhbGxvYyBieSBldmFsdWF0 ZV9leHByZXNzaW9uLiAgKi8KKwkgICAgICBkb19jbGVhbnVwcyAoYmFja19j aGFpbik7CisJICAgIH0KKwl9CisKKyAgICAgIGlmICh0cmFjZWZyYW1lX2lz X2Ryb3BwZWQpCisJY29udGludWU7CisKKyAgICAgIHRjcy5jb250ZW50X3Np emUgPSB0Y3MuY3VycmVudF9jb250ZW50X3NpemU7CisgICAgfQorICBjdGZf c2F2ZV93cml0ZV9jb250ZW50X3NpemUgKCZ0Y3MpOworCisgIGRvX2NsZWFu dXBzIChvbGRfY2hhaW4pOworfQotLS0gL2Rldi9udWxsCisrKyBiL2N0Zi5o CkBAIC0wLDAgKzEsMjUgQEAKKy8qIENURiBmb3JtYXQgc3VwcG9ydC4KKwor ICAgQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgQ1RGX0gKKyNk ZWZpbmUgQ1RGX0gKKworZXh0ZXJuIHZvaWQgY3RmX3NhdmUgKGNvbnN0IGNo YXIgKmRpcm5hbWUpOworCisjZW5kaWYKLS0tIGEvbWkvbWktbWFpbi5jCisr KyBiL21pL21pLW1haW4uYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUg Im9zZGF0YS5oIgogI2luY2x1ZGUgInNwbGF5LXRyZWUuaCIKICNpbmNsdWRl ICJ0cmFjZXBvaW50LmgiCisjaW5jbHVkZSAiY3RmLmgiCiAjaW5jbHVkZSAi YWRhLWxhbmcuaCIKICNpbmNsdWRlICJsaW5lc3BlYy5oIgogCkBAIC0yNDg4 LDE2ICsyNDg5LDE5IEBAIHZvaWQKIG1pX2NtZF90cmFjZV9zYXZlIChjaGFy ICpjb21tYW5kLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiB7CiAgIGludCB0 YXJnZXRfc2F2ZXMgPSAwOworICBpbnQgZ2VuZXJhdGVfY3RmID0gMDsKICAg Y2hhciAqZmlsZW5hbWU7CiAKICAgaWYgKGFyZ2MgIT0gMSAmJiBhcmdjICE9 IDIpCi0gICAgZXJyb3IgKF8oIlVzYWdlOiAtdHJhY2Utc2F2ZSBbLXJdIGZp bGVuYW1lIikpOworICAgIGVycm9yIChfKCJVc2FnZTogLXRyYWNlLXNhdmUg Wy1yXSBbLWN0Zl0gZmlsZW5hbWUiKSk7CiAKICAgaWYgKGFyZ2MgPT0gMikK ICAgICB7CiAgICAgICBmaWxlbmFtZSA9IGFyZ3ZbMV07CiAgICAgICBpZiAo c3RyY21wIChhcmd2WzBdLCAiLXIiKSA9PSAwKQogCXRhcmdldF9zYXZlcyA9 IDE7CisgICAgICBpZiAoc3RyY21wIChhcmd2WzBdLCAiLWN0ZiIpID09IDAp CisJZ2VuZXJhdGVfY3RmID0gMTsKICAgICAgIGVsc2UKIAllcnJvciAoXygi SW52YWxpZCBvcHRpb246ICVzIiksIGFyZ3ZbMF0pOwogICAgIH0KQEAgLTI1 MDYsNyArMjUxMCwxMCBAQCBtaV9jbWRfdHJhY2Vfc2F2ZSAoY2hhciAqY29t bWFuZCwgY2hhciAqCiAgICAgICBmaWxlbmFtZSA9IGFyZ3ZbMF07CiAgICAg fQogCi0gIHRyYWNlX3NhdmUgKGZpbGVuYW1lLCB0YXJnZXRfc2F2ZXMpOwor ICBpZiAoZ2VuZXJhdGVfY3RmKQorICAgIGN0Zl9zYXZlIChmaWxlbmFtZSk7 CisgIGVsc2UKKyAgICB0cmFjZV9zYXZlIChmaWxlbmFtZSwgdGFyZ2V0X3Nh dmVzKTsKIH0KIAogdm9pZAotLS0gYS90cmFjZXBvaW50LmMKKysrIGIvdHJh Y2Vwb2ludC5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiZXhjZXB0 aW9ucy5oIgogI2luY2x1ZGUgImNsaS9jbGktdXRpbHMuaCIKICNpbmNsdWRl ICJwcm9iZS5oIgorI2luY2x1ZGUgImN0Zi5oIgogCiAvKiByZWFkbGluZSBp bmNsdWRlIGZpbGVzICovCiAjaW5jbHVkZSAicmVhZGxpbmUvcmVhZGxpbmUu aCIKQEAgLTU3Myw3ICs1NzQsNyBAQCB3aGlsZV9zdGVwcGluZ19wc2V1ZG9j b21tYW5kIChjaGFyICphcmdzCiAgIGVycm9yIChfKCJUaGlzIGNvbW1hbmQg Y2FuIG9ubHkgYmUgdXNlZCBpbiBhIHRyYWNlcG9pbnQgYWN0aW9ucyBsaXN0 LiIpKTsKIH0KIAotc3RhdGljIHZvaWQKK3ZvaWQKIGNvbGxlY3RfcHNldWRv Y29tbWFuZCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KQogewogICBlcnJv ciAoXygiVGhpcyBjb21tYW5kIGNhbiBvbmx5IGJlIHVzZWQgaW4gYSB0cmFj ZXBvaW50IGFjdGlvbnMgbGlzdC4iKSk7CkBAIC0xMTQ3LDYgKzExNDgsMzQg QEAgZG9fY29sbGVjdF9zeW1ib2wgKGNvbnN0IGNoYXIgKnByaW50X25hbQog ICBwLT5jb3VudCsrOwogfQogCitpbnQKK2FkZF9sb2NhbF9zeW1ib2xzXzEg KGludCB0eXBlLCBDT1JFX0FERFIgcGMsCisJCSAgICAgaXRlcmF0ZV9vdmVy X2Jsb2NrX2FyZ19sb2NhbF92YXJzX2NiIGNiLAorCQkgICAgIHZvaWQgKmNi X2RhdGEpCit7CisgIHN0cnVjdCBibG9jayAqYmxvY2s7CisKKyAgaWYgKHR5 cGUgPT0gJ0wnKQorICAgIHsKKyAgICAgIGJsb2NrID0gYmxvY2tfZm9yX3Bj IChwYyk7CisgICAgICBpZiAoYmxvY2sgPT0gTlVMTCkKKwlyZXR1cm4gLTE7 CisKKyAgICAgIGl0ZXJhdGVfb3Zlcl9ibG9ja19sb2NhbF92YXJzIChibG9j aywgY2IsIGNiX2RhdGEpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAg IHBjID0gZ2V0X3BjX2Z1bmN0aW9uX3N0YXJ0IChwYyk7CisgICAgICBibG9j ayA9IGJsb2NrX2Zvcl9wYyAocGMpOworICAgICAgaWYgKGJsb2NrID09IE5V TEwpCisJcmV0dXJuIC0xOworCisgICAgICBpdGVyYXRlX292ZXJfYmxvY2tf YXJnX3ZhcnMgKGJsb2NrLCBjYiwgY2JfZGF0YSk7CisgICAgfQorCisgIHJl dHVybiAwOworfQorCiAvKiBBZGQgYWxsIGxvY2FscyAob3IgYXJncykgc3lt Ym9scyB0byBjb2xsZWN0aW9uIGxpc3QuICAqLwogc3RhdGljIHZvaWQKIGFk ZF9sb2NhbF9zeW1ib2xzIChzdHJ1Y3QgY29sbGVjdGlvbl9saXN0ICpjb2xs ZWN0LApAQCAtMTE1NSw2ICsxMTg0LDcgQEAgYWRkX2xvY2FsX3N5bWJvbHMg KHN0cnVjdCBjb2xsZWN0aW9uX2xpcwogewogICBzdHJ1Y3QgYmxvY2sgKmJs b2NrOwogICBzdHJ1Y3QgYWRkX2xvY2FsX3N5bWJvbHNfZGF0YSBjYl9kYXRh OworICBjb25zdCBjaGFyICpuYW1lOwogCiAgIGNiX2RhdGEuY29sbGVjdCA9 IGNvbGxlY3Q7CiAgIGNiX2RhdGEuZ2RiYXJjaCA9IGdkYmFyY2g7CkBAIC0x MTY0LDMzICsxMTk0LDE5IEBAIGFkZF9sb2NhbF9zeW1ib2xzIChzdHJ1Y3Qg Y29sbGVjdGlvbl9saXMKICAgY2JfZGF0YS5jb3VudCA9IDA7CiAKICAgaWYg KHR5cGUgPT0gJ0wnKQotICAgIHsKLSAgICAgIGJsb2NrID0gYmxvY2tfZm9y X3BjIChwYyk7Ci0gICAgICBpZiAoYmxvY2sgPT0gTlVMTCkKLQl7Ci0JICB3 YXJuaW5nIChfKCJDYW4ndCBjb2xsZWN0IGxvY2FsczsgIgotCQkgICAgICJu byBzeW1ib2wgdGFibGUgaW5mbyBhdmFpbGFibGUuXG4iKSk7Ci0JICByZXR1 cm47Ci0JfQotCi0gICAgICBpdGVyYXRlX292ZXJfYmxvY2tfbG9jYWxfdmFy cyAoYmxvY2ssIGRvX2NvbGxlY3Rfc3ltYm9sLCAmY2JfZGF0YSk7Ci0gICAg ICBpZiAoY2JfZGF0YS5jb3VudCA9PSAwKQotCXdhcm5pbmcgKF8oIk5vIGxv Y2FscyBmb3VuZCBpbiBzY29wZS4iKSk7Ci0gICAgfQorICAgIG5hbWUgPSAi bG9jYWxzIjsKICAgZWxzZQotICAgIHsKLSAgICAgIHBjID0gZ2V0X3BjX2Z1 bmN0aW9uX3N0YXJ0IChwYyk7Ci0gICAgICBibG9jayA9IGJsb2NrX2Zvcl9w YyAocGMpOwotICAgICAgaWYgKGJsb2NrID09IE5VTEwpCi0JewotCSAgd2Fy bmluZyAoXygiQ2FuJ3QgY29sbGVjdCBhcmdzOyBubyBzeW1ib2wgdGFibGUg aW5mbyBhdmFpbGFibGUuIikpOwotCSAgcmV0dXJuOwotCX0KKyAgICBuYW1l ID0gImFyZ3MiOwogCi0gICAgICBpdGVyYXRlX292ZXJfYmxvY2tfYXJnX3Zh cnMgKGJsb2NrLCBkb19jb2xsZWN0X3N5bWJvbCwgJmNiX2RhdGEpOwotICAg ICAgaWYgKGNiX2RhdGEuY291bnQgPT0gMCkKLQl3YXJuaW5nIChfKCJObyBh cmdzIGZvdW5kIGluIHNjb3BlLiIpKTsKKyAgaWYgKGFkZF9sb2NhbF9zeW1i b2xzXzEgKHR5cGUsIHBjLCBkb19jb2xsZWN0X3N5bWJvbCwgJmNiX2RhdGEp KQorICAgIHsKKyAgICAgIHdhcm5pbmcgKF8oIkNhbid0IGNvbGxlY3QgJXM7 IG5vIHN5bWJvbCB0YWJsZSBpbmZvIGF2YWlsYWJsZS5cbiIpLAorCSAgICAg ICBuYW1lKTsKKyAgICAgIHJldHVybjsKICAgICB9CisKKyAgaWYgKGNiX2Rh dGEuY291bnQgPT0gMCkKKyAgICB3YXJuaW5nIChfKCJObyAlcyBmb3VuZCBp biBzY29wZS4iKSwgbmFtZSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zMTUy LDYgKzMxNjgsNyBAQCBzdGF0aWMgdm9pZAogdHJhY2Vfc2F2ZV9jb21tYW5k IChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCiB7CiAgIGludCB0YXJnZXRf ZG9lc19zYXZlID0gMDsKKyAgaW50IGdlbmVyYXRlX2N0ZiA9IDA7CiAgIGNo YXIgKiphcmd2OwogICBjaGFyICpmaWxlbmFtZSA9IE5VTEw7CiAgIHN0cnVj dCBjbGVhbnVwICpiYWNrX3RvOwpAQCAtMzE2Niw2ICszMTgzLDggQEAgdHJh Y2Vfc2F2ZV9jb21tYW5kIChjaGFyICphcmdzLCBpbnQgZnJvbQogICAgIHsK ICAgICAgIGlmIChzdHJjbXAgKCphcmd2LCAiLXIiKSA9PSAwKQogCXRhcmdl dF9kb2VzX3NhdmUgPSAxOworICAgICAgaWYgKHN0cmNtcCAoKmFyZ3YsICIt Y3RmIikgPT0gMCkKKwlnZW5lcmF0ZV9jdGYgPSAxOwogICAgICAgZWxzZSBp ZiAoKiphcmd2ID09ICctJykKIAllcnJvciAoXygidW5rbm93biBvcHRpb24g YCVzJyIpLCAqYXJndik7CiAgICAgICBlbHNlCkBAIC0zMTc1LDEwICszMTk0 LDE4IEBAIHRyYWNlX3NhdmVfY29tbWFuZCAoY2hhciAqYXJncywgaW50IGZy b20KICAgaWYgKCFmaWxlbmFtZSkKICAgICBlcnJvcl9ub19hcmcgKF8oImZp bGUgaW4gd2hpY2ggdG8gc2F2ZSB0cmFjZSBkYXRhIikpOwogCi0gIHRyYWNl X3NhdmUgKGZpbGVuYW1lLCB0YXJnZXRfZG9lc19zYXZlKTsKKyAgaWYgKGdl bmVyYXRlX2N0ZikKKyAgICB7CisgICAgICBpZiAodGFyZ2V0X2RvZXNfc2F2 ZSkKKwllcnJvcl9ub19hcmcgKF8oIi1yIGNhbm5vdCBiZSB1c2VkIHdpdGgg LWN0Zi4iKSk7CisgICAgICBjdGZfc2F2ZSAoZmlsZW5hbWUpOworICAgIH0K KyAgZWxzZQorICAgIHRyYWNlX3NhdmUgKGZpbGVuYW1lLCB0YXJnZXRfZG9l c19zYXZlKTsKIAogICBpZiAoZnJvbV90dHkpCi0gICAgcHJpbnRmX2ZpbHRl cmVkIChfKCJUcmFjZSBkYXRhIHNhdmVkIHRvIGZpbGUgJyVzJy5cbiIpLCBm aWxlbmFtZSk7CisgICAgcHJpbnRmX2ZpbHRlcmVkIChfKCJUcmFjZSBkYXRh IHNhdmVkIHRvICVzICclcycuXG4iKSwKKwkJICAgICBnZW5lcmF0ZV9jdGYg PyAiZGlyZWN0b3J5IiA6ICJmaWxlIiwgZmlsZW5hbWUpOwogCiAgIGRvX2Ns ZWFudXBzIChiYWNrX3RvKTsKIH0KQEAgLTUyMjIsNiArNTI0OSw3IEBAIF9p bml0aWFsaXplX3RyYWNlcG9pbnQgKHZvaWQpCiAgIGFkZF9jb20gKCJ0c2F2 ZSIsIGNsYXNzX3RyYWNlLCB0cmFjZV9zYXZlX2NvbW1hbmQsIF8oIlwKIFNh dmUgdGhlIHRyYWNlIGRhdGEgdG8gYSBmaWxlLlxuXAogVXNlIHRoZSAnLXIn IG9wdGlvbiB0byBkaXJlY3QgdGhlIHRhcmdldCB0byBzYXZlIGRpcmVjdGx5 IHRvIHRoZSBmaWxlLFxuXAorVXNlIHRoZSAnLWN0Zicgb3B0aW9uIHRvIHNh dmUgdGhlIGRhdGEgdG8gQ1RGIGZvcm1hdCxcblwKIHVzaW5nIGl0cyBvd24g ZmlsZXN5c3RlbS4iKSk7CiAKICAgYyA9IGFkZF9jb20gKCJ0dmFyaWFibGUi LCBjbGFzc190cmFjZSwgdHJhY2VfdmFyaWFibGVfY29tbWFuZCxfKCJcCi0t LSBhL3RyYWNlcG9pbnQuaAorKysgYi90cmFjZXBvaW50LmgKQEAgLTIzLDYg KzIzLDcgQEAKICNpbmNsdWRlICJ0YXJnZXQuaCIKICNpbmNsdWRlICJtZW1y YW5nZS5oIgogI2luY2x1ZGUgImdkYl92ZWNzLmgiCisjaW5jbHVkZSAic3Rh Y2suaCIKIAogLyogQSB0cmFjZSBzdGF0ZSB2YXJpYWJsZSBpcyBhIHZhbHVl IG1hbmFnZWQgYnkgYSB0YXJnZXQgYmVpbmcKICAgIHRyYWNlZC4gIEEgdHJh Y2Ugc3RhdGUgdmFyaWFibGUgKG9yIHRzdiBmb3Igc2hvcnQpIGNhbiBiZSBh Y2Nlc3NlZApAQCAtMjQ2LDYgKzI0Nyw3IEBAIGV4dGVybiB2b2lkIHZhbGlk YXRlX2FjdGlvbmxpbmUgKGNoYXIgKioKIAogZXh0ZXJuIHZvaWQgZW5kX2Fj dGlvbnNfcHNldWRvY29tbWFuZCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5 KTsKIGV4dGVybiB2b2lkIHdoaWxlX3N0ZXBwaW5nX3BzZXVkb2NvbW1hbmQg KGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSk7CitleHRlcm4gdm9pZCBjb2xs ZWN0X3BzZXVkb2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSk7 CiAKIGV4dGVybiBzdHJ1Y3QgdHJhY2Vfc3RhdGVfdmFyaWFibGUgKmZpbmRf dHJhY2Vfc3RhdGVfdmFyaWFibGUgKGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0 ZXJuIHN0cnVjdCB0cmFjZV9zdGF0ZV92YXJpYWJsZSAqY3JlYXRlX3RyYWNl X3N0YXRlX3ZhcmlhYmxlIChjb25zdCBjaGFyICpuYW1lKTsKQEAgLTI5MCw0 ICsyOTIsNyBAQCBleHRlcm4gc3RydWN0IHRyYWNlZnJhbWVfaW5mbyAqcGFy c2VfdHJhCiBleHRlcm4gaW50IHRyYWNlZnJhbWVfYXZhaWxhYmxlX21lbW9y eSAoVkVDKG1lbV9yYW5nZV9zKSAqKnJlc3VsdCwKIAkJCQkJQ09SRV9BRERS IG1lbWFkZHIsIFVMT05HRVNUIGxlbik7CiAKK2V4dGVybiBpbnQgYWRkX2xv Y2FsX3N5bWJvbHNfMSAoaW50IHR5cGUsIENPUkVfQUREUiBwYywKKwkJCQlp dGVyYXRlX292ZXJfYmxvY2tfYXJnX2xvY2FsX3ZhcnNfY2IgY2IsCisJCQkJ dm9pZCAqY2JfZGF0YSk7CiAjZW5kaWYJLyogVFJBQ0VQT0lOVF9IICovCg== --e89a8fb1fe2a3b1c9904d4edf08c--