From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Pip Cet Newsgroups: gmane.emacs.devel Subject: Re: Ligatures (was: Unify the Platforms: Cairo+FreeType+Harfbuzz Everywhere (except TTY)) Date: Tue, 19 May 2020 21:43:49 +0000 Message-ID: References: <20200517165953.000044d2@web.de> <83lflqblp0.fsf@gnu.org> <83ftbybio3.fsf@gnu.org> <83zha69xs2.fsf@gnu.org> <83367x9qeq.fsf@gnu.org> <0ccae2a4-533b-d15c-2884-c2f00b067776@gmail.com> <83wo5987mk.fsf@gnu.org> <99d4beed-88ae-b5cd-3ecb-a44325c8a1dc@gmail.com> <20200518215908.GA57594@breton.holly.idiocy.org> <83mu6481v3.fsf@gnu.org> <75a90563-51b4-d3b8-4832-fc0e2542af0d@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000f6178205a6072e3c" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="73833"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Eli Zaretskii , Alan Third , emacs-devel@gnu.org To: =?UTF-8?Q?Cl=C3=A9ment_Pit=2DClaudel?= Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue May 19 23:45:08 2020 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jbA2t-000J3r-S7 for ged-emacs-devel@m.gmane-mx.org; Tue, 19 May 2020 23:45:08 +0200 Original-Received: from localhost ([::1]:39038 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbA2s-0004p3-RQ for ged-emacs-devel@m.gmane-mx.org; Tue, 19 May 2020 17:45:06 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:39592) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbA2I-0003iP-S8 for emacs-devel@gnu.org; Tue, 19 May 2020 17:44:30 -0400 Original-Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]:37318) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jbA2G-0000tk-Sm; Tue, 19 May 2020 17:44:30 -0400 Original-Received: by mail-wm1-x332.google.com with SMTP id z72so824180wmc.2; Tue, 19 May 2020 14:44:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=9kFm5cCbOqu66YkRRpwavMijRJvCmaOBRHB/5MhoRgg=; b=UTNnU/YfifS5sR4Qt57yuxSij+W0tYSaQkwIycs8tjTcm9o4vPWuBsxVl4RK5vgMt7 x296Xn6syROa7koNIt4cAh0rBmEn3wRQWKDL/L7fsjZrf3Pa3MGQg9a/Afk8Fn1z8QSk fW8mOyBp0ISczAyraWYZ+v1LV9xQzZNNh1vLBUEGF1tBLlBwOAuN6vXQPSnZ85+QBNZk HoMuHPgmh15pu7QTaxrnaRVNHXp2k7eEPb6rKNyKdVTw1blt/uweXDURsAhq/uAPD7En WA7n3TUS6uuWzRylEsqKiEh4iL5ME6n3WTI1AX852FmoMS7eAJGepVoUs4fcJb/GHy0M 3zpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=9kFm5cCbOqu66YkRRpwavMijRJvCmaOBRHB/5MhoRgg=; b=ElH25BmND+YoOdAinG791hFV60+w01HsAXIyOYpry7XF5RREiqT7kOgQzkOzFIZS+X 31IfowHL4yT+/uYgjLMLirGujcNec8F6QH0RQkPmLT6eNjSDuwPz5DS46Xc3tkVyrP1p LlISjurXZpzoO35TTKOAH9BeZDLC5+cUNC4HXyY2g4LOId/IkODcQwtyS05HXzVMSjem rk43JNbVFMOsSv3olGHIbQDvZciaTjMVAooZHB71MvWMLUTCBbiksw47sNKz0JDGgsbP awF2CPelfuoVPTD6fuEih14XArd219HeBkW1C/M07jSBAgq7xHGGKfc6itLU6fcpo+it V+3g== X-Gm-Message-State: AOAM531+cpF3bLTwdhLUP+is9WLbF/jXKAZ5QEjPF3xOloL4pRFOYxwj aeZACBOVGd0J8+30j+V7Q9fqurnsqpSDTPUWvdU= X-Google-Smtp-Source: ABdhPJw9FOikPsXBBpFWARfgpMM7au2/3uWSQ6x7t3FgRc7HhTUYR5SY9wY+/nt1H8fMndoMivqQ6KNa61MZ2pwY0Sg= X-Received: by 2002:a1c:a912:: with SMTP id s18mr1465142wme.55.1589924666291; Tue, 19 May 2020 14:44:26 -0700 (PDT) In-Reply-To: <75a90563-51b4-d3b8-4832-fc0e2542af0d@gmail.com> Received-SPF: pass client-ip=2a00:1450:4864:20::332; envelope-from=pipcet@gmail.com; helo=mail-wm1-x332.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:250984 Archived-At: --000000000000f6178205a6072e3c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, May 19, 2020 at 2:39 PM Cl=C3=A9ment Pit-Claudel wrote: > On 19/05/2020 09.56, Eli Zaretskii wrote: > > I don't see anything on or after "a", I see a thin vertical line on > > the "Z". is that what is actually displayed? If so, how do people > > know the cursor is after "a"?? > > They don't: "the seven equal slices that Firefox treats it as for selecti= on/editing purposes don't match up to the visual shapes of the sub-glyphs a= t all well" And I'm afraid the difference is much more obvious with box cursors than it is with carets. I'm attaching a screenshot of a patched Emacs displaying "ffi", with point on the second f, in the "Linux Libertine Display O" font (using approximately equal slices). I think this is a bit of a worst-case scenario, a three-letter ligature in a font using ligatures and overhangs very enthusiastically. It might be okay for other fonts. My remaining idea is to stretch characters so we can break up a ligature without changing its total width. I'm not sure how to do that, though. (I'm also attaching the patch, for the morbidly curious; it isn't clean, readable, or finished in any way, and contains at least one obvious bug. It's just good enough to produce the screenshot, and maybe it can serve as a hint as to which files need changing for ligatures to work; but such changes would have to be done very differently from the patch.). --000000000000f6178205a6072e3c Content-Type: image/png; name="ffi-box-cursor.png" Content-Disposition: attachment; filename="ffi-box-cursor.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kaeez7xo0 iVBORw0KGgoAAAANSUhEUgAAADMAAABMCAYAAADA1Y8+AAAABmJLR0QA/wD/AP+gvaeTAAAD4ElE QVRo3u2av0v7QBTAXy6J5hKx/sChIlRw6uBkUcHB0k1KFyc3/wb/AhVnlS7ODg6CaHESfyw69h8Q 1I4KIhQMRWJbfd+t36a5/Lg0Uat3kKEv13f3ee/l8u7lJERE6LJJktStCohgGkDgFzUBI2AEjIAR MAJGwAgYARO+KYoCuVwOisUiSJLEvAghsLm5GThb5W6qqqIkSQgACAD49vaGlUoFr6+v8eDgAFdX V3FoaKh1n3Xl83m8u7tr6fTqCwAoSRKOjY15zosLZmlpiTnQ9vY2Hh0doWmarb71eh1PT08xnU7b +mqahsfHxza9pVIJZVlu/VYUxRWqvV9oGF3XmdZqt6qu67ixsWH7X71ex62tLSSEoK7reHl5abu/ vr6ObgHS7n3WuKFgUqmUp4U6752cnDh0FItFvLi4sMl2dnZa/3G1touHFEUJB+Nnmc7709PTvjpv b29R0zRfGDfvsP7jCyPLsr8SxkDn5+eeeguFgqdOr6gIDRMkXlkDZTIZV52VSgUJIYFgvEItnU4H h6GUOhRQSgMPtra2hi8vL47+u7u7vlYOEmpcnmEp4bEcAODi4qKjfz6f54JhzYW1ABCe8k+YktLs 7KxD9vDwwK3n8/MTEBEMwwBEhEaj8fXpzNzcnEP2+PgYWl+tVuPPzfr6+pydCenaM6Zpek4olkSz 2Ww6ZLqucw+QTCYj80qkWbNpmlzKDcMARVFssmq1+vUwUdR+E4lELHq/ZT/DgunZzRlrEfnz2+bJ yUmglIKqqiDLMhBCWjtR23sQEZEQ0lUsR/EchP3G0z62EoXlDg8PXVezQqFgkz09PcHNzU08LuTJ VHmz2omJCUffUqnEpZtnTxPrM/Px8cHMscLkZd++ALAmEQbmR6xmrIlH+dLsXDRihWFNPCxMkNWu Z2C+PczinLgonEf9Vo/iNIeA+a58q2dgwtQRfgSMLMu/J8xYXmAB9gRMZzGjp8OMBaOq6u+pAfQs jKZpDhmlNLbUKFaYwcFBh2xgYKA3PTM6OuqQjYyMxJbIMmHcasrj4+Ncg6VSKYcsmUzG9twwYSzL YnZ+fn7mUr6wsMB8z8zPz3Pp8QpNm4E7KyFeBwoAAPv7+wNVZ5aXl7HRaDCrLeVyGaempgJVZwzD 8D29YRjG/8+AbicvwOf4RyfMzMwM7u/vY7lc9v2sZ1kWnp2d4d7eHuZyOa7yktulAABcXV1FslRm s1lYWVmBWq0G9/f3UK1W4fX1FSzLgmazCaqqAqUUEokEDA8PQyaTgWw2C+/v75HsUiVxfP4vbpsF jIARMAJGwAgYASNgBIyAETA/rf0Dq2vy3TJOaEsAAAAASUVORK5CYII= --000000000000f6178205a6072e3c Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Ligatures.diff" Content-Disposition: attachment; filename="0001-Ligatures.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kaef6k7c1 ZGlmZiAtLWdpdCBhL3NyYy9hbGxvYy5jIGIvc3JjL2FsbG9jLmMKaW5kZXggZWJjNTU4NTdlYS4u MTM5NWY2NDdmNCAxMDA2NDQKLS0tIGEvc3JjL2FsbG9jLmMKKysrIGIvc3JjL2FsbG9jLmMKQEAg LTMyMiw3ICszMjIsNyBAQCAjZGVmaW5lIFBVUkVCRUcgKGNoYXIgKikgcHVyZQogCiAvKiBJZiBw b3NpdGl2ZSwgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGluaGliaXRlZC4gIE90aGVyd2lzZSwgemVy by4gICovCiAKLXN0YXRpYyBpbnRwdHJfdCBnYXJiYWdlX2NvbGxlY3Rpb25faW5oaWJpdGVkOwor c3RhdGljIGludHB0cl90IGdhcmJhZ2VfY29sbGVjdGlvbl9pbmhpYml0ZWQgPSAzOwogCiAvKiBU aGUgR0MgdGhyZXNob2xkIGluIGJ5dGVzLCB0aGUgbGFzdCB0aW1lIGl0IHdhcyBjYWxjdWxhdGVk CiAgICBmcm9tIGdjLWNvbnMtdGhyZXNob2xkIGFuZCBnYy1jb25zLXBlcmNlbnRhZ2UuICAqLwpk aWZmIC0tZ2l0IGEvc3JjL2NvbXBvc2l0ZS5jIGIvc3JjL2NvbXBvc2l0ZS5jCmluZGV4IDUxODUw MmJlNDkuLmUyYmVjZTQwYzggMTAwNjQ0Ci0tLSBhL3NyYy9jb21wb3NpdGUuYworKysgYi9zcmMv Y29tcG9zaXRlLmMKQEAgLTgzNiw3ICs4MzYsNyBAQCBmaWxsX2dzdHJpbmdfYm9keSAoTGlzcF9P YmplY3QgZ3N0cmluZykKICAgICAgIExHTFlQSF9TRVRfQ0hBUiAoZywgYyk7CiAKICAgICAgIGlm IChmb250ICE9IE5VTEwpCi0gICAgICAgIGNvZGUgPSBmb250LT5kcml2ZXItPmVuY29kZV9jaGFy IChmb250LCBMR0xZUEhfQ0hBUiAoZykpOworICAgICAgICBjb2RlID0gZm9udC0+ZHJpdmVyLT5l bmNvZGVfY2hhciAoZm9udCwgTEdMWVBIX0NIQVIgKGcpLCBOVUxMKTsKICAgICAgIGVsc2UKICAg ICAgICAgY29kZSA9IEZPTlRfSU5WQUxJRF9DT0RFOwogICAgICAgaWYgKGNvZGUgIT0gRk9OVF9J TlZBTElEX0NPREUpCmRpZmYgLS1naXQgYS9zcmMvZGlzcGV4dGVybi5oIGIvc3JjL2Rpc3BleHRl cm4uaAppbmRleCAwYjFmM2QxNGFlLi4yZjZiMzNlNzRjIDEwMDY0NAotLS0gYS9zcmMvZGlzcGV4 dGVybi5oCisrKyBiL3NyYy9kaXNwZXh0ZXJuLmgKQEAgLTM5Nyw2ICszOTcsMTUgQEAgI2RlZmlu ZSBTRVRfR0xZUEhfRlJPTV9HTFlQSF9DT0RFKGdseXBoLCBnYykJCQkJXAogfTsKIAogCitzdHJ1 Y3QgZ2x5cGhfY29udGV4dAoreworICB1bmlvbiB2ZWN0b3JsaWtlX2hlYWRlciBoZWFkZXI7Cisg IExpc3BfT2JqZWN0IHN0cmluZzsKKyAgTGlzcF9PYmplY3QgcG9zaXRpb247CisgIGludCBpOwor ICBpbnQgbjsKK307CisKIC8qIEdseXBocy4KIAogICAgQmUgZXh0cmEgY2FyZWZ1bCB3aGVuIGNo YW5naW5nIHRoaXMgc3RydWN0dXJlISAgRXNwLiBtYWtlIHN1cmUgdGhhdApAQCAtNTY3LDYgKzU3 Niw4IEBAICNkZWZpbmUgRkFDRV9JRF9CSVRTCTIwCiAgICAgLyogVXNlZCB0byBjb21wYXJlIGFs bCBiaXQtZmllbGRzIGFib3ZlIGluIG9uZSBzdGVwLiAgKi8KICAgICB1bnNpZ25lZCB2YWw7CiAg IH0gdTsKKworICBzdHJ1Y3QgZ2x5cGhfY29udGV4dCAqY29udGV4dDsKIH07CiAKIApkaWZmIC0t Z2l0IGEvc3JjL2ZvbnQuYyBiL3NyYy9mb250LmMKaW5kZXggYWIwMDQwMmI0MC4uOGRlM2M5Njli OSAxMDA2NDQKLS0tIGEvc3JjL2ZvbnQuYworKysgYi9zcmMvZm9udC5jCkBAIC0zMDEwLDcgKzMw MTAsNyBAQCBmb250X2hhc19jaGFyIChzdHJ1Y3QgZnJhbWUgKmYsIExpc3BfT2JqZWN0IGZvbnQs IGludCBjKQogICAgICAgaWYgKHJlc3VsdCA+PSAwKQogCXJldHVybiByZXN1bHQ7CiAgICAgfQot ICByZXR1cm4gKGZvbnRwLT5kcml2ZXItPmVuY29kZV9jaGFyIChmb250cCwgYykgIT0gRk9OVF9J TlZBTElEX0NPREUpOworICByZXR1cm4gKGZvbnRwLT5kcml2ZXItPmVuY29kZV9jaGFyIChmb250 cCwgYywgTlVMTCkgIT0gRk9OVF9JTlZBTElEX0NPREUpOwogfQogCiAKQEAgLTMwMjMsNyArMzAy Myw3IEBAIGZvbnRfZW5jb2RlX2NoYXIgKExpc3BfT2JqZWN0IGZvbnRfb2JqZWN0LCBpbnQgYykK IAogICBlYXNzZXJ0IChGT05UX09CSkVDVF9QIChmb250X29iamVjdCkpOwogICBmb250ID0gWEZP TlRfT0JKRUNUIChmb250X29iamVjdCk7Ci0gIHJldHVybiBmb250LT5kcml2ZXItPmVuY29kZV9j aGFyIChmb250LCBjKTsKKyAgcmV0dXJuIGZvbnQtPmRyaXZlci0+ZW5jb2RlX2NoYXIgKGZvbnQs IGMsIE5VTEwpOwogfQogCiAKQEAgLTQ0MTgsNyArNDQxOCw3IEBAIGZvbnRfZmlsbF9sZ2x5cGhf bWV0cmljcyAoTGlzcF9PYmplY3QgZ2x5cGgsIHN0cnVjdCBmb250ICpmb250LCB1bnNpZ25lZCBp bnQgY29kCiAgIHN0cnVjdCBmb250X21ldHJpY3MgbWV0cmljczsKIAogICBMR0xZUEhfU0VUX0NP REUgKGdseXBoLCBjb2RlKTsKLSAgZm9udC0+ZHJpdmVyLT50ZXh0X2V4dGVudHMgKGZvbnQsICZj b2RlLCAxLCAmbWV0cmljcyk7CisgIGZvbnQtPmRyaXZlci0+dGV4dF9leHRlbnRzIChmb250LCAm Y29kZSwgMSwgJm1ldHJpY3MsIE5VTEwpOwogICBMR0xZUEhfU0VUX0xCRUFSSU5HIChnbHlwaCwg bWV0cmljcy5sYmVhcmluZyk7CiAgIExHTFlQSF9TRVRfUkJFQVJJTkcgKGdseXBoLCBtZXRyaWNz LnJiZWFyaW5nKTsKICAgTEdMWVBIX1NFVF9XSURUSCAoZ2x5cGgsIG1ldHJpY3Mud2lkdGgpOwpA QCAtNDYzOCw3ICs0NjM4LDcgQEAgREVGVU4gKCJpbnRlcm5hbC1jaGFyLWZvbnQiLCBGaW50ZXJu YWxfY2hhcl9mb250LCBTaW50ZXJuYWxfY2hhcl9mb250LCAxLCAyLCAwLAogICBzdHJ1Y3QgZmFj ZSAqZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZmFjZV9pZCk7CiAgIGlmICghIGZhY2UtPmZvbnQp CiAgICAgcmV0dXJuIFFuaWw7Ci0gIHVuc2lnbmVkIGNvZGUgPSBmYWNlLT5mb250LT5kcml2ZXIt PmVuY29kZV9jaGFyIChmYWNlLT5mb250LCBjKTsKKyAgdW5zaWduZWQgY29kZSA9IGZhY2UtPmZv bnQtPmRyaXZlci0+ZW5jb2RlX2NoYXIgKGZhY2UtPmZvbnQsIGMsIE5VTEwpOwogICBpZiAoY29k ZSA9PSBGT05UX0lOVkFMSURfQ09ERSkKICAgICByZXR1cm4gUW5pbDsKICAgTGlzcF9PYmplY3Qg Zm9udF9vYmplY3Q7CkBAIC00OTY1LDcgKzQ5NjUsNyBAQCBERUZVTiAoImZvbnQtZ2V0LWdseXBo cyIsIEZmb250X2dldF9nbHlwaHMsIFNmb250X2dldF9nbHlwaHMsIDMsIDQsIDAsCiAgICAgICB1 bnNpZ25lZCBjb2RlOwogICAgICAgc3RydWN0IGZvbnRfbWV0cmljcyBtZXRyaWNzOwogCi0gICAg ICBjb2RlID0gZm9udC0+ZHJpdmVyLT5lbmNvZGVfY2hhciAoZm9udCwgYyk7CisgICAgICBjb2Rl ID0gZm9udC0+ZHJpdmVyLT5lbmNvZGVfY2hhciAoZm9udCwgYywgTlVMTCk7CiAgICAgICBpZiAo Y29kZSA9PSBGT05UX0lOVkFMSURfQ09ERSkKIAl7CiAJICBBU0VUICh2ZWMsIGksIFFuaWwpOwpA QCAtNDk3Niw3ICs0OTc2LDcgQEAgREVGVU4gKCJmb250LWdldC1nbHlwaHMiLCBGZm9udF9nZXRf Z2x5cGhzLCBTZm9udF9nZXRfZ2x5cGhzLCAzLCA0LCAwLAogICAgICAgTEdMWVBIX1NFVF9UTyAo ZywgaSk7CiAgICAgICBMR0xZUEhfU0VUX0NIQVIgKGcsIGMpOwogICAgICAgTEdMWVBIX1NFVF9D T0RFIChnLCBjb2RlKTsKLSAgICAgIGZvbnQtPmRyaXZlci0+dGV4dF9leHRlbnRzIChmb250LCAm Y29kZSwgMSwgJm1ldHJpY3MpOworICAgICAgZm9udC0+ZHJpdmVyLT50ZXh0X2V4dGVudHMgKGZv bnQsICZjb2RlLCAxLCAmbWV0cmljcywgTlVMTCk7CiAgICAgICBMR0xZUEhfU0VUX1dJRFRIIChn LCBtZXRyaWNzLndpZHRoKTsKICAgICAgIExHTFlQSF9TRVRfTEJFQVJJTkcgKGcsIG1ldHJpY3Mu bGJlYXJpbmcpOwogICAgICAgTEdMWVBIX1NFVF9SQkVBUklORyAoZywgbWV0cmljcy5yYmVhcmlu Zyk7CmRpZmYgLS1naXQgYS9zcmMvZm9udC5oIGIvc3JjL2ZvbnQuaAppbmRleCA4NjE0ZTdmYTEw Li45NTJhOWZhNGMzIDEwMDY0NAotLS0gYS9zcmMvZm9udC5oCisrKyBiL3NyYy9mb250LmgKQEAg LTU2NSw2ICs1NjUsOCBAQCAjZGVmaW5lIEZPTlRfUElYRUxfU0laRV9RVUFOVFVNIDEKIAogI2Rl ZmluZSBGT05UX0lOVkFMSURfQ09ERSAweEZGRkZGRkZGCiAKK3N0cnVjdCBnbHlwaF9jb250ZXh0 OworCiAvKiBGb250IGRyaXZlci4gIE1lbWJlcnMgc3BlY2lmaWVkIGFzICJvcHRpb25hbCIgY2Fu IGJlIE5VTEwuICAqLwogCiBzdHJ1Y3QgZm9udF9kcml2ZXIKQEAgLTY0NSwxNCArNjQ3LDE1IEBA ICNkZWZpbmUgRk9OVF9JTlZBTElEX0NPREUgMHhGRkZGRkZGRgogCiAgIC8qIFJldHVybiBhIGds eXBoIGNvZGUgb2YgRk9OVCBmb3IgY2hhcmFjdGVyIEMgKFVuaWNvZGUgY29kZSBwb2ludCkuCiAg ICAgIElmIEZPTlQgZG9lc24ndCBoYXZlIHN1Y2ggYSBnbHlwaCwgcmV0dXJuIEZPTlRfSU5WQUxJ RF9DT0RFLiAgKi8KLSAgdW5zaWduZWQgKCplbmNvZGVfY2hhcikgKHN0cnVjdCBmb250ICpmb250 LCBpbnQgYyk7CisgIHVuc2lnbmVkICgqZW5jb2RlX2NoYXIpIChzdHJ1Y3QgZm9udCAqZm9udCwg aW50IGMsIHN0cnVjdCBnbHlwaF9jb250ZXh0ICpjb250ZXh0KTsKIAogICAvKiBDb21wdXRlIHRo ZSB0b3RhbCBtZXRyaWNzIG9mIHRoZSBOR0xZUEhTIGdseXBocyBzcGVjaWZpZWQgYnkKICAgICAg dGhlIGZvbnQgRk9OVCBhbmQgdGhlIHNlcXVlbmNlIG9mIGdseXBoIGNvZGVzIENPREUsIGFuZCBz dG9yZSB0aGUKICAgICAgcmVzdWx0IGluIE1FVFJJQ1MuICAqLwogICB2b2lkICgqdGV4dF9leHRl bnRzKSAoc3RydWN0IGZvbnQgKmZvbnQsCiAJCQljb25zdCB1bnNpZ25lZCAqY29kZSwgaW50IG5n bHlwaHMsCi0JCQlzdHJ1Y3QgZm9udF9tZXRyaWNzICptZXRyaWNzKTsKKwkJCXN0cnVjdCBmb250 X21ldHJpY3MgKm1ldHJpY3MsCisJCQlzdHJ1Y3QgZ2x5cGhfY29udGV4dCAqY29udGV4dCk7CiAK ICNpZmRlZiBIQVZFX1dJTkRPV19TWVNURU0KIApkaWZmIC0tZ2l0IGEvc3JjL2Z0Y3Jmb250LmMg Yi9zcmMvZnRjcmZvbnQuYwppbmRleCA3ODMyZDRmNWNlLi4xOWMyNjQ0Mjg1IDEwMDY0NAotLS0g YS9zcmMvZnRjcmZvbnQuYworKysgYi9zcmMvZnRjcmZvbnQuYwpAQCAtMzIzLDcgKzMyMyw3IEBA IGZ0Y3Jmb250X2hhc19jaGFyIChMaXNwX09iamVjdCBmb250LCBpbnQgYykKIH0KIAogc3RhdGlj IHVuc2lnbmVkCi1mdGNyZm9udF9lbmNvZGVfY2hhciAoc3RydWN0IGZvbnQgKmZvbnQsIGludCBj KQorZnRjcmZvbnRfZW5jb2RlX2NoYXIgKHN0cnVjdCBmb250ICpmb250LCBpbnQgYywgc3RydWN0 IGdseXBoX2NvbnRleHQgKmNvbnRleHQpCiB7CiAgIHN0cnVjdCBmb250X2luZm8gKmZ0Y3Jmb250 X2luZm8gPSAoc3RydWN0IGZvbnRfaW5mbyAqKSBmb250OwogICB1bnNpZ25lZCBjb2RlID0gRk9O VF9JTlZBTElEX0NPREU7CkBAIC0zMzEsMjAgKzMzMSw1MyBAQCBmdGNyZm9udF9lbmNvZGVfY2hh ciAoc3RydWN0IGZvbnQgKmZvbnQsIGludCBjKQogICBpbnQgdXRmOGxlbiA9IENIQVJfU1RSSU5H IChjLCB1dGY4KTsKICAgY2Fpcm9fZ2x5cGhfdCBzdGFja19nbHlwaDsKICAgY2Fpcm9fZ2x5cGhf dCAqZ2x5cGhzID0gJnN0YWNrX2dseXBoOwotICBpbnQgbnVtX2dseXBocyA9IDE7CiAKLSAgaWYg KGNhaXJvX3NjYWxlZF9mb250X3RleHRfdG9fZ2x5cGhzIChmdGNyZm9udF9pbmZvLT5jcl9zY2Fs ZWRfZm9udCwgMCwgMCwKLQkJCQkJKGNoYXIgKikgdXRmOCwgdXRmOGxlbiwKLQkJCQkJJmdseXBo cywgJm51bV9nbHlwaHMsCi0JCQkJCU5VTEwsIE5VTEwsIE5VTEwpCi0gICAgICA9PSBDQUlST19T VEFUVVNfU1VDQ0VTUykKKyAgaWYgKGNvbnRleHQgPT0gTlVMTCkKICAgICB7Ci0gICAgICBpZiAo Z2x5cGhzICE9ICZzdGFja19nbHlwaCkKLQljYWlyb19nbHlwaF9mcmVlIChnbHlwaHMpOwotICAg ICAgZWxzZSBpZiAoc3RhY2tfZ2x5cGguaW5kZXgpCi0JY29kZSA9IHN0YWNrX2dseXBoLmluZGV4 OworICAgICAgY29udGV4dCA9IHhtYWxsb2MgKHNpemVvZiAqY29udGV4dCk7CisgICAgICBjb250 ZXh0LT5zdHJpbmcgPSBDQUxMTiAoRnN0cmluZywgbWFrZV9maXhudW0gKGMpKTsKKyAgICAgIGNv bnRleHQtPnBvc2l0aW9uID0gbWFrZV9maXhudW0gKDApOwogICAgIH0KIAorICB1bnNpZ25lZCBp bnQgbnVtX2dseXBocyA9IDA7CisgIHVuc2lnbmVkIGludCBudW1fY2x1c3RlcnMgPSAwOworICBo Yl9idWZmZXJfdCAqaGJfYnVmID0gaGJfYnVmZmVyX2NyZWF0ZSAoKTsKKyAgaGJfYnVmZmVyX3Nl dF9jbHVzdGVyX2xldmVsIChoYl9idWYsIEhCX0JVRkZFUl9DTFVTVEVSX0xFVkVMX01PTk9UT05F X0NIQVJBQ1RFUlMpOworICBoYl9idWZmZXJfYWRkX3V0ZjggKGhiX2J1ZiwgU0RBVEEgKGNvbnRl eHQtPnN0cmluZyksIC0xLCAwLCAtMSk7CisgIGhiX2J1ZmZlcl9zZXRfZGlyZWN0aW9uIChoYl9i dWYsIEhCX0RJUkVDVElPTl9MVFIpOworICBoYl9mb250X3QgKmhiX2ZvbnQgPSBoYl9mdF9mb250 X2NyZWF0ZV9yZWZlcmVuY2VkCisgICAgKGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZSAo ZnRjcmZvbnRfaW5mby0+Y3Jfc2NhbGVkX2ZvbnQpKTsKKyAgaGJfc2hhcGUgKGhiX2ZvbnQsIGhi X2J1ZiwgTlVMTCwgMCk7CisgIGhiX2dseXBoX2luZm9fdCAqZ2x5cGhfaW5mbyA9IGhiX2J1ZmZl cl9nZXRfZ2x5cGhfaW5mb3MKKyAgICAoaGJfYnVmLCAmbnVtX2dseXBocyk7CisgIGhiX2dseXBo X3Bvc2l0aW9uX3QgKmdseXBoX3BvcyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zCisg ICAgKGhiX2J1ZiwgJm51bV9nbHlwaHMpOworICBpbnQgaTAsIGkxOworICBpbnQgYzAsIGMxOwor ICBpMCA9IDA7CisgIGZvciAoaW50IGkgPSBudW1fZ2x5cGhzIC0gMTsgaSA+PSAwOyBpLS0pCisg ICAgeworICAgICAgaWYgKGdseXBoX2luZm9baV0uY2x1c3RlciA8PSBYRklYTlVNIChjb250ZXh0 LT5wb3NpdGlvbikpCisJeworCSAgaTAgPSBpOworCSAgYzAgPSBnbHlwaF9pbmZvW2ldLmNsdXN0 ZXI7CisJICBicmVhazsKKwl9CisgICAgfQorICBpMSA9IG51bV9nbHlwaHM7CisgIGZvciAoaW50 IGkgPSAwOyBpIDwgbnVtX2dseXBoczsgaSsrKQorICAgIHsKKyAgICAgIGlmIChnbHlwaF9pbmZv W2ldLmNsdXN0ZXIgPiBjMCkKKwl7CisJICBpMSA9IGk7CisJICBjMSA9IGdseXBoX2luZm9baV0u Y2x1c3RlcjsKKwkgIGJyZWFrOworCX0KKyAgICB9CisgIGNvbnRleHQtPmkgPSBYRklYTlVNIChj b250ZXh0LT5wb3NpdGlvbikgLSBjMDsKKyAgY29udGV4dC0+biA9IGMxIC0gYzA7CisgIGNvZGUg PSBnbHlwaF9pbmZvW2kwXS5jb2RlcG9pbnQ7CisKICAgcmV0dXJuIGNvZGU7CiB9CiAKQEAgLTM1 MiwzMCArMzg1LDY1IEBAIGZ0Y3Jmb250X2VuY29kZV9jaGFyIChzdHJ1Y3QgZm9udCAqZm9udCwg aW50IGMpCiBmdGNyZm9udF90ZXh0X2V4dGVudHMgKHN0cnVjdCBmb250ICpmb250LAogICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCAqY29kZSwKICAgICAgICAgICAgICAgICAg ICAgICAgaW50IG5nbHlwaHMsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmb250X21l dHJpY3MgKm1ldHJpY3MpCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmb250X21ldHJp Y3MgKm1ldHJpY3MsCisJCSAgICAgICBzdHJ1Y3QgZ2x5cGhfY29udGV4dCAqY29udGV4dCkKIHsK KyAgc3RydWN0IGZvbnRfaW5mbyAqZnRjcmZvbnRfaW5mbyA9IChzdHJ1Y3QgZm9udF9pbmZvICop IGZvbnQ7CiAgIGludCB3aWR0aCwgaTsKIAogICBibG9ja19pbnB1dCAoKTsKLSAgd2lkdGggPSBm dGNyZm9udF9nbHlwaF9leHRlbnRzIChmb250LCBjb2RlWzBdLCBtZXRyaWNzKTsKLSAgZm9yIChp ID0gMTsgaSA8IG5nbHlwaHM7IGkrKykKKworICBpZiAoY29udGV4dCA9PSBOVUxMKQogICAgIHsK LSAgICAgIHN0cnVjdCBmb250X21ldHJpY3MgbTsKLSAgICAgIGludCB3ID0gZnRjcmZvbnRfZ2x5 cGhfZXh0ZW50cyAoZm9udCwgY29kZVtpXSwgbWV0cmljcyA/ICZtIDogTlVMTCk7CisgICAgICBj b250ZXh0ID0geG1hbGxvYyAoc2l6ZW9mICpjb250ZXh0KTsKKyAgICAgIGNvbnRleHQtPnN0cmlu ZyA9IENBTExOIChGc3RyaW5nLCBtYWtlX2ZpeG51bSAoY29kZVswXSkpOworICAgICAgY29udGV4 dC0+cG9zaXRpb24gPSBtYWtlX2ZpeG51bSAoMCk7CisgICAgfQogCi0gICAgICBpZiAobWV0cmlj cykKKyAgdW5zaWduZWQgaW50IG51bV9nbHlwaHMgPSAwOworICB1bnNpZ25lZCBpbnQgbnVtX2Ns dXN0ZXJzID0gMDsKKyAgaGJfYnVmZmVyX3QgKmhiX2J1ZiA9IGhiX2J1ZmZlcl9jcmVhdGUgKCk7 CisgIGhiX2J1ZmZlcl9zZXRfY2x1c3Rlcl9sZXZlbCAoaGJfYnVmLCBIQl9CVUZGRVJfQ0xVU1RF Ul9MRVZFTF9NT05PVE9ORV9DSEFSQUNURVJTKTsKKyAgaGJfYnVmZmVyX3NldF9kaXJlY3Rpb24g KGhiX2J1ZiwgSEJfRElSRUNUSU9OX0xUUik7CisgIGhiX2J1ZmZlcl9zZXRfY29udGVudF90eXBl IChoYl9idWYsIEhCX0JVRkZFUl9DT05URU5UX1RZUEVfVU5JQ09ERSk7CisgIGludCBuID0gMDsK KyAgZm9yIChjb25zdCBjaGFyICpwID0gU0RBVEEgKGNvbnRleHQtPnN0cmluZyk7IHAgPD0gU0RB VEEgKGNvbnRleHQtPnN0cmluZykgKyBTQllURVMgKGNvbnRleHQtPnN0cmluZyk7KQorICAgIHsK KyAgICAgIGludCBjID0gc3RyaW5nX2NoYXJfYWR2YW5jZSAoJnApOworICAgICAgaGJfYnVmZmVy X2FkZCAoaGJfYnVmLCBjLCBuKyspOworICAgIH0KKyAgaGJfZm9udF90ICpoYl9mb250ID0gaGJf ZnRfZm9udF9jcmVhdGVfcmVmZXJlbmNlZAorICAgIChjYWlyb19mdF9zY2FsZWRfZm9udF9sb2Nr X2ZhY2UgKGZ0Y3Jmb250X2luZm8tPmNyX3NjYWxlZF9mb250KSk7CisgIGhiX3NoYXBlIChoYl9m b250LCBoYl9idWYsIE5VTEwsIDApOworICBoYl9nbHlwaF9pbmZvX3QgKmdseXBoX2luZm8gPSBo Yl9idWZmZXJfZ2V0X2dseXBoX2luZm9zCisgICAgKGhiX2J1ZiwgJm51bV9nbHlwaHMpOworICBo Yl9nbHlwaF9wb3NpdGlvbl90ICpnbHlwaF9wb3MgPSBoYl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0 aW9ucworICAgIChoYl9idWYsICZudW1fZ2x5cGhzKTsKKyAgaW50IGkwLCBpMTsKKyAgaW50IGMw LCBjMTsKKyAgaTAgPSAwOworICBmb3IgKGludCBpID0gbnVtX2dseXBocyAtIDE7IGkgPj0gMDsg aS0tKQorICAgIHsKKyAgICAgIGlmIChnbHlwaF9pbmZvW2ldLmNsdXN0ZXIgPD0gWEZJWE5VTSAo Y29udGV4dC0+cG9zaXRpb24pKQorCXsKKwkgIGkwID0gaTsKKwkgIGMwID0gZ2x5cGhfaW5mb1tp XS5jbHVzdGVyOworCSAgYnJlYWs7CisJfQorICAgIH0KKyAgaTEgPSBudW1fZ2x5cGhzOworICBm b3IgKGludCBpID0gMDsgaSA8IG51bV9nbHlwaHM7IGkrKykKKyAgICB7CisgICAgICBpZiAoZ2x5 cGhfaW5mb1tpXS5jbHVzdGVyID4gYzApCiAJewotCSAgaWYgKHdpZHRoICsgbS5sYmVhcmluZyA8 IG1ldHJpY3MtPmxiZWFyaW5nKQotCSAgICBtZXRyaWNzLT5sYmVhcmluZyA9IHdpZHRoICsgbS5s YmVhcmluZzsKLQkgIGlmICh3aWR0aCArIG0ucmJlYXJpbmcgPiBtZXRyaWNzLT5yYmVhcmluZykK LQkgICAgbWV0cmljcy0+cmJlYXJpbmcgPSB3aWR0aCArIG0ucmJlYXJpbmc7Ci0JICBpZiAobS5h c2NlbnQgPiBtZXRyaWNzLT5hc2NlbnQpCi0JICAgIG1ldHJpY3MtPmFzY2VudCA9IG0uYXNjZW50 OwotCSAgaWYgKG0uZGVzY2VudCA+IG1ldHJpY3MtPmRlc2NlbnQpCi0JICAgIG1ldHJpY3MtPmRl c2NlbnQgPSBtLmRlc2NlbnQ7CisJICBpMSA9IGk7CisJICBjMSA9IGdseXBoX2luZm9baV0uY2x1 c3RlcjsKKwkgIGJyZWFrOwogCX0KLSAgICAgIHdpZHRoICs9IHc7CiAgICAgfQorICBjb250ZXh0 LT5pID0gWEZJWE5VTSAoY29udGV4dC0+cG9zaXRpb24pIC0gYzA7CisgIGNvbnRleHQtPm4gPSBj MSAtIGMwOworICB3aWR0aCA9IGdseXBoX3Bvc1tpMF0ueF9hZHZhbmNlIC8gKGMxIC0gYzApIC8g NjQ7CiAgIHVuYmxvY2tfaW5wdXQgKCk7CiAKICAgaWYgKG1ldHJpY3MpCkBAIC01MDgsNiArNTc2 LDggQEAgZnRjcmZvbnRfZHJhdyAoc3RydWN0IGdseXBoX3N0cmluZyAqcywKICAgICAgIGdseXBo c1tpXS5pbmRleCA9IHMtPmNoYXIyYltmcm9tICsgaV07CiAgICAgICBnbHlwaHNbaV0ueCA9IHg7 CiAgICAgICBnbHlwaHNbaV0ueSA9IHk7CisgICAgICBzdHJ1Y3QgZ2x5cGhfY29udGV4dCAqY29u dGV4dCA9IHMtPmZpcnN0X2dseXBoLT5jb250ZXh0OworICAgICAgZ2x5cGhzW2ldLnggLT0gKGNv bnRleHQtPmkgKiBzLT53aWR0aCk7CiAgICAgICB4ICs9IChzLT5wYWRkaW5nX3AgPyAxIDogZnRj cmZvbnRfZ2x5cGhfZXh0ZW50cyAocy0+Zm9udCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHNbaV0uaW5kZXgsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpOwpkaWZm IC0tZ2l0IGEvc3JjL2hiZm9udC5jIGIvc3JjL2hiZm9udC5jCmluZGV4IDU3NmM1ZmU3ZjYuLjVj M2M2OTAyODEgMTAwNjQ0Ci0tLSBhL3NyYy9oYmZvbnQuYworKysgYi9zcmMvaGJmb250LmMKQEAg LTU3OCw3ICs1NzgsNyBAQCBoYmZvbnRfc2hhcGUgKExpc3BfT2JqZWN0IGxnc3RyaW5nLCBMaXNw X09iamVjdCBkaXJlY3Rpb24pCiAgICAgICBMR0xZUEhfU0VUX0NPREUgKGxnbHlwaCwgaW5mb1tp XS5jb2RlcG9pbnQpOwogCiAgICAgICB1bnNpZ25lZCBjb2RlID0gaW5mb1tpXS5jb2RlcG9pbnQ7 Ci0gICAgICBmb250LT5kcml2ZXItPnRleHRfZXh0ZW50cyAoZm9udCwgJmNvZGUsIDEsICZtZXRy aWNzKTsKKyAgICAgIGZvbnQtPmRyaXZlci0+dGV4dF9leHRlbnRzIChmb250LCAmY29kZSwgMSwg Jm1ldHJpY3MsIE5VTEwpOwogICAgICAgTEdMWVBIX1NFVF9XSURUSCAobGdseXBoLCBtZXRyaWNz LndpZHRoKTsKICAgICAgIExHTFlQSF9TRVRfTEJFQVJJTkcgKGxnbHlwaCwgbWV0cmljcy5sYmVh cmluZyk7CiAgICAgICBMR0xZUEhfU0VUX1JCRUFSSU5HIChsZ2x5cGgsIG1ldHJpY3MucmJlYXJp bmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2xpc3AuaCBiL3NyYy9saXNwLmgKaW5kZXggYWQ3ZDY3YWU2 OS4uYzRhZTk1NDk5OSAxMDA2NDQKLS0tIGEvc3JjL2xpc3AuaAorKysgYi9zcmMvbGlzcC5oCkBA IC0xMTAzLDYgKzExMDMsNyBAQCBERUZJTkVfR0RCX1NZTUJPTF9FTkQgKFBTRVVET1ZFQ1RPUl9G TEFHKQogICBQVkVDX01VVEVYLAogICBQVkVDX0NPTkRWQVIsCiAgIFBWRUNfTU9EVUxFX0ZVTkNU SU9OLAorICBQVkVDX0dMWVBIX0NPTlRFWFQsCiAKICAgLyogVGhlc2Ugc2hvdWxkIGJlIGxhc3Qs IGZvciBpbnRlcm5hbF9lcXVhbCBhbmQgc3hoYXNoX29iai4gICovCiAgIFBWRUNfQ09NUElMRUQs CmRpZmYgLS1naXQgYS9zcmMveGRpc3AuYyBiL3NyYy94ZGlzcC5jCmluZGV4IGNmMTVmNTc5YjUu LjQxYTdiNDIzNWEgMTAwNjQ0Ci0tLSBhL3NyYy94ZGlzcC5jCisrKyBiL3NyYy94ZGlzcC5jCkBA IC0yNzQ5OSwxNCArMjc0OTksMTUgQEAgYXBwZW5kX2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBo X3N0cmluZyAqKmhlYWQsIHN0cnVjdCBnbHlwaF9zdHJpbmcgKip0YWlsLAogCiBzdGF0aWMgc3Ry dWN0IGZhY2UgKgogZ2V0X2NoYXJfZmFjZV9hbmRfZW5jb2RpbmcgKHN0cnVjdCBmcmFtZSAqZiwg aW50IGMsIGludCBmYWNlX2lkLAotCQkJICAgIHVuc2lnbmVkICpjaGFyMmIsIGJvb2wgZGlzcGxh eV9wKQorCQkJICAgIHVuc2lnbmVkICpjaGFyMmIsIGJvb2wgZGlzcGxheV9wLAorCQkJICAgIHN0 cnVjdCBnbHlwaF9jb250ZXh0ICpjb250ZXh0KQogewogICBzdHJ1Y3QgZmFjZSAqZmFjZSA9IEZB Q0VfRlJPTV9JRCAoZiwgZmFjZV9pZCk7CiAgIHVuc2lnbmVkIGNvZGUgPSAwOwogCiAgIGlmIChm YWNlLT5mb250KQogICAgIHsKLSAgICAgIGNvZGUgPSBmYWNlLT5mb250LT5kcml2ZXItPmVuY29k ZV9jaGFyIChmYWNlLT5mb250LCBjKTsKKyAgICAgIGNvZGUgPSBmYWNlLT5mb250LT5kcml2ZXIt PmVuY29kZV9jaGFyIChmYWNlLT5mb250LCBjLCBjb250ZXh0KTsKIAogICAgICAgaWYgKGNvZGUg PT0gRk9OVF9JTlZBTElEX0NPREUpCiAJY29kZSA9IDA7CkBAIC0yNzUzMyw3ICsyNzUzNCw3IEBA IGdldF9jaGFyX2ZhY2VfYW5kX2VuY29kaW5nIChzdHJ1Y3QgZnJhbWUgKmYsIGludCBjLCBpbnQg ZmFjZV9pZCwKIAogc3RhdGljIHN0cnVjdCBmYWNlICoKIGdldF9nbHlwaF9mYWNlX2FuZF9lbmNv ZGluZyAoc3RydWN0IGZyYW1lICpmLCBzdHJ1Y3QgZ2x5cGggKmdseXBoLAotCQkJICAgICB1bnNp Z25lZCAqY2hhcjJiKQorCQkJICAgICB1bnNpZ25lZCAqY2hhcjJiLCBzdHJ1Y3QgZ2x5cGhfY29u dGV4dCAqY29udGV4dCkKIHsKICAgc3RydWN0IGZhY2UgKmZhY2U7CiAgIHVuc2lnbmVkIGNvZGUg PSAwOwpAQCAtMjc1NDksNyArMjc1NTAsOCBAQCBnZXRfZ2x5cGhfZmFjZV9hbmRfZW5jb2Rpbmcg KHN0cnVjdCBmcmFtZSAqZiwgc3RydWN0IGdseXBoICpnbHlwaCwKICAgICAgIGlmIChDSEFSX0JZ VEU4X1AgKGdseXBoLT51LmNoKSkKIAljb2RlID0gQ0hBUl9UT19CWVRFOCAoZ2x5cGgtPnUuY2gp OwogICAgICAgZWxzZQotCWNvZGUgPSBmYWNlLT5mb250LT5kcml2ZXItPmVuY29kZV9jaGFyIChm YWNlLT5mb250LCBnbHlwaC0+dS5jaCk7CisJY29kZSA9IGZhY2UtPmZvbnQtPmRyaXZlci0+ZW5j b2RlX2NoYXIgKGZhY2UtPmZvbnQsIGdseXBoLT51LmNoLAorCQkJCQkJY29udGV4dCk7CiAKICAg ICAgIGlmIChjb2RlID09IEZPTlRfSU5WQUxJRF9DT0RFKQogCWNvZGUgPSAwOwpAQCAtMjc1NjUs MTQgKzI3NTY3LDE1IEBAIGdldF9nbHlwaF9mYWNlX2FuZF9lbmNvZGluZyAoc3RydWN0IGZyYW1l ICpmLCBzdHJ1Y3QgZ2x5cGggKmdseXBoLAogICAgUmV0dXJuIHRydWUgaWZmIEZPTlQgaGFzIGEg Z2x5cGggZm9yIEMuICAqLwogCiBzdGF0aWMgYm9vbAotZ2V0X2NoYXJfZ2x5cGhfY29kZSAoaW50 IGMsIHN0cnVjdCBmb250ICpmb250LCB1bnNpZ25lZCAqY2hhcjJiKQorZ2V0X2NoYXJfZ2x5cGhf Y29kZSAoaW50IGMsIHN0cnVjdCBmb250ICpmb250LCB1bnNpZ25lZCAqY2hhcjJiLAorCQkgICAg IHN0cnVjdCBnbHlwaF9jb250ZXh0ICpjb250ZXh0KQogewogICB1bnNpZ25lZCBjb2RlOwogCiAg IGlmIChDSEFSX0JZVEU4X1AgKGMpKQogICAgIGNvZGUgPSBDSEFSX1RPX0JZVEU4IChjKTsKICAg ZWxzZQotICAgIGNvZGUgPSBmb250LT5kcml2ZXItPmVuY29kZV9jaGFyIChmb250LCBjKTsKKyAg ICBjb2RlID0gZm9udC0+ZHJpdmVyLT5lbmNvZGVfY2hhciAoZm9udCwgYywgY29udGV4dCk7CiAK ICAgaWYgKGNvZGUgPT0gRk9OVF9JTlZBTElEX0NPREUpCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAt Mjc2MjAsNyArMjc2MjMsOCBAQCBmaWxsX2NvbXBvc2l0ZV9nbHlwaF9zdHJpbmcgKHN0cnVjdCBn bHlwaF9zdHJpbmcgKnMsIHN0cnVjdCBmYWNlICpiYXNlX2ZhY2UsCiAJCQkJICAgICAgIC0xLCBR bmlsKTsKIAogCSAgZmFjZSA9IGdldF9jaGFyX2ZhY2VfYW5kX2VuY29kaW5nIChzLT5mLCBjLCBm YWNlX2lkLAotCQkJCQkgICAgIHMtPmNoYXIyYiArIGksIHRydWUpOworCQkJCQkgICAgIHMtPmNo YXIyYiArIGksIHRydWUsCisJCQkJCSAgICAgTlVMTCk7CiAJICBpZiAoZmFjZSkKIAkgICAgewog CSAgICAgIGlmICghIHMtPmZhY2UpCkBAIC0yNzc3NywxMiArMjc3ODEsMTMgQEAgZmlsbF9nbHlw aF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMsIGludCBmYWNlX2lkLAogCSAmJiBnbHlw aC0+Z2x5cGhfbm90X2F2YWlsYWJsZV9wID09IGdseXBoX25vdF9hdmFpbGFibGVfcCkKICAgICB7 CiAgICAgICBzLT5mYWNlID0gZ2V0X2dseXBoX2ZhY2VfYW5kX2VuY29kaW5nIChzLT5mLCBnbHlw aCwKLQkJCQkJICAgICBzLT5jaGFyMmIgKyBzLT5uY2hhcnMpOworCQkJCQkgICAgIHMtPmNoYXIy YiArIHMtPm5jaGFycywKKwkJCQkJICAgICBnbHlwaC0+Y29udGV4dCk7CiAgICAgICArK3MtPm5j aGFyczsKICAgICAgIGVhc3NlcnQgKHMtPm5jaGFycyA8PSBlbmQgLSBzdGFydCk7CiAgICAgICBz LT53aWR0aCArPSBnbHlwaC0+cGl4ZWxfd2lkdGg7Ci0gICAgICBpZiAoZ2x5cGgrKy0+cGFkZGlu Z19wICE9IHMtPnBhZGRpbmdfcCkKLQlicmVhazsKKyAgICAgIGdseXBoKys7CisgICAgICBicmVh azsKICAgICB9CiAKICAgcy0+Zm9udCA9IHMtPmZhY2UtPmZvbnQ7CkBAIC0yNzg3Nyw3ICsyNzg4 Miw4IEBAIGZpbGxfc3RyZXRjaF9nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMs IGludCBzdGFydCwgaW50IGVuZCkKIH0KIAogc3RhdGljIHN0cnVjdCBmb250X21ldHJpY3MgKgot Z2V0X3Blcl9jaGFyX21ldHJpYyAoc3RydWN0IGZvbnQgKmZvbnQsIGNvbnN0IHVuc2lnbmVkICpj aGFyMmIpCitnZXRfcGVyX2NoYXJfbWV0cmljIChzdHJ1Y3QgZm9udCAqZm9udCwgY29uc3QgdW5z aWduZWQgKmNoYXIyYiwKKwkJICAgICBzdHJ1Y3QgZ2x5cGhfY29udGV4dCAqY29udGV4dCkKIHsK ICAgc3RhdGljIHN0cnVjdCBmb250X21ldHJpY3MgbWV0cmljczsKIApAQCAtMjc4ODYsNyArMjc4 OTIsNyBAQCBnZXRfcGVyX2NoYXJfbWV0cmljIChzdHJ1Y3QgZm9udCAqZm9udCwgY29uc3QgdW5z aWduZWQgKmNoYXIyYikKICAgaWYgKCpjaGFyMmIgPT0gRk9OVF9JTlZBTElEX0NPREUpCiAgICAg cmV0dXJuIE5VTEw7CiAKLSAgZm9udC0+ZHJpdmVyLT50ZXh0X2V4dGVudHMgKGZvbnQsIGNoYXIy YiwgMSwgJm1ldHJpY3MpOworICBmb250LT5kcml2ZXItPnRleHRfZXh0ZW50cyAoZm9udCwgY2hh cjJiLCAxLCAmbWV0cmljcywgY29udGV4dCk7CiAgIHJldHVybiAmbWV0cmljczsKIH0KIApAQCAt Mjc5MDgsOSArMjc5MTQsMTAgQEAgbm9ybWFsX2NoYXJfYXNjZW50X2Rlc2NlbnQgKHN0cnVjdCBm b250ICpmb250LCBpbnQgYywgaW50ICphc2NlbnQsIGludCAqZGVzY2VudCkKIAogICAgICAgLyog R2V0IG1ldHJpY3Mgb2YgQywgZGVmYXVsdGluZyB0byBhIHJlYXNvbmFibHkgc2l6ZWQgQVNDSUkK IAkgY2hhcmFjdGVyLiAgKi8KLSAgICAgIGlmIChnZXRfY2hhcl9nbHlwaF9jb2RlIChjID49IDAg PyBjIDogJ3snLCBmb250LCAmY2hhcjJiKSkKKyAgICAgIGlmIChnZXRfY2hhcl9nbHlwaF9jb2Rl IChjID49IDAgPyBjIDogJ3snLCBmb250LCAmY2hhcjJiLCBOVUxMKSkKIAl7Ci0JICBzdHJ1Y3Qg Zm9udF9tZXRyaWNzICpwY20gPSBnZXRfcGVyX2NoYXJfbWV0cmljIChmb250LCAmY2hhcjJiKTsK KwkgIHN0cnVjdCBmb250X21ldHJpY3MgKnBjbSA9IGdldF9wZXJfY2hhcl9tZXRyaWMgKGZvbnQs ICZjaGFyMmIsCisJCQkJCQkJICBOVUxMKTsKIAogCSAgaWYgKCEocGNtLT53aWR0aCA9PSAwICYm IHBjbS0+cmJlYXJpbmcgPT0gMCAmJiBwY20tPmxiZWFyaW5nID09IDApKQogCSAgICB7CkBAIC0y Nzk1MiwxMCArMjc5NTksMTIgQEAgZ3VpX2dldF9nbHlwaF9vdmVyaGFuZ3MgKHN0cnVjdCBnbHlw aCAqZ2x5cGgsIHN0cnVjdCBmcmFtZSAqZiwgaW50ICpsZWZ0LCBpbnQgKnIKICAgaWYgKGdseXBo LT50eXBlID09IENIQVJfR0xZUEgpCiAgICAgewogICAgICAgdW5zaWduZWQgY2hhcjJiOwotICAg ICAgc3RydWN0IGZhY2UgKmZhY2UgPSBnZXRfZ2x5cGhfZmFjZV9hbmRfZW5jb2RpbmcgKGYsIGds eXBoLCAmY2hhcjJiKTsKKyAgICAgIHN0cnVjdCBmYWNlICpmYWNlID0gZ2V0X2dseXBoX2ZhY2Vf YW5kX2VuY29kaW5nIChmLCBnbHlwaCwgJmNoYXIyYiwKKwkJCQkJCSAgICAgICBOVUxMKTsKICAg ICAgIGlmIChmYWNlLT5mb250KQogCXsKLQkgIHN0cnVjdCBmb250X21ldHJpY3MgKnBjbSA9IGdl dF9wZXJfY2hhcl9tZXRyaWMgKGZhY2UtPmZvbnQsICZjaGFyMmIpOworCSAgc3RydWN0IGZvbnRf bWV0cmljcyAqcGNtID0gZ2V0X3Blcl9jaGFyX21ldHJpYyAoZmFjZS0+Zm9udCwgJmNoYXIyYiwK KwkJCQkJCQkgIE5VTEwpOwogCSAgaWYgKHBjbSkKIAkgICAgewogCSAgICAgIGlmIChwY20tPnJi ZWFyaW5nID4gcGNtLT53aWR0aCkKQEAgLTI5ODQxLDEyICsyOTg1MCwxMiBAQCBwcm9kdWNlX2ds eXBobGVzc19nbHlwaCAoc3RydWN0IGl0ICppdCwgYm9vbCBmb3Jfbm9fZm9udCwgTGlzcF9PYmpl Y3QgYWNyb255bSkKIAkgIHN0ciA9IGJ1ZjsKIAl9CiAgICAgICBmb3IgKGxlbiA9IDA7IHN0clts ZW5dICYmIEFTQ0lJX0NIQVJfUCAoc3RyW2xlbl0pICYmIGxlbiA8IDY7IGxlbisrKQotCWNvZGVb bGVuXSA9IGZvbnQtPmRyaXZlci0+ZW5jb2RlX2NoYXIgKGZvbnQsIHN0cltsZW5dKTsKKwljb2Rl W2xlbl0gPSBmb250LT5kcml2ZXItPmVuY29kZV9jaGFyIChmb250LCBzdHJbbGVuXSwgTlVMTCk7 CiAgICAgICB1cHBlcl9sZW4gPSAobGVuICsgMSkgLyAyOwogICAgICAgZm9udC0+ZHJpdmVyLT50 ZXh0X2V4dGVudHMgKGZvbnQsIGNvZGUsIHVwcGVyX2xlbiwKLQkJCQkgICZtZXRyaWNzX3VwcGVy KTsKKwkJCQkgICZtZXRyaWNzX3VwcGVyLCBOVUxMKTsKICAgICAgIGZvbnQtPmRyaXZlci0+dGV4 dF9leHRlbnRzIChmb250LCBjb2RlICsgdXBwZXJfbGVuLCBsZW4gLSB1cHBlcl9sZW4sCi0JCQkJ ICAmbWV0cmljc19sb3dlcik7CisJCQkJICAmbWV0cmljc19sb3dlciwgTlVMTCk7CiAKIAogCkBA IC0yOTkzNiw2ICsyOTk0NSw0MCBAQCAjZGVmaW5lIElUX0FQUExZX0ZBQ0VfQk9YKGl0LCBmYWNl KQkJCQlcCiAgICAgICB9CQkJCQkJCQlcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKK3N0YXRpYyBz dHJ1Y3QgZ2x5cGhfY29udGV4dCAqCittYWtlX2NvbnRleHQgKHN0cnVjdCBpdCAqaXQpCit7Cisg IHN0cnVjdCBnbHlwaF9jb250ZXh0ICpjb250ZXh0ID0geG1hbGxvYyAoc2l6ZW9mICpjb250ZXh0 KTsgLy8gWFhYIEdDCisgIGNoYXIgKnN0cmluZyA9IHhtYWxsb2MgKDEyOCk7CisgIGNoYXIgKnAg PSBzdHJpbmc7CisgIHB0cmRpZmZfdCBieXRlcG9zID0gaXQtPmN1cnJlbnQucG9zLmJ5dGVwb3M7 CisgIHB0cmRpZmZfdCBjaGFycG9zID0gaXQtPmN1cnJlbnQucG9zLmNoYXJwb3M7CisgIHB0cmRp ZmZfdCBicDUgPSBieXRlcG9zOworICBwdHJkaWZmX3QgYnAwID0gYnA1OworICBwdHJkaWZmX3Qg YnAxID0gYnA1OworICB3aGlsZSAoYnl0ZXBvcyA+IEJFR19CWVRFICYmIGJwNSAtIGJ5dGVwb3Mg PCAzMikKKyAgICBkZWNfYm90aCAoJmNoYXJwb3MsICZieXRlcG9zKTsKKyAgYnAwID0gYnl0ZXBv czsKKyAgaW50IGkgPSAwOworICBMaXNwX09iamVjdCBwb3MgPSBtYWtlX2ZpeG51bSAoMCk7Cisg IHdoaWxlIChieXRlcG9zID49IEJFR19CWVRFICYmIGJ5dGVwb3MgPCBaX0JZVEUgJiYgYnl0ZXBv cyAtIGJwMCA8IDMyKQorICAgIHsKKyAgICAgIGluY19ib3RoICgmY2hhcnBvcywgJmJ5dGVwb3Mp OworICAgICAgbWVtY3B5IChwLCBCVUZfQllURV9BRERSRVNTIChjdXJyZW50X2J1ZmZlciwgYnl0 ZXBvcyAtIHByZXZfY2hhcl9sZW4gKGJ5dGVwb3MpKSwgcHJldl9jaGFyX2xlbiAoYnl0ZXBvcykp OworICAgICAgcCArPSBwcmV2X2NoYXJfbGVuIChieXRlcG9zKTsKKyAgICAgICsraTsKKyAgICAg IGlmIChieXRlcG9zID09IGJwNSkKKwlwb3MgPSBtYWtlX2ZpeG51bSAoaSk7CisgICAgfQorICBi cDEgPSBieXRlcG9zOworICBlYXNzZXJ0IChzdHJsZW4gKHApID09IGJwMSAtIGJwMCk7CisgICpw KysgPSBpdC0+YzsKKyAgKnArKyA9IDA7CisgIGNvbnRleHQtPnN0cmluZyA9IGJ1aWxkX3N0cmlu ZyAoc3RyaW5nKTsKKyAgY29udGV4dC0+cG9zaXRpb24gPSBwb3M7CisgIHJldHVybiBjb250ZXh0 OworfQorCiAvKiBSSUY6CiAgICBQcm9kdWNlIGdseXBocy9nZXQgZGlzcGxheSBtZXRyaWNzIGZv ciB0aGUgZGlzcGxheSBlbGVtZW50IElUIGlzCiAgICBsb2FkZWQgd2l0aC4gIFNlZSB0aGUgZGVz Y3JpcHRpb24gb2Ygc3RydWN0IGl0IGluIGRpc3BleHRlcm4uaApAQCAtMjk5NzMsNiArMzAwMTYs NyBAQCBndWlfcHJvZHVjZV9nbHlwaHMgKHN0cnVjdCBpdCAqaXQpCiAgICAgICBpZiAoZm9udC0+ dmVydGljYWxfY2VudGVyaW5nKQogCWJvZmYgPSBWQ0VOVEVSX0JBU0VMSU5FX09GRlNFVCAoZm9u dCwgaXQtPmYpIC0gYm9mZjsKIAorICAgICAgc3RydWN0IGdseXBoX2NvbnRleHQgKmNvbnRleHQg PSBOVUxMOwogICAgICAgaWYgKGl0LT5jaGFyX3RvX2Rpc3BsYXkgIT0gJ1xuJyAmJiBpdC0+Y2hh cl90b19kaXNwbGF5ICE9ICdcdCcpCiAJewogCSAgaXQtPm5nbHlwaHMgPSAxOwpAQCAtMjk5ODks OSArMzAwMzMsMTEgQEAgZ3VpX3Byb2R1Y2VfZ2x5cGhzIChzdHJ1Y3QgaXQgKml0KQogIAkgICAg ICBpdC0+ZGVzY2VudCA9IEZPTlRfREVTQ0VOVCAoZm9udCkgLSBib2ZmOwogIAkgICAgfQogCi0J ICBpZiAoZ2V0X2NoYXJfZ2x5cGhfY29kZSAoaXQtPmNoYXJfdG9fZGlzcGxheSwgZm9udCwgJmNo YXIyYikpCisJICBjb250ZXh0ID0gbWFrZV9jb250ZXh0IChpdCk7CisJICBpZiAoZ2V0X2NoYXJf Z2x5cGhfY29kZSAoaXQtPmNoYXJfdG9fZGlzcGxheSwgZm9udCwgJmNoYXIyYiwKKwkJCQkgICBj b250ZXh0KSkKIAkgICAgewotCSAgICAgIHBjbSA9IGdldF9wZXJfY2hhcl9tZXRyaWMgKGZvbnQs ICZjaGFyMmIpOworCSAgICAgIHBjbSA9IGdldF9wZXJfY2hhcl9tZXRyaWMgKGZvbnQsICZjaGFy MmIsIGNvbnRleHQpOwogCSAgICAgIGlmIChwY20tPndpZHRoID09IDAKIAkJICAmJiBwY20tPnJi ZWFyaW5nID09IDAgJiYgcGNtLT5sYmVhcmluZyA9PSAwKQogCQlwY20gPSBOVUxMOwpAQCAtMzAw NzksOSArMzAxMjUsMTMgQEAgZ3VpX3Byb2R1Y2VfZ2x5cGhzIChzdHJ1Y3QgaXQgKml0KQogCQkJ CS8gRk9OVF9IRUlHSFQgKGZvbnQpKTsKIAkJICBhcHBlbmRfc3RyZXRjaF9nbHlwaCAoaXQsIGl0 LT5vYmplY3QsIGl0LT5waXhlbF93aWR0aCwKIAkJCQkJaXQtPmFzY2VudCArIGl0LT5kZXNjZW50 LCBhc2NlbnQpOworCQkgIGl0LT5nbHlwaF9yb3ctPmdseXBoc1tpdC0+YXJlYV1baXQtPmdseXBo X3Jvdy0+dXNlZFtpdC0+YXJlYV0gLSAxXS5jb250ZXh0ID0gTlVMTDsKIAkJfQogCSAgICAgIGVs c2UKLQkJYXBwZW5kX2dseXBoIChpdCk7CisJCXsKKwkJICBhcHBlbmRfZ2x5cGggKGl0KTsKKwkJ ICBpdC0+Z2x5cGhfcm93LT5nbHlwaHNbaXQtPmFyZWFdW2l0LT5nbHlwaF9yb3ctPnVzZWRbaXQt PmFyZWFdIC0gMV0uY29udGV4dCA9IGNvbnRleHQ7CisJCX0KIAogCSAgICAgIC8qIElmIGNoYXJh Y3RlcnMgd2l0aCBsYmVhcmluZyBvciByYmVhcmluZyBhcmUgZGlzcGxheWVkCiAJCSBpbiB0aGlz IGxpbmUsIHJlY29yZCB0aGF0IGZhY3QgaW4gYSBmbGFnIG9mIHRoZQpAQCAtMzAyMzMsOSArMzAy ODMsOSBAQCBndWlfcHJvZHVjZV9nbHlwaHMgKHN0cnVjdCBpdCAqaXQpCiAJICAgICAgaXQtPm5n bHlwaHMgPSAxOwogCSAgICAgIGlmIChGT05UX1RPT19ISUdIIChmb250KSkKIAkJewotCQkgIGlm IChnZXRfY2hhcl9nbHlwaF9jb2RlICgnICcsIGZvbnQsICZjaGFyMmIpKQorCQkgIGlmIChnZXRf Y2hhcl9nbHlwaF9jb2RlICgnICcsIGZvbnQsICZjaGFyMmIsIE5VTEwpKQogCQkgICAgewotCQkg ICAgICBwY20gPSBnZXRfcGVyX2NoYXJfbWV0cmljIChmb250LCAmY2hhcjJiKTsKKwkJICAgICAg cGNtID0gZ2V0X3Blcl9jaGFyX21ldHJpYyAoZm9udCwgJmNoYXIyYiwgTlVMTCk7CiAJCSAgICAg IGlmIChwY20tPndpZHRoID09IDAKIAkJCSAgJiYgcGNtLT5yYmVhcmluZyA9PSAwICYmIHBjbS0+ bGJlYXJpbmcgPT0gMCkKIAkJCXBjbSA9IE5VTEw7CkBAIC0zMDM3Miw4ICszMDQyMiw4IEBAIGd1 aV9wcm9kdWNlX2dseXBocyAoc3RydWN0IGl0ICppdCkKIAkgIGlmICghIGZvbnRfbm90X2ZvdW5k X3ApCiAJICAgIHsKIAkgICAgICBnZXRfY2hhcl9mYWNlX2FuZF9lbmNvZGluZyAoaXQtPmYsIGMs IGl0LT5mYWNlX2lkLAotCQkJCQkgICZjaGFyMmIsIGZhbHNlKTsKLQkgICAgICBwY20gPSBnZXRf cGVyX2NoYXJfbWV0cmljIChmb250LCAmY2hhcjJiKTsKKwkJCQkJICAmY2hhcjJiLCBmYWxzZSwg TlVMTCk7CisJICAgICAgcGNtID0gZ2V0X3Blcl9jaGFyX21ldHJpYyAoZm9udCwgJmNoYXIyYiwg TlVMTCk7CiAJICAgIH0KIAogCSAgLyogSW5pdGlhbGl6ZSB0aGUgYm91bmRpbmcgYm94LiAgKi8K QEAgLTMwNDMzLDggKzMwNDgzLDkgQEAgZ3VpX3Byb2R1Y2VfZ2x5cGhzIChzdHJ1Y3QgaXQgKml0 KQogCSAgICAgIGVsc2UKIAkJewogCQkgIGdldF9jaGFyX2ZhY2VfYW5kX2VuY29kaW5nIChpdC0+ ZiwgY2gsIGZhY2VfaWQsCi0JCQkJCSAgICAgICZjaGFyMmIsIGZhbHNlKTsKLQkJICBwY20gPSBn ZXRfcGVyX2NoYXJfbWV0cmljIChmb250LCAmY2hhcjJiKTsKKwkJCQkJICAgICAgJmNoYXIyYiwg ZmFsc2UsCisJCQkJCSAgICAgIG1ha2VfY29udGV4dCAoaXQpKTsKKwkJICBwY20gPSBnZXRfcGVy X2NoYXJfbWV0cmljIChmb250LCAmY2hhcjJiLCBtYWtlX2NvbnRleHQgKGl0KSk7CiAJCX0KIAkg ICAgICBpZiAoISBwY20pCiAJCWNtcC0+b2Zmc2V0c1tpICogMl0gPSBjbXAtPm9mZnNldHNbaSAq IDIgKyAxXSA9IDA7CmRpZmYgLS1naXQgYS9zcmMveHRlcm0uYyBiL3NyYy94dGVybS5jCmluZGV4 IDc5ODljZWNlYzcuLjNiNWYwZDM1MjQgMTAwNjQ0Ci0tLSBhL3NyYy94dGVybS5jCisrKyBiL3Ny Yy94dGVybS5jCkBAIC0xNzAzLDcgKzE3MDMsOCBAQCB4X2NvbXB1dGVfZ2x5cGhfc3RyaW5nX292 ZXJoYW5ncyAoc3RydWN0IGdseXBoX3N0cmluZyAqcykKICAgICAgIGlmIChzLT5maXJzdF9nbHlw aC0+dHlwZSA9PSBDSEFSX0dMWVBIKQogCXsKIAkgIHN0cnVjdCBmb250ICpmb250ID0gcy0+Zm9u dDsKLQkgIGZvbnQtPmRyaXZlci0+dGV4dF9leHRlbnRzIChmb250LCBzLT5jaGFyMmIsIHMtPm5j aGFycywgJm1ldHJpY3MpOworCSAgZm9udC0+ZHJpdmVyLT50ZXh0X2V4dGVudHMgKGZvbnQsIHMt PmNoYXIyYiwgcy0+bmNoYXJzLCAmbWV0cmljcywKKwkJCQkgICAgICBOVUxMKTsKIAl9CiAgICAg ICBlbHNlCiAJewpAQCAtMjA0Nyw3ICsyMDQ4LDcgQEAgeF9kcmF3X2dseXBobGVzc19nbHlwaF9z dHJpbmdfZm9yZWdyb3VuZCAoc3RydWN0IGdseXBoX3N0cmluZyAqcykKIAogCSAgLyogSXQgaXMg YXNzdXJlZCB0aGF0IGFsbCBMRU4gY2hhcmFjdGVycyBpbiBTVFIgaXMgQVNDSUkuICAqLwogCSAg Zm9yIChqID0gMDsgaiA8IGxlbjsgaisrKQotICAgICAgICAgICAgY2hhcjJiW2pdID0gcy0+Zm9u dC0+ZHJpdmVyLT5lbmNvZGVfY2hhciAocy0+Zm9udCwgc3RyW2pdKSAmIDB4RkZGRjsKKyAgICAg ICAgICAgIGNoYXIyYltqXSA9IHMtPmZvbnQtPmRyaXZlci0+ZW5jb2RlX2NoYXIgKHMtPmZvbnQs IHN0cltqXSwgTlVMTCkgJiAweEZGRkY7CiAJICBzLT5mb250LT5kcml2ZXItPmRyYXcgKHMsIDAs IHVwcGVyX2xlbiwKIAkJCQkgeCArIGdseXBoLT5zbGljZS5nbHlwaGxlc3MudXBwZXJfeG9mZiwK IAkJCQkgcy0+eWJhc2UgKyBnbHlwaC0+c2xpY2UuZ2x5cGhsZXNzLnVwcGVyX3lvZmYsCg== --000000000000f6178205a6072e3c--