<?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>223997</bug_id>
          
          <creation_ts>2021-03-31 06:00:38 -0700</creation_ts>
          <short_desc>Make FontCache constructable and safe to use off the main thread</short_desc>
          <delta_ts>2021-04-01 09:11:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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>
          <dependson>223995</dependson>
          <blocked>202793</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Lord">clord</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pvollan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1745604</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-31 06:00:38 -0700</bug_when>
    <thetext>For OffscreenCanvas to have its own FontCache separate from the main FontCache singleton, FontCache needs to be constructable and its methods safe to use off the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745831</commentid>
    <comment_count>1</comment_count>
      <attachid>424834</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-31 15:38:32 -0700</bug_when>
    <thetext>Created attachment 424834
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745837</commentid>
    <comment_count>2</comment_count>
      <attachid>424834</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-31 15:44:47 -0700</bug_when>
    <thetext>Comment on attachment 424834
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=424834&amp;action=review

&gt; Source/WebCore/platform/graphics/FontCache.h:41
&gt; +#include &lt;wtf/RefCounted.h&gt;

Should not need this if the header is including WTFString.h or AtomString.h

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:491
&gt; +    ASSERT(m_thread.ptr() == &amp;Thread::current());

Not sure this does the right thing with the web thread on iOS.

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:117
&gt; +    Ref&lt;Thread&gt; m_thread { Thread::current() };

Should wrap this in #if ASSERT_ENABLED.

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:129
&gt; +    ASSERT(m_thread.ptr() == &amp;Thread::current());

Not sure this does the right thing with the web thread on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745961</commentid>
    <comment_count>3</comment_count>
      <attachid>424880</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-01 01:40:16 -0700</bug_when>
    <thetext>Created attachment 424880
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746052</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-01 09:10:50 -0700</bug_when>
    <thetext>Committed r275364: &lt;https://commits.webkit.org/r275364&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 424880.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746053</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-01 09:11:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/76106447&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424834</attachid>
            <date>2021-03-31 15:38:32 -0700</date>
            <delta_ts>2021-04-01 01:40:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223997-20210331233831.patch</filename>
            <type>text/plain</type>
            <size>30777</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0OTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzJjOTgxODQzNjY1NDgz
