<?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>149036</bug_id>
          
          <creation_ts>2015-09-10 06:47:58 -0700</creation_ts>
          <short_desc>Split FontDescription into lower and higher level types</short_desc>
          <delta_ts>2015-09-15 17:17:19 -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>Text</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>mmaxfield</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1124888</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-10 06:47:58 -0700</bug_when>
    <thetext>Currently FontDescription is used through the text subsystem. However much of the data it carries is only needed by FontCascade and text layout but not by the lower Font/FontCache layer. This make code confusing. For example families specified in FontDescription are ignored at lower levels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124944</commentid>
    <comment_count>1</comment_count>
      <attachid>260939</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-10 10:50:30 -0700</bug_when>
    <thetext>Created attachment 260939
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125029</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-09-10 14:32:29 -0700</bug_when>
    <thetext>Too much red to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125159</commentid>
    <comment_count>3</comment_count>
      <attachid>260998</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-11 02:53:50 -0700</bug_when>
    <thetext>Created attachment 260998
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125165</commentid>
    <comment_count>4</comment_count>
      <attachid>261002</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-11 03:55:49 -0700</bug_when>
    <thetext>Created attachment 261002
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125195</commentid>
    <comment_count>5</comment_count>
      <attachid>261002</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-09-11 09:14:50 -0700</bug_when>
    <thetext>Comment on attachment 261002
patch

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

A bit of a shame that the more commonly used class is the one that has a longer name now.

&gt; Source/WebCore/platform/graphics/FontDescription.h:41
&gt;  class FontDescription {

Seems like this class is almost a struct.

&gt; Source/WebCore/platform/graphics/FontDescription.h:50
&gt; +    int computedPixelSize() const { return int(m_computedSize + 0.5f); }

Not new: This is a strange way to write rounding code.

&gt; Source/WebCore/platform/graphics/FontDescription.h:66
&gt; +    void setComputedSize(float s) { m_computedSize = clampToFloat(s); }

Maybe not new: I don’t understand why it’s valuable to call clampToFloat on a float.

&gt; Source/WebCore/platform/graphics/FontDescription.h:82
&gt; +    FontTraitsMask traitsMask() const;
&gt; +private:

Normally we leave a blank line before &quot;private&quot;.

&gt; Source/WebCore/rendering/RenderFullScreen.cpp:88
&gt; +    fullscreenStyle.get().setFontDescription(FontCascadeDescription());

Might want to use { } here so we don’t have to state the type explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126136</commentid>
    <comment_count>6</comment_count>
      <attachid>261239</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-15 14:39:50 -0700</bug_when>
    <thetext>Created attachment 261239
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126163</commentid>
    <comment_count>7</comment_count>
      <attachid>261249</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-15 15:25:02 -0700</bug_when>
    <thetext>Created attachment 261249
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126209</commentid>
    <comment_count>8</comment_count>
      <attachid>261249</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-15 17:17:14 -0700</bug_when>
    <thetext>Comment on attachment 261249
patch

Clearing flags on attachment: 261249

Committed r189830: &lt;http://trac.webkit.org/changeset/189830&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126210</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-15 17:17:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260939</attachid>
            <date>2015-09-10 10:50:30 -0700</date>
            <delta_ts>2015-09-11 02:53:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fontdescription-split.patch</filename>
            <type>text/plain</type>
            <size>93482</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTU2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE1LTA5LTEwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBGb250RGVzY3JpcHRp
b24gaW50byBsb3dlciBhbmQgaGlnaGVyIGxldmVsIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkwMzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgRm9udERlc2NyaXB0aW9uIGlz
IHVzZWQgdGhyb3VnaCB0aGUgdGV4dCBzdWJzeXN0ZW0uIEhvd2V2ZXIgbXVjaCBvZiB0aGUgZGF0
YSBpdAorICAgICAgICBjYXJyaWVzIGlzIG9ubHkgbmVlZGVkIGJ5IEZvbnRDYXNjYWRlIGFuZCB0
ZXh0IGxheW91dCBidXQgbm90IGJ5IHRoZSBsb3dlciBsZXZlbCBGb250L0ZvbnRDYWNoZQorICAg
ICAgICBsYXllci4gVGhpcyBtYWtlcyBjb2RlIGNvbmZ1c2luZy4gRm9yIGV4YW1wbGUgZmFtaWxp
ZXMgc3BlY2lmaWVkIGluIEZvbnREZXNjcmlwdGlvbiBhcmUgaWdub3JlZAorICAgICAgICBhdCBs
b3dlciBsZXZlbHMuCisKKyAgICAgICAgU3BsaXQgaXQgaW50byBhIGxvdyBsZXZlbCBGb250RGVz
Y3JpcHRpb24gYW5kIGEgaGlnaCBsZXZlbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uIHR5cGU6CisK
KyAgICAgICAgRm9udERlc2NyaXB0aW9uIDwtPiBGb250CisgICAgICAgIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gPC0+IEZvbnRDYXNjYWRlCisKKyAgICAgICAgVGhlIGZvcm1lciBvbmx5IGNhcnJp
ZXMgaW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWQgdG8gaW5zdGFudGlhdGUgYSBGb250IG9yIGZl
dGNoIGl0IGZyb20gdGhlIEZvbnRDYWNoZS4KKyAgICAgICAgVGhlIGxhdHRlciBoYXMgYWRkaXRp
b25hbCBkYXRhIGZvciBDU1MgZm9udCBjYXNjYWRlIHNlbWFudGljcyBhbmQgb3RoZXIgaGlnaGVy
IGxldmVsIGZlYXR1cmVzLgorCiAyMDE1LTA5LTEwICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3Zp
bGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIG1pbi13aWR0aC9oZWlnaHQgc2hvdWxkIGRlZmF1
bHQgdG8gYXV0byBmb3IgZmxleGJveCBpdGVtcwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDE4OTIwNikK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzE1LDIwICsyNzE1LDIwIEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29t
cHV0ZWRTdHlsZUV4dHJhY3RvcjoKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRT
bW9vdGhpbmc6CiAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0
eWxlLT5mb250RGVzY3JpcHRpb24oKS5mb250U21vb3RoaW5nKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Rm9udFZhcmlhbnRMaWdhdHVyZXM6IHsKLSAgICAgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBzdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCkuY29tbW9uTGlnYXR1cmVzU3RhdGUoKTsKLSAgICAgICAgICAgIEZv
bnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRl
ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgp
OwotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBoaXN0b3JpY2Fs
TGlnYXR1cmVzU3RhdGUgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuaGlzdG9yaWNhbExpZ2F0
dXJlc1N0YXRlKCk7Ci0gICAgICAgICAgICBpZiAoY29tbW9uTGlnYXR1cmVzU3RhdGUgPT0gRm9u
dERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSAmJiBkaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZQotICAgICAg
ICAgICAgICAgICYmIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVzY3JpcHRpb246
Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKQorICAgICAgICAgICAgRm9udENhc2NhZGVEZXNjcmlwdGlv
bjo6TGlnYXR1cmVzU3RhdGUgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBzdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCkuY29tbW9uTGlnYXR1cmVzU3RhdGUoKTsKKyAgICAgICAgICAgIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoKTsK
KyAgICAgICAgICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGhpc3Rv
cmljYWxMaWdhdHVyZXNTdGF0ZSA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5oaXN0b3JpY2Fs
TGlnYXR1cmVzU3RhdGUoKTsKKyAgICAgICAgICAgIGlmIChjb21tb25MaWdhdHVyZXNTdGF0ZSA9
PSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSAmJiBkaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPT0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGln
YXR1cmVzU3RhdGUKKyAgICAgICAgICAgICAgICAmJiBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUg
PT0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb3JtYWwpOwogCiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZUxpc3Qg
PSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgICAgICAgICBpZiAo
Y29tbW9uTGlnYXR1cmVzU3RhdGUgIT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNT
dGF0ZSkKLSAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKGNvbW1vbkxpZ2F0dXJlc1N0YXRlID09IEZvbnREZXNjcmlwdGlv
bjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSA/IENTU1ZhbHVlTm9Db21tb25MaWdhdHVyZXMgOiBD
U1NWYWx1ZUNvbW1vbkxpZ2F0dXJlcykpOwotICAgICAgICAgICAgaWYgKGRpc2NyZXRpb25hcnlM
aWdhdHVyZXNTdGF0ZSAhPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKQot
ICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID09IEZvbnREZXNjcmlwdGlv
bjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSA/IENTU1ZhbHVlTm9EaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzIDogQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKSk7Ci0gICAgICAgICAgICBpZiAo
aGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlICE9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1
cmVzU3RhdGUpCi0gICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPT0gRm9udERl
c2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0hpc3RvcmljYWxM
aWdhdHVyZXMgOiBDU1NWYWx1ZUhpc3RvcmljYWxMaWdhdHVyZXMpKTsKKyAgICAgICAgICAgIGlm
IChjb21tb25MaWdhdHVyZXNTdGF0ZSAhPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxM
aWdhdHVyZXNTdGF0ZSkKKyAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1
ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKGNvbW1vbkxpZ2F0dXJlc1N0YXRlID09IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vQ29t
bW9uTGlnYXR1cmVzIDogQ1NTVmFsdWVDb21tb25MaWdhdHVyZXMpKTsKKyAgICAgICAgICAgIGlm
IChkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgIT0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
Tm9ybWFsTGlnYXR1cmVzU3RhdGUpCisgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQo
Y3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShkaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
U3RhdGUgPT0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSA/
IENTU1ZhbHVlTm9EaXNjcmV0aW9uYXJ5TGlnYXR1cmVzIDogQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzKSk7CisgICAgICAgICAgICBpZiAoaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlICE9
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKQorICAgICAgICAg
ICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID09IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkRp
c2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vSGlzdG9yaWNhbExpZ2F0dXJlcyA6IENT
U1ZhbHVlSGlzdG9yaWNhbExpZ2F0dXJlcykpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlTGlz
dDsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5WkluZGV4OgpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDE4OTIwNikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OTAsNyArNTkwLDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmJlZ2luTG9hZFRpbWVyRmlyZQog
ICAgICAgICBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS5jaGVja0xvYWRDb21wbGV0ZSgp
OwogfQogCi1ib29sIENTU0ZvbnRTZWxlY3Rvcjo6cmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikgY29uc3QKK2Jvb2wgQ1NTRm9udFNlbGVjdG9yOjpy
ZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFt
aWx5Q291bnQoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFt
ZSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
U2VsZWN0b3IuaAkocmV2aXNpb24gMTg5MjA2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw2IEBAIGNsYXNzIENTU0Zv
bnRGYWNlUnVsZTsKIGNsYXNzIENTU1NlZ21lbnRlZEZvbnRGYWNlOwogY2xhc3MgQ2FjaGVkRm9u
dDsKIGNsYXNzIERvY3VtZW50OwotY2xhc3MgRm9udERlc2NyaXB0aW9uOwogY2xhc3MgU3R5bGVS
dWxlRm9udEZhY2U7CiAKIGNsYXNzIENTU0ZvbnRTZWxlY3RvciBmaW5hbCA6IHB1YmxpYyBGb250
U2VsZWN0b3IgewpAQCAtNjMsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkg
b3ZlcnJpZGU7CiAgICAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIGdldEZvbnRGYWNlKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKIAotICAgIHZpcnR1
YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBjbGVhckRvY3Vt
ZW50KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAxODkyMDYp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjY1MSw3ICs2NjUxLDcgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtRm9udChib29sIGlt
cAogICAgIEFTU0VSVChzeXN0ZW1Gb250SUQgPj0gQ1NTVmFsdWVDYXB0aW9uICYmIHN5c3RlbUZv
bnRJRCA8PSBDU1NWYWx1ZVN0YXR1c0Jhcik7CiAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKIAot
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LT5zeXN0ZW1Gb250KHN5c3RlbUZvbnRJRCwgZm9udERlc2NyaXB0aW9uKTsKICAgICBpZiAoIWZv
bnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgJKHJldmlz
aW9uIDE4OTIwNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBp
bmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0MzgsMTggKzM0MzgsMTggQEAgdGVtcGxhdGU8PiBp
bmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZQogICAgIHJldHVybiBQRV9BTEw7CiB9CiAKLXRl
bXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250
RGVzY3JpcHRpb246Oktlcm5pbmcga2VybmluZykKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpLZXJu
aW5nIGtlcm5pbmcpCiAgICAgOiBDU1NWYWx1ZShQcmltaXRpdmVDbGFzcykKIHsKICAgICBtX3By
aW1pdGl2ZVVuaXRUeXBlID0gQ1NTX1ZBTFVFX0lEOwogICAgIHN3aXRjaCAoa2VybmluZykgewot
ICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpBdXRvS2VybmluZzoKKyAgICBjYXNlIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBD
U1NWYWx1ZUF1dG87CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6
Tm9ybWFsS2VybmluZzoKKyAgICBjYXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbEtl
cm5pbmc6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlTm9ybWFsOwogICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vbmVLZXJuaW5nOgorICAgIGNh
c2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9uZUtlcm5pbmc6CiAgICAgICAgIG1fdmFsdWUu
dmFsdWVJRCA9IENTU1ZhbHVlTm9uZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0NTgs
MjMgKzM0NTgsMjMgQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTUwog
ICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1ZhbHVlQXV0bzsKIH0KIAotdGVtcGxhdGU8PiBpbmxp
bmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEZvbnREZXNjcmlwdGlvbjo6S2VybmluZygp
IGNvbnN0Cit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbjo6S2VybmluZygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVmFs
dWVJRCgpKTsKIAogICAgIHN3aXRjaCAobV92YWx1ZS52YWx1ZUlEKSB7CiAgICAgY2FzZSBDU1NW
YWx1ZUF1dG86Ci0gICAgICAgIHJldHVybiBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOwor
ICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc7CiAgICAg
Y2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgcmV0dXJuIEZvbnREZXNjcmlwdGlvbjo6Tm9y
bWFsS2VybmluZzsKKyAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1h
bEtlcm5pbmc7CiAgICAgY2FzZSBDU1NWYWx1ZU5vbmU6Ci0gICAgICAgIHJldHVybiBGb250RGVz
Y3JpcHRpb246Ok5vbmVLZXJuaW5nOworICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6Tm9uZUtlcm5pbmc7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZvbnREZXNjcmlwdGlvbjo6
QXV0b0tlcm5pbmc7CisgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkF1dG9LZXJu
aW5nOwogfQogCiB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0
aXZlVmFsdWUoT2JqZWN0Rml0IGZpdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1
aWxkZXJDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWls
ZGVyQ3VzdG9tLmgJKHJldmlzaW9uIDE4OTIwNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZUJ1aWxkZXJDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtNjkzLDcgKzY5Myw3IEBAIGlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWwKIHsKICAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgCi0gICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
TG9jYWxlKG51bGxBdG9tKTsKICAgICBlbHNlCkBAIC04MjMsOCArODIzLDggQEAgaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbAogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRGYW1pbHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlcikKIHsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBGb250RGVzY3JpcHRpb24gaW5p
dGlhbERlc2MgPSBGb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBpbml0
aWFsRGVzYyA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24oKTsKIAogICAgIC8vIFdlIG5lZWQgdG8g
YWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5lcmljIGZhbWlseSBjaGFuZ2Ug
ZnJvbSBtb25vc3BhY2UgdG8gbm9uLW1vbm9zcGFjZS4KICAgICBpZiAoZm9udERlc2NyaXB0aW9u
LnVzZUZpeGVkRGVmYXVsdFNpemUoKSkgewpAQCAtODM5LDggKzgzOSw4IEBAIGlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmkKIAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaGVyaXRGb250RmFtaWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIpCiB7Ci0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgRm9udERlc2NyaXB0aW9uIHBhcmVu
dEZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gcGFyZW50Rm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKIAogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhwYXJlbnRGb250RGVzY3JpcHRpb24uZmFtaWxpZXMo
KSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChwYXJlbnRGb250RGVz
Y3JpcHRpb24uaXNTcGVjaWZpZWRGb250KCkpOwpAQCAtODUxLDcgKzg1MSw3IEBAIGlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWwKIHsKICAgICBhdXRvJiB2YWx1ZUxpc3Qg
PSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKTsKIAotICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigp
OworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsKICAgICAvLyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250LWZhbWls
eSBwcm9wZXJ0eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4KICAgICBib29s
IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZpeGVk
RGVmYXVsdFNpemUoKTsKIApAQCAtMTI0MiwxNCArMTI0MiwxNCBAQCBpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiAKIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbml0aWFsRm9udFdlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQog
ewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZv
bnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZl
ci5mb250RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRX
ZWlnaHROb3JtYWwpOwogICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7CiB9CiAKIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bmhlcml0Rm9udFdlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQogewotICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlw
dGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVz
Y3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KHN0eWxlUmVzb2x2ZXIu
cGFyZW50Rm9udERlc2NyaXB0aW9uKCkud2VpZ2h0KCkpOwogICAgIHN0eWxlUmVzb2x2ZXIuc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9CkBAIC0xMjU3LDcgKzEyNTcsNyBA
QCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oCiBpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250V2VpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7Ci0gICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigp
OwogICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBD
U1NWYWx1ZUludmFsaWQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTM5MCwx
OSArMTM5MCwxOSBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiAK
IGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsV2Via2l0Rm9udFZh
cmlhbnRMaWdhdHVyZXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRp
b24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2Ny
aXB0aW9uKCk7CiAKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUo
Rm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7Ci0gICAgZm9udERlc2NyaXB0
aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShGb250RGVzY3JpcHRpb246Ok5vcm1h
bExpZ2F0dXJlc1N0YXRlKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0
dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOworICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShGb250Q2FzY2FkZURlc2NyaXB0
aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldERpc2Ny
ZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdh
dHVyZXNTdGF0ZSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNT
dGF0ZShGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAKICAg
ICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogfQog
CiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdEZvbnRW
YXJpYW50TGlnYXR1cmVzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAgY29u
c3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVy
LnBhcmVudEZvbnREZXNjcmlwdGlvbigpOwotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOworICAgIGNvbnN0IGF1dG8m
IHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0
aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNj
cmlwdGlvbigpOwogCiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRl
KHBhcmVudEZvbnREZXNjcmlwdGlvbi5jb21tb25MaWdhdHVyZXNTdGF0ZSgpKTsKICAgICBmb250
RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKHBhcmVudEZvbnREZXNj
cmlwdGlvbi5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoKSk7CkBAIC0xNDEzLDMwICsxNDEz
LDMwIEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmgKIAogaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0Rm9udFZhcmlhbnRMaWdh
dHVyZXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQogewot
ICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgY29tbW9uTGlnYXR1cmVzU3RhdGUg
PSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwotICAgIEZvbnREZXNjcmlw
dGlvbjo6TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERl
c2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKLSAgICBGb250RGVzY3JpcHRpb246Okxp
Z2F0dXJlc1N0YXRlIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6
Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CisgICAgYXV0byBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOworICAgIGF1dG8gZGlz
Y3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFs
TGlnYXR1cmVzU3RhdGU7CisgICAgYXV0byBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKIAogICAgIGlmIChpczxD
U1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewogICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewogICAgICAgICAgICAgc3dpdGNoIChkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlTm9Db21tb25MaWdhdHVyZXM6Ci0gICAgICAgICAgICAgICAgY29tbW9u
TGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU7
CisgICAgICAgICAgICAgICAgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNvbW1vbkxpZ2F0dXJlczoKLSAgICAgICAgICAgICAg
ICBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJl
c1N0YXRlOworICAgICAgICAgICAgICAgIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vRGlzY3JldGlvbmFyeUxpZ2F0dXJlczoK
LSAgICAgICAgICAgICAgICBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3Jp
cHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU7CisgICAgICAgICAgICAgICAgZGlzY3JldGlv
bmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdh
dHVyZXNTdGF0ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgotICAgICAgICAgICAgICAgIGRpc2NyZXRpb25h
cnlMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRl
OworICAgICAgICAgICAgICAgIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0hpc3RvcmljYWxMaWdhdHVyZXM6Ci0g
ICAgICAgICAgICAgICAgaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9u
OjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOworICAgICAgICAgICAgICAgIGhpc3RvcmljYWxMaWdh
dHVyZXNTdGF0ZSA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3Rh
dGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlSGlz
dG9yaWNhbExpZ2F0dXJlczoKLSAgICAgICAgICAgICAgICBoaXN0b3JpY2FsTGlnYXR1cmVzU3Rh
dGUgPSBGb250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgICAg
ICAgICBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpF
bmFibGVkTGlnYXR1cmVzU3RhdGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTQ0
Niw3ICsxNDQ2LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbAog
ICAgIH0gZWxzZQogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwogCi0gICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigp
OwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShjb21tb25MaWdh
dHVyZXNTdGF0ZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVy
ZXNTdGF0ZShkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUpOwogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRIaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUoaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKTsK
QEAgLTE0NTUsNyArMTQ1NSw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWwKIAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250
U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQogewotICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlv
bigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5m
b250RGVzY3JpcHRpb24oKTsKICAgICBmbG9hdCBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5
d29yZChDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUo
KSwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpKTsKIAogICAgIGlmIChzaXplIDwgMCkKQEAgLTE0
NjgsMTMgKzE0NjgsMTMgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aQogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRTaXpl
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkt
PmZvbnREZXNjcmlwdGlvbigpOworICAgIGNvbnN0IGF1dG8mIHBhcmVudEZvbnREZXNjcmlwdGlv
biA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAg
ZmxvYXQgc2l6ZSA9IHBhcmVudEZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCk7CiAKICAg
ICBpZiAoc2l6ZSA8IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigp
OworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUocGFyZW50
Rm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkpOwogICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9u
dFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKICAgICBzdHlsZVJlc29sdmVyLnNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwpAQCAtMTUxNiw3ICsxNTE2LDcgQEAgaW5saW5l
IGZsb2F0IFN0eWxlQnVpbGRlckN1c3RvbTo6ZGV0ZXJtaQogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0
byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlv
bigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKENT
U1ZhbHVlSW52YWxpZCk7CiAKICAgICBmbG9hdCBwYXJlbnRTaXplID0gMDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE4OTIwNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxMiwxMSAr
MTQxMiwxMSBAQCBzdGF0aWMgdm9pZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKFJlCiAgICAg
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBnbHlwaE9yaWVudGF0aW9uOwogICAgIHN0eWxlLT5nZXRG
b250QW5kR2x5cGhPcmllbnRhdGlvbihmb250T3JpZW50YXRpb24sIGdseXBoT3JpZW50YXRpb24p
OwogCi0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgYXV0byYgZm9udERlc2NyaXB0aW9uID0gc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgIGlmIChmb250RGVzY3JpcHRpb24ub3JpZW50YXRp
b24oKSA9PSBmb250T3JpZW50YXRpb24gJiYgZm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3Jp
ZW50YXRpb24oKSA9PSBnbHlwaE9yaWVudGF0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBG
b250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAg
YXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBmb250RGVzY3JpcHRpb247CiAgICAgbmV3Rm9udERl
c2NyaXB0aW9uLnNldE5vbkNKS0dseXBoT3JpZW50YXRpb24oZ2x5cGhPcmllbnRhdGlvbik7CiAg
ICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKGZvbnRPcmllbnRhdGlvbik7CiAg
ICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwpAQCAtMTk3
MSw3ICsxOTcxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdQog
ICAgIGlmIChzdHlsZS0+dGV4dFNpemVBZGp1c3QoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihzdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkpOworICAgIGF1dG8gbmV3Rm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpOwogICAgIGlmICghc3R5bGUtPnRleHRTaXplQWRqdXN0KCkuaXNOb25lKCkp
CiAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9udERlc2Ny
aXB0aW9uLnNwZWNpZmllZFNpemUoKSAqIHN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRpcGxp
ZXIoKSk7CiAgICAgZWxzZQpAQCAtMTk4OCwyMCArMTk4OCwyMCBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSCiAgICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29tKCkg
PT0gcGFyZW50U3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAmJiBzdHlsZS0+dGV4dFpvb20oKSA9PSBw
YXJlbnRTdHlsZS0+dGV4dFpvb20oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAg
Rm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihjaGlsZEZvbnQpOworICAgIGNvbnN0
IGF1dG8mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIG5l
d0ZvbnREZXNjcmlwdGlvbiA9IGNoaWxkRm9udDsKICAgICBzZXRGb250U2l6ZShuZXdGb250RGVz
Y3JpcHRpb24sIGNoaWxkRm9udC5zcGVjaWZpZWRTaXplKCkpOwogICAgIHN0eWxlLT5zZXRGb250
RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVy
OjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBjaGlsZEZv
bnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgYXV0byYgY2hpbGRGb250
ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogCiAgICAgaWYgKGNoaWxkRm9udC5pc0Fic29s
dXRlU2l6ZSgpIHx8ICFwYXJlbnRTdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpOworICAgIGNvbnN0IGF1dG8mIHBhcmVudEZvbnQgPSBwYXJlbnRTdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgaWYgKGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkgPT0gcGFy
ZW50Rm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBX
ZSBrbm93IHRoZSBwYXJlbnQgaXMgbW9ub3NwYWNlIG9yIHRoZSBjaGlsZCBpcyBtb25vc3BhY2Us
IGFuZCB0aGF0IGZvbnQKQEAgLTIwMjEsMTQgKzIwMjEsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjpjaGVja0ZvckdlbmVyaWNGYW1pbAogICAgICAgICAgICAgICAgIGNoaWxkRm9udC5zcGVjaWZp
ZWRTaXplKCkgKiBmaXhlZFNjYWxlRmFjdG9yOwogICAgIH0KIAotICAgIEZvbnREZXNjcmlwdGlv
biBuZXdGb250RGVzY3JpcHRpb24oY2hpbGRGb250KTsKKyAgICBhdXRvIG5ld0ZvbnREZXNjcmlw
dGlvbiA9IGNoaWxkRm9udDsKICAgICBzZXRGb250U2l6ZShuZXdGb250RGVzY3JpcHRpb24sIHNp
emUpOwogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsK
IH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFNldHRpbmdzKiBz
ZXR0aW5ncykKIHsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGlmIChzZXR0aW5ncykK
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRS
ZW5kZXJpbmdNb2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoc3RhbmRh
cmRGYW1pbHkpOwpAQCAtMjAzNyw3ICsyMDM3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0
aWFsaXplRm9udFN0eWxlKAogICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQordm9pZCBTdHlsZVJlc29sdmVyOjpzZXRGb250
U2l6ZShGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUp
CiB7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CiAgICAgZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21T
cGVjaWZpZWRTaXplKHNpemUsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCB1c2VT
Vkdab29tUnVsZXMoKSwgbV9zdGF0ZS5zdHlsZSgpLCBkb2N1bWVudCgpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHJldmlzaW9uIDE4OTIwNikKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVGb250KCk7CiAgICAgdm9pZCBpbml0aWFsaXplRm9u
dFN0eWxlKFNldHRpbmdzKik7CiAKLSAgICB2b2lkIHNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlv
biYsIGZsb2F0IHNpemUpOworICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYsIGZsb2F0IHNpemUpOwogCiBwdWJsaWM6CiAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMo
KTsKQEAgLTM5Miw5ICszOTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIEZpbGxMYXllciBiYWNrZ3Jv
dW5kRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZERhdGE7IH0KICAgICAgICAgQ29s
b3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3I7IH0K
IAotICAgICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0
dXJuIG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgICAgIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9wYXJlbnRTdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0gbV9z
dHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KKyAgICAgICAgY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9z
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICAgICAgY29uc3QgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9wYXJlbnRTdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICAgICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5
IHw9IG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CiAgICAg
ICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFpv
b20oZik7IH0KICAgICAgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250
RGlydHkgfD0gbV9zdHlsZS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQogICAgICAgICB2b2lkIHNl
dFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IG1f
c3R5bGUtPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQpAQCAtNDU1LDkgKzQ1NSw5IEBA
IHB1YmxpYzoKIAogICAgIENTU1RvU3R5bGVNYXAqIHN0eWxlTWFwKCkgeyByZXR1cm4gJm1fc3R5
bGVNYXA7IH0KICAgICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBw
ZXJzKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzOyB9Ci0gICAgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0YXRlLmZvbnREZXNj
cmlwdGlvbigpOyB9Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3Jp
cHRpb24oKSB7IHJldHVybiBtX3N0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAg
dm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pIHsgbV9zdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQor
ICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0
dXJuIG1fc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0YXRlLnBhcmVu
dEZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oY29uc3Qg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KICAgICB2b2lkIHNldFpvb20oZmxvYXQg
ZikgeyBtX3N0YXRlLnNldFpvb20oZik7IH0KICAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxv
YXQgZikgeyBtX3N0YXRlLnNldEVmZmVjdGl2ZVpvb20oZik7IH0KICAgICB2b2lkIHNldFdyaXRp
bmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fc3RhdGUuc2V0V3JpdGluZ01vZGUo
d3JpdGluZ01vZGUpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCShyZXZpc2lvbiAxODky
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwJKHdvcmtpbmcgY29weSkKQEAg
LTcwOSw4ICs3MDksOCBAQCBzdWIgZ2VuZXJhdGVJbml0aWFsVmFsdWVTZXR0ZXIgewogICB9IGVs
c2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17IkFu
aW1hdGlvblByb3BlcnR5In0pIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5lcmF0ZUFuaW1h
dGlvblByb3BlcnR5SW5pdGlhbFZhbHVlU2V0dGVyKCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsK
ICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5h
bWV9eyJGb250UHJvcGVydHkifSkgewotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAi
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnRE
ZXNjcmlwdGlvbigpO1xuIjsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBm
b250RGVzY3JpcHRpb24uIiAuICRzZXR0ZXIgLiAiKEZvbnREZXNjcmlwdGlvbjo6IiAuICRpbml0
aWFsIC4gIigpKTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0
byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpO1xuIjsK
KyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBmb250RGVzY3JpcHRpb24uIiAu
ICRzZXR0ZXIgLiAiKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OiIgLiAkaW5pdGlhbCAuICIoKSk7
XG4iOwogICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIu
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7XG4iOwogICB9IGVsc2lmIChleGlz
dHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17IkZpbGxMYXllclBy
b3BlcnR5In0pIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5lcmF0ZUZpbGxMYXllclByb3Bl
cnR5SW5pdGlhbFZhbHVlU2V0dGVyKCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsKQEAgLTc1Myw3
ICs3NTMsNyBAQCBzdWIgZ2VuZXJhdGVJbmhlcml0VmFsdWVTZXR0ZXIgewogICAgICRzZXR0ZXJD
b250ZW50IC49IGdlbmVyYXRlQW5pbWF0aW9uUHJvcGVydHlJbmhlcml0VmFsdWVTZXR0ZXIoJG5h
bWUsICRpbmRlbnQgLiAiICAgICIpOwogICAgICRkaWRDYWxsU2V0VmFsdWUgPSAxOwogICB9IGVs
c2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17IkZv
bnRQcm9wZXJ0eSJ9KSB7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0
aW9uKCk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGF1dG8gZm9u
dERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTtcbiI7CiAgICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgZm9udERlc2NyaXB0aW9uLiIgLiAkc2V0
dGVyIC4gIihzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLiIgLiAkZ2V0dGVy
IC4gIigpKTtcbiI7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgc3R5bGVS
ZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTtcbiI7CiAgICAgJGRp
ZENhbGxTZXRWYWx1ZSA9IDE7CkBAIC04MDcsNyArODA3LDcgQEAgc3ViIGdlbmVyYXRlVmFsdWVT
ZXR0ZXIgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRlQW5pbWF0aW9uUHJvcGVydHlW
YWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAgIik7CiAgICAgJGRpZENhbGxTZXRWYWx1
ZSA9IDE7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRp
b25zeyRuYW1lfXsiRm9udFByb3BlcnR5In0pIHsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5k
ZW50IC4gIiAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZl
ci5mb250RGVzY3JpcHRpb24oKTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAu
ICIgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlv
bigpO1xuIjsKICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBmb250RGVzY3Jp
cHRpb24uIiAuICRzZXR0ZXIgLiAiKCIgLiAkY29udmVydGVkVmFsdWUgLiAiKTtcbiI7CiAgICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTtcbiI7CiAgICAgJGRpZENhbGxTZXRWYWx1ZSA9IDE7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDE4OTIwNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxMDEsNyArMjEwMSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRG
b250KGMKICAgICBpZiAoUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUgPSBjYW52YXMoKS0+Y29t
cHV0ZWRTdHlsZSgpKQogICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGNvbXB1
dGVkU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKICAgICBlbHNlIHsKLSAgICAgICAgRm9udERl
c2NyaXB0aW9uIGRlZmF1bHRGb250RGVzY3JpcHRpb247CisgICAgICAgIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gZGVmYXVsdEZvbnREZXNjcmlwdGlvbjsKICAgICAgICAgZGVmYXVsdEZvbnREZXNj
cmlwdGlvbi5zZXRPbmVGYW1pbHkoZGVmYXVsdEZvbnRGYW1pbHkpOwogICAgICAgICBkZWZhdWx0
Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoZGVmYXVsdEZvbnRTaXplKTsKICAgICAg
ICAgZGVmYXVsdEZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZGVmYXVsdEZvbnRTaXpl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAkocmV2aXNpb24gMTg5MjA2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQs
NyBAQCBwdWJsaWM6CiAgICAgLy8gTWV0aG9kcyB1c2VkIHRvIGFkanVzdCB0aGUgUmVuZGVyU3R5
bGVzIG9mIGNvbnRyb2xzLgogICAgIAogICAgIC8vIFRoZSBmb250IGRlc2NyaXB0aW9uIHJlc3Vs
dCBzaG91bGQgaGF2ZSBhIHpvb21lZCBmb250IHNpemUuCi0gICAgdmlydHVhbCBPcHRpb25hbDxG
b250RGVzY3JpcHRpb24+IGNvbnRyb2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2Fk
ZSYsIGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25zdCB7IHJldHVybiBOdWxsb3B0OyB9CisgICAg
dmlydHVhbCBPcHRpb25hbDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBjb250cm9sRm9udChDb250
cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3Qg
eyByZXR1cm4gTnVsbG9wdDsgfQogICAgIAogICAgIC8vIFRoZSBzaXplIGhlcmUgaXMgaW4gem9v
bWVkIGNvb3JkaW5hdGVzIGFscmVhZHkuIElmIGEgbmV3IHNpemUgaXMgcmV0dXJuZWQsIGl0IGFs
c28gbmVlZHMgdG8gYmUgaW4gem9vbWVkIGNvb3JkaW5hdGVzLgogICAgIHZpcnR1YWwgTGVuZ3Ro
U2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBM
ZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCAvKnpvb21GYWN0b3IqLykgY29uc3QgeyByZXR1
cm4gem9vbWVkU2l6ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuY3BwCShyZXZpc2lvbiAxODkyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzksNyAr
NTM5LDcgQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogfQogCiAjaWYgIVBMQVRGT1JN
KENPQ09BKQotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJikKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYpCiB7CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuaAkocmV2aXNpb24gMTg5MjA2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNyBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBjaGVja2luZ0FsdGVybmF0
ZU5hbWUgPSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
UmVmPEZvbnQ+IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwot
ICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAg
ICBSZWZQdHI8Rm9udD4gc2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHkpOwogCiAgICAgdm9pZCBhZGRDbGllbnQoRm9udFNlbGVjdG9y
Kik7CiAgICAgdm9pZCByZW1vdmVDbGllbnQoRm9udFNlbGVjdG9yKik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCShyZXZpc2lv
biAxODkyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFVu
aWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFJlZjxGb250Q2FzY2FkZUZv
bnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUmVm
UHRyPEZvbnRTZWxlY3Rvcj4mJik7CitzdGF0aWMgUmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJp
ZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgUmVmUHRy
PEZvbnRTZWxlY3Rvcj4mJik7CiAKIGNvbnN0IHVpbnQ4X3QgRm9udENhc2NhZGU6OnNfcm91bmRp
bmdIYWNrQ2hhcmFjdGVyVGFibGVbMjU2XSA9IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAxIC8qXHQqLywgMSAvKlxuKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCkBAIC0xMDcsNyArMTA3LDcgQEAgRm9udENh
c2NhZGU6OkZvbnRDYXNjYWRlKCkKIHsKIH0KIAotRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRT
cGFjaW5nKQorRm9udENhc2NhZGU6OkZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mIGZkLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZykKICAgICA6
IG1fZm9udERlc2NyaXB0aW9uKGZkKQogICAgICwgbV93ZWFrUHRyRmFjdG9yeSh0aGlzKQogICAg
ICwgbV9sZXR0ZXJTcGFjaW5nKGxldHRlclNwYWNpbmcpCkBAIC0yMzAsNyArMjMwLDcgQEAgdm9p
ZCBjbGVhcldpZHRoQ2FjaGVzKCkKICAgICAgICAgdmFsdWUtPmZvbnRzLmdldCgpLndpZHRoQ2Fj
aGUoKS5jbGVhcigpOwogfQogCi1zdGF0aWMgRm9udENhc2NhZGVDYWNoZUtleSBtYWtlRm9udENh
c2NhZGVDYWNoZUtleShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250U2Vs
ZWN0b3IqIGZvbnRTZWxlY3RvcikKK3N0YXRpYyBGb250Q2FzY2FkZUNhY2hlS2V5IG1ha2VGb250
Q2FzY2FkZUNhY2hlS2V5KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
LCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKIHsKICAgICBGb250Q2FzY2FkZUNhY2hlS2V5
IGtleTsKICAgICBrZXkuZm9udERlc2NyaXB0aW9uS2V5ID0gRm9udERlc2NyaXB0aW9uS2V5KGRl
c2NyaXB0aW9uKTsKQEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tG
b250cygpCiAgICAgICAgIGVudHJ5LT5mb250cy0+cHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsKIH0K
IAotc3RhdGljIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFJlZlB0cjxGb250U2VsZWN0
b3I+JiYgZm9udFNlbGVjdG9yKQorc3RhdGljIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2
ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZvbnRTZWxlY3RvcikKIHsKICAgICBhdXRv
IGtleSA9IG1ha2VGb250Q2FzY2FkZUNhY2hlS2V5KGZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVj
dG9yLmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5oCShyZXZpc2lvbiAxODkyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1
LDcgQEAgcHVibGljOgogY2xhc3MgRm9udENhc2NhZGUgewogcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIEZvbnRDYXNjYWRlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNp
bmcpOworICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZyk7CiAgICAg
Ly8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvbmx5IHVzZWQgaWYgdGhlIHBsYXRmb3JtIHdhbnRzIHRv
IHN0YXJ0IHdpdGggYSBuYXRpdmUgZm9udC4KICAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2Fk
ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgRm9udFNtb290aGluZ01vZGUgPSBBdXRvU21vb3Ro
aW5nKTsKIApAQCAtMTI1LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIG9wZXJhdG9yPT0oY29uc3QgRm9udENhc2NhZGUmIG90aGVyKSBjb25zdDsKICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgRm9udENhc2NhZGUmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsgfQogCi0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbjsgfQorICAgIGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udERlc2NyaXB0aW9uOyB9CiAKICAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4g
Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsgfQogICAgIGZsb2F0IHNpemUo
KSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsgfQpAQCAt
MzE4LDI0ICszMTgsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIHN3aXRjaCAo
bV9mb250RGVzY3JpcHRpb24ua2VybmluZygpKSB7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0
aW9uOjpOb25lS2VybmluZzoKKyAgICAgICAgY2FzZSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpO
b25lS2VybmluZzoKICAgICAgICAgICAgIGZlYXR1cmVzICY9IH5LZXJuaW5nOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb3JtYWxLZXJuaW5nOgor
ICAgICAgICBjYXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbEtlcm5pbmc6CiAgICAg
ICAgICAgICBmZWF0dXJlcyB8PSBLZXJuaW5nOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpBdXRvS2VybmluZzoKKyAgICAgICAgY2FzZSBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpBdXRvS2VybmluZzoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKICAgICAgICAgc3dpdGNoIChtX2ZvbnREZXNjcmlwdGlvbi5jb21tb25MaWdhdHVyZXNT
dGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJl
c1N0YXRlOgorICAgICAgICBjYXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkRpc2FibGVkTGln
YXR1cmVzU3RhdGU6CiAgICAgICAgICAgICBmZWF0dXJlcyAmPSB+TGlnYXR1cmVzOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1
cmVzU3RhdGU6CisgICAgICAgIGNhc2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6RW5hYmxlZExp
Z2F0dXJlc1N0YXRlOgogICAgICAgICAgICAgZmVhdHVyZXMgfD0gTGlnYXR1cmVzOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVy
ZXNTdGF0ZToKKyAgICAgICAgY2FzZSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdh
dHVyZXNTdGF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTM0NCw3ICsz
NDQsNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIFR5cGVzZXR0aW5nRmVhdHVyZXMgc19kZWZh
dWx0VHlwZXNldHRpbmdGZWF0dXJlczsKIAotICAgIEZvbnREZXNjcmlwdGlvbiBtX2ZvbnREZXNj
cmlwdGlvbjsKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOwog
ICAgIG11dGFibGUgUmVmUHRyPEZvbnRDYXNjYWRlRm9udHM+IG1fZm9udHM7CiAgICAgV2Vha1B0
ckZhY3Rvcnk8Rm9udENhc2NhZGU+IG1fd2Vha1B0ckZhY3Rvcnk7CiAgICAgZmxvYXQgbV9sZXR0
ZXJTcGFjaW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVGb250cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAJKHJldmlzaW9uIDE4OTUzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgRm9udENhc2NhZGVGb250czo6fkZvbnRDYXNjYWRlRm9u
dHMoKQogewogfQogCi12b2lkIEZvbnRDYXNjYWRlRm9udHM6OmRldGVybWluZVBpdGNoKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit2b2lkIEZvbnRDYXNjYWRlRm9udHM6OmRl
dGVybWluZVBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQog
ewogICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNj
cmlwdGlvbiwgMCk7CiAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gcHJpbWFyeVJhbmdlcy5zaXpl
KCk7CkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0xvYWRpbmdD
dXN0b21GbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIEZvbnRSYW5nZXMgcmVhbGl6
ZU5leHRGYWxsYmFjayhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25l
ZCYgaW5kZXgsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQorc3RhdGljIEZvbnRSYW5nZXMg
cmVhbGl6ZU5leHRGYWxsYmFjayhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbiwgdW5zaWduZWQmIGluZGV4LCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKIHsKICAg
ICBBU1NFUlQoaW5kZXggPCBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpKTsKIApAQCAtMTU2LDEw
ICsxNTYsMTQgQEAgc3RhdGljIEZvbnRSYW5nZXMgcmVhbGl6ZU5leHRGYWxsYmFjayhjbwogICAg
IC8vIFdlIGRpZG4ndCBmaW5kIGEgZm9udC4gVHJ5IHRvIGZpbmQgYSBzaW1pbGFyIGZvbnQgdXNp
bmcgb3VyIG93biBzcGVjaWZpYyBrbm93bGVkZ2UgYWJvdXQgb3VyIHBsYXRmb3JtLgogICAgIC8v
IEZvciBleGFtcGxlIG9uIE9TIFgsIHdlIGtub3cgdG8gbWFwIGFueSBmYW1pbGllcyBjb250YWlu
aW5nIHRoZSB3b3JkcyBBcmFiaWMsIFBhc2h0bywgb3IgVXJkdSB0byB0aGUKICAgICAvLyBHZWV6
YSBQcm8gZm9udC4KLSAgICByZXR1cm4gRm9udFJhbmdlcyhmb250Q2FjaGUuc2ltaWxhckZvbnQo
ZGVzY3JpcHRpb24pKTsKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGRlc2NyaXB0aW9uLmZhbWls
aWVzKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gZm9udCA9IGZvbnRDYWNoZS5zaW1pbGFyRm9udChk
ZXNjcmlwdGlvbiwgZmFtaWx5KSkKKyAgICAgICAgICAgIHJldHVybiBGb250UmFuZ2VzKFdURjo6
bW92ZShmb250KSk7CisgICAgfQorICAgIHJldHVybiB7IH07CiB9CiAKLWNvbnN0IEZvbnRSYW5n
ZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4KQorY29uc3QgRm9udFJhbmdl
cyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4KQogewogICAgIGlm
IChpbmRleCA8IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5zaXplKCkpCiAgICAgICAgIHJldHVy
biBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNbaW5kZXhdOwpAQCAtMzEyLDcgKzMxNiw3IEBAIHN0
YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmEKICAgICByZXR1cm4gZGF0YTsK
IH0KIAotR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxi
YWNrKFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZh
cmlhbnQgdmFyaWFudCkKK0dseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JT
eXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQogewogICAgIC8vIFN5c3RlbSBmYWxsYmFj
ayBpcyBjaGFyYWN0ZXItZGVwZW5kZW50LgogICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSByZWFs
aXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7CkBAIC0zNDksNyArMzUzLDcgQEAg
R2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvcgogICAgIHJldHVybiBmYWxs
YmFja0dseXBoRGF0YTsKIH0KIAotR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0
YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
LCBGb250VmFyaWFudCB2YXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KQorR2x5cGhEYXRh
IEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjLCBjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwg
dW5zaWduZWQgZmFsbGJhY2tJbmRleCkKIHsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBh
dXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZh
bGxiYWNrSW5kZXgrKyk7CkBAIC0zNzAsNyArMzc0LDcgQEAgR2x5cGhEYXRhIEZvbnRDYXNjYWRl
Rm9udHM6OmdseXBoRGF0YUZvcgogICAgIHJldHVybiBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFj
ayhjLCBkZXNjcmlwdGlvbiwgdmFyaWFudCk7CiB9CiAKLUdseXBoRGF0YSBGb250Q2FzY2FkZUZv
bnRzOjpnbHlwaERhdGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbikKK0dseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERh
dGFGb3JOb3JtYWxWYXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBmYWxsYmFja0luZGV4ID0gMDsg
OyArK2ZhbGxiYWNrSW5kZXgpIHsKICAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IHJlYWxpemVG
YWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBmYWxsYmFja0luZGV4KTsKQEAgLTQyMSw3ICs0
MjUsNyBAQCBzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZvCiAgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8R2x5cGhQYWdlKj4oZm9udC0+Z2x5cGhQYWdlKHBhZ2VOdW1iZXIpKTsK
IH0KIAotR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50
IHZhcmlhbnQpCitHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IEZvbnRWYXJpYW50IHZhcmlhbnQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBBU1NFUlQodmFyaWFudCAhPSBBdXRvVmFyaWFudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCShyZXZpc2lvbiAx
ODk1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZv
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBGb250RGVzY3JpcHRpb247CitjbGFzcyBGb250Q2FzY2FkZURlc2NyaXB0
aW9uOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3RvcjsKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDsKQEAgLTUyLDEwICs1MiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzRm9yUGxhdGZvcm1Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0ZvclBsYXRmb3JtRm9udDsg
fQogCi0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBjb25zdCBG
b250RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZv
ckNoYXJhY3RlcihVQ2hhcjMyLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZh
cmlhbnQpOwogCi0gICAgYm9vbCBpc0ZpeGVkUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJik7
Ci0gICAgdm9pZCBkZXRlcm1pbmVQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBi
b29sIGlzRml4ZWRQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJik7CisgICAgdm9p
ZCBkZXRlcm1pbmVQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJik7CiAKICAgICBi
b29sIGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3Q7CiAKQEAgLTY3LDggKzY3LDggQEAgcHVi
bGljOgogICAgIFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSB7IHJldHVybiBtX3dpZHRoQ2FjaGU7
IH0KICAgICBjb25zdCBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgY29uc3QgeyByZXR1cm4gbV93
aWR0aENhY2hlOyB9CiAKLSAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXpl
RmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFj
a0luZGV4KTsKKyAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdlcyYgcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVk
IGZhbGxiYWNrSW5kZXgpOwogCiAgICAgdm9pZCBwcnVuZVN5c3RlbUZhbGxiYWNrcygpOwogCkBA
IC03Niw5ICs3Niw5IEBAIHByaXZhdGU6CiAgICAgRm9udENhc2NhZGVGb250cyhSZWZQdHI8Rm9u
dFNlbGVjdG9yPiYmKTsKICAgICBGb250Q2FzY2FkZUZvbnRzKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmKTsKIAotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMy
LCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCk7Ci0gICAgR2x5cGhEYXRhIGds
eXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJik7
Ci0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOworICAgIEds
eXBoRGF0YSBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyLCBjb25zdCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQpOworICAgIEdseXBoRGF0YSBnbHlwaERhdGFG
b3JOb3JtYWxWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKTsK
KyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOwog
CiAgICAgVmVjdG9yPEZvbnRSYW5nZXMsIDE+IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlczsKICAg
ICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggeyAwIH07CkBAIC0xMTUsMTQg
KzExNSwxNCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0ZvclBsYXRmb3JtRm9udCB7IGZhbHNl
IH07CiB9OwogCi1pbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2goY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK2lubGluZSBib29sIEZvbnRDYXNjYWRl
Rm9udHM6OmlzRml4ZWRQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbikKIHsKICAgICBpZiAobV9waXRjaCA9PSBVbmtub3duUGl0Y2gpCiAgICAgICAgIGRldGVy
bWluZVBpdGNoKGRlc2NyaXB0aW9uKTsKICAgICByZXR1cm4gbV9waXRjaCA9PSBGaXhlZFBpdGNo
OwogfTsKIAotaW5saW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OnByaW1hcnlGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitpbmxpbmUgY29uc3QgRm9udCYg
Rm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAo
IW1fY2FjaGVkUHJpbWFyeUZvbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAkocmV2aXNpb24gMTg5MjA2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXN0cnVjdCBTYW1lU2l6ZUFzRm9udERlc2NyaXB0aW9uIHsKK3N0cnVjdCBTYW1lU2l6ZUFzRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiB7CiAgICAgdm9pZCogcG9pbnRlcnNbM107CiAgICAgZmxvYXQg
c2l6ZXNbMl07CiAgICAgLy8gRklYTUU6IE1ha2UgdGhlbSBmaXQgaW50byBvbmUgd29yZC4KQEAg
LTQyLDcgKzQyLDcgQEAgc3RydWN0IFNhbWVTaXplQXNGb250RGVzY3JpcHRpb24gewogICAgIHVp
bnQzMl90IGJpdGZpZWxkczIgOiA4OwogfTsKIAotQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEZvbnRE
ZXNjcmlwdGlvbikgPT0gc2l6ZW9mKFNhbWVTaXplQXNGb250RGVzY3JpcHRpb24pLCBGb250RGVz
Y3JpcHRpb25fc2hvdWxkX3N0YXlfc21hbGwpOworQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24pID09IHNpemVvZihTYW1lU2l6ZUFzRm9udENhc2NhZGVEZXNjcmlw
dGlvbiksIEZvbnRDYXNjYWRlRGVzY3JpcHRpb25fc2hvdWxkX3N0YXlfc21hbGwpOwogCiBGb250
RGVzY3JpcHRpb246OkZvbnREZXNjcmlwdGlvbigpCiAgICAgOiBtX29yaWVudGF0aW9uKEhvcml6
b250YWwpCkBAIC01MCw4MiArNTAsODYgQEAgRm9udERlc2NyaXB0aW9uOjpGb250RGVzY3JpcHRp
b24oKQogICAgICwgbV93aWR0aFZhcmlhbnQoUmVndWxhcldpZHRoKQogICAgICwgbV9pdGFsaWMo
Rm9udEl0YWxpY09mZikKICAgICAsIG1fc21hbGxDYXBzKEZvbnRTbWFsbENhcHNPZmYpCi0gICAg
LCBtX2lzQWJzb2x1dGVTaXplKGZhbHNlKQogICAgICwgbV93ZWlnaHQoRm9udFdlaWdodE5vcm1h
bCkKICAgICAsIG1fcmVuZGVyaW5nTW9kZShOb3JtYWxSZW5kZXJpbmdNb2RlKQorICAgICwgbV90
ZXh0UmVuZGVyaW5nKEF1dG9UZXh0UmVuZGVyaW5nKQorICAgICwgbV9zY3JpcHQobG9jYWxlVG9T
Y3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX2xvY2FsZSkpCisgICAgLCBtX2ZvbnRTeW50aGVz
aXMoRm9udFN5bnRoZXNpc1dlaWdodCB8IEZvbnRTeW50aGVzaXNTdHlsZSkKK3sKK30KKwordm9p
ZCBGb250RGVzY3JpcHRpb246OnNldExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkK
K3sKKyAgICBtX2xvY2FsZSA9IGxvY2FsZTsKKyAgICBtX3NjcmlwdCA9IGxvY2FsZVRvU2NyaXB0
Q29kZUZvckZvbnRTZWxlY3Rpb24obV9sb2NhbGUpOworfQorCitGb250VHJhaXRzTWFzayBGb250
RGVzY3JpcHRpb246OnRyYWl0c01hc2soKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxGb250VHJhaXRzTWFzaz4oKG1faXRhbGljID8gRm9udFN0eWxlSXRhbGljTWFzayA6IEZvbnRT
dHlsZU5vcm1hbE1hc2spCisgICAgICAgIHwgKG1fc21hbGxDYXBzID8gRm9udFZhcmlhbnRTbWFs
bENhcHNNYXNrIDogRm9udFZhcmlhbnROb3JtYWxNYXNrKQorICAgICAgICB8IChGb250V2VpZ2h0
MTAwTWFzayA8PCAobV93ZWlnaHQgLSBGb250V2VpZ2h0MTAwKSkpOworICAgIAorfQorCitGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpGb250Q2FzY2FkZURlc2NyaXB0aW9uKCkKKyAgICA6IG1faXNB
YnNvbHV0ZVNpemUoZmFsc2UpCiAgICAgLCBtX2tlcm5pbmcoQXV0b0tlcm5pbmcpCiAgICAgLCBt
X2NvbW1vbkxpZ2F0dXJlc1N0YXRlKE5vcm1hbExpZ2F0dXJlc1N0YXRlKQogICAgICwgbV9kaXNj
cmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoTm9ybWFsTGlnYXR1cmVzU3RhdGUpCiAgICAgLCBtX2hp
c3RvcmljYWxMaWdhdHVyZXNTdGF0ZShOb3JtYWxMaWdhdHVyZXNTdGF0ZSkKICAgICAsIG1fa2V5
d29yZFNpemUoMCkKICAgICAsIG1fZm9udFNtb290aGluZyhBdXRvU21vb3RoaW5nKQotICAgICwg
bV90ZXh0UmVuZGVyaW5nKEF1dG9UZXh0UmVuZGVyaW5nKQogICAgICwgbV9pc1NwZWNpZmllZEZv
bnQoZmFsc2UpCi0gICAgLCBtX3NjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0
aW9uKG1fbG9jYWxlKSkKLSAgICAsIG1fZm9udFN5bnRoZXNpcyhpbml0aWFsRm9udFN5bnRoZXNp
cygpKQogewogfQogCi1Gb250V2VpZ2h0IEZvbnREZXNjcmlwdGlvbjo6bGlnaHRlcldlaWdodCh2
b2lkKSBjb25zdAorRm9udFdlaWdodCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2Vp
Z2h0KHZvaWQpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChtX3dlaWdodCkgewotICAgICAgICBjYXNl
IEZvbnRXZWlnaHQxMDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDIwMDoKLSAgICAgICAgY2Fz
ZSBGb250V2VpZ2h0MzAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ0MDA6Ci0gICAgICAgIGNh
c2UgRm9udFdlaWdodDUwMDoKLSAgICAgICAgICAgIHJldHVybiBGb250V2VpZ2h0MTAwOwotCi0g
ICAgICAgIGNhc2UgRm9udFdlaWdodDYwMDoKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0NzAwOgot
ICAgICAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ0MDA7Ci0KLSAgICAgICAgY2FzZSBGb250V2Vp
Z2h0ODAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ5MDA6Ci0gICAgICAgICAgICByZXR1cm4g
Rm9udFdlaWdodDcwMDsKKyAgICBzd2l0Y2ggKHdlaWdodCgpKSB7CisgICAgY2FzZSBGb250V2Vp
Z2h0MTAwOgorICAgIGNhc2UgRm9udFdlaWdodDIwMDoKKyAgICBjYXNlIEZvbnRXZWlnaHQzMDA6
CisgICAgY2FzZSBGb250V2VpZ2h0NDAwOgorICAgIGNhc2UgRm9udFdlaWdodDUwMDoKKyAgICAg
ICAgcmV0dXJuIEZvbnRXZWlnaHQxMDA7CisKKyAgICBjYXNlIEZvbnRXZWlnaHQ2MDA6CisgICAg
Y2FzZSBGb250V2VpZ2h0NzAwOgorICAgICAgICByZXR1cm4gRm9udFdlaWdodDQwMDsKKworICAg
IGNhc2UgRm9udFdlaWdodDgwMDoKKyAgICBjYXNlIEZvbnRXZWlnaHQ5MDA6CisgICAgICAgIHJl
dHVybiBGb250V2VpZ2h0NzAwOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICByZXR1cm4gRm9udFdlaWdodE5vcm1hbDsKIH0KIAotRm9udFdlaWdodCBGb250RGVzY3JpcHRp
b246OmJvbGRlcldlaWdodCh2b2lkKSBjb25zdAorRm9udFdlaWdodCBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uOjpib2xkZXJXZWlnaHQodm9pZCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKG1fd2VpZ2h0
KSB7Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDEwMDoKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0
MjAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQzMDA6Ci0gICAgICAgICAgICByZXR1cm4gRm9u
dFdlaWdodDQwMDsKLQotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ0MDA6Ci0gICAgICAgIGNhc2Ug
Rm9udFdlaWdodDUwMDoKLSAgICAgICAgICAgIHJldHVybiBGb250V2VpZ2h0NzAwOwotCi0gICAg
ICAgIGNhc2UgRm9udFdlaWdodDYwMDoKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0NzAwOgotICAg
ICAgICBjYXNlIEZvbnRXZWlnaHQ4MDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDkwMDoKLSAg
ICAgICAgICAgIHJldHVybiBGb250V2VpZ2h0OTAwOworICAgIHN3aXRjaCAod2VpZ2h0KCkpIHsK
KyAgICBjYXNlIEZvbnRXZWlnaHQxMDA6CisgICAgY2FzZSBGb250V2VpZ2h0MjAwOgorICAgIGNh
c2UgRm9udFdlaWdodDMwMDoKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ0MDA7CisKKyAgICBj
YXNlIEZvbnRXZWlnaHQ0MDA6CisgICAgY2FzZSBGb250V2VpZ2h0NTAwOgorICAgICAgICByZXR1
cm4gRm9udFdlaWdodDcwMDsKKworICAgIGNhc2UgRm9udFdlaWdodDYwMDoKKyAgICBjYXNlIEZv
bnRXZWlnaHQ3MDA6CisgICAgY2FzZSBGb250V2VpZ2h0ODAwOgorICAgIGNhc2UgRm9udFdlaWdo
dDkwMDoKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ5MDA7CiAgICAgfQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBGb250V2VpZ2h0Tm9ybWFsOwogfQogCi1Gb250VHJh
aXRzTWFzayBGb250RGVzY3JpcHRpb246OnRyYWl0c01hc2soKSBjb25zdAotewotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGb250VHJhaXRzTWFzaz4oKG1faXRhbGljID8gRm9udFN0eWxlSXRhbGlj
TWFzayA6IEZvbnRTdHlsZU5vcm1hbE1hc2spCi0gICAgICAgICAgICB8IChtX3NtYWxsQ2FwcyA/
IEZvbnRWYXJpYW50U21hbGxDYXBzTWFzayA6IEZvbnRWYXJpYW50Tm9ybWFsTWFzaykKLSAgICAg
ICAgICAgIHwgKEZvbnRXZWlnaHQxMDBNYXNrIDw8IChtX3dlaWdodCAtIEZvbnRXZWlnaHQxMDAp
KSk7Ci0gICAgCi19Ci0KLXZvaWQgRm9udERlc2NyaXB0aW9uOjpzZXRMb2NhbGUoY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbGUpCi17Ci0gICAgbV9sb2NhbGUgPSBsb2NhbGU7Ci0gICAgbV9zY3Jp
cHQgPSBsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKG1fbG9jYWxlKTsKLX0KLQog
I2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotYm9vbCBGb250RGVzY3JpcHRpb246OmZh
bWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250RGVzY3JpcHRpb24mIG90aGVy
KSBjb25zdAorYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbGllc0VxdWFsRm9yVGV4
dEF1dG9TaXppbmcoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0CiB7
CiAgICAgdW5zaWduZWQgdGhpc0ZhbWlseUNvdW50ID0gZmFtaWx5Q291bnQoKTsKICAgICB1bnNp
Z25lZCBvdGhlckZhbWlseUNvdW50ID0gb3RoZXIuZmFtaWx5Q291bnQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oCShy
ZXZpc2lvbiAxODkyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
RGVzY3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTQgKzQwLDg5IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXRGb250RmFtaWx5TmFtZXM7CiAKIGNsYXNzIEZvbnREZXNjcmlwdGlvbiB7
CiBwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udERlc2NyaXB0aW9uKCk7CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOyB9CisKKyAgICBmbG9hdCBjb21wdXRlZFNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2NvbXB1dGVkU2l6ZTsgfQorICAgIEZvbnRJdGFsaWMgaXRhbGljKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udEl0YWxpYz4obV9pdGFsaWMpOyB9CisgICAgaW50IGNvbXB1
dGVkUGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gaW50KG1fY29tcHV0ZWRTaXplICsgMC41Zik7
IH0KKyAgICBGb250U21hbGxDYXBzIHNtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEZvbnRTbWFsbENhcHM+KG1fc21hbGxDYXBzKTsgfQorICAgIEZvbnRXZWlnaHQgd2VpZ2h0
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFdlaWdodD4obV93ZWlnaHQpOyB9Cisg
ICAgRm9udFdlaWdodCBsaWdodGVyV2VpZ2h0KCkgY29uc3Q7CisgICAgRm9udFdlaWdodCBib2xk
ZXJXZWlnaHQoKSBjb25zdDsKKyAgICBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFJlbmRlcmluZ01vZGU+KG1fcmVuZGVyaW5n
TW9kZSk7IH0KKyAgICBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRleHRSZW5kZXJpbmdNb2RlPihtX3RleHRSZW5kZXJpbmcp
OyB9CisgICAgVVNjcmlwdENvZGUgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VVNjcmlwdENvZGU+KG1fc2NyaXB0KTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxl
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbGU7IH0KKworICAgIEZvbnRPcmllbnRhdGlvbiBvcmll
bnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRPcmllbnRhdGlvbj4obV9v
cmllbnRhdGlvbik7IH0KKyAgICBOb25DSktHbHlwaE9yaWVudGF0aW9uIG5vbkNKS0dseXBoT3Jp
ZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOb25DSktHbHlwaE9yaWVudGF0
aW9uPihtX25vbkNKS0dseXBoT3JpZW50YXRpb24pOyB9CisgICAgRm9udFdpZHRoVmFyaWFudCB3
aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250V2lkdGhWYXJpYW50
PihtX3dpZHRoVmFyaWFudCk7IH0KKyAgICBGb250RmVhdHVyZVNldHRpbmdzKiBmZWF0dXJlU2V0
dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVTZXR0aW5ncy5nZXQoKTsgfQorICAgIEZv
bnRTeW50aGVzaXMgZm9udFN5bnRoZXNpcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRTeW50aGVzaXM+KG1fZm9udFN5bnRoZXNpcyk7IH0KKworICAgIHZvaWQgc2V0Q29tcHV0ZWRT
aXplKGZsb2F0IHMpIHsgbV9jb21wdXRlZFNpemUgPSBjbGFtcFRvRmxvYXQocyk7IH0KKyAgICB2
b2lkIHNldEl0YWxpYyhGb250SXRhbGljIGkpIHsgbV9pdGFsaWMgPSBpOyB9CisgICAgdm9pZCBz
ZXRJc0l0YWxpYyhib29sIGkpIHsgc2V0SXRhbGljKGkgPyBGb250SXRhbGljT24gOiBGb250SXRh
bGljT2ZmKTsgfQorICAgIHZvaWQgc2V0U21hbGxDYXBzKEZvbnRTbWFsbENhcHMgYykgeyBtX3Nt
YWxsQ2FwcyA9IGM7IH0KKyAgICB2b2lkIHNldElzU21hbGxDYXBzKGJvb2wgYykgeyBzZXRTbWFs
bENhcHMoYyA/IEZvbnRTbWFsbENhcHNPbiA6IEZvbnRTbWFsbENhcHNPZmYpOyB9CisgICAgdm9p
ZCBzZXRXZWlnaHQoRm9udFdlaWdodCB3KSB7IG1fd2VpZ2h0ID0gdzsgfQorICAgIHZvaWQgc2V0
UmVuZGVyaW5nTW9kZShGb250UmVuZGVyaW5nTW9kZSBtb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9
IG1vZGU7IH0KKyAgICB2b2lkIHNldFRleHRSZW5kZXJpbmdNb2RlKFRleHRSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZykgeyBtX3RleHRSZW5kZXJpbmcgPSByZW5kZXJpbmc7IH0KKyAgICB2b2lkIHNl
dE9yaWVudGF0aW9uKEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9u
ID0gb3JpZW50YXRpb247IH0KKyAgICB2b2lkIHNldE5vbkNKS0dseXBoT3JpZW50YXRpb24oTm9u
Q0pLR2x5cGhPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX25vbkNKS0dseXBoT3JpZW50YXRp
b24gPSBvcmllbnRhdGlvbjsgfQorICAgIHZvaWQgc2V0V2lkdGhWYXJpYW50KEZvbnRXaWR0aFZh
cmlhbnQgd2lkdGhWYXJpYW50KSB7IG1fd2lkdGhWYXJpYW50ID0gd2lkdGhWYXJpYW50OyB9IC8v
IE1ha2Ugc3VyZSBuZXcgY2FsbGVycyBvZiB0aGlzIHN5bmMgd2l0aCBGb250UGxhdGZvcm1EYXRh
Ojppc0ZvclRleHRDb21iaW5lKCkhCisgICAgdm9pZCBzZXRMb2NhbGUoY29uc3QgQXRvbWljU3Ry
aW5nJik7CisgICAgdm9pZCBzZXRGZWF0dXJlU2V0dGluZ3MoUGFzc1JlZlB0cjxGb250RmVhdHVy
ZVNldHRpbmdzPiBzZXR0aW5ncykgeyBtX2ZlYXR1cmVTZXR0aW5ncyA9IHNldHRpbmdzOyB9Cisg
ICAgdm9pZCBzZXRGb250U3ludGhlc2lzKEZvbnRTeW50aGVzaXMgZm9udFN5bnRoZXNpcykgeyBt
X2ZvbnRTeW50aGVzaXMgPSBmb250U3ludGhlc2lzOyB9CisKKyAgICBGb250VHJhaXRzTWFzayB0
cmFpdHNNYXNrKCkgY29uc3Q7Citwcml2YXRlOgorICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRp
bmdzPiBtX2ZlYXR1cmVTZXR0aW5nczsKKyAgICBBdG9taWNTdHJpbmcgbV9sb2NhbGU7CisKKyAg
ICBmbG9hdCBtX2NvbXB1dGVkU2l6ZSB7IDAgfTsgLy8gQ29tcHV0ZWQgc2l6ZSBhZGp1c3RlZCBm
b3IgdGhlIG1pbmltdW0gZm9udCBzaXplIGFuZCB0aGUgem9vbSBmYWN0b3IuCisgICAgdW5zaWdu
ZWQgbV9vcmllbnRhdGlvbiA6IDE7IC8vIEZvbnRPcmllbnRhdGlvbiAtIFdoZXRoZXIgdGhlIGZv
bnQgaXMgcmVuZGVyaW5nIG9uIGEgaG9yaXpvbnRhbCBsaW5lIG9yIGEgdmVydGljYWwgbGluZS4K
KyAgICB1bnNpZ25lZCBtX25vbkNKS0dseXBoT3JpZW50YXRpb24gOiAxOyAvLyBOb25DSktHbHlw
aE9yaWVudGF0aW9uIC0gT25seSB1c2VkIGJ5IHZlcnRpY2FsIHRleHQuIERldGVybWluZXMgdGhl
IGRlZmF1bHQgb3JpZW50YXRpb24gZm9yIG5vbi1pZGVvZ3JhcGggZ2x5cGhzLgorICAgIHVuc2ln
bmVkIG1fd2lkdGhWYXJpYW50IDogMjsgLy8gRm9udFdpZHRoVmFyaWFudAorICAgIHVuc2lnbmVk
IG1faXRhbGljIDogMTsgLy8gRm9udEl0YWxpYworICAgIHVuc2lnbmVkIG1fc21hbGxDYXBzIDog
MTsgLy8gRm9udFNtYWxsQ2FwcworICAgIHVuc2lnbmVkIG1fd2VpZ2h0IDogODsgLy8gRm9udFdl
aWdodAorICAgIHVuc2lnbmVkIG1fcmVuZGVyaW5nTW9kZSA6IDE7IC8vIFVzZWQgdG8gc3dpdGNo
IGJldHdlZW4gQ0cgYW5kIEdESSB0ZXh0IG9uIFdpbmRvd3MuCisgICAgdW5zaWduZWQgbV90ZXh0
UmVuZGVyaW5nIDogMjsgLy8gVGV4dFJlbmRlcmluZ01vZGUKKyAgICB1bnNpZ25lZCBtX3Njcmlw
dCA6IDc7IC8vIFVzZWQgdG8gaGVscCBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgZm9udCBmb3IgZ2Vu
ZXJpYyBmb250IGZhbWlsaWVzLgorICAgIHVuc2lnbmVkIG1fZm9udFN5bnRoZXNpcyA6IDI7IC8v
IEZvbnRTeW50aGVzaXMgdHlwZQorfTsKKworaW5saW5lIGJvb2wgRm9udERlc2NyaXB0aW9uOjpv
cGVyYXRvcj09KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fY29tcHV0ZWRTaXplID09IG90aGVyLm1fY29tcHV0ZWRTaXplCisgICAgICAgICYmIG1f
aXRhbGljID09IG90aGVyLm1faXRhbGljCisgICAgICAgICYmIG1fc21hbGxDYXBzID09IG90aGVy
Lm1fc21hbGxDYXBzCisgICAgICAgICYmIG1fd2VpZ2h0ID09IG90aGVyLm1fd2VpZ2h0CisgICAg
ICAgICYmIG1fcmVuZGVyaW5nTW9kZSA9PSBvdGhlci5tX3JlbmRlcmluZ01vZGUKKyAgICAgICAg
JiYgbV90ZXh0UmVuZGVyaW5nID09IG90aGVyLm1fdGV4dFJlbmRlcmluZworICAgICAgICAmJiBt
X29yaWVudGF0aW9uID09IG90aGVyLm1fb3JpZW50YXRpb24KKyAgICAgICAgJiYgbV9ub25DSktH
bHlwaE9yaWVudGF0aW9uID09IG90aGVyLm1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbgorICAgICAg
ICAmJiBtX3dpZHRoVmFyaWFudCA9PSBvdGhlci5tX3dpZHRoVmFyaWFudAorICAgICAgICAmJiBt
X2xvY2FsZSA9PSBvdGhlci5tX2xvY2FsZQorICAgICAgICAmJiBtX2ZlYXR1cmVTZXR0aW5ncyA9
PSBvdGhlci5tX2ZlYXR1cmVTZXR0aW5ncworICAgICAgICAmJiBtX2ZvbnRTeW50aGVzaXMgPT0g
b3RoZXIubV9mb250U3ludGhlc2lzOworfQorCisvLyBGSVhNRTogTW92ZSB0byBhIGZpbGUgb2Yg
aXRzIG93bi4KK2NsYXNzIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gOiBwdWJsaWMgRm9udERlc2Ny
aXB0aW9uIHsKK3B1YmxpYzoKICAgICBlbnVtIEtlcm5pbmcgeyBBdXRvS2VybmluZywgTm9ybWFs
S2VybmluZywgTm9uZUtlcm5pbmcgfTsKIAogICAgIGVudW0gTGlnYXR1cmVzU3RhdGUgeyBOb3Jt
YWxMaWdhdHVyZXNTdGF0ZSwgRGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSwgRW5hYmxlZExpZ2F0dXJl
c1N0YXRlIH07CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBGb250RGVzY3JpcHRpb24oKTsKKyAgICBG
b250Q2FzY2FkZURlc2NyaXB0aW9uKCk7CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9u
dERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdDsKKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKICAgICB1bnNpZ25lZCBmYW1pbHlD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXMuc2l6ZSgpOyB9CiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBmaXJzdEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIGZhbWlseUF0KDApOyB9CkBA
IC01NSwxNyArMTMwLDEzIEBAIHB1YmxpYzoKICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRv
bWljU3RyaW5nPiYgZmFtaWxpZXMoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzOyB9CiAKICAg
ICBmbG9hdCBzcGVjaWZpZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpZWRTaXplOyB9
Ci0gICAgZmxvYXQgY29tcHV0ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlZFNpemU7
IH0KLSAgICBGb250SXRhbGljIGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRJdGFsaWM+KG1faXRhbGljKTsgfQotICAgIGludCBjb21wdXRlZFBpeGVsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIGludChtX2NvbXB1dGVkU2l6ZSArIDAuNWYpOyB9Ci0gICAgRm9udFNtYWxsQ2Fw
cyBzbWFsbENhcHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U21hbGxDYXBzPiht
X3NtYWxsQ2Fwcyk7IH0KICAgICBib29sIGlzQWJzb2x1dGVTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9pc0Fic29sdXRlU2l6ZTsgfQotICAgIEZvbnRXZWlnaHQgd2VpZ2h0KCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Rm9udFdlaWdodD4obV93ZWlnaHQpOyB9CiAgICAgRm9udFdlaWdodCBs
aWdodGVyV2VpZ2h0KCkgY29uc3Q7CiAgICAgRm9udFdlaWdodCBib2xkZXJXZWlnaHQoKSBjb25z
dDsKKwogICAgIC8vIG9ubHkgdXNlIGZpeGVkIGRlZmF1bHQgc2l6ZSB3aGVuIHRoZXJlIGlzIG9u
bHkgb25lIGZvbnQgZmFtaWx5LCBhbmQgdGhhdCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIKICAgICBi
b29sIHVzZUZpeGVkRGVmYXVsdFNpemUoKSBjb25zdCB7IHJldHVybiBmYW1pbHlDb3VudCgpID09
IDEgJiYgZmlyc3RGYW1pbHkoKSA9PSBtb25vc3BhY2VGYW1pbHk7IH0KLSAgICBGb250UmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFJl
bmRlcmluZ01vZGU+KG1fcmVuZGVyaW5nTW9kZSk7IH0KKwogICAgIEtlcm5pbmcga2VybmluZygp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEtlcm5pbmc+KG1fa2VybmluZyk7IH0KICAgICBM
aWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PExpZ2F0dXJlc1N0YXRlPihtX2NvbW1vbkxpZ2F0dXJlc1N0YXRlKTsgfQogICAgIExp
Z2F0dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PExpZ2F0dXJlc1N0YXRlPihtX2Rpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0
ZSk7IH0KQEAgLTc4LDMwICsxNDksMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaWRlbnRp
ZmllcjsKICAgICB9CiAgICAgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZygpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRTbW9vdGhpbmdNb2RlPihtX2ZvbnRTbW9vdGhpbmcp
OyB9Ci0gICAgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxUZXh0UmVuZGVyaW5nTW9kZT4obV90ZXh0UmVuZGVyaW5nKTsgfQot
ICAgIFVTY3JpcHRDb2RlIHNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVTY3Jp
cHRDb2RlPihtX3NjcmlwdCk7IH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9jYWxlOyB9Ci0KLSAgICBGb250VHJhaXRzTWFzayB0cmFpdHNNYXNr
KCkgY29uc3Q7CiAgICAgYm9vbCBpc1NwZWNpZmllZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lz
U3BlY2lmaWVkRm9udDsgfQotICAgIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRPcmllbnRhdGlvbj4obV9vcmllbnRhdGlvbik7IH0K
LSAgICBOb25DSktHbHlwaE9yaWVudGF0aW9uIG5vbkNKS0dseXBoT3JpZW50YXRpb24oKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxOb25DSktHbHlwaE9yaWVudGF0aW9uPihtX25vbkNKS0ds
eXBoT3JpZW50YXRpb24pOyB9Ci0gICAgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250V2lkdGhWYXJpYW50PihtX3dpZHRoVmFyaWFu
dCk7IH0KLSAgICBGb250RmVhdHVyZVNldHRpbmdzKiBmZWF0dXJlU2V0dGluZ3MoKSBjb25zdCB7
IHJldHVybiBtX2ZlYXR1cmVTZXR0aW5ncy5nZXQoKTsgfQotICAgIEZvbnRTeW50aGVzaXMgZm9u
dFN5bnRoZXNpcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRTeW50aGVzaXM+KG1f
Zm9udFN5bnRoZXNpcyk7IH0KIAogICAgIHZvaWQgc2V0T25lRmFtaWx5KGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KSB7IEFTU0VSVChtX2ZhbWlsaWVzLnNpemUoKSA9PSAxKTsgbV9mYW1pbGll
c1swXSA9IGZhbWlseTsgfQogICAgIHZvaWQgc2V0RmFtaWxpZXMoY29uc3QgVmVjdG9yPEF0b21p
Y1N0cmluZz4mIGZhbWlsaWVzKSB7IG1fZmFtaWxpZXMgPSBSZWZDb3VudGVkQXJyYXk8QXRvbWlj
U3RyaW5nPihmYW1pbGllcyk7IH0KICAgICB2b2lkIHNldEZhbWlsaWVzKGNvbnN0IFJlZkNvdW50
ZWRBcnJheTxBdG9taWNTdHJpbmc+JiBmYW1pbGllcykgeyBtX2ZhbWlsaWVzID0gZmFtaWxpZXM7
IH0KLSAgICB2b2lkIHNldENvbXB1dGVkU2l6ZShmbG9hdCBzKSB7IG1fY29tcHV0ZWRTaXplID0g
Y2xhbXBUb0Zsb2F0KHMpOyB9CiAgICAgdm9pZCBzZXRTcGVjaWZpZWRTaXplKGZsb2F0IHMpIHsg
bV9zcGVjaWZpZWRTaXplID0gY2xhbXBUb0Zsb2F0KHMpOyB9Ci0gICAgdm9pZCBzZXRJdGFsaWMo
Rm9udEl0YWxpYyBpKSB7IG1faXRhbGljID0gaTsgfQotICAgIHZvaWQgc2V0SXNJdGFsaWMoYm9v
bCBpKSB7IHNldEl0YWxpYyhpID8gRm9udEl0YWxpY09uIDogRm9udEl0YWxpY09mZik7IH0KLSAg
ICB2b2lkIHNldFNtYWxsQ2FwcyhGb250U21hbGxDYXBzIGMpIHsgbV9zbWFsbENhcHMgPSBjOyB9
Ci0gICAgdm9pZCBzZXRJc1NtYWxsQ2Fwcyhib29sIGMpIHsgc2V0U21hbGxDYXBzKGMgPyBGb250
U21hbGxDYXBzT24gOiBGb250U21hbGxDYXBzT2ZmKTsgfQogICAgIHZvaWQgc2V0SXNBYnNvbHV0
ZVNpemUoYm9vbCBzKSB7IG1faXNBYnNvbHV0ZVNpemUgPSBzOyB9Ci0gICAgdm9pZCBzZXRXZWln
aHQoRm9udFdlaWdodCB3KSB7IG1fd2VpZ2h0ID0gdzsgfQotICAgIHZvaWQgc2V0UmVuZGVyaW5n
TW9kZShGb250UmVuZGVyaW5nTW9kZSBtb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IG1vZGU7IH0K
ICAgICB2b2lkIHNldEtlcm5pbmcoS2VybmluZyBrZXJuaW5nKSB7IG1fa2VybmluZyA9IGtlcm5p
bmc7IH0KICAgICB2b2lkIHNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKExpZ2F0dXJlc1N0YXRlIGNv
bW1vbkxpZ2F0dXJlc1N0YXRlKSB7IG1fY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBjb21tb25MaWdh
dHVyZXNTdGF0ZTsgfQogICAgIHZvaWQgc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKExp
Z2F0dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSkgeyBtX2Rpc2NyZXRpb25h
cnlMaWdhdHVyZXNTdGF0ZSA9IGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZTsgfQpAQCAtMTE4
LDI1ICsxNzIsMTcgQEAgcHVibGljOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KENTU1ZhbHVlV2Vi
a2l0WHh4TGFyZ2UgLSBDU1NWYWx1ZVh4U21hbGwgKyAxID09IDgsICJNYXhpbXVtIGtleXdvcmQg
c2l6ZSBzaG91bGQgYmUgOC4iKTsKICAgICAgICAgc2V0S2V5d29yZFNpemUoaWRlbnRpZmllciA/
IGlkZW50aWZpZXIgLSBDU1NWYWx1ZVh4U21hbGwgKyAxIDogMCk7CiAgICAgfQotCiAgICAgdm9p
ZCBzZXRGb250U21vb3RoaW5nKEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZykgeyBtX2ZvbnRT
bW9vdGhpbmcgPSBzbW9vdGhpbmc7IH0KLSAgICB2b2lkIHNldFRleHRSZW5kZXJpbmdNb2RlKFRl
eHRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZykgeyBtX3RleHRSZW5kZXJpbmcgPSByZW5kZXJpbmc7
IH0KICAgICB2b2lkIHNldElzU3BlY2lmaWVkRm9udChib29sIGlzU3BlY2lmaWVkRm9udCkgeyBt
X2lzU3BlY2lmaWVkRm9udCA9IGlzU3BlY2lmaWVkRm9udDsgfQotICAgIHZvaWQgc2V0T3JpZW50
YXRpb24oRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmll
bnRhdGlvbjsgfQotICAgIHZvaWQgc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihOb25DSktHbHlw
aE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9IG9y
aWVudGF0aW9uOyB9Ci0gICAgdm9pZCBzZXRXaWR0aFZhcmlhbnQoRm9udFdpZHRoVmFyaWFudCB3
aWR0aFZhcmlhbnQpIHsgbV93aWR0aFZhcmlhbnQgPSB3aWR0aFZhcmlhbnQ7IH0gLy8gTWFrZSBz
dXJlIG5ldyBjYWxsZXJzIG9mIHRoaXMgc3luYyB3aXRoIEZvbnRQbGF0Zm9ybURhdGE6OmlzRm9y
VGV4dENvbWJpbmUoKSEKLSAgICB2b2lkIHNldExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmKTsK
LSAgICB2b2lkIHNldEZlYXR1cmVTZXR0aW5ncyhQYXNzUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGlu
Z3M+IHNldHRpbmdzKSB7IG1fZmVhdHVyZVNldHRpbmdzID0gc2V0dGluZ3M7IH0KLSAgICB2b2lk
IHNldEZvbnRTeW50aGVzaXMoRm9udFN5bnRoZXNpcyBmb250U3ludGhlc2lzKSB7IG1fZm9udFN5
bnRoZXNpcyA9IGZvbnRTeW50aGVzaXM7IH0KIAogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0la
SU5HKQotICAgIGJvb2wgZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgZmFtaWxpZXNFcXVhbEZvclRleHRB
dXRvU2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdDsKIAot
ICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250RGVzY3JpcHRpb24mIG90
aGVyKSBjb25zdAorICAgIGJvb2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBmYW1p
bGllc0VxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXIpCiAgICAgICAgICAgICAmJiBtX3NwZWNp
ZmllZFNpemUgPT0gb3RoZXIubV9zcGVjaWZpZWRTaXplCi0gICAgICAgICAgICAmJiBtX3NtYWxs
Q2FwcyA9PSBvdGhlci5tX3NtYWxsQ2FwcworICAgICAgICAgICAgJiYgc21hbGxDYXBzKCkgPT0g
b3RoZXIuc21hbGxDYXBzKCkKICAgICAgICAgICAgICYmIG1faXNBYnNvbHV0ZVNpemUgPT0gb3Ro
ZXIubV9pc0Fic29sdXRlU2l6ZTsKICAgICB9CiAjZW5kaWYKQEAgLTE1MiwyNyArMTk4LDEyIEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBSZWZDb3VudGVkQXJyYXk8QXRvbWljU3RyaW5nPiBt
X2ZhbWlsaWVzIHsgMSB9OwotICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBtX2ZlYXR1
cmVTZXR0aW5nczsKLSAgICBBdG9taWNTdHJpbmcgbV9sb2NhbGUgeyBpbml0aWFsTG9jYWxlKCkg
fTsKIAogICAgIGZsb2F0IG1fc3BlY2lmaWVkU2l6ZSB7IDAgfTsgICAvLyBTcGVjaWZpZWQgQ1NT
IHZhbHVlLiBJbmRlcGVuZGVudCBvZiByZW5kZXJpbmcgaXNzdWVzIHN1Y2ggYXMgaW50ZWdlcgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3VuZGluZywgbWluaW11bSBmb250IHNp
emVzLCBhbmQgem9vbWluZy4KLSAgICBmbG9hdCBtX2NvbXB1dGVkU2l6ZSB7IDAgfTsgICAgLy8g
Q29tcHV0ZWQgc2l6ZSBhZGp1c3RlZCBmb3IgdGhlIG1pbmltdW0gZm9udCBzaXplIGFuZCB0aGUg
em9vbSBmYWN0b3IuCi0KLSAgICB1bnNpZ25lZCBtX29yaWVudGF0aW9uIDogMTsgLy8gRm9udE9y
aWVudGF0aW9uIC0gV2hldGhlciB0aGUgZm9udCBpcyByZW5kZXJpbmcgb24gYSBob3Jpem9udGFs
IGxpbmUgb3IgYSB2ZXJ0aWNhbCBsaW5lLgotICAgIHVuc2lnbmVkIG1fbm9uQ0pLR2x5cGhPcmll
bnRhdGlvbiA6IDE7IC8vIE5vbkNKS0dseXBoT3JpZW50YXRpb24gLSBPbmx5IHVzZWQgYnkgdmVy
dGljYWwgdGV4dC4gRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBvcmllbnRhdGlvbiBmb3Igbm9uLWlk
ZW9ncmFwaCBnbHlwaHMuCi0KLSAgICB1bnNpZ25lZCBtX3dpZHRoVmFyaWFudCA6IDI7IC8vIEZv
bnRXaWR0aFZhcmlhbnQKLQotICAgIHVuc2lnbmVkIG1faXRhbGljIDogMTsgLy8gRm9udEl0YWxp
YwotICAgIHVuc2lnbmVkIG1fc21hbGxDYXBzIDogMTsgLy8gRm9udFNtYWxsQ2FwcwogICAgIHVu
c2lnbmVkIG1faXNBYnNvbHV0ZVNpemUgOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCBDU1Mgc3BlY2lm
aWVkIGFuIGV4cGxpY2l0IHNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyAobG9naWNhbCBzaXplcyBsaWtlICJtZWRpdW0iIGRvbid0IGNvdW50KS4KLSAgICB1bnNpZ25l
ZCBtX3dlaWdodCA6IDg7IC8vIEZvbnRXZWlnaHQKLQotICAgIHVuc2lnbmVkIG1fcmVuZGVyaW5n
TW9kZSA6IDE7ICAvLyBVc2VkIHRvIHN3aXRjaCBiZXR3ZWVuIENHIGFuZCBHREkgdGV4dCBvbiBX
aW5kb3dzLgogICAgIHVuc2lnbmVkIG1fa2VybmluZyA6IDI7IC8vIEtlcm5pbmcKLQogICAgIHVu
c2lnbmVkIG1fY29tbW9uTGlnYXR1cmVzU3RhdGUgOiAyOwogICAgIHVuc2lnbmVkIG1fZGlzY3Jl
dGlvbmFyeUxpZ2F0dXJlc1N0YXRlIDogMjsKICAgICB1bnNpZ25lZCBtX2hpc3RvcmljYWxMaWdh
dHVyZXNTdGF0ZSA6IDI7CkBAIC0xODIsMzYgKzIxMywyMiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gKGUuZy4sIDEzcHggbW9ub3NwYWNlIHZzLiAxNnB4IGV2ZXJ5
dGhpbmcgZWxzZSkuICBTaXplcyBhcmUgMS04IChsaWtlIHRoZSBIVE1MIHNpemUgdmFsdWVzIGZv
ciA8Zm9udD4pLgogCiAgICAgdW5zaWduZWQgbV9mb250U21vb3RoaW5nIDogMjsgLy8gRm9udFNt
b290aGluZ01vZGUKLSAgICB1bnNpZ25lZCBtX3RleHRSZW5kZXJpbmcgOiAyOyAvLyBUZXh0UmVu
ZGVyaW5nTW9kZQogICAgIHVuc2lnbmVkIG1faXNTcGVjaWZpZWRGb250IDogMTsgLy8gVHJ1ZSBp
ZiBhIHdlYiBwYWdlIHNwZWNpZmllcyBhIG5vbi1nZW5lcmljIGZvbnQgZmFtaWx5IGFzIHRoZSBm
aXJzdCBmb250IGZhbWlseS4KLSAgICB1bnNpZ25lZCBtX3NjcmlwdCA6IDc7IC8vIFVzZWQgdG8g
aGVscCBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgZm9udCBmb3IgZ2VuZXJpYyBmb250IGZhbWlsaWVz
LgotICAgIHVuc2lnbmVkIG1fZm9udFN5bnRoZXNpcyA6IDI7IC8vIEZvbnRTeW50aGVzaXMgdHlw
ZQogfTsKIAotaW5saW5lIGJvb2wgRm9udERlc2NyaXB0aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0CitpbmxpbmUgYm9vbCBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBj
b25zdAogewotICAgIHJldHVybiBtX2ZhbWlsaWVzID09IG90aGVyLm1fZmFtaWxpZXMKKyAgICBy
ZXR1cm4gRm9udERlc2NyaXB0aW9uOjpvcGVyYXRvcj09KG90aGVyKQorICAgICAgICAmJiBtX2Zh
bWlsaWVzID09IG90aGVyLm1fZmFtaWxpZXMKICAgICAgICAgJiYgbV9zcGVjaWZpZWRTaXplID09
IG90aGVyLm1fc3BlY2lmaWVkU2l6ZQotICAgICAgICAmJiBtX2NvbXB1dGVkU2l6ZSA9PSBvdGhl
ci5tX2NvbXB1dGVkU2l6ZQotICAgICAgICAmJiBtX2l0YWxpYyA9PSBvdGhlci5tX2l0YWxpYwot
ICAgICAgICAmJiBtX3NtYWxsQ2FwcyA9PSBvdGhlci5tX3NtYWxsQ2FwcwogICAgICAgICAmJiBt
X2lzQWJzb2x1dGVTaXplID09IG90aGVyLm1faXNBYnNvbHV0ZVNpemUKLSAgICAgICAgJiYgbV93
ZWlnaHQgPT0gb3RoZXIubV93ZWlnaHQKLSAgICAgICAgJiYgbV9yZW5kZXJpbmdNb2RlID09IG90
aGVyLm1fcmVuZGVyaW5nTW9kZQogICAgICAgICAmJiBtX2tlcm5pbmcgPT0gb3RoZXIubV9rZXJu
aW5nCiAgICAgICAgICYmIG1fY29tbW9uTGlnYXR1cmVzU3RhdGUgPT0gb3RoZXIubV9jb21tb25M
aWdhdHVyZXNTdGF0ZQogICAgICAgICAmJiBtX2Rpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9
PSBvdGhlci5tX2Rpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZQogICAgICAgICAmJiBtX2hpc3Rv
cmljYWxMaWdhdHVyZXNTdGF0ZSA9PSBvdGhlci5tX2hpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZQog
ICAgICAgICAmJiBtX2tleXdvcmRTaXplID09IG90aGVyLm1fa2V5d29yZFNpemUKICAgICAgICAg
JiYgbV9mb250U21vb3RoaW5nID09IG90aGVyLm1fZm9udFNtb290aGluZwotICAgICAgICAmJiBt
X3RleHRSZW5kZXJpbmcgPT0gb3RoZXIubV90ZXh0UmVuZGVyaW5nCi0gICAgICAgICYmIG1faXNT
cGVjaWZpZWRGb250ID09IG90aGVyLm1faXNTcGVjaWZpZWRGb250Ci0gICAgICAgICYmIG1fb3Jp
ZW50YXRpb24gPT0gb3RoZXIubV9vcmllbnRhdGlvbgotICAgICAgICAmJiBtX25vbkNKS0dseXBo
T3JpZW50YXRpb24gPT0gb3RoZXIubV9ub25DSktHbHlwaE9yaWVudGF0aW9uCi0gICAgICAgICYm
IG1fd2lkdGhWYXJpYW50ID09IG90aGVyLm1fd2lkdGhWYXJpYW50Ci0gICAgICAgICYmIG1fbG9j
YWxlID09IG90aGVyLm1fbG9jYWxlCi0gICAgICAgICYmIG1fZmVhdHVyZVNldHRpbmdzID09IG90
aGVyLm1fZmVhdHVyZVNldHRpbmdzCi0gICAgICAgICYmIG1fZm9udFN5bnRoZXNpcyA9PSBvdGhl
ci5tX2ZvbnRTeW50aGVzaXM7CisgICAgICAgICYmIG1faXNTcGVjaWZpZWRGb250ID09IG90aGVy
Lm1faXNTcGVjaWZpZWRGb250OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAkocmV2aXNpb24gMTg5MjA2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOwogY2xhc3MgRm9udERlc2NyaXB0aW9uOwogY2xhc3MgRm9udFNl
bGVjdG9yQ2xpZW50OwogCkBAIC00NCw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Rm9udD4gZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgc2l6
ZV90KSA9IDA7CiAKICAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3VudCgpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERlc2NyaXB0aW9u
JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZv
bnRDYWNoZUludmFsaWRhdGVkKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAJ
KHJldmlzaW9uIDE4OTIwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQzLDQ4ICsyNDMs
MzkgQEAgdWludDE2X3QgdG9Db3JlVGV4dEZvbnRXZWlnaHQoRm9udFdlaWdodAogICAgIHJldHVy
biBjb3JlVGV4dEZvbnRXZWlnaHRzW2ZvbnRXZWlnaHRdOwogfQogCi1SZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQor
UmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCiB7CiAgICAgLy8gQXR0
ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBvbiB0
aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4KICAgICAvLyB0aGUgcmVxdWVzdGVkIG5hbWVzLiBG
b3IgZXhhbXBsZSwgd2UnbGwgbWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmljIiB0
byBHZWV6YSBQcm8uCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnQ7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkgewotICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpOwotICAgICAg
ICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGlmIChm
YW1pbHkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogI2lmIFBMQVRGT1JN
KElPUykKLSAgICAgICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCBtb25vc3BhY2UgZm9udCBm
b3Igd2VsbC1rbm93biBtb25vc3BhY2UgZm9udHMuCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IG1vbmFjbygibW9uYWNvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IG1lbmxvKCJtZW5sbyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjb3VyaWVyKCJjb3Vy
aWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1vbmFjbykgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFt
aWx5LCBtZW5sbykpIHsKLSAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0
aW9uLCBjb3VyaWVyKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gU3Vic3RpdHV0ZSBWZXJkYW5hIGZvciBMdWNpZGEgR3JhbmRlLgotICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBsdWNpZGFHcmFuZGUoImx1Y2lkYSBncmFu
ZGUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gdmVyZGFuYSgidmVyZGFuYSIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoZmFtaWx5LCBsdWNpZGFHcmFuZGUpKSB7Ci0gICAgICAgICAgICBmb250ID0gZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQorICAgIC8vIFN1YnN0aXR1dGUgdGhlIGRlZmF1bHQgbW9ub3NwYWNlIGZvbnQgZm9yIHdl
bGwta25vd24gbW9ub3NwYWNlIGZvbnRzLgorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IG1vbmFjbygibW9uYWNvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbWVubG8oIm1l
bmxvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gY291cmllcigiY291cmllciIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1p
bHksIG1vbmFjbykgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBtZW5sbykpCisgICAgICAg
IHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBjb3VyaWVyKTsKKworICAgIC8vIFN1
YnN0aXR1dGUgVmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4KKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBsdWNpZGFHcmFuZGUoImx1Y2lkYSBncmFuZGUiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbHVjaWRhR3Jh
bmRlKSkKKyAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHZlcmRhbmEp
OwogI2VuZGlmCiAKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYXJhYmlj
KEFTQ0lJTGl0ZXJhbCgiQXJhYmljIikpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U3RyaW5nPiBwYXNodG8oQVNDSUlMaXRlcmFsKCJQYXNodG8iKSk7Ci0gICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IHVyZHUoQVNDSUlMaXRlcmFsKCJVcmR1IikpOwotICAgICAg
ICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyAmYXJhYmljLmdldCgpLCAmcGFzaHRv
LmdldCgpLCAmdXJkdS5nZXQoKSB9OwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBnZWV6YUJvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICAgICAgZm9yIChTdHJpbmcqIG1hdGNoV29yZCA6IG1hdGNoV29yZHMpIHsK
LSAgICAgICAgICAgIGlmIChmYW1pbHkuY29udGFpbnMoKm1hdGNoV29yZCwgZmFsc2UpKQotICAg
ICAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWln
aHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOwot
ICAgICAgICB9CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYXJhYmljKEFTQ0lJ
TGl0ZXJhbCgiQXJhYmljIikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBh
c2h0byhBU0NJSUxpdGVyYWwoIlBhc2h0byIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U3RyaW5nPiB1cmR1KEFTQ0lJTGl0ZXJhbCgiVXJkdSIpKTsKKyAgICBzdGF0aWMgU3RyaW5nKiBt
YXRjaFdvcmRzWzNdID0geyAmYXJhYmljLmdldCgpLCAmcGFzaHRvLmdldCgpLCAmdXJkdS5nZXQo
KSB9OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdlZXphUGxhaW4o
IkdlZXphUHJvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xk
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgZm9yIChTdHJpbmcq
IG1hdGNoV29yZCA6IG1hdGNoV29yZHMpIHsKKyAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygq
bWF0Y2hXb3JkLCBmYWxzZSkpCisgICAgICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJv
bGQgOiBnZWV6YVBsYWluKTsKICAgICB9Ci0KLSAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFZlY3RvcjxGb250VHJhaXRzTWFzaz4gRm9udENhY2hl
OjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAkocmV2aXNpb24gMTg5MjA2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgaW50IGJhc2VsaW5l
UG9zaXRpb25BZGp1c3RtZW50KENvbnRyb2xQYXJ0KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZp
cnR1YWwgT3B0aW9uYWw8Rm9udERlc2NyaXB0aW9uPiBjb250cm9sRm9udChDb250cm9sUGFydCwg
Y29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IGNvbnRyb2xGb250KENv
bnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0IG92
ZXJyaWRlOwogICAgIAogICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9s
UGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhTaXplJiwgZmxvYXQgem9vbUZh
Y3RvcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBMZW5ndGhTaXplIG1pbmltdW1Db250
cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFjdG9y
KSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVt
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVN
YWMubW0JKHJldmlzaW9uIDE4OTIwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9U
aGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzAwLDExICs3MDAsMTEgQEAgaW50IFRoZW1l
TWFjOjpiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudAogICAgIHJldHVybiBUaGVtZTo6YmFzZWxp
bmVQb3NpdGlvbkFkanVzdG1lbnQocGFydCk7CiB9CiAKLU9wdGlvbmFsPEZvbnREZXNjcmlwdGlv
bj4gVGhlbWVNYWM6OmNvbnRyb2xGb250KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorT3B0aW9uYWw8Rm9udENhc2NhZGVE
ZXNjcmlwdGlvbj4gVGhlbWVNYWM6OmNvbnRyb2xGb250KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0
IEZvbnRDYXNjYWRlJiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRj
aCAocGFydCkgewogICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OiB7Ci0gICAgICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgICAgICAgICAgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CiAKICAgICAgICAgICAgIE5TRm9udCogbnNGb250ID0g
W05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9s
U2l6ZTpjb250cm9sU2l6ZUZvckZvbnQoZm9udCldXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTg5MjA2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4NSw3ICsy
OTg1LDcgQEAgc3RhdGljIFJlbmRlclN0eWxlJiBzdHlsZUZvckZpcnN0TGV0dGVyKAogICAgICAg
ICAKICAgICAgICAgLy8gU2V0IHRoZSBmb250IHRvIGJlIG9uZSBsaW5lIHRvbyBiaWcgYW5kIHRo
ZW4gcmF0Y2hldCBiYWNrIHRvIGdldCB0byBhIHByZWNpc2UgZml0LiBXZSBjYW4ndCBqdXN0IHNl
dCB0aGUgZGVzaXJlZCBmb250IHNpemUgYmFzZWQgb2ZmIGZvbnQgaGVpZ2h0IG1ldHJpY3MKICAg
ICAgICAgLy8gYmVjYXVzZSBtYW55IGZvbnRzIGJha2UgYXNjZW50IGludG8gdGhlIGZvbnQgbWV0
cmljcy4gVGhlcmVmb3JlIHdlIGhhdmUgdG8gbG9vayBhdCBhY3R1YWwgbWVhc3VyZWQgY2FwIGhl
aWdodCB2YWx1ZXMgaW4gb3JkZXIgdG8ga25vdyB3aGVuIHdlIGhhdmUgYSBnb29kIGZpdC4KLSAg
ICAgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbiA9IHBzZXVkb1N0eWxlLT5m
b250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgYXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBwc2V1
ZG9TdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGZsb2F0IGNhcFJhdGlvID0gcHNl
dWRvU3R5bGUtPmZvbnRNZXRyaWNzKCkuZmxvYXRDYXBIZWlnaHQoKSAvIHBzZXVkb1N0eWxlLT5m
b250U2l6ZSgpOwogICAgICAgICBmbG9hdCBzdGFydGluZ0ZvbnRTaXplID0gKChwc2V1ZG9TdHls
ZS0+aW5pdGlhbExldHRlckhlaWdodCgpIC0gMSkgKiBsaW5lSGVpZ2h0ICsgcGFyYWdyYXBoLT5z
dHlsZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCkpIC8gY2FwUmF0aW87CiAgICAgICAgIG5l
d0ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0YXJ0aW5nRm9udFNpemUpOwpAQCAt
Mjk5Niw3ICsyOTk2LDcgQEAgc3RhdGljIFJlbmRlclN0eWxlJiBzdHlsZUZvckZpcnN0TGV0dGVy
KAogICAgICAgICBpbnQgZGVzaXJlZENhcEhlaWdodCA9IChwc2V1ZG9TdHlsZS0+aW5pdGlhbExl
dHRlckhlaWdodCgpIC0gMSkgKiBsaW5lSGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRN
ZXRyaWNzKCkuY2FwSGVpZ2h0KCk7CiAgICAgICAgIGludCBhY3R1YWxDYXBIZWlnaHQgPSBwc2V1
ZG9TdHlsZS0+Zm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKTsKICAgICAgICAgd2hpbGUgKGFjdHVh
bENhcEhlaWdodCA+IGRlc2lyZWRDYXBIZWlnaHQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlw
dGlvbiBuZXdGb250RGVzY3JpcHRpb24gPSBwc2V1ZG9TdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgICAgICAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IHBzZXVkb1N0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZp
ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkgLSAxKTsKICAgICAgICAg
ICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkU2l6ZSgpIC0xKTsKICAgICAgICAgICAgIHBzZXVkb1N0eWxlLT5zZXRGb250RGVz
Y3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAxODkyMDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzY5Nyw3ICszNjk3LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdENvbXB1dGVkRm9u
dAogICAgICAgICBpZiAoaXNWaXNpYmxlUmVuZGVyVGV4dChkZXNjZW5kZW50KSAmJiByZXNpemVU
ZXh0UGVybWl0dGVkKGRlc2NlbmRlbnQpKSB7CiAgICAgICAgICAgICBSZW5kZXJUZXh0JiB0ZXh0
ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmRlc2NlbmRlbnQpOwogICAgICAgICAgICAgUmVuZGVy
U3R5bGUmIG9sZFN0eWxlID0gdGV4dC5zdHlsZSgpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IG9sZFN0eWxlLmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBvbGRTdHlsZS5mb250RGVzY3JpcHRpb24oKTsK
ICAgICAgICAgICAgIGZsb2F0IHNwZWNpZmllZFNpemUgPSBmb250RGVzY3JpcHRpb24uc3BlY2lm
aWVkU2l6ZSgpOwogICAgICAgICAgICAgZmxvYXQgc2NhbGVkU2l6ZSA9IHJvdW5kZihzcGVjaWZp
ZWRTaXplICogc2NhbGUpOwogICAgICAgICAgICAgaWYgKHNjYWxlZFNpemUgPiAwICYmIHNjYWxl
ZFNpemUgPCBtaW5Gb250U2l6ZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvbWJpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCShyZXZpc2lvbiAxODkyMDYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Nyw3ICs5Nyw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkKICAgICBp
ZiAoc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBGb250RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBvcmlnaW5hbEZvbnQoKS5mb250RGVz
Y3JpcHRpb24oKTsKKyAgICBhdXRvIGRlc2NyaXB0aW9uID0gb3JpZ2luYWxGb250KCkuZm9udERl
c2NyaXB0aW9uKCk7CiAgICAgZmxvYXQgZW1XaWR0aCA9IGRlc2NyaXB0aW9uLmNvbXB1dGVkU2l6
ZSgpICogdGV4dENvbWJpbmVNYXJnaW47CiAgICAgYm9vbCBzaG91bGRVcGRhdGVGb250ID0gZmFs
c2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMTg5MjA2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDcgKzM1
OSw3IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW4KICAgICBjb250
ZW50UmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgY29udGVudFJlY3QubW92ZUJ5KHJvdW5k
ZWRJbnRQb2ludChhY2N1bXVsYXRlZE9mZnNldCkpOwogCi0gICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbjsKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
bjsKICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUZvbnQoQ1NTVmFsdWVX
ZWJraXRTbWFsbENvbnRyb2wsIGZvbnREZXNjcmlwdGlvbik7CiAgICAgZm9udERlc2NyaXB0aW9u
LnNldFdlaWdodChGb250V2VpZ2h0Qm9sZCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRl
cmluZ01vZGUoZnJhbWUoKS5zZXR0aW5ncygpLmZvbnRSZW5kZXJpbmdNb2RlKCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAkocmV2aXNp
b24gMTg5MjA2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBSZWY8UmVuZGVyU3R5
bGU+IGNyZWF0ZUZ1bGxTY3JlZW4KICAgICAvLyBDcmVhdGUgYSBzdGFja2luZyBjb250ZXh0Ogog
ICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5zZXRaSW5kZXgoSU5UX01BWCk7CiAKLSAgICBmdWxs
c2NyZWVuU3R5bGUuZ2V0KCkuc2V0Rm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbigpKTsK
KyAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0Rm9udERlc2NyaXB0aW9uKEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24oKSk7CiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCku
dXBkYXRlKG51bGxwdHIpOwogCiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldERpc3BsYXko
RkxFWCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
CShyZXZpc2lvbiAxODkyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw5ICsxMTksOSBAQCB2b2lkIFJlbmRlckxp
c3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91
cExhYmVsKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50Pigq
ZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3Vw
RWxlbWVudD4oKmVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0KCk7Ci0gICAgICAgICAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAg
ICAgICBkLnNldFdlaWdodChkLmJvbGRlcldlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBpdGVt
Rm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0ZW1Gb250LmxldHRlclNwYWNpbmcoKSwgaXRlbUZvbnQu
d29yZFNwYWNpbmcoKSk7CisgICAgICAgICAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9IGl0ZW1G
b250LmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLnNldFdl
aWdodChkZXNjcmlwdGlvbi5ib2xkZXJXZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgaXRlbUZv
bnQgPSBGb250Q2FzY2FkZShkZXNjcmlwdGlvbiwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBp
dGVtRm9udC53b3JkU3BhY2luZygpKTsKICAgICAgICAgICAgICAgICBpdGVtRm9udC51cGRhdGUo
JmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAgICAgICAgfQogCkBAIC00MDUsOSAr
NDA1LDkgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKAogICAgIHIu
bW92ZShpdGVtT2Zmc2V0Rm9yQWxpZ25tZW50KHRleHRSdW4sICZpdGVtU3R5bGUsIGl0ZW1Gb250
LCByKSk7CiAKICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVu
dCkpIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRp
b24oKTsKLSAgICAgICAgZC5zZXRXZWlnaHQoZC5ib2xkZXJXZWlnaHQoKSk7Ci0gICAgICAgIGl0
ZW1Gb250ID0gRm9udENhc2NhZGUoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9u
dC53b3JkU3BhY2luZygpKTsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9IGl0ZW1Gb250LmZv
bnREZXNjcmlwdGlvbigpOworICAgICAgICBkZXNjcmlwdGlvbi5zZXRXZWlnaHQoZGVzY3JpcHRp
b24uYm9sZGVyV2VpZ2h0KCkpOworICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGRlc2Ny
aXB0aW9uLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRTcGFjaW5nKCkp
OwogICAgICAgICBpdGVtRm9udC51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2
aXNpb24gMTg5MjA2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDcgQEAgYm9vbCBSZW5kZXJUZXh0Ojppc1Rl
eHRGcmFnbWVudCgpIGNvbnN0CiBib29sIFJlbmRlclRleHQ6OmNvbXB1dGVVc2VCYWNrc2xhc2hB
c1llblN5bWJvbCgpIGNvbnN0CiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGhp
cy0+c3R5bGUoKTsKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiA9
IHN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgYXV0byYg
Zm9udERlc2NyaXB0aW9uID0gc3R5bGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgaWYgKHN0eWxl
LmZvbnRDYXNjYWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1ib2woKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc1NwZWNpZmllZEZvbnQoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTg5MjA2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE1OSwxOCArMTE1OSwxOCBAQCB2b2lkIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUNv
bG9yc0RpZENoYW5nCiAgICAgUGFnZTo6dXBkYXRlU3R5bGVGb3JBbGxQYWdlc0FmdGVyR2xvYmFs
Q2hhbmdlSW5FbnZpcm9ubWVudCgpOwogfQogCi1Gb250RGVzY3JpcHRpb24mIFJlbmRlclRoZW1l
OjpjYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQpIGNv
bnN0CitGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBSZW5kZXJUaGVtZTo6Y2FjaGVkU3lzdGVtRm9u
dERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgc3lzdGVtRm9udElEKSBjb25zdAogewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IGNhcHRpb247Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gaWNvbjsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBtZW51OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxG
b250RGVzY3JpcHRpb24+IG1lc3NhZ2VCb3g7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZv
bnREZXNjcmlwdGlvbj4gc21hbGxDYXB0aW9uOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxG
b250RGVzY3JpcHRpb24+IHN0YXR1c0JhcjsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9u
dERlc2NyaXB0aW9uPiB3ZWJraXRNaW5pQ29udHJvbDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Rm9udERlc2NyaXB0aW9uPiB3ZWJraXRTbWFsbENvbnRyb2w7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gd2Via2l0Q29udHJvbDsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBkZWZhdWx0RGVzY3JpcHRpb247CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IGNhcHRpb247CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IGljb247CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IG1lbnU7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IG1lc3NhZ2VCb3g7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHNtYWxs
Q2FwdGlvbjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlv
bj4gc3RhdHVzQmFyOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2Ny
aXB0aW9uPiB3ZWJraXRNaW5pQ29udHJvbDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9u
dENhc2NhZGVEZXNjcmlwdGlvbj4gd2Via2l0U21hbGxDb250cm9sOworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiB3ZWJraXRDb250cm9sOworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBkZWZhdWx0RGVzY3Jp
cHRpb247CiAKICAgICBzd2l0Y2ggKHN5c3RlbUZvbnRJRCkgewogICAgIGNhc2UgQ1NTVmFsdWVD
YXB0aW9uOgpAQCAtMTE5OSw3ICsxMTk5LDcgQEAgRm9udERlc2NyaXB0aW9uJiBSZW5kZXJUaGVt
ZTo6Y2FjaGVkU3lzdAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6c3lzdGVtRm9udChD
U1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjpzeXN0ZW1Gb250KENTU1ZhbHVlSUQgc3lzdGVtRm9u
dElELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAg
ICAgZm9udERlc2NyaXB0aW9uID0gY2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKHN5c3RlbUZv
bnRJRCk7CiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDE4OTIwNikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzMsNyArMTczLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJ
bnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJuIDAuNTsgfQogCiAgICAgLy8gU3lzdGVtIGZvbnRzIGFu
ZCBjb2xvcnMgZm9yIENTUy4KLSAgICB2b2lkIHN5c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9udERl
c2NyaXB0aW9uJikgY29uc3Q7CisgICAgdm9pZCBzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdDsKICAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9y
KENTU1ZhbHVlSUQpIGNvbnN0OwogCiAgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6
ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KQEAgLTI1NSw4ICsyNTUsOCBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgRm9udERlc2NyaXB0aW9u
JiBjYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQpIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24o
Q1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGNhY2hlZFN5c3RlbUZvbnREZXNjcmlw
dGlvbihDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCwg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0ID0gMDsKIAogICAgIC8vIFRoZSBwbGF0Zm9y
bSBzZWxlY3Rpb24gY29sb3IuCiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lSU9TLmgJKHJldmlzaW9uIDE4OTIwNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw4
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRDb250ZW50U2l6
ZUNhdGVnb3J5KGNvbnN0IFN0cmluZyYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBGb250
RGVzY3JpcHRpb24mIGNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHN5c3Rl
bUZvbnRJRCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5
c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGNhY2hlZFN5c3Rl
bUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NW
YWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJCb3gmKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUm
LCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDE4OTIwNikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTA3OCwyNSArMTA3OCwyNSBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpzaG91bGRIYXZlQ2Fw
c0xvY2tJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Gb250RGVzY3JpcHRpb24mIFJlbmRlclRo
ZW1lSU9TOjpjYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1ZUlEKSBj
b25zdAorRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgUmVuZGVyVGhlbWVJT1M6OmNhY2hlZFN5c3Rl
bUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHZhbHVlSUQpIGNvbnN0CiB7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc3lzdGVtRm9udDsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBoZWFkbGluZUZvbnQ7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gYm9keUZvbnQ7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc3ViaGVhZGxpbmVGb250OwotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IGZvb3Rub3RlRm9udDsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBjYXB0aW9uMUZvbnQ7Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gY2FwdGlvbjJGb250OwotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHNob3J0SGVhZGxpbmVGb250Owot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHNob3J0Qm9keUZvbnQ7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc2hvcnRTdWJoZWFk
bGluZUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc2hv
cnRGb290bm90ZUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlv
bj4gc2hvcnRDYXB0aW9uMUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNj
cmlwdGlvbj4gdGFsbEJvZHlGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uPiBzeXN0ZW1Gb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxG
b250Q2FzY2FkZURlc2NyaXB0aW9uPiBoZWFkbGluZUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IGJvZHlGb250OworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBzdWJoZWFkbGluZUZvbnQ7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IGZvb3Rub3RlRm9u
dDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gY2Fw
dGlvbjFGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0
aW9uPiBjYXB0aW9uMkZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24+IHNob3J0SGVhZGxpbmVGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBzaG9ydEJvZHlGb250OworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBzaG9ydFN1YmhlYWRsaW5lRm9udDsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gc2hvcnRG
b290bm90ZUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24+IHNob3J0Q2FwdGlvbjFGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250
Q2FzY2FkZURlc2NyaXB0aW9uPiB0YWxsQm9keUZvbnQ7CiAjaWYgX19JUEhPTkVfT1NfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPiA4MDIwMAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVz
Y3JpcHRpb24+IHRpdGxlMUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNj
cmlwdGlvbj4gdGl0bGUyRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2Ny
aXB0aW9uPiB0aXRsZTNGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uPiB0aXRsZTFGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250
Q2FzY2FkZURlc2NyaXB0aW9uPiB0aXRsZTJGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiB0aXRsZTNGb250OwogI2VuZGlmCiAKICAgICBzdGF0
aWMgQ0ZTdHJpbmdSZWYgdXNlclRleHRTaXplID0gY29udGVudFNpemVDYXRlZ29yeSgpOwpAQCAt
MTE1OCw3ICsxMTU4LDcgQEAgRm9udERlc2NyaXB0aW9uJiBSZW5kZXJUaGVtZUlPUzo6Y2FjaGVk
UwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9u
dERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgdmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjp1cGRhdGVDYWNoZWRTeXN0ZW1G
b250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0
b3JSZWY+IGZvbnREZXNjcmlwdG9yOwogICAgIENGU3RyaW5nUmVmIHRleHRTdHlsZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCShyZXZpc2lvbiAxODky
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5SZW5k
ZXJUaGVtZU1hYygpOwogCiAgICAgLy8gU3lzdGVtIGZvbnRzLgotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0
aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3Rl
bUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29u
c3Qgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgLy8gTWVkaWEgY29udHJvbHMK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlz
aW9uIDE4OTIwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzM4LDcgKzMzOCw3IEBAIHN0YXRpYyBGb250V2VpZ2h0IHRv
Rm9udFdlaWdodChOU0ludGVnZXIKICAgICByZXR1cm4gZm9udFdlaWdodHNbYXBwS2l0Rm9udFdl
aWdodCAtIDFdOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVDYWNoZWRTeXN0ZW1G
b250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCBjc3NWYWx1ZUlkLCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNhY2hlZFN5
c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQsIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBOU0ZvbnQqIGZvbnQ7CiAg
ICAgLy8gU3lzdGVtLWZvbnQtbmVzcyBjYW4ndCBiZSBlbmNhcHN1bGF0ZWQgYnkgc2ltcGx5IGEg
Zm9udCBuYW1lLiBJbnN0ZWFkLCB3ZSBtdXN0IHVzZSBhIHRva2VuCkBAIC04MjMsNyArODIzLDcg
QEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZyb21Gb250KFJlbgogCiB2b2lkIFJlbmRl
clRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0CiB7Ci0gICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUo
dHJ1ZSk7CiAKICAgICBOU0ZvbnQqIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05T
Rm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOmNvbnRyb2xTaXplXV07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAJKHJldmlzaW9uIDE4
OTIwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIFRleHRBdXRvU2l6aW5nVmFsdWU6
OmFkanVzdE5vZGVTaXplCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBjbG9uZVJlbmRlclN0eWxlV2l0aFN0YXRlKHRl
eHQtPnN0eWxlKCkpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIGF1dG8gZm9udERlc2Ny
aXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZShhdmVyYWdlU2l6ZSk7CiAgICAgICAgICAgICBzdHlsZS0+
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICBzdHlsZS0+
Zm9udENhc2NhZGUoKS51cGRhdGUoJmF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmZvbnRTZWxl
Y3RvcigpKTsKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIFRleHRBdXRvU2l6aW5nVmFsdWU6OnJl
c2V0KCkKICAgICAgICAgaWYgKCF0ZXh0KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IC8vIFJlc2V0IHRoZSBmb250IHNpemUgYmFjayB0byB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIHNp
emUKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHRleHQtPnN0eWxl
KCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gdGV4
dC0+c3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZmxvYXQgb3JpZ2luYWxTaXpl
ID0gZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKTsKICAgICAgICAgaWYgKGZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZFNpemUoKSAhPSBvcmlnaW5hbFNpemUpIHsKICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUob3JpZ2luYWxTaXplKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4u
Y3BwCShyZXZpc2lvbiAxODkyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFRva2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2
b2lkIFJlbmRlck1hdGhNTFRva2VuOjp1cGRhdGVTdHlsZSgpCiAgICAgaWYgKHRva2VuRWxlbWVu
dC5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptaVRhZykpIHsKICAgICAgICAgLy8gVGhpcyB0cmll
cyB0byBlbXVsYXRlIHRoZSBkZWZhdWx0IG1hdGh2YXJpYW50IHZhbHVlIG9uIDxtaT4gdXNpbmcg
dGhlIENTUyBmb250LXN0eWxlIHByb3BlcnR5LgogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgcmV2aXNlZCB3aGVuIG1hdGh2YXJpYW50IGlzIGltcGxlbWVudGVkIChodHRwOi8vd2ti
dWcvODU3MzUpIGFuZCB3aGVuIGZvbnRzIHdpdGggTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBT
eW1ib2xzIGNoYXJhY3RlcnMgYXJlIG1vcmUgcG9wdWxhci4KLSAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbihuZXdTdHlsZS5nZXQoKS5mb250RGVzY3JpcHRpb24oKSk7Cisg
ICAgICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gbmV3U3R5bGUuZ2V0KCkuZm9udERlc2NyaXB0
aW9uKCk7CiAgICAgICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gbmV3U3R5bGUuZ2V0
KCkuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKICAgICAgICAgaWYgKCFtX2NvbnRhaW5z
RWxlbWVudCAmJiBlbGVtZW50KCkudGV4dENvbnRlbnQoKS5zdHJpcFdoaXRlU3BhY2UoKS5zaW1w
bGlmeVdoaXRlU3BhY2UoKS5sZW5ndGgoKSA9PSAxICYmICF0b2tlbkVsZW1lbnQuaGFzQXR0cmli
dXRlKG1hdGh2YXJpYW50QXR0cikpCiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRh
bGljKEZvbnRJdGFsaWNPbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDE4OTIwNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDEs
NyArMTQwMSw3IEBAIGNvbnN0IEFuaW1hdGlvbiogUmVuZGVyU3R5bGU6OnRyYW5zaXRpb24KIAog
Y29uc3QgRm9udENhc2NhZGUmIFJlbmRlclN0eWxlOjpmb250Q2FzY2FkZSgpIGNvbnN0IHsgcmV0
dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGU7IH0KIGNvbnN0IEZvbnRNZXRyaWNzJiBSZW5kZXJT
dHlsZTo6Zm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRl
LmZvbnRNZXRyaWNzKCk7IH0KLWNvbnN0IEZvbnREZXNjcmlwdGlvbiYgUmVuZGVyU3R5bGU6OmZv
bnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGUuZm9u
dERlc2NyaXB0aW9uKCk7IH0KK2NvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIFJlbmRlclN0
eWxlOjpmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNj
YWRlLmZvbnREZXNjcmlwdGlvbigpOyB9CiBmbG9hdCBSZW5kZXJTdHlsZTo6c3BlY2lmaWVkRm9u
dFNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7
IH0KIGZsb2F0IFJlbmRlclN0eWxlOjpjb21wdXRlZEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4g
Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7IH0KIGludCBSZW5kZXJTdHlsZTo6Zm9u
dFNpemUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLnBpeGVsU2l6ZSgp
OyB9CkBAIC0xNDA5LDcgKzE0MDksNyBAQCBpbnQgUmVuZGVyU3R5bGU6OmZvbnRTaXplKCkgY29u
c3QgeyByZXR1CiBjb25zdCBMZW5ndGgmIFJlbmRlclN0eWxlOjp3b3JkU3BhY2luZygpIGNvbnN0
IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT53b3JkU3BhY2luZzsgfQogZmxvYXQgUmVuZGVy
U3R5bGU6OmxldHRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNj
YWRlLmxldHRlclNwYWNpbmcoKTsgfQogCi1ib29sIFJlbmRlclN0eWxlOjpzZXRGb250RGVzY3Jp
cHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiB2KQorYm9vbCBSZW5kZXJTdHlsZTo6c2V0Rm9u
dERlc2NyaXB0aW9uKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIHYpCiB7CiAgICAgaWYg
KGluaGVyaXRlZC0+Zm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCkgIT0gdikgewogICAgICAg
ICBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlID0gRm9udENhc2NhZGUodiwgaW5oZXJp
dGVkLT5mb250Q2FzY2FkZS5sZXR0ZXJTcGFjaW5nKCksIGluaGVyaXRlZC0+Zm9udENhc2NhZGUu
d29yZFNwYWNpbmcoKSk7CkBAIC0xNDk0LDE5ICsxNDk0LDE5IEBAIHZvaWQgUmVuZGVyU3R5bGU6
OnNldEZvbnRTaXplKGZsb2F0IHNpemUKICAgICAgICAgc2l6ZSA9IHN0ZDo6bWluKG1heGltdW1B
bGxvd2VkRm9udFNpemUsIHNpemUpOwogCiAgICAgRm9udFNlbGVjdG9yKiBjdXJyZW50Rm9udFNl
bGVjdG9yID0gZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKLSAgICBGb250RGVzY3JpcHRp
b24gZGVzYyhmb250RGVzY3JpcHRpb24oKSk7Ci0gICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKHNp
emUpOwotICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKHNpemUpOworICAgIGF1dG8gZGVzY3JpcHRp
b24gPSBmb250RGVzY3JpcHRpb24oKTsKKyAgICBkZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KHNpemUpOworICAgIGRlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzaXplKTsKIAogI2lmIEVO
QUJMRShURVhUX0FVVE9TSVpJTkcpCiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHRleHRBdXRvc2l6
aW5nTXVsdGlwbGllcigpOwogICAgIGlmIChtdWx0aXBsaWVyID4gMSkgewogICAgICAgICBmbG9h
dCBhdXRvc2l6ZWRGb250U2l6ZSA9IFRleHRBdXRvc2l6ZXI6OmNvbXB1dGVBdXRvc2l6ZWRGb250
U2l6ZShzaXplLCBtdWx0aXBsaWVyKTsKLSAgICAgICAgZGVzYy5zZXRDb21wdXRlZFNpemUobWlu
KG1heGltdW1BbGxvd2VkRm9udFNpemUsIGF1dG9zaXplZEZvbnRTaXplKSk7CisgICAgICAgIGRl
c2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShtaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgYXV0
b3NpemVkRm9udFNpemUpKTsKICAgICB9CiAjZW5kaWYKIAotICAgIHNldEZvbnREZXNjcmlwdGlv
bihkZXNjKTsKKyAgICBzZXRGb250RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOwogICAgIGZvbnRD
YXNjYWRlKCkudXBkYXRlKGN1cnJlbnRGb250U2VsZWN0b3IpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMTg5MjA2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY5OSw3ICs2OTksNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUoKSBjb25zdDsKICAgICBXRUJDT1JFX0VY
UE9SVCBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdDsKLSAgICBXRUJDT1JF
X0VYUE9SVCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbigpIGNvbnN0OwogICAgIGZsb2F0IHNwZWNpZmllZEZvbnRTaXplKCkgY29uc3Q7CiAg
ICAgZmxvYXQgY29tcHV0ZWRGb250U2l6ZSgpIGNvbnN0OwogICAgIGludCBmb250U2l6ZSgpIGNv
bnN0OwpAQCAtMTMzNCw3ICsxMzM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2xlYXIoRUNs
ZWFyIHYpIHsgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldENsZWFyKHYpOyB9CiAgICAgdm9pZCBzZXRU
YWJsZUxheW91dChFVGFibGVMYXlvdXQgdikgeyBub25pbmhlcml0ZWRfZmxhZ3Muc2V0VGFibGVM
YXlvdXQodik7IH0KIAotICAgIGJvb2wgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpOworICAgIGJvb2wgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mKTsKICAgICAvLyBPbmx5IHVzZWQgZm9yIGJsZW5kaW5nIGZvbnQgc2l6ZXMg
d2hlbiBhbmltYXRpbmcsIGZvciBNYXRoTUwgYW5vbnltb3VzIGJsb2NrcywgYW5kIGZvciB0ZXh0
IGF1dG9zaXppbmcuCiAgICAgdm9pZCBzZXRGb250U2l6ZShmbG9hdCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNw
cAkocmV2aXNpb24gMTg5MjA2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIHZv
aWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWwKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24oc3R5bGUuZm9udERl
c2NyaXB0aW9uKCkpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGUuZm9udERlc2Ny
aXB0aW9uKCk7CiAKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBiZXR0ZXIgaGFuZGxlIHRoZSBj
YXNlIHdoZW4gd2UgY29tcHV0ZSB2ZXJ5IHNtYWxsIGZvbnRzIGJlbG93IChiZWxvdyAxcHQpLgog
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNp
emVGcm9tU3BlY2lmaWVkU2l6ZUZvclNWR0lubGluZVRleHQoZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2NhbGluZ0ZhY3Rv
ciwgcmVuZGVyZXIuZG9jdW1lbnQoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDE4OTIwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyArMzQxLDcgQEAg
R2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpnbAogCiAgICAgLy8gU1ZHIGZv
bnQgY29udGV4dCBzZW5zaXRpdmUgc2VsZWN0aW9uIGZhaWxlZCBhbmQgdGhlcmUgaXMgbm8gZGVm
aW5lZCBtaXNzaW5nIGdseXBoLiBEcm9wIGRvd24gdG8gYSBkZWZhdWx0IGZvbnQuCiAgICAgLy8g
VGhlIGJlaGF2aW9yIGRvZXMgbm90IHNlZW0gdG8gYmUgc3BlY2lmaWVkLiBGb3Igc2ltcGxpY2l0
eSB3ZSBkb24ndCB0cnkgdG8gcmVzb2x2ZSBmb250IGZhbGxiYWNrcyBjb250ZXh0LXNlbnNpdGl2
ZWx5LgotICAgIEZvbnREZXNjcmlwdGlvbiBmYWxsYmFja0Rlc2NyaXB0aW9uID0gZm9udC5mb250
RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZhbGxiYWNrRGVzY3JpcHRpb24gPSBmb250LmZvbnRE
ZXNjcmlwdGlvbigpOwogICAgIGZhbGxiYWNrRGVzY3JpcHRpb24uc2V0RmFtaWxpZXMoVmVjdG9y
PEF0b21pY1N0cmluZz4geyBzYW5zU2VyaWZGYW1pbHkgfSk7CiAgICAgRm9udENhc2NhZGUgZmFs
bGJhY2tGb250KGZhbGxiYWNrRGVzY3JpcHRpb24sIGZvbnQubGV0dGVyU3BhY2luZygpLCBmb250
LndvcmRTcGFjaW5nKCkpOwogICAgIGZhbGxiYWNrRm9udC51cGRhdGUoZm9udC5mb250U2VsZWN0
b3IoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9y
RG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxODkyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcg
QEAgUmVmPFJlbmRlclN0eWxlPiByZXNvbHZlRm9yRG9jdW1lbnQoY29ucwogICAgIGRvY3VtZW50
U3R5bGUuZ2V0KCkuc2V0UlRMT3JkZXJpbmcoZG9jdW1lbnQudmlzdWFsbHlPcmRlcmVkKCkgPyBW
aXN1YWxPcmRlciA6IExvZ2ljYWxPcmRlcik7CiAgICAgZG9jdW1lbnRTdHlsZS5nZXQoKS5zZXRa
b29tKCFkb2N1bWVudC5wcmludGluZygpID8gcmVuZGVyVmlldy5mcmFtZSgpLnBhZ2Vab29tRmFj
dG9yKCkgOiAxKTsKICAgICBkb2N1bWVudFN0eWxlLmdldCgpLnNldFBhZ2VTY2FsZVRyYW5zZm9y
bShyZW5kZXJWaWV3LmZyYW1lKCkuZnJhbWVTY2FsZUZhY3RvcigpKTsKLSAgICBGb250RGVzY3Jp
cHRpb24gZG9jdW1lbnRGb250RGVzY3JpcHRpb24gPSBkb2N1bWVudFN0eWxlLmdldCgpLmZvbnRE
ZXNjcmlwdGlvbigpOworICAgIGF1dG8gZG9jdW1lbnRGb250RGVzY3JpcHRpb24gPSBkb2N1bWVu
dFN0eWxlLmdldCgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGRvY3VtZW50Rm9udERlc2NyaXB0
aW9uLnNldExvY2FsZShkb2N1bWVudC5jb250ZW50TGFuZ3VhZ2UoKSk7CiAgICAgZG9jdW1lbnRT
dHlsZS5nZXQoKS5zZXRGb250RGVzY3JpcHRpb24oV1RGOjptb3ZlKGRvY3VtZW50Rm9udERlc2Ny
aXB0aW9uKSk7CiAKQEAgLTk4LDcgKzk4LDcgQEAgUmVmPFJlbmRlclN0eWxlPiByZXNvbHZlRm9y
RG9jdW1lbnQoY29ucwogCiAgICAgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdzID0gcmVuZGVyVmll
dy5mcmFtZSgpLnNldHRpbmdzKCk7CiAKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRMb2NhbGUoZG9jdW1lbnQuY29udGVudExhbmd1YWdlKCkpOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLmZvbnRSZW5kZXJpbmdN
b2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoc3RhbmRhcmRGYW1pbHkp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260998</attachid>
            <date>2015-09-11 02:53:50 -0700</date>
            <delta_ts>2015-09-11 03:55:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fontdescription-split-2.patch</filename>
            <type>text/plain</type>
            <size>94993</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE1LTA5LTEwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBGb250RGVzY3JpcHRp
b24gaW50byBsb3dlciBhbmQgaGlnaGVyIGxldmVsIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkwMzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgRm9udERlc2NyaXB0aW9uIGlz
IHVzZWQgdGhyb3VnaCB0aGUgdGV4dCBzdWJzeXN0ZW0uIEhvd2V2ZXIgbXVjaCBvZiB0aGUgZGF0
YSBpdAorICAgICAgICBjYXJyaWVzIGlzIG9ubHkgbmVlZGVkIGJ5IEZvbnRDYXNjYWRlIGFuZCB0
ZXh0IGxheW91dCBidXQgbm90IGJ5IHRoZSBsb3dlciBsZXZlbCBGb250L0ZvbnRDYWNoZQorICAg
ICAgICBsYXllci4gVGhpcyBtYWtlcyBjb2RlIGNvbmZ1c2luZy4gRm9yIGV4YW1wbGUgZmFtaWxp
ZXMgc3BlY2lmaWVkIGluIEZvbnREZXNjcmlwdGlvbiBhcmUgaWdub3JlZAorICAgICAgICBhdCBs
b3dlciBsZXZlbHMuCisKKyAgICAgICAgU3BsaXQgaXQgaW50byBhIGxvdyBsZXZlbCBGb250RGVz
Y3JpcHRpb24gYW5kIGEgaGlnaCBsZXZlbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uIHR5cGU6CisK
KyAgICAgICAgRm9udERlc2NyaXB0aW9uIDwtPiBGb250CisgICAgICAgIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gPC0+IEZvbnRDYXNjYWRlCisKKyAgICAgICAgVGhlIGZvcm1lciBvbmx5IGNhcnJp
ZXMgaW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWQgdG8gaW5zdGFudGlhdGUgYSBGb250IG9yIGZl
dGNoIGl0IGZyb20gdGhlIEZvbnRDYWNoZS4KKyAgICAgICAgVGhlIGxhdHRlciBoYXMgYWRkaXRp
b25hbCBkYXRhIGZvciBDU1MgZm9udCBjYXNjYWRlIHNlbWFudGljcyBhbmQgb3RoZXIgaGlnaGVy
IGxldmVsIGZlYXR1cmVzLgorCiAyMDE1LTA5LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgTm9kZS5hcHBlbmRDaGlsZChudWxsKSAvIHJlcGxhY2VDaGlsZChu
dWxsLCBudWxsKSAvIHJlbW92ZUNoaWxkKG51bGwpIC8gaW5zZXJ0QmVmb3JlKG51bGwsIHJlZikg
c2hvdWxkIHRocm93IGEgVHlwZUVycm9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3MjQsMjAgKzI3MjQsMjAgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRl
ZFN0eWxlRXh0cmFjdG9yOgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNtb290
aGluZzoKICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpLmZvbnRTbW9vdGhpbmcoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRGb250VmFyaWFudExpZ2F0dXJlczogewotICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IHN0eWxlLT5mb250
RGVzY3JpcHRpb24oKS5jb21tb25MaWdhdHVyZXNTdGF0ZSgpOwotICAgICAgICAgICAgRm9udERl
c2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKCk7Ci0g
ICAgICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGhpc3RvcmljYWxMaWdh
dHVyZXNTdGF0ZSA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5oaXN0b3JpY2FsTGlnYXR1cmVz
U3RhdGUoKTsKLSAgICAgICAgICAgIGlmIChjb21tb25MaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVz
Y3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlICYmIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNT
dGF0ZSA9PSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlCi0gICAgICAgICAg
ICAgICAgJiYgaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID09IEZvbnREZXNjcmlwdGlvbjo6Tm9y
bWFsTGlnYXR1cmVzU3RhdGUpCisgICAgICAgICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpM
aWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5jb21tb25MaWdhdHVyZXNTdGF0ZSgpOworICAgICAgICAgICAgRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpOworICAg
ICAgICAgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgaGlzdG9yaWNh
bExpZ2F0dXJlc1N0YXRlID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmhpc3RvcmljYWxMaWdh
dHVyZXNTdGF0ZSgpOworICAgICAgICAgICAgaWYgKGNvbW1vbkxpZ2F0dXJlc1N0YXRlID09IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlICYmIGRpc2NyZXRpb25h
cnlMaWdhdHVyZXNTdGF0ZSA9PSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVy
ZXNTdGF0ZQorICAgICAgICAgICAgICAgICYmIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9PSBG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
cm1hbCk7CiAKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlTGlzdCA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICAgICAgICAgIGlmIChjb21t
b25MaWdhdHVyZXNTdGF0ZSAhPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRl
KQotICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoY29tbW9uTGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9uOjpE
aXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0NvbW1vbkxpZ2F0dXJlcyA6IENTU1Zh
bHVlQ29tbW9uTGlnYXR1cmVzKSk7Ci0gICAgICAgICAgICBpZiAoZGlzY3JldGlvbmFyeUxpZ2F0
dXJlc1N0YXRlICE9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpCi0gICAg
ICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9uOjpE
aXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0Rpc2NyZXRpb25hcnlMaWdhdHVyZXMg
OiBDU1NWYWx1ZURpc2NyZXRpb25hcnlMaWdhdHVyZXMpKTsKLSAgICAgICAgICAgIGlmIChoaXN0
b3JpY2FsTGlnYXR1cmVzU3RhdGUgIT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNT
dGF0ZSkKLSAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVzY3Jp
cHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vSGlzdG9yaWNhbExpZ2F0
dXJlcyA6IENTU1ZhbHVlSGlzdG9yaWNhbExpZ2F0dXJlcykpOworICAgICAgICAgICAgaWYgKGNv
bW1vbkxpZ2F0dXJlc1N0YXRlICE9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0
dXJlc1N0YXRlKQorICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9v
bC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY29tbW9uTGlnYXR1cmVzU3RhdGUgPT0gRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSA/IENTU1ZhbHVlTm9Db21tb25M
aWdhdHVyZXMgOiBDU1NWYWx1ZUNvbW1vbkxpZ2F0dXJlcykpOworICAgICAgICAgICAgaWYgKGRp
c2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSAhPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3Jt
YWxMaWdhdHVyZXNTdGF0ZSkKKyAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NW
YWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0
ZSA9PSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NT
VmFsdWVOb0Rpc2NyZXRpb25hcnlMaWdhdHVyZXMgOiBDU1NWYWx1ZURpc2NyZXRpb25hcnlMaWdh
dHVyZXMpKTsKKyAgICAgICAgICAgIGlmIChoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgIT0gRm9u
dENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpCisgICAgICAgICAgICAg
ICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSho
aXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPT0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6RGlzYWJs
ZWRMaWdhdHVyZXNTdGF0ZSA/IENTU1ZhbHVlTm9IaXN0b3JpY2FsTGlnYXR1cmVzIDogQ1NTVmFs
dWVIaXN0b3JpY2FsTGlnYXR1cmVzKSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWVMaXN0Owog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlaSW5kZXg6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MCw3
ICs1OTAsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YmVnaW5Mb2FkVGltZXJGaXJlCiAgICAg
ICAgIG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLmNoZWNrTG9hZENvbXBsZXRlKCk7CiB9
CiAKLWJvb2wgQ1NTRm9udFNlbGVjdG9yOjpyZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uKSBjb25zdAorYm9vbCBDU1NGb250U2VsZWN0b3I6OnJlc29s
dmVzRmFtaWx5Rm9yKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKSBj
b25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXNjcmlwdGlvbi5mYW1pbHlD
b3VudCgpOyArK2kpIHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lID0g
ZGVzY3JpcHRpb24uZmFtaWx5QXQoaSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxl
Y3Rvci5oCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNl
bGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAgY2xhc3MgQ1NTRm9udEZh
Y2VSdWxlOwogY2xhc3MgQ1NTU2VnbWVudGVkRm9udEZhY2U7CiBjbGFzcyBDYWNoZWRGb250Owog
Y2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBTdHlsZVJ1bGVG
b250RmFjZTsKIAogY2xhc3MgQ1NTRm9udFNlbGVjdG9yIGZpbmFsIDogcHVibGljIEZvbnRTZWxl
Y3RvciB7CkBAIC02Myw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Rm9udD4gZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgc2l6ZV90KSBvdmVy
cmlkZTsKICAgICBDU1NTZWdtZW50ZWRGb250RmFjZSogZ2V0Rm9udEZhY2UoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOwogCi0gICAgdmlydHVhbCBi
b29sIHJlc29sdmVzRmFtaWx5Rm9yKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNsZWFyRG9jdW1lbnQo
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDE4OTU3OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjUx
LDcgKzY2NTEsNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Gb250KGJvb2wgaW1wCiAg
ICAgQVNTRVJUKHN5c3RlbUZvbnRJRCA+PSBDU1NWYWx1ZUNhcHRpb24gJiYgc3lzdGVtRm9udElE
IDw9IENTU1ZhbHVlU3RhdHVzQmFyKTsKICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogCi0gICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5
c3RlbUZvbnQoc3lzdGVtRm9udElELCBmb250RGVzY3JpcHRpb24pOwogICAgIGlmICghZm9udERl
c2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAkocmV2aXNpb24g
MTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQzOCwxOCArMzQzOCwxOCBAQCB0ZW1wbGF0ZTw+IGlubGlu
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlCiAgICAgcmV0dXJuIFBFX0FMTDsKIH0KIAotdGVtcGxh
dGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEZvbnREZXNj
cmlwdGlvbjo6S2VybmluZyBrZXJuaW5nKQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Oktlcm5pbmcg
a2VybmluZykKICAgICA6IENTU1ZhbHVlKFByaW1pdGl2ZUNsYXNzKQogewogICAgIG1fcHJpbWl0
aXZlVW5pdFR5cGUgPSBDU1NfVkFMVUVfSUQ7CiAgICAgc3dpdGNoIChrZXJuaW5nKSB7Ci0gICAg
Y2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOgorICAgIGNhc2UgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1Zh
bHVlQXV0bzsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb3Jt
YWxLZXJuaW5nOgorICAgIGNhc2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsS2Vybmlu
ZzoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVOb3JtYWw7CiAgICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9uZUtlcm5pbmc6CisgICAgY2FzZSBG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb25lS2VybmluZzoKICAgICAgICAgbV92YWx1ZS52YWx1
ZUlEID0gQ1NTVmFsdWVOb25lOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ1OCwyMyAr
MzQ1OCwyMyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTCiAgICAg
bV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBdXRvOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBD
U1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9udERlc2NyaXB0aW9uOjpLZXJuaW5nKCkgY29u
c3QKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpLZXJuaW5nKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNWYWx1ZUlE
KCkpOwogCiAgICAgc3dpdGNoIChtX3ZhbHVlLnZhbHVlSUQpIHsKICAgICBjYXNlIENTU1ZhbHVl
QXV0bzoKLSAgICAgICAgcmV0dXJuIEZvbnREZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc7CisgICAg
ICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpBdXRvS2VybmluZzsKICAgICBjYXNl
IENTU1ZhbHVlTm9ybWFsOgotICAgICAgICByZXR1cm4gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxL
ZXJuaW5nOworICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsS2Vy
bmluZzsKICAgICBjYXNlIENTU1ZhbHVlTm9uZToKLSAgICAgICAgcmV0dXJuIEZvbnREZXNjcmlw
dGlvbjo6Tm9uZUtlcm5pbmc7CisgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9u
OjpOb25lS2VybmluZzsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRm9udERlc2NyaXB0aW9uOjpBdXRv
S2VybmluZzsKKyAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc7
CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVW
YWx1ZShPYmplY3RGaXQgZml0KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRl
ckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJD
dXN0b20uaAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVp
bGRlckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNyArNjkzLDcgQEAgaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbAogewogICAgIGF1dG8mIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICAKLSAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRMb2Nh
bGUobnVsbEF0b20pOwogICAgIGVsc2UKQEAgLTgyMyw4ICs4MjMsOCBAQCBpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiAKIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbml0aWFsRm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
KQogewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgIEZvbnREZXNjcmlwdGlvbiBpbml0aWFs
RGVzYyA9IEZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGluaXRpYWxE
ZXNjID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbigpOwogCiAgICAgLy8gV2UgbmVlZCB0byBhZGp1
c3QgdGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9t
IG1vbm9zcGFjZSB0byBub24tbW9ub3NwYWNlLgogICAgIGlmIChmb250RGVzY3JpcHRpb24udXNl
Rml4ZWREZWZhdWx0U2l6ZSgpKSB7CkBAIC04MzksOCArODM5LDggQEAgaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaQogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdEZvbnRGYW1pbHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikK
IHsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9u
dERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHls
ZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogCiAgICAgZm9udERl
c2NyaXB0aW9uLnNldEZhbWlsaWVzKHBhcmVudEZvbnREZXNjcmlwdGlvbi5mYW1pbGllcygpKTsK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNTcGVjaWZpZWRGb250KHBhcmVudEZvbnREZXNjcmlw
dGlvbi5pc1NwZWNpZmllZEZvbnQoKSk7CkBAIC04NTEsNyArODUxLDcgQEAgaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbAogewogICAgIGF1dG8mIHZhbHVlTGlzdCA9IGRv
d25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpOwogCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNj
cmlwdGlvbigpOwogICAgIC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHBy
b3BlcnR5LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgogICAgIGJvb2wgb2xk
RmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZh
dWx0U2l6ZSgpOwogCkBAIC0xMjQyLDE0ICsxMjQyLDE0IEBAIGlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWwKIAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxGb250V2VpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0g
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERl
c2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZv
bnREZXNjcmlwdGlvbigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdo
dE5vcm1hbCk7CiAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKIH0KIAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVy
aXRGb250V2VpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9u
KCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlw
dGlvbigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoc3R5bGVSZXNvbHZlci5wYXJl
bnRGb250RGVzY3JpcHRpb24oKS53ZWlnaHQoKSk7CiAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKIH0KQEAgLTEyNTcsNyArMTI1Nyw3IEBAIGlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmgKIGlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRXZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKLSAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBh
dXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICBjYXNlIENTU1Zh
bHVlSW52YWxpZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzkwLDE5ICsx
MzkwLDE5IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWwKIAogaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRGb250VmFyaWFu
dExpZ2F0dXJlcyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQogewotICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigp
OworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRp
b24oKTsKIAotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShGb250
RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKLSAgICBmb250RGVzY3JpcHRpb24u
c2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGln
YXR1cmVzU3RhdGUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3JpY2FsTGlnYXR1cmVz
U3RhdGUoRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246
Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0RGlzY3JldGlv
bmFyeUxpZ2F0dXJlc1N0YXRlKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJl
c1N0YXRlKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRl
KEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKIAogICAgIHN0
eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKIGlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0V2Via2l0Rm9udFZhcmlh
bnRMaWdhdHVyZXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAgICBjb25zdCBG
b250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIucGFy
ZW50Rm9udERlc2NyaXB0aW9uKCk7Ci0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgYXV0byYgcGFy
ZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24o
KTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0
aW9uKCk7CiAKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUocGFy
ZW50Rm9udERlc2NyaXB0aW9uLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpOwogICAgIGZvbnREZXNj
cmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUocGFyZW50Rm9udERlc2NyaXB0
aW9uLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpKTsKQEAgLTE0MTMsMzAgKzE0MTMsMzAg
QEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaAogCiBpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRGb250VmFyaWFudExpZ2F0dXJl
cyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAg
Rm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZv
bnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7Ci0gICAgRm9udERlc2NyaXB0aW9u
OjpMaWdhdHVyZXNTdGF0ZSBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3Jp
cHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwotICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1
cmVzU3RhdGUgaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3Jt
YWxMaWdhdHVyZXNTdGF0ZTsKKyAgICBhdXRvIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CisgICAgYXV0byBkaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdh
dHVyZXNTdGF0ZTsKKyAgICBhdXRvIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwogCiAgICAgaWYgKGlzPENTU1Zh
bHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENT
U1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVOb0NvbW1vbkxpZ2F0dXJlczoKLSAgICAgICAgICAgICAgICBjb21tb25MaWdh
dHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAg
ICAgICAgICAgICAgICBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICAgICAgICAgIGNv
bW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3Rh
dGU7CisgICAgICAgICAgICAgICAgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9EaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgotICAg
ICAgICAgICAgICAgIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlv
bjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgICAgICAgICBkaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzU3RhdGUgPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJl
c1N0YXRlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZURpc2NyZXRpb25hcnlMaWdhdHVyZXM6Ci0gICAgICAgICAgICAgICAgZGlzY3JldGlvbmFyeUxp
Z2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU7Cisg
ICAgICAgICAgICAgICAgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vSGlzdG9yaWNhbExpZ2F0dXJlczoKLSAgICAg
ICAgICAgICAgICBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246OkRp
c2FibGVkTGlnYXR1cmVzU3RhdGU7CisgICAgICAgICAgICAgICAgaGlzdG9yaWNhbExpZ2F0dXJl
c1N0YXRlID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVIaXN0b3Jp
Y2FsTGlnYXR1cmVzOgotICAgICAgICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9
IEZvbnREZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOworICAgICAgICAgICAgICAg
IGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkVuYWJs
ZWRMaWdhdHVyZXNTdGF0ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDQ2LDcg
KzE0NDYsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiAgICAg
fSBlbHNlCiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCk7CiAKLSAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBh
dXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKGNvbW1vbkxpZ2F0dXJl
c1N0YXRlKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0
YXRlKGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUpOwpAQCAt
MTQ1NSw3ICsxNDU1LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bAogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRTaXpl
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpOwogICAgIGZsb2F0IHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3Jk
KENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBz
dHlsZVJlc29sdmVyLmRvY3VtZW50KCkpOwogCiAgICAgaWYgKHNpemUgPCAwKQpAQCAtMTQ2OCwx
MyArMTQ2OCwxMyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pCiAK
IGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFNpemUoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24m
IHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9u
dERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgYXV0byYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICBmbG9h
dCBzaXplID0gcGFyZW50Rm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKTsKIAogICAgIGlm
IChzaXplIDwgMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNj
cmlwdGlvbigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShwYXJlbnRGb250
RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSk7CiAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250U2l6
ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwogICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CkBAIC0xNTE2LDcgKzE1MTYsNyBAQCBpbmxpbmUgZmxv
YXQgU3R5bGVCdWlsZGVyQ3VzdG9tOjpkZXRlcm1pCiAKIGlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFs
dWVJbnZhbGlkKTsKIAogICAgIGZsb2F0IHBhcmVudFNpemUgPSAwOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzk5LDExICsxMzk5
LDExIEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UoUmUKICAgICBOb25D
SktHbHlwaE9yaWVudGF0aW9uIGdseXBoT3JpZW50YXRpb247CiAgICAgc3R5bGUtPmdldEZvbnRB
bmRHbHlwaE9yaWVudGF0aW9uKGZvbnRPcmllbnRhdGlvbiwgZ2x5cGhPcmllbnRhdGlvbik7CiAK
LSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsKKyAgICBjb25zdCBhdXRvJiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigp
ID09IGZvbnRPcmllbnRhdGlvbiAmJiBmb250RGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRh
dGlvbigpID09IGdseXBoT3JpZW50YXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEZvbnRE
ZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICBhdXRv
IG5ld0ZvbnREZXNjcmlwdGlvbiA9IGZvbnREZXNjcmlwdGlvbjsKICAgICBuZXdGb250RGVzY3Jp
cHRpb24uc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihnbHlwaE9yaWVudGF0aW9uKTsKICAgICBu
ZXdGb250RGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24oZm9udE9yaWVudGF0aW9uKTsKICAgICBz
dHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CkBAIC0xOTU4LDcg
KzE5NTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1CiAgICAg
aWYgKHN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKSk7CisgICAgYXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBzdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgaWYgKCFzdHlsZS0+dGV4dFNpemVBZGp1c3QoKS5pc05vbmUoKSkKICAg
ICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRp
b24uc3BlY2lmaWVkU2l6ZSgpICogc3R5bGUtPnRleHRTaXplQWRqdXN0KCkubXVsdGlwbGllcigp
KTsKICAgICBlbHNlCkBAIC0xOTc1LDIwICsxOTc1LDIwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
Y2hlY2tGb3Jab29tQ2hhbmdlKFIKICAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA9PSBw
YXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICYmIHN0eWxlLT50ZXh0Wm9vbSgpID09IHBhcmVu
dFN0eWxlLT50ZXh0Wm9vbSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBGb250
RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7CisgICAgY29uc3QgYXV0
byYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gbmV3Rm9u
dERlc2NyaXB0aW9uID0gY2hpbGRGb250OwogICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlw
dGlvbiwgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSk7CiAgICAgc3R5bGUtPnNldEZvbnREZXNj
cmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNo
ZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSkKIHsKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBjb25zdCBhdXRvJiBjaGlsZEZvbnQgPSBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAKICAgICBpZiAoY2hpbGRGb250LmlzQWJzb2x1dGVT
aXplKCkgfHwgIXBhcmVudFN0eWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBGb250
RGVzY3JpcHRpb24mIHBhcmVudEZvbnQgPSBwYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgY29uc3QgYXV0byYgcGFyZW50Rm9udCA9IHBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRp
b24oKTsKICAgICBpZiAoY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSA9PSBwYXJlbnRG
b250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIFdlIGtu
b3cgdGhlIHBhcmVudCBpcyBtb25vc3BhY2Ugb3IgdGhlIGNoaWxkIGlzIG1vbm9zcGFjZSwgYW5k
IHRoYXQgZm9udApAQCAtMjAwOCwxNCArMjAwOCwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNo
ZWNrRm9yR2VuZXJpY0ZhbWlsCiAgICAgICAgICAgICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNp
emUoKSAqIGZpeGVkU2NhbGVGYWN0b3I7CiAgICAgfQogCi0gICAgRm9udERlc2NyaXB0aW9uIG5l
d0ZvbnREZXNjcmlwdGlvbihjaGlsZEZvbnQpOworICAgIGF1dG8gbmV3Rm9udERlc2NyaXB0aW9u
ID0gY2hpbGRGb250OwogICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7
CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQog
CiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqIHNldHRp
bmdzKQogewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgaWYgKHNldHRpbmdzKQogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRl
cmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShzdGFuZGFyZEZh
bWlseSk7CkBAIC0yMDI0LDcgKzIwMjQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxp
emVGb250U3R5bGUoCiAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXpl
KEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKIHsK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKICAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNp
ZmllZFNpemUoc2l6ZSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHVzZVNWR1pv
b21SdWxlcygpLCBtX3N0YXRlLnN0eWxlKCksIGRvY3VtZW50KCkpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZvbnQoKTsKICAgICB2b2lkIGluaXRpYWxpemVGb250U3R5
bGUoU2V0dGluZ3MqKTsKIAotICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiwg
ZmxvYXQgc2l6ZSk7CisgICAgdm9pZCBzZXRGb250U2l6ZShGb250Q2FzY2FkZURlc2NyaXB0aW9u
JiwgZmxvYXQgc2l6ZSk7CiAKIHB1YmxpYzoKICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpOwpA
QCAtMzkyLDkgKzM5Miw5IEBAIHB1YmxpYzoKICAgICAgICAgRmlsbExheWVyIGJhY2tncm91bmRE
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YTsgfQogICAgICAgICBDb2xvciBi
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQogCi0g
ICAgICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4g
bV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3BhcmVudFN0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsgfQotICAgICAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQorICAgICAgICBjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsgfQorICAgICAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3BhcmVudFN0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsgfQorICAgICAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0g
bV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KICAgICAgICAg
dm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS0+c2V0Wm9vbShm
KTsgfQogICAgICAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0
eSB8PSBtX3N0eWxlLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9CiAgICAgICAgIHZvaWQgc2V0V3Jp
dGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9mb250RGlydHkgfD0gbV9zdHls
ZS0+c2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9CkBAIC00NTUsOSArNDU1LDkgQEAgcHVi
bGljOgogCiAgICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVNYXAoKSB7IHJldHVybiAmbV9zdHlsZU1h
cDsgfQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBlcnMo
KSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7IH0KLSAgICBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RhdGUuZm9udERlc2NyaXB0
aW9uKCk7IH0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlv
bigpIHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICB2b2lk
IHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikgeyBtX3N0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CisgICAg
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4g
bV9zdGF0ZS5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Rm9u
dERlc2NyaXB0aW9uKCk7IH0KKyAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9zdGF0ZS5zZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQogICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7
IG1fc3RhdGUuc2V0Wm9vbShmKTsgfQogICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBm
KSB7IG1fc3RhdGUuc2V0RWZmZWN0aXZlWm9vbShmKTsgfQogICAgIHZvaWQgc2V0V3JpdGluZ01v
ZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5zZXRXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwJKHJldmlzaW9uIDE4OTU3OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAkod29ya2luZyBjb3B5KQpAQCAtNzA5
LDggKzcwOSw4IEBAIHN1YiBnZW5lcmF0ZUluaXRpYWxWYWx1ZVNldHRlciB7CiAgIH0gZWxzaWYg
KGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiQW5pbWF0
aW9uUHJvcGVydHkifSkgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRlQW5pbWF0aW9u
UHJvcGVydHlJbml0aWFsVmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQgLiAiICAgICIpOwogICB9
IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17
IkZvbnRQcm9wZXJ0eSJ9KSB7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2Ny
aXB0aW9uKCk7XG4iOwotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZvbnRE
ZXNjcmlwdGlvbi4iIC4gJHNldHRlciAuICIoRm9udERlc2NyaXB0aW9uOjoiIC4gJGluaXRpYWwg
LiAiKCkpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBhdXRvIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7XG4iOworICAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZvbnREZXNjcmlwdGlvbi4iIC4gJHNl
dHRlciAuICIoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6IiAuICRpbml0aWFsIC4gIigpKTtcbiI7
CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgc3R5bGVSZXNvbHZlci5zZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTtcbiI7CiAgIH0gZWxzaWYgKGV4aXN0cyAk
cHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiRmlsbExheWVyUHJvcGVy
dHkifSkgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlJ
bml0aWFsVmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQgLiAiICAgICIpOwpAQCAtNzUzLDcgKzc1
Myw3IEBAIHN1YiBnZW5lcmF0ZUluaGVyaXRWYWx1ZVNldHRlciB7CiAgICAgJHNldHRlckNvbnRl
bnQgLj0gZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eUluaGVyaXRWYWx1ZVNldHRlcigkbmFtZSwg
JGluZGVudCAuICIgICAgIik7CiAgICAgJGRpZENhbGxTZXRWYWx1ZSA9IDE7CiAgIH0gZWxzaWYg
KGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiRm9udFBy
b3BlcnR5In0pIHsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24o
KTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0byBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpO1xuIjsKICAgICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBmb250RGVzY3JpcHRpb24uIiAuICRzZXR0ZXIg
LiAiKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuIiAuICRnZXR0ZXIgLiAi
KCkpO1xuIjsKICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29s
dmVyLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pO1xuIjsKICAgICAkZGlkQ2Fs
bFNldFZhbHVlID0gMTsKQEAgLTgwNyw3ICs4MDcsNyBAQCBzdWIgZ2VuZXJhdGVWYWx1ZVNldHRl
ciB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eVZhbHVl
U2V0dGVyKCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsKICAgICAkZGlkQ2FsbFNldFZhbHVlID0g
MTsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7
JG5hbWV9eyJGb250UHJvcGVydHkifSkgewotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZv
bnREZXNjcmlwdGlvbigpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7
XG4iOwogICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZvbnREZXNjcmlwdGlv
bi4iIC4gJHNldHRlciAuICIoIiAuICRjb252ZXJ0ZWRWYWx1ZSAuICIpO1xuIjsKICAgICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pO1xuIjsKICAgICAkZGlkQ2FsbFNldFZhbHVlID0gMTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAwLDcgKzMwMCw3IEBAIGlubGluZSBGb250TWV0cmljcyBDYW52YXNSZW5kZXJpbmdDb250ZXgK
ICAgICByZXR1cm4gbV9mb250LmZvbnRNZXRyaWNzKCk7CiB9CiAKLWlubGluZSBjb25zdCBGb250
RGVzY3JpcHRpb24mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5Ojpmb250RGVz
Y3JpcHRpb24oKSBjb25zdAoraW5saW5lIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5Ojpmb250RGVzY3JpcHRpb24oKSBjb25z
dAogewogICAgIHJldHVybiBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiB9CkBAIC0yMDkzLDcg
KzIwOTMsNyBAQCBTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmb250KCkgCiAgICAg
ICAgIHJldHVybiBkZWZhdWx0Rm9udDsKIAogICAgIFN0cmluZ0J1aWxkZXIgc2VyaWFsaXplZEZv
bnQ7Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZSgp
LmZvbnQuZm9udERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgYXV0byYgZm9udERlc2NyaXB0aW9u
ID0gc3RhdGUoKS5mb250LmZvbnREZXNjcmlwdGlvbigpOwogCiAgICAgaWYgKGZvbnREZXNjcmlw
dGlvbi5pdGFsaWMoKSkKICAgICAgICAgc2VyaWFsaXplZEZvbnQuYXBwZW5kTGl0ZXJhbCgiaXRh
bGljICIpOwpAQCAtMjE1Miw3ICsyMTUyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnNldEZvbnQoYwogICAgIGlmIChSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZSA9IGNhbnZh
cygpLT5jb21wdXRlZFN0eWxlKCkpCiAgICAgICAgIG5ld1N0eWxlLT5zZXRGb250RGVzY3JpcHRp
b24oY29tcHV0ZWRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpOwogICAgIGVsc2UgewotICAgICAg
ICBGb250RGVzY3JpcHRpb24gZGVmYXVsdEZvbnREZXNjcmlwdGlvbjsKKyAgICAgICAgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiBkZWZhdWx0Rm9udERlc2NyaXB0aW9uOwogICAgICAgICBkZWZhdWx0
Rm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShkZWZhdWx0Rm9udEZhbWlseSk7CiAgICAgICAg
IGRlZmF1bHRGb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShkZWZhdWx0Rm9udFNpemUp
OwogICAgICAgICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShkZWZhdWx0
Rm9udFNpemUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDUsNyArMjQ1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCByZWFsaXplZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9udC5mb250U2VsZWN0b3IoKTsgfQogICAgICAgICB2b2lkIGlu
aXRpYWxpemUoRm9udFNlbGVjdG9yJiwgUmVuZGVyU3R5bGUmKTsKICAgICAgICAgRm9udE1ldHJp
Y3MgZm9udE1ldHJpY3MoKSBjb25zdDsKLSAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24oKSBjb25zdDsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3Q7CiAgICAgICAgIGZsb2F0IHdpZHRoKGNvbnN0
IFRleHRSdW4mKSBjb25zdDsKICAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVGhlbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVt
ZS5oCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICAvLyBNZXRob2Rz
IHVzZWQgdG8gYWRqdXN0IHRoZSBSZW5kZXJTdHlsZXMgb2YgY29udHJvbHMuCiAgICAgCiAgICAg
Ly8gVGhlIGZvbnQgZGVzY3JpcHRpb24gcmVzdWx0IHNob3VsZCBoYXZlIGEgem9vbWVkIGZvbnQg
c2l6ZS4KLSAgICB2aXJ0dWFsIE9wdGlvbmFsPEZvbnREZXNjcmlwdGlvbj4gY29udHJvbEZvbnQo
Q29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNv
bnN0IHsgcmV0dXJuIE51bGxvcHQ7IH0KKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24+IGNvbnRyb2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYs
IGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25zdCB7IHJldHVybiBOdWxsb3B0OyB9CiAgICAgCiAg
ICAgLy8gVGhlIHNpemUgaGVyZSBpcyBpbiB6b29tZWQgY29vcmRpbmF0ZXMgYWxyZWFkeS4gSWYg
YSBuZXcgc2l6ZSBpcyByZXR1cm5lZCwgaXQgYWxzbyBuZWVkcyB0byBiZSBpbiB6b29tZWQgY29v
cmRpbmF0ZXMuCiAgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRyb2xQYXJ0
LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0
IC8qem9vbUZhY3RvciovKSBjb25zdCB7IHJldHVybiB6b29tZWRTaXplOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJldmlzaW9u
IDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEZvbnRDYWNoZTo6aW52
YWxpZGF0ZSgpCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCi1SZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQorUmVmUHRyPEZvbnQ+IEZv
bnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWlj
U3RyaW5nJikKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCShyZXZpc2lvbiAxODk1NzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTcxLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNT
dHJpbmcmLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBSZWY8Rm9udD4gbGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8Rm9udD4gZm9udEZvclBsYXRmb3JtRGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0gICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKICAg
ICB2b2lkIGFkZENsaWVudChGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChG
b250U2VsZWN0b3IqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgUmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250
cyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKK3N0YXRp
YyBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogY29uc3Qg
dWludDhfdCBGb250Q2FzY2FkZTo6c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0g
ewogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwKQEAgLTEwNyw3ICsxMDcsNyBAQCBGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoKQogewogfQog
Ci1Gb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmZCwgZmxv
YXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpCitGb250Q2FzY2FkZTo6Rm9udENh
c2NhZGUoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxldHRlclNwYWNp
bmcsIGZsb2F0IHdvcmRTcGFjaW5nKQogICAgIDogbV9mb250RGVzY3JpcHRpb24oZmQpCiAgICAg
LCBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCiAgICAgLCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3Bh
Y2luZykKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIGNsZWFyV2lkdGhDYWNoZXMoKQogICAgICAg
ICB2YWx1ZS0+Zm9udHMuZ2V0KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7CiB9CiAKLXN0YXRpYyBG
b250Q2FzY2FkZUNhY2hlS2V5IG1ha2VGb250Q2FzY2FkZUNhY2hlS2V5KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQorc3RhdGlj
IEZvbnRDYXNjYWRlQ2FjaGVLZXkgbWFrZUZvbnRDYXNjYWRlQ2FjaGVLZXkoY29uc3QgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9y
KQogewogICAgIEZvbnRDYXNjYWRlQ2FjaGVLZXkga2V5OwogICAgIGtleS5mb250RGVzY3JpcHRp
b25LZXkgPSBGb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRpb24pOwpAQCAtMjY5LDcgKzI2OSw3
IEBAIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCkKICAgICAgICAgZW50cnktPmZvbnRz
LT5wcnVuZVN5c3RlbUZhbGxiYWNrcygpOwogfQogCi1zdGF0aWMgUmVmPEZvbnRDYXNjYWRlRm9u
dHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCitzdGF0aWMg
UmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFJlZlB0cjxGb250U2VsZWN0b3I+
JiYgZm9udFNlbGVjdG9yKQogewogICAgIGF1dG8ga2V5ID0gbWFrZUZvbnRDYXNjYWRlQ2FjaGVL
ZXkoZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHJldmlzaW9uIDE4
OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiBjbGFzcyBGb250Q2Fz
Y2FkZSB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUoKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBs
ZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9u
dENhc2NhZGUoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIGZsb2F0IGxldHRlclNwYWNp
bmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIG9ubHkg
dXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5hdGl2ZSBmb250Lgog
ICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBG
b250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOwogCkBAIC0xMjUsNyArMTI1LDcgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2Fz
Y2FkZSYgb3RoZXIpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250Q2FzY2Fk
ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKLSAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERlc2NyaXB0aW9uOyB9CisgICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb247IH0KIAogICAgIGlu
dCBwaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBp
eGVsU2l6ZSgpOyB9CiAgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlw
dGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9CkBAIC0zMTgsMjQgKzMxOCwyNCBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChtX2ZvbnREZXNjcmlwdGlvbi5rZXJuaW5nKCkp
IHsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vbmVLZXJuaW5nOgorICAgICAgICBj
YXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vbmVLZXJuaW5nOgogICAgICAgICAgICAgZmVh
dHVyZXMgJj0gfktlcm5pbmc7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250
RGVzY3JpcHRpb246Ok5vcm1hbEtlcm5pbmc6CisgICAgICAgIGNhc2UgRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6Tm9ybWFsS2VybmluZzoKICAgICAgICAgICAgIGZlYXR1cmVzIHw9IEtlcm5pbmc7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9L
ZXJuaW5nOgorICAgICAgICBjYXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkF1dG9LZXJuaW5n
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKG1fZm9u
dERlc2NyaXB0aW9uLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBGb250
RGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU6CisgICAgICAgIGNhc2UgRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZToKICAgICAgICAgICAgIGZl
YXR1cmVzICY9IH5MaWdhdHVyZXM7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBG
b250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgY2FzZSBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU6CiAgICAgICAgICAgICBm
ZWF0dXJlcyB8PSBMaWdhdHVyZXM7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBG
b250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOgorICAgICAgICBjYXNlIEZvbnRD
YXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIApAQCAtMzQ0LDcgKzM0NCw3IEBAIHByaXZhdGU6CiAKICAgICBzdGF0
aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOwogCi0g
ICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOworICAgIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gbV9mb250RGVzY3JpcHRpb247CiAgICAgbXV0YWJsZSBSZWZQdHI8Rm9udENhc2Nh
ZGVGb250cz4gbV9mb250czsKICAgICBXZWFrUHRyRmFjdG9yeTxGb250Q2FzY2FkZT4gbV93ZWFr
UHRyRmFjdG9yeTsKICAgICBmbG9hdCBtX2xldHRlclNwYWNpbmc7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAko
cmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBGb250
Q2FzY2FkZUZvbnRzOjp+Rm9udENhc2NhZGVGb250cygpCiB7CiB9CiAKLXZvaWQgRm9udENhc2Nh
ZGVGb250czo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKK3ZvaWQgRm9udENhc2NhZGVGb250czo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9
IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICB1bnNpZ25lZCBu
dW1SYW5nZXMgPSBwcmltYXJ5UmFuZ2VzLnNpemUoKTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBib29s
IEZvbnRDYXNjYWRlRm9udHM6OmlzTG9hZGluZ0N1c3RvbUZvCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1zdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkJiBpbmRleCwgRm9udFNlbGVjdG9yKiBmb250
U2VsZWN0b3IpCitzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCYgaW5kZXgsIEZvbnRT
ZWxlY3RvciogZm9udFNlbGVjdG9yKQogewogICAgIEFTU0VSVChpbmRleCA8IGRlc2NyaXB0aW9u
LmZhbWlseUNvdW50KCkpOwogCkBAIC0xNTYsMTAgKzE1NiwxNCBAQCBzdGF0aWMgRm9udFJhbmdl
cyByZWFsaXplTmV4dEZhbGxiYWNrKGNvCiAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBU
cnkgdG8gZmluZCBhIHNpbWlsYXIgZm9udCB1c2luZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRn
ZSBhYm91dCBvdXIgcGxhdGZvcm0uCiAgICAgLy8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25v
dyB0byBtYXAgYW55IGZhbWlsaWVzIGNvbnRhaW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRv
LCBvciBVcmR1IHRvIHRoZQogICAgIC8vIEdlZXphIFBybyBmb250LgotICAgIHJldHVybiBGb250
UmFuZ2VzKGZvbnRDYWNoZS5zaW1pbGFyRm9udChkZXNjcmlwdGlvbikpOworICAgIGZvciAoYXV0
byYgZmFtaWx5IDogZGVzY3JpcHRpb24uZmFtaWxpZXMoKSkgeworICAgICAgICBpZiAoYXV0byBm
b250ID0gZm9udENhY2hlLnNpbWlsYXJGb250KGRlc2NyaXB0aW9uLCBmYW1pbHkpKQorICAgICAg
ICAgICAgcmV0dXJuIEZvbnRSYW5nZXMoV1RGOjptb3ZlKGZvbnQpKTsKKyAgICB9CisgICAgcmV0
dXJuIHsgfTsKIH0KIAotY29uc3QgRm9udFJhbmdlcyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5z
aWduZWQgaW5kZXgpCitjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXpl
RmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNr
UmFuZ2VzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1tp
bmRleF07CkBAIC0zMTIsNyArMzE2LDcgQEAgc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JO
b25DSktDaGFyYQogICAgIHJldHVybiBkYXRhOwogfQogCi1HbHlwaERhdGEgRm9udENhc2NhZGVG
b250czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQorR2x5cGhEYXRhIEZv
bnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIgYywgY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlh
bnQpCiB7CiAgICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQuCiAg
ICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0
aW9uLCAwKTsKQEAgLTM0OSw3ICszNTMsNyBAQCBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6
Z2x5cGhEYXRhRm9yCiAgICAgcmV0dXJuIGZhbGxiYWNrR2x5cGhEYXRhOwogfQogCi1HbHlwaERh
dGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIHVuc2ln
bmVkIGZhbGxiYWNrSW5kZXgpCitHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRh
Rm9yVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KQogewog
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCsrKTsKQEAgLTM3MCw3ICsz
NzQsNyBAQCBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yCiAgICAgcmV0
dXJuIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50KTsK
IH0KIAotR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvck5vcm1hbFZhcmlh
bnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorR2x5cGhE
YXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiBj
LCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGZhbGxiYWNrSW5kZXggPSAwOyA7ICsrZmFsbGJhY2tJbmRleCkgewogICAgICAg
ICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24s
IGZhbGxiYWNrSW5kZXgpOwpAQCAtNDIxLDcgKzQyNSw3IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQ
YWdlPiBnbHlwaFBhZ2VGcm9tRm8KICAgICByZXR1cm4gY29uc3RfY2FzdDxHbHlwaFBhZ2UqPihm
b250LT5nbHlwaFBhZ2UocGFnZU51bWJlcikpOwogfQogCi1HbHlwaERhdGEgRm9udENhc2NhZGVG
b250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKK0dseXBoRGF0YSBGb250Q2Fz
Y2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1dG9WYXJp
YW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
Rm9udHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZUZvbnRzLmgJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnREZXNjcmlwdGlv
bjsKK2NsYXNzIEZvbnRDYXNjYWRlRGVzY3JpcHRpb247CiBjbGFzcyBGb250UGxhdGZvcm1EYXRh
OwogY2xhc3MgRm9udFNlbGVjdG9yOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwpAQCAtNTIsMTAg
KzUyLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQoKSBjb25zdCB7
IHJldHVybiBtX2lzRm9yUGxhdGZvcm1Gb250OyB9CiAKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50
KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCk7CiAKLSAgICBib29sIGlzRml4ZWRQ
aXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKLSAgICB2b2lkIGRldGVybWluZVBpdGNoKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mKTsKKyAgICB2b2lkIGRldGVybWluZVBpdGNoKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mKTsKIAogICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBj
b25zdDsKIApAQCAtNjcsOCArNjcsOCBAQCBwdWJsaWM6CiAgICAgV2lkdGhDYWNoZSYgd2lkdGhD
YWNoZSgpIHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogICAgIGNvbnN0IFdpZHRoQ2FjaGUmIHdp
ZHRoQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoQ2FjaGU7IH0KIAotICAgIGNvbnN0IEZv
bnQmIHByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOworICAgIGNvbnN0IEZvbnQmIHBy
aW1hcnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CiAKICAgICB2b2lk
IHBydW5lU3lzdGVtRmFsbGJhY2tzKCk7CiAKQEAgLTc2LDkgKzc2LDkgQEAgcHJpdmF0ZToKICAg
ICBGb250Q2FzY2FkZUZvbnRzKFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwogICAgIEZvbnRDYXNj
YWRlRm9udHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogCi0gICAgR2x5cGhEYXRhIGdseXBo
RGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZv
bnRWYXJpYW50KTsKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hh
cjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mKTsKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9y
VmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgdW5z
aWduZWQgZmFsbGJhY2tJbmRleCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZh
bGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFu
dCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiwgY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOworICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JW
YXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFu
dCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CiAKICAgICBWZWN0b3I8Rm9udFJhbmdlcywgMT4g
bV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzOwogICAgIHVuc2lnbmVkIG1fbGFzdFJlYWxpemVkRmFs
bGJhY2tJbmRleCB7IDAgfTsKQEAgLTExNSwxNCArMTE1LDE0IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2lzRm9yUGxhdGZvcm1Gb250IHsgZmFsc2UgfTsKIH07CiAKLWlubGluZSBib29sIEZvbnRD
YXNjYWRlRm9udHM6OmlzRml4ZWRQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uKQoraW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewogICAgIGlmIChtX3BpdGNoID09
IFVua25vd25QaXRjaCkKICAgICAgICAgZGV0ZXJtaW5lUGl0Y2goZGVzY3JpcHRpb24pOwogICAg
IHJldHVybiBtX3BpdGNoID09IEZpeGVkUGl0Y2g7CiB9OwogCi1pbmxpbmUgY29uc3QgRm9udCYg
Rm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbikKK2lubGluZSBjb25zdCBGb250JiBGb250Q2FzY2FkZUZvbnRzOjpwcmltYXJ5Rm9u
dChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3Jp
cHRpb24uY3BwCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFNhbWVTaXplQXNGb250RGVzY3Jp
cHRpb24geworc3RydWN0IFNhbWVTaXplQXNGb250Q2FzY2FkZURlc2NyaXB0aW9uIHsKICAgICB2
b2lkKiBwb2ludGVyc1szXTsKICAgICBmbG9hdCBzaXplc1syXTsKICAgICAvLyBGSVhNRTogTWFr
ZSB0aGVtIGZpdCBpbnRvIG9uZSB3b3JkLgpAQCAtNDIsNyArNDIsNyBAQCBzdHJ1Y3QgU2FtZVNp
emVBc0ZvbnREZXNjcmlwdGlvbiB7CiAgICAgdWludDMyX3QgYml0ZmllbGRzMiA6IDg7CiB9Owog
Ci1DT01QSUxFX0FTU0VSVChzaXplb2YoRm9udERlc2NyaXB0aW9uKSA9PSBzaXplb2YoU2FtZVNp
emVBc0ZvbnREZXNjcmlwdGlvbiksIEZvbnREZXNjcmlwdGlvbl9zaG91bGRfc3RheV9zbWFsbCk7
CitDT01QSUxFX0FTU0VSVChzaXplb2YoRm9udENhc2NhZGVEZXNjcmlwdGlvbikgPT0gc2l6ZW9m
KFNhbWVTaXplQXNGb250Q2FzY2FkZURlc2NyaXB0aW9uKSwgRm9udENhc2NhZGVEZXNjcmlwdGlv
bl9zaG91bGRfc3RheV9zbWFsbCk7CiAKIEZvbnREZXNjcmlwdGlvbjo6Rm9udERlc2NyaXB0aW9u
KCkKICAgICA6IG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKQEAgLTUwLDgyICs1MCw4NiBAQCBG
b250RGVzY3JpcHRpb246OkZvbnREZXNjcmlwdGlvbigpCiAgICAgLCBtX3dpZHRoVmFyaWFudChS
ZWd1bGFyV2lkdGgpCiAgICAgLCBtX2l0YWxpYyhGb250SXRhbGljT2ZmKQogICAgICwgbV9zbWFs
bENhcHMoRm9udFNtYWxsQ2Fwc09mZikKLSAgICAsIG1faXNBYnNvbHV0ZVNpemUoZmFsc2UpCiAg
ICAgLCBtX3dlaWdodChGb250V2VpZ2h0Tm9ybWFsKQogICAgICwgbV9yZW5kZXJpbmdNb2RlKE5v
cm1hbFJlbmRlcmluZ01vZGUpCisgICAgLCBtX3RleHRSZW5kZXJpbmcoQXV0b1RleHRSZW5kZXJp
bmcpCisgICAgLCBtX3NjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKG1f
bG9jYWxlKSkKKyAgICAsIG1fZm9udFN5bnRoZXNpcyhGb250U3ludGhlc2lzV2VpZ2h0IHwgRm9u
dFN5bnRoZXNpc1N0eWxlKQoreworfQorCit2b2lkIEZvbnREZXNjcmlwdGlvbjo6c2V0TG9jYWxl
KGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQoreworICAgIG1fbG9jYWxlID0gbG9jYWxlOwor
ICAgIG1fc2NyaXB0ID0gbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX2xvY2Fs
ZSk7Cit9CisKK0ZvbnRUcmFpdHNNYXNrIEZvbnREZXNjcmlwdGlvbjo6dHJhaXRzTWFzaygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigobV9pdGFsaWMg
PyBGb250U3R5bGVJdGFsaWNNYXNrIDogRm9udFN0eWxlTm9ybWFsTWFzaykKKyAgICAgICAgfCAo
bV9zbWFsbENhcHMgPyBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2sgOiBGb250VmFyaWFudE5vcm1h
bE1hc2spCisgICAgICAgIHwgKEZvbnRXZWlnaHQxMDBNYXNrIDw8IChtX3dlaWdodCAtIEZvbnRX
ZWlnaHQxMDApKSk7CisgICAgCit9CisKK0ZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkZvbnRDYXNj
YWRlRGVzY3JpcHRpb24oKQorICAgIDogbV9pc0Fic29sdXRlU2l6ZShmYWxzZSkKICAgICAsIG1f
a2VybmluZyhBdXRvS2VybmluZykKICAgICAsIG1fY29tbW9uTGlnYXR1cmVzU3RhdGUoTm9ybWFs
TGlnYXR1cmVzU3RhdGUpCiAgICAgLCBtX2Rpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShOb3Jt
YWxMaWdhdHVyZXNTdGF0ZSkKICAgICAsIG1faGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKE5vcm1h
bExpZ2F0dXJlc1N0YXRlKQogICAgICwgbV9rZXl3b3JkU2l6ZSgwKQogICAgICwgbV9mb250U21v
b3RoaW5nKEF1dG9TbW9vdGhpbmcpCi0gICAgLCBtX3RleHRSZW5kZXJpbmcoQXV0b1RleHRSZW5k
ZXJpbmcpCiAgICAgLCBtX2lzU3BlY2lmaWVkRm9udChmYWxzZSkKLSAgICAsIG1fc2NyaXB0KGxv
Y2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obV9sb2NhbGUpKQotICAgICwgbV9mb250
U3ludGhlc2lzKGluaXRpYWxGb250U3ludGhlc2lzKCkpCiB7CiB9CiAKLUZvbnRXZWlnaHQgRm9u
dERlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KHZvaWQpIGNvbnN0CitGb250V2VpZ2h0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb246OmxpZ2h0ZXJXZWlnaHQodm9pZCkgY29uc3QKIHsKLSAgICBzd2l0
Y2ggKG1fd2VpZ2h0KSB7Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDEwMDoKLSAgICAgICAgY2Fz
ZSBGb250V2VpZ2h0MjAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQzMDA6Ci0gICAgICAgIGNh
c2UgRm9udFdlaWdodDQwMDoKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0NTAwOgotICAgICAgICAg
ICAgcmV0dXJuIEZvbnRXZWlnaHQxMDA7Ci0KLSAgICAgICAgY2FzZSBGb250V2VpZ2h0NjAwOgot
ICAgICAgICBjYXNlIEZvbnRXZWlnaHQ3MDA6Ci0gICAgICAgICAgICByZXR1cm4gRm9udFdlaWdo
dDQwMDsKLQotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ4MDA6Ci0gICAgICAgIGNhc2UgRm9udFdl
aWdodDkwMDoKLSAgICAgICAgICAgIHJldHVybiBGb250V2VpZ2h0NzAwOworICAgIHN3aXRjaCAo
d2VpZ2h0KCkpIHsKKyAgICBjYXNlIEZvbnRXZWlnaHQxMDA6CisgICAgY2FzZSBGb250V2VpZ2h0
MjAwOgorICAgIGNhc2UgRm9udFdlaWdodDMwMDoKKyAgICBjYXNlIEZvbnRXZWlnaHQ0MDA6Cisg
ICAgY2FzZSBGb250V2VpZ2h0NTAwOgorICAgICAgICByZXR1cm4gRm9udFdlaWdodDEwMDsKKwor
ICAgIGNhc2UgRm9udFdlaWdodDYwMDoKKyAgICBjYXNlIEZvbnRXZWlnaHQ3MDA6CisgICAgICAg
IHJldHVybiBGb250V2VpZ2h0NDAwOworCisgICAgY2FzZSBGb250V2VpZ2h0ODAwOgorICAgIGNh
c2UgRm9udFdlaWdodDkwMDoKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ3MDA7CiAgICAgfQog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBGb250V2VpZ2h0Tm9ybWFsOwog
fQogCi1Gb250V2VpZ2h0IEZvbnREZXNjcmlwdGlvbjo6Ym9sZGVyV2VpZ2h0KHZvaWQpIGNvbnN0
CitGb250V2VpZ2h0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRlcldlaWdodCh2b2lkKSBj
b25zdAogewotICAgIHN3aXRjaCAobV93ZWlnaHQpIHsKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0
MTAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQyMDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdo
dDMwMDoKLSAgICAgICAgICAgIHJldHVybiBGb250V2VpZ2h0NDAwOwotCi0gICAgICAgIGNhc2Ug
Rm9udFdlaWdodDQwMDoKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0NTAwOgotICAgICAgICAgICAg
cmV0dXJuIEZvbnRXZWlnaHQ3MDA7Ci0KLSAgICAgICAgY2FzZSBGb250V2VpZ2h0NjAwOgotICAg
ICAgICBjYXNlIEZvbnRXZWlnaHQ3MDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDgwMDoKLSAg
ICAgICAgY2FzZSBGb250V2VpZ2h0OTAwOgotICAgICAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ5
MDA7CisgICAgc3dpdGNoICh3ZWlnaHQoKSkgeworICAgIGNhc2UgRm9udFdlaWdodDEwMDoKKyAg
ICBjYXNlIEZvbnRXZWlnaHQyMDA6CisgICAgY2FzZSBGb250V2VpZ2h0MzAwOgorICAgICAgICBy
ZXR1cm4gRm9udFdlaWdodDQwMDsKKworICAgIGNhc2UgRm9udFdlaWdodDQwMDoKKyAgICBjYXNl
IEZvbnRXZWlnaHQ1MDA6CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0NzAwOworCisgICAgY2Fz
ZSBGb250V2VpZ2h0NjAwOgorICAgIGNhc2UgRm9udFdlaWdodDcwMDoKKyAgICBjYXNlIEZvbnRX
ZWlnaHQ4MDA6CisgICAgY2FzZSBGb250V2VpZ2h0OTAwOgorICAgICAgICByZXR1cm4gRm9udFdl
aWdodDkwMDsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIEZv
bnRXZWlnaHROb3JtYWw7CiB9CiAKLUZvbnRUcmFpdHNNYXNrIEZvbnREZXNjcmlwdGlvbjo6dHJh
aXRzTWFzaygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNr
PigobV9pdGFsaWMgPyBGb250U3R5bGVJdGFsaWNNYXNrIDogRm9udFN0eWxlTm9ybWFsTWFzaykK
LSAgICAgICAgICAgIHwgKG1fc21hbGxDYXBzID8gRm9udFZhcmlhbnRTbWFsbENhcHNNYXNrIDog
Rm9udFZhcmlhbnROb3JtYWxNYXNrKQotICAgICAgICAgICAgfCAoRm9udFdlaWdodDEwME1hc2sg
PDwgKG1fd2VpZ2h0IC0gRm9udFdlaWdodDEwMCkpKTsKLSAgICAKLX0KLQotdm9pZCBGb250RGVz
Y3JpcHRpb246OnNldExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKLXsKLSAgICBt
X2xvY2FsZSA9IGxvY2FsZTsKLSAgICBtX3NjcmlwdCA9IGxvY2FsZVRvU2NyaXB0Q29kZUZvckZv
bnRTZWxlY3Rpb24obV9sb2NhbGUpOwotfQotCiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJ
TkcpCi1ib29sIEZvbnREZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5n
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246OmZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKIHsKICAgICB1bnNpZ25lZCB0aGlzRmFtaWx5Q291
bnQgPSBmYW1pbHlDb3VudCgpOwogICAgIHVuc2lnbmVkIG90aGVyRmFtaWx5Q291bnQgPSBvdGhl
ci5mYW1pbHlDb3VudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udERlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwxNCArNDAsODkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdEZvbnRGYW1pbHlOYW1l
czsKIAogY2xhc3MgRm9udERlc2NyaXB0aW9uIHsKIHB1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9S
VCBGb250RGVzY3JpcHRpb24oKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250RGVz
Y3JpcHRpb24mKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udERlc2NyaXB0
aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIGZs
b2F0IGNvbXB1dGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0ZWRTaXplOyB9CisgICAg
Rm9udEl0YWxpYyBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250SXRhbGlj
PihtX2l0YWxpYyk7IH0KKyAgICBpbnQgY29tcHV0ZWRQaXhlbFNpemUoKSBjb25zdCB7IHJldHVy
biBpbnQobV9jb21wdXRlZFNpemUgKyAwLjVmKTsgfQorICAgIEZvbnRTbWFsbENhcHMgc21hbGxD
YXBzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFNtYWxsQ2Fwcz4obV9zbWFsbENh
cHMpOyB9CisgICAgRm9udFdlaWdodCB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250V2VpZ2h0PihtX3dlaWdodCk7IH0KKyAgICBGb250V2VpZ2h0IGxpZ2h0ZXJXZWlnaHQo
KSBjb25zdDsKKyAgICBGb250V2VpZ2h0IGJvbGRlcldlaWdodCgpIGNvbnN0OworICAgIEZvbnRS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxG
b250UmVuZGVyaW5nTW9kZT4obV9yZW5kZXJpbmdNb2RlKTsgfQorICAgIFRleHRSZW5kZXJpbmdN
b2RlIHRleHRSZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dFJl
bmRlcmluZ01vZGU+KG1fdGV4dFJlbmRlcmluZyk7IH0KKyAgICBVU2NyaXB0Q29kZSBzY3JpcHQo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4obV9zY3JpcHQpOyB9Cisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsZTsg
fQorCisgICAgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Rm9udE9yaWVudGF0aW9uPihtX29yaWVudGF0aW9uKTsgfQorICAgIE5vbkNKS0ds
eXBoT3JpZW50YXRpb24gbm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PE5vbkNKS0dseXBoT3JpZW50YXRpb24+KG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlv
bik7IH0KKyAgICBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEZvbnRXaWR0aFZhcmlhbnQ+KG1fd2lkdGhWYXJpYW50KTsgfQorICAgIEZv
bnRGZWF0dXJlU2V0dGluZ3MqIGZlYXR1cmVTZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZVNldHRpbmdzLmdldCgpOyB9CisgICAgRm9udFN5bnRoZXNpcyBmb250U3ludGhlc2lzKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFN5bnRoZXNpcz4obV9mb250U3ludGhlc2lz
KTsgfQorCisgICAgdm9pZCBzZXRDb21wdXRlZFNpemUoZmxvYXQgcykgeyBtX2NvbXB1dGVkU2l6
ZSA9IGNsYW1wVG9GbG9hdChzKTsgfQorICAgIHZvaWQgc2V0SXRhbGljKEZvbnRJdGFsaWMgaSkg
eyBtX2l0YWxpYyA9IGk7IH0KKyAgICB2b2lkIHNldElzSXRhbGljKGJvb2wgaSkgeyBzZXRJdGFs
aWMoaSA/IEZvbnRJdGFsaWNPbiA6IEZvbnRJdGFsaWNPZmYpOyB9CisgICAgdm9pZCBzZXRTbWFs
bENhcHMoRm9udFNtYWxsQ2FwcyBjKSB7IG1fc21hbGxDYXBzID0gYzsgfQorICAgIHZvaWQgc2V0
SXNTbWFsbENhcHMoYm9vbCBjKSB7IHNldFNtYWxsQ2FwcyhjID8gRm9udFNtYWxsQ2Fwc09uIDog
Rm9udFNtYWxsQ2Fwc09mZik7IH0KKyAgICB2b2lkIHNldFdlaWdodChGb250V2VpZ2h0IHcpIHsg
bV93ZWlnaHQgPSB3OyB9CisgICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJpbmdN
b2RlIG1vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gbW9kZTsgfQorICAgIHZvaWQgc2V0VGV4dFJl
bmRlcmluZ01vZGUoVGV4dFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nKSB7IG1fdGV4dFJlbmRlcmlu
ZyA9IHJlbmRlcmluZzsgfQorICAgIHZvaWQgc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQorICAgIHZvaWQg
c2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihOb25DSktHbHlwaE9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSB7IG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9CisgICAgdm9p
ZCBzZXRXaWR0aFZhcmlhbnQoRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQpIHsgbV93aWR0
aFZhcmlhbnQgPSB3aWR0aFZhcmlhbnQ7IH0gLy8gTWFrZSBzdXJlIG5ldyBjYWxsZXJzIG9mIHRo
aXMgc3luYyB3aXRoIEZvbnRQbGF0Zm9ybURhdGE6OmlzRm9yVGV4dENvbWJpbmUoKSEKKyAgICB2
b2lkIHNldExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIHNldEZlYXR1cmVT
ZXR0aW5ncyhQYXNzUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IHNldHRpbmdzKSB7IG1fZmVh
dHVyZVNldHRpbmdzID0gc2V0dGluZ3M7IH0KKyAgICB2b2lkIHNldEZvbnRTeW50aGVzaXMoRm9u
dFN5bnRoZXNpcyBmb250U3ludGhlc2lzKSB7IG1fZm9udFN5bnRoZXNpcyA9IGZvbnRTeW50aGVz
aXM7IH0KKworICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2soKSBjb25zdDsKK3ByaXZhdGU6
CisgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IG1fZmVhdHVyZVNldHRpbmdzOworICAg
IEF0b21pY1N0cmluZyBtX2xvY2FsZTsKKworICAgIGZsb2F0IG1fY29tcHV0ZWRTaXplIHsgMCB9
OyAvLyBDb21wdXRlZCBzaXplIGFkanVzdGVkIGZvciB0aGUgbWluaW11bSBmb250IHNpemUgYW5k
IHRoZSB6b29tIGZhY3Rvci4KKyAgICB1bnNpZ25lZCBtX29yaWVudGF0aW9uIDogMTsgLy8gRm9u
dE9yaWVudGF0aW9uIC0gV2hldGhlciB0aGUgZm9udCBpcyByZW5kZXJpbmcgb24gYSBob3Jpem9u
dGFsIGxpbmUgb3IgYSB2ZXJ0aWNhbCBsaW5lLgorICAgIHVuc2lnbmVkIG1fbm9uQ0pLR2x5cGhP
cmllbnRhdGlvbiA6IDE7IC8vIE5vbkNKS0dseXBoT3JpZW50YXRpb24gLSBPbmx5IHVzZWQgYnkg
dmVydGljYWwgdGV4dC4gRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBvcmllbnRhdGlvbiBmb3Igbm9u
LWlkZW9ncmFwaCBnbHlwaHMuCisgICAgdW5zaWduZWQgbV93aWR0aFZhcmlhbnQgOiAyOyAvLyBG
b250V2lkdGhWYXJpYW50CisgICAgdW5zaWduZWQgbV9pdGFsaWMgOiAxOyAvLyBGb250SXRhbGlj
CisgICAgdW5zaWduZWQgbV9zbWFsbENhcHMgOiAxOyAvLyBGb250U21hbGxDYXBzCisgICAgdW5z
aWduZWQgbV93ZWlnaHQgOiA4OyAvLyBGb250V2VpZ2h0CisgICAgdW5zaWduZWQgbV9yZW5kZXJp
bmdNb2RlIDogMTsgLy8gVXNlZCB0byBzd2l0Y2ggYmV0d2VlbiBDRyBhbmQgR0RJIHRleHQgb24g
V2luZG93cy4KKyAgICB1bnNpZ25lZCBtX3RleHRSZW5kZXJpbmcgOiAyOyAvLyBUZXh0UmVuZGVy
aW5nTW9kZQorICAgIHVuc2lnbmVkIG1fc2NyaXB0IDogNzsgLy8gVXNlZCB0byBoZWxwIGNob29z
ZSBhbiBhcHByb3ByaWF0ZSBmb250IGZvciBnZW5lcmljIGZvbnQgZmFtaWxpZXMuCisgICAgdW5z
aWduZWQgbV9mb250U3ludGhlc2lzIDogMjsgLy8gRm9udFN5bnRoZXNpcyB0eXBlCit9OworCitp
bmxpbmUgYm9vbCBGb250RGVzY3JpcHRpb246Om9wZXJhdG9yPT0oY29uc3QgRm9udERlc2NyaXB0
aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21wdXRlZFNpemUgPT0gb3RoZXIu
bV9jb21wdXRlZFNpemUKKyAgICAgICAgJiYgbV9pdGFsaWMgPT0gb3RoZXIubV9pdGFsaWMKKyAg
ICAgICAgJiYgbV9zbWFsbENhcHMgPT0gb3RoZXIubV9zbWFsbENhcHMKKyAgICAgICAgJiYgbV93
ZWlnaHQgPT0gb3RoZXIubV93ZWlnaHQKKyAgICAgICAgJiYgbV9yZW5kZXJpbmdNb2RlID09IG90
aGVyLm1fcmVuZGVyaW5nTW9kZQorICAgICAgICAmJiBtX3RleHRSZW5kZXJpbmcgPT0gb3RoZXIu
bV90ZXh0UmVuZGVyaW5nCisgICAgICAgICYmIG1fb3JpZW50YXRpb24gPT0gb3RoZXIubV9vcmll
bnRhdGlvbgorICAgICAgICAmJiBtX25vbkNKS0dseXBoT3JpZW50YXRpb24gPT0gb3RoZXIubV9u
b25DSktHbHlwaE9yaWVudGF0aW9uCisgICAgICAgICYmIG1fd2lkdGhWYXJpYW50ID09IG90aGVy
Lm1fd2lkdGhWYXJpYW50CisgICAgICAgICYmIG1fbG9jYWxlID09IG90aGVyLm1fbG9jYWxlCisg
ICAgICAgICYmIG1fZmVhdHVyZVNldHRpbmdzID09IG90aGVyLm1fZmVhdHVyZVNldHRpbmdzCisg
ICAgICAgICYmIG1fZm9udFN5bnRoZXNpcyA9PSBvdGhlci5tX2ZvbnRTeW50aGVzaXM7Cit9CisK
Ky8vIEZJWE1FOiBNb3ZlIHRvIGEgZmlsZSBvZiBpdHMgb3duLgorY2xhc3MgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiA6IHB1YmxpYyBGb250RGVzY3JpcHRpb24geworcHVibGljOgogICAgIGVudW0g
S2VybmluZyB7IEF1dG9LZXJuaW5nLCBOb3JtYWxLZXJuaW5nLCBOb25lS2VybmluZyB9OwogCiAg
ICAgZW51bSBMaWdhdHVyZXNTdGF0ZSB7IE5vcm1hbExpZ2F0dXJlc1N0YXRlLCBEaXNhYmxlZExp
Z2F0dXJlc1N0YXRlLCBFbmFibGVkTGlnYXR1cmVzU3RhdGUgfTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIEZvbnREZXNjcmlwdGlvbigpOworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24oKTsKIAot
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7IH0KIAogICAgIHVuc2lnbmVkIGZhbWlseUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mYW1p
bGllcy5zaXplKCk7IH0KICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZpcnN0RmFtaWx5KCkgY29u
c3QgeyByZXR1cm4gZmFtaWx5QXQoMCk7IH0KQEAgLTU1LDE3ICsxMzAsMTMgQEAgcHVibGljOgog
ICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+JiBmYW1pbGllcygpIGNvbnN0
IHsgcmV0dXJuIG1fZmFtaWxpZXM7IH0KIAogICAgIGZsb2F0IHNwZWNpZmllZFNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NwZWNpZmllZFNpemU7IH0KLSAgICBmbG9hdCBjb21wdXRlZFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2NvbXB1dGVkU2l6ZTsgfQotICAgIEZvbnRJdGFsaWMgaXRhbGljKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udEl0YWxpYz4obV9pdGFsaWMpOyB9Ci0gICAg
aW50IGNvbXB1dGVkUGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gaW50KG1fY29tcHV0ZWRTaXpl
ICsgMC41Zik7IH0KLSAgICBGb250U21hbGxDYXBzIHNtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEZvbnRTbWFsbENhcHM+KG1fc21hbGxDYXBzKTsgfQogICAgIGJvb2wgaXNB
YnNvbHV0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2lzQWJzb2x1dGVTaXplOyB9Ci0gICAgRm9u
dFdlaWdodCB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250V2VpZ2h0Piht
X3dlaWdodCk7IH0KICAgICBGb250V2VpZ2h0IGxpZ2h0ZXJXZWlnaHQoKSBjb25zdDsKICAgICBG
b250V2VpZ2h0IGJvbGRlcldlaWdodCgpIGNvbnN0OworCiAgICAgLy8gb25seSB1c2UgZml4ZWQg
ZGVmYXVsdCBzaXplIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgZm9udCBmYW1pbHksIGFuZCB0aGF0
IGZhbWlseSBpcyAibW9ub3NwYWNlIgogICAgIGJvb2wgdXNlRml4ZWREZWZhdWx0U2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbWlseUNvdW50KCkgPT0gMSAmJiBmaXJzdEZhbWlseSgpID09IG1vbm9z
cGFjZUZhbWlseTsgfQotICAgIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250UmVuZGVyaW5nTW9kZT4obV9yZW5kZXJpbmdNb2Rl
KTsgfQorCiAgICAgS2VybmluZyBrZXJuaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
S2VybmluZz4obV9rZXJuaW5nKTsgfQogICAgIExpZ2F0dXJlc1N0YXRlIGNvbW1vbkxpZ2F0dXJl
c1N0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGlnYXR1cmVzU3RhdGU+KG1fY29t
bW9uTGlnYXR1cmVzU3RhdGUpOyB9CiAgICAgTGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxp
Z2F0dXJlc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGlnYXR1cmVzU3RhdGU+
KG1fZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKTsgfQpAQCAtNzgsMzAgKzE0OSwxMyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgIH0KICAgICBGb250U21vb3Ro
aW5nTW9kZSBmb250U21vb3RoaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFNt
b290aGluZ01vZGU+KG1fZm9udFNtb290aGluZyk7IH0KLSAgICBUZXh0UmVuZGVyaW5nTW9kZSB0
ZXh0UmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRleHRSZW5kZXJp
bmdNb2RlPihtX3RleHRSZW5kZXJpbmcpOyB9Ci0gICAgVVNjcmlwdENvZGUgc2NyaXB0KCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+KG1fc2NyaXB0KTsgfQotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbGU7IH0KLQot
ICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2soKSBjb25zdDsKICAgICBib29sIGlzU3BlY2lm
aWVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTcGVjaWZpZWRGb250OyB9Ci0gICAgRm9udE9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udE9y
aWVudGF0aW9uPihtX29yaWVudGF0aW9uKTsgfQotICAgIE5vbkNKS0dseXBoT3JpZW50YXRpb24g
bm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE5vbkNK
S0dseXBoT3JpZW50YXRpb24+KG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbik7IH0KLSAgICBGb250
V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRXaWR0aFZhcmlhbnQ+KG1fd2lkdGhWYXJpYW50KTsgfQotICAgIEZvbnRGZWF0dXJlU2V0dGlu
Z3MqIGZlYXR1cmVTZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZVNldHRpbmdzLmdl
dCgpOyB9Ci0gICAgRm9udFN5bnRoZXNpcyBmb250U3ludGhlc2lzKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Rm9udFN5bnRoZXNpcz4obV9mb250U3ludGhlc2lzKTsgfQogCiAgICAgdm9p
ZCBzZXRPbmVGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpIHsgQVNTRVJUKG1fZmFt
aWxpZXMuc2l6ZSgpID09IDEpOyBtX2ZhbWlsaWVzWzBdID0gZmFtaWx5OyB9CiAgICAgdm9pZCBz
ZXRGYW1pbGllcyhjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgZmFtaWxpZXMpIHsgbV9mYW1p
bGllcyA9IFJlZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+KGZhbWlsaWVzKTsgfQogICAgIHZv
aWQgc2V0RmFtaWxpZXMoY29uc3QgUmVmQ291bnRlZEFycmF5PEF0b21pY1N0cmluZz4mIGZhbWls
aWVzKSB7IG1fZmFtaWxpZXMgPSBmYW1pbGllczsgfQotICAgIHZvaWQgc2V0Q29tcHV0ZWRTaXpl
KGZsb2F0IHMpIHsgbV9jb21wdXRlZFNpemUgPSBjbGFtcFRvRmxvYXQocyk7IH0KICAgICB2b2lk
IHNldFNwZWNpZmllZFNpemUoZmxvYXQgcykgeyBtX3NwZWNpZmllZFNpemUgPSBjbGFtcFRvRmxv
YXQocyk7IH0KLSAgICB2b2lkIHNldEl0YWxpYyhGb250SXRhbGljIGkpIHsgbV9pdGFsaWMgPSBp
OyB9Ci0gICAgdm9pZCBzZXRJc0l0YWxpYyhib29sIGkpIHsgc2V0SXRhbGljKGkgPyBGb250SXRh
bGljT24gOiBGb250SXRhbGljT2ZmKTsgfQotICAgIHZvaWQgc2V0U21hbGxDYXBzKEZvbnRTbWFs
bENhcHMgYykgeyBtX3NtYWxsQ2FwcyA9IGM7IH0KLSAgICB2b2lkIHNldElzU21hbGxDYXBzKGJv
b2wgYykgeyBzZXRTbWFsbENhcHMoYyA/IEZvbnRTbWFsbENhcHNPbiA6IEZvbnRTbWFsbENhcHNP
ZmYpOyB9CiAgICAgdm9pZCBzZXRJc0Fic29sdXRlU2l6ZShib29sIHMpIHsgbV9pc0Fic29sdXRl
U2l6ZSA9IHM7IH0KLSAgICB2b2lkIHNldFdlaWdodChGb250V2VpZ2h0IHcpIHsgbV93ZWlnaHQg
PSB3OyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJpbmdNb2RlIG1vZGUp
IHsgbV9yZW5kZXJpbmdNb2RlID0gbW9kZTsgfQogICAgIHZvaWQgc2V0S2VybmluZyhLZXJuaW5n
IGtlcm5pbmcpIHsgbV9rZXJuaW5nID0ga2VybmluZzsgfQogICAgIHZvaWQgc2V0Q29tbW9uTGln
YXR1cmVzU3RhdGUoTGlnYXR1cmVzU3RhdGUgY29tbW9uTGlnYXR1cmVzU3RhdGUpIHsgbV9jb21t
b25MaWdhdHVyZXNTdGF0ZSA9IGNvbW1vbkxpZ2F0dXJlc1N0YXRlOyB9CiAgICAgdm9pZCBzZXRE
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoTGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxp
Z2F0dXJlc1N0YXRlKSB7IG1fZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gZGlzY3JldGlv
bmFyeUxpZ2F0dXJlc1N0YXRlOyB9CkBAIC0xMTgsMjUgKzE3MiwxNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoQ1NTVmFsdWVXZWJraXRYeHhMYXJnZSAtIENTU1ZhbHVlWHhTbWFs
bCArIDEgPT0gOCwgIk1heGltdW0ga2V5d29yZCBzaXplIHNob3VsZCBiZSA4LiIpOwogICAgICAg
ICBzZXRLZXl3b3JkU2l6ZShpZGVudGlmaWVyID8gaWRlbnRpZmllciAtIENTU1ZhbHVlWHhTbWFs
bCArIDEgOiAwKTsKICAgICB9Ci0KICAgICB2b2lkIHNldEZvbnRTbW9vdGhpbmcoRm9udFNtb290
aGluZ01vZGUgc21vb3RoaW5nKSB7IG1fZm9udFNtb290aGluZyA9IHNtb290aGluZzsgfQotICAg
IHZvaWQgc2V0VGV4dFJlbmRlcmluZ01vZGUoVGV4dFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nKSB7
IG1fdGV4dFJlbmRlcmluZyA9IHJlbmRlcmluZzsgfQogICAgIHZvaWQgc2V0SXNTcGVjaWZpZWRG
b250KGJvb2wgaXNTcGVjaWZpZWRGb250KSB7IG1faXNTcGVjaWZpZWRGb250ID0gaXNTcGVjaWZp
ZWRGb250OyB9Ci0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihGb250T3JpZW50YXRpb24gb3JpZW50
YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9Ci0gICAgdm9pZCBzZXROb25D
SktHbHlwaE9yaWVudGF0aW9uKE5vbkNKS0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsg
bV9ub25DSktHbHlwaE9yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH0KLSAgICB2b2lkIHNldFdp
ZHRoVmFyaWFudChGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkgeyBtX3dpZHRoVmFyaWFu
dCA9IHdpZHRoVmFyaWFudDsgfSAvLyBNYWtlIHN1cmUgbmV3IGNhbGxlcnMgb2YgdGhpcyBzeW5j
IHdpdGggRm9udFBsYXRmb3JtRGF0YTo6aXNGb3JUZXh0Q29tYmluZSgpIQotICAgIHZvaWQgc2V0
TG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIHZvaWQgc2V0RmVhdHVyZVNldHRpbmdz
KFBhc3NSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MpIHsgbV9mZWF0dXJlU2V0
dGluZ3MgPSBzZXR0aW5nczsgfQotICAgIHZvaWQgc2V0Rm9udFN5bnRoZXNpcyhGb250U3ludGhl
c2lzIGZvbnRTeW50aGVzaXMpIHsgbV9mb250U3ludGhlc2lzID0gZm9udFN5bnRoZXNpczsgfQog
CiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0gICAgYm9vbCBmYW1pbGllc0VxdWFs
Rm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3Q7Cisg
ICAgYm9vbCBmYW1pbGllc0VxdWFsRm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0OwogCi0gICAgYm9vbCBlcXVhbEZvclRleHRBdXRvU2l6
aW5nKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgYm9vbCBlcXVhbEZv
clRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhv
dGhlcikKICAgICAgICAgICAgICYmIG1fc3BlY2lmaWVkU2l6ZSA9PSBvdGhlci5tX3NwZWNpZmll
ZFNpemUKLSAgICAgICAgICAgICYmIG1fc21hbGxDYXBzID09IG90aGVyLm1fc21hbGxDYXBzCisg
ICAgICAgICAgICAmJiBzbWFsbENhcHMoKSA9PSBvdGhlci5zbWFsbENhcHMoKQogICAgICAgICAg
ICAgJiYgbV9pc0Fic29sdXRlU2l6ZSA9PSBvdGhlci5tX2lzQWJzb2x1dGVTaXplOwogICAgIH0K
ICNlbmRpZgpAQCAtMTUyLDI3ICsxOTgsMTIgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFJl
ZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+IG1fZmFtaWxpZXMgeyAxIH07Ci0gICAgUmVmUHRy
PEZvbnRGZWF0dXJlU2V0dGluZ3M+IG1fZmVhdHVyZVNldHRpbmdzOwotICAgIEF0b21pY1N0cmlu
ZyBtX2xvY2FsZSB7IGluaXRpYWxMb2NhbGUoKSB9OwogCiAgICAgZmxvYXQgbV9zcGVjaWZpZWRT
aXplIHsgMCB9OyAgIC8vIFNwZWNpZmllZCBDU1MgdmFsdWUuIEluZGVwZW5kZW50IG9mIHJlbmRl
cmluZyBpc3N1ZXMgc3VjaCBhcyBpbnRlZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHJvdW5kaW5nLCBtaW5pbXVtIGZvbnQgc2l6ZXMsIGFuZCB6b29taW5nLgotICAgIGZsb2F0
IG1fY29tcHV0ZWRTaXplIHsgMCB9OyAgICAvLyBDb21wdXRlZCBzaXplIGFkanVzdGVkIGZvciB0
aGUgbWluaW11bSBmb250IHNpemUgYW5kIHRoZSB6b29tIGZhY3Rvci4KLQotICAgIHVuc2lnbmVk
IG1fb3JpZW50YXRpb24gOiAxOyAvLyBGb250T3JpZW50YXRpb24gLSBXaGV0aGVyIHRoZSBmb250
IGlzIHJlbmRlcmluZyBvbiBhIGhvcml6b250YWwgbGluZSBvciBhIHZlcnRpY2FsIGxpbmUuCi0g
ICAgdW5zaWduZWQgbV9ub25DSktHbHlwaE9yaWVudGF0aW9uIDogMTsgLy8gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvbiAtIE9ubHkgdXNlZCBieSB2ZXJ0aWNhbCB0ZXh0LiBEZXRlcm1pbmVzIHRoZSBk
ZWZhdWx0IG9yaWVudGF0aW9uIGZvciBub24taWRlb2dyYXBoIGdseXBocy4KLQotICAgIHVuc2ln
bmVkIG1fd2lkdGhWYXJpYW50IDogMjsgLy8gRm9udFdpZHRoVmFyaWFudAotCi0gICAgdW5zaWdu
ZWQgbV9pdGFsaWMgOiAxOyAvLyBGb250SXRhbGljCi0gICAgdW5zaWduZWQgbV9zbWFsbENhcHMg
OiAxOyAvLyBGb250U21hbGxDYXBzCiAgICAgdW5zaWduZWQgbV9pc0Fic29sdXRlU2l6ZSA6IDE7
IC8vIFdoZXRoZXIgb3Igbm90IENTUyBzcGVjaWZpZWQgYW4gZXhwbGljaXQgc2l6ZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChsb2dpY2FsIHNpemVzIGxpa2UgIm1lZGl1
bSIgZG9uJ3QgY291bnQpLgotICAgIHVuc2lnbmVkIG1fd2VpZ2h0IDogODsgLy8gRm9udFdlaWdo
dAotCi0gICAgdW5zaWduZWQgbV9yZW5kZXJpbmdNb2RlIDogMTsgIC8vIFVzZWQgdG8gc3dpdGNo
IGJldHdlZW4gQ0cgYW5kIEdESSB0ZXh0IG9uIFdpbmRvd3MuCiAgICAgdW5zaWduZWQgbV9rZXJu
aW5nIDogMjsgLy8gS2VybmluZwotCiAgICAgdW5zaWduZWQgbV9jb21tb25MaWdhdHVyZXNTdGF0
ZSA6IDI7CiAgICAgdW5zaWduZWQgbV9kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgOiAyOwog
ICAgIHVuc2lnbmVkIG1faGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlIDogMjsKQEAgLTE4MiwzNiAr
MjEzLDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoZS5nLiwg
MTNweCBtb25vc3BhY2UgdnMuIDE2cHggZXZlcnl0aGluZyBlbHNlKS4gIFNpemVzIGFyZSAxLTgg
KGxpa2UgdGhlIEhUTUwgc2l6ZSB2YWx1ZXMgZm9yIDxmb250PikuCiAKICAgICB1bnNpZ25lZCBt
X2ZvbnRTbW9vdGhpbmcgOiAyOyAvLyBGb250U21vb3RoaW5nTW9kZQotICAgIHVuc2lnbmVkIG1f
dGV4dFJlbmRlcmluZyA6IDI7IC8vIFRleHRSZW5kZXJpbmdNb2RlCiAgICAgdW5zaWduZWQgbV9p
c1NwZWNpZmllZEZvbnQgOiAxOyAvLyBUcnVlIGlmIGEgd2ViIHBhZ2Ugc3BlY2lmaWVzIGEgbm9u
LWdlbmVyaWMgZm9udCBmYW1pbHkgYXMgdGhlIGZpcnN0IGZvbnQgZmFtaWx5LgotICAgIHVuc2ln
bmVkIG1fc2NyaXB0IDogNzsgLy8gVXNlZCB0byBoZWxwIGNob29zZSBhbiBhcHByb3ByaWF0ZSBm
b250IGZvciBnZW5lcmljIGZvbnQgZmFtaWxpZXMuCi0gICAgdW5zaWduZWQgbV9mb250U3ludGhl
c2lzIDogMjsgLy8gRm9udFN5bnRoZXNpcyB0eXBlCiB9OwogCi1pbmxpbmUgYm9vbCBGb250RGVz
Y3JpcHRpb246Om9wZXJhdG9yPT0oY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QK
K2lubGluZSBib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Om9wZXJhdG9yPT0oY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZmFtaWxp
ZXMgPT0gb3RoZXIubV9mYW1pbGllcworICAgIHJldHVybiBGb250RGVzY3JpcHRpb246Om9wZXJh
dG9yPT0ob3RoZXIpCisgICAgICAgICYmIG1fZmFtaWxpZXMgPT0gb3RoZXIubV9mYW1pbGllcwog
ICAgICAgICAmJiBtX3NwZWNpZmllZFNpemUgPT0gb3RoZXIubV9zcGVjaWZpZWRTaXplCi0gICAg
ICAgICYmIG1fY29tcHV0ZWRTaXplID09IG90aGVyLm1fY29tcHV0ZWRTaXplCi0gICAgICAgICYm
IG1faXRhbGljID09IG90aGVyLm1faXRhbGljCi0gICAgICAgICYmIG1fc21hbGxDYXBzID09IG90
aGVyLm1fc21hbGxDYXBzCiAgICAgICAgICYmIG1faXNBYnNvbHV0ZVNpemUgPT0gb3RoZXIubV9p
c0Fic29sdXRlU2l6ZQotICAgICAgICAmJiBtX3dlaWdodCA9PSBvdGhlci5tX3dlaWdodAotICAg
ICAgICAmJiBtX3JlbmRlcmluZ01vZGUgPT0gb3RoZXIubV9yZW5kZXJpbmdNb2RlCiAgICAgICAg
ICYmIG1fa2VybmluZyA9PSBvdGhlci5tX2tlcm5pbmcKICAgICAgICAgJiYgbV9jb21tb25MaWdh
dHVyZXNTdGF0ZSA9PSBvdGhlci5tX2NvbW1vbkxpZ2F0dXJlc1N0YXRlCiAgICAgICAgICYmIG1f
ZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID09IG90aGVyLm1fZGlzY3JldGlvbmFyeUxpZ2F0
dXJlc1N0YXRlCiAgICAgICAgICYmIG1faGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID09IG90aGVy
Lm1faGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlCiAgICAgICAgICYmIG1fa2V5d29yZFNpemUgPT0g
b3RoZXIubV9rZXl3b3JkU2l6ZQogICAgICAgICAmJiBtX2ZvbnRTbW9vdGhpbmcgPT0gb3RoZXIu
bV9mb250U21vb3RoaW5nCi0gICAgICAgICYmIG1fdGV4dFJlbmRlcmluZyA9PSBvdGhlci5tX3Rl
eHRSZW5kZXJpbmcKLSAgICAgICAgJiYgbV9pc1NwZWNpZmllZEZvbnQgPT0gb3RoZXIubV9pc1Nw
ZWNpZmllZEZvbnQKLSAgICAgICAgJiYgbV9vcmllbnRhdGlvbiA9PSBvdGhlci5tX29yaWVudGF0
aW9uCi0gICAgICAgICYmIG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9PSBvdGhlci5tX25vbkNK
S0dseXBoT3JpZW50YXRpb24KLSAgICAgICAgJiYgbV93aWR0aFZhcmlhbnQgPT0gb3RoZXIubV93
aWR0aFZhcmlhbnQKLSAgICAgICAgJiYgbV9sb2NhbGUgPT0gb3RoZXIubV9sb2NhbGUKLSAgICAg
ICAgJiYgbV9mZWF0dXJlU2V0dGluZ3MgPT0gb3RoZXIubV9mZWF0dXJlU2V0dGluZ3MKLSAgICAg
ICAgJiYgbV9mb250U3ludGhlc2lzID09IG90aGVyLm1fZm9udFN5bnRoZXNpczsKKyAgICAgICAg
JiYgbV9pc1NwZWNpZmllZEZvbnQgPT0gb3RoZXIubV9pc1NwZWNpZmllZEZvbnQ7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rv
ci5oCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZvbnRDYXNjYWRlRGVzY3JpcHRpb247CiBjbGFzcyBG
b250RGVzY3JpcHRpb247CiBjbGFzcyBGb250U2VsZWN0b3JDbGllbnQ7CiAKQEAgLTQ0LDcgKzQ1
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRB
dChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3QpID0gMDsKIAogICAgIHZpcnR1YWwgc2l6
ZV90IGZhbGxiYWNrRm9udENvdW50KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0Zh
bWlseUZvcihjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIHJlc29sdmVzRmFtaWx5Rm9yKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25z
dCA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9udENhY2hlSW52YWxpZGF0ZWQoKSB7IH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29y
ZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDMsNDggKzI0MywzOSBAQCB1aW50MTZfdCB0b0NvcmVUZXh0Rm9u
dFdlaWdodChGb250V2VpZ2h0CiAgICAgcmV0dXJuIGNvcmVUZXh0Rm9udFdlaWdodHNbZm9udFdl
aWdodF07CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1p
bGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseSkKIHsKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUg
Zm9udCB1c2luZyBhIG1hdGNoIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbgog
ICAgIC8vIHRoZSByZXF1ZXN0ZWQgbmFtZXMuIEZvciBleGFtcGxlLCB3ZSdsbCBtYXRjaCBhbnkg
bmFtZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KLSAgICBSZWZQdHI8Rm9u
dD4gZm9udDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFtaWx5
Q291bnQoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gZGVz
Y3JpcHRpb24uZmFtaWx5QXQoaSk7Ci0gICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgY29udGludWU7CisgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAvLyBTdWJzdGl0dXRl
IHRoZSBkZWZhdWx0IG1vbm9zcGFjZSBmb250IGZvciB3ZWxsLWtub3duIG1vbm9zcGFjZSBmb250
cy4KLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbW9uYWNvKCJt
b25hY28iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbWVubG8oIm1lbmxvIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IGNvdXJpZXIoImNvdXJpZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbW9u
YWNvKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1lbmxvKSkgewotICAgICAgICAgICAg
Zm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGNvdXJpZXIpOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTdWJzdGl0dXRlIFZlcmRhbmEgZm9y
IEx1Y2lkYSBHcmFuZGUuCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IGx1Y2lkYUdyYW5kZSgibHVjaWRhIGdyYW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIGx1Y2lkYUdyYW5kZSkpIHsK
LSAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCB2ZXJkYW5hKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisgICAgLy8gU3Vic3RpdHV0ZSB0aGUg
ZGVmYXVsdCBtb25vc3BhY2UgZm9udCBmb3Igd2VsbC1rbm93biBtb25vc3BhY2UgZm9udHMuCisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbW9uYWNvKCJtb25hY28iLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBtZW5sbygibWVubG8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBj
b3VyaWVyKCJjb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbW9uYWNvKSB8fCBlcXVhbElnbm9yaW5n
Q2FzZShmYW1pbHksIG1lbmxvKSkKKyAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3Jp
cHRpb24sIGNvdXJpZXIpOworCisgICAgLy8gU3Vic3RpdHV0ZSBWZXJkYW5hIGZvciBMdWNpZGEg
R3JhbmRlLgorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGx1Y2lkYUdy
YW5kZSgibHVjaWRhIGdyYW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHZlcmRhbmEoInZlcmRh
bmEiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoZmFtaWx5LCBsdWNpZGFHcmFuZGUpKQorICAgICAgICByZXR1cm4gZm9udEZv
ckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7CiAjZW5kaWYKIAotICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhcmFiaWMoQVNDSUlMaXRlcmFsKCJBcmFiaWMiKSk7Ci0g
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBhc2h0byhBU0NJSUxpdGVyYWwo
IlBhc2h0byIpKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gdXJkdShB
U0NJSUxpdGVyYWwoIlVyZHUiKSk7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNb
M10gPSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07Ci0gICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdlZXphUGxhaW4oIkdlZXph
UHJvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdlZXphQm9sZCgiR2VlemFQcm8tQm9sZCIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBmb3IgKFN0cmlu
ZyogbWF0Y2hXb3JkIDogbWF0Y2hXb3JkcykgewotICAgICAgICAgICAgaWYgKGZhbWlseS5jb250
YWlucygqbWF0Y2hXb3JkLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JG
YW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkp
ID8gZ2VlemFCb2xkIDogZ2VlemFQbGFpbik7Ci0gICAgICAgIH0KKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiBhcmFiaWMoQVNDSUlMaXRlcmFsKCJBcmFiaWMiKSk7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gcGFzaHRvKEFTQ0lJTGl0ZXJhbCgiUGFzaHRvIikp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHVyZHUoQVNDSUlMaXRlcmFsKCJV
cmR1IikpOworICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0
KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gZ2VlemFQbGFpbigiR2VlemFQcm8iLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBnZWV6YUJvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICBmb3IgKFN0cmluZyogbWF0Y2hXb3JkIDogbWF0Y2hXb3Jkcykgewor
ICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zKCptYXRjaFdvcmQsIGZhbHNlKSkKKyAgICAgICAg
ICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRl
c2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOwogICAgIH0KLQot
ICAgIHJldHVybiBmb250LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogVmVj
dG9yPEZvbnRUcmFpdHNNYXNrPiBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0
b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9UaGVtZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9U
aGVtZU1hYy5oCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoQ29udHJvbFBh
cnQpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBPcHRpb25hbDxGb250RGVzY3JpcHRp
b24+IGNvbnRyb2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8Rm9udENhc2Nh
ZGVEZXNjcmlwdGlvbj4gY29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRl
JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgCiAgICAgdmlydHVhbCBM
ZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IExlbmd0aFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIExlbmd0aFNpemUgbWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBG
b250Q2FzY2FkZSYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkocmV2aXNpb24gMTg5NTc5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC03MDAsMTEgKzcwMCwxMSBAQCBpbnQgVGhlbWVNYWM6OmJhc2VsaW5lUG9zaXRpb25BZGp1c3Rt
ZW50CiAgICAgcmV0dXJuIFRoZW1lOjpiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChwYXJ0KTsK
IH0KIAotT3B0aW9uYWw8Rm9udERlc2NyaXB0aW9uPiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ29u
dHJvbFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3Ip
IGNvbnN0CitPcHRpb25hbDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBUaGVtZU1hYzo6Y29udHJv
bEZvbnQoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVz
aEJ1dHRvblBhcnQ6IHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b247CisgICAgICAgICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsK
ICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKIAog
ICAgICAgICAgICAgTlNGb250KiBuc0ZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05T
Rm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOmNvbnRyb2xTaXplRm9yRm9udChmb250
KV1dOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZp
c2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTg1LDcgKzI5ODUsNyBAQCBzdGF0aWMgUmVuZGVyU3R5bGUm
IHN0eWxlRm9yRmlyc3RMZXR0ZXIoCiAgICAgICAgIAogICAgICAgICAvLyBTZXQgdGhlIGZvbnQg
dG8gYmUgb25lIGxpbmUgdG9vIGJpZyBhbmQgdGhlbiByYXRjaGV0IGJhY2sgdG8gZ2V0IHRvIGEg
cHJlY2lzZSBmaXQuIFdlIGNhbid0IGp1c3Qgc2V0IHRoZSBkZXNpcmVkIGZvbnQgc2l6ZSBiYXNl
ZCBvZmYgZm9udCBoZWlnaHQgbWV0cmljcwogICAgICAgICAvLyBiZWNhdXNlIG1hbnkgZm9udHMg
YmFrZSBhc2NlbnQgaW50byB0aGUgZm9udCBtZXRyaWNzLiBUaGVyZWZvcmUgd2UgaGF2ZSB0byBs
b29rIGF0IGFjdHVhbCBtZWFzdXJlZCBjYXAgaGVpZ2h0IHZhbHVlcyBpbiBvcmRlciB0byBrbm93
IHdoZW4gd2UgaGF2ZSBhIGdvb2QgZml0LgotICAgICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9u
dERlc2NyaXB0aW9uID0gcHNldWRvU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBh
dXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IHBzZXVkb1N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsK
ICAgICAgICAgZmxvYXQgY2FwUmF0aW8gPSBwc2V1ZG9TdHlsZS0+Zm9udE1ldHJpY3MoKS5mbG9h
dENhcEhlaWdodCgpIC8gcHNldWRvU3R5bGUtPmZvbnRTaXplKCk7CiAgICAgICAgIGZsb2F0IHN0
YXJ0aW5nRm9udFNpemUgPSAoKHBzZXVkb1N0eWxlLT5pbml0aWFsTGV0dGVySGVpZ2h0KCkgLSAx
KSAqIGxpbmVIZWlnaHQgKyBwYXJhZ3JhcGgtPnN0eWxlKCkuZm9udE1ldHJpY3MoKS5jYXBIZWln
aHQoKSkgLyBjYXBSYXRpbzsKICAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmll
ZFNpemUoc3RhcnRpbmdGb250U2l6ZSk7CkBAIC0yOTk2LDcgKzI5OTYsNyBAQCBzdGF0aWMgUmVu
ZGVyU3R5bGUmIHN0eWxlRm9yRmlyc3RMZXR0ZXIoCiAgICAgICAgIGludCBkZXNpcmVkQ2FwSGVp
Z2h0ID0gKHBzZXVkb1N0eWxlLT5pbml0aWFsTGV0dGVySGVpZ2h0KCkgLSAxKSAqIGxpbmVIZWln
aHQgKyBwYXJhZ3JhcGgtPnN0eWxlKCkuZm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKTsKICAgICAg
ICAgaW50IGFjdHVhbENhcEhlaWdodCA9IHBzZXVkb1N0eWxlLT5mb250TWV0cmljcygpLmNhcEhl
aWdodCgpOwogICAgICAgICB3aGlsZSAoYWN0dWFsQ2FwSGVpZ2h0ID4gZGVzaXJlZENhcEhlaWdo
dCkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbiA9IHBz
ZXVkb1N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIGF1dG8gbmV3Rm9udERl
c2NyaXB0aW9uID0gcHNldWRvU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAg
bmV3Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUobmV3Rm9udERlc2NyaXB0aW9uLnNw
ZWNpZmllZFNpemUoKSAtIDEpOwogICAgICAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENv
bXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgLTEpOwogICAgICAg
ICAgICAgcHNldWRvU3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24p
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJ
KHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjk3LDcgKzM2OTcsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6YWRqdXN0Q29tcHV0ZWRGb250CiAgICAgICAgIGlmIChpc1Zpc2libGVSZW5k
ZXJUZXh0KGRlc2NlbmRlbnQpICYmIHJlc2l6ZVRleHRQZXJtaXR0ZWQoZGVzY2VuZGVudCkpIHsK
ICAgICAgICAgICAgIFJlbmRlclRleHQmIHRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqZGVz
Y2VuZGVudCk7CiAgICAgICAgICAgICBSZW5kZXJTdHlsZSYgb2xkU3R5bGUgPSB0ZXh0LnN0eWxl
KCk7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gb2xkU3R5
bGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9
IG9sZFN0eWxlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgZmxvYXQgc3BlY2lmaWVk
U2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCk7CiAgICAgICAgICAgICBmbG9h
dCBzY2FsZWRTaXplID0gcm91bmRmKHNwZWNpZmllZFNpemUgKiBzY2FsZSk7CiAgICAgICAgICAg
ICBpZiAoc2NhbGVkU2l6ZSA+IDAgJiYgc2NhbGVkU2l6ZSA8IG1pbkZvbnRTaXplKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAJKHJl
dmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5l
VGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBSZW5kZXJDb21i
aW5lVGV4dDo6Y29tYmluZVRleHQoKQogICAgIGlmIChzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbiA9IG9yaWdpbmFsRm9udCgpLmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZGVzY3Jp
cHRpb24gPSBvcmlnaW5hbEZvbnQoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmbG9hdCBlbVdp
ZHRoID0gZGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiB0ZXh0Q29tYmluZU1hcmdpbjsKICAg
ICBib29sIHNob3VsZFVwZGF0ZUZvbnQgPSBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiAxODk1
NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNTksNyArMzU5LDcgQEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9i
amVjdDo6Z2V0UmVwbGFjZW1lbgogICAgIGNvbnRlbnRSZWN0ID0gY29udGVudEJveFJlY3QoKTsK
ICAgICBjb250ZW50UmVjdC5tb3ZlQnkocm91bmRlZEludFBvaW50KGFjY3VtdWxhdGVkT2Zmc2V0
KSk7CiAKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0
VGhlbWUoKS0+c3lzdGVtRm9udChDU1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbCwgZm9udERlc2Ny
aXB0aW9uKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHRCb2xkKTsK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShmcmFtZSgpLnNldHRpbmdzKCku
Zm9udFJlbmRlcmluZ01vZGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnVsbFNjcmVlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZ1bGxTY3JlZW4uY3BwCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcg
Kzg1LDcgQEAgc3RhdGljIFJlZjxSZW5kZXJTdHlsZT4gY3JlYXRlRnVsbFNjcmVlbgogICAgIC8v
IENyZWF0ZSBhIHN0YWNraW5nIGNvbnRleHQ6CiAgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNl
dFpJbmRleChJTlRfTUFYKTsKIAotICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5zZXRGb250RGVz
Y3JpcHRpb24oRm9udERlc2NyaXB0aW9uKCkpOworICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5z
ZXRGb250RGVzY3JpcHRpb24oRm9udENhc2NhZGVEZXNjcmlwdGlvbigpKTsKICAgICBmdWxsc2Ny
ZWVuU3R5bGUuZ2V0KCkuZm9udENhc2NhZGUoKS51cGRhdGUobnVsbHB0cik7CiAKICAgICBmdWxs
c2NyZWVuU3R5bGUuZ2V0KCkuc2V0RGlzcGxheShGTEVYKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE5LDkgKzExOSw5IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6dXBkYXRlRnJvbUVsZW1lbnQoKQog
ICAgICAgICAgICAgICAgIHRleHQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1l
bnQpLnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICAgICAgICAgIGVsc2Ug
aWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgICAg
IHRleHQgPSBkb3duY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50PigqZWxlbWVudCkuZ3JvdXBMYWJl
bFRleHQoKTsKLSAgICAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZCA9IGl0ZW1Gb250LmZv
bnREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgICAgIGQuc2V0V2VpZ2h0KGQuYm9sZGVyV2Vp
Z2h0KCkpOwotICAgICAgICAgICAgICAgIGl0ZW1Gb250ID0gRm9udENhc2NhZGUoZCwgaXRlbUZv
bnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGRlc2NyaXB0aW9uID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CisgICAg
ICAgICAgICAgICAgZGVzY3JpcHRpb24uc2V0V2VpZ2h0KGRlc2NyaXB0aW9uLmJvbGRlcldlaWdo
dCgpKTsKKyAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGRlc2NyaXB0aW9u
LCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRTcGFjaW5nKCkpOwogICAg
ICAgICAgICAgICAgIGl0ZW1Gb250LnVwZGF0ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7
CiAgICAgICAgICAgICB9CiAKQEAgLTQwNSw5ICs0MDUsOSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6
OnBhaW50SXRlbUZvcmVncm91bmQoCiAgICAgci5tb3ZlKGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQo
dGV4dFJ1biwgJml0ZW1TdHlsZSwgaXRlbUZvbnQsIHIpKTsKIAogICAgIGlmIChpczxIVE1MT3B0
R3JvdXBFbGVtZW50PigqbGlzdEl0ZW1FbGVtZW50KSkgewotICAgICAgICBGb250RGVzY3JpcHRp
b24gZCA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBkLnNldFdlaWdodChk
LmJvbGRlcldlaWdodCgpKTsKLSAgICAgICAgaXRlbUZvbnQgPSBGb250Q2FzY2FkZShkLCBpdGVt
Rm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRTcGFjaW5nKCkpOworICAgICAgICBh
dXRvIGRlc2NyaXB0aW9uID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGRl
c2NyaXB0aW9uLnNldFdlaWdodChkZXNjcmlwdGlvbi5ib2xkZXJXZWlnaHQoKSk7CisgICAgICAg
IGl0ZW1Gb250ID0gRm9udENhc2NhZGUoZGVzY3JpcHRpb24sIGl0ZW1Gb250LmxldHRlclNwYWNp
bmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAgIGl0ZW1Gb250LnVwZGF0ZSgm
ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3ICsy
MzAsNyBAQCBib29sIFJlbmRlclRleHQ6OmlzVGV4dEZyYWdtZW50KCkgY29uc3QKIGJvb2wgUmVu
ZGVyVGV4dDo6Y29tcHV0ZVVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkgY29uc3QKIHsKICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwotICAgIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUuZm9udENhc2NhZGUoKS5mb250RGVz
Y3JpcHRpb24oKTsKKyAgICBjb25zdCBhdXRvJiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS5mb250
RGVzY3JpcHRpb24oKTsKICAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS51c2VCYWNrc2xhc2hB
c1llblN5bWJvbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoZm9udERlc2NyaXB0
aW9uLmlzU3BlY2lmaWVkRm9udCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU5LDE4ICsxMTU5LDE4IEBA
IHZvaWQgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmcKICAgICBQYWdlOjp1cGRh
dGVTdHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxDaGFuZ2VJbkVudmlyb25tZW50KCk7CiB9CiAK
LUZvbnREZXNjcmlwdGlvbiYgUmVuZGVyVGhlbWU6OmNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlv
bihDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCkgY29uc3QKK0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
IFJlbmRlclRoZW1lOjpjYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCBzeXN0
ZW1Gb250SUQpIGNvbnN0CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlw
dGlvbj4gY2FwdGlvbjsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9u
PiBpY29uOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IG1lbnU7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gbWVzc2FnZUJveDsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBzbWFsbENhcHRpb247
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc3RhdHVzQmFyOwot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHdlYmtpdE1pbmlDb250
cm9sOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHdlYmtpdFNt
YWxsQ29udHJvbDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiB3
ZWJraXRDb250cm9sOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+
IGRlZmF1bHREZXNjcmlwdGlvbjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2Nh
ZGVEZXNjcmlwdGlvbj4gY2FwdGlvbjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENh
c2NhZGVEZXNjcmlwdGlvbj4gaWNvbjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENh
c2NhZGVEZXNjcmlwdGlvbj4gbWVudTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENh
c2NhZGVEZXNjcmlwdGlvbj4gbWVzc2FnZUJveDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gc21hbGxDYXB0aW9uOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBzdGF0dXNCYXI7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHdlYmtpdE1pbmlDb250cm9sOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiB3ZWJraXRT
bWFsbENvbnRyb2w7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24+IHdlYmtpdENvbnRyb2w7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24+IGRlZmF1bHREZXNjcmlwdGlvbjsKIAogICAgIHN3aXRjaCAoc3lzdGVt
Rm9udElEKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUNhcHRpb246CkBAIC0xMTk5LDcgKzExOTksNyBA
QCBGb250RGVzY3JpcHRpb24mIFJlbmRlclRoZW1lOjpjYWNoZWRTeXN0CiAgICAgfQogfQogCi12
b2lkIFJlbmRlclRoZW1lOjpzeXN0ZW1Gb250KENTU1ZhbHVlSUQgc3lzdGVtRm9udElELCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OnN5
c3RlbUZvbnQoQ1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBmb250RGVzY3JpcHRpb24gPSBjYWNoZWRT
eXN0ZW1Gb250RGVzY3JpcHRpb24oc3lzdGVtRm9udElEKTsKICAgICBpZiAoZm9udERlc2NyaXB0
aW9uLmlzQWJzb2x1dGVTaXplKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuaAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QgeyByZXR1cm4gMC41
OyB9CiAKICAgICAvLyBTeXN0ZW0gZm9udHMgYW5kIGNvbG9ycyBmb3IgQ1NTLgotICAgIHZvaWQg
c3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICB2b2lk
IHN5c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0Owog
ICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoQ1NTVmFsdWVJRCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1
cm4gMDsgfQpAQCAtMjU1LDggKzI1NSw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24mIGNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlv
bihDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCwgRm9u
dERlc2NyaXB0aW9uJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgY2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgc3lzdGVtRm9udElE
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0
aW9uKENTU1ZhbHVlSUQgc3lzdGVtRm9udElELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29u
c3QgPSAwOwogCiAgICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KICAgICB2aXJ0
dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAkocmV2aXNp
b24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyB2b2lkIHNldENvbnRlbnRTaXplQ2F0ZWdvcnkoY29uc3QgU3RyaW5nJik7CiAK
IHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiYgY2FjaGVkU3lzdGVtRm9u
dERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgc3lzdGVtRm9udElEKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVl
SUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiYgY2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQg
c3lzdGVtRm9udElEKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2Fj
aGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNv
bnN0IFJlbmRlckJveCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29u
dHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBG
aWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc4LDI1ICsxMDc4LDI1IEBAIGJvb2wg
UmVuZGVyVGhlbWVJT1M6OnNob3VsZEhhdmVDYXBzTG9ja0kKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLUZvbnREZXNjcmlwdGlvbiYgUmVuZGVyVGhlbWVJT1M6OmNhY2hlZFN5c3RlbUZvbnREZXNj
cmlwdGlvbihDU1NWYWx1ZUlEIHZhbHVlSUQpIGNvbnN0CitGb250Q2FzY2FkZURlc2NyaXB0aW9u
JiBSZW5kZXJUaGVtZUlPUzo6Y2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQg
dmFsdWVJRCkgY29uc3QKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0
aW9uPiBzeXN0ZW1Gb250OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRp
b24+IGhlYWRsaW5lRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0
aW9uPiBib2R5Rm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9u
PiBzdWJoZWFkbGluZUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlw
dGlvbj4gZm9vdG5vdGVGb250OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3Jp
cHRpb24+IGNhcHRpb24xRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2Ny
aXB0aW9uPiBjYXB0aW9uMkZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNj
cmlwdGlvbj4gc2hvcnRIZWFkbGluZUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZv
bnREZXNjcmlwdGlvbj4gc2hvcnRCb2R5Rm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Rm9udERlc2NyaXB0aW9uPiBzaG9ydFN1YmhlYWRsaW5lRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBzaG9ydEZvb3Rub3RlRm9udDsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBzaG9ydENhcHRpb24xRm9udDsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiB0YWxsQm9keUZvbnQ7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHN5c3RlbUZvbnQ7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IGhlYWRs
aW5lRm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlv
bj4gYm9keUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24+IHN1YmhlYWRsaW5lRm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENh
c2NhZGVEZXNjcmlwdGlvbj4gZm9vdG5vdGVGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBjYXB0aW9uMUZvbnQ7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IGNhcHRpb24yRm9udDsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gc2hvcnRIZWFkbGluZUZv
bnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHNo
b3J0Qm9keUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24+IHNob3J0U3ViaGVhZGxpbmVGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxG
b250Q2FzY2FkZURlc2NyaXB0aW9uPiBzaG9ydEZvb3Rub3RlRm9udDsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gc2hvcnRDYXB0aW9uMUZvbnQ7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHRhbGxCb2R5
Rm9udDsKICNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDgwMjAwCi0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gdGl0bGUxRm9udDsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiB0aXRsZTJGb250OwotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHRpdGxlM0ZvbnQ7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHRpdGxlMUZvbnQ7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHRpdGxlMkZv
bnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHRp
dGxlM0ZvbnQ7CiAjZW5kaWYKIAogICAgIHN0YXRpYyBDRlN0cmluZ1JlZiB1c2VyVGV4dFNpemUg
PSBjb250ZW50U2l6ZUNhdGVnb3J5KCk7CkBAIC0xMTU4LDcgKzExNTgsNyBAQCBGb250RGVzY3Jp
cHRpb24mIFJlbmRlclRoZW1lSU9TOjpjYWNoZWRTCiAgICAgfQogfQogCi12b2lkIFJlbmRlclRo
ZW1lSU9TOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1
ZUlELCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVJT1M6OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHZh
bHVlSUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsK
ICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3I7CiAgICAg
Q0ZTdHJpbmdSZWYgdGV4dFN0eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLmgJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgflJlbmRlclRoZW1lTWFjKCk7CiAKICAgICAvLyBTeXN0
ZW0gZm9udHMuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlw
dGlvbihDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQs
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShW
SURFTykKICAgICAvLyBNZWRpYSBjb250cm9scwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNyAr
MzM4LDcgQEAgc3RhdGljIEZvbnRXZWlnaHQgdG9Gb250V2VpZ2h0KE5TSW50ZWdlcgogICAgIHJl
dHVybiBmb250V2VpZ2h0c1thcHBLaXRGb250V2VpZ2h0IC0gMV07CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVNYWM6OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIGNz
c1ZhbHVlSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZU1hYzo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVl
SUQgY3NzVmFsdWVJZCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBj
b25zdAogewogICAgIE5TRm9udCogZm9udDsKICAgICAvLyBTeXN0ZW0tZm9udC1uZXNzIGNhbid0
IGJlIGVuY2Fwc3VsYXRlZCBieSBzaW1wbHkgYSBmb250IG5hbWUuIEluc3RlYWQsIHdlIG11c3Qg
dXNlIGEgdG9rZW4KQEAgLTgyMyw3ICs4MjMsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRT
aXplRnJvbUZvbnQoUmVuCiAKIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJv
bFNpemUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgTlNDb250cm9sU2l6ZSBj
b250cm9sU2l6ZSkgY29uc3QKIHsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
OworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKIAogICAgIE5TRm9udCogZm9udCA9
IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJv
bFNpemU6Y29udHJvbFNpemVdXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
QXV0b1NpemluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvU2l6aW5nLmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3
IEBAIGJvb2wgVGV4dEF1dG9TaXppbmdWYWx1ZTo6YWRqdXN0Tm9kZVNpemUKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9
IGNsb25lUmVuZGVyU3R5bGVXaXRoU3RhdGUodGV4dC0+c3R5bGUoKSk7Ci0gICAgICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
OworICAgICAgICAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGF2ZXJh
Z2VTaXplKTsKICAgICAgICAgICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKICAgICAgICAgICAgIHN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmYXV0b1Np
emluZ05vZGUtPmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwpAQCAtMjE0LDcgKzIxNCw3IEBA
IHZvaWQgVGV4dEF1dG9TaXppbmdWYWx1ZTo6cmVzZXQoKQogICAgICAgICBpZiAoIXRleHQpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gUmVzZXQgdGhlIGZvbnQgc2l6ZSBiYWNr
IHRvIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgc2l6ZQotICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gdGV4dC0+c3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSB0ZXh0LT5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigp
OwogICAgICAgICBmbG9hdCBvcmlnaW5hbFNpemUgPSBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVk
U2l6ZSgpOwogICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICE9IG9y
aWdpbmFsU2l6ZSkgewogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShvcmlnaW5hbFNpemUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxUb2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxUb2tlbi5jcHAJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MVG9rZW46OnVwZGF0
ZVN0eWxlKCkKICAgICBpZiAodG9rZW5FbGVtZW50Lmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1p
VGFnKSkgewogICAgICAgICAvLyBUaGlzIHRyaWVzIHRvIGVtdWxhdGUgdGhlIGRlZmF1bHQgbWF0
aHZhcmlhbnQgdmFsdWUgb24gPG1pPiB1c2luZyB0aGUgQ1NTIGZvbnQtc3R5bGUgcHJvcGVydHku
CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZXZpc2VkIHdoZW4gbWF0aHZhcmlh
bnQgaXMgaW1wbGVtZW50ZWQgKGh0dHA6Ly93a2J1Zy84NTczNSkgYW5kIHdoZW4gZm9udHMgd2l0
aCBNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMgY2hhcmFjdGVycyBhcmUgbW9yZSBw
b3B1bGFyLgotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKG5ld1N0eWxl
LmdldCgpLmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICAgICAgYXV0byBmb250RGVzY3JpcHRpb24g
PSBuZXdTdHlsZS5nZXQoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgRm9udFNlbGVjdG9y
KiBmb250U2VsZWN0b3IgPSBuZXdTdHlsZS5nZXQoKS5mb250Q2FzY2FkZSgpLmZvbnRTZWxlY3Rv
cigpOwogICAgICAgICBpZiAoIW1fY29udGFpbnNFbGVtZW50ICYmIGVsZW1lbnQoKS50ZXh0Q29u
dGVudCgpLnN0cmlwV2hpdGVTcGFjZSgpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpLmxlbmd0aCgpID09
IDEgJiYgIXRva2VuRWxlbWVudC5oYXNBdHRyaWJ1dGUobWF0aHZhcmlhbnRBdHRyKSkKICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udEl0YWxpY09uKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNp
b24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMSw3ICsxNDAxLDcgQEAgY29uc3QgQW5pbWF0aW9u
KiBSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbgogCiBjb25zdCBGb250Q2FzY2FkZSYgUmVuZGVyU3R5
bGU6OmZvbnRDYXNjYWRlKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZTsg
fQogY29uc3QgRm9udE1ldHJpY3MmIFJlbmRlclN0eWxlOjpmb250TWV0cmljcygpIGNvbnN0IHsg
cmV0dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGUuZm9udE1ldHJpY3MoKTsgfQotY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBSZW5kZXJTdHlsZTo6Zm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1
cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKTsgfQorY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYgUmVuZGVyU3R5bGU6OmZvbnREZXNjcmlwdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCk7IH0KIGZs
b2F0IFJlbmRlclN0eWxlOjpzcGVjaWZpZWRGb250U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnRE
ZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsgfQogZmxvYXQgUmVuZGVyU3R5bGU6OmNvbXB1
dGVkRm9udFNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNp
emUoKTsgfQogaW50IFJlbmRlclN0eWxlOjpmb250U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluaGVy
aXRlZC0+Zm9udENhc2NhZGUucGl4ZWxTaXplKCk7IH0KQEAgLTE0MDksNyArMTQwOSw3IEBAIGlu
dCBSZW5kZXJTdHlsZTo6Zm9udFNpemUoKSBjb25zdCB7IHJldHUKIGNvbnN0IExlbmd0aCYgUmVu
ZGVyU3R5bGU6OndvcmRTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEt
PndvcmRTcGFjaW5nOyB9CiBmbG9hdCBSZW5kZXJTdHlsZTo6bGV0dGVyU3BhY2luZygpIGNvbnN0
IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGUubGV0dGVyU3BhY2luZygpOyB9CiAKLWJv
b2wgUmVuZGVyU3R5bGU6OnNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24m
IHYpCitib29sIFJlbmRlclN0eWxlOjpzZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYgdikKIHsKICAgICBpZiAoaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5mb250
RGVzY3JpcHRpb24oKSAhPSB2KSB7CiAgICAgICAgIGluaGVyaXRlZC5hY2Nlc3MoKS0+Zm9udENh
c2NhZGUgPSBGb250Q2FzY2FkZSh2LCBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmxldHRlclNwYWNp
bmcoKSwgaW5oZXJpdGVkLT5mb250Q2FzY2FkZS53b3JkU3BhY2luZygpKTsKQEAgLTE0OTQsMTkg
KzE0OTQsMTkgQEAgdm9pZCBSZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUoZmxvYXQgc2l6ZQogICAg
ICAgICBzaXplID0gc3RkOjptaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgc2l6ZSk7CiAKICAg
ICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBmb250Q2FzY2FkZSgpLmZvbnRT
ZWxlY3RvcigpOwotICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjKGZvbnREZXNjcmlwdGlvbigpKTsK
LSAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgZGVzYy5zZXRDb21wdXRlZFNp
emUoc2l6ZSk7CisgICAgYXV0byBkZXNjcmlwdGlvbiA9IGZvbnREZXNjcmlwdGlvbigpOworICAg
IGRlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgZGVzY3JpcHRpb24uc2V0
Q29tcHV0ZWRTaXplKHNpemUpOwogCiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKICAgICBm
bG9hdCBtdWx0aXBsaWVyID0gdGV4dEF1dG9zaXppbmdNdWx0aXBsaWVyKCk7CiAgICAgaWYgKG11
bHRpcGxpZXIgPiAxKSB7CiAgICAgICAgIGZsb2F0IGF1dG9zaXplZEZvbnRTaXplID0gVGV4dEF1
dG9zaXplcjo6Y29tcHV0ZUF1dG9zaXplZEZvbnRTaXplKHNpemUsIG11bHRpcGxpZXIpOwotICAg
ICAgICBkZXNjLnNldENvbXB1dGVkU2l6ZShtaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgYXV0
b3NpemVkRm9udFNpemUpKTsKKyAgICAgICAgZGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG1p
bihtYXhpbXVtQWxsb3dlZEZvbnRTaXplLCBhdXRvc2l6ZWRGb250U2l6ZSkpOwogICAgIH0KICNl
bmRpZgogCi0gICAgc2V0Rm9udERlc2NyaXB0aW9uKGRlc2MpOworICAgIHNldEZvbnREZXNjcmlw
dGlvbihkZXNjcmlwdGlvbik7CiAgICAgZm9udENhc2NhZGUoKS51cGRhdGUoY3VycmVudEZvbnRT
ZWxlY3Rvcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjk5LDcgKzY5OSw3IEBA
IHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2Fz
Y2FkZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250
TWV0cmljcygpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3Q7CiAgICAgZmxvYXQg
c3BlY2lmaWVkRm9udFNpemUoKSBjb25zdDsKICAgICBmbG9hdCBjb21wdXRlZEZvbnRTaXplKCkg
Y29uc3Q7CiAgICAgaW50IGZvbnRTaXplKCkgY29uc3Q7CkBAIC0xMzM0LDcgKzEzMzQsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRDbGVhcihFQ2xlYXIgdikgeyBub25pbmhlcml0ZWRfZmxhZ3Mu
c2V0Q2xlYXIodik7IH0KICAgICB2b2lkIHNldFRhYmxlTGF5b3V0KEVUYWJsZUxheW91dCB2KSB7
IG5vbmluaGVyaXRlZF9mbGFncy5zZXRUYWJsZUxheW91dCh2KTsgfQogCi0gICAgYm9vbCBzZXRG
b250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgYm9vbCBzZXRGb250
RGVzY3JpcHRpb24oY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOwogICAgIC8vIE9ubHkg
dXNlZCBmb3IgYmxlbmRpbmcgZm9udCBzaXplcyB3aGVuIGFuaW1hdGluZywgZm9yIE1hdGhNTCBh
bm9ueW1vdXMgYmxvY2tzLCBhbmQgZm9yIHRleHQgYXV0b3NpemluZy4KICAgICB2b2lkIHNldEZv
bnRTaXplKGZsb2F0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21w
dXRlTmV3U2NhbAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbihzdHlsZS5mb250RGVzY3JpcHRpb24oKSk7CisgICAgYXV0byBmb250
RGVzY3JpcHRpb24gPSBzdHlsZS5mb250RGVzY3JpcHRpb24oKTsKIAogICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIHRvIGJldHRlciBoYW5kbGUgdGhlIGNhc2Ugd2hlbiB3ZSBjb21wdXRlIHZlcnkgc21h
bGwgZm9udHMgYmVsb3cgKGJlbG93IDFwdCkuCiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplRm9yU1ZHSW5s
aW5lVGV4dChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCksIGZvbnREZXNjcmlwdGlvbi5p
c0Fic29sdXRlU2l6ZSgpLCBzY2FsaW5nRmFjdG9yLCByZW5kZXJlci5kb2N1bWVudCgpKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0MSw3ICszNDEsNyBAQCBHbHlwaERhdGEgU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQ6OmdsCiAKICAgICAvLyBTVkcgZm9udCBjb250ZXh0IHNlbnNpdGl2ZSBzZWxlY3Rp
b24gZmFpbGVkIGFuZCB0aGVyZSBpcyBubyBkZWZpbmVkIG1pc3NpbmcgZ2x5cGguIERyb3AgZG93
biB0byBhIGRlZmF1bHQgZm9udC4KICAgICAvLyBUaGUgYmVoYXZpb3IgZG9lcyBub3Qgc2VlbSB0
byBiZSBzcGVjaWZpZWQuIEZvciBzaW1wbGljaXR5IHdlIGRvbid0IHRyeSB0byByZXNvbHZlIGZv
bnQgZmFsbGJhY2tzIGNvbnRleHQtc2Vuc2l0aXZlbHkuCi0gICAgRm9udERlc2NyaXB0aW9uIGZh
bGxiYWNrRGVzY3JpcHRpb24gPSBmb250LmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZmFs
bGJhY2tEZXNjcmlwdGlvbiA9IGZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZmFsbGJhY2tE
ZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhWZWN0b3I8QXRvbWljU3RyaW5nPiB7IHNhbnNTZXJpZkZh
bWlseSB9KTsKICAgICBGb250Q2FzY2FkZSBmYWxsYmFja0ZvbnQoZmFsbGJhY2tEZXNjcmlwdGlv
biwgZm9udC5sZXR0ZXJTcGFjaW5nKCksIGZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgZmFsbGJh
Y2tGb250LnVwZGF0ZShmb250LmZvbnRTZWxlY3RvcigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHJldmlzaW9uIDE4OTU3
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBSZWY8UmVuZGVyU3R5bGU+IHJlc29sdmVG
b3JEb2N1bWVudChjb25zCiAgICAgZG9jdW1lbnRTdHlsZS5nZXQoKS5zZXRSVExPcmRlcmluZyhk
b2N1bWVudC52aXN1YWxseU9yZGVyZWQoKSA/IFZpc3VhbE9yZGVyIDogTG9naWNhbE9yZGVyKTsK
ICAgICBkb2N1bWVudFN0eWxlLmdldCgpLnNldFpvb20oIWRvY3VtZW50LnByaW50aW5nKCkgPyBy
ZW5kZXJWaWV3LmZyYW1lKCkucGFnZVpvb21GYWN0b3IoKSA6IDEpOwogICAgIGRvY3VtZW50U3R5
bGUuZ2V0KCkuc2V0UGFnZVNjYWxlVHJhbnNmb3JtKHJlbmRlclZpZXcuZnJhbWUoKS5mcmFtZVNj
YWxlRmFjdG9yKCkpOwotICAgIEZvbnREZXNjcmlwdGlvbiBkb2N1bWVudEZvbnREZXNjcmlwdGlv
biA9IGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBkb2N1
bWVudEZvbnREZXNjcmlwdGlvbiA9IGRvY3VtZW50U3R5bGUuZ2V0KCkuZm9udERlc2NyaXB0aW9u
KCk7CiAgICAgZG9jdW1lbnRGb250RGVzY3JpcHRpb24uc2V0TG9jYWxlKGRvY3VtZW50LmNvbnRl
bnRMYW5ndWFnZSgpKTsKICAgICBkb2N1bWVudFN0eWxlLmdldCgpLnNldEZvbnREZXNjcmlwdGlv
bihXVEY6Om1vdmUoZG9jdW1lbnRGb250RGVzY3JpcHRpb24pKTsKIApAQCAtOTgsNyArOTgsNyBA
QCBSZWY8UmVuZGVyU3R5bGU+IHJlc29sdmVGb3JEb2N1bWVudChjb25zCiAKICAgICBjb25zdCBT
ZXR0aW5ncyYgc2V0dGluZ3MgPSByZW5kZXJWaWV3LmZyYW1lKCkuc2V0dGluZ3MoKTsKIAotICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldExvY2FsZShkb2N1
bWVudC5jb250ZW50TGFuZ3VhZ2UoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmlu
Z01vZGUoc2V0dGluZ3MuZm9udFJlbmRlcmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9u
LnNldE9uZUZhbWlseShzdGFuZGFyZEZhbWlseSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261002</attachid>
            <date>2015-09-11 03:55:49 -0700</date>
            <delta_ts>2015-09-15 14:39:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fontdescription-split-3.patch</filename>
            <type>text/plain</type>
            <size>106612</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE1LTA5LTEwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBGb250RGVzY3JpcHRp
b24gaW50byBsb3dlciBhbmQgaGlnaGVyIGxldmVsIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkwMzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgRm9udERlc2NyaXB0aW9uIGlz
IHVzZWQgdGhyb3VnaCB0aGUgdGV4dCBzdWJzeXN0ZW0uIEhvd2V2ZXIgbXVjaCBvZiB0aGUgZGF0
YSBpdAorICAgICAgICBjYXJyaWVzIGlzIG9ubHkgbmVlZGVkIGJ5IEZvbnRDYXNjYWRlIGFuZCB0
ZXh0IGxheW91dCBidXQgbm90IGJ5IHRoZSBsb3dlciBsZXZlbCBGb250L0ZvbnRDYWNoZQorICAg
ICAgICBsYXllci4gVGhpcyBtYWtlcyBjb2RlIGNvbmZ1c2luZy4gRm9yIGV4YW1wbGUgZmFtaWxp
ZXMgc3BlY2lmaWVkIGluIEZvbnREZXNjcmlwdGlvbiBhcmUgaWdub3JlZAorICAgICAgICBhdCBs
b3dlciBsZXZlbHMuCisKKyAgICAgICAgU3BsaXQgaXQgaW50byBhIGxvdyBsZXZlbCBGb250RGVz
Y3JpcHRpb24gYW5kIGEgaGlnaCBsZXZlbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uIHR5cGU6CisK
KyAgICAgICAgRm9udERlc2NyaXB0aW9uIDwtPiBGb250CisgICAgICAgIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gPC0+IEZvbnRDYXNjYWRlCisKKyAgICAgICAgVGhlIGZvcm1lciBvbmx5IGNhcnJp
ZXMgaW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWQgdG8gaW5zdGFudGlhdGUgYSBGb250IG9yIGZl
dGNoIGl0IGZyb20gdGhlIEZvbnRDYWNoZS4KKyAgICAgICAgVGhlIGxhdHRlciBoYXMgYWRkaXRp
b25hbCBkYXRhIGZvciBDU1MgZm9udCBjYXNjYWRlIHNlbWFudGljcyBhbmQgb3RoZXIgaGlnaGVy
IGxldmVsIGZlYXR1cmVzLgorCiAyMDE1LTA5LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgTm9kZS5hcHBlbmRDaGlsZChudWxsKSAvIHJlcGxhY2VDaGlsZChu
dWxsLCBudWxsKSAvIHJlbW92ZUNoaWxkKG51bGwpIC8gaW5zZXJ0QmVmb3JlKG51bGwsIHJlZikg
c2hvdWxkIHRocm93IGEgVHlwZUVycm9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3MjQsMjAgKzI3MjQsMjAgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRl
ZFN0eWxlRXh0cmFjdG9yOgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNtb290
aGluZzoKICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpLmZvbnRTbW9vdGhpbmcoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRGb250VmFyaWFudExpZ2F0dXJlczogewotICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IHN0eWxlLT5mb250
RGVzY3JpcHRpb24oKS5jb21tb25MaWdhdHVyZXNTdGF0ZSgpOwotICAgICAgICAgICAgRm9udERl
c2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKCk7Ci0g
ICAgICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGhpc3RvcmljYWxMaWdh
dHVyZXNTdGF0ZSA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5oaXN0b3JpY2FsTGlnYXR1cmVz
U3RhdGUoKTsKLSAgICAgICAgICAgIGlmIChjb21tb25MaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVz
Y3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlICYmIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNT
dGF0ZSA9PSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlCi0gICAgICAgICAg
ICAgICAgJiYgaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID09IEZvbnREZXNjcmlwdGlvbjo6Tm9y
bWFsTGlnYXR1cmVzU3RhdGUpCisgICAgICAgICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpM
aWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5jb21tb25MaWdhdHVyZXNTdGF0ZSgpOworICAgICAgICAgICAgRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpOworICAg
ICAgICAgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgaGlzdG9yaWNh
bExpZ2F0dXJlc1N0YXRlID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmhpc3RvcmljYWxMaWdh
dHVyZXNTdGF0ZSgpOworICAgICAgICAgICAgaWYgKGNvbW1vbkxpZ2F0dXJlc1N0YXRlID09IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlICYmIGRpc2NyZXRpb25h
cnlMaWdhdHVyZXNTdGF0ZSA9PSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVy
ZXNTdGF0ZQorICAgICAgICAgICAgICAgICYmIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9PSBG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
cm1hbCk7CiAKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlTGlzdCA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICAgICAgICAgIGlmIChjb21t
b25MaWdhdHVyZXNTdGF0ZSAhPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRl
KQotICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoY29tbW9uTGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9uOjpE
aXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0NvbW1vbkxpZ2F0dXJlcyA6IENTU1Zh
bHVlQ29tbW9uTGlnYXR1cmVzKSk7Ci0gICAgICAgICAgICBpZiAoZGlzY3JldGlvbmFyeUxpZ2F0
dXJlc1N0YXRlICE9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpCi0gICAg
ICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9uOjpE
aXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0Rpc2NyZXRpb25hcnlMaWdhdHVyZXMg
OiBDU1NWYWx1ZURpc2NyZXRpb25hcnlMaWdhdHVyZXMpKTsKLSAgICAgICAgICAgIGlmIChoaXN0
b3JpY2FsTGlnYXR1cmVzU3RhdGUgIT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNT
dGF0ZSkKLSAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVzY3Jp
cHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vSGlzdG9yaWNhbExpZ2F0
dXJlcyA6IENTU1ZhbHVlSGlzdG9yaWNhbExpZ2F0dXJlcykpOworICAgICAgICAgICAgaWYgKGNv
bW1vbkxpZ2F0dXJlc1N0YXRlICE9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0
dXJlc1N0YXRlKQorICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9v
bC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY29tbW9uTGlnYXR1cmVzU3RhdGUgPT0gRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSA/IENTU1ZhbHVlTm9Db21tb25M
aWdhdHVyZXMgOiBDU1NWYWx1ZUNvbW1vbkxpZ2F0dXJlcykpOworICAgICAgICAgICAgaWYgKGRp
c2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSAhPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3Jt
YWxMaWdhdHVyZXNTdGF0ZSkKKyAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NW
YWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0
ZSA9PSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NT
VmFsdWVOb0Rpc2NyZXRpb25hcnlMaWdhdHVyZXMgOiBDU1NWYWx1ZURpc2NyZXRpb25hcnlMaWdh
dHVyZXMpKTsKKyAgICAgICAgICAgIGlmIChoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgIT0gRm9u
dENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpCisgICAgICAgICAgICAg
ICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSho
aXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPT0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6RGlzYWJs
ZWRMaWdhdHVyZXNTdGF0ZSA/IENTU1ZhbHVlTm9IaXN0b3JpY2FsTGlnYXR1cmVzIDogQ1NTVmFs
dWVIaXN0b3JpY2FsTGlnYXR1cmVzKSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWVMaXN0Owog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlaSW5kZXg6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MCw3
ICs1OTAsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YmVnaW5Mb2FkVGltZXJGaXJlCiAgICAg
ICAgIG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLmNoZWNrTG9hZENvbXBsZXRlKCk7CiB9
CiAKLWJvb2wgQ1NTRm9udFNlbGVjdG9yOjpyZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uKSBjb25zdAorYm9vbCBDU1NGb250U2VsZWN0b3I6OnJlc29s
dmVzRmFtaWx5Rm9yKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKSBj
b25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXNjcmlwdGlvbi5mYW1pbHlD
b3VudCgpOyArK2kpIHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lID0g
ZGVzY3JpcHRpb24uZmFtaWx5QXQoaSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxl
Y3Rvci5oCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNl
bGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAgY2xhc3MgQ1NTRm9udEZh
Y2VSdWxlOwogY2xhc3MgQ1NTU2VnbWVudGVkRm9udEZhY2U7CiBjbGFzcyBDYWNoZWRGb250Owog
Y2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBTdHlsZVJ1bGVG
b250RmFjZTsKIAogY2xhc3MgQ1NTRm9udFNlbGVjdG9yIGZpbmFsIDogcHVibGljIEZvbnRTZWxl
Y3RvciB7CkBAIC02Myw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Rm9udD4gZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgc2l6ZV90KSBvdmVy
cmlkZTsKICAgICBDU1NTZWdtZW50ZWRGb250RmFjZSogZ2V0Rm9udEZhY2UoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOwogCi0gICAgdmlydHVhbCBi
b29sIHJlc29sdmVzRmFtaWx5Rm9yKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNsZWFyRG9jdW1lbnQo
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDE4OTU3OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjUx
LDcgKzY2NTEsNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Gb250KGJvb2wgaW1wCiAg
ICAgQVNTRVJUKHN5c3RlbUZvbnRJRCA+PSBDU1NWYWx1ZUNhcHRpb24gJiYgc3lzdGVtRm9udElE
IDw9IENTU1ZhbHVlU3RhdHVzQmFyKTsKICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogCi0gICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5
c3RlbUZvbnQoc3lzdGVtRm9udElELCBmb250RGVzY3JpcHRpb24pOwogICAgIGlmICghZm9udERl
c2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAkocmV2aXNpb24g
MTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQzOCwxOCArMzQzOCwxOCBAQCB0ZW1wbGF0ZTw+IGlubGlu
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlCiAgICAgcmV0dXJuIFBFX0FMTDsKIH0KIAotdGVtcGxh
dGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEZvbnREZXNj
cmlwdGlvbjo6S2VybmluZyBrZXJuaW5nKQordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Oktlcm5pbmcg
a2VybmluZykKICAgICA6IENTU1ZhbHVlKFByaW1pdGl2ZUNsYXNzKQogewogICAgIG1fcHJpbWl0
aXZlVW5pdFR5cGUgPSBDU1NfVkFMVUVfSUQ7CiAgICAgc3dpdGNoIChrZXJuaW5nKSB7Ci0gICAg
Y2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOgorICAgIGNhc2UgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc6CiAgICAgICAgIG1fdmFsdWUudmFsdWVJRCA9IENTU1Zh
bHVlQXV0bzsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb3Jt
YWxLZXJuaW5nOgorICAgIGNhc2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsS2Vybmlu
ZzoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVOb3JtYWw7CiAgICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9uZUtlcm5pbmc6CisgICAgY2FzZSBG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb25lS2VybmluZzoKICAgICAgICAgbV92YWx1ZS52YWx1
ZUlEID0gQ1NTVmFsdWVOb25lOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ1OCwyMyAr
MzQ1OCwyMyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTCiAgICAg
bV92YWx1ZS52YWx1ZUlEID0gQ1NTVmFsdWVBdXRvOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBD
U1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3IgRm9udERlc2NyaXB0aW9uOjpLZXJuaW5nKCkgY29u
c3QKK3RlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpLZXJuaW5nKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNWYWx1ZUlE
KCkpOwogCiAgICAgc3dpdGNoIChtX3ZhbHVlLnZhbHVlSUQpIHsKICAgICBjYXNlIENTU1ZhbHVl
QXV0bzoKLSAgICAgICAgcmV0dXJuIEZvbnREZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc7CisgICAg
ICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpBdXRvS2VybmluZzsKICAgICBjYXNl
IENTU1ZhbHVlTm9ybWFsOgotICAgICAgICByZXR1cm4gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxL
ZXJuaW5nOworICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsS2Vy
bmluZzsKICAgICBjYXNlIENTU1ZhbHVlTm9uZToKLSAgICAgICAgcmV0dXJuIEZvbnREZXNjcmlw
dGlvbjo6Tm9uZUtlcm5pbmc7CisgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9u
OjpOb25lS2VybmluZzsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRm9udERlc2NyaXB0aW9uOjpBdXRv
S2VybmluZzsKKyAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc7
CiB9CiAKIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVW
YWx1ZShPYmplY3RGaXQgZml0KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRl
ckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJD
dXN0b20uaAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVp
bGRlckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNyArNjkzLDcgQEAgaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbAogewogICAgIGF1dG8mIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICAKLSAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRMb2Nh
bGUobnVsbEF0b20pOwogICAgIGVsc2UKQEAgLTgyMyw4ICs4MjMsOCBAQCBpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiAKIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbml0aWFsRm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
KQogewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgIEZvbnREZXNjcmlwdGlvbiBpbml0aWFs
RGVzYyA9IEZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGluaXRpYWxE
ZXNjID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbigpOwogCiAgICAgLy8gV2UgbmVlZCB0byBhZGp1
c3QgdGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9t
IG1vbm9zcGFjZSB0byBub24tbW9ub3NwYWNlLgogICAgIGlmIChmb250RGVzY3JpcHRpb24udXNl
Rml4ZWREZWZhdWx0U2l6ZSgpKSB7CkBAIC04MzksOCArODM5LDggQEAgaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaQogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdEZvbnRGYW1pbHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikK
IHsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBGb250RGVzY3JpcHRpb24gcGFyZW50Rm9u
dERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHls
ZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogCiAgICAgZm9udERl
c2NyaXB0aW9uLnNldEZhbWlsaWVzKHBhcmVudEZvbnREZXNjcmlwdGlvbi5mYW1pbGllcygpKTsK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNTcGVjaWZpZWRGb250KHBhcmVudEZvbnREZXNjcmlw
dGlvbi5pc1NwZWNpZmllZEZvbnQoKSk7CkBAIC04NTEsNyArODUxLDcgQEAgaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbAogewogICAgIGF1dG8mIHZhbHVlTGlzdCA9IGRv
d25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpOwogCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNj
cmlwdGlvbigpOwogICAgIC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHBy
b3BlcnR5LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgogICAgIGJvb2wgb2xk
RmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZh
dWx0U2l6ZSgpOwogCkBAIC0xMjQyLDE0ICsxMjQyLDE0IEBAIGlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWwKIAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxGb250V2VpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0g
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERl
c2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZv
bnREZXNjcmlwdGlvbigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdo
dE5vcm1hbCk7CiAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKIH0KIAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVy
aXRGb250V2VpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9u
KCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlw
dGlvbigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoc3R5bGVSZXNvbHZlci5wYXJl
bnRGb250RGVzY3JpcHRpb24oKS53ZWlnaHQoKSk7CiAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKIH0KQEAgLTEyNTcsNyArMTI1Nyw3IEBAIGlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmgKIGlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRXZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKLSAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBh
dXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICBjYXNlIENTU1Zh
bHVlSW52YWxpZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzkwLDE5ICsx
MzkwLDE5IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWwKIAogaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRGb250VmFyaWFu
dExpZ2F0dXJlcyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQogewotICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigp
OworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRp
b24oKTsKIAotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShGb250
RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKLSAgICBmb250RGVzY3JpcHRpb24u
c2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGln
YXR1cmVzU3RhdGUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3JpY2FsTGlnYXR1cmVz
U3RhdGUoRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246
Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0RGlzY3JldGlv
bmFyeUxpZ2F0dXJlc1N0YXRlKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJl
c1N0YXRlKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRl
KEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKIAogICAgIHN0
eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKIGlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0V2Via2l0Rm9udFZhcmlh
bnRMaWdhdHVyZXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAgICBjb25zdCBG
b250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIucGFy
ZW50Rm9udERlc2NyaXB0aW9uKCk7Ci0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgYXV0byYgcGFy
ZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24o
KTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0
aW9uKCk7CiAKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUocGFy
ZW50Rm9udERlc2NyaXB0aW9uLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpOwogICAgIGZvbnREZXNj
cmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUocGFyZW50Rm9udERlc2NyaXB0
aW9uLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpKTsKQEAgLTE0MTMsMzAgKzE0MTMsMzAg
QEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaAogCiBpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRGb250VmFyaWFudExpZ2F0dXJl
cyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAg
Rm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZv
bnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7Ci0gICAgRm9udERlc2NyaXB0aW9u
OjpMaWdhdHVyZXNTdGF0ZSBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3Jp
cHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwotICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1
cmVzU3RhdGUgaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3Jt
YWxMaWdhdHVyZXNTdGF0ZTsKKyAgICBhdXRvIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CisgICAgYXV0byBkaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdh
dHVyZXNTdGF0ZTsKKyAgICBhdXRvIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwogCiAgICAgaWYgKGlzPENTU1Zh
bHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENT
U1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVOb0NvbW1vbkxpZ2F0dXJlczoKLSAgICAgICAgICAgICAgICBjb21tb25MaWdh
dHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAg
ICAgICAgICAgICAgICBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICAgICAgICAgIGNv
bW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3Rh
dGU7CisgICAgICAgICAgICAgICAgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9EaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgotICAg
ICAgICAgICAgICAgIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlv
bjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgICAgICAgICBkaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzU3RhdGUgPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJl
c1N0YXRlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZURpc2NyZXRpb25hcnlMaWdhdHVyZXM6Ci0gICAgICAgICAgICAgICAgZGlzY3JldGlvbmFyeUxp
Z2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU7Cisg
ICAgICAgICAgICAgICAgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vSGlzdG9yaWNhbExpZ2F0dXJlczoKLSAgICAg
ICAgICAgICAgICBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246OkRp
c2FibGVkTGlnYXR1cmVzU3RhdGU7CisgICAgICAgICAgICAgICAgaGlzdG9yaWNhbExpZ2F0dXJl
c1N0YXRlID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVIaXN0b3Jp
Y2FsTGlnYXR1cmVzOgotICAgICAgICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9
IEZvbnREZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOworICAgICAgICAgICAgICAg
IGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkVuYWJs
ZWRMaWdhdHVyZXNTdGF0ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDQ2LDcg
KzE0NDYsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiAgICAg
fSBlbHNlCiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCk7CiAKLSAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBh
dXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKGNvbW1vbkxpZ2F0dXJl
c1N0YXRlKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0
YXRlKGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUpOwpAQCAt
MTQ1NSw3ICsxNDU1LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bAogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRTaXpl
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpOwogICAgIGZsb2F0IHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3Jk
KENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBz
dHlsZVJlc29sdmVyLmRvY3VtZW50KCkpOwogCiAgICAgaWYgKHNpemUgPCAwKQpAQCAtMTQ2OCwx
MyArMTQ2OCwxMyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pCiAK
IGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFNpemUoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24m
IHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9u
dERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgYXV0byYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICBmbG9h
dCBzaXplID0gcGFyZW50Rm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKTsKIAogICAgIGlm
IChzaXplIDwgMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNj
cmlwdGlvbigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShwYXJlbnRGb250
RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSk7CiAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250U2l6
ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwogICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CkBAIC0xNTE2LDcgKzE1MTYsNyBAQCBpbmxpbmUgZmxv
YXQgU3R5bGVCdWlsZGVyQ3VzdG9tOjpkZXRlcm1pCiAKIGlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFs
dWVJbnZhbGlkKTsKIAogICAgIGZsb2F0IHBhcmVudFNpemUgPSAwOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzk5LDExICsxMzk5
LDExIEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UoUmUKICAgICBOb25D
SktHbHlwaE9yaWVudGF0aW9uIGdseXBoT3JpZW50YXRpb247CiAgICAgc3R5bGUtPmdldEZvbnRB
bmRHbHlwaE9yaWVudGF0aW9uKGZvbnRPcmllbnRhdGlvbiwgZ2x5cGhPcmllbnRhdGlvbik7CiAK
LSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsKKyAgICBjb25zdCBhdXRvJiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigp
ID09IGZvbnRPcmllbnRhdGlvbiAmJiBmb250RGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRh
dGlvbigpID09IGdseXBoT3JpZW50YXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEZvbnRE
ZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICBhdXRv
IG5ld0ZvbnREZXNjcmlwdGlvbiA9IGZvbnREZXNjcmlwdGlvbjsKICAgICBuZXdGb250RGVzY3Jp
cHRpb24uc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihnbHlwaE9yaWVudGF0aW9uKTsKICAgICBu
ZXdGb250RGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24oZm9udE9yaWVudGF0aW9uKTsKICAgICBz
dHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CkBAIC0xOTU4LDcg
KzE5NTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1CiAgICAg
aWYgKHN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKSk7CisgICAgYXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBzdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgaWYgKCFzdHlsZS0+dGV4dFNpemVBZGp1c3QoKS5pc05vbmUoKSkKICAg
ICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRp
b24uc3BlY2lmaWVkU2l6ZSgpICogc3R5bGUtPnRleHRTaXplQWRqdXN0KCkubXVsdGlwbGllcigp
KTsKICAgICBlbHNlCkBAIC0xOTc1LDIwICsxOTc1LDIwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
Y2hlY2tGb3Jab29tQ2hhbmdlKFIKICAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA9PSBw
YXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICYmIHN0eWxlLT50ZXh0Wm9vbSgpID09IHBhcmVu
dFN0eWxlLT50ZXh0Wm9vbSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBGb250
RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7CisgICAgY29uc3QgYXV0
byYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gbmV3Rm9u
dERlc2NyaXB0aW9uID0gY2hpbGRGb250OwogICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlw
dGlvbiwgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSk7CiAgICAgc3R5bGUtPnNldEZvbnREZXNj
cmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNo
ZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSkKIHsKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBjb25zdCBhdXRvJiBjaGlsZEZvbnQgPSBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAKICAgICBpZiAoY2hpbGRGb250LmlzQWJzb2x1dGVT
aXplKCkgfHwgIXBhcmVudFN0eWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBGb250
RGVzY3JpcHRpb24mIHBhcmVudEZvbnQgPSBwYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgY29uc3QgYXV0byYgcGFyZW50Rm9udCA9IHBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRp
b24oKTsKICAgICBpZiAoY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSA9PSBwYXJlbnRG
b250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIFdlIGtu
b3cgdGhlIHBhcmVudCBpcyBtb25vc3BhY2Ugb3IgdGhlIGNoaWxkIGlzIG1vbm9zcGFjZSwgYW5k
IHRoYXQgZm9udApAQCAtMjAwOCwxNCArMjAwOCwxNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNo
ZWNrRm9yR2VuZXJpY0ZhbWlsCiAgICAgICAgICAgICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNp
emUoKSAqIGZpeGVkU2NhbGVGYWN0b3I7CiAgICAgfQogCi0gICAgRm9udERlc2NyaXB0aW9uIG5l
d0ZvbnREZXNjcmlwdGlvbihjaGlsZEZvbnQpOworICAgIGF1dG8gbmV3Rm9udERlc2NyaXB0aW9u
ID0gY2hpbGRGb250OwogICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7
CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQog
CiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqIHNldHRp
bmdzKQogewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgaWYgKHNldHRpbmdzKQogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRl
cmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShzdGFuZGFyZEZh
bWlseSk7CkBAIC0yMDI0LDcgKzIwMjQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxp
emVGb250U3R5bGUoCiAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXpl
KEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKIHsK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKICAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNp
ZmllZFNpemUoc2l6ZSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHVzZVNWR1pv
b21SdWxlcygpLCBtX3N0YXRlLnN0eWxlKCksIGRvY3VtZW50KCkpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZvbnQoKTsKICAgICB2b2lkIGluaXRpYWxpemVGb250U3R5
bGUoU2V0dGluZ3MqKTsKIAotICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiwg
ZmxvYXQgc2l6ZSk7CisgICAgdm9pZCBzZXRGb250U2l6ZShGb250Q2FzY2FkZURlc2NyaXB0aW9u
JiwgZmxvYXQgc2l6ZSk7CiAKIHB1YmxpYzoKICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpOwpA
QCAtMzkyLDkgKzM5Miw5IEBAIHB1YmxpYzoKICAgICAgICAgRmlsbExheWVyIGJhY2tncm91bmRE
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YTsgfQogICAgICAgICBDb2xvciBi
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQogCi0g
ICAgICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4g
bV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3BhcmVudFN0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsgfQotICAgICAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQorICAgICAgICBjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsgfQorICAgICAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3BhcmVudFN0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsgfQorICAgICAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0g
bV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7IH0KICAgICAgICAg
dm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS0+c2V0Wm9vbShm
KTsgfQogICAgICAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0
eSB8PSBtX3N0eWxlLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9CiAgICAgICAgIHZvaWQgc2V0V3Jp
dGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9mb250RGlydHkgfD0gbV9zdHls
ZS0+c2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9CkBAIC00NTUsOSArNDU1LDkgQEAgcHVi
bGljOgogCiAgICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVNYXAoKSB7IHJldHVybiAmbV9zdHlsZU1h
cDsgfQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBlcnMo
KSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7IH0KLSAgICBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RhdGUuZm9udERlc2NyaXB0
aW9uKCk7IH0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlv
bigpIHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICB2b2lk
IHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bikgeyBtX3N0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CisgICAg
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4g
bV9zdGF0ZS5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Rm9u
dERlc2NyaXB0aW9uKCk7IH0KKyAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIHsgbV9zdGF0ZS5zZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQogICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7
IG1fc3RhdGUuc2V0Wm9vbShmKTsgfQogICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBm
KSB7IG1fc3RhdGUuc2V0RWZmZWN0aXZlWm9vbShmKTsgfQogICAgIHZvaWQgc2V0V3JpdGluZ01v
ZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5zZXRXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwJKHJldmlzaW9uIDE4OTU3OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAkod29ya2luZyBjb3B5KQpAQCAtNzA5
LDggKzcwOSw4IEBAIHN1YiBnZW5lcmF0ZUluaXRpYWxWYWx1ZVNldHRlciB7CiAgIH0gZWxzaWYg
KGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiQW5pbWF0
aW9uUHJvcGVydHkifSkgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRlQW5pbWF0aW9u
UHJvcGVydHlJbml0aWFsVmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQgLiAiICAgICIpOwogICB9
IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17
IkZvbnRQcm9wZXJ0eSJ9KSB7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2Ny
aXB0aW9uKCk7XG4iOwotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZvbnRE
ZXNjcmlwdGlvbi4iIC4gJHNldHRlciAuICIoRm9udERlc2NyaXB0aW9uOjoiIC4gJGluaXRpYWwg
LiAiKCkpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBhdXRvIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7XG4iOworICAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZvbnREZXNjcmlwdGlvbi4iIC4gJHNl
dHRlciAuICIoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6IiAuICRpbml0aWFsIC4gIigpKTtcbiI7
CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgc3R5bGVSZXNvbHZlci5zZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTtcbiI7CiAgIH0gZWxzaWYgKGV4aXN0cyAk
cHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiRmlsbExheWVyUHJvcGVy
dHkifSkgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlJ
bml0aWFsVmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQgLiAiICAgICIpOwpAQCAtNzUzLDcgKzc1
Myw3IEBAIHN1YiBnZW5lcmF0ZUluaGVyaXRWYWx1ZVNldHRlciB7CiAgICAgJHNldHRlckNvbnRl
bnQgLj0gZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eUluaGVyaXRWYWx1ZVNldHRlcigkbmFtZSwg
JGluZGVudCAuICIgICAgIik7CiAgICAgJGRpZENhbGxTZXRWYWx1ZSA9IDE7CiAgIH0gZWxzaWYg
KGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiRm9udFBy
b3BlcnR5In0pIHsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24o
KTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0byBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpO1xuIjsKICAgICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBmb250RGVzY3JpcHRpb24uIiAuICRzZXR0ZXIg
LiAiKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuIiAuICRnZXR0ZXIgLiAi
KCkpO1xuIjsKICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29s
dmVyLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pO1xuIjsKICAgICAkZGlkQ2Fs
bFNldFZhbHVlID0gMTsKQEAgLTgwNyw3ICs4MDcsNyBAQCBzdWIgZ2VuZXJhdGVWYWx1ZVNldHRl
ciB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eVZhbHVl
U2V0dGVyKCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsKICAgICAkZGlkQ2FsbFNldFZhbHVlID0g
MTsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7
JG5hbWV9eyJGb250UHJvcGVydHkifSkgewotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZv
bnREZXNjcmlwdGlvbigpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7
XG4iOwogICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZvbnREZXNjcmlwdGlv
bi4iIC4gJHNldHRlciAuICIoIiAuICRjb252ZXJ0ZWRWYWx1ZSAuICIpO1xuIjsKICAgICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pO1xuIjsKICAgICAkZGlkQ2FsbFNldFZhbHVlID0gMTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAwLDcgKzMwMCw3IEBAIGlubGluZSBGb250TWV0cmljcyBDYW52YXNSZW5kZXJpbmdDb250ZXgK
ICAgICByZXR1cm4gbV9mb250LmZvbnRNZXRyaWNzKCk7CiB9CiAKLWlubGluZSBjb25zdCBGb250
RGVzY3JpcHRpb24mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5Ojpmb250RGVz
Y3JpcHRpb24oKSBjb25zdAoraW5saW5lIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5Ojpmb250RGVzY3JpcHRpb24oKSBjb25z
dAogewogICAgIHJldHVybiBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiB9CkBAIC0yMDkzLDcg
KzIwOTMsNyBAQCBTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmb250KCkgCiAgICAg
ICAgIHJldHVybiBkZWZhdWx0Rm9udDsKIAogICAgIFN0cmluZ0J1aWxkZXIgc2VyaWFsaXplZEZv
bnQ7Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZSgp
LmZvbnQuZm9udERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgYXV0byYgZm9udERlc2NyaXB0aW9u
ID0gc3RhdGUoKS5mb250LmZvbnREZXNjcmlwdGlvbigpOwogCiAgICAgaWYgKGZvbnREZXNjcmlw
dGlvbi5pdGFsaWMoKSkKICAgICAgICAgc2VyaWFsaXplZEZvbnQuYXBwZW5kTGl0ZXJhbCgiaXRh
bGljICIpOwpAQCAtMjE1Miw3ICsyMTUyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnNldEZvbnQoYwogICAgIGlmIChSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZSA9IGNhbnZh
cygpLT5jb21wdXRlZFN0eWxlKCkpCiAgICAgICAgIG5ld1N0eWxlLT5zZXRGb250RGVzY3JpcHRp
b24oY29tcHV0ZWRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpOwogICAgIGVsc2UgewotICAgICAg
ICBGb250RGVzY3JpcHRpb24gZGVmYXVsdEZvbnREZXNjcmlwdGlvbjsKKyAgICAgICAgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiBkZWZhdWx0Rm9udERlc2NyaXB0aW9uOwogICAgICAgICBkZWZhdWx0
Rm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShkZWZhdWx0Rm9udEZhbWlseSk7CiAgICAgICAg
IGRlZmF1bHRGb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShkZWZhdWx0Rm9udFNpemUp
OwogICAgICAgICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShkZWZhdWx0
Rm9udFNpemUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDUsNyArMjQ1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCByZWFsaXplZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9udC5mb250U2VsZWN0b3IoKTsgfQogICAgICAgICB2b2lkIGlu
aXRpYWxpemUoRm9udFNlbGVjdG9yJiwgUmVuZGVyU3R5bGUmKTsKICAgICAgICAgRm9udE1ldHJp
Y3MgZm9udE1ldHJpY3MoKSBjb25zdDsKLSAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24oKSBjb25zdDsKKyAgICAgICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3Q7CiAgICAgICAgIGZsb2F0IHdpZHRoKGNvbnN0
IFRleHRSdW4mKSBjb25zdDsKICAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVGhlbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVt
ZS5oCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICAvLyBNZXRob2Rz
IHVzZWQgdG8gYWRqdXN0IHRoZSBSZW5kZXJTdHlsZXMgb2YgY29udHJvbHMuCiAgICAgCiAgICAg
Ly8gVGhlIGZvbnQgZGVzY3JpcHRpb24gcmVzdWx0IHNob3VsZCBoYXZlIGEgem9vbWVkIGZvbnQg
c2l6ZS4KLSAgICB2aXJ0dWFsIE9wdGlvbmFsPEZvbnREZXNjcmlwdGlvbj4gY29udHJvbEZvbnQo
Q29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNv
bnN0IHsgcmV0dXJuIE51bGxvcHQ7IH0KKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24+IGNvbnRyb2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYs
IGZsb2F0IC8qem9vbUZhY3RvciovKSBjb25zdCB7IHJldHVybiBOdWxsb3B0OyB9CiAgICAgCiAg
ICAgLy8gVGhlIHNpemUgaGVyZSBpcyBpbiB6b29tZWQgY29vcmRpbmF0ZXMgYWxyZWFkeS4gSWYg
YSBuZXcgc2l6ZSBpcyByZXR1cm5lZCwgaXQgYWxzbyBuZWVkcyB0byBiZSBpbiB6b29tZWQgY29v
cmRpbmF0ZXMuCiAgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRyb2xQYXJ0
LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0
IC8qem9vbUZhY3RvciovKSBjb25zdCB7IHJldHVybiB6b29tZWRTaXplOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJldmlzaW9u
IDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEZvbnRDYWNoZTo6aW52
YWxpZGF0ZSgpCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCi1SZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQorUmVmUHRyPEZvbnQ+IEZv
bnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWlj
U3RyaW5nJikKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCShyZXZpc2lvbiAxODk1NzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTcxLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNT
dHJpbmcmLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBSZWY8Rm9udD4gbGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8Rm9udD4gZm9udEZvclBsYXRmb3JtRGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0gICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKICAg
ICB2b2lkIGFkZENsaWVudChGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChG
b250U2VsZWN0b3IqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgUmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250
cyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKK3N0YXRp
YyBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogY29uc3Qg
dWludDhfdCBGb250Q2FzY2FkZTo6c19yb3VuZGluZ0hhY2tDaGFyYWN0ZXJUYWJsZVsyNTZdID0g
ewogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgLypcdCovLCAxIC8qXG4qLywgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwKQEAgLTEwNyw3ICsxMDcsNyBAQCBGb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoKQogewogfQog
Ci1Gb250Q2FzY2FkZTo6Rm9udENhc2NhZGUoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmZCwgZmxv
YXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpCitGb250Q2FzY2FkZTo6Rm9udENh
c2NhZGUoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZmQsIGZsb2F0IGxldHRlclNwYWNp
bmcsIGZsb2F0IHdvcmRTcGFjaW5nKQogICAgIDogbV9mb250RGVzY3JpcHRpb24oZmQpCiAgICAg
LCBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCiAgICAgLCBtX2xldHRlclNwYWNpbmcobGV0dGVyU3Bh
Y2luZykKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIGNsZWFyV2lkdGhDYWNoZXMoKQogICAgICAg
ICB2YWx1ZS0+Zm9udHMuZ2V0KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7CiB9CiAKLXN0YXRpYyBG
b250Q2FzY2FkZUNhY2hlS2V5IG1ha2VGb250Q2FzY2FkZUNhY2hlS2V5KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQorc3RhdGlj
IEZvbnRDYXNjYWRlQ2FjaGVLZXkgbWFrZUZvbnRDYXNjYWRlQ2FjaGVLZXkoY29uc3QgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9y
KQogewogICAgIEZvbnRDYXNjYWRlQ2FjaGVLZXkga2V5OwogICAgIGtleS5mb250RGVzY3JpcHRp
b25LZXkgPSBGb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRpb24pOwpAQCAtMjY5LDcgKzI2OSw3
IEBAIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCkKICAgICAgICAgZW50cnktPmZvbnRz
LT5wcnVuZVN5c3RlbUZhbGxiYWNrcygpOwogfQogCi1zdGF0aWMgUmVmPEZvbnRDYXNjYWRlRm9u
dHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCitzdGF0aWMg
UmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFJlZlB0cjxGb250U2VsZWN0b3I+
JiYgZm9udFNlbGVjdG9yKQogewogICAgIGF1dG8ga2V5ID0gbWFrZUZvbnRDYXNjYWRlQ2FjaGVL
ZXkoZm9udERlc2NyaXB0aW9uLCBmb250U2VsZWN0b3IuZ2V0KCkpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHJldmlzaW9uIDE4
OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiBjbGFzcyBGb250Q2Fz
Y2FkZSB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUoKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBs
ZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9u
dENhc2NhZGUoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIGZsb2F0IGxldHRlclNwYWNp
bmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIG9ubHkg
dXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQgd2l0aCBhIG5hdGl2ZSBmb250Lgog
ICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBG
b250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOwogCkBAIC0xMjUsNyArMTI1LDcgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250Q2Fz
Y2FkZSYgb3RoZXIpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250Q2FzY2Fk
ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKLSAgICBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERlc2NyaXB0aW9uOyB9CisgICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb247IH0KIAogICAgIGlu
dCBwaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBp
eGVsU2l6ZSgpOyB9CiAgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlw
dGlvbigpLmNvbXB1dGVkU2l6ZSgpOyB9CkBAIC0zMTgsMjQgKzMxOCwyNCBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChtX2ZvbnREZXNjcmlwdGlvbi5rZXJuaW5nKCkp
IHsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vbmVLZXJuaW5nOgorICAgICAgICBj
YXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vbmVLZXJuaW5nOgogICAgICAgICAgICAgZmVh
dHVyZXMgJj0gfktlcm5pbmc7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250
RGVzY3JpcHRpb246Ok5vcm1hbEtlcm5pbmc6CisgICAgICAgIGNhc2UgRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6Tm9ybWFsS2VybmluZzoKICAgICAgICAgICAgIGZlYXR1cmVzIHw9IEtlcm5pbmc7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9L
ZXJuaW5nOgorICAgICAgICBjYXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkF1dG9LZXJuaW5n
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKG1fZm9u
dERlc2NyaXB0aW9uLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBGb250
RGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU6CisgICAgICAgIGNhc2UgRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZToKICAgICAgICAgICAgIGZl
YXR1cmVzICY9IH5MaWdhdHVyZXM7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBG
b250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgY2FzZSBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU6CiAgICAgICAgICAgICBm
ZWF0dXJlcyB8PSBMaWdhdHVyZXM7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBG
b250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOgorICAgICAgICBjYXNlIEZvbnRD
YXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIApAQCAtMzQ0LDcgKzM0NCw3IEBAIHByaXZhdGU6CiAKICAgICBzdGF0
aWMgVHlwZXNldHRpbmdGZWF0dXJlcyBzX2RlZmF1bHRUeXBlc2V0dGluZ0ZlYXR1cmVzOwogCi0g
ICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOworICAgIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gbV9mb250RGVzY3JpcHRpb247CiAgICAgbXV0YWJsZSBSZWZQdHI8Rm9udENhc2Nh
ZGVGb250cz4gbV9mb250czsKICAgICBXZWFrUHRyRmFjdG9yeTxGb250Q2FzY2FkZT4gbV93ZWFr
UHRyRmFjdG9yeTsKICAgICBmbG9hdCBtX2xldHRlclNwYWNpbmc7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAko
cmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBGb250
Q2FzY2FkZUZvbnRzOjp+Rm9udENhc2NhZGVGb250cygpCiB7CiB9CiAKLXZvaWQgRm9udENhc2Nh
ZGVGb250czo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKK3ZvaWQgRm9udENhc2NhZGVGb250czo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9
IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICB1bnNpZ25lZCBu
dW1SYW5nZXMgPSBwcmltYXJ5UmFuZ2VzLnNpemUoKTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBib29s
IEZvbnRDYXNjYWRlRm9udHM6OmlzTG9hZGluZ0N1c3RvbUZvCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1zdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkJiBpbmRleCwgRm9udFNlbGVjdG9yKiBmb250
U2VsZWN0b3IpCitzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCYgaW5kZXgsIEZvbnRT
ZWxlY3RvciogZm9udFNlbGVjdG9yKQogewogICAgIEFTU0VSVChpbmRleCA8IGRlc2NyaXB0aW9u
LmZhbWlseUNvdW50KCkpOwogCkBAIC0xNTYsMTAgKzE1NiwxNCBAQCBzdGF0aWMgRm9udFJhbmdl
cyByZWFsaXplTmV4dEZhbGxiYWNrKGNvCiAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBmb250LiBU
cnkgdG8gZmluZCBhIHNpbWlsYXIgZm9udCB1c2luZyBvdXIgb3duIHNwZWNpZmljIGtub3dsZWRn
ZSBhYm91dCBvdXIgcGxhdGZvcm0uCiAgICAgLy8gRm9yIGV4YW1wbGUgb24gT1MgWCwgd2Uga25v
dyB0byBtYXAgYW55IGZhbWlsaWVzIGNvbnRhaW5pbmcgdGhlIHdvcmRzIEFyYWJpYywgUGFzaHRv
LCBvciBVcmR1IHRvIHRoZQogICAgIC8vIEdlZXphIFBybyBmb250LgotICAgIHJldHVybiBGb250
UmFuZ2VzKGZvbnRDYWNoZS5zaW1pbGFyRm9udChkZXNjcmlwdGlvbikpOworICAgIGZvciAoYXV0
byYgZmFtaWx5IDogZGVzY3JpcHRpb24uZmFtaWxpZXMoKSkgeworICAgICAgICBpZiAoYXV0byBm
b250ID0gZm9udENhY2hlLnNpbWlsYXJGb250KGRlc2NyaXB0aW9uLCBmYW1pbHkpKQorICAgICAg
ICAgICAgcmV0dXJuIEZvbnRSYW5nZXMoV1RGOjptb3ZlKGZvbnQpKTsKKyAgICB9CisgICAgcmV0
dXJuIHsgfTsKIH0KIAotY29uc3QgRm9udFJhbmdlcyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5z
aWduZWQgaW5kZXgpCitjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXpl
RmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNr
UmFuZ2VzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1tp
bmRleF07CkBAIC0zMTIsNyArMzE2LDcgQEAgc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JO
b25DSktDaGFyYQogICAgIHJldHVybiBkYXRhOwogfQogCi1HbHlwaERhdGEgRm9udENhc2NhZGVG
b250czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjLCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQorR2x5cGhEYXRhIEZv
bnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIgYywgY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlh
bnQpCiB7CiAgICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rlci1kZXBlbmRlbnQuCiAg
ICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0
aW9uLCAwKTsKQEAgLTM0OSw3ICszNTMsNyBAQCBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6
Z2x5cGhEYXRhRm9yCiAgICAgcmV0dXJuIGZhbGxiYWNrR2x5cGhEYXRhOwogfQogCi1HbHlwaERh
dGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIHVuc2ln
bmVkIGZhbGxiYWNrSW5kZXgpCitHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRh
Rm9yVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KQogewog
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCsrKTsKQEAgLTM3MCw3ICsz
NzQsNyBAQCBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yCiAgICAgcmV0
dXJuIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50KTsK
IH0KIAotR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvck5vcm1hbFZhcmlh
bnQoVUNoYXIzMiBjLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorR2x5cGhE
YXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiBj
LCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGZhbGxiYWNrSW5kZXggPSAwOyA7ICsrZmFsbGJhY2tJbmRleCkgewogICAgICAg
ICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24s
IGZhbGxiYWNrSW5kZXgpOwpAQCAtNDIxLDcgKzQyNSw3IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQ
YWdlPiBnbHlwaFBhZ2VGcm9tRm8KICAgICByZXR1cm4gY29uc3RfY2FzdDxHbHlwaFBhZ2UqPihm
b250LT5nbHlwaFBhZ2UocGFnZU51bWJlcikpOwogfQogCi1HbHlwaERhdGEgRm9udENhc2NhZGVG
b250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKK0dseXBoRGF0YSBGb250Q2Fz
Y2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1dG9WYXJp
YW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
Rm9udHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZUZvbnRzLmgJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvbnREZXNjcmlwdGlv
bjsKK2NsYXNzIEZvbnRDYXNjYWRlRGVzY3JpcHRpb247CiBjbGFzcyBGb250UGxhdGZvcm1EYXRh
OwogY2xhc3MgRm9udFNlbGVjdG9yOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwpAQCAtNTIsMTAg
KzUyLDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQoKSBjb25zdCB7
IHJldHVybiBtX2lzRm9yUGxhdGZvcm1Gb250OyB9CiAKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50
KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCk7CiAKLSAgICBib29sIGlzRml4ZWRQ
aXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKLSAgICB2b2lkIGRldGVybWluZVBpdGNoKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mKTsKKyAgICB2b2lkIGRldGVybWluZVBpdGNoKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mKTsKIAogICAgIGJvb2wgaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBj
b25zdDsKIApAQCAtNjcsOCArNjcsOCBAQCBwdWJsaWM6CiAgICAgV2lkdGhDYWNoZSYgd2lkdGhD
YWNoZSgpIHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogICAgIGNvbnN0IFdpZHRoQ2FjaGUmIHdp
ZHRoQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoQ2FjaGU7IH0KIAotICAgIGNvbnN0IEZv
bnQmIHByaW1hcnlGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOworICAgIGNvbnN0IEZvbnQmIHBy
aW1hcnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CiAKICAgICB2b2lk
IHBydW5lU3lzdGVtRmFsbGJhY2tzKCk7CiAKQEAgLTc2LDkgKzc2LDkgQEAgcHJpdmF0ZToKICAg
ICBGb250Q2FzY2FkZUZvbnRzKFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwogICAgIEZvbnRDYXNj
YWRlRm9udHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogCi0gICAgR2x5cGhEYXRhIGdseXBo
RGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZv
bnRWYXJpYW50KTsKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hh
cjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mKTsKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9y
VmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgdW5z
aWduZWQgZmFsbGJhY2tJbmRleCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZh
bGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFu
dCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvck5vcm1hbFZhcmlhbnQoVUNoYXIzMiwgY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOworICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JW
YXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFu
dCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CiAKICAgICBWZWN0b3I8Rm9udFJhbmdlcywgMT4g
bV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzOwogICAgIHVuc2lnbmVkIG1fbGFzdFJlYWxpemVkRmFs
bGJhY2tJbmRleCB7IDAgfTsKQEAgLTExNSwxNCArMTE1LDE0IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2lzRm9yUGxhdGZvcm1Gb250IHsgZmFsc2UgfTsKIH07CiAKLWlubGluZSBib29sIEZvbnRD
YXNjYWRlRm9udHM6OmlzRml4ZWRQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uKQoraW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewogICAgIGlmIChtX3BpdGNoID09
IFVua25vd25QaXRjaCkKICAgICAgICAgZGV0ZXJtaW5lUGl0Y2goZGVzY3JpcHRpb24pOwogICAg
IHJldHVybiBtX3BpdGNoID09IEZpeGVkUGl0Y2g7CiB9OwogCi1pbmxpbmUgY29uc3QgRm9udCYg
Rm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbikKK2lubGluZSBjb25zdCBGb250JiBGb250Q2FzY2FkZUZvbnRzOjpwcmltYXJ5Rm9u
dChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3Jp
cHRpb24uY3BwCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250RGVzY3JpcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFNhbWVTaXplQXNGb250RGVzY3Jp
cHRpb24geworc3RydWN0IFNhbWVTaXplQXNGb250Q2FzY2FkZURlc2NyaXB0aW9uIHsKICAgICB2
b2lkKiBwb2ludGVyc1szXTsKICAgICBmbG9hdCBzaXplc1syXTsKICAgICAvLyBGSVhNRTogTWFr
ZSB0aGVtIGZpdCBpbnRvIG9uZSB3b3JkLgpAQCAtNDIsNyArNDIsNyBAQCBzdHJ1Y3QgU2FtZVNp
emVBc0ZvbnREZXNjcmlwdGlvbiB7CiAgICAgdWludDMyX3QgYml0ZmllbGRzMiA6IDg7CiB9Owog
Ci1DT01QSUxFX0FTU0VSVChzaXplb2YoRm9udERlc2NyaXB0aW9uKSA9PSBzaXplb2YoU2FtZVNp
emVBc0ZvbnREZXNjcmlwdGlvbiksIEZvbnREZXNjcmlwdGlvbl9zaG91bGRfc3RheV9zbWFsbCk7
CitDT01QSUxFX0FTU0VSVChzaXplb2YoRm9udENhc2NhZGVEZXNjcmlwdGlvbikgPT0gc2l6ZW9m
KFNhbWVTaXplQXNGb250Q2FzY2FkZURlc2NyaXB0aW9uKSwgRm9udENhc2NhZGVEZXNjcmlwdGlv
bl9zaG91bGRfc3RheV9zbWFsbCk7CiAKIEZvbnREZXNjcmlwdGlvbjo6Rm9udERlc2NyaXB0aW9u
KCkKICAgICA6IG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKQEAgLTUwLDgyICs1MCw4NiBAQCBG
b250RGVzY3JpcHRpb246OkZvbnREZXNjcmlwdGlvbigpCiAgICAgLCBtX3dpZHRoVmFyaWFudChS
ZWd1bGFyV2lkdGgpCiAgICAgLCBtX2l0YWxpYyhGb250SXRhbGljT2ZmKQogICAgICwgbV9zbWFs
bENhcHMoRm9udFNtYWxsQ2Fwc09mZikKLSAgICAsIG1faXNBYnNvbHV0ZVNpemUoZmFsc2UpCiAg
ICAgLCBtX3dlaWdodChGb250V2VpZ2h0Tm9ybWFsKQogICAgICwgbV9yZW5kZXJpbmdNb2RlKE5v
cm1hbFJlbmRlcmluZ01vZGUpCisgICAgLCBtX3RleHRSZW5kZXJpbmcoQXV0b1RleHRSZW5kZXJp
bmcpCisgICAgLCBtX3NjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKG1f
bG9jYWxlKSkKKyAgICAsIG1fZm9udFN5bnRoZXNpcyhGb250U3ludGhlc2lzV2VpZ2h0IHwgRm9u
dFN5bnRoZXNpc1N0eWxlKQoreworfQorCit2b2lkIEZvbnREZXNjcmlwdGlvbjo6c2V0TG9jYWxl
KGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQoreworICAgIG1fbG9jYWxlID0gbG9jYWxlOwor
ICAgIG1fc2NyaXB0ID0gbG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX2xvY2Fs
ZSk7Cit9CisKK0ZvbnRUcmFpdHNNYXNrIEZvbnREZXNjcmlwdGlvbjo6dHJhaXRzTWFzaygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigobV9pdGFsaWMg
PyBGb250U3R5bGVJdGFsaWNNYXNrIDogRm9udFN0eWxlTm9ybWFsTWFzaykKKyAgICAgICAgfCAo
bV9zbWFsbENhcHMgPyBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2sgOiBGb250VmFyaWFudE5vcm1h
bE1hc2spCisgICAgICAgIHwgKEZvbnRXZWlnaHQxMDBNYXNrIDw8IChtX3dlaWdodCAtIEZvbnRX
ZWlnaHQxMDApKSk7CisgICAgCit9CisKK0ZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkZvbnRDYXNj
YWRlRGVzY3JpcHRpb24oKQorICAgIDogbV9pc0Fic29sdXRlU2l6ZShmYWxzZSkKICAgICAsIG1f
a2VybmluZyhBdXRvS2VybmluZykKICAgICAsIG1fY29tbW9uTGlnYXR1cmVzU3RhdGUoTm9ybWFs
TGlnYXR1cmVzU3RhdGUpCiAgICAgLCBtX2Rpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShOb3Jt
YWxMaWdhdHVyZXNTdGF0ZSkKICAgICAsIG1faGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKE5vcm1h
bExpZ2F0dXJlc1N0YXRlKQogICAgICwgbV9rZXl3b3JkU2l6ZSgwKQogICAgICwgbV9mb250U21v
b3RoaW5nKEF1dG9TbW9vdGhpbmcpCi0gICAgLCBtX3RleHRSZW5kZXJpbmcoQXV0b1RleHRSZW5k
ZXJpbmcpCiAgICAgLCBtX2lzU3BlY2lmaWVkRm9udChmYWxzZSkKLSAgICAsIG1fc2NyaXB0KGxv
Y2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24obV9sb2NhbGUpKQotICAgICwgbV9mb250
U3ludGhlc2lzKGluaXRpYWxGb250U3ludGhlc2lzKCkpCiB7CiB9CiAKLUZvbnRXZWlnaHQgRm9u
dERlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KHZvaWQpIGNvbnN0CitGb250V2VpZ2h0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb246OmxpZ2h0ZXJXZWlnaHQodm9pZCkgY29uc3QKIHsKLSAgICBzd2l0
Y2ggKG1fd2VpZ2h0KSB7Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDEwMDoKLSAgICAgICAgY2Fz
ZSBGb250V2VpZ2h0MjAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQzMDA6Ci0gICAgICAgIGNh
c2UgRm9udFdlaWdodDQwMDoKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0NTAwOgotICAgICAgICAg
ICAgcmV0dXJuIEZvbnRXZWlnaHQxMDA7Ci0KLSAgICAgICAgY2FzZSBGb250V2VpZ2h0NjAwOgot
ICAgICAgICBjYXNlIEZvbnRXZWlnaHQ3MDA6Ci0gICAgICAgICAgICByZXR1cm4gRm9udFdlaWdo
dDQwMDsKLQotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ4MDA6Ci0gICAgICAgIGNhc2UgRm9udFdl
aWdodDkwMDoKLSAgICAgICAgICAgIHJldHVybiBGb250V2VpZ2h0NzAwOworICAgIHN3aXRjaCAo
d2VpZ2h0KCkpIHsKKyAgICBjYXNlIEZvbnRXZWlnaHQxMDA6CisgICAgY2FzZSBGb250V2VpZ2h0
MjAwOgorICAgIGNhc2UgRm9udFdlaWdodDMwMDoKKyAgICBjYXNlIEZvbnRXZWlnaHQ0MDA6Cisg
ICAgY2FzZSBGb250V2VpZ2h0NTAwOgorICAgICAgICByZXR1cm4gRm9udFdlaWdodDEwMDsKKwor
ICAgIGNhc2UgRm9udFdlaWdodDYwMDoKKyAgICBjYXNlIEZvbnRXZWlnaHQ3MDA6CisgICAgICAg
IHJldHVybiBGb250V2VpZ2h0NDAwOworCisgICAgY2FzZSBGb250V2VpZ2h0ODAwOgorICAgIGNh
c2UgRm9udFdlaWdodDkwMDoKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ3MDA7CiAgICAgfQog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBGb250V2VpZ2h0Tm9ybWFsOwog
fQogCi1Gb250V2VpZ2h0IEZvbnREZXNjcmlwdGlvbjo6Ym9sZGVyV2VpZ2h0KHZvaWQpIGNvbnN0
CitGb250V2VpZ2h0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRlcldlaWdodCh2b2lkKSBj
b25zdAogewotICAgIHN3aXRjaCAobV93ZWlnaHQpIHsKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0
MTAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQyMDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdo
dDMwMDoKLSAgICAgICAgICAgIHJldHVybiBGb250V2VpZ2h0NDAwOwotCi0gICAgICAgIGNhc2Ug
Rm9udFdlaWdodDQwMDoKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0NTAwOgotICAgICAgICAgICAg
cmV0dXJuIEZvbnRXZWlnaHQ3MDA7Ci0KLSAgICAgICAgY2FzZSBGb250V2VpZ2h0NjAwOgotICAg
ICAgICBjYXNlIEZvbnRXZWlnaHQ3MDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDgwMDoKLSAg
ICAgICAgY2FzZSBGb250V2VpZ2h0OTAwOgotICAgICAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ5
MDA7CisgICAgc3dpdGNoICh3ZWlnaHQoKSkgeworICAgIGNhc2UgRm9udFdlaWdodDEwMDoKKyAg
ICBjYXNlIEZvbnRXZWlnaHQyMDA6CisgICAgY2FzZSBGb250V2VpZ2h0MzAwOgorICAgICAgICBy
ZXR1cm4gRm9udFdlaWdodDQwMDsKKworICAgIGNhc2UgRm9udFdlaWdodDQwMDoKKyAgICBjYXNl
IEZvbnRXZWlnaHQ1MDA6CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0NzAwOworCisgICAgY2Fz
ZSBGb250V2VpZ2h0NjAwOgorICAgIGNhc2UgRm9udFdlaWdodDcwMDoKKyAgICBjYXNlIEZvbnRX
ZWlnaHQ4MDA6CisgICAgY2FzZSBGb250V2VpZ2h0OTAwOgorICAgICAgICByZXR1cm4gRm9udFdl
aWdodDkwMDsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIEZv
bnRXZWlnaHROb3JtYWw7CiB9CiAKLUZvbnRUcmFpdHNNYXNrIEZvbnREZXNjcmlwdGlvbjo6dHJh
aXRzTWFzaygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNr
PigobV9pdGFsaWMgPyBGb250U3R5bGVJdGFsaWNNYXNrIDogRm9udFN0eWxlTm9ybWFsTWFzaykK
LSAgICAgICAgICAgIHwgKG1fc21hbGxDYXBzID8gRm9udFZhcmlhbnRTbWFsbENhcHNNYXNrIDog
Rm9udFZhcmlhbnROb3JtYWxNYXNrKQotICAgICAgICAgICAgfCAoRm9udFdlaWdodDEwME1hc2sg
PDwgKG1fd2VpZ2h0IC0gRm9udFdlaWdodDEwMCkpKTsKLSAgICAKLX0KLQotdm9pZCBGb250RGVz
Y3JpcHRpb246OnNldExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKLXsKLSAgICBt
X2xvY2FsZSA9IGxvY2FsZTsKLSAgICBtX3NjcmlwdCA9IGxvY2FsZVRvU2NyaXB0Q29kZUZvckZv
bnRTZWxlY3Rpb24obV9sb2NhbGUpOwotfQotCiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJ
TkcpCi1ib29sIEZvbnREZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5n
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0Citib29sIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246OmZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKIHsKICAgICB1bnNpZ25lZCB0aGlzRmFtaWx5Q291
bnQgPSBmYW1pbHlDb3VudCgpOwogICAgIHVuc2lnbmVkIG90aGVyRmFtaWx5Q291bnQgPSBvdGhl
ci5mYW1pbHlDb3VudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udERlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwxNCArNDAsODkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdEZvbnRGYW1pbHlOYW1l
czsKIAogY2xhc3MgRm9udERlc2NyaXB0aW9uIHsKIHB1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9S
VCBGb250RGVzY3JpcHRpb24oKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250RGVz
Y3JpcHRpb24mKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udERlc2NyaXB0
aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIGZs
b2F0IGNvbXB1dGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0ZWRTaXplOyB9CisgICAg
Rm9udEl0YWxpYyBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250SXRhbGlj
PihtX2l0YWxpYyk7IH0KKyAgICBpbnQgY29tcHV0ZWRQaXhlbFNpemUoKSBjb25zdCB7IHJldHVy
biBpbnQobV9jb21wdXRlZFNpemUgKyAwLjVmKTsgfQorICAgIEZvbnRTbWFsbENhcHMgc21hbGxD
YXBzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFNtYWxsQ2Fwcz4obV9zbWFsbENh
cHMpOyB9CisgICAgRm9udFdlaWdodCB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGb250V2VpZ2h0PihtX3dlaWdodCk7IH0KKyAgICBGb250V2VpZ2h0IGxpZ2h0ZXJXZWlnaHQo
KSBjb25zdDsKKyAgICBGb250V2VpZ2h0IGJvbGRlcldlaWdodCgpIGNvbnN0OworICAgIEZvbnRS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxG
b250UmVuZGVyaW5nTW9kZT4obV9yZW5kZXJpbmdNb2RlKTsgfQorICAgIFRleHRSZW5kZXJpbmdN
b2RlIHRleHRSZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dFJl
bmRlcmluZ01vZGU+KG1fdGV4dFJlbmRlcmluZyk7IH0KKyAgICBVU2NyaXB0Q29kZSBzY3JpcHQo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVU2NyaXB0Q29kZT4obV9zY3JpcHQpOyB9Cisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsZTsg
fQorCisgICAgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Rm9udE9yaWVudGF0aW9uPihtX29yaWVudGF0aW9uKTsgfQorICAgIE5vbkNKS0ds
eXBoT3JpZW50YXRpb24gbm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PE5vbkNKS0dseXBoT3JpZW50YXRpb24+KG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlv
bik7IH0KKyAgICBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEZvbnRXaWR0aFZhcmlhbnQ+KG1fd2lkdGhWYXJpYW50KTsgfQorICAgIEZv
bnRGZWF0dXJlU2V0dGluZ3MqIGZlYXR1cmVTZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZVNldHRpbmdzLmdldCgpOyB9CisgICAgRm9udFN5bnRoZXNpcyBmb250U3ludGhlc2lzKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFN5bnRoZXNpcz4obV9mb250U3ludGhlc2lz
KTsgfQorCisgICAgdm9pZCBzZXRDb21wdXRlZFNpemUoZmxvYXQgcykgeyBtX2NvbXB1dGVkU2l6
ZSA9IGNsYW1wVG9GbG9hdChzKTsgfQorICAgIHZvaWQgc2V0SXRhbGljKEZvbnRJdGFsaWMgaSkg
eyBtX2l0YWxpYyA9IGk7IH0KKyAgICB2b2lkIHNldElzSXRhbGljKGJvb2wgaSkgeyBzZXRJdGFs
aWMoaSA/IEZvbnRJdGFsaWNPbiA6IEZvbnRJdGFsaWNPZmYpOyB9CisgICAgdm9pZCBzZXRTbWFs
bENhcHMoRm9udFNtYWxsQ2FwcyBjKSB7IG1fc21hbGxDYXBzID0gYzsgfQorICAgIHZvaWQgc2V0
SXNTbWFsbENhcHMoYm9vbCBjKSB7IHNldFNtYWxsQ2FwcyhjID8gRm9udFNtYWxsQ2Fwc09uIDog
Rm9udFNtYWxsQ2Fwc09mZik7IH0KKyAgICB2b2lkIHNldFdlaWdodChGb250V2VpZ2h0IHcpIHsg
bV93ZWlnaHQgPSB3OyB9CisgICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJpbmdN
b2RlIG1vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gbW9kZTsgfQorICAgIHZvaWQgc2V0VGV4dFJl
bmRlcmluZ01vZGUoVGV4dFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nKSB7IG1fdGV4dFJlbmRlcmlu
ZyA9IHJlbmRlcmluZzsgfQorICAgIHZvaWQgc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQorICAgIHZvaWQg
c2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihOb25DSktHbHlwaE9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSB7IG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9CisgICAgdm9p
ZCBzZXRXaWR0aFZhcmlhbnQoRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQpIHsgbV93aWR0
aFZhcmlhbnQgPSB3aWR0aFZhcmlhbnQ7IH0gLy8gTWFrZSBzdXJlIG5ldyBjYWxsZXJzIG9mIHRo
aXMgc3luYyB3aXRoIEZvbnRQbGF0Zm9ybURhdGE6OmlzRm9yVGV4dENvbWJpbmUoKSEKKyAgICB2
b2lkIHNldExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2b2lkIHNldEZlYXR1cmVT
ZXR0aW5ncyhQYXNzUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IHNldHRpbmdzKSB7IG1fZmVh
dHVyZVNldHRpbmdzID0gc2V0dGluZ3M7IH0KKyAgICB2b2lkIHNldEZvbnRTeW50aGVzaXMoRm9u
dFN5bnRoZXNpcyBmb250U3ludGhlc2lzKSB7IG1fZm9udFN5bnRoZXNpcyA9IGZvbnRTeW50aGVz
aXM7IH0KKworICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2soKSBjb25zdDsKK3ByaXZhdGU6
CisgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IG1fZmVhdHVyZVNldHRpbmdzOworICAg
IEF0b21pY1N0cmluZyBtX2xvY2FsZTsKKworICAgIGZsb2F0IG1fY29tcHV0ZWRTaXplIHsgMCB9
OyAvLyBDb21wdXRlZCBzaXplIGFkanVzdGVkIGZvciB0aGUgbWluaW11bSBmb250IHNpemUgYW5k
IHRoZSB6b29tIGZhY3Rvci4KKyAgICB1bnNpZ25lZCBtX29yaWVudGF0aW9uIDogMTsgLy8gRm9u
dE9yaWVudGF0aW9uIC0gV2hldGhlciB0aGUgZm9udCBpcyByZW5kZXJpbmcgb24gYSBob3Jpem9u
dGFsIGxpbmUgb3IgYSB2ZXJ0aWNhbCBsaW5lLgorICAgIHVuc2lnbmVkIG1fbm9uQ0pLR2x5cGhP
cmllbnRhdGlvbiA6IDE7IC8vIE5vbkNKS0dseXBoT3JpZW50YXRpb24gLSBPbmx5IHVzZWQgYnkg
dmVydGljYWwgdGV4dC4gRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBvcmllbnRhdGlvbiBmb3Igbm9u
LWlkZW9ncmFwaCBnbHlwaHMuCisgICAgdW5zaWduZWQgbV93aWR0aFZhcmlhbnQgOiAyOyAvLyBG
b250V2lkdGhWYXJpYW50CisgICAgdW5zaWduZWQgbV9pdGFsaWMgOiAxOyAvLyBGb250SXRhbGlj
CisgICAgdW5zaWduZWQgbV9zbWFsbENhcHMgOiAxOyAvLyBGb250U21hbGxDYXBzCisgICAgdW5z
aWduZWQgbV93ZWlnaHQgOiA4OyAvLyBGb250V2VpZ2h0CisgICAgdW5zaWduZWQgbV9yZW5kZXJp
bmdNb2RlIDogMTsgLy8gVXNlZCB0byBzd2l0Y2ggYmV0d2VlbiBDRyBhbmQgR0RJIHRleHQgb24g
V2luZG93cy4KKyAgICB1bnNpZ25lZCBtX3RleHRSZW5kZXJpbmcgOiAyOyAvLyBUZXh0UmVuZGVy
aW5nTW9kZQorICAgIHVuc2lnbmVkIG1fc2NyaXB0IDogNzsgLy8gVXNlZCB0byBoZWxwIGNob29z
ZSBhbiBhcHByb3ByaWF0ZSBmb250IGZvciBnZW5lcmljIGZvbnQgZmFtaWxpZXMuCisgICAgdW5z
aWduZWQgbV9mb250U3ludGhlc2lzIDogMjsgLy8gRm9udFN5bnRoZXNpcyB0eXBlCit9OworCitp
bmxpbmUgYm9vbCBGb250RGVzY3JpcHRpb246Om9wZXJhdG9yPT0oY29uc3QgRm9udERlc2NyaXB0
aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21wdXRlZFNpemUgPT0gb3RoZXIu
bV9jb21wdXRlZFNpemUKKyAgICAgICAgJiYgbV9pdGFsaWMgPT0gb3RoZXIubV9pdGFsaWMKKyAg
ICAgICAgJiYgbV9zbWFsbENhcHMgPT0gb3RoZXIubV9zbWFsbENhcHMKKyAgICAgICAgJiYgbV93
ZWlnaHQgPT0gb3RoZXIubV93ZWlnaHQKKyAgICAgICAgJiYgbV9yZW5kZXJpbmdNb2RlID09IG90
aGVyLm1fcmVuZGVyaW5nTW9kZQorICAgICAgICAmJiBtX3RleHRSZW5kZXJpbmcgPT0gb3RoZXIu
bV90ZXh0UmVuZGVyaW5nCisgICAgICAgICYmIG1fb3JpZW50YXRpb24gPT0gb3RoZXIubV9vcmll
bnRhdGlvbgorICAgICAgICAmJiBtX25vbkNKS0dseXBoT3JpZW50YXRpb24gPT0gb3RoZXIubV9u
b25DSktHbHlwaE9yaWVudGF0aW9uCisgICAgICAgICYmIG1fd2lkdGhWYXJpYW50ID09IG90aGVy
Lm1fd2lkdGhWYXJpYW50CisgICAgICAgICYmIG1fbG9jYWxlID09IG90aGVyLm1fbG9jYWxlCisg
ICAgICAgICYmIG1fZmVhdHVyZVNldHRpbmdzID09IG90aGVyLm1fZmVhdHVyZVNldHRpbmdzCisg
ICAgICAgICYmIG1fZm9udFN5bnRoZXNpcyA9PSBvdGhlci5tX2ZvbnRTeW50aGVzaXM7Cit9CisK
Ky8vIEZJWE1FOiBNb3ZlIHRvIGEgZmlsZSBvZiBpdHMgb3duLgorY2xhc3MgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiA6IHB1YmxpYyBGb250RGVzY3JpcHRpb24geworcHVibGljOgogICAgIGVudW0g
S2VybmluZyB7IEF1dG9LZXJuaW5nLCBOb3JtYWxLZXJuaW5nLCBOb25lS2VybmluZyB9OwogCiAg
ICAgZW51bSBMaWdhdHVyZXNTdGF0ZSB7IE5vcm1hbExpZ2F0dXJlc1N0YXRlLCBEaXNhYmxlZExp
Z2F0dXJlc1N0YXRlLCBFbmFibGVkTGlnYXR1cmVzU3RhdGUgfTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIEZvbnREZXNjcmlwdGlvbigpOworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24oKTsKIAot
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7IH0KIAogICAgIHVuc2lnbmVkIGZhbWlseUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mYW1p
bGllcy5zaXplKCk7IH0KICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZpcnN0RmFtaWx5KCkgY29u
c3QgeyByZXR1cm4gZmFtaWx5QXQoMCk7IH0KQEAgLTU1LDE3ICsxMzAsMTMgQEAgcHVibGljOgog
ICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+JiBmYW1pbGllcygpIGNvbnN0
IHsgcmV0dXJuIG1fZmFtaWxpZXM7IH0KIAogICAgIGZsb2F0IHNwZWNpZmllZFNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NwZWNpZmllZFNpemU7IH0KLSAgICBmbG9hdCBjb21wdXRlZFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2NvbXB1dGVkU2l6ZTsgfQotICAgIEZvbnRJdGFsaWMgaXRhbGljKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udEl0YWxpYz4obV9pdGFsaWMpOyB9Ci0gICAg
aW50IGNvbXB1dGVkUGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gaW50KG1fY29tcHV0ZWRTaXpl
ICsgMC41Zik7IH0KLSAgICBGb250U21hbGxDYXBzIHNtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEZvbnRTbWFsbENhcHM+KG1fc21hbGxDYXBzKTsgfQogICAgIGJvb2wgaXNB
YnNvbHV0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2lzQWJzb2x1dGVTaXplOyB9Ci0gICAgRm9u
dFdlaWdodCB3ZWlnaHQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250V2VpZ2h0Piht
X3dlaWdodCk7IH0KICAgICBGb250V2VpZ2h0IGxpZ2h0ZXJXZWlnaHQoKSBjb25zdDsKICAgICBG
b250V2VpZ2h0IGJvbGRlcldlaWdodCgpIGNvbnN0OworCiAgICAgLy8gb25seSB1c2UgZml4ZWQg
ZGVmYXVsdCBzaXplIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgZm9udCBmYW1pbHksIGFuZCB0aGF0
IGZhbWlseSBpcyAibW9ub3NwYWNlIgogICAgIGJvb2wgdXNlRml4ZWREZWZhdWx0U2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbWlseUNvdW50KCkgPT0gMSAmJiBmaXJzdEZhbWlseSgpID09IG1vbm9z
cGFjZUZhbWlseTsgfQotICAgIEZvbnRSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250UmVuZGVyaW5nTW9kZT4obV9yZW5kZXJpbmdNb2Rl
KTsgfQorCiAgICAgS2VybmluZyBrZXJuaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
S2VybmluZz4obV9rZXJuaW5nKTsgfQogICAgIExpZ2F0dXJlc1N0YXRlIGNvbW1vbkxpZ2F0dXJl
c1N0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGlnYXR1cmVzU3RhdGU+KG1fY29t
bW9uTGlnYXR1cmVzU3RhdGUpOyB9CiAgICAgTGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxp
Z2F0dXJlc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGlnYXR1cmVzU3RhdGU+
KG1fZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKTsgfQpAQCAtNzgsMzAgKzE0OSwxMyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgIH0KICAgICBGb250U21vb3Ro
aW5nTW9kZSBmb250U21vb3RoaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFNt
b290aGluZ01vZGU+KG1fZm9udFNtb290aGluZyk7IH0KLSAgICBUZXh0UmVuZGVyaW5nTW9kZSB0
ZXh0UmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRleHRSZW5kZXJp
bmdNb2RlPihtX3RleHRSZW5kZXJpbmcpOyB9Ci0gICAgVVNjcmlwdENvZGUgc2NyaXB0KCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+KG1fc2NyaXB0KTsgfQotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbGU7IH0KLQot
ICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2soKSBjb25zdDsKICAgICBib29sIGlzU3BlY2lm
aWVkRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTcGVjaWZpZWRGb250OyB9Ci0gICAgRm9udE9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udE9y
aWVudGF0aW9uPihtX29yaWVudGF0aW9uKTsgfQotICAgIE5vbkNKS0dseXBoT3JpZW50YXRpb24g
bm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE5vbkNK
S0dseXBoT3JpZW50YXRpb24+KG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbik7IH0KLSAgICBGb250
V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRXaWR0aFZhcmlhbnQ+KG1fd2lkdGhWYXJpYW50KTsgfQotICAgIEZvbnRGZWF0dXJlU2V0dGlu
Z3MqIGZlYXR1cmVTZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZVNldHRpbmdzLmdl
dCgpOyB9Ci0gICAgRm9udFN5bnRoZXNpcyBmb250U3ludGhlc2lzKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Rm9udFN5bnRoZXNpcz4obV9mb250U3ludGhlc2lzKTsgfQogCiAgICAgdm9p
ZCBzZXRPbmVGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpIHsgQVNTRVJUKG1fZmFt
aWxpZXMuc2l6ZSgpID09IDEpOyBtX2ZhbWlsaWVzWzBdID0gZmFtaWx5OyB9CiAgICAgdm9pZCBz
ZXRGYW1pbGllcyhjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgZmFtaWxpZXMpIHsgbV9mYW1p
bGllcyA9IFJlZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+KGZhbWlsaWVzKTsgfQogICAgIHZv
aWQgc2V0RmFtaWxpZXMoY29uc3QgUmVmQ291bnRlZEFycmF5PEF0b21pY1N0cmluZz4mIGZhbWls
aWVzKSB7IG1fZmFtaWxpZXMgPSBmYW1pbGllczsgfQotICAgIHZvaWQgc2V0Q29tcHV0ZWRTaXpl
KGZsb2F0IHMpIHsgbV9jb21wdXRlZFNpemUgPSBjbGFtcFRvRmxvYXQocyk7IH0KICAgICB2b2lk
IHNldFNwZWNpZmllZFNpemUoZmxvYXQgcykgeyBtX3NwZWNpZmllZFNpemUgPSBjbGFtcFRvRmxv
YXQocyk7IH0KLSAgICB2b2lkIHNldEl0YWxpYyhGb250SXRhbGljIGkpIHsgbV9pdGFsaWMgPSBp
OyB9Ci0gICAgdm9pZCBzZXRJc0l0YWxpYyhib29sIGkpIHsgc2V0SXRhbGljKGkgPyBGb250SXRh
bGljT24gOiBGb250SXRhbGljT2ZmKTsgfQotICAgIHZvaWQgc2V0U21hbGxDYXBzKEZvbnRTbWFs
bENhcHMgYykgeyBtX3NtYWxsQ2FwcyA9IGM7IH0KLSAgICB2b2lkIHNldElzU21hbGxDYXBzKGJv
b2wgYykgeyBzZXRTbWFsbENhcHMoYyA/IEZvbnRTbWFsbENhcHNPbiA6IEZvbnRTbWFsbENhcHNP
ZmYpOyB9CiAgICAgdm9pZCBzZXRJc0Fic29sdXRlU2l6ZShib29sIHMpIHsgbV9pc0Fic29sdXRl
U2l6ZSA9IHM7IH0KLSAgICB2b2lkIHNldFdlaWdodChGb250V2VpZ2h0IHcpIHsgbV93ZWlnaHQg
PSB3OyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJpbmdNb2RlIG1vZGUp
IHsgbV9yZW5kZXJpbmdNb2RlID0gbW9kZTsgfQogICAgIHZvaWQgc2V0S2VybmluZyhLZXJuaW5n
IGtlcm5pbmcpIHsgbV9rZXJuaW5nID0ga2VybmluZzsgfQogICAgIHZvaWQgc2V0Q29tbW9uTGln
YXR1cmVzU3RhdGUoTGlnYXR1cmVzU3RhdGUgY29tbW9uTGlnYXR1cmVzU3RhdGUpIHsgbV9jb21t
b25MaWdhdHVyZXNTdGF0ZSA9IGNvbW1vbkxpZ2F0dXJlc1N0YXRlOyB9CiAgICAgdm9pZCBzZXRE
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoTGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxp
Z2F0dXJlc1N0YXRlKSB7IG1fZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gZGlzY3JldGlv
bmFyeUxpZ2F0dXJlc1N0YXRlOyB9CkBAIC0xMTgsMjUgKzE3MiwxNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoQ1NTVmFsdWVXZWJraXRYeHhMYXJnZSAtIENTU1ZhbHVlWHhTbWFs
bCArIDEgPT0gOCwgIk1heGltdW0ga2V5d29yZCBzaXplIHNob3VsZCBiZSA4LiIpOwogICAgICAg
ICBzZXRLZXl3b3JkU2l6ZShpZGVudGlmaWVyID8gaWRlbnRpZmllciAtIENTU1ZhbHVlWHhTbWFs
bCArIDEgOiAwKTsKICAgICB9Ci0KICAgICB2b2lkIHNldEZvbnRTbW9vdGhpbmcoRm9udFNtb290
aGluZ01vZGUgc21vb3RoaW5nKSB7IG1fZm9udFNtb290aGluZyA9IHNtb290aGluZzsgfQotICAg
IHZvaWQgc2V0VGV4dFJlbmRlcmluZ01vZGUoVGV4dFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nKSB7
IG1fdGV4dFJlbmRlcmluZyA9IHJlbmRlcmluZzsgfQogICAgIHZvaWQgc2V0SXNTcGVjaWZpZWRG
b250KGJvb2wgaXNTcGVjaWZpZWRGb250KSB7IG1faXNTcGVjaWZpZWRGb250ID0gaXNTcGVjaWZp
ZWRGb250OyB9Ci0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihGb250T3JpZW50YXRpb24gb3JpZW50
YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9Ci0gICAgdm9pZCBzZXROb25D
SktHbHlwaE9yaWVudGF0aW9uKE5vbkNKS0dseXBoT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsg
bV9ub25DSktHbHlwaE9yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH0KLSAgICB2b2lkIHNldFdp
ZHRoVmFyaWFudChGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkgeyBtX3dpZHRoVmFyaWFu
dCA9IHdpZHRoVmFyaWFudDsgfSAvLyBNYWtlIHN1cmUgbmV3IGNhbGxlcnMgb2YgdGhpcyBzeW5j
IHdpdGggRm9udFBsYXRmb3JtRGF0YTo6aXNGb3JUZXh0Q29tYmluZSgpIQotICAgIHZvaWQgc2V0
TG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIHZvaWQgc2V0RmVhdHVyZVNldHRpbmdz
KFBhc3NSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MpIHsgbV9mZWF0dXJlU2V0
dGluZ3MgPSBzZXR0aW5nczsgfQotICAgIHZvaWQgc2V0Rm9udFN5bnRoZXNpcyhGb250U3ludGhl
c2lzIGZvbnRTeW50aGVzaXMpIHsgbV9mb250U3ludGhlc2lzID0gZm9udFN5bnRoZXNpczsgfQog
CiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCi0gICAgYm9vbCBmYW1pbGllc0VxdWFs
Rm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3Q7Cisg
ICAgYm9vbCBmYW1pbGllc0VxdWFsRm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0OwogCi0gICAgYm9vbCBlcXVhbEZvclRleHRBdXRvU2l6
aW5nKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0CisgICAgYm9vbCBlcXVhbEZv
clRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhv
dGhlcikKICAgICAgICAgICAgICYmIG1fc3BlY2lmaWVkU2l6ZSA9PSBvdGhlci5tX3NwZWNpZmll
ZFNpemUKLSAgICAgICAgICAgICYmIG1fc21hbGxDYXBzID09IG90aGVyLm1fc21hbGxDYXBzCisg
ICAgICAgICAgICAmJiBzbWFsbENhcHMoKSA9PSBvdGhlci5zbWFsbENhcHMoKQogICAgICAgICAg
ICAgJiYgbV9pc0Fic29sdXRlU2l6ZSA9PSBvdGhlci5tX2lzQWJzb2x1dGVTaXplOwogICAgIH0K
ICNlbmRpZgpAQCAtMTUyLDI3ICsxOTgsMTIgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFJl
ZkNvdW50ZWRBcnJheTxBdG9taWNTdHJpbmc+IG1fZmFtaWxpZXMgeyAxIH07Ci0gICAgUmVmUHRy
PEZvbnRGZWF0dXJlU2V0dGluZ3M+IG1fZmVhdHVyZVNldHRpbmdzOwotICAgIEF0b21pY1N0cmlu
ZyBtX2xvY2FsZSB7IGluaXRpYWxMb2NhbGUoKSB9OwogCiAgICAgZmxvYXQgbV9zcGVjaWZpZWRT
aXplIHsgMCB9OyAgIC8vIFNwZWNpZmllZCBDU1MgdmFsdWUuIEluZGVwZW5kZW50IG9mIHJlbmRl
cmluZyBpc3N1ZXMgc3VjaCBhcyBpbnRlZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHJvdW5kaW5nLCBtaW5pbXVtIGZvbnQgc2l6ZXMsIGFuZCB6b29taW5nLgotICAgIGZsb2F0
IG1fY29tcHV0ZWRTaXplIHsgMCB9OyAgICAvLyBDb21wdXRlZCBzaXplIGFkanVzdGVkIGZvciB0
aGUgbWluaW11bSBmb250IHNpemUgYW5kIHRoZSB6b29tIGZhY3Rvci4KLQotICAgIHVuc2lnbmVk
IG1fb3JpZW50YXRpb24gOiAxOyAvLyBGb250T3JpZW50YXRpb24gLSBXaGV0aGVyIHRoZSBmb250
IGlzIHJlbmRlcmluZyBvbiBhIGhvcml6b250YWwgbGluZSBvciBhIHZlcnRpY2FsIGxpbmUuCi0g
ICAgdW5zaWduZWQgbV9ub25DSktHbHlwaE9yaWVudGF0aW9uIDogMTsgLy8gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvbiAtIE9ubHkgdXNlZCBieSB2ZXJ0aWNhbCB0ZXh0LiBEZXRlcm1pbmVzIHRoZSBk
ZWZhdWx0IG9yaWVudGF0aW9uIGZvciBub24taWRlb2dyYXBoIGdseXBocy4KLQotICAgIHVuc2ln
bmVkIG1fd2lkdGhWYXJpYW50IDogMjsgLy8gRm9udFdpZHRoVmFyaWFudAotCi0gICAgdW5zaWdu
ZWQgbV9pdGFsaWMgOiAxOyAvLyBGb250SXRhbGljCi0gICAgdW5zaWduZWQgbV9zbWFsbENhcHMg
OiAxOyAvLyBGb250U21hbGxDYXBzCiAgICAgdW5zaWduZWQgbV9pc0Fic29sdXRlU2l6ZSA6IDE7
IC8vIFdoZXRoZXIgb3Igbm90IENTUyBzcGVjaWZpZWQgYW4gZXhwbGljaXQgc2l6ZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChsb2dpY2FsIHNpemVzIGxpa2UgIm1lZGl1
bSIgZG9uJ3QgY291bnQpLgotICAgIHVuc2lnbmVkIG1fd2VpZ2h0IDogODsgLy8gRm9udFdlaWdo
dAotCi0gICAgdW5zaWduZWQgbV9yZW5kZXJpbmdNb2RlIDogMTsgIC8vIFVzZWQgdG8gc3dpdGNo
IGJldHdlZW4gQ0cgYW5kIEdESSB0ZXh0IG9uIFdpbmRvd3MuCiAgICAgdW5zaWduZWQgbV9rZXJu
aW5nIDogMjsgLy8gS2VybmluZwotCiAgICAgdW5zaWduZWQgbV9jb21tb25MaWdhdHVyZXNTdGF0
ZSA6IDI7CiAgICAgdW5zaWduZWQgbV9kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgOiAyOwog
ICAgIHVuc2lnbmVkIG1faGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlIDogMjsKQEAgLTE4MiwzNiAr
MjEzLDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoZS5nLiwg
MTNweCBtb25vc3BhY2UgdnMuIDE2cHggZXZlcnl0aGluZyBlbHNlKS4gIFNpemVzIGFyZSAxLTgg
KGxpa2UgdGhlIEhUTUwgc2l6ZSB2YWx1ZXMgZm9yIDxmb250PikuCiAKICAgICB1bnNpZ25lZCBt
X2ZvbnRTbW9vdGhpbmcgOiAyOyAvLyBGb250U21vb3RoaW5nTW9kZQotICAgIHVuc2lnbmVkIG1f
dGV4dFJlbmRlcmluZyA6IDI7IC8vIFRleHRSZW5kZXJpbmdNb2RlCiAgICAgdW5zaWduZWQgbV9p
c1NwZWNpZmllZEZvbnQgOiAxOyAvLyBUcnVlIGlmIGEgd2ViIHBhZ2Ugc3BlY2lmaWVzIGEgbm9u
LWdlbmVyaWMgZm9udCBmYW1pbHkgYXMgdGhlIGZpcnN0IGZvbnQgZmFtaWx5LgotICAgIHVuc2ln
bmVkIG1fc2NyaXB0IDogNzsgLy8gVXNlZCB0byBoZWxwIGNob29zZSBhbiBhcHByb3ByaWF0ZSBm
b250IGZvciBnZW5lcmljIGZvbnQgZmFtaWxpZXMuCi0gICAgdW5zaWduZWQgbV9mb250U3ludGhl
c2lzIDogMjsgLy8gRm9udFN5bnRoZXNpcyB0eXBlCiB9OwogCi1pbmxpbmUgYm9vbCBGb250RGVz
Y3JpcHRpb246Om9wZXJhdG9yPT0oY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QK
K2lubGluZSBib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Om9wZXJhdG9yPT0oY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZmFtaWxp
ZXMgPT0gb3RoZXIubV9mYW1pbGllcworICAgIHJldHVybiBGb250RGVzY3JpcHRpb246Om9wZXJh
dG9yPT0ob3RoZXIpCisgICAgICAgICYmIG1fZmFtaWxpZXMgPT0gb3RoZXIubV9mYW1pbGllcwog
ICAgICAgICAmJiBtX3NwZWNpZmllZFNpemUgPT0gb3RoZXIubV9zcGVjaWZpZWRTaXplCi0gICAg
ICAgICYmIG1fY29tcHV0ZWRTaXplID09IG90aGVyLm1fY29tcHV0ZWRTaXplCi0gICAgICAgICYm
IG1faXRhbGljID09IG90aGVyLm1faXRhbGljCi0gICAgICAgICYmIG1fc21hbGxDYXBzID09IG90
aGVyLm1fc21hbGxDYXBzCiAgICAgICAgICYmIG1faXNBYnNvbHV0ZVNpemUgPT0gb3RoZXIubV9p
c0Fic29sdXRlU2l6ZQotICAgICAgICAmJiBtX3dlaWdodCA9PSBvdGhlci5tX3dlaWdodAotICAg
ICAgICAmJiBtX3JlbmRlcmluZ01vZGUgPT0gb3RoZXIubV9yZW5kZXJpbmdNb2RlCiAgICAgICAg
ICYmIG1fa2VybmluZyA9PSBvdGhlci5tX2tlcm5pbmcKICAgICAgICAgJiYgbV9jb21tb25MaWdh
dHVyZXNTdGF0ZSA9PSBvdGhlci5tX2NvbW1vbkxpZ2F0dXJlc1N0YXRlCiAgICAgICAgICYmIG1f
ZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID09IG90aGVyLm1fZGlzY3JldGlvbmFyeUxpZ2F0
dXJlc1N0YXRlCiAgICAgICAgICYmIG1faGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID09IG90aGVy
Lm1faGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlCiAgICAgICAgICYmIG1fa2V5d29yZFNpemUgPT0g
b3RoZXIubV9rZXl3b3JkU2l6ZQogICAgICAgICAmJiBtX2ZvbnRTbW9vdGhpbmcgPT0gb3RoZXIu
bV9mb250U21vb3RoaW5nCi0gICAgICAgICYmIG1fdGV4dFJlbmRlcmluZyA9PSBvdGhlci5tX3Rl
eHRSZW5kZXJpbmcKLSAgICAgICAgJiYgbV9pc1NwZWNpZmllZEZvbnQgPT0gb3RoZXIubV9pc1Nw
ZWNpZmllZEZvbnQKLSAgICAgICAgJiYgbV9vcmllbnRhdGlvbiA9PSBvdGhlci5tX29yaWVudGF0
aW9uCi0gICAgICAgICYmIG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9PSBvdGhlci5tX25vbkNK
S0dseXBoT3JpZW50YXRpb24KLSAgICAgICAgJiYgbV93aWR0aFZhcmlhbnQgPT0gb3RoZXIubV93
aWR0aFZhcmlhbnQKLSAgICAgICAgJiYgbV9sb2NhbGUgPT0gb3RoZXIubV9sb2NhbGUKLSAgICAg
ICAgJiYgbV9mZWF0dXJlU2V0dGluZ3MgPT0gb3RoZXIubV9mZWF0dXJlU2V0dGluZ3MKLSAgICAg
ICAgJiYgbV9mb250U3ludGhlc2lzID09IG90aGVyLm1fZm9udFN5bnRoZXNpczsKKyAgICAgICAg
JiYgbV9pc1NwZWNpZmllZEZvbnQgPT0gb3RoZXIubV9pc1NwZWNpZmllZEZvbnQ7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rv
ci5oCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZvbnRDYXNjYWRlRGVzY3JpcHRpb247CiBjbGFzcyBG
b250RGVzY3JpcHRpb247CiBjbGFzcyBGb250U2VsZWN0b3JDbGllbnQ7CiAKQEAgLTQ0LDcgKzQ1
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRB
dChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3QpID0gMDsKIAogICAgIHZpcnR1YWwgc2l6
ZV90IGZhbGxiYWNrRm9udENvdW50KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCByZXNvbHZlc0Zh
bWlseUZvcihjb25zdCBGb250RGVzY3JpcHRpb24mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIHJlc29sdmVzRmFtaWx5Rm9yKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25z
dCA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9udENhY2hlSW52YWxpZGF0ZWQoKSB7IH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCShyZXZpc2lv
biAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1
LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheQogICAgICAgICBh
Qm91bmRzLnNpemUuaGVpZ2h0ID0gMjI7CiAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRl
eHQsIGFCb3VuZHMpOwogICAgICAgICAKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGRlc2M7Cisg
ICAgICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZGVzYzsKIAogICAgICAgICBOT05DTElFTlRN
RVRSSUNTIG1ldHJpY3M7CiAgICAgICAgIG1ldHJpY3MuY2JTaXplID0gc2l6ZW9mKG1ldHJpY3Mp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hl
Q29yZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNDggKzI0MywzOSBAQCB1aW50MTZfdCB0b0NvcmVUZXh0
Rm9udFdlaWdodChGb250V2VpZ2h0CiAgICAgcmV0dXJuIGNvcmVUZXh0Rm9udFdlaWdodHNbZm9u
dFdlaWdodF07CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpz
aW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseSkKIHsKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlh
dGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBp
bgogICAgIC8vIHRoZSByZXF1ZXN0ZWQgbmFtZXMuIEZvciBleGFtcGxlLCB3ZSdsbCBtYXRjaCBh
bnkgbmFtZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KLSAgICBSZWZQdHI8
Rm9udD4gZm9udDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFt
aWx5Q291bnQoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0g
ZGVzY3JpcHRpb24uZmFtaWx5QXQoaSk7Ci0gICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgY29udGludWU7CisgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAvLyBTdWJzdGl0
dXRlIHRoZSBkZWZhdWx0IG1vbm9zcGFjZSBmb250IGZvciB3ZWxsLWtub3duIG1vbm9zcGFjZSBm
b250cy4KLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbW9uYWNv
KCJtb25hY28iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbWVubG8oIm1lbmxvIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IGNvdXJpZXIoImNvdXJpZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwg
bW9uYWNvKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1lbmxvKSkgewotICAgICAgICAg
ICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGNvdXJpZXIpOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTdWJzdGl0dXRlIFZlcmRhbmEg
Zm9yIEx1Y2lkYSBHcmFuZGUuCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGx1Y2lkYUdyYW5kZSgibHVjaWRhIGdyYW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIGx1Y2lkYUdyYW5kZSkp
IHsKLSAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCB2ZXJkYW5h
KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisgICAgLy8gU3Vic3RpdHV0ZSB0
aGUgZGVmYXVsdCBtb25vc3BhY2UgZm9udCBmb3Igd2VsbC1rbm93biBtb25vc3BhY2UgZm9udHMu
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbW9uYWNvKCJtb25hY28i
LCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBtZW5sbygibWVubG8iLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbW9uYWNvKSB8fCBlcXVhbElnbm9y
aW5nQ2FzZShmYW1pbHksIG1lbmxvKSkKKyAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVz
Y3JpcHRpb24sIGNvdXJpZXIpOworCisgICAgLy8gU3Vic3RpdHV0ZSBWZXJkYW5hIGZvciBMdWNp
ZGEgR3JhbmRlLgorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGx1Y2lk
YUdyYW5kZSgibHVjaWRhIGdyYW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHZlcmRhbmEoInZl
cmRhbmEiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBsdWNpZGFHcmFuZGUpKQorICAgICAgICByZXR1cm4gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7CiAjZW5kaWYKIAotICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhcmFiaWMoQVNDSUlMaXRlcmFsKCJBcmFiaWMiKSk7
Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBhc2h0byhBU0NJSUxpdGVy
YWwoIlBhc2h0byIpKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gdXJk
dShBU0NJSUxpdGVyYWwoIlVyZHUiKSk7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29y
ZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07Ci0g
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdlZXphUGxhaW4oIkdl
ZXphUHJvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdlZXphQm9sZCgiR2VlemFQcm8tQm9s
ZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBmb3IgKFN0
cmluZyogbWF0Y2hXb3JkIDogbWF0Y2hXb3JkcykgewotICAgICAgICAgICAgaWYgKGZhbWlseS5j
b250YWlucygqbWF0Y2hXb3JkLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgZm9udCA9IGZvbnRG
b3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0
KCkpID8gZ2VlemFCb2xkIDogZ2VlemFQbGFpbik7Ci0gICAgICAgIH0KKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhcmFiaWMoQVNDSUlMaXRlcmFsKCJBcmFiaWMiKSk7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gcGFzaHRvKEFTQ0lJTGl0ZXJhbCgiUGFzaHRv
IikpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHVyZHUoQVNDSUlMaXRlcmFs
KCJVcmR1IikpOworICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMu
Z2V0KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gZ2VlemFQbGFpbigiR2VlemFQcm8iLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBnZWV6YUJvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKKyAgICBmb3IgKFN0cmluZyogbWF0Y2hXb3JkIDogbWF0Y2hXb3Jkcykg
eworICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zKCptYXRjaFdvcmQsIGZhbHNlKSkKKyAgICAg
ICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xk
KGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOwogICAgIH0K
LQotICAgIHJldHVybiBmb250LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAog
VmVjdG9yPEZvbnRUcmFpdHNNYXNrPiBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAJ
KHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDcgKzMyOCw3
IEBAIHZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldFBhZGRpbmcoaW50IHBhZGQKIAogdm9pZCBIYXJm
QnV6elNoYXBlcjo6c2V0Rm9udEZlYXR1cmVzKCkKIHsKLSAgICBjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uID0gbV9mb250LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBjb25zdCBh
dXRvJiBkZXNjcmlwdGlvbiA9IG1fZm9udC0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgaWYgKGRl
c2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpIHsKICAgICAgICAgc3RhdGljIGhi
X2ZlYXR1cmVfdCB2ZXJ0ID0geyBIYXJmQnV6ekZhY2U6OnZlcnRUYWcsIDEsIDAsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPigtMSkgfTsKICAgICAgICAgc3RhdGljIGhiX2ZlYXR1cmVfdCB2cnQyID0g
eyBIYXJmQnV6ekZhY2U6OnZydDJUYWcsIDEsIDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtMSkg
fTsKQEAgLTMzOCwxNSArMzM4LDE1IEBAIHZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldEZvbnRGZWF0
dXJlcygpCiAKICAgICBoYl9mZWF0dXJlX3Qga2VybmluZyA9IHsgSGFyZkJ1enpGYWNlOjprZXJu
VGFnLCAwLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpIH07CiAgICAgc3dpdGNoIChkZXNj
cmlwdGlvbi5rZXJuaW5nKCkpIHsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsS2Vy
bmluZzoKKyAgICBjYXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbEtlcm5pbmc6CiAg
ICAgICAgIGtlcm5pbmcudmFsdWUgPSAxOwogICAgICAgICBtX2ZlYXR1cmVzLmFwcGVuZChrZXJu
aW5nKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vbmVLZXJu
aW5nOgorICAgIGNhc2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9uZUtlcm5pbmc6CiAgICAg
ICAgIGtlcm5pbmcudmFsdWUgPSAwOwogICAgICAgICBtX2ZlYXR1cmVzLmFwcGVuZChrZXJuaW5n
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5n
OgorICAgIGNhc2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc6CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgJKHJldmlzaW9uIDE4OTU3OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGludCBiYXNlbGlu
ZVBvc2l0aW9uQWRqdXN0bWVudChDb250cm9sUGFydCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIE9wdGlvbmFsPEZvbnREZXNjcmlwdGlvbj4gY29udHJvbEZvbnQoQ29udHJvbFBhcnQs
IGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBPcHRpb25hbDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBjb250cm9sRm9udChD
b250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdCBv
dmVycmlkZTsKICAgICAKICAgICB2aXJ0dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJv
bFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0IHpvb21G
YWN0b3IpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29u
dHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgem9vbUZhY3Rv
cikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhl
bWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1l
TWFjLm1tCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
VGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTcwMCwxMSArNzAwLDExIEBAIGludCBUaGVt
ZU1hYzo6YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQKICAgICByZXR1cm4gVGhlbWU6OmJhc2Vs
aW5lUG9zaXRpb25BZGp1c3RtZW50KHBhcnQpOwogfQogCi1PcHRpb25hbDxGb250RGVzY3JpcHRp
b24+IFRoZW1lTWFjOjpjb250cm9sRm9udChDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK09wdGlvbmFsPEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24+IFRoZW1lTWFjOjpjb250cm9sRm9udChDb250cm9sUGFydCBwYXJ0LCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAgICBzd2l0
Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDogewotICAgICAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldElzQWJzb2x1dGVTaXplKHRydWUpOwogCiAgICAgICAgICAgICBOU0ZvbnQqIG5zRm9udCA9
IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJv
bFNpemU6Y29udHJvbFNpemVGb3JGb250KGZvbnQpXV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwOCw3ICsxMDgsNyBAQCBzdGF0aWMgRm9udENhc2NhZGUgZHJhZ0xhYmVsRm9udChpbnQg
c2l6CiAgICAgbWV0cmljcy5jYlNpemUgPSBzaXplb2YobWV0cmljcyk7CiAgICAgU3lzdGVtUGFy
YW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIG1ldHJpY3MuY2JTaXplLCAmbWV0
cmljcywgMCk7CiAKLSAgICBGb250RGVzY3JpcHRpb24gZGVzY3JpcHRpb247CisgICAgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKICAgICBkZXNjcmlwdGlvbi5zZXRXZWlnaHQo
Ym9sZCA/IEZvbnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCk7CiAgICAgZGVzY3JpcHRp
b24uc2V0T25lRmFtaWx5KG1ldHJpY3MubGZTbUNhcHRpb25Gb250LmxmRmFjZU5hbWUpOwogICAg
IGRlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoKGZsb2F0KXNpemUpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDE4OTU3
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDEsNyArMzQxLDcgQEAgdm9pZCBQb3B1cE1lbnVXaW46OmNhbGN1bGF0
ZVBvc2l0aW9uQW5kUwogCiAgICAgICAgIEZvbnRDYXNjYWRlIGl0ZW1Gb250ID0gY2xpZW50KCkt
Pm1lbnVTdHlsZSgpLmZvbnQoKTsKICAgICAgICAgaWYgKGNsaWVudCgpLT5pdGVtSXNMYWJlbChp
KSkgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3Jp
cHRpb24oKTsKKyAgICAgICAgICAgIGF1dG8gZCA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigp
OwogICAgICAgICAgICAgZC5zZXRXZWlnaHQoZC5ib2xkZXJXZWlnaHQoKSk7CiAgICAgICAgICAg
ICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0ZW1Gb250LmxldHRlclNwYWNpbmcoKSwgaXRl
bUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAgICAgICBpdGVtRm9udC51cGRhdGUobV9wb3B1
cENsaWVudC0+Zm9udFNlbGVjdG9yKCkpOwpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgUG9wdXBN
ZW51V2luOjpwYWludChjb25zdCBJbnRSZWN0JiAKICAgICAgICAgCiAgICAgICAgIEZvbnRDYXNj
YWRlIGl0ZW1Gb250ID0gY2xpZW50KCktPm1lbnVTdHlsZSgpLmZvbnQoKTsKICAgICAgICAgaWYg
KGNsaWVudCgpLT5pdGVtSXNMYWJlbChpbmRleCkpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlw
dGlvbiBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBhdXRvIGQg
PSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIGQuc2V0V2VpZ2h0KGQu
Ym9sZGVyV2VpZ2h0KCkpOwogICAgICAgICAgICAgaXRlbUZvbnQgPSBGb250Q2FzY2FkZShkLCBp
dGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRTcGFjaW5nKCkpOwogICAgICAg
ICAgICAgaXRlbUZvbnQudXBkYXRlKG1fcG9wdXBDbGllbnQtPmZvbnRTZWxlY3RvcigpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTg5
NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjk4NSw3ICsyOTg1LDcgQEAgc3RhdGljIFJlbmRlclN0eWxlJiBzdHlsZUZv
ckZpcnN0TGV0dGVyKAogICAgICAgICAKICAgICAgICAgLy8gU2V0IHRoZSBmb250IHRvIGJlIG9u
ZSBsaW5lIHRvbyBiaWcgYW5kIHRoZW4gcmF0Y2hldCBiYWNrIHRvIGdldCB0byBhIHByZWNpc2Ug
Zml0LiBXZSBjYW4ndCBqdXN0IHNldCB0aGUgZGVzaXJlZCBmb250IHNpemUgYmFzZWQgb2ZmIGZv
bnQgaGVpZ2h0IG1ldHJpY3MKICAgICAgICAgLy8gYmVjYXVzZSBtYW55IGZvbnRzIGJha2UgYXNj
ZW50IGludG8gdGhlIGZvbnQgbWV0cmljcy4gVGhlcmVmb3JlIHdlIGhhdmUgdG8gbG9vayBhdCBh
Y3R1YWwgbWVhc3VyZWQgY2FwIGhlaWdodCB2YWx1ZXMgaW4gb3JkZXIgdG8ga25vdyB3aGVuIHdl
IGhhdmUgYSBnb29kIGZpdC4KLSAgICAgICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlw
dGlvbiA9IHBzZXVkb1N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgYXV0byBuZXdG
b250RGVzY3JpcHRpb24gPSBwc2V1ZG9TdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAg
IGZsb2F0IGNhcFJhdGlvID0gcHNldWRvU3R5bGUtPmZvbnRNZXRyaWNzKCkuZmxvYXRDYXBIZWln
aHQoKSAvIHBzZXVkb1N0eWxlLT5mb250U2l6ZSgpOwogICAgICAgICBmbG9hdCBzdGFydGluZ0Zv
bnRTaXplID0gKChwc2V1ZG9TdHlsZS0+aW5pdGlhbExldHRlckhlaWdodCgpIC0gMSkgKiBsaW5l
SGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCkpIC8g
Y2FwUmF0aW87CiAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0
YXJ0aW5nRm9udFNpemUpOwpAQCAtMjk5Niw3ICsyOTk2LDcgQEAgc3RhdGljIFJlbmRlclN0eWxl
JiBzdHlsZUZvckZpcnN0TGV0dGVyKAogICAgICAgICBpbnQgZGVzaXJlZENhcEhlaWdodCA9IChw
c2V1ZG9TdHlsZS0+aW5pdGlhbExldHRlckhlaWdodCgpIC0gMSkgKiBsaW5lSGVpZ2h0ICsgcGFy
YWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCk7CiAgICAgICAgIGludCBh
Y3R1YWxDYXBIZWlnaHQgPSBwc2V1ZG9TdHlsZS0+Zm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKTsK
ICAgICAgICAgd2hpbGUgKGFjdHVhbENhcEhlaWdodCA+IGRlc2lyZWRDYXBIZWlnaHQpIHsKLSAg
ICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24gPSBwc2V1ZG9TdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlv
biA9IHBzZXVkb1N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIG5ld0ZvbnRE
ZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRT
aXplKCkgLSAxKTsKICAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNp
emUobmV3Rm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpIC0xKTsKICAgICAgICAgICAgIHBz
ZXVkb1N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lv
biAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzY5Nyw3ICszNjk3LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zs
b3c6OmFkanVzdENvbXB1dGVkRm9udAogICAgICAgICBpZiAoaXNWaXNpYmxlUmVuZGVyVGV4dChk
ZXNjZW5kZW50KSAmJiByZXNpemVUZXh0UGVybWl0dGVkKGRlc2NlbmRlbnQpKSB7CiAgICAgICAg
ICAgICBSZW5kZXJUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmRlc2NlbmRlbnQp
OwogICAgICAgICAgICAgUmVuZGVyU3R5bGUmIG9sZFN0eWxlID0gdGV4dC5zdHlsZSgpOwotICAg
ICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG9sZFN0eWxlLmZvbnRE
ZXNjcmlwdGlvbigpOworICAgICAgICAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBvbGRTdHls
ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIGZsb2F0IHNwZWNpZmllZFNpemUgPSBm
b250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpOwogICAgICAgICAgICAgZmxvYXQgc2NhbGVk
U2l6ZSA9IHJvdW5kZihzcGVjaWZpZWRTaXplICogc2NhbGUpOwogICAgICAgICAgICAgaWYgKHNj
YWxlZFNpemUgPiAwICYmIHNjYWxlZFNpemUgPCBtaW5Gb250U2l6ZSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCShyZXZpc2lvbiAx
ODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6
OmNvbWJpbmVUZXh0KCkKICAgICBpZiAoc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBGb250RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBv
cmlnaW5hbEZvbnQoKS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGRlc2NyaXB0aW9uID0g
b3JpZ2luYWxGb250KCkuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZmxvYXQgZW1XaWR0aCA9IGRl
c2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogdGV4dENvbWJpbmVNYXJnaW47CiAgICAgYm9vbCBz
aG91bGRVcGRhdGVGb250ID0gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzU5LDcgKzM1OSw3IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6Omdl
dFJlcGxhY2VtZW4KICAgICBjb250ZW50UmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgY29u
dGVudFJlY3QubW92ZUJ5KHJvdW5kZWRJbnRQb2ludChhY2N1bXVsYXRlZE9mZnNldCkpOwogCi0g
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkt
PnN5c3RlbUZvbnQoQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2wsIGZvbnREZXNjcmlwdGlvbik7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Qm9sZCk7CiAgICAgZm9u
dERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoZnJhbWUoKS5zZXR0aW5ncygpLmZvbnRSZW5k
ZXJpbmdNb2RlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxT
Y3JlZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
dWxsU2NyZWVuLmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBA
IHN0YXRpYyBSZWY8UmVuZGVyU3R5bGU+IGNyZWF0ZUZ1bGxTY3JlZW4KICAgICAvLyBDcmVhdGUg
YSBzdGFja2luZyBjb250ZXh0OgogICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5zZXRaSW5kZXgo
SU5UX01BWCk7CiAKLSAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0Rm9udERlc2NyaXB0aW9u
KEZvbnREZXNjcmlwdGlvbigpKTsKKyAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0Rm9udERl
c2NyaXB0aW9uKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24oKSk7CiAgICAgZnVsbHNjcmVlblN0eWxl
LmdldCgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKG51bGxwdHIpOwogCiAgICAgZnVsbHNjcmVlblN0
eWxlLmdldCgpLnNldERpc3BsYXkoRkxFWCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw5ICsx
MTksOSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAg
ICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS50ZXh0
SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChpczxI
VE1MT3B0R3JvdXBFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICB0ZXh0ID0g
ZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpLmdyb3VwTGFiZWxUZXh0KCk7
Ci0gICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3Jp
cHRpb24oKTsKLSAgICAgICAgICAgICAgICBkLnNldFdlaWdodChkLmJvbGRlcldlaWdodCgpKTsK
LSAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0ZW1Gb250LmxldHRl
clNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgICAgICAgICAgICAgYXV0
byBkZXNjcmlwdGlvbiA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAg
ICAgIGRlc2NyaXB0aW9uLnNldFdlaWdodChkZXNjcmlwdGlvbi5ib2xkZXJXZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgaXRlbUZvbnQgPSBGb250Q2FzY2FkZShkZXNjcmlwdGlvbiwgaXRlbUZv
bnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKICAgICAgICAgICAg
ICAgICBpdGVtRm9udC51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogICAgICAg
ICAgICAgfQogCkBAIC00MDUsOSArNDA1LDkgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0
ZW1Gb3JlZ3JvdW5kKAogICAgIHIubW92ZShpdGVtT2Zmc2V0Rm9yQWxpZ25tZW50KHRleHRSdW4s
ICZpdGVtU3R5bGUsIGl0ZW1Gb250LCByKSk7CiAKICAgICBpZiAoaXM8SFRNTE9wdEdyb3VwRWxl
bWVudD4oKmxpc3RJdGVtRWxlbWVudCkpIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBp
dGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZC5zZXRXZWlnaHQoZC5ib2xkZXJX
ZWlnaHQoKSk7Ci0gICAgICAgIGl0ZW1Gb250ID0gRm9udENhc2NhZGUoZCwgaXRlbUZvbnQubGV0
dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKKyAgICAgICAgYXV0byBkZXNj
cmlwdGlvbiA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBkZXNjcmlwdGlv
bi5zZXRXZWlnaHQoZGVzY3JpcHRpb24uYm9sZGVyV2VpZ2h0KCkpOworICAgICAgICBpdGVtRm9u
dCA9IEZvbnRDYXNjYWRlKGRlc2NyaXB0aW9uLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0
ZW1Gb250LndvcmRTcGFjaW5nKCkpOwogICAgICAgICBpdGVtRm9udC51cGRhdGUoJmRvY3VtZW50
KCkuZm9udFNlbGVjdG9yKCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDcgQEAg
Ym9vbCBSZW5kZXJUZXh0Ojppc1RleHRGcmFnbWVudCgpIGNvbnN0CiBib29sIFJlbmRlclRleHQ6
OmNvbXB1dGVVc2VCYWNrc2xhc2hBc1llblN5bWJvbCgpIGNvbnN0CiB7CiAgICAgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKLSAgICBjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udERlc2NyaXB0aW9u
KCk7CisgICAgY29uc3QgYXV0byYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUuZm9udERlc2NyaXB0
aW9uKCk7CiAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkudXNlQmFja3NsYXNoQXNZZW5TeW1i
b2woKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc1Nw
ZWNpZmllZEZvbnQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1OSwxOCArMTE1OSwxOCBAQCB2b2lkIFJl
bmRlclRoZW1lOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nCiAgICAgUGFnZTo6dXBkYXRlU3R5bGVG
b3JBbGxQYWdlc0FmdGVyR2xvYmFsQ2hhbmdlSW5FbnZpcm9ubWVudCgpOwogfQogCi1Gb250RGVz
Y3JpcHRpb24mIFJlbmRlclRoZW1lOjpjYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFs
dWVJRCBzeXN0ZW1Gb250SUQpIGNvbnN0CitGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBSZW5kZXJU
aGVtZTo6Y2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgc3lzdGVtRm9udElE
KSBjb25zdAogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IGNh
cHRpb247Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gaWNvbjsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBtZW51OwotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IG1lc3NhZ2VCb3g7Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc21hbGxDYXB0aW9uOwotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHN0YXR1c0JhcjsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiB3ZWJraXRNaW5pQ29udHJvbDsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiB3ZWJraXRTbWFsbENvbnRy
b2w7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gd2Via2l0Q29u
dHJvbDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBkZWZhdWx0
RGVzY3JpcHRpb247CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24+IGNhcHRpb247CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24+IGljb247CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24+IG1lbnU7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24+IG1lc3NhZ2VCb3g7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24+IHNtYWxsQ2FwdGlvbjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gc3RhdHVzQmFyOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiB3ZWJraXRNaW5pQ29udHJvbDsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gd2Via2l0U21hbGxDb250
cm9sOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiB3
ZWJraXRDb250cm9sOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2Ny
aXB0aW9uPiBkZWZhdWx0RGVzY3JpcHRpb247CiAKICAgICBzd2l0Y2ggKHN5c3RlbUZvbnRJRCkg
ewogICAgIGNhc2UgQ1NTVmFsdWVDYXB0aW9uOgpAQCAtMTE5OSw3ICsxMTk5LDcgQEAgRm9udERl
c2NyaXB0aW9uJiBSZW5kZXJUaGVtZTo6Y2FjaGVkU3lzdAogICAgIH0KIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZTo6c3lzdGVtRm9udChDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCwgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjpzeXN0ZW1Gb250
KENTU1ZhbHVlSUQgc3lzdGVtRm9udElELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pIGNvbnN0CiB7CiAgICAgZm9udERlc2NyaXB0aW9uID0gY2FjaGVkU3lzdGVtRm9u
dERlc2NyaXB0aW9uKHN5c3RlbUZvbnRJRCk7CiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc0Fi
c29sdXRlU2l6ZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJ
KHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJuIDAuNTsgfQogCiAg
ICAgLy8gU3lzdGVtIGZvbnRzIGFuZCBjb2xvcnMgZm9yIENTUy4KLSAgICB2b2lkIHN5c3RlbUZv
bnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgdm9pZCBzeXN0ZW1G
b250KENTU1ZhbHVlSUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdDsKICAgICB2aXJ0
dWFsIENvbG9yIHN5c3RlbUNvbG9yKENTU1ZhbHVlSUQpIGNvbnN0OwogCiAgICAgdmlydHVhbCBp
bnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
QEAgLTI1NSw4ICsyNTUsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgRm9udERlc2NyaXB0aW9uJiBjYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFs
dWVJRCBzeXN0ZW1Gb250SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDYWNoZWRT
eXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQsIEZvbnREZXNjcmlw
dGlvbiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGNh
Y2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NW
YWx1ZUlEIHN5c3RlbUZvbnRJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0ID0gMDsK
IAogICAgIC8vIFRoZSBwbGF0Zm9ybSBzZWxlY3Rpb24gY29sb3IuCiAgICAgdmlydHVhbCBDb2xv
ciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lRWZsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVFZmwuY3BwCShyZXZpc2lvbiAx
ODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVFZmwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjpz
ZXREZWZhdWx0Rm9udFNpemUoCiAgICAgZGVmYXVsdEZvbnRTaXplID0gc2l6ZTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZUVmbDo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1Zh
bHVlSUQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZUVmbDo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQs
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICAv
LyBJdCB3YXMgY2FsbGVkIGJ5IFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkIHRv
IHJlbmRlciBhbHRlcm5hdGl2ZSBzdHJpbmcuCiAgICAgLy8gVG8gYXZvaWQgY2Fpcm9fZXJyb3Ig
d2hpbGUgcmVuZGVyaW5nLCBmb250RGVzY3JpcHRpb24gc2hvdWxkIGJlIHBhc3NlZC4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUVmbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUVmbC5oCShyZXZpc2lvbiAxODk1
NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVFZmwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gU3lz
dGVtIGZvbnRzLgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3Jp
cHRpb24oQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlE
LCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBBTFdBWVNf
SU5MSU5FIEVjb3JlX0V2YXMqIGNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFzLmdldCgp
OyB9CiAgICAgQUxXQVlTX0lOTElORSBFdmFzX09iamVjdCogZWRqZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZWRqZS5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVHdGsuY3BwCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHN0
YXRpYyBkb3VibGUgZ2V0U2NyZWVuRFBJKCkKICAgICByZXR1cm4gZHBpOwogfQogCi12b2lkIFJl
bmRlclRoZW1lR3RrOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJ
RCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lR3RrOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCwgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIEd0a1Nl
dHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOwogICAgIGlmICgh
c2V0dGluZ3MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsu
aAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lR3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIC8vIFN5c3RlbSBmb250cy4KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2FjaGVk
U3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3Jp
cHRpb24oQ1NTVmFsdWVJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRl
OwogCiBwdWJsaWM6CiAjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAkocmV2aXNpb24gMTg5NTc5KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDggKzQ4LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNl
dENvbnRlbnRTaXplQ2F0ZWdvcnkoY29uc3QgU3RyaW5nJik7CiAKIHByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiYgY2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1Zh
bHVlSUQgc3lzdGVtRm9udElEKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlv
biYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYg
Y2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgc3lzdGVtRm9udElEKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2Ny
aXB0aW9uKENTU1ZhbHVlSUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlckJveCYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91
bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMTg5
NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDc4LDI1ICsxMDc4LDI1IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnNo
b3VsZEhhdmVDYXBzTG9ja0kKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUZvbnREZXNjcmlwdGlv
biYgUmVuZGVyVGhlbWVJT1M6OmNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlE
IHZhbHVlSUQpIGNvbnN0CitGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBSZW5kZXJUaGVtZUlPUzo6
Y2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgdmFsdWVJRCkgY29uc3QKIHsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBzeXN0ZW1Gb250Owot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IGhlYWRsaW5lRm9udDsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBib2R5Rm9udDsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBzdWJoZWFkbGluZUZvbnQ7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gZm9vdG5vdGVGb250
OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IGNhcHRpb24xRm9u
dDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBjYXB0aW9uMkZv
bnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc2hvcnRIZWFk
bGluZUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc2hv
cnRCb2R5Rm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBz
aG9ydFN1YmhlYWRsaW5lRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2Ny
aXB0aW9uPiBzaG9ydEZvb3Rub3RlRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9u
dERlc2NyaXB0aW9uPiBzaG9ydENhcHRpb24xRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Rm9udERlc2NyaXB0aW9uPiB0YWxsQm9keUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHN5c3RlbUZvbnQ7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IGhlYWRsaW5lRm9udDsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gYm9keUZvbnQ7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHN1YmhlYWRsaW5l
Rm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4g
Zm9vdG5vdGVGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2Ny
aXB0aW9uPiBjYXB0aW9uMUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24+IGNhcHRpb24yRm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gc2hvcnRIZWFkbGluZUZvbnQ7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHNob3J0Qm9keUZvbnQ7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHNob3J0U3ViaGVh
ZGxpbmVGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0
aW9uPiBzaG9ydEZvb3Rub3RlRm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENh
c2NhZGVEZXNjcmlwdGlvbj4gc2hvcnRDYXB0aW9uMUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHRhbGxCb2R5Rm9udDsKICNpZiBfX0lQSE9O
RV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDgwMjAwCi0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEZvbnREZXNjcmlwdGlvbj4gdGl0bGUxRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Rm9udERlc2NyaXB0aW9uPiB0aXRsZTJGb250OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxGb250RGVzY3JpcHRpb24+IHRpdGxlM0ZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHRpdGxlMUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHRpdGxlMkZvbnQ7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHRpdGxlM0ZvbnQ7CiAjZW5kaWYK
IAogICAgIHN0YXRpYyBDRlN0cmluZ1JlZiB1c2VyVGV4dFNpemUgPSBjb250ZW50U2l6ZUNhdGVn
b3J5KCk7CkBAIC0xMTU4LDcgKzExNTgsNyBAQCBGb250RGVzY3JpcHRpb24mIFJlbmRlclRoZW1l
SU9TOjpjYWNoZWRTCiAgICAgfQogfQogCi12b2lkIFJlbmRlclRoZW1lSU9TOjp1cGRhdGVDYWNo
ZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1ZUlELCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OnVwZGF0ZUNh
Y2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHZhbHVlSUQsIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBSZXRhaW5QdHI8Q1RG
b250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3I7CiAgICAgQ0ZTdHJpbmdSZWYgdGV4dFN0
eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHJl
dmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgflJlbmRlclRoZW1lTWFjKCk7CiAKICAgICAvLyBTeXN0ZW0gZm9udHMuCi0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBG
b250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Q2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICAvLyBNZWRp
YSBjb250cm9scwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbQkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNyArMzM4LDcgQEAgc3RhdGljIEZv
bnRXZWlnaHQgdG9Gb250V2VpZ2h0KE5TSW50ZWdlcgogICAgIHJldHVybiBmb250V2VpZ2h0c1th
cHBLaXRGb250V2VpZ2h0IC0gMV07CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNh
Y2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQsIEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBk
YXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgY3NzVmFsdWVJZCwgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIE5TRm9u
dCogZm9udDsKICAgICAvLyBTeXN0ZW0tZm9udC1uZXNzIGNhbid0IGJlIGVuY2Fwc3VsYXRlZCBi
eSBzaW1wbHkgYSBmb250IG5hbWUuIEluc3RlYWQsIHdlIG11c3QgdXNlIGEgdG9rZW4KQEAgLTgy
Myw3ICs4MjMsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTaXplRnJvbUZvbnQoUmVuCiAK
IHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29uc3QK
IHsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fi
c29sdXRlU2l6ZSh0cnVlKTsKIAogICAgIE5TRm9udCogZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9u
dE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6Y29udHJvbFNpemVd
XTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJp
LmNwcAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lU2FmYXJpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRp
YyBmbG9hdCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXoKICAgICByZXR1cm4gc2l6ZXNbY29u
dHJvbFNpemVdOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjp1cGRhdGVDYWNoZWRTeXN0
ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1ZUlELCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnVwZGF0ZUNhY2hl
ZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHZhbHVlSUQsIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBmbG9hdCBmb250U2l6ZTsK
ICAgICBzd2l0Y2ggKHZhbHVlSUQpIHsKQEAgLTM2MCw3ICszNjAsNyBAQCB2b2lkIFJlbmRlclRo
ZW1lU2FmYXJpOjpzZXRTaXplRnJvbUZvbnQoCiAKIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNl
dEZvbnRGcm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplKSBjb25zdAogewotICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgRm9udENhc2NhZGVEZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXpl
KHRydWUpOwogCiAgICAgZmxvYXQgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xT
aXplKGNvbnRyb2xTaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZVNhZmFyaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZVNhZmFyaS5oCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBA
QCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICAvLyBTeXN0ZW0gZm9udHMuCi0gICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250
RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2Fj
aGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5j
ZSB2YWx1ZS4KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDE4OTU3OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxOSw3ICszMTksNyBAQCBDb2xvciBSZW5kZXJUaGVtZVdpbjo6cGxhdGZvcm1JbmFj
dGl2ZVNlCiAgICAgcmV0dXJuIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbGxGb250RGVzY3JpcHRpb24oRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIExPR0ZPTlQmIGxvZ0ZvbnQsIGZsb2F0IGZvbnRTaXplKQorc3Rh
dGljIHZvaWQgZmlsbEZvbnREZXNjcmlwdGlvbihGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIExPR0ZPTlQmIGxvZ0ZvbnQsIGZsb2F0IGZvbnRTaXplKQogeyAgICAKICAg
ICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldE9uZUZhbWlseShTdHJpbmcobG9nRm9udC5sZkZhY2VOYW1lKSk7CkBAIC0zMjgs
NyArMzI4LDcgQEAgc3RhdGljIHZvaWQgZmlsbEZvbnREZXNjcmlwdGlvbihGb250RGVzYwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRJc0l0YWxpYyhsb2dGb250LmxmSXRhbGljKTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZVdpbjo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1Zh
bHVlSUQgdmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lV2luOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NT
VmFsdWVJRCB2YWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0CiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CiAgICAgc3RhdGljIE5PTkNM
SUVOVE1FVFJJQ1MgbmNtOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luLmgJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVdpbigpOwogCiAgICAgLy8gU3lzdGVtIGZvbnRz
LgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NT
VmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGFkZEludHJpbnNp
Y01hcmdpbnMoUmVuZGVyU3R5bGUmKSBjb25zdDsKICAgICB2b2lkIGNsb3NlKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAJKHJldmlzaW9uIDE4
OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIFRleHRBdXRvU2l6aW5nVmFsdWU6
OmFkanVzdE5vZGVTaXplCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBjbG9uZVJlbmRlclN0eWxlV2l0aFN0YXRlKHRl
eHQtPnN0eWxlKCkpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIGF1dG8gZm9udERlc2Ny
aXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZShhdmVyYWdlU2l6ZSk7CiAgICAgICAgICAgICBzdHlsZS0+
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICBzdHlsZS0+
Zm9udENhc2NhZGUoKS51cGRhdGUoJmF1dG9TaXppbmdOb2RlLT5kb2N1bWVudCgpLmZvbnRTZWxl
Y3RvcigpKTsKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIFRleHRBdXRvU2l6aW5nVmFsdWU6OnJl
c2V0KCkKICAgICAgICAgaWYgKCF0ZXh0KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IC8vIFJlc2V0IHRoZSBmb250IHNpemUgYmFjayB0byB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIHNp
emUKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHRleHQtPnN0eWxl
KCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gdGV4
dC0+c3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZmxvYXQgb3JpZ2luYWxTaXpl
ID0gZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKTsKICAgICAgICAgaWYgKGZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZFNpemUoKSAhPSBvcmlnaW5hbFNpemUpIHsKICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUob3JpZ2luYWxTaXplKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4u
Y3BwCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFRva2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2
b2lkIFJlbmRlck1hdGhNTFRva2VuOjp1cGRhdGVTdHlsZSgpCiAgICAgaWYgKHRva2VuRWxlbWVu
dC5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptaVRhZykpIHsKICAgICAgICAgLy8gVGhpcyB0cmll
cyB0byBlbXVsYXRlIHRoZSBkZWZhdWx0IG1hdGh2YXJpYW50IHZhbHVlIG9uIDxtaT4gdXNpbmcg
dGhlIENTUyBmb250LXN0eWxlIHByb3BlcnR5LgogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgcmV2aXNlZCB3aGVuIG1hdGh2YXJpYW50IGlzIGltcGxlbWVudGVkIChodHRwOi8vd2ti
dWcvODU3MzUpIGFuZCB3aGVuIGZvbnRzIHdpdGggTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBT
eW1ib2xzIGNoYXJhY3RlcnMgYXJlIG1vcmUgcG9wdWxhci4KLSAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbihuZXdTdHlsZS5nZXQoKS5mb250RGVzY3JpcHRpb24oKSk7Cisg
ICAgICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gbmV3U3R5bGUuZ2V0KCkuZm9udERlc2NyaXB0
aW9uKCk7CiAgICAgICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0gbmV3U3R5bGUuZ2V0
KCkuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKICAgICAgICAgaWYgKCFtX2NvbnRhaW5z
RWxlbWVudCAmJiBlbGVtZW50KCkudGV4dENvbnRlbnQoKS5zdHJpcFdoaXRlU3BhY2UoKS5zaW1w
bGlmeVdoaXRlU3BhY2UoKS5sZW5ndGgoKSA9PSAxICYmICF0b2tlbkVsZW1lbnQuaGFzQXR0cmli
dXRlKG1hdGh2YXJpYW50QXR0cikpCiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRh
bGljKEZvbnRJdGFsaWNPbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDEs
NyArMTQwMSw3IEBAIGNvbnN0IEFuaW1hdGlvbiogUmVuZGVyU3R5bGU6OnRyYW5zaXRpb24KIAog
Y29uc3QgRm9udENhc2NhZGUmIFJlbmRlclN0eWxlOjpmb250Q2FzY2FkZSgpIGNvbnN0IHsgcmV0
dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGU7IH0KIGNvbnN0IEZvbnRNZXRyaWNzJiBSZW5kZXJT
dHlsZTo6Zm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRl
LmZvbnRNZXRyaWNzKCk7IH0KLWNvbnN0IEZvbnREZXNjcmlwdGlvbiYgUmVuZGVyU3R5bGU6OmZv
bnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGUuZm9u
dERlc2NyaXB0aW9uKCk7IH0KK2NvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIFJlbmRlclN0
eWxlOjpmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNj
YWRlLmZvbnREZXNjcmlwdGlvbigpOyB9CiBmbG9hdCBSZW5kZXJTdHlsZTo6c3BlY2lmaWVkRm9u
dFNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7
IH0KIGZsb2F0IFJlbmRlclN0eWxlOjpjb21wdXRlZEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4g
Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7IH0KIGludCBSZW5kZXJTdHlsZTo6Zm9u
dFNpemUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLnBpeGVsU2l6ZSgp
OyB9CkBAIC0xNDA5LDcgKzE0MDksNyBAQCBpbnQgUmVuZGVyU3R5bGU6OmZvbnRTaXplKCkgY29u
c3QgeyByZXR1CiBjb25zdCBMZW5ndGgmIFJlbmRlclN0eWxlOjp3b3JkU3BhY2luZygpIGNvbnN0
IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT53b3JkU3BhY2luZzsgfQogZmxvYXQgUmVuZGVy
U3R5bGU6OmxldHRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNj
YWRlLmxldHRlclNwYWNpbmcoKTsgfQogCi1ib29sIFJlbmRlclN0eWxlOjpzZXRGb250RGVzY3Jp
cHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiB2KQorYm9vbCBSZW5kZXJTdHlsZTo6c2V0Rm9u
dERlc2NyaXB0aW9uKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIHYpCiB7CiAgICAgaWYg
KGluaGVyaXRlZC0+Zm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCkgIT0gdikgewogICAgICAg
ICBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlID0gRm9udENhc2NhZGUodiwgaW5oZXJp
dGVkLT5mb250Q2FzY2FkZS5sZXR0ZXJTcGFjaW5nKCksIGluaGVyaXRlZC0+Zm9udENhc2NhZGUu
d29yZFNwYWNpbmcoKSk7CkBAIC0xNDk0LDE5ICsxNDk0LDE5IEBAIHZvaWQgUmVuZGVyU3R5bGU6
OnNldEZvbnRTaXplKGZsb2F0IHNpemUKICAgICAgICAgc2l6ZSA9IHN0ZDo6bWluKG1heGltdW1B
bGxvd2VkRm9udFNpemUsIHNpemUpOwogCiAgICAgRm9udFNlbGVjdG9yKiBjdXJyZW50Rm9udFNl
bGVjdG9yID0gZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKLSAgICBGb250RGVzY3JpcHRp
b24gZGVzYyhmb250RGVzY3JpcHRpb24oKSk7Ci0gICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKHNp
emUpOwotICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKHNpemUpOworICAgIGF1dG8gZGVzY3JpcHRp
b24gPSBmb250RGVzY3JpcHRpb24oKTsKKyAgICBkZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KHNpemUpOworICAgIGRlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzaXplKTsKIAogI2lmIEVO
QUJMRShURVhUX0FVVE9TSVpJTkcpCiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHRleHRBdXRvc2l6
aW5nTXVsdGlwbGllcigpOwogICAgIGlmIChtdWx0aXBsaWVyID4gMSkgewogICAgICAgICBmbG9h
dCBhdXRvc2l6ZWRGb250U2l6ZSA9IFRleHRBdXRvc2l6ZXI6OmNvbXB1dGVBdXRvc2l6ZWRGb250
U2l6ZShzaXplLCBtdWx0aXBsaWVyKTsKLSAgICAgICAgZGVzYy5zZXRDb21wdXRlZFNpemUobWlu
KG1heGltdW1BbGxvd2VkRm9udFNpemUsIGF1dG9zaXplZEZvbnRTaXplKSk7CisgICAgICAgIGRl
c2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShtaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgYXV0
b3NpemVkRm9udFNpemUpKTsKICAgICB9CiAjZW5kaWYKIAotICAgIHNldEZvbnREZXNjcmlwdGlv
bihkZXNjKTsKKyAgICBzZXRGb250RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOwogICAgIGZvbnRD
YXNjYWRlKCkudXBkYXRlKGN1cnJlbnRGb250U2VsZWN0b3IpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMTg5NTc5
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY5OSw3ICs2OTksNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUoKSBjb25zdDsKICAgICBXRUJDT1JFX0VY
UE9SVCBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdDsKLSAgICBXRUJDT1JF
X0VYUE9SVCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbigpIGNvbnN0OwogICAgIGZsb2F0IHNwZWNpZmllZEZvbnRTaXplKCkgY29uc3Q7CiAg
ICAgZmxvYXQgY29tcHV0ZWRGb250U2l6ZSgpIGNvbnN0OwogICAgIGludCBmb250U2l6ZSgpIGNv
bnN0OwpAQCAtMTMzNCw3ICsxMzM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2xlYXIoRUNs
ZWFyIHYpIHsgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldENsZWFyKHYpOyB9CiAgICAgdm9pZCBzZXRU
YWJsZUxheW91dChFVGFibGVMYXlvdXQgdikgeyBub25pbmhlcml0ZWRfZmxhZ3Muc2V0VGFibGVM
YXlvdXQodik7IH0KIAotICAgIGJvb2wgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpOworICAgIGJvb2wgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mKTsKICAgICAvLyBPbmx5IHVzZWQgZm9yIGJsZW5kaW5nIGZvbnQgc2l6ZXMg
d2hlbiBhbmltYXRpbmcsIGZvciBNYXRoTUwgYW5vbnltb3VzIGJsb2NrcywgYW5kIGZvciB0ZXh0
IGF1dG9zaXppbmcuCiAgICAgdm9pZCBzZXRGb250U2l6ZShmbG9hdCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNw
cAkocmV2aXNpb24gMTg5NTc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIHZv
aWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWwKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24oc3R5bGUuZm9udERl
c2NyaXB0aW9uKCkpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGUuZm9udERlc2Ny
aXB0aW9uKCk7CiAKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBiZXR0ZXIgaGFuZGxlIHRoZSBj
YXNlIHdoZW4gd2UgY29tcHV0ZSB2ZXJ5IHNtYWxsIGZvbnRzIGJlbG93IChiZWxvdyAxcHQpLgog
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNp
emVGcm9tU3BlY2lmaWVkU2l6ZUZvclNWR0lubGluZVRleHQoZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2NhbGluZ0ZhY3Rv
ciwgcmVuZGVyZXIuZG9jdW1lbnQoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDE4OTU3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyArMzQxLDcgQEAg
R2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpnbAogCiAgICAgLy8gU1ZHIGZv
bnQgY29udGV4dCBzZW5zaXRpdmUgc2VsZWN0aW9uIGZhaWxlZCBhbmQgdGhlcmUgaXMgbm8gZGVm
aW5lZCBtaXNzaW5nIGdseXBoLiBEcm9wIGRvd24gdG8gYSBkZWZhdWx0IGZvbnQuCiAgICAgLy8g
VGhlIGJlaGF2aW9yIGRvZXMgbm90IHNlZW0gdG8gYmUgc3BlY2lmaWVkLiBGb3Igc2ltcGxpY2l0
eSB3ZSBkb24ndCB0cnkgdG8gcmVzb2x2ZSBmb250IGZhbGxiYWNrcyBjb250ZXh0LXNlbnNpdGl2
ZWx5LgotICAgIEZvbnREZXNjcmlwdGlvbiBmYWxsYmFja0Rlc2NyaXB0aW9uID0gZm9udC5mb250
RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZhbGxiYWNrRGVzY3JpcHRpb24gPSBmb250LmZvbnRE
ZXNjcmlwdGlvbigpOwogICAgIGZhbGxiYWNrRGVzY3JpcHRpb24uc2V0RmFtaWxpZXMoVmVjdG9y
PEF0b21pY1N0cmluZz4geyBzYW5zU2VyaWZGYW1pbHkgfSk7CiAgICAgRm9udENhc2NhZGUgZmFs
bGJhY2tGb250KGZhbGxiYWNrRGVzY3JpcHRpb24sIGZvbnQubGV0dGVyU3BhY2luZygpLCBmb250
LndvcmRTcGFjaW5nKCkpOwogICAgIGZhbGxiYWNrRm9udC51cGRhdGUoZm9udC5mb250U2VsZWN0
b3IoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9y
RG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxODk1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcg
QEAgUmVmPFJlbmRlclN0eWxlPiByZXNvbHZlRm9yRG9jdW1lbnQoY29ucwogICAgIGRvY3VtZW50
U3R5bGUuZ2V0KCkuc2V0UlRMT3JkZXJpbmcoZG9jdW1lbnQudmlzdWFsbHlPcmRlcmVkKCkgPyBW
aXN1YWxPcmRlciA6IExvZ2ljYWxPcmRlcik7CiAgICAgZG9jdW1lbnRTdHlsZS5nZXQoKS5zZXRa
b29tKCFkb2N1bWVudC5wcmludGluZygpID8gcmVuZGVyVmlldy5mcmFtZSgpLnBhZ2Vab29tRmFj
dG9yKCkgOiAxKTsKICAgICBkb2N1bWVudFN0eWxlLmdldCgpLnNldFBhZ2VTY2FsZVRyYW5zZm9y
bShyZW5kZXJWaWV3LmZyYW1lKCkuZnJhbWVTY2FsZUZhY3RvcigpKTsKLSAgICBGb250RGVzY3Jp
cHRpb24gZG9jdW1lbnRGb250RGVzY3JpcHRpb24gPSBkb2N1bWVudFN0eWxlLmdldCgpLmZvbnRE
ZXNjcmlwdGlvbigpOworICAgIGF1dG8gZG9jdW1lbnRGb250RGVzY3JpcHRpb24gPSBkb2N1bWVu
dFN0eWxlLmdldCgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGRvY3VtZW50Rm9udERlc2NyaXB0
aW9uLnNldExvY2FsZShkb2N1bWVudC5jb250ZW50TGFuZ3VhZ2UoKSk7CiAgICAgZG9jdW1lbnRT
dHlsZS5nZXQoKS5zZXRGb250RGVzY3JpcHRpb24oV1RGOjptb3ZlKGRvY3VtZW50Rm9udERlc2Ny
aXB0aW9uKSk7CiAKQEAgLTk4LDcgKzk4LDcgQEAgUmVmPFJlbmRlclN0eWxlPiByZXNvbHZlRm9y
RG9jdW1lbnQoY29ucwogCiAgICAgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdzID0gcmVuZGVyVmll
dy5mcmFtZSgpLnNldHRpbmdzKCk7CiAKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRMb2NhbGUoZG9jdW1lbnQuY29udGVudExhbmd1YWdlKCkpOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLmZvbnRSZW5kZXJpbmdN
b2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoc3RhbmRhcmRGYW1pbHkp
OwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lv
biAxODk1NzkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC00OTE1LDEzICs0OTE1LDEyIEBAIC0gKE5TRm9udCAqKV9vcmlnaW5h
bEZvbnRCCiAgICAgcmV0dXJuIFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gZm9u
dFdpdGhGYW1pbHk6QCJUaW1lcyIgdHJhaXRzOk5TRm9udEl0YWxpY1RyYWl0IHdlaWdodDpTVEFO
REFSRF9CT0xEX1dFSUdIVCBzaXplOjEyLjBmXTsKIH0KIAotc3RhdGljIE5TU3RyaW5nICpmb250
TmFtZUZvckRlc2NyaXB0aW9uKE5TU3RyaW5nICpmYW1pbHlOYW1lLCBCT09MIGl0YWxpYywgQk9P
TCBib2xkLCBpbnQgcG9pbnRTaXplKQorc3RhdGljIE5TU3RyaW5nICpmb250TmFtZUZvckRlc2Ny
aXB0aW9uKE5TU3RyaW5nICpmYW1pbHlOYW1lLCBCT09MIGl0YWxpYywgQk9PTCBib2xkKQogewog
ICAgIC8vIEZpbmQgdGhlIGZvbnQgdGhlIHNhbWUgd2F5IHRoZSByZW5kZXJpbmcgY29kZSB3b3Vs
ZCBsYXRlciBpZiBpdCBlbmNvdW50ZXJlZCB0aGlzIENTUy4KICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0l0YWxpYyhpdGFsaWMp
OwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoYm9sZCA/IEZvbnRXZWlnaHQ5MDAgOiBG
b250V2VpZ2h0NTAwKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShwb2lu
dFNpemUpOwogICAgIFJlZlB0cjxGb250PiBmb250ID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5m
b250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAgICAgcmV0dXJuIFtm
b250LT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250TmFtZV07CiB9CkBAIC00OTYyLDcgKzQ5
NjEsNyBAQCAtICh2b2lkKV9hZGRUb1N0eWxlOihET01DU1NTdHlsZURlY2xhcmF0CiAgICAgICAg
IC8vIHRoZSBQb3N0c2NyaXB0IG5hbWUuCiAgICAgICAgIC8vIElmIHdlIGRvbid0IGZpbmQgYSBm
b250IHdpdGggdGhlIHNhbWUgUG9zdHNjcmlwdCBuYW1lLCB0aGVuIHdlJ2xsIGhhdmUgdG8gdXNl
IHRoZQogICAgICAgICAvLyBQb3N0c2NyaXB0IG5hbWUgdG8gbWFrZSB0aGUgQ1NTIHNwZWNpZmlj
IGVub3VnaC4KLSAgICAgICAgaWYgKCFbZm9udE5hbWVGb3JEZXNjcmlwdGlvbihhRmFtaWx5TmFt
ZSwgYUlzSXRhbGljLCBhSXNCb2xkLCBhUG9pbnRTaXplKSBpc0VxdWFsVG9TdHJpbmc6W2EgZm9u
dE5hbWVdXSkKKyAgICAgICAgaWYgKCFbZm9udE5hbWVGb3JEZXNjcmlwdGlvbihhRmFtaWx5TmFt
ZSwgYUlzSXRhbGljLCBhSXNCb2xkKSBpc0VxdWFsVG9TdHJpbmc6W2EgZm9udE5hbWVdXSkKICAg
ICAgICAgICAgIGZhbWlseU5hbWVGb3JDU1MgPSBbYSBmb250TmFtZV07CiAKICAgICAgICAgLy8g
RklYTUU6IE5lZWQgbW9yZSBzb3BoaXN0aWNhdGVkIGVzY2FwaW5nIGNvZGUgaWYgd2Ugd2FudCB0
byBoYW5kbGUgZmFtaWx5IG5hbWVzCg==
</data>
<flag name="review"
          id="286192"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261239</attachid>
            <date>2015-09-15 14:39:50 -0700</date>
            <delta_ts>2015-09-15 15:25:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fontdescription-split-4.patch</filename>
            <type>text/plain</type>
            <size>107730</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE1LTA5LTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBGb250RGVzY3JpcHRp
b24gaW50byBsb3dlciBhbmQgaGlnaGVyIGxldmVsIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkwMzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KKworICAgICAgICBDdXJyZW50bHkgRm9udERlc2NyaXB0aW9uIGlzIHVz
ZWQgdGhyb3VnaCB0aGUgdGV4dCBzdWJzeXN0ZW0uIEhvd2V2ZXIgbXVjaCBvZiB0aGUgZGF0YSBp
dAorICAgICAgICBjYXJyaWVzIGlzIG9ubHkgbmVlZGVkIGJ5IEZvbnRDYXNjYWRlIGFuZCB0ZXh0
IGxheW91dCBidXQgbm90IGJ5IHRoZSBsb3dlciBsZXZlbCBGb250L0ZvbnRDYWNoZQorICAgICAg
ICBsYXllci4gVGhpcyBtYWtlcyBjb2RlIGNvbmZ1c2luZy4gRm9yIGV4YW1wbGUgZmFtaWxpZXMg
c3BlY2lmaWVkIGluIEZvbnREZXNjcmlwdGlvbiBhcmUgaWdub3JlZAorICAgICAgICBhdCBsb3dl
ciBsZXZlbHMuCisKKyAgICAgICAgU3BsaXQgaXQgaW50byBhIGxvdyBsZXZlbCBGb250RGVzY3Jp
cHRpb24gYW5kIGEgaGlnaCBsZXZlbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uIHR5cGU6CisKKyAg
ICAgICAgRm9udERlc2NyaXB0aW9uIDwtPiBGb250CisgICAgICAgIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24gPC0+IEZvbnRDYXNjYWRlCisKKyAgICAgICAgVGhlIGZvcm1lciBvbmx5IGNhcnJpZXMg
aW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWQgdG8gaW5zdGFudGlhdGUgYSBGb250IG9yIGZldGNo
IGl0IGZyb20gdGhlIEZvbnRDYWNoZS4KKyAgICAgICAgVGhlIGxhdHRlciBoYXMgYWRkaXRpb25h
bCBkYXRhIGZvciBDU1MgZm9udCBjYXNjYWRlIHNlbWFudGljcyBhbmQgb3RoZXIgaGlnaGVyIGxl
dmVsIGZlYXR1cmVzLgorCiAyMDE1LTA5LTE1ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIFtXaW5dIFRpbGVkIGRyYXdpbmcgaXMgcmVuZGVyaW5nIG1vcmUg
dGltZXMgdGhhbiBpdCBzaG91bGQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcyNCwyMCArMjcyNCwyMCBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5
bGVFeHRyYWN0b3I6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250U21vb3RoaW5n
OgogICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCkuZm9udFNtb290aGluZygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZvbnRWYXJpYW50TGlnYXR1cmVzOiB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRp
b246OkxpZ2F0dXJlc1N0YXRlIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0gc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCk7Ci0gICAgICAgICAgICBGb250RGVzY3Jp
cHRpb246OkxpZ2F0dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKS5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoKTsKLSAgICAg
ICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgaGlzdG9yaWNhbExpZ2F0dXJl
c1N0YXRlID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmhpc3RvcmljYWxMaWdhdHVyZXNTdGF0
ZSgpOwotICAgICAgICAgICAgaWYgKGNvbW1vbkxpZ2F0dXJlc1N0YXRlID09IEZvbnREZXNjcmlw
dGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUgJiYgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRl
ID09IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUKLSAgICAgICAgICAgICAg
ICAmJiBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxM
aWdhdHVyZXNTdGF0ZSkKKyAgICAgICAgICAgIGF1dG8gY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tbW9uTGlnYXR1cmVzU3RhdGUoKTsKKyAgICAgICAg
ICAgIGF1dG8gZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpOworICAgICAgICAgICAgYXV0byBo
aXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuaGlzdG9y
aWNhbExpZ2F0dXJlc1N0YXRlKCk7CisgICAgICAgICAgICBpZiAoY29tbW9uTGlnYXR1cmVzU3Rh
dGUgPT0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUgJiYgZGlz
Y3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID09IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1h
bExpZ2F0dXJlc1N0YXRlCisgICAgICAgICAgICAgICAgJiYgaGlzdG9yaWNhbExpZ2F0dXJlc1N0
YXRlID09IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKQogICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTm9ybWFsKTsKIAogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVM
aXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgICAgICAgICAg
aWYgKGNvbW1vbkxpZ2F0dXJlc1N0YXRlICE9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1
cmVzU3RhdGUpCi0gICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjb21tb25MaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVzY3Jp
cHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVz
IDogQ1NTVmFsdWVDb21tb25MaWdhdHVyZXMpKTsKLSAgICAgICAgICAgIGlmIChkaXNjcmV0aW9u
YXJ5TGlnYXR1cmVzU3RhdGUgIT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0
ZSkKLSAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRl
SWRlbnRpZmllclZhbHVlKGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVzY3Jp
cHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vRGlzY3JldGlvbmFyeUxp
Z2F0dXJlcyA6IENTU1ZhbHVlRGlzY3JldGlvbmFyeUxpZ2F0dXJlcykpOwotICAgICAgICAgICAg
aWYgKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSAhPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExp
Z2F0dXJlc1N0YXRlKQotICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID09IEZv
bnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSA/IENTU1ZhbHVlTm9IaXN0b3Jp
Y2FsTGlnYXR1cmVzIDogQ1NTVmFsdWVIaXN0b3JpY2FsTGlnYXR1cmVzKSk7CisgICAgICAgICAg
ICBpZiAoY29tbW9uTGlnYXR1cmVzU3RhdGUgIT0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9y
bWFsTGlnYXR1cmVzU3RhdGUpCisgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjb21tb25MaWdhdHVyZXNTdGF0ZSA9PSBG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVO
b0NvbW1vbkxpZ2F0dXJlcyA6IENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzKSk7CisgICAgICAgICAg
ICBpZiAoZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlICE9IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKQorICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZGlzY3JldGlvbmFyeUxpZ2F0
dXJlc1N0YXRlID09IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3Rh
dGUgPyBDU1NWYWx1ZU5vRGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA6IENTU1ZhbHVlRGlzY3JldGlv
bmFyeUxpZ2F0dXJlcykpOworICAgICAgICAgICAgaWYgKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0
ZSAhPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSkKKyAgICAg
ICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmll
clZhbHVlKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9PSBGb250Q2FzY2FkZURlc2NyaXB0aW9u
OjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0hpc3RvcmljYWxMaWdhdHVyZXMg
OiBDU1NWYWx1ZUhpc3RvcmljYWxMaWdhdHVyZXMpKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1
ZUxpc3Q7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVpJbmRleDoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCShyZXZpc2lvbiAxODk4MjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTkwLDcgKzU5MCw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRUaW1lckZp
cmUKICAgICAgICAgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCkuY2hlY2tMb2FkQ29tcGxl
dGUoKTsKIH0KIAotYm9vbCBDU1NGb250U2VsZWN0b3I6OnJlc29sdmVzRmFtaWx5Rm9yKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pIGNvbnN0Citib29sIENTU0ZvbnRTZWxlY3Rv
cjo6cmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24pIGNvbnN0CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9u
LmZhbWlseUNvdW50KCk7ICsraSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eU5hbWUgPSBkZXNjcmlwdGlvbi5mYW1pbHlBdChpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250U2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udFNlbGVjdG9yLmgJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBAQCBjbGFzcyBD
U1NGb250RmFjZVJ1bGU7CiBjbGFzcyBDU1NTZWdtZW50ZWRGb250RmFjZTsKIGNsYXNzIENhY2hl
ZEZvbnQ7CiBjbGFzcyBEb2N1bWVudDsKLWNsYXNzIEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIFN0
eWxlUnVsZUZvbnRGYWNlOwogCiBjbGFzcyBDU1NGb250U2VsZWN0b3IgZmluYWwgOiBwdWJsaWMg
Rm9udFNlbGVjdG9yIHsKQEAgLTYzLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXpl
X3QpIG92ZXJyaWRlOwogICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBnZXRGb250RmFjZShjb25z
dCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHJlc29sdmVzRmFtaWx5Rm9yKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgY2xlYXJE
b2N1bWVudCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMTg5
ODIzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY2NTEsNyArNjY1MSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUZvbnQoYm9v
bCBpbXAKICAgICBBU1NFUlQoc3lzdGVtRm9udElEID49IENTU1ZhbHVlQ2FwdGlvbiAmJiBzeXN0
ZW1Gb250SUQgPD0gQ1NTVmFsdWVTdGF0dXNCYXIpOwogICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
CiAKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhl
bWUoKS0+c3lzdGVtRm9udChzeXN0ZW1Gb250SUQsIGZvbnREZXNjcmlwdGlvbik7CiAgICAgaWYg
KCFmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCShy
ZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVN
YXBwaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDM4LDE4ICszNDM4LDE4IEBAIHRlbXBsYXRl
PD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGUKICAgICByZXR1cm4gUEVfQUxMOwogfQog
Ci10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUo
Rm9udERlc2NyaXB0aW9uOjpLZXJuaW5nIGtlcm5pbmcpCit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
S2VybmluZyBrZXJuaW5nKQogICAgIDogQ1NTVmFsdWUoUHJpbWl0aXZlQ2xhc3MpCiB7CiAgICAg
bV9wcmltaXRpdmVVbml0VHlwZSA9IENTU19WQUxVRV9JRDsKICAgICBzd2l0Y2ggKGtlcm5pbmcp
IHsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc6CisgICAgY2FzZSBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpBdXRvS2VybmluZzoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlE
ID0gQ1NTVmFsdWVBdXRvOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBGb250RGVzY3JpcHRp
b246Ok5vcm1hbEtlcm5pbmc6CisgICAgY2FzZSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3Jt
YWxLZXJuaW5nOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5vcm1hbDsKICAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb25lS2VybmluZzoKKyAg
ICBjYXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vbmVLZXJuaW5nOgogICAgICAgICBtX3Zh
bHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5vbmU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
NDU4LDIzICszNDU4LDIzIEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1MKICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUF1dG87CiB9CiAKLXRlbXBsYXRlPD4g
aW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250RGVzY3JpcHRpb246Oktlcm5p
bmcoKSBjb25zdAordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9y
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Oktlcm5pbmcoKSBjb25zdAogewogICAgIEFTU0VSVChp
c1ZhbHVlSUQoKSk7CiAKICAgICBzd2l0Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2Ug
Q1NTVmFsdWVBdXRvOgotICAgICAgICByZXR1cm4gRm9udERlc2NyaXB0aW9uOjpBdXRvS2Vybmlu
ZzsKKyAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOwog
ICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgIHJldHVybiBGb250RGVzY3JpcHRpb246
Ok5vcm1hbEtlcm5pbmc7CisgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpO
b3JtYWxLZXJuaW5nOwogICAgIGNhc2UgQ1NTVmFsdWVOb25lOgotICAgICAgICByZXR1cm4gRm9u
dERlc2NyaXB0aW9uOjpOb25lS2VybmluZzsKKyAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246Ok5vbmVLZXJuaW5nOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGb250RGVzY3JpcHRp
b246OkF1dG9LZXJuaW5nOworICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpBdXRv
S2VybmluZzsKIH0KIAogdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1By
aW1pdGl2ZVZhbHVlKE9iamVjdEZpdCBmaXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVCdWlsZGVyQ3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
QnVpbGRlckN1c3RvbS5oCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5Myw3ICs2OTMsNyBAQCBp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiB7CiAgICAgYXV0byYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIAot
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICBpZiAocHJpbWl0aXZlVmFs
dWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldExvY2FsZShudWxsQXRvbSk7CiAgICAgZWxzZQpAQCAtODIzLDggKzgyMyw4IEBAIGlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWwKIAogaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250RmFtaWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIpCiB7Ci0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgRm9udERlc2NyaXB0aW9u
IGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRp
b24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8g
aW5pdGlhbERlc2MgPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uKCk7CiAKICAgICAvLyBXZSBuZWVk
IHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hh
bmdlIGZyb20gbW9ub3NwYWNlIHRvIG5vbi1tb25vc3BhY2UuCiAgICAgaWYgKGZvbnREZXNjcmlw
dGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpIHsKQEAgLTgzOSw4ICs4MzksOCBAQCBpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pCiAKIGlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyKQogewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgIEZvbnREZXNjcmlwdGlvbiBw
YXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIHBhcmVudEZvbnREZXNjcmlwdGlv
biA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAKICAg
ICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWxpZXMocGFyZW50Rm9udERlc2NyaXB0aW9uLmZhbWls
aWVzKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9u
dERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKQEAgLTg1MSw3ICs4NTEsNyBAQCBpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiB7CiAgICAgYXV0byYgdmFsdWVM
aXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CiAKLSAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4gYSBuZXcgZm9udC1m
YW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBmYW1pbHkuCiAgICAg
Ym9vbCBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSA9IGZvbnREZXNjcmlwdGlvbi51c2VG
aXhlZERlZmF1bHRTaXplKCk7CiAKQEAgLTEyNDIsMTQgKzEyNDIsMTQgQEAgaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbAogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbEZvbnRXZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKIHsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZl
ci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChG
b250V2VpZ2h0Tm9ybWFsKTsKICAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwogfQogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5oZXJpdEZvbnRXZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVz
Y3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9u
dERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChzdHlsZVJlc29s
dmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLndlaWdodCgpKTsKICAgICBzdHlsZVJlc29sdmVy
LnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogfQpAQCAtMTI1Nyw3ICsxMjU3
LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaAogaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFdlaWdodChTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwotICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigp
OworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRp
b24oKTsKICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgIGNh
c2UgQ1NTVmFsdWVJbnZhbGlkOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEz
OTAsMTkgKzEzOTAsMTkgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bAogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFdlYmtpdEZv
bnRWYXJpYW50TGlnYXR1cmVzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2Ny
aXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnRE
ZXNjcmlwdGlvbigpOwogCi0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0
YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0aW9uOjpO
b3JtYWxMaWdhdHVyZXNTdGF0ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxM
aWdhdHVyZXNTdGF0ZShGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUoRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRE
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFs
TGlnYXR1cmVzU3RhdGUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3JpY2FsTGlnYXR1
cmVzU3RhdGUoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwog
CiAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
IH0KIAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRXZWJraXRG
b250VmFyaWFudExpZ2F0dXJlcyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQogewotICAg
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNv
bHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBjb25zdCBh
dXRvJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNj
cmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250
RGVzY3JpcHRpb24oKTsKIAogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNT
dGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSk7CiAgICAg
Zm9udERlc2NyaXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250
RGVzY3JpcHRpb24uZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKCkpOwpAQCAtMTQxMywzMCAr
MTQxMywzMCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oCiAKIGlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdEZvbnRWYXJpYW50
TGlnYXR1cmVzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkK
IHsKLSAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGNvbW1vbkxpZ2F0dXJlc1N0
YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKLSAgICBGb250RGVz
Y3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IEZv
bnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7Ci0gICAgRm9udERlc2NyaXB0aW9u
OjpMaWdhdHVyZXNTdGF0ZSBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRp
b246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOworICAgIGF1dG8gY29tbW9uTGlnYXR1cmVzU3RhdGUg
PSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKKyAgICBhdXRv
IGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5v
cm1hbExpZ2F0dXJlc1N0YXRlOworICAgIGF1dG8gaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID0g
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CiAKICAgICBpZiAo
aXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogZG93
bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpLmdldFZhbHVlSUQoKSkgewogICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICAgICAgICAgIGNv
bW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0
YXRlOworICAgICAgICAgICAgICAgIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDb21tb25MaWdhdHVyZXM6Ci0gICAgICAgICAg
ICAgICAgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdh
dHVyZXNTdGF0ZTsKKyAgICAgICAgICAgICAgICBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0Rpc2NyZXRpb25hcnlMaWdhdHVy
ZXM6Ci0gICAgICAgICAgICAgICAgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERl
c2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOworICAgICAgICAgICAgICAgIGRpc2Ny
ZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkRpc2FibGVk
TGlnYXR1cmVzU3RhdGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlRGlzY3JldGlvbmFyeUxpZ2F0dXJlczoKLSAgICAgICAgICAgICAgICBkaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNT
dGF0ZTsKKyAgICAgICAgICAgICAgICBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9IaXN0b3JpY2FsTGlnYXR1cmVz
OgotICAgICAgICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlw
dGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgICAgICAgICBoaXN0b3JpY2Fs
TGlnYXR1cmVzU3RhdGUgPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJl
c1N0YXRlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZUhpc3RvcmljYWxMaWdhdHVyZXM6Ci0gICAgICAgICAgICAgICAgaGlzdG9yaWNhbExpZ2F0dXJl
c1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU7CisgICAgICAg
ICAgICAgICAgaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID0gRm9udENhc2NhZGVEZXNjcmlwdGlv
bjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTE0NDYsNyArMTQ0Niw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWwKICAgICB9IGVsc2UKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKTsKIAotICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigp
OworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRp
b24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUoY29tbW9u
TGlnYXR1cmVzU3RhdGUpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGln
YXR1cmVzU3RhdGUoZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKTsKICAgICBmb250RGVzY3Jp
cHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0
ZSk7CkBAIC0xNDU1LDcgKzE0NTUsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsCiAKIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFs
Rm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZv
cktleXdvcmQoQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRT
aXplKCksIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CiAKICAgICBpZiAoc2l6ZSA8IDApCkBA
IC0xNDY4LDEzICsxNDY4LDEzIEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmkKIAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250
U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQogewotICAgIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBjb25zdCBhdXRvJiBwYXJlbnRGb250RGVzY3Jp
cHRpb24gPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwog
ICAgIGZsb2F0IHNpemUgPSBwYXJlbnRGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpOwog
CiAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICByZXR1cm47CiAKLSAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKHBh
cmVudEZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpKTsKICAgICBzdHlsZVJlc29sdmVyLnNl
dEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CiAgICAgc3R5bGVSZXNvbHZlci5zZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKQEAgLTE1MTYsNyArMTUxNiw3IEBAIGlu
bGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDdXN0b206OmRldGVybWkKIAogaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAg
IGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmll
cihDU1NWYWx1ZUludmFsaWQpOwogCiAgICAgZmxvYXQgcGFyZW50U2l6ZSA9IDA7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTks
MTEgKzEzOTksMTEgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShSZQog
ICAgIE5vbkNKS0dseXBoT3JpZW50YXRpb24gZ2x5cGhPcmllbnRhdGlvbjsKICAgICBzdHlsZS0+
Z2V0Rm9udEFuZEdseXBoT3JpZW50YXRpb24oZm9udE9yaWVudGF0aW9uLCBnbHlwaE9yaWVudGF0
aW9uKTsKIAotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGNvbnN0IGF1dG8mIGZvbnREZXNjcmlwdGlvbiA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICBpZiAoZm9udERlc2NyaXB0aW9uLm9yaWVu
dGF0aW9uKCkgPT0gZm9udE9yaWVudGF0aW9uICYmIGZvbnREZXNjcmlwdGlvbi5ub25DSktHbHlw
aE9yaWVudGF0aW9uKCkgPT0gZ2x5cGhPcmllbnRhdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwor
ICAgIGF1dG8gbmV3Rm9udERlc2NyaXB0aW9uID0gZm9udERlc2NyaXB0aW9uOwogICAgIG5ld0Zv
bnREZXNjcmlwdGlvbi5zZXROb25DSktHbHlwaE9yaWVudGF0aW9uKGdseXBoT3JpZW50YXRpb24p
OwogICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRPcmllbnRhdGlvbihmb250T3JpZW50YXRpb24p
OwogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKQEAg
LTE5NTgsNyArMTk1OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFk
anUKICAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRqdXN0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpKTsKKyAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKTsKICAgICBpZiAoIXN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpLmlzTm9u
ZSgpKQogICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnRE
ZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkgKiBzdHlsZS0+dGV4dFNpemVBZGp1c3QoKS5tdWx0
aXBsaWVyKCkpOwogICAgIGVsc2UKQEAgLTE5NzUsMjAgKzE5NzUsMjAgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUgogICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpID09IHBhcmVudFN0eWxlLT5lZmZlY3RpdmVab29tKCkgJiYgc3R5bGUtPnRleHRab29tKCkg
PT0gcGFyZW50U3R5bGUtPnRleHRab29tKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwot
ICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oY2hpbGRGb250KTsKKyAgICBj
b25zdCBhdXRvJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0
byBuZXdGb250RGVzY3JpcHRpb24gPSBjaGlsZEZvbnQ7CiAgICAgc2V0Rm9udFNpemUobmV3Rm9u
dERlc2NyaXB0aW9uLCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKICAgICBzdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKIHZvaWQgU3R5bGVSZXNv
bHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hp
bGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGNvbnN0IGF1dG8mIGNoaWxk
Rm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKIAogICAgIGlmIChjaGlsZEZvbnQuaXNB
YnNvbHV0ZVNpemUoKSB8fCAhcGFyZW50U3R5bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udCA9IHBhcmVudFN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKTsKKyAgICBjb25zdCBhdXRvJiBwYXJlbnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpOwogICAgIGlmIChjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09
IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpKQogICAgICAgICByZXR1cm47CiAgICAg
Ly8gV2Uga25vdyB0aGUgcGFyZW50IGlzIG1vbm9zcGFjZSBvciB0aGUgY2hpbGQgaXMgbW9ub3Nw
YWNlLCBhbmQgdGhhdCBmb250CkBAIC0yMDA4LDE0ICsyMDA4LDE0IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWwKICAgICAgICAgICAgICAgICBjaGlsZEZvbnQuc3Bl
Y2lmaWVkU2l6ZSgpICogZml4ZWRTY2FsZUZhY3RvcjsKICAgICB9CiAKLSAgICBGb250RGVzY3Jp
cHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7CisgICAgYXV0byBuZXdGb250RGVz
Y3JpcHRpb24gPSBjaGlsZEZvbnQ7CiAgICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9u
LCBzaXplKTsKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlv
bik7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5n
cyogc2V0dGluZ3MpCiB7Ci0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAg
ICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBpZiAoc2V0dGlu
Z3MpCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5m
b250UmVuZGVyaW5nTW9kZSgpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KHN0
YW5kYXJkRmFtaWx5KTsKQEAgLTIwMjQsNyArMjAyNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
aW5pdGlhbGl6ZUZvbnRTdHlsZSgKICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0
Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBz
aXplKQogewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwg
dXNlU1ZHWm9vbVJ1bGVzKCksIG1fc3RhdGUuc3R5bGUoKSwgZG9jdW1lbnQoKSkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNyArMjAz
LDcgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlRm9udCgpOwogICAgIHZvaWQgaW5pdGlhbGl6
ZUZvbnRTdHlsZShTZXR0aW5ncyopOwogCi0gICAgdm9pZCBzZXRGb250U2l6ZShGb250RGVzY3Jp
cHRpb24mLCBmbG9hdCBzaXplKTsKKyAgICB2b2lkIHNldEZvbnRTaXplKEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mLCBmbG9hdCBzaXplKTsKIAogcHVibGljOgogICAgIGJvb2wgdXNlU1ZHWm9vbVJ1
bGVzKCk7CkBAIC0zOTIsOSArMzkyLDkgQEAgcHVibGljOgogICAgICAgICBGaWxsTGF5ZXIgYmFj
a2dyb3VuZERhdGEoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhOyB9CiAgICAgICAg
IENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9y
OyB9CiAKLSAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7
IHJldHVybiBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsgfQotICAgICAgICBjb25zdCBGb250
RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fcGFyZW50U3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9u
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9
IG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CisgICAgICAg
IGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJu
IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fcGFyZW50U3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9u
KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnRE
aXJ0eSB8PSBtX3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQog
ICAgICAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5z
ZXRab29tKGYpOyB9CiAgICAgICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1f
Zm9udERpcnR5IHw9IG1fc3R5bGUtPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KICAgICAgICAgdm9p
ZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX2ZvbnREaXJ0eSB8
PSBtX3N0eWxlLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0KQEAgLTQ1NSw5ICs0NTUs
OSBAQCBwdWJsaWM6CiAKICAgICBDU1NUb1N0eWxlTWFwKiBzdHlsZU1hcCgpIHsgcmV0dXJuICZt
X3N0eWxlTWFwOyB9CiAgICAgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVjdG9yQ1NTT01X
cmFwcGVycygpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsgfQotICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5mb250
RGVzY3JpcHRpb24oKTsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERl
c2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsgfQot
ICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKSB7IG1fc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7
IHJldHVybiBtX3N0YXRlLmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5w
YXJlbnRGb250RGVzY3JpcHRpb24oKTsgfQorICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX3N0YXRlLnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CiAgICAgdm9pZCBzZXRab29tKGZs
b2F0IGYpIHsgbV9zdGF0ZS5zZXRab29tKGYpOyB9CiAgICAgdm9pZCBzZXRFZmZlY3RpdmVab29t
KGZsb2F0IGYpIHsgbV9zdGF0ZS5zZXRFZmZlY3RpdmVab29tKGYpOyB9CiAgICAgdm9pZCBzZXRX
cml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRlLnNldFdyaXRpbmdN
b2RlKHdyaXRpbmdNb2RlKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAkocmV2aXNpb24g
MTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCSh3b3JraW5nIGNvcHkp
CkBAIC03MDksOCArNzA5LDggQEAgc3ViIGdlbmVyYXRlSW5pdGlhbFZhbHVlU2V0dGVyIHsKICAg
fSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9
eyJBbmltYXRpb25Qcm9wZXJ0eSJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVB
bmltYXRpb25Qcm9wZXJ0eUluaXRpYWxWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAg
Iik7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25z
eyRuYW1lfXsiRm9udFByb3BlcnR5In0pIHsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gIiAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5m
b250RGVzY3JpcHRpb24oKTtcbiI7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIg
ICAgZm9udERlc2NyaXB0aW9uLiIgLiAkc2V0dGVyIC4gIihGb250RGVzY3JpcHRpb246OiIgLiAk
aW5pdGlhbCAuICIoKSk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
IGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTtc
biI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgZm9udERlc2NyaXB0aW9u
LiIgLiAkc2V0dGVyIC4gIihGb250Q2FzY2FkZURlc2NyaXB0aW9uOjoiIC4gJGluaXRpYWwgLiAi
KCkpO1xuIjsKICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29s
dmVyLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pO1xuIjsKICAgfSBlbHNpZiAo
ZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJGaWxsTGF5
ZXJQcm9wZXJ0eSJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVGaWxsTGF5ZXJQ
cm9wZXJ0eUluaXRpYWxWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAgIik7CkBAIC03
NTMsNyArNzUzLDcgQEAgc3ViIGdlbmVyYXRlSW5oZXJpdFZhbHVlU2V0dGVyIHsKICAgICAkc2V0
dGVyQ29udGVudCAuPSBnZW5lcmF0ZUFuaW1hdGlvblByb3BlcnR5SW5oZXJpdFZhbHVlU2V0dGVy
KCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsKICAgICAkZGlkQ2FsbFNldFZhbHVlID0gMTsKICAg
fSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9
eyJGb250UHJvcGVydHkifSkgewotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNj
cmlwdGlvbigpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBhdXRv
IGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7XG4iOwog
ICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZvbnREZXNjcmlwdGlvbi4iIC4g
JHNldHRlciAuICIoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS4iIC4gJGdl
dHRlciAuICIoKSk7XG4iOwogICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0
eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7XG4iOwogICAg
ICRkaWRDYWxsU2V0VmFsdWUgPSAxOwpAQCAtODA3LDcgKzgwNyw3IEBAIHN1YiBnZW5lcmF0ZVZh
bHVlU2V0dGVyIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5lcmF0ZUFuaW1hdGlvblByb3Bl
cnR5VmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQgLiAiICAgICIpOwogICAgICRkaWRDYWxsU2V0
VmFsdWUgPSAxOwogICB9IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVy
T3B0aW9uc3skbmFtZX17IkZvbnRQcm9wZXJ0eSJ9KSB7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0g
JGluZGVudCAuICIgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3Jp
cHRpb24oKTtcbiI7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgZm9udERl
c2NyaXB0aW9uLiIgLiAkc2V0dGVyIC4gIigiIC4gJGNvbnZlcnRlZFZhbHVlIC4gIik7XG4iOwog
ICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7XG4iOwogICAgICRkaWRDYWxsU2V0VmFsdWUg
PSAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDAsNyArMzAwLDcgQEAgaW5saW5lIEZvbnRNZXRyaWNzIENhbnZhc1JlbmRlcmlu
Z0NvbnRleAogICAgIHJldHVybiBtX2ZvbnQuZm9udE1ldHJpY3MoKTsKIH0KIAotaW5saW5lIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6
OmZvbnREZXNjcmlwdGlvbigpIGNvbnN0CitpbmxpbmUgY29uc3QgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6OmZvbnREZXNjcmlwdGlv
bigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZm9udC5mb250RGVzY3JpcHRpb24oKTsKIH0KQEAg
LTIwOTMsNyArMjA5Myw3IEBAIFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZvbnQo
KSAKICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb250OwogCiAgICAgU3RyaW5nQnVpbGRlciBzZXJp
YWxpemVkRm9udDsKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiA9
IHN0YXRlKCkuZm9udC5mb250RGVzY3JpcHRpb24oKTsKKyAgICBjb25zdCBhdXRvJiBmb250RGVz
Y3JpcHRpb24gPSBzdGF0ZSgpLmZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiAKICAgICBpZiAoZm9u
dERlc2NyaXB0aW9uLml0YWxpYygpKQogICAgICAgICBzZXJpYWxpemVkRm9udC5hcHBlbmRMaXRl
cmFsKCJpdGFsaWMgIik7CkBAIC0yMTUyLDcgKzIxNTIsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxl
ID0gY2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgbmV3U3R5bGUtPnNldEZvbnRE
ZXNjcmlwdGlvbihjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBkZWZhdWx0Rm9udERlc2NyaXB0aW9uOworICAgICAg
ICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGRlZmF1bHRGb250RGVzY3JpcHRpb247CiAgICAgICAg
IGRlZmF1bHRGb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KGRlZmF1bHRGb250RmFtaWx5KTsK
ICAgICAgICAgZGVmYXVsdEZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKGRlZmF1bHRG
b250U2l6ZSk7CiAgICAgICAgIGRlZmF1bHRGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KGRlZmF1bHRGb250U2l6ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMTg5ODIzKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdv
cmtpbmcgY29weSkKQEAgLTI0NSw3ICsyNDUsNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIHJl
YWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmZvbnRTZWxlY3RvcigpOyB9CiAgICAgICAg
IHZvaWQgaW5pdGlhbGl6ZShGb250U2VsZWN0b3ImLCBSZW5kZXJTdHlsZSYpOwogICAgICAgICBG
b250TWV0cmljcyBmb250TWV0cmljcygpIGNvbnN0OwotICAgICAgICBjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0OworICAgICAgICBjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdDsKICAgICAgICAgZmxvYXQgd2lk
dGgoY29uc3QgVGV4dFJ1biYpIGNvbnN0OwogICAgICAgICB2b2lkIGRyYXdCaWRpVGV4dChHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNj
YWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9UaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RoZW1lLmgJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgIC8v
IE1ldGhvZHMgdXNlZCB0byBhZGp1c3QgdGhlIFJlbmRlclN0eWxlcyBvZiBjb250cm9scy4KICAg
ICAKICAgICAvLyBUaGUgZm9udCBkZXNjcmlwdGlvbiByZXN1bHQgc2hvdWxkIGhhdmUgYSB6b29t
ZWQgZm9udCBzaXplLgotICAgIHZpcnR1YWwgT3B0aW9uYWw8Rm9udERlc2NyaXB0aW9uPiBjb250
cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCAvKnpvb21GYWN0
b3IqLykgY29uc3QgeyByZXR1cm4gTnVsbG9wdDsgfQorICAgIHZpcnR1YWwgT3B0aW9uYWw8Rm9u
dENhc2NhZGVEZXNjcmlwdGlvbj4gY29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIE51bGxvcHQ7IH0K
ICAgICAKICAgICAvLyBUaGUgc2l6ZSBoZXJlIGlzIGluIHpvb21lZCBjb29yZGluYXRlcyBhbHJl
YWR5LiBJZiBhIG5ldyBzaXplIGlzIHJldHVybmVkLCBpdCBhbHNvIG5lZWRzIHRvIGJlIGluIHpv
b21lZCBjb29yZGluYXRlcy4KICAgICB2aXJ0dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6
ZSwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIHpvb21lZFNpemU7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAko
cmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgRm9udENh
Y2hlOjppbnZhbGlkYXRlKCkKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLVJlZlB0cjxGb250
PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCitSZWZQdHI8
Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBBdG9taWNTdHJpbmcmKQogewogICAgIHJldHVybiBudWxscHRyOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlzaW9uIDE4OTgy
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0
IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBmb250Rm9yUGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBSZWZQdHI8Rm9udD4gc2lt
aWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgUmVmUHRyPEZvbnQ+IHNpbWls
YXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
KTsKIAogICAgIHZvaWQgYWRkQ2xpZW50KEZvbnRTZWxlY3RvciopOwogICAgIHZvaWQgcmVtb3Zl
Q2xpZW50KEZvbnRTZWxlY3RvciopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw3ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENh
Y2hlZEZvbnRzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYp
Oworc3RhdGljIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMo
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwog
CiBjb25zdCB1aW50OF90IEZvbnRDYXNjYWRlOjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxl
WzI1Nl0gPSB7CiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKlx0Ki8sIDEgLypc
biovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLApAQCAtMTA3LDcgKzEwNyw3IEBAIEZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZSgp
CiB7CiB9CiAKLUZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZkLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZykKK0ZvbnRDYXNjYWRl
OjpGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0
dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpCiAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihm
ZCkKICAgICAsIG1fd2Vha1B0ckZhY3RvcnkodGhpcykKICAgICAsIG1fbGV0dGVyU3BhY2luZyhs
ZXR0ZXJTcGFjaW5nKQpAQCAtMjMwLDcgKzIzMCw3IEBAIHZvaWQgY2xlYXJXaWR0aENhY2hlcygp
CiAgICAgICAgIHZhbHVlLT5mb250cy5nZXQoKS53aWR0aENhY2hlKCkuY2xlYXIoKTsKIH0KIAot
c3RhdGljIEZvbnRDYXNjYWRlQ2FjaGVLZXkgbWFrZUZvbnRDYXNjYWRlQ2FjaGVLZXkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3Ip
CitzdGF0aWMgRm9udENhc2NhZGVDYWNoZUtleSBtYWtlRm9udENhc2NhZGVDYWNoZUtleShjb25z
dCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFNlbGVjdG9yKiBmb250
U2VsZWN0b3IpCiB7CiAgICAgRm9udENhc2NhZGVDYWNoZUtleSBrZXk7CiAgICAga2V5LmZvbnRE
ZXNjcmlwdGlvbktleSA9IEZvbnREZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbik7CkBAIC0yNjks
NyArMjY5LDcgQEAgdm9pZCBwcnVuZVN5c3RlbUZhbGxiYWNrRm9udHMoKQogICAgICAgICBlbnRy
eS0+Zm9udHMtPnBydW5lU3lzdGVtRmFsbGJhY2tzKCk7CiB9CiAKLXN0YXRpYyBSZWY8Rm9udENh
c2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZvbnRTZWxlY3RvcikK
K3N0YXRpYyBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgUmVmUHRyPEZvbnRT
ZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB7CiAgICAgYXV0byBrZXkgPSBtYWtlRm9udENhc2Nh
ZGVDYWNoZUtleShmb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkocmV2
aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKIGNsYXNz
IEZvbnRDYXNjYWRlIHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZSgp
OwotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgZmxvYXQgbGV0
dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpOwogICAgIC8vIFRoaXMgY29uc3RydWN0b3Ig
aXMgb25seSB1c2VkIGlmIHRoZSBwbGF0Zm9ybSB3YW50cyB0byBzdGFydCB3aXRoIGEgbmF0aXZl
IGZvbnQuCiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7CiAKQEAgLTEyNSw3ICsx
MjUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZvbnRDYXNjYWRlJiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZv
bnRDYXNjYWRlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KIAot
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9mb250RGVzY3JpcHRpb247IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbjsgfQog
CiAgICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNv
bXB1dGVkUGl4ZWxTaXplKCk7IH0KICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gZm9u
dERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7IH0KQEAgLTMxOCwyNCArMzE4LDI0IEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKG1fZm9udERlc2NyaXB0aW9uLmtl
cm5pbmcoKSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9uZUtlcm5pbmc6Cisg
ICAgICAgIGNhc2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9uZUtlcm5pbmc6CiAgICAgICAg
ICAgICBmZWF0dXJlcyAmPSB+S2VybmluZzsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsS2VybmluZzoKKyAgICAgICAgY2FzZSBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpOb3JtYWxLZXJuaW5nOgogICAgICAgICAgICAgZmVhdHVyZXMgfD0g
S2VybmluZzsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlv
bjo6QXV0b0tlcm5pbmc6CisgICAgICAgIGNhc2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6QXV0
b0tlcm5pbmc6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIHN3aXRj
aCAobV9mb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSkgewotICAgICAgICBj
YXNlIEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgY2Fz
ZSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOgogICAgICAg
ICAgICAgZmVhdHVyZXMgJj0gfkxpZ2F0dXJlczsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOgorICAgICAgICBj
YXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZToKICAgICAg
ICAgICAgIGZlYXR1cmVzIHw9IExpZ2F0dXJlczsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU6CisgICAgICAgIGNh
c2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0zNDQsNyArMzQ0LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHN0YXRpYyBUeXBlc2V0dGluZ0ZlYXR1cmVzIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVy
ZXM7CiAKLSAgICBGb250RGVzY3JpcHRpb24gbV9mb250RGVzY3JpcHRpb247CisgICAgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKICAgICBtdXRhYmxlIFJlZlB0cjxG
b250Q2FzY2FkZUZvbnRzPiBtX2ZvbnRzOwogICAgIFdlYWtQdHJGYWN0b3J5PEZvbnRDYXNjYWRl
PiBtX3dlYWtQdHJGYWN0b3J5OwogICAgIGZsb2F0IG1fbGV0dGVyU3BhY2luZzsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3
IEBAIEZvbnRDYXNjYWRlRm9udHM6On5Gb250Q2FzY2FkZUZvbnRzKCkKIHsKIH0KIAotdm9pZCBG
b250Q2FzY2FkZUZvbnRzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uKQordm9pZCBGb250Q2FzY2FkZUZvbnRzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBhdXRvJiBwcmltYXJ5
UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwogICAgIHVu
c2lnbmVkIG51bVJhbmdlcyA9IHByaW1hcnlSYW5nZXMuc2l6ZSgpOwpAQCAtMTM2LDcgKzEzNiw3
IEBAIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNMb2FkaW5nQ3VzdG9tRm8KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXN0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQmIGluZGV4LCBGb250U2VsZWN0
b3IqIGZvbnRTZWxlY3RvcikKK3N0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2so
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkJiBpbmRl
eCwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZGVz
Y3JpcHRpb24uZmFtaWx5Q291bnQoKSk7CiAKQEAgLTE1NiwxMCArMTU2LDE0IEBAIHN0YXRpYyBG
b250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY28KICAgICAvLyBXZSBkaWRuJ3QgZmluZCBh
IGZvbnQuIFRyeSB0byBmaW5kIGEgc2ltaWxhciBmb250IHVzaW5nIG91ciBvd24gc3BlY2lmaWMg
a25vd2xlZGdlIGFib3V0IG91ciBwbGF0Zm9ybS4KICAgICAvLyBGb3IgZXhhbXBsZSBvbiBPUyBY
LCB3ZSBrbm93IHRvIG1hcCBhbnkgZmFtaWxpZXMgY29udGFpbmluZyB0aGUgd29yZHMgQXJhYmlj
LCBQYXNodG8sIG9yIFVyZHUgdG8gdGhlCiAgICAgLy8gR2VlemEgUHJvIGZvbnQuCi0gICAgcmV0
dXJuIEZvbnRSYW5nZXMoZm9udENhY2hlLnNpbWlsYXJGb250KGRlc2NyaXB0aW9uKSk7CisgICAg
Zm9yIChhdXRvJiBmYW1pbHkgOiBkZXNjcmlwdGlvbi5mYW1pbGllcygpKSB7CisgICAgICAgIGlm
IChhdXRvIGZvbnQgPSBmb250Q2FjaGUuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24sIGZhbWlseSkp
CisgICAgICAgICAgICByZXR1cm4gRm9udFJhbmdlcyhXVEY6Om1vdmUoZm9udCkpOworICAgIH0K
KyAgICByZXR1cm4geyB9OwogfQogCi1jb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRz
OjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCB1bnNpZ25lZCBpbmRleCkKK2NvbnN0IEZvbnRSYW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6
OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPCBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNr
UmFuZ2VzW2luZGV4XTsKQEAgLTMxMiw3ICszMTYsNyBAQCBzdGF0aWMgR2x5cGhEYXRhIGdseXBo
RGF0YUZvck5vbkNKS0NoYXJhCiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLUdseXBoRGF0YSBGb250
Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGMsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCitHbHlw
aERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIz
MiBjLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlh
bnQgdmFyaWFudCkKIHsKICAgICAvLyBTeXN0ZW0gZmFsbGJhY2sgaXMgY2hhcmFjdGVyLWRlcGVu
ZGVudC4KICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQo
ZGVzY3JpcHRpb24sIDApOwpAQCAtMzQ5LDcgKzM1Myw3IEBAIEdseXBoRGF0YSBGb250Q2FzY2Fk
ZUZvbnRzOjpnbHlwaERhdGFGb3IKICAgICByZXR1cm4gZmFsbGJhY2tHbHlwaERhdGE7CiB9CiAK
LUdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIg
YywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFu
dCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCkKK0dseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpn
bHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5k
ZXgpCiB7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IHJl
YWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBmYWxsYmFja0luZGV4KyspOwpAQCAt
MzcwLDcgKzM3NCw3IEBAIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3IK
ICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soYywgZGVzY3JpcHRpb24sIHZh
cmlhbnQpOwogfQogCi1HbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yTm9y
bWFsVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24p
CitHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChV
Q2hhcjMyIGMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewog
ICAgIGZvciAodW5zaWduZWQgZmFsbGJhY2tJbmRleCA9IDA7IDsgKytmYWxsYmFja0luZGV4KSB7
CiAgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNj
cmlwdGlvbiwgZmFsbGJhY2tJbmRleCk7CkBAIC00MjEsNyArNDI1LDcgQEAgc3RhdGljIFJlZlB0
cjxHbHlwaFBhZ2U+IGdseXBoUGFnZUZyb21GbwogICAgIHJldHVybiBjb25zdF9jYXN0PEdseXBo
UGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSk7CiB9CiAKLUdseXBoRGF0YSBGb250
Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQorR2x5cGhEYXRh
IEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHZhcmlhbnQgIT0g
QXV0b1ZhcmlhbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udERl
c2NyaXB0aW9uOworY2xhc3MgRm9udENhc2NhZGVEZXNjcmlwdGlvbjsKIGNsYXNzIEZvbnRQbGF0
Zm9ybURhdGE7CiBjbGFzcyBGb250U2VsZWN0b3I7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CkBA
IC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNGb3JQbGF0Zm9ybUZvbnQ7IH0KIAotICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9u
dFZhcmlhbnQpOworICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwg
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKIAotICAgIGJvb2wg
aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIHZvaWQgZGV0ZXJtaW5l
UGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOworICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOwogCiAgICAgYm9vbCBpc0xvYWRpbmdDdXN0b21G
b250cygpIGNvbnN0OwogCkBAIC02Nyw4ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBXaWR0aENhY2hl
JiB3aWR0aENhY2hlKCkgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CiAgICAgY29uc3QgV2lkdGhD
YWNoZSYgd2lkdGhDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogCi0gICAg
Y29uc3QgRm9udCYgcHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdlcyYgcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CisgICAgY29uc3Qg
Rm9udCYgcHJpbWFyeUZvbnQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOworICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKIAog
ICAgIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsKIApAQCAtNzYsOSArNzYsOSBAQCBwcml2
YXRlOgogICAgIEZvbnRDYXNjYWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CiAgICAg
Rm9udENhc2NhZGVGb250cyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKLSAgICBHbHlwaERh
dGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgRm9udFZhcmlhbnQpOwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb3JtYWxWYXJp
YW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIEdseXBoRGF0YSBnbHlw
aERhdGFGb3JWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJp
YW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9y
U3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIEZv
bnRWYXJpYW50KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hh
cjMyLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJik7CisgICAgR2x5cGhEYXRhIGdseXBo
RGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIEZv
bnRWYXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKIAogICAgIFZlY3RvcjxGb250UmFu
Z2VzLCAxPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CiAgICAgdW5zaWduZWQgbV9sYXN0UmVh
bGl6ZWRGYWxsYmFja0luZGV4IHsgMCB9OwpAQCAtMTE1LDE0ICsxMTUsMTQgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxzZSB9OwogfTsKIAotaW5saW5lIGJv
b2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24pCitpbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2go
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgaWYgKG1f
cGl0Y2ggPT0gVW5rbm93blBpdGNoKQogICAgICAgICBkZXRlcm1pbmVQaXRjaChkZXNjcmlwdGlv
bik7CiAgICAgcmV0dXJuIG1fcGl0Y2ggPT0gRml4ZWRQaXRjaDsKIH07CiAKLWlubGluZSBjb25z
dCBGb250JiBGb250Q2FzY2FkZUZvbnRzOjpwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OnBy
aW1hcnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnREZXNjcmlwdGlvbi5jcHAJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgU2FtZVNpemVBc0Zv
bnREZXNjcmlwdGlvbiB7CitzdHJ1Y3QgU2FtZVNpemVBc0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24g
ewogICAgIHZvaWQqIHBvaW50ZXJzWzNdOwogICAgIGZsb2F0IHNpemVzWzJdOwogICAgIC8vIEZJ
WE1FOiBNYWtlIHRoZW0gZml0IGludG8gb25lIHdvcmQuCkBAIC00Miw3ICs0Miw3IEBAIHN0cnVj
dCBTYW1lU2l6ZUFzRm9udERlc2NyaXB0aW9uIHsKICAgICB1aW50MzJfdCBiaXRmaWVsZHMyIDog
ODsKIH07CiAKLUNPTVBJTEVfQVNTRVJUKHNpemVvZihGb250RGVzY3JpcHRpb24pID09IHNpemVv
ZihTYW1lU2l6ZUFzRm9udERlc2NyaXB0aW9uKSwgRm9udERlc2NyaXB0aW9uX3Nob3VsZF9zdGF5
X3NtYWxsKTsKK0NPTVBJTEVfQVNTRVJUKHNpemVvZihGb250Q2FzY2FkZURlc2NyaXB0aW9uKSA9
PSBzaXplb2YoU2FtZVNpemVBc0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24pLCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uX3Nob3VsZF9zdGF5X3NtYWxsKTsKIAogRm9udERlc2NyaXB0aW9uOjpGb250RGVz
Y3JpcHRpb24oKQogICAgIDogbV9vcmllbnRhdGlvbihIb3Jpem9udGFsKQpAQCAtNTAsODIgKzUw
LDg2IEBAIEZvbnREZXNjcmlwdGlvbjo6Rm9udERlc2NyaXB0aW9uKCkKICAgICAsIG1fd2lkdGhW
YXJpYW50KFJlZ3VsYXJXaWR0aCkKICAgICAsIG1faXRhbGljKEZvbnRJdGFsaWNPZmYpCiAgICAg
LCBtX3NtYWxsQ2FwcyhGb250U21hbGxDYXBzT2ZmKQotICAgICwgbV9pc0Fic29sdXRlU2l6ZShm
YWxzZSkKICAgICAsIG1fd2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpCiAgICAgLCBtX3JlbmRlcmlu
Z01vZGUoTm9ybWFsUmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fdGV4dFJlbmRlcmluZyhBdXRvVGV4
dFJlbmRlcmluZykKKyAgICAsIG1fc2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxl
Y3Rpb24obV9sb2NhbGUpKQorICAgICwgbV9mb250U3ludGhlc2lzKEZvbnRTeW50aGVzaXNXZWln
aHQgfCBGb250U3ludGhlc2lzU3R5bGUpCit7Cit9CisKK3ZvaWQgRm9udERlc2NyaXB0aW9uOjpz
ZXRMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCit7CisgICAgbV9sb2NhbGUgPSBs
b2NhbGU7CisgICAgbV9zY3JpcHQgPSBsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9u
KG1fbG9jYWxlKTsKK30KKworRm9udFRyYWl0c01hc2sgRm9udERlc2NyaXB0aW9uOjp0cmFpdHNN
YXNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KCht
X2l0YWxpYyA/IEZvbnRTdHlsZUl0YWxpY01hc2sgOiBGb250U3R5bGVOb3JtYWxNYXNrKQorICAg
ICAgICB8IChtX3NtYWxsQ2FwcyA/IEZvbnRWYXJpYW50U21hbGxDYXBzTWFzayA6IEZvbnRWYXJp
YW50Tm9ybWFsTWFzaykKKyAgICAgICAgfCAoRm9udFdlaWdodDEwME1hc2sgPDwgKG1fd2VpZ2h0
IC0gRm9udFdlaWdodDEwMCkpKTsKKyAgICAKK30KKworRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
Rm9udENhc2NhZGVEZXNjcmlwdGlvbigpCisgICAgOiBtX2lzQWJzb2x1dGVTaXplKGZhbHNlKQog
ICAgICwgbV9rZXJuaW5nKEF1dG9LZXJuaW5nKQogICAgICwgbV9jb21tb25MaWdhdHVyZXNTdGF0
ZShOb3JtYWxMaWdhdHVyZXNTdGF0ZSkKICAgICAsIG1fZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0
YXRlKE5vcm1hbExpZ2F0dXJlc1N0YXRlKQogICAgICwgbV9oaXN0b3JpY2FsTGlnYXR1cmVzU3Rh
dGUoTm9ybWFsTGlnYXR1cmVzU3RhdGUpCiAgICAgLCBtX2tleXdvcmRTaXplKDApCiAgICAgLCBt
X2ZvbnRTbW9vdGhpbmcoQXV0b1Ntb290aGluZykKLSAgICAsIG1fdGV4dFJlbmRlcmluZyhBdXRv
VGV4dFJlbmRlcmluZykKICAgICAsIG1faXNTcGVjaWZpZWRGb250KGZhbHNlKQotICAgICwgbV9z
Y3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX2xvY2FsZSkpCi0gICAg
LCBtX2ZvbnRTeW50aGVzaXMoaW5pdGlhbEZvbnRTeW50aGVzaXMoKSkKIHsKIH0KIAotRm9udFdl
aWdodCBGb250RGVzY3JpcHRpb246OmxpZ2h0ZXJXZWlnaHQodm9pZCkgY29uc3QKK0ZvbnRXZWln
aHQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6bGlnaHRlcldlaWdodCh2b2lkKSBjb25zdAogewot
ICAgIHN3aXRjaCAobV93ZWlnaHQpIHsKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0MTAwOgotICAg
ICAgICBjYXNlIEZvbnRXZWlnaHQyMDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDMwMDoKLSAg
ICAgICAgY2FzZSBGb250V2VpZ2h0NDAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ1MDA6Ci0g
ICAgICAgICAgICByZXR1cm4gRm9udFdlaWdodDEwMDsKLQotICAgICAgICBjYXNlIEZvbnRXZWln
aHQ2MDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDcwMDoKLSAgICAgICAgICAgIHJldHVybiBG
b250V2VpZ2h0NDAwOwotCi0gICAgICAgIGNhc2UgRm9udFdlaWdodDgwMDoKLSAgICAgICAgY2Fz
ZSBGb250V2VpZ2h0OTAwOgotICAgICAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ3MDA7CisgICAg
c3dpdGNoICh3ZWlnaHQoKSkgeworICAgIGNhc2UgRm9udFdlaWdodDEwMDoKKyAgICBjYXNlIEZv
bnRXZWlnaHQyMDA6CisgICAgY2FzZSBGb250V2VpZ2h0MzAwOgorICAgIGNhc2UgRm9udFdlaWdo
dDQwMDoKKyAgICBjYXNlIEZvbnRXZWlnaHQ1MDA6CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0
MTAwOworCisgICAgY2FzZSBGb250V2VpZ2h0NjAwOgorICAgIGNhc2UgRm9udFdlaWdodDcwMDoK
KyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ0MDA7CisKKyAgICBjYXNlIEZvbnRXZWlnaHQ4MDA6
CisgICAgY2FzZSBGb250V2VpZ2h0OTAwOgorICAgICAgICByZXR1cm4gRm9udFdlaWdodDcwMDsK
ICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIEZvbnRXZWlnaHRO
b3JtYWw7CiB9CiAKLUZvbnRXZWlnaHQgRm9udERlc2NyaXB0aW9uOjpib2xkZXJXZWlnaHQodm9p
ZCkgY29uc3QKK0ZvbnRXZWlnaHQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Ym9sZGVyV2VpZ2h0
KHZvaWQpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChtX3dlaWdodCkgewotICAgICAgICBjYXNlIEZv
bnRXZWlnaHQxMDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDIwMDoKLSAgICAgICAgY2FzZSBG
b250V2VpZ2h0MzAwOgotICAgICAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ0MDA7Ci0KLSAgICAg
ICAgY2FzZSBGb250V2VpZ2h0NDAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ1MDA6Ci0gICAg
ICAgICAgICByZXR1cm4gRm9udFdlaWdodDcwMDsKLQotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ2
MDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDcwMDoKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0
ODAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ5MDA6Ci0gICAgICAgICAgICByZXR1cm4gRm9u
dFdlaWdodDkwMDsKKyAgICBzd2l0Y2ggKHdlaWdodCgpKSB7CisgICAgY2FzZSBGb250V2VpZ2h0
MTAwOgorICAgIGNhc2UgRm9udFdlaWdodDIwMDoKKyAgICBjYXNlIEZvbnRXZWlnaHQzMDA6Cisg
ICAgICAgIHJldHVybiBGb250V2VpZ2h0NDAwOworCisgICAgY2FzZSBGb250V2VpZ2h0NDAwOgor
ICAgIGNhc2UgRm9udFdlaWdodDUwMDoKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ3MDA7CisK
KyAgICBjYXNlIEZvbnRXZWlnaHQ2MDA6CisgICAgY2FzZSBGb250V2VpZ2h0NzAwOgorICAgIGNh
c2UgRm9udFdlaWdodDgwMDoKKyAgICBjYXNlIEZvbnRXZWlnaHQ5MDA6CisgICAgICAgIHJldHVy
biBGb250V2VpZ2h0OTAwOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBy
ZXR1cm4gRm9udFdlaWdodE5vcm1hbDsKIH0KIAotRm9udFRyYWl0c01hc2sgRm9udERlc2NyaXB0
aW9uOjp0cmFpdHNNYXNrKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFRy
YWl0c01hc2s+KChtX2l0YWxpYyA/IEZvbnRTdHlsZUl0YWxpY01hc2sgOiBGb250U3R5bGVOb3Jt
YWxNYXNrKQotICAgICAgICAgICAgfCAobV9zbWFsbENhcHMgPyBGb250VmFyaWFudFNtYWxsQ2Fw
c01hc2sgOiBGb250VmFyaWFudE5vcm1hbE1hc2spCi0gICAgICAgICAgICB8IChGb250V2VpZ2h0
MTAwTWFzayA8PCAobV93ZWlnaHQgLSBGb250V2VpZ2h0MTAwKSkpOwotICAgIAotfQotCi12b2lk
IEZvbnREZXNjcmlwdGlvbjo6c2V0TG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQot
ewotICAgIG1fbG9jYWxlID0gbG9jYWxlOwotICAgIG1fc2NyaXB0ID0gbG9jYWxlVG9TY3JpcHRD
b2RlRm9yRm9udFNlbGVjdGlvbihtX2xvY2FsZSk7Ci19Ci0KICNpZiBFTkFCTEUoSU9TX1RFWFRf
QVVUT1NJWklORykKLWJvb2wgRm9udERlc2NyaXB0aW9uOjpmYW1pbGllc0VxdWFsRm9yVGV4dEF1
dG9TaXppbmcoY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK2Jvb2wgRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAogewogICAgIHVuc2lnbmVkIHRoaXNG
YW1pbHlDb3VudCA9IGZhbWlseUNvdW50KCk7CiAgICAgdW5zaWduZWQgb3RoZXJGYW1pbHlDb3Vu
dCA9IG90aGVyLmZhbWlseUNvdW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAkocmV2aXNpb24gMTg5ODIzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDE0ICs0MCw5MCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Rm9udEZh
bWlseU5hbWVzOwogCiBjbGFzcyBGb250RGVzY3JpcHRpb24gewogcHVibGljOgorICAgIFdFQkNP
UkVfRVhQT1JUIEZvbnREZXNjcmlwdGlvbigpOworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250
RGVzY3JpcHRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQor
CisgICAgZmxvYXQgY29tcHV0ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlZFNpemU7
IH0KKyAgICBGb250SXRhbGljIGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRJdGFsaWM+KG1faXRhbGljKTsgfQorICAgIGludCBjb21wdXRlZFBpeGVsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIGludChtX2NvbXB1dGVkU2l6ZSArIDAuNWYpOyB9CisgICAgRm9udFNtYWxsQ2Fw
cyBzbWFsbENhcHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U21hbGxDYXBzPiht
X3NtYWxsQ2Fwcyk7IH0KKyAgICBGb250V2VpZ2h0IHdlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEZvbnRXZWlnaHQ+KG1fd2VpZ2h0KTsgfQorICAgIEZvbnRXZWlnaHQgbGlnaHRl
cldlaWdodCgpIGNvbnN0OworICAgIEZvbnRXZWlnaHQgYm9sZGVyV2VpZ2h0KCkgY29uc3Q7Cisg
ICAgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEZvbnRSZW5kZXJpbmdNb2RlPihtX3JlbmRlcmluZ01vZGUpOyB9CisgICAgVGV4dFJl
bmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0UmVuZGVyaW5nTW9kZT4obV90ZXh0UmVuZGVyaW5nKTsgfQorICAgIFVTY3JpcHRDb2Rl
IHNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVTY3JpcHRDb2RlPihtX3Njcmlw
dCk7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jYWxlOyB9CisKKyAgICBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxGb250T3JpZW50YXRpb24+KG1fb3JpZW50YXRpb24pOyB9CisgICAg
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBub25DSktHbHlwaE9yaWVudGF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbj4obV9ub25DSktHbHlwaE9y
aWVudGF0aW9uKTsgfQorICAgIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFdpZHRoVmFyaWFudD4obV93aWR0aFZhcmlhbnQpOyB9
CisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyogZmVhdHVyZVNldHRpbmdzKCkgY29uc3QgeyByZXR1
cm4gbV9mZWF0dXJlU2V0dGluZ3MuZ2V0KCk7IH0KKyAgICBGb250U3ludGhlc2lzIGZvbnRTeW50
aGVzaXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U3ludGhlc2lzPihtX2ZvbnRT
eW50aGVzaXMpOyB9CisKKyAgICB2b2lkIHNldENvbXB1dGVkU2l6ZShmbG9hdCBzKSB7IG1fY29t
cHV0ZWRTaXplID0gY2xhbXBUb0Zsb2F0KHMpOyB9CisgICAgdm9pZCBzZXRJdGFsaWMoRm9udEl0
YWxpYyBpKSB7IG1faXRhbGljID0gaTsgfQorICAgIHZvaWQgc2V0SXNJdGFsaWMoYm9vbCBpKSB7
IHNldEl0YWxpYyhpID8gRm9udEl0YWxpY09uIDogRm9udEl0YWxpY09mZik7IH0KKyAgICB2b2lk
IHNldFNtYWxsQ2FwcyhGb250U21hbGxDYXBzIGMpIHsgbV9zbWFsbENhcHMgPSBjOyB9CisgICAg
dm9pZCBzZXRJc1NtYWxsQ2Fwcyhib29sIGMpIHsgc2V0U21hbGxDYXBzKGMgPyBGb250U21hbGxD
YXBzT24gOiBGb250U21hbGxDYXBzT2ZmKTsgfQorICAgIHZvaWQgc2V0V2VpZ2h0KEZvbnRXZWln
aHQgdykgeyBtX3dlaWdodCA9IHc7IH0KKyAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoRm9udFJl
bmRlcmluZ01vZGUgbW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSBtb2RlOyB9CisgICAgdm9pZCBz
ZXRUZXh0UmVuZGVyaW5nTW9kZShUZXh0UmVuZGVyaW5nTW9kZSByZW5kZXJpbmcpIHsgbV90ZXh0
UmVuZGVyaW5nID0gcmVuZGVyaW5nOyB9CisgICAgdm9pZCBzZXRPcmllbnRhdGlvbihGb250T3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9Cisg
ICAgdm9pZCBzZXROb25DSktHbHlwaE9yaWVudGF0aW9uKE5vbkNKS0dseXBoT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIHsgbV9ub25DSktHbHlwaE9yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH0K
KyAgICB2b2lkIHNldFdpZHRoVmFyaWFudChGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkg
eyBtX3dpZHRoVmFyaWFudCA9IHdpZHRoVmFyaWFudDsgfSAvLyBNYWtlIHN1cmUgbmV3IGNhbGxl
cnMgb2YgdGhpcyBzeW5jIHdpdGggRm9udFBsYXRmb3JtRGF0YTo6aXNGb3JUZXh0Q29tYmluZSgp
IQorICAgIHZvaWQgc2V0TG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHZvaWQgc2V0
RmVhdHVyZVNldHRpbmdzKFBhc3NSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3Mp
IHsgbV9mZWF0dXJlU2V0dGluZ3MgPSBzZXR0aW5nczsgfQorICAgIHZvaWQgc2V0Rm9udFN5bnRo
ZXNpcyhGb250U3ludGhlc2lzIGZvbnRTeW50aGVzaXMpIHsgbV9mb250U3ludGhlc2lzID0gZm9u
dFN5bnRoZXNpczsgfQorCisgICAgRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzaygpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBtX2ZlYXR1cmVTZXR0
aW5nczsKKyAgICBBdG9taWNTdHJpbmcgbV9sb2NhbGU7CisKKyAgICBmbG9hdCBtX2NvbXB1dGVk
U2l6ZSB7IDAgfTsgLy8gQ29tcHV0ZWQgc2l6ZSBhZGp1c3RlZCBmb3IgdGhlIG1pbmltdW0gZm9u
dCBzaXplIGFuZCB0aGUgem9vbSBmYWN0b3IuCisgICAgdW5zaWduZWQgbV9vcmllbnRhdGlvbiA6
IDE7IC8vIEZvbnRPcmllbnRhdGlvbiAtIFdoZXRoZXIgdGhlIGZvbnQgaXMgcmVuZGVyaW5nIG9u
IGEgaG9yaXpvbnRhbCBsaW5lIG9yIGEgdmVydGljYWwgbGluZS4KKyAgICB1bnNpZ25lZCBtX25v
bkNKS0dseXBoT3JpZW50YXRpb24gOiAxOyAvLyBOb25DSktHbHlwaE9yaWVudGF0aW9uIC0gT25s
eSB1c2VkIGJ5IHZlcnRpY2FsIHRleHQuIERldGVybWluZXMgdGhlIGRlZmF1bHQgb3JpZW50YXRp
b24gZm9yIG5vbi1pZGVvZ3JhcGggZ2x5cGhzLgorICAgIHVuc2lnbmVkIG1fd2lkdGhWYXJpYW50
IDogMjsgLy8gRm9udFdpZHRoVmFyaWFudAorICAgIHVuc2lnbmVkIG1faXRhbGljIDogMTsgLy8g
Rm9udEl0YWxpYworICAgIHVuc2lnbmVkIG1fc21hbGxDYXBzIDogMTsgLy8gRm9udFNtYWxsQ2Fw
cworICAgIHVuc2lnbmVkIG1fd2VpZ2h0IDogODsgLy8gRm9udFdlaWdodAorICAgIHVuc2lnbmVk
IG1fcmVuZGVyaW5nTW9kZSA6IDE7IC8vIFVzZWQgdG8gc3dpdGNoIGJldHdlZW4gQ0cgYW5kIEdE
SSB0ZXh0IG9uIFdpbmRvd3MuCisgICAgdW5zaWduZWQgbV90ZXh0UmVuZGVyaW5nIDogMjsgLy8g
VGV4dFJlbmRlcmluZ01vZGUKKyAgICB1bnNpZ25lZCBtX3NjcmlwdCA6IDc7IC8vIFVzZWQgdG8g
aGVscCBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgZm9udCBmb3IgZ2VuZXJpYyBmb250IGZhbWlsaWVz
LgorICAgIHVuc2lnbmVkIG1fZm9udFN5bnRoZXNpcyA6IDI7IC8vIEZvbnRTeW50aGVzaXMgdHlw
ZQorfTsKKworaW5saW5lIGJvb2wgRm9udERlc2NyaXB0aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tcHV0ZWRTaXpl
ID09IG90aGVyLm1fY29tcHV0ZWRTaXplCisgICAgICAgICYmIG1faXRhbGljID09IG90aGVyLm1f
aXRhbGljCisgICAgICAgICYmIG1fc21hbGxDYXBzID09IG90aGVyLm1fc21hbGxDYXBzCisgICAg
ICAgICYmIG1fd2VpZ2h0ID09IG90aGVyLm1fd2VpZ2h0CisgICAgICAgICYmIG1fcmVuZGVyaW5n
TW9kZSA9PSBvdGhlci5tX3JlbmRlcmluZ01vZGUKKyAgICAgICAgJiYgbV90ZXh0UmVuZGVyaW5n
ID09IG90aGVyLm1fdGV4dFJlbmRlcmluZworICAgICAgICAmJiBtX29yaWVudGF0aW9uID09IG90
aGVyLm1fb3JpZW50YXRpb24KKyAgICAgICAgJiYgbV9ub25DSktHbHlwaE9yaWVudGF0aW9uID09
IG90aGVyLm1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbgorICAgICAgICAmJiBtX3dpZHRoVmFyaWFu
dCA9PSBvdGhlci5tX3dpZHRoVmFyaWFudAorICAgICAgICAmJiBtX2xvY2FsZSA9PSBvdGhlci5t
X2xvY2FsZQorICAgICAgICAmJiBtX2ZlYXR1cmVTZXR0aW5ncyA9PSBvdGhlci5tX2ZlYXR1cmVT
ZXR0aW5ncworICAgICAgICAmJiBtX2ZvbnRTeW50aGVzaXMgPT0gb3RoZXIubV9mb250U3ludGhl
c2lzOworfQorCisvLyBGSVhNRTogTW92ZSB0byBhIGZpbGUgb2YgaXRzIG93bi4KK2NsYXNzIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24gOiBwdWJsaWMgRm9udERlc2NyaXB0aW9uIHsKK3B1YmxpYzoK
ICAgICBlbnVtIEtlcm5pbmcgeyBBdXRvS2VybmluZywgTm9ybWFsS2VybmluZywgTm9uZUtlcm5p
bmcgfTsKIAogICAgIGVudW0gTGlnYXR1cmVzU3RhdGUgeyBOb3JtYWxMaWdhdHVyZXNTdGF0ZSwg
RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSwgRW5hYmxlZExpZ2F0dXJlc1N0YXRlIH07CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBGb250RGVzY3JpcHRpb24oKTsKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0
aW9uKCk7CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29u
c3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOyB9CiAKICAgICB1bnNpZ25lZCBmYW1pbHlDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZmFtaWxpZXMuc2l6ZSgpOyB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmaXJzdEZh
bWlseSgpIGNvbnN0IHsgcmV0dXJuIGZhbWlseUF0KDApOyB9CkBAIC01NSwxNyArMTMxLDEzIEBA
IHB1YmxpYzoKICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRvbWljU3RyaW5nPiYgZmFtaWxp
ZXMoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzOyB9CiAKICAgICBmbG9hdCBzcGVjaWZpZWRT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpZWRTaXplOyB9Ci0gICAgZmxvYXQgY29tcHV0
ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlZFNpemU7IH0KLSAgICBGb250SXRhbGlj
IGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRJdGFsaWM+KG1faXRhbGlj
KTsgfQotICAgIGludCBjb21wdXRlZFBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGludChtX2Nv
bXB1dGVkU2l6ZSArIDAuNWYpOyB9Ci0gICAgRm9udFNtYWxsQ2FwcyBzbWFsbENhcHMoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U21hbGxDYXBzPihtX3NtYWxsQ2Fwcyk7IH0KICAg
ICBib29sIGlzQWJzb2x1dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pc0Fic29sdXRlU2l6ZTsg
fQotICAgIEZvbnRXZWlnaHQgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9u
dFdlaWdodD4obV93ZWlnaHQpOyB9CiAgICAgRm9udFdlaWdodCBsaWdodGVyV2VpZ2h0KCkgY29u
c3Q7CiAgICAgRm9udFdlaWdodCBib2xkZXJXZWlnaHQoKSBjb25zdDsKKwogICAgIC8vIG9ubHkg
dXNlIGZpeGVkIGRlZmF1bHQgc2l6ZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGZvbnQgZmFtaWx5
LCBhbmQgdGhhdCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIKICAgICBib29sIHVzZUZpeGVkRGVmYXVs
dFNpemUoKSBjb25zdCB7IHJldHVybiBmYW1pbHlDb3VudCgpID09IDEgJiYgZmlyc3RGYW1pbHko
KSA9PSBtb25vc3BhY2VGYW1pbHk7IH0KLSAgICBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFJlbmRlcmluZ01vZGU+KG1fcmVu
ZGVyaW5nTW9kZSk7IH0KKwogICAgIEtlcm5pbmcga2VybmluZygpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEtlcm5pbmc+KG1fa2VybmluZyk7IH0KICAgICBMaWdhdHVyZXNTdGF0ZSBjb21t
b25MaWdhdHVyZXNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PExpZ2F0dXJlc1N0
YXRlPihtX2NvbW1vbkxpZ2F0dXJlc1N0YXRlKTsgfQogICAgIExpZ2F0dXJlc1N0YXRlIGRpc2Ny
ZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PExpZ2F0
dXJlc1N0YXRlPihtX2Rpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSk7IH0KQEAgLTc4LDMwICsx
NTAsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgICB9CiAgICAg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEZvbnRTbW9vdGhpbmdNb2RlPihtX2ZvbnRTbW9vdGhpbmcpOyB9Ci0gICAgVGV4dFJlbmRl
cmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxU
ZXh0UmVuZGVyaW5nTW9kZT4obV90ZXh0UmVuZGVyaW5nKTsgfQotICAgIFVTY3JpcHRDb2RlIHNj
cmlwdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVTY3JpcHRDb2RlPihtX3NjcmlwdCk7
IH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YWxlOyB9Ci0KLSAgICBGb250VHJhaXRzTWFzayB0cmFpdHNNYXNrKCkgY29uc3Q7CiAgICAgYm9v
bCBpc1NwZWNpZmllZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3BlY2lmaWVkRm9udDsgfQot
ICAgIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEZvbnRPcmllbnRhdGlvbj4obV9vcmllbnRhdGlvbik7IH0KLSAgICBOb25DSktHbHlwaE9y
aWVudGF0aW9uIG5vbkNKS0dseXBoT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxOb25DSktHbHlwaE9yaWVudGF0aW9uPihtX25vbkNKS0dseXBoT3JpZW50YXRpb24pOyB9
Ci0gICAgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxGb250V2lkdGhWYXJpYW50PihtX3dpZHRoVmFyaWFudCk7IH0KLSAgICBGb250RmVh
dHVyZVNldHRpbmdzKiBmZWF0dXJlU2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVT
ZXR0aW5ncy5nZXQoKTsgfQotICAgIEZvbnRTeW50aGVzaXMgZm9udFN5bnRoZXNpcygpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRTeW50aGVzaXM+KG1fZm9udFN5bnRoZXNpcyk7IH0K
IAogICAgIHZvaWQgc2V0T25lRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KSB7IEFT
U0VSVChtX2ZhbWlsaWVzLnNpemUoKSA9PSAxKTsgbV9mYW1pbGllc1swXSA9IGZhbWlseTsgfQog
ICAgIHZvaWQgc2V0RmFtaWxpZXMoY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIGZhbWlsaWVz
KSB7IG1fZmFtaWxpZXMgPSBSZWZDb3VudGVkQXJyYXk8QXRvbWljU3RyaW5nPihmYW1pbGllcyk7
IH0KICAgICB2b2lkIHNldEZhbWlsaWVzKGNvbnN0IFJlZkNvdW50ZWRBcnJheTxBdG9taWNTdHJp
bmc+JiBmYW1pbGllcykgeyBtX2ZhbWlsaWVzID0gZmFtaWxpZXM7IH0KLSAgICB2b2lkIHNldENv
bXB1dGVkU2l6ZShmbG9hdCBzKSB7IG1fY29tcHV0ZWRTaXplID0gY2xhbXBUb0Zsb2F0KHMpOyB9
CiAgICAgdm9pZCBzZXRTcGVjaWZpZWRTaXplKGZsb2F0IHMpIHsgbV9zcGVjaWZpZWRTaXplID0g
Y2xhbXBUb0Zsb2F0KHMpOyB9Ci0gICAgdm9pZCBzZXRJdGFsaWMoRm9udEl0YWxpYyBpKSB7IG1f
aXRhbGljID0gaTsgfQotICAgIHZvaWQgc2V0SXNJdGFsaWMoYm9vbCBpKSB7IHNldEl0YWxpYyhp
ID8gRm9udEl0YWxpY09uIDogRm9udEl0YWxpY09mZik7IH0KLSAgICB2b2lkIHNldFNtYWxsQ2Fw
cyhGb250U21hbGxDYXBzIGMpIHsgbV9zbWFsbENhcHMgPSBjOyB9Ci0gICAgdm9pZCBzZXRJc1Nt
YWxsQ2Fwcyhib29sIGMpIHsgc2V0U21hbGxDYXBzKGMgPyBGb250U21hbGxDYXBzT24gOiBGb250
U21hbGxDYXBzT2ZmKTsgfQogICAgIHZvaWQgc2V0SXNBYnNvbHV0ZVNpemUoYm9vbCBzKSB7IG1f
aXNBYnNvbHV0ZVNpemUgPSBzOyB9Ci0gICAgdm9pZCBzZXRXZWlnaHQoRm9udFdlaWdodCB3KSB7
IG1fd2VpZ2h0ID0gdzsgfQotICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9kZShGb250UmVuZGVyaW5n
TW9kZSBtb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IG1vZGU7IH0KICAgICB2b2lkIHNldEtlcm5p
bmcoS2VybmluZyBrZXJuaW5nKSB7IG1fa2VybmluZyA9IGtlcm5pbmc7IH0KICAgICB2b2lkIHNl
dENvbW1vbkxpZ2F0dXJlc1N0YXRlKExpZ2F0dXJlc1N0YXRlIGNvbW1vbkxpZ2F0dXJlc1N0YXRl
KSB7IG1fY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBjb21tb25MaWdhdHVyZXNTdGF0ZTsgfQogICAg
IHZvaWQgc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKExpZ2F0dXJlc1N0YXRlIGRpc2Ny
ZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSkgeyBtX2Rpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9
IGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZTsgfQpAQCAtMTE4LDI1ICsxNzMsMTcgQEAgcHVi
bGljOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KENTU1ZhbHVlV2Via2l0WHh4TGFyZ2UgLSBDU1NW
YWx1ZVh4U21hbGwgKyAxID09IDgsICJNYXhpbXVtIGtleXdvcmQgc2l6ZSBzaG91bGQgYmUgOC4i
KTsKICAgICAgICAgc2V0S2V5d29yZFNpemUoaWRlbnRpZmllciA/IGlkZW50aWZpZXIgLSBDU1NW
YWx1ZVh4U21hbGwgKyAxIDogMCk7CiAgICAgfQotCiAgICAgdm9pZCBzZXRGb250U21vb3RoaW5n
KEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZykgeyBtX2ZvbnRTbW9vdGhpbmcgPSBzbW9vdGhp
bmc7IH0KLSAgICB2b2lkIHNldFRleHRSZW5kZXJpbmdNb2RlKFRleHRSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZykgeyBtX3RleHRSZW5kZXJpbmcgPSByZW5kZXJpbmc7IH0KICAgICB2b2lkIHNldElz
U3BlY2lmaWVkRm9udChib29sIGlzU3BlY2lmaWVkRm9udCkgeyBtX2lzU3BlY2lmaWVkRm9udCA9
IGlzU3BlY2lmaWVkRm9udDsgfQotICAgIHZvaWQgc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQotICAgIHZv
aWQgc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihOb25DSktHbHlwaE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSB7IG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9Ci0gICAg
dm9pZCBzZXRXaWR0aFZhcmlhbnQoRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQpIHsgbV93
aWR0aFZhcmlhbnQgPSB3aWR0aFZhcmlhbnQ7IH0gLy8gTWFrZSBzdXJlIG5ldyBjYWxsZXJzIG9m
IHRoaXMgc3luYyB3aXRoIEZvbnRQbGF0Zm9ybURhdGE6OmlzRm9yVGV4dENvbWJpbmUoKSEKLSAg
ICB2b2lkIHNldExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICB2b2lkIHNldEZlYXR1
cmVTZXR0aW5ncyhQYXNzUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IHNldHRpbmdzKSB7IG1f
ZmVhdHVyZVNldHRpbmdzID0gc2V0dGluZ3M7IH0KLSAgICB2b2lkIHNldEZvbnRTeW50aGVzaXMo
Rm9udFN5bnRoZXNpcyBmb250U3ludGhlc2lzKSB7IG1fZm9udFN5bnRoZXNpcyA9IGZvbnRTeW50
aGVzaXM7IH0KIAogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotICAgIGJvb2wgZmFt
aWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIp
IGNvbnN0OworICAgIGJvb2wgZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdDsKIAotICAgIGJvb2wgZXF1YWxGb3JU
ZXh0QXV0b1NpemluZyhjb25zdCBGb250RGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAorICAgIGJv
b2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBv
dGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBmYW1pbGllc0VxdWFsRm9yVGV4dEF1
dG9TaXppbmcob3RoZXIpCiAgICAgICAgICAgICAmJiBtX3NwZWNpZmllZFNpemUgPT0gb3RoZXIu
bV9zcGVjaWZpZWRTaXplCi0gICAgICAgICAgICAmJiBtX3NtYWxsQ2FwcyA9PSBvdGhlci5tX3Nt
YWxsQ2FwcworICAgICAgICAgICAgJiYgc21hbGxDYXBzKCkgPT0gb3RoZXIuc21hbGxDYXBzKCkK
ICAgICAgICAgICAgICYmIG1faXNBYnNvbHV0ZVNpemUgPT0gb3RoZXIubV9pc0Fic29sdXRlU2l6
ZTsKICAgICB9CiAjZW5kaWYKQEAgLTE1MiwyNyArMTk5LDEyIEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBSZWZDb3VudGVkQXJyYXk8QXRvbWljU3RyaW5nPiBtX2ZhbWlsaWVzIHsgMSB9Owot
ICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBtX2ZlYXR1cmVTZXR0aW5nczsKLSAgICBB
dG9taWNTdHJpbmcgbV9sb2NhbGUgeyBpbml0aWFsTG9jYWxlKCkgfTsKIAogICAgIGZsb2F0IG1f
c3BlY2lmaWVkU2l6ZSB7IDAgfTsgICAvLyBTcGVjaWZpZWQgQ1NTIHZhbHVlLiBJbmRlcGVuZGVu
dCBvZiByZW5kZXJpbmcgaXNzdWVzIHN1Y2ggYXMgaW50ZWdlcgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyByb3VuZGluZywgbWluaW11bSBmb250IHNpemVzLCBhbmQgem9vbWluZy4K
LSAgICBmbG9hdCBtX2NvbXB1dGVkU2l6ZSB7IDAgfTsgICAgLy8gQ29tcHV0ZWQgc2l6ZSBhZGp1
c3RlZCBmb3IgdGhlIG1pbmltdW0gZm9udCBzaXplIGFuZCB0aGUgem9vbSBmYWN0b3IuCi0KLSAg
ICB1bnNpZ25lZCBtX29yaWVudGF0aW9uIDogMTsgLy8gRm9udE9yaWVudGF0aW9uIC0gV2hldGhl
ciB0aGUgZm9udCBpcyByZW5kZXJpbmcgb24gYSBob3Jpem9udGFsIGxpbmUgb3IgYSB2ZXJ0aWNh
bCBsaW5lLgotICAgIHVuc2lnbmVkIG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA6IDE7IC8vIE5v
bkNKS0dseXBoT3JpZW50YXRpb24gLSBPbmx5IHVzZWQgYnkgdmVydGljYWwgdGV4dC4gRGV0ZXJt
aW5lcyB0aGUgZGVmYXVsdCBvcmllbnRhdGlvbiBmb3Igbm9uLWlkZW9ncmFwaCBnbHlwaHMuCi0K
LSAgICB1bnNpZ25lZCBtX3dpZHRoVmFyaWFudCA6IDI7IC8vIEZvbnRXaWR0aFZhcmlhbnQKLQot
ICAgIHVuc2lnbmVkIG1faXRhbGljIDogMTsgLy8gRm9udEl0YWxpYwotICAgIHVuc2lnbmVkIG1f
c21hbGxDYXBzIDogMTsgLy8gRm9udFNtYWxsQ2FwcwogICAgIHVuc2lnbmVkIG1faXNBYnNvbHV0
ZVNpemUgOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCBDU1Mgc3BlY2lmaWVkIGFuIGV4cGxpY2l0IHNp
emUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAobG9naWNhbCBzaXplcyBs
aWtlICJtZWRpdW0iIGRvbid0IGNvdW50KS4KLSAgICB1bnNpZ25lZCBtX3dlaWdodCA6IDg7IC8v
IEZvbnRXZWlnaHQKLQotICAgIHVuc2lnbmVkIG1fcmVuZGVyaW5nTW9kZSA6IDE7ICAvLyBVc2Vk
IHRvIHN3aXRjaCBiZXR3ZWVuIENHIGFuZCBHREkgdGV4dCBvbiBXaW5kb3dzLgogICAgIHVuc2ln
bmVkIG1fa2VybmluZyA6IDI7IC8vIEtlcm5pbmcKLQogICAgIHVuc2lnbmVkIG1fY29tbW9uTGln
YXR1cmVzU3RhdGUgOiAyOwogICAgIHVuc2lnbmVkIG1fZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0
YXRlIDogMjsKICAgICB1bnNpZ25lZCBtX2hpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA6IDI7CkBA
IC0xODIsMzYgKzIxNCwyMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gKGUuZy4sIDEzcHggbW9ub3NwYWNlIHZzLiAxNnB4IGV2ZXJ5dGhpbmcgZWxzZSkuICBTaXpl
cyBhcmUgMS04IChsaWtlIHRoZSBIVE1MIHNpemUgdmFsdWVzIGZvciA8Zm9udD4pLgogCiAgICAg
dW5zaWduZWQgbV9mb250U21vb3RoaW5nIDogMjsgLy8gRm9udFNtb290aGluZ01vZGUKLSAgICB1
bnNpZ25lZCBtX3RleHRSZW5kZXJpbmcgOiAyOyAvLyBUZXh0UmVuZGVyaW5nTW9kZQogICAgIHVu
c2lnbmVkIG1faXNTcGVjaWZpZWRGb250IDogMTsgLy8gVHJ1ZSBpZiBhIHdlYiBwYWdlIHNwZWNp
ZmllcyBhIG5vbi1nZW5lcmljIGZvbnQgZmFtaWx5IGFzIHRoZSBmaXJzdCBmb250IGZhbWlseS4K
LSAgICB1bnNpZ25lZCBtX3NjcmlwdCA6IDc7IC8vIFVzZWQgdG8gaGVscCBjaG9vc2UgYW4gYXBw
cm9wcmlhdGUgZm9udCBmb3IgZ2VuZXJpYyBmb250IGZhbWlsaWVzLgotICAgIHVuc2lnbmVkIG1f
Zm9udFN5bnRoZXNpcyA6IDI7IC8vIEZvbnRTeW50aGVzaXMgdHlwZQogfTsKIAotaW5saW5lIGJv
b2wgRm9udERlc2NyaXB0aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3Ro
ZXIpIGNvbnN0CitpbmxpbmUgYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpvcGVyYXRvcj09
KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAogewotICAgIHJldHVy
biBtX2ZhbWlsaWVzID09IG90aGVyLm1fZmFtaWxpZXMKKyAgICByZXR1cm4gRm9udERlc2NyaXB0
aW9uOjpvcGVyYXRvcj09KG90aGVyKQorICAgICAgICAmJiBtX2ZhbWlsaWVzID09IG90aGVyLm1f
ZmFtaWxpZXMKICAgICAgICAgJiYgbV9zcGVjaWZpZWRTaXplID09IG90aGVyLm1fc3BlY2lmaWVk
U2l6ZQotICAgICAgICAmJiBtX2NvbXB1dGVkU2l6ZSA9PSBvdGhlci5tX2NvbXB1dGVkU2l6ZQot
ICAgICAgICAmJiBtX2l0YWxpYyA9PSBvdGhlci5tX2l0YWxpYwotICAgICAgICAmJiBtX3NtYWxs
Q2FwcyA9PSBvdGhlci5tX3NtYWxsQ2FwcwogICAgICAgICAmJiBtX2lzQWJzb2x1dGVTaXplID09
IG90aGVyLm1faXNBYnNvbHV0ZVNpemUKLSAgICAgICAgJiYgbV93ZWlnaHQgPT0gb3RoZXIubV93
ZWlnaHQKLSAgICAgICAgJiYgbV9yZW5kZXJpbmdNb2RlID09IG90aGVyLm1fcmVuZGVyaW5nTW9k
ZQogICAgICAgICAmJiBtX2tlcm5pbmcgPT0gb3RoZXIubV9rZXJuaW5nCiAgICAgICAgICYmIG1f
Y29tbW9uTGlnYXR1cmVzU3RhdGUgPT0gb3RoZXIubV9jb21tb25MaWdhdHVyZXNTdGF0ZQogICAg
ICAgICAmJiBtX2Rpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9PSBvdGhlci5tX2Rpc2NyZXRp
b25hcnlMaWdhdHVyZXNTdGF0ZQogICAgICAgICAmJiBtX2hpc3RvcmljYWxMaWdhdHVyZXNTdGF0
ZSA9PSBvdGhlci5tX2hpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZQogICAgICAgICAmJiBtX2tleXdv
cmRTaXplID09IG90aGVyLm1fa2V5d29yZFNpemUKICAgICAgICAgJiYgbV9mb250U21vb3RoaW5n
ID09IG90aGVyLm1fZm9udFNtb290aGluZwotICAgICAgICAmJiBtX3RleHRSZW5kZXJpbmcgPT0g
b3RoZXIubV90ZXh0UmVuZGVyaW5nCi0gICAgICAgICYmIG1faXNTcGVjaWZpZWRGb250ID09IG90
aGVyLm1faXNTcGVjaWZpZWRGb250Ci0gICAgICAgICYmIG1fb3JpZW50YXRpb24gPT0gb3RoZXIu
bV9vcmllbnRhdGlvbgotICAgICAgICAmJiBtX25vbkNKS0dseXBoT3JpZW50YXRpb24gPT0gb3Ro
ZXIubV9ub25DSktHbHlwaE9yaWVudGF0aW9uCi0gICAgICAgICYmIG1fd2lkdGhWYXJpYW50ID09
IG90aGVyLm1fd2lkdGhWYXJpYW50Ci0gICAgICAgICYmIG1fbG9jYWxlID09IG90aGVyLm1fbG9j
YWxlCi0gICAgICAgICYmIG1fZmVhdHVyZVNldHRpbmdzID09IG90aGVyLm1fZmVhdHVyZVNldHRp
bmdzCi0gICAgICAgICYmIG1fZm9udFN5bnRoZXNpcyA9PSBvdGhlci5tX2ZvbnRTeW50aGVzaXM7
CisgICAgICAgICYmIG1faXNTcGVjaWZpZWRGb250ID09IG90aGVyLm1faXNTcGVjaWZpZWRGb250
OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250U2VsZWN0b3IuaAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGb250Q2FzY2FkZURlc2NyaXB0aW9u
OwogY2xhc3MgRm9udERlc2NyaXB0aW9uOwogY2xhc3MgRm9udFNlbGVjdG9yQ2xpZW50OwogCkBA
IC00NCw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Rm9udD4gZmFs
bGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgc2l6ZV90KSA9IDA7CiAKICAgICB2
aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3VudCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
cmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJikgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFsaWRhdGVk
KCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRDYWNoZUNvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAJKHJldmlzaW9uIDE4OTgyMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQzLDQ4ICsyNDMsMzkgQEAgdWludDE2X3QgdG9D
b3JlVGV4dEZvbnRXZWlnaHQoRm9udFdlaWdodAogICAgIHJldHVybiBjb3JlVGV4dEZvbnRXZWln
aHRzW2ZvbnRXZWlnaHRdOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorUmVmUHRyPEZvbnQ+IEZvbnRD
YWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCiB7CiAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFw
cHJvcHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2Yga2V5
d29yZHMgaW4KICAgICAvLyB0aGUgcmVxdWVzdGVkIG5hbWVzLiBGb3IgZXhhbXBsZSwgd2UnbGwg
bWF0Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmljIiB0byBHZWV6YSBQcm8uCi0gICAg
UmVmUHRyPEZvbnQ+IGZvbnQ7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0
aW9uLmZhbWlseUNvdW50KCk7ICsraSkgewotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZh
bWlseSA9IGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpOwotICAgICAgICBpZiAoZmFtaWx5LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgLy8g
U3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCBtb25vc3BhY2UgZm9udCBmb3Igd2VsbC1rbm93biBtb25v
c3BhY2UgZm9udHMuCi0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IG1vbmFjbygibW9uYWNvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0g
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1lbmxvKCJtZW5sbyIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShm
YW1pbHksIG1vbmFjbykgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBtZW5sbykpIHsKLSAg
ICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBjb3VyaWVyKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3Vic3RpdHV0ZSBW
ZXJkYW5hIGZvciBMdWNpZGEgR3JhbmRlLgotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QXRvbWljU3RyaW5nPiBsdWNpZGFHcmFuZGUoImx1Y2lkYSBncmFuZGUiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4gdmVyZGFuYSgidmVyZGFuYSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBsdWNpZGFH
cmFuZGUpKSB7Ci0gICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
dmVyZGFuYSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorICAgIC8vIFN1YnN0
aXR1dGUgdGhlIGRlZmF1bHQgbW9ub3NwYWNlIGZvbnQgZm9yIHdlbGwta25vd24gbW9ub3NwYWNl
IGZvbnRzLgorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IG1vbmFjbygi
bW9uYWNvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbWVubG8oIm1lbmxvIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gY291cmllcigiY291cmllciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1vbmFjbykgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBtZW5sbykpCisgICAgICAgIHJldHVybiBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBjb3VyaWVyKTsKKworICAgIC8vIFN1YnN0aXR1dGUgVmVyZGFuYSBm
b3IgTHVjaWRhIEdyYW5kZS4KKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiBsdWNpZGFHcmFuZGUoImx1Y2lkYSBncmFuZGUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB2ZXJk
YW5hKCJ2ZXJkYW5hIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbHVjaWRhR3JhbmRlKSkKKyAgICAgICAgcmV0
dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHZlcmRhbmEpOwogI2VuZGlmCiAKLSAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYXJhYmljKEFTQ0lJTGl0ZXJhbCgiQXJh
YmljIikpOwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBwYXNodG8oQVND
SUlMaXRlcmFsKCJQYXNodG8iKSk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IHVyZHUoQVNDSUlMaXRlcmFsKCJVcmR1IikpOwotICAgICAgICBzdGF0aWMgU3RyaW5nKiBt
YXRjaFdvcmRzWzNdID0geyAmYXJhYmljLmdldCgpLCAmcGFzaHRvLmdldCgpLCAmdXJkdS5nZXQo
KSB9OwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBnZWV6YVBs
YWluKCJHZWV6YVBybyIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBnZWV6YUJvbGQoIkdlZXph
UHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAg
Zm9yIChTdHJpbmcqIG1hdGNoV29yZCA6IG1hdGNoV29yZHMpIHsKLSAgICAgICAgICAgIGlmIChm
YW1pbHkuY29udGFpbnMoKm1hdGNoV29yZCwgZmFsc2UpKQotICAgICAgICAgICAgICAgIGZvbnQg
PSBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9u
LndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOwotICAgICAgICB9CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYXJhYmljKEFTQ0lJTGl0ZXJhbCgiQXJhYmljIikp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBhc2h0byhBU0NJSUxpdGVyYWwo
IlBhc2h0byIpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KEFTQ0lJ
TGl0ZXJhbCgiVXJkdSIpKTsKKyAgICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyAm
YXJhYmljLmdldCgpLCAmcGFzaHRvLmdldCgpLCAmdXJkdS5nZXQoKSB9OworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEF0b21pY1N0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgZm9yIChTdHJpbmcqIG1hdGNoV29yZCA6IG1hdGNo
V29yZHMpIHsKKyAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3JkLCBmYWxzZSkp
CisgICAgICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2Vp
Z2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsK
ICAgICB9Ci0KLSAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKIFZlY3RvcjxGb250VHJhaXRzTWFzaz4gRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWls
eShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFw
ZXIuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3
ICszMjgsNyBAQCB2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRQYWRkaW5nKGludCBwYWRkCiAKIHZv
aWQgSGFyZkJ1enpTaGFwZXI6OnNldEZvbnRGZWF0dXJlcygpCiB7Ci0gICAgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiA9IG1fZm9udC0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAg
Y29uc3QgYXV0byYgZGVzY3JpcHRpb24gPSBtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpOwogICAg
IGlmIChkZXNjcmlwdGlvbi5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKSB7CiAgICAgICAgIHN0
YXRpYyBoYl9mZWF0dXJlX3QgdmVydCA9IHsgSGFyZkJ1enpGYWNlOjp2ZXJ0VGFnLCAxLCAwLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpIH07CiAgICAgICAgIHN0YXRpYyBoYl9mZWF0dXJlX3Qg
dnJ0MiA9IHsgSGFyZkJ1enpGYWNlOjp2cnQyVGFnLCAxLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oLTEpIH07CkBAIC0zMzgsMTUgKzMzOCwxNSBAQCB2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRG
b250RmVhdHVyZXMoKQogCiAgICAgaGJfZmVhdHVyZV90IGtlcm5pbmcgPSB7IEhhcmZCdXp6RmFj
ZTo6a2VyblRhZywgMCwgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKSB9OwogICAgIHN3aXRj
aCAoZGVzY3JpcHRpb24ua2VybmluZygpKSB7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5v
cm1hbEtlcm5pbmc6CisgICAgY2FzZSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxLZXJu
aW5nOgogICAgICAgICBrZXJuaW5nLnZhbHVlID0gMTsKICAgICAgICAgbV9mZWF0dXJlcy5hcHBl
bmQoa2VybmluZyk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpO
b25lS2VybmluZzoKKyAgICBjYXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vbmVLZXJuaW5n
OgogICAgICAgICBrZXJuaW5nLnZhbHVlID0gMDsKICAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQo
a2VybmluZyk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpBdXRv
S2VybmluZzoKKyAgICBjYXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOgog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCShyZXZpc2lvbiAx
ODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBpbnQg
YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoQ29udHJvbFBhcnQpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdmlydHVhbCBPcHRpb25hbDxGb250RGVzY3JpcHRpb24+IGNvbnRyb2xGb250KENvbnRy
b2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gY29udHJv
bEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgem9vbUZhY3Rvcikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgCiAgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXpl
KENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aFNpemUmLCBmbG9h
dCB6b29tRmFjdG9yKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWlu
aW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1RoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9UaGVtZU1hYy5tbQkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1RoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MDAsMTEgKzcwMCwxMSBAQCBp
bnQgVGhlbWVNYWM6OmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50CiAgICAgcmV0dXJuIFRoZW1l
OjpiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChwYXJ0KTsKIH0KIAotT3B0aW9uYWw8Rm9udERl
c2NyaXB0aW9uPiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ29udHJvbFBhcnQgcGFydCwgY29uc3Qg
Rm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitPcHRpb25hbDxGb250
Q2FzY2FkZURlc2NyaXB0aW9uPiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAg
ICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6IHsKLSAgICAg
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgICAgICAgICBGb250
Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKIAogICAgICAgICAgICAgTlNGb250KiBu
c0ZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZv
ckNvbnRyb2xTaXplOmNvbnRyb2xTaXplRm9yRm9udChmb250KV1dOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAJKHJldmlzaW9uIDE4OTgyMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIEZvbnRDYXNjYWRlIGRyYWdMYWJlbEZv
bnQoaW50IHNpegogICAgIG1ldHJpY3MuY2JTaXplID0gc2l6ZW9mKG1ldHJpY3MpOwogICAgIFN5
c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBtZXRyaWNzLmNiU2l6
ZSwgJm1ldHJpY3MsIDApOwogCi0gICAgRm9udERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOworICAg
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZGVzY3JpcHRpb247CiAgICAgZGVzY3JpcHRpb24uc2V0
V2VpZ2h0KGJvbGQgPyBGb250V2VpZ2h0Qm9sZCA6IEZvbnRXZWlnaHROb3JtYWwpOwogICAgIGRl
c2NyaXB0aW9uLnNldE9uZUZhbWlseShtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5sZkZhY2VOYW1l
KTsKICAgICBkZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKChmbG9hdClzaXplKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lv
biAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQxLDcgKzM0MSw3IEBAIHZvaWQgUG9wdXBNZW51V2luOjpj
YWxjdWxhdGVQb3NpdGlvbkFuZFMKIAogICAgICAgICBGb250Q2FzY2FkZSBpdGVtRm9udCA9IGNs
aWVudCgpLT5tZW51U3R5bGUoKS5mb250KCk7CiAgICAgICAgIGlmIChjbGllbnQoKS0+aXRlbUlz
TGFiZWwoaSkpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRlbUZvbnQuZm9u
dERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBhdXRvIGQgPSBpdGVtRm9udC5mb250RGVzY3Jp
cHRpb24oKTsKICAgICAgICAgICAgIGQuc2V0V2VpZ2h0KGQuYm9sZGVyV2VpZ2h0KCkpOwogICAg
ICAgICAgICAgaXRlbUZvbnQgPSBGb250Q2FzY2FkZShkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5n
KCksIGl0ZW1Gb250LndvcmRTcGFjaW5nKCkpOwogICAgICAgICAgICAgaXRlbUZvbnQudXBkYXRl
KG1fcG9wdXBDbGllbnQtPmZvbnRTZWxlY3RvcigpKTsKQEAgLTY0Nyw3ICs2NDcsNyBAQCB2b2lk
IFBvcHVwTWVudVdpbjo6cGFpbnQoY29uc3QgSW50UmVjdCYgCiAgICAgICAgIAogICAgICAgICBG
b250Q2FzY2FkZSBpdGVtRm9udCA9IGNsaWVudCgpLT5tZW51U3R5bGUoKS5mb250KCk7CiAgICAg
ICAgIGlmIChjbGllbnQoKS0+aXRlbUlzTGFiZWwoaW5kZXgpKSB7Ci0gICAgICAgICAgICBGb250
RGVzY3JpcHRpb24gZCA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAg
YXV0byBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICBkLnNldFdl
aWdodChkLmJvbGRlcldlaWdodCgpKTsKICAgICAgICAgICAgIGl0ZW1Gb250ID0gRm9udENhc2Nh
ZGUoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsK
ICAgICAgICAgICAgIGl0ZW1Gb250LnVwZGF0ZShtX3BvcHVwQ2xpZW50LT5mb250U2VsZWN0b3Io
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlz
aW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5ODUsNyArMjk4NSw3IEBAIHN0YXRpYyBSZW5kZXJTdHlsZSYg
c3R5bGVGb3JGaXJzdExldHRlcigKICAgICAgICAgCiAgICAgICAgIC8vIFNldCB0aGUgZm9udCB0
byBiZSBvbmUgbGluZSB0b28gYmlnIGFuZCB0aGVuIHJhdGNoZXQgYmFjayB0byBnZXQgdG8gYSBw
cmVjaXNlIGZpdC4gV2UgY2FuJ3QganVzdCBzZXQgdGhlIGRlc2lyZWQgZm9udCBzaXplIGJhc2Vk
IG9mZiBmb250IGhlaWdodCBtZXRyaWNzCiAgICAgICAgIC8vIGJlY2F1c2UgbWFueSBmb250cyBi
YWtlIGFzY2VudCBpbnRvIHRoZSBmb250IG1ldHJpY3MuIFRoZXJlZm9yZSB3ZSBoYXZlIHRvIGxv
b2sgYXQgYWN0dWFsIG1lYXN1cmVkIGNhcCBoZWlnaHQgdmFsdWVzIGluIG9yZGVyIHRvIGtub3cg
d2hlbiB3ZSBoYXZlIGEgZ29vZCBmaXQuCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250
RGVzY3JpcHRpb24gPSBwc2V1ZG9TdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGF1
dG8gbmV3Rm9udERlc2NyaXB0aW9uID0gcHNldWRvU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwog
ICAgICAgICBmbG9hdCBjYXBSYXRpbyA9IHBzZXVkb1N0eWxlLT5mb250TWV0cmljcygpLmZsb2F0
Q2FwSGVpZ2h0KCkgLyBwc2V1ZG9TdHlsZS0+Zm9udFNpemUoKTsKICAgICAgICAgZmxvYXQgc3Rh
cnRpbmdGb250U2l6ZSA9ICgocHNldWRvU3R5bGUtPmluaXRpYWxMZXR0ZXJIZWlnaHQoKSAtIDEp
ICogbGluZUhlaWdodCArIHBhcmFncmFwaC0+c3R5bGUoKS5mb250TWV0cmljcygpLmNhcEhlaWdo
dCgpKSAvIGNhcFJhdGlvOwogICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVk
U2l6ZShzdGFydGluZ0ZvbnRTaXplKTsKQEAgLTI5OTYsNyArMjk5Niw3IEBAIHN0YXRpYyBSZW5k
ZXJTdHlsZSYgc3R5bGVGb3JGaXJzdExldHRlcigKICAgICAgICAgaW50IGRlc2lyZWRDYXBIZWln
aHQgPSAocHNldWRvU3R5bGUtPmluaXRpYWxMZXR0ZXJIZWlnaHQoKSAtIDEpICogbGluZUhlaWdo
dCArIHBhcmFncmFwaC0+c3R5bGUoKS5mb250TWV0cmljcygpLmNhcEhlaWdodCgpOwogICAgICAg
ICBpbnQgYWN0dWFsQ2FwSGVpZ2h0ID0gcHNldWRvU3R5bGUtPmZvbnRNZXRyaWNzKCkuY2FwSGVp
Z2h0KCk7CiAgICAgICAgIHdoaWxlIChhY3R1YWxDYXBIZWlnaHQgPiBkZXNpcmVkQ2FwSGVpZ2h0
KSB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uID0gcHNl
dWRvU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgYXV0byBuZXdGb250RGVz
Y3JpcHRpb24gPSBwc2V1ZG9TdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICBu
ZXdGb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3Bl
Y2lmaWVkU2l6ZSgpIC0gMSk7CiAgICAgICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAtMSk7CiAgICAgICAg
ICAgICBwc2V1ZG9TdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAko
cmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MjQsNyArMzcyNCw3IEBAIHZvaWQgUmVuZGVy
QmxvY2tGbG93OjphZGp1c3RDb21wdXRlZEZvbnQKICAgICAgICAgaWYgKGlzVmlzaWJsZVJlbmRl
clRleHQoZGVzY2VuZGVudCkgJiYgcmVzaXplVGV4dFBlcm1pdHRlZChkZXNjZW5kZW50KSkgewog
ICAgICAgICAgICAgUmVuZGVyVGV4dCYgdGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KCpkZXNj
ZW5kZW50KTsKICAgICAgICAgICAgIFJlbmRlclN0eWxlJiBvbGRTdHlsZSA9IHRleHQuc3R5bGUo
KTsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBvbGRTdHls
ZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0g
b2xkU3R5bGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICBmbG9hdCBzcGVjaWZpZWRT
aXplID0gZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKTsKICAgICAgICAgICAgIGZsb2F0
IHNjYWxlZFNpemUgPSByb3VuZGYoc3BlY2lmaWVkU2l6ZSAqIHNjYWxlKTsKICAgICAgICAgICAg
IGlmIChzY2FsZWRTaXplID4gMCAmJiBzY2FsZWRTaXplIDwgbWluRm9udFNpemUpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAkocmV2
aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIFJlbmRlckNvbWJp
bmVUZXh0Ojpjb21iaW5lVGV4dCgpCiAgICAgaWYgKHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRm9udERlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uID0gb3JpZ2luYWxGb250KCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBkZXNjcmlw
dGlvbiA9IG9yaWdpbmFsRm9udCgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGZsb2F0IGVtV2lk
dGggPSBkZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIHRleHRDb21iaW5lTWFyZ2luOwogICAg
IGJvb2wgc2hvdWxkVXBkYXRlRm9udCA9IGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDE4OTgy
MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1OSw3ICszNTksNyBAQCBib29sIFJlbmRlckVtYmVkZGVkT2Jq
ZWN0OjpnZXRSZXBsYWNlbWVuCiAgICAgY29udGVudFJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwog
ICAgIGNvbnRlbnRSZWN0Lm1vdmVCeShyb3VuZGVkSW50UG9pbnQoYWNjdW11bGF0ZWRPZmZzZXQp
KTsKIAotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRU
aGVtZSgpLT5zeXN0ZW1Gb250KENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sLCBmb250RGVzY3Jp
cHRpb24pOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodEJvbGQpOwog
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKGZyYW1lKCkuc2V0dGluZ3MoKS5m
b250UmVuZGVyaW5nTW9kZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGdWxsU2NyZWVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnVsbFNjcmVlbi5jcHAJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyAr
ODUsNyBAQCBzdGF0aWMgUmVmPFJlbmRlclN0eWxlPiBjcmVhdGVGdWxsU2NyZWVuCiAgICAgLy8g
Q3JlYXRlIGEgc3RhY2tpbmcgY29udGV4dDoKICAgICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0
WkluZGV4KElOVF9NQVgpOwogCi0gICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldEZvbnREZXNj
cmlwdGlvbihGb250RGVzY3JpcHRpb24oKSk7CisgICAgZnVsbHNjcmVlblN0eWxlLmdldCgpLnNl
dEZvbnREZXNjcmlwdGlvbih7IH0pOwogICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5mb250Q2Fz
Y2FkZSgpLnVwZGF0ZShudWxscHRyKTsKIAogICAgIGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5zZXRE
aXNwbGF5KEZMRVgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksOSArMTE5LDkgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgICAgICAgICAgdGV4dCA9
IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudGV4dEluZGVudGVkVG9SZXNw
ZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoaXM8SFRNTE9wdEdyb3VwRWxl
bWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgdGV4dCA9IGRvd25jYXN0PEhUTUxP
cHRHcm91cEVsZW1lbnQ+KCplbGVtZW50KS5ncm91cExhYmVsVGV4dCgpOwotICAgICAgICAgICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAg
ICAgICAgICAgICAgZC5zZXRXZWlnaHQoZC5ib2xkZXJXZWlnaHQoKSk7Ci0gICAgICAgICAgICAg
ICAgaXRlbUZvbnQgPSBGb250Q2FzY2FkZShkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0
ZW1Gb250LndvcmRTcGFjaW5nKCkpOworICAgICAgICAgICAgICAgIGF1dG8gZGVzY3JpcHRpb24g
PSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlv
bi5zZXRXZWlnaHQoZGVzY3JpcHRpb24uYm9sZGVyV2VpZ2h0KCkpOworICAgICAgICAgICAgICAg
IGl0ZW1Gb250ID0gRm9udENhc2NhZGUoZGVzY3JpcHRpb24sIGl0ZW1Gb250LmxldHRlclNwYWNp
bmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAgICAgICAgICAgaXRlbUZvbnQu
dXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgIH0KIApAQCAt
NDA1LDkgKzQwNSw5IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgK
ICAgICByLm1vdmUoaXRlbU9mZnNldEZvckFsaWdubWVudCh0ZXh0UnVuLCAmaXRlbVN0eWxlLCBp
dGVtRm9udCwgcikpOwogCiAgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCpsaXN0SXRl
bUVsZW1lbnQpKSB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRlbUZvbnQuZm9udERl
c2NyaXB0aW9uKCk7Ci0gICAgICAgIGQuc2V0V2VpZ2h0KGQuYm9sZGVyV2VpZ2h0KCkpOwotICAg
ICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0ZW1Gb250LmxldHRlclNwYWNpbmcoKSwg
aXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgICAgIGF1dG8gZGVzY3JpcHRpb24gPSBpdGVt
Rm9udC5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZGVzY3JpcHRpb24uc2V0V2VpZ2h0KGRl
c2NyaXB0aW9uLmJvbGRlcldlaWdodCgpKTsKKyAgICAgICAgaXRlbUZvbnQgPSBGb250Q2FzY2Fk
ZShkZXNjcmlwdGlvbiwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3Bh
Y2luZygpKTsKICAgICAgICAgaXRlbUZvbnQudXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3Rv
cigpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDcgKzIzMCw3IEBAIGJvb2wgUmVuZGVyVGV4
dDo6aXNUZXh0RnJhZ21lbnQoKSBjb25zdAogYm9vbCBSZW5kZXJUZXh0Ojpjb21wdXRlVXNlQmFj
a3NsYXNoQXNZZW5TeW1ib2woKSBjb25zdAogewogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSA9IHRoaXMtPnN0eWxlKCk7Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24gPSBzdHlsZS5mb250Q2FzY2FkZSgpLmZvbnREZXNjcmlwdGlvbigpOworICAgIGNvbnN0
IGF1dG8mIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGlm
IChzdHlsZS5mb250Q2FzY2FkZSgpLnVzZUJhY2tzbGFzaEFzWWVuU3ltYm9sKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIGlmIChmb250RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250KCkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9u
IDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNTksMTggKzExNTksMTggQEAgdm9pZCBSZW5kZXJUaGVtZTo6cGxh
dGZvcm1Db2xvcnNEaWRDaGFuZwogICAgIFBhZ2U6OnVwZGF0ZVN0eWxlRm9yQWxsUGFnZXNBZnRl
ckdsb2JhbENoYW5nZUluRW52aXJvbm1lbnQoKTsKIH0KIAotRm9udERlc2NyaXB0aW9uJiBSZW5k
ZXJUaGVtZTo6Y2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgc3lzdGVtRm9u
dElEKSBjb25zdAorRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgUmVuZGVyVGhlbWU6OmNhY2hlZFN5
c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCkgY29uc3QKIHsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBjYXB0aW9uOwotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IGljb247Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gbWVudTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBtZXNzYWdlQm94OwotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxGb250RGVzY3JpcHRpb24+IHNtYWxsQ2FwdGlvbjsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBzdGF0dXNCYXI7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEZvbnREZXNjcmlwdGlvbj4gd2Via2l0TWluaUNvbnRyb2w7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gd2Via2l0U21hbGxDb250cm9sOwotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHdlYmtpdENvbnRyb2w7Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gZGVmYXVsdERlc2NyaXB0aW9uOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBjYXB0aW9u
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBpY29u
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBtZW51
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBtZXNz
YWdlQm94OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9u
PiBzbWFsbENhcHRpb247CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24+IHN0YXR1c0JhcjsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2Nh
ZGVEZXNjcmlwdGlvbj4gd2Via2l0TWluaUNvbnRyb2w7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHdlYmtpdFNtYWxsQ29udHJvbDsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gd2Via2l0Q29udHJvbDsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gZGVmYXVs
dERlc2NyaXB0aW9uOwogCiAgICAgc3dpdGNoIChzeXN0ZW1Gb250SUQpIHsKICAgICBjYXNlIENT
U1ZhbHVlQ2FwdGlvbjoKQEAgLTExOTksNyArMTE5OSw3IEBAIEZvbnREZXNjcmlwdGlvbiYgUmVu
ZGVyVGhlbWU6OmNhY2hlZFN5c3QKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OnN5c3Rl
bUZvbnQoQ1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6c3lzdGVtRm9udChDU1NWYWx1ZUlEIHN5
c3RlbUZvbnRJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25z
dAogewogICAgIGZvbnREZXNjcmlwdGlvbiA9IGNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihz
eXN0ZW1Gb250SUQpOwogICAgIGlmIChmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAxODk4
MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJl
dEJsaW5rSW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiAwLjU7IH0KIAogICAgIC8vIFN5c3RlbSBm
b250cyBhbmQgY29sb3JzIGZvciBDU1MuCi0gICAgdm9pZCBzeXN0ZW1Gb250KENTU1ZhbHVlSUQs
IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OworICAgIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlE
LCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Q7CiAgICAgdmlydHVhbCBDb2xvciBzeXN0
ZW1Db2xvcihDU1NWYWx1ZUlEKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51
TGlzdFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdCB7IHJldHVybiAwOyB9CkBAIC0yNTUsOCArMjU1
LDggQEAgcHVibGljOgogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIEZvbnREZXNj
cmlwdGlvbiYgY2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgc3lzdGVtRm9u
dElEKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2Ny
aXB0aW9uKENTU1ZhbHVlSUQgc3lzdGVtRm9udElELCBGb250RGVzY3JpcHRpb24mKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBjYWNoZWRTeXN0ZW1Gb250
RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCBzeXN0ZW1G
b250SUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdCA9IDA7CiAKICAgICAvLyBUaGUg
cGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9yLgogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lRWZsLmNwcAkocmV2aXNpb24gMTg5ODIzKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lRWZsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAxOCw3ICsxMDE4LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6c2V0RGVmYXVsdEZvbnRT
aXplKAogICAgIGRlZmF1bHRGb250U2l6ZSA9IHNpemU7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVF
Zmw6OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OnVw
ZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgLy8gSXQgd2FzIGNhbGxl
ZCBieSBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZCB0byByZW5kZXIgYWx0ZXJu
YXRpdmUgc3RyaW5nLgogICAgIC8vIFRvIGF2b2lkIGNhaXJvX2Vycm9yIHdoaWxlIHJlbmRlcmlu
ZywgZm9udERlc2NyaXB0aW9uIHNob3VsZCBiZSBwYXNzZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVFZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVFZmwuaAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lRWZsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5
Miw3ICsxOTIsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIFN5c3RlbSBmb250cy4KLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVl
SUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCwgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQUxXQVlTX0lOTElORSBFY29yZV9F
dmFzKiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBtX2NhbnZhcy5nZXQoKTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgRXZhc19PYmplY3QqIGVkamUoKSBjb25zdCB7IHJldHVybiBtX2VkamUuZ2V0KCk7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcAko
cmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgZG91YmxlIGdl
dFNjcmVlbkRQSSgpCiAgICAgcmV0dXJuIGRwaTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6
dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6dXBkYXRl
Q2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBHdGtTZXR0aW5ncyogc2V0dGlu
Z3MgPSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKICAgICBpZiAoIXNldHRpbmdzKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmgJKHJldmlzaW9uIDE4
OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBT
eXN0ZW0gZm9udHMuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNj
cmlwdGlvbihDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVl
SUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKIAogcHVibGljOgog
I2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLmgJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw4IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRDb250ZW50U2l6ZUNh
dGVnb3J5KGNvbnN0IFN0cmluZyYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBGb250RGVz
Y3JpcHRpb24mIGNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHN5c3RlbUZv
bnRJRCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3Rl
bUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGNhY2hlZFN5c3RlbUZv
bnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1
ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJCb3gmKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xv
ciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTA3OCwyNSArMTA3OCwyNSBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpzaG91bGRIYXZlQ2Fwc0xv
Y2tJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Gb250RGVzY3JpcHRpb24mIFJlbmRlclRoZW1l
SU9TOjpjYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1ZUlEKSBjb25z
dAorRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgUmVuZGVyVGhlbWVJT1M6OmNhY2hlZFN5c3RlbUZv
bnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHZhbHVlSUQpIGNvbnN0CiB7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc3lzdGVtRm9udDsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBoZWFkbGluZUZvbnQ7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gYm9keUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc3ViaGVhZGxpbmVGb250OwotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IGZvb3Rub3RlRm9udDsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBjYXB0aW9uMUZvbnQ7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gY2FwdGlvbjJGb250OwotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHNob3J0SGVhZGxpbmVGb250OwotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHNob3J0Qm9keUZvbnQ7Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc2hvcnRTdWJoZWFkbGlu
ZUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc2hvcnRG
b290bm90ZUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4g
c2hvcnRDYXB0aW9uMUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlw
dGlvbj4gdGFsbEJvZHlGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uPiBzeXN0ZW1Gb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250
Q2FzY2FkZURlc2NyaXB0aW9uPiBoZWFkbGluZUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IGJvZHlGb250OworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBzdWJoZWFkbGluZUZvbnQ7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IGZvb3Rub3RlRm9udDsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gY2FwdGlv
bjFGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9u
PiBjYXB0aW9uMkZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24+IHNob3J0SGVhZGxpbmVGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxG
b250Q2FzY2FkZURlc2NyaXB0aW9uPiBzaG9ydEJvZHlGb250OworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiBzaG9ydFN1YmhlYWRsaW5lRm9udDsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gc2hvcnRGb290
bm90ZUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24+IHNob3J0Q2FwdGlvbjFGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uPiB0YWxsQm9keUZvbnQ7CiAjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPiA4MDIwMAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3Jp
cHRpb24+IHRpdGxlMUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlw
dGlvbj4gdGl0bGUyRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0
aW9uPiB0aXRsZTNGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURl
c2NyaXB0aW9uPiB0aXRsZTFGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uPiB0aXRsZTJGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxG
b250Q2FzY2FkZURlc2NyaXB0aW9uPiB0aXRsZTNGb250OwogI2VuZGlmCiAKICAgICBzdGF0aWMg
Q0ZTdHJpbmdSZWYgdXNlclRleHRTaXplID0gY29udGVudFNpemVDYXRlZ29yeSgpOwpAQCAtMTE1
OCw3ICsxMTU4LDcgQEAgRm9udERlc2NyaXB0aW9uJiBSZW5kZXJUaGVtZUlPUzo6Y2FjaGVkUwog
ICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERl
c2NyaXB0aW9uKENTU1ZhbHVlSUQgdmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250
RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JS
ZWY+IGZvbnREZXNjcmlwdG9yOwogICAgIENGU3RyaW5nUmVmIHRleHRTdHlsZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCShyZXZpc2lvbiAxODk4MjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5SZW5kZXJU
aGVtZU1hYygpOwogCiAgICAgLy8gU3lzdGVtIGZvbnRzLgotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9u
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZv
bnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Qg
b3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgLy8gTWVkaWEgY29udHJvbHMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9u
IDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzM5LDcgKzMzOSw3IEBAIHN0YXRpYyBGb250V2VpZ2h0IHRvRm9u
dFdlaWdodChOU0ludGVnZXIKICAgICByZXR1cm4gZm9udFdlaWdodHNbYXBwS2l0Rm9udFdlaWdo
dCAtIDFdOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250
RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCBjc3NWYWx1ZUlkLCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNhY2hlZFN5c3Rl
bUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQsIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBOU0ZvbnQqIGZvbnQ7CiAgICAg
Ly8gU3lzdGVtLWZvbnQtbmVzcyBjYW4ndCBiZSBlbmNhcHN1bGF0ZWQgYnkgc2ltcGx5IGEgZm9u
dCBuYW1lLiBJbnN0ZWFkLCB3ZSBtdXN0IHVzZSBhIHRva2VuCkBAIC04MjQsNyArODI0LDcgQEAg
dm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZyb21Gb250KFJlbgogCiB2b2lkIFJlbmRlclRo
ZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0CiB7Ci0gICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1
ZSk7CiAKICAgICBOU0ZvbnQqIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9u
dCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOmNvbnRyb2xTaXplXV07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAJKHJldmlzaW9u
IDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgZmxvYXQgc3lzdGVt
Rm9udFNpemVGb3JDb250cm9sU2l6CiAgICAgcmV0dXJuIHNpemVzW2NvbnRyb2xTaXplXTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0
aW9uKENTU1ZhbHVlSUQgdmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVz
Y3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgZmxvYXQgZm9udFNpemU7CiAgICAgc3dpdGNoICh2
YWx1ZUlEKSB7CkBAIC0zNjAsNyArMzYwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0
U2l6ZUZyb21Gb250KAogCiB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRGb250RnJvbUNvbnRy
b2xTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwg
TlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29uc3QKIHsKLSAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uOworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKIAogICAg
IGZsb2F0IGZvbnRTaXplID0gc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZShjb250cm9sU2l6
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmku
aAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lU2FmYXJpLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogCiBw
cm90ZWN0ZWQ6CiAgICAgLy8gU3lzdGVtIGZvbnRzLgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVD
YWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnRE
ZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVhcmFuY2UgdmFsdWUuCiAgICAg
dmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVXaW4uY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksNyAr
MzE5LDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVXaW46OnBsYXRmb3JtSW5hY3RpdmVTZQogICAgIHJl
dHVybiBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwogfQogCi1zdGF0
aWMgdm9pZCBmaWxsRm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBMT0dGT05UJiBsb2dGb250LCBmbG9hdCBmb250U2l6ZSkKK3N0YXRpYyB2b2lkIGZpbGxG
b250RGVzY3JpcHRpb24oRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBM
T0dGT05UJiBsb2dGb250LCBmbG9hdCBmb250U2l6ZSkKIHsgICAgCiAgICAgZm9udERlc2NyaXB0
aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVG
YW1pbHkoU3RyaW5nKGxvZ0ZvbnQubGZGYWNlTmFtZSkpOwpAQCAtMzI4LDcgKzMyOCw3IEBAIHN0
YXRpYyB2b2lkIGZpbGxGb250RGVzY3JpcHRpb24oRm9udERlc2MKICAgICBmb250RGVzY3JpcHRp
b24uc2V0SXNJdGFsaWMobG9nRm9udC5sZkl0YWxpYyk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVX
aW46OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHZhbHVlSUQs
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZVdpbjo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgdmFsdWVJ
RCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAg
IHN0YXRpYyBib29sIGluaXRpYWxpemVkOwogICAgIHN0YXRpYyBOT05DTElFTlRNRVRSSUNTIG5j
bTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCShyZXZp
c2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB+UmVuZGVyVGhlbWVXaW4oKTsKIAogICAgIC8vIFN5c3RlbSBmb250cy4KLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnRE
ZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDYWNo
ZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlv
biYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRl
clN0eWxlJikgY29uc3Q7CiAgICAgdm9pZCBjbG9zZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjEsNyArMTYxLDcgQEAgYm9vbCBUZXh0QXV0b1NpemluZ1ZhbHVlOjphZGp1c3ROb2RlU2l6
ZQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlID0gY2xvbmVSZW5kZXJTdHlsZVdpdGhTdGF0ZSh0ZXh0LT5zdHlsZSgpKTsK
LSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCk7CisgICAgICAgICAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21w
dXRlZFNpemUoYXZlcmFnZVNpemUpOwogICAgICAgICAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgc3R5bGUtPmZvbnRDYXNjYWRlKCku
dXBkYXRlKCZhdXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CkBAIC0y
MTQsNyArMjE0LDcgQEAgdm9pZCBUZXh0QXV0b1NpemluZ1ZhbHVlOjpyZXNldCgpCiAgICAgICAg
IGlmICghdGV4dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAvLyBSZXNldCB0aGUg
Zm9udCBzaXplIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBzaXplCi0gICAgICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSB0ZXh0LT5zdHlsZSgpLmZvbnREZXNjcmlw
dGlvbigpOworICAgICAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHRleHQtPnN0eWxlKCkuZm9u
dERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGZsb2F0IG9yaWdpbmFsU2l6ZSA9IGZvbnREZXNjcmlw
dGlvbi5zcGVjaWZpZWRTaXplKCk7CiAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24uY29tcHV0
ZWRTaXplKCkgIT0gb3JpZ2luYWxTaXplKSB7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKG9yaWdpbmFsU2l6ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmNwcAkocmV2aXNpb24g
MTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxU
b2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBSZW5kZXJNYXRo
TUxUb2tlbjo6dXBkYXRlU3R5bGUoKQogICAgIGlmICh0b2tlbkVsZW1lbnQuaGFzVGFnTmFtZShN
YXRoTUxOYW1lczo6bWlUYWcpKSB7CiAgICAgICAgIC8vIFRoaXMgdHJpZXMgdG8gZW11bGF0ZSB0
aGUgZGVmYXVsdCBtYXRodmFyaWFudCB2YWx1ZSBvbiA8bWk+IHVzaW5nIHRoZSBDU1MgZm9udC1z
dHlsZSBwcm9wZXJ0eS4KICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJldmlzZWQg
d2hlbiBtYXRodmFyaWFudCBpcyBpbXBsZW1lbnRlZCAoaHR0cDovL3drYnVnLzg1NzM1KSBhbmQg
d2hlbiBmb250cyB3aXRoIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scyBjaGFyYWN0
ZXJzIGFyZSBtb3JlIHBvcHVsYXIuCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24obmV3U3R5bGUuZ2V0KCkuZm9udERlc2NyaXB0aW9uKCkpOworICAgICAgICBhdXRvIGZv
bnREZXNjcmlwdGlvbiA9IG5ld1N0eWxlLmdldCgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAg
ICBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9IG5ld1N0eWxlLmdldCgpLmZvbnRDYXNjYWRl
KCkuZm9udFNlbGVjdG9yKCk7CiAgICAgICAgIGlmICghbV9jb250YWluc0VsZW1lbnQgJiYgZWxl
bWVudCgpLnRleHRDb250ZW50KCkuc3RyaXBXaGl0ZVNwYWNlKCkuc2ltcGxpZnlXaGl0ZVNwYWNl
KCkubGVuZ3RoKCkgPT0gMSAmJiAhdG9rZW5FbGVtZW50Lmhhc0F0dHJpYnV0ZShtYXRodmFyaWFu
dEF0dHIpKQogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhGb250SXRhbGlj
T24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAxLDcgKzE0MDEsNyBAQCBj
b25zdCBBbmltYXRpb24qIFJlbmRlclN0eWxlOjp0cmFuc2l0aW9uCiAKIGNvbnN0IEZvbnRDYXNj
YWRlJiBSZW5kZXJTdHlsZTo6Zm9udENhc2NhZGUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQt
PmZvbnRDYXNjYWRlOyB9CiBjb25zdCBGb250TWV0cmljcyYgUmVuZGVyU3R5bGU6OmZvbnRNZXRy
aWNzKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5mb250TWV0cmljcygp
OyB9Ci1jb25zdCBGb250RGVzY3JpcHRpb24mIFJlbmRlclN0eWxlOjpmb250RGVzY3JpcHRpb24o
KSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigp
OyB9Citjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBSZW5kZXJTdHlsZTo6Zm9udERlc2Ny
aXB0aW9uKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5mb250RGVzY3Jp
cHRpb24oKTsgfQogZmxvYXQgUmVuZGVyU3R5bGU6OnNwZWNpZmllZEZvbnRTaXplKCkgY29uc3Qg
eyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOyB9CiBmbG9hdCBSZW5k
ZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlv
bigpLmNvbXB1dGVkU2l6ZSgpOyB9CiBpbnQgUmVuZGVyU3R5bGU6OmZvbnRTaXplKCkgY29uc3Qg
eyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5waXhlbFNpemUoKTsgfQpAQCAtMTQwOSw3
ICsxNDA5LDcgQEAgaW50IFJlbmRlclN0eWxlOjpmb250U2l6ZSgpIGNvbnN0IHsgcmV0dQogY29u
c3QgTGVuZ3RoJiBSZW5kZXJTdHlsZTo6d29yZFNwYWNpbmcoKSBjb25zdCB7IHJldHVybiByYXJl
SW5oZXJpdGVkRGF0YS0+d29yZFNwYWNpbmc7IH0KIGZsb2F0IFJlbmRlclN0eWxlOjpsZXR0ZXJT
cGFjaW5nKCkgY29uc3QgeyByZXR1cm4gaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5sZXR0ZXJTcGFj
aW5nKCk7IH0KIAotYm9vbCBSZW5kZXJTdHlsZTo6c2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgdikKK2Jvb2wgUmVuZGVyU3R5bGU6OnNldEZvbnREZXNjcmlwdGlvbihj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiB2KQogewogICAgIGlmIChpbmhlcml0ZWQtPmZv
bnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigpICE9IHYpIHsKICAgICAgICAgaW5oZXJpdGVkLmFj
Y2VzcygpLT5mb250Q2FzY2FkZSA9IEZvbnRDYXNjYWRlKHYsIGluaGVyaXRlZC0+Zm9udENhc2Nh
ZGUubGV0dGVyU3BhY2luZygpLCBpbmhlcml0ZWQtPmZvbnRDYXNjYWRlLndvcmRTcGFjaW5nKCkp
OwpAQCAtMTQ5NCwxOSArMTQ5NCwxOSBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRGb250U2l6ZShm
bG9hdCBzaXplCiAgICAgICAgIHNpemUgPSBzdGQ6Om1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXpl
LCBzaXplKTsKIAogICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3RvciA9IGZvbnRD
YXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7Ci0gICAgRm9udERlc2NyaXB0aW9uIGRlc2MoZm9udERl
c2NyaXB0aW9uKCkpOwotICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICBkZXNj
LnNldENvbXB1dGVkU2l6ZShzaXplKTsKKyAgICBhdXRvIGRlc2NyaXB0aW9uID0gZm9udERlc2Ny
aXB0aW9uKCk7CisgICAgZGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAgICBk
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoc2l6ZSk7CiAKICNpZiBFTkFCTEUoVEVYVF9BVVRP
U0laSU5HKQogICAgIGZsb2F0IG11bHRpcGxpZXIgPSB0ZXh0QXV0b3NpemluZ011bHRpcGxpZXIo
KTsKICAgICBpZiAobXVsdGlwbGllciA+IDEpIHsKICAgICAgICAgZmxvYXQgYXV0b3NpemVkRm9u
dFNpemUgPSBUZXh0QXV0b3NpemVyOjpjb21wdXRlQXV0b3NpemVkRm9udFNpemUoc2l6ZSwgbXVs
dGlwbGllcik7Ci0gICAgICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKG1pbihtYXhpbXVtQWxsb3dl
ZEZvbnRTaXplLCBhdXRvc2l6ZWRGb250U2l6ZSkpOworICAgICAgICBkZXNjcmlwdGlvbi5zZXRD
b21wdXRlZFNpemUobWluKG1heGltdW1BbGxvd2VkRm9udFNpemUsIGF1dG9zaXplZEZvbnRTaXpl
KSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBzZXRGb250RGVzY3JpcHRpb24oZGVzYyk7CisgICAg
c2V0Rm9udERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKICAgICBmb250Q2FzY2FkZSgpLnVwZGF0
ZShjdXJyZW50Rm9udFNlbGVjdG9yKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OTksNyArNjk5LDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udENh
c2NhZGUmIGZvbnRDYXNjYWRlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9u
dE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25z
dDsKICAgICBmbG9hdCBzcGVjaWZpZWRGb250U2l6ZSgpIGNvbnN0OwogICAgIGZsb2F0IGNvbXB1
dGVkRm9udFNpemUoKSBjb25zdDsKICAgICBpbnQgZm9udFNpemUoKSBjb25zdDsKQEAgLTEzMzQs
NyArMTMzNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENsZWFyKEVDbGVhciB2KSB7IG5vbmlu
aGVyaXRlZF9mbGFncy5zZXRDbGVhcih2KTsgfQogICAgIHZvaWQgc2V0VGFibGVMYXlvdXQoRVRh
YmxlTGF5b3V0IHYpIHsgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldFRhYmxlTGF5b3V0KHYpOyB9CiAK
LSAgICBib29sIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKyAg
ICBib29sIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJik7
CiAgICAgLy8gT25seSB1c2VkIGZvciBibGVuZGluZyBmb250IHNpemVzIHdoZW4gYW5pbWF0aW5n
LCBmb3IgTWF0aE1MIGFub255bW91cyBibG9ja3MsIGFuZCBmb3IgdGV4dCBhdXRvc2l6aW5nLgog
ICAgIHZvaWQgc2V0Rm9udFNpemUoZmxvYXQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDE4
OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIFJlbmRlclNWR0lu
bGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpKTsK
KyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpOwogCiAg
ICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gYmV0dGVyIGhhbmRsZSB0aGUgY2FzZSB3aGVuIHdlIGNv
bXB1dGUgdmVyeSBzbWFsbCBmb250cyBiZWxvdyAoYmVsb3cgMXB0KS4KICAgICBmb250RGVzY3Jp
cHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmll
ZFNpemVGb3JTVkdJbmxpbmVUZXh0KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSwgZm9u
dERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNjYWxpbmdGYWN0b3IsIHJlbmRlcmVyLmRv
Y3VtZW50KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxODk4MjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQxLDcgKzM0MSw3IEBAIEdseXBoRGF0YSBTVkdU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2wKIAogICAgIC8vIFNWRyBmb250IGNvbnRleHQgc2Vu
c2l0aXZlIHNlbGVjdGlvbiBmYWlsZWQgYW5kIHRoZXJlIGlzIG5vIGRlZmluZWQgbWlzc2luZyBn
bHlwaC4gRHJvcCBkb3duIHRvIGEgZGVmYXVsdCBmb250LgogICAgIC8vIFRoZSBiZWhhdmlvciBk
b2VzIG5vdCBzZWVtIHRvIGJlIHNwZWNpZmllZC4gRm9yIHNpbXBsaWNpdHkgd2UgZG9uJ3QgdHJ5
IHRvIHJlc29sdmUgZm9udCBmYWxsYmFja3MgY29udGV4dC1zZW5zaXRpdmVseS4KLSAgICBGb250
RGVzY3JpcHRpb24gZmFsbGJhY2tEZXNjcmlwdGlvbiA9IGZvbnQuZm9udERlc2NyaXB0aW9uKCk7
CisgICAgYXV0byBmYWxsYmFja0Rlc2NyaXB0aW9uID0gZm9udC5mb250RGVzY3JpcHRpb24oKTsK
ICAgICBmYWxsYmFja0Rlc2NyaXB0aW9uLnNldEZhbWlsaWVzKFZlY3RvcjxBdG9taWNTdHJpbmc+
IHsgc2Fuc1NlcmlmRmFtaWx5IH0pOwogICAgIEZvbnRDYXNjYWRlIGZhbGxiYWNrRm9udChmYWxs
YmFja0Rlc2NyaXB0aW9uLCBmb250LmxldHRlclNwYWNpbmcoKSwgZm9udC53b3JkU3BhY2luZygp
KTsKICAgICBmYWxsYmFja0ZvbnQudXBkYXRlKGZvbnQuZm9udFNlbGVjdG9yKCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAko
cmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9y
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIFJlZjxSZW5kZXJT
dHlsZT4gcmVzb2x2ZUZvckRvY3VtZW50KGNvbnMKICAgICBkb2N1bWVudFN0eWxlLmdldCgpLnNl
dFJUTE9yZGVyaW5nKGRvY3VtZW50LnZpc3VhbGx5T3JkZXJlZCgpID8gVmlzdWFsT3JkZXIgOiBM
b2dpY2FsT3JkZXIpOwogICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuc2V0Wm9vbSghZG9jdW1lbnQu
cHJpbnRpbmcoKSA/IHJlbmRlclZpZXcuZnJhbWUoKS5wYWdlWm9vbUZhY3RvcigpIDogMSk7CiAg
ICAgZG9jdW1lbnRTdHlsZS5nZXQoKS5zZXRQYWdlU2NhbGVUcmFuc2Zvcm0ocmVuZGVyVmlldy5m
cmFtZSgpLmZyYW1lU2NhbGVGYWN0b3IoKSk7Ci0gICAgRm9udERlc2NyaXB0aW9uIGRvY3VtZW50
Rm9udERlc2NyaXB0aW9uID0gZG9jdW1lbnRTdHlsZS5nZXQoKS5mb250RGVzY3JpcHRpb24oKTsK
KyAgICBhdXRvIGRvY3VtZW50Rm9udERlc2NyaXB0aW9uID0gZG9jdW1lbnRTdHlsZS5nZXQoKS5m
b250RGVzY3JpcHRpb24oKTsKICAgICBkb2N1bWVudEZvbnREZXNjcmlwdGlvbi5zZXRMb2NhbGUo
ZG9jdW1lbnQuY29udGVudExhbmd1YWdlKCkpOwogICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuc2V0
Rm9udERlc2NyaXB0aW9uKFdURjo6bW92ZShkb2N1bWVudEZvbnREZXNjcmlwdGlvbikpOwogCkBA
IC05OCw3ICs5OCw3IEBAIFJlZjxSZW5kZXJTdHlsZT4gcmVzb2x2ZUZvckRvY3VtZW50KGNvbnMK
IAogICAgIGNvbnN0IFNldHRpbmdzJiBzZXR0aW5ncyA9IHJlbmRlclZpZXcuZnJhbWUoKS5zZXR0
aW5ncygpOwogCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBGb250
Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24u
c2V0TG9jYWxlKGRvY3VtZW50LmNvbnRlbnRMYW5ndWFnZSgpKTsKICAgICBmb250RGVzY3JpcHRp
b24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy5mb250UmVuZGVyaW5nTW9kZSgpKTsKICAgICBm
b250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KHN0YW5kYXJkRmFtaWx5KTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gMTg5ODIzKQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNDkxNSwxMyArNDkxNSwxMiBAQCAtIChOU0ZvbnQgKilfb3JpZ2luYWxGb250QgogICAgIHJl
dHVybiBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGZvbnRXaXRoRmFtaWx5OkAi
VGltZXMiIHRyYWl0czpOU0ZvbnRJdGFsaWNUcmFpdCB3ZWlnaHQ6U1RBTkRBUkRfQk9MRF9XRUlH
SFQgc2l6ZToxMi4wZl07CiB9CiAKLXN0YXRpYyBOU1N0cmluZyAqZm9udE5hbWVGb3JEZXNjcmlw
dGlvbihOU1N0cmluZyAqZmFtaWx5TmFtZSwgQk9PTCBpdGFsaWMsIEJPT0wgYm9sZCwgaW50IHBv
aW50U2l6ZSkKK3N0YXRpYyBOU1N0cmluZyAqZm9udE5hbWVGb3JEZXNjcmlwdGlvbihOU1N0cmlu
ZyAqZmFtaWx5TmFtZSwgQk9PTCBpdGFsaWMsIEJPT0wgYm9sZCkKIHsKICAgICAvLyBGaW5kIHRo
ZSBmb250IHRoZSBzYW1lIHdheSB0aGUgcmVuZGVyaW5nIGNvZGUgd291bGQgbGF0ZXIgaWYgaXQg
ZW5jb3VudGVyZWQgdGhpcyBDU1MuCiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
bjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoaXRhbGljKTsKICAgICBmb250RGVz
Y3JpcHRpb24uc2V0V2VpZ2h0KGJvbGQgPyBGb250V2VpZ2h0OTAwIDogRm9udFdlaWdodDUwMCk7
Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUocG9pbnRTaXplKTsKICAgICBS
ZWZQdHI8Rm9udD4gZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvckZhbWlseShm
b250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwogICAgIHJldHVybiBbZm9udC0+cGxhdGZvcm1E
YXRhKCkubnNGb250KCkgZm9udE5hbWVdOwogfQpAQCAtNDk2Miw3ICs0OTYxLDcgQEAgLSAodm9p
ZClfYWRkVG9TdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdAogICAgICAgICAvLyB0aGUgUG9zdHNj
cmlwdCBuYW1lLgogICAgICAgICAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgZm9udCB3aXRoIHRoZSBz
YW1lIFBvc3RzY3JpcHQgbmFtZSwgdGhlbiB3ZSdsbCBoYXZlIHRvIHVzZSB0aGUKICAgICAgICAg
Ly8gUG9zdHNjcmlwdCBuYW1lIHRvIG1ha2UgdGhlIENTUyBzcGVjaWZpYyBlbm91Z2guCi0gICAg
ICAgIGlmICghW2ZvbnROYW1lRm9yRGVzY3JpcHRpb24oYUZhbWlseU5hbWUsIGFJc0l0YWxpYywg
YUlzQm9sZCwgYVBvaW50U2l6ZSkgaXNFcXVhbFRvU3RyaW5nOlthIGZvbnROYW1lXV0pCisgICAg
ICAgIGlmICghW2ZvbnROYW1lRm9yRGVzY3JpcHRpb24oYUZhbWlseU5hbWUsIGFJc0l0YWxpYywg
YUlzQm9sZCkgaXNFcXVhbFRvU3RyaW5nOlthIGZvbnROYW1lXV0pCiAgICAgICAgICAgICBmYW1p
bHlOYW1lRm9yQ1NTID0gW2EgZm9udE5hbWVdOwogCiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIG1v
cmUgc29waGlzdGljYXRlZCBlc2NhcGluZyBjb2RlIGlmIHdlIHdhbnQgdG8gaGFuZGxlIGZhbWls
eSBuYW1lcwpJbmRleDogU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNwcAkocmV2aXNpb24g
MTg5ODIzKQorKysgU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw3ICs2Niw2IEBAIHVzaW5nIFdURjo6QXRvbWljU3RyaW5nOwogdXNpbmcg
V2ViQ29yZTo6QlN0cmluZzsKIHVzaW5nIFdlYkNvcmU6OkVsZW1lbnQ7CiB1c2luZyBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlOwotdXNpbmcgV2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uOwogdXNpbmcg
V2ViQ29yZTo6RnJhbWU7CiB1c2luZyBXZWJDb3JlOjpJbnRSZWN0OwogdXNpbmcgV1RGOjpTdHJp
bmc7CkBAIC0xMjY3LDcgKzEyNjYsNyBAQCBIUkVTVUxUIERPTUVsZW1lbnQ6OmZvbnQoX091dF8g
V2ViRm9udERlCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAot
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSByZW5kZXJlci0+c3R5bGUoKS5m
b250Q2FzY2FkZSgpLmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9u
ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5mb250RGVzY3JpcHRpb24oKTsKICAg
ICBBdG9taWNTdHJpbmcgZmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7CiAK
ICAgICAvLyBGSVhNRTogVGhpcyBsZWFrcy4gRGVsZXRlIHRoaXMgd2hvbGUgZnVuY3Rpb24gdG8g
Z2V0IHJpZCBvZiB0aGUgbGVhay4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0Z1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2Vi
S2l0L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTA1LDcgKzUwNSw3IEBAIHZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6ZHJhdygpCiAg
ICAgbV90aW1lU2xpZGVyLmRyYXcoY29udGV4dCk7CiAKICAgICAvLyBEcmF3IHRoZSB0ZXh0IHN0
cmluZ3MKLSAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0
aW9uIGRlc2M7CiAKICAgICBOT05DTElFTlRNRVRSSUNTIG1ldHJpY3M7CiAgICAgbWV0cmljcy5j
YlNpemUgPSBzaXplb2YobWV0cmljcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRH
cmFwaGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViS2l0R3JhcGhp
Y3MuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRHcmFw
aGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIEZvbnRDYXNj
YWRlIG1ha2VGb250KGNvbnN0IFdlYkZvbgogCiAgICAgU3RyaW5nIGZvbnRGYW1pbHlTdHJpbmco
ZGVzY3JpcHRpb24uZmFtaWx5LCBkZXNjcmlwdGlvbi5mYW1pbHlMZW5ndGgpOwogCi0gICAgRm9u
dERlc2NyaXB0aW9uIGY7CisgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmOwogICAgIGYuc2V0
T25lRmFtaWx5KGZvbnRGYW1pbHlTdHJpbmcpOwogICAgIGYuc2V0U3BlY2lmaWVkU2l6ZShkZXNj
cmlwdGlvbi5zaXplKTsKICAgICBmLnNldENvbXB1dGVkU2l6ZShkZXNjcmlwdGlvbi5zaXplKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261249</attachid>
            <date>2015-09-15 15:25:02 -0700</date>
            <delta_ts>2015-09-15 17:17:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fontdescription-split-5.patch</filename>
            <type>text/plain</type>
            <size>108269</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE1LTA5LTE1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBGb250RGVzY3JpcHRp
b24gaW50byBsb3dlciBhbmQgaGlnaGVyIGxldmVsIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkwMzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KKworICAgICAgICBDdXJyZW50bHkgRm9udERlc2NyaXB0aW9uIGlzIHVz
ZWQgdGhyb3VnaCB0aGUgdGV4dCBzdWJzeXN0ZW0uIEhvd2V2ZXIgbXVjaCBvZiB0aGUgZGF0YSBp
dAorICAgICAgICBjYXJyaWVzIGlzIG9ubHkgbmVlZGVkIGJ5IEZvbnRDYXNjYWRlIGFuZCB0ZXh0
IGxheW91dCBidXQgbm90IGJ5IHRoZSBsb3dlciBsZXZlbCBGb250L0ZvbnRDYWNoZQorICAgICAg
ICBsYXllci4gVGhpcyBtYWtlcyBjb2RlIGNvbmZ1c2luZy4gRm9yIGV4YW1wbGUgZmFtaWxpZXMg
c3BlY2lmaWVkIGluIEZvbnREZXNjcmlwdGlvbiBhcmUgaWdub3JlZAorICAgICAgICBhdCBsb3dl
ciBsZXZlbHMuCisKKyAgICAgICAgU3BsaXQgaXQgaW50byBhIGxvdyBsZXZlbCBGb250RGVzY3Jp
cHRpb24gYW5kIGEgaGlnaCBsZXZlbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uIHR5cGU6CisKKyAg
ICAgICAgRm9udERlc2NyaXB0aW9uIDwtPiBGb250CisgICAgICAgIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24gPC0+IEZvbnRDYXNjYWRlCisKKyAgICAgICAgVGhlIGZvcm1lciBvbmx5IGNhcnJpZXMg
aW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWQgdG8gaW5zdGFudGlhdGUgYSBGb250IG9yIGZldGNo
IGl0IGZyb20gdGhlIEZvbnRDYWNoZS4KKyAgICAgICAgVGhlIGxhdHRlciBoYXMgYWRkaXRpb25h
bCBkYXRhIGZvciBDU1MgZm9udCBjYXNjYWRlIHNlbWFudGljcyBhbmQgb3RoZXIgaGlnaGVyIGxl
dmVsIGZlYXR1cmVzLgorCiAyMDE1LTA5LTE1ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIFtXaW5dIFRpbGVkIGRyYXdpbmcgaXMgcmVuZGVyaW5nIG1vcmUg
dGltZXMgdGhhbiBpdCBzaG91bGQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcyNCwyMCArMjcyNCwyMCBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5
bGVFeHRyYWN0b3I6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250U21vb3RoaW5n
OgogICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCkuZm9udFNtb290aGluZygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZvbnRWYXJpYW50TGlnYXR1cmVzOiB7Ci0gICAgICAgICAgICBGb250RGVzY3JpcHRp
b246OkxpZ2F0dXJlc1N0YXRlIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0gc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCk7Ci0gICAgICAgICAgICBGb250RGVzY3Jp
cHRpb246OkxpZ2F0dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKS5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoKTsKLSAgICAg
ICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgaGlzdG9yaWNhbExpZ2F0dXJl
c1N0YXRlID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmhpc3RvcmljYWxMaWdhdHVyZXNTdGF0
ZSgpOwotICAgICAgICAgICAgaWYgKGNvbW1vbkxpZ2F0dXJlc1N0YXRlID09IEZvbnREZXNjcmlw
dGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUgJiYgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRl
ID09IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUKLSAgICAgICAgICAgICAg
ICAmJiBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxM
aWdhdHVyZXNTdGF0ZSkKKyAgICAgICAgICAgIGF1dG8gY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tbW9uTGlnYXR1cmVzU3RhdGUoKTsKKyAgICAgICAg
ICAgIGF1dG8gZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpOworICAgICAgICAgICAgYXV0byBo
aXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuaGlzdG9y
aWNhbExpZ2F0dXJlc1N0YXRlKCk7CisgICAgICAgICAgICBpZiAoY29tbW9uTGlnYXR1cmVzU3Rh
dGUgPT0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUgJiYgZGlz
Y3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID09IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1h
bExpZ2F0dXJlc1N0YXRlCisgICAgICAgICAgICAgICAgJiYgaGlzdG9yaWNhbExpZ2F0dXJlc1N0
YXRlID09IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKQogICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTm9ybWFsKTsKIAogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVM
aXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgICAgICAgICAg
aWYgKGNvbW1vbkxpZ2F0dXJlc1N0YXRlICE9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1
cmVzU3RhdGUpCi0gICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjb21tb25MaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVzY3Jp
cHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVz
IDogQ1NTVmFsdWVDb21tb25MaWdhdHVyZXMpKTsKLSAgICAgICAgICAgIGlmIChkaXNjcmV0aW9u
YXJ5TGlnYXR1cmVzU3RhdGUgIT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0
ZSkKLSAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRl
SWRlbnRpZmllclZhbHVlKGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVzY3Jp
cHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vRGlzY3JldGlvbmFyeUxp
Z2F0dXJlcyA6IENTU1ZhbHVlRGlzY3JldGlvbmFyeUxpZ2F0dXJlcykpOwotICAgICAgICAgICAg
aWYgKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSAhPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExp
Z2F0dXJlc1N0YXRlKQotICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID09IEZv
bnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSA/IENTU1ZhbHVlTm9IaXN0b3Jp
Y2FsTGlnYXR1cmVzIDogQ1NTVmFsdWVIaXN0b3JpY2FsTGlnYXR1cmVzKSk7CisgICAgICAgICAg
ICBpZiAoY29tbW9uTGlnYXR1cmVzU3RhdGUgIT0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9y
bWFsTGlnYXR1cmVzU3RhdGUpCisgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjb21tb25MaWdhdHVyZXNTdGF0ZSA9PSBG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVO
b0NvbW1vbkxpZ2F0dXJlcyA6IENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzKSk7CisgICAgICAgICAg
ICBpZiAoZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlICE9IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKQorICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZGlzY3JldGlvbmFyeUxpZ2F0
dXJlc1N0YXRlID09IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3Rh
dGUgPyBDU1NWYWx1ZU5vRGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA6IENTU1ZhbHVlRGlzY3JldGlv
bmFyeUxpZ2F0dXJlcykpOworICAgICAgICAgICAgaWYgKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0
ZSAhPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSkKKyAgICAg
ICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmll
clZhbHVlKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9PSBGb250Q2FzY2FkZURlc2NyaXB0aW9u
OjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0hpc3RvcmljYWxMaWdhdHVyZXMg
OiBDU1NWYWx1ZUhpc3RvcmljYWxMaWdhdHVyZXMpKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1
ZUxpc3Q7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVpJbmRleDoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCShyZXZpc2lvbiAxODk4MjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTkwLDcgKzU5MCw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRUaW1lckZp
cmUKICAgICAgICAgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCkuY2hlY2tMb2FkQ29tcGxl
dGUoKTsKIH0KIAotYm9vbCBDU1NGb250U2VsZWN0b3I6OnJlc29sdmVzRmFtaWx5Rm9yKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pIGNvbnN0Citib29sIENTU0ZvbnRTZWxlY3Rv
cjo6cmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24pIGNvbnN0CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlc2NyaXB0aW9u
LmZhbWlseUNvdW50KCk7ICsraSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eU5hbWUgPSBkZXNjcmlwdGlvbi5mYW1pbHlBdChpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250U2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udFNlbGVjdG9yLmgJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBAQCBjbGFzcyBD
U1NGb250RmFjZVJ1bGU7CiBjbGFzcyBDU1NTZWdtZW50ZWRGb250RmFjZTsKIGNsYXNzIENhY2hl
ZEZvbnQ7CiBjbGFzcyBEb2N1bWVudDsKLWNsYXNzIEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIFN0
eWxlUnVsZUZvbnRGYWNlOwogCiBjbGFzcyBDU1NGb250U2VsZWN0b3IgZmluYWwgOiBwdWJsaWMg
Rm9udFNlbGVjdG9yIHsKQEAgLTYzLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXpl
X3QpIG92ZXJyaWRlOwogICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBnZXRGb250RmFjZShjb25z
dCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHJlc29sdmVzRmFtaWx5Rm9yKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgY2xlYXJE
b2N1bWVudCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMTg5
ODIzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY2NTEsNyArNjY1MSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUZvbnQoYm9v
bCBpbXAKICAgICBBU1NFUlQoc3lzdGVtRm9udElEID49IENTU1ZhbHVlQ2FwdGlvbiAmJiBzeXN0
ZW1Gb250SUQgPD0gQ1NTVmFsdWVTdGF0dXNCYXIpOwogICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
CiAKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhl
bWUoKS0+c3lzdGVtRm9udChzeXN0ZW1Gb250SUQsIGZvbnREZXNjcmlwdGlvbik7CiAgICAgaWYg
KCFmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCShy
ZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVN
YXBwaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDM4LDE4ICszNDM4LDE4IEBAIHRlbXBsYXRl
PD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGUKICAgICByZXR1cm4gUEVfQUxMOwogfQog
Ci10ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUo
Rm9udERlc2NyaXB0aW9uOjpLZXJuaW5nIGtlcm5pbmcpCit0ZW1wbGF0ZTw+IGlubGluZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
S2VybmluZyBrZXJuaW5nKQogICAgIDogQ1NTVmFsdWUoUHJpbWl0aXZlQ2xhc3MpCiB7CiAgICAg
bV9wcmltaXRpdmVVbml0VHlwZSA9IENTU19WQUxVRV9JRDsKICAgICBzd2l0Y2ggKGtlcm5pbmcp
IHsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc6CisgICAgY2FzZSBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpBdXRvS2VybmluZzoKICAgICAgICAgbV92YWx1ZS52YWx1ZUlE
ID0gQ1NTVmFsdWVBdXRvOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBGb250RGVzY3JpcHRp
b246Ok5vcm1hbEtlcm5pbmc6CisgICAgY2FzZSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3Jt
YWxLZXJuaW5nOgogICAgICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5vcm1hbDsKICAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb25lS2VybmluZzoKKyAg
ICBjYXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5vbmVLZXJuaW5nOgogICAgICAgICBtX3Zh
bHVlLnZhbHVlSUQgPSBDU1NWYWx1ZU5vbmU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
NDU4LDIzICszNDU4LDIzIEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1MKICAgICBtX3ZhbHVlLnZhbHVlSUQgPSBDU1NWYWx1ZUF1dG87CiB9CiAKLXRlbXBsYXRlPD4g
aW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBGb250RGVzY3JpcHRpb246Oktlcm5p
bmcoKSBjb25zdAordGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9y
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Oktlcm5pbmcoKSBjb25zdAogewogICAgIEFTU0VSVChp
c1ZhbHVlSUQoKSk7CiAKICAgICBzd2l0Y2ggKG1fdmFsdWUudmFsdWVJRCkgewogICAgIGNhc2Ug
Q1NTVmFsdWVBdXRvOgotICAgICAgICByZXR1cm4gRm9udERlc2NyaXB0aW9uOjpBdXRvS2Vybmlu
ZzsKKyAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOwog
ICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgIHJldHVybiBGb250RGVzY3JpcHRpb246
Ok5vcm1hbEtlcm5pbmc7CisgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpO
b3JtYWxLZXJuaW5nOwogICAgIGNhc2UgQ1NTVmFsdWVOb25lOgotICAgICAgICByZXR1cm4gRm9u
dERlc2NyaXB0aW9uOjpOb25lS2VybmluZzsKKyAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246Ok5vbmVLZXJuaW5nOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGb250RGVzY3JpcHRp
b246OkF1dG9LZXJuaW5nOworICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpBdXRv
S2VybmluZzsKIH0KIAogdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1By
aW1pdGl2ZVZhbHVlKE9iamVjdEZpdCBmaXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVCdWlsZGVyQ3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
QnVpbGRlckN1c3RvbS5oCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5Myw3ICs2OTMsNyBAQCBp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiB7CiAgICAgYXV0byYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIAot
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICBpZiAocHJpbWl0aXZlVmFs
dWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldExvY2FsZShudWxsQXRvbSk7CiAgICAgZWxzZQpAQCAtODIzLDggKzgyMyw4IEBAIGlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWwKIAogaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250RmFtaWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIpCiB7Ci0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgRm9udERlc2NyaXB0aW9u
IGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRp
b24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8g
aW5pdGlhbERlc2MgPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uKCk7CiAKICAgICAvLyBXZSBuZWVk
IHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hh
bmdlIGZyb20gbW9ub3NwYWNlIHRvIG5vbi1tb25vc3BhY2UuCiAgICAgaWYgKGZvbnREZXNjcmlw
dGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpIHsKQEAgLTgzOSw4ICs4MzksOCBAQCBpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pCiAKIGlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyKQogewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgIEZvbnREZXNjcmlwdGlvbiBw
YXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIHBhcmVudEZvbnREZXNjcmlwdGlv
biA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAKICAg
ICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWxpZXMocGFyZW50Rm9udERlc2NyaXB0aW9uLmZhbWls
aWVzKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9u
dERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKQEAgLTg1MSw3ICs4NTEsNyBAQCBpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiB7CiAgICAgYXV0byYgdmFsdWVM
aXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CiAKLSAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4gYSBuZXcgZm9udC1m
YW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBmYW1pbHkuCiAgICAg
Ym9vbCBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSA9IGZvbnREZXNjcmlwdGlvbi51c2VG
aXhlZERlZmF1bHRTaXplKCk7CiAKQEAgLTEyNDIsMTQgKzEyNDIsMTQgQEAgaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbAogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbEZvbnRXZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKIHsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZl
ci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChG
b250V2VpZ2h0Tm9ybWFsKTsKICAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwogfQogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5oZXJpdEZvbnRXZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVz
Y3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9u
dERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChzdHlsZVJlc29s
dmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLndlaWdodCgpKTsKICAgICBzdHlsZVJlc29sdmVy
LnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogfQpAQCAtMTI1Nyw3ICsxMjU3
LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaAogaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFdlaWdodChTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwotICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigp
OworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRp
b24oKTsKICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgIGNh
c2UgQ1NTVmFsdWVJbnZhbGlkOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEz
OTAsMTkgKzEzOTAsMTkgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bAogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFdlYmtpdEZv
bnRWYXJpYW50TGlnYXR1cmVzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2Ny
aXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnRE
ZXNjcmlwdGlvbigpOwogCi0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0
YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0aW9uOjpO
b3JtYWxMaWdhdHVyZXNTdGF0ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxM
aWdhdHVyZXNTdGF0ZShGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKTsKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUoRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRE
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFs
TGlnYXR1cmVzU3RhdGUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3JpY2FsTGlnYXR1
cmVzU3RhdGUoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwog
CiAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
IH0KIAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRXZWJraXRG
b250VmFyaWFudExpZ2F0dXJlcyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQogewotICAg
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNv
bHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBjb25zdCBh
dXRvJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNj
cmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250
RGVzY3JpcHRpb24oKTsKIAogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNT
dGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSk7CiAgICAg
Zm9udERlc2NyaXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250
RGVzY3JpcHRpb24uZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKCkpOwpAQCAtMTQxMywzMCAr
MTQxMywzMCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oCiAKIGlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdEZvbnRWYXJpYW50
TGlnYXR1cmVzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkK
IHsKLSAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGNvbW1vbkxpZ2F0dXJlc1N0
YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKLSAgICBGb250RGVz
Y3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IEZv
bnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7Ci0gICAgRm9udERlc2NyaXB0aW9u
OjpMaWdhdHVyZXNTdGF0ZSBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRp
b246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOworICAgIGF1dG8gY29tbW9uTGlnYXR1cmVzU3RhdGUg
PSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKKyAgICBhdXRv
IGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Ok5v
cm1hbExpZ2F0dXJlc1N0YXRlOworICAgIGF1dG8gaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID0g
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CiAKICAgICBpZiAo
aXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogZG93
bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpLmdldFZhbHVlSUQoKSkgewogICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVzOgotICAgICAgICAgICAgICAgIGNv
bW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0
YXRlOworICAgICAgICAgICAgICAgIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDb21tb25MaWdhdHVyZXM6Ci0gICAgICAgICAg
ICAgICAgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdh
dHVyZXNTdGF0ZTsKKyAgICAgICAgICAgICAgICBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0Rpc2NyZXRpb25hcnlMaWdhdHVy
ZXM6Ci0gICAgICAgICAgICAgICAgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERl
c2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOworICAgICAgICAgICAgICAgIGRpc2Ny
ZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkRpc2FibGVk
TGlnYXR1cmVzU3RhdGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlRGlzY3JldGlvbmFyeUxpZ2F0dXJlczoKLSAgICAgICAgICAgICAgICBkaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNT
dGF0ZTsKKyAgICAgICAgICAgICAgICBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9IaXN0b3JpY2FsTGlnYXR1cmVz
OgotICAgICAgICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlw
dGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgICAgICAgICBoaXN0b3JpY2Fs
TGlnYXR1cmVzU3RhdGUgPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJl
c1N0YXRlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZUhpc3RvcmljYWxMaWdhdHVyZXM6Ci0gICAgICAgICAgICAgICAgaGlzdG9yaWNhbExpZ2F0dXJl
c1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU7CisgICAgICAg
ICAgICAgICAgaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID0gRm9udENhc2NhZGVEZXNjcmlwdGlv
bjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTE0NDYsNyArMTQ0Niw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWwKICAgICB9IGVsc2UKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKTsKIAotICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigp
OworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRp
b24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUoY29tbW9u
TGlnYXR1cmVzU3RhdGUpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGln
YXR1cmVzU3RhdGUoZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKTsKICAgICBmb250RGVzY3Jp
cHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0
ZSk7CkBAIC0xNDU1LDcgKzE0NTUsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsCiAKIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFs
Rm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZv
cktleXdvcmQoQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRT
aXplKCksIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CiAKICAgICBpZiAoc2l6ZSA8IDApCkBA
IC0xNDY4LDEzICsxNDY4LDEzIEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmkKIAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250
U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQogewotICAgIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBjb25zdCBhdXRvJiBwYXJlbnRGb250RGVzY3Jp
cHRpb24gPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwog
ICAgIGZsb2F0IHNpemUgPSBwYXJlbnRGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpOwog
CiAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICByZXR1cm47CiAKLSAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKHBh
cmVudEZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpKTsKICAgICBzdHlsZVJlc29sdmVyLnNl
dEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CiAgICAgc3R5bGVSZXNvbHZlci5zZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKQEAgLTE1MTYsNyArMTUxNiw3IEBAIGlu
bGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDdXN0b206OmRldGVybWkKIAogaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAg
IGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3Jp
cHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmll
cihDU1NWYWx1ZUludmFsaWQpOwogCiAgICAgZmxvYXQgcGFyZW50U2l6ZSA9IDA7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTks
MTEgKzEzOTksMTEgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShSZQog
ICAgIE5vbkNKS0dseXBoT3JpZW50YXRpb24gZ2x5cGhPcmllbnRhdGlvbjsKICAgICBzdHlsZS0+
Z2V0Rm9udEFuZEdseXBoT3JpZW50YXRpb24oZm9udE9yaWVudGF0aW9uLCBnbHlwaE9yaWVudGF0
aW9uKTsKIAotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGNvbnN0IGF1dG8mIGZvbnREZXNjcmlwdGlvbiA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICBpZiAoZm9udERlc2NyaXB0aW9uLm9yaWVu
dGF0aW9uKCkgPT0gZm9udE9yaWVudGF0aW9uICYmIGZvbnREZXNjcmlwdGlvbi5ub25DSktHbHlw
aE9yaWVudGF0aW9uKCkgPT0gZ2x5cGhPcmllbnRhdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwor
ICAgIGF1dG8gbmV3Rm9udERlc2NyaXB0aW9uID0gZm9udERlc2NyaXB0aW9uOwogICAgIG5ld0Zv
bnREZXNjcmlwdGlvbi5zZXROb25DSktHbHlwaE9yaWVudGF0aW9uKGdseXBoT3JpZW50YXRpb24p
OwogICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRPcmllbnRhdGlvbihmb250T3JpZW50YXRpb24p
OwogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKQEAg
LTE5NTgsNyArMTk1OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFk
anUKICAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRqdXN0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpKTsKKyAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKTsKICAgICBpZiAoIXN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpLmlzTm9u
ZSgpKQogICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnRE
ZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkgKiBzdHlsZS0+dGV4dFNpemVBZGp1c3QoKS5tdWx0
aXBsaWVyKCkpOwogICAgIGVsc2UKQEAgLTE5NzUsMjAgKzE5NzUsMjAgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUgogICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpID09IHBhcmVudFN0eWxlLT5lZmZlY3RpdmVab29tKCkgJiYgc3R5bGUtPnRleHRab29tKCkg
PT0gcGFyZW50U3R5bGUtPnRleHRab29tKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwot
ICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oY2hpbGRGb250KTsKKyAgICBj
b25zdCBhdXRvJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0
byBuZXdGb250RGVzY3JpcHRpb24gPSBjaGlsZEZvbnQ7CiAgICAgc2V0Rm9udFNpemUobmV3Rm9u
dERlc2NyaXB0aW9uLCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKICAgICBzdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKIHZvaWQgU3R5bGVSZXNv
bHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hp
bGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIGNvbnN0IGF1dG8mIGNoaWxk
Rm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKIAogICAgIGlmIChjaGlsZEZvbnQuaXNB
YnNvbHV0ZVNpemUoKSB8fCAhcGFyZW50U3R5bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udCA9IHBhcmVudFN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKTsKKyAgICBjb25zdCBhdXRvJiBwYXJlbnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpOwogICAgIGlmIChjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09
IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpKQogICAgICAgICByZXR1cm47CiAgICAg
Ly8gV2Uga25vdyB0aGUgcGFyZW50IGlzIG1vbm9zcGFjZSBvciB0aGUgY2hpbGQgaXMgbW9ub3Nw
YWNlLCBhbmQgdGhhdCBmb250CkBAIC0yMDA4LDE0ICsyMDA4LDE0IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWwKICAgICAgICAgICAgICAgICBjaGlsZEZvbnQuc3Bl
Y2lmaWVkU2l6ZSgpICogZml4ZWRTY2FsZUZhY3RvcjsKICAgICB9CiAKLSAgICBGb250RGVzY3Jp
cHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7CisgICAgYXV0byBuZXdGb250RGVz
Y3JpcHRpb24gPSBjaGlsZEZvbnQ7CiAgICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9u
LCBzaXplKTsKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlv
bik7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5n
cyogc2V0dGluZ3MpCiB7Ci0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAg
ICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBpZiAoc2V0dGlu
Z3MpCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5m
b250UmVuZGVyaW5nTW9kZSgpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KHN0
YW5kYXJkRmFtaWx5KTsKQEAgLTIwMjQsNyArMjAyNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
aW5pdGlhbGl6ZUZvbnRTdHlsZSgKICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0
Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBz
aXplKQogewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwg
dXNlU1ZHWm9vbVJ1bGVzKCksIG1fc3RhdGUuc3R5bGUoKSwgZG9jdW1lbnQoKSkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNyArMjAz
LDcgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlRm9udCgpOwogICAgIHZvaWQgaW5pdGlhbGl6
ZUZvbnRTdHlsZShTZXR0aW5ncyopOwogCi0gICAgdm9pZCBzZXRGb250U2l6ZShGb250RGVzY3Jp
cHRpb24mLCBmbG9hdCBzaXplKTsKKyAgICB2b2lkIHNldEZvbnRTaXplKEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mLCBmbG9hdCBzaXplKTsKIAogcHVibGljOgogICAgIGJvb2wgdXNlU1ZHWm9vbVJ1
bGVzKCk7CkBAIC0zOTIsOSArMzkyLDkgQEAgcHVibGljOgogICAgICAgICBGaWxsTGF5ZXIgYmFj
a2dyb3VuZERhdGEoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhOyB9CiAgICAgICAg
IENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9y
OyB9CiAKLSAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7
IHJldHVybiBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsgfQotICAgICAgICBjb25zdCBGb250
RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fcGFyZW50U3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9u
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9
IG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CisgICAgICAg
IGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJu
IG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fcGFyZW50U3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9u
KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnRE
aXJ0eSB8PSBtX3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsgfQog
ICAgICAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5z
ZXRab29tKGYpOyB9CiAgICAgICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1f
Zm9udERpcnR5IHw9IG1fc3R5bGUtPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KICAgICAgICAgdm9p
ZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX2ZvbnREaXJ0eSB8
PSBtX3N0eWxlLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0KQEAgLTQ1NSw5ICs0NTUs
OSBAQCBwdWJsaWM6CiAKICAgICBDU1NUb1N0eWxlTWFwKiBzdHlsZU1hcCgpIHsgcmV0dXJuICZt
X3N0eWxlTWFwOyB9CiAgICAgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVjdG9yQ1NTT01X
cmFwcGVycygpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsgfQotICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5mb250
RGVzY3JpcHRpb24oKTsgfQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERl
c2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsgfQot
ICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKSB7IG1fc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7
IHJldHVybiBtX3N0YXRlLmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5w
YXJlbnRGb250RGVzY3JpcHRpb24oKTsgfQorICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX3N0YXRlLnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CiAgICAgdm9pZCBzZXRab29tKGZs
b2F0IGYpIHsgbV9zdGF0ZS5zZXRab29tKGYpOyB9CiAgICAgdm9pZCBzZXRFZmZlY3RpdmVab29t
KGZsb2F0IGYpIHsgbV9zdGF0ZS5zZXRFZmZlY3RpdmVab29tKGYpOyB9CiAgICAgdm9pZCBzZXRX
cml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRlLnNldFdyaXRpbmdN
b2RlKHdyaXRpbmdNb2RlKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAkocmV2aXNpb24g
MTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCSh3b3JraW5nIGNvcHkp
CkBAIC03MDksOCArNzA5LDggQEAgc3ViIGdlbmVyYXRlSW5pdGlhbFZhbHVlU2V0dGVyIHsKICAg
fSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9
eyJBbmltYXRpb25Qcm9wZXJ0eSJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVB
bmltYXRpb25Qcm9wZXJ0eUluaXRpYWxWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAg
Iik7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25z
eyRuYW1lfXsiRm9udFByb3BlcnR5In0pIHsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gIiAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5m
b250RGVzY3JpcHRpb24oKTtcbiI7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIg
ICAgZm9udERlc2NyaXB0aW9uLiIgLiAkc2V0dGVyIC4gIihGb250RGVzY3JpcHRpb246OiIgLiAk
aW5pdGlhbCAuICIoKSk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
IGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTtc
biI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgZm9udERlc2NyaXB0aW9u
LiIgLiAkc2V0dGVyIC4gIihGb250Q2FzY2FkZURlc2NyaXB0aW9uOjoiIC4gJGluaXRpYWwgLiAi
KCkpO1xuIjsKICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29s
dmVyLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pO1xuIjsKICAgfSBlbHNpZiAo
ZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJGaWxsTGF5
ZXJQcm9wZXJ0eSJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVGaWxsTGF5ZXJQ
cm9wZXJ0eUluaXRpYWxWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAgIik7CkBAIC03
NTMsNyArNzUzLDcgQEAgc3ViIGdlbmVyYXRlSW5oZXJpdFZhbHVlU2V0dGVyIHsKICAgICAkc2V0
dGVyQ29udGVudCAuPSBnZW5lcmF0ZUFuaW1hdGlvblByb3BlcnR5SW5oZXJpdFZhbHVlU2V0dGVy
KCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsKICAgICAkZGlkQ2FsbFNldFZhbHVlID0gMTsKICAg
fSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9
eyJGb250UHJvcGVydHkifSkgewotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNj
cmlwdGlvbigpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBhdXRv
IGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7XG4iOwog
ICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZvbnREZXNjcmlwdGlvbi4iIC4g
JHNldHRlciAuICIoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS4iIC4gJGdl
dHRlciAuICIoKSk7XG4iOwogICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0
eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7XG4iOwogICAg
ICRkaWRDYWxsU2V0VmFsdWUgPSAxOwpAQCAtODA3LDcgKzgwNyw3IEBAIHN1YiBnZW5lcmF0ZVZh
bHVlU2V0dGVyIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5lcmF0ZUFuaW1hdGlvblByb3Bl
cnR5VmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQgLiAiICAgICIpOwogICAgICRkaWRDYWxsU2V0
VmFsdWUgPSAxOwogICB9IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVy
T3B0aW9uc3skbmFtZX17IkZvbnRQcm9wZXJ0eSJ9KSB7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0g
JGluZGVudCAuICIgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3Jp
cHRpb24oKTtcbiI7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgZm9udERl
c2NyaXB0aW9uLiIgLiAkc2V0dGVyIC4gIigiIC4gJGNvbnZlcnRlZFZhbHVlIC4gIik7XG4iOwog
ICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7XG4iOwogICAgICRkaWRDYWxsU2V0VmFsdWUg
PSAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDAsNyArMzAwLDcgQEAgaW5saW5lIEZvbnRNZXRyaWNzIENhbnZhc1JlbmRlcmlu
Z0NvbnRleAogICAgIHJldHVybiBtX2ZvbnQuZm9udE1ldHJpY3MoKTsKIH0KIAotaW5saW5lIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6
OmZvbnREZXNjcmlwdGlvbigpIGNvbnN0CitpbmxpbmUgY29uc3QgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6OmZvbnREZXNjcmlwdGlv
bigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZm9udC5mb250RGVzY3JpcHRpb24oKTsKIH0KQEAg
LTIwOTMsNyArMjA5Myw3IEBAIFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZvbnQo
KSAKICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb250OwogCiAgICAgU3RyaW5nQnVpbGRlciBzZXJp
YWxpemVkRm9udDsKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiA9
IHN0YXRlKCkuZm9udC5mb250RGVzY3JpcHRpb24oKTsKKyAgICBjb25zdCBhdXRvJiBmb250RGVz
Y3JpcHRpb24gPSBzdGF0ZSgpLmZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiAKICAgICBpZiAoZm9u
dERlc2NyaXB0aW9uLml0YWxpYygpKQogICAgICAgICBzZXJpYWxpemVkRm9udC5hcHBlbmRMaXRl
cmFsKCJpdGFsaWMgIik7CkBAIC0yMTUyLDcgKzIxNTIsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxl
ID0gY2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgbmV3U3R5bGUtPnNldEZvbnRE
ZXNjcmlwdGlvbihjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBkZWZhdWx0Rm9udERlc2NyaXB0aW9uOworICAgICAg
ICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGRlZmF1bHRGb250RGVzY3JpcHRpb247CiAgICAgICAg
IGRlZmF1bHRGb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KGRlZmF1bHRGb250RmFtaWx5KTsK
ICAgICAgICAgZGVmYXVsdEZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKGRlZmF1bHRG
b250U2l6ZSk7CiAgICAgICAgIGRlZmF1bHRGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KGRlZmF1bHRGb250U2l6ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMTg5ODIzKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdv
cmtpbmcgY29weSkKQEAgLTI0NSw3ICsyNDUsNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIHJl
YWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmZvbnRTZWxlY3RvcigpOyB9CiAgICAgICAg
IHZvaWQgaW5pdGlhbGl6ZShGb250U2VsZWN0b3ImLCBSZW5kZXJTdHlsZSYpOwogICAgICAgICBG
b250TWV0cmljcyBmb250TWV0cmljcygpIGNvbnN0OwotICAgICAgICBjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0OworICAgICAgICBjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdDsKICAgICAgICAgZmxvYXQgd2lk
dGgoY29uc3QgVGV4dFJ1biYpIGNvbnN0OwogICAgICAgICB2b2lkIGRyYXdCaWRpVGV4dChHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNj
YWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9UaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RoZW1lLmgJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgIC8v
IE1ldGhvZHMgdXNlZCB0byBhZGp1c3QgdGhlIFJlbmRlclN0eWxlcyBvZiBjb250cm9scy4KICAg
ICAKICAgICAvLyBUaGUgZm9udCBkZXNjcmlwdGlvbiByZXN1bHQgc2hvdWxkIGhhdmUgYSB6b29t
ZWQgZm9udCBzaXplLgotICAgIHZpcnR1YWwgT3B0aW9uYWw8Rm9udERlc2NyaXB0aW9uPiBjb250
cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCAvKnpvb21GYWN0
b3IqLykgY29uc3QgeyByZXR1cm4gTnVsbG9wdDsgfQorICAgIHZpcnR1YWwgT3B0aW9uYWw8Rm9u
dENhc2NhZGVEZXNjcmlwdGlvbj4gY29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRD
YXNjYWRlJiwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIE51bGxvcHQ7IH0K
ICAgICAKICAgICAvLyBUaGUgc2l6ZSBoZXJlIGlzIGluIHpvb21lZCBjb29yZGluYXRlcyBhbHJl
YWR5LiBJZiBhIG5ldyBzaXplIGlzIHJldHVybmVkLCBpdCBhbHNvIG5lZWRzIHRvIGJlIGluIHpv
b21lZCBjb29yZGluYXRlcy4KICAgICB2aXJ0dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6
ZSwgZmxvYXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIHpvb21lZFNpemU7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAko
cmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM5LDcgKzUzOSw3IEBAIHZvaWQgRm9udENh
Y2hlOjppbnZhbGlkYXRlKCkKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLVJlZlB0cjxGb250
PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCitSZWZQdHI8
Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBBdG9taWNTdHJpbmcmKQogewogICAgIHJldHVybiBudWxscHRyOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlzaW9uIDE4OTgy
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0
IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBmb250Rm9yUGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBSZWZQdHI8Rm9udD4gc2lt
aWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgUmVmUHRyPEZvbnQ+IHNpbWls
YXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
KTsKIAogICAgIHZvaWQgYWRkQ2xpZW50KEZvbnRTZWxlY3RvciopOwogICAgIHZvaWQgcmVtb3Zl
Q2xpZW50KEZvbnRTZWxlY3RvciopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw3ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENh
Y2hlZEZvbnRzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYp
Oworc3RhdGljIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMo
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwog
CiBjb25zdCB1aW50OF90IEZvbnRDYXNjYWRlOjpzX3JvdW5kaW5nSGFja0NoYXJhY3RlclRhYmxl
WzI1Nl0gPSB7CiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSAvKlx0Ki8sIDEgLypc
biovLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLApAQCAtMTA3LDcgKzEwNyw3IEBAIEZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZSgp
CiB7CiB9CiAKLUZvbnRDYXNjYWRlOjpGb250Q2FzY2FkZShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZkLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2luZykKK0ZvbnRDYXNjYWRl
OjpGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmZCwgZmxvYXQgbGV0
dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpCiAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbihm
ZCkKICAgICAsIG1fd2Vha1B0ckZhY3RvcnkodGhpcykKICAgICAsIG1fbGV0dGVyU3BhY2luZyhs
ZXR0ZXJTcGFjaW5nKQpAQCAtMjMwLDcgKzIzMCw3IEBAIHZvaWQgY2xlYXJXaWR0aENhY2hlcygp
CiAgICAgICAgIHZhbHVlLT5mb250cy5nZXQoKS53aWR0aENhY2hlKCkuY2xlYXIoKTsKIH0KIAot
c3RhdGljIEZvbnRDYXNjYWRlQ2FjaGVLZXkgbWFrZUZvbnRDYXNjYWRlQ2FjaGVLZXkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3Ip
CitzdGF0aWMgRm9udENhc2NhZGVDYWNoZUtleSBtYWtlRm9udENhc2NhZGVDYWNoZUtleShjb25z
dCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFNlbGVjdG9yKiBmb250
U2VsZWN0b3IpCiB7CiAgICAgRm9udENhc2NhZGVDYWNoZUtleSBrZXk7CiAgICAga2V5LmZvbnRE
ZXNjcmlwdGlvbktleSA9IEZvbnREZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbik7CkBAIC0yNjks
NyArMjY5LDcgQEAgdm9pZCBwcnVuZVN5c3RlbUZhbGxiYWNrRm9udHMoKQogICAgICAgICBlbnRy
eS0+Zm9udHMtPnBydW5lU3lzdGVtRmFsbGJhY2tzKCk7CiB9CiAKLXN0YXRpYyBSZWY8Rm9udENh
c2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZvbnRTZWxlY3RvcikK
K3N0YXRpYyBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgUmVmUHRyPEZvbnRT
ZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB7CiAgICAgYXV0byBrZXkgPSBtYWtlRm9udENhc2Nh
ZGVDYWNoZUtleShmb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkocmV2
aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKIGNsYXNz
IEZvbnRDYXNjYWRlIHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZSgp
OwotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGZsb2F0IGxldHRlclNwYWNpbmcsIGZsb2F0IHdvcmRTcGFjaW5nKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgZmxvYXQgbGV0
dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpOwogICAgIC8vIFRoaXMgY29uc3RydWN0b3Ig
aXMgb25seSB1c2VkIGlmIHRoZSBwbGF0Zm9ybSB3YW50cyB0byBzdGFydCB3aXRoIGEgbmF0aXZl
IGZvbnQuCiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0b1Ntb290aGluZyk7CiAKQEAgLTEyNSw3ICsx
MjUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZvbnRDYXNjYWRlJiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZv
bnRDYXNjYWRlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KIAot
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9mb250RGVzY3JpcHRpb247IH0KKyAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbjsgfQog
CiAgICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNv
bXB1dGVkUGl4ZWxTaXplKCk7IH0KICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gZm9u
dERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7IH0KQEAgLTMxOCwyNCArMzE4LDI0IEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKG1fZm9udERlc2NyaXB0aW9uLmtl
cm5pbmcoKSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9uZUtlcm5pbmc6Cisg
ICAgICAgIGNhc2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9uZUtlcm5pbmc6CiAgICAgICAg
ICAgICBmZWF0dXJlcyAmPSB+S2VybmluZzsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsS2VybmluZzoKKyAgICAgICAgY2FzZSBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpOb3JtYWxLZXJuaW5nOgogICAgICAgICAgICAgZmVhdHVyZXMgfD0g
S2VybmluZzsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlv
bjo6QXV0b0tlcm5pbmc6CisgICAgICAgIGNhc2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6QXV0
b0tlcm5pbmc6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIHN3aXRj
aCAobV9mb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSkgewotICAgICAgICBj
YXNlIEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgY2Fz
ZSBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOgogICAgICAg
ICAgICAgZmVhdHVyZXMgJj0gfkxpZ2F0dXJlczsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOgorICAgICAgICBj
YXNlIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZToKICAgICAg
ICAgICAgIGZlYXR1cmVzIHw9IExpZ2F0dXJlczsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU6CisgICAgICAgIGNh
c2UgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0zNDQsNyArMzQ0LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHN0YXRpYyBUeXBlc2V0dGluZ0ZlYXR1cmVzIHNfZGVmYXVsdFR5cGVzZXR0aW5nRmVhdHVy
ZXM7CiAKLSAgICBGb250RGVzY3JpcHRpb24gbV9mb250RGVzY3JpcHRpb247CisgICAgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKICAgICBtdXRhYmxlIFJlZlB0cjxG
b250Q2FzY2FkZUZvbnRzPiBtX2ZvbnRzOwogICAgIFdlYWtQdHJGYWN0b3J5PEZvbnRDYXNjYWRl
PiBtX3dlYWtQdHJGYWN0b3J5OwogICAgIGZsb2F0IG1fbGV0dGVyU3BhY2luZzsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3
IEBAIEZvbnRDYXNjYWRlRm9udHM6On5Gb250Q2FzY2FkZUZvbnRzKCkKIHsKIH0KIAotdm9pZCBG
b250Q2FzY2FkZUZvbnRzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGb250RGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uKQordm9pZCBGb250Q2FzY2FkZUZvbnRzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBhdXRvJiBwcmltYXJ5
UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwogICAgIHVu
c2lnbmVkIG51bVJhbmdlcyA9IHByaW1hcnlSYW5nZXMuc2l6ZSgpOwpAQCAtMTM2LDcgKzEzNiw3
IEBAIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNMb2FkaW5nQ3VzdG9tRm8KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXN0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQmIGluZGV4LCBGb250U2VsZWN0
b3IqIGZvbnRTZWxlY3RvcikKK3N0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2so
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkJiBpbmRl
eCwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZGVz
Y3JpcHRpb24uZmFtaWx5Q291bnQoKSk7CiAKQEAgLTE1NiwxMCArMTU2LDE0IEBAIHN0YXRpYyBG
b250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY28KICAgICAvLyBXZSBkaWRuJ3QgZmluZCBh
IGZvbnQuIFRyeSB0byBmaW5kIGEgc2ltaWxhciBmb250IHVzaW5nIG91ciBvd24gc3BlY2lmaWMg
a25vd2xlZGdlIGFib3V0IG91ciBwbGF0Zm9ybS4KICAgICAvLyBGb3IgZXhhbXBsZSBvbiBPUyBY
LCB3ZSBrbm93IHRvIG1hcCBhbnkgZmFtaWxpZXMgY29udGFpbmluZyB0aGUgd29yZHMgQXJhYmlj
LCBQYXNodG8sIG9yIFVyZHUgdG8gdGhlCiAgICAgLy8gR2VlemEgUHJvIGZvbnQuCi0gICAgcmV0
dXJuIEZvbnRSYW5nZXMoZm9udENhY2hlLnNpbWlsYXJGb250KGRlc2NyaXB0aW9uKSk7CisgICAg
Zm9yIChhdXRvJiBmYW1pbHkgOiBkZXNjcmlwdGlvbi5mYW1pbGllcygpKSB7CisgICAgICAgIGlm
IChhdXRvIGZvbnQgPSBmb250Q2FjaGUuc2ltaWxhckZvbnQoZGVzY3JpcHRpb24sIGZhbWlseSkp
CisgICAgICAgICAgICByZXR1cm4gRm9udFJhbmdlcyhXVEY6Om1vdmUoZm9udCkpOworICAgIH0K
KyAgICByZXR1cm4geyB9OwogfQogCi1jb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRz
OjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCB1bnNpZ25lZCBpbmRleCkKK2NvbnN0IEZvbnRSYW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6
OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPCBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNr
UmFuZ2VzW2luZGV4XTsKQEAgLTMxMiw3ICszMTYsNyBAQCBzdGF0aWMgR2x5cGhEYXRhIGdseXBo
RGF0YUZvck5vbkNKS0NoYXJhCiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLUdseXBoRGF0YSBGb250
Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGMsIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCitHbHlw
aERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIz
MiBjLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlh
bnQgdmFyaWFudCkKIHsKICAgICAvLyBTeXN0ZW0gZmFsbGJhY2sgaXMgY2hhcmFjdGVyLWRlcGVu
ZGVudC4KICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQo
ZGVzY3JpcHRpb24sIDApOwpAQCAtMzQ5LDcgKzM1Myw3IEBAIEdseXBoRGF0YSBGb250Q2FzY2Fk
ZUZvbnRzOjpnbHlwaERhdGFGb3IKICAgICByZXR1cm4gZmFsbGJhY2tHbHlwaERhdGE7CiB9CiAK
LUdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIg
YywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFu
dCwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCkKK0dseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpn
bHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5k
ZXgpCiB7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IHJl
YWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBmYWxsYmFja0luZGV4KyspOwpAQCAt
MzcwLDcgKzM3NCw3IEBAIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3IK
ICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soYywgZGVzY3JpcHRpb24sIHZh
cmlhbnQpOwogfQogCi1HbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yTm9y
bWFsVmFyaWFudChVQ2hhcjMyIGMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24p
CitHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChV
Q2hhcjMyIGMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewog
ICAgIGZvciAodW5zaWduZWQgZmFsbGJhY2tJbmRleCA9IDA7IDsgKytmYWxsYmFja0luZGV4KSB7
CiAgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNj
cmlwdGlvbiwgZmFsbGJhY2tJbmRleCk7CkBAIC00MjEsNyArNDI1LDcgQEAgc3RhdGljIFJlZlB0
cjxHbHlwaFBhZ2U+IGdseXBoUGFnZUZyb21GbwogICAgIHJldHVybiBjb25zdF9jYXN0PEdseXBo
UGFnZSo+KGZvbnQtPmdseXBoUGFnZShwYWdlTnVtYmVyKSk7CiB9CiAKLUdseXBoRGF0YSBGb250
Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQorR2x5cGhEYXRh
IEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHZhcmlhbnQgIT0g
QXV0b1ZhcmlhbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udERl
c2NyaXB0aW9uOworY2xhc3MgRm9udENhc2NhZGVEZXNjcmlwdGlvbjsKIGNsYXNzIEZvbnRQbGF0
Zm9ybURhdGE7CiBjbGFzcyBGb250U2VsZWN0b3I7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CkBA
IC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNGb3JQbGF0Zm9ybUZvbnQ7IH0KIAotICAgIEdseXBoRGF0YSBn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgRm9u
dFZhcmlhbnQpOworICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwg
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50KTsKIAotICAgIGJvb2wg
aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIHZvaWQgZGV0ZXJtaW5l
UGl0Y2goY29uc3QgRm9udERlc2NyaXB0aW9uJik7CisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOworICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOwogCiAgICAgYm9vbCBpc0xvYWRpbmdDdXN0b21G
b250cygpIGNvbnN0OwogCkBAIC02Nyw4ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBXaWR0aENhY2hl
JiB3aWR0aENhY2hlKCkgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9CiAgICAgY29uc3QgV2lkdGhD
YWNoZSYgd2lkdGhDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhDYWNoZTsgfQogCi0gICAg
Y29uc3QgRm9udCYgcHJpbWFyeUZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdlcyYgcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CisgICAgY29uc3Qg
Rm9udCYgcHJpbWFyeUZvbnQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOworICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKIAog
ICAgIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsKIApAQCAtNzYsOSArNzYsOSBAQCBwcml2
YXRlOgogICAgIEZvbnRDYXNjYWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CiAgICAg
Rm9udENhc2NhZGVGb250cyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKLSAgICBHbHlwaERh
dGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgRm9udFZhcmlhbnQpOwotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb3JtYWxWYXJp
YW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIEdseXBoRGF0YSBnbHlw
aERhdGFGb3JWYXJpYW50KFVDaGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIEZvbnRWYXJp
YW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9y
U3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIEZv
bnRWYXJpYW50KTsKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9ybWFsVmFyaWFudChVQ2hh
cjMyLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJik7CisgICAgR2x5cGhEYXRhIGdseXBo
RGF0YUZvclZhcmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIEZv
bnRWYXJpYW50LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKIAogICAgIFZlY3RvcjxGb250UmFu
Z2VzLCAxPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CiAgICAgdW5zaWduZWQgbV9sYXN0UmVh
bGl6ZWRGYWxsYmFja0luZGV4IHsgMCB9OwpAQCAtMTE1LDE0ICsxMTUsMTQgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxzZSB9OwogfTsKIAotaW5saW5lIGJv
b2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24pCitpbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2go
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgaWYgKG1f
cGl0Y2ggPT0gVW5rbm93blBpdGNoKQogICAgICAgICBkZXRlcm1pbmVQaXRjaChkZXNjcmlwdGlv
bik7CiAgICAgcmV0dXJuIG1fcGl0Y2ggPT0gRml4ZWRQaXRjaDsKIH07CiAKLWlubGluZSBjb25z
dCBGb250JiBGb250Q2FzY2FkZUZvbnRzOjpwcmltYXJ5Rm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQoraW5saW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OnBy
aW1hcnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnREZXNjcmlwdGlvbi5jcHAJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgU2FtZVNpemVBc0Zv
bnREZXNjcmlwdGlvbiB7CitzdHJ1Y3QgU2FtZVNpemVBc0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24g
ewogICAgIHZvaWQqIHBvaW50ZXJzWzNdOwogICAgIGZsb2F0IHNpemVzWzJdOwogICAgIC8vIEZJ
WE1FOiBNYWtlIHRoZW0gZml0IGludG8gb25lIHdvcmQuCkBAIC00Miw3ICs0Miw3IEBAIHN0cnVj
dCBTYW1lU2l6ZUFzRm9udERlc2NyaXB0aW9uIHsKICAgICB1aW50MzJfdCBiaXRmaWVsZHMyIDog
ODsKIH07CiAKLUNPTVBJTEVfQVNTRVJUKHNpemVvZihGb250RGVzY3JpcHRpb24pID09IHNpemVv
ZihTYW1lU2l6ZUFzRm9udERlc2NyaXB0aW9uKSwgRm9udERlc2NyaXB0aW9uX3Nob3VsZF9zdGF5
X3NtYWxsKTsKK0NPTVBJTEVfQVNTRVJUKHNpemVvZihGb250Q2FzY2FkZURlc2NyaXB0aW9uKSA9
PSBzaXplb2YoU2FtZVNpemVBc0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24pLCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uX3Nob3VsZF9zdGF5X3NtYWxsKTsKIAogRm9udERlc2NyaXB0aW9uOjpGb250RGVz
Y3JpcHRpb24oKQogICAgIDogbV9vcmllbnRhdGlvbihIb3Jpem9udGFsKQpAQCAtNTAsODIgKzUw
LDg2IEBAIEZvbnREZXNjcmlwdGlvbjo6Rm9udERlc2NyaXB0aW9uKCkKICAgICAsIG1fd2lkdGhW
YXJpYW50KFJlZ3VsYXJXaWR0aCkKICAgICAsIG1faXRhbGljKEZvbnRJdGFsaWNPZmYpCiAgICAg
LCBtX3NtYWxsQ2FwcyhGb250U21hbGxDYXBzT2ZmKQotICAgICwgbV9pc0Fic29sdXRlU2l6ZShm
YWxzZSkKICAgICAsIG1fd2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpCiAgICAgLCBtX3JlbmRlcmlu
Z01vZGUoTm9ybWFsUmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fdGV4dFJlbmRlcmluZyhBdXRvVGV4
dFJlbmRlcmluZykKKyAgICAsIG1fc2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxl
Y3Rpb24obV9sb2NhbGUpKQorICAgICwgbV9mb250U3ludGhlc2lzKEZvbnRTeW50aGVzaXNXZWln
aHQgfCBGb250U3ludGhlc2lzU3R5bGUpCit7Cit9CisKK3ZvaWQgRm9udERlc2NyaXB0aW9uOjpz
ZXRMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCit7CisgICAgbV9sb2NhbGUgPSBs
b2NhbGU7CisgICAgbV9zY3JpcHQgPSBsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9u
KG1fbG9jYWxlKTsKK30KKworRm9udFRyYWl0c01hc2sgRm9udERlc2NyaXB0aW9uOjp0cmFpdHNN
YXNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KCht
X2l0YWxpYyA/IEZvbnRTdHlsZUl0YWxpY01hc2sgOiBGb250U3R5bGVOb3JtYWxNYXNrKQorICAg
ICAgICB8IChtX3NtYWxsQ2FwcyA/IEZvbnRWYXJpYW50U21hbGxDYXBzTWFzayA6IEZvbnRWYXJp
YW50Tm9ybWFsTWFzaykKKyAgICAgICAgfCAoRm9udFdlaWdodDEwME1hc2sgPDwgKG1fd2VpZ2h0
IC0gRm9udFdlaWdodDEwMCkpKTsKKyAgICAKK30KKworRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
Rm9udENhc2NhZGVEZXNjcmlwdGlvbigpCisgICAgOiBtX2lzQWJzb2x1dGVTaXplKGZhbHNlKQog
ICAgICwgbV9rZXJuaW5nKEF1dG9LZXJuaW5nKQogICAgICwgbV9jb21tb25MaWdhdHVyZXNTdGF0
ZShOb3JtYWxMaWdhdHVyZXNTdGF0ZSkKICAgICAsIG1fZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0
YXRlKE5vcm1hbExpZ2F0dXJlc1N0YXRlKQogICAgICwgbV9oaXN0b3JpY2FsTGlnYXR1cmVzU3Rh
dGUoTm9ybWFsTGlnYXR1cmVzU3RhdGUpCiAgICAgLCBtX2tleXdvcmRTaXplKDApCiAgICAgLCBt
X2ZvbnRTbW9vdGhpbmcoQXV0b1Ntb290aGluZykKLSAgICAsIG1fdGV4dFJlbmRlcmluZyhBdXRv
VGV4dFJlbmRlcmluZykKICAgICAsIG1faXNTcGVjaWZpZWRGb250KGZhbHNlKQotICAgICwgbV9z
Y3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihtX2xvY2FsZSkpCi0gICAg
LCBtX2ZvbnRTeW50aGVzaXMoaW5pdGlhbEZvbnRTeW50aGVzaXMoKSkKIHsKIH0KIAotRm9udFdl
aWdodCBGb250RGVzY3JpcHRpb246OmxpZ2h0ZXJXZWlnaHQodm9pZCkgY29uc3QKK0ZvbnRXZWln
aHQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6bGlnaHRlcldlaWdodCh2b2lkKSBjb25zdAogewot
ICAgIHN3aXRjaCAobV93ZWlnaHQpIHsKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0MTAwOgotICAg
ICAgICBjYXNlIEZvbnRXZWlnaHQyMDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDMwMDoKLSAg
ICAgICAgY2FzZSBGb250V2VpZ2h0NDAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ1MDA6Ci0g
ICAgICAgICAgICByZXR1cm4gRm9udFdlaWdodDEwMDsKLQotICAgICAgICBjYXNlIEZvbnRXZWln
aHQ2MDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDcwMDoKLSAgICAgICAgICAgIHJldHVybiBG
b250V2VpZ2h0NDAwOwotCi0gICAgICAgIGNhc2UgRm9udFdlaWdodDgwMDoKLSAgICAgICAgY2Fz
ZSBGb250V2VpZ2h0OTAwOgotICAgICAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ3MDA7CisgICAg
c3dpdGNoICh3ZWlnaHQoKSkgeworICAgIGNhc2UgRm9udFdlaWdodDEwMDoKKyAgICBjYXNlIEZv
bnRXZWlnaHQyMDA6CisgICAgY2FzZSBGb250V2VpZ2h0MzAwOgorICAgIGNhc2UgRm9udFdlaWdo
dDQwMDoKKyAgICBjYXNlIEZvbnRXZWlnaHQ1MDA6CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0
MTAwOworCisgICAgY2FzZSBGb250V2VpZ2h0NjAwOgorICAgIGNhc2UgRm9udFdlaWdodDcwMDoK
KyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ0MDA7CisKKyAgICBjYXNlIEZvbnRXZWlnaHQ4MDA6
CisgICAgY2FzZSBGb250V2VpZ2h0OTAwOgorICAgICAgICByZXR1cm4gRm9udFdlaWdodDcwMDsK
ICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIEZvbnRXZWlnaHRO
b3JtYWw7CiB9CiAKLUZvbnRXZWlnaHQgRm9udERlc2NyaXB0aW9uOjpib2xkZXJXZWlnaHQodm9p
ZCkgY29uc3QKK0ZvbnRXZWlnaHQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Ym9sZGVyV2VpZ2h0
KHZvaWQpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChtX3dlaWdodCkgewotICAgICAgICBjYXNlIEZv
bnRXZWlnaHQxMDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDIwMDoKLSAgICAgICAgY2FzZSBG
b250V2VpZ2h0MzAwOgotICAgICAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ0MDA7Ci0KLSAgICAg
ICAgY2FzZSBGb250V2VpZ2h0NDAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ1MDA6Ci0gICAg
ICAgICAgICByZXR1cm4gRm9udFdlaWdodDcwMDsKLQotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ2
MDA6Ci0gICAgICAgIGNhc2UgRm9udFdlaWdodDcwMDoKLSAgICAgICAgY2FzZSBGb250V2VpZ2h0
ODAwOgotICAgICAgICBjYXNlIEZvbnRXZWlnaHQ5MDA6Ci0gICAgICAgICAgICByZXR1cm4gRm9u
dFdlaWdodDkwMDsKKyAgICBzd2l0Y2ggKHdlaWdodCgpKSB7CisgICAgY2FzZSBGb250V2VpZ2h0
MTAwOgorICAgIGNhc2UgRm9udFdlaWdodDIwMDoKKyAgICBjYXNlIEZvbnRXZWlnaHQzMDA6Cisg
ICAgICAgIHJldHVybiBGb250V2VpZ2h0NDAwOworCisgICAgY2FzZSBGb250V2VpZ2h0NDAwOgor
ICAgIGNhc2UgRm9udFdlaWdodDUwMDoKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ3MDA7CisK
KyAgICBjYXNlIEZvbnRXZWlnaHQ2MDA6CisgICAgY2FzZSBGb250V2VpZ2h0NzAwOgorICAgIGNh
c2UgRm9udFdlaWdodDgwMDoKKyAgICBjYXNlIEZvbnRXZWlnaHQ5MDA6CisgICAgICAgIHJldHVy
biBGb250V2VpZ2h0OTAwOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBy
ZXR1cm4gRm9udFdlaWdodE5vcm1hbDsKIH0KIAotRm9udFRyYWl0c01hc2sgRm9udERlc2NyaXB0
aW9uOjp0cmFpdHNNYXNrKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFRy
YWl0c01hc2s+KChtX2l0YWxpYyA/IEZvbnRTdHlsZUl0YWxpY01hc2sgOiBGb250U3R5bGVOb3Jt
YWxNYXNrKQotICAgICAgICAgICAgfCAobV9zbWFsbENhcHMgPyBGb250VmFyaWFudFNtYWxsQ2Fw
c01hc2sgOiBGb250VmFyaWFudE5vcm1hbE1hc2spCi0gICAgICAgICAgICB8IChGb250V2VpZ2h0
MTAwTWFzayA8PCAobV93ZWlnaHQgLSBGb250V2VpZ2h0MTAwKSkpOwotICAgIAotfQotCi12b2lk
IEZvbnREZXNjcmlwdGlvbjo6c2V0TG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQot
ewotICAgIG1fbG9jYWxlID0gbG9jYWxlOwotICAgIG1fc2NyaXB0ID0gbG9jYWxlVG9TY3JpcHRD
b2RlRm9yRm9udFNlbGVjdGlvbihtX2xvY2FsZSk7Ci19Ci0KICNpZiBFTkFCTEUoSU9TX1RFWFRf
QVVUT1NJWklORykKLWJvb2wgRm9udERlc2NyaXB0aW9uOjpmYW1pbGllc0VxdWFsRm9yVGV4dEF1
dG9TaXppbmcoY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK2Jvb2wgRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAogewogICAgIHVuc2lnbmVkIHRoaXNG
YW1pbHlDb3VudCA9IGZhbWlseUNvdW50KCk7CiAgICAgdW5zaWduZWQgb3RoZXJGYW1pbHlDb3Vu
dCA9IG90aGVyLmZhbWlseUNvdW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAkocmV2aXNpb24gMTg5ODIzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDE0ICs0MCw5MCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Rm9udEZh
bWlseU5hbWVzOwogCiBjbGFzcyBGb250RGVzY3JpcHRpb24gewogcHVibGljOgorICAgIFdFQkNP
UkVfRVhQT1JUIEZvbnREZXNjcmlwdGlvbigpOworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250
RGVzY3JpcHRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQor
CisgICAgZmxvYXQgY29tcHV0ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlZFNpemU7
IH0KKyAgICBGb250SXRhbGljIGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZv
bnRJdGFsaWM+KG1faXRhbGljKTsgfQorICAgIGludCBjb21wdXRlZFBpeGVsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIGludChtX2NvbXB1dGVkU2l6ZSArIDAuNWYpOyB9CisgICAgRm9udFNtYWxsQ2Fw
cyBzbWFsbENhcHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U21hbGxDYXBzPiht
X3NtYWxsQ2Fwcyk7IH0KKyAgICBGb250V2VpZ2h0IHdlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEZvbnRXZWlnaHQ+KG1fd2VpZ2h0KTsgfQorICAgIEZvbnRXZWlnaHQgbGlnaHRl
cldlaWdodCgpIGNvbnN0OworICAgIEZvbnRXZWlnaHQgYm9sZGVyV2VpZ2h0KCkgY29uc3Q7Cisg
ICAgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEZvbnRSZW5kZXJpbmdNb2RlPihtX3JlbmRlcmluZ01vZGUpOyB9CisgICAgVGV4dFJl
bmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0UmVuZGVyaW5nTW9kZT4obV90ZXh0UmVuZGVyaW5nKTsgfQorICAgIFVTY3JpcHRDb2Rl
IHNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVTY3JpcHRDb2RlPihtX3Njcmlw
dCk7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jYWxlOyB9CisKKyAgICBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxGb250T3JpZW50YXRpb24+KG1fb3JpZW50YXRpb24pOyB9CisgICAg
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBub25DSktHbHlwaE9yaWVudGF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbj4obV9ub25DSktHbHlwaE9y
aWVudGF0aW9uKTsgfQorICAgIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50KCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFdpZHRoVmFyaWFudD4obV93aWR0aFZhcmlhbnQpOyB9
CisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyogZmVhdHVyZVNldHRpbmdzKCkgY29uc3QgeyByZXR1
cm4gbV9mZWF0dXJlU2V0dGluZ3MuZ2V0KCk7IH0KKyAgICBGb250U3ludGhlc2lzIGZvbnRTeW50
aGVzaXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U3ludGhlc2lzPihtX2ZvbnRT
eW50aGVzaXMpOyB9CisKKyAgICB2b2lkIHNldENvbXB1dGVkU2l6ZShmbG9hdCBzKSB7IG1fY29t
cHV0ZWRTaXplID0gY2xhbXBUb0Zsb2F0KHMpOyB9CisgICAgdm9pZCBzZXRJdGFsaWMoRm9udEl0
YWxpYyBpKSB7IG1faXRhbGljID0gaTsgfQorICAgIHZvaWQgc2V0SXNJdGFsaWMoYm9vbCBpKSB7
IHNldEl0YWxpYyhpID8gRm9udEl0YWxpY09uIDogRm9udEl0YWxpY09mZik7IH0KKyAgICB2b2lk
IHNldFNtYWxsQ2FwcyhGb250U21hbGxDYXBzIGMpIHsgbV9zbWFsbENhcHMgPSBjOyB9CisgICAg
dm9pZCBzZXRJc1NtYWxsQ2Fwcyhib29sIGMpIHsgc2V0U21hbGxDYXBzKGMgPyBGb250U21hbGxD
YXBzT24gOiBGb250U21hbGxDYXBzT2ZmKTsgfQorICAgIHZvaWQgc2V0V2VpZ2h0KEZvbnRXZWln
aHQgdykgeyBtX3dlaWdodCA9IHc7IH0KKyAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoRm9udFJl
bmRlcmluZ01vZGUgbW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSBtb2RlOyB9CisgICAgdm9pZCBz
ZXRUZXh0UmVuZGVyaW5nTW9kZShUZXh0UmVuZGVyaW5nTW9kZSByZW5kZXJpbmcpIHsgbV90ZXh0
UmVuZGVyaW5nID0gcmVuZGVyaW5nOyB9CisgICAgdm9pZCBzZXRPcmllbnRhdGlvbihGb250T3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9Cisg
ICAgdm9pZCBzZXROb25DSktHbHlwaE9yaWVudGF0aW9uKE5vbkNKS0dseXBoT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIHsgbV9ub25DSktHbHlwaE9yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH0K
KyAgICB2b2lkIHNldFdpZHRoVmFyaWFudChGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCkg
eyBtX3dpZHRoVmFyaWFudCA9IHdpZHRoVmFyaWFudDsgfSAvLyBNYWtlIHN1cmUgbmV3IGNhbGxl
cnMgb2YgdGhpcyBzeW5jIHdpdGggRm9udFBsYXRmb3JtRGF0YTo6aXNGb3JUZXh0Q29tYmluZSgp
IQorICAgIHZvaWQgc2V0TG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHZvaWQgc2V0
RmVhdHVyZVNldHRpbmdzKFBhc3NSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3Mp
IHsgbV9mZWF0dXJlU2V0dGluZ3MgPSBzZXR0aW5nczsgfQorICAgIHZvaWQgc2V0Rm9udFN5bnRo
ZXNpcyhGb250U3ludGhlc2lzIGZvbnRTeW50aGVzaXMpIHsgbV9mb250U3ludGhlc2lzID0gZm9u
dFN5bnRoZXNpczsgfQorCisgICAgRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzaygpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBtX2ZlYXR1cmVTZXR0
aW5nczsKKyAgICBBdG9taWNTdHJpbmcgbV9sb2NhbGU7CisKKyAgICBmbG9hdCBtX2NvbXB1dGVk
U2l6ZSB7IDAgfTsgLy8gQ29tcHV0ZWQgc2l6ZSBhZGp1c3RlZCBmb3IgdGhlIG1pbmltdW0gZm9u
dCBzaXplIGFuZCB0aGUgem9vbSBmYWN0b3IuCisgICAgdW5zaWduZWQgbV9vcmllbnRhdGlvbiA6
IDE7IC8vIEZvbnRPcmllbnRhdGlvbiAtIFdoZXRoZXIgdGhlIGZvbnQgaXMgcmVuZGVyaW5nIG9u
IGEgaG9yaXpvbnRhbCBsaW5lIG9yIGEgdmVydGljYWwgbGluZS4KKyAgICB1bnNpZ25lZCBtX25v
bkNKS0dseXBoT3JpZW50YXRpb24gOiAxOyAvLyBOb25DSktHbHlwaE9yaWVudGF0aW9uIC0gT25s
eSB1c2VkIGJ5IHZlcnRpY2FsIHRleHQuIERldGVybWluZXMgdGhlIGRlZmF1bHQgb3JpZW50YXRp
b24gZm9yIG5vbi1pZGVvZ3JhcGggZ2x5cGhzLgorICAgIHVuc2lnbmVkIG1fd2lkdGhWYXJpYW50
IDogMjsgLy8gRm9udFdpZHRoVmFyaWFudAorICAgIHVuc2lnbmVkIG1faXRhbGljIDogMTsgLy8g
Rm9udEl0YWxpYworICAgIHVuc2lnbmVkIG1fc21hbGxDYXBzIDogMTsgLy8gRm9udFNtYWxsQ2Fw
cworICAgIHVuc2lnbmVkIG1fd2VpZ2h0IDogODsgLy8gRm9udFdlaWdodAorICAgIHVuc2lnbmVk
IG1fcmVuZGVyaW5nTW9kZSA6IDE7IC8vIFVzZWQgdG8gc3dpdGNoIGJldHdlZW4gQ0cgYW5kIEdE
SSB0ZXh0IG9uIFdpbmRvd3MuCisgICAgdW5zaWduZWQgbV90ZXh0UmVuZGVyaW5nIDogMjsgLy8g
VGV4dFJlbmRlcmluZ01vZGUKKyAgICB1bnNpZ25lZCBtX3NjcmlwdCA6IDc7IC8vIFVzZWQgdG8g
aGVscCBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgZm9udCBmb3IgZ2VuZXJpYyBmb250IGZhbWlsaWVz
LgorICAgIHVuc2lnbmVkIG1fZm9udFN5bnRoZXNpcyA6IDI7IC8vIEZvbnRTeW50aGVzaXMgdHlw
ZQorfTsKKworaW5saW5lIGJvb2wgRm9udERlc2NyaXB0aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tcHV0ZWRTaXpl
ID09IG90aGVyLm1fY29tcHV0ZWRTaXplCisgICAgICAgICYmIG1faXRhbGljID09IG90aGVyLm1f
aXRhbGljCisgICAgICAgICYmIG1fc21hbGxDYXBzID09IG90aGVyLm1fc21hbGxDYXBzCisgICAg
ICAgICYmIG1fd2VpZ2h0ID09IG90aGVyLm1fd2VpZ2h0CisgICAgICAgICYmIG1fcmVuZGVyaW5n
TW9kZSA9PSBvdGhlci5tX3JlbmRlcmluZ01vZGUKKyAgICAgICAgJiYgbV90ZXh0UmVuZGVyaW5n
ID09IG90aGVyLm1fdGV4dFJlbmRlcmluZworICAgICAgICAmJiBtX29yaWVudGF0aW9uID09IG90
aGVyLm1fb3JpZW50YXRpb24KKyAgICAgICAgJiYgbV9ub25DSktHbHlwaE9yaWVudGF0aW9uID09
IG90aGVyLm1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbgorICAgICAgICAmJiBtX3dpZHRoVmFyaWFu
dCA9PSBvdGhlci5tX3dpZHRoVmFyaWFudAorICAgICAgICAmJiBtX2xvY2FsZSA9PSBvdGhlci5t
X2xvY2FsZQorICAgICAgICAmJiBtX2ZlYXR1cmVTZXR0aW5ncyA9PSBvdGhlci5tX2ZlYXR1cmVT
ZXR0aW5ncworICAgICAgICAmJiBtX2ZvbnRTeW50aGVzaXMgPT0gb3RoZXIubV9mb250U3ludGhl
c2lzOworfQorCisvLyBGSVhNRTogTW92ZSB0byBhIGZpbGUgb2YgaXRzIG93bi4KK2NsYXNzIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24gOiBwdWJsaWMgRm9udERlc2NyaXB0aW9uIHsKK3B1YmxpYzoK
ICAgICBlbnVtIEtlcm5pbmcgeyBBdXRvS2VybmluZywgTm9ybWFsS2VybmluZywgTm9uZUtlcm5p
bmcgfTsKIAogICAgIGVudW0gTGlnYXR1cmVzU3RhdGUgeyBOb3JtYWxMaWdhdHVyZXNTdGF0ZSwg
RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSwgRW5hYmxlZExpZ2F0dXJlc1N0YXRlIH07CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBGb250RGVzY3JpcHRpb24oKTsKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0
aW9uKCk7CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29u
c3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOyB9CiAKICAgICB1bnNpZ25lZCBmYW1pbHlDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZmFtaWxpZXMuc2l6ZSgpOyB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmaXJzdEZh
bWlseSgpIGNvbnN0IHsgcmV0dXJuIGZhbWlseUF0KDApOyB9CkBAIC01NSwxNyArMTMxLDEzIEBA
IHB1YmxpYzoKICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRvbWljU3RyaW5nPiYgZmFtaWxp
ZXMoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzOyB9CiAKICAgICBmbG9hdCBzcGVjaWZpZWRT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpZWRTaXplOyB9Ci0gICAgZmxvYXQgY29tcHV0
ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlZFNpemU7IH0KLSAgICBGb250SXRhbGlj
IGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRJdGFsaWM+KG1faXRhbGlj
KTsgfQotICAgIGludCBjb21wdXRlZFBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGludChtX2Nv
bXB1dGVkU2l6ZSArIDAuNWYpOyB9Ci0gICAgRm9udFNtYWxsQ2FwcyBzbWFsbENhcHMoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxGb250U21hbGxDYXBzPihtX3NtYWxsQ2Fwcyk7IH0KICAg
ICBib29sIGlzQWJzb2x1dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pc0Fic29sdXRlU2l6ZTsg
fQotICAgIEZvbnRXZWlnaHQgd2VpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9u
dFdlaWdodD4obV93ZWlnaHQpOyB9CiAgICAgRm9udFdlaWdodCBsaWdodGVyV2VpZ2h0KCkgY29u
c3Q7CiAgICAgRm9udFdlaWdodCBib2xkZXJXZWlnaHQoKSBjb25zdDsKKwogICAgIC8vIG9ubHkg
dXNlIGZpeGVkIGRlZmF1bHQgc2l6ZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGZvbnQgZmFtaWx5
LCBhbmQgdGhhdCBmYW1pbHkgaXMgIm1vbm9zcGFjZSIKICAgICBib29sIHVzZUZpeGVkRGVmYXVs
dFNpemUoKSBjb25zdCB7IHJldHVybiBmYW1pbHlDb3VudCgpID09IDEgJiYgZmlyc3RGYW1pbHko
KSA9PSBtb25vc3BhY2VGYW1pbHk7IH0KLSAgICBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFJlbmRlcmluZ01vZGU+KG1fcmVu
ZGVyaW5nTW9kZSk7IH0KKwogICAgIEtlcm5pbmcga2VybmluZygpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEtlcm5pbmc+KG1fa2VybmluZyk7IH0KICAgICBMaWdhdHVyZXNTdGF0ZSBjb21t
b25MaWdhdHVyZXNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PExpZ2F0dXJlc1N0
YXRlPihtX2NvbW1vbkxpZ2F0dXJlc1N0YXRlKTsgfQogICAgIExpZ2F0dXJlc1N0YXRlIGRpc2Ny
ZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PExpZ2F0
dXJlc1N0YXRlPihtX2Rpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSk7IH0KQEAgLTc4LDMwICsx
NTAsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgICB9CiAgICAg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEZvbnRTbW9vdGhpbmdNb2RlPihtX2ZvbnRTbW9vdGhpbmcpOyB9Ci0gICAgVGV4dFJlbmRl
cmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxU
ZXh0UmVuZGVyaW5nTW9kZT4obV90ZXh0UmVuZGVyaW5nKTsgfQotICAgIFVTY3JpcHRDb2RlIHNj
cmlwdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVTY3JpcHRDb2RlPihtX3NjcmlwdCk7
IH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YWxlOyB9Ci0KLSAgICBGb250VHJhaXRzTWFzayB0cmFpdHNNYXNrKCkgY29uc3Q7CiAgICAgYm9v
bCBpc1NwZWNpZmllZEZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzU3BlY2lmaWVkRm9udDsgfQot
ICAgIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEZvbnRPcmllbnRhdGlvbj4obV9vcmllbnRhdGlvbik7IH0KLSAgICBOb25DSktHbHlwaE9y
aWVudGF0aW9uIG5vbkNKS0dseXBoT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxOb25DSktHbHlwaE9yaWVudGF0aW9uPihtX25vbkNKS0dseXBoT3JpZW50YXRpb24pOyB9
Ci0gICAgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxGb250V2lkdGhWYXJpYW50PihtX3dpZHRoVmFyaWFudCk7IH0KLSAgICBGb250RmVh
dHVyZVNldHRpbmdzKiBmZWF0dXJlU2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVT
ZXR0aW5ncy5nZXQoKTsgfQotICAgIEZvbnRTeW50aGVzaXMgZm9udFN5bnRoZXNpcygpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRTeW50aGVzaXM+KG1fZm9udFN5bnRoZXNpcyk7IH0K
IAogICAgIHZvaWQgc2V0T25lRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KSB7IEFT
U0VSVChtX2ZhbWlsaWVzLnNpemUoKSA9PSAxKTsgbV9mYW1pbGllc1swXSA9IGZhbWlseTsgfQog
ICAgIHZvaWQgc2V0RmFtaWxpZXMoY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIGZhbWlsaWVz
KSB7IG1fZmFtaWxpZXMgPSBSZWZDb3VudGVkQXJyYXk8QXRvbWljU3RyaW5nPihmYW1pbGllcyk7
IH0KICAgICB2b2lkIHNldEZhbWlsaWVzKGNvbnN0IFJlZkNvdW50ZWRBcnJheTxBdG9taWNTdHJp
bmc+JiBmYW1pbGllcykgeyBtX2ZhbWlsaWVzID0gZmFtaWxpZXM7IH0KLSAgICB2b2lkIHNldENv
bXB1dGVkU2l6ZShmbG9hdCBzKSB7IG1fY29tcHV0ZWRTaXplID0gY2xhbXBUb0Zsb2F0KHMpOyB9
CiAgICAgdm9pZCBzZXRTcGVjaWZpZWRTaXplKGZsb2F0IHMpIHsgbV9zcGVjaWZpZWRTaXplID0g
Y2xhbXBUb0Zsb2F0KHMpOyB9Ci0gICAgdm9pZCBzZXRJdGFsaWMoRm9udEl0YWxpYyBpKSB7IG1f
aXRhbGljID0gaTsgfQotICAgIHZvaWQgc2V0SXNJdGFsaWMoYm9vbCBpKSB7IHNldEl0YWxpYyhp
ID8gRm9udEl0YWxpY09uIDogRm9udEl0YWxpY09mZik7IH0KLSAgICB2b2lkIHNldFNtYWxsQ2Fw
cyhGb250U21hbGxDYXBzIGMpIHsgbV9zbWFsbENhcHMgPSBjOyB9Ci0gICAgdm9pZCBzZXRJc1Nt
YWxsQ2Fwcyhib29sIGMpIHsgc2V0U21hbGxDYXBzKGMgPyBGb250U21hbGxDYXBzT24gOiBGb250
U21hbGxDYXBzT2ZmKTsgfQogICAgIHZvaWQgc2V0SXNBYnNvbHV0ZVNpemUoYm9vbCBzKSB7IG1f
aXNBYnNvbHV0ZVNpemUgPSBzOyB9Ci0gICAgdm9pZCBzZXRXZWlnaHQoRm9udFdlaWdodCB3KSB7
IG1fd2VpZ2h0ID0gdzsgfQotICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9kZShGb250UmVuZGVyaW5n
TW9kZSBtb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IG1vZGU7IH0KICAgICB2b2lkIHNldEtlcm5p
bmcoS2VybmluZyBrZXJuaW5nKSB7IG1fa2VybmluZyA9IGtlcm5pbmc7IH0KICAgICB2b2lkIHNl
dENvbW1vbkxpZ2F0dXJlc1N0YXRlKExpZ2F0dXJlc1N0YXRlIGNvbW1vbkxpZ2F0dXJlc1N0YXRl
KSB7IG1fY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBjb21tb25MaWdhdHVyZXNTdGF0ZTsgfQogICAg
IHZvaWQgc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKExpZ2F0dXJlc1N0YXRlIGRpc2Ny
ZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSkgeyBtX2Rpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9
IGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZTsgfQpAQCAtMTE4LDI1ICsxNzMsMTcgQEAgcHVi
bGljOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KENTU1ZhbHVlV2Via2l0WHh4TGFyZ2UgLSBDU1NW
YWx1ZVh4U21hbGwgKyAxID09IDgsICJNYXhpbXVtIGtleXdvcmQgc2l6ZSBzaG91bGQgYmUgOC4i
KTsKICAgICAgICAgc2V0S2V5d29yZFNpemUoaWRlbnRpZmllciA/IGlkZW50aWZpZXIgLSBDU1NW
YWx1ZVh4U21hbGwgKyAxIDogMCk7CiAgICAgfQotCiAgICAgdm9pZCBzZXRGb250U21vb3RoaW5n
KEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZykgeyBtX2ZvbnRTbW9vdGhpbmcgPSBzbW9vdGhp
bmc7IH0KLSAgICB2b2lkIHNldFRleHRSZW5kZXJpbmdNb2RlKFRleHRSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZykgeyBtX3RleHRSZW5kZXJpbmcgPSByZW5kZXJpbmc7IH0KICAgICB2b2lkIHNldElz
U3BlY2lmaWVkRm9udChib29sIGlzU3BlY2lmaWVkRm9udCkgeyBtX2lzU3BlY2lmaWVkRm9udCA9
IGlzU3BlY2lmaWVkRm9udDsgfQotICAgIHZvaWQgc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQotICAgIHZv
aWQgc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihOb25DSktHbHlwaE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSB7IG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9Ci0gICAg
dm9pZCBzZXRXaWR0aFZhcmlhbnQoRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQpIHsgbV93
aWR0aFZhcmlhbnQgPSB3aWR0aFZhcmlhbnQ7IH0gLy8gTWFrZSBzdXJlIG5ldyBjYWxsZXJzIG9m
IHRoaXMgc3luYyB3aXRoIEZvbnRQbGF0Zm9ybURhdGE6OmlzRm9yVGV4dENvbWJpbmUoKSEKLSAg
ICB2b2lkIHNldExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICB2b2lkIHNldEZlYXR1
cmVTZXR0aW5ncyhQYXNzUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IHNldHRpbmdzKSB7IG1f
ZmVhdHVyZVNldHRpbmdzID0gc2V0dGluZ3M7IH0KLSAgICB2b2lkIHNldEZvbnRTeW50aGVzaXMo
Rm9udFN5bnRoZXNpcyBmb250U3ludGhlc2lzKSB7IG1fZm9udFN5bnRoZXNpcyA9IGZvbnRTeW50
aGVzaXM7IH0KIAogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQotICAgIGJvb2wgZmFt
aWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIp
IGNvbnN0OworICAgIGJvb2wgZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdDsKIAotICAgIGJvb2wgZXF1YWxGb3JU
ZXh0QXV0b1NpemluZyhjb25zdCBGb250RGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAorICAgIGJv
b2wgZXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBv
dGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBmYW1pbGllc0VxdWFsRm9yVGV4dEF1
dG9TaXppbmcob3RoZXIpCiAgICAgICAgICAgICAmJiBtX3NwZWNpZmllZFNpemUgPT0gb3RoZXIu
bV9zcGVjaWZpZWRTaXplCi0gICAgICAgICAgICAmJiBtX3NtYWxsQ2FwcyA9PSBvdGhlci5tX3Nt
YWxsQ2FwcworICAgICAgICAgICAgJiYgc21hbGxDYXBzKCkgPT0gb3RoZXIuc21hbGxDYXBzKCkK
ICAgICAgICAgICAgICYmIG1faXNBYnNvbHV0ZVNpemUgPT0gb3RoZXIubV9pc0Fic29sdXRlU2l6
ZTsKICAgICB9CiAjZW5kaWYKQEAgLTE1MiwyNyArMTk5LDEyIEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBSZWZDb3VudGVkQXJyYXk8QXRvbWljU3RyaW5nPiBtX2ZhbWlsaWVzIHsgMSB9Owot
ICAgIFJlZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBtX2ZlYXR1cmVTZXR0aW5nczsKLSAgICBB
dG9taWNTdHJpbmcgbV9sb2NhbGUgeyBpbml0aWFsTG9jYWxlKCkgfTsKIAogICAgIGZsb2F0IG1f
c3BlY2lmaWVkU2l6ZSB7IDAgfTsgICAvLyBTcGVjaWZpZWQgQ1NTIHZhbHVlLiBJbmRlcGVuZGVu
dCBvZiByZW5kZXJpbmcgaXNzdWVzIHN1Y2ggYXMgaW50ZWdlcgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyByb3VuZGluZywgbWluaW11bSBmb250IHNpemVzLCBhbmQgem9vbWluZy4K
LSAgICBmbG9hdCBtX2NvbXB1dGVkU2l6ZSB7IDAgfTsgICAgLy8gQ29tcHV0ZWQgc2l6ZSBhZGp1
c3RlZCBmb3IgdGhlIG1pbmltdW0gZm9udCBzaXplIGFuZCB0aGUgem9vbSBmYWN0b3IuCi0KLSAg
ICB1bnNpZ25lZCBtX29yaWVudGF0aW9uIDogMTsgLy8gRm9udE9yaWVudGF0aW9uIC0gV2hldGhl
ciB0aGUgZm9udCBpcyByZW5kZXJpbmcgb24gYSBob3Jpem9udGFsIGxpbmUgb3IgYSB2ZXJ0aWNh
bCBsaW5lLgotICAgIHVuc2lnbmVkIG1fbm9uQ0pLR2x5cGhPcmllbnRhdGlvbiA6IDE7IC8vIE5v
bkNKS0dseXBoT3JpZW50YXRpb24gLSBPbmx5IHVzZWQgYnkgdmVydGljYWwgdGV4dC4gRGV0ZXJt
aW5lcyB0aGUgZGVmYXVsdCBvcmllbnRhdGlvbiBmb3Igbm9uLWlkZW9ncmFwaCBnbHlwaHMuCi0K
LSAgICB1bnNpZ25lZCBtX3dpZHRoVmFyaWFudCA6IDI7IC8vIEZvbnRXaWR0aFZhcmlhbnQKLQot
ICAgIHVuc2lnbmVkIG1faXRhbGljIDogMTsgLy8gRm9udEl0YWxpYwotICAgIHVuc2lnbmVkIG1f
c21hbGxDYXBzIDogMTsgLy8gRm9udFNtYWxsQ2FwcwogICAgIHVuc2lnbmVkIG1faXNBYnNvbHV0
ZVNpemUgOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCBDU1Mgc3BlY2lmaWVkIGFuIGV4cGxpY2l0IHNp
emUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAobG9naWNhbCBzaXplcyBs
aWtlICJtZWRpdW0iIGRvbid0IGNvdW50KS4KLSAgICB1bnNpZ25lZCBtX3dlaWdodCA6IDg7IC8v
IEZvbnRXZWlnaHQKLQotICAgIHVuc2lnbmVkIG1fcmVuZGVyaW5nTW9kZSA6IDE7ICAvLyBVc2Vk
IHRvIHN3aXRjaCBiZXR3ZWVuIENHIGFuZCBHREkgdGV4dCBvbiBXaW5kb3dzLgogICAgIHVuc2ln
bmVkIG1fa2VybmluZyA6IDI7IC8vIEtlcm5pbmcKLQogICAgIHVuc2lnbmVkIG1fY29tbW9uTGln
YXR1cmVzU3RhdGUgOiAyOwogICAgIHVuc2lnbmVkIG1fZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0
YXRlIDogMjsKICAgICB1bnNpZ25lZCBtX2hpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA6IDI7CkBA
IC0xODIsMzYgKzIxNCwyMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gKGUuZy4sIDEzcHggbW9ub3NwYWNlIHZzLiAxNnB4IGV2ZXJ5dGhpbmcgZWxzZSkuICBTaXpl
cyBhcmUgMS04IChsaWtlIHRoZSBIVE1MIHNpemUgdmFsdWVzIGZvciA8Zm9udD4pLgogCiAgICAg
dW5zaWduZWQgbV9mb250U21vb3RoaW5nIDogMjsgLy8gRm9udFNtb290aGluZ01vZGUKLSAgICB1
bnNpZ25lZCBtX3RleHRSZW5kZXJpbmcgOiAyOyAvLyBUZXh0UmVuZGVyaW5nTW9kZQogICAgIHVu
c2lnbmVkIG1faXNTcGVjaWZpZWRGb250IDogMTsgLy8gVHJ1ZSBpZiBhIHdlYiBwYWdlIHNwZWNp
ZmllcyBhIG5vbi1nZW5lcmljIGZvbnQgZmFtaWx5IGFzIHRoZSBmaXJzdCBmb250IGZhbWlseS4K
LSAgICB1bnNpZ25lZCBtX3NjcmlwdCA6IDc7IC8vIFVzZWQgdG8gaGVscCBjaG9vc2UgYW4gYXBw
cm9wcmlhdGUgZm9udCBmb3IgZ2VuZXJpYyBmb250IGZhbWlsaWVzLgotICAgIHVuc2lnbmVkIG1f
Zm9udFN5bnRoZXNpcyA6IDI7IC8vIEZvbnRTeW50aGVzaXMgdHlwZQogfTsKIAotaW5saW5lIGJv
b2wgRm9udERlc2NyaXB0aW9uOjpvcGVyYXRvcj09KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3Ro
ZXIpIGNvbnN0CitpbmxpbmUgYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpvcGVyYXRvcj09
KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAogewotICAgIHJldHVy
biBtX2ZhbWlsaWVzID09IG90aGVyLm1fZmFtaWxpZXMKKyAgICByZXR1cm4gRm9udERlc2NyaXB0
aW9uOjpvcGVyYXRvcj09KG90aGVyKQorICAgICAgICAmJiBtX2ZhbWlsaWVzID09IG90aGVyLm1f
ZmFtaWxpZXMKICAgICAgICAgJiYgbV9zcGVjaWZpZWRTaXplID09IG90aGVyLm1fc3BlY2lmaWVk
U2l6ZQotICAgICAgICAmJiBtX2NvbXB1dGVkU2l6ZSA9PSBvdGhlci5tX2NvbXB1dGVkU2l6ZQot
ICAgICAgICAmJiBtX2l0YWxpYyA9PSBvdGhlci5tX2l0YWxpYwotICAgICAgICAmJiBtX3NtYWxs
Q2FwcyA9PSBvdGhlci5tX3NtYWxsQ2FwcwogICAgICAgICAmJiBtX2lzQWJzb2x1dGVTaXplID09
IG90aGVyLm1faXNBYnNvbHV0ZVNpemUKLSAgICAgICAgJiYgbV93ZWlnaHQgPT0gb3RoZXIubV93
ZWlnaHQKLSAgICAgICAgJiYgbV9yZW5kZXJpbmdNb2RlID09IG90aGVyLm1fcmVuZGVyaW5nTW9k
ZQogICAgICAgICAmJiBtX2tlcm5pbmcgPT0gb3RoZXIubV9rZXJuaW5nCiAgICAgICAgICYmIG1f
Y29tbW9uTGlnYXR1cmVzU3RhdGUgPT0gb3RoZXIubV9jb21tb25MaWdhdHVyZXNTdGF0ZQogICAg
ICAgICAmJiBtX2Rpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9PSBvdGhlci5tX2Rpc2NyZXRp
b25hcnlMaWdhdHVyZXNTdGF0ZQogICAgICAgICAmJiBtX2hpc3RvcmljYWxMaWdhdHVyZXNTdGF0
ZSA9PSBvdGhlci5tX2hpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZQogICAgICAgICAmJiBtX2tleXdv
cmRTaXplID09IG90aGVyLm1fa2V5d29yZFNpemUKICAgICAgICAgJiYgbV9mb250U21vb3RoaW5n
ID09IG90aGVyLm1fZm9udFNtb290aGluZwotICAgICAgICAmJiBtX3RleHRSZW5kZXJpbmcgPT0g
b3RoZXIubV90ZXh0UmVuZGVyaW5nCi0gICAgICAgICYmIG1faXNTcGVjaWZpZWRGb250ID09IG90
aGVyLm1faXNTcGVjaWZpZWRGb250Ci0gICAgICAgICYmIG1fb3JpZW50YXRpb24gPT0gb3RoZXIu
bV9vcmllbnRhdGlvbgotICAgICAgICAmJiBtX25vbkNKS0dseXBoT3JpZW50YXRpb24gPT0gb3Ro
ZXIubV9ub25DSktHbHlwaE9yaWVudGF0aW9uCi0gICAgICAgICYmIG1fd2lkdGhWYXJpYW50ID09
IG90aGVyLm1fd2lkdGhWYXJpYW50Ci0gICAgICAgICYmIG1fbG9jYWxlID09IG90aGVyLm1fbG9j
YWxlCi0gICAgICAgICYmIG1fZmVhdHVyZVNldHRpbmdzID09IG90aGVyLm1fZmVhdHVyZVNldHRp
bmdzCi0gICAgICAgICYmIG1fZm9udFN5bnRoZXNpcyA9PSBvdGhlci5tX2ZvbnRTeW50aGVzaXM7
CisgICAgICAgICYmIG1faXNTcGVjaWZpZWRGb250ID09IG90aGVyLm1faXNTcGVjaWZpZWRGb250
OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250U2VsZWN0b3IuaAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGb250Q2FzY2FkZURlc2NyaXB0aW9u
OwogY2xhc3MgRm9udERlc2NyaXB0aW9uOwogY2xhc3MgRm9udFNlbGVjdG9yQ2xpZW50OwogCkBA
IC00NCw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Rm9udD4gZmFs
bGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgc2l6ZV90KSA9IDA7CiAKICAgICB2
aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3VudCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
cmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgRm9udERlc2NyaXB0aW9uJikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgYm9vbCByZXNvbHZlc0ZhbWlseUZvcihjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJikgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFsaWRhdGVk
KCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCShyZXZpc2lvbiAxODk4
MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQgUGxh
dGZvcm1DQUxheWVyV2luOjpkcmF3VGV4dEF0UG9pbnQKIHsKICAgICBTdHJpbmcgdGV4dChtZXNz
YWdlLCBsZW5ndGgpOwogCi0gICAgRm9udERlc2NyaXB0aW9uIGRlc2M7CisgICAgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiBkZXNjOwogCiAgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOwogICAg
IG1ldHJpY3MuY2JTaXplID0gc2l6ZW9mKG1ldHJpY3MpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVU
ZXh0LmNwcAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDMs
NDggKzI0MywzOSBAQCB1aW50MTZfdCB0b0NvcmVUZXh0Rm9udFdlaWdodChGb250V2VpZ2h0CiAg
ICAgcmV0dXJuIGNvcmVUZXh0Rm9udFdlaWdodHNbZm9udFdlaWdodF07CiB9CiAKLVJlZlB0cjxG
b250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24pCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKIHsKICAg
ICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJh
c2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbgogICAgIC8vIHRoZSByZXF1ZXN0ZWQg
bmFtZXMuIEZvciBleGFtcGxlLCB3ZSdsbCBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRhaW5zICJB
cmFiaWMiIHRvIEdlZXphIFByby4KLSAgICBSZWZQdHI8Rm9udD4gZm9udDsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5ID0gZGVzY3JpcHRpb24uZmFtaWx5QXQoaSk7
Ci0gICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Cisg
ICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAjaWYg
UExBVEZPUk0oSU9TKQotICAgICAgICAvLyBTdWJzdGl0dXRlIHRoZSBkZWZhdWx0IG1vbm9zcGFj
ZSBmb250IGZvciB3ZWxsLWtub3duIG1vbm9zcGFjZSBmb250cy4KLSAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbW9uYWNvKCJtb25hY28iLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4gbWVubG8oIm1lbmxvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGNvdXJp
ZXIoImNvdXJpZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgbW9uYWNvKSB8fCBlcXVhbElnbm9yaW5n
Q2FzZShmYW1pbHksIG1lbmxvKSkgewotICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHko
ZGVzY3JpcHRpb24sIGNvdXJpZXIpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBTdWJzdGl0dXRlIFZlcmRhbmEgZm9yIEx1Y2lkYSBHcmFuZGUuCi0gICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGx1Y2lkYUdyYW5kZSgibHVj
aWRhIGdyYW5kZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwg
QXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShmYW1pbHksIGx1Y2lkYUdyYW5kZSkpIHsKLSAgICAgICAgICAgIGZvbnQgPSBm
b250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCB2ZXJkYW5hKTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9CisgICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCBtb25vc3BhY2UgZm9u
dCBmb3Igd2VsbC1rbm93biBtb25vc3BhY2UgZm9udHMuCisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gbW9uYWNvKCJtb25hY28iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBt
ZW5sbygibWVubG8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGZhbWlseSwgbW9uYWNvKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIG1lbmxvKSkK
KyAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGNvdXJpZXIpOworCisg
ICAgLy8gU3Vic3RpdHV0ZSBWZXJkYW5hIGZvciBMdWNpZGEgR3JhbmRlLgorICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGx1Y2lkYUdyYW5kZSgibHVjaWRhIGdyYW5kZSIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IHZlcmRhbmEoInZlcmRhbmEiLCBBdG9taWNTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCBs
dWNpZGFHcmFuZGUpKQorICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
dmVyZGFuYSk7CiAjZW5kaWYKIAotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5n
PiBhcmFiaWMoQVNDSUlMaXRlcmFsKCJBcmFiaWMiKSk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IHBhc2h0byhBU0NJSUxpdGVyYWwoIlBhc2h0byIpKTsKLSAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gdXJkdShBU0NJSUxpdGVyYWwoIlVyZHUiKSk7
Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCks
ICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxBdG9taWNTdHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IGdlZXphQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBmb3IgKFN0cmluZyogbWF0Y2hXb3JkIDogbWF0Y2hX
b3JkcykgewotICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3JkLCBmYWxz
ZSkpCi0gICAgICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlz
Rm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gZ2VlemFCb2xkIDogZ2VlemFQ
bGFpbik7Ci0gICAgICAgIH0KKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhcmFi
aWMoQVNDSUlMaXRlcmFsKCJBcmFiaWMiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gcGFzaHRvKEFTQ0lJTGl0ZXJhbCgiUGFzaHRvIikpOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IHVyZHUoQVNDSUlMaXRlcmFsKCJVcmR1IikpOworICAgIHN0YXRpYyBT
dHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0KCksICZ1
cmR1LmdldCgpIH07CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2Vl
emFQbGFpbigiR2VlemFQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBnZWV6YUJvbGQoIkdlZXph
UHJvLUJvbGQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBmb3Ig
KFN0cmluZyogbWF0Y2hXb3JkIDogbWF0Y2hXb3JkcykgeworICAgICAgICBpZiAoZmFtaWx5LmNv
bnRhaW5zKCptYXRjaFdvcmQsIGZhbHNlKSkKKyAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOwogICAgIH0KLQotICAgIHJldHVybiBmb250LnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogVmVjdG9yPEZvbnRUcmFpdHNNYXNrPiBG
b250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFt
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZC
dXp6U2hhcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAJKHJldmlzaW9uIDE4OTgyMykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgSGFyZkJ1enpTaGFwZXI6
OnNldFBhZGRpbmcoaW50IHBhZGQKIAogdm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0Rm9udEZlYXR1
cmVzKCkKIHsKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uID0gbV9mb250
LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBjb25zdCBhdXRvJiBkZXNjcmlwdGlvbiA9IG1fZm9u
dC0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgaWYgKGRlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWwpIHsKICAgICAgICAgc3RhdGljIGhiX2ZlYXR1cmVfdCB2ZXJ0ID0geyBIYXJm
QnV6ekZhY2U6OnZlcnRUYWcsIDEsIDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtMSkgfTsKICAg
ICAgICAgc3RhdGljIGhiX2ZlYXR1cmVfdCB2cnQyID0geyBIYXJmQnV6ekZhY2U6OnZydDJUYWcs
IDEsIDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtMSkgfTsKQEAgLTMzOCwxNSArMzM4LDE1IEBA
IHZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldEZvbnRGZWF0dXJlcygpCiAKICAgICBoYl9mZWF0dXJl
X3Qga2VybmluZyA9IHsgSGFyZkJ1enpGYWNlOjprZXJuVGFnLCAwLCAwLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oLTEpIH07CiAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi5rZXJuaW5nKCkpIHsKLSAg
ICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsS2VybmluZzoKKyAgICBjYXNlIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246Ok5vcm1hbEtlcm5pbmc6CiAgICAgICAgIGtlcm5pbmcudmFsdWUgPSAx
OwogICAgICAgICBtX2ZlYXR1cmVzLmFwcGVuZChrZXJuaW5nKTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vbmVLZXJuaW5nOgorICAgIGNhc2UgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6Tm9uZUtlcm5pbmc6CiAgICAgICAgIGtlcm5pbmcudmFsdWUgPSAwOwog
ICAgICAgICBtX2ZlYXR1cmVzLmFwcGVuZChrZXJuaW5nKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nOgorICAgIGNhc2UgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc6CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1RoZW1lTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1RoZW1lTWFjLmgJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9UaGVtZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChDb250
cm9sUGFydCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIE9wdGlvbmFsPEZvbnREZXNj
cmlwdGlvbj4gY29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxv
YXQgem9vbUZhY3RvcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGb250
Q2FzY2FkZURlc2NyaXB0aW9uPiBjb250cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udENh
c2NhZGUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdCBvdmVycmlkZTsKICAgICAKICAgICB2aXJ0
dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNv
bnN0IEZvbnRDYXNjYWRlJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCShyZXZpc2lvbiAxODk4MjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTcwMCwxMSArNzAwLDExIEBAIGludCBUaGVtZU1hYzo6YmFzZWxpbmVQb3NpdGlvbkFk
anVzdG1lbnQKICAgICByZXR1cm4gVGhlbWU6OmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50KHBh
cnQpOwogfQogCi1PcHRpb25hbDxGb250RGVzY3JpcHRpb24+IFRoZW1lTWFjOjpjb250cm9sRm9u
dChDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxvYXQgem9vbUZh
Y3RvcikgY29uc3QKK09wdGlvbmFsPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IFRoZW1lTWFjOjpj
b250cm9sRm9udChDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgZmxv
YXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2Fz
ZSBQdXNoQnV0dG9uUGFydDogewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbjsKKyAgICAgICAgICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUp
OwogCiAgICAgICAgICAgICBOU0ZvbnQqIG5zRm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6
ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6Y29udHJvbFNpemVGb3JGb250
KGZvbnQpXV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdl
V2luLmNwcAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBzdGF0
aWMgRm9udENhc2NhZGUgZHJhZ0xhYmVsRm9udChpbnQgc2l6CiAgICAgbWV0cmljcy5jYlNpemUg
PSBzaXplb2YobWV0cmljcyk7CiAgICAgU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNM
SUVOVE1FVFJJQ1MsIG1ldHJpY3MuY2JTaXplLCAmbWV0cmljcywgMCk7CiAKLSAgICBGb250RGVz
Y3JpcHRpb24gZGVzY3JpcHRpb247CisgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbjsKICAgICBkZXNjcmlwdGlvbi5zZXRXZWlnaHQoYm9sZCA/IEZvbnRXZWlnaHRCb2xkIDog
Rm9udFdlaWdodE5vcm1hbCk7CiAgICAgZGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KG1ldHJpY3Mu
bGZTbUNhcHRpb25Gb250LmxmRmFjZU5hbWUpOwogICAgIGRlc2NyaXB0aW9uLnNldFNwZWNpZmll
ZFNpemUoKGZsb2F0KXNpemUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bv
cHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyArMzQx
LDcgQEAgdm9pZCBQb3B1cE1lbnVXaW46OmNhbGN1bGF0ZVBvc2l0aW9uQW5kUwogCiAgICAgICAg
IEZvbnRDYXNjYWRlIGl0ZW1Gb250ID0gY2xpZW50KCktPm1lbnVTdHlsZSgpLmZvbnQoKTsKICAg
ICAgICAgaWYgKGNsaWVudCgpLT5pdGVtSXNMYWJlbChpKSkgewotICAgICAgICAgICAgRm9udERl
c2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIGF1
dG8gZCA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgZC5zZXRXZWln
aHQoZC5ib2xkZXJXZWlnaHQoKSk7CiAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRl
KGQsIGl0ZW1Gb250LmxldHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAg
ICAgICAgICAgICBpdGVtRm9udC51cGRhdGUobV9wb3B1cENsaWVudC0+Zm9udFNlbGVjdG9yKCkp
OwpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgUG9wdXBNZW51V2luOjpwYWludChjb25zdCBJbnRS
ZWN0JiAKICAgICAgICAgCiAgICAgICAgIEZvbnRDYXNjYWRlIGl0ZW1Gb250ID0gY2xpZW50KCkt
Pm1lbnVTdHlsZSgpLmZvbnQoKTsKICAgICAgICAgaWYgKGNsaWVudCgpLT5pdGVtSXNMYWJlbChp
bmRleCkpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRlbUZvbnQuZm9udERl
c2NyaXB0aW9uKCk7CisgICAgICAgICAgICBhdXRvIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRp
b24oKTsKICAgICAgICAgICAgIGQuc2V0V2VpZ2h0KGQuYm9sZGVyV2VpZ2h0KCkpOwogICAgICAg
ICAgICAgaXRlbUZvbnQgPSBGb250Q2FzY2FkZShkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCks
IGl0ZW1Gb250LndvcmRTcGFjaW5nKCkpOwogICAgICAgICAgICAgaXRlbUZvbnQudXBkYXRlKG1f
cG9wdXBDbGllbnQtPmZvbnRTZWxlY3RvcigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4NSw3ICsyOTg1
LDcgQEAgc3RhdGljIFJlbmRlclN0eWxlJiBzdHlsZUZvckZpcnN0TGV0dGVyKAogICAgICAgICAK
ICAgICAgICAgLy8gU2V0IHRoZSBmb250IHRvIGJlIG9uZSBsaW5lIHRvbyBiaWcgYW5kIHRoZW4g
cmF0Y2hldCBiYWNrIHRvIGdldCB0byBhIHByZWNpc2UgZml0LiBXZSBjYW4ndCBqdXN0IHNldCB0
aGUgZGVzaXJlZCBmb250IHNpemUgYmFzZWQgb2ZmIGZvbnQgaGVpZ2h0IG1ldHJpY3MKICAgICAg
ICAgLy8gYmVjYXVzZSBtYW55IGZvbnRzIGJha2UgYXNjZW50IGludG8gdGhlIGZvbnQgbWV0cmlj
cy4gVGhlcmVmb3JlIHdlIGhhdmUgdG8gbG9vayBhdCBhY3R1YWwgbWVhc3VyZWQgY2FwIGhlaWdo
dCB2YWx1ZXMgaW4gb3JkZXIgdG8ga25vdyB3aGVuIHdlIGhhdmUgYSBnb29kIGZpdC4KLSAgICAg
ICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbiA9IHBzZXVkb1N0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsKKyAgICAgICAgYXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBwc2V1ZG9T
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGZsb2F0IGNhcFJhdGlvID0gcHNldWRv
U3R5bGUtPmZvbnRNZXRyaWNzKCkuZmxvYXRDYXBIZWlnaHQoKSAvIHBzZXVkb1N0eWxlLT5mb250
U2l6ZSgpOwogICAgICAgICBmbG9hdCBzdGFydGluZ0ZvbnRTaXplID0gKChwc2V1ZG9TdHlsZS0+
aW5pdGlhbExldHRlckhlaWdodCgpIC0gMSkgKiBsaW5lSGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHls
ZSgpLmZvbnRNZXRyaWNzKCkuY2FwSGVpZ2h0KCkpIC8gY2FwUmF0aW87CiAgICAgICAgIG5ld0Zv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0YXJ0aW5nRm9udFNpemUpOwpAQCAtMjk5
Niw3ICsyOTk2LDcgQEAgc3RhdGljIFJlbmRlclN0eWxlJiBzdHlsZUZvckZpcnN0TGV0dGVyKAog
ICAgICAgICBpbnQgZGVzaXJlZENhcEhlaWdodCA9IChwc2V1ZG9TdHlsZS0+aW5pdGlhbExldHRl
ckhlaWdodCgpIC0gMSkgKiBsaW5lSGVpZ2h0ICsgcGFyYWdyYXBoLT5zdHlsZSgpLmZvbnRNZXRy
aWNzKCkuY2FwSGVpZ2h0KCk7CiAgICAgICAgIGludCBhY3R1YWxDYXBIZWlnaHQgPSBwc2V1ZG9T
dHlsZS0+Zm9udE1ldHJpY3MoKS5jYXBIZWlnaHQoKTsKICAgICAgICAgd2hpbGUgKGFjdHVhbENh
cEhlaWdodCA+IGRlc2lyZWRDYXBIZWlnaHQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlv
biBuZXdGb250RGVzY3JpcHRpb24gPSBwc2V1ZG9TdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgICAgICAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IHBzZXVkb1N0eWxlLT5mb250RGVz
Y3JpcHRpb24oKTsKICAgICAgICAgICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRT
aXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkgLSAxKTsKICAgICAgICAgICAg
IG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobmV3Rm9udERlc2NyaXB0aW9uLmNv
bXB1dGVkU2l6ZSgpIC0xKTsKICAgICAgICAgICAgIHBzZXVkb1N0eWxlLT5zZXRGb250RGVzY3Jp
cHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcy
NCw3ICszNzI0LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdENvbXB1dGVkRm9udAog
ICAgICAgICBpZiAoaXNWaXNpYmxlUmVuZGVyVGV4dChkZXNjZW5kZW50KSAmJiByZXNpemVUZXh0
UGVybWl0dGVkKGRlc2NlbmRlbnQpKSB7CiAgICAgICAgICAgICBSZW5kZXJUZXh0JiB0ZXh0ID0g
ZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmRlc2NlbmRlbnQpOwogICAgICAgICAgICAgUmVuZGVyU3R5
bGUmIG9sZFN0eWxlID0gdGV4dC5zdHlsZSgpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IG9sZFN0eWxlLmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICAg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBvbGRTdHlsZS5mb250RGVzY3JpcHRpb24oKTsKICAg
ICAgICAgICAgIGZsb2F0IHNwZWNpZmllZFNpemUgPSBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVk
U2l6ZSgpOwogICAgICAgICAgICAgZmxvYXQgc2NhbGVkU2l6ZSA9IHJvdW5kZihzcGVjaWZpZWRT
aXplICogc2NhbGUpOwogICAgICAgICAgICAgaWYgKHNjYWxlZFNpemUgPiAwICYmIHNjYWxlZFNp
emUgPCBtaW5Gb250U2l6ZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvbWJpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ29tYmluZVRleHQuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3
ICs5Nyw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkKICAgICBpZiAo
c3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBGb250RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBvcmlnaW5hbEZvbnQoKS5mb250RGVzY3Jp
cHRpb24oKTsKKyAgICBhdXRvIGRlc2NyaXB0aW9uID0gb3JpZ2luYWxGb250KCkuZm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgZmxvYXQgZW1XaWR0aCA9IGRlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgp
ICogdGV4dENvbWJpbmVNYXJnaW47CiAgICAgYm9vbCBzaG91bGRVcGRhdGVGb250ID0gZmFsc2U7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVk
T2JqZWN0LmNwcAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDcgKzM1OSw3
IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW4KICAgICBjb250ZW50
UmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgY29udGVudFJlY3QubW92ZUJ5KHJvdW5kZWRJ
bnRQb2ludChhY2N1bXVsYXRlZE9mZnNldCkpOwogCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbjsKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsK
ICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUZvbnQoQ1NTVmFsdWVXZWJr
aXRTbWFsbENvbnRyb2wsIGZvbnREZXNjcmlwdGlvbik7CiAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFdlaWdodChGb250V2VpZ2h0Qm9sZCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmlu
Z01vZGUoZnJhbWUoKS5zZXR0aW5ncygpLmZvbnRSZW5kZXJpbmdNb2RlKCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAkocmV2aXNpb24g
MTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBSZWY8UmVuZGVyU3R5bGU+
IGNyZWF0ZUZ1bGxTY3JlZW4KICAgICAvLyBDcmVhdGUgYSBzdGFja2luZyBjb250ZXh0OgogICAg
IGZ1bGxzY3JlZW5TdHlsZS5nZXQoKS5zZXRaSW5kZXgoSU5UX01BWCk7CiAKLSAgICBmdWxsc2Ny
ZWVuU3R5bGUuZ2V0KCkuc2V0Rm9udERlc2NyaXB0aW9uKEZvbnREZXNjcmlwdGlvbigpKTsKKyAg
ICBmdWxsc2NyZWVuU3R5bGUuZ2V0KCkuc2V0Rm9udERlc2NyaXB0aW9uKHsgfSk7CiAgICAgZnVs
bHNjcmVlblN0eWxlLmdldCgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKG51bGxwdHIpOwogCiAgICAg
ZnVsbHNjcmVlblN0eWxlLmdldCgpLnNldERpc3BsYXkoRkxFWCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExOSw5ICsxMTksOSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50
KCkKICAgICAgICAgICAgICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpl
bGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgICAgICAgICBl
bHNlIGlmIChpczxIVE1MT3B0R3JvdXBFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAg
ICAgICB0ZXh0ID0gZG93bmNhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudD4oKmVsZW1lbnQpLmdyb3Vw
TGFiZWxUZXh0KCk7Ci0gICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9u
dC5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgICAgICBkLnNldFdlaWdodChkLmJvbGRl
cldlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGQsIGl0
ZW1Gb250LmxldHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgICAg
ICAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLnNldFdlaWdodChkZXNjcmlwdGlvbi5ib2xkZXJX
ZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgaXRlbUZvbnQgPSBGb250Q2FzY2FkZShkZXNjcmlw
dGlvbiwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsK
ICAgICAgICAgICAgICAgICBpdGVtRm9udC51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9y
KCkpOwogICAgICAgICAgICAgfQogCkBAIC00MDUsOSArNDA1LDkgQEAgdm9pZCBSZW5kZXJMaXN0
Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKAogICAgIHIubW92ZShpdGVtT2Zmc2V0Rm9yQWxpZ25t
ZW50KHRleHRSdW4sICZpdGVtU3R5bGUsIGl0ZW1Gb250LCByKSk7CiAKICAgICBpZiAoaXM8SFRN
TE9wdEdyb3VwRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVudCkpIHsKLSAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZC5zZXRXZWln
aHQoZC5ib2xkZXJXZWlnaHQoKSk7Ci0gICAgICAgIGl0ZW1Gb250ID0gRm9udENhc2NhZGUoZCwg
aXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKKyAgICAg
ICAgYXV0byBkZXNjcmlwdGlvbiA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOworICAgICAg
ICBkZXNjcmlwdGlvbi5zZXRXZWlnaHQoZGVzY3JpcHRpb24uYm9sZGVyV2VpZ2h0KCkpOworICAg
ICAgICBpdGVtRm9udCA9IEZvbnRDYXNjYWRlKGRlc2NyaXB0aW9uLCBpdGVtRm9udC5sZXR0ZXJT
cGFjaW5nKCksIGl0ZW1Gb250LndvcmRTcGFjaW5nKCkpOwogICAgICAgICBpdGVtRm9udC51cGRh
dGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAs
NyArMjMwLDcgQEAgYm9vbCBSZW5kZXJUZXh0Ojppc1RleHRGcmFnbWVudCgpIGNvbnN0CiBib29s
IFJlbmRlclRleHQ6OmNvbXB1dGVVc2VCYWNrc2xhc2hBc1llblN5bWJvbCgpIGNvbnN0CiB7CiAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKLSAgICBjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZm9u
dERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgYXV0byYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUu
Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkudXNlQmFja3Ns
YXNoQXNZZW5TeW1ib2woKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGZvbnREZXNj
cmlwdGlvbi5pc1NwZWNpZmllZEZvbnQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1OSwxOCArMTE1OSwx
OCBAQCB2b2lkIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nCiAgICAgUGFnZTo6
dXBkYXRlU3R5bGVGb3JBbGxQYWdlc0FmdGVyR2xvYmFsQ2hhbmdlSW5FbnZpcm9ubWVudCgpOwog
fQogCi1Gb250RGVzY3JpcHRpb24mIFJlbmRlclRoZW1lOjpjYWNoZWRTeXN0ZW1Gb250RGVzY3Jp
cHRpb24oQ1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQpIGNvbnN0CitGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiBSZW5kZXJUaGVtZTo6Y2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQg
c3lzdGVtRm9udElEKSBjb25zdAogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVz
Y3JpcHRpb24+IGNhcHRpb247Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlw
dGlvbj4gaWNvbjsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBt
ZW51OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IG1lc3NhZ2VC
b3g7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gc21hbGxDYXB0
aW9uOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHN0YXR1c0Jh
cjsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiB3ZWJraXRNaW5p
Q29udHJvbDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiB3ZWJr
aXRTbWFsbENvbnRyb2w7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlv
bj4gd2Via2l0Q29udHJvbDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0
aW9uPiBkZWZhdWx0RGVzY3JpcHRpb247CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24+IGNhcHRpb247CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24+IGljb247CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24+IG1lbnU7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24+IG1lc3NhZ2VCb3g7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHNtYWxsQ2FwdGlvbjsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gc3RhdHVzQmFyOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURlc2NyaXB0aW9uPiB3ZWJraXRNaW5pQ29udHJv
bDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gd2Vi
a2l0U21hbGxDb250cm9sOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FzY2FkZURl
c2NyaXB0aW9uPiB3ZWJraXRDb250cm9sOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250
Q2FzY2FkZURlc2NyaXB0aW9uPiBkZWZhdWx0RGVzY3JpcHRpb247CiAKICAgICBzd2l0Y2ggKHN5
c3RlbUZvbnRJRCkgewogICAgIGNhc2UgQ1NTVmFsdWVDYXB0aW9uOgpAQCAtMTE5OSw3ICsxMTk5
LDcgQEAgRm9udERlc2NyaXB0aW9uJiBSZW5kZXJUaGVtZTo6Y2FjaGVkU3lzdAogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJUaGVtZTo6c3lzdGVtRm9udChDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCwg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
OjpzeXN0ZW1Gb250KENTU1ZhbHVlSUQgc3lzdGVtRm9udElELCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgZm9udERlc2NyaXB0aW9uID0gY2Fj
aGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKHN5c3RlbUZvbnRJRCk7CiAgICAgaWYgKGZvbnREZXNj
cmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmgJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJu
IDAuNTsgfQogCiAgICAgLy8gU3lzdGVtIGZvbnRzIGFuZCBjb2xvcnMgZm9yIENTUy4KLSAgICB2
b2lkIHN5c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAg
dm9pZCBzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25z
dDsKICAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKENTU1ZhbHVlSUQpIGNvbnN0OwogCiAg
ICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KQEAgLTI1NSw4ICsyNTUsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgRm9udERlc2NyaXB0aW9uJiBjYWNoZWRTeXN0ZW1Gb250RGVzY3Jp
cHRpb24oQ1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCBzeXN0ZW1Gb250SUQs
IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mIGNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHN5c3RlbUZv
bnRJRCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNj
cmlwdGlvbihDU1NWYWx1ZUlEIHN5c3RlbUZvbnRJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYp
IGNvbnN0ID0gMDsKIAogICAgIC8vIFRoZSBwbGF0Zm9ybSBzZWxlY3Rpb24gY29sb3IuCiAgICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lRWZsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVFZmwuY3Bw
CShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCB2b2lkIFJlbmRl
clRoZW1lRWZsOjpzZXREZWZhdWx0Rm9udFNpemUoCiAgICAgZGVmYXVsdEZvbnRTaXplID0gc2l6
ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2Ny
aXB0aW9uKENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZUVmbDo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9u
KENTU1ZhbHVlSUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29u
c3QKIHsKICAgICAvLyBJdCB3YXMgY2FsbGVkIGJ5IFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWlu
dFJlcGxhY2VkIHRvIHJlbmRlciBhbHRlcm5hdGl2ZSBzdHJpbmcuCiAgICAgLy8gVG8gYXZvaWQg
Y2Fpcm9fZXJyb3Igd2hpbGUgcmVuZGVyaW5nLCBmb250RGVzY3JpcHRpb24gc2hvdWxkIGJlIHBh
c3NlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUVmbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUVmbC5oCShy
ZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVF
ZmwuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw3IEBAIHByaXZhdGU6CiAgICAgfQog
CiAgICAgLy8gU3lzdGVtIGZvbnRzLgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDYWNoZWRTeXN0
ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlv
bihDU1NWYWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBBTFdBWVNfSU5MSU5FIEVjb3JlX0V2YXMqIGNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FudmFzLmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBFdmFzX09iamVjdCogZWRqZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZWRqZS5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3
ICs4NCw3IEBAIHN0YXRpYyBkb3VibGUgZ2V0U2NyZWVuRFBJKCkKICAgICByZXR1cm4gZHBpOwog
fQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRp
b24oQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lR3RrOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NT
VmFsdWVJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAog
ewogICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgp
OwogICAgIGlmICghc2V0dGluZ3MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVHdGsuaAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lR3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIC8vIFN5c3RlbSBmb250cy4KLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnREZXNjcmlw
dGlvbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDYWNoZWRTeXN0
ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpIGNv
bnN0IG92ZXJyaWRlOwogCiBwdWJsaWM6CiAjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAkocmV2aXNpb24gMTg5
ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIHNldENvbnRlbnRTaXplQ2F0ZWdvcnkoY29uc3QgU3RyaW5nJik7CiAKIHByb3Rl
Y3RlZDoKLSAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiYgY2FjaGVkU3lzdGVtRm9udERlc2Ny
aXB0aW9uKENTU1ZhbHVlSUQgc3lzdGVtRm9udElEKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZv
bnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYgY2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgc3lzdGVt
Rm9udElEKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2FjaGVkU3lz
dGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJl
bmRlckJveCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5
ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJy
aWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQko
cmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc4LDI1ICsxMDc4LDI1IEBAIGJvb2wgUmVuZGVy
VGhlbWVJT1M6OnNob3VsZEhhdmVDYXBzTG9ja0kKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUZv
bnREZXNjcmlwdGlvbiYgUmVuZGVyVGhlbWVJT1M6OmNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlv
bihDU1NWYWx1ZUlEIHZhbHVlSUQpIGNvbnN0CitGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBSZW5k
ZXJUaGVtZUlPUzo6Y2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgdmFsdWVJ
RCkgY29uc3QKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBz
eXN0ZW1Gb250OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IGhl
YWRsaW5lRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBi
b2R5Rm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBzdWJo
ZWFkbGluZUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4g
Zm9vdG5vdGVGb250OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+
IGNhcHRpb24xRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9u
PiBjYXB0aW9uMkZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlv
bj4gc2hvcnRIZWFkbGluZUZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnREZXNj
cmlwdGlvbj4gc2hvcnRCb2R5Rm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udERl
c2NyaXB0aW9uPiBzaG9ydFN1YmhlYWRsaW5lRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Rm9udERlc2NyaXB0aW9uPiBzaG9ydEZvb3Rub3RlRm9udDsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiBzaG9ydENhcHRpb24xRm9udDsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiB0YWxsQm9keUZvbnQ7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHN5c3RlbUZvbnQ7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IGhlYWRsaW5lRm9u
dDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gYm9k
eUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+
IHN1YmhlYWRsaW5lRm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVE
ZXNjcmlwdGlvbj4gZm9vdG5vdGVGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250
Q2FzY2FkZURlc2NyaXB0aW9uPiBjYXB0aW9uMUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IGNhcHRpb24yRm9udDsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gc2hvcnRIZWFkbGluZUZvbnQ7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHNob3J0Qm9k
eUZvbnQ7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+
IHNob3J0U3ViaGVhZGxpbmVGb250OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uPiBzaG9ydEZvb3Rub3RlRm9udDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Rm9udENhc2NhZGVEZXNjcmlwdGlvbj4gc2hvcnRDYXB0aW9uMUZvbnQ7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHRhbGxCb2R5Rm9udDsK
ICNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDgwMjAwCi0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEZvbnREZXNjcmlwdGlvbj4gdGl0bGUxRm9udDsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Rm9udERlc2NyaXB0aW9uPiB0aXRsZTJGb250OwotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxGb250RGVzY3JpcHRpb24+IHRpdGxlM0ZvbnQ7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHRpdGxlMUZvbnQ7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHRpdGxlMkZvbnQ7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlRGVzY3JpcHRpb24+IHRpdGxlM0Zv
bnQ7CiAjZW5kaWYKIAogICAgIHN0YXRpYyBDRlN0cmluZ1JlZiB1c2VyVGV4dFNpemUgPSBjb250
ZW50U2l6ZUNhdGVnb3J5KCk7CkBAIC0xMTU4LDcgKzExNTgsNyBAQCBGb250RGVzY3JpcHRpb24m
IFJlbmRlclRoZW1lSU9TOjpjYWNoZWRTCiAgICAgfQogfQogCi12b2lkIFJlbmRlclRoZW1lSU9T
Ojp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1ZUlELCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJ
T1M6OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHZhbHVlSUQs
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBS
ZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3I7CiAgICAgQ0ZTdHJp
bmdSZWYgdGV4dFN0eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLmgJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgflJlbmRlclRoZW1lTWFjKCk7CiAKICAgICAvLyBTeXN0ZW0gZm9u
dHMuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihD
U1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShWSURFTykK
ICAgICAvLyBNZWRpYSBjb250cm9scwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMzksNyArMzM5LDcg
QEAgc3RhdGljIEZvbnRXZWlnaHQgdG9Gb250V2VpZ2h0KE5TSW50ZWdlcgogICAgIHJldHVybiBm
b250V2VpZ2h0c1thcHBLaXRGb250V2VpZ2h0IC0gMV07CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVN
YWM6OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIGNzc1ZhbHVl
SWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZU1hYzo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQgY3Nz
VmFsdWVJZCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAog
ewogICAgIE5TRm9udCogZm9udDsKICAgICAvLyBTeXN0ZW0tZm9udC1uZXNzIGNhbid0IGJlIGVu
Y2Fwc3VsYXRlZCBieSBzaW1wbHkgYSBmb250IG5hbWUuIEluc3RlYWQsIHdlIG11c3QgdXNlIGEg
dG9rZW4KQEAgLTgyNCw3ICs4MjQsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTaXplRnJv
bUZvbnQoUmVuCiAKIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSkgY29uc3QKIHsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAg
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKIAogICAgIE5TRm9udCogZm9udCA9IFtOU0Zv
bnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6
Y29udHJvbFNpemVdXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZVNhZmFyaS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lU2FmYXJpLmNwcAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5
Miw3IEBAIHN0YXRpYyBmbG9hdCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXoKICAgICByZXR1
cm4gc2l6ZXNbY29udHJvbFNpemVdOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjp1cGRh
dGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1ZUlELCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6
OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlEIHZhbHVlSUQsIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBmbG9h
dCBmb250U2l6ZTsKICAgICBzd2l0Y2ggKHZhbHVlSUQpIHsKQEAgLTM2MCw3ICszNjAsNyBAQCB2
b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRTaXplRnJvbUZvbnQoCiAKIHZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplKSBjb25z
dAogewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElz
QWJzb2x1dGVTaXplKHRydWUpOwogCiAgICAgZmxvYXQgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6
ZUZvckNvbnRyb2xTaXplKGNvbnRyb2xTaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZVNhZmFyaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5oCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuaAkod29ya2luZyBjb3B5KQpAQCAt
ODMsNyArODMsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICAvLyBTeXN0ZW0gZm9udHMu
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NW
YWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIE1ldGhvZHMgZm9yIGVh
Y2ggYXBwZWFyYW5jZSB2YWx1ZS4KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9u
IDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxOSw3ICszMTksNyBAQCBDb2xvciBSZW5kZXJUaGVtZVdpbjo6
cGxhdGZvcm1JbmFjdGl2ZVNlCiAgICAgcmV0dXJuIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbGxGb250RGVzY3JpcHRpb24oRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIExPR0ZPTlQmIGxvZ0ZvbnQsIGZsb2F0IGZv
bnRTaXplKQorc3RhdGljIHZvaWQgZmlsbEZvbnREZXNjcmlwdGlvbihGb250Q2FzY2FkZURlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIExPR0ZPTlQmIGxvZ0ZvbnQsIGZsb2F0IGZvbnRTaXpl
KQogeyAgICAKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShTdHJpbmcobG9nRm9udC5sZkZhY2VOYW1l
KSk7CkBAIC0zMjgsNyArMzI4LDcgQEAgc3RhdGljIHZvaWQgZmlsbEZvbnREZXNjcmlwdGlvbihG
b250RGVzYwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0l0YWxpYyhsb2dGb250LmxmSXRhbGlj
KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2Ny
aXB0aW9uKENTU1ZhbHVlSUQgdmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVz
Y3JpcHRpb24oQ1NTVmFsdWVJRCB2YWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CiAgICAg
c3RhdGljIE5PTkNMSUVOVE1FVFJJQ1MgbmNtOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lV2luLmgJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVdpbigpOwogCiAgICAgLy8g
U3lzdGVtIGZvbnRzLgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVz
Y3JpcHRpb24oQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1
ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lk
IGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUmKSBjb25zdDsKICAgICB2b2lkIGNsb3Nl
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAJ
KHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1Np
emluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIFRleHRBdXRv
U2l6aW5nVmFsdWU6OmFkanVzdE5vZGVTaXplCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBjbG9uZVJlbmRlclN0eWxl
V2l0aFN0YXRlKHRleHQtPnN0eWxlKCkpOwotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIGF1
dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShhdmVyYWdlU2l6ZSk7CiAgICAgICAg
ICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAg
ICAgICBzdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoJmF1dG9TaXppbmdOb2RlLT5kb2N1bWVu
dCgpLmZvbnRTZWxlY3RvcigpKTsKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIFRleHRBdXRvU2l6
aW5nVmFsdWU6OnJlc2V0KCkKICAgICAgICAgaWYgKCF0ZXh0KQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIC8vIFJlc2V0IHRoZSBmb250IHNpemUgYmFjayB0byB0aGUgb3JpZ2luYWwg
c3BlY2lmaWVkIHNpemUKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IHRleHQtPnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGF1dG8gZm9udERlc2Ny
aXB0aW9uID0gdGV4dC0+c3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZmxvYXQg
b3JpZ2luYWxTaXplID0gZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKTsKICAgICAgICAg
aWYgKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAhPSBvcmlnaW5hbFNpemUpIHsKICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUob3JpZ2luYWxTaXplKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVG9rZW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MVG9rZW4uY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFRva2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcs
NyArODcsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFRva2VuOjp1cGRhdGVTdHlsZSgpCiAgICAgaWYg
KHRva2VuRWxlbWVudC5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptaVRhZykpIHsKICAgICAgICAg
Ly8gVGhpcyB0cmllcyB0byBlbXVsYXRlIHRoZSBkZWZhdWx0IG1hdGh2YXJpYW50IHZhbHVlIG9u
IDxtaT4gdXNpbmcgdGhlIENTUyBmb250LXN0eWxlIHByb3BlcnR5LgogICAgICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYmUgcmV2aXNlZCB3aGVuIG1hdGh2YXJpYW50IGlzIGltcGxlbWVudGVk
IChodHRwOi8vd2tidWcvODU3MzUpIGFuZCB3aGVuIGZvbnRzIHdpdGggTWF0aGVtYXRpY2FsIEFs
cGhhbnVtZXJpYyBTeW1ib2xzIGNoYXJhY3RlcnMgYXJlIG1vcmUgcG9wdWxhci4KLSAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihuZXdTdHlsZS5nZXQoKS5mb250RGVzY3Jp
cHRpb24oKSk7CisgICAgICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gbmV3U3R5bGUuZ2V0KCku
Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yID0g
bmV3U3R5bGUuZ2V0KCkuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKICAgICAgICAgaWYg
KCFtX2NvbnRhaW5zRWxlbWVudCAmJiBlbGVtZW50KCkudGV4dENvbnRlbnQoKS5zdHJpcFdoaXRl
U3BhY2UoKS5zaW1wbGlmeVdoaXRlU3BhY2UoKS5sZW5ndGgoKSA9PSAxICYmICF0b2tlbkVsZW1l
bnQuaGFzQXR0cmlidXRlKG1hdGh2YXJpYW50QXR0cikpCiAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0SXRhbGljKEZvbnRJdGFsaWNPbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDE4OTgyMykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MDEsNyArMTQwMSw3IEBAIGNvbnN0IEFuaW1hdGlvbiogUmVuZGVyU3R5bGU6OnRy
YW5zaXRpb24KIAogY29uc3QgRm9udENhc2NhZGUmIFJlbmRlclN0eWxlOjpmb250Q2FzY2FkZSgp
IGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9udENhc2NhZGU7IH0KIGNvbnN0IEZvbnRNZXRy
aWNzJiBSZW5kZXJTdHlsZTo6Zm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQt
PmZvbnRDYXNjYWRlLmZvbnRNZXRyaWNzKCk7IH0KLWNvbnN0IEZvbnREZXNjcmlwdGlvbiYgUmVu
ZGVyU3R5bGU6OmZvbnREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIGluaGVyaXRlZC0+Zm9u
dENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCk7IH0KK2NvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mIFJlbmRlclN0eWxlOjpmb250RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBpbmhlcml0
ZWQtPmZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigpOyB9CiBmbG9hdCBSZW5kZXJTdHlsZTo6
c3BlY2lmaWVkRm9udFNpemUoKSBjb25zdCB7IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5zcGVj
aWZpZWRTaXplKCk7IH0KIGZsb2F0IFJlbmRlclN0eWxlOjpjb21wdXRlZEZvbnRTaXplKCkgY29u
c3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7IH0KIGludCBSZW5k
ZXJTdHlsZTo6Zm9udFNpemUoKSBjb25zdCB7IHJldHVybiBpbmhlcml0ZWQtPmZvbnRDYXNjYWRl
LnBpeGVsU2l6ZSgpOyB9CkBAIC0xNDA5LDcgKzE0MDksNyBAQCBpbnQgUmVuZGVyU3R5bGU6OmZv
bnRTaXplKCkgY29uc3QgeyByZXR1CiBjb25zdCBMZW5ndGgmIFJlbmRlclN0eWxlOjp3b3JkU3Bh
Y2luZygpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT53b3JkU3BhY2luZzsgfQog
ZmxvYXQgUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBpbmhlcml0
ZWQtPmZvbnRDYXNjYWRlLmxldHRlclNwYWNpbmcoKTsgfQogCi1ib29sIFJlbmRlclN0eWxlOjpz
ZXRGb250RGVzY3JpcHRpb24oY29uc3QgRm9udERlc2NyaXB0aW9uJiB2KQorYm9vbCBSZW5kZXJT
dHlsZTo6c2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIHYp
CiB7CiAgICAgaWYgKGluaGVyaXRlZC0+Zm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCkgIT0g
dikgewogICAgICAgICBpbmhlcml0ZWQuYWNjZXNzKCktPmZvbnRDYXNjYWRlID0gRm9udENhc2Nh
ZGUodiwgaW5oZXJpdGVkLT5mb250Q2FzY2FkZS5sZXR0ZXJTcGFjaW5nKCksIGluaGVyaXRlZC0+
Zm9udENhc2NhZGUud29yZFNwYWNpbmcoKSk7CkBAIC0xNDk0LDE5ICsxNDk0LDE5IEBAIHZvaWQg
UmVuZGVyU3R5bGU6OnNldEZvbnRTaXplKGZsb2F0IHNpemUKICAgICAgICAgc2l6ZSA9IHN0ZDo6
bWluKG1heGltdW1BbGxvd2VkRm9udFNpemUsIHNpemUpOwogCiAgICAgRm9udFNlbGVjdG9yKiBj
dXJyZW50Rm9udFNlbGVjdG9yID0gZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKLSAgICBG
b250RGVzY3JpcHRpb24gZGVzYyhmb250RGVzY3JpcHRpb24oKSk7Ci0gICAgZGVzYy5zZXRTcGVj
aWZpZWRTaXplKHNpemUpOwotICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKHNpemUpOworICAgIGF1
dG8gZGVzY3JpcHRpb24gPSBmb250RGVzY3JpcHRpb24oKTsKKyAgICBkZXNjcmlwdGlvbi5zZXRT
cGVjaWZpZWRTaXplKHNpemUpOworICAgIGRlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzaXpl
KTsKIAogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCiAgICAgZmxvYXQgbXVsdGlwbGllciA9
IHRleHRBdXRvc2l6aW5nTXVsdGlwbGllcigpOwogICAgIGlmIChtdWx0aXBsaWVyID4gMSkgewog
ICAgICAgICBmbG9hdCBhdXRvc2l6ZWRGb250U2l6ZSA9IFRleHRBdXRvc2l6ZXI6OmNvbXB1dGVB
dXRvc2l6ZWRGb250U2l6ZShzaXplLCBtdWx0aXBsaWVyKTsKLSAgICAgICAgZGVzYy5zZXRDb21w
dXRlZFNpemUobWluKG1heGltdW1BbGxvd2VkRm9udFNpemUsIGF1dG9zaXplZEZvbnRTaXplKSk7
CisgICAgICAgIGRlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShtaW4obWF4aW11bUFsbG93ZWRG
b250U2l6ZSwgYXV0b3NpemVkRm9udFNpemUpKTsKICAgICB9CiAjZW5kaWYKIAotICAgIHNldEZv
bnREZXNjcmlwdGlvbihkZXNjKTsKKyAgICBzZXRGb250RGVzY3JpcHRpb24oZGVzY3JpcHRpb24p
OwogICAgIGZvbnRDYXNjYWRlKCkudXBkYXRlKGN1cnJlbnRGb250U2VsZWN0b3IpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2
aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5OSw3ICs2OTksNyBAQCBwdWJsaWM6CiAKICAgICBX
RUJDT1JFX0VYUE9SVCBjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUoKSBjb25zdDsKICAg
ICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdDsK
LSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0OwogICAgIGZsb2F0IHNwZWNpZmllZEZvbnRTaXpl
KCkgY29uc3Q7CiAgICAgZmxvYXQgY29tcHV0ZWRGb250U2l6ZSgpIGNvbnN0OwogICAgIGludCBm
b250U2l6ZSgpIGNvbnN0OwpAQCAtMTMzNCw3ICsxMzM0LDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Q2xlYXIoRUNsZWFyIHYpIHsgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldENsZWFyKHYpOyB9CiAg
ICAgdm9pZCBzZXRUYWJsZUxheW91dChFVGFibGVMYXlvdXQgdikgeyBub25pbmhlcml0ZWRfZmxh
Z3Muc2V0VGFibGVMYXlvdXQodik7IH0KIAotICAgIGJvb2wgc2V0Rm9udERlc2NyaXB0aW9uKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOworICAgIGJvb2wgc2V0Rm9udERlc2NyaXB0aW9uKGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKTsKICAgICAvLyBPbmx5IHVzZWQgZm9yIGJsZW5kaW5n
IGZvbnQgc2l6ZXMgd2hlbiBhbmltYXRpbmcsIGZvciBNYXRoTUwgYW5vbnltb3VzIGJsb2Nrcywg
YW5kIGZvciB0ZXh0IGF1dG9zaXppbmcuCiAgICAgdm9pZCBzZXRGb250U2l6ZShmbG9hdCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bmxpbmVUZXh0LmNwcAkocmV2aXNpb24gMTg5ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcg
KzIzNSw3IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29tcHV0ZU5ld1NjYWwKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24o
c3R5bGUuZm9udERlc2NyaXB0aW9uKCkpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5
bGUuZm9udERlc2NyaXB0aW9uKCk7CiAKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBiZXR0ZXIg
aGFuZGxlIHRoZSBjYXNlIHdoZW4gd2UgY29tcHV0ZSB2ZXJ5IHNtYWxsIGZvbnRzIGJlbG93IChi
ZWxvdyAxcHQpLgogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNv
bXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZUZvclNWR0lubGluZVRleHQoZm9udERlc2Ny
aXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwg
c2NhbGluZ0ZhY3RvciwgcmVuZGVyZXIuZG9jdW1lbnQoKSkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEs
NyArMzQxLDcgQEAgR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpnbAogCiAg
ICAgLy8gU1ZHIGZvbnQgY29udGV4dCBzZW5zaXRpdmUgc2VsZWN0aW9uIGZhaWxlZCBhbmQgdGhl
cmUgaXMgbm8gZGVmaW5lZCBtaXNzaW5nIGdseXBoLiBEcm9wIGRvd24gdG8gYSBkZWZhdWx0IGZv
bnQuCiAgICAgLy8gVGhlIGJlaGF2aW9yIGRvZXMgbm90IHNlZW0gdG8gYmUgc3BlY2lmaWVkLiBG
b3Igc2ltcGxpY2l0eSB3ZSBkb24ndCB0cnkgdG8gcmVzb2x2ZSBmb250IGZhbGxiYWNrcyBjb250
ZXh0LXNlbnNpdGl2ZWx5LgotICAgIEZvbnREZXNjcmlwdGlvbiBmYWxsYmFja0Rlc2NyaXB0aW9u
ID0gZm9udC5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZhbGxiYWNrRGVzY3JpcHRpb24g
PSBmb250LmZvbnREZXNjcmlwdGlvbigpOwogICAgIGZhbGxiYWNrRGVzY3JpcHRpb24uc2V0RmFt
aWxpZXMoVmVjdG9yPEF0b21pY1N0cmluZz4geyBzYW5zU2VyaWZGYW1pbHkgfSk7CiAgICAgRm9u
dENhc2NhZGUgZmFsbGJhY2tGb250KGZhbGxiYWNrRGVzY3JpcHRpb24sIGZvbnQubGV0dGVyU3Bh
Y2luZygpLCBmb250LndvcmRTcGFjaW5nKCkpOwogICAgIGZhbGxiYWNrRm9udC51cGRhdGUoZm9u
dC5mb250U2VsZWN0b3IoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVGb3JEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDcgKzU5LDcgQEAgUmVmPFJlbmRlclN0eWxlPiByZXNvbHZlRm9yRG9jdW1lbnQoY29ucwog
ICAgIGRvY3VtZW50U3R5bGUuZ2V0KCkuc2V0UlRMT3JkZXJpbmcoZG9jdW1lbnQudmlzdWFsbHlP
cmRlcmVkKCkgPyBWaXN1YWxPcmRlciA6IExvZ2ljYWxPcmRlcik7CiAgICAgZG9jdW1lbnRTdHls
ZS5nZXQoKS5zZXRab29tKCFkb2N1bWVudC5wcmludGluZygpID8gcmVuZGVyVmlldy5mcmFtZSgp
LnBhZ2Vab29tRmFjdG9yKCkgOiAxKTsKICAgICBkb2N1bWVudFN0eWxlLmdldCgpLnNldFBhZ2VT
Y2FsZVRyYW5zZm9ybShyZW5kZXJWaWV3LmZyYW1lKCkuZnJhbWVTY2FsZUZhY3RvcigpKTsKLSAg
ICBGb250RGVzY3JpcHRpb24gZG9jdW1lbnRGb250RGVzY3JpcHRpb24gPSBkb2N1bWVudFN0eWxl
LmdldCgpLmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZG9jdW1lbnRGb250RGVzY3JpcHRp
b24gPSBkb2N1bWVudFN0eWxlLmdldCgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGRvY3VtZW50
Rm9udERlc2NyaXB0aW9uLnNldExvY2FsZShkb2N1bWVudC5jb250ZW50TGFuZ3VhZ2UoKSk7CiAg
ICAgZG9jdW1lbnRTdHlsZS5nZXQoKS5zZXRGb250RGVzY3JpcHRpb24oV1RGOjptb3ZlKGRvY3Vt
ZW50Rm9udERlc2NyaXB0aW9uKSk7CiAKQEAgLTk4LDcgKzk4LDcgQEAgUmVmPFJlbmRlclN0eWxl
PiByZXNvbHZlRm9yRG9jdW1lbnQoY29ucwogCiAgICAgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdz
ID0gcmVuZGVyVmlldy5mcmFtZSgpLnNldHRpbmdzKCk7CiAKLSAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uOworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRMb2NhbGUoZG9jdW1lbnQuY29udGVudExhbmd1
YWdlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLmZv
bnRSZW5kZXJpbmdNb2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoc3Rh
bmRhcmRGYW1pbHkpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3
Lm1tCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OTE1LDEzICs0OTE1LDEyIEBAIC0gKE5TRm9u
dCAqKV9vcmlnaW5hbEZvbnRCCiAgICAgcmV0dXJuIFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250
TWFuYWdlcl0gZm9udFdpdGhGYW1pbHk6QCJUaW1lcyIgdHJhaXRzOk5TRm9udEl0YWxpY1RyYWl0
IHdlaWdodDpTVEFOREFSRF9CT0xEX1dFSUdIVCBzaXplOjEyLjBmXTsKIH0KIAotc3RhdGljIE5T
U3RyaW5nICpmb250TmFtZUZvckRlc2NyaXB0aW9uKE5TU3RyaW5nICpmYW1pbHlOYW1lLCBCT09M
IGl0YWxpYywgQk9PTCBib2xkLCBpbnQgcG9pbnRTaXplKQorc3RhdGljIE5TU3RyaW5nICpmb250
TmFtZUZvckRlc2NyaXB0aW9uKE5TU3RyaW5nICpmYW1pbHlOYW1lLCBCT09MIGl0YWxpYywgQk9P
TCBib2xkKQogewogICAgIC8vIEZpbmQgdGhlIGZvbnQgdGhlIHNhbWUgd2F5IHRoZSByZW5kZXJp
bmcgY29kZSB3b3VsZCBsYXRlciBpZiBpdCBlbmNvdW50ZXJlZCB0aGlzIENTUy4KICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0l0
YWxpYyhpdGFsaWMpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoYm9sZCA/IEZvbnRX
ZWlnaHQ5MDAgOiBGb250V2VpZ2h0NTAwKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lm
aWVkU2l6ZShwb2ludFNpemUpOwogICAgIFJlZlB0cjxGb250PiBmb250ID0gRm9udENhY2hlOjpz
aW5nbGV0b24oKS5mb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAg
ICAgcmV0dXJuIFtmb250LT5wbGF0Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250TmFtZV07CiB9CkBA
IC00OTYyLDcgKzQ5NjEsNyBAQCAtICh2b2lkKV9hZGRUb1N0eWxlOihET01DU1NTdHlsZURlY2xh
cmF0CiAgICAgICAgIC8vIHRoZSBQb3N0c2NyaXB0IG5hbWUuCiAgICAgICAgIC8vIElmIHdlIGRv
bid0IGZpbmQgYSBmb250IHdpdGggdGhlIHNhbWUgUG9zdHNjcmlwdCBuYW1lLCB0aGVuIHdlJ2xs
IGhhdmUgdG8gdXNlIHRoZQogICAgICAgICAvLyBQb3N0c2NyaXB0IG5hbWUgdG8gbWFrZSB0aGUg
Q1NTIHNwZWNpZmljIGVub3VnaC4KLSAgICAgICAgaWYgKCFbZm9udE5hbWVGb3JEZXNjcmlwdGlv
bihhRmFtaWx5TmFtZSwgYUlzSXRhbGljLCBhSXNCb2xkLCBhUG9pbnRTaXplKSBpc0VxdWFsVG9T
dHJpbmc6W2EgZm9udE5hbWVdXSkKKyAgICAgICAgaWYgKCFbZm9udE5hbWVGb3JEZXNjcmlwdGlv
bihhRmFtaWx5TmFtZSwgYUlzSXRhbGljLCBhSXNCb2xkKSBpc0VxdWFsVG9TdHJpbmc6W2EgZm9u
dE5hbWVdXSkKICAgICAgICAgICAgIGZhbWlseU5hbWVGb3JDU1MgPSBbYSBmb250TmFtZV07CiAK
ICAgICAgICAgLy8gRklYTUU6IE5lZWQgbW9yZSBzb3BoaXN0aWNhdGVkIGVzY2FwaW5nIGNvZGUg
aWYgd2Ugd2FudCB0byBoYW5kbGUgZmFtaWx5IG5hbWVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9ET01Db3JlQ2xhc3Nlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vRE9N
Q29yZUNsYXNzZXMuY3BwCShyZXZpc2lvbiAxODk4MjMpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9E
T01Db3JlQ2xhc3Nlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAgdXNpbmcg
V1RGOjpBdG9taWNTdHJpbmc7CiB1c2luZyBXZWJDb3JlOjpCU3RyaW5nOwogdXNpbmcgV2ViQ29y
ZTo6RWxlbWVudDsKIHVzaW5nIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGU7Ci11c2luZyBXZWJDb3Jl
OjpGb250RGVzY3JpcHRpb247CiB1c2luZyBXZWJDb3JlOjpGcmFtZTsKIHVzaW5nIFdlYkNvcmU6
OkludFJlY3Q7CiB1c2luZyBXVEY6OlN0cmluZzsKQEAgLTEyNjcsNyArMTI2Niw3IEBAIEhSRVNV
TFQgRE9NRWxlbWVudDo6Zm9udChfT3V0XyBXZWJGb250RGUKICAgICBpZiAoIXJlbmRlcmVyKQog
ICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuZm9udERlc2NyaXB0aW9uKCk7
CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIEF0b21pY1N0cmluZyBmYW1pbHkgPSBmb250RGVz
Y3JpcHRpb24uZmlyc3RGYW1pbHkoKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGxlYWtzLiBEZWxl
dGUgdGhpcyB3aG9sZSBmdW5jdGlvbiB0byBnZXQgcmlkIG9mIHRoZSBsZWFrLgpJbmRleDogU291
cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDE4OTgyMykKKysrIFNvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDUsNyArNTA1LDcgQEAgdm9pZCBGdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyOjpkcmF3KCkKICAgICBtX3RpbWVTbGlkZXIuZHJhdyhjb250ZXh0KTsK
IAogICAgIC8vIERyYXcgdGhlIHRleHQgc3RyaW5ncwotICAgIEZvbnREZXNjcmlwdGlvbiBkZXNj
OworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZGVzYzsKIAogICAgIE5PTkNMSUVOVE1FVFJJ
Q1MgbWV0cmljczsKICAgICBtZXRyaWNzLmNiU2l6ZSA9IHNpemVvZihtZXRyaWNzKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvd2luL1dlYktpdEdyYXBoaWNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJLaXRHcmFwaGljcy5jcHAJKHJldmlzaW9uIDE4OTgyMykKKysrIFNv
dXJjZS9XZWJLaXQvd2luL1dlYktpdEdyYXBoaWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NyArNTIsNyBAQCBzdGF0aWMgRm9udENhc2NhZGUgbWFrZUZvbnQoY29uc3QgV2ViRm9uCiAKICAg
ICBTdHJpbmcgZm9udEZhbWlseVN0cmluZyhkZXNjcmlwdGlvbi5mYW1pbHksIGRlc2NyaXB0aW9u
LmZhbWlseUxlbmd0aCk7CiAKLSAgICBGb250RGVzY3JpcHRpb24gZjsKKyAgICBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uIGY7CiAgICAgZi5zZXRPbmVGYW1pbHkoZm9udEZhbWlseVN0cmluZyk7CiAg
ICAgZi5zZXRTcGVjaWZpZWRTaXplKGRlc2NyaXB0aW9uLnNpemUpOwogICAgIGYuc2V0Q29tcHV0
ZWRTaXplKGRlc2NyaXB0aW9uLnNpemUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>