<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>177040</bug_id>
          
          <creation_ts>2017-09-16 13:54:32 -0700</creation_ts>
          <short_desc>[FreeType] Support emoji modifiers</short_desc>
          <delta_ts>2019-01-21 00:42:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>Other</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=191976</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=187166</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=193632</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=193395</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1349681</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-16 13:54:32 -0700</bug_when>
    <thetext>We now have support for color emoji, but gender and skin-tone modifiers [1] are not supported. We should change that.

Apple ports already have this support (see e.g. r213499).

[1] http://www.unicode.org/reports/tr51/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487609</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-12-13 09:12:18 -0800</bug_when>
    <thetext>Test page: https://unicode.org/emoji/charts/full-emoji-list.html

If you scroll down you&apos;ll notice that none of the emoji combinations work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487880</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-14 02:03:49 -0800</bug_when>
    <thetext>I see that some of them don&apos;t work, no none of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487894</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-12-14 06:04:06 -0800</bug_when>
    <thetext>Is there a combination on that page that does work for you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487898</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-14 06:34:39 -0800</bug_when>
    <thetext>Yes, see all the flags for example, see also the test I attached to original bug:

https://bug-156579-attachments.webkit.org/attachment.cgi?id=284325</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487903</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-14 06:59:05 -0800</bug_when>
    <thetext>Ok, so the problem only happens with emojis having the zero with joiner (U+200D) in the sequence. The sequence is broken because createAndFillGlyphPage() in Font.cpp overwrites zero with joiner with zero width space (U+200B). Myles, why are we doing that overwrite? should that depend on the font? Not doing the overwrite fixes all the combinations for me in https://unicode.org/emoji/charts/full-emoji-list.html. If we can&apos;t remove the overwrite we can handle that as a special case in harfbuzz set_nominal_glyph function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489442</commentid>
    <comment_count>6</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-12-19 13:35:42 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #5)
&gt; Ok, so the problem only happens with emojis having the zero with joiner
&gt; (U+200D) in the sequence. The sequence is broken because
&gt; createAndFillGlyphPage() in Font.cpp overwrites zero with joiner with zero
&gt; width space (U+200B). Myles, why are we doing that overwrite? should that
&gt; depend on the font? Not doing the overwrite fixes all the combinations for
&gt; me in https://unicode.org/emoji/charts/full-emoji-list.html. If we can&apos;t
&gt; remove the overwrite we can handle that as a special case in harfbuzz
&gt; set_nominal_glyph function.

This code is trying to make control characters invisible. I haven&apos;t done the research, but I expect the replacement code in createAndFillGlyphPage() is older than the WidthIterator::applyFontTransforms() code. (Both the simple text path and the complex text path use createAndFillGlyphPage().)

You&apos;ve hit the reason I filed https://bugs.webkit.org/show_bug.cgi?id=187166. Because shaping operates on the character stream of the input, if we muck around with the character string, we break shaping. This has bitten us multiple times, see https://bugs.webkit.org/show_bug.cgi?id=185976

The right way to do this is to run shaping on the unperturbed character stream, and after shaping is finished, map each glyph in the result back to the character in the stream it represents, and if it represents a control character, remove that glyph from the stream.

Unfortunately, &quot;map each glyph in the result back to the character in the stream it represents&quot; is impossible in the Cocoa fast text codepath. That codepath uses CTFontTransformGlyphs() to do the shaping, but doesn&apos;t output a mapping back to the original string indices. &lt;rdar://problem/44466695&gt; is tracking this.

So, if I understand the Harfbuzz API correctly, the Harfbuzz ports should be able to fix this immediately, but the existing code needs to continue to exist for the Cocoa ports until we get a solution from the platform that fits.

Bonus: There used to be interop for many years between the browsers about making control characters invisible. However, the spec changed[1] and now says &quot;Control characters (Unicode category Cc) other than tab (U+0009), line feed (U+000A), and form feed (U+000C), must be rendered as a visible glyph.&quot; However, I&apos;m not sure we can actually make that change, because I don&apos;t think we&apos;ve characterized how many sites would break (where &quot;break&quot; means &quot;control character garbage shows up and makes content unreadable where it used to be invisible and readable&quot;). The decision about rendering control characters visibly should be independently from the method of fixing createAndFillGlyphPage().