NjExNjU3MDg2NjYwNDQ2M2FhODY5YzU2MC4uMWMxZDBlZDU2ZDkwNTliZjU4YmM4ODNjYzA3Yzc0
ZWU3NGViN2RmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDIxLTAzLTMxICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBjb25z
dHJ1Y3RhYmxlIGFuZCBzYWZlIHRvIHVzZSBvZmYgdGhlIG1haW4gdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM5OTcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTbyB0aGF0IHdlIGNhbiBoYXZl
IGEgc2VwYXJhdGUgRm9udENhY2hlIGZvciB1c2Ugd2l0aCBPZmZzY3JlZW5DYW52YXMKKyAgICAg
ICAgb24gV29ya2VyIHRocmVhZHMsIG1ha2UgRm9udENhY2hlIGNvbnN0cnVjdGFibGUvZGVzdHJ1
Y3RhYmxlIGFuZAorICAgICAgICByZWYtY291bnRlZC4KKworICAgICAgICBUaGlzIGFsc28gY2hh
bmdlcyBzb21lIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZXkgbm8gbG9uZ2VyIHJlbHkgb24gc3RhdGlj
CisgICAgICAgIEF0b21TdHJpbmcgdmFyaWFibGVzLCBhcyB0aGVzZSBwYXRocyB3b3VsZCBub3Qg
YmUgc2FmZSB0byB1c2Ugb2ZmIHRoZQorICAgICAgICBtYWluIHRocmVhZCwgYW5kIGNoYW5nZXMg
bWFpbi10aHJlYWQgY2hlY2tzIHRvIGNyZWF0aW9uLXRocmVhZCBjaGVja3MuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjph
bHRlcm5hdGVGYW1pbHlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2Fj
aGVkRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmZvbnRG
b3JGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzaW1pbGFyRm9udCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRm9u
dHM6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGVGb250cy5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVGb250czo6
cHJpbWFyeUZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNo
ZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6c2ltaWxhckZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5h
bWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVU
eXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNr
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseSk6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUpOgor
CiAyMDIxLTAzLTMxICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzZWxmLWNvbnRhaW5lZCAocmVtb3ZlIHN0YXRpYyBnbG9iYWwgdmFyaWFi
bGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
aW5kZXggZTkzOGJmMDdmMjI2YjM4ZDg0YzdhOGQ5MzgyYWIwOTlmZWMyOGU3Zi4uNjYzMmE1ODZi
Y2JkNDBjNjAwZjcxY2EyNzlkMGIzYmUxY2YxNDgwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC0xMzQsMzMgKzEzNCwyNSBAQCBzdHJ1
Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaFRyYWl0cyA6IHB1YmxpYyBTaW1wbGVDbGFz
c0hhc2hUcmFpdHM8Rm9udFBsYQogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1pl
cm8gPSBmYWxzZTsKIH07CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6YWx0ZXJuYXRl
RmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlM
aXRlcmFsPiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJiBmYW1p
bHlOYW1lKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRv
bVN0cmluZz4gYXJpYWwoIkFyaWFsIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4g
Y291cmllcigiQ291cmllciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAg
ICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJp
ZXJOZXcoIkNvdXJpZXIgTmV3IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVs
dmV0aWNhKCJIZWx2ZXRpY2EiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0g
ICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1l
cygiVGltZXMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGlj
IE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFu
KCJUaW1lcyBOZXcgUm9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0K
LSAgICBjb25zdCBBdG9tU3RyaW5nJiBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZv
cm1BbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpOwotICAgIGlmICghcGxhdGZvcm1TcGVj
aWZpY0FsdGVybmF0ZS5pc051bGwoKSkKKyAgICBpZiAoYXV0byBwbGF0Zm9ybVNwZWNpZmljQWx0
ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKQogICAgICAg
ICByZXR1cm4gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZTsKIAogICAgIHN3aXRjaCAoZmFtaWx5
TmFtZS5sZW5ndGgoKSkgewogICAgIGNhc2UgNToKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJhcmlhbCIpKQotICAgICAgICAgICAgcmV0dXJu
IGhlbHZldGljYTsKKyAgICAgICAgICAgIHJldHVybiAiSGVsdmV0aWNhIl9zOwogICAgICAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgInRpbWVzIikpCi0g
ICAgICAgICAgICByZXR1cm4gdGltZXNOZXdSb21hbjsKKyAgICAgICAgICAgIHJldHVybiAiVGlt
ZXMgTmV3IFJvbWFuIl9zOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDc6CiAgICAgICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiY291cmllciIpKQot
ICAgICAgICAgICAgcmV0dXJuIGNvdXJpZXJOZXc7CisgICAgICAgICAgICByZXR1cm4gIkNvdXJp
ZXIgTmV3Il9zOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDk6CiAgICAgICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiaGVsdmV0aWNhIikpCi0gICAg
ICAgICAgICByZXR1cm4gYXJpYWw7CisgICAgICAgICAgICByZXR1cm4gIkFyaWFsIl9zOwogICAg
ICAgICBicmVhazsKICNpZiAhT1MoV0lORE9XUykKICAgICAvLyBPbiBXaW5kb3dzLCBDb3VyaWVy
IE5ldyBpcyBhIFRydWVUeXBlIGZvbnQgdGhhdCBpcyBhbHdheXMgcHJlc2VudCBhbmQKQEAgLTE3
MCwxOSArMTYyLDE5IEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQogICAgIC8vIG9ubHkgYmUgdHJp
ZWQgaWYgQ291cmllciBOZXcgaXMgbm90IGZvdW5kLgogICAgIGNhc2UgMTE6CiAgICAgICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiY291cmllciBuZXci
KSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyOworICAgICAgICAgICAgcmV0dXJuICJDb3Vy
aWVyIl9zOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgMTU6CiAgICAgICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAidGltZXMgbmV3IHJv
bWFuIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXM7CisgICAgICAgICAgICByZXR1cm4gIlRp
bWVzIl9zOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbEF0b20oKTsK
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Gb250UGxhdGZvcm1EYXRhKiBGb250Q2Fj
aGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIHBhc3NlZEZhbWlseU5hbWUsCitGb250UGxh
dGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgcGFzc2VkRmFtaWx5
TmFtZSwKICAgICBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBG
b250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBi
b29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpA
QCAtMTkyLDE4ICsxODQsMTYgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNo
ZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICNpZiBPUyhXSU5E
T1dTKSAmJiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAgLy8gTGVhZGluZyAiQCIgaW4g
dGhlIGZvbnQgbmFtZSBlbmFibGVzIFdpbmRvd3MgdmVydGljYWwgZmxvdyBmbGFnIGZvciB0aGUg
Zm9udC4KICAgICAvLyBCZWNhdXNlIHdlIGRvIHZlcnRpY2FsIGZsb3cgYnkgb3Vyc2VsdmVzLCB3
ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgV2luZG93cyBmZWF0dXJlLgotICAgIC8vIElFIGRpc3Jl
Z2FyZHMgIkAiIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yaWVudGF0b2luLCBzbyB3ZSBmb2xsb3cgdGhl
IGJlaGF2aW9yLgotICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUgPSAocGFzc2VkRmFt
aWx5TmFtZS5pc0VtcHR5KCkgfHwgcGFzc2VkRmFtaWx5TmFtZVswXSAhPSAnQCcpID8KLSAgICAg
ICAgcGFzc2VkRmFtaWx5TmFtZSA6IEF0b21TdHJpbmcocGFzc2VkRmFtaWx5TmFtZS5pbXBsKCkt
PnN1YnN0cmluZygxKSk7CisgICAgLy8gSUUgZGlzcmVnYXJkcyAiQCIgcmVnYXJkbGVzcyBvZiB0
aGUgb3JpZW50YXRpb24sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZpb3IuCisgICAgY29uc3QgU3Ry
aW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZS5zdWJzdHJpbmcocGFzc2VkRmFtaWx5
TmFtZVswXSA9PSAnQCcgPyAxIDogMCk7CiAjZWxzZQotICAgIGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lOworICAgIGNvbnN0IFN0cmluZyYgZmFtaWx5TmFt
ZSA9IHBhc3NlZEZhbWlseU5hbWU7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBib29sIGluaXRpYWxp
emVkOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
b25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFsmXSgpIHsKICAgICAgICAg
cGxhdGZvcm1Jbml0KCk7Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9CisgICAg
fSk7CiAKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZhbWlseU5hbWUsIGZvbnRE
ZXNjcmlwdGlvbiwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwogCkBA
IC0yMTUsOSArMjA1LDggQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgaWYgKCFp
dC0+dmFsdWUgJiYgIWNoZWNraW5nQWx0ZXJuYXRlTmFtZSkgewogICAgICAgICAgICAgLy8gV2Ug
d2VyZSB1bmFibGUgdG8gZmluZCBhIGZvbnQuICBXZSBoYXZlIGEgc21hbGwgc2V0IG9mIGZvbnRz
IHRoYXQgd2UgYWxpYXMgdG8gb3RoZXIgbmFtZXMsCiAgICAgICAgICAgICAvLyBlLmcuLCBBcmlh
bC9IZWx2ZXRpY2EsIENvdXJpZXIvQ291cmllciBOZXcsIGV0Yy4gIFRyeSBsb29raW5nIHVwIHRo
ZSBmb250IHVuZGVyIHRoZSBhbGlhc2VkIG5hbWUuCi0gICAgICAgICAgICBjb25zdCBBdG9tU3Ry
aW5nJiBhbHRlcm5hdGVOYW1lID0gYWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAg
ICAgICAgICAgIGlmICghYWx0ZXJuYXRlTmFtZS5pc051bGwoKSkgewotICAgICAgICAgICAgICAg
IEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0
Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGFsdGVybmF0ZU5hbWUsIGZv
bnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKKyAgICAgICAgICAg
IGlmIChhdXRvIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUp
KSB7CisgICAgICAgICAgICAgICAgYXV0byogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5h
bWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0
ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKICAg
ICAgICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBh
cyB0aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhhdmUKICAgICAgICAgICAgICAgICAvLyBiZWVu
IGludmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUgY2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKCkuCiAgICAgICAgICAgICAgICAgaXQgPSBtX2ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+
ZmluZChrZXkpOwpAQCAtMjgzLDcgKzI3Miw3IEBAIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRJbmFj
dGl2ZUZvbnREYXRhID0gMjAwOwogY29uc3QgdW5zaWduZWQgY01heFVuZGVyTWVtb3J5UHJlc3N1
cmVJbmFjdGl2ZUZvbnREYXRhID0gNTA7CiBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1v
cnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNo
ZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250
RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNl
Q2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBG
b250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBm
b250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRG
YWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKICAgICBpZiAo
IW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVT
aG90KDBfcyk7CkBAIC01MzgsNyArNTI3LDcgQEAgdm9pZCBGb250Q2FjaGU6OnByZXdhcm0oY29u
c3QgUHJld2FybUluZm9ybWF0aW9uJikKIHsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYpCitS
ZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBTdHJpbmcmKQogewogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCBhOGUyYWQ0NjljMmVmNmI0
NDZhNDliNmViMzljYmI5ODBkNzViMjY3Li5iNmQ4ZDc2N2JmMzZmNDgyZjZmNGM3OWY2Y2U1MTA5
OWU5OGRiYjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuaApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTIxMywxMSArMjE0LDEzIEBA
IHR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWY8Rm9udD4sIEZvbnREYXRhQ2Fj
aGVLZXlIYXNoLCBGb250RGF0YUNhY2hlCiB0eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0
YSwgUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiwgRm9udERhdGFDYWNoZUtleUhhc2gsIEZv
bnREYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnRWZXJ0aWNhbERhdGFDYWNoZTsKICNlbmRpZgogCi1j
bGFzcyBGb250Q2FjaGUgeworY2xhc3MgRm9udENhY2hlIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9u
dENhY2hlPiB7CiAgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Rm9udENhY2hl
PjsKIAogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDYWNoZSk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgorICAgIEZvbnRDYWNoZSgpOworCiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIEZvbnRDYWNoZSYgc2luZ2xldG9uKCk7CiAKICAgICAvLyBUaGVzZSBtZXRob2Rz
IGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCkBAIC0yNDIsMTAgKzI0NSwxMCBAQCBw
dWJsaWM6CiAgICAgLy8gSXQgY29tZXMgaW50byBwbGF5IHdoZW4geW91IGNyZWF0ZSBhbiBAZm9u
dC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWlseSBuYW1lIGFzIGEgcHJlaW5zdGFsbGVkIGZvbnQu
CiAgICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdldEZvbnRTZWxlY3Rpb25D
YXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHko
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IEZvbnRGZWF0
dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNr
aW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9u
dD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsg
fSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpOworICAgIFJlZlB0
cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcm
IGZhbWlseSk7CiAKICAgICB2b2lkIGFkZENsaWVudChGb250U2VsZWN0b3ImKTsKICAgICB2b2lk
IHJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImKTsKQEAgLTI5MCwyMiArMjkzLDE5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHByZXdhcm1HbG9iYWxseSgpOwogCiBwcml2YXRlOgotICAgIEZvbnRDYWNo
ZSgpOwotICAgIH5Gb250Q2FjaGUoKSA9IGRlbGV0ZTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKTsKICAgICB2b2lkIHBydW5lVW5yZWZl
cmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7CiAgICAgdm9pZCBwcnVuZVN5c3Rl
bUZhbGxiYWNrRm9udHMoKTsKICAgICBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFk
ZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBSZWZQdHI8Rm9udFNl
bGVjdG9yPiYmKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgZXZlbnR1YWxs
eSBiZSByZW1vdmVkLgotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdldENhY2hlZEZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsg
fSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CisgICAgRm9udFBsYXRmb3Jt
RGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VG
ZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9u
dEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFs
c2UpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBwbGF0
Zm9ybS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0
YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVh
dHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmls
aXRpZXMpOwogICAgIAotICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1p
bHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYg
cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0
aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmlu
ZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRl
RmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKIAogICAgIFRpbWVyIG1fcHVyZ2VUaW1lcjsKICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRm9udHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGVGb250cy5jcHAKaW5kZXggMmRkZDZiZGYxOTQzODQxN2FkZWE3MTEyNDdkMjE3NmQ1NzYzNTIz
NC4uMjVhNDdmNDczOGYxMzgxNDU5ZGJmYzEzODRiNDdlZjVhMmM0YWY5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAK
QEAgLTQ4OCw3ICs0ODgsNyBAQCBzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJv
bUZvbnRSYW5nZXModW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udAogCiBHbHlwaERhdGEg
Rm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3Qg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQp
CiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90aHJlYWQucHRy
KCkgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKICAgICBBU1NFUlQodmFyaWFudCAhPSBBdXRvVmFy
aWFudCk7CiAKICAgICBpZiAodmFyaWFudCAhPSBOb3JtYWxWYXJpYW50KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCmluZGV4IDQ1
MDE5NDQ1ZTMzMzkwYmI4NGNiNjZiYTVjMTgzYTU4ZjViYWQzOGQuLmJkMmI4NjE0MDAwMDM0OGIw
NTYwZmJmODU3MjI5MDMyMmQ4YzdlZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKQEAgLTExNCw2ICsxMTQsNyBAQCBwcml2
YXRlOgogICAgIHVuc2lnbmVkIHNob3J0IG1fZ2VuZXJhdGlvbjsKICAgICBQaXRjaCBtX3BpdGNo
IHsgVW5rbm93blBpdGNoIH07CiAgICAgYm9vbCBtX2lzRm9yUGxhdGZvcm1Gb250IHsgZmFsc2Ug
fTsKKyAgICBSZWY8VGhyZWFkPiBtX3RocmVhZCB7IFRocmVhZDo6Y3VycmVudCgpIH07CiB9Owog
CiBpbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkBAIC0xMjUsNyArMTI2LDcgQEAgaW5saW5l
IGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mIGRlc2NyaXAKIAogaW5saW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6
OnByaW1hcnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQog
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fdGhyZWFkLnB0cigp
ID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CiAgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7
CiAgICAgICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChk
ZXNjcmlwdGlvbiwgMCk7CiAgICAgICAgIG1fY2FjaGVkUHJpbWFyeUZvbnQgPSBwcmltYXJ5UmFu
Z2VzLmdseXBoRGF0YUZvckNoYXJhY3RlcignICcsIEV4dGVybmFsUmVzb3VyY2VEb3dubG9hZFBv
bGljeTo6QWxsb3cpLmZvbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5kZXggODVjOTRhOWE5
M2YwOGIwMmI1NDdlMGJlNjA1NjZjZmMxNDA4MDIyZi4uMTg2OGM4N2M0OTZjODNmYWZiYTIxM2Ew
ODJlYmFlOTdjYjI5ODExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApAQCAtNjE5LDcgKzYx
OSw3IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0Zm9ybUZvbnQoQ1RGb250UmVm
IG9yaWdpbmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250
Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG9yaWdpbmFsRm9udCwgQ1RGb250R2V0U2l6ZShvcmln
aW5hbEZvbnQpLCBudWxscHRyLCBkZXNjcmlwdG9yLmdldCgpKSk7CiB9CiAKLVJlZlB0cjxGb250
PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnNp
bWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmlu
ZyYgZmFtaWx5KQogewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250
IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluCiAgICAg
Ly8gdGhlIHJlcXVlc3RlZCBuYW1lcy4gRm9yIGV4YW1wbGUsIHdlJ2xsIG1hdGNoIGFueSBuYW1l
IHRoYXQgY29udGFpbnMgIkFyYWJpYyIgdG8gR2VlemEgUHJvLgpAQCAtNjI4LDI3ICs2MjgsMTkg
QEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXQKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCBtb25vc3BhY2UgZm9udCBmb3Igd2VsbC1rbm93
biBtb25vc3BhY2UgZm9udHMuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGZhbWlseSwgIm1vbmFjbyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWls
eSwgIm1lbmxvIikpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
Y291cmllcik7Ci0gICAgfQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShm
YW1pbHksICJtb25hY28iKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHks
ICJtZW5sbyIpKQorICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgImNv
dXJpZXIiX3MpOwogCiAgICAgLy8gU3Vic3RpdHV0ZSBWZXJkYW5hIGZvciBMdWNpZGEgR3JhbmRl
LgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEg
Z3JhbmRlIikpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25z
dCBBdG9tU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVy
ZGFuYSk7Ci0gICAgfQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1p
bHksICJsdWNpZGEgZ3JhbmRlIikpCisgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCAidmVyZGFuYSJfcyk7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IGFyYWJpYyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQXJhYmljIikpOwotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBhc2h0byhNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgiUGFzaHRvIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHVyZHUo
TUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVyZHUiKSk7Ci0gICAgc3RhdGljIFN0cmluZyogbWF0
Y2hXb3Jkc1szXSA9IHsgJmFyYWJpYy5nZXQoKSwgJnBhc2h0by5nZXQoKSwgJnVyZHUuZ2V0KCkg
fTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4g
Z2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotICAgIGZvciAoU3RyaW5nKiBtYXRjaFdvcmQgOiBtYXRjaFdvcmRzKSB7Ci0gICAgICAg
IGlmIChmYW1pbHkuY29udGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZSgqbWF0Y2hXb3JkKSkKLSAgICAg
ICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xk
KGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAgIHN0
YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIG1hdGNoV29yZHNbXSA9IHsgIkFyYWJpYyJfcywg
IlBhc2h0byJfcywgIlVyZHUiX3MgfTsKKyAgICBhdXRvIGZhbWlseU1hdGNoZXIgPSBTdHJpbmdW
aWV3KGZhbWlseSk7CisgICAgZm9yIChhdXRvIG1hdGNoV29yZCA6IG1hdGNoV29yZHMpIHsKKyAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TWF0Y2hlciwgU3RyaW5nVmll
dyhtYXRjaFdvcmQpKSkKKyAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0
aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICJHZWV6YVByby1C
b2xkIl9zIDogIkdlZXphUHJvIl9zKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBA
IC0xNDIzLDcgKzE0MTUsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFj
a0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcgogICAgIHJldHVybiBm
b250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCi1jb25zdCBBdG9tU3RyaW5n
JiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3Jt
QWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIGhlaXRpU3RyaW5nW10gPSB7IDB4OWVkMSwgMHg0ZjUzIH07CiAgICAg
c3RhdGljIGNvbnN0IFVDaGFyIHNvbmd0aVN0cmluZ1tdID0geyAweDViOGIsIDB4NGY1MyB9OwpA
QCAtMTQzMSwxMCArMTQyMywxMCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIHN0YXRp
YyBjb25zdCBVQ2hhciB3ZWlydWFuWWFIZWlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhmNmYsIDB4
OTZjNSwgMHg5ZWQxIH07CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5aaGVuZ0hlaXRp
U3RyaW5nW10gPSB7IDB4NWZhZSwgMHg4ZWRmLCAweDZiNjMsIDB4OWVkMSwgMHg5YWQ0IH07CiAK
LSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNv
bmd0aVNDKCJTb25ndGkgU0MiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0g
ICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzb25n
dGlUQygiU29uZ3RpIFRDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAg
IHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVpdGlT
Q1JlcGxhY2VtZW50KCJQaW5nRmFuZyBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJp
bmc+IGhlaXRpVENSZXBsYWNlbWVudCgiUGluZ0ZhbmcgVEMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgc29uZ3Rp
U0MgPSAiU29uZ3RpIFNDIl9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHNv
bmd0aVRDID0gIlNvbmd0aSBUQyJfczsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJh
bCBoZWl0aVNDUmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgU0MiX3M7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBBU0NJSUxpdGVyYWwgaGVpdGlUQ1JlcGxhY2VtZW50ID0gIlBpbmdGYW5nIFRDIl9zOwog
CiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSAyOgpAQCAtMTQ2
OSw3ICsxNDYxLDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVy
bmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IH0KIAogdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGljdGlv
bmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0
YWxsZWRGb250cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAppbmRleCBmMDI3ZWVkMzE3
MTQ0NGJjMzZhNDM0NDc2M2I3M2UxMmRiMmEwMjY3Li5mY2Q5MDk2NmI3ZjIyN2FiYmNkYjU3YTFi
ZTQ5ZWM4YWI4MWNlZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCkBAIC0zMTks
OSArMzE5LDggQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGkKIHsKICAgICAvLyBXZSB3YW50IHRv
IHJldHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50
aW5nIEZvbnRDb25maWcKICAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWln
aHQgcmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCi0gICAgc3RhdGljIEF0b21T
dHJpbmcgdGltZXNTdHIoInNlcmlmIik7Ci0gICAgaWYgKFJlZlB0cjxGb250PiBmb250ID0gZm9u
dEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyKSkKLSAgICAgICAgcmV0dXJuICpm
b250OworICAgIGlmIChSZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2Ny
aXB0aW9uLCAic2VyaWYiX3MpKQorICAgICAgICByZXR1cm4gZm9udC5yZWxlYXNlTm9uTnVsbCgp
OwogCiAgICAgLy8gVGhpcyBjb3VsZCBiZSByZWFjaGVkIGR1ZSB0byBpbXByb3Blcmx5LWluc3Rh
bGxlZCBvciBtaXNjb25maWd1cmVkIGZvbnRjb25maWcuCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTMzMiwyNiArMzMxLDI2IEBAIFZlY3RvcjxGb250U2VsZWN0aW9uQ2Fw
YWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWls
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRGYW1pbHlOYW1lU3RyaW5n
RnJvbUZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCitzdGF0aWMgU3RyaW5nIGdldEZh
bWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8v
IElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAoZS5nLiAiLXdlYmtpdC1tb25vc3Bh
Y2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRvCiAgICAgLy8gdGhlIGZhbGxiYWNrIG5hbWUgKGxp
a2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRlcnN0YW5kcy4KICAgICBpZiAoZmFt
aWx5Lmxlbmd0aCgpICYmICFmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKLSAgICAgICAg
cmV0dXJuIGZhbWlseS5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGZhbWlseTsKIAotICAgIGlm
IChmYW1pbHkgPT0gc3RhbmRhcmRGYW1pbHkgfHwgZmFtaWx5ID09IHNlcmlmRmFtaWx5KQorICAg
IGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
RmFtaWx5TmFtZXNJbmRleDo6U3RhbmRhcmRGYW1pbHkpKSB8fCBmYW1pbHkgPT0gZmFtaWx5TmFt
ZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6U2VyaWZG
YW1pbHkpKSkKICAgICAgICAgcmV0dXJuICJzZXJpZiI7Ci0gICAgaWYgKGZhbWlseSA9PSBzYW5z
U2VyaWZGYW1pbHkpCisgICAgaWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0KHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpTYW5zU2VyaWZGYW1pbHkpKSkKICAg
ICAgICAgcmV0dXJuICJzYW5zLXNlcmlmIjsKLSAgICBpZiAoZmFtaWx5ID09IG1vbm9zcGFjZUZh
bWlseSkKKyAgICBpZiAoZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6Ok1vbm9zcGFjZUZhbWlseSkpKQogICAgICAgICBy
ZXR1cm4gIm1vbm9zcGFjZSI7Ci0gICAgaWYgKGZhbWlseSA9PSBjdXJzaXZlRmFtaWx5KQorICAg
IGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
RmFtaWx5TmFtZXNJbmRleDo6Q3Vyc2l2ZUZhbWlseSkpKQogICAgICAgICByZXR1cm4gImN1cnNp
dmUiOwotICAgIGlmIChmYW1pbHkgPT0gZmFudGFzeUZhbWlseSkKKyAgICBpZiAoZmFtaWx5ID09
IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZhbWlseU5hbWVzSW5k
ZXg6OkZhbnRhc3lGYW1pbHkpKSkKICAgICAgICAgcmV0dXJuICJmYW50YXN5IjsKIAogI2lmIFBM
QVRGT1JNKEdUSykKLSAgICBpZiAoZmFtaWx5ID09IHN5c3RlbVVpRmFtaWx5IHx8IGZhbWlseSA9
PSAiLXdlYmtpdC1zeXN0ZW0tZm9udCIpCisgICAgaWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0Rh
dGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpTeXN0ZW1VaUZh
bWlseSkpIHx8IGZhbWlseSA9PSAiLXdlYmtpdC1zeXN0ZW0tZm9udCIpCiAgICAgICAgIHJldHVy
biBkZWZhdWx0R3RrU3lzdGVtRm9udCgpOwogI2VuZGlmCiAKQEAgLTU5OSw5ICs1OTgsOSBAQCBz
dGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIHJldHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLWNv
bnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNv
bnN0IEF0b21TdHJpbmcmKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBudWxs
QXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFU
SU9OX0ZPTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhY2hlV2luLmNwcAppbmRleCAyYjRiNTU3MmE0ZDgwOGI4M2I0YjBmNGFhNjRmOTZj
OTYzODJmNjEzLi5hMjAwNDFkMmU5MjNjYjgyNmQxNTEyMDdmNWIwMTQxNThjY2FmNTRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hl
V2luLmNwcApAQCAtMzczLDU2ICszNzMsNTcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9u
dEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb24KIAog
UmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVy
RGVzdHJveWVkPEF0b21TdHJpbmc+IGZhbGxiYWNrRm9udE5hbWU7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFN0cmluZz4gZmFsbGJhY2tGb250TmFtZTsKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFsmXSgpIHsKKyAg
ICAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1
c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuIEZvciBub3cgd2UnbGwgcGljaworICAgICAgICAvLyB0
aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBw
cmVmcy4KKworICAgICAgICAvLyBTZWFyY2ggYWxsIHR5cGljYWwgV2luZG93cy1pbnN0YWxsZWQg
ZnVsbCBVbmljb2RlIGZvbnRzLgorICAgICAgICAvLyBTb3J0ZWQgYnkgbW9zdCB0byBsZWFzdCBn
bHlwaHMgYWNjb3JkaW5nIHRvIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5pY29kZV90
eXBlZmFjZXMKKyAgICAgICAgLy8gU3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBzaW5j
ZSBpdCBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4KKyAg
ICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gZmFsbGJhY2tGb250c1td
ID0geworICAgICAgICAgICAgU3RyaW5nKCJUaW1lcyBOZXcgUm9tYW4iLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiTWljcm9zb2Z0IFNhbnMgU2Vy
aWYiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygi
VGFob21hIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJp
bmcoIkx1Y2lkYSBTYW5zIFVuaWNvZGUiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwK
KyAgICAgICAgICAgIFN0cmluZygiQXJpYWwiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KQorICAgICAgICB9OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9M
RU5HVEgoZmFsbGJhY2tGb250cyk7ICsraSkgeworICAgICAgICAgICAgaWYgKGZvbnRGb3JGYW1p
bHkoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnRzW2ldKSkgeworICAgICAgICAgICAgICAg
IGZhbGxiYWNrRm9udE5hbWUuZ2V0KCkgPSBmYWxsYmFja0ZvbnRzW2ldOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgaWYgKCFmYWxsYmFj
a0ZvbnROYW1lLmdldCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5
KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250TmFtZSk7CisgICAgICAgIC8vIEZhbGwgYmFj
ayB0byB0aGUgREVGQVVMVF9HVUlfRk9OVCBpZiBubyBrbm93biBVbmljb2RlIGZvbnRzIGFyZSBh
dmFpbGFibGUuCisgICAgICAgIGlmIChIRk9OVCBkZWZhdWx0R1VJRm9udCA9IHN0YXRpY19jYXN0
PEhGT05UPihHZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSkpIHsKKyAgICAgICAgICAg
IExPR0ZPTlQgZGVmYXVsdEdVSUxvZ0ZvbnQ7CisgICAgICAgICAgICBHZXRPYmplY3QoZGVmYXVs
dEdVSUZvbnQsIHNpemVvZihkZWZhdWx0R1VJTG9nRm9udCksICZkZWZhdWx0R1VJTG9nRm9udCk7
CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2Ny
aXB0aW9uLCBkZWZhdWx0R1VJTG9nRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBi
ZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBu
b3cgd2UnbGwgcGljawotICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0
IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotCi0gICAgLy8gU2VhcmNoIGFsbCB0eXBpY2Fs
IFdpbmRvd3MtaW5zdGFsbGVkIGZ1bGwgVW5pY29kZSBmb250cy4KLSAgICAvLyBTb3J0ZWQgYnkg
bW9zdCB0byBsZWFzdCBnbHlwaHMgYWNjb3JkaW5nIHRvIGh0dHA6Ly9lbi53aWtpcGVkaWEub3Jn
L3dpa2kvVW5pY29kZV90eXBlZmFjZXMKLSAgICAvLyBTdGFydCB3aXRoIFRpbWVzIE5ldyBSb21h
biBhbHNvIHNpbmNlIGl0IGlzIHRoZSBkZWZhdWx0IGlmIHRoZSB1c2VyIGRvZXNuJ3QgY2hhbmdl
IHByZWZzLgotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gZmFsbGJhY2tGb250c1tdID0gewotICAgICAgICBBdG9tU3RyaW5nKCJUaW1lcyBOZXcg
Um9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21T
dHJpbmcoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJUYWhvbWEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmcoIkx1Y2lkYSBTYW5zIFVuaWNvZGUi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmco
IkFyaWFsIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCi0gICAgfTsKLSAgICBS
ZWZQdHI8Rm9udD4gc2ltcGxlRm9udDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9B
UlJBWV9MRU5HVEgoZmFsbGJhY2tGb250cyk7ICsraSkgewotICAgICAgICBpZiAoc2ltcGxlRm9u
dCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnRzW2ldKSkgewot
ICAgICAgICAgICAgZmFsbGJhY2tGb250TmFtZS5nZXQoKSA9IGZhbGxiYWNrRm9udHNbaV07Ci0g
ICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7CisgICAgICAgIC8vIEZhbGwgYmFjayB0byBO
b24tY2xpZW50IG1ldHJpY3MgZm9udHMuCisgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1Mgbm9uQ2xp
ZW50TWV0cmljcyB7IH07CisgICAgICAgIG5vbkNsaWVudE1ldHJpY3MuY2JTaXplID0gc2l6ZW9m
KG5vbkNsaWVudE1ldHJpY3MpOworICAgICAgICBpZiAoU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJ
X0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemVvZihub25DbGllbnRNZXRyaWNzKSwgJm5vbkNsaWVu
dE1ldHJpY3MsIDApKSB7CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFuZExv
Z0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVzc2FnZUZvbnQsIGZh
bGxiYWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlm
IChmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVu
dE1ldHJpY3MubGZNZW51Rm9udCwgZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgaWYgKGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZv
bnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZlN0YXR1c0ZvbnQsIGZhbGxiYWNrRm9u
dE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChmb250RnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3Mu
bGZDYXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgaWYgKGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNj
cmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5h
bWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIH0KKyAgICB9KTsK
IAotICAgIC8vIEZhbGwgYmFjayB0byB0aGUgREVGQVVMVF9HVUlfRk9OVCBpZiBubyBrbm93biBV
bmljb2RlIGZvbnRzIGFyZSBhdmFpbGFibGUuCi0gICAgaWYgKEhGT05UIGRlZmF1bHRHVUlGb250
ID0gc3RhdGljX2Nhc3Q8SEZPTlQ+KEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpKSkg
ewotICAgICAgICBMT0dGT05UIGRlZmF1bHRHVUlMb2dGb250OwotICAgICAgICBHZXRPYmplY3Qo
ZGVmYXVsdEdVSUZvbnQsIHNpemVvZihkZWZhdWx0R1VJTG9nRm9udCksICZkZWZhdWx0R1VJTG9n
Rm9udCk7Ci0gICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExv
Z0ZvbnQoZm9udERlc2NyaXB0aW9uLCBkZWZhdWx0R1VJTG9nRm9udCwgZmFsbGJhY2tGb250TmFt
ZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgfQorICAgIGlmICghZmFs
bGJhY2tGb250TmFtZS5nZXQoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAqZm9udEZvckZh
bWlseShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9udE5hbWUpOwogCi0gICAgLy8gRmFsbCBi
YWNrIHRvIE5vbi1jbGllbnQgbWV0cmljcyBmb250cy4KLSAgICBOT05DTElFTlRNRVRSSUNTIG5v
bkNsaWVudE1ldHJpY3MgeyB9OwotICAgIG5vbkNsaWVudE1ldHJpY3MuY2JTaXplID0gc2l6ZW9m
KG5vbkNsaWVudE1ldHJpY3MpOwotICAgIGlmIChTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VU
Tk9OQ0xJRU5UTUVUUklDUywgc2l6ZW9mKG5vbkNsaWVudE1ldHJpY3MpLCAmbm9uQ2xpZW50TWV0
cmljcywgMCkpIHsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0aW9u
QW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZNZXNzYWdlRm9u
dCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0g
ICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9u
dERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVudUZvbnQsIGZhbGxiYWNrRm9udE5h
bWUpKQotICAgICAgICAgICAgcmV0dXJuICpzaW1wbGVGb250OwotICAgICAgICBpZiAoc2ltcGxl
Rm9udCA9IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9u
Q2xpZW50TWV0cmljcy5sZlN0YXR1c0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAg
ICAgcmV0dXJuICpzaW1wbGVGb250OwotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGcm9t
RGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5s
ZkNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2lt
cGxlRm9udDsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0aW9uQW5k
TG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZTbUNhcHRpb25Gb250
LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsKLSAg
ICB9Ci0gICAgCiAgICAgYXV0byBoRm9udCA9IGFkb3B0R0RJT2JqZWN0KHN0YXRpY19jYXN0PEhG
T05UPihHZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSkpOwogICAgIEZvbnRQbGF0Zm9y
bURhdGEgcGxhdGZvcm1EYXRhKFdURk1vdmUoaEZvbnQpLCBmb250RGVzY3JpcHRpb24uY29tcHV0
ZWRQaXhlbFNpemUoKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAgICAgcmV0dXJuIGZvbnRGb3JQ
bGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKTsKQEAgLTY5MiwxMSArNjkzLDggQEAgc3RkOjp1bmlx
dWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1jb25zdCBBdG9tU3RyaW5n
JiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3Jt
QWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1Jv
bWFuKCJUaW1lcyBOZXcgUm9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBt
aWNyb3NvZnRTYW5zU2VyaWYoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwotCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7
CiAgICAgLy8gT24gV2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMsIGJ1dCBs
ZWdhY3kgY29udGVudCBleHBlY3RzIHN1cHBvcnQuCiAgICAgLy8gVGh1cyB3ZSBhbGxvdyBUaW1l
cyBOZXcgUm9tYW4gYXMgYW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTZXJp
ZiwKQEAgLTcwNSw3ICs3MDMsNyBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdv
dWxkIG5lZWQgaXQgb24gb3RoZXIgcGxhdGZvcm1zIHRvby4KICAgICBjYXNlIDg6CiAgICAgICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2VyaWYi
KSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lc05ld1JvbWFuOworICAgICAgICAgICAgcmV0dXJu
ICJUaW1lcyBOZXcgUm9tYW4iX3M7CiAgICAgICAgIGJyZWFrOwogICAgIC8vIE9uIFdpbmRvd3Ms
IHdlIGRvbid0IHN1cHBvcnQgYml0bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0
cyBzdXBwb3J0LgogICAgIC8vIFRodXMgd2UgYWxsb3cgTWljcm9zb2Z0IFNhbnMgU2VyaWYgYXMg
YW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTYW5zIFNlcmlmLApAQCAtNzE0
LDEwICs3MTIsMTAgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVy
bmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVk
IGl0IG9uIG90aGVyIHBsYXRmb3JtcyB0b28uCiAgICAgY2FzZSAxMzoKICAgICAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtcyBzYW5zIHNlcmlmIikp
Ci0gICAgICAgICAgICByZXR1cm4gbWljcm9zb2Z0U2Fuc1NlcmlmOworICAgICAgICAgICAgcmV0
dXJuICJNaWNyb3NvZnQgU2FucyBTZXJpZiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IHJldHVybiBudWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424880</attachid>
            <date>2021-04-01 01:40:16 -0700</date>
            <delta_ts>2021-04-01 09:10:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223997-20210401094015.patch</filename>
            <type>text/plain</type>
            <size>32228</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0OTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzJjOTgxODQzNjY1NDgz
