Date: Tue, 9 Feb 1999 13:46:58 -0500 (EST) From: Larry Lile <lile@stdio.com> To: Julian Elischer <julian@whistle.com> Cc: hackers@FreeBSD.ORG Subject: Re: Why did this panic? Message-ID: <Pine.BSF.4.05.9902091338150.14147-300000@heathers.stdio.com> In-Reply-To: <Pine.BSF.3.95.990209103135.5802D-100000@current1.whistle.com>
next in thread | previous in thread | raw e-mail | index | archive | help
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --0-1628243425-918586018=:14147 Content-Type: TEXT/PLAIN; charset=X-UNKNOWN Content-Transfer-Encoding: QUOTED-PRINTABLE It looks like Jan 20 21:15 (EST) judging from the CVS directory and=20 sounds about right as I recall. drwxr-xr-x 2 root wheel 512 Jan 20 21:15 CVS I included the kernel config for you, the problem is that I am working on token-ring drivers and my code could easily be wrong. The funny thing is, I only see the problem with high mtu's like 4K. No problems at 1500. Also, I have an fxp interface in the machine (in reference to the last thread). I have also included the source to the oltr driver in-case you want to look at the code where I allocate the mubfs... Things appeared to start to go wrong in ReceiveFrameCompleted. The tok (IBM) driver is compiled in but the interface was down. Larry Lile lile@stdio.com On Tue, 9 Feb 1999, Julian Elischer wrote: > ah yes that's what I want.. > mclfree is garbage.... > exactly liek we saw on our mystery crash >=20 > This indicates that an mbuf cluster was used after it was freed, > or it was allocated to two differnt users. >=20 >=20 > that's exactly what we saw. >=20 > What version EXACTLY (date etc) of FreeBSD? >=20 >=20 > tell me.. > what protocols are compiled in?=20 > and what netowrking drivers and=20 > what machines are on your nets (specifically, do you have MACS > and the netatalk code compiled in? >=20 >=20 > On Tue, 9 Feb 1999, Larry Lile wrote: >=20 > >=20 > > Is this what you were looking for? > >=20 > > (kgdb) print *m0 > > $4 =3D {m_hdr =3D {mh_next =3D 0x0, mh_nextpkt =3D 0x0, mh_data =3D 0xf= 0756a20 "(rc=3D",=20 > > mh_len =3D 40, mh_type =3D 1, mh_flags =3D 2}, M_dat =3D {MH =3D {M= H_pkthdr =3D { > > rcvif =3D 0x0, len =3D 1492, header =3D 0x4000000}, MH_dat =3D = {MH_ext =3D { > > ext_buf =3D 0x3d637228 <Address 0x3d637228 out of bounds>,=20 > > ext_free =3D 0, ext_size =3D 2048, ext_ref =3D 0},=20 > > MH_databuf =3D "(rc=3D\000\000\000\000\000\b\000\000\000\000\00= 0\000E\b\005=D41=BA@\000@\006=EF_\n\000\000\001\n\000\000\002\000\024\004\r= \t\211=F4=BE\013=F8=B6\002P\020D\020Z=B2\000\000sap f4 ui/C len=3D\020@\020= \000Z=B1=C5=EC\000\000\203/=C3=AD=AA=AA\003\000\000\000\b\000le"}},=20 > > M_databuf =3D "\000\000\000\000=D4\005\000\000\000\000\000\004(rc= =3D\000\000\000\000\000\b\000\000\000\000\000\000E\b\005=D41=BA@\000@\006= =EF_\n\000\000\001\n\000\000\002\000\024\004\r\t\211=F4=BE\013=F8=B6\002P\0= 20D\020Z=B2\000\000sap f4 ui/C len=3D\020@\020\000Z=B1=C5=EC\000\000\203/= =C3=AD=AA=AA\003\000\000\000\b\000le"}} > >=20 > > (kgdb) print m0.M_dat.MH.MH_dat.MH_ext > > $6 =3D {ext_buf =3D 0x3d637228 <Address 0x3d637228 out of bounds>, ext_= free =3D 0,=20 > > ext_size =3D 2048, ext_ref =3D 0} > >=20 > > (kgdb) print ((union mcluster *)(m0.M_dat.MH.MH_dat.MH_ext.ext_buf))->m= cl_next > > Cannot access memory at address 0x3d637228. > >=20 > > or more to the point: > >=20 > > (kgdb) print mclfree > > $8 =3D (union mcluster *) 0x3d637228 >=20 > *blam* > Somethings not freeing mbuf clusters correctly. >=20 > > (kgdb) print *mclfree > > Cannot access memory at address 0x3d637228. > > (kgdb)=20 > >=20 > > Or am I misenterpreting MCLGET/MCLALLOC? > >=20 > > I must have missed the messages about this, was it fixed? > >=20 > > Larry Lile > > lile@stdio.com > >=20 > > On Tue, 9 Feb 1999, Julian Elischer wrote: > >=20 > > > I think We saw this last week.. > > > it crashed on MCLGET.. > > > what is the pointer to the next free mbuf cluster? > > > (not the next mbuf) (check the MCLGET macro to see what I mean) > > >=20 > > >=20 > > > On Tue, 9 Feb 1999, Larry Lile wrote: > > >=20 > > > >=20 > > > > I am working on improving the mtu sizes (above 1500) for the Olicom= =20 > > > > token ring driver but I just ran across this panic that I really > > > > don't understand. Any ideas?=20 > > > >=20 > > > > Larry Lile > > > > lile@stdio.com > > > >=20 > > > >=20 > > > > Fatal trap 12: page fault while in kernel mode > > > > fault virtual address=09=3D 0xf07eddc2 > > > > fault code=09=09=3D supervisor write, page not present > > > > instruction pointer=09=3D 0x8:0xf02096ff > > > > stack pointer=09 =3D 0x10:0xf6829cdc > > > > frame pointer=09 =3D 0x10:0xf6829d14 > > > > code segment=09=09=3D base 0x0, limit 0xfffff, type 0x1b > > > > =09=09=09=3D DPL 0, pres 1, def32 1, gran 1 > > > > processor eflags=09=3D interrupt enabled, resume, IOPL =3D 0 > > > > current process=09=09=3D 352 (ftpd) > > > > interrupt mask=09=09=3D net=20 > > > > trap number=09=09=3D 12 > > > > panic: page fault > > > >=20 > > > > syncing disks... 7 7 done > > > >=20 > > > > dumping to dev 20419, offset 761856 > > > > dump 128 127 126 125 124 123 122 121 120 119 118 117 116 115 114 11= 3 112 111 110 109 108 107 106 105 104 103 102 101 100 99 98 97 96 95 94 93 = 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 = 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 = 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 = 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1=20 > > > > --- > > > > #0 boot (howto=3D256) at ../../kern/kern_shutdown.c:285 > > > > 285=09=09=09dumppcb.pcb_cr3 =3D rcr3(); > > > > (kgdb) bt > > > > #0 boot (howto=3D256) at ../../kern/kern_shutdown.c:285 > > > > #1 0xf013f55d in panic (fmt=3D0xf023f25b "page fault") > > > > at ../../kern/kern_shutdown.c:446 > > > > #2 0xf02024da in trap_fatal (frame=3D0xf6829ca0, eva=3D4034846146) > > > > at ../../i386/i386/trap.c:942 > > > > #3 0xf0202193 in trap_pfault (frame=3D0xf6829ca0, usermode=3D0, ev= a=3D4034846146) > > > > at ../../i386/i386/trap.c:835 > > > > #4 0xf0201daa in trap (frame=3D{tf_es =3D 16, tf_ds =3D 16, tf_edi= =3D -260740608,=20 > > > > tf_esi =3D -260740576, tf_ebp =3D -159212268, tf_isp =3D -159= 212344,=20 > > > > tf_ebx =3D -1073314688, tf_edx =3D 630210, tf_ecx =3D -265747= 636,=20 > > > > tf_eax =3D -260751360, tf_trapno =3D 12, tf_err =3D 2, tf_eip= =3D -266299649,=20 > > > > tf_cs =3D 8, tf_eflags =3D 66066, tf_esp =3D -250238026, tf_s= s =3D -250238028}) > > > > at ../../i386/i386/trap.c:437 > > > > #5 0xf02096ff in DriverReceiveFrameCompleted (DriverHandle=3D0x1,= =20 > > > > ByteCount=3D1514, FragmentCount=3D1, FragmentHandle=3D0x9, Rece= iveStatus=3D0) > > > > at ../../i386/isa/if_oltr.c:1236 > > > > #6 0xf0210acc in ReturnCompletedBuffers () > > > > #7 0x631000 in ?? () > > > > #8 0xecc5b15a in ?? () > > > > Cannot access memory at address 0x104018. > > > > (kgdb) up 5 > > > > #5 0xf02096ff in DriverReceiveFrameCompleted (DriverHandle=3D0x1,= =20 > > > > ByteCount=3D1514, FragmentCount=3D1, FragmentHandle=3D0x9, Rece= iveStatus=3D0) > > > > at ../../i386/isa/if_oltr.c:1236 > > > > 1236=09 MCLGET(m0, M_DONTWAIT); > > > > (kgdb) print m0 > > > > $1 =3D (struct mbuf *) 0xf0756a00 > > > > (kgdb) list > > > > 1231=09 if (m0 =3D=3D NULL) { > > > > 1232=09 ifp->if_ierrors++; > > > > 1233=09 goto out; > > > > 1234=09 } > > > > 1235=09 if (ByteCount + 2 > MHLEN) { > > > > 1236=09 MCLGET(m0, M_DONTWAIT); > > > > 1237=09 mbuf_size =3D MCLBYTES; > > > > 1238=09 if ((m0->m_flags & M_EXT) =3D=3D 0) { > > > > 1239=09 m_freem(m0); > > > > 1240=09 ifp->if_ierrors++; > > > > (kgdb) print mbstat > > > > $3 =3D {m_mbufs =3D 128, m_clusters =3D 100, m_spare =3D 0, m_clfre= e =3D 27,=20 > > > > m_drops =3D 0, m_wait =3D 0, m_drain =3D 0, m_mtypes =3D {65453, = 79, 4,=20 > > > > 0 <repeats 253 times>}, m_mcfail =3D 0, m_mpfail =3D 0, m_msize= =3D 128,=20 > > > > m_mclbytes =3D 2048, m_minclsize =3D 204, m_mlen =3D 108, m_mhlen= =3D 96} > > > > (kgdb) print *m0 > > > > $4 =3D {m_hdr =3D {mh_next =3D 0x0, mh_nextpkt =3D 0x0, mh_data =3D= 0xf0756a20 "(rc=3D",=20 > > > > mh_len =3D 40, mh_type =3D 1, mh_flags =3D 2}, M_dat =3D {MH = =3D {MH_pkthdr =3D { > > > > rcvif =3D 0x0, len =3D 1492, header =3D 0x4000000}, MH_dat = =3D {MH_ext =3D { > > > > ext_buf =3D 0x3d637228 <Address 0x3d637228 out of bounds>= ,=20 > > > > ext_free =3D 0, ext_size =3D 2048, ext_ref =3D 0},=20 > > > > MH_databuf =3D "(rc=3D\000\000\000\000\000\b\000\000\000\00= 0\000\000E\b\005=D41=BA@\000@\006=EF_\n\000\000\001\n\000\000\002\000\024\0= 04\r\t\211=F4=BE\013=F8=B6\002P\020D\020Z=B2\000\000sap f4 ui/C len=3D\020@= \020\000Z=B1=C5=EC\000\000\203/=C3=AD=AA=AA\003\000\000\000\b\000le"}},=20 > > > > M_databuf =3D "\000\000\000\000=D4\005\000\000\000\000\000\004(= rc=3D\000\000\000\000\000\b\000\000\000\000\000\000E\b\005=D41=BA@\000@\006= =EF_\n\000\000\001\n\000\000\002\000\024\004\r\t\211=F4=BE\013=F8=B6\002P\0= 20D\020Z=B2\000\000sap f4 ui/C len=3D\020@\020\000Z=B1=C5=EC\000\000\203/= =C3=AD=AA=AA\003\000\000\000\b\000le"}} > > > > (kgdb) > > > >=20 > > > >=20 > > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > > > > with "unsubscribe freebsd-hackers" in the body of the message > > > >=20 > > >=20 > > >=20 > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > > > with "unsubscribe freebsd-hackers" in the body of the message > > >=20 > >=20 > >=20 >=20 --0-1628243425-918586018=:14147 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="if_oltr.c" Content-Transfer-Encoding: BASE64 Content-ID: <Pine.BSF.4.05.9902091346580.14147@heathers.stdio.com> Content-Description: Content-Disposition: attachment; filename="if_oltr.c" LyogDQogKiBDb3B5cmlnaHQgKGMpIDE5OTgsIExhcnJ5IExpbGUNCiAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuDQogKg0KICogRm9yIGxhdGVzdCBzb3VyY2Vz IGFuZCBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciwgcGxlYXNlDQogKiBn byB0byBodHRwOi8vYW5hcmNoeS5zdGRpby5jb20uDQogKg0KICogUXVlc3Rp b25zLCBjb21tZW50cyBvciBzdWdnZXN0aW9ucyBzaG91bGQgYmUgZGlyZWN0 ZWQgdG8NCiAqIExhcnJ5IExpbGUgPGxpbGVAc3RkaW8uY29tPi4NCiAqDQog KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucw0KICogYXJlIG1ldDoNCiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQog KiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMsIGFuZCB0aGUgZm9sbG93aW5nDQogKiAgICBkaXNjbGFpbWVyLg0KICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUNCiAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogKg0K ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFO RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORA0KICogQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFDQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RQ0KICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg QVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCiAqIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMDQogKiBEQU1BR0VTIChJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUw0KICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQogKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVA0KICogTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ TkcgSU4gQU5ZIFdBWQ0KICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0K ICogU1VDSCBEQU1BR0UuDQogKg0KICogJElkOiBpZl9vbHRyLmMsdiAxLjE1 IDE5OTkvMDIvMDggMjM6Mzc6NDUgbGlsZSBFeHAgbGlsZSAkDQogKi8NCg0K DQojaW5jbHVkZSAicGNpLmgiDQojaW5jbHVkZSAib2x0ci5oIg0KI2luY2x1 ZGUgIm9wdF9pbmV0LmgiDQojaW5jbHVkZSAiYnBmaWx0ZXIuaCINCg0KI2lm IChOT0xUUiArIE5QQ0kpID4gMA0KDQovKiNkZWZpbmUgVFJsbGRJbmxpbmVJ TyovDQoNCiNkZWZpbmUgSVNBX0FEQVBURVJTICAoT0NfMzExNSB8IE9DXzMx MTcgfCBPQ18zMTE4KQ0KI2RlZmluZSBQQ0lfQURBUFRFUlMgIChPQ18zMTMz IHwgT0NfMzEzNiB8IE9DXzMxMzcgfCBcDQogICAgICAgICAgICAgICAgICAg ICAgIE9DXzMxMzkgfCBPQ18zMTQwIHwgT0NfMzE0MSB8IFwNCiAgICAgICAg ICAgICAgICAgICAgICAgT0NfMzI1MCB8IE9DXzM1NDAgKQ0KDQojZGVmaW5l IFBDSV9WRU5ET1JfT0xJQ09NIDB4MTA4RA0KDQpjaGFyICpBZGFwdGVyTmFt ZVtdID0gew0KICAgLyogIDAgKi8gIk9saWNvbSBYVCBBZGFwdGVyIFt1bnN1 cHBvcnRlZF0iLA0KICAgLyogIDEgKi8gIk9saWNvbSBPQy0zMTE1IiwNCiAg IC8qICAyICovICJPbGljb20gSVNBIDE2LzQgQWRhcHRlciAoT0MtMzExNyki LA0KICAgLyogIDMgKi8gIk9saWNvbSBJU0EgMTYvNCBBZGFwdGVyIChPQy0z MTE4KSIsDQogICAvKiAgNCAqLyAiT2xpY29tIE1DQSAxNi80IEFkYXB0ZXIg KE9DLTMxMjkpIFt1bnN1cHBvcnRlZF0iLA0KICAgLyogIDUgKi8gIk9saWNv bSBNQ0EgMTYvNCBBZGFwdGVyIChPQy0zMTI5KSBbdW5zdXBwb3J0ZWRdIiwN CiAgIC8qICA2ICovICJPbGljb20gTUNBIDE2LzQgQWRhcHRlciAoT0MtMzEy OSkgW3Vuc3VwcG9ydGVkXSIsDQogICAvKiAgNyAqLyAiT2xpY29tIEVJU0Eg MTYvNCBBZGFwdGVyIChPQy0zMTMzKSIsDQogICAvKiAgOCAqLyAiT2xpY29t IEVJU0EgMTYvNCBBZGFwdGVyIChPQy0zMTMzKSIsDQogICAvKiAgOSAqLyAi T2xpY29tIEVJU0EgMTYvNCBTZXJ2ZXIgQWRhcHRlciAoT0MtMzEzNSkiLA0K ICAgLyogMTAgKi8gIk9saWNvbSBQQ0kgMTYvNCBBZGFwdGVyIChPQy0zMTM2 KSIsDQogICAvKiAxMSAqLyAiT2xpY29tIFBDSSAxNi80IEFkYXB0ZXIgKE9D LTMxMzYpIiwNCiAgIC8qIDEyICovICJPbGljb20gUENJL0lJIDE2LzQgQWRh cHRlciAoT0MtMzEzNykiLA0KICAgLyogMTMgKi8gIk9saWNvbSBQQ0kgMTYv NCBBZGFwdGVyIChPQy0zMTM5KSIsDQogICAvKiAxNCAqLyAiT2xpY29tIFJh cGlkRmlyZSAzMTQwIDE2LzQgUENJIEFkYXB0ZXIgKE9DLTMxNDApIiwNCiAg IC8qIDE1ICovICJPbGljb20gUmFwaWRGaXJlIDMxNDEgRmliZXIgQWRhcHRl ciAoT0MtMzE0MSkiLA0KICAgLyogMTYgKi8gIk9saWNvbSBQQ01DSUEgMTYv NCBBZGFwdGVyIChPQy0zMjIwKSBbdW5zdXBwb3J0ZWRdIiwNCiAgIC8qIDE3 ICovICJPbGljb20gUENNQ0lBIDE2LzQgQWRhcHRlciAoT0MtMzEyMSwgT0Mt MzIzMCwgT0MtMzIzMikgW3Vuc3VwcG9ydGVkXSIsDQogICAvKiAxOCAqLyAi T2xpY29tIFBDTUNJQSAxNi80IEFkYXB0ZXIgKE9DLTMyNTApIiwNCiAgIC8q IDE5ICovICJPbGljb20gUmFwaWRGaXJlIDM1NDAgNC8xNi8xMDAgQWRhcHRl ciAoT0MtMzU0MCkiDQp9Ow0KDQojaW5jbHVkZSA8c3lzL3BhcmFtLmg+DQoj aW5jbHVkZSA8c3lzL3N5c3RtLmg+DQojaW5jbHVkZSA8c3lzL3Byb2MuaD4N CiNpbmNsdWRlIDxzeXMvc29ja2lvLmg+DQojaW5jbHVkZSA8c3lzL21hbGxv Yy5oPg0KI2luY2x1ZGUgPHN5cy9tYnVmLmg+DQojaW5jbHVkZSA8c3lzL3Nv Y2tldC5oPg0KI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4NCiNpbmNsdWRlIDxz eXMva2VybmVsLmg+DQojaW5jbHVkZSA8c3lzL2ludGVycnVwdC5oPg0KDQoj aW5jbHVkZSA8bmV0L2V0aGVybmV0Lmg+DQojaW5jbHVkZSA8bmV0L2lmLmg+ DQojaW5jbHVkZSA8bmV0L2lmX2FycC5oPg0KI2luY2x1ZGUgPG5ldC9pc284 ODAyNS5oPg0KI2luY2x1ZGUgPG5ldC9pZl9tZWRpYS5oPg0KDQojaWYgTkJQ RklMVEVSID4gMA0KI2luY2x1ZGUgPG5ldC9icGYuaD4NCiNlbmRpZg0KIA0K I2lmIE5QTlAgPiAwDQojaW5jbHVkZSA8aTM4Ni9pc2EvcG5wLmg+DQojZW5k aWYNCg0KI2luY2x1ZGUgPG1hY2hpbmUvY2xvY2suaD4NCiNpbmNsdWRlIDxt YWNoaW5lL21kX3Zhci5oPg0KI2luY2x1ZGUgPGkzODYvaXNhL2lzYV9kZXZp Y2UuaD4NCg0KI2lmIE5QQ0kgPiAwDQojaW5jbHVkZSA8cGNpL3BjaXZhci5o Pg0KI2luY2x1ZGUgPHBjaS9wY2lyZWcuaD4NCiNlbmRpZg0KDQojaWZuZGVm IFRSTExEX1NQRUVEX0FVVE8NCiNkZWZpbmUgVFJMTERfU1BFRURfQVVUTyAw DQojZW5kaWYNCg0Kdm9pZCAqb2x0cl9tYWxsb2Moc3NpemVfdCwgVFJsbGRB ZGFwdGVyQ29uZmlnX3QgKik7DQoNCi8qDQogKiBHbHVlIGZ1bmN0aW9ucyBw cm90b3R5cGVzIGZvciBQTVcga2l0IElPDQogKi8NCg0KI2lmbmRlZiBUUmxs ZElubGluZUlPDQpzdGF0aWMgdm9pZCBEcml2ZXJPdXRCeXRlICAgICAgICAg ICBfX1AoKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBjaGFyKSk7DQpzdGF0 aWMgdm9pZCBEcml2ZXJPdXRXb3JkICAgICAgICAgICBfX1AoKHVuc2lnbmVk IHNob3J0LCB1bnNpZ25lZCBzaG9ydCkpOw0Kc3RhdGljIHZvaWQgRHJpdmVy T3V0RHdvcmQgICAgICAgICAgX19QKCh1bnNpZ25lZCBzaG9ydCwgdW5zaWdu ZWQgbG9uZykpOw0Kc3RhdGljIHZvaWQgRHJpdmVyUmVwT3V0Qnl0ZSAgICAg ICAgX19QKCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgY2hhciAgKiwgaW50 KSk7DQpzdGF0aWMgdm9pZCBEcml2ZXJSZXBPdXRXb3JkICAgICAgICBfX1Ao KHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCAqLCBpbnQpKTsNCnN0 YXRpYyB2b2lkIERyaXZlclJlcE91dER3b3JkICAgICAgIF9fUCgodW5zaWdu ZWQgc2hvcnQsIHVuc2lnbmVkIGxvbmcgICosIGludCkpOw0Kc3RhdGljIHVu c2lnbmVkIGNoYXIgIERyaXZlckluQnl0ZSAgX19QKCh1bnNpZ25lZCBzaG9y dCkpOw0Kc3RhdGljIHVuc2lnbmVkIHNob3J0IERyaXZlckluV29yZCAgX19Q KCh1bnNpZ25lZCBzaG9ydCkpOw0Kc3RhdGljIHVuc2lnbmVkIGxvbmcgIERy aXZlckluRHdvcmQgX19QKCh1bnNpZ25lZCBzaG9ydCkpOw0Kc3RhdGljIHZv aWQgRHJpdmVyUmVwSW5CeXRlICAgICAgICAgX19QKCh1bnNpZ25lZCBzaG9y dCwgdW5zaWduZWQgY2hhciAgKiwgaW50KSk7DQpzdGF0aWMgdm9pZCBEcml2 ZXJSZXBJbldvcmQgICAgICAgICBfX1AoKHVuc2lnbmVkIHNob3J0LCB1bnNp Z25lZCBzaG9ydCAqLCBpbnQpKTsNCnN0YXRpYyB2b2lkIERyaXZlclJlcElu RHdvcmQgICAgICAgIF9fUCgodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGxv bmcgICosIGludCkpOw0KI2VuZGlmIC8qVFJsbGRJbmxpbmVJTyovDQpzdGF0 aWMgdm9pZCBEcml2ZXJTdXNwZW5kICAgICAgICAgICAgICAgIF9fUCgodW5z aWduZWQgc2hvcnQpKTsNCnN0YXRpYyB2b2lkIERyaXZlclN0YXR1cyAgICAg ICAgICAgICAgICAgX19QKCh2b2lkICosIFRSbGxkU3RhdHVzX3QgKikpOw0K c3RhdGljIHZvaWQgRHJpdmVyQ2xvc2VDb21wbGV0ZWQgICAgICAgICBfX1Ao KHZvaWQgKikpOw0Kc3RhdGljIHZvaWQgRHJpdmVyU3RhdGlzdGljcyAgICAg ICAgICAgICBfX1AoKHZvaWQgKiwgVFJsbGRTdGF0aXN0aWNzX3QgKikpOw0K c3RhdGljIHZvaWQgRHJpdmVyVHJhbnNtaXRGcmFtZUNvbXBsZXRlZCBfX1Ao KHZvaWQgKiwgdm9pZCAqLCBpbnQpKTsNCnN0YXRpYyB2b2lkIERyaXZlclJl Y2VpdmVGcmFtZUNvbXBsZXRlZCAgX19QKCh2b2lkICosIGludCwgaW50LCB2 b2lkICosIGludCkpOw0KDQp0eXBlZGVmIHN0cnVjdCB0eF9idWYgew0KICAg IGludCBpbmRleDsNCiAgICBjaGFyICpidWY7DQp9IHR4X2J1Zl90Ow0KDQp0 eXBlZGVmIHN0cnVjdCByeF9idWYgew0KICAgIGludCAgICAgIGluZGV4Ow0K ICAgIGNoYXIgICAgICpidWY7DQp9IHJ4X2J1Zl90Ow0KDQojaWZuZGVmIEVY VFJBX09MVFINCiNpZiBOUENJID4gMA0KI2RlZmluZSBFWFRSQV9PTFRSCTgN CiNlbHNlIA0KI2RlZmluZSBFWFRSQV9PTFRSCTANCiNlbmRpZiAvKiBOUENJ ICovDQojZW5kaWYgLyogRVhUUkFfT0xUUiAqLw0KDQojaWZuZGVmIE9MVFJf UFJPTUlTQ19NT0RFDQojZGVmaW5lIE9MVFJfUFJPTUlTQ19NT0RFIChUUkxM RF9QUk9NX0xMQykNCiNlbmRpZg0KDQojZGVmaW5lIEFMTF9PUFRJT05TIChJ Rk1fVE9LX0VUUiB8IElGTV9UT0tfU1JDUlQgfCBJRk1fVE9LX0FMTFIgfCBJ Rk1fVE9LX0RUUiB8IElGTV9UT0tfQ0xBU1NJQyB8IElGTV9UT0tfQVVUTykN Cg0KLyogTGlzdCBzaXplcyBNVVNUIGJlIGEgcG93ZXIgb2YgMiAqLw0KI2Rl ZmluZSBUWF9MSVNUX1NJWkUgICAgMTYNCiNkZWZpbmUgUlhfTElTVF9TSVpF ICAgIDE2IA0KI2RlZmluZSBUWF9MSVNUX01BU0sgICAgKFRYX0xJU1RfU0la RSAtIDEpDQojZGVmaW5lIFJYX0xJU1RfTUFTSyAgICAoUlhfTElTVF9TSVpF IC0gMSkNCiNkZWZpbmUgUlhfQlVGRkVSX0xFTiAgICg4KjEwMjQpDQojZGVm aW5lIFRYX0JVRkZFUl9MRU4gICAoOCoxMDI0KQ0KDQpzdHJ1Y3Qgb2x0cl9z b2Z0YyB7DQogICAgc3RydWN0IGFycGNvbSBhcnBjb207DQogICAgc3RydWN0 IGlmbWVkaWEgaWZtZWRpYTsNCiAgICBUUmxsZEFkYXB0ZXJDb25maWdfdCAq Y29uZmlnOw0KICAgIFRSbGxkQWRhcHRlcl90ICpUUmxsZEFkYXB0ZXI7DQog ICAgaW50IHVuaXQ7DQogICAgdV9zaG9ydCBQcm9taXNjTW9kZTsNCiAgICB1 X3Nob3J0IEFkYXB0ZXJNb2RlOw0KICAgIGludCBod19zdGF0ZTsNCiNkZWZp bmUgSFdfVU5LTk9XTiAgICAgIDAgIC8qIGluaXRpYWwvYWJzZW50IHN0YXRl ICovDQojZGVmaW5lIEhXX0ZPVU5EICAgICAgICAxICAvKiBmb3VuZCwgbm90 IGluaXRpYWxpemVkICovDQojZGVmaW5lIEhXX0JBRCAgICAgICAgICAyICAv KiBmYXRhbCBlcnJvciAqLw0KI2RlZmluZSBIV19GQUlMRUQgICAgICAgMyAg LyogY2xvc2VkIGVnLiBieSByZW1vdmUsIGFsbG93IG1hbnVhbCByZW9wZW4g Ki8NCiNkZWZpbmUgSFdfTE9BRElORyAgICAgIDQNCiNkZWZpbmUgSFdfQ0xP U0lORyAgICAgIDUNCiNkZWZpbmUgSFdfQ0xPU0lORzIgICAgIDYNCiNkZWZp bmUgSFdfQ0xPU0VEICAgICAgIDcNCiNkZWZpbmUgSFdfT1BFTklORyAgICAg IDgNCiNkZWZpbmUgSFdfT1BFTiAgICAgICAgIDkNCiNkZWZpbmUgSFdfRVJS T1IgICAgICAgIDEwIC8qIHRlbXBvcmFyeSBlcnJvciAqLw0KDQogICAgdV9s b25nIEdyb3VwQWRkcmVzczsNCiAgICB1X2xvbmcgRnVuY3Rpb25hbEFkZHJl c3M7DQogICAgaW50IHBvbGxfYWRhcHRlcjsgDQoNCiAgICBpbnQgdHhfbmV4 dDsNCiAgICBpbnQgdHhfYXZhaWw7DQogICAgdHhfYnVmX3QgdHhfYnVmZmVy W1RYX0xJU1RfU0laRV07DQoNCiAgICBpbnQgcnhfbmV4dDsNCiAgICBpbnQg cnhfYXZhaWw7DQogICAgcnhfYnVmX3QgcnhfYnVmZmVyW1JYX0xJU1RfU0la RV07DQoNCiAgICBzdHJ1Y3QgY2FsbG91dF9oYW5kbGUgb2x0cl9jaDsNCiAg ICBzdHJ1Y3QgY2FsbG91dF9oYW5kbGUgcG9sbF9jaDsNCg0KfTsNCg0Kc3Rh dGljIHN0cnVjdCBvbHRyX3NvZnRjIG9sdHJfc29mdGNbTk9MVFIgKyBFWFRS QV9PTFRSXTsNCg0KLyoNCiAqIERyaXZlciBmdW5jdGlvbiBwcm90b3R5cGVz DQogKi8NCg0Kc3RhdGljIGludCAgb2x0cl9wcm9iZSAgIF9fUCgoc3RydWN0 IGlzYV9kZXZpY2UgKikpOw0Kc3RhdGljIGludCAgb2x0cl9hdHRhY2ggIF9f UCgoc3RydWN0IGlzYV9kZXZpY2UgKikpOyAgDQpzdGF0aWMgdm9pZCBvbHRy X2luaXQgICAgX19QKChzdHJ1Y3Qgb2x0cl9zb2Z0YyAqKSk7DQpzdGF0aWMg dm9pZCBvbHRyX2ludHIgICAgX19QKChpbnQpKTsNCnN0YXRpYyB2b2lkIG9s dHJfc3RhcnQgICBfX1AoKHN0cnVjdCBpZm5ldCAqKSk7DQpzdGF0aWMgdm9p ZCBvbHRyX3N0b3AgICAgX19QKChzdHJ1Y3Qgb2x0cl9zb2Z0YyAqKSk7DQpz dGF0aWMgaW50ICBvbHRyX2lvY3RsICAgX19QKChzdHJ1Y3QgaWZuZXQgKiwg dV9sb25nLCBjYWRkcl90KSk7DQoNCnN0YXRpYyBpbnQgb2x0cl9hdHRhY2hf Y29tbW9uICAgX19QKChzdHJ1Y3Qgb2x0cl9zb2Z0YyAqKSk7DQoNCnZvaWQg b2x0cl90aW1lb3V0IF9fUCgodm9pZCAqKSk7DQp2b2lkIGFkYXB0ZXJfcG9s bCBfX1AoKHZvaWQgKikpOw0KDQpzdHJ1Y3QgaXNhX2RyaXZlciBvbHRyZHJp dmVyID0gew0KICAgIG9sdHJfcHJvYmUsDQogICAgb2x0cl9hdHRhY2gsDQog ICAgIm9sdHIiLA0KICAgIDANCn07DQoNCmludCBpc2FfY2FyZHMgPSAwOw0K DQojaWYgTlBDSSA+IDANCnN0YXRpYyB1X2xvbmcgb2x0cl9jb3VudCA9IE5P TFRSOw0Kc3RhdGljIGNvbnN0IGNoYXIgKm9sdHJfcGNpX3Byb2JlCV9fUCgo cGNpY2lfdCwgcGNpZGlfdCkpOw0Kc3RhdGljIHZvaWQgb2x0cl9wY2lfYXR0 YWNoCQlfX1AoKHBjaWNpX3QsIGludCkpOw0Kc3RhdGljIHZvaWQgb2x0cl9w Y2lfaW50ciAgICAJCV9fUCgodm9pZCAqKSk7DQpzdGF0aWMgdm9pZCBvbHRy X3BjaV9zaHV0ZG93bgkJX19QKChpbnQsIHZvaWQgKikpOw0KDQpzdGF0aWMg c3RydWN0IHBjaV9kZXZpY2Ugb2x0cl9kZXZpY2UgPSB7DQogICAgIm9sdHIi LA0KICAgIG9sdHJfcGNpX3Byb2JlLA0KICAgIG9sdHJfcGNpX2F0dGFjaCwN CiAgICAmb2x0cl9jb3VudCwNCiAgICBOVUxMDQp9Ow0KDQpEQVRBX1NFVChw Y2lkZXZpY2Vfc2V0LCBvbHRyX2RldmljZSk7DQppbnQgcGNpX2NhcmRzID0g MDsNCiNlbmRpZiAvKiBOUENJICovDQoNCnN0YXRpYyBpbnQgIG9sdHJfaWZt ZWRpYV91cGQJX19QKChzdHJ1Y3QgaWZuZXQgKikpOw0Kc3RhdGljIHZvaWQg b2x0cl9pZm1lZGlhX3N0cyAgICBfX1AoKHN0cnVjdCBpZm5ldCAqLCBzdHJ1 Y3QgaWZtZWRpYXJlcSAqKSk7DQoNCnN0YXRpYyBUUmxsZERyaXZlcl90IG9s dHJMbGREcml2ZXIgPSB7DQogICAgVFJMTERfVkVSU0lPTiwNCiNpZm5kZWYg VFJsbGRJbmxpbmVJTw0KICAgIERyaXZlck91dEJ5dGUsDQogICAgRHJpdmVy T3V0V29yZCwNCiAgICBEcml2ZXJPdXREd29yZCwNCiAgICBEcml2ZXJSZXBP dXRCeXRlLA0KICAgIERyaXZlclJlcE91dFdvcmQsDQogICAgRHJpdmVyUmVw T3V0RHdvcmQsDQogICAgRHJpdmVySW5CeXRlLA0KICAgIERyaXZlckluV29y ZCwNCiAgICBEcml2ZXJJbkR3b3JkLA0KICAgIERyaXZlclJlcEluQnl0ZSwN CiAgICBEcml2ZXJSZXBJbldvcmQsDQogICAgRHJpdmVyUmVwSW5Ed29yZCwN CiNlbmRpZiAvKlRSbGxkSW5saW5lSU8qLw0KICAgIERyaXZlclN1c3BlbmQs DQogICAgRHJpdmVyU3RhdHVzLA0KICAgIERyaXZlckNsb3NlQ29tcGxldGVk LA0KICAgIERyaXZlclN0YXRpc3RpY3MsDQogICAgRHJpdmVyVHJhbnNtaXRG cmFtZUNvbXBsZXRlZCwNCiAgICBEcml2ZXJSZWNlaXZlRnJhbWVDb21wbGV0 ZWQsDQp9Ow0KDQpUUmxsZEFkYXB0ZXJDb25maWdfdCBvbHRyX2NvbmZpZ1tO T0xUUiArIEVYVFJBX09MVFJdOw0KDQp2b2lkICoNCm9sdHJfbWFsbG9jKFNp emUsIEFkYXB0ZXIpDQogICAgc3NpemVfdCBTaXplOw0KICAgIFRSbGxkQWRh cHRlckNvbmZpZ190ICpBZGFwdGVyOw0Kew0KDQogICAgLyogSWYgdGhlIGFk YXB0ZXIgbmVlZHMgbWVtb3J5IGJlbG93IDE2TSBmb3IgRE1BIHRoZW4gdXNl IGNvbnRpZ21hbGxvYyAqLw0KICAgIGlmIChBZGFwdGVyLT5tb2RlICYgVFJM TERfTU9ERV8xNk0pICAvKiBBZGFwdGVyIHVzaW5nIElTQSBETUEgYnVmZmVy IGJlbG93IDE2TSAqLw0KICAgICAgICByZXR1cm4oY29udGlnbWFsbG9jKFNp emUsIE1fREVWQlVGLCBNX05PV0FJVCwgMHVsLCAweGZmZmZmZnVsLCAxdWws IDB4MTAwMDB1bCkpOw0KICAgIGVsc2UNCiAgICAgICAgcmV0dXJuKG1hbGxv YyhTaXplLCBNX0RFVkJVRiwgTV9OT1dBSVQpKTsNCn0NCiAgICANCi8qDQog KiBEcml2ZXIgRnVuY3Rpb25zIA0KICovDQoNCnN0YXRpYyBpbnQNCm9sdHJf cHJvYmUoaXMpDQogICAgc3RydWN0IGlzYV9kZXZpY2UgKmlzOw0Kew0KICAg IHN0YXRpYyBpbnQgZmluZF9jb21wbGV0ZWQgPSAwLCBhc3NpZ25lZFtOT0xU Ul07DQogICAgc3RydWN0IG9sdHJfc29mdGMgKnNjID0gJm9sdHJfc29mdGNb aXMtPmlkX3VuaXRdOw0KICAgIGludCBpOw0KDQogICAgcHJpbnRmKCJvbHRy JWQ6IG9sdHJfcHJvYmVcbiIsIGlzLT5pZF91bml0KTsNCg0KICAgIC8qIE1h a2UgbGlmZSBlYXN5LCB1c2UgdGhlIE9saWNvbSBzdXBwbGllZCBmaW5kIGZ1 bmN0aW9uIG9uIHRoZSBmaXJzdCBwcm9iZQ0KICAgICAqIHRvIHByb2JlIGFs bCBvZiB0aGUgSVNBIGFkYXB0ZXJzLiAgVGhlbiBnaXZlIHRoZW0gdG8gZWFj aCB1bml0IGFzIHJlcXVlc3RlZC4NCiAgICAgKiBUcnkgdG8gbWF0Y2ggdGhl IGFkYXB0ZXJzIHRvIHVuaXRzIGJhc2VkIG9uIHRoZSBpb2Jhc2UsIGJ1dCBp ZiBpb2Jhc2U/IHRoZW4NCiAgICAgKiBqdXN0IGdpdmUgb3V0IHRoZSBuZXh0 IGF2YWlsYWJsZSBhZGFwdGVyLg0KICAgICAqLw0KICAgIGlmICghZmluZF9j b21wbGV0ZWQpIHsNCiAgICAgICAgaXNhX2NhcmRzID0gVFJsbGRGaW5kKCZv bHRyTGxkRHJpdmVyLCAmb2x0cl9jb25maWdbMF0sIElTQV9BREFQVEVSUywg Tk9MVFIpOw0KICAgICAgICAvKmZvciAoaSA9IDA7IGkgPCBpc2FfY2FyZHM7 IGkrKykgew0KICAgICAgICAgICAgcHJpbnRmKCJUUmxsZEZpbmQ6IGNhcmQg JWQgLSAlcyBNQUMgJTZEXG4iLCBpICsgMSwgQWRhcHRlck5hbWVbb2x0cl9j b25maWdbaV0udHlwZV0sIG9sdHJfY29uZmlnW2ldLm1hY2FkZHJlc3MsICI6 Iik7DQogICAgICAgIH0qLw0KICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTk9M VFI7IGkrKykNCiAgICAgICAgICAgIGFzc2lnbmVkW2ldID0gMDsNCiAgICAg ICAgZmluZF9jb21wbGV0ZWQgPSAxOw0KICAgIH0NCg0KICAgIHNjLT51bml0 ID0gaXMtPmlkX3VuaXQ7DQogICAgc2MtPmh3X3N0YXRlID0gSFdfVU5LTk9X TjsNCg0KICAgIGlmIChmaW5kX2NvbXBsZXRlZCAmJiAoKGlzYV9jYXJkcyA9 PSAwKSB8fCAoaXMtPmlkX3VuaXQgPiBpc2FfY2FyZHMpKSkgDQogICAgICAg IHJldHVybigwKTsNCg0KICAgIGlmICgoKGlzLT5pZF9pb2Jhc2UgPCAweGEw MCkgfHwgKGlzLT5pZF9pb2Jhc2UgPiAweGJlMCkpICYmIChpcy0+aWRfaW9i YXNlICE9IDB4ZmZmZmZmZmYpKSB7DQogICAgICAgIHByaW50Zigib2x0ciVk OiBwb3J0IGFkZHJlc3MgaW1wb3NzaWJsZSAoMHglWClcbiIsIGlzLT5pZF91 bml0LCBpcy0+aWRfaW9iYXNlKTsNCiAgICAgICAgcmV0dXJuKDApOw0KICAg IH0NCg0KICAgIC8qIEF1dG8gYXNzaWduIGxvd2VzdCBhdmFpbGFibGUgY2Fy ZCBub3QgYWxyZWFkeSBpbiB1c2UgKi8NCiAgICBpZiAoaXMtPmlkX2lvYmFz ZSA9PSAweGZmZmZmZmZmKSB7DQogICAgICAgIHByaW50Zigib2x0ciVkOiBh dXRvIGFzc2lnbmluZyBjYXJkLlxuIiwgaXMtPmlkX3VuaXQpOw0KICAgICAg ICBmb3IgKGkgPSAwOyBhc3NpZ25lZFtpXTsgaSsrKTsNCiAgICAgICAgYXNz aWduZWRbaV0gPSAxOw0KICAgICAgICBzYy0+Y29uZmlnID0gJm9sdHJfY29u ZmlnW2ldOw0KICAgICAgICBpcy0+aWRfaW9iYXNlID0gc2MtPmNvbmZpZy0+ aW9iYXNlMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGFpbSBvdXIg cG9ydCBzcGFjZSAqLw0KICAgICAgICBpZiAoIWlzLT5pZF9pcnEpIA0KICAg ICAgICAgICAgaXMtPmlkX2lycSA9ICgxIDw8IHNjLT5jb25maWctPmludGVy cnVwdGxldmVsKTsgICAgICAgICAvKiBDbGFpbSBvdXIgaW50ZXJydXB0ICov DQogICAgICAgIGlzLT5pZF9pbnRyID0gKGludGhhbmQyX3QgKilvbHRyX2lu dHI7DQogICAgICAgIHJlZ2lzdGVyX2ludHIoZmZzKGlzLT5pZF9pcnEpIC0g MSwgaXMtPmlkX2lkLCBpcy0+aWRfcmlfZmxhZ3MsIGlzLT5pZF9pbnRyLCAm bmV0X2ltYXNrLCBpcy0+aWRfdW5pdCk7DQogICAgICAgIGlmICgoaXMtPmlk X2RycSA9PSAweGZmZmZmZmZmKSAmJiAoc2MtPmNvbmZpZy0+ZG1hbGV2ZWwg IT0gVFJMTERfRE1BX1BJTykpDQogICAgICAgICAgICBpcy0+aWRfZHJxID0g c2MtPmNvbmZpZy0+ZG1hbGV2ZWw7ICAgICAgICAgICAgICAgICAgICAgIC8q IENsYWltIG91ciBkbWEgY2hhbm5lbCAqLw0KICAgICAgICBwcmludGYoIm9s dHIlZDogPCVzPiBbJTZEXVxuIiwgaXMtPmlkX3VuaXQsIEFkYXB0ZXJOYW1l W3NjLT5jb25maWctPnR5cGVdLCBzYy0+Y29uZmlnLT5tYWNhZGRyZXNzLCAi OiIpOw0KICAgICAgICBzYy0+aHdfc3RhdGUgPSBIV19GT1VORDsNCiAgICAg ICAgcmV0dXJuKDEpOw0KICAgIH0gZWxzZSB7DQogICAgLyogQXNzaWduIGJh c2VkIG9uIGlvYmFzZSBhZGRyZXNzIHByb3ZpZGVkIGluIGtlcm5lbCBjb25m aWcgKi8NCiAgICAgICAgZm9yIChpID0gMDsgaSA8IE5PTFRSOyBpKyspIHsN CiAgICAgICAgICAgIGlmIChpcy0+aWRfaW9iYXNlID09IG9sdHJfY29uZmln W2ldLmlvYmFzZTApIHsNCiAgICAgICAgICAgICAgICBpZiAoYXNzaWduZWRb aV0pIHsNCiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJvbHRyJWQ6IGFk YXB0ZXIgKDB4JVgpIGFscmVhZHkgYXNzaWduZWQuXG4iLCBpcy0+aWRfdW5p dCwgaXMtPmlkX2lvYmFzZSk7DQogICAgICAgICAgICAgICAgICAgIHJldHVy bigwKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYXNz aWduZWRbaV0gPSAxOw0KICAgICAgICAgICAgICAgIHNjLT5jb25maWcgPSAm b2x0cl9jb25maWdbaV07DQogICAgICAgICAgICAgICAgaWYgKGlzLT5pZF9p cnEgPT0gMCkNCiAgICAgICAgICAgICAgICAgICAgaXMtPmlkX2lycSA9ICgx IDw8IHNjLT5jb25maWctPmludGVycnVwdGxldmVsKTsgICAgICAgICAvKiBD bGFpbSBvdXIgaW50ZXJydXB0ICovDQogICAgICAgICAgICAgICAgaXMtPmlk X2ludHIgPSAoaW50aGFuZDJfdCAqKW9sdHJfaW50cjsNCiAgICAgICAgICAg ICAgICByZWdpc3Rlcl9pbnRyKGZmcyhpcy0+aWRfaXJxKSAtIDEsIGlzLT5p ZF9pZCwgaXMtPmlkX3JpX2ZsYWdzLCBpcy0+aWRfaW50ciwgJm5ldF9pbWFz aywgaXMtPmlkX3VuaXQpOw0KICAgICAgICAgICAgICAgIGlmICgoaXMtPmlk X2RycSA9PSAweGZmZmZmZmZmKSAmJiAoc2MtPmNvbmZpZy0+ZG1hbGV2ZWwg IT0gVFJMTERfRE1BX1BJTykpDQogICAgICAgICAgICAgICAgICAgIGlzLT5p ZF9kcnEgPSBzYy0+Y29uZmlnLT5kbWFsZXZlbDsgICAgICAgICAgICAgICAg ICAgICAgLyogQ2xhaW0gb3VyIGRtYSBjaGFubmVsICovDQogICAgICAgICAg ICAgICAgcHJpbnRmKCJvbHRyJWQ6IDwlcz4gWyU2RF1cbiIsIGlzLT5pZF91 bml0LCBBZGFwdGVyTmFtZVtzYy0+Y29uZmlnLT50eXBlXSwgc2MtPmNvbmZp Zy0+bWFjYWRkcmVzcywgIjoiKTsNCiAgICAgICAgICAgICAgICBzYy0+aHdf c3RhdGUgPSBIV19GT1VORDsNCiAgICAgICAgICAgICAgICByZXR1cm4oMSk7 DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJu KDApOyAvKiBDYXJkIHdhcyBub3QgZm91bmQgKi8NCn0NCg0KI2lmIE5QQ0kg PiAwDQpzdGF0aWMgY29uc3QgY2hhciAqDQpvbHRyX3BjaV9wcm9iZShjb25m aWdfaWQsIGRldmljZV9pZCkNCiAgICBwY2ljaV90IGNvbmZpZ19pZDsNCiAg ICBwY2lkaV90IGRldmljZV9pZDsNCnsNCiAgICB1X2NoYXIgUENJQ29uZmln dXJhdGlvblNwYWNlWzY0XTsNCiAgICB1X2xvbmcgY29tbWFuZDsNCiAgICBp bnQgaSwgaiwgcmM7DQoNCiAgICBwcmludGYoIm9sdHI6IG9sdHJfcGNpX3By b2JlXG4iKTsNCg0KICAgIGogPSBOT0xUUiArIHBjaV9jYXJkczsNCg0KICAg IGlmIChwY2lfY2FyZHMgPT0gRVhUUkFfT0xUUikNCiAgICAgICAgcmV0dXJu KE5VTEwpOw0KDQogICAgaWYgKCgoZGV2aWNlX2lkICYgMHhmZmZmKSA9PSBQ Q0lfVkVORE9SX09MSUNPTSkgJiYgDQogICAgICAgICAgKCgoKGRldmljZV9p ZCA+PiAxNikgJiAweGZmZmYpID09IDB4MDAwMSkgfHwgDQogICAgICAgICAg ICgoKGRldmljZV9pZCA+PiAxNikgJiAweGZmZmYpID09IDB4MDAwNCkgfHwg DQogICAgICAgICAgICgoKGRldmljZV9pZCA+PiAxNikgJiAweGZmZmYpID09 IDB4MDAwNSkgfHwgDQogICAgICAgICAgICgoKGRldmljZV9pZCA+PiAxNikg JiAweGZmZmYpID09IDB4MDAwNykgfHwgDQogICAgICAgICAgICgoKGRldmlj ZV9pZCA+PiAxNikgJiAweGZmZmYpID09IDB4MDAwOCkpKSB7DQoNCiAgICAg ICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspDQogICAgICAgICAgICBQQ0lD b25maWd1cmF0aW9uU3BhY2VbaV0gPSBwY2lfY2ZncmVhZChjb25maWdfaWQs IGksIC8qYnl0ZXMqLzEpOw0KDQogICAgICAgIHJjID0gVFJsbGRQQ0lDb25m aWcoJm9sdHJMbGREcml2ZXIsICZvbHRyX2NvbmZpZ1tqXSwgUENJQ29uZmln dXJhdGlvblNwYWNlKTsNCg0KICAgICAgICBpZiAoKHJjID09IFRSTExEX1BD SUNPTkZJR19PSykgfHwgKHJjID09IFRSTExEX1BDSUNPTkZJR19TRVRfQ09N TUFORCkpIHsNCiAgICAgICAgICAgIGlmIChyYyA9PSBUUkxMRF9QQ0lDT05G SUdfU0VUX0NPTU1BTkQpIHsNCiAgICAgICAgICAgICAgICBwcmludGYoIm9s dHI6IHNldHRpbmcgYnVzLW1hc3RlciBtb2RlXG4iKTsNCiAgICAgICAgICAg ICAgICBjb21tYW5kID0gcGNpX2NvbmZfcmVhZChjb25maWdfaWQsIFBDSVJf Q09NTUFORCk7DQogICAgICAgICAgICAgICAgcGNpX2NvbmZfd3JpdGUoY29u ZmlnX2lkLCBQQ0lSX0NPTU1BTkQsIChjb21tYW5kIHwgUENJTV9DTURfQlVT TUFTVEVSRU4pKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHBjaV9j YXJkcysrOw0KICAgICAgICAgICAgcmV0dXJuIChBZGFwdGVyTmFtZVtvbHRy X2NvbmZpZ1tqXS50eXBlXSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAg ICAgICBpZiAocmMgPT0gVFJMTERfUENJQ09ORklHX0ZBSUwpDQogICAgICAg ICAgICAgICAgcHJpbnRmKCJvbHRyOiBUUmxsZFBDSUNvbmZpZyBmYWlsZWQh XG4iKTsNCiAgICAgICAgICAgIGlmIChyYyA9PSBUUkxMRF9QQ0lDT05GSUdf VkVSU0lPTikNCiAgICAgICAgICAgICAgICBwcmludGYoIm9sdHI6IHdyb25n IExMRCB2ZXJzaW9uXG4iKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1 cm4oTlVMTCk7DQp9DQojZW5kaWYgLyogTlBDSSAqLw0KDQpzdGF0aWMgaW50 DQpvbHRyX2F0dGFjaChpcykNCiAgICBzdHJ1Y3QgaXNhX2RldmljZSAqaXM7 DQp7DQogICAgc3RydWN0IG9sdHJfc29mdGMgKnNjID0gJm9sdHJfc29mdGNb aXMtPmlkX3VuaXRdOw0KICAgIGludCByYzsNCg0KICAgIHNjLT51bml0ID0g aXMtPmlkX3VuaXQ7DQoNCiAgICBpZiAoIW9sdHJfYXR0YWNoX2NvbW1vbihz YykpDQogICAgICAgIHJldHVybigwKTsNCg0KICAgIC8qIElmIHRoZSBrZXJu ZWwgY29uZmlnIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IGNhcmQgY29u ZmlndXJhdGlvbiB0aGVuDQogICAgICogYWRqdXN0IHRoZSBjYXJkIHNldHRp bmdzIHRvIG1hdGNoIHRoZSBrZXJuZWwuDQogICAgICovDQogICAgaWYgKChm ZnMoaXMtPmlkX2lycSkgLSAxKSAhPSBzYy0+Y29uZmlnLT5pbnRlcnJ1cHRs ZXZlbCkgew0KICAgICAgICByYyA9IFRSbGxkU2V0SW50ZXJydXB0KHNjLT5U UmxsZEFkYXB0ZXIsIGlzLT5pZF9pcnEpOyANCiAgICAgICAgaWYgKHJjICE9 IFRSTExEX0NPTkZJR19PSykgeyAgDQogICAgICAgICAgICBwcmludGYoIm9s dHIlZDogVW5hYmxlIHRvIGNoYW5nZSBhZGFwdGVyIGludGVycnVwdCBsZXZl bCAoJXgpXG4iLCBzYy0+dW5pdCwgcmMpOw0KICAgICAgICAgICAgcmV0dXJu KDApOw0KICAgICAgICB9DQogICAgfSAgIA0KICAgICAgICANCiAgICAvKiBT ZXQgZG1hIGxldmVsLCBmYWxsIGJhY2sgdG8gcGlvIGlmIHBvc3NpYmxlLiAo Zm9sbG93aW5nIFNDTyBkcml2ZXIgZXhhbXBsZSkgKi8NCiAgICBpZiAoaXMt PmlkX2RycSAhPSBzYy0+Y29uZmlnLT5kbWFsZXZlbCkgew0KICAgICAgICBy YyA9IFRSbGxkU2V0RE1BKHNjLT5UUmxsZEFkYXB0ZXIsIGlzLT5pZF9kcnEs ICZzYy0+Y29uZmlnLT5tb2RlKTsNCiAgICAgICAgaWYgKHJjICE9IFRSTExE X0NPTkZJR19PSykgew0KICAgICAgICAgICAgaWYgKChzYy0+Y29uZmlnLT5k bWFsZXZlbCAhPSBUUkxMRF9ETUFfUElPKSAmJg0KICAgICAgICAgICAgICAg IChUUmxsZFNldERNQShzYy0+VFJsbGRBZGFwdGVyLCBUUkxMRF9ETUFfUElP LCAmc2MtPmNvbmZpZy0+bW9kZSkgIT0gVFJMTERfQ09ORklHX09LKSkgew0K ICAgICAgICAgICAgICAgIHByaW50Zigib2x0ciVkOiB1bmFibGUgdG8gY2hh bmdlIGRtYSBsZXZlbCBmcm9tICVkIHRvICVkICgleClcbiIsIHNjLT51bml0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgc2MtPmNvbmZpZy0+ZG1hbGV2 ZWwsIGlzLT5pZF9kcnEsIHJjKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAg ICAgIHByaW50Zigib2x0ciVkOiBVbmFibGUgdG8gY2hhbmdlIGFkYXB0ZXIg ZG1hIGxldmVsLCB1c2luZyBQSU8gbW9kZSAoJXgpXG4iLCBzYy0+dW5pdCwg cmMpOw0KICAgICAgICAgICAgc2MtPmNvbmZpZy0+ZG1hbGV2ZWwgPSBUUkxM RF9ETUFfUElPOw0KICAgICAgICAgICAgcmMgPSBUUmxsZFNldERNQShzYy0+ VFJsbGRBZGFwdGVyLCBpcy0+aWRfZHJxLCAmc2MtPmNvbmZpZy0+bW9kZSk7 DQogICAgICAgIH0NCiAgICAgICAgaXMtPmlkX2lycSA9IHNjLT5jb25maWct PmRtYWxldmVsOw0KICAgIH0NCiAgICByZXR1cm4oMSk7DQp9DQoNCiNpZiBO UENJID4gMA0Kc3RhdGljIHZvaWQNCm9sdHJfcGNpX2F0dGFjaChjb25maWdf aWQsIHVuaXQpDQogICAgcGNpY2lfdCBjb25maWdfaWQ7DQogICAgaW50IHVu aXQ7DQp7DQogICAgc3RydWN0IG9sdHJfc29mdGMgKnNjID0gJm9sdHJfc29m dGNbdW5pdF07DQoNCiAgICBzYy0+dW5pdCA9IHVuaXQ7DQogICAgc2MtPmNv bmZpZyA9ICZvbHRyX2NvbmZpZ1t1bml0XTsNCiAgICBzYy0+aHdfc3RhdGUg PSBIV19GT1VORDsNCg0KICAgIHByaW50Zigib2x0ciVkOiBtYWMgYWRkcmVz cyBbJTZEXVxuIiwgc2MtPnVuaXQsIHNjLT5jb25maWctPm1hY2FkZHJlc3Ms ICI6Iik7DQoNCiAgICBpZiAoIW9sdHJfYXR0YWNoX2NvbW1vbihzYykpDQog ICAgICAgIHJldHVybjsNCg0KICAgIC8qIE1hcCBvdXIgaW50ZXJydXB0ICov DQogICAgaWYgKCFwY2lfbWFwX2ludChjb25maWdfaWQsIG9sdHJfcGNpX2lu dHIsIHNjLCAmbmV0X2ltYXNrKSkgew0KICAgICAgICBwcmludGYoIm9sdHIl ZDogY291bGRuJ3QgbWFwIGludGVycnVwdFxuIiwgdW5pdCk7DQogICAgICAg IHJldHVybjsNCiAgICB9DQp9DQojZW5kaWYgLyogTlBDSSAqLw0KDQpzdGF0 aWMgaW50DQpvbHRyX2F0dGFjaF9jb21tb24oc2MpDQogICAgc3RydWN0IG9s dHJfc29mdGMgKnNjOw0Kew0KICAgIHN0cnVjdCBpZm5ldCAqaWZwID0gJnNj LT5hcnBjb20uYWNfaWY7DQogICAgdV9pbnQgIGJ1ZnNpemU7DQogICAgaW50 ICAgIHJjLCBpLCBqOw0KICANCiAgICAvKnByaW50Zigib2x0ciVkOiBhdHRh Y2hfY29tbW9uIGNhbGxlZFxuIiwgc2MtPnVuaXQpOyovDQoNCiAgICAvKiBB bGxvY2F0ZSBhZGFwdGVyIG1lbW9yeSBidWZmZXIgKi8NCiAgICBidWZzaXpl ID0gVFJsbGRBZGFwdGVyU2l6ZSgpOw0KICAgIHNjLT5UUmxsZEFkYXB0ZXIg PSAoVFJsbGRBZGFwdGVyX3QgKilvbHRyX21hbGxvYyhidWZzaXplLCBzYy0+ Y29uZmlnKTsNCiAgICBpZiAoc2MtPlRSbGxkQWRhcHRlciA9PSBOVUxMKSB7 DQogICAgICAgIHByaW50Zigib2x0ciVkOiBVbmFibGUgdG8gYWxsb2NhdGUg YWRhcHRlciBtZW1vcnkgYmxvY2sgKCVkIGJ5dGVzKVxuIiwgc2MtPnVuaXQs IGJ1ZnNpemUpOw0KICAgIH0gDQogICAgLypwcmludGYoIm9sdHIlZDogQWRh cHRlciBtZW1vcnkgYmxvY2sgKCVwICVkIGJ5dGVzKVxuIiwgc2MtPnVuaXQs IHNjLT5UUmxsZEFkYXB0ZXIsIGJ1ZnNpemUpOyovDQoNCiAgICAvKiBTZXR1 cCB0cmFuc21pdCBwb29sICovDQogICAgZm9yIChpID0gMDsgaSA8IFRYX0xJ U1RfU0laRTsgaSsrKSB7DQogICAgICAgIHNjLT50eF9idWZmZXJbaV0uaW5k ZXggPSBpOw0KICAgICAgICBzYy0+dHhfYnVmZmVyW2ldLmJ1ZiA9IChjaGFy ICopb2x0cl9tYWxsb2MoVFhfQlVGRkVSX0xFTiwgc2MtPmNvbmZpZyk7DQog ICAgICAgIC8qIElmIHdlIGhhdmUgYSBmYWlsdXJlIHRoZW4gZnJlZSBldmVy eXRoaW5nIGFuZCBnZXQgb3V0ICovDQogICAgICAgIGlmICghc2MtPnR4X2J1 ZmZlcltpXS5idWYpIHsNCiAgICAgICAgICAgIHByaW50Zigib2x0ciVkOiBV bmFibGUgdG8gYWxsb2NhdGUgdHJhbnNtaXQgYnVmZmVycy5cbiIsIHNjLT51 bml0KTsNCiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspDQog ICAgICAgICAgICAgICAgZnJlZShzYy0+dHhfYnVmZmVyW2pdLmJ1ZiwgTV9E RVZCVUYpOw0KICAgICAgICAgICAgcmV0dXJuKDApOw0KICAgICAgICB9DQog ICAgfQ0KICAgIHNjLT50eF9uZXh0ID0gMDsNCiAgICBzYy0+dHhfYXZhaWwg PSBUWF9MSVNUX1NJWkU7DQoNCiAgICAvKiBTZXR1cCByZWNlaXZlIHBvb2wg Ki8NCiAgICBmb3IgKGkgPSAwOyBpIDwgUlhfTElTVF9TSVpFOyBpKyspIHsN CiAgICAgICAgc2MtPnJ4X2J1ZmZlcltpXS5pbmRleCA9IGk7DQogICAgICAg IHNjLT5yeF9idWZmZXJbaV0uYnVmID0gKGNoYXIgKilvbHRyX21hbGxvYyhS WF9CVUZGRVJfTEVOLCBzYy0+Y29uZmlnKTsNCiAgICAgICAgLyogSWYgd2Ug aGF2ZSBhIGZhaWx1cmUgdGhlbiBmcmVlIGV2ZXJ5dGhpbmcgYW5kIGdldCBv dXQgKi8NCiAgICAgICAgaWYgKCFzYy0+cnhfYnVmZmVyW2ldLmJ1ZikgeyAg ICAgICAgICANCiAgICAgICAgICAgIHByaW50Zigib2x0ciVkOiBVbmFibGUg dG8gYWxsb2NhdGUgcmVjZWl2ZSBidWZmZXJzLlxuIiwgc2MtPnVuaXQpOw0K ICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykNCiAgICAgICAg ICAgICAgICBmcmVlKHNjLT5yeF9idWZmZXJbal0uYnVmLCBNX0RFVkJVRik7 DQogICAgICAgICAgICByZXR1cm4oMCk7DQogICAgICAgIH0NCiAgICB9ICAg DQogICAgc2MtPnJ4X25leHQgPSAwOw0KICAgIHNjLT5yeF9hdmFpbCA9IFJY X0xJU1RfU0laRTsgDQogICAgLypwcmludGYoIm9sdHIlZDogQWxsb2NhdGVk IHJlY2VpdmUgYnVmZmVyc1xuIiwgc2MtPnVuaXQpOyAqLw0KICAgIA0KICAg IC8qIFNldCB1cCBhZGFwdGVyIHBvbGxpbmcgbWVjaGFuaXNtICovDQogICAg c2MtPnBvbGxfYWRhcHRlciA9IDE7DQogICAgY2FsbG91dF9oYW5kbGVfaW5p dCgmc2MtPnBvbGxfY2gpOw0KICAgIHNjLT5wb2xsX2NoID0gdGltZW91dChh ZGFwdGVyX3BvbGwsICh2b2lkICopc2MtPnVuaXQsICgxKmh6KS8xMDAwKTsN CiAgICBjYWxsb3V0X2hhbmRsZV9pbml0KCZzYy0+b2x0cl9jaCk7DQoNCiAg ICAvKiBJbml0aWFsaXplIGFkYXB0ZXIgKi8NCiAgICByYyA9IFRSbGxkQWRh cHRlckluaXQoJm9sdHJMbGREcml2ZXIsIHNjLT5UUmxsZEFkYXB0ZXIsIGt2 dG9wKHNjLT5UUmxsZEFkYXB0ZXIpLCANCiAgICAgICAgICAgICAgICAgICAg ICAgICAgKHZvaWQgKilzYy0+dW5pdCwgc2MtPmNvbmZpZyk7DQogICAgaWYg KHJjICE9IFRSTExEX0lOSVRfT0spIHsNCiAgICAgICAgc3dpdGNoIChyYykg ew0KICAgICAgICAgICAgY2FzZSBUUkxMRF9JTklUX05PVF9GT1VORDoNCiAg ICAgICAgICAgICAgICBwcmludGYoIm9sdHIlZDogQWRhcHRlciBub3QgZm91 bmQgb3IgbWFsZnVuY3Rpb25pbmcuXG4iLCBzYy0+dW5pdCk7DQogICAgICAg ICAgICAgICAgc2MtPmh3X3N0YXRlID0gSFdfQkFEOw0KICAgICAgICAgICAg ICAgIHJldHVybigwKTsNCiAgICAgICAgICAgIGNhc2UgVFJMTERfSU5JVF9V TlNVUFBPUlRFRDoNCiAgICAgICAgICAgICAgICBwcmludGYoIm9sdHIlZDog QWRhcHRlciBub3Qgc3VwcG9ydGVkIGJ5IGxvdyBsZXZlbCBkcml2ZXIuXG4i LCBzYy0+dW5pdCk7DQogICAgICAgICAgICAgICAgc2MtPmh3X3N0YXRlID0g SFdfVU5LTk9XTjsNCiAgICAgICAgICAgICAgICByZXR1cm4oMCk7DQogICAg ICAgICAgICBjYXNlIFRSTExEX0lOSVRfUEhZUzE2Og0KICAgICAgICAgICAg ICAgIHByaW50Zigib2x0ciVkOiBBZGFwdGVyIG1lbW9yeSBibG9jayBhYm92 ZSAxNk0sIG11c3QgYmUgYmVsb3cgMTZNLlxuIiwgc2MtPnVuaXQpOw0KICAg ICAgICAgICAgICAgIHJldHVybigwKTsNCiAgICAgICAgICAgIGNhc2UgVFJM TERfSU5JVF9WRVJTSU9OOg0KICAgICAgICAgICAgICAgIHByaW50Zigib2x0 ciVkOiBMb3cgbGV2ZWwgZHJpdmVyIHZlcnNpb24gbWlzbWF0Y2guXG4iLCBz Yy0+dW5pdCk7DQogICAgICAgICAgICAgICAgcmV0dXJuKDApOw0KICAgICAg ICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICBwcmludGYoIm9sdHIl ZDogVW5rbm93biBpbml0aWxpemF0aW9uIGVycm9yIG9jY291cmVkICgleCku XG4iLCBzYy0+dW5pdCwgcmMpOw0KICAgICAgICAgICAgICAgIHJldHVybigw KTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qIERvd25sb2FkIEFkYXB0 ZXIgTWljcm9jb2RlICovDQogICAgLypwcmludGYoIm9sdHIlZDogRG93bmxv YWRpbmcgYWRhcHRlciBtaWNyb2NvZGUuLi4iLCBzYy0+dW5pdCk7Ki8NCiAg ICBzYy0+aHdfc3RhdGUgPSBIV19MT0FESU5HOw0KICAgIHN3aXRjaChzYy0+ Y29uZmlnLT5tYWN0eXBlKSB7DQogICAgICAgIGNhc2UgVFJMTERfTUFDX1RN UzogICAgICAgICAgIC8qIFRNUyBtaWNyb2NvZGUgKi8NCiAgICAgICAgICAg IHJjID0gVFJsbGREb3dubG9hZChzYy0+VFJsbGRBZGFwdGVyLCBUUmxsZE1h Y0NvZGUpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgVFJM TERfTUFDX0hBV0tFWUU6ICAgICAgICAvKiBIYXdrZXllIG1pY3JvY29kZSAq Lw0KICAgICAgICAgICAgcmMgPSBUUmxsZERvd25sb2FkKHNjLT5UUmxsZEFk YXB0ZXIsIFRSbGxkSGF3a2V5ZU1hYyk7DQogICAgICAgICAgICBicmVhazsN CiAgICAgICAgY2FzZSBUUkxMRF9NQUNfQlVMTFNFWUU6ICAgICAgLyogQnVs bHNleWUgbWljcm9jb2RlICovDQogICAgICAgICAgICByYyA9IFRSbGxkRG93 bmxvYWQoc2MtPlRSbGxkQWRhcHRlciwgVFJsbGRCdWxsc2V5ZU1hYyk7DQog ICAgICAgICAgICBicmVhazsNCiAgICAgICAgZGVmYXVsdDoNCiAgICAgICAg ICAgIHByaW50Zigib2x0ciVkOiB1bmtub3duIG1hY3R5cGUgJWRcbiIsIHNj LT51bml0LCBzYy0+Y29uZmlnLT5tYWN0eXBlKTsNCiAgICAgICAgICAgIHJl dHVybigwKTsNCiAgICB9DQogICAgLyppZiAocmMgPT0gVFJMTERfRE9XTkxP QURfT0spIA0KICAgICAgICBwcmludGYoImRvbmVcbiIpOyovDQogICAgaWYg KChyYyA9PSBUUkxMRF9ET1dOTE9BRF9FUlJPUikgfHwgKHJjID09IFRSTExE X1NUQVRFKSkgew0KICAgICAgICBwcmludGYoIm9sdHIlZDogQWRhcHRlciBt aWNyb2NvZGUgZG93bmxvYWQgZmFpbGVkISAocmMgPSAleClcbiIsIHNjLT51 bml0LCByYyk7DQogICAgICAgIHNjLT5od19zdGF0ZSA9IEhXX0JBRDsNCiAg ICAgICAgcmV0dXJuKDApOyAgICAgDQogICAgfQ0KDQogICAgVFJsbGRTZXRT cGVlZChzYy0+VFJsbGRBZGFwdGVyLCBUUkxMRF9TUEVFRF9BVVRPKTsNCg0K ICAgIHNjLT5Qcm9taXNjTW9kZSA9IDA7DQogICAgc2MtPkFkYXB0ZXJNb2Rl ID0gMDsNCg0KICAgIC8qIERvIHRoZSBpZm5ldCBpbml0aWFsaXphdGlvbiAq Lw0KICAgIGlmcC0+aWZfc29mdGMgICA9IHNjOw0KICAgIGlmcC0+aWZfdW5p dCAgICA9IHNjLT51bml0Ow0KICAgIGlmcC0+aWZfbmFtZSAgICA9ICJvbHRy IjsNCiAgICBpZnAtPmlmX291dHB1dCAgPSBpc284ODAyNV9vdXRwdXQ7DQog ICAgaWZwLT5pZl9pbml0ICAgID0gKGlmX2luaXRfZl90ICopb2x0cl9pbml0 Ow0KICAgIGlmcC0+aWZfc3RhcnQgICA9IG9sdHJfc3RhcnQ7DQogICAgaWZw LT5pZl9pb2N0bCAgID0gb2x0cl9pb2N0bDsNCiAgICBpZnAtPmlmX2ZsYWdz ICAgPSBJRkZfQlJPQURDQVNUIHwgSUZGX01VTFRJQ0FTVCB8IElGRl9TSU1Q TEVYOw0KICAgIGJjb3B5KHNjLT5jb25maWctPm1hY2FkZHJlc3MsIHNjLT5h cnBjb20uYWNfZW5hZGRyLCBzaXplb2Yoc2MtPmNvbmZpZy0+bWFjYWRkcmVz cykpOw0KDQogICAgLyogU2V0IHVwIGNvbW1vbiBpZm1lZGlhIG9wdGlvbnMg Ki8NCiAgICBpZm1lZGlhX2luaXQoJnNjLT5pZm1lZGlhLCAwLCBvbHRyX2lm bWVkaWFfdXBkLCBvbHRyX2lmbWVkaWFfc3RzKTsNCg0KICAgIGlmbWVkaWFf YWRkKCZzYy0+aWZtZWRpYSwgSUZNX1RPS0VOIHwgSUZNX0FVVE8sIDAgLCBO VUxMKTsNCiAgICBpZm1lZGlhX2FkZCgmc2MtPmlmbWVkaWEsIElGTV9UT0tF TiB8IElGTV9UT0tfVVRQNCwgMCAsIE5VTEwpOw0KICAgIGlmbWVkaWFfYWRk KCZzYy0+aWZtZWRpYSwgSUZNX1RPS0VOIHwgSUZNX1RPS19VVFAxNiwgMCAs IE5VTEwpOw0KICAgIA0KICAgIGlmbWVkaWFfc2V0KCZzYy0+aWZtZWRpYSwg SUZNX1RPS0VOIHwgSUZNX0FVVE8pOw0KDQogICAgaWZfYXR0YWNoKGlmcCk7 DQogICAgaXNvODgwMjVfaWZhdHRhY2goaWZwKTsNCg0KI2lmIE5CUEZJTFRF UiA+IDANCiAgICBicGZhdHRhY2goaWZwLCBETFRfSUVFRTgwMiwgc2l6ZW9m KHN0cnVjdCBpc284ODAyNV9oZWFkZXIpKTsNCiNlbmRpZg0KDQogICAgcmV0 dXJuKDEpOw0KfQ0KDQojaWYgTlBDSSA+IDANCnN0YXRpYyB2b2lkDQpvbHRy X3BjaV9zaHV0ZG93bihob3d0bywgc2MpDQogICAgaW50IGhvd3RvOw0KICAg IHZvaWQgKnNjOw0Kew0KICAgIHByaW50Zigib2x0cjogb2x0cl9wY2lfc2h1 dGRvd24gY2FsbGVkXG4iKTsNCn0NCiNlbmRpZiAvKiBOUENJICovDQoNCnN0 YXRpYyBpbnQNCm9sdHJfaWZtZWRpYV91cGQoaWZwKQ0KICAgIHN0cnVjdCBp Zm5ldCAqaWZwOw0Kew0KICAgIHN0cnVjdCBvbHRyX3NvZnRjICpzYyA9IGlm cC0+aWZfc29mdGM7DQogICAgc3RydWN0IGlmbWVkaWEgKmlmbSAgID0gJnNj LT5pZm1lZGlhOw0KDQogICAgaWYgKElGTV9UWVBFKGlmbS0+aWZtX21lZGlh KSAhPSBJRk1fVE9LRU4pDQogICAgICAgIHJldHVybihFSU5WQUwpOw0KICAg IA0KICAgIHN3aXRjaChJRk1fU1VCVFlQRShpZm0tPmlmbV9tZWRpYSkpIHsN CiAgICAgICAgY2FzZSBJRk1fQVVUTzoNCiAgICAgICAgICAgIFRSbGxkU2V0 U3BlZWQoc2MtPlRSbGxkQWRhcHRlciwgVFJMTERfU1BFRURfQVVUTyk7DQog ICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBJRk1fVE9LX1VUUDQ6 DQogICAgICAgICAgICBUUmxsZFNldFNwZWVkKHNjLT5UUmxsZEFkYXB0ZXIs IFRSTExEX1NQRUVEXzRNQlBTKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAg ICAgICBjYXNlIElGTV9UT0tfVVRQMTY6DQogICAgICAgICAgICBUUmxsZFNl dFNwZWVkKHNjLT5UUmxsZEFkYXB0ZXIsIFRSTExEX1NQRUVEXzE2TUJQUyk7 DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgZGVmYXVsdDoNCiAgICAg ICAgICAgIHJldHVybihFSU5WQUwpOw0KICAgIH0NCg0KICAgIGlmIChJRk1f VFlQRV9PUFRJT05TKGlmbS0+aWZtX21lZGlhKSAmIElGTV9UT0tfRVRSKQ0K ICAgICAgICBwcmludGYoIm9sdHIlZDogRVRSIG5vdCBpbXBsZW1lbnRlZFxu Iiwgc2MtPnVuaXQpOw0KICAgIGlmIChJRk1fVFlQRV9PUFRJT05TKGlmbS0+ aWZtX21lZGlhKSAmIElGTV9UT0tfU1JDUlQpDQogICAgICAgIHByaW50Zigi b2x0ciVkOiBzb3VyY2Utcm91dGluZyBub3QgaW1wbGVtZW50ZWRcbiIsIHNj LT51bml0KTsNCiAgICBpZiAoSUZNX1RZUEVfT1BUSU9OUyhpZm0tPmlmbV9t ZWRpYSkgJiBJRk1fVE9LX0FMTFIpDQogICAgICAgIHByaW50Zigib2x0ciVk OiBhbGwgc291cmNlIHJvdXRlcyBub3QgaW1wbGVtZW50ZWRcbiIsIHNjLT51 bml0KTsNCiAgICBpZiAoSUZNX1RZUEVfT1BUSU9OUyhpZm0tPmlmbV9tZWRp YSkgJiBJRk1fVE9LX0RUUikgew0KICAgICAgICBzYy0+QWRhcHRlck1vZGUg fD0gVFJMTERfTU9ERV9GT1JDRV9UWEk7DQogICAgICAgIHNjLT5BZGFwdGVy TW9kZSAmPSB+VFJMTERfTU9ERV9GT1JDRV9US1A7DQogICAgfQ0KICAgIGlm IChJRk1fVFlQRV9PUFRJT05TKGlmbS0+aWZtX21lZGlhKSAmIElGTV9UT0tf Q0xBU1NJQykgew0KICAgICAgICBzYy0+QWRhcHRlck1vZGUgfD0gVFJMTERf TU9ERV9GT1JDRV9US1A7DQogICAgICAgIHNjLT5BZGFwdGVyTW9kZSAmPSB+ VFJMTERfTU9ERV9GT1JDRV9UWEk7DQogICAgfQ0KICAgIGlmIChJRk1fVFlQ RV9PUFRJT05TKGlmbS0+aWZtX21lZGlhKSAmIElGTV9UT0tfQVVUTykNCiAg ICAgICAgc2MtPkFkYXB0ZXJNb2RlICY9IH4oVFJMTERfTU9ERV9GT1JDRV9U WEkgfCBUUkxMRF9NT0RFX0ZPUkNFX1RLUCk7DQoNCiAgICBpZiAoSUZNX1RZ UEVfT1BUSU9OUyhpZm0tPmlmbV9tZWRpYSkgJiB+QUxMX09QVElPTlMpDQog ICAgICAgIHJldHVybihFSU5WQUwpOw0KDQogICAgcmV0dXJuKDApOw0KfQ0K DQpzdGF0aWMgdm9pZA0Kb2x0cl9pZm1lZGlhX3N0cyhpZnAsIGlmbXIpDQog ICAgc3RydWN0IGlmbmV0ICppZnA7DQogICAgc3RydWN0IGlmbWVkaWFyZXEg KmlmbXI7DQp7DQogICAgc3RydWN0IG9sdHJfc29mdGMgKnNjID0gaWZwLT5p Zl9zb2Z0YzsNCiAgICBzdHJ1Y3QgaWZtZWRpYSAqaWZtID0gJnNjLT5pZm1l ZGlhOw0KDQogICAgaWZtci0+aWZtX2FjdGl2ZSA9IElGTV9UWVBFKGlmbS0+ aWZtX21lZGlhKXxJRk1fU1VCVFlQRShpZm0tPmlmbV9tZWRpYSl8SUZNX1RZ UEVfT1BUSU9OUyhpZm0tPmlmbV9tZWRpYSk7DQoNCiAgICByZXR1cm47DQp9 DQoNCnZvaWQNCm9sdHJfdGltZW91dCh0b2tlbikNCiAgICB2b2lkICp0b2tl bjsNCnsNCiAgICBzdHJ1Y3Qgb2x0cl9zb2Z0YyAqc2MgPSAmb2x0cl9zb2Z0 Y1soaW50KXRva2VuXTsNCiAgICBpbnQgdW5pdCA9IChpbnQpdG9rZW4sIHM7 DQoNCiAgICBzID0gc3BsaW1wKCk7DQoNCiAgICBwcmludGYoIm9sdHIlZDog YWRhcHRlciB0aW1lZCBvdXQgKCV4KVxuIiwgdW5pdCwgc2MtPmh3X3N0YXRl KTsNCg0KICAgIHNwbHgocyk7DQp9DQoNCg0Kdm9pZA0KYWRhcHRlcl9wb2xs KHRva2VuKQ0KICAgIHZvaWQgKnRva2VuOw0Kew0KICAgIGludCB1bml0ID0g KGludCl0b2tlbiwgcG9sbF90aW1lb3V0ID0gMCwgczsNCiAgICBzdHJ1Y3Qg b2x0cl9zb2Z0YyAqc2MgPSAmb2x0cl9zb2Z0Y1t1bml0XTsNCiNpZiAwDQog ICAgc3RhdGljIGludCByeF9idWZmZXJzID0gMCwgdHhfYnVmZmVycyA9IDAs IHJjOyANCiNlbmRpZg0KICAgIA0KICAgIHMgPSBzcGxpbXAoKTsNCg0KICAg IC8qIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBvbGxpbmcgYSBk ZWFkIGNhcmQgKi8NCiAgICBpZiAoKHNjLT5od19zdGF0ZSA9PSBIV19CQUQp IHx8IChzYy0+aHdfc3RhdGUgPT0gSFdfVU5LTk9XTikpIHsNCiAgICAgICAg c2MtPnBvbGxfYWRhcHRlciA9IC0xOw0KICAgICAgICBzcGx4KHMpOw0KICAg ICAgICByZXR1cm47DQogICAgfQ0KDQogICAgLypwcmludGYoIm9sdHIlZDog YWRhcHRlciBwb2xsLlxuIiwgdW5pdCk7Ki8NCiAgICANCiAgICAvKiBJZiB0 aGUgYWRhcHRlciBpcyB0byBiZSBwb2xsZWQgYWdhaW4sIHRoZW4gc2V0IHVw DQogICAgICogbmV4dCB0aW1lb3V0IHBvbGwgDQogICAgICovDQogICAgaWYg KHNjLT5wb2xsX2FkYXB0ZXIpIHsNCiAgICAgICAgcG9sbF90aW1lb3V0ID0g VFJsbGRQb2xsKHNjLT5UUmxsZEFkYXB0ZXIpOw0KICAgICAgICBzYy0+cG9s bF9jaCA9IHRpbWVvdXQoYWRhcHRlcl9wb2xsLCAodm9pZCAqKXVuaXQsIChw b2xsX3RpbWVvdXQgKiBoeikvMTAwMCk7DQogICAgfQ0KI2lmIDANCiAgICBy YyA9IFRSbGxkUmVjZWl2ZUZyZWUoc2MtPlRSbGxkQWRhcHRlcik7DQogICAg aWYgKHJ4X2J1ZmZlcnMgIT0gcmMpIHsNCiAgICAgICAgcHJpbnRmKCJvbHRy JWQ6ICVkIHJlY2VpdmUgYnVmZmVycyBhdmFpbGFibGVcbiIsIHNjLT51bml0 LCByYyk7DQogICAgICAgIHJ4X2J1ZmZlcnMgPSByYzsNCiAgICB9IA0KICAg IHJjID0gVFJsbGRUcmFuc21pdEZyZWUoc2MtPlRSbGxkQWRhcHRlcik7DQog ICAgaWYgKHR4X2J1ZmZlcnMgIT0gcmMpIHsNCiAgICAgICAgcHJpbnRmKCJv bHRyJWQ6ICVkIHRyYW5zbWl0IGJ1ZmZlcnMgYXZhaWxhYmxlXG4iLCBzYy0+ dW5pdCwgcmMpOw0KICAgICAgICB0eF9idWZmZXJzID0gcmM7DQogICAgfSAN CiNlbmRpZg0KDQogICAgc3BseChzKTsgICAgICAgICAgICANCn0NCg0Kc3Rh dGljIHZvaWQgDQpvbHRyX2luaXQoc2MpDQogICAgc3RydWN0IG9sdHJfc29m dGMgKnNjOw0Kew0KICAgIHN0cnVjdCBpZm5ldCAqaWZwID0gJnNjLT5hcnBj b20uYWNfaWY7DQogICAgaW50IGksIHJjOw0KDQogICAgLypwcmludGYoIm9s dHIlZDogb2x0cl9pbml0XG4iLCBzYy0+dW5pdCk7Ki8NCiAgICANCiAgICAv KiANCiAgICAgKiBBZGFwdGVyIHNob3VsZCBiZSBmcmVzaGx5IGRvd25sb2Fk ZWQgb3IgcHJldmlvdXNseSBjbG9zZWQgYmVmb3JlDQogICAgICogYnJpbmdp bmcgaXQgYmFjayBvbiBsaW5lLg0KICAgICAqLw0KICAgIGlmICgoc2MtPmh3 X3N0YXRlICE9IEhXX0NMT1NFRCkgJiYgKHNjLT5od19zdGF0ZSAhPSBIV19M T0FESU5HKSAmJiAoc2MtPmh3X3N0YXRlICE9IEhXX0NMT1NJTkcyKSkgew0K ICAgICAgICBwcmludGYoIm9sdHIlZDogYWRhcHRlciBub3QgcmVhZHkgdG8g YmUgb3BlbmVkICglZCkuXG4iLCBzYy0+dW5pdCwgc2MtPmh3X3N0YXRlKTsN CiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIC8qIEFsbG9jYXRlIGFu ZCBzZXQgdXAgdGhlIERNQSBjaGFubmVsICovDQogICAgaWYgKHNjLT5jb25m aWctPmRtYWxldmVsICE9IFRSTExEX0RNQV9QSU8pIHsNCiAgICAgICAgcmMg PSBpc2FfZG1hX2FjcXVpcmUoc2MtPmNvbmZpZy0+ZG1hbGV2ZWwpOw0KICAg ICAgICBpc2FfZG1hY2FzY2FkZShzYy0+Y29uZmlnLT5kbWFsZXZlbCk7DQog ICAgfQ0KDQogICAgLyogT3BlbiB0aGUgYWRhcHRlciAqLw0KICAgIHNjLT5o d19zdGF0ZSA9IEhXX09QRU5JTkc7DQogICAgcmMgPSBUUmxsZE9wZW4oc2Mt PlRSbGxkQWRhcHRlciwgc2MtPmFycGNvbS5hY19lbmFkZHIsIHNjLT5Hcm91 cEFkZHJlc3MsIA0KICAgICAgICAgICAgICAgICAgIHNjLT5GdW5jdGlvbmFs QWRkcmVzcywgaWZwLT5pZl9tdHUgKyA1Miwgc2MtPkFkYXB0ZXJNb2RlKTsN CiAgICBpZiAocmMgIT0gVFJMTERfT1BFTl9PSykgew0KICAgICAgICBwcmlu dGYoIm9sdHIlZDogQWRhcHRlciBmYWlsZWQgdG8gb3BlbiAocmMgPSAleClc biIsIHNjLT51bml0LCByYyk7DQogICAgICAgIHNjLT5od19zdGF0ZSA9IEhX X0ZBSUxFRDsNCiAgICB9IGVsc2Ugew0KICAgICAgICAvKnByaW50Zigib2x0 ciVkOiBhZGFwdGVyIG9wZW5pbmcuLi5cbiIsIHNjLT51bml0KTsqLw0KICAg ICAgICAvKmlmcC0+aWZfZmxhZ3MgfD0gKElGRl9VUCB8IElGRl9SVU5OSU5H KTsqLw0KICAgICAgICBpZnAtPmlmX2ZsYWdzICY9IH5JRkZfT0FDVElWRTsN CiAgICB9DQogICAgc2MtPm9sdHJfY2ggPSB0aW1lb3V0KG9sdHJfdGltZW91 dCwgKHZvaWQgKilzYy0+dW5pdCwgMzAqaHopOw0KICAgIHRzbGVlcCgodm9p ZCAqKXNjLT51bml0LCAxLCAib2x0cm9wIiwgMzAqaHopOw0KDQogICAgLyog R2l2ZSB0aGUgdHJhbnNtaXQgYnVmZmVycyB0byB0aGUgYWRhcHRlciAqLw0K ICAgIGZvciAoaSA9IDA7IGkgPCBSWF9MSVNUX1NJWkU7IGkrKykgeyANCiAg ICAgICAgcmMgPSBUUmxsZFJlY2VpdmVGcmFnbWVudChzYy0+VFJsbGRBZGFw dGVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lk ICopc2MtPnJ4X2J1ZmZlcltzYy0+cnhfbmV4dCAmIFJYX0xJU1RfTUFTS10u YnVmLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt2dG9w KHNjLT5yeF9idWZmZXJbc2MtPnJ4X25leHQgJiBSWF9MSVNUX01BU0tdLmJ1 ZiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlhfQlVG RkVSX0xFTiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo dm9pZCAqKXNjLT5yeF9idWZmZXJbc2MtPnJ4X25leHQgJiBSWF9MSVNUX01B U0tdLmluZGV4KTsNCiAgICAgICAgaWYgKHJjICE9IFRSTExEX1JFQ0VJVkVf T0spIHsNCiAgICAgICAgICAgIHByaW50Zigib2x0ciVkOiBBZGFwdGVyIHJl ZnVzZWQgZnJhZ21lbnQgJWQgKHJjID0gJWQpLlxuIiwgc2MtPnVuaXQsIGks IHJjKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9ICBlbHNlIHsN CiAgICAgICAgICAgIHNjLT5yeF9hdmFpbC0tOw0KICAgICAgICB9DQogICAg ICAgIHNjLT5yeF9uZXh0Kys7DQogICAgfQ0KICAgIA0KICAgIHJldHVybjsN Cn0NCiAgICANCnN0YXRpYyB2b2lkDQpvbHRyX2ludHIodW5pdCkNCiAgICBp bnQgdW5pdDsNCnsNCiAgICBzdHJ1Y3Qgb2x0cl9zb2Z0YyAqc2MgPSAmb2x0 cl9zb2Z0Y1t1bml0XTsNCiAgICBpbnQgcmM7DQoNCiAgICAvKnByaW50Zigi b2x0ciVkOiBvbHRyX2ludHJcbiIsIHVuaXQpOyovIC8qIFRvbyBub2lzeSAq Lw0KICAgIHJjPSBUUmxsZEludGVycnVwdFNlcnZpY2Uoc2MtPlRSbGxkQWRh cHRlcik7DQogICAgaWYgKHJjID09IFRSTExEX05PX0lOVEVSUlVQVCkgDQog ICAgICAgIHByaW50Zigib2x0ciVkOiBpbnRlcnJ1cHQgbm90IHNlcnZpY2Vk LlxuIiwgdW5pdCk7DQp9DQoNCiNpZiBOUENJID4gMA0Kc3RhdGljIHZvaWQN Cm9sdHJfcGNpX2ludHIocHNjKQ0KICAgIHZvaWQgKnBzYzsNCnsNCiAgICBz dHJ1Y3Qgb2x0cl9zb2Z0YyAqc2MgPSAoc3RydWN0IG9sdHJfc29mdGMgKilw c2M7DQogICAgaW50IHJjID0gMDsNCg0KICAgIC8qcHJpbnRmKCJvbHRyJWQ6 IG9sdHJfcGNpX2ludHJcbiIsIHNjLT51bml0KTsqLyAvKiBUb28gbm9pc3kg Ki8NCiAgICByYyA9IFRSbGxkSW50ZXJydXB0U2VydmljZShzYy0+VFJsbGRB ZGFwdGVyKTsNCiAgICBpZiAocmMgPT0gVFJMTERfTk9fSU5URVJSVVBUKQ0K ICAgICAgICBwcmludGYoIm9sdHIlZDogcGNpIGludGVycnVwdCBub3Qgc2Vy dmljZWQuXG4iLCBzYy0+dW5pdCk7DQp9DQojZW5kaWYgLyogTlBDSSAqLw0K DQpzdGF0aWMgdm9pZCANCm9sdHJfc3RhcnQoaWZwKQ0KICAgIHN0cnVjdCBp Zm5ldCAqaWZwOw0Kew0KICAgIHN0cnVjdCBvbHRyX3NvZnRjICpzYyA9ICZv bHRyX3NvZnRjW2lmcC0+aWZfdW5pdF07DQogICAgc3RydWN0IG1idWYgKm0w LCAqbTsNCiAgICBzdHJ1Y3QgaXNvODgwMjVfaGVhZGVyICp0aDsNCiAgICBU UmxsZFRyYW5zbWl0X3QgZnJhbWU7DQogICAgaW50ICBsZW4sIGksIHJjOw0K DQogICAgLypwcmludGYoIm9sdHIlZDogb2x0cl9zdGFydFxuIiwgc2MtPnVu aXQpOyovDQoNCm91dGxvb3A6DQoNCiAgICAvKiBDaGVjayB0byBzZWUgaWYg d2UgaGF2ZSBlbm91Z2ggcm9vbSB0byB0cmFuc21pdCAqLw0KICAgIGlmIChz Yy0+dHhfYXZhaWwgPD0gMCkgew0KICAgICAgICAvKiBObyBmcmVlIGJ1ZmZl cnMsIGhvbGQgb2ZmIHRoZSB1cHBlciBsYXllcnMgKi8NCiAgICAgICAgLypw cmludGYoIm9sdHIlZDogdHJhbnNtaXQgcXVldWUgZnVsbC5cbiIsIHNjLT51 bml0KTsqLw0KICAgICAgICBpZnAtPmlmX2ZsYWdzIHw9IElGRl9PQUNUSVZF Ow0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIElGX0RFUVVFVUUoJmlm cC0+aWZfc25kLCBtKTsNCiAgICBpZiAobSA9PSAwKSB7DQogICAgICAgIC8q cHJpbnRmKCJvbHRyJWQ6IG9sdHJfc3RhcnQgTlVMTCBwYWNrZXQgZGVxdWV1 ZWQuXG4iLCBzYy0+dW5pdCk7Ki8NCiAgICAgICAgaWZwLT5pZl9mbGFncyAm PSB+SUZGX09BQ1RJVkU7DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAg ICB0aCA9IG10b2QobSwgc3RydWN0IGlzbzg4MDI1X2hlYWRlciAqKTsNCiAg ICB0aC0+YWMgPSAweDEwOw0KICAgIHRoLT5mYyA9IDB4NDA7DQogICAgDQog ICAgLyogS2VlcCBhIHBvaW50ZXIgdG8gdGhlIGhlYWQgb2YgdGhlIHBhY2tl dCAqLw0KICAgIG0wID0gbTsNCg0KICAgIGkgPSAoc2MtPnR4X25leHQgJiBU WF9MSVNUX01BU0spOyAvKiBKdXN0IHRvIHNob3J0ZW4gdGhpbmcgdXAgKi8N Cg0KICAgIGZvciAobGVuID0gMDsgbSAhPSAwOyBtID0gbS0+bV9uZXh0KSB7 DQogICAgICAgIGZyYW1lLlRyYW5zbWl0RnJhZ21lbnRbMF0uVmlydHVhbEFk ZHJlc3MgPSBzYy0+dHhfYnVmZmVyW2ldLmJ1ZjsNCiAgICAgICAgZnJhbWUu VHJhbnNtaXRGcmFnbWVudFswXS5QaHlzaWNhbEFkZHJlc3MgPSBrdnRvcChz Yy0+dHhfYnVmZmVyW2ldLmJ1Zik7DQogICAgICAgIGJjb3B5KG10b2QobSwg Y2FkZHJfdCksIHNjLT50eF9idWZmZXJbaV0uYnVmICsgbGVuLCBtLT5tX2xl bik7DQogICAgICAgIGxlbiArPSBtLT5tX2xlbjsNCiAgICB9DQogICAgZnJh bWUuRnJhZ21lbnRDb3VudCA9IDE7DQogICAgZnJhbWUuVHJhbnNtaXRGcmFn bWVudFswXS5jb3VudCA9IGxlbjsNCg0KICAgIHJjID0gVFJsbGRUcmFuc21p dEZyYW1lKHNjLT5UUmxsZEFkYXB0ZXIsICZmcmFtZSwgKHZvaWQgKilzYy0+ dHhfYnVmZmVyW2ldLmluZGV4KTsNCiAgICBpZiAocmMgIT0gVFJMTERfVFJB TlNNSVRfT0spIHsNCiAgICAgICAgcHJpbnRmKCJvbHRyJWQ6IFRSbGxkVHJh bnNtaXRGcmFtZSByZXR1cm5lZCAoJXgpXG4iLCBzYy0+dW5pdCwgcmMpOw0K ICAgICAgICBpZnAtPmlmX29lcnJvcnMrKzsNCiAgICAgICAgZ290byBiYWQ7 DQogICAgfQ0KDQogICAgc2MtPnR4X25leHQrKzsNCiAgICBzYy0+dHhfYXZh aWwtLTsNCg0KI2lmIE5CUEZJTFRFUiA+IDANCiAgICBpZiAoaWZwLT5pZl9i cGYpDQogICAgICAgIGJwZl9tdGFwKGlmcCwgbTApOw0KI2VuZGlmDQoNCmJh ZDoNCiAgICBtX2ZyZWVtKG0wKTsNCiAgICBnb3RvIG91dGxvb3A7DQogICAg cmV0dXJuOw0KfQ0KDQpzdGF0aWMgdm9pZA0Kb2x0cl9zdG9wKHNjKQ0KICAg IHN0cnVjdCBvbHRyX3NvZnRjICpzYzsNCnsNCiAgICBzdHJ1Y3QgaWZuZXQg KmlmcCA9ICZzYy0+YXJwY29tLmFjX2lmOw0KICAgIHByaW50Zigib2x0ciVk OiBvdGxyX3N0b3BcbiIsIHNjLT51bml0KTsNCiAgICBpZnAtPmlmX2ZsYWdz ICY9IH4oSUZGX1VQIHwgSUZGX1JVTk5JTkcgfCBJRkZfT0FDVElWRSk7DQog ICAgc2MtPmh3X3N0YXRlID0gSFdfQ0xPU0lORzsNCiAgICBUUmxsZENsb3Nl KHNjLT5UUmxsZEFkYXB0ZXIsIDApOw0KICAgIHNjLT5vbHRyX2NoID0gdGlt ZW91dChvbHRyX3RpbWVvdXQsICh2b2lkICopc2MtPnVuaXQsIDMwKmh6KTsN CiAgICB0c2xlZXAoKHZvaWQgKilzYy0+dW5pdCwgMSwgIm9sdHJjbCIsIDMw Kmh6KTsNCn0NCg0Kc3RhdGljIGludA0Kb2x0cl9pb2N0bChpZnAsIGNtZCwg ZGF0YSkNCiAgICBzdHJ1Y3QgaWZuZXQgKmlmcDsNCiAgICB1X2xvbmcgY21k Ow0KICAgIGNhZGRyX3QgZGF0YTsNCnsNCiAgICBzdHJ1Y3Qgb2x0cl9zb2Z0 YyAqc2MgPSAmb2x0cl9zb2Z0Y1tpZnAtPmlmX3VuaXRdOw0KICAgIHN0cnVj dCBpZnJlcSAqaWZyID0gKHN0cnVjdCBpZnJlcSAqKWRhdGE7DQogICAgaW50 IGVycm9yID0gMCwgczsNCg0KICAgIC8qcHJpbnRmKCJvbHRyJWQ6IG9sdHJf aW9jdGxcbiIsIGlmcC0+aWZfdW5pdCk7Ki8NCg0KICAgIHMgPSBzcGxpbXAo KTsNCg0KICAgIHN3aXRjaCAoY21kKSB7DQogICANCiAgICAgICAgY2FzZSBT SU9DU0lGQUREUjoNCiAgICAgICAgY2FzZSBTSU9DR0lGQUREUjoNCiAgICAg ICAgY2FzZSBTSU9DU0lGTVRVOg0KICAgICAgICAgICAgZXJyb3IgPSBpc284 ODAyNV9pb2N0bChpZnAsIGNtZCwgZGF0YSk7DQogICAgICAgICAgICBicmVh azsNCg0KICAgICAgICBjYXNlIFNJT0NTSUZGTEFHUzoNCiAgICAgICAgICAg IC8qDQogICAgICAgICAgICAgKiBJZiB0aGUgaW50ZXJmYWNlIGlzIG1hcmtl ZCB1cCBhbmQgc3RvcHBlZCwgdGhlbiBzdGFydCBpdC4NCiAgICAgICAgICAg ICAqIElmIGl0IGlzIG1hcmtlZCBkb3duIGFuZCBydW5uaW5nLCB0aGVuIHN0 b3AgaXQuDQogICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIGlmIChpZnAt PmlmX2ZsYWdzICYgSUZGX1VQKSB7DQogICAgICAgICAgICAgICAgICAgIGlm ICgoaWZwLT5pZl9mbGFncyAmIElGRl9SVU5OSU5HKSA9PSAwKQ0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9sdHJfaW5pdChzYyk7DQogICAgICAg ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBpZiAoaWZwLT5p Zl9mbGFncyAmIElGRl9SVU5OSU5HKSB7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgb2x0cl9zdG9wKHNjKTsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZnAtPmlmX2ZsYWdzICY9IH5JRkZfUlVOTklORzsNCiAgICAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAg ICBpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfUFJPTUlTQykgIT0gc2MtPlBy b21pc2NNb2RlKSB7DQogICAgICAgICAgICAgICAgaWYgKGlmcC0+aWZfZmxh Z3MgJiBJRkZfUFJPTUlTQykNCiAgICAgICAgICAgICAgICAgICAgVFJsbGRT ZXRQcm9taXNjdW91c01vZGUoc2MtPlRSbGxkQWRhcHRlciwgT0xUUl9QUk9N SVNDX01PREUpOw0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg ICAgICAgICAgVFJsbGRTZXRQcm9taXNjdW91c01vZGUoc2MtPlRSbGxkQWRh cHRlciwgMCk7DQogICAgICAgICAgICAgICAgc2MtPlByb21pc2NNb2RlID0g KGlmcC0+aWZfZmxhZ3MgJiBJRkZfUFJPTUlTQyk7DQogICAgICAgICAgICB9 DQogICAgICAgICAgICANCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBj YXNlIFNJT0NHSUZNRURJQToNCiAgICAgICAgY2FzZSBTSU9DU0lGTUVESUE6 DQogICAgICAgICAgICBlcnJvciA9IGlmbWVkaWFfaW9jdGwoaWZwLCBpZnIs ICZzYy0+aWZtZWRpYSwgY21kKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAg ICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgZXJyb3IgPSBFSU5WQUw7DQog ICAgfQ0KICAgIHNwbHgocyk7DQogICAgcmV0dXJuKGVycm9yKTsNCn0NCg0K LyoNCiAqIFBNVyBDYWxsYmFjayBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICovDQoN CnN0YXRpYyB2b2lkDQpEcml2ZXJTdXNwZW5kKE1pY3JvU2Vjb25kcykNCiAg ICB1bnNpZ25lZCBzaG9ydCBNaWNyb1NlY29uZHM7DQp7DQogICAgREVMQVko TWljcm9TZWNvbmRzKTsNCn0NCg0KDQpzdGF0aWMgdm9pZA0KRHJpdmVyU3Rh dHVzKERyaXZlckhhbmRsZSwgU3RhdHVzKQ0KICAgIHZvaWQgKkRyaXZlckhh bmRsZTsNCiAgICBUUmxsZFN0YXR1c190ICpTdGF0dXM7DQp7DQogICAgc3Ry dWN0IG9sdHJfc29mdGMgKnNjID0gJm9sdHJfc29mdGNbKGludClEcml2ZXJI YW5kbGVdOw0KICAgIHN0cnVjdCBpZm5ldCAqaWZwID0gJnNjLT5hcnBjb20u YWNfaWY7DQoNCiAgICBzd2l0Y2ggKFN0YXR1cy0+VHlwZSkgew0KICAgICAg ICBjYXNlIFRSTExEX1NUU19PTl9XSVJFOg0KICAgICAgICAgICAgaWYgKHNj LT5od19zdGF0ZSA9PSBIV19PUEVOSU5HKSB7DQogICAgICAgICAgICAgICAg c2MtPmh3X3N0YXRlID0gSFdfT1BFTjsNCiAgICAgICAgICAgICAgICBpZnAt PmlmX2ZsYWdzIHw9IChJRkZfVVAgfCBJRkZfUlVOTklORyk7DQogICAgICAg ICAgICAgICAgLypwcmludGYoIm9sdHIlZDogQWRhcHRlciBpbnNlcnRlZC5c biIsIHNjLT51bml0KTsqLw0KICAgICAgICAgICAgICAgIHVudGltZW91dChv bHRyX3RpbWVvdXQsICh2b2lkICopc2MtPnVuaXQsIHNjLT5vbHRyX2NoKTsN CiAgICAgICAgICAgICAgICB3YWtldXBfb25lKCh2b2lkICopc2MtPnVuaXQp Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAg IGNhc2UgVFJMTERfU1RTX1NFTEZURVNUX1NUQVRVUzoNCiAgICAgICAgICAg IGlmIChTdGF0dXMtPlNwZWNpZmljYXRpb24uU2VsZnRlc3RTdGF0dXMgPT0g VFJMTERfU1RfT0spIHsNCiAgICAgICAgICAgICAgICBwcmludGYoIm9sdHIl ZDogYWRhcHRlciBzdGF0dXMgZ29vZC4gKGNsb3NlIGNvbXBsZXRlZC9zZWxm LXRlc3QpXG4iLCBzYy0+dW5pdCk7DQogICAgICAgICAgICAgICAgaWYgKChz Yy0+aHdfc3RhdGUgPT0gSFdfTE9BRElORykgfHwgKHNjLT5od19zdGF0ZSA9 PSBIV19DTE9TSU5HKSB8fCAoc2MtPmh3X3N0YXRlID09IEhXX0NMT1NJTkcy KSkgew0KICAgICAgICAgICAgICAgICAgICBzYy0+aHdfc3RhdGUgPSBIV19D TE9TRUQ7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg ICAgcHJpbnRmKCJvbHRyJWQ6IFNlbGYgdGVzdCBmYWlsZWQ6ICIsIHNjLT51 bml0KTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKFN0YXR1cy0+U3BlY2lm aWNhdGlvbi5TZWxmdGVzdFN0YXR1cykgew0KICAgICAgICAgICAgICAgICAg ICBjYXNlIFRSTExEX1NUX0VSUk9SICsgMDogcHJpbnRmKCJJbml0aWFsIFRl c3QgRXJyb3JcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2Fz ZSBUUkxMRF9TVF9FUlJPUiArIDE6IHByaW50ZigiQWRhcHRlciBTb2Z0d2Fy ZSBDaGVja3N1bSBFcnJvclxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAg ICAgICBjYXNlIFRSTExEX1NUX0VSUk9SICsgMjogcHJpbnRmKCJBZGFwdGVy IFJBTSBFcnJvclxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBj YXNlIFRSTExEX1NUX0VSUk9SICsgNDogcHJpbnRmKCJJbnN0cnVjdGlvbiBU ZXN0IEVycm9yXG4iKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNh c2UgVFJMTERfU1RfRVJST1IgKyA1OiBwcmludGYoIlByb3RvY29sIEhhbmRs ZXIvUkkgSHcgRXJyb3JcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICAg ICAgY2FzZSBUUkxMRF9TVF9FUlJPUiArIDY6IHByaW50ZigiU3lzdGVtIElu dGVyZmFjZSBSZWdpc3RlciBFcnJvclxuIik7IGJyZWFrOw0KICAgICAgICAg ICAgICAgICAgICBjYXNlIFRSTExEX1NUX1RJTUVPVVQ6ICAgcHJpbnRmKCJT ZWxmdGVzdCBkaWQgbm90IGNvbXBsZXRlXG4iKTsgYnJlYWs7DQogICAgICAg ICAgICAgICAgICAgIGRlZmF1bHQ6IHByaW50ZigiVW5rbm93biBlcnJvciAo JXgpXG4iLCBTdGF0dXMtPlNwZWNpZmljYXRpb24uU2VsZnRlc3RTdGF0dXMp Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAg ICAgIGJyZWFrOw0KICAgICAgICBjYXNlIFRSTExEX1NUU19JTklUX1NUQVRV UzoNCiAgICAgICAgICAgIHByaW50Zigib2x0ciVkOiBBZGFwdGVyIGluaXRp YWxpemF0aW9uIGZhaWxlZDogIiwgc2MtPnVuaXQpOw0KICAgICAgICAgICAg c3dpdGNoKFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5Jbml0U3RhdHVzKSB7DQog ICAgICAgICAgICAgICAgY2FzZSBUUkxMRF9JTklUX0VSUk9SICsgMHgwMTog cHJpbnRmKCJJbnZhbGlkIGluaXQgYmxvY2sgKExMRCBlcnJvcilcbiIpOyBi cmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIFRSTExEX0lOSVRfRVJST1Ig KyAweDAyOiBwcmludGYoIkludmFsaWQgb3B0aW9ucyAoTExEIGVycm9yKVxu Iik7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgVFJMTERfSU5JVF9F UlJPUiArIDB4MDM6IHByaW50ZigiSW52YWxpZCByY3YgYnVyc3QgKExMRCBl cnJvcilcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIFRSTExE X0lOSVRfRVJST1IgKyAweDA0OiBwcmludGYoIkludmFsaWQgeG10IGJ1cnN0 IChMTEQgZXJyb3IpXG4iKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2Fz ZSBUUkxMRF9JTklUX0VSUk9SICsgMHgwNTogcHJpbnRmKCJJbnZhbGlkIERN QSB0aHJlc2hvbGQgKExMRCBlcnJvcilcbiIpOyBicmVhazsNCiAgICAgICAg ICAgICAgICBjYXNlIFRSTExEX0lOSVRfRVJST1IgKyAweDA2OiBwcmludGYo IkludmFsaWQgc2NiIGFkZHJcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAg ICBjYXNlIFRSTExEX0lOSVRfRVJST1IgKyAweDA3OiBwcmludGYoIkludmFs aWQgc3NiIGFkZHJcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNl IFRSTExEX0lOSVRfRVJST1IgKyAweDA4OiBwcmludGYoIkRJTyBwYXJpdHkg ZXJyb3IgKEhXIGVycm9yKVxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAg IGNhc2UgVFJMTERfSU5JVF9FUlJPUiArIDB4MDk6IHByaW50ZigiRE1BIHRp bWVvdXQgKE1heSBiZSBpbnRlcnJ1cHQgZmFpbGluZyBpZiBQSU8gbW9kZSBv ciBQQ0kyKVxuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgVFJM TERfSU5JVF9FUlJPUiArIDB4MEE6IHByaW50ZigiRE1BIHBhcml0eSBlcnJv ciAoSFcgZXJyb3IpXG4iKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2Fz ZSBUUkxMRF9JTklUX0VSUk9SICsgMHgwQjogcHJpbnRmKCJETUEgYnVzIGVy cm9yIChIVyBlcnJvcilcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICBj YXNlIFRSTExEX0lOSVRfRVJST1IgKyAweDBDOiBwcmludGYoIkRNQSBkYXRh IGVycm9yXG4iKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBUUkxM RF9JTklUX0VSUk9SICsgMHgwRDogcHJpbnRmKCJBZGFwdGVyIENoZWNrXG4i KTsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBUUkxMRF9JTklUX1RJ TUVPVVQ6ICAgICAgcHJpbnRmKCJBZGFwdGVyIGluaXRpYWxpemF0aW9uIGRp ZCBub3QgY29tcGxldGVcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICBj YXNlIFRSTExEX0lOSVRfRE1BX0VSUk9SOiAgICBwcmludGYoIkFkYXB0ZXIg Y2Fubm90IGFjY2VzcyBzeXN0ZW0gbWVtb3J5XG4iKTsgYnJlYWs7DQogICAg ICAgICAgICAgICAgY2FzZSBUUkxMRF9JTklUX0lOVFJfRVJST1I6ICAgcHJp bnRmKCJBZGFwdGVyIGNhbm5vdCBpbnRlcnJ1cHRcbiIpOyBicmVhazsNCiAg ICAgICAgICAgICAgICBjYXNlIFRSTExEX09QRU5fVElNRU9VVDogICAgICBw cmludGYoIkFkYXB0ZXIgZGlkIG5vdCBjb21wbGV0ZSBvcGVuIHdpdGhpbiAz MCBzZWNvbmRzXG4iKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBU UkxMRF9PUEVOX0VSUk9SICsgMHgwMTogcHJpbnRmKCJJbnZhbGlkIG9wZW4g b3B0aW9ucyAoTExEIGVycm9yKVxuIik7IGJyZWFrOw0KICAgICAgICAgICAg ICAgIGNhc2UgVFJMTERfT1BFTl9FUlJPUiArIDB4MDQ6IHByaW50ZigiVHhC dWZmZXIgY291bnQgZXJyb3IgKExMRCBlcnJvcilcbiIpOyBicmVhazsNCiAg ICAgICAgICAgICAgICBjYXNlIFRSTExEX09QRU5fRVJST1IgKyAweDEwOiBw cmludGYoIkJ1ZmZlciBzaXplIGVycm9yIChMTEQgZXJyb3IpXG4iKTsgYnJl YWs7DQogICAgICAgICAgICAgICAgY2FzZSBUUkxMRF9PUEVOX0VSUk9SICsg MHgyMDogcHJpbnRmKCJMaXN0IHNpemUgZXJyb3IgKExMRCBlcnJvcilcbiIp OyBicmVhazsNCiAgICAgICAgICAgICAgICBkZWZhdWx0OiANCiAgICAgICAg ICAgICAgICAgICAgaWYgKFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5Jbml0U3Rh dHVzICYgMHg3MDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRj aCAoU3RhdHVzLT5TcGVjaWZpY2F0aW9uLkluaXRTdGF0dXMgJiAweDcwRikg ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFJMTERfT1BF Tl9SRVBFQVQgKyAweDAxOiBwcmludGYoIkxvYmUgbWVkaWEgdGVzdCAtICIp OyBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRS TExEX09QRU5fUkVQRUFUICsgMHgwMjogcHJpbnRmKCJQaHlzaWNhbCBpbnNl cnRpb24gLSAiKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSBUUkxMRF9PUEVOX1JFUEVBVCArIDB4MDM6IHByaW50ZigiQWRk cmVzcyB2ZXJpZmljYXRpb24gLSAiKTsgYnJlYWs7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSBUUkxMRF9PUEVOX1JFUEVBVCArIDB4MDQ6 IHByaW50ZigiUGFydGljaXBhdGlvbiBpbiByaW5nIHBvbGwgLSAiKTsgYnJl YWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUUkxMRF9P UEVOX1JFUEVBVCArIDB4MDU6IHByaW50ZigiUmVxdWVzdCBpbml0aWFsaXph dGlvbiAtICIpOyBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIFRSTExEX09QRU5fUkVQRUFUICsgMHgwOTogcHJpbnRmKCJSZXF1 ZXN0IHJlZ2lzdHJhdGlvbiAoVFhJKSAtICIpOyBicmVhazsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIFRSTExEX09QRU5fUkVQRUFUICsg MHgwQTogcHJpbnRmKCJMb2JlIG1lZGlhIHRlc3QgKFRYSSkgLSAiKTsgYnJl YWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiVW5rbm93biBwaGFzZSAoJXgp IC0gIiwgU3RhdHVzLT5TcGVjaWZpY2F0aW9uLkluaXRTdGF0dXMgJiAweDAw Rik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg ICAgICAgICAgICBzd2l0Y2ggKFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5Jbml0 U3RhdHVzICYgMHg3RjApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIFRSTExEX09QRU5fUkVQRUFUICsgMHgxMDogcHJpbnRmKCJGdW5j dGlvbiBmYWlsdXJlIChObyBjYWJsZT8pXG4iKTsgYnJlYWs7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSBUUkxMRF9PUEVOX1JFUEVBVCAr IDB4MjA6IHByaW50ZigiU2lnbmFsIGxvc3NcbiIpOyBicmVhazsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRSTExEX09QRU5fUkVQRUFU ICsgMHg1MDogcHJpbnRmKCJUaW1lb3V0XG4iKTsgYnJlYWs7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSBUUkxMRF9PUEVOX1JFUEVBVCAr IDB4NjA6IHByaW50ZigiUmluZyBmYWlsdXJlIChUS1ApIC8gUHJvdG9jb2wg ZXJyb3IgKFRYSSlcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIFRSTExEX09QRU5fUkVQRUFUICsgMHg3MDogcHJpbnRm KCJSaW5nIGJlYWNvbmluZ1xuIik7IGJyZWFrOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgVFJMTERfT1BFTl9SRVBFQVQgKyAweDgwOiBw cmludGYoIkR1cGxpY2F0ZSBub2RlIGFkZHJlc3MgKFRLUCkgLyBJbnNlcnQg ZGVuaWVkIChUWEkpXG4iKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBUUkxMRF9PUEVOX1JFUEVBVCArIDB4OTA6IHByaW50 ZigiUmVxdWVzdCBpbml0aWFsaXphdGlvbiAoVEtQKVxuIik7IGJyZWFrOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFJMTERfT1BFTl9S RVBFQVQgKyAweGEwOiBwcmludGYoIlJlbW92ZSByZWNlaXZlZFxuIik7IGJy ZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFJMTERf T1BFTl9SRVBFQVQgKyAweGIwOiBwcmludGYoIkMtcG9ydCBhZGRyZXNzIGNo YW5nZWQgKFRYSSlcbiIpOyBicmVhazsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJVbmtub3duIHR5cGUgKCV4KVxuIiwgU3RhdHVzLT5TcGVjaWZpY2F0aW9u LkluaXRTdGF0dXMgJiAweDBGMCk7DQogICAgICAgICAgICAgICAgICAgICAg ICB9DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoIlVua25vd24gZXJyb3IgKCV4KVxuIiwg U3RhdHVzLT5TcGVjaWZpY2F0aW9uLkluaXRTdGF0dXMpOyANCiAgICAgICAg ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYnJl YWs7DQogICAgICAgIGNhc2UgVFJMTERfU1RTX1JJTkdfU1RBVFVTOg0KICAg ICAgICAgICAgaWYgKFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5SaW5nU3RhdHVz ICE9IDApIHsNCiAgICAgICAgICAgICAgICBwcmludGYoIm9sdHIlZDogUmlu ZyBzdGF0dXMgY2hhbmdlOiAiLCBzYy0+dW5pdCk7DQogICAgICAgICAgICAg ICAgaWYgKFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5SaW5nU3RhdHVzICYgVFJM TERfUlNfSEFSRF9FUlJPUikgICAgICAgICBwcmludGYoIltIYXJkIGVycm9y XSAiKTsNCiAgICAgICAgICAgICAgICBpZiAoU3RhdHVzLT5TcGVjaWZpY2F0 aW9uLlJpbmdTdGF0dXMgJiBUUkxMRF9SU19TT0ZUX0VSUk9SKSAgICAgICAg IHByaW50ZigiW1NvZnQgZXJyb3JdICIpOw0KICAgICAgICAgICAgICAgIGlm IChTdGF0dXMtPlNwZWNpZmljYXRpb24uUmluZ1N0YXR1cyAmIFRSTExEX1JT X1RSQU5TTUlUX0JFQUNPTikgICAgcHJpbnRmKCJbVHJhbnNtaXQgYmVhY29u XSAiKTsNCiAgICAgICAgICAgICAgICBpZiAoU3RhdHVzLT5TcGVjaWZpY2F0 aW9uLlJpbmdTdGF0dXMgJiBUUkxMRF9SU19MT0JFX1dJUkVfRkFVTFQpICAg IHByaW50ZigiW1dpcmUgZmF1bHRdICIpOw0KICAgICAgICAgICAgICAgIGlm IChTdGF0dXMtPlNwZWNpZmljYXRpb24uUmluZ1N0YXR1cyAmIFRSTExEX1JT X0FVVE9fUkVNT1ZBTF9FUlJPUikgcHJpbnRmKCJbQXV0byByZW1vdmFsXSAi KTsNCiAgICAgICAgICAgICAgICBpZiAoU3RhdHVzLT5TcGVjaWZpY2F0aW9u LlJpbmdTdGF0dXMgJiBUUkxMRF9SU19SRU1PVkVfUkVDRUlWRUQpICAgIHBy aW50ZigiW1JlbW92ZSByZWNlaXZlZF0gIik7DQogICAgICAgICAgICAgICAg aWYgKFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5SaW5nU3RhdHVzICYgVFJMTERf UlNfQ09VTlRFUl9PVkVSRkxPVykgICBwcmludGYoIltDb3VudGVyIG92ZXJm bG93XSAiKTsNCiAgICAgICAgICAgICAgICBpZiAoU3RhdHVzLT5TcGVjaWZp Y2F0aW9uLlJpbmdTdGF0dXMgJiBUUkxMRF9SU19TSU5HTEVfU1RBVElPTikg ICAgIHByaW50ZigiW1NpbmdsZSBzdGF0aW9uXSAiKTsNCiAgICAgICAgICAg ICAgICBpZiAoU3RhdHVzLT5TcGVjaWZpY2F0aW9uLlJpbmdTdGF0dXMgJiBU UkxMRF9SU19SSU5HX1JFQ09WRVJZKSAgICAgIHByaW50ZigiW1JpbmcgcmVj b3ZlcnldICIpOw0KICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNl IFRSTExEX1NUU19BREFQVEVSX0NIRUNLOg0KICAgICAgICAgICAgcHJpbnRm KCJvbHRyJWQ6IEFkYXB0ZXIgY2hlY2sgKCV4ICV4ICV4ICV4KVxuIiwgc2Mt PnVuaXQsIFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5BZGFwdGVyQ2hlY2tbMF0s IA0KICAgICAgICAgICAgICAgICAgICBTdGF0dXMtPlNwZWNpZmljYXRpb24u QWRhcHRlckNoZWNrWzFdLCBTdGF0dXMtPlNwZWNpZmljYXRpb24uQWRhcHRl ckNoZWNrWzJdLCANCiAgICAgICAgICAgICAgICAgICAgU3RhdHVzLT5TcGVj aWZpY2F0aW9uLkFkYXB0ZXJDaGVja1szXSk7IA0KICAgICAgICAgICAgYnJl YWs7DQogICAgICAgIGNhc2UgVFJMTERfU1RTX1BST01JU0NVT1VTX1NUT1BQ RUQ6DQogICAgICAgICAgICBwcmludGYoIm9sdHIlZDogUHJvbWlzY3VvdXMg bW9kZSBzdG9wcGVkOiAiLCBzYy0+dW5pdCk7DQogICAgICAgICAgICBzd2l0 Y2goU3RhdHVzLT5TcGVjaWZpY2F0aW9uLlByb21SZW1vdmVkQ2F1c2UpIHsN CiAgICAgICAgICAgICAgICBjYXNlIFRSTExEX1BST01fUkVNT1ZFX1JFQ0VJ VkVEOiBwcmludGYoIlJlbW92ZSByZWNlaXZlZFxuIik7IGJyZWFrOw0KICAg ICAgICAgICAgICAgIGNhc2UgVFJMTERfUFJPTV9QT0xMX0ZBSUxVUkU6ICAg IHByaW50ZigiUG9sbCBmYWlsdXJlXG4iKTsgYnJlYWs7DQogICAgICAgICAg ICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJVbmtub3duICgleClcbiIsIFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5Qcm9t UmVtb3ZlZENhdXNlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJy ZWFrOw0KICAgICAgICBjYXNlIFRSTExEX1NUU19MTERfRVJST1I6DQogICAg ICAgICAgICBwcmludGYoIm9sdHIlZDogTExEIGVycm9yICgleCAleCAleCAl eCkgIiwgc2MtPnVuaXQsIFN0YXR1cy0+U3BlY2lmaWNhdGlvbi5JbnRlcm5h bEVycm9yWzBdLCANCiAgICAgICAgICAgICAgICAgICAgU3RhdHVzLT5TcGVj aWZpY2F0aW9uLkludGVybmFsRXJyb3JbMV0sIFN0YXR1cy0+U3BlY2lmaWNh dGlvbi5JbnRlcm5hbEVycm9yWzJdLCANCiAgICAgICAgICAgICAgICAgICAg U3RhdHVzLT5TcGVjaWZpY2F0aW9uLkludGVybmFsRXJyb3JbM10pOw0KICAg ICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgVFJMTERfU1RTX0FEQVBU RVJfVElNRU9VVDoNCiAgICAgICAgICAgIHByaW50Zigib2x0ciVkOiBBZGFw dGVyIG9wZXJhdGlvbiB0aW1lZCBvdXQ6ICIsIHNjLT51bml0KTsNCiAgICAg ICAgICAgIHN3aXRjaChTdGF0dXMtPlNwZWNpZmljYXRpb24uQWRhcHRlclRp bWVvdXQpIHsNCiAgICAgICAgICAgICAgICBjYXNlIFRSTExEX0NPTU1BTkRf VElNRU9VVDogICBwcmludGYoIkNvbW1hbmRcbiIpOw0KICAgICAgICAgICAg ICAgIGNhc2UgVFJMTERfVFJBTlNNSVRfVElNRU9VVDogIHByaW50ZigiVHJh bnNtaXRcbiIpOw0KICAgICAgICAgICAgICAgIGNhc2UgVFJMTERfSU5URVJS VVBUX1RJTUVPVVQ6IHByaW50ZigiSW50ZXJydXB0XG4iKTsNCiAgICAgICAg ICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICBwcmludGYo IlVua25vd24gKCV4KVxuIiwgU3RhdHVzLT5TcGVjaWZpY2F0aW9uLkFkYXB0 ZXJUaW1lb3V0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFr Ow0KICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgcHJpbnRmKCJvbHRy JWQ6IFVua25vd24gc3RhdHVzIHR5cGUgKCV4KVxuIiwgc2MtPnVuaXQsIFN0 YXR1cy0+VHlwZSk7DQoNCiAgICB9DQogICAgaWYgKFN0YXR1cy0+Q2xvc2Vk KSB7DQogICAgICAgIGlmIChzYy0+aHdfc3RhdGUgPiBIV19CQUQpIHsNCiAg ICAgICAgICAgIHNjLT5od19zdGF0ZSA9IEhXX0ZBSUxFRDsNCiAgICAgICAg ICAgIHByaW50Zigib2x0ciVkOiBjbG9zaW5nIGFkYXB0ZXIgZHVlIHRvIGZh aWx1cmUuXG4iLCBzYy0+dW5pdCk7DQogICAgICAgICAgICBvbHRyX3N0b3Ao c2MpOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpzdGF0aWMgdm9pZA0KRHJp dmVyQ2xvc2VDb21wbGV0ZWQoRHJpdmVySGFuZGxlKQ0KICAgIHZvaWQgKkRy aXZlckhhbmRsZTsNCnsNCiAgICBzdHJ1Y3Qgb2x0cl9zb2Z0YyAqc2MgPSAm b2x0cl9zb2Z0Y1soaW50KURyaXZlckhhbmRsZV07DQoNCiAgICBwcmludGYo Im9sdHIlZDogRHJpdmVyQ2xvc2VDb21wbGV0ZWRcbiIsIHNjLT51bml0KTsN Cg0KICAgIHVudGltZW91dChvbHRyX3RpbWVvdXQsICh2b2lkICopc2MtPnVu aXQsIHNjLT5vbHRyX2NoKTsNCiAgICB3YWtldXBfb25lKCh2b2lkICopc2Mt PnVuaXQpOw0KDQogICAgaWYgKChzYy0+aHdfc3RhdGUgIT0gSFdfQ0xPU0lO RykgJiYgKHNjLT5od19zdGF0ZSAhPSBIV19DTE9TSU5HMikgJiYgKHNjLT5o d19zdGF0ZSAhPSBIV19DTE9TRUQpKSB7DQogICAgICAgIHByaW50Zigib2x0 ciVkOiBhZGFwdGVyIGNsb3NlIGNvbXBsZXRlIGNhbGxlZCBpbiB3cm9uZyBz dGF0ZSAoJWQpXG4iLCBzYy0+dW5pdCwgc2MtPmh3X3N0YXRlKTsNCiAgICAg ICAgcmV0dXJuOw0KICAgIH0NCiAgICBzYy0+aHdfc3RhdGUgPSBIV19DTE9T SU5HMjsNCiAgICBpZiAoc2MtPmNvbmZpZy0+ZG1hbGV2ZWwgIT0gVFJMTERf RE1BX1BJTykNCiAgICAgICAgaXNhX2RtYV9yZWxlYXNlKHNjLT5jb25maWct PmRtYWxldmVsKTsNCiAgICANCn0NCg0Kc3RhdGljIHZvaWQNCkRyaXZlclN0 YXRpc3RpY3MoRHJpdmVySGFuZGxlLCBTdGF0aXN0aWNzKQ0KICAgIHZvaWQg KkRyaXZlckhhbmRsZTsNCiAgICBUUmxsZFN0YXRpc3RpY3NfdCAqU3RhdGlz dGljczsNCnsNCiAgICBwcmludGYoIm9sdHI6IERyaXZlclN0YXRpc3RpY3Nc biIpOw0KfQ0KDQpzdGF0aWMgdm9pZA0KRHJpdmVyVHJhbnNtaXRGcmFtZUNv bXBsZXRlZChEcml2ZXJIYW5kbGUsIEZyYW1lSGFuZGxlLCBUcmFuc21pdFN0 YXR1cykNCiAgICB2b2lkICpEcml2ZXJIYW5kbGU7DQogICAgdm9pZCAqRnJh bWVIYW5kbGU7DQogICAgaW50IFRyYW5zbWl0U3RhdHVzOw0Kew0KICAgIGlu dCBmcmFtZSA9IChpbnQpRnJhbWVIYW5kbGU7DQogICAgc3RydWN0IG9sdHJf c29mdGMgKnNjID0gJm9sdHJfc29mdGNbKGludClEcml2ZXJIYW5kbGVdOw0K ICAgIHN0cnVjdCBpZm5ldCAqaWZwID0gJnNjLT5hcnBjb20uYWNfaWY7DQoN CiAgICBpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9PQUNUSVZFKQ0KICAgICAg ICBpZnAtPmlmX2ZsYWdzICY9IH4oSUZGX09BQ1RJVkUpOw0KDQogICAgLypw cmludGYoIm9sdHIlZDogdHJhbnNtaXQgY29tcGxldGUgZnJhbWUgJWRcbiIs IHNjLT51bml0LCBmcmFtZSk7Ki8NCiAgICBpZiAoVHJhbnNtaXRTdGF0dXMg PT0gVFJMTERfVFJBTlNNSVRfT0spIHsNCiAgICAgICAgaWZwLT5pZl9vcGFj a2V0cysrOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHByaW50Zigib2x0ciVk OiBEcml2ZXJUcmFuc21pdEZyYW1lQ29tcGxldGVkIChGcmFtZSAlZCBzdGF0 dXMgJXgpXG4iLCBzYy0+dW5pdCwgZnJhbWUsIFRyYW5zbWl0U3RhdHVzKTsN CiAgICAgICAgaWZwLT5pZl9vZXJyb3JzKys7DQogICAgfQ0KICAgIGlmICgo ZnJhbWUgPCAwKSB8fCAoZnJhbWUgPiBUWF9MSVNUX1NJWkUpKSB7DQogICAg ICAgIHByaW50Zigib2x0ciVkOiBib2d1cyB0cmFuc21pdCBidWZmZXIuICgl ZClcbiIsIHNjLT51bml0LCBmcmFtZSk7DQogICAgICAgIHJldHVybjsNCiAg ICB9DQoNCiAgICBzYy0+dHhfYXZhaWwrKzsNCg0KfQ0KDQpzdGF0aWMgdm9p ZA0KRHJpdmVyUmVjZWl2ZUZyYW1lQ29tcGxldGVkKERyaXZlckhhbmRsZSwg Qnl0ZUNvdW50LCBGcmFnbWVudENvdW50LCBGcmFnbWVudEhhbmRsZSwgUmVj ZWl2ZVN0YXR1cykNCiAgICB2b2lkICpEcml2ZXJIYW5kbGU7DQogICAgaW50 IEJ5dGVDb3VudDsNCiAgICBpbnQgRnJhZ21lbnRDb3VudDsNCiAgICB2b2lk ICpGcmFnbWVudEhhbmRsZTsNCiAgICBpbnQgUmVjZWl2ZVN0YXR1czsNCnsN CiAgICBzdHJ1Y3Qgb2x0cl9zb2Z0YyAqc2MgPSAmb2x0cl9zb2Z0Y1soaW50 KURyaXZlckhhbmRsZV07DQogICAgc3RydWN0IGlmbmV0ICppZnAgPSAmc2Mt PmFycGNvbS5hY19pZjsNCiAgICBzdHJ1Y3QgaXNvODgwMjVfaGVhZGVyICp0 aDsNCiAgICBzdHJ1Y3QgbWJ1ZiAqbTAsICptMSwgKm07DQogICAgaW50IGog PSAoaW50KUZyYWdtZW50SGFuZGxlLCByYywgZnJhbWVfbGVuID0gQnl0ZUNv dW50LCBtYWNfaGRyX2xlbjsNCiAgICBpbnQgbWJ1Zl9vZmZzZXQsIG1idWZf c2l6ZSwgZnJhZ19vZmZzZXQsIGxlbmd0aDsNCiAgICBjaGFyICpmcmFnID0g c2MtPnJ4X2J1ZmZlcltqXS5idWY7DQoNCiAgICAvKnByaW50Zigib2x0ciVk OiBSZWNlaXZlRnJhbWVDb21wbGV0ZWQgKFNpemUgJWQgQ291bnQgJWQgU3Rh cnQgJWQpXG4iLCBzYy0+dW5pdCwgQnl0ZUNvdW50LCBGcmFnbWVudENvdW50 LCBqKTsqLw0KDQogICAgaWYgKHNjLT5od19zdGF0ZSA+PSAgSFdfT1BFTikg eyAgICAgICAgICAgICAvKiBIYXJkd2FyZSBvcGVyYXRpbmcgbm9ybWFsbHkg Ki8NCiAgICAgICAgaWYgKGZyYWcgIT0gc2MtPnJ4X2J1ZmZlcltzYy0+cnhf bmV4dCAmIFJYX0xJU1RfTUFTS10uYnVmKSB7DQogICAgICAgICAgICBwcmlu dGYoIm9sdHIlZDogcmluZyBidWZmZXIgcG9pbnRlciBibG93blxuIiwgc2Mt PnVuaXQpOw0KICAgICAgICAgICAgb2x0cl9zdG9wKHNjKTsNCiAgICAgICAg ICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoUmVjZWl2ZVN0 YXR1cyA9PSBUUkxMRF9SQ1ZfT0spIHsgICAgLyogUmVjZWl2ZSBnb29kIGZy YW1lICovDQogICAgICAgICAgICBNR0VUSERSKG0wLCBNX0RPTlRXQUlULCBN VF9EQVRBKTsNCiAgICAgICAgICAgIG1idWZfc2l6ZSA9IE1ITEVOOw0KICAg ICAgICAgICAgaWYgKG0wID09IE5VTEwpIHsNCiAgICAgICAgICAgICAgICBp ZnAtPmlmX2llcnJvcnMrKzsNCiAgICAgICAgICAgICAgICBnb3RvIG91dDsN CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChCeXRlQ291bnQgKyAy ID4gTUhMRU4pIHsNCiAgICAgICAgICAgICAgICBNQ0xHRVQobTAsIE1fRE9O VFdBSVQpOw0KICAgICAgICAgICAgICAgIG1idWZfc2l6ZSA9IE1DTEJZVEVT Ow0KICAgICAgICAgICAgICAgIGlmICgobTAtPm1fZmxhZ3MgJiBNX0VYVCkg PT0gMCkgew0KICAgICAgICAgICAgICAgICAgICBtX2ZyZWVtKG0wKTsNCiAg ICAgICAgICAgICAgICAgICAgaWZwLT5pZl9pZXJyb3JzKys7DQogICAgICAg ICAgICAgICAgICAgIGdvdG8gb3V0Ow0KICAgICAgICAgICAgICAgIH0NCiAg ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgbTAtPm1fcGt0aGRyLnJjdmlm ID0gJnNjLT5hcnBjb20uYWNfaWY7DQogICAgICAgICAgICBtMC0+bV9wa3Ro ZHIubGVuID0gQnl0ZUNvdW50Ow0KICAgICAgICAgICAgbTAtPm1fbGVuID0g MDsNCiAgICAgICAgICAgIG0wLT5tX2RhdGEgKz0gMjsNCiAgICAgICAgICAg IHRoID0gbXRvZChtMCwgc3RydWN0IGlzbzg4MDI1X2hlYWRlciAqKTsNCg0K ICAgICAgICAgICAgbSA9IG0wOyBtYnVmX29mZnNldCA9IDA7IGZyYWdfb2Zm c2V0ID0gMDsNCiAgICAgICAgICAgIHdoaWxlIChmcmFtZV9sZW4gPiAwKSB7 DQogICAgICAgICAgICAgICAgbGVuZ3RoID0gKFJYX0JVRkZFUl9MRU4gLSBm cmFnX29mZnNldCkgPiAobWJ1Zl9zaXplIC0gbWJ1Zl9vZmZzZXQpID8gKG1i dWZfc2l6ZSAtIG1idWZfb2Zmc2V0KSA6DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKFJYX0JVRkZFUl9MRU4gLSBmcmFnX29m ZnNldCk7DQogICAgICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoID4gZnJh bWVfbGVuID8gZnJhbWVfbGVuIDogbGVuZ3RoOw0KICAgICAgICAgICAgICAg IGJjb3B5KGZyYWcgKyBmcmFnX29mZnNldCwgbXRvZChtLCBjaGFyICopICsg bWJ1Zl9vZmZzZXQsIGxlbmd0aCk7DQogICAgICAgICAgICAgICAgbS0+bV9s ZW4gKz0gbGVuZ3RoOw0KICAgICAgICAgICAgICAgIG1idWZfb2Zmc2V0ICs9 IGxlbmd0aDsNCiAgICAgICAgICAgICAgICBmcmFnX29mZnNldCArPSBsZW5n dGg7DQogICAgICAgICAgICAgICAgZnJhbWVfbGVuIC09IGxlbmd0aDsNCiAg ICAgICAgICAgICAgICBpZiAoZnJhZ19vZmZzZXQgPT0gUlhfQlVGRkVSX0xF Tikgew0KICAgICAgICAgICAgICAgICAgICBmcmFnID0gc2MtPnJ4X2J1ZmZl clsrK2pdLmJ1ZjsNCiAgICAgICAgICAgICAgICAgICAgZnJhZ19vZmZzZXQg PSAwOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAo KG1idWZfb2Zmc2V0ID09IG1idWZfc2l6ZSkgJiYgKGZyYW1lX2xlbiA+IDAp KSB7DQogICAgICAgICAgICAgICAgICAgIE1HRVQobTEsIE1fRE9OVFdBSVQs IE1UX0RBVEEpOw0KICAgICAgICAgICAgICAgICAgICBtYnVmX3NpemUgPSBN SExFTjsNCiAgICAgICAgICAgICAgICAgICAgaWYgKG0xID09IE5VTEwpIHsN CiAgICAgICAgICAgICAgICAgICAgICAgIGlmcC0+aWZfaWVycm9ycysrOw0K ICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmVlbShtMCk7DQogICAgICAg ICAgICAgICAgICAgICAgICBnb3RvIG91dDsNCiAgICAgICAgICAgICAgICAg ICAgfSAgDQogICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZV9sZW4gPiBN SExFTikgew0KICAgICAgICAgICAgICAgICAgICAgICAgTUNMR0VUKG0xLCBN X0RPTlRXQUlUKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIG1idWZfc2l6 ZSA9IE1DTEJZVEVTOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCht MS0+bV9mbGFncyAmIE1fRVhUKSA9PSAwKSB7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgbV9mcmVlbShtMCk7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgbV9mcmVlbShtMSk7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWZwLT5pZl9pZXJyb3JzKys7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ290byBvdXQ7DQogICAgICAgICAgICAgICAgICAgICAgICB9 DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg bS0+bV9uZXh0ID0gbTE7DQogICAgICAgICAgICAgICAgICAgIG0gPSBtMTsN CiAgICAgICAgICAgICAgICAgICAgbWJ1Zl9vZmZzZXQgPSAwOw0KICAgICAg ICAgICAgICAgICAgICBtLT5tX2xlbiA9IDA7DQogICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWZwLT5pZl9pcGFja2V0 cysrOw0KICAgICAgICANCiNpZiBOQlBGSUxURVIgPiAwDQogICAgICAgICAg ICBpZiAoaWZwLT5pZl9icGYpDQogICAgICAgICAgICAgICAgYnBmX210YXAo aWZwLCBtMCk7DQojZW5kaWYNCg0KICAgICAgICAgICAgaWYgKGlmcC0+aWZf ZmxhZ3MgJiBJRkZfUFJPTUlTQykNCiAgICAgICAgICAgICAgICBpZiAoYmNt cCh0aC0+aXNvODgwMjVfZGhvc3QsIGV0aGVyYnJvYWRjYXN0YWRkciwgc2l6 ZW9mKHRoLT5pc284ODAyNV9kaG9zdCkpICE9IDApIHsNCiAgICAgICAgICAg ICAgICAgICAgaWYgKCgodGgtPmlzbzg4MDI1X2Rob3N0WzBdICYgMHg3Zikg IT0gc2MtPmFycGNvbS5hY19lbmFkZHJbMF0pIHx8DQogICAgICAgICAgICAg ICAgICAgICAgICAoYmNtcCh0aC0+aXNvODgwMjVfZGhvc3QgKyAxLCBzYy0+ YXJwY29tLmFjX2VuYWRkciArIDEsIElTTzg4MDI1X0FERFJfTEVOIC0gMSkp KSB7DQoJICAgICAgICAgICAgICAgIG1fZnJlZW0obTApOw0KICAgICAgICAg ICAgICAgICAgICAgICAgZ290byBvdXQ7DQogICAgICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgbWFjX2hkcl9sZW4g PSBJU084ODAyNV9IRFJfTEVOOw0KICAgICAgICAgICAgaWYgKHRoLT5pc284 ODAyNV9zaG9zdFswXSAmIDB4ODApIC8qIENoZWNrIGZvciBzb3VyY2Ugcm91 dGluZyBpbmZvICovDQogICAgICAgICAgICAgICAgbWFjX2hkcl9sZW4gKz0g IChudG9ocyh0aC0+cmNmKSAmIDB4MWYwMCkgPj4gODsNCiAgICAgICAgICAg IA0KICAgICAgICAgICAgbTAtPm1fcGt0aGRyLmxlbiAtPSBtYWNfaGRyX2xl bjsNCiAgICAgICAgICAgIG0wLT5tX2xlbiAtPSBtYWNfaGRyX2xlbjsNCiAg ICAgICAgICAgIG0wLT5tX2RhdGEgKz0gbWFjX2hkcl9sZW47DQoNCiAgICAg ICAgICAgIGlzbzg4MDI1X2lucHV0KCZzYy0+YXJwY29tLmFjX2lmLCB0aCwg bTApOw0KDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBpZiAoUmVj ZWl2ZVN0YXR1cyAhPSBUUkxMRF9SQ1ZfTk9fREFUQSkgew0KICAgICAgICAg ICAgICAgIHByaW50Zigib2x0ciVkOiByZWNlaXZlIGVycm9yLiAoUmVjZWl2 ZVN0YXR1cz0lZClcbiIsIHNjLT51bml0LCBSZWNlaXZlU3RhdHVzKTsNCiAg ICAgICAgICAgICAgICBpZnAtPmlmX2llcnJvcnMrKzsNCiAgICAgICAgICAg IH0NCiAgICAgICAgfQ0Kb3V0Og0KICAgICAgICB3aGlsZSAoRnJhZ21lbnRD b3VudCA+IDApIHsNCiAgICAgICAgICAgIHJjID0gVFJsbGRSZWNlaXZlRnJh Z21lbnQoc2MtPlRSbGxkQWRhcHRlciwgDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHZvaWQgKilzYy0+cnhfYnVmZmVyW3NjLT5y eF9uZXh0ICYgUlhfTElTVF9NQVNLXS5idWYsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAga3Z0b3Aoc2MtPnJ4X2J1ZmZlcltzYy0+ cnhfbmV4dCAmIFJYX0xJU1RfTUFTS10uYnVmKSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSWF9CVUZGRVJfTEVOLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopc2MtPnJ4 X2J1ZmZlcltzYy0+cnhfbmV4dCAmIFJYX0xJU1RfTUFTS10uaW5kZXgpOw0K ICAgICAgICAgICAgaWYgKHJjID09IFRSTExEX1JFQ0VJVkVfT0spIHsNCiAg ICAgICAgICAgICAgICBzYy0+cnhfbmV4dCsrOw0KICAgICAgICAgICAgICAg IEZyYWdtZW50Q291bnQtLTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAg ICAgICAgICAgICAgcHJpbnRmKCJvbHRyJWQ6IEFkYXB0ZXIgcmVmdXNlZCBm cmFnbWVudCAoJWQpLlxuIiwgc2MtPnVuaXQsIHNjLT5yeF9uZXh0IC0gMSk7 DQogICAgICAgICAgICAgICAgc2MtPnJ4X2F2YWlsICs9IEZyYWdtZW50Q291 bnQ7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQog ICAgICAgIH0NCiAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEhhcmR3YXJlIGJlaW5nIGNsb3NlZCAqLw0KICAg ICAgICBpZiAoZnJhZyAhPSBzYy0+cnhfYnVmZmVyW3NjLT5yeF9uZXh0Kysg JiBSWF9MSVNUX01BU0tdLmJ1Zikgew0KICAgICAgICAgICAgcHJpbnRmKCJv bHRyJWQ6IHJpbmcgYnVmZmVyIHBvaW50ZXIgYmxvd25cbiIsIHNjLT51bml0 KTsgIA0KICAgICAgICB9ICAgICAgICAgICANCiAgICAgICAgc2MtPnJ4X2F2 YWlsICs9IEZyYWdtZW50Q291bnQ7DQogICAgfQ0KICAgIA0KfQ0KDQoNCi8q DQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBNVyBHbHVlIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqLw0KDQojaWZuZGVm IFRSbGxkSW5saW5lSU8NCg0Kc3RhdGljIHZvaWQgDQpEcml2ZXJPdXRCeXRl KElPQWRkcmVzcywgdmFsdWUpDQogICAgdW5zaWduZWQgc2hvcnQgSU9BZGRy ZXNzOw0KICAgIHVuc2lnbmVkIGNoYXIgdmFsdWU7DQp7DQogICAgb3V0YihJ T0FkZHJlc3MsIHZhbHVlKTsNCn0NCg0Kc3RhdGljIHZvaWQNCkRyaXZlck91 dFdvcmQoSU9BZGRyZXNzLCB2YWx1ZSkNCiAgICB1bnNpZ25lZCBzaG9ydCBJ T0FkZHJlc3M7DQogICAgdW5zaWduZWQgc2hvcnQgdmFsdWU7DQp7DQogICAg b3V0dyhJT0FkZHJlc3MsIHZhbHVlKTsNCn0NCg0Kc3RhdGljIHZvaWQNCkRy aXZlck91dER3b3JkKElPQWRkcmVzcywgdmFsdWUpDQogICAgdW5zaWduZWQg c2hvcnQgSU9BZGRyZXNzOw0KICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7DQp7 DQogICAgb3V0bChJT0FkZHJlc3MsIHZhbHVlKTsNCn0NCg0Kc3RhdGljIHZv aWQNCkRyaXZlclJlcE91dEJ5dGUoSU9BZGRyZXNzLCBEYXRhUG9pbnRlciwg Qnl0ZUNvdW50KQ0KICAgIHVuc2lnbmVkIHNob3J0IElPQWRkcmVzczsNCiAg ICB1bnNpZ25lZCBjaGFyICAqRGF0YVBvaW50ZXI7DQogICAgaW50IEJ5dGVD b3VudDsNCnsNCiAgICBvdXRzYihJT0FkZHJlc3MsICh2b2lkICopRGF0YVBv aW50ZXIsIEJ5dGVDb3VudCk7DQp9DQoNCnN0YXRpYyB2b2lkDQpEcml2ZXJS ZXBPdXRXb3JkKElPQWRkcmVzcywgRGF0YVBvaW50ZXIsIFdvcmRDb3VudCkN CiAgICB1bnNpZ25lZCBzaG9ydCBJT0FkZHJlc3M7DQogICAgdW5zaWduZWQg c2hvcnQgKkRhdGFQb2ludGVyOw0KICAgIGludCBXb3JkQ291bnQ7DQp7DQog ICAgb3V0c3coSU9BZGRyZXNzLCAodm9pZCAqKURhdGFQb2ludGVyLCBXb3Jk Q291bnQpOw0KfQ0KDQpzdGF0aWMgdm9pZA0KRHJpdmVyUmVwT3V0RHdvcmQo SU9BZGRyZXNzLCBEYXRhUG9pbnRlciwgRFdvcmRDb3VudCkNCiAgICB1bnNp Z25lZCBzaG9ydCBJT0FkZHJlc3M7DQogICAgdW5zaWduZWQgbG9uZyAgKkRh dGFQb2ludGVyOw0KICAgIGludCBEV29yZENvdW50Ow0Kew0KICAgIG91dHNs KElPQWRkcmVzcywgKHZvaWQgKilEYXRhUG9pbnRlciwgRFdvcmRDb3VudCk7 DQp9DQoNCnN0YXRpYyB1bnNpZ25lZCBjaGFyDQpEcml2ZXJJbkJ5dGUoSU9B ZGRyZXNzKQ0KICAgIHVuc2lnbmVkIHNob3J0IElPQWRkcmVzczsNCnsNCiAg ICByZXR1cm4oaW5iKElPQWRkcmVzcykpOw0KfQ0KDQpzdGF0aWMgdW5zaWdu ZWQgc2hvcnQNCkRyaXZlckluV29yZChJT0FkZHJlc3MpDQogICAgdW5zaWdu ZWQgc2hvcnQgSU9BZGRyZXNzOw0Kew0KICAgcmV0dXJuKGludyhJT0FkZHJl c3MpKTsNCn0NCg0Kc3RhdGljIHVuc2lnbmVkIGxvbmcNCkRyaXZlckluRHdv cmQoSU9BZGRyZXNzKQ0KICAgIHVuc2lnbmVkIHNob3J0IElPQWRkcmVzczsN CnsNCiAgICByZXR1cm4oaW5sKElPQWRkcmVzcykpOw0KfQ0KDQpzdGF0aWMg dm9pZA0KRHJpdmVyUmVwSW5CeXRlKElPQWRkcmVzcywgRGF0YVBvaW50ZXIs IEJ5dGVDb3VudCkNCiAgICB1bnNpZ25lZCBzaG9ydCBJT0FkZHJlc3M7DQog ICAgdW5zaWduZWQgY2hhciAgKkRhdGFQb2ludGVyOw0KICAgIGludCBCeXRl Q291bnQ7DQp7DQogICAgaW5zYihJT0FkZHJlc3MsICh2b2lkICopRGF0YVBv aW50ZXIsIEJ5dGVDb3VudCk7DQp9DQoNCnN0YXRpYyB2b2lkDQpEcml2ZXJS ZXBJbldvcmQoSU9BZGRyZXNzLCBEYXRhUG9pbnRlciwgV29yZENvdW50KQ0K ICAgIHVuc2lnbmVkIHNob3J0IElPQWRkcmVzczsNCiAgICB1bnNpZ25lZCBz aG9ydCAqRGF0YVBvaW50ZXI7DQogICAgaW50IFdvcmRDb3VudDsNCnsNCiAg ICBpbnN3KElPQWRkcmVzcywgKHZvaWQgKilEYXRhUG9pbnRlciwgV29yZENv dW50KTsNCn0NCnN0YXRpYyB2b2lkDQpEcml2ZXJSZXBJbkR3b3JkKElPQWRk cmVzcywgRGF0YVBvaW50ZXIsIERXb3JkQ291bnQpDQogICAgdW5zaWduZWQg c2hvcnQgSU9BZGRyZXNzOw0KICAgIHVuc2lnbmVkIGxvbmcgICpEYXRhUG9p bnRlcjsNCiAgICBpbnQgRFdvcmRDb3VudDsNCnsNCiAgICBpbnNsKElPQWRk cmVzcywgKHZvaWQgKilEYXRhUG9pbnRlciwgRFdvcmRDb3VudCk7DQp9DQoj ZW5kaWYgLyogVFJsbGRJbmxpbmVJTyAqLw0KDQojZW5kaWYgLyogTk9MVFIg Ki8NCg== --0-1628243425-918586018=:14147 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=anarchy Content-Transfer-Encoding: BASE64 Content-ID: <Pine.BSF.4.05.9902091346581.14147@heathers.stdio.com> Content-Description: Content-Disposition: attachment; filename=anarchy Iw0KIyBHRU5FUklDIC0tIEdlbmVyaWMgbWFjaGluZSB3aXRoIFdEL0FIeC9O Q1IvQlR4IGZhbWlseSBkaXNrcw0KIw0KIyBGb3IgbW9yZSBpbmZvcm1hdGlv biByZWFkIHRoZSBoYW5kYm9vayBwYXJ0IFN5c3RlbSBBZG1pbmlzdHJhdGlv biAtPiANCiMgQ29uZmlndXJpbmcgdGhlIEZyZWVCU0QgS2VybmVsIC0+IFRo ZSBDb25maWd1cmF0aW9uIEZpbGUuIA0KIyBUaGUgaGFuZGJvb2sgaXMgYXZh aWxhYmxlIGluIC91c3Ivc2hhcmUvZG9jL2hhbmRib29rIG9yIG9ubGluZSBh cw0KIyBsYXRlc3QgdmVyc2lvbiBmcm9tIHRoZSBGcmVlQlNEIFdvcmxkIFdp ZGUgV2ViIHNlcnZlciANCiMgPFVSTDpodHRwOi8vd3d3LkZyZWVCU0QuT1JH Lz4NCiMNCiMgQW4gZXhoYXVzdGl2ZSBsaXN0IG9mIG9wdGlvbnMgYW5kIG1v cmUgZGV0YWlsZWQgZXhwbGFuYXRpb25zIG9mIHRoZSANCiMgZGV2aWNlIGxp bmVzIGlzIHByZXNlbnQgaW4gdGhlIC4vTElOVCBjb25maWd1cmF0aW9uIGZp bGUuIElmIHlvdSBhcmUgDQojIGluIGRvdWJ0IGFzIHRvIHRoZSBwdXJwb3Nl IG9yIG5lY2Vzc2l0eSBvZiBhIGxpbmUsIGNoZWNrIGZpcnN0IGluIExJTlQu DQojDQojCSRJZDogR0VORVJJQyx2IDEuMTE4IDE5OTgvMDkvMTggMDA6NDY6 NDAgbWphY29iIEV4cCAkDQoNCm1hY2hpbmUJCSJpMzg2Ig0KI2NwdQkJIkkz ODZfQ1BVIg0KY3B1CQkiSTQ4Nl9DUFUiDQpjcHUJCSJJNTg2X0NQVSINCiNj cHUJCSJJNjg2X0NQVSINCmlkZW50CQlhbmFyY2h5DQptYXh1c2VycwkzMg0K DQpvcHRpb25zCQkiTUFYTUVNPSgxMjgqMTAyNCkiDQpvcHRpb25zICAgICAg ICAgTk1CQ0xVU1RFUlM9NDA5Ng0KDQpvcHRpb25zCQlNQVRIX0VNVUxBVEUJ CSNTdXBwb3J0IGZvciB4ODcgZW11bGF0aW9uDQpvcHRpb25zCQlJTkVUCQkJ I0ludGVyTkVUd29ya2luZw0Kb3B0aW9ucwkJRkZTCQkJI0JlcmtlbGV5IEZh c3QgRmlsZXN5c3RlbQ0Kb3B0aW9ucwkJTkZTCQkJI05ldHdvcmsgRmlsZXN5 c3RlbQ0Kb3B0aW9ucwkJTVNET1NGUwkJCSNNU0RPUyBGaWxlc3lzdGVtDQpv cHRpb25zCQkiQ0Q5NjYwIgkJI0lTTyA5NjYwIEZpbGVzeXN0ZW0NCm9wdGlv bnMJCSJDRDk2NjBfUk9PVCIJCSNDRC1ST00gdXNhYmxlIGFzIHJvb3QgZGV2 aWNlDQpvcHRpb25zCQlGRlNfUk9PVAkJI0ZGUyB1c2FibGUgYXMgcm9vdCBk ZXZpY2UgW2tlZXAgdGhpcyFdDQpvcHRpb25zCQlORlNfUk9PVAkJI05GUyB1 c2FibGUgYXMgcm9vdCBkZXZpY2UNCm9wdGlvbnMJCVBST0NGUwkJCSNQcm9j ZXNzIGZpbGVzeXN0ZW0NCm9wdGlvbnMJCSJDT01QQVRfNDMiCQkjQ29tcGF0 aWJsZSB3aXRoIEJTRCA0LjMgW0tFRVAgVEhJUyFdDQpvcHRpb25zCQlTQ1NJ X0RFTEFZPTgwMDAgCSNCZSBwZXNzaW1pc3RpYyBhYm91dCBKb2UgU0NTSSBk ZXZpY2UNCm9wdGlvbnMJCVVDT05TT0xFCQkjQWxsb3cgdXNlcnMgdG8gZ3Jh YiB0aGUgY29uc29sZQ0Kb3B0aW9ucwkJRkFJTFNBRkUJCSNCZSBjb25zZXJ2 YXRpdmUNCm9wdGlvbnMJCVVTRVJDT05GSUcJCSNib290IC1jIGVkaXRvcg0K b3B0aW9ucwkJVklTVUFMX1VTRVJDT05GSUcJI3Zpc3VhbCBib290IC1jIGVk aXRvcg0KDQpvcHRpb25zICAgICAgICAgU09GVFVQREFURVMNCg0Kb3B0aW9u cwkJRERCDQpvcHRpb25zCQlEREJfVU5BVFRFTkRFRA0KDQpjb25maWcJCWtl cm5lbAlyb290IG9uIGRhMA0KDQpjb250cm9sbGVyCWlzYTANCiNjb250cm9s bGVyCWVpc2EwDQpjb250cm9sbGVyCXBjaTANCg0KY29udHJvbGxlciAgICAg IHBucDANCg0KI2NvbnRyb2xsZXIgICAgICBzbmQwDQojZGV2aWNlIHNiMCAg ICAgIGF0IGlzYT8gcG9ydCAweDIyMCBpcnEgNSBkcnEgMSB2ZWN0b3Igc2Jp bnRyDQojZGV2aWNlIHNieHZpMCAgIGF0IGlzYT8gZHJxIDUNCiNkZXZpY2Ug c2JtaWRpMCAgYXQgaXNhPyBwb3J0IDB4MzMwDQoNCmNvbnRyb2xsZXIJZmRj MAlhdCBpc2E/IHBvcnQgIklPX0ZEMSIgYmlvIGlycSA2IGRycSAyIHZlY3Rv ciBmZGludHINCmRpc2sJCWZkMAlhdCBmZGMwIGRyaXZlIDANCiNkaXNrCQlm ZDEJYXQgZmRjMCBkcml2ZSAxDQojIFVubGVzcyB5b3Uga25vdyB2ZXJ5IHdl bGwgd2hhdCB5b3UncmUgZG9pbmcsIGxlYXZlIGZ0MCBhdCBkcml2ZSAyLCBv cg0KIyByZW1vdmUgdGhlIGxpbmUgZW50aXJlbHkgaWYgeW91IGRvbid0IG5l ZWQgaXQuICBUcnlpbmcgdG8gY29uZmlndXJlDQojIGl0IG9uIGFub3RoZXIg dW5pdCBtaWdodCBjYXVzZSBzdXJwcmlzZXMsIHNlZSBQUiBrZXJuLzcxNzYu DQojdGFwZQkJZnQwCWF0IGZkYzAgZHJpdmUgMg0KDQojb3B0aW9ucwkJIkNN RDY0MCIJIyB3b3JrIGFyb3VuZCBDTUQ2NDAgY2hpcCBkZWZpY2llbmN5DQoj Y29udHJvbGxlcgl3ZGMwCWF0IGlzYT8gcG9ydCAiSU9fV0QxIiBiaW8gaXJx IDE0IHZlY3RvciB3ZGludHINCiNkaXNrCQl3ZDAJYXQgd2RjMCBkcml2ZSAw DQojZGlzawkJd2QxCWF0IHdkYzAgZHJpdmUgMQ0KDQojY29udHJvbGxlcgl3 ZGMxCWF0IGlzYT8gcG9ydCAiSU9fV0QyIiBiaW8gaXJxIDE1IHZlY3RvciB3 ZGludHINCiNkaXNrCQl3ZDIJYXQgd2RjMSBkcml2ZSAwDQojZGlzawkJd2Qz CWF0IHdkYzEgZHJpdmUgMQ0KDQojb3B0aW9ucwkJQVRBUEkJCSNFbmFibGUg QVRBUEkgc3VwcG9ydCBmb3IgSURFIGJ1cw0KI29wdGlvbnMJCUFUQVBJX1NU QVRJQwkjRG9uJ3QgZG8gaXQgYXMgYW4gTEtNDQojZGV2aWNlCQl3Y2QwCQkj SURFIENELVJPTQ0KI2RldmljZQkJd2ZkMAkJI0lERSBGbG9wcHkgKGUuZy4g TFMtMTIwKQ0KDQojIEEgc2luZ2xlIGVudHJ5IGZvciBhbnkgb2YgdGhlc2Ug Y29udHJvbGxlcnMgKG5jciwgYWhiLCBhaGMsIGFtZCkgaXMNCiMgc3VmZmlj aWVudCBmb3IgYW55IG51bWJlciBvZiBpbnN0YWxsZWQgZGV2aWNlcy4NCmNv bnRyb2xsZXIJbmNyMA0KI2NvbnRyb2xsZXIJYW1kMA0KI2NvbnRyb2xsZXIJ YWhiMA0KI2NvbnRyb2xsZXIJYWhjMA0KI2NvbnRyb2xsZXIJaXNwMA0KDQoj IFRoaXMgY29udHJvbGxlciBvZmZlcnMgYSBudW1iZXIgb2YgY29uZmlndXJh dGlvbiBvcHRpb25zLCB0b28gbWFueSB0bw0KIyBkb2N1bWVudCBoZXJlICAt IHNlZSB0aGUgTElOVCBmaWxlIGluIHRoaXMgZGlyZWN0b3J5IGFuZCBsb29r IHVwIHRoZQ0KIyBkcHQwIGVudHJ5IHRoZXJlIGZvciBtdWNoIGZ1bGxlciBk b2N1bWVudGF0aW9uIG9uIHRoaXMuICBUaGUgb3B0aW9ucw0KIyBsaW5lIGZv bGxvd2luZyBkcHQwIGhlcmUgaXMgYWxzbyBjdXJyZW50bHkgYSAqcmVxdWly ZWQqIG9wdGlvbiBmb3IgaXQuDQojIGNvbnRyb2xsZXIgICAgICBkcHQwDQoj IG9wdGlvbnMgRFBUX01FQVNVUkVfUEVSRk9STUFOQ0UNCg0KI2NvbnRyb2xs ZXIJYWR2MAlhdCBpc2E/IHBvcnQgPyBjYW0gaXJxID8NCiNjb250cm9sbGVy CWJ0MAlhdCBpc2E/IHBvcnQgPyBjYW0gaXJxID8NCiNjb250cm9sbGVyCWFo YTAJYXQgaXNhPyBwb3J0ID8gY2FtIGlycSA/DQojY29udHJvbGxlcgl1aGEw CWF0IGlzYT8gcG9ydCAiSU9fVUhBMCIgYmlvIGlycSA/IGRycSA1IHZlY3Rv ciB1aGFpbnRyDQojY29udHJvbGxlcglhaWMwCWF0IGlzYT8gcG9ydCAweDM0 MCBiaW8gaXJxIDExIHZlY3RvciBhaWNpbnRyDQojY29udHJvbGxlcgluY2Ew CWF0IGlzYT8gcG9ydCAweDFmODggYmlvIGlycSAxMCB2ZWN0b3IgbmNhaW50 cg0KI2NvbnRyb2xsZXIJbmNhMQlhdCBpc2E/IHBvcnQgMHgzNTAgYmlvIGly cSA1IHZlY3RvciBuY2FpbnRyDQojY29udHJvbGxlcglzZWEwCWF0IGlzYT8g YmlvIGlycSA1IGlvbWVtIDB4YzgwMDAgaW9zaXogMHgyMDAwIHZlY3RvciBz ZWFpbnRyDQoNCmNvbnRyb2xsZXIJc2NidXMwDQoNCmRldmljZQkJZGEwDQoN CmRldmljZSAgICAgICAgICBvZDAgICAgICNTZWUgTElOVCBmb3IgcG9zc2li bGUgYG9kJyBvcHRpb25zLg0KI29wdGlvbnMgICAgICAgICBPRF9CT0dVU19O T1RfUkVBRFkgICAgICANCg0KZGV2aWNlCQlzYTANCg0KZGV2aWNlCQlwYXNz MA0KDQpkZXZpY2UJCWNkMAkjT25seSBuZWVkIG9uZSBvZiB0aGVzZSwgdGhl IGNvZGUgZHluYW1pY2FsbHkgZ3Jvd3MNCg0KI2RldmljZQkJd3QwCWF0IGlz YT8gcG9ydCAweDMwMCBiaW8gaXJxIDUgZHJxIDEgdmVjdG9yIHd0aW50cg0K I2RldmljZQkJbWNkMAlhdCBpc2E/IHBvcnQgMHgzMDAgYmlvIGlycSAxMCB2 ZWN0b3IgbWNkaW50cg0KDQojY29udHJvbGxlcgltYXRjZDAJYXQgaXNhPyBw b3J0IDB4MjMwIGJpbw0KDQojZGV2aWNlCQlzY2QwCWF0IGlzYT8gcG9ydCAw eDIzMCBiaW8NCg0KIyBhdGtiZGMwIGNvbnRyb2xscyBib3RoIHRoZSBrZXli b2FyZCBhbmQgdGhlIFBTLzIgbW91c2UNCmNvbnRyb2xsZXIJYXRrYmRjMAlh dCBpc2E/IHBvcnQgSU9fS0JEIHR0eQ0KZGV2aWNlCQlhdGtiZDAJYXQgaXNh PyB0dHkgaXJxIDENCmRldmljZQkJcHNtMAlhdCBpc2E/IHR0eSBpcnEgMTIN Cg0KZGV2aWNlCQl2Z2EwCWF0IGlzYT8gcG9ydCA/IGNvbmZsaWN0cw0KDQoj IHNwbGFzaCBzY3JlZW4vc2NyZWVuIHNhdmVyDQpwc2V1ZG8tZGV2aWNlCXNw bGFzaA0KDQojIHN5c2NvbnMgaXMgdGhlIGRlZmF1bHQgY29uc29sZSBkcml2 ZXIsIHJlc2VtYmxpbmcgYW4gU0NPIGNvbnNvbGUNCmRldmljZQkJc2MwCWF0 IGlzYT8gdHR5DQojIEVuYWJsZSB0aGlzIGFuZCBQQ1ZUX0ZSRUVCU0QgZm9y IHBjdnQgdnQyMjAgY29tcGF0aWJsZSBjb25zb2xlIGRyaXZlcg0KI2Rldmlj ZQkJdnQwCWF0IGlzYT8gdHR5DQpvcHRpb25zCQlYU0VSVkVSCQkJIyBzdXBw b3J0IGZvciBYIHNlcnZlcg0KI29wdGlvbnMJCUZBVF9DVVJTT1IJCSMgc3Rh cnQgd2l0aCBibG9jayBjdXJzb3INCiMgSWYgeW91IGhhdmUgYSBUaGlua1BB RCwgdW5jb21tZW50IHRoaXMgYWxvbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUg UENWVCBsaW5lcw0KI29wdGlvbnMJCVBDVlRfU0NBTlNFVD0yCQkjIElCTSBr ZXlib2FyZHMgYXJlIG5vbi1zdGQNCg0KZGV2aWNlCQlucHgwCWF0IGlzYT8g cG9ydCAiSU9fTlBYIiBpcnEgMTMgdmVjdG9yIG5weGludHINCg0KIw0KIyBM YXB0b3Agc3VwcG9ydCAoc2VlIExJTlQgZm9yIG1vcmUgb3B0aW9ucykNCiMN CiNkZXZpY2UJCWFwbTAgICAgYXQgaXNhPwlkaXNhYmxlCWZsYWdzIDB4MzEg IyBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50DQoNCiMgUENDQVJEIChQQ01D SUEpIHN1cHBvcnQNCiNjb250cm9sbGVyCWNhcmQwDQojZGV2aWNlCQlwY2lj MAlhdCBjYXJkPw0KI2RldmljZQkJcGNpYzEJYXQgY2FyZD8NCg0KZGV2aWNl CQlzaW8wCWF0IGlzYT8gcG9ydCAiSU9fQ09NMSIgZmxhZ3MgMHgxMCB0dHkg aXJxIDQgdmVjdG9yIHNpb2ludHINCmRldmljZQkJc2lvMQlhdCBpc2E/IHBv cnQgIklPX0NPTTIiIHR0eSBpcnEgMyB2ZWN0b3Igc2lvaW50cg0KZGV2aWNl CQlzaW8yCWF0IGlzYT8gZGlzYWJsZSBwb3J0ICJJT19DT00zIiB0dHkgaXJx IDUgdmVjdG9yIHNpb2ludHINCmRldmljZQkJc2lvMwlhdCBpc2E/IGRpc2Fi bGUgcG9ydCAiSU9fQ09NNCIgdHR5IGlycSA5IHZlY3RvciBzaW9pbnRyDQoN CiNkZXZpY2UJCWxwdDAJYXQgaXNhPyBwb3J0PyB0dHkgaXJxIDcgdmVjdG9y IGxwdGludHINCiNkZXZpY2UJCWxwdDEJYXQgaXNhPyBwb3J0PyB0dHkNCiNk ZXZpY2UJCW1zZTAJYXQgaXNhPyBwb3J0IDB4MjNjIHR0eSBpcnEgNSB2ZWN0 b3IgbXNlaW50cg0KDQojZGV2aWNlCQlwc20wCWF0IGlzYT8gcG9ydCAiSU9f S0JEIiBjb25mbGljdHMgdHR5IGlycSAxMiB2ZWN0b3IgcHNtaW50cg0KDQoj IE9yZGVyIGlzIGltcG9ydGFudCBoZXJlIGR1ZSB0byBpbnRydXNpdmUgcHJv YmVzLCBkbyAqbm90KiBhbHBoYWJldGl6ZQ0KIyB0aGlzIGxpc3Qgb2YgbmV0 d29yayBpbnRlcmZhY2VzIHVudGlsIHRoZSBwcm9iZXMgaGF2ZSBiZWVuIGZp eGVkLg0KIyBSaWdodCBub3cgaXQgYXBwZWFycyB0aGF0IHRoZSBpZTAgbXVz dCBiZSBwcm9iZWQgYmVmb3JlIGVwMC4gU2VlDQojIHJldmlzaW9uIDEuMjAg b2YgdGhpcyBmaWxlLg0KI2RldmljZSBkZTANCmRldmljZSBmeHAwDQojZGV2 aWNlIHRsMA0KI2RldmljZSB0eDANCiNkZXZpY2UgdngwDQojZGV2aWNlIHhs MA0KDQpkZXZpY2Ugb2x0cjAgYXQgaXNhPyANCmRldmljZSB0b2swIGF0IGlz YT8gcG9ydCAweGEyMCBuZXQgaXJxIDcgaW9tZW0gMHhkODAwMA0KI2Rldmlj ZSBlZDAgYXQgaXNhPyBwb3J0IDB4MjgwIG5ldCBpcnEgMTAgaW9tZW0gMHhk ODAwMCB2ZWN0b3IgZWRpbnRyDQojZGV2aWNlIGllMCBhdCBpc2E/IHBvcnQg MHgzMDAgbmV0IGlycSAxMCBpb21lbSAweGQwMDAwIHZlY3RvciBpZWludHIN CiNkZXZpY2UgZXAwIGF0IGlzYT8gcG9ydCAweDMwMCBuZXQgaXJxIDEwIHZl Y3RvciBlcGludHINCiNkZXZpY2UgZXgwIGF0IGlzYT8gcG9ydD8gbmV0IGly cT8gdmVjdG9yIGV4aW50cg0KI2RldmljZSBmZTAgYXQgaXNhPyBwb3J0IDB4 MzAwIG5ldCBpcnEgPyB2ZWN0b3IgZmVpbnRyDQojZGV2aWNlIGxlMCBhdCBp c2E/IHBvcnQgMHgzMDAgbmV0IGlycSA1IGlvbWVtIDB4ZDAwMDAgdmVjdG9y IGxlX2ludHINCiNkZXZpY2UgbG5jMCBhdCBpc2E/IHBvcnQgMHgyODAgbmV0 IGlycSAxMCBkcnEgMCB2ZWN0b3IgbG5jaW50cg0KI2RldmljZSB6ZTAgYXQg aXNhPyBwb3J0IDB4MzAwIG5ldCBpcnEgMTAgaW9tZW0gMHhkODAwMCB2ZWN0 b3IgemVpbnRyDQojZGV2aWNlIHpwMCBhdCBpc2E/IHBvcnQgMHgzMDAgbmV0 IGlycSAxMCBpb21lbSAweGQ4MDAwIHZlY3RvciB6cGludHINCiNkZXZpY2Ug Y3MwIGF0IGlzYT8gcG9ydCAweDMwMCBuZXQgaXJxID8gdmVjdG9yIGNzaW50 cg0KDQpwc2V1ZG8tZGV2aWNlCWxvb3ANCnBzZXVkby1kZXZpY2UJZXRoZXIN CnBzZXVkby1kZXZpY2UJdG9rZW4NCiNwc2V1ZG8tZGV2aWNlCXNsCTENCiNw c2V1ZG8tZGV2aWNlCXBwcAkxDQojcHNldWRvLWRldmljZQl0dW4JMQ0KcHNl dWRvLWRldmljZSAgIGJwZmlsdGVyIDQNCnBzZXVkby1kZXZpY2UJcHR5CTY0 DQpwc2V1ZG8tZGV2aWNlICAgc25wICAgICA0DQpwc2V1ZG8tZGV2aWNlCWd6 aXAJCSMgRXhlYyBnemlwcGVkIGEub3V0J3MNCg0KIyBLVFJBQ0UgZW5hYmxl cyB0aGUgc3lzdGVtLWNhbGwgdHJhY2luZyBmYWNpbGl0eSBrdHJhY2UoMiku DQojIFRoaXMgYWRkcyA0IEtCIGJsb2F0IHRvIHlvdXIga2VybmVsLCBhbmQg c2xpZ2h0bHkgaW5jcmVhc2VzDQojIHRoZSBjb3N0cyBvZiBlYWNoIHN5c2Nh bGwuDQpvcHRpb25zCQlLVFJBQ0UJCSNrZXJuZWwgdHJhY2luZw0KDQojIFRo aXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgU3lzdGVtIFYgc2hhcmVkIG1lbW9y eS4NCiMNCm9wdGlvbnMJCVNZU1ZTSE0NCm9wdGlvbnMgICAgICAgICBTWVNW U0VNDQpvcHRpb25zICAgICAgICAgU1lTVk1TRw0K --0-1628243425-918586018=:14147-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.05.9902091338150.14147-300000>