[1] https://drafts.csswg.org/css-text-3/#white-space-processing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491066</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-31 06:16:59 -0800</bug_when>
    <thetext>Harfbuzz already replaces characters with Default_Ignorable Unicode property with space glyph and zeroes the advance width when shaping. So, I think we can probably avoid all the overrides for the GTK port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491266</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-02 14:41:49 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #7)
&gt; Harfbuzz already replaces characters with Default_Ignorable Unicode property
&gt; with space glyph and zeroes the advance width when shaping. So, I think we
&gt; can probably avoid all the overrides for the GTK port.

Awesome!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493648</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-01-11 02:04:32 -0800</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #8)
&gt; (In reply to Carlos Garcia Campos from comment #7)
&gt; &gt; Harfbuzz already replaces characters with Default_Ignorable Unicode property
&gt; &gt; with space glyph and zeroes the advance width when shaping. So, I think we
&gt; &gt; can probably avoid all the overrides for the GTK port.
&gt; 
&gt; Awesome!

Unfortunately this is not so easy in the end. We still need to replace \n and \t to space too, and some characters never reach to harfbuzz anyway like isolations, because they are left out when splitting the text runs, and added back to list of glyphs when rendering, causing the missing glyph to be rendered. So, the safest approach that fixes this bug would be to only override the code points when the font doesn&apos;t support the code point. That would fix this bug without introducing any regression in tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493655</commentid>
    <comment_count>10</comment_count>
      <attachid>358890</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-01-11 04:57:17 -0800</bug_when>
    <thetext>Created attachment 358890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494089</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-01-13 23:59:06 -0800</bug_when>
    <thetext>Committed r239915: &lt;https://trac.webkit.org/changeset/239915&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494090</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-14 00:02:04 -0800</bug_when>
    <thetext>&lt;rdar://problem/47245470&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358890</attachid>
            <date>2019-01-11 04:57:17 -0800</date>
            <delta_ts>2019-01-11 15:46:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wc-ft-emojis.diff</filename>
            <type>text/plain</type>
            <size>9666</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1ODNjMTRhMjlmZS4uZGRlMDczZTM0NDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxOS0wMS0xMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0ZyZWVUeXBlXSBTdXBwb3J0IGVtb2ppIG1vZGlmaWVycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MDQwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFyayBzZXZlcmFsIGVtb2ppIHRl
c3RzIGFzIHBhc3Npbmcgbm93LgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3Rh
dGlvbnM6CisKIDIwMTktMDEtMTAgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEF1ZGl0OiBhbGxvdyBhdWRpdHMgdG8gYmUgZW5hYmxl
ZC9kaXNhYmxlZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRl
eCA5YTg1NjQ1MmE5Mi4uZDQzMTQ4Yzc0MjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9U
ZXN0RXhwZWN0YXRpb25zCkBAIC0zNzgwLDYgKzM3ODAsMTIgQEAgZmFzdC90ZXh0L2Vtb2ppLWdl
bmRlci0yLTYuaHRtbCBbIFBhc3MgXQogZmFzdC90ZXh0L2Vtb2ppLWdlbmRlci0yLTcuaHRtbCBb
IFBhc3MgXQogZmFzdC90ZXh0L2Vtb2ppLWdlbmRlci0yLTguaHRtbCBbIFBhc3MgXQogZmFzdC90
ZXh0L2Vtb2ppLWdlbmRlci0yLTkuaHRtbCBbIFBhc3MgXQorZmFzdC90ZXh0L2Vtb2ppLWdlbmRl
ci0zLmh0bWwgWyBQYXNzIF0KK2Zhc3QvdGV4dC9lbW9qaS1nZW5kZXItNC5odG1sIFsgUGFzcyBd
CitmYXN0L3RleHQvZW1vamktZ2VuZGVyLTUuaHRtbCBbIFBhc3MgXQorZmFzdC90ZXh0L2Vtb2pp
LWdlbmRlci02Lmh0bWwgWyBQYXNzIF0KK2Zhc3QvdGV4dC9lbW9qaS1nZW5kZXItOC5odG1sIFsg
UGFzcyBdCitmYXN0L3RleHQvZW1vamktZ2VuZGVyLTkuaHRtbCBbIFBhc3MgXQogZmFzdC90ZXh0
L2Vtb2ppLWdlbmRlci5odG1sIFsgUGFzcyBdCiBmYXN0L3RleHQvZW1vamktZ2VuZGVyLWZlMGYt
My5odG1sIFsgUGFzcyBdCiBmYXN0L3RleHQvZW1vamktZ2VuZGVyLWZlMGYtNC5odG1sIFsgUGFz
cyBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggNzZiNjI3NjkwMzMuLjA3NmY4NjQzYWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTktMDEtMTEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtGcmVlVHlwZV0gU3VwcG9ydCBlbW9qaSBtb2RpZmll
cnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzA0
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBw
cm9ibGVtIG9ubHkgaGFwcGVucyB3aXRoIGVtb2ppcyBoYXZpbmcgdGhlIHplcm8gd2l0aCBqb2lu
ZXIgKFUrMjAwRCkgaW4gdGhlIHNlcXVlbmNlLiBUaGUgc2VxdWVuY2UgaXMKKyAgICAgICAgYnJv
a2VuIGJlY2F1c2UgY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgpIGluIEZvbnQuY3BwIG92ZXJ3cml0
ZXMgemVybyB3aXRoIGpvaW5lciB3aXRoIHplcm8gd2lkdGggc3BhY2UgKFUrMjAwQiksCisgICAg
ICAgIGJ1dCB0aGUgZW1vamkgZm9udCBhY3R1YWxseSBzdXBwb3J0cyB6ZXJvIHdpdGggam9pbmVy
LiBUaGlzIHBhdGNoIG1vdmVzIHRoZSBjb250cm9sIGNoYXJhY3RlcnMgb3ZlcnJpZGUgZnJvbQor
ICAgICAgICBjcmVhdGVBbmRGaWxsR2x5cGhQYWdlKCkgdG8gR2x5cGhQYWdlOjpmaWxsKCkgb25s
eSBmb3IgRnJlZVR5cGUgYmFzZWQgcG9ydHMuIFRoaXMgd2F5IHdlIGNhbiBkbyB0aGUgb3ZlcnJp
ZGUKKyAgICAgICAgb25seSBmb3IgdGhlIGNhc2VzIHdoZXJlIHRoZSBjb2RlIHBvaW50IGlzIG5v
dCBzdXBwb3J0ZWQgYnkgdGhlIGZvbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om92ZXJyaWRlQ29udHJvbENoYXJhY3RlcnMpOiBI
ZWxwZXIgZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGNvbnRyb2wgY2hhcmFjdGVycy4KKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UpOiBDYWxsIG92ZXJyaWRlQ29udHJv
bENoYXJhY3RlcnMoKSBvbmx5IHdoZW4gbm90IHVzaW5nIEZyZWVUeXBlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2RlRnJlZVR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpmaWxsKTogVXNlIHplcm8gd2lkdGggc3BhY2Ug
YXMgZmFsbGJhY2sgd2hlbiB0aGUgZm9udCBkb2Vzbid0IHN1cHBvcnQgY2hhcmFjdGVycyB3aXRo
CisgICAgICAgIERlZmF1bHRfSWdub3JhYmxlIFVuaWNvZGUgcHJvcGVydHkuCisKIDIwMTktMDEt
MTAgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V0hMU0xdIEluY2x1ZGUgdGhlIHN0YW5kYXJkIGxpYnJhcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggZDAzYzI1ZjYyZjguLmI2YzExNjQyM2ZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtMjYzLDYgKzI2Myw1
MCBAQCBzdGF0aWMgT3B0aW9uYWw8c2l6ZV90PiBjb2RlUG9pbnRTdXBwb3J0SW5kZXgoVUNoYXIz
MiBjb2RlUG9pbnQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmICFVU0UoRlJFRVRZUEUp
CitzdGF0aWMgdm9pZCBvdmVycmlkZUNvbnRyb2xDaGFyYWN0ZXJzKFZlY3RvcjxVQ2hhcj4mIGJ1
ZmZlciwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKK3sKKyAgICBhdXRvIG92ZXJ3cml0
ZUNvZGVQb2ludHMgPSBbJl0odW5zaWduZWQgbWluaW11bSwgdW5zaWduZWQgbWF4aW11bSwgVUNo
YXIgbmV3Q29kZVBvaW50KSB7CisgICAgICAgIHVuc2lnbmVkIGJlZ2luID0gc3RkOjptYXgoc3Rh
cnQsIG1pbmltdW0pOworICAgICAgICB1bnNpZ25lZCBjb21wbGV0ZSA9IHN0ZDo6bWluKGVuZCwg
bWF4aW11bSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJlZ2luOyBpIDwgY29tcGxldGU7
ICsraSkgeworICAgICAgICAgICAgQVNTRVJUKGNvZGVQb2ludFN1cHBvcnRJbmRleChpKSk7Cisg
ICAgICAgICAgICBidWZmZXJbaSAtIHN0YXJ0XSA9IG5ld0NvZGVQb2ludDsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBhdXRvIG92ZXJ3cml0ZUNvZGVQb2ludCA9IFsmXShVQ2hhciBjb2RlUG9p
bnQsIFVDaGFyIG5ld0NvZGVQb2ludCkgeworICAgICAgICBBU1NFUlQoY29kZVBvaW50U3VwcG9y
dEluZGV4KGNvZGVQb2ludCkpOworICAgICAgICBpZiAoY29kZVBvaW50ID49IHN0YXJ0ICYmIGNv
ZGVQb2ludCA8IGVuZCkKKyAgICAgICAgICAgIGJ1ZmZlcltjb2RlUG9pbnQgLSBzdGFydF0gPSBu
ZXdDb2RlUG9pbnQ7CisgICAgfTsKKworICAgIC8vIENvZGUgcG9pbnRzIDB4MCAtIDB4MjAgYW5k
IDB4N0YgLSAweEEwIGFyZSBjb250cm9sIGNoYXJhY3RlciBhbmQgc2hvdWxkbid0IHJlbmRlci4g
TWFwIHRoZW0gdG8gWkVSTyBXSURUSCBTUEFDRS4KKyAgICBvdmVyd3JpdGVDb2RlUG9pbnRzKDB4
MCwgMHgyMCwgemVyb1dpZHRoU3BhY2UpOworICAgIG92ZXJ3cml0ZUNvZGVQb2ludHMoMHg3Riwg
MHhBMCwgemVyb1dpZHRoU3BhY2UpOworICAgIG92ZXJ3cml0ZUNvZGVQb2ludChzb2Z0SHlwaGVu
LCB6ZXJvV2lkdGhTcGFjZSk7CisgICAgb3ZlcndyaXRlQ29kZVBvaW50KCdcbicsIHNwYWNlKTsK
KyAgICBvdmVyd3JpdGVDb2RlUG9pbnQoJ1x0Jywgc3BhY2UpOworICAgIG92ZXJ3cml0ZUNvZGVQ
b2ludChub0JyZWFrU3BhY2UsIHNwYWNlKTsKKyAgICBvdmVyd3JpdGVDb2RlUG9pbnQobmFycm93
Tm9CcmVha1NwYWNlLCB6ZXJvV2lkdGhTcGFjZSk7CisgICAgb3ZlcndyaXRlQ29kZVBvaW50KGxl
ZnRUb1JpZ2h0TWFyaywgemVyb1dpZHRoU3BhY2UpOworICAgIG92ZXJ3cml0ZUNvZGVQb2ludChy
aWdodFRvTGVmdE1hcmssIHplcm9XaWR0aFNwYWNlKTsKKyAgICBvdmVyd3JpdGVDb2RlUG9pbnQo
bGVmdFRvUmlnaHRFbWJlZCwgemVyb1dpZHRoU3BhY2UpOworICAgIG92ZXJ3cml0ZUNvZGVQb2lu
dChyaWdodFRvTGVmdEVtYmVkLCB6ZXJvV2lkdGhTcGFjZSk7CisgICAgb3ZlcndyaXRlQ29kZVBv
aW50KGxlZnRUb1JpZ2h0T3ZlcnJpZGUsIHplcm9XaWR0aFNwYWNlKTsKKyAgICBvdmVyd3JpdGVD
b2RlUG9pbnQocmlnaHRUb0xlZnRPdmVycmlkZSwgemVyb1dpZHRoU3BhY2UpOworICAgIG92ZXJ3
cml0ZUNvZGVQb2ludChsZWZ0VG9SaWdodElzb2xhdGUsIHplcm9XaWR0aFNwYWNlKTsKKyAgICBv
dmVyd3JpdGVDb2RlUG9pbnQocmlnaHRUb0xlZnRJc29sYXRlLCB6ZXJvV2lkdGhTcGFjZSk7Cisg
ICAgb3ZlcndyaXRlQ29kZVBvaW50KHplcm9XaWR0aE5vbkpvaW5lciwgemVyb1dpZHRoU3BhY2Up
OworICAgIG92ZXJ3cml0ZUNvZGVQb2ludCh6ZXJvV2lkdGhKb2luZXIsIHplcm9XaWR0aFNwYWNl
KTsKKyAgICBvdmVyd3JpdGVDb2RlUG9pbnQocG9wRGlyZWN0aW9uYWxGb3JtYXR0aW5nLCB6ZXJv
V2lkdGhTcGFjZSk7CisgICAgb3ZlcndyaXRlQ29kZVBvaW50KHBvcERpcmVjdGlvbmFsSXNvbGF0
ZSwgemVyb1dpZHRoU3BhY2UpOworICAgIG92ZXJ3cml0ZUNvZGVQb2ludChmaXJzdFN0cm9uZ0lz
b2xhdGUsIHplcm9XaWR0aFNwYWNlKTsKKyAgICBvdmVyd3JpdGVDb2RlUG9pbnQob2JqZWN0UmVw
bGFjZW1lbnRDaGFyYWN0ZXIsIHplcm9XaWR0aFNwYWNlKTsKKyAgICBvdmVyd3JpdGVDb2RlUG9p
bnQoemVyb1dpZHRoTm9CcmVha1NwYWNlLCB6ZXJvV2lkdGhTcGFjZSk7Cit9CisjZW5kaWYKKwog
c3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQg
cGFnZU51bWJlciwgY29uc3QgRm9udCYgZm9udCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQpAQCAtMjc2LDcgKzMyMCw2IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRG
aWxsR2x5cGhQYWdlKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnQmCiAgICAgdW5zaWdu
ZWQgZ2x5cGhQYWdlU2l6ZSA9IEdseXBoUGFnZTo6c2l6ZUZvclBhZ2VOdW1iZXIocGFnZU51bWJl
cik7CiAKICAgICB1bnNpZ25lZCBzdGFydCA9IEdseXBoUGFnZTo6c3RhcnRpbmdDb2RlUG9pbnRJ
blBhZ2VOdW1iZXIocGFnZU51bWJlcik7Ci0gICAgdW5zaWduZWQgZW5kID0gc3RhcnQgKyBnbHlw
aFBhZ2VTaXplOwogICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKGdseXBoUGFnZVNpemUgKiAyICsg
Mik7CiAgICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoOwogICAgIC8vIEZpbGwgaW4gYSBidWZmZXIg
d2l0aCB0aGUgZW50aXJlICJwYWdlIiBvZiBjaGFyYWN0ZXJzIHRoYXQgd2Ugd2FudCB0byBsb29r
IHVwIGdseXBocyBmb3IuCkBAIC0yODUsNDQgKzMyOCw5IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQ
YWdlPiBjcmVhdGVBbmRGaWxsR2x5cGhQYWdlKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZv
bnQmCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykK
ICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHN0YXJ0ICsgaTsKIAotICAgICAgICAvLyBDb2RlIHBv
aW50cyAweDAgLSAweDIwIGFuZCAweDdGIC0gMHhBMCBhcmUgY29udHJvbCBjaGFyYWN0ZXIgYW5k
IHNob3VsZG4ndCByZW5kZXIuIE1hcCB0aGVtIHRvIFpFUk8gV0lEVEggU1BBQ0UuCi0gICAgICAg
IGF1dG8gb3ZlcndyaXRlQ29kZVBvaW50cyA9IFsmXSh1bnNpZ25lZCBtaW5pbXVtLCB1bnNpZ25l
ZCBtYXhpbXVtLCBVQ2hhciBuZXdDb2RlUG9pbnQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJl
Z2luID0gc3RkOjptYXgoc3RhcnQsIG1pbmltdW0pOwotICAgICAgICAgICAgdW5zaWduZWQgY29t
cGxldGUgPSBzdGQ6Om1pbihlbmQsIG1heGltdW0pOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYmVnaW47IGkgPCBjb21wbGV0ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KGNvZGVQb2ludFN1cHBvcnRJbmRleChpKSk7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgLSBz
dGFydF0gPSBuZXdDb2RlUG9pbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgYXV0byBvdmVyd3JpdGVDb2RlUG9pbnQgPSBbJl0oVUNoYXIgY29kZVBvaW50LCBVQ2hhciBu
ZXdDb2RlUG9pbnQpIHsKLSAgICAgICAgICAgIEFTU0VSVChjb2RlUG9pbnRTdXBwb3J0SW5kZXgo
Y29kZVBvaW50KSk7Ci0gICAgICAgICAgICBpZiAoY29kZVBvaW50ID49IHN0YXJ0ICYmIGNvZGVQ
b2ludCA8IGVuZCkKLSAgICAgICAgICAgICAgICBidWZmZXJbY29kZVBvaW50IC0gc3RhcnRdID0g
bmV3Q29kZVBvaW50OwotICAgICAgICB9OwotCi0gICAgICAgIG92ZXJ3cml0ZUNvZGVQb2ludHMo
MHgwLCAweDIwLCB6ZXJvV2lkdGhTcGFjZSk7Ci0gICAgICAgIG92ZXJ3cml0ZUNvZGVQb2ludHMo
MHg3RiwgMHhBMCwgemVyb1dpZHRoU3BhY2UpOwotICAgICAgICBvdmVyd3JpdGVDb2RlUG9pbnQo
c29mdEh5cGhlbiwgemVyb1dpZHRoU3BhY2UpOwotICAgICAgICBvdmVyd3JpdGVDb2RlUG9pbnQo
J1xuJywgc3BhY2UpOwotICAgICAgICBvdmVyd3JpdGVDb2RlUG9pbnQoJ1x0Jywgc3BhY2UpOwot
ICAgICAgICBvdmVyd3JpdGVDb2RlUG9pbnQobm9CcmVha1NwYWNlLCBzcGFjZSk7Ci0gICAgICAg
IG92ZXJ3cml0ZUNvZGVQb2ludChuYXJyb3dOb0JyZWFrU3BhY2UsIHplcm9XaWR0aFNwYWNlKTsK
LSAgICAgICAgb3ZlcndyaXRlQ29kZVBvaW50KGxlZnRUb1JpZ2h0TWFyaywgemVyb1dpZHRoU3Bh
Y2UpOwotICAgICAgICBvdmVyd3JpdGVDb2RlUG9pbnQocmlnaHRUb0xlZnRNYXJrLCB6ZXJvV2lk
dGhTcGFjZSk7Ci0gICAgICAgIG92ZXJ3cml0ZUNvZGVQb2ludChsZWZ0VG9SaWdodEVtYmVkLCB6
ZXJvV2lkdGhTcGFjZSk7Ci0gICAgICAgIG92ZXJ3cml0ZUNvZGVQb2ludChyaWdodFRvTGVmdEVt
YmVkLCB6ZXJvV2lkdGhTcGFjZSk7Ci0gICAgICAgIG92ZXJ3cml0ZUNvZGVQb2ludChsZWZ0VG9S
aWdodE92ZXJyaWRlLCB6ZXJvV2lkdGhTcGFjZSk7Ci0gICAgICAgIG92ZXJ3cml0ZUNvZGVQb2lu
dChyaWdodFRvTGVmdE92ZXJyaWRlLCB6ZXJvV2lkdGhTcGFjZSk7Ci0gICAgICAgIG92ZXJ3cml0
ZUNvZGVQb2ludChsZWZ0VG9SaWdodElzb2xhdGUsIHplcm9XaWR0aFNwYWNlKTsKLSAgICAgICAg
b3ZlcndyaXRlQ29kZVBvaW50KHJpZ2h0VG9MZWZ0SXNvbGF0ZSwgemVyb1dpZHRoU3BhY2UpOwot
ICAgICAgICBvdmVyd3JpdGVDb2RlUG9pbnQoemVyb1dpZHRoTm9uSm9pbmVyLCB6ZXJvV2lkdGhT
cGFjZSk7Ci0gICAgICAgIG92ZXJ3cml0ZUNvZGVQb2ludCh6ZXJvV2lkdGhKb2luZXIsIHplcm9X
aWR0aFNwYWNlKTsKLSAgICAgICAgb3ZlcndyaXRlQ29kZVBvaW50KHBvcERpcmVjdGlvbmFsRm9y
bWF0dGluZywgemVyb1dpZHRoU3BhY2UpOwotICAgICAgICBvdmVyd3JpdGVDb2RlUG9pbnQocG9w
RGlyZWN0aW9uYWxJc29sYXRlLCB6ZXJvV2lkdGhTcGFjZSk7Ci0gICAgICAgIG92ZXJ3cml0ZUNv
ZGVQb2ludChmaXJzdFN0cm9uZ0lzb2xhdGUsIHplcm9XaWR0aFNwYWNlKTsKLSAgICAgICAgb3Zl
cndyaXRlQ29kZVBvaW50KG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCB6ZXJvV2lkdGhTcGFj
ZSk7Ci0gICAgICAgIG92ZXJ3cml0ZUNvZGVQb2ludCh6ZXJvV2lkdGhOb0JyZWFrU3BhY2UsIHpl
cm9XaWR0aFNwYWNlKTsKKyNpZiAhVVNFKEZSRUVUWVBFKQorICAgICAgICBvdmVycmlkZUNvbnRy
b2xDaGFyYWN0ZXJzKGJ1ZmZlciwgc3RhcnQsIHN0YXJ0ICsgZ2x5cGhQYWdlU2l6ZSk7CisjZW5k
aWYKICAgICB9IGVsc2UgewogICAgICAgICBidWZmZXJMZW5ndGggPSBnbHlwaFBhZ2VTaXplICog
MjsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoUGFnZVNpemU7IGkrKykg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
R2x5cGhQYWdlVHJlZU5vZGVGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcAppbmRleCBjYWE0
YjhkZTc5Ni4uZGNkZDI2ZGVkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2RlRnJlZVR5cGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2Rl
RnJlZVR5cGUuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJDYWlyb1V0aWxpdGll
cy5oIgogI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIlVURjE2VUNoYXIzMkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KICNpbmNs
dWRlIDxjYWlyby5oPgpAQCAtNTgsNyArNTksMTEgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQogICAgICAgICBpZiAoY2hhcmFjdGVy
ID09IGl0ZXJhdG9yLmVuZCgpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgR2x5cGgg
Z2x5cGggPSBGY0ZyZWVUeXBlQ2hhckluZGV4KGZhY2UsIGNoYXJhY3Rlcik7CisgICAgICAgIEds
eXBoIGdseXBoID0gRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBGb250Q2FzY2FkZTo6dHJlYXRB
c1NwYWNlKGNoYXJhY3RlcikgPyBzcGFjZSA6IGNoYXJhY3Rlcik7CisgICAgICAgIC8vIElmIHRo
ZSBmb250IGRvZXNuJ3Qgc3VwcG9ydCBhIERlZmF1bHRfSWdub3JhYmxlIGNoYXJhY3RlciwgcmVw
bGFjZSBpdCB3aXRoIHplcm8gd2l0aCBzcGFjZS4KKyAgICAgICAgaWYgKCFnbHlwaCAmJiB1X2hh
c0JpbmFyeVByb3BlcnR5KGNoYXJhY3RlciwgVUNIQVJfREVGQVVMVF9JR05PUkFCTEVfQ09ERV9Q
T0lOVCkpCisgICAgICAgICAgICBnbHlwaCA9IEZjRnJlZVR5cGVDaGFySW5kZXgoZmFjZSwgemVy
b1dpZHRoU3BhY2UpOworCiAgICAgICAgIGlmICghZ2x5cGgpCiAgICAgICAgICAgICBzZXRHbHlw
aEZvckluZGV4KGksIDApOwogICAgICAgICBlbHNlIHsK
</data>
<flag name="review"
          id="375707"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>