From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1E8FMJ-0000PX-01 for mharc-grub-devel@gnu.org; Thu, 25 Aug 2005 06:53:23 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1E8FMB-0000L5-DP for grub-devel@gnu.org; Thu, 25 Aug 2005 06:53:15 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1E8FLu-0000Ee-U5 for grub-devel@gnu.org; Thu, 25 Aug 2005 06:53:14 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1E8FC9-00075w-W3 for grub-devel@gnu.org; Thu, 25 Aug 2005 06:42:54 -0400 Received: from [217.12.11.36] (helo=smtp005.mail.ukl.yahoo.com) by monty-python.gnu.org with smtp (Exim 4.34) id 1E8Eqo-0002Gv-Jh for grub-devel@gnu.org; Thu, 25 Aug 2005 06:20:52 -0400 Received: (qmail 98091 invoked from network); 25 Aug 2005 10:19:31 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.fr; h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:X-Enigmail-Version:Content-Type; b=VsnV0V8NC6JrVPhQLYkBT0n2YLgxArZGr+IuZAztc5JfE4k8gb1PLrdq6gj0cxRRMm9gBspzJq/YdUYtrcq7chJOUJwLLMQfp1r407zCEw0EG8JzY1xWFdskcJ98+pXxWufh8nc2w58A8bzJMD08WS33gw8/uBmwqNq6jJTK/eg= ; Received: from unknown (HELO ?192.168.0.2?) (subdino2004@83.194.190.198 with plain) by smtp005.mail.ukl.yahoo.com with SMTP; 25 Aug 2005 10:19:28 -0000 Message-ID: <430D9B31.7000702@yahoo.fr> Date: Thu, 25 Aug 2005 12:19:29 +0200 From: Vincent Pelletier User-Agent: Debian Thunderbird 1.0.6 (X11/20050802) X-Accept-Language: en-us, en MIME-Version: 1.0 To: The development of GRUB 2 X-Enigmail-Version: 0.92.0.0 Content-Type: multipart/mixed; boundary="------------000206080104050109080501" Subject: [PATCH] Framebuffer ieee1275 support & test commands X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Aug 2005 10:53:18 -0000 This is a multi-part message in MIME format. --------------000206080104050109080501 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Here is my patch to add support for framebuffer on IEEE1275 machines, a fractal drawing test program, and a mouse test program. Framebuffer support includes : -setting the palette colours -drawing a rectangle filled with a colour -drawing a rectangular image (may have some width & height limitations, I had some glitches when I used a non-power-of-2 width) -grabbing a rectangular image from screen (not tested) -getting the framebuffer address (the function I provide doesn't work for some strange reason... Should be a cast problem somewhere. Mandelbrot command uses a workaround until I find the problem). Mandelbrot draws directly in the framebuffer memory. It returns, but doesn't restore the colours. It calculates the fractal, so it uses fixed point operations (double). As I said in a previous mail, mouse support is very limited - but it just works :). Mouse support is actualy 100% handled by mousetest.c. It understands Microsoft 2 buttons mouse protocol. Once started, the mousetest command doesn't exits (except if there is an init error). The rectangle on the top left corner of the screen shows the data received (3 bytes, first top, msb on the left). The format is described in mouse(4), coloured for better readability : red : left mouse button green : right moue button yellow : y axis blue : x axis That command uses the (draw,fill)-rectangle functions, so the framebuffer must have them (my Creator3D doesn't). Usage : mousetest [screen_device mouse_device] default : mousetest screen mouse Please tell me if it doesn't build on PPC as modules (Marco : It's not the patch I sent you, I improved it a bit.) and if it doesn't work. Marco told me he was only getting a grey image with Mandelbrot. 2005-08-25 Vincent Pelletier * commands/ieee1275/mandelbrot.c: New file. * commands/ieee1275/mousetest.c: Likewise. * include/grub/ieee1275/fb.h: Likewise. * include/grub/ieee1275/fbprops.h: Likewise. * video/ieee1275/fb.c: Likewise. * video/ieee1275/fbprops.c: Likewise. * conf/powerpc-ieee1275.rmk (pkgdata_MODULES): Add mandelbrot.mod, mousetest.mod and fb.mod. (mandelbrot.mod): New module. (mousetest.mod): Likewise. (fb.mod): Likewise. * conf/sparc64-ieee1275.rmk: Likewise. (grubof_HEADERS, grubof_SOURCES): Add needed files to statically link the commands. (grubof_CFLAGS): Add -DGRUB_EMBED to make commands build as embedded and rescue commands. * kern/sparc64/ieee1275/init.c: Handle the commands initialisation and finish when embedded. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFDDZsxFEQoKRQyjtURAgtTAJ9qclafmsNNvgVkC1r8jvhP7kDZYQCffffX koq32EYbF4X0teVkqhCQmg0= =TF0X -----END PGP SIGNATURE----- --------------000206080104050109080501 Content-Type: audio/x-mp3; name="mandel_mouse.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="mandel_mouse.diff" SW5kZXg6IGNvbW1hbmRzL2llZWUxMjc1L21hbmRlbGJyb3QuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiBjb21tYW5kcy9pZWVlMTI3NS9tYW5kZWxicm90LmMKZGlmZiAtTiBjb21tYW5k cy9pZWVlMTI3NS9tYW5kZWxicm90LmMKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAw OjAwIC0wMDAwCisrKyBjb21tYW5kcy9pZWVlMTI3NS9tYW5kZWxicm90LmMJMjUgQXVnIDIw MDUgMDk6MDU6MDkgLTAwMDAKQEAgLTAsMCArMSwxNDUgQEAKKy8qIG1hbmRlbGJyb3QuYyAt IERyYXdzIGEgbmljZSBNYW5sZGVicm90IGZyYWN0YWwuICAqLworLyoKKyAqICBHUlVCICAt LSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1ICBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgR1JVQiBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1 IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUg PGdydWIvcmVzY3VlLmg+CisjaW5jbHVkZSA8Z3J1Yi9kbC5oPgorI2luY2x1ZGUgPGdydWIv bWlzYy5oPgorI2luY2x1ZGUgPGdydWIvbWFjaGluZS9rZXJuZWwuaD4KKyNpbmNsdWRlIDxn cnViL2llZWUxMjc1L2llZWUxMjc1Lmg+CisjaW5jbHVkZSA8Z3J1Yi9pZWVlMTI3NS9mYi5o PgorI2luY2x1ZGUgPGdydWIvaWVlZTEyNzUvZmJwcm9wcy5oPgorCisjaWZuZGVmIEdSVUJf RU1CRUQKK3N0YXRpYyBncnViX2Vycl90CitncnViX2NtZF9tYW5kZWxicm90IChzdHJ1Y3Qg Z3J1Yl9hcmdfbGlzdCAqc3RhdGUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorCSAgICAg ICAgICAgICBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisjZWxzZSAvKiBHUlVCX0VNQkVEICov CitzdGF0aWMgdm9pZAorZ3J1Yl9jbWRfbWFuZGVsYnJvdCAoaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKKyNlbmRpZiAvKiAhIEdSVUJfRU1CRUQgKi8KK3sKKyAgZ3J1Yl9pZWVlMTI3NV9p aGFuZGxlX3Qgc2NyZWVuOworICBncnViX2llZWUxMjc1X3BoYW5kbGVfdCBwc2NyZWVuOwor ICBjb25zdCB1bnNpZ25lZCBpbnQgbm1heCA9IDI1OworICB1bnNpZ25lZCBpbnQgbiwgeCwg eSwgdywgaCwgYTsKKyAgY29uc3QgZG91YmxlIHhtaW4gPSAtMi41LCB4bWF4ID0gMi41LCB5 bWluID0gLTIsIHltYXggPSAyOworICBkb3VibGUgZHgsIGR5LCByeiwgaXosIHR6LCByYywg aWM7CisgIHVuc2lnbmVkIGNoYXIgKmZiLCB0bXBbNF07CisgIGNoYXIgKmRldmljZTsKKyAg Z3J1Yl9zc2l6ZV90IGFjdHVhbDsKKworICBpZihhcmdjID09IDEpCisgICAgZGV2aWNlID0g YXJndlswXTsKKyAgZWxzZQorICAgIGRldmljZSA9ICJzY3JlZW4iOworICBncnViX3ByaW50 ZigiVXNpbmcgZGV2aWNlICVzLi4uXG4iLGRldmljZSk7CisgIGlmICghZ3J1Yl9pZWVlMTI3 NV9vcGVuIChkZXZpY2UsICZzY3JlZW4pKQorICAgIHsKKyAgICAgIGdydWJfaWVlZTEyNzVf ZmluZGRldmljZSAoZGV2aWNlLCAmcHNjcmVlbik7CisgICAgICBoID0gZ3J1Yl9pZWVlMTI3 NV9mYl9oZWlnaHQgKHBzY3JlZW4pOworICAgICAgdyA9IGdydWJfaWVlZTEyNzVfZmJfd2lk dGggKHBzY3JlZW4pOworICAgICAgZ3J1Yl9wcmludGYoInc9JWQgaD0lZFxuIix3LGgpOwor ICAgICAgZ3J1Yl9pZWVlMTI3NV9nZXRfcHJvcGVydHkgKHBzY3JlZW4sImFkZHJlc3MiLHRt cCxzaXplb2YodG1wKSwmYWN0dWFsKTsKKyAgICAgIGZiID0gKHVuc2lnbmVkIGNoYXIgKikg Z3J1Yl9pZWVlMTI3NV9kZWNvZGVfaW50XzQodG1wKTsKKy8vICAgICAgZmIgPSAodW5zaWdu ZWQgY2hhciAqKSBncnViX2llZWUxMjc1X2ZiX2FkZHIgKHBzY3JlZW4pOworICAgICAgZ3J1 Yl9wcmludGYgKCJGcmFtZWJ1ZmZlciBpcyBhdCAlcC5cbkNsZWFyaW5nIHNjcmVlbi4uLlxu IiwgZmIpOworICAgICAgZm9yIChhID0gMDsgYSA8IHcgKiBoOyBhKyspCisgICAgICAgIGZi W2FdID0gMDsKKyAgICAgIGZvciAoYSA9IDA7IGEgPCAyNTY7IGErKykgLyogRmlsbCBwYWxl dHRlIHdpdGggc2hhZGVzIG9mIGdyYXkuICAqLworICAgICAgICBncnViX2llZWUxMjc1X3Nl dGNvbG9yIChzY3JlZW4sIGEsIGEsIGEsIGEpOworICAgICAgZHggPSAoeG1heCAtIHhtaW4p IC8gdzsKKyAgICAgIGR5ID0gKHltYXggLSB5bWluKSAvIGg7CisgICAgICBmb3IgKHggPSAw OyB4IDwgdzsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgcmMgPSB4bWluICsgeCAqIGR4 OworICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBoOyB5KyspCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgIGljID0geW1pbiArIHkgKiBkeTsKKyAgICAgICAgICAgICAgcnogPSAw OworICAgICAgICAgICAgICBpeiA9IDA7CisgICAgICAgICAgICAgIGZvciAobiA9IDE7IG4g PCBubWF4OyBuKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgdHog PSByeiAqIHJ6IC0gaXogKiBpeiArIHJjOworICAgICAgICAgICAgICAgICAgaXogPSAyICog cnogKiBpeiArIGljOworICAgICAgICAgICAgICAgICAgcnogPSB0ejsKKyAgICAgICAgICAg ICAgICAgIGlmIChyeiAqIHJ6ICsgaXogKiBpeiA+PSA0KQorICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgZmJbeCt3KnldID0gKG4qMjU1L25tYXgpICUg MjU2OworICAgICAgICAgICAgICAgICAgICAgIG4gPSBubWF4OworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAocnogKiByeiAr IGl6ICogaXogPCA0KQorICAgICAgICAgICAgICAgIGZiW3grdyp5XT0yNTU7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyNpZiAwCisgICAgICBncnViX2llZWUxMjc1X2Nsb3NlIChz Y3JlZW4pOyAvKiBJZiBzY3JlZW4gaXMgY2xvc2VkLCBpdCBnb2VzIGJsYWNrLiAgKi8KKyNl bmRpZgorICAgIH0KKyAgZ3J1Yl9wcmludGYoIkZpbmlzaGVkICFcbiIpOworI2lmbmRlZiBH UlVCX0VNQkVECisgIHJldHVybiAwOworI2VuZGlmIC8qICEgR1JVQl9FTUJFRCAqLworfQor CisMCisjaWZkZWYgR1JVQl9FTUJFRAordm9pZAorZ3J1Yl9tYW5kZWxicm90X2luaXQgKHZv aWQpCit7CisgIGdydWJfcmVzY3VlX3JlZ2lzdGVyX2NvbW1hbmQgKCJtYW5kZWxicm90Iiwg Z3J1Yl9jbWRfbWFuZGVsYnJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IkRyYXdzIGEgZnJhY3RhbC4iKTsKK30KKwordm9pZAorZ3J1Yl9tYW5kZWxicm90X2Zpbmkg KHZvaWQpCit7CisgIGdydWJfcmVzY3VlX3VucmVnaXN0ZXJfY29tbWFuZCAoIm1hbmRlbGJy b3QiKTsKK30KKyNlbHNlIC8qICEgR1JVQl9FTUJFRCAqLworI2lmZGVmIEdSVUJfVVRJTAor dm9pZAorZ3J1Yl9tYW5kZWxicm90X2luaXQgKHZvaWQpCit7CisgIGdydWJfcmVnaXN0ZXJf Y29tbWFuZCAoIm1hbmRlbGJyb3QiLCBncnViX2NtZF9tYW5kZWxicm90LAorICAgICAgICAg ICAgICAgICAgICAgICAgIEdSVUJfQ09NTUFORF9GTEFHX0JPVEgsICJtYW5kZWxicm90IiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAiRHJhd3MgYSBmcmFjdGFsLiIsIDApOworfQor Cit2b2lkCitncnViX21hbmRlbGJyb3RfZmluaSAodm9pZCkKK3sKKyAgZ3J1Yl91bnJlZ2lz dGVyX2NvbW1hbmQgKCJtYW5kZWxicm90Iik7Cit9CisjZWxzZSAvKiAhIEdSVUJfVVRJTCAq LworR1JVQl9NT0RfSU5JVAoreworICAodm9pZCltb2Q7CQkJLyogVG8gc3RvcCB3YXJuaW5n LiAqLworICBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJtYW5kZWxicm90IiwgZ3J1Yl9jbWRf bWFuZGVsYnJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHUlVCX0NPTU1BTkRfRkxB R19CT1RILCAibWFuZGVsYnJvdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRyYXdz IGEgZnJhY3RhbC4iLCAwKTsKK30KKworR1JVQl9NT0RfRklOSQoreworICBncnViX3VucmVn aXN0ZXJfY29tbWFuZCAoIm1hbmRlbGJyb3QiKTsKK30KKyNlbmRpZiAvKiBHUlVCX1VUSUwg Ki8KKyNlbmRpZiAvKiBHUlVCX0VNQkVEICovCkluZGV4OiBjb21tYW5kcy9pZWVlMTI3NS9t b3VzZXRlc3QuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBjb21tYW5kcy9pZWVlMTI3NS9t b3VzZXRlc3QuYwpkaWZmIC1OIGNvbW1hbmRzL2llZWUxMjc1L21vdXNldGVzdC5jCi0tLSAv ZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgY29tbWFuZHMvaWVlZTEy NzUvbW91c2V0ZXN0LmMJMjUgQXVnIDIwMDUgMDk6MDU6MDkgLTAwMDAKQEAgLTAsMCArMSwy NDAgQEAKKy8qIG1vdXNldGVzdC5jIC0gQmFzaWMgbW91c2UgaGFuZGxpbmcuICAqLworLyoK KyAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0 IChDKSAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgR1JV QiBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBH UlVCOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv biwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8K KworI2luY2x1ZGUgPGdydWIvcmVzY3VlLmg+CisjaW5jbHVkZSA8Z3J1Yi9kbC5oPgorI2lu Y2x1ZGUgPGdydWIvbWlzYy5oPgorI2luY2x1ZGUgPGdydWIvbWFjaGluZS9rZXJuZWwuaD4K KyNpbmNsdWRlIDxncnViL2llZWUxMjc1L2llZWUxMjc1Lmg+CisjaW5jbHVkZSA8Z3J1Yi9p ZWVlMTI3NS9mYi5oPgorI2luY2x1ZGUgPGdydWIvaWVlZTEyNzUvZmJwcm9wcy5oPgorCisj aWZuZGVmIEdSVUJfRU1CRUQKK3N0YXRpYyBncnViX2Vycl90CitncnViX2NtZF9tb3VzZXRl c3QgKHN0cnVjdCBncnViX2FyZ19saXN0ICpzdGF0ZSBfX2F0dHJpYnV0ZV9fICgodW51c2Vk KSksCisJICAgICAgICBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisjZWxzZSAvKiBHUlVCX0VN QkVEICovCitzdGF0aWMgdm9pZAorZ3J1Yl9jbWRfbW91c2V0ZXN0IChpbnQgYXJnYywgY2hh ciAqYXJndltdKQorI2VuZGlmIC8qICEgR1JVQl9FTUJFRCAqLworeworICBpbnQgeCwgeSwg dywgaCwgYTsKKyAgdW5zaWduZWQgY2hhciBjb2xvcjsKKyAgZ3J1Yl9pZWVlMTI3NV9paGFu ZGxlX3Qgc2NyZWVuLCBzZXJpYWw7CisgIGdydWJfaWVlZTEyNzVfcGhhbmRsZV90IHBzY3Jl ZW47CisgIGNoYXIgKmRldmljZSwgKm1kZXZpY2UsIHRtcFszXTsKKyAgc3RhdGljIGNoYXIg Y2FyOworICBzdGF0aWMgZ3J1Yl9zc2l6ZV90IGFjdHVhbDsKKyAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgbW91c2VwaWNbMTYqMTZdID0geworICAgIDEsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsCisgICAgMSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwK KyAgICAxLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDEsMCwwLDEsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMSwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwKKyAgICAxLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDEsMCww LDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMSwwLDAsMCwwLDAsMCwxLDAsMCww LDAsMCwwLDAsMCwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLAorICAg IDEsMCwwLDAsMCwwLDAsMCwxLDEsMCwwLDAsMCwwLDAsCisgICAgMSwwLDAsMCwwLDAsMSwx LDEsMCwwLDAsMCwwLDAsMCwKKyAgICAxLDEsMSwxLDEsMCwxLDAsMCwwLDAsMCwwLDAsMCww LAorICAgIDEsMCwwLDAsMSwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCww LDEsMCwxLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMSwwLDEsMCwwLDAsMCww LDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDB9OworICBpZihh cmdjID09IDIpCisgIHsKKyAgICBkZXZpY2UgPSBhcmd2WzBdOworICAgIG1kZXZpY2UgPSBh cmd2WzFdOworICB9CisgIGVsc2UKKyAgeworICAgIGRldmljZSA9ICJzY3JlZW4iOworICAg IG1kZXZpY2UgPSAibW91c2UiOworICB9CisgIGdydWJfcHJpbnRmKCJVc2luZyBzY3JlZW4g ZGV2aWNlICclcycsIG1vdXNlIGRldmljZSAnJXMnLi4uXG4iLGRldmljZSwgbWRldmljZSk7 CisgIGlmICghZ3J1Yl9pZWVlMTI3NV9vcGVuIChkZXZpY2UsICZzY3JlZW4pKQorICAgIHsK KyAgICAgIGdydWJfaWVlZTEyNzVfZmluZGRldmljZSAoZGV2aWNlLCAmcHNjcmVlbik7Cisg ICAgICBoID0gZ3J1Yl9pZWVlMTI3NV9mYl9oZWlnaHQgKHBzY3JlZW4pOworICAgICAgdyA9 IGdydWJfaWVlZTEyNzVfZmJfd2lkdGggKHBzY3JlZW4pOworICAgICAgZ3J1Yl9pZWVlMTI3 NV9maWxscmVjdGFuZ2xlIChzY3JlZW4sIDAsIDAsIDAsIHcsIGgpOyAvKiBDbGVhciBzY3Jl ZW4uICAqLworICAgICAgZ3J1Yl9pZWVlMTI3NV9zZXRjb2xvciAoc2NyZWVuLCAwLCAwLCAw LCAwKTsKKyAgICAgIGdydWJfaWVlZTEyNzVfc2V0Y29sb3IgKHNjcmVlbiwgMSwgMjU1LCAy NTUsIDI1NSk7CisgICAgICBncnViX2llZWUxMjc1X3NldGNvbG9yIChzY3JlZW4sIDIsIDI1 NSwgMjU1LCAyNTUpOyAvKiBjYWRyZSAqLworICAgICAgZ3J1Yl9pZWVlMTI3NV9zZXRjb2xv ciAoc2NyZWVuLCAzLCAyNTUsIDAsIDApOyAvKiBiZyAqLworICAgICAgZ3J1Yl9pZWVlMTI3 NV9zZXRjb2xvciAoc2NyZWVuLCA0LCAwLCAyNTUsIDApOyAvKiBiZCAqLworICAgICAgZ3J1 Yl9pZWVlMTI3NV9zZXRjb2xvciAoc2NyZWVuLCA1LCAxMjgsIDEyOCwgMCk7IC8qIHggKi8K KyAgICAgIGdydWJfaWVlZTEyNzVfc2V0Y29sb3IgKHNjcmVlbiwgNiwgMCwgMTI4LCAxMjgp OyAvKiB5ICovCisgICAgICB4ID0gdyAvIDI7CisgICAgICB5ID0gaCAvIDI7CisgICAgICBj b2xvciA9IDI1NTsKKyAgICAgIGlmICghIGdydWJfaWVlZTEyNzVfb3BlbiAobWRldmljZSwg JnNlcmlhbCkpCisgICAgICAgIHsKKyAgICAgICAgICB0bXBbMF09JyonOworICAgICAgICAg IHRtcFsxXT0nbic7CisgICAgICAgICAgZ3J1Yl9pZWVlMTI3NV93cml0ZSAoc2VyaWFsLCB0 bXAsIDIsICZhY3R1YWwpOworICAgICAgICAgIC8qIFhYWDogU2V0IGFzIDEyMDAgYmF1ZHMu ICBJcyBpdCByZWFsbHkgbmVlZGVkID8gICovCisgICAgICAgICAgZ3J1Yl9pZWVlMTI3NV9z ZXRjb2xvciAoc2NyZWVuLCAxLCBjb2xvciwgY29sb3IsIGNvbG9yKTsKKyAgICAgICAgICBn cnViX2llZWUxMjc1X2RyYXdyZWN0YW5nbGUgKHNjcmVlbiwgbW91c2VwaWMsIHgsIHksIDE2 LCAxNik7CisgICAgICAgICAgd2hpbGUgKDEpCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIC8qIERlY29kZSBNaWNyb3NvZnQgbW91c2UgcHJvdG9jb2wuICAqLworICAgICAgICAg ICAgICBhID0gMDsKKyAgICAgICAgICAgICAgd2hpbGUgKGEgPCAzKQorICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgIGdydWJfaWVlZTEyNzVfcmVhZCAoc2VyaWFsLCAm Y2FyLCAxLCAmYWN0dWFsKTsKKyAgICAgICAgICAgICAgICAgIGlmKGEgPT0gMCAmJiAhIChj YXIgJiAweDQwKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg ICAgICAgICAgIC8qIFdlIHRob3VnaHQgaXQgd2FzIHRoZSBmaXJzdCwgYW5kIGl0IGlzbid0 LCBsb29wLiAgKi8KKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYoYSAhPSAwICYmIChjYXIg JiAweDQwKSkKKyAgICAgICAgICAgICAgICAgICAgdG1wW2EgPSAwXSA9IGNhcjsgLyogV2Ug YWNjaWRlbnRhbHkgZm91bmQgdGhlIGZpcnN0LiAgKi8KKyAgICAgICAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICAgICAgdG1wW2ErK10gPSBjYXI7IC8qIE5vdGhpbmcgc3Vz cGljaW91cy4gICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAodG1w WzBdICYgMTYpIC8qIFJpZ2h0IGJ1dHRvbi4gICovCisgICAgICAgICAgICAgICAgY29sb3Ig Kz0gMTY7CisgICAgICAgICAgICAgIGlmICh0bXBbMF0gJiAzMikgLyogTGVmdCBidXR0b24u ICAqLworICAgICAgICAgICAgICAgIGNvbG9yIC09IDE2OworICAgICAgICAgICAgICBncnVi X2llZWUxMjc1X2ZpbGxyZWN0YW5nbGUgKHNjcmVlbiwgMCwgeCwgeSwgMTYsIDE2KTsKKyAg ICAgICAgICAgICAgeCArPSAoc2lnbmVkIGNoYXIpICgoKHRtcFswXSAmIDB4MykgPDwgNikg fCAodG1wWzFdICYgMHgzRikpOworICAgICAgICAgICAgICB5ICs9IChzaWduZWQgY2hhcikg KCgodG1wWzBdICYgMHhDKSA8PCA0KSB8ICh0bXBbMl0gJiAweDNGKSk7CisgICAgICAgICAg ICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgICAg aWYgKHkgPCAwKQorICAgICAgICAgICAgICAgIHkgPSAwOworICAgICAgICAgICAgICBpZiAo eCA+IHcpCisgICAgICAgICAgICAgICAgeCA9IHc7CisgICAgICAgICAgICAgIGlmICh5ID4g aCkKKyAgICAgICAgICAgICAgICB5ID0gaDsKKworICAgICAgICAgICAgICBncnViX2llZWUx Mjc1X3NldGNvbG9yIChzY3JlZW4sIDEsIGNvbG9yLCBjb2xvciwgY29sb3IpOworICAgICAg ICAgICAgICBncnViX2llZWUxMjc1X2RyYXdyZWN0YW5nbGUgKHNjcmVlbiwgbW91c2VwaWMs IHgsIHksIDE2LCAxNik7CisKKyAgICAgICAgICAgICAgZ3J1Yl9pZWVlMTI3NV9maWxscmVj dGFuZ2xlIChzY3JlZW4sIDIsIDAsIDAsIDkwLCA0MCk7CisKKyAgICAgICAgICAgICAgZ3J1 Yl9pZWVlMTI3NV9maWxscmVjdGFuZ2xlIChzY3JlZW4sIHRtcFswXSAmIDEyOCA/IDEgOiAw LAorICAgICAgICAgICAgICAgICAgNSwgNSwgMTAsIDEwKTsKKyAgICAgICAgICAgICAgZ3J1 Yl9pZWVlMTI3NV9maWxscmVjdGFuZ2xlIChzY3JlZW4sIHRtcFswXSAmIDY0ID8gMSA6IDAs CisgICAgICAgICAgICAgICAgICAxNSwgNSwgMTAsIDEwKTsKKyAgICAgICAgICAgICAgZ3J1 Yl9pZWVlMTI3NV9maWxscmVjdGFuZ2xlIChzY3JlZW4sIHRtcFswXSAmIDMyID8gMyA6IDAs CisgICAgICAgICAgICAgICAgICAyNSwgNSwgMTAsIDEwKTsKKyAgICAgICAgICAgICAgZ3J1 Yl9pZWVlMTI3NV9maWxscmVjdGFuZ2xlIChzY3JlZW4sIHRtcFswXSAmIDE2ID8gNCA6IDAs CisgICAgICAgICAgICAgICAgICAzNSwgNSwgMTAsIDEwKTsKKyAgICAgICAgICAgICAgZ3J1 Yl9pZWVlMTI3NV9maWxscmVjdGFuZ2xlIChzY3JlZW4sIHRtcFswXSAmIDggPyA2IDogMCwK KyAgICAgICAgICAgICAgICAgIDQ1LCA1LCAxMCwgMTApOworICAgICAgICAgICAgICBncnVi X2llZWUxMjc1X2ZpbGxyZWN0YW5nbGUgKHNjcmVlbiwgdG1wWzBdICYgNCA/IDYgOiAwLAor ICAgICAgICAgICAgICAgICAgNTUsIDUsIDEwLCAxMCk7CisgICAgICAgICAgICAgIGdydWJf aWVlZTEyNzVfZmlsbHJlY3RhbmdsZSAoc2NyZWVuLCB0bXBbMF0gJiAyID8gNSA6IDAsCisg ICAgICAgICAgICAgICAgICA2NSwgNSwgMTAsIDEwKTsKKyAgICAgICAgICAgICAgZ3J1Yl9p ZWVlMTI3NV9maWxscmVjdGFuZ2xlIChzY3JlZW4sIHRtcFswXSAmIDEgPyA1IDogMCwKKyAg ICAgICAgICAgICAgICAgIDc1LCA1LCAxMCwgMTApOworCisgICAgICAgICAgICAgIGdydWJf aWVlZTEyNzVfZmlsbHJlY3RhbmdsZSAoc2NyZWVuLCB0bXBbMV0gJiAxMjggPyAxIDogMCwK KyAgICAgICAgICAgICAgICAgIDUsIDE1LCAxMCwgMTApOworICAgICAgICAgICAgICBncnVi X2llZWUxMjc1X2ZpbGxyZWN0YW5nbGUgKHNjcmVlbiwgdG1wWzFdICYgNjQgPyAxIDogMCwK KyAgICAgICAgICAgICAgICAgIDE1LCAxNSwgMTAsIDEwKTsKKyAgICAgICAgICAgICAgZ3J1 Yl9pZWVlMTI3NV9maWxscmVjdGFuZ2xlIChzY3JlZW4sIHRtcFsxXSAmIDMyID8gNSA6IDAs CisgICAgICAgICAgICAgICAgICAyNSwgMTUsIDEwLCAxMCk7CisgICAgICAgICAgICAgIGdy dWJfaWVlZTEyNzVfZmlsbHJlY3RhbmdsZSAoc2NyZWVuLCB0bXBbMV0gJiAxNiA/IDUgOiAw LAorICAgICAgICAgICAgICAgICAgMzUsIDE1LCAxMCwgMTApOworICAgICAgICAgICAgICBn cnViX2llZWUxMjc1X2ZpbGxyZWN0YW5nbGUgKHNjcmVlbiwgdG1wWzFdICYgOCA/IDUgOiAw LAorICAgICAgICAgICAgICAgICAgNDUsIDE1LCAxMCwgMTApOworICAgICAgICAgICAgICBn cnViX2llZWUxMjc1X2ZpbGxyZWN0YW5nbGUgKHNjcmVlbiwgdG1wWzFdICYgNCA/IDUgOiAw LAorICAgICAgICAgICAgICAgICAgNTUsIDE1LCAxMCwgMTApOworICAgICAgICAgICAgICBn cnViX2llZWUxMjc1X2ZpbGxyZWN0YW5nbGUgKHNjcmVlbiwgdG1wWzFdICYgMiA/IDUgOiAw LAorICAgICAgICAgICAgICAgICAgNjUsIDE1LCAxMCwgMTApOworICAgICAgICAgICAgICBn cnViX2llZWUxMjc1X2ZpbGxyZWN0YW5nbGUgKHNjcmVlbiwgdG1wWzFdICYgMSA/IDUgOiAw LAorICAgICAgICAgICAgICAgICAgNzUsIDE1LCAxMCwgMTApOworCisgICAgICAgICAgICAg IGdydWJfaWVlZTEyNzVfZmlsbHJlY3RhbmdsZSAoc2NyZWVuLCB0bXBbMl0gJiAxMjggPyAx IDogMCwKKyAgICAgICAgICAgICAgICAgIDUsIDI1LCAxMCwgMTApOworICAgICAgICAgICAg ICBncnViX2llZWUxMjc1X2ZpbGxyZWN0YW5nbGUgKHNjcmVlbiwgdG1wWzJdICYgNjQgPyAx IDogMCwKKyAgICAgICAgICAgICAgICAgIDE1LCAyNSwgMTAsIDEwKTsKKyAgICAgICAgICAg ICAgZ3J1Yl9pZWVlMTI3NV9maWxscmVjdGFuZ2xlIChzY3JlZW4sIHRtcFsyXSAmIDMyID8g NiA6IDAsCisgICAgICAgICAgICAgICAgICAyNSwgMjUsIDEwLCAxMCk7CisgICAgICAgICAg ICAgIGdydWJfaWVlZTEyNzVfZmlsbHJlY3RhbmdsZSAoc2NyZWVuLCB0bXBbMl0gJiAxNiA/ IDYgOiAwLAorICAgICAgICAgICAgICAgICAgMzUsIDI1LCAxMCwgMTApOworICAgICAgICAg ICAgICBncnViX2llZWUxMjc1X2ZpbGxyZWN0YW5nbGUgKHNjcmVlbiwgdG1wWzJdICYgOCA/ IDYgOiAwLAorICAgICAgICAgICAgICAgICAgNDUsIDI1LCAxMCwgMTApOworICAgICAgICAg ICAgICBncnViX2llZWUxMjc1X2ZpbGxyZWN0YW5nbGUgKHNjcmVlbiwgdG1wWzJdICYgNCA/ IDYgOiAwLAorICAgICAgICAgICAgICAgICAgNTUsIDI1LCAxMCwgMTApOworICAgICAgICAg ICAgICBncnViX2llZWUxMjc1X2ZpbGxyZWN0YW5nbGUgKHNjcmVlbiwgdG1wWzJdICYgMiA/ IDYgOiAwLAorICAgICAgICAgICAgICAgICAgNjUsIDI1LCAxMCwgMTApOworICAgICAgICAg ICAgICBncnViX2llZWUxMjc1X2ZpbGxyZWN0YW5nbGUgKHNjcmVlbiwgdG1wWzJdICYgMSA/ IDYgOiAwLAorICAgICAgICAgICAgICAgICAgNzUsIDI1LCAxMCwgMTApOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGdydWJfcHJpbnRmICgiVW5h YmxlIHRvIG9wZW4gbW91c2UgZGV2aWNlICFcbiIpOworI2lmIDAKKyAgICAgIGdydWJfaWVl ZTEyNzVfY2xvc2UgKHNjcmVlbik7IC8qIElmIHNjcmVlbiBpcyBjbG9zZWQsIGl0IGdvZXMg YmxhY2suICAqLworI2VuZGlmCisgICAgfQorICBncnViX3ByaW50ZigiRmluaXNoZWQgIVxu Iik7CisjaWZuZGVmIEdSVUJfRU1CRUQKKyAgcmV0dXJuIDA7CisjZW5kaWYgLyogISBHUlVC X0VNQkVEICovCit9CisKKwwKKyNpZmRlZiBHUlVCX0VNQkVECit2b2lkCitncnViX21vdXNl dGVzdF9pbml0ICh2b2lkKQoreworICBncnViX3Jlc2N1ZV9yZWdpc3Rlcl9jb21tYW5kICgi bW91c2V0ZXN0IiwgZ3J1Yl9jbWRfbW91c2V0ZXN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiTW91c2UgdGVzdCBwcm9ncmFtLiIpOworfQorCit2b2lkCitncnViX21v dXNldGVzdF9maW5pICh2b2lkKQoreworICBncnViX3Jlc2N1ZV91bnJlZ2lzdGVyX2NvbW1h bmQgKCJtb3VzZXRlc3QiKTsKK30KKyNlbHNlIC8qICEgR1JVQl9FTUJFRCAqLworI2lmZGVm IEdSVUJfVVRJTAordm9pZAorZ3J1Yl9tb3VzZXRlc3RfaW5pdCAodm9pZCkKK3sKKyAgZ3J1 Yl9yZWdpc3Rlcl9jb21tYW5kICgibW91c2V0ZXN0IiwgZ3J1Yl9jbWRfbW91c2V0ZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgIEdSVUJfQ09NTUFORF9GTEFHX0JPVEgsICJtb3Vz ZXRlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJNb3VzZSB0ZXN0IHByb2dyYW0u IiwgMCk7Cit9CisKK3ZvaWQKK2dydWJfbW91c2V0ZXN0X2ZpbmkgKHZvaWQpCit7CisgIGdy dWJfdW5yZWdpc3Rlcl9jb21tYW5kICgibW91c2V0ZXN0Iik7Cit9CisjZWxzZSAvKiAhIEdS VUJfVVRJTCAqLworR1JVQl9NT0RfSU5JVAoreworICAodm9pZCltb2Q7CQkJLyogVG8gc3Rv cCB3YXJuaW5nLiAqLworICBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJtb3VzZXRlc3QiLCBn cnViX2NtZF9tb3VzZXRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgR1JVQl9DT01N QU5EX0ZMQUdfQk9USCwgIm1vdXNldGVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg Ik1vdXNlIHRlc3QgcHJvZ3JhbS4iLCAwKTsKK30KKworR1JVQl9NT0RfRklOSQoreworICBn cnViX3VucmVnaXN0ZXJfY29tbWFuZCAoIm1vdXNldGVzdCIpOworfQorI2VuZGlmIC8qIEdS VUJfVVRJTCAqLworI2VuZGlmIC8qIEdSVUJfRU1CRUQgKi8KSW5kZXg6IGNvbmYvcG93ZXJw Yy1pZWVlMTI3NS5ybWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvZ3J1Yi9n cnViMi9jb25mL3Bvd2VycGMtaWVlZTEyNzUucm1rLHYKcmV0cmlldmluZyByZXZpc2lvbiAx LjM3CmRpZmYgLXUgLXAgLXIxLjM3IHBvd2VycGMtaWVlZTEyNzUucm1rCi0tLSBjb25mL3Bv d2VycGMtaWVlZTEyNzUucm1rCTIwIEF1ZyAyMDA1IDA3OjQ5OjAxIC0wMDAwCTEuMzcKKysr IGNvbmYvcG93ZXJwYy1pZWVlMTI3NS5ybWsJMjUgQXVnIDIwMDUgMDk6MDU6MjYgLTAwMDAK QEAgLTc1LDcgKzc1LDggQEAgcGtnZGF0YV9NT0RVTEVTID0gX2xpbnV4Lm1vZCBsaW51eC5t b2QgZgogCWhmcy5tb2QgamZzLm1vZCBub3JtYWwubW9kIGhlbGxvLm1vZCBmb250Lm1vZCBs cy5tb2QgXAogCWJvb3QubW9kIGNtcC5tb2QgY2F0Lm1vZCB0ZXJtaW5hbC5tb2QgZnNoZWxw Lm1vZCBhbWlnYS5tb2QgYXBwbGUubW9kIFwKIAlwYy5tb2Qgc3VzcGVuZC5tb2QgbG9vcGJh Y2subW9kIGhlbHAubW9kIHJlYm9vdC5tb2QgaGFsdC5tb2Qgc3VuLm1vZCBcCi0JZGVmYXVs dC5tb2QgdGltZW91dC5tb2QgY29uZmlnZmlsZS5tb2Qgc2VhcmNoLm1vZAorCWRlZmF1bHQu bW9kIHRpbWVvdXQubW9kIGNvbmZpZ2ZpbGUubW9kIHNlYXJjaC5tb2QgbWFuZGVsYnJvdC5t b2QgXAorCW1vdXNldGVzdC5tb2QgZmIubW9kCiAKICMgRm9yIGZzaGVscC5tb2QuCiBmc2hl bHBfbW9kX1NPVVJDRVMgPSBmcy9mc2hlbHAuYwpAQCAtMjA0LDMgKzIwNSwxNiBAQCBjb25m aWdmaWxlX21vZF9DRkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpCiAjIEZvciBzZWFyY2gubW9k Lgogc2VhcmNoX21vZF9TT1VSQ0VTID0gY29tbWFuZHMvc2VhcmNoLmMKIHNlYXJjaF9tb2Rf Q0ZMQUdTID0gJChDT01NT05fQ0ZMQUdTKQorCisjIEZvciBtYW5kZWxicm90Lm1vZAorbWFu ZGVsYnJvdF9tb2RfU09VUkNFUyA9IGNvbW1hbmRzL2llZWUxMjc1L21hbmRlbGJyb3QuYwor bWFuZGVsYnJvdF9tb2RfQ0ZMQUdTID0gJChDT01NT05fQ0ZMQUdTKQorCisjIEZvciBtb3Vz ZXRlc3QubW9kCittb3VzZXRlc3RfbW9kX1NPVVJDRVMgPSBjb21tYW5kcy9pZWVlMTI3NS9t b3VzZXRlc3QuYworbW91c2V0ZXN0X21vZF9DRkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpCisK KyMgRm9yIGZiLm1vZAorZmJfbW9kX1NPVVJDRVMgPSB2aWRlby9pZWVlMTI3NS9mYi5jIHZp ZGVvL2llZWUxMjc1L2ZicHJvcHMuYworZmJfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFH UykKKwpJbmRleDogY29uZi9zcGFyYzY0LWllZWUxMjc1LnJtawo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3Zzcm9vdC9ncnViL2dydWIyL2NvbmYvc3BhcmM2NC1pZWVlMTI3NS5ybWss dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIHNwYXJjNjQtaWVl ZTEyNzUucm1rCi0tLSBjb25mL3NwYXJjNjQtaWVlZTEyNzUucm1rCTIxIEF1ZyAyMDA1IDE5 OjMzOjE0IC0wMDAwCTEuMgorKysgY29uZi9zcGFyYzY0LWllZWUxMjc1LnJtawkyNSBBdWcg MjAwNSAwOTowNToyNyAtMDAwMApAQCAtMTIsNyArMTIsOCBAQCBERUZTWU1GSUxFUyArPSBr ZXJuZWxfc3ltcy5sc3QKIGdydWJvZl9IRUFERVJTID0gYXJnLmggYm9vdC5oIGRldmljZS5o IGRpc2suaCBkbC5oIGVsZi5oIGVudi5oIGVyci5oIFwKIAlmaWxlLmggZnMuaCBrZXJuZWwu aCBtaXNjLmggbW0uaCBuZXQuaCByZXNjdWUuaCBzeW1ib2wuaCBcCiAJdGVybS5oIHR5cGVz LmggbG9hZGVyLmggXAotCXBhcnRpdGlvbi5oIHBjX3BhcnRpdGlvbi5oIGllZWUxMjc1L2ll ZWUxMjc1LmggbWFjaGluZS90aW1lLmgKKwlwYXJ0aXRpb24uaCBwY19wYXJ0aXRpb24uaCBp ZWVlMTI3NS9pZWVlMTI3NS5oIG1hY2hpbmUvdGltZS5oIFwKKwlpZWVlMTI3NS9mYi5oIGll ZWUxMjc1L2ZicHJvcHMuaAogCiBncnVib2Zfc3ltbGlzdC5jOiAkKGFkZHByZWZpeCBpbmNs dWRlL2dydWIvLCQoZ3J1Ym9mX0hFQURFUlMpKSBnZW5zeW1saXN0LnNoCiAJc2ggJChzcmNk aXIpL2dlbnN5bWxpc3Quc2ggJChmaWx0ZXIgJS5oLCReKSA+ICRACkBAIC01OSw5ICs2MCwx MSBAQCBncnVib2ZfU09VUkNFUyA9IGtlcm4vc3BhcmM2NC9pZWVlMTI3NS9pCiAJa2Vybi9y ZXNjdWUuYyBrZXJuL3Rlcm0uYyB0ZXJtL2llZWUxMjc1L29mY29uc29sZS5jIFwKIAlrZXJu L3NwYXJjNjQvaWVlZTEyNzUvb3BlbmZ3LmMgZGlzay9pZWVlMTI3NS9vZmRpc2suYyBcCiAJ a2Vybi9wYXJ0aXRpb24uYyBrZXJuL2Vudi5jIGtlcm4vc3BhcmM2NC9kbC5jIGdydWJvZl9z eW1saXN0LmMgXAotCWtlcm4vc3BhcmM2NC9jYWNoZS5jCisJa2Vybi9zcGFyYzY0L2NhY2hl LmMgXAorCXZpZGVvL2llZWUxMjc1L2ZiLmMgdmlkZW8vaWVlZTEyNzUvZmJwcm9wcy5jIFwK Kwljb21tYW5kcy9pZWVlMTI3NS9tYW5kZWxicm90LmMgY29tbWFuZHMvaWVlZTEyNzUvbW91 c2V0ZXN0LmMKIGdydWJvZl9IRUFERVJTID0gZ3J1Yi9zcGFyYzY0L2llZWUxMjc1L2llZWUx Mjc1LmgKLWdydWJvZl9DRkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpCitncnVib2ZfQ0ZMQUdT ID0gJChDT01NT05fQ0ZMQUdTKSAtREdSVUJfRU1CRUQKIGdydWJvZl9BU0ZMQUdTID0gJChD T01NT05fQVNGTEFHUykKIGdydWJvZl9MREZMQUdTID0gLW02NCAtbm9zdGRsaWIgLVdsLC1O LC1UdGV4dCwweDIwMDAwMCwtQnN0YXRpYyAtWGxpbmtlciAtLW9mb3JtYXQgLVhsaW5rZXIg ZWxmNjQtc3BhcmMKIApAQCAtNzMsNyArNzYsOCBAQCBnZW5tb2RkZXBfU09VUkNFUyA9IHV0 aWwvZ2VubW9kZGVwLmMKICMJaGZzLm1vZCBqZnMubW9kIG5vcm1hbC5tb2QgaGVsbG8ubW9k IGZvbnQubW9kIGxzLm1vZCBcCiAjCWJvb3QubW9kIGNtcC5tb2QgY2F0Lm1vZCB0ZXJtaW5h bC5tb2QgZnNoZWxwLm1vZCBhbWlnYS5tb2QgYXBwbGUubW9kIFwKICMJcGMubW9kIHN1c3Bl bmQubW9kIGxvb3BiYWNrLm1vZCBoZWxwLm1vZCByZWJvb3QubW9kIGhhbHQubW9kIHN1bi5t b2QgXAotIwlkZWZhdWx0Lm1vZCB0aW1lb3V0Lm1vZCBjb25maWdmaWxlLm1vZCBzZWFyY2gu bW9kCisjCWRlZmF1bHQubW9kIHRpbWVvdXQubW9kIGNvbmZpZ2ZpbGUubW9kIHNlYXJjaC5t b2QgbWFuZGVsYnJvdC5tb2QgXAorIwltb3VzZXRlc3QubW9kIGZiLm1vZAogCiAjIEZvciBm c2hlbHAubW9kLgogZnNoZWxwX21vZF9TT1VSQ0VTID0gZnMvZnNoZWxwLmMKQEAgLTIwMiwz ICsyMDYsMTYgQEAgY29uZmlnZmlsZV9tb2RfQ0ZMQUdTID0gJChDT01NT05fQ0ZMQUdTKQog IyBGb3Igc2VhcmNoLm1vZC4KIHNlYXJjaF9tb2RfU09VUkNFUyA9IGNvbW1hbmRzL3NlYXJj aC5jCiBzZWFyY2hfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykKKworIyBGb3IgbWFu ZGVsYnJvdC5tb2QKK21hbmRlbGJyb3RfbW9kX1NPVVJDRVMgPSBjb21tYW5kcy9pZWVlMTI3 NS9tYW5kZWxicm90LmMKK21hbmRlbGJyb3RfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFH UykKKworIyBGb3IgbW91c2V0ZXN0Lm1vZAorbW91c2V0ZXN0X21vZF9TT1VSQ0VTID0gY29t bWFuZHMvaWVlZTEyNzUvbW91c2V0ZXN0LmMKK21vdXNldGVzdF9tb2RfQ0ZMQUdTID0gJChD T01NT05fQ0ZMQUdTKQorCisjIEZvciBmYi5tb2QKK2ZiX21vZF9TT1VSQ0VTID0gdmlkZW8v aWVlZTEyNzUvZmIuYyB2aWRlby9pZWVlMTI3NS9mYnByb3BzLmMKK2ZiX21vZF9DRkxBR1Mg PSAkKENPTU1PTl9DRkxBR1MpCisKSW5kZXg6IGluY2x1ZGUvZ3J1Yi9pZWVlMTI3NS9mYi5o Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGluY2x1ZGUvZ3J1Yi9pZWVlMTI3NS9mYi5oCmRp ZmYgLU4gaW5jbHVkZS9ncnViL2llZWUxMjc1L2ZiLmgKLS0tIC9kZXYvbnVsbAkxIEphbiAx OTcwIDAwOjAwOjAwIC0wMDAwCisrKyBpbmNsdWRlL2dydWIvaWVlZTEyNzUvZmIuaAkyNSBB dWcgMjAwNSAwOTowNToyOSAtMDAwMApAQCAtMCwwICsxLDU0IEBACisvKiBmYi5oIC0gQWNj ZXNzIHRoZSBPcGVuIEZpcm13YXJlIGNsaWVudCBpbnRlcmZhY2UgLSBmcmFtZWJ1ZmZlcgor ICogZnVuY3Rpb25zLiAgKi8KKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9v dGxvYWRlcgorICogIENvcHlyaWdodCAoQykgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFz cyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIEdSVUJf SUVFRTEyNzVfRkJfSEVBREVSCisjZGVmaW5lIEdSVUJfSUVFRTEyNzVfRkJfSEVBREVSCTEK KworI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KKyNpbmNsdWRlIDxncnViL2llZWUxMjc1L2ll ZWUxMjc1Lmg+CisKK2ludCBFWFBPUlRfRlVOQyhncnViX2llZWUxMjc1X3NldGNvbG9yKSAo Z3J1Yl9pZWVlMTI3NV9paGFuZGxlX3QgaWhhbmRsZSwKKyAgICBncnViX2llZWUxMjc1X2Nl bGxfdCBpbmRleCwgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgcmVkLAorICAgIGdydWJfaWVlZTEy NzVfY2VsbF90IGdyZWVuLCBncnViX2llZWUxMjc1X2NlbGxfdCBibHVlKTsKK2ludCBFWFBP UlRfRlVOQyhncnViX2llZWUxMjc1X2dldGNvbG9yKSAoZ3J1Yl9pZWVlMTI3NV9paGFuZGxl X3QgaWhhbmRsZSwKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCBpbmRleCwgZ3J1Yl9pZWVl MTI3NV9jZWxsX3QgKnJlZCwKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCAqZ3JlZW4sIGdy dWJfaWVlZTEyNzVfY2VsbF90ICpibHVlKTsKKy8qIFhYWDogVGVzdCBtZSAhICAqLworaW50 IEVYUE9SVF9GVU5DKGdydWJfaWVlZTEyNzVfc2V0Y29sb3JzKSAoZ3J1Yl9pZWVlMTI3NV9p aGFuZGxlX3QgaWhhbmRsZSwKKyAgICBjb25zdCB2b2lkICphZHIsIGdydWJfaWVlZTEyNzVf Y2VsbF90IGluZGV4LCBncnViX2llZWUxMjc1X2NlbGxfdCBpbmRpY2VzKTsKKy8qIFhYWDog VGVzdCBtZSAhICAqLworaW50IEVYUE9SVF9GVU5DKGdydWJfaWVlZTEyNzVfZ2V0Y29sb3Jz KSAoZ3J1Yl9pZWVlMTI3NV9paGFuZGxlX3QgaWhhbmRsZSwKKyAgICB2b2lkICphZHIsIGdy dWJfaWVlZTEyNzVfY2VsbF90IGluZGV4LCBncnViX2llZWUxMjc1X2NlbGxfdCBpbmRpY2Vz KTsKKy8qIFhYWDogVGVzdCBtZSAhICAqLworaW50IEVYUE9SVF9GVU5DKGdydWJfaWVlZTEy NzVfZHJhd3JlY3RhbmdsZSkgKGdydWJfaWVlZTEyNzVfaWhhbmRsZV90IGloYW5kbGUsCisg ICAgY29uc3Qgdm9pZCAqaW1hZ2UsIGdydWJfaWVlZTEyNzVfY2VsbF90IGxlZnQsIGdydWJf aWVlZTEyNzVfY2VsbF90IHRvcCwKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCB3aWR0aCwg Z3J1Yl9pZWVlMTI3NV9jZWxsX3QgaGVpZ2h0KTsKKy8qIFhYWDogVGVzdCBtZSAhICAqLwor aW50IEVYUE9SVF9GVU5DKGdydWJfaWVlZTEyNzVfZmlsbHJlY3RhbmdsZSkgKGdydWJfaWVl ZTEyNzVfaWhhbmRsZV90IGloYW5kbGUsCisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgY29s b3IsIGdydWJfaWVlZTEyNzVfY2VsbF90IGxlZnQsCisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxs X3QgdG9wLCBncnViX2llZWUxMjc1X2NlbGxfdCB3aWR0aCwKKyAgICBncnViX2llZWUxMjc1 X2NlbGxfdCBoZWlnaHQpOworaW50IEVYUE9SVF9GVU5DKGdydWJfaWVlZTEyNzVfcmVhZHJl Y3RhbmdsZSkgKGdydWJfaWVlZTEyNzVfaWhhbmRsZV90IGloYW5kbGUsCisgICAgdm9pZCAq KmltYWdlLCBncnViX2llZWUxMjc1X2NlbGxfdCBsZWZ0LCBncnViX2llZWUxMjc1X2NlbGxf dCB0b3AsCisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qgd2lkdGgsIGdydWJfaWVlZTEyNzVf Y2VsbF90IGhlaWdodCk7IAorLyogWFhYOiBUZXN0IG1lICEgICovCisKKyNlbmRpZiAvKiAh IEdSVUJfSUVFRTEyNzVfRkJfSEVBREVSICovCkluZGV4OiBpbmNsdWRlL2dydWIvaWVlZTEy NzUvZmJwcm9wcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGluY2x1ZGUvZ3J1Yi9pZWVl MTI3NS9mYnByb3BzLmgKZGlmZiAtTiBpbmNsdWRlL2dydWIvaWVlZTEyNzUvZmJwcm9wcy5o Ci0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgaW5jbHVkZS9n cnViL2llZWUxMjc1L2ZicHJvcHMuaAkyNSBBdWcgMjAwNSAwOTowNToyOSAtMDAwMApAQCAt MCwwICsxLDQzIEBACisvKiBmYnByb3BzLmggLSBBY2Nlc3MgdGhlIE9wZW4gRmlybXdhcmUg Y2xpZW50IGludGVyZmFjZSAtICBmcmFtZWJ1ZmZlcgorICogcHJvcGVydGllcy4gICovCisv KgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmln aHQgKEMpIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAq ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1B IDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBHUlVCX0lFRUUxMjc1X0ZCUFJPUFNfSEVB REVSCisjZGVmaW5lIEdSVUJfSUVFRTEyNzVfRkJQUk9QU19IRUFERVIJMQorCisjaW5jbHVk ZSA8Z3J1Yi90eXBlcy5oPgorI2luY2x1ZGUgPGdydWIvaWVlZTEyNzUvaWVlZTEyNzUuaD4K Kwordm9pZCAqIEVYUE9SVF9GVU5DKGdydWJfaWVlZTEyNzVfZGVjb2RlX2FkZHJlc3MpICh2 b2lkICphZGRyZXNzKTsKKyAvKiBYWFg6IFRlc3QgbWUgISAgKi8KK3ZvaWQgKiBFWFBPUlRf RlVOQyhncnViX2llZWUxMjc1X2dldHByb3BlcnR5X2FkZHIpCisgIChncnViX2llZWUxMjc1 X3BoYW5kbGVfdCBwaGFuZGxlLCBjaGFyICpwcm9wZXJ0eSk7IC8qIFhYWDogVGVzdCBtZSAh ICAqLwordm9pZCAqIEVYUE9SVF9GVU5DKGdydWJfaWVlZTEyNzVfZmJfYWRkcikKKyAgKGdy dWJfaWVlZTEyNzVfcGhhbmRsZV90IHBoYW5kbGUpOyAvKiBYWFg6IFRlc3QgbWUgISAgKi8K K2ludCBFWFBPUlRfRlVOQyhncnViX2llZWUxMjc1X2dldHByb3BlcnR5XzQpIChncnViX2ll ZWUxMjc1X3BoYW5kbGVfdCBwaGFuZGxlLAorICAgIGNoYXIgKnByb3BlcnR5KTsKK2ludCBF WFBPUlRfRlVOQyhncnViX2llZWUxMjc1X2ZiX2hlaWdodCkgKGdydWJfaWVlZTEyNzVfcGhh bmRsZV90IHBoYW5kbGUpOworaW50IEVYUE9SVF9GVU5DKGdydWJfaWVlZTEyNzVfZmJfd2lk dGgpIChncnViX2llZWUxMjc1X3BoYW5kbGVfdCBwaGFuZGxlKTsKKy8qaW50IEVYUE9SVF9O TyFfRlVOQyhncnViX2llZWUxMjc1X2ZiX2xpbmVieXRlcykKKyAgKGdydWJfaWVlZTEyNzVf cGhhbmRsZV90IHBoYW5kbGUpOyAqLy8qIFhYWDogVGVzdCBtZSAhICAqLworLyppbnQgRVhQ T1JUX05PIV9GVU5DKGdydWJfaWVlZTEyNzVfZmJfZGVwdGgpCisgIChncnViX2llZWUxMjc1 X3BoYW5kbGVfdCBwaGFuZGxlKTsqLy8qIFhYWDogVGVzdCBtZSAhICAqLworCisjZW5kaWYg LyogISBHUlVCX0lFRUUxMjc1X0ZCUFJPUFNfSEVBREVSICovCkluZGV4OiBrZXJuL3NwYXJj NjQvaWVlZTEyNzUvaW5pdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L2dy dWIvZ3J1YjIva2Vybi9zcGFyYzY0L2llZWUxMjc1L2luaXQuYyx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEgaW5pdC5jCi0tLSBrZXJuL3NwYXJjNjQvaWVl ZTEyNzUvaW5pdC5jCTIxIEF1ZyAyMDA1IDE4OjQyOjU1IC0wMDAwCTEuMQorKysga2Vybi9z cGFyYzY0L2llZWUxMjc1L2luaXQuYwkyNSBBdWcgMjAwNSAwOTowNTozMCAtMDAwMApAQCAt MjA1LDExICsyMDUsMjAgQEAgZ3J1Yl9tYWNoaW5lX2luaXQgKHZvaWQpCiAJfQogICAgIH0K IAorI2lmZGVmIEdSVUJfRU1CRUQKKyAgZ3J1Yl9tYW5kZWxicm90X2luaXQgKCk7CisgIGdy dWJfbW91c2V0ZXN0X2luaXQgKCk7CisjZW5kaWYgLyogR1JVQl9FTUJFRCAqLworCiB9CiAK IHZvaWQKIGdydWJfbWFjaGluZV9maW5pICh2b2lkKQogeworI2lmZGVmIEdSVUJfRU1CRUQK KyAgZ3J1Yl9tb3VzZXRlc3RfZmluaSAoKTsKKyAgZ3J1Yl9tYW5kZWxicm90X2ZpbmkgKCk7 CisjZW5kaWYgLyogR1JVQl9FTUJFRCAqLwogICBncnViX29mZGlza19maW5pICgpOwogICBn cnViX2NvbnNvbGVfZmluaSAoKTsKIH0KSW5kZXg6IHZpZGVvL2llZWUxMjc1L2ZiLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogdmlkZW8vaWVlZTEyNzUvZmIuYwpkaWZmIC1OIHZpZGVv L2llZWUxMjc1L2ZiLmMKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAw CisrKyB2aWRlby9pZWVlMTI3NS9mYi5jCTI1IEF1ZyAyMDA1IDA5OjA1OjMxIC0wMDAwCkBA IC0wLDAgKzEsMjIyIEBACisvKiBmYi5jIC0gQWNjZXNzIHRoZSBPcGVuIEZpcm13YXJlIGNs aWVudCBpbnRlcmZhY2UgLSAgZnJhbWVidWZmZXIKKyAqIGZ1bmN0aW9ucy4gICovCisvKgor ICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQg KEMpIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAy MTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGdydWIvaWVlZTEyNzUvZmIuaD4KKworaW50 CitncnViX2llZWUxMjc1X3NldGNvbG9yIChncnViX2llZWUxMjc1X2loYW5kbGVfdCBpaGFu ZGxlLAorICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGluZGV4LCBncnViX2llZWUxMjc1X2Nl bGxfdCByZWQsCisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgZ3JlZW4sIGdydWJfaWVlZTEy NzVfY2VsbF90IGJsdWUpCit7CisgIHN0cnVjdCB3cml0ZV9hcmdzIHsKKyAgICBzdHJ1Y3Qg Z3J1Yl9pZWVlMTI3NV9jb21tb25faGRyIGNvbW1vbjsKKyAgICBjaGFyICptZXRob2Q7Cisg ICAgZ3J1Yl9pZWVlMTI3NV9paGFuZGxlX3QgaWhhbmRsZTsKKyAgICBncnViX2llZWUxMjc1 X2NlbGxfdCBpbmRleDsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCBibHVlOworICAgIGdy dWJfaWVlZTEyNzVfY2VsbF90IGdyZWVuOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHJl ZDsKKyAgfSBhcmdzOworCisgIElOSVRfSUVFRTEyNzVfQ09NTU9OICgmYXJncy5jb21tb24s ICJjYWxsLW1ldGhvZCIsIDYsIDApOworICBhcmdzLm1ldGhvZCA9ICJjb2xvciEiOworICBh cmdzLmloYW5kbGUgPSBpaGFuZGxlOworICBhcmdzLmluZGV4ID0gaW5kZXg7CisgIGFyZ3Mu cmVkID0gcmVkOworICBhcmdzLmdyZWVuID0gZ3JlZW47CisgIGFyZ3MuYmx1ZSA9IGJsdWU7 CisKKyAgaWYgKElFRUUxMjc1X0NBTExfRU5UUllfRk4gKCZhcmdzKSA9PSAtMSkKKyAgICBy ZXR1cm4gLTE7CisgIHJldHVybiAwOworfQorCitpbnQKK2dydWJfaWVlZTEyNzVfZ2V0Y29s b3IgKGdydWJfaWVlZTEyNzVfaWhhbmRsZV90IGloYW5kbGUsCisgICAgZ3J1Yl9pZWVlMTI3 NV9jZWxsX3QgaW5kZXgsIGdydWJfaWVlZTEyNzVfY2VsbF90ICpyZWQsCisgICAgZ3J1Yl9p ZWVlMTI3NV9jZWxsX3QgKmdyZWVuLCBncnViX2llZWUxMjc1X2NlbGxfdCAqYmx1ZSkKK3sK KyAgc3RydWN0IHdyaXRlX2FyZ3MgeworICAgIHN0cnVjdCBncnViX2llZWUxMjc1X2NvbW1v bl9oZHIgY29tbW9uOworICAgIGNoYXIgKm1ldGhvZDsKKyAgICBncnViX2llZWUxMjc1X2lo YW5kbGVfdCBpaGFuZGxlOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGluZGV4OworICAg IGdydWJfaWVlZTEyNzVfY2VsbF90IGJsdWU7IC8qIFhYWDogUmlnaHQgb3JkZXIgZm9yIHJl dHVybiB2YWx1ZXMgPyAgKi8KKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCBncmVlbjsvKiAo aGVyZSwgdG9wIG9mIHN0YWNrIGxhc3QpICovCisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qg cmVkOworICB9IGFyZ3M7CisKKyAgSU5JVF9JRUVFMTI3NV9DT01NT04gKCZhcmdzLmNvbW1v biwgImNhbGwtbWV0aG9kIiwgMywgMyk7CisgIGFyZ3MubWV0aG9kID0gImNvbG9yQCI7Cisg IGFyZ3MuaWhhbmRsZSA9IGloYW5kbGU7CisgIGFyZ3MuaW5kZXggPSBpbmRleDsKKworICBp ZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9GTiAoJmFyZ3MpID09IC0xKQorICAgIHJldHVybiAt MTsKKworICAqcmVkID0gYXJncy5yZWQ7CisgICpncmVlbiA9IGFyZ3MuZ3JlZW47CisgICpi bHVlID0gYXJncy5ibHVlOworCisgIHJldHVybiAwOworfQorCitpbnQKK2dydWJfaWVlZTEy NzVfc2V0Y29sb3JzIChncnViX2llZWUxMjc1X2loYW5kbGVfdCBpaGFuZGxlLCBjb25zdCB2 b2lkICphZHIsCisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgaW5kZXgsIGdydWJfaWVlZTEy NzVfY2VsbF90IGluZGljZXMpCit7CisgIHN0cnVjdCB3cml0ZV9hcmdzIHsKKyAgICBzdHJ1 Y3QgZ3J1Yl9pZWVlMTI3NV9jb21tb25faGRyIGNvbW1vbjsKKyAgICBjaGFyICptZXRob2Q7 CisgICAgZ3J1Yl9pZWVlMTI3NV9paGFuZGxlX3QgaWhhbmRsZTsKKyAgICBncnViX2llZWUx Mjc1X2NlbGxfdCBpbmRpY2VzOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGluZGV4Owor ICAgIGNvbnN0IHZvaWQgKmFkcjsKKyAgfSBhcmdzOworCisgIElOSVRfSUVFRTEyNzVfQ09N TU9OICgmYXJncy5jb21tb24sICJjYWxsLW1ldGhvZCIsIDMsIDApOworICBhcmdzLm1ldGhv ZCA9ICJzZXQtY29sb3JzIjsKKyAgYXJncy5paGFuZGxlID0gaWhhbmRsZTsKKyAgYXJncy5h ZHIgPSBhZHI7CisgIGFyZ3MuaW5kZXggPSBpbmRleDsKKyAgYXJncy5pbmRpY2VzID0gaW5k aWNlczsKKworICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9GTiAoJmFyZ3MpID09IC0xKQor ICAgIHJldHVybiAtMTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZ3J1Yl9pZWVlMTI3NV9n ZXRjb2xvcnMgKGdydWJfaWVlZTEyNzVfaWhhbmRsZV90IGloYW5kbGUsIHZvaWQgKmFkciwK KyAgICBncnViX2llZWUxMjc1X2NlbGxfdCBpbmRleCwgZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qg aW5kaWNlcykKK3sKKyAgc3RydWN0IHdyaXRlX2FyZ3MgeworICAgIHN0cnVjdCBncnViX2ll ZWUxMjc1X2NvbW1vbl9oZHIgY29tbW9uOworICAgIGNoYXIgKm1ldGhvZDsKKyAgICBncnVi X2llZWUxMjc1X2loYW5kbGVfdCBpaGFuZGxlOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90 IGluZGljZXM7CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgaW5kZXg7CisgICAgdm9pZCAq YWRyOworICB9IGFyZ3M7CisKKyAgSU5JVF9JRUVFMTI3NV9DT01NT04gKCZhcmdzLmNvbW1v biwgImNhbGwtbWV0aG9kIiwgMywgMCk7CisgIGFyZ3MubWV0aG9kID0gImdldC1jb2xvcnMi OworICBhcmdzLmloYW5kbGUgPSBpaGFuZGxlOworICBhcmdzLmFkciA9IGFkcjsKKyAgYXJn cy5pbmRleCA9IGluZGV4OworICBhcmdzLmluZGljZXMgPSBpbmRpY2VzOworCisgIGlmIChJ RUVFMTI3NV9DQUxMX0VOVFJZX0ZOICgmYXJncykgPT0gLTEpCisgICAgcmV0dXJuIC0xOwor ICByZXR1cm4gMDsKK30KKworaW50CitncnViX2llZWUxMjc1X2RyYXdyZWN0YW5nbGUgKGdy dWJfaWVlZTEyNzVfaWhhbmRsZV90IGloYW5kbGUsIGNvbnN0IHZvaWQgKmltYWdlLAorICAg IGdydWJfaWVlZTEyNzVfY2VsbF90IGxlZnQsIGdydWJfaWVlZTEyNzVfY2VsbF90IHRvcCwK KyAgICBncnViX2llZWUxMjc1X2NlbGxfdCB3aWR0aCwgZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qg aGVpZ2h0KQoreworICBzdHJ1Y3Qgd3JpdGVfYXJncyB7CisgICAgc3RydWN0IGdydWJfaWVl ZTEyNzVfY29tbW9uX2hkciBjb21tb247CisgICAgY2hhciAqbWV0aG9kOworICAgIGdydWJf aWVlZTEyNzVfaWhhbmRsZV90IGloYW5kbGU7CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qg aGVpZ2h0OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHdpZHRoOworICAgIGdydWJfaWVl ZTEyNzVfY2VsbF90IHRvcDsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCBsZWZ0OworICAg IGNvbnN0IHZvaWQgKmltYWdlOworICB9IGFyZ3M7CisKKyAgSU5JVF9JRUVFMTI3NV9DT01N T04gKCZhcmdzLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgNywgMCk7CisgIGFyZ3MubWV0aG9k ID0gImRyYXctcmVjdGFuZ2xlIjsKKyAgYXJncy5paGFuZGxlID0gaWhhbmRsZTsKKyAgYXJn cy5pbWFnZSA9IGltYWdlOworICBhcmdzLmxlZnQgPSBsZWZ0OworICBhcmdzLnRvcCA9IHRv cDsKKyAgYXJncy53aWR0aCA9IHdpZHRoOworICBhcmdzLmhlaWdodCA9IGhlaWdodDsKKwor ICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9GTiAoJmFyZ3MpID09IC0xKQorICAgIHJldHVy biAtMTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorZ3J1Yl9pZWVlMTI3NV9maWxscmVjdGFu Z2xlIChncnViX2llZWUxMjc1X2loYW5kbGVfdCBpaGFuZGxlLAorICAgIGdydWJfaWVlZTEy NzVfY2VsbF90IGNvbG9yLCBncnViX2llZWUxMjc1X2NlbGxfdCBsZWZ0LAorICAgIGdydWJf aWVlZTEyNzVfY2VsbF90IHRvcCwgZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qgd2lkdGgsCisgICAg Z3J1Yl9pZWVlMTI3NV9jZWxsX3QgaGVpZ2h0KQoreworICBzdHJ1Y3Qgd3JpdGVfYXJncyB7 CisgICAgc3RydWN0IGdydWJfaWVlZTEyNzVfY29tbW9uX2hkciBjb21tb247CisgICAgY2hh ciAqbWV0aG9kOworICAgIGdydWJfaWVlZTEyNzVfaWhhbmRsZV90IGloYW5kbGU7CisgICAg Z3J1Yl9pZWVlMTI3NV9jZWxsX3QgaGVpZ2h0OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90 IHdpZHRoOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHRvcDsKKyAgICBncnViX2llZWUx Mjc1X2NlbGxfdCBsZWZ0OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGNvbG9yOworICB9 IGFyZ3M7CisKKyAgSU5JVF9JRUVFMTI3NV9DT01NT04gKCZhcmdzLmNvbW1vbiwgImNhbGwt bWV0aG9kIiwgNywgMCk7CisgIGFyZ3MubWV0aG9kID0gImZpbGwtcmVjdGFuZ2xlIjsKKyAg YXJncy5paGFuZGxlID0gaWhhbmRsZTsKKyAgYXJncy5jb2xvciA9IGNvbG9yOworICBhcmdz LmxlZnQgPSBsZWZ0OworICBhcmdzLnRvcCA9IHRvcDsKKyAgYXJncy53aWR0aCA9IHdpZHRo OworICBhcmdzLmhlaWdodCA9IGhlaWdodDsKKworICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRS WV9GTiAoJmFyZ3MpID09IC0xKQorICAgIHJldHVybiAtMTsKKyAgcmV0dXJuIDA7Cit9CisK K2ludAorZ3J1Yl9pZWVlMTI3NV9yZWFkcmVjdGFuZ2xlIChncnViX2llZWUxMjc1X2loYW5k bGVfdCBpaGFuZGxlLCB2b2lkICoqaW1hZ2UsCisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qg bGVmdCwgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgdG9wLAorICAgIGdydWJfaWVlZTEyNzVfY2Vs bF90IHdpZHRoLCBncnViX2llZWUxMjc1X2NlbGxfdCBoZWlnaHQpCit7CisgIHN0cnVjdCB3 cml0ZV9hcmdzIHsKKyAgICBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9jb21tb25faGRyIGNvbW1v bjsKKyAgICBjaGFyICptZXRob2Q7CisgICAgZ3J1Yl9pZWVlMTI3NV9paGFuZGxlX3QgaWhh bmRsZTsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCBoZWlnaHQ7CisgICAgZ3J1Yl9pZWVl MTI3NV9jZWxsX3Qgd2lkdGg7CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgdG9wOworICAg IGdydWJfaWVlZTEyNzVfY2VsbF90IGxlZnQ7CisgICAgdm9pZCAqKmltYWdlOworICB9IGFy Z3M7CisKKyAgSU5JVF9JRUVFMTI3NV9DT01NT04gKCZhcmdzLmNvbW1vbiwgImNhbGwtbWV0 aG9kIiwgNywgMCk7CisgIGFyZ3MubWV0aG9kID0gInJlYWQtcmVjdGFuZ2xlIjsKKyAgYXJn cy5paGFuZGxlID0gaWhhbmRsZTsKKyAgYXJncy5pbWFnZSA9IGltYWdlOworICBhcmdzLmxl ZnQgPSBsZWZ0OworICBhcmdzLnRvcCA9IHRvcDsKKyAgYXJncy53aWR0aCA9IHdpZHRoOwor ICBhcmdzLmhlaWdodCA9IGhlaWdodDsKKworICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9G TiAoJmFyZ3MpID09IC0xKQorICAgIHJldHVybiAtMTsKKyAgcmV0dXJuIDA7Cit9CisKSW5k ZXg6IHZpZGVvL2llZWUxMjc1L2ZicHJvcHMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB2 aWRlby9pZWVlMTI3NS9mYnByb3BzLmMKZGlmZiAtTiB2aWRlby9pZWVlMTI3NS9mYnByb3Bz LmMKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyB2aWRlby9p ZWVlMTI3NS9mYnByb3BzLmMJMjUgQXVnIDIwMDUgMDk6MDU6MzEgLTAwMDAKQEAgLTAsMCAr MSw5NiBAQAorLyogZmJwcm9wcy5jIC0gQWNjZXNzIHRoZSBPcGVuIEZpcm13YXJlIGNsaWVu dCBpbnRlcmZhY2UgLSAgZnJhbWVidWZmZXIKKyAqIHByb3BlcnRpZXMuICAqLworLyoKKyAq ICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChD KSAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor ICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEz OSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxncnViL2llZWUxMjc1L2ZicHJvcHMuaD4KKwor dm9pZCAqCitncnViX2llZWUxMjc1X2RlY29kZV9hZGRyZXNzICh2b2lkICphZGRyZXNzKQor eworICB1bmlvbiB7CisgICAgdm9pZCAqYWRyOworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZXNb R1JVQl9IT1NUX1NJWkVPRl9WT0lEX1BdOworICB9IGZyb20sIHRvOworICBpbnQgcG9zOwor ICBmcm9tLmFkciA9IGFkZHJlc3M7CisgIGZvciAocG9zID0gMDsgcG9zIDwgR1JVQl9IT1NU X1NJWkVPRl9WT0lEX1A7IHBvcysrKQorICAgIHRvLmJ5dGVzW3Bvc10gPSBmcm9tLmJ5dGVz W0dSVUJfSE9TVF9TSVpFT0ZfVk9JRF9QIC0gcG9zIC0gMV07CisgIHJldHVybiB0by5hZHI7 Cit9CisKK2ludAorZ3J1Yl9pZWVlMTI3NV9nZXRwcm9wZXJ0eV80IChncnViX2llZWUxMjc1 X3BoYW5kbGVfdCBwaGFuZGxlLAorICAgIGNoYXIgKnByb3BlcnR5KQoreworICB1bnNpZ25l ZCBjaGFyIHRtcFs0XTsKKyAgZ3J1Yl9zc2l6ZV90IGFjdHVhbDsKKyAgaWYgKGdydWJfaWVl ZTEyNzVfZ2V0X3Byb3BlcnR5IChwaGFuZGxlLCBwcm9wZXJ0eSwgdG1wLCBzaXplb2YgKHRt cCksICZhY3R1YWwpCisgICAgICB8fCBhY3R1YWwgIT0gc2l6ZW9mICh0bXApKQorICAgIHJl dHVybiAtMTsKKyAgcmV0dXJuIGdydWJfaWVlZTEyNzVfZGVjb2RlX2ludF80ICh0bXApOwor fQorCit2b2lkICoKK2dydWJfaWVlZTEyNzVfZ2V0cHJvcGVydHlfYWRkciAoZ3J1Yl9pZWVl MTI3NV9waGFuZGxlX3QgcGhhbmRsZSwKKyAgICBjaGFyICpwcm9wZXJ0eSkKK3sKKyAgdm9p ZCAqdG1wOworLyogIHVuc2lnbmVkIGNoYXIgdG1wWzRdOyovCisgIGdydWJfc3NpemVfdCBh Y3R1YWw7CisgIGlmIChncnViX2llZWUxMjc1X2dldF9wcm9wZXJ0eSAocGhhbmRsZSwgcHJv cGVydHksICZ0bXAsIHNpemVvZiAodG1wKSwgJmFjdHVhbCkKKyAgICAgIHx8IGFjdHVhbCAh PSBzaXplb2YgKHRtcCkpCisgICAgcmV0dXJuICh2b2lkICopIC0xOworICByZXR1cm4gZ3J1 Yl9pZWVlMTI3NV9kZWNvZGVfYWRkcmVzcyAodG1wKTsKKy8qICByZXR1cm4gKHZvaWQgKikg Z3J1Yl9pZWVlMTI3NV9kZWNvZGVfaW50XzQgKHRtcCk7Ki8KK30KKwordm9pZCAqCitncnVi X2llZWUxMjc1X2ZiX2FkZHIgKGdydWJfaWVlZTEyNzVfcGhhbmRsZV90IHBoYW5kbGUpCit7 CisgIHJldHVybiAodm9pZCAqKSBncnViX2llZWUxMjc1X2dldHByb3BlcnR5XzQgKHBoYW5k bGUsICJhZGRyZXNzIik7CisgIC8qIFhYWDogdGhpcyBhZGRyZXNzIGlzIDQgYnl0ZXMgbG9u ZyBvbmx5LiAgKi8KK30KKworaW50CitncnViX2llZWUxMjc1X2ZiX2hlaWdodChncnViX2ll ZWUxMjc1X3BoYW5kbGVfdCBwaGFuZGxlKQoreworICByZXR1cm4gZ3J1Yl9pZWVlMTI3NV9n ZXRwcm9wZXJ0eV80IChwaGFuZGxlLCAiaGVpZ2h0Iik7Cit9CisKK2ludAorZ3J1Yl9pZWVl MTI3NV9mYl93aWR0aChncnViX2llZWUxMjc1X3BoYW5kbGVfdCBwaGFuZGxlKQoreworICBy ZXR1cm4gZ3J1Yl9pZWVlMTI3NV9nZXRwcm9wZXJ0eV80IChwaGFuZGxlLCAid2lkdGgiKTsK K30KKworLyogWFhYOiBOb3QgYWx3YXlzIHN1cHBvcnRlZC4gICovCisvKmludAorZ3J1Yl9p ZWVlMTI3NV9mYl9saW5lYnl0ZXMoZ3J1Yl9pZWVlMTI3NV9waGFuZGxlX3QgcGhhbmRsZSkK K3sKKyAgcmV0dXJuIGdydWJfaWVlZTEyNzVfZ2V0cHJvcGVydHlfNCAocGhhbmRsZSwgImxp bmVieXRlcyIpOworfSovCisKKy8qIFhYWDogTm90IGFsd2F5cyBzdXBwb3J0ZWQuICAqLwor LyppbnQKK2dydWJfaWVlZTEyNzVfZmJfZGVwdGgoZ3J1Yl9pZWVlMTI3NV9waGFuZGxlX3Qg cGhhbmRsZSkKK3sKKyAgcmV0dXJuIGdydWJfaWVlZTEyNzVfZ2V0cHJvcGVydHlfNCAocGhh bmRsZSwgImRlcHRoIik7Cit9Ki8KKwo= --------------000206080104050109080501-- ___________________________________________________________________________ Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger Téléchargez cette version sur http://fr.messenger.yahoo.com