NjExNjU3MDg2NjYwNDQ2M2FhODY5YzU2MC4uZTY4NjRlNzY4OGVkZjIxNTQyNWViYjk1MmFhNmNi
YmIwMjgwYjdlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIxLTAzLTMxICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBjb25z
dHJ1Y3RhYmxlIGFuZCBzYWZlIHRvIHVzZSBvZmYgdGhlIG1haW4gdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM5OTcKKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBTbyB0aGF0IHdlIGNhbiBoYXZlIGEg
c2VwYXJhdGUgRm9udENhY2hlIGZvciB1c2Ugd2l0aCBPZmZzY3JlZW5DYW52YXMKKyAgICAgICAg
b24gV29ya2VyIHRocmVhZHMsIG1ha2UgRm9udENhY2hlIGNvbnN0cnVjdGFibGUvZGVzdHJ1Y3Rh
YmxlIGFuZAorICAgICAgICByZWYtY291bnRlZC4KKworICAgICAgICBUaGlzIGFsc28gY2hhbmdl
cyBzb21lIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZXkgbm8gbG9uZ2VyIHJlbHkgb24gc3RhdGljCisg
ICAgICAgIEF0b21TdHJpbmcgdmFyaWFibGVzLCBhcyB0aGVzZSBwYXRocyB3b3VsZCBub3QgYmUg
c2FmZSB0byB1c2Ugb2ZmIHRoZQorICAgICAgICBtYWluIHRocmVhZCwgYW5kIGNoYW5nZXMgbWFp
bi10aHJlYWQgY2hlY2tzIHRvIGNyZWF0aW9uLXRocmVhZCBjaGVja3MuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjphbHRl
cm5hdGVGYW1pbHlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Q2FjaGVk
Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmZvbnRGb3JG
YW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzaW1pbGFyRm9udCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OmZvbnRGb3JGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpn
ZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRm9udHM6
OkZvbnRDYXNjYWRlRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVGb250czo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZUZvbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUZvbnRzOjpwcmlt
YXJ5Rm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29y
ZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzaW1pbGFyRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEZhbWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKToK
KwogMjAyMS0wMy0zMSAgQ2hyaXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CiAKICAgICAgICAg
TWFrZSBGb250Q2FjaGUgc2VsZi1jb250YWluZWQgKHJlbW92ZSBzdGF0aWMgZ2xvYmFsIHZhcmlh
YmxlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3Bw
CmluZGV4IGU5MzhiZjA3ZjIyNmIzOGQ4NGM3YThkOTM4MmFiMDk5ZmVjMjhlN2YuLjY2MzJhNTg2
YmNiZDQwYzYwMGY3MWNhMjc5ZDBiM2JlMWNmMTQ4MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApAQCAtMTM0LDMzICsxMzQsMjUgQEAgc3Ry
dWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xh
c3NIYXNoVHJhaXRzPEZvbnRQbGEKICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNa
ZXJvID0gZmFsc2U7CiB9OwogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0
ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJ
TGl0ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFt
aWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21TdHJpbmc+IGFyaWFsKCJBcmlhbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IGNvdXJpZXIoIkNvdXJpZXIiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0g
ICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3Vy
aWVyTmV3KCJDb3VyaWVyIE5ldyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhl
bHZldGljYSgiSGVsdmV0aWNhIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGlt
ZXMoIlRpbWVzIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRp
YyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXNOZXdSb21h
bigiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
Ci0gICAgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICBpZiAoIXBsYXRmb3JtU3Bl
Y2lmaWNBbHRlcm5hdGUuaXNOdWxsKCkpCisgICAgaWYgKGF1dG8gcGxhdGZvcm1TcGVjaWZpY0Fs
dGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkKICAgICAg
ICAgcmV0dXJuIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGU7CiAKICAgICBzd2l0Y2ggKGZhbWls
eU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDU6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiYXJpYWwiKSkKLSAgICAgICAgICAgIHJldHVy
biBoZWx2ZXRpY2E7CisgICAgICAgICAgICByZXR1cm4gIkhlbHZldGljYSJfczsKICAgICAgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJ0aW1lcyIpKQot
ICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47CisgICAgICAgICAgICByZXR1cm4gIlRp
bWVzIE5ldyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA3OgogICAgICAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIiKSkK
LSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3OworICAgICAgICAgICAgcmV0dXJuICJDb3Vy
aWVyIE5ldyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA5OgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImhlbHZldGljYSIpKQotICAg
ICAgICAgICAgcmV0dXJuIGFyaWFsOworICAgICAgICAgICAgcmV0dXJuICJBcmlhbCJfczsKICAg
ICAgICAgYnJlYWs7CiAjaWYgIU9TKFdJTkRPV1MpCiAgICAgLy8gT24gV2luZG93cywgQ291cmll
ciBOZXcgaXMgYSBUcnVlVHlwZSBmb250IHRoYXQgaXMgYWx3YXlzIHByZXNlbnQgYW5kCkBAIC0x
NzAsMTkgKzE2MiwxOSBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZh
bWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKICAgICAvLyBvbmx5IGJlIHRy
aWVkIGlmIENvdXJpZXIgTmV3IGlzIG5vdCBmb3VuZC4KICAgICBjYXNlIDExOgogICAgICAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIgbmV3
IikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllcjsKKyAgICAgICAgICAgIHJldHVybiAiQ291
cmllciJfczsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIDE1OgogICAgICAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgInRpbWVzIG5ldyBy
b21hbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzOworICAgICAgICAgICAgcmV0dXJuICJU
aW1lcyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotRm9udFBsYXRmb3JtRGF0YSogRm9udENh
Y2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAorRm9udFBs
YXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3NlZEZhbWls
eU5hbWUsCiAgICAgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywg
Rm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywg
Ym9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
QEAgLTE5MiwxOCArMTg0LDE2IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2Fj
aGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAjaWYgT1MoV0lO
RE9XUykgJiYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQogICAgIC8vIExlYWRpbmcgIkAiIGlu
IHRoZSBmb250IG5hbWUgZW5hYmxlcyBXaW5kb3dzIHZlcnRpY2FsIGZsb3cgZmxhZyBmb3IgdGhl
IGZvbnQuCiAgICAgLy8gQmVjYXVzZSB3ZSBkbyB2ZXJ0aWNhbCBmbG93IGJ5IG91cnNlbHZlcywg
d2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIFdpbmRvd3MgZmVhdHVyZS4KLSAgICAvLyBJRSBkaXNy
ZWdhcmRzICJAIiByZWdhcmRsZXNzIG9mIHRoZSBvcmllbnRhdG9pbiwgc28gd2UgZm9sbG93IHRo
ZSBiZWhhdmlvci4KLSAgICBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lID0gKHBhc3NlZEZh
bWlseU5hbWUuaXNFbXB0eSgpIHx8IHBhc3NlZEZhbWlseU5hbWVbMF0gIT0gJ0AnKSA/Ci0gICAg
ICAgIHBhc3NlZEZhbWlseU5hbWUgOiBBdG9tU3RyaW5nKHBhc3NlZEZhbWlseU5hbWUuaW1wbCgp
LT5zdWJzdHJpbmcoMSkpOworICAgIC8vIElFIGRpc3JlZ2FyZHMgIkAiIHJlZ2FyZGxlc3Mgb2Yg
dGhlIG9yaWVudGF0aW9uLCBzbyB3ZSBmb2xsb3cgdGhlIGJlaGF2aW9yLgorICAgIGNvbnN0IFN0
cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWUuc3Vic3RyaW5nKHBhc3NlZEZhbWls
eU5hbWVbMF0gPT0gJ0AnID8gMSA6IDApOwogI2Vsc2UKLSAgICBjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKKyAgICBjb25zdCBTdHJpbmcmIGZhbWlseU5h
bWUgPSBwYXNzZWRGYW1pbHlOYW1lOwogI2VuZGlmCiAKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFs
aXplZDsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbJl0oKSB7CiAgICAgICAg
IHBsYXRmb3JtSW5pdCgpOwotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQorICAg
IH0pOwogCiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleShmYW1pbHlOYW1lLCBmb250
RGVzY3JpcHRpb24sIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKTsKIApA
QCAtMjE1LDkgKzIwNSw4IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVk
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAgICAgICAgIGlmICgh
aXQtPnZhbHVlICYmICFjaGVja2luZ0FsdGVybmF0ZU5hbWUpIHsKICAgICAgICAgICAgIC8vIFdl
IHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiAgV2UgaGF2ZSBhIHNtYWxsIHNldCBvZiBmb250
cyB0aGF0IHdlIGFsaWFzIHRvIG90aGVyIG5hbWVzLAogICAgICAgICAgICAgLy8gZS5nLiwgQXJp
YWwvSGVsdmV0aWNhLCBDb3VyaWVyL0NvdXJpZXIgTmV3LCBldGMuICBUcnkgbG9va2luZyB1cCB0
aGUgZm9udCB1bmRlciB0aGUgYWxpYXNlZCBuYW1lLgotICAgICAgICAgICAgY29uc3QgQXRvbVN0
cmluZyYgYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0g
ICAgICAgICAgICBpZiAoIWFsdGVybmF0ZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAg
ICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBhbHRlcm5hdGVOYW1lLCBm
b250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcywgdHJ1ZSk7CisgICAgICAgICAg
ICBpZiAoYXV0byBhbHRlcm5hdGVOYW1lID0gYWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1l
KSkgeworICAgICAgICAgICAgICAgIGF1dG8qIGZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVO
YW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sICphbHRlcm5h
dGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcywgdHJ1ZSk7CiAg
ICAgICAgICAgICAgICAgLy8gTG9va3VwIHRoZSBrZXkgaW4gdGhlIGhhc2ggdGFibGUgYWdhaW4g
YXMgdGhlIHByZXZpb3VzIGl0ZXJhdG9yIG1heSBoYXZlCiAgICAgICAgICAgICAgICAgLy8gYmVl
biBpbnZhbGlkYXRlZCBieSB0aGUgcmVjdXJzaXZlIGNhbGwgdG8gZ2V0Q2FjaGVkRm9udFBsYXRm
b3JtRGF0YSgpLgogICAgICAgICAgICAgICAgIGl0ID0gbV9mb250UGxhdGZvcm1EYXRhQ2FjaGUt
PmZpbmQoa2V5KTsKQEAgLTI4Myw3ICsyNzIsNyBAQCBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0SW5h
Y3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0IHVuc2lnbmVkIGNNYXhVbmRlck1lbW9yeVByZXNz
dXJlSW5hY3RpdmVGb250RGF0YSA9IDUwOwogY29uc3QgdW5zaWduZWQgY1RhcmdldFVuZGVyTWVt
b3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gMzA7CiAKLVJlZlB0cjxGb250PiBGb250Q2Fj
aGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9u
dEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFj
ZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCitSZWZQdHI8Rm9udD4g
Rm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyog
Zm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250
RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAgICAgaWYg
KCFtX3B1cmdlVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9wdXJnZVRpbWVyLnN0YXJ0T25l
U2hvdCgwX3MpOwpAQCAtNTM4LDcgKzUyNyw3IEBAIHZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNv
bnN0IFByZXdhcm1JbmZvcm1hdGlvbiYpCiB7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6
OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmKQor
UmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKaW5kZXggYThlMmFkNDY5YzJlZjZi
NDQ2YTQ5YjZlYjM5Y2JiOTgwZDc1YjI2Ny4uNTI3ZDYzOWY0YjA0N2JhODJjNTYwOWNjOTc2MWMw
NTFhOTkyNDMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKQEAgLTIxMywxMSArMjEzLDEzIEBAIHR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1E
YXRhLCBSZWY8Rm9udD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlCiB0eXBl
ZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YSwgUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRh
PiwgRm9udERhdGFDYWNoZUtleUhhc2gsIEZvbnREYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnRWZXJ0
aWNhbERhdGFDYWNoZTsKICNlbmRpZgogCi1jbGFzcyBGb250Q2FjaGUgeworY2xhc3MgRm9udENh
Y2hlIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udENhY2hlPiB7CiAgICAgZnJpZW5kIGNsYXNzIFdU
Rjo6TmV2ZXJEZXN0cm95ZWQ8Rm9udENhY2hlPjsKIAogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEZvbnRDYWNoZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIEZvbnRD
YWNoZSgpOworCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEZvbnRDYWNoZSYgc2luZ2xldG9u
KCk7CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZv
cm0uCkBAIC0yNDIsMTAgKzI0NCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gSXQgY29tZXMgaW50byBw
bGF5IHdoZW4geW91IGNyZWF0ZSBhbiBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWlseSBu
YW1lIGFzIGEgcHJlaW5zdGFsbGVkIGZvbnQuCiAgICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBh
YmlsaXRpZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9t
U3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbVN0cmluZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMg
PSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250
RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGll
cyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUg
PSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZv
bnQ+IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIFJl
ZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHkpOworICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGFkZENsaWVu
dChGb250U2VsZWN0b3ImKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImKTsK
QEAgLTI2Myw3ICsyNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7
CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRp
b25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBBdG9t
U3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQm
LCBTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQpAQCAtMjkwLDIyICsyOTIsMTkgQEAgcHVibGljOgogICAgIHZvaWQgcHJl
d2FybUdsb2JhbGx5KCk7CiAKIHByaXZhdGU6Ci0gICAgRm9udENhY2hlKCk7Ci0gICAgfkZvbnRD
YWNoZSgpID0gZGVsZXRlOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUluYWN0aXZl
Rm9udERhdGFJZk5lZWRlZCgpOwogICAgIHZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJv
bUZvbnRDYXNjYWRlQ2FjaGUoKTsKICAgICB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygp
OwogICAgIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwogCiAg
ICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCi0g
ICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJl
U2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lm
aWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFt
aWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0
ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGll
cyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAKICAgICAvLyBU
aGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBsYXRmb3JtLgogICAgIFdFQkNP
UkVfRVhQT1JUIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBjcmVhdGVGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVj
dGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyk7CiAgICAgCi0g
ICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRv
bVN0cmluZyYpOwotICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBwbGF0Zm9ybUFsdGVybmF0
ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJ
SUxpdGVyYWw+IGFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGlj
IE9wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0
IFN0cmluZyYpOwogCiAgICAgVGltZXIgbV9wdXJnZVRpbWVyOwogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAppbmRl
eCAyZGRkNmJkZjE5NDM4NDE3YWRlYTcxMTI0N2QyMTc2ZDU3NjM1MjM0Li45YzdiZWViZDhkNTI3
Yzc4MTBhOTAxNDQ5NWMwMWYzY2E4ODRkYWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcApAQCAtMTA0LDYgKzEwNCwx
MCBAQCBGb250Q2FzY2FkZUZvbnRzOjpGb250Q2FzY2FkZUZvbnRzKFJlZlB0cjxGb250U2VsZWN0
b3I+JiYgZm9udFNlbGVjdG9yKQogICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKG1fZm9udFNl
bGVjdG9yID8gbV9mb250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDApCiAgICAgLCBtX2dlbmVyYXRp
b24oRm9udENhY2hlOjpzaW5nbGV0b24oKS5nZW5lcmF0aW9uKCkpCiB7CisjaWYgQVNTRVJUX0VO
QUJMRUQKKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICBtX3RocmVhZCA9IG1ha2VS
ZWYoVGhyZWFkOjpjdXJyZW50KCkpOworI2VuZGlmCiB9CiAKIEZvbnRDYXNjYWRlRm9udHM6OkZv
bnRDYXNjYWRlRm9udHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQpAQCAt
NDg4LDcgKzQ5Miw3IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9u
dFJhbmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250CiAKIEdseXBoRGF0YSBGb250
Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKIHsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3RocmVhZCA/IG1fdGhy
ZWFkLT5wdHIoKSA9PSAmVGhyZWFkOjpjdXJyZW50KCkgOiBpc01haW5UaHJlYWQoKSk7CiAgICAg
QVNTRVJUKHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwogCiAgICAgaWYgKHZhcmlhbnQgIT0gTm9y
bWFsVmFyaWFudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlRm9udHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRm9udHMuaAppbmRleCA0NTAxOTQ0NWUzMzM5MGJiODRjYjY2YmE1YzE4M2E1OGY1
YmFkMzhkLi42ZjA3YmM0Y2I0ZjQ2NjJlMDExNjcwZDhmMTkxMjA1YTZmMGM5OTExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5o
CkBAIC0xMTQsNiArMTE0LDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVy
YXRpb247CiAgICAgUGl0Y2ggbV9waXRjaCB7IFVua25vd25QaXRjaCB9OwogICAgIGJvb2wgbV9p
c0ZvclBsYXRmb3JtRm9udCB7IGZhbHNlIH07CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBPcHRp
b25hbDxSZWY8VGhyZWFkPj4gbV90aHJlYWQ7CisjZW5kaWYKIH07CiAKIGlubGluZSBib29sIEZv
bnRDYXNjYWRlRm9udHM6OmlzRml4ZWRQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbikKQEAgLTEyNSw3ICsxMjgsNyBAQCBpbmxpbmUgYm9vbCBGb250Q2FzY2Fk
ZUZvbnRzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3Jp
cAogCiBpbmxpbmUgY29uc3QgRm9udCYgRm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQoY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV90aHJlYWQgPyBtX3RocmVhZC0+cHRyKCkgPT0g
JlRocmVhZDo6Y3VycmVudCgpIDogaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9jYWNoZWRQ
cmltYXJ5Rm9udCkgewogICAgICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxi
YWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwogICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250
ID0gcHJpbWFyeVJhbmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnLCBFeHRlcm5hbFJlc291
cmNlRG93bmxvYWRQb2xpY3k6OkFsbG93KS5mb250OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCmlu
ZGV4IDg1Yzk0YTlhOTNmMDhiMDJiNTQ3ZTBiZTYwNTY2Y2ZjMTQwODAyMmYuLjE4NjhjODdjNDk2
YzgzZmFmYmEyMTNhMDgyZWJhZTk3Y2IyOTgxMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAK
QEAgLTYxOSw3ICs2MTksNyBAQCBSZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1G
b250KENURm9udFJlZiBvcmlnaW5hbEZvbnQsIGNvbnN0IEZvbnREZXNjcgogICAgIHJldHVybiBh
ZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhvcmlnaW5hbEZvbnQsIENURm9u
dEdldFNpemUob3JpZ2luYWxGb250KSwgbnVsbHB0ciwgZGVzY3JpcHRvci5nZXQoKSkpOwogfQog
Ci1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCitSZWZQdHI8Rm9udD4g
Rm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
LCBjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBw
cm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBrZXl3
b3JkcyBpbgogICAgIC8vIHRoZSByZXF1ZXN0ZWQgbmFtZXMuIEZvciBleGFtcGxlLCB3ZSdsbCBt
YXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KQEAgLTYy
OCwyNyArNjI4LDE5IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIC8vIFN1YnN0aXR1dGUgdGhlIGRlZmF1bHQgbW9ub3NwYWNlIGZvbnQg
Zm9yIHdlbGwta25vd24gbW9ub3NwYWNlIGZvbnRzLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtb25hY28iKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShmYW1pbHksICJtZW5sbyIpKSB7Ci0gICAgICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gY291cmllcigiY291cmllciIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHko
ZGVzY3JpcHRpb24sIGNvdXJpZXIpOwotICAgIH0KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZmFtaWx5LCAibW9uYWNvIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZmFtaWx5LCAibWVubG8iKSkKKyAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sICJjb3VyaWVyIl9zKTsKIAogICAgIC8vIFN1YnN0aXR1dGUgVmVyZGFuYSBmb3Ig
THVjaWRhIEdyYW5kZS4KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFt
aWx5LCAibHVjaWRhIGdyYW5kZSIpKSB7Ci0gICAgICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdmVyZGFuYSgidmVyZGFuYSIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIHZlcmRhbmEpOwotICAgIH0KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKQorICAgICAgICByZXR1cm4gZm9udEZv
ckZhbWlseShkZXNjcmlwdGlvbiwgInZlcmRhbmEiX3MpOwogI2VuZGlmCiAKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhcmFiaWMoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkFy
YWJpYyIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBwYXNodG8oTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIlBhc2h0byIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U3RyaW5nPiB1cmR1KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVcmR1IikpOwotICAgIHN0YXRp
YyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0KCks
ICZ1cmR1LmdldCgpIH07Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25z
dCBBdG9tU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIsIEF0b21TdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IGdlZXphQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21TdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICBmb3IgKFN0cmluZyogbWF0Y2hXb3JkIDogbWF0Y2hXb3Jk
cykgewotICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoKm1hdGNo
V29yZCkpCi0gICAgICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNG
b250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQgOiBnZWV6YVBs
YWluKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBtYXRjaFdvcmRzW10gPSB7
ICJBcmFiaWMiX3MsICJQYXNodG8iX3MsICJVcmR1Il9zIH07CisgICAgYXV0byBmYW1pbHlNYXRj
aGVyID0gU3RyaW5nVmlldyhmYW1pbHkpOworICAgIGZvciAoYXV0byBtYXRjaFdvcmQgOiBtYXRj
aFdvcmRzKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU1hdGNo
ZXIsIFN0cmluZ1ZpZXcobWF0Y2hXb3JkKSkpCisgICAgICAgICAgICByZXR1cm4gZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkg
PyAiR2VlemFQcm8tQm9sZCJfcyA6ICJHZWV6YVBybyJfcyk7CiAgICAgfQogICAgIHJldHVybiBu
dWxscHRyOwogfQpAQCAtMTQyMyw3ICsxNDE1LDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IK
ICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KIAotY29u
c3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENh
Y2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1l
KQogewogICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoZWl0aVN0cmluZ1tdID0geyAweDllZDEsIDB4
NGY1MyB9OwogICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzb25ndGlTdHJpbmdbXSA9IHsgMHg1Yjhi
LCAweDRmNTMgfTsKQEAgLTE0MzEsMTAgKzE0MjMsMTAgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9u
dENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWwKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgd2VpcnVhbllhSGVpU3RyaW5nW10gPSB7IDB4NWZh
ZSwgMHg4ZjZmLCAweDk2YzUsIDB4OWVkMSB9OwogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB3ZWly
dWFuWmhlbmdIZWl0aVN0cmluZ1tdID0geyAweDVmYWUsIDB4OGVkZiwgMHg2YjYzLCAweDllZDEs
IDB4OWFkNCB9OwogCi0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9tU3RyaW5nPiBzb25ndGlTQygiU29uZ3RpIFNDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRv
bVN0cmluZz4gc29uZ3RpVEMoIlNvbmd0aSBUQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IGhlaXRpU0NSZXBsYWNlbWVudCgiUGluZ0ZhbmcgU0MiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBoZWl0aVRDUmVwbGFjZW1lbnQoIlBpbmdGYW5nIFRDIiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlM
aXRlcmFsIHNvbmd0aVNDID0gIlNvbmd0aSBTQyJfczsKKyAgICBzdGF0aWMgY29uc3RleHByIEFT
Q0lJTGl0ZXJhbCBzb25ndGlUQyA9ICJTb25ndGkgVEMiX3M7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBBU0NJSUxpdGVyYWwgaGVpdGlTQ1JlcGxhY2VtZW50ID0gIlBpbmdGYW5nIFNDIl9zOworICAg
IHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIGhlaXRpVENSZXBsYWNlbWVudCA9ICJQaW5n
RmFuZyBUQyJfczsKIAogICAgIHN3aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIGNh
c2UgMjoKQEAgLTE0NjksNyArMTQ2MSw3IEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6
cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBudWxsQXRvbSgpOworICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiB9CiAKIHZvaWQgYWRkQXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKENG
TXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMg
YWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKaW5k
ZXggZjAyN2VlZDMxNzE0NDRiYzM2YTQzNDQ3NjNiNzNlMTJkYjJhMDI2Ny4uZmNkOTA5NjZiN2Yy
MjdhYmJjZGI1N2ExYmU0OWVjOGFiODFjZWZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBl
LmNwcApAQCAtMzE5LDkgKzMxOSw4IEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAg
Ly8gV2Ugd2FudCB0byByZXR1cm4gYSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0aGUg
bG9naWMgcHJldmVudGluZyBGb250Q29uZmlnCiAgICAgLy8gbWF0Y2hlcyBmb3Igbm9uLWZhbGxi
YWNrIGZvbnRzIG1pZ2h0IHJldHVybiAwLiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxvd2VkLgotICAg
IHN0YXRpYyBBdG9tU3RyaW5nIHRpbWVzU3RyKCJzZXJpZiIpOwotICAgIGlmIChSZWZQdHI8Rm9u
dD4gZm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0cikpCi0gICAg
ICAgIHJldHVybiAqZm9udDsKKyAgICBpZiAoUmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Rm9yRmFt
aWx5KGZvbnREZXNjcmlwdGlvbiwgInNlcmlmIl9zKSkKKyAgICAgICAgcmV0dXJuIGZvbnQucmVs
ZWFzZU5vbk51bGwoKTsKIAogICAgIC8vIFRoaXMgY291bGQgYmUgcmVhY2hlZCBkdWUgdG8gaW1w
cm9wZXJseS1pbnN0YWxsZWQgb3IgbWlzY29uZmlndXJlZCBmb250Y29uZmlnLgogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMzIsMjYgKzMzMSwyNiBAQCBWZWN0b3I8Rm9u
dFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJp
bGl0aWVzSW5GYW1pbAogICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBTdHJpbmcgZ2V0RmFt
aWx5TmFtZVN0cmluZ0Zyb21GYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQorc3RhdGlj
IFN0cmluZyBnZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseShjb25zdCBTdHJpbmcmIGZhbWls
eSkKIHsKICAgICAvLyBJZiB3ZSdyZSBjcmVhdGluZyBhIGZhbGxiYWNrIGZvbnQgKGUuZy4gIi13
ZWJraXQtbW9ub3NwYWNlIiksIGNvbnZlcnQgdGhlIG5hbWUgaW50bwogICAgIC8vIHRoZSBmYWxs
YmFjayBuYW1lIChsaWtlICJtb25vc3BhY2UiKSB0aGF0IGZvbnRjb25maWcgdW5kZXJzdGFuZHMu
CiAgICAgaWYgKGZhbWlseS5sZW5ndGgoKSAmJiAhZmFtaWx5LnN0YXJ0c1dpdGgoIi13ZWJraXQt
IikpCi0gICAgICAgIHJldHVybiBmYW1pbHkuc3RyaW5nKCk7CisgICAgICAgIHJldHVybiBmYW1p
bHk7CiAKLSAgICBpZiAoZmFtaWx5ID09IHN0YW5kYXJkRmFtaWx5IHx8IGZhbWlseSA9PSBzZXJp
ZkZhbWlseSkKKyAgICBpZiAoZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6OlN0YW5kYXJkRmFtaWx5KSkgfHwgZmFtaWx5
ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZhbWlseU5hbWVz
SW5kZXg6OlNlcmlmRmFtaWx5KSkpCiAgICAgICAgIHJldHVybiAic2VyaWYiOwotICAgIGlmIChm
YW1pbHkgPT0gc2Fuc1NlcmlmRmFtaWx5KQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNE
YXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6U2Fuc1Nlcmlm
RmFtaWx5KSkpCiAgICAgICAgIHJldHVybiAic2Fucy1zZXJpZiI7Ci0gICAgaWYgKGZhbWlseSA9
PSBtb25vc3BhY2VGYW1pbHkpCisgICAgaWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpNb25vc3BhY2VGYW1pbHkp
KSkKICAgICAgICAgcmV0dXJuICJtb25vc3BhY2UiOwotICAgIGlmIChmYW1pbHkgPT0gY3Vyc2l2
ZUZhbWlseSkKKyAgICBpZiAoZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6OkN1cnNpdmVGYW1pbHkpKSkKICAgICAgICAg
cmV0dXJuICJjdXJzaXZlIjsKLSAgICBpZiAoZmFtaWx5ID09IGZhbnRhc3lGYW1pbHkpCisgICAg
aWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihG
YW1pbHlOYW1lc0luZGV4OjpGYW50YXN5RmFtaWx5KSkpCiAgICAgICAgIHJldHVybiAiZmFudGFz
eSI7CiAKICNpZiBQTEFURk9STShHVEspCi0gICAgaWYgKGZhbWlseSA9PSBzeXN0ZW1VaUZhbWls
eSB8fCBmYW1pbHkgPT0gIi13ZWJraXQtc3lzdGVtLWZvbnQiKQorICAgIGlmIChmYW1pbHkgPT0g
ZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRl
eDo6U3lzdGVtVWlGYW1pbHkpKSB8fCBmYW1pbHkgPT0gIi13ZWJraXQtc3lzdGVtLWZvbnQiKQog
ICAgICAgICByZXR1cm4gZGVmYXVsdEd0a1N5c3RlbUZvbnQoKTsKICNlbmRpZgogCkBAIC01OTks
OSArNTk4LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6
Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKICAgICByZXR1cm4gcGxhdGZvcm1E
YXRhOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRl
RmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJikKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9u
dENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJikKIHsKLSAg
ICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiAjaWYg
RU5BQkxFKFZBUklBVElPTl9GT05UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKaW5kZXggMmI0YjU1NzJhNGQ4MDhiODNi
NGIwZjRhYTY0Zjk2Yzk2MzgyZjYxMy4uMGE2ZTVhN2U5OTU2N2U0YWMxMDdhNzRkODFkOTlmMGIz
MTgzYjQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAgLTM2Miw5ICszNjIsOSBAQCBib29sIEZvbnRDYWNoZTo6
aXNTeXN0ZW1Gb250Rm9yYmlkZGVuRm9yRWRpdGluZyhjb25zdCBTdHJpbmcmKQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZyb21EZXNjcmlwdGlv
bkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0
IExPR0ZPTlQmIGZvbnQsIEF0b21TdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKQorUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6Zm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIFN0cmluZyYg
b3V0Rm9udEZhbWlseU5hbWUpCiB7Ci0gICAgQXRvbVN0cmluZyBmYW1pbHlOYW1lKGZvbnQubGZG
YWNlTmFtZSwgd2Nzbmxlbihmb250LmxmRmFjZU5hbWUsIExGX0ZBQ0VTSVpFKSk7CisgICAgU3Ry
aW5nIGZhbWlseU5hbWUoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZGYWNlTmFtZSwg
TEZfRkFDRVNJWkUpKTsKICAgICBSZWZQdHI8Rm9udD4gZm9udERhdGEgPSBmb250Rm9yRmFtaWx5
KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAgICAgaWYgKGZvbnREYXRhKQogICAgICAg
ICBvdXRGb250RmFtaWx5TmFtZSA9IGZhbWlseU5hbWU7CkBAIC0zNzMsNTYgKzM3Myw1NyBAQCBS
ZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbgogCiBSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0
RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gZmFsbGJhY2tG
b250TmFtZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBmYWxsYmFja0ZvbnRO
YW1lOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxf
b25jZShvbmNlRmxhZywgWyZdKCkgeworICAgICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBi
ZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gRm9yIG5v
dyB3ZSdsbCBwaWNrCisgICAgICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQg
Z2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgorCisgICAgICAgIC8vIFNlYXJjaCBhbGwg
dHlwaWNhbCBXaW5kb3dzLWluc3RhbGxlZCBmdWxsIFVuaWNvZGUgZm9udHMuCisgICAgICAgIC8v
IFNvcnRlZCBieSBtb3N0IHRvIGxlYXN0IGdseXBocyBhY2NvcmRpbmcgdG8gaHR0cDovL2VuLndp
a2lwZWRpYS5vcmcvd2lraS9Vbmljb2RlX3R5cGVmYWNlcworICAgICAgICAvLyBTdGFydCB3aXRo
IFRpbWVzIE5ldyBSb21hbiBhbHNvIHNpbmNlIGl0IGlzIHRoZSBkZWZhdWx0IGlmIHRoZSB1c2Vy
IGRvZXNuJ3QgY2hhbmdlIHByZWZzLgorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgU3RyaW5nPiBmYWxsYmFja0ZvbnRzW10gPSB7CisgICAgICAgICAgICBTdHJpbmcoIlRpbWVz
IE5ldyBSb21hbiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAg
U3RyaW5nKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAorICAgICAgICAgICAgU3RyaW5nKCJUYWhvbWEiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJBcmlhbCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCisgICAgICAgIH07CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChmYWxsYmFja0ZvbnRzKTsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9u
dHNbaV0pKSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tGb250TmFtZS5nZXQoKSA9IGZhbGxi
YWNrRm9udHNbaV07CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICB9CiAKLSAgICBpZiAoIWZhbGxiYWNrRm9udE5hbWUuZ2V0KCkuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gKmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnRO
YW1lKTsKKyAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBERUZBVUxUX0dVSV9GT05UIGlmIG5v
IGtub3duIFVuaWNvZGUgZm9udHMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgKEhGT05UIGRl
ZmF1bHRHVUlGb250ID0gc3RhdGljX2Nhc3Q8SEZPTlQ+KEdldFN0b2NrT2JqZWN0KERFRkFVTFRf
R1VJX0ZPTlQpKSkgeworICAgICAgICAgICAgTE9HRk9OVCBkZWZhdWx0R1VJTG9nRm9udDsKKyAg
ICAgICAgICAgIEdldE9iamVjdChkZWZhdWx0R1VJRm9udCwgc2l6ZW9mKGRlZmF1bHRHVUlMb2dG
b250KSwgJmRlZmF1bHRHVUlMb2dGb250KTsKKyAgICAgICAgICAgIGlmIChmb250RnJvbURlc2Ny
aXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIGRlZmF1bHRHVUlMb2dGb250LCBmYWxs
YmFja0ZvbnROYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAg
IC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidz
IGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNrCi0gICAgLy8gdGhlIGRlZmF1
bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0K
LSAgICAvLyBTZWFyY2ggYWxsIHR5cGljYWwgV2luZG93cy1pbnN0YWxsZWQgZnVsbCBVbmljb2Rl
IGZvbnRzLgotICAgIC8vIFNvcnRlZCBieSBtb3N0IHRvIGxlYXN0IGdseXBocyBhY2NvcmRpbmcg
dG8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Vbmljb2RlX3R5cGVmYWNlcwotICAgIC8v
IFN0YXJ0IHdpdGggVGltZXMgTmV3IFJvbWFuIGFsc28gc2luY2UgaXQgaXMgdGhlIGRlZmF1bHQg
aWYgdGhlIHVzZXIgZG9lc24ndCBjaGFuZ2UgcHJlZnMuCi0gICAgc3RhdGljIE1haW5UaHJlYWRO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBmYWxsYmFja0ZvbnRzW10gPSB7Ci0gICAg
ICAgIEF0b21TdHJpbmcoIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwKLSAgICAgICAgQXRvbVN0cmluZygiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmcoIlRh
aG9tYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAgQXRvbVN0
cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwKLSAgICAgICAgQXRvbVN0cmluZygiQXJpYWwiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCkKLSAgICB9OwotICAgIFJlZlB0cjxGb250PiBzaW1wbGVGb250OwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChmYWxsYmFja0ZvbnRzKTsgKytp
KSB7Ci0gICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRp
b24sIGZhbGxiYWNrRm9udHNbaV0pKSB7Ci0gICAgICAgICAgICBmYWxsYmFja0ZvbnROYW1lLmdl
dCgpID0gZmFsbGJhY2tGb250c1tpXTsKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsK
KyAgICAgICAgLy8gRmFsbCBiYWNrIHRvIE5vbi1jbGllbnQgbWV0cmljcyBmb250cy4KKyAgICAg
ICAgTk9OQ0xJRU5UTUVUUklDUyBub25DbGllbnRNZXRyaWNzIHsgfTsKKyAgICAgICAgbm9uQ2xp
ZW50TWV0cmljcy5jYlNpemUgPSBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyk7CisgICAgICAgIGlm
IChTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgc2l6ZW9mKG5v
bkNsaWVudE1ldHJpY3MpLCAmbm9uQ2xpZW50TWV0cmljcywgMCkpIHsKKyAgICAgICAgICAgIGlm
IChmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVu
dE1ldHJpY3MubGZNZXNzYWdlRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250
KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1lbnVGb250LCBmYWxsYmFja0Zv
bnROYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZm9udEZy
b21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNz
LmxmU3RhdHVzRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgaWYgKGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNj
cmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZkNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnROYW1l
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNj
cmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmU21D
YXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgfQorICAgIH0pOwogCi0gICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBERUZB
VUxUX0dVSV9GT05UIGlmIG5vIGtub3duIFVuaWNvZGUgZm9udHMgYXJlIGF2YWlsYWJsZS4KLSAg
ICBpZiAoSEZPTlQgZGVmYXVsdEdVSUZvbnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3RvY2tP
YmplY3QoREVGQVVMVF9HVUlfRk9OVCkpKSB7Ci0gICAgICAgIExPR0ZPTlQgZGVmYXVsdEdVSUxv
Z0ZvbnQ7Ci0gICAgICAgIEdldE9iamVjdChkZWZhdWx0R1VJRm9udCwgc2l6ZW9mKGRlZmF1bHRH
VUlMb2dGb250KSwgJmRlZmF1bHRHVUlMb2dGb250KTsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQg
PSBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIGRlZmF1bHRH
VUlMb2dGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxl
Rm9udDsKLSAgICB9CisgICAgaWYgKCFmYWxsYmFja0ZvbnROYW1lLmdldCgpLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tG
b250TmFtZSk7CiAKLSAgICAvLyBGYWxsIGJhY2sgdG8gTm9uLWNsaWVudCBtZXRyaWNzIGZvbnRz
LgotICAgIE5PTkNMSUVOVE1FVFJJQ1Mgbm9uQ2xpZW50TWV0cmljcyB7IH07Ci0gICAgbm9uQ2xp
ZW50TWV0cmljcy5jYlNpemUgPSBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyk7Ci0gICAgaWYgKFN5
c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBzaXplb2Yobm9uQ2xp
ZW50TWV0cmljcyksICZub25DbGllbnRNZXRyaWNzLCAwKSkgewotICAgICAgICBpZiAoc2ltcGxl
Rm9udCA9IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9u
Q2xpZW50TWV0cmljcy5sZk1lc3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAg
ICAgIHJldHVybiAqc2ltcGxlRm9udDsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3Mu
bGZNZW51Rm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBs
ZUZvbnQ7Ci0gICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExv
Z0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmU3RhdHVzRm9udCwgZmFs
bGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgICAg
IGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2Ny
aXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUp
KQotICAgICAgICAgICAgcmV0dXJuICpzaW1wbGVGb250OwotICAgICAgICBpZiAoc2ltcGxlRm9u
dCA9IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xp
ZW50TWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAg
ICAgcmV0dXJuICpzaW1wbGVGb250OwotICAgIH0KLSAgICAKICAgICBhdXRvIGhGb250ID0gYWRv
cHRHRElPYmplY3Qoc3RhdGljX2Nhc3Q8SEZPTlQ+KEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJ
X0ZPTlQpKSk7CiAgICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEoV1RGTW92ZShoRm9u
dCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBmYWxzZSwgZmFsc2UsIGZh
bHNlKTsKICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpOwpAQCAt
NjkyLDExICs2OTMsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENh
Y2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVG
YW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRpb25hbDxBU0NJSUxp
dGVyYWw+IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmlu
ZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNv
bnN0IEF0b21TdHJpbmc+IHRpbWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IG1pY3Jvc29mdFNhbnNTZXJpZigiTWljcm9zb2Z0IFNh
bnMgU2VyaWYiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0KICAgICBzd2l0
Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBkb24ndCBz
dXBwb3J0IGJpdG1hcCBmb250cywgYnV0IGxlZ2FjeSBjb250ZW50IGV4cGVjdHMgc3VwcG9ydC4K
ICAgICAvLyBUaHVzIHdlIGFsbG93IFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRlcm5hdGl2ZSBm
b3IgdGhlIGJpdG1hcCBmb250IE1TIFNlcmlmLApAQCAtNzA1LDcgKzcwMyw3IEBAIGNvbnN0IEF0
b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlsCiAgICAgLy8gd291bGQgbmVlZCBpdCBvbiBvdGhlciBwbGF0Zm9ybXMg
dG9vLgogICAgIGNhc2UgODoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGZhbWlseU5hbWUsICJtcyBzZXJpZiIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3
Um9tYW47CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAgICAg
YnJlYWs7CiAgICAgLy8gT24gV2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMs
IGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1cHBvcnQuCiAgICAgLy8gVGh1cyB3ZSBhbGxv
dyBNaWNyb3NvZnQgU2FucyBTZXJpZiBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgdGhlIGJpdG1hcCBm
b250IE1TIFNhbnMgU2VyaWYsCkBAIC03MTQsMTAgKzcxMiwxMCBAQCBjb25zdCBBdG9tU3RyaW5n
JiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24gb3RoZXIgcGxhdGZvcm1zIHRvby4KICAg
ICBjYXNlIDEzOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFt
aWx5TmFtZSwgIm1zIHNhbnMgc2VyaWYiKSkKLSAgICAgICAgICAgIHJldHVybiBtaWNyb3NvZnRT
YW5zU2VyaWY7CisgICAgICAgICAgICByZXR1cm4gIk1pY3Jvc29mdCBTYW5zIFNlcmlmIl9zOwog
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIH0KIAogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>