<?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>153347</bug_id>
          
          <creation_ts>2016-01-22 01:14:28 -0800</creation_ts>
          <short_desc>[Font Loading] Split CSSFontSelector into a FontFaceSet implementation and the rest of the class</short_desc>
          <delta_ts>2021-10-17 11:19:04 -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>Other</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>
          
          <blocked>153346</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>koivisto</cc>
    
    <cc>lauraleeneveux</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1157614</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-01-22 01:14:28 -0800</bug_when>
    <thetext>FontFaceSet concepts need to be separately implementable by other classes, but CSSFontSelector needs to implement this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166313</commentid>
    <comment_count>1</comment_count>
      <attachid>271731</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-18 22:08:39 -0800</bug_when>
    <thetext>Created attachment 271731
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166316</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-18 22:16:03 -0800</bug_when>
    <thetext>There are some tasks which need to be done:

1. Any changes to the Document&apos;s CSSFontFaceSet (adding/removing a FontFace, or changing a property of a constituent CSSFontFace) should cause a relayout
2. Modifying a CSS-Connected FontFace must be visible in the CSSOM and vice-versa
3. The invariants inside CSSFontFaceSet need to continue to hold, even when properties of constituent CSSFontFaces change.
4. Removing a CSS-Connect FontFace from the Document&apos;s FontFaceSet must make the FontFace un-CSS-Connected
5. CSSFontFaceSet::m_faces and m_cssConnectedFaces can be unified
6. CSS-Connected CSSFontFaceSets and CSSFontFaces currently have a null wrapper. These wrappers need to be lazily created.
7. There may be a state tracking problem because the Document&apos;s CSSFontFaceSet gets created before its wrapper.
8. CSSFontSelector&apos;s versioning needs to still work
9. CSSFontSelector and its CSSFontFaceSet need to live for the entire lifetime of the Document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166623</commentid>
    <comment_count>3</comment_count>
      <attachid>271826</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-19 17:03:47 -0800</bug_when>
    <thetext>Created attachment 271826
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166773</commentid>
    <comment_count>4</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-20 13:30:19 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; There are some tasks which need to be done:
&gt; 
&gt; 1. Any changes to the Document&apos;s CSSFontFaceSet (adding/removing a FontFace,
&gt; or changing a property of a constituent CSSFontFace) should cause a relayout
&gt; 2. Modifying a CSS-Connected FontFace must be visible in the CSSOM and
&gt; vice-versa
&gt; 3. The invariants inside CSSFontFaceSet need to continue to hold, even when
&gt; properties of constituent CSSFontFaces change.
&gt; 4. Removing a CSS-Connect FontFace from the Document&apos;s FontFaceSet must make
&gt; the FontFace un-CSS-Connected
&gt; 5. CSSFontFaceSet::m_faces and m_cssConnectedFaces can be unified
&gt; 6. CSS-Connected CSSFontFaceSets and CSSFontFaces currently have a null
&gt; wrapper. These wrappers need to be lazily created.
&gt; 7. There may be a state tracking problem because the Document&apos;s
&gt; CSSFontFaceSet gets created before its wrapper.
&gt; 8. CSSFontSelector&apos;s versioning needs to still work
&gt; 9. CSSFontSelector and its CSSFontFaceSet need to live for the entire
&gt; lifetime of the Document.

In this patch I have tackled:
&gt; 5. CSSFontFaceSet::m_faces and m_cssConnectedFaces can be unified
&gt; 6. CSS-Connected CSSFontFaceSets and CSSFontFaces currently have a null
&gt; wrapper. These wrappers need to be lazily created.
&gt; 7. There may be a state tracking problem because the Document&apos;s
&gt; CSSFontFaceSet gets created before its wrapper.

I still need to tackle in this patch:
&gt; 1. Any changes to the Document&apos;s CSSFontFaceSet (adding/removing a FontFace,
&gt; or changing a property of a constituent CSSFontFace) should cause a relayout
&gt; 3. The invariants inside CSSFontFaceSet need to continue to hold, even when
&gt; properties of constituent CSSFontFaces change.
&gt; 4. Removing a CSS-Connect FontFace from the Document&apos;s FontFaceSet must make
&gt; the FontFace un-CSS-Connected
&gt; 8. CSSFontSelector&apos;s versioning needs to still work

Out of scope for this patch:
&gt; 9. CSSFontSelector and its CSSFontFaceSet need to live for the entire
&gt; lifetime of the Document.
&gt; 2. Modifying a CSS-Connected FontFace must be visible in the CSSOM and
&gt; vice-versa</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166775</commentid>
    <comment_count>5</comment_count>
      <attachid>271867</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-20 13:38:37 -0800</bug_when>
    <thetext>Created attachment 271867
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166887</commentid>
    <comment_count>6</comment_count>
      <attachid>271894</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-21 16:49:49 -0800</bug_when>
    <thetext>Created attachment 271894
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166892</commentid>
    <comment_count>7</comment_count>
      <attachid>271895</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-21 17:04:14 -0800</bug_when>
    <thetext>Created attachment 271895
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166922</commentid>
    <comment_count>8</comment_count>
      <attachid>271898</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-21 19:44:44 -0800</bug_when>
    <thetext>Created attachment 271898
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166923</commentid>
    <comment_count>9</comment_count>
      <attachid>271898</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-21 19:50:24 -0800</bug_when>
    <thetext>Comment on attachment 271898
Patch

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

&gt; Source/WebCore/ChangeLog:29
&gt; +

I should also mention the problem of the CSSFontSelector being destroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166929</commentid>
    <comment_count>10</comment_count>
      <attachid>271900</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-21 20:58:05 -0800</bug_when>
    <thetext>Created attachment 271900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167061</commentid>
    <comment_count>11</comment_count>
      <attachid>271900</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-02-22 10:00:30 -0800</bug_when>
    <thetext>Comment on attachment 271900
Patch

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

&gt; Source/WebCore/css/CSSFontFace.cpp:57
&gt; +        SVGFontFaceElement* fontFaceElement = nullptr;

Shouldn&apos;t this be inside ENABLE(SVG_FONTS)?

Why is this stuff around? :)

&gt; Source/WebCore/css/CSSFontFace.h:90
&gt; +    static Optional&lt;FontTraitsMask&gt; calculateStyle(CSSValue&amp; style);
&gt; +    static Optional&lt;FontTraitsMask&gt; calculateWeight(CSSValue&amp; weight);

calculateStyle/WeightMask?

&gt; Source/WebCore/css/CSSFontFace.h:149
&gt; +    // We don&apos;t guarantee that the FontFace wrapper will be the same every time you ask for it.
&gt; +    Ref&lt;FontFace&gt; wrapper(JSC::ExecState&amp;);

With many APIs we go to some lengths to ensure that it is the same wrapper. Wonder what other implementations do here.

&gt; Source/WebCore/css/CSSFontFaceSet.cpp:106
&gt; +    Vector&lt;Ref&lt;CSSFontFace&gt;&gt; faces = { };

No need to to initialize with { }

&gt; Source/WebCore/css/CSSFontFaceSet.cpp:110
&gt; +        RefPtr&lt;CSSValueList&gt; familyList = CSSValueList::createCommaSeparated();

Ref&lt;&gt; (or auto)

&gt; Source/WebCore/css/CSSFontFaceSet.cpp:151
&gt; +void CSSFontFaceSet::addToFacesLookupTable(CSSFontFace&amp; face)
&gt; +{
&gt; +    if (face.families()) {
&gt; +        for (auto&amp; item : *face.families()) {

Please use early return instead of building a tower.

&gt; Source/WebCore/css/CSSFontFaceSet.cpp:335
&gt; +class FontFaceComparator {
&gt; +public:

I realize you are just moving this but a lambda would be more modern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167085</commentid>
    <comment_count>12</comment_count>
      <attachid>271900</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-22 11:03:39 -0800</bug_when>
    <thetext>Comment on attachment 271900
Patch

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

&gt;&gt; Source/WebCore/css/CSSFontFace.cpp:57
&gt;&gt; +        SVGFontFaceElement* fontFaceElement = nullptr;
&gt; 
&gt; Shouldn&apos;t this be inside ENABLE(SVG_FONTS)?
&gt; 
&gt; Why is this stuff around? :)

It only ever gets set to non-null inside ENABLE(SVG_FONTS)

Yes, I am working on getting rid of it. Apparently getting a windows build which even vaguely matches what our Windows bots see is a 1week+ task

&gt;&gt; Source/WebCore/css/CSSFontFace.h:149
&gt;&gt; +    Ref&lt;FontFace&gt; wrapper(JSC::ExecState&amp;);
&gt; 
&gt; With many APIs we go to some lengths to ensure that it is the same wrapper. Wonder what other implementations do here.

Yeah, this is due to the ownership model between CSSFontFace / FontFace / CSSFontFaceSet / FontFaceSet. In particular, if a site never touches this new API, I&apos;d like to never create a FontFace / FontFaceSet (and only use the lower-level CSSFontFace / CSSFontFaceSet objects). However, if the site does use this new API, we want to lazily create these higher-level objects and associate them with the pre-existing CSSFontFace objects. However, this means that the ownership model is cyclic: CSSFontFace must retain its wrapping FontFace, but FontFace must retain its backing CSSFontFace.

This patch circumvents the problem by making the upwards-pointing reference a WeakPtr, and recreating the upper-level object if it got destroyed, but this has the problem of potentially making the identity of the FontFace change. However, this change is only visible if no references to the old object exist, which means simply running a === in Javascript won&apos;t show the problem. Instead, the only way to observe the problem would be to compare the FontFace&apos;s promise for equality (because recreating the FontFace means recreating its promise). I don&apos;t think this is a deal-breaker for this patch because the CSS Font Loading spec already has the concept of the identity of promises changing out from under you (FontFaceSet&apos;s &quot;ready&quot; promise is spec&apos;ed to be reset to a new object every time loading starts, which could occur at arbitrary times).

There are two ways I can think of to solve this: 1) Use a registry to associate the higher-level &amp; lower-level objects, so the references don&apos;t reside in the objects themselves, and 2) Manually convert between strong references and weak reference when detecting the above condition.

I think solving this problem is outside of the scope of this patch, but I definitely want to solve it.

&gt;&gt; Source/WebCore/css/CSSFontFaceSet.cpp:335
&gt;&gt; +public:
&gt; 
&gt; I realize you are just moving this but a lambda would be more modern.

I disagree in this case. operator() is 57 lines long, and it is only used in getFontFace() which is 39 lines long. Putting the comparator inside getFontFace() would make getFontFace() unnecessarily complicated and long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167137</commentid>
    <comment_count>13</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-02-22 12:17:18 -0800</bug_when>
    <thetext>&gt; I disagree in this case. operator() is 57 lines long, and it is only used in
&gt; getFontFace() which is 39 lines long. Putting the comparator inside
&gt; getFontFace() would make getFontFace() unnecessarily complicated and long.

You misunderstand. The idea would be to have a free-standing function (instead of a class) with all the parameters. You would invoke that function from a tiny lambda.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167145</commentid>
    <comment_count>14</comment_count>
      <attachid>271942</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-22 12:35:53 -0800</bug_when>
    <thetext>Created attachment 271942
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167147</commentid>
    <comment_count>15</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-22 12:38:57 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; I disagree in this case. operator() is 57 lines long, and it is only used in
&gt; &gt; getFontFace() which is 39 lines long. Putting the comparator inside
&gt; &gt; getFontFace() would make getFontFace() unnecessarily complicated and long.
&gt; 
&gt; You misunderstand. The idea would be to have a free-standing function
&gt; (instead of a class) with all the parameters. You would invoke that function
&gt; from a tiny lambda.

Oh, that&apos;s fine. I&apos;ll do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167177</commentid>
    <comment_count>16</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-02-22 13:39:58 -0800</bug_when>
    <thetext>Committed r196954: &lt;http://trac.webkit.org/changeset/196954&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271731</attachid>
            <date>2016-02-18 22:08:39 -0800</date>
            <delta_ts>2016-02-19 17:03:45 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-153347-20160218220820.patch</filename>
            <type>text/plain</type>
            <size>48279</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2NzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTY1Nzg5MWZiNjFhNmU5
OTliYTYyNGQxNWIwMjAwMzcyODAyNjkxOS4uODUzMzVlMzc0N2QzMjFhNDliZDFmYjE0YWIzZTJl
OGU3ZDVhNDhlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE2LTAyLTE4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0ZvbnQgTG9h
ZGluZ10gU3BsaXQgQ1NTRm9udFNlbGVjdG9yIGludG8gYSBGb250RmFjZVNldCBpbXBsZW1lbnRh
dGlvbiBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMzNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAq
IGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Q1NT
Rm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmNhbGN1bGF0ZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpzZXRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZTo6Y2FsY3VsYXRlV2VpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlOjpzZXRXZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6
OmZvbnRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnB1bXApOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmZvbnQpOgorICAgICAgICAqIGNzcy9DU1NGb250
RmFjZS5oOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNldDo6fkNTU0ZvbnRGYWNlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU2V0OjpoYXNGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNl
U2V0OjpyZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6
OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUZvbnRUcmFpdHNNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRG
YWNlU2V0OjptYXRjaGluZ0ZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFy
YXRvcjo6Rm9udEZhY2VDb21wYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29t
cGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6
Z2V0Rm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEZhbWlsaWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhbWlsaWVzSW50ZXJzZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Ojpsb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKiBj
c3MvQ1NTRm9udEZhY2VTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xp
ZW50OjpmYWNlRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXRDbGll
bnQ6OnN0YXJ0ZWRMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xp
ZW50Ojpjb21wbGV0ZWRMb2FkaW5nKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
aDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZvbnRTZWxlY3Rvcjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0
b3I6OmFkZEZvbnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6
OmZvbnRSYW5nZXNGb3JGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9y
OjpjbGVhckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6cmVn
aXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250RmFjZUNvbXBhcmF0b3I6OkZvbnRGYWNlQ29tcGFyYXRvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250RmFjZUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZSk6IERlbGV0ZWQu
CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFj
ZTo6Q1NTU2VnbWVudGVkRm9udEZhY2UpOgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5oOgorICAgICAgICAqIGNzcy9Gb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250RmFjZTo6Rm9udEZhY2UpOgorICAgICAgICAqIGNzcy9Gb250RmFjZVNldC5oOgorICAgICAg
ICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuaDoKKwogMjAxNi0wMi0xOCAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50
LnNjb3BlIHNob3VsZCBvbmx5IHJldHVybiBrbm93biB2YWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2UuY3BwCmluZGV4IDU1MmU5OWNmYTFlMWVhYWE0YWEzMjY5NTkwMDM4ZGFhYTVhMDIwMTcu
LmM1Y2VlNTAwZTExODYwMDQ0NzNiNTNlODIzYzNjNjlmOWJmODliZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlLmNwcApAQCAtNDIsMTEgKzQyLDEzIEBACiAjaW5jbHVkZSAiRm9udFZhcmlh
bnRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlN0eWxlUHJvcGVydGllcy5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUNTU0ZvbnRGYWNlOjpDU1NGb250RmFjZShDU1NGb250U2VsZWN0b3Im
IGZvbnRTZWxlY3RvciwgRm9udEZhY2UqIHdyYXBwZXIsIGJvb2wgaXNMb2NhbEZhbGxiYWNrKQor
Q1NTRm9udEZhY2U6OkNTU0ZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yLCBT
dHlsZVJ1bGVGb250RmFjZSogY3NzQ29ubmVjdGlvbiwgRm9udEZhY2UqIHdyYXBwZXIsIGJvb2wg
aXNMb2NhbEZhbGxiYWNrKQogICAgIDogbV9mb250U2VsZWN0b3IoZm9udFNlbGVjdG9yKQorICAg
ICwgbV9jc3NDb25uZWN0aW9uKGNzc0Nvbm5lY3Rpb24pCiAgICAgLCBtX3dyYXBwZXIod3JhcHBl
cikKICAgICAsIG1faXNMb2NhbEZhbGxiYWNrKGlzTG9jYWxGYWxsYmFjaykKIHsKQEAgLTY5LDc0
ICs3MSw3NiBAQCBib29sIENTU0ZvbnRGYWNlOjpzZXRGYW1pbGllcyhDU1NWYWx1ZSYgZmFtaWx5
KQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU0ZvbnRGYWNlOjpzZXRTdHlsZShDU1NW
YWx1ZSYgc3R5bGUpCitPcHRpb25hbDxGb250VHJhaXRzTWFzaz4gQ1NTRm9udEZhY2U6OmNhbGN1
bGF0ZVN0eWxlKENTU1ZhbHVlJiBzdHlsZSkKIHsKICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPihzdHlsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CiAKLSAgICB1bnNpZ25lZCBzdHlsZU1hc2sgPSAwOwogICAgIHN3aXRjaCAoZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHN0eWxlKS5nZXRWYWx1ZUlEKCkpIHsKICAgICBjYXNlIENTU1Zh
bHVlTm9ybWFsOgotICAgICAgICBzdHlsZU1hc2sgPSBGb250U3R5bGVOb3JtYWxNYXNrOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRTdHlsZU5vcm1hbE1hc2s7CiAgICAgY2Fz
ZSBDU1NWYWx1ZUl0YWxpYzoKICAgICBjYXNlIENTU1ZhbHVlT2JsaXF1ZToKLSAgICAgICAgc3R5
bGVNYXNrID0gRm9udFN0eWxlSXRhbGljTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybiBGb250U3R5bGVJdGFsaWNNYXNrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN0eWxlTWFz
ayA9IEZvbnRTdHlsZU5vcm1hbE1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
Rm9udFN0eWxlTm9ybWFsTWFzazsKICAgICB9CiAKLSAgICBtX3RyYWl0c01hc2sgPSBzdGF0aWNf
Y2FzdDxGb250VHJhaXRzTWFzaz4oKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RyYWl0c01hc2sp
ICYgKH5Gb250U3R5bGVNYXNrKSkgfCBzdHlsZU1hc2spOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBGb250U3R5bGVOb3JtYWxNYXNrOwogfQogCi1ib29sIENTU0ZvbnRGYWNlOjpzZXRX
ZWlnaHQoQ1NTVmFsdWUmIHdlaWdodCkKK2Jvb2wgQ1NTRm9udEZhY2U6OnNldFN0eWxlKENTU1Zh
bHVlJiBzdHlsZSkKK3sKKyAgICBpZiAoYXV0byBtYXNrID0gY2FsY3VsYXRlU3R5bGUoc3R5bGUp
KSB7CisgICAgICAgIG1fdHJhaXRzTWFzayA9IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJhaXRzTWFzaykgJiAofkZvbnRTdHlsZU1hc2spKSB8
IG1hc2sudmFsdWUoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK09wdGlvbmFsPEZvbnRUcmFpdHNNYXNrPiBDU1NGb250RmFjZTo6Y2FsY3Vs
YXRlV2VpZ2h0KENTU1ZhbHVlJiB3ZWlnaHQpCiB7CiAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVW
YWx1ZT4od2VpZ2h0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gTnVs
bG9wdDsKIAotICAgIHVuc2lnbmVkIHdlaWdodE1hc2sgPSAwOwogICAgIHN3aXRjaCAoZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHdlaWdodCkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBD
U1NWYWx1ZUJvbGQ6CiAgICAgY2FzZSBDU1NWYWx1ZUJvbGRlcjoKICAgICBjYXNlIENTU1ZhbHVl
NzAwOgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDcwME1hc2s7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4gRm9udFdlaWdodDcwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1
ZU5vcm1hbDoKICAgICBjYXNlIENTU1ZhbHVlNDAwOgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9u
dFdlaWdodDQwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFdlaWdo
dDQwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZTkwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZv
bnRXZWlnaHQ5MDBNYXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWln
aHQ5MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWU4MDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBG
b250V2VpZ2h0ODAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2Vp
Z2h0ODAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlNjAwOgotICAgICAgICB3ZWlnaHRNYXNrID0g
Rm9udFdlaWdodDYwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFdl
aWdodDYwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZTUwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9
IEZvbnRXZWlnaHQ1MDBNYXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRX
ZWlnaHQ1MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWUzMDA6Ci0gICAgICAgIHdlaWdodE1hc2sg
PSBGb250V2VpZ2h0MzAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250
V2VpZ2h0MzAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlTGlnaHRlcjoKICAgICBjYXNlIENTU1Zh
bHVlMjAwOgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDIwME1hc2s7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFdlaWdodDIwME1hc2s7CiAgICAgY2FzZSBDU1NW
YWx1ZTEwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQxMDBNYXNrOwotICAgICAg
ICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQxMDBNYXNrOwogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0NDAwTWFzazsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0NDAwTWFzazsKICAgICB9CiAKLSAgICBtX3RyYWl0
c01hc2sgPSBzdGF0aWNfY2FzdDxGb250VHJhaXRzTWFzaz4oKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihtX3RyYWl0c01hc2spICYgKH5Gb250V2VpZ2h0TWFzaykpIHwgd2VpZ2h0TWFzayk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZvbnRXZWlnaHQ0MDBNYXNrOworfQorCitib29sIENT
U0ZvbnRGYWNlOjpzZXRXZWlnaHQoQ1NTVmFsdWUmIHdlaWdodCkKK3sKKyAgICBpZiAoYXV0byBt
YXNrID0gY2FsY3VsYXRlV2VpZ2h0KHdlaWdodCkpIHsKKyAgICAgICAgbV90cmFpdHNNYXNrID0g
c3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90cmFp
dHNNYXNrKSAmICh+Rm9udFdlaWdodE1hc2spKSB8IG1hc2sudmFsdWUoKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBDU1NGb250
RmFjZTo6c2V0VW5pY29kZVJhbmdlKENTU1ZhbHVlJiB1bmljb2RlUmFuZ2UpCkBAIC0yODIsNiAr
Mjg2LDcgQEAgdm9pZCBDU1NGb250RmFjZTo6Zm9udExvYWRlZChDU1NGb250RmFjZVNvdXJjZSYp
CiAgICAgaWYgKG1fc291cmNlc1BvcHVsYXRlZCkKICAgICAgICAgcHVtcCgpOwogCisgICAgQVNT
RVJUKG1fZm9udFNlbGVjdG9yKTsKICAgICBtX2ZvbnRTZWxlY3Rvci0+Zm9udExvYWRlZCgpOwog
CiAgICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCkBAIC0yOTYsOSArMzAxLDEwIEBA
IHNpemVfdCBDU1NGb250RmFjZTo6cHVtcCgpCiAKICAgICAgICAgaWYgKHNvdXJjZS0+c3RhdHVz
KCkgPT0gQ1NTRm9udEZhY2VTb3VyY2U6OlN0YXR1czo6UGVuZGluZykgewogICAgICAgICAgICAg
QVNTRVJUKG1fc3RhdHVzID09IFN0YXR1czo6UGVuZGluZyB8fCBtX3N0YXR1cyA9PSBTdGF0dXM6
OkxvYWRpbmcgfHwgbV9zdGF0dXMgPT0gU3RhdHVzOjpUaW1lZE91dCk7CisgICAgICAgICAgICBB
U1NFUlQobV9mb250U2VsZWN0b3IpOwogICAgICAgICAgICAgaWYgKG1fc3RhdHVzID09IFN0YXR1
czo6UGVuZGluZykKICAgICAgICAgICAgICAgICBzZXRTdGF0dXMoU3RhdHVzOjpMb2FkaW5nKTsK
LSAgICAgICAgICAgIHNvdXJjZS0+bG9hZChtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAgICAg
ICAgICBzb3VyY2UtPmxvYWQoKm1fZm9udFNlbGVjdG9yKTsKICAgICAgICAgfQogCiAgICAgICAg
IHN3aXRjaCAoc291cmNlLT5zdGF0dXMoKSkgewpAQCAtMzQ1LDggKzM1MSwxMCBAQCBSZWZQdHI8
Rm9udD4gQ1NTRm9udEZhY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGJvb2wgc3ludAogICAgIHNpemVfdCBzdGFydEluZGV4ID0gcHVtcCgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbV9zb3VyY2VzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIGF1dG8mIHNvdXJjZSA9IG1fc291cmNlc1tpXTsKLSAgICAgICAgaWYgKHNvdXJjZS0+
c3RhdHVzKCkgPT0gQ1NTRm9udEZhY2VTb3VyY2U6OlN0YXR1czo6UGVuZGluZykKLSAgICAgICAg
ICAgIHNvdXJjZS0+bG9hZChtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAgICAgIGlmIChzb3Vy
Y2UtPnN0YXR1cygpID09IENTU0ZvbnRGYWNlU291cmNlOjpTdGF0dXM6OlBlbmRpbmcpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChtX2ZvbnRTZWxlY3Rvcik7CisgICAgICAgICAgICBzb3VyY2UtPmxv
YWQoKm1fZm9udFNlbGVjdG9yKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN3aXRjaCAoc291cmNl
LT5zdGF0dXMoKSkgewogICAgICAgICBjYXNlIENTU0ZvbnRGYWNlU291cmNlOjpTdGF0dXM6OlBl
bmRpbmc6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCmluZGV4IDEwN2Q5ZjI4MjM4NmI2ZTZjNjFh
ZGIxYmIzZGY5OTBlMjBkZWZjNGYuLmNiNmVmYzc2MjQxY2NlMzVkYjRmYzBmODcyMjVjNTA0ZGEz
MTA5OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCkBAIC00NiwxMiArNDYsMTEgQEAgY2xh
c3MgRm9udERlc2NyaXB0aW9uOwogY2xhc3MgRm9udDsKIGNsYXNzIEZvbnRGYWNlOwogCi0vLyBG
SVhNRTogVGhpcyBjbGFzcyBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlZmVyZW5jZSBjb3VudGVkLgog
Y2xhc3MgQ1NTRm9udEZhY2UgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NGb250RmFjZT4g
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTRm9udEZhY2U+IGNyZWF0ZShDU1NGb250U2Vs
ZWN0b3ImIGZvbnRTZWxlY3RvciwgRm9udEZhY2UqIHdyYXBwZXIgPSBudWxscHRyLCBib29sIGlz
TG9jYWxGYWxsYmFjayA9IGZhbHNlKQorICAgIHN0YXRpYyBSZWY8Q1NTRm9udEZhY2U+IGNyZWF0
ZShDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciwgU3R5bGVSdWxlRm9udEZhY2UqIGNzc0Nv
bm5lY3Rpb24gPSBudWxscHRyLCBGb250RmFjZSogd3JhcHBlciA9IG51bGxwdHIsIGJvb2wgaXNM
b2NhbEZhbGxiYWNrID0gZmFsc2UpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBDU1NGb250RmFjZShmb250U2VsZWN0b3IsIHdyYXBwZXIsIGlzTG9jYWxGYWxsYmFjaykpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGb250RmFjZShmb250U2VsZWN0b3IsIGNz
c0Nvbm5lY3Rpb24sIHdyYXBwZXIsIGlzTG9jYWxGYWxsYmFjaykpOwogICAgIH0KICAgICB2aXJ0
dWFsIH5DU1NGb250RmFjZSgpOwogCkBAIC03OCw2ICs3NywxMCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRUcmFpdHNNYXNrKEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2spIHsgbV90cmFpdHNNYXNr
ID0gdHJhaXRzTWFzazsgfQogICAgIGJvb2wgaXNMb2NhbEZhbGxiYWNrKCkgY29uc3QgeyByZXR1
cm4gbV9pc0xvY2FsRmFsbGJhY2s7IH0KICAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0dXM7IH0KKyAgICBTdHlsZVJ1bGVGb250RmFjZSogY3NzQ29ubmVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fY3NzQ29ubmVjdGlvbi5nZXQoKTsgfQorCisgICAgc3RhdGljIE9wdGlv
bmFsPEZvbnRUcmFpdHNNYXNrPiBjYWxjdWxhdGVTdHlsZShDU1NWYWx1ZSYgc3R5bGUpOworICAg
IHN0YXRpYyBPcHRpb25hbDxGb250VHJhaXRzTWFzaz4gY2FsY3VsYXRlV2VpZ2h0KENTU1ZhbHVl
JiB3ZWlnaHQpOwogCiAgICAgY2xhc3MgQ2xpZW50OwogICAgIHZvaWQgYWRkQ2xpZW50KENsaWVu
dCYpOwpAQCAtMTM5LDcgKzE0Miw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAg
IENTU0ZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciYsIEZvbnRGYWNlKiwgYm9vbCBpc0xvY2FsRmFs
bGJhY2spOworICAgIENTU0ZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciosIFN0eWxlUnVsZUZvbnRG
YWNlKiwgRm9udEZhY2UqLCBib29sIGlzTG9jYWxGYWxsYmFjayk7CiAKICAgICBzaXplX3QgcHVt
cCgpOwogICAgIHZvaWQgc2V0U3RhdHVzKFN0YXR1cyk7CkBAIC0xNDgsNyArMTUxLDggQEAgcHJp
dmF0ZToKICAgICBGb250VHJhaXRzTWFzayBtX3RyYWl0c01hc2sgeyBzdGF0aWNfY2FzdDxGb250
VHJhaXRzTWFzaz4oRm9udFN0eWxlTm9ybWFsTWFzayB8IEZvbnRXZWlnaHQ0MDBNYXNrKSB9Owog
ICAgIFZlY3RvcjxVbmljb2RlUmFuZ2U+IG1fcmFuZ2VzOwogICAgIEhhc2hTZXQ8Q2xpZW50Kj4g
bV9jbGllbnRzOwotICAgIFJlZjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOworICAg
IFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOworICAgIFJlZlB0cjxTdHls
ZVJ1bGVGb250RmFjZT4gbV9jc3NDb25uZWN0aW9uOwogICAgIEZvbnRGYWNlKiBtX3dyYXBwZXI7
CiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZlYXR1cmVTZXR0aW5nczsKICAgICBGb250VmFy
aWFudFNldHRpbmdzIG1fdmFyaWFudFNldHRpbmdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZVNldC5jcHAKaW5kZXggYTBmNWZkNjUzMDRkMjk2NWQ2NzNmMjIzNDllM2U2MjU2OTk3YmE4My4u
OGM0YTQxMGRkN2U5OTIyNzZkZjkxM2NhMjBhMzc2YmNiY2MwYjFmNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VTZXQuY3BwCkBAIC0zMCw3ICszMCwxMCBAQAogI2luY2x1ZGUgIkNTU0Zv
bnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1ByaW1p
dGl2ZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2UuaCIKICNpbmNsdWRl
ICJDU1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKKyNpbmNsdWRlICJG
b250Q2FjaGUuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDQsNiArNDcsMTQgQEAgQ1NTRm9udEZhY2VTZXQ6On5DU1NGb250RmFjZVNl
dCgpCiB7CiAgICAgZm9yIChhdXRvJiBmYWNlIDogbV9mYWNlcykKICAgICAgICAgZmFjZS0+cmVt
b3ZlQ2xpZW50KCp0aGlzKTsKKworICAgIGZvciAoYXV0byYgZmFjZSA6IG1fY3NzQ29ubmVjdGVk
RmFjZXMpCisgICAgICAgIGZhY2UtPnJlbW92ZUNsaWVudCgqdGhpcyk7CisKKyAgICBmb3IgKGF1
dG8mIHBhaXIgOiBtX2xvY2FsbHlJbnN0YWxsZWRGYWNlc0xvb2t1cFRhYmxlKSB7CisgICAgICAg
IGZvciAoYXV0byYgZmFjZSA6IHBhaXIudmFsdWUpCisgICAgICAgICAgICBmYWNlLT5yZW1vdmVD
bGllbnQoKnRoaXMpOworICAgIH0KIH0KIAogdm9pZCBDU1NGb250RmFjZVNldDo6aW5jcmVtZW50
QWN0aXZlQ291bnQoKQpAQCAtNzAsNTcgKzgxLDE1OCBAQCBib29sIENTU0ZvbnRGYWNlU2V0Ojpo
YXNGYWNlKGNvbnN0IENTU0ZvbnRGYWNlJiBmYWNlKSBjb25zdAogICAgICAgICBpZiAobXlGYWNl
LnB0cigpID09ICZmYWNlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCisgICAg
Zm9yIChhdXRvJiBteUZhY2UgOiBtX2Nzc0Nvbm5lY3RlZEZhY2VzKSB7CisgICAgICAgIGlmICht
eUZhY2UucHRyKCkgPT0gJmZhY2UpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgQ1NTRm9udEZhY2VTZXQ6OnJlZ2lzdGVyTG9j
YWxGb250RmFjZXNGb3JGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQoreworICAgIEFT
U0VSVCghbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZS5jb250YWlucyhmYW1pbHlO
YW1lKSk7CisKKyAgICBWZWN0b3I8Rm9udFRyYWl0c01hc2s+IHRyYWl0c01hc2tzID0gRm9udENh
Y2hlOjpzaW5nbGV0b24oKS5nZXRUcmFpdHNJbkZhbWlseShmYW1pbHlOYW1lKTsKKyAgICBpZiAo
dHJhaXRzTWFza3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UmVm
PENTU0ZvbnRGYWNlPj4gZmFjZXMgPSB7IH07CisgICAgZm9yIChhdXRvIG1hc2sgOiB0cmFpdHNN
YXNrcykgeworICAgICAgICBSZWY8Q1NTRm9udEZhY2U+IGZhY2UgPSBDU1NGb250RmFjZTo6Y3Jl
YXRlKG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIHRydWUpOworICAgICAgICAKKyAgICAgICAg
UmVmUHRyPENTU1ZhbHVlTGlzdD4gZmFtaWx5TGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29t
bWFTZXBhcmF0ZWQoKTsKKyAgICAgICAgZmFtaWx5TGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKGZhbWlseU5hbWUpKTsKKyAgICAgICAg
ZmFjZS0+c2V0RmFtaWxpZXMoKmZhbWlseUxpc3QpOworICAgICAgICBmYWNlLT5zZXRUcmFpdHNN
YXNrKG1hc2spOworICAgICAgICBmYWNlLT5hZG9wdFNvdXJjZShzdGQ6Om1ha2VfdW5pcXVlPENT
U0ZvbnRGYWNlU291cmNlPihmYWNlLmdldCgpLCBmYW1pbHlOYW1lKSk7CisgICAgICAgIEFTU0VS
VCghZmFjZS0+YWxsU291cmNlc0ZhaWxlZCgpKTsKKyAgICAgICAgZmFjZXMuYXBwZW5kKFdURk1v
dmUoZmFjZSkpOworICAgIH0KKyAgICBtX2xvY2FsbHlJbnN0YWxsZWRGYWNlc0xvb2t1cFRhYmxl
LmFkZChmYW1pbHlOYW1lLCBXVEZNb3ZlKGZhY2VzKSk7Cit9CisKIHZvaWQgQ1NTRm9udEZhY2VT
ZXQ6OmFkZChDU1NGb250RmFjZSYgZmFjZSkKIHsKICAgICBBU1NFUlQoIWhhc0ZhY2UoZmFjZSkp
OwogCi0gICAgbV9mYWNlcy5hcHBlbmQoZmFjZSk7CiAgICAgZmFjZS5hZGRDbGllbnQoKnRoaXMp
OworICAgIG1fY2FjaGUuY2xlYXIoKTsKKworICAgIGlmIChmYWNlLmNzc0Nvbm5lY3Rpb24oKSkK
KyAgICAgICAgbV9jc3NDb25uZWN0ZWRGYWNlcy5hcHBlbmQoZmFjZSk7CisgICAgZWxzZQorICAg
ICAgICBtX2ZhY2VzLmFwcGVuZChmYWNlKTsKKworICAgIGlmIChmYWNlLmZhbWlsaWVzKCkpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogKmZhY2UuZmFtaWxpZXMoKSkgeworICAgICAgICAg
ICAgU3RyaW5nIGZhbWlseU5hbWUgPSBDU1NGb250U2VsZWN0b3I6OmZhbWlseU5hbWVGcm9tUHJp
bWl0aXZlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKSk7CisgICAgICAg
ICAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mYWNlc0xvb2t1cFRhYmxlLmFkZChm
YW1pbHlOYW1lLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4oKSk7CisgICAgICAgICAgICBhdXRv
JiBmYW1pbHlGb250RmFjZXMgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAg
ICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgLy8gbV9sb2Nh
bGx5SW5zdGFsbGVkRm9udEZhY2VzIGdyb3dzIHdpdGhvdXQgYm91bmQsIGV2ZW50dWFsbHkgZW5j
b3Jwb3JhdGluZyBldmVyeSBmb250IGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtLgorICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYnkgZGVzaWduLgorICAgICAgICAgICAgICAgIHJlZ2lzdGVyTG9j
YWxGb250RmFjZXNGb3JGYW1pbHkoZmFtaWx5TmFtZSk7CisgICAgICAgICAgICAgICAgZmFtaWx5
Rm9udEZhY2VzID0geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmYW1pbHlGb250
RmFjZXMuYXBwZW5kKGZhY2UpOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKGZhY2Uuc3Rh
dHVzKCkgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6TG9hZGluZyB8fCBmYWNlLnN0YXR1cygpID09
IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlRpbWVkT3V0KQogICAgICAgICBpbmNyZW1lbnRBY3RpdmVD
b3VudCgpOwogfQogCiB2b2lkIENTU0ZvbnRGYWNlU2V0OjpyZW1vdmUoY29uc3QgQ1NTRm9udEZh
Y2UmIGZhY2UpCiB7CisgICAgbV9jYWNoZS5jbGVhcigpOworCisgICAgaWYgKGZhY2UuZmFtaWxp
ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiAqZmFjZS5mYW1pbGllcygpKSB7Cisg
ICAgICAgICAgICBTdHJpbmcgZmFtaWx5TmFtZSA9IENTU0ZvbnRTZWxlY3Rvcjo6ZmFtaWx5TmFt
ZUZyb21QcmltaXRpdmUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpKTsK
KyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2ZhY2VzTG9va3VwVGFibGUuZmluZChmYW1p
bHlOYW1lKTsKKyAgICAgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2ZhY2VzTG9va3VwVGFi
bGUuZW5kKCkpOworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVyYXRvci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnZhbHVlW2ldLnB0cigpID09ICZmYWNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaXRl
cmF0b3ItPnZhbHVlLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGZvdW5kKTsK
KyAgICAgICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICBtX2ZhY2VzTG9va3VwVGFibGUucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGF1dG8gcmVtb3ZlSW50ZXJuYWwgPSBbJl0oc2l6ZV90IGluZGV4LCBWZWN0b3I8UmVm
PENTU0ZvbnRGYWNlPj4mIGNvbnRhaW5lcikgeworICAgICAgICBjb250YWluZXJbaW5kZXhdLT5y
ZW1vdmVDbGllbnQoKnRoaXMpOworICAgICAgICBjb250YWluZXIucmVtb3ZlKGluZGV4KTsKKyAg
ICAgICAgaWYgKGZhY2Uuc3RhdHVzKCkgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6TG9hZGluZyB8
fCBmYWNlLnN0YXR1cygpID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlRpbWVkT3V0KQorICAgICAg
ICAgICAgZGVjcmVtZW50QWN0aXZlQ291bnQoKTsKKyAgICB9OworCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2ZhY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtX2ZhY2VzW2ld
LnB0cigpID09ICZmYWNlKSB7Ci0gICAgICAgICAgICBtX2ZhY2VzW2ldLT5yZW1vdmVDbGllbnQo
KnRoaXMpOwotICAgICAgICAgICAgbV9mYWNlcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBpZiAo
ZmFjZS5zdGF0dXMoKSA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpMb2FkaW5nIHx8IGZhY2Uuc3Rh
dHVzKCkgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6VGltZWRPdXQpCi0gICAgICAgICAgICAgICAg
ZGVjcmVtZW50QWN0aXZlQ291bnQoKTsKKyAgICAgICAgICAgIHJlbW92ZUludGVybmFsKGksIG1f
ZmFjZXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2Nzc0Nvbm5lY3RlZEZhY2VzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX2Nzc0Nvbm5lY3RlZEZhY2VzW2ldLnB0cigpID09ICZmYWNlKSB7CisgICAg
ICAgICAgICByZW1vdmVJbnRlcm5hbChpLCBtX2Nzc0Nvbm5lY3RlZEZhY2VzKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBleHRyYWN0RmFtaWxpZXMoY29uc3QgQ1NTVmFs
dWVMaXN0JiBsaXN0KQordm9pZCBDU1NGb250RmFjZVNldDo6Y2xlYXIoKQogewotICAgIEhhc2hT
ZXQ8U3RyaW5nPiByZXN1bHQ7Ci0gICAgZm9yIChhdXRvJiBmYW1pbHkgOiBsaXN0KSB7Ci0gICAg
ICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oZmFtaWx5LmdldCgpKTsKLSAgICAgICAgaWYgKCFwcmltaXRpdmUuaXNGb250
RmFtaWx5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVzdWx0LmFkZChwcmlt
aXRpdmUuZm9udEZhbWlseSgpLmZhbWlseU5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0
OworICAgIG1fZmFjZXMuY2xlYXIoKTsKKyAgICBtX2Nzc0Nvbm5lY3RlZEZhY2VzLmNsZWFyKCk7
CisgICAgbV9mYWNlc0xvb2t1cFRhYmxlLmNsZWFyKCk7CisgICAgbV9sb2NhbGx5SW5zdGFsbGVk
RmFjZXNMb29rdXBUYWJsZS5jbGVhcigpOworICAgIG1fY2FjaGUuY2xlYXIoKTsKIH0KIAotc3Rh
dGljIGJvb2wgZmFtaWxpZXNJbnRlcnNlY3QoY29uc3QgQ1NTRm9udEZhY2UmIGZhY2UsIGNvbnN0
IENTU1ZhbHVlTGlzdCYgcmVxdWVzdCkKK2NvbnN0IENTU0ZvbnRGYWNlJiBDU1NGb250RmFjZVNl
dDo6b3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QKIHsKLSAgICBpZiAoIWZhY2UuZmFtaWxpZXMo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChpIDwgZmFjZUNvdW50KCkpOwor
ICAgIGlmIChpID4gbV9mYWNlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBtX2Nzc0Nvbm5lY3Rl
ZEZhY2VzW2kgLSBtX2ZhY2VzLnNpemUoKV07CisgICAgcmV0dXJuIG1fZmFjZXNbaV07Cit9CiAK
LSAgICBIYXNoU2V0PFN0cmluZz4gZmFjZUZhbWlsaWVzID0gZXh0cmFjdEZhbWlsaWVzKCpmYWNl
LmZhbWlsaWVzKCkpOwotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXF1ZXN0RmFtaWxpZXMgPSBleHRy
YWN0RmFtaWxpZXMocmVxdWVzdCk7Ci0gICAgZm9yIChhdXRvJiBmYW1pbHkxIDogZmFjZUZhbWls
aWVzKSB7Ci0gICAgICAgIGlmIChyZXF1ZXN0RmFtaWxpZXMuY29udGFpbnMoZmFtaWx5MSkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworc3RhdGlj
IE9wdGlvbmFsPEZvbnRUcmFpdHNNYXNrPiBjb21wdXRlRm9udFRyYWl0c01hc2soTXV0YWJsZVN0
eWxlUHJvcGVydGllcyYgc3R5bGUpIHsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHN0eWxlVmFsdWUg
PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxlKS5nZXQoKTsK
KyAgICBpZiAoIXN0eWxlVmFsdWUpCisgICAgICAgIHN0eWxlVmFsdWUgPSBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCkucHRyKCk7
CisKKyAgICBGb250VHJhaXRzTWFzayBzdHlsZU1hc2s7CisgICAgaWYgKGF1dG8gc3R5bGVNYXNr
T3B0aW9uYWwgPSBDU1NGb250RmFjZTo6Y2FsY3VsYXRlU3R5bGUoKnN0eWxlVmFsdWUpKQorICAg
ICAgICBzdHlsZU1hc2sgPSBzdHlsZU1hc2tPcHRpb25hbC52YWx1ZSgpOworICAgIGVsc2UKKyAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CisKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHdlaWdodFZhbHVl
ID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgp
OworICAgIGlmICghd2VpZ2h0VmFsdWUpCisgICAgICAgIHdlaWdodFZhbHVlID0gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLnB0
cigpOworCisgICAgRm9udFRyYWl0c01hc2sgd2VpZ2h0TWFzazsKKyAgICBpZiAoYXV0byB3ZWln
aHRNYXNrT3B0aW9uYWwgPSBDU1NGb250RmFjZTo6Y2FsY3VsYXRlV2VpZ2h0KCp3ZWlnaHRWYWx1
ZSkpCisgICAgICAgIHdlaWdodE1hc2sgPSB3ZWlnaHRNYXNrT3B0aW9uYWwudmFsdWUoKTsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBOdWxsb3B0OworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEZvbnRUcmFpdHNNYXNrPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3R5bGVNYXNrKSB8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih3ZWlnaHRNYXNrKSk7CiB9CiAKIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPENTU0ZvbnRGYWNlPj4gQ1NTRm9udEZhY2VTZXQ6Om1hdGNoaW5nRmFjZXMoY29u
c3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTEz
MiwxNCArMjQ0LDE1IEBAIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRGYWNl
Pj4gQ1NTRm9udEZhY2VTZXQ6Om1hdGNoaW5nRmFjZXMoY29uc3QKICAgICAgICAgZWMgPSBTWU5U
QVhfRVJSOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBib29sIGRlc2lyZWRT
dHlsZUlzTm9ybWFsID0gdHJ1ZTsKLSAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBkZXNpcmVkU3R5
bGUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkpIHsK
LSAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmRlc2lyZWRTdHlsZSkpIHsKLSAg
ICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgZGVzaXJlZFN0eWxlSXNOb3JtYWwgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKmRlc2lyZWRTdHlsZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFs
OworCisgICAgRm9udFRyYWl0c01hc2sgZm9udFRyYWl0c01hc2s7CisgICAgaWYgKGF1dG8gbWFz
a09wdGlvbmFsID0gY29tcHV0ZUZvbnRUcmFpdHNNYXNrKHN0eWxlLmdldCgpKSkKKyAgICAgICAg
Zm9udFRyYWl0c01hc2sgPSBtYXNrT3B0aW9uYWwudmFsdWUoKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKwogICAg
IFJlZlB0cjxDU1NWYWx1ZT4gZmFtaWx5ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NT
UHJvcGVydHlGb250RmFtaWx5KTsKICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oZmFtaWx5Lmdl
dCgpKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CkBAIC0xNDcsMjMgKzI2MCwyMyBAQCBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4+IENTU0ZvbnRGYWNlU2V0
OjptYXRjaGluZ0ZhY2VzKGNvbnN0CiAgICAgfQogICAgIENTU1ZhbHVlTGlzdCYgZmFtaWx5TGlz
dCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZhbWlseSk7CiAKLSAgICAvLyBNYXRjaCBDU1NG
b250U2VsZWN0b3I6OmdldEZvbnRGYWNlKCkKLSAgICBmb3IgKGF1dG8mIGZhY2UgOiBtX2ZhY2Vz
KSB7Ci0gICAgICAgIGlmICghZmFtaWxpZXNJbnRlcnNlY3QoZmFjZSwgZmFtaWx5TGlzdCkgfHwg
KGRlc2lyZWRTdHlsZUlzTm9ybWFsICYmICEoZmFjZS0+dHJhaXRzTWFzaygpICYgRm9udFN0eWxl
Tm9ybWFsTWFzaykpKQorICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1bmlxdWVGYW1pbGllczsK
KyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGZhbWlseUxpc3QpIHsKKyAgICAgICAgY29uc3QgQ1NT
UHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihm
YW1pbHkuZ2V0KCkpOworICAgICAgICBpZiAoIXByaW1pdGl2ZS5pc0ZvbnRGYW1pbHkoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXN1bHQuYXBwZW5kKGZhY2UuZ2V0KCkpOwor
ICAgICAgICB1bmlxdWVGYW1pbGllcy5hZGQocHJpbWl0aXZlLmZvbnRGYW1pbHkoKS5mYW1pbHlO
YW1lKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KIAotdm9pZCBDU1NGb250RmFjZVNl
dDo6bG9hZChjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgYXV0byBtYXRjaGluZ0ZhY2VzID0gdGhpcy0+bWF0Y2hpbmdGYWNl
cyhmb250LCB0ZXh0LCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47CisgICAgZm9y
IChhdXRvJiBmYW1pbHkgOiB1bmlxdWVGYW1pbGllcykgeworICAgICAgICBDU1NTZWdtZW50ZWRG
b250RmFjZSogZmFjZXMgPSBnZXRGb250RmFjZShmb250VHJhaXRzTWFzaywgZmFtaWx5KTsKKyAg
ICAgICAgaWYgKCFmYWNlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKGF1
dG8mIGNvbnN0aXR1ZW50RmFjZSA6IGZhY2VzLT5jb25zdGl0dWVudEZhY2VzKCkpCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGNvbnN0aXR1ZW50RmFjZS5nZXQoKSk7CisgICAgfQogCi0gICAg
Zm9yIChhdXRvJiBmYWNlIDogbWF0Y2hpbmdGYWNlcykKLSAgICAgICAgZmFjZS5nZXQoKS5sb2Fk
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBDU1NGb250RmFjZVNldDo6Y2hlY2so
Y29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQpAQCAtMTc5LDYgKzI5MiwxMTggQEAgYm9vbCBDU1NGb250RmFjZVNldDo6Y2hlY2soY29uc3Qg
U3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorY2xhc3MgRm9udEZhY2VDb21wYXJhdG9yIHsKK3B1YmxpYzoKKyAgICBG
b250RmFjZUNvbXBhcmF0b3IoRm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0c01hc2tGb3JDb21w
YXJpc29uKQorICAgICAgICA6IG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uKGRlc2ly
ZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbikKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9u
dFdlaWdodE1hc2spOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBDU1NGb250
RmFjZSYgZmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBzZWNvbmQpCisgICAgeworICAgICAgICBG
b250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC50cmFpdHNNYXNrKCk7CisgICAg
ICAgIEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01hc2sgPSBzZWNvbmQudHJhaXRzTWFzaygp
OworCisgICAgICAgIGJvb2wgZmlyc3RIYXNEZXNpcmVkU3R5bGUgPSBmaXJzdFRyYWl0c01hc2sg
JiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRTdHlsZU1hc2s7CisgICAg
ICAgIGJvb2wgc2Vjb25kSGFzRGVzaXJlZFN0eWxlID0gc2Vjb25kVHJhaXRzTWFzayAmIG1fZGVz
aXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFzazsKKworICAgICAgICBp
ZiAoZmlyc3RIYXNEZXNpcmVkU3R5bGUgIT0gc2Vjb25kSGFzRGVzaXJlZFN0eWxlKQorICAgICAg
ICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxlOworCisgICAgICAgIGlmICgobV9kZXNp
cmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhZmly
c3QuaXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5pc0xvY2FsRmFsbGJhY2soKSkgeworICAg
ICAgICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0ZWQgdGhhdCBpdCBjYW4g
b25seSBzdXBwb3J0IGl0YWxpY3MgdG8gYSBmb250IHRoYXQgY2xhaW1zIHRvIHN1cHBvcnQKKyAg
ICAgICAgICAgIC8vIGFsbCBzdHlsZXMuIFRoZSBzcGVjaWFsaXplZCBmb250IGlzIG1vcmUgbGlr
ZWx5IHRvIGJlIHRoZSBvbmUgdGhlIGF1dGhvciB3YW50cyB1c2VkLgorICAgICAgICAgICAgYm9v
bCBmaXJzdFJlcXVpcmVzSXRhbGljcyA9IChmaXJzdFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFs
aWNNYXNrKSAmJiAhKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spOworICAg
ICAgICAgICAgYm9vbCBzZWNvbmRSZXF1aXJlc0l0YWxpY3MgPSAoc2Vjb25kVHJhaXRzTWFzayAm
IEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEoc2Vjb25kVHJhaXRzTWFzayAmIEZvbnRTdHlsZU5v
cm1hbE1hc2spOworICAgICAgICAgICAgaWYgKGZpcnN0UmVxdWlyZXNJdGFsaWNzICE9IHNlY29u
ZFJlcXVpcmVzSXRhbGljcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RSZXF1aXJlc0l0
YWxpY3M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2Vjb25kVHJhaXRzTWFzayAmIG1fZGVz
aXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFdlaWdodE1hc2spCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChmaXJzdFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRU
cmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRXZWlnaHRNYXNrKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1jc3Mz
LWZvbnRzLTIwMTExMDA0LyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSBzYXlzIDoKKyAgICAgICAg
Ly8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyBsZXNzIHRoYW4gNDAwLCB3ZWlnaHRzIGJl
bG93IHRoZSBkZXNpcmVkIHdlaWdodCBhcmUgY2hlY2tlZCBpbiBkZXNjZW5kaW5nIG9yZGVyIGZv
bGxvd2VkIGJ5IHdlaWdodHMgYWJvdmUgdGhlIGRlc2lyZWQgd2VpZ2h0IGluIGFzY2VuZGluZyBv
cmRlciB1bnRpbCBhIG1hdGNoIGlzIGZvdW5kLgorICAgICAgICAvLyAgIC0gSWYgdGhlIGRlc2ly
ZWQgd2VpZ2h0IGlzIGdyZWF0ZXIgdGhhbiA1MDAsIHdlaWdodHMgYWJvdmUgdGhlIGRlc2lyZWQg
d2VpZ2h0IGFyZSBjaGVja2VkIGluIGFzY2VuZGluZyBvcmRlciBmb2xsb3dlZCBieSB3ZWlnaHRz
IGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBpbiBkZXNjZW5kaW5nIG9yZGVyIHVudGlsIGEgbWF0
Y2ggaXMgZm91bmQuCisgICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgNDAw
LCA1MDAgaXMgY2hlY2tlZCBmaXJzdCBhbmQgdGhlbiB0aGUgcnVsZSBmb3IgZGVzaXJlZCB3ZWln
aHRzIGxlc3MgdGhhbiA0MDAgaXMgdXNlZC4KKyAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVk
IHdlaWdodCBpcyA1MDAsIDQwMCBpcyBjaGVja2VkIGZpcnN0IGFuZCB0aGVuIHRoZSBydWxlIGZv
ciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFuIDQwMCBpcyB1c2VkLgorCisgICAgICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBmYWxsYmFja1J1bGVTZXRzID0gOTsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHJ1bGVzUGVyU2V0ID0gODsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZvbnRU
cmFpdHNNYXNrIHdlaWdodEZhbGxiYWNrUnVsZVNldHNbZmFsbGJhY2tSdWxlU2V0c11bcnVsZXNQ
ZXJTZXRdID0geworICAgICAgICAgICAgeyBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDMw
ME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDYw
ME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkw
ME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQzMDBN
YXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ2MDBN
YXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBN
YXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFz
aywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFz
aywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFz
ayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDMwME1hc2ss
IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ss
IEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sg
fSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBG
b250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBG
b250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0s
CisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9u
dFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9u
dFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9LAor
ICAgICAgICAgICAgeyBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2ssIEZvbnRX
ZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRX
ZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfSwKKyAg
ICAgICAgICAgIHsgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2Vp
Z2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2Vp
Z2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0sCisgICAg
ICAgICAgICB7IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdo
dDYwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdo
dDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9CisgICAgICAg
IH07CisKKyAgICAgICAgdW5zaWduZWQgcnVsZVNldEluZGV4ID0gMDsKKyAgICAgICAgZm9yICg7
ICEobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiAoMSA8PCAoRm9udFdlaWdodDEw
MEJpdCArIHJ1bGVTZXRJbmRleCkpKTsgcnVsZVNldEluZGV4KyspIHsgfQorCisgICAgICAgIGNv
bnN0IEZvbnRUcmFpdHNNYXNrKiB3ZWlnaHRGYWxsYmFja1J1bGUgPSB3ZWlnaHRGYWxsYmFja1J1
bGVTZXRzW3J1bGVTZXRJbmRleF07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
dWxlc1BlclNldDsgKytpKSB7CisgICAgICAgICAgICBpZiAoc2Vjb25kVHJhaXRzTWFzayAmIHdl
aWdodEZhbGxiYWNrUnVsZVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpZiAoZmlyc3RUcmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tSdWxlW2ldKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGb250VHJhaXRzTWFzayBtX2Rlc2lyZWRUcmFp
dHNNYXNrRm9yQ29tcGFyaXNvbjsKK307CisKK0NTU1NlZ21lbnRlZEZvbnRGYWNlKiBDU1NGb250
RmFjZVNldDo6Z2V0Rm9udEZhY2UoRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzaywgY29uc3QgQXRv
bWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fZmFjZXNMb29rdXBU
YWJsZS5maW5kKGZhbWlseSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZmFjZXNMb29rdXBUYWJs
ZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byYgZmFtaWx5Rm9udEZh
Y2VzID0gaXRlcmF0b3ItPnZhbHVlOworCisgICAgYXV0byYgc2VnbWVudGVkRm9udEZhY2VDYWNo
ZSA9IG1fY2FjaGUuYWRkKGZhbWlseSwgSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRy
PENTU1NlZ21lbnRlZEZvbnRGYWNlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOworCisgICAgYXV0byYg
ZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUuYWRkKHRyYWl0c01hc2ssIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoZmFjZSkKKyAgICAgICAgcmV0dXJuIGZhY2UuZ2V0KCk7
CisKKyAgICBmYWNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NTZWdtZW50ZWRGb250RmFjZT4oKTsK
KworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRGYWNlPiwgMzI+IGNh
bmRpZGF0ZUZvbnRGYWNlczsKKyAgICBmb3IgKGludCBpID0gZmFtaWx5Rm9udEZhY2VzLnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIENTU0ZvbnRGYWNlJiBjYW5kaWRhdGUgPSBm
YW1pbHlGb250RmFjZXNbaV07CisgICAgICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRyYWl0c01hc2sg
PSBjYW5kaWRhdGUudHJhaXRzTWFzaygpOworICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250
U3R5bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3Jt
YWxNYXNrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYW5kaWRhdGVGb250RmFj
ZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgfQorCisgICAgYXV0byBsb2NhbEl0ZXJhdG9yID0g
bV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZS5maW5kKGZhbWlseSk7CisgICAgaWYg
KGxvY2FsSXRlcmF0b3IgIT0gbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZS5lbmQo
KSkgeworICAgICAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGxvY2FsSXRlcmF0b3ItPnZhbHVl
KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVUcmFpdHNNYXNrID0gY2FuZGlkYXRl
LT50cmFpdHNNYXNrKCk7CisgICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5bGVO
b3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNr
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZUZvbnRG
YWNlcy5hcHBlbmQoY2FuZGlkYXRlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0ZDo6c3Rh
YmxlX3NvcnQoY2FuZGlkYXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRpZGF0ZUZvbnRGYWNlcy5l
bmQoKSwgRm9udEZhY2VDb21wYXJhdG9yKHRyYWl0c01hc2spKTsKKyAgICBmb3IgKGF1dG8mIGNh
bmRpZGF0ZSA6IGNhbmRpZGF0ZUZvbnRGYWNlcykKKyAgICAgICAgZmFjZS0+YXBwZW5kRm9udEZh
Y2UoY2FuZGlkYXRlLmdldCgpKTsKKworICAgIHJldHVybiBmYWNlLmdldCgpOworfQorCiB2b2lk
IENTU0ZvbnRGYWNlU2V0OjpzdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2UmIGZhY2UsIENTU0ZvbnRG
YWNlOjpTdGF0dXMgb2xkU3RhdGUsIENTU0ZvbnRGYWNlOjpTdGF0dXMgbmV3U3RhdGUpCiB7CiAg
ICAgQVNTRVJUKGhhc0ZhY2UoZmFjZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuaApp
bmRleCA2Njk0N2Q3ODFiOGM4MWQ4NDIxZmUwOTJhMWI2YWNiZWE0MjM0YjlmLi4zMTM3MWFiZWM2
MjYyMzE5YTJiMTk0MjZiZWUzMTcwMDBkNDYxNWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTZXQuaApAQCAtMjcsNyArMjcsOSBAQAogI2RlZmluZSBDU1NGb250RmFjZVNldF9oCiAKICNp
bmNsdWRlICJDU1NGb250RmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiw5ICszOCw5IEBAIGNsYXNzIEZvbnRGYWNlU2V0Owog
Y2xhc3MgQ1NTRm9udEZhY2VTZXRDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNTU0Zv
bnRGYWNlU2V0Q2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGZhY2VGaW5pc2hlZChDU1NG
b250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnRlZExvYWRpbmcoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXBsZXRlZExvYWRpbmcoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGZhY2VGaW5pc2hlZChDU1NGb250RmFjZSYsIENTU0ZvbnRG
YWNlOjpTdGF0dXMpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZExvYWRpbmcoKSB7IH07
CisgICAgdmlydHVhbCB2b2lkIGNvbXBsZXRlZExvYWRpbmcoKSB7IH07CiB9OwogCiBjbGFzcyBD
U1NGb250RmFjZVNldCBmaW5hbCA6IHB1YmxpYyBDU1NGb250RmFjZTo6Q2xpZW50IHsKQEAgLTQ3
LDE0ICs0OSwxNiBAQCBwdWJsaWM6CiAgICAgfkNTU0ZvbnRGYWNlU2V0KCk7CiAKICAgICBib29s
IGhhc0ZhY2UoY29uc3QgQ1NTRm9udEZhY2UmKSBjb25zdDsKLSAgICBzaXplX3QgZmFjZUNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9mYWNlcy5zaXplKCk7IH0KKyAgICBzaXplX3QgZmFjZUNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9mYWNlcy5zaXplKCkgKyBtX2Nzc0Nvbm5lY3RlZEZhY2VzLnNp
emUoKTsgfQogICAgIHZvaWQgYWRkKENTU0ZvbnRGYWNlJik7CiAgICAgdm9pZCByZW1vdmUoY29u
c3QgQ1NTRm9udEZhY2UmKTsKLSAgICBjb25zdCBDU1NGb250RmFjZSYgb3BlcmF0b3JbXShzaXpl
X3QgaSkgY29uc3QgeyByZXR1cm4gbV9mYWNlc1tpXTsgfQorICAgIHZvaWQgY2xlYXIoKTsKKyAg
ICBjb25zdCBDU1NGb250RmFjZSYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3Q7CiAKLSAgICB2
b2lkIGxvYWQoY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBib29sIGNoZWNrKGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5n
JiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAKKyAgICBDU1NTZWdtZW50ZWRGb250RmFjZSogZ2V0
Rm9udEZhY2UoRm9udFRyYWl0c01hc2ssIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKKwog
ICAgIGVudW0gY2xhc3MgU3RhdHVzIHsKICAgICAgICAgTG9hZGluZywKICAgICAgICAgTG9hZGVk
CkBAIC02OSw3ICs3MywxNSBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHN0YXRlQ2hh
bmdlZChDU1NGb250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMgb2xkU3RhdGUsIENTU0ZvbnRG
YWNlOjpTdGF0dXMgbmV3U3RhdGUpIG92ZXJyaWRlOwogCisgICAgdm9pZCByZWdpc3RlckxvY2Fs
Rm9udEZhY2VzRm9yRmFtaWx5KGNvbnN0IFN0cmluZyYpOworCisgICAgLy8gVGhlIGRpc3RpbmN0
aW9uIGJldHdlZW4gbV9mYWNlcyBhbmQgbV9jc3NDb25uZWN0ZWRGYWNlcyBpcyBuZWVkZWQgZm9y
IEZvbnRGYWNlU2V0IGl0ZXJhdGlvbiBvcmRlci4KKyAgICAvLyBUaGUgdW5pb24gb2YgbV9mYWNl
cyBhbmQgbV9jc3NDb25uZWN0ZWRGYWNlcyBzaG91bGQgZXF1YWwgYWxsIHRoZSBmb250cyBpbnNp
ZGUgbV9mYWNlc0xvb2t1cFRhYmxlLgogICAgIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PiBtX2Zh
Y2VzOworICAgIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PiBtX2Nzc0Nvbm5lY3RlZEZhY2VzOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4sIEFTQ0lJQ2FzZUlu
c2Vuc2l0aXZlSGFzaD4gbV9mYWNlc0xvb2t1cFRhYmxlOworICAgIEhhc2hNYXA8U3RyaW5nLCBW
ZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9sb2Nh
bGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZTsKKyAgICBIYXNoTWFwPFN0cmluZywgSGFzaE1h
cDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4sIEFTQ0lJ
Q2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9jYWNoZTsKICAgICBTdGF0dXMgbV9zdGF0dXMgeyBTdGF0
dXM6OkxvYWRlZCB9OwogICAgIENTU0ZvbnRGYWNlU2V0Q2xpZW50JiBtX2NsaWVudDsKICAgICB1
bnNpZ25lZCBtX2FjdGl2ZUNvdW50IHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuaAppbmRleCAxZTI5YjU3ZmZkZmUzODA3NDZlNjcyMzIzMGQ1NTM0OWE1OWZiOTlmLi5m
NjIwMjVkNjkwMjc4MmJkMzU0Mjk0ZmZhMjBlODRjZjE2NWMyZDI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VTb3VyY2UuaApAQCAtNDUsNiArNDUsOCBAQCBjbGFzcyBTaGFyZWRCdWZm
ZXI7CiBjbGFzcyBDU1NGb250RmFjZVNvdXJjZSBmaW5hbCA6IHB1YmxpYyBDYWNoZWRGb250Q2xp
ZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBDU1NGb250
RmFjZVNvdXJjZShDU1NGb250RmFjZSYgb3duZXIsIGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZU9y
VVJJLCBDYWNoZWRGb250KiA9IG51bGxwdHIsIFNWR0ZvbnRGYWNlRWxlbWVudCogPSBudWxscHRy
KTsKKyAgICB2aXJ0dWFsIH5DU1NGb250RmFjZVNvdXJjZSgpOwogCiAgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgPT4gU3VjY2VzcwogICAgIC8vICAgICAgICAgICAgICAgICAgICAvLwpAQCAt
NTcsMTAgKzU5LDYgQEAgcHVibGljOgogICAgICAgICBTdWNjZXNzLAogICAgICAgICBGYWlsdXJl
CiAgICAgfTsKLQotICAgIENTU0ZvbnRGYWNlU291cmNlKENTU0ZvbnRGYWNlJiBvd25lciwgY29u
c3QgU3RyaW5nJiBmYW1pbHlOYW1lT3JVUkksIENhY2hlZEZvbnQqID0gbnVsbHB0ciwgU1ZHRm9u
dEZhY2VFbGVtZW50KiA9IG51bGxwdHIpOwotICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlU291cmNl
KCk7Ci0KICAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KIAog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZU9yVVJJKCkgY29uc3QgeyByZXR1cm4g
bV9mYW1pbHlOYW1lT3JVUkk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAK
aW5kZXggMmM4YzJjNmQzNjQxYTE4MjVkZGVhZmFmOGZkYWM1MWVkZDUxMzNmZC4uNjgzNjNlMmFk
MWIwNGRjOWQ1YzYzNDlmMzM3MDM0Mjk4MzlmOTVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5jcHAKQEAgLTY1LDYgKzY1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGZvbnRTZWxl
Y3RvcklkOwogCiBDU1NGb250U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3RvcihEb2N1bWVudCYgZG9j
dW1lbnQpCiAgICAgOiBtX2RvY3VtZW50KCZkb2N1bWVudCkKKyAgICAsIG1fZm9udEZhY2VTZXQo
KnRoaXMpCiAgICAgLCBtX2JlZ2luTG9hZGluZ1RpbWVyKCp0aGlzLCAmQ1NTRm9udFNlbGVjdG9y
OjpiZWdpbkxvYWRUaW1lckZpcmVkKQogICAgICwgbV91bmlxdWVJZCgrK2ZvbnRTZWxlY3Rvcklk
KQogICAgICwgbV92ZXJzaW9uKDApCkBAIC04NSw3ICs4Niw3IEBAIENTU0ZvbnRTZWxlY3Rvcjo6
fkNTU0ZvbnRTZWxlY3RvcigpCiAKIGJvb2wgQ1NTRm9udFNlbGVjdG9yOjppc0VtcHR5KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9mb250cy5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2ZvbnRG
YWNlU2V0LmZhY2VDb3VudCgpOwogfQogCiB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YXBwZW5kU291
cmNlcyhDU1NGb250RmFjZSYgZm9udEZhY2UsIENTU1ZhbHVlTGlzdCYgc3JjTGlzdCwgRG9jdW1l
bnQqIGRvY3VtZW50LCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1Ry
ZWUpCkBAIC0xNDQsMzAgKzE0NSw3IEBAIFN0cmluZyBDU1NGb250U2VsZWN0b3I6OmZhbWlseU5h
bWVGcm9tUHJpbWl0aXZlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKICAgICB9CiB9
CiAKLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjpyZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5
KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKLXsKLSAgICBBU1NFUlQoIW1fbG9jYWxseUluc3Rh
bGxlZEZvbnRGYWNlcy5jb250YWlucyhmYW1pbHlOYW1lKSk7Ci0KLSAgICBWZWN0b3I8Rm9udFRy
YWl0c01hc2s+IHRyYWl0c01hc2tzID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5nZXRUcmFpdHNJ
bkZhbWlseShmYW1pbHlOYW1lKTsKLSAgICBpZiAodHJhaXRzTWFza3MuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4gZmFjZXMgPSB7IH07
Ci0gICAgZm9yIChhdXRvIG1hc2sgOiB0cmFpdHNNYXNrcykgewotICAgICAgICBSZWY8Q1NTRm9u
dEZhY2U+IGZhY2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKCp0aGlzLCBudWxscHRyLCB0cnVlKTsK
LSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGZhbWlseUxpc3QgPSBDU1NW
YWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgICAgIGZhbWlseUxpc3QtPmFw
cGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1p
bHlOYW1lKSk7Ci0gICAgICAgIGZhY2UtPnNldEZhbWlsaWVzKCpmYW1pbHlMaXN0KTsKLSAgICAg
ICAgZmFjZS0+c2V0VHJhaXRzTWFzayhtYXNrKTsKLSAgICAgICAgZmFjZS0+YWRvcHRTb3VyY2Uo
c3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oZmFjZS5nZXQoKSwgZmFtaWx5TmFt
ZSkpOwotICAgICAgICBBU1NFUlQoIWZhY2UtPmFsbFNvdXJjZXNGYWlsZWQoKSk7Ci0gICAgICAg
IGZhY2VzLmFwcGVuZChXVEZNb3ZlKGZhY2UpKTsKLSAgICB9Ci0gICAgbV9sb2NhbGx5SW5zdGFs
bGVkRm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBXVEZNb3ZlKGZhY2VzKSk7Ci19Ci0KLXZvaWQg
Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2Um
IGZvbnRGYWNlUnVsZSwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dU
cmVlKQordm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShTdHlsZVJ1bGVGb250
RmFjZSYgZm9udEZhY2VSdWxlLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNo
YWRvd1RyZWUpCiB7CiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSA9IGZvbnRGYWNl
UnVsZS5wcm9wZXJ0aWVzKCk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBmb250RmFtaWx5ID0gc3R5
bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwpAQCAtMjAxLDcg
KzE3OSw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5
bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwgYm9vCiAgICAgaWYgKCFzcmNMaXN0Lmxlbmd0
aCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWY8Q1NTRm9udEZhY2U+IGZvbnRGYWNlID0g
Q1NTRm9udEZhY2U6OmNyZWF0ZSgqdGhpcyk7CisgICAgUmVmPENTU0ZvbnRGYWNlPiBmb250RmFj
ZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUodGhpcywgJmZvbnRGYWNlUnVsZSk7CiAKICAgICBpZiAo
IWZvbnRGYWNlLT5zZXRGYW1pbGllcygqZm9udEZhbWlseSkpCiAgICAgICAgIHJldHVybjsKQEAg
LTIzMCwyMiArMjA4LDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShj
b25zdCBTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxlLCBib28KICAgICBpZiAoZm9udEZh
Y2UtPmFsbFNvdXJjZXNGYWlsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRv
JiBpdGVtIDogZmFtaWx5TGlzdCkgewotICAgICAgICBTdHJpbmcgZmFtaWx5TmFtZSA9IGZhbWls
eU5hbWVGcm9tUHJpbWl0aXZlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgp
KSk7Ci0gICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5h
bWUsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PigpKTsKLSAgICAgICAgYXV0byYgZmFtaWx5Rm9u
dEZhY2VzID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgaWYgKGFkZFJlc3Vs
dC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICByZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFt
aWx5KGZhbWlseU5hbWUpOwotICAgICAgICAgICAgZmFtaWx5Rm9udEZhY2VzID0geyB9OwotICAg
ICAgICB9Ci0KLSAgICAgICAgZmFtaWx5Rm9udEZhY2VzLmFwcGVuZChmb250RmFjZS5jb3B5UmVm
KCkpOwotICAgICAgICAKLSAgICAgICAgKyttX3ZlcnNpb247Ci0gICAgfQorICAgIG1fZm9udEZh
Y2VTZXQuYWRkKGZvbnRGYWNlLmdldCgpKTsKIH0KIAogdm9pZCBDU1NGb250U2VsZWN0b3I6OnJl
Z2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRTZWxlY3RvckNsaWVudCYgY2xpZW50
KQpAQCAtMzA0LDg0ICsyNjcsMTMgQEAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgcmVzb2x2
ZUdlbmVyaWNGYW1pbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBGb250RGUKICAgICByZXR1
cm4gZmFtaWx5TmFtZTsKIH0KIAotY2xhc3MgRm9udEZhY2VDb21wYXJhdG9yIHsKLXB1YmxpYzoK
LSAgICBGb250RmFjZUNvbXBhcmF0b3IoRm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0c01hc2tG
b3JDb21wYXJpc29uKQotICAgICAgICA6IG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29u
KGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29u
ICYgRm9udFdlaWdodE1hc2spOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBD
U1NGb250RmFjZSYgZmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBzZWNvbmQpCi0gICAgewotICAg
ICAgICBGb250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC50cmFpdHNNYXNrKCk7
Ci0gICAgICAgIEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01hc2sgPSBzZWNvbmQudHJhaXRz
TWFzaygpOwotCi0gICAgICAgIGJvb2wgZmlyc3RIYXNEZXNpcmVkU3R5bGUgPSBmaXJzdFRyYWl0
c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRTdHlsZU1hc2s7
Ci0gICAgICAgIGJvb2wgc2Vjb25kSGFzRGVzaXJlZFN0eWxlID0gc2Vjb25kVHJhaXRzTWFzayAm
IG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFzazsKLQotICAg
ICAgICBpZiAoZmlyc3RIYXNEZXNpcmVkU3R5bGUgIT0gc2Vjb25kSGFzRGVzaXJlZFN0eWxlKQot
ICAgICAgICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxlOwotCi0gICAgICAgIGlmICgo
bV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNNYXNrKSAm
JiAhZmlyc3QuaXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5pc0xvY2FsRmFsbGJhY2soKSkg
ewotICAgICAgICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0ZWQgdGhhdCBp
dCBjYW4gb25seSBzdXBwb3J0IGl0YWxpY3MgdG8gYSBmb250IHRoYXQgY2xhaW1zIHRvIHN1cHBv
cnQKLSAgICAgICAgICAgIC8vIGFsbCBzdHlsZXMuIFRoZSBzcGVjaWFsaXplZCBmb250IGlzIG1v
cmUgbGlrZWx5IHRvIGJlIHRoZSBvbmUgdGhlIGF1dGhvciB3YW50cyB1c2VkLgotICAgICAgICAg
ICAgYm9vbCBmaXJzdFJlcXVpcmVzSXRhbGljcyA9IChmaXJzdFRyYWl0c01hc2sgJiBGb250U3R5
bGVJdGFsaWNNYXNrKSAmJiAhKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2sp
OwotICAgICAgICAgICAgYm9vbCBzZWNvbmRSZXF1aXJlc0l0YWxpY3MgPSAoc2Vjb25kVHJhaXRz
TWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEoc2Vjb25kVHJhaXRzTWFzayAmIEZvbnRT
dHlsZU5vcm1hbE1hc2spOwotICAgICAgICAgICAgaWYgKGZpcnN0UmVxdWlyZXNJdGFsaWNzICE9
IHNlY29uZFJlcXVpcmVzSXRhbGljcykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RSZXF1
aXJlc0l0YWxpY3M7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2Vjb25kVHJhaXRzTWFzayAm
IG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFdlaWdodE1hc2spCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChmaXJzdFRyYWl0c01hc2sgJiBtX2Rl
c2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRXZWlnaHRNYXNrKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9X
RC1jc3MzLWZvbnRzLTIwMTExMDA0LyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSBzYXlzIDoKLSAg
ICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyBsZXNzIHRoYW4gNDAwLCB3ZWln
aHRzIGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBhcmUgY2hlY2tlZCBpbiBkZXNjZW5kaW5nIG9y
ZGVyIGZvbGxvd2VkIGJ5IHdlaWdodHMgYWJvdmUgdGhlIGRlc2lyZWQgd2VpZ2h0IGluIGFzY2Vu
ZGluZyBvcmRlciB1bnRpbCBhIG1hdGNoIGlzIGZvdW5kLgotICAgICAgICAvLyAgIC0gSWYgdGhl
IGRlc2lyZWQgd2VpZ2h0IGlzIGdyZWF0ZXIgdGhhbiA1MDAsIHdlaWdodHMgYWJvdmUgdGhlIGRl
c2lyZWQgd2VpZ2h0IGFyZSBjaGVja2VkIGluIGFzY2VuZGluZyBvcmRlciBmb2xsb3dlZCBieSB3
ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBpbiBkZXNjZW5kaW5nIG9yZGVyIHVudGls
IGEgbWF0Y2ggaXMgZm91bmQuCi0gICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQg
aXMgNDAwLCA1MDAgaXMgY2hlY2tlZCBmaXJzdCBhbmQgdGhlbiB0aGUgcnVsZSBmb3IgZGVzaXJl
ZCB3ZWlnaHRzIGxlc3MgdGhhbiA0MDAgaXMgdXNlZC4KLSAgICAgICAgLy8gICAtIElmIHRoZSBk
ZXNpcmVkIHdlaWdodCBpcyA1MDAsIDQwMCBpcyBjaGVja2VkIGZpcnN0IGFuZCB0aGVuIHRoZSBy
dWxlIGZvciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFuIDQwMCBpcyB1c2VkLgotCi0gICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYWxsYmFja1J1bGVTZXRzID0gOTsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHJ1bGVzUGVyU2V0ID0gODsKLSAgICAgICAgc3RhdGljIGNvbnN0
IEZvbnRUcmFpdHNNYXNrIHdlaWdodEZhbGxiYWNrUnVsZVNldHNbZmFsbGJhY2tSdWxlU2V0c11b
cnVsZXNQZXJTZXRdID0gewotICAgICAgICAgICAgeyBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdl
aWdodDMwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdl
aWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdl
aWdodDkwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWln
aHQzMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWln
aHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWln
aHQ5MDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0
MTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0
NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0
OTAwTWFzayB9LAotICAgICAgICAgICAgeyBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDMw
ME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDYw
ME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkw
ME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBN
YXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQ2MDBN
YXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBN
YXNrIH0sCi0gICAgICAgICAgICB7IEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFz
aywgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFz
aywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFz
ayB9LAotICAgICAgICAgICAgeyBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2ss
IEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ss
IEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sg
fSwKLSAgICAgICAgICAgIHsgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBG
b250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBG
b250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0s
Ci0gICAgICAgICAgICB7IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9u
dFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9u
dFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgdW5zaWduZWQgcnVsZVNldEluZGV4ID0gMDsKLSAgICAgICAg
Zm9yICg7ICEobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiAoMSA8PCAoRm9udFdl
aWdodDEwMEJpdCArIHJ1bGVTZXRJbmRleCkpKTsgcnVsZVNldEluZGV4KyspIHsgfQotCi0gICAg
ICAgIGNvbnN0IEZvbnRUcmFpdHNNYXNrKiB3ZWlnaHRGYWxsYmFja1J1bGUgPSB3ZWlnaHRGYWxs
YmFja1J1bGVTZXRzW3J1bGVTZXRJbmRleF07Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBydWxlc1BlclNldDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc2Vjb25kVHJhaXRzTWFz
ayAmIHdlaWdodEZhbGxiYWNrUnVsZVtpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAoZmlyc3RUcmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tSdWxlW2ld
KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBGb250VHJhaXRzTWFzayBtX2Rlc2ly
ZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbjsKLX07Ci0KIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVj
dG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgLy8gRklYTUU6
IFRoZSBzcGVjIChhbmQgRmlyZWZveCkgc2F5cyB1c2VyIHNwZWNpZmllZCBnZW5lcmljIGZhbWls
aWVzIChzYW5zLXNlcmlmIGV0Yy4pIHNob3VsZCBiZSByZXNvbHZlZCBiZWZvcmUgdGhlIEBmb250
LWZhY2UgbG9va3VwIHRvby4KICAgICBib29sIHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QgPSBm
YW1pbHlOYW1lID09IHN0YW5kYXJkRmFtaWx5OwogCiAgICAgQXRvbWljU3RyaW5nIGZhbWlseUZv
ckxvb2t1cCA9IHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QgPyByZXNvbHZlR2VuZXJpY0ZhbWls
eShtX2RvY3VtZW50LCBmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpIDogZmFtaWx5TmFtZTsK
LSAgICBDU1NTZWdtZW50ZWRGb250RmFjZSogZmFjZSA9IGdldEZvbnRGYWNlKGZvbnREZXNjcmlw
dGlvbiwgZmFtaWx5Rm9yTG9va3VwKTsKKyAgICBDU1NTZWdtZW50ZWRGb250RmFjZSogZmFjZSA9
IG1fZm9udEZhY2VTZXQuZ2V0Rm9udEZhY2UoZm9udERlc2NyaXB0aW9uLnRyYWl0c01hc2soKSwg
ZmFtaWx5Rm9yTG9va3VwKTsKICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgaWYgKCFyZXNvbHZl
R2VuZXJpY0ZhbWlseUZpcnN0KQogICAgICAgICAgICAgZmFtaWx5Rm9yTG9va3VwID0gcmVzb2x2
ZUdlbmVyaWNGYW1pbHkobV9kb2N1bWVudCwgZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsK
QEAgLTM5MSw0OSArMjgzLDYgQEAgRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5n
ZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3IKICAgICByZXR1cm4g
ZmFjZS0+Zm9udFJhbmdlcyhmb250RGVzY3JpcHRpb24pOwogfQogCi1DU1NTZWdtZW50ZWRGb250
RmFjZSogQ1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgYXV0
byBpdGVyYXRvciA9IG1fZm9udEZhY2VzLmZpbmQoZmFtaWx5KTsKLSAgICBpZiAoaXRlcmF0b3Ig
PT0gbV9mb250RmFjZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8m
IGZhbWlseUZvbnRGYWNlcyA9IGl0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGF1dG8mIHNlZ21lbnRl
ZEZvbnRGYWNlQ2FjaGUgPSBtX2ZvbnRzLmFkZChmYW1pbHksIEhhc2hNYXA8dW5zaWduZWQsIHN0
ZDo6dW5pcXVlX3B0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4+KCkpLml0ZXJhdG9yLT52YWx1ZTsK
LQotICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2sgPSBmb250RGVzY3JpcHRpb24udHJhaXRz
TWFzaygpOwotCi0gICAgYXV0byYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUuYWRkKHRy
YWl0c01hc2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoZmFjZSkKLSAgICAg
ICAgcmV0dXJuIGZhY2UuZ2V0KCk7Ci0KLSAgICBmYWNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NT
ZWdtZW50ZWRGb250RmFjZT4oKnRoaXMpOwotCi0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8Q1NTRm9udEZhY2U+LCAzMj4gY2FuZGlkYXRlRm9udEZhY2VzOwotICAgIGZvciAoaW50
IGkgPSBmYW1pbHlGb250RmFjZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAg
Q1NTRm9udEZhY2UmIGNhbmRpZGF0ZSA9IGZhbWlseUZvbnRGYWNlc1tpXTsKLSAgICAgICAgdW5z
aWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRpZGF0ZS50cmFpdHNNYXNrKCk7Ci0gICAg
ICAgIGlmICgodHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spICYmICEoY2FuZGlkYXRl
VHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGNhbmRpZGF0ZUZvbnRGYWNlcy5hcHBlbmQoY2FuZGlkYXRlKTsKLSAgICB9Ci0K
LSAgICBhdXRvIGxvY2FsSXRlcmF0b3IgPSBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMuZmlu
ZChmYW1pbHkpOwotICAgIGlmIChsb2NhbEl0ZXJhdG9yICE9IG1fbG9jYWxseUluc3RhbGxlZEZv
bnRGYWNlcy5lbmQoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGxvY2FsSXRl
cmF0b3ItPnZhbHVlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVUcmFpdHNNYXNr
ID0gY2FuZGlkYXRlLT50cmFpdHNNYXNrKCk7Ci0gICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sg
JiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5
bGVOb3JtYWxNYXNrKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNh
bmRpZGF0ZUZvbnRGYWNlcy5hcHBlbmQoY2FuZGlkYXRlKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2FuZGlkYXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRpZGF0
ZUZvbnRGYWNlcy5lbmQoKSwgRm9udEZhY2VDb21wYXJhdG9yKHRyYWl0c01hc2spKTsKLSAgICBm
b3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZUZvbnRGYWNlcykKLSAgICAgICAgZmFjZS0+
YXBwZW5kRm9udEZhY2UoY2FuZGlkYXRlLmdldCgpKTsKLQotICAgIHJldHVybiBmYWNlLmdldCgp
OwotfQotCiB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6Y2xlYXJEb2N1bWVudCgpCiB7CiAgICAgaWYg
KCFtX2RvY3VtZW50KSB7CkBAIC00NTQsOSArMzAzLDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6
OmNsZWFyRG9jdW1lbnQoKQogICAgIG1fZG9jdW1lbnQgPSBudWxscHRyOwogCiAgICAgLy8gRklY
TUU6IFRoaXMgb2JqZWN0IHNob3VsZCBvdXRsaXZlIHRoZSBEb2N1bWVudC4KLSAgICBtX2ZvbnRG
YWNlcy5jbGVhcigpOwotICAgIG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5jbGVhcigpOwot
ICAgIG1fZm9udHMuY2xlYXIoKTsKKyAgICBtX2ZvbnRGYWNlU2V0LmNsZWFyKCk7CiAgICAgbV9j
bGllbnRzLmNsZWFyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAppbmRl
eCA5YTI3ZmUyMmVmNzJkNGE5NzdiNmY3MzVhMzEwMjM1OTYxOTY1NWMxLi5jZmVlOGVlZjczMzQx
ZWUwZTE0N2FjOGU0MjljN2YwMGJjZTI5YjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxl
Y3Rvci5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIENTU0ZvbnRTZWxlY3Rvcl9oCiAKICNp
bmNsdWRlICJDU1NGb250RmFjZS5oIgorI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU2V0LmgiCiAjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVk
ZSAiRm9udFNlbGVjdG9yLmgiCkBAIC00OCw3ICs0OSw3IEBAIGNsYXNzIENhY2hlZEZvbnQ7CiBj
bGFzcyBEb2N1bWVudDsKIGNsYXNzIFN0eWxlUnVsZUZvbnRGYWNlOwogCi1jbGFzcyBDU1NGb250
U2VsZWN0b3IgZmluYWwgOiBwdWJsaWMgRm9udFNlbGVjdG9yIHsKK2NsYXNzIENTU0ZvbnRTZWxl
Y3RvciBmaW5hbCA6IHB1YmxpYyBGb250U2VsZWN0b3IsIHB1YmxpYyBDU1NGb250RmFjZVNldENs
aWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDU1NGb250U2VsZWN0b3I+IGNyZWF0ZShE
b2N1bWVudCYgZG9jdW1lbnQpCiAgICAgewpAQCAtNjIsMTIgKzYzLDExIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIEZvbnRSYW5nZXMgZm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHNpemVf
dCBmYWxsYmFja0ZvbnRDb3VudCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUmVmUHRyPEZvbnQ+
IGZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7
Ci0gICAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIGdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKIAogICAgIHZvaWQgY2xlYXJEb2N1
bWVudCgpOwogCiAgICAgc3RhdGljIHZvaWQgYXBwZW5kU291cmNlcyhDU1NGb250RmFjZSYsIENT
U1ZhbHVlTGlzdCYsIERvY3VtZW50KiwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdl
bnRTaGFkb3dUcmVlKTsKLSAgICB2b2lkIGFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVG
b250RmFjZSYsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7
CisgICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2UmLCBib29sIGlzSW5p
dGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOwogCiAgICAgdm9pZCBmb250TG9h
ZGVkKCk7CiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFsaWRhdGVkKCkgb3ZlcnJpZGU7
CkBAIC05MCwxMiArOTAsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBiZWdpbkxvYWRUaW1lckZp
cmVkKCk7CiAKLSAgICB2b2lkIHJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoY29uc3Qg
U3RyaW5nJik7Ci0KICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1f
Zm9udEZhY2VzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4s
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzOwot
ICAgIEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NT
U2VnbWVudGVkRm9udEZhY2U+PiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX2ZvbnRzOwor
ICAgIENTU0ZvbnRGYWNlU2V0IG1fZm9udEZhY2VTZXQ7CiAgICAgSGFzaFNldDxGb250U2VsZWN0
b3JDbGllbnQqPiBtX2NsaWVudHM7CiAKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkRm9udD4+IG1fZm9udHNUb0JlZ2luTG9hZGluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCmluZGV4IGY1ZmNiYWVhOGRkYWU4NjliNmQzZmM5MzAy
NzQ5YzIyNmI5OTAzYWYuLjRjMjBkMzhmZTRlNmQ2Zjk2MjI2YjQ0M2NlZDNlNTNmOGZlMDE1ZjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcApAQCAtMzcs
OCArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1NlZ21lbnRlZEZvbnRGYWNl
OjpDU1NTZWdtZW50ZWRGb250RmFjZShDU1NGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvcikKLSAg
ICA6IG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKK0NTU1NlZ21lbnRlZEZvbnRGYWNlOjpD
U1NTZWdtZW50ZWRGb250RmFjZSgpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21l
bnRlZEZvbnRGYWNlLmgKaW5kZXggMDdiNzFmODJkYjcyNGZjOWNlNTFkOWUxMGY3ODA2MTVhMjYz
MzQ3Zi4uOTIwMzYxMmQwOTExMzcxZjBiMDRhODAwNzkyNjk2MTU5ZmVjZTU0YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKQEAgLTQyLDE5ICs0MiwxOCBAQCBj
bGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBDU1NTZWdtZW50ZWRGb250RmFjZSBmaW5hbCA6
IHB1YmxpYyBDU1NGb250RmFjZTo6Q2xpZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBDU1NTZWdtZW50ZWRGb250RmFjZShDU1NGb250U2VsZWN0b3ImKTsK
KyAgICBDU1NTZWdtZW50ZWRGb250RmFjZSgpOwogICAgIH5DU1NTZWdtZW50ZWRGb250RmFjZSgp
OwogCi0gICAgQ1NTRm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnRTZWxlY3RvcjsgfQotCiAgICAgdm9pZCBhcHBlbmRGb250RmFjZShSZWY8Q1NTRm9udEZh
Y2U+JiYpOwogCiAgICAgRm9udFJhbmdlcyBmb250UmFuZ2VzKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYpOwogCisgICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4sIDE+JiBjb25zdGl0dWVudEZhY2Vz
KCkgeyByZXR1cm4gbV9mb250RmFjZXM7IH0KKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
Zm9udExvYWRlZChDU1NGb250RmFjZSYpIG92ZXJyaWRlOwogCi0gICAgQ1NTRm9udFNlbGVjdG9y
JiBtX2ZvbnRTZWxlY3RvcjsKICAgICBIYXNoTWFwPEZvbnREZXNjcmlwdGlvbktleSwgRm9udFJh
bmdlcywgRm9udERlc2NyaXB0aW9uS2V5SGFzaCwgV1RGOjpTaW1wbGVDbGFzc0hhc2hUcmFpdHM8
Rm9udERlc2NyaXB0aW9uS2V5Pj4gbV9jYWNoZTsKICAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNl
PiwgMT4gbV9mb250RmFjZXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKaW5kZXggYzQ1ZThk
MjcxMWYwNzU5NzY5NWRmNjI2MjY0Yzg5ZTM4ZDNjNWVmYS4uNjc0MjA1ZTFhOTE5Y2Y5NzIxYTBj
OWE1MTExNzNlYmNkZmRkZTFhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRG
YWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwCkBAIC0xMTEsNyAr
MTExLDcgQEAgUmVmUHRyPEZvbnRGYWNlPiBGb250RmFjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRl
JiBleGVjU3RhdGUsIFNjcmlwdEV4ZWN1dGlvbkNvbnQKIH0KIAogRm9udEZhY2U6OkZvbnRGYWNl
KEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9y
KQotICAgIDogbV9iYWNraW5nKENTU0ZvbnRGYWNlOjpjcmVhdGUoZm9udFNlbGVjdG9yLCB0aGlz
KSkKKyAgICA6IG1fYmFja2luZyhDU1NGb250RmFjZTo6Y3JlYXRlKCZmb250U2VsZWN0b3IsIG51
bGxwdHIsIHRoaXMpKQogICAgICwgbV9wcm9taXNlKGNyZWF0ZVByb21pc2UoZXhlY1N0YXRlKSkK
IHsKICAgICBtX2JhY2tpbmctPmFkZENsaWVudCgqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNl
dC5oCmluZGV4IGMwNWVkMThlNGNlOGFmNTFmOGYyZTgwNDEyNTFhYjU0MDAxZGMyYzcuLmQ0MTRi
YzNiMjQzY2M0Yzk3MDg5OTQ5MGU0ZWJhNDQ4MTk1OWU1NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFj
ZVNldC5oCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IFJlZjxGb250RmFjZVNldD4gbV90YXJnZXQ7Ci0gICAgICAgIHNpemVfdCBtX2luZGV4IHsgMCB9
OworICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsgLy8gRklYTUU6IFRoZXJlIG5lZWRzIHRv
IGJlIGEgbWVjaGFuaXNtIHRvIHVwZGF0aW5nIHRoaXMgaW5kZXggd2hlbiBmb250cyBhcmUgYWRk
ZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIEZvbnRGYWNlU2V0LgogICAgIH07
CiAgICAgSXRlcmF0b3IgY3JlYXRlSXRlcmF0b3IoKSB7IHJldHVybiBJdGVyYXRvcigqdGhpcyk7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5oCmluZGV4IGQyODI4M2Ez
M2I5ZTM1ZjViOGMzMDY0YWQ2NmYzNzhjZjY1Njg4MDguLjVlNGM1MDA5ZmUyOWU1MzA0MDEzZDI5
MWJjYzZkMGI5YTA4NDQ2YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250
RmFjZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50
LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIFNWR0ZvbnRFbGVtZW50KiBhc3NvY2lh
dGVkRm9udEVsZW1lbnQoKSBjb25zdDsKICAgICB2b2lkIHJlYnVpbGRGb250RmFjZSgpOwogICAg
IAotICAgIGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlJiBmb250RmFjZVJ1bGUoKSBjb25zdCB7IHJl
dHVybiBtX2ZvbnRGYWNlUnVsZS5nZXQoKTsgfQorICAgIFN0eWxlUnVsZUZvbnRGYWNlJiBmb250
RmFjZVJ1bGUoKSB7IHJldHVybiBtX2ZvbnRGYWNlUnVsZS5nZXQoKTsgfQogCiBwcml2YXRlOgog
ICAgIFNWR0ZvbnRGYWNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271826</attachid>
            <date>2016-02-19 17:03:47 -0800</date>
            <delta_ts>2016-02-20 13:38:34 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-153347-20160219170328.patch</filename>
            <type>text/plain</type>
            <size>47271</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2ODMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTRlYWI1Mjk5Mzc1ZWJk
MjNmMzAyY2U4MmM0ZDM5ZWYxYTVkZWQ5Zi4uYjRiZWQ0MjU1MTYzZGFlZWE1NWQ0NjI1ZTE1ZmZl
ZWI3YjA3MjA5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE2LTAyLTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0ZvbnQgTG9h
ZGluZ10gU3BsaXQgQ1NTRm9udFNlbGVjdG9yIGludG8gYSBGb250RmFjZVNldCBpbXBsZW1lbnRh
dGlvbiBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMzNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAq
IGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Q1NT
Rm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmNhbGN1bGF0ZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpzZXRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZTo6Y2FsY3VsYXRlV2VpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlOjpzZXRXZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6
OmZvbnRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnB1bXApOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmZvbnQpOgorICAgICAgICAqIGNzcy9DU1NGb250
RmFjZS5oOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNldDo6fkNTU0ZvbnRGYWNlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU2V0OjpoYXNGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNl
U2V0OjpyZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6
OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUZvbnRUcmFpdHNNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRG
YWNlU2V0OjptYXRjaGluZ0ZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFy
YXRvcjo6Rm9udEZhY2VDb21wYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29t
cGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6
Z2V0Rm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEZhbWlsaWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhbWlsaWVzSW50ZXJzZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Ojpsb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKiBj
c3MvQ1NTRm9udEZhY2VTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xp
ZW50OjpmYWNlRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXRDbGll
bnQ6OnN0YXJ0ZWRMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xp
ZW50Ojpjb21wbGV0ZWRMb2FkaW5nKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
aDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZvbnRTZWxlY3Rvcjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0
b3I6OmFkZEZvbnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6
OmZvbnRSYW5nZXNGb3JGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9y
OjpjbGVhckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6cmVn
aXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250RmFjZUNvbXBhcmF0b3I6OkZvbnRGYWNlQ29tcGFyYXRvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250RmFjZUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZSk6IERlbGV0ZWQu
CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFj
ZTo6Q1NTU2VnbWVudGVkRm9udEZhY2UpOgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5oOgorICAgICAgICAqIGNzcy9Gb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250RmFjZTo6Rm9udEZhY2UpOgorICAgICAgICAqIGNzcy9Gb250RmFjZVNldC5oOgorICAgICAg
ICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuaDoKKwogMjAxNi0wMi0xOSAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQ29tcG9zZWRUcmVlSXRlcmF0b3IgdHJh
dmVyc2VzIG5vcm1hbCBjaGlsZHJlbiBmb3IgZWxlbWVudHMgd2l0aCBlbXB0eSBzaGFkb3cgcm9v
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKaW5kZXggNTUyZTk5Y2ZhMWUxZWFhYTRhYTMy
Njk1OTAwMzhkYWFhNWEwMjAxNy4uYzVjZWU1MDBlMTE4NjAwNDQ3M2I1M2U4MjNjM2M2OWY5YmY4
OWJlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCkBAIC00MiwxMSArNDIsMTMgQEAK
ICNpbmNsdWRlICJGb250VmFyaWFudEJ1aWxkZXIuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSAiU3R5
bGVSdWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NTRm9udEZhY2U6OkNTU0ZvbnRG
YWNlKENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yLCBGb250RmFjZSogd3JhcHBlciwgYm9v
bCBpc0xvY2FsRmFsbGJhY2spCitDU1NGb250RmFjZTo6Q1NTRm9udEZhY2UoQ1NTRm9udFNlbGVj
dG9yKiBmb250U2VsZWN0b3IsIFN0eWxlUnVsZUZvbnRGYWNlKiBjc3NDb25uZWN0aW9uLCBGb250
RmFjZSogd3JhcHBlciwgYm9vbCBpc0xvY2FsRmFsbGJhY2spCiAgICAgOiBtX2ZvbnRTZWxlY3Rv
cihmb250U2VsZWN0b3IpCisgICAgLCBtX2Nzc0Nvbm5lY3Rpb24oY3NzQ29ubmVjdGlvbikKICAg
ICAsIG1fd3JhcHBlcih3cmFwcGVyKQogICAgICwgbV9pc0xvY2FsRmFsbGJhY2soaXNMb2NhbEZh
bGxiYWNrKQogewpAQCAtNjksNzQgKzcxLDc2IEBAIGJvb2wgQ1NTRm9udEZhY2U6OnNldEZhbWls
aWVzKENTU1ZhbHVlJiBmYW1pbHkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NTRm9u
dEZhY2U6OnNldFN0eWxlKENTU1ZhbHVlJiBzdHlsZSkKK09wdGlvbmFsPEZvbnRUcmFpdHNNYXNr
PiBDU1NGb250RmFjZTo6Y2FsY3VsYXRlU3R5bGUoQ1NTVmFsdWUmIHN0eWxlKQogewogICAgIGlm
ICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHN0eWxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKIAotICAgIHVuc2lnbmVkIHN0eWxlTWFzayA9IDA7CiAg
ICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oc3R5bGUpLmdldFZhbHVlSUQo
KSkgewogICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgIHN0eWxlTWFzayA9IEZvbnRT
dHlsZU5vcm1hbE1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFN0eWxl
Tm9ybWFsTWFzazsKICAgICBjYXNlIENTU1ZhbHVlSXRhbGljOgogICAgIGNhc2UgQ1NTVmFsdWVP
YmxpcXVlOgotICAgICAgICBzdHlsZU1hc2sgPSBGb250U3R5bGVJdGFsaWNNYXNrOwotICAgICAg
ICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRTdHlsZUl0YWxpY01hc2s7CiAgICAgZGVmYXVs
dDoKLSAgICAgICAgc3R5bGVNYXNrID0gRm9udFN0eWxlTm9ybWFsTWFzazsKLSAgICAgICAgYnJl
YWs7CisgICAgICAgIHJldHVybiBGb250U3R5bGVOb3JtYWxNYXNrOwogICAgIH0KIAotICAgIG1f
dHJhaXRzTWFzayA9IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fdHJhaXRzTWFzaykgJiAofkZvbnRTdHlsZU1hc2spKSB8IHN0eWxlTWFzayk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZvbnRTdHlsZU5vcm1hbE1hc2s7CiB9CiAKLWJv
b2wgQ1NTRm9udEZhY2U6OnNldFdlaWdodChDU1NWYWx1ZSYgd2VpZ2h0KQorYm9vbCBDU1NGb250
RmFjZTo6c2V0U3R5bGUoQ1NTVmFsdWUmIHN0eWxlKQoreworICAgIGlmIChhdXRvIG1hc2sgPSBj
YWxjdWxhdGVTdHlsZShzdHlsZSkpIHsKKyAgICAgICAgbV90cmFpdHNNYXNrID0gc3RhdGljX2Nh
c3Q8Rm9udFRyYWl0c01hc2s+KChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90cmFpdHNNYXNrKSAm
ICh+Rm9udFN0eWxlTWFzaykpIHwgbWFzay52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworT3B0aW9uYWw8Rm9udFRyYWl0c01hc2s+
IENTU0ZvbnRGYWNlOjpjYWxjdWxhdGVXZWlnaHQoQ1NTVmFsdWUmIHdlaWdodCkKIHsKICAgICBp
ZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih3ZWlnaHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBOdWxsb3B0OwogCi0gICAgdW5zaWduZWQgd2VpZ2h0TWFzayA9IDA7
CiAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4od2VpZ2h0KS5nZXRWYWx1
ZUlEKCkpIHsKICAgICBjYXNlIENTU1ZhbHVlQm9sZDoKICAgICBjYXNlIENTU1ZhbHVlQm9sZGVy
OgogICAgIGNhc2UgQ1NTVmFsdWU3MDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0
NzAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0NzAwTWFz
azsKICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgogICAgIGNhc2UgQ1NTVmFsdWU0MDA6Ci0gICAg
ICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0NDAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAg
ICAgIHJldHVybiBGb250V2VpZ2h0NDAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlOTAwOgotICAg
ICAgICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDkwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAg
ICAgICByZXR1cm4gRm9udFdlaWdodDkwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZTgwMDoKLSAg
ICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQ4MDBNYXNrOwotICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ4MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWU2MDA6Ci0g
ICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0NjAwTWFzazsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybiBGb250V2VpZ2h0NjAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlNTAwOgot
ICAgICAgICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDUwME1hc2s7Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICByZXR1cm4gRm9udFdlaWdodDUwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZTMwMDoK
LSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQzMDBNYXNrOwotICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQzMDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWVMaWdo
dGVyOgogICAgIGNhc2UgQ1NTVmFsdWUyMDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2Vp
Z2h0MjAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0MjAw
TWFzazsKICAgICBjYXNlIENTU1ZhbHVlMTAwOgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9udFdl
aWdodDEwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFdlaWdodDEw
ME1hc2s7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQ0MDBN
YXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ0MDBNYXNrOwog
ICAgIH0KIAotICAgIG1fdHJhaXRzTWFzayA9IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJhaXRzTWFzaykgJiAofkZvbnRXZWlnaHRNYXNrKSkg
fCB3ZWlnaHRNYXNrKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gRm9udFdlaWdodDQw
ME1hc2s7Cit9CisKK2Jvb2wgQ1NTRm9udEZhY2U6OnNldFdlaWdodChDU1NWYWx1ZSYgd2VpZ2h0
KQoreworICAgIGlmIChhdXRvIG1hc2sgPSBjYWxjdWxhdGVXZWlnaHQod2VpZ2h0KSkgeworICAg
ICAgICBtX3RyYWl0c01hc2sgPSBzdGF0aWNfY2FzdDxGb250VHJhaXRzTWFzaz4oKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX3RyYWl0c01hc2spICYgKH5Gb250V2VpZ2h0TWFzaykpIHwgbWFzay52
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OwogfQogCiBib29sIENTU0ZvbnRGYWNlOjpzZXRVbmljb2RlUmFuZ2UoQ1NTVmFsdWUmIHVuaWNv
ZGVSYW5nZSkKQEAgLTI4Miw2ICsyODYsNyBAQCB2b2lkIENTU0ZvbnRGYWNlOjpmb250TG9hZGVk
KENTU0ZvbnRGYWNlU291cmNlJikKICAgICBpZiAobV9zb3VyY2VzUG9wdWxhdGVkKQogICAgICAg
ICBwdW1wKCk7CiAKKyAgICBBU1NFUlQobV9mb250U2VsZWN0b3IpOwogICAgIG1fZm9udFNlbGVj
dG9yLT5mb250TG9hZGVkKCk7CiAKICAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fY2xpZW50cykK
QEAgLTI5Niw5ICszMDEsMTAgQEAgc2l6ZV90IENTU0ZvbnRGYWNlOjpwdW1wKCkKIAogICAgICAg
ICBpZiAoc291cmNlLT5zdGF0dXMoKSA9PSBDU1NGb250RmFjZVNvdXJjZTo6U3RhdHVzOjpQZW5k
aW5nKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gU3RhdHVzOjpQZW5kaW5nIHx8
IG1fc3RhdHVzID09IFN0YXR1czo6TG9hZGluZyB8fCBtX3N0YXR1cyA9PSBTdGF0dXM6OlRpbWVk
T3V0KTsKKyAgICAgICAgICAgIEFTU0VSVChtX2ZvbnRTZWxlY3Rvcik7CiAgICAgICAgICAgICBp
ZiAobV9zdGF0dXMgPT0gU3RhdHVzOjpQZW5kaW5nKQogICAgICAgICAgICAgICAgIHNldFN0YXR1
cyhTdGF0dXM6OkxvYWRpbmcpOwotICAgICAgICAgICAgc291cmNlLT5sb2FkKG1fZm9udFNlbGVj
dG9yLmdldCgpKTsKKyAgICAgICAgICAgIHNvdXJjZS0+bG9hZCgqbV9mb250U2VsZWN0b3IpOwog
ICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChzb3VyY2UtPnN0YXR1cygpKSB7CkBAIC0zNDUs
OCArMzUxLDEwIEBAIFJlZlB0cjxGb250PiBDU1NGb250RmFjZTo6Zm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBzeW50CiAgICAgc2l6ZV90IHN0YXJ0SW5k
ZXggPSBwdW1wKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBtX3NvdXJj
ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byYgc291cmNlID0gbV9zb3VyY2VzW2ldOwot
ICAgICAgICBpZiAoc291cmNlLT5zdGF0dXMoKSA9PSBDU1NGb250RmFjZVNvdXJjZTo6U3RhdHVz
OjpQZW5kaW5nKQotICAgICAgICAgICAgc291cmNlLT5sb2FkKG1fZm9udFNlbGVjdG9yLmdldCgp
KTsKKyAgICAgICAgaWYgKHNvdXJjZS0+c3RhdHVzKCkgPT0gQ1NTRm9udEZhY2VTb3VyY2U6OlN0
YXR1czo6UGVuZGluZykgeworICAgICAgICAgICAgQVNTRVJUKG1fZm9udFNlbGVjdG9yKTsKKyAg
ICAgICAgICAgIHNvdXJjZS0+bG9hZCgqbV9mb250U2VsZWN0b3IpOworICAgICAgICB9CiAKICAg
ICAgICAgc3dpdGNoIChzb3VyY2UtPnN0YXR1cygpKSB7CiAgICAgICAgIGNhc2UgQ1NTRm9udEZh
Y2VTb3VyY2U6OlN0YXR1czo6UGVuZGluZzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKaW5kZXgg
MTA3ZDlmMjgyMzg2YjZlNmM2MWFkYjFiYjNkZjk5MGUyMGRlZmM0Zi4uY2I2ZWZjNzYyNDFjY2Uz
NWRiNGZjMGY4NzIyNWM1MDRkYTMxMDk5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKQEAg
LTQ2LDEyICs0NiwxMSBAQCBjbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBGb250OwogY2xh
c3MgRm9udEZhY2U7CiAKLS8vIEZJWE1FOiBUaGlzIGNsYXNzIGRvZXMgbm90IG5lZWQgdG8gYmUg
cmVmZXJlbmNlIGNvdW50ZWQuCiBjbGFzcyBDU1NGb250RmFjZSBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGVkPENTU0ZvbnRGYWNlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NGb250RmFj
ZT4gY3JlYXRlKENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yLCBGb250RmFjZSogd3JhcHBl
ciA9IG51bGxwdHIsIGJvb2wgaXNMb2NhbEZhbGxiYWNrID0gZmFsc2UpCisgICAgc3RhdGljIFJl
ZjxDU1NGb250RmFjZT4gY3JlYXRlKENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yLCBTdHls
ZVJ1bGVGb250RmFjZSogY3NzQ29ubmVjdGlvbiA9IG51bGxwdHIsIEZvbnRGYWNlKiB3cmFwcGVy
ID0gbnVsbHB0ciwgYm9vbCBpc0xvY2FsRmFsbGJhY2sgPSBmYWxzZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZvbnRGYWNlKGZvbnRTZWxlY3Rvciwgd3JhcHBlciwg
aXNMb2NhbEZhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZvbnRG
YWNlKGZvbnRTZWxlY3RvciwgY3NzQ29ubmVjdGlvbiwgd3JhcHBlciwgaXNMb2NhbEZhbGxiYWNr
KSk7CiAgICAgfQogICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlKCk7CiAKQEAgLTc4LDYgKzc3LDEw
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRyYWl0c01hc2soRm9udFRyYWl0c01hc2sgdHJhaXRz
TWFzaykgeyBtX3RyYWl0c01hc2sgPSB0cmFpdHNNYXNrOyB9CiAgICAgYm9vbCBpc0xvY2FsRmFs
bGJhY2soKSBjb25zdCB7IHJldHVybiBtX2lzTG9jYWxGYWxsYmFjazsgfQogICAgIFN0YXR1cyBz
dGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorICAgIFN0eWxlUnVsZUZvbnRGYWNl
KiBjc3NDb25uZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jc3NDb25uZWN0aW9uLmdldCgpOyB9
CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8Rm9udFRyYWl0c01hc2s+IGNhbGN1bGF0ZVN0eWxlKENT
U1ZhbHVlJiBzdHlsZSk7CisgICAgc3RhdGljIE9wdGlvbmFsPEZvbnRUcmFpdHNNYXNrPiBjYWxj
dWxhdGVXZWlnaHQoQ1NTVmFsdWUmIHdlaWdodCk7CiAKICAgICBjbGFzcyBDbGllbnQ7CiAgICAg
dm9pZCBhZGRDbGllbnQoQ2xpZW50Jik7CkBAIC0xMzksNyArMTQyLDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKIHByaXZhdGU6Ci0gICAgQ1NTRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yJiwgRm9udEZh
Y2UqLCBib29sIGlzTG9jYWxGYWxsYmFjayk7CisgICAgQ1NTRm9udEZhY2UoQ1NTRm9udFNlbGVj
dG9yKiwgU3R5bGVSdWxlRm9udEZhY2UqLCBGb250RmFjZSosIGJvb2wgaXNMb2NhbEZhbGxiYWNr
KTsKIAogICAgIHNpemVfdCBwdW1wKCk7CiAgICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzKTsKQEAg
LTE0OCw3ICsxNTEsOCBAQCBwcml2YXRlOgogICAgIEZvbnRUcmFpdHNNYXNrIG1fdHJhaXRzTWFz
ayB7IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPihGb250U3R5bGVOb3JtYWxNYXNrIHwgRm9u
dFdlaWdodDQwME1hc2spIH07CiAgICAgVmVjdG9yPFVuaWNvZGVSYW5nZT4gbV9yYW5nZXM7CiAg
ICAgSGFzaFNldDxDbGllbnQqPiBtX2NsaWVudHM7Ci0gICAgUmVmPENTU0ZvbnRTZWxlY3Rvcj4g
bV9mb250U2VsZWN0b3I7CisgICAgUmVmUHRyPENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0
b3I7CisgICAgUmVmUHRyPFN0eWxlUnVsZUZvbnRGYWNlPiBtX2Nzc0Nvbm5lY3Rpb247CiAgICAg
Rm9udEZhY2UqIG1fd3JhcHBlcjsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVhdHVyZVNl
dHRpbmdzOwogICAgIEZvbnRWYXJpYW50U2V0dGluZ3MgbV92YXJpYW50U2V0dGluZ3M7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcAppbmRleCBhMGY1ZmQ2NTMwNGQyOTY1ZDY3M2Yy
MjM0OWUzZTYyNTY5OTdiYTgzLi41NzUwYmI2ODkyNDAwYzM2MWFkZjg0MWM0Zjg0ZmUwOWNlMmUw
MjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5jcHAKQEAgLTMwLDcgKzMwLDEw
IEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgi
CiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NTZWdtZW50ZWRG
b250RmFjZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1ZhbHVl
UG9vbC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGll
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NCw2ICs0NywxMSBAQCBDU1NGb250RmFj
ZVNldDo6fkNTU0ZvbnRGYWNlU2V0KCkKIHsKICAgICBmb3IgKGF1dG8mIGZhY2UgOiBtX2ZhY2Vz
KQogICAgICAgICBmYWNlLT5yZW1vdmVDbGllbnQoKnRoaXMpOworCisgICAgZm9yIChhdXRvJiBw
YWlyIDogbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZSkgeworICAgICAgICBmb3Ig
KGF1dG8mIGZhY2UgOiBwYWlyLnZhbHVlKQorICAgICAgICAgICAgZmFjZS0+cmVtb3ZlQ2xpZW50
KCp0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQgQ1NTRm9udEZhY2VTZXQ6OmluY3JlbWVudEFjdGl2
ZUNvdW50KCkKQEAgLTcwLDIzICs3OCw5NSBAQCBib29sIENTU0ZvbnRGYWNlU2V0OjpoYXNGYWNl
KGNvbnN0IENTU0ZvbnRGYWNlJiBmYWNlKSBjb25zdAogICAgICAgICBpZiAobXlGYWNlLnB0cigp
ID09ICZmYWNlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCit2b2lkIENTU0ZvbnRGYWNlU2V0OjpyZWdpc3RlckxvY2FsRm9udEZhY2Vz
Rm9yRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fbG9j
YWxseUluc3RhbGxlZEZhY2VzTG9va3VwVGFibGUuY29udGFpbnMoZmFtaWx5TmFtZSkpOworCisg
ICAgVmVjdG9yPEZvbnRUcmFpdHNNYXNrPiB0cmFpdHNNYXNrcyA9IEZvbnRDYWNoZTo6c2luZ2xl
dG9uKCkuZ2V0VHJhaXRzSW5GYW1pbHkoZmFtaWx5TmFtZSk7CisgICAgaWYgKHRyYWl0c01hc2tz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFJlZjxDU1NGb250RmFj
ZT4+IGZhY2VzID0geyB9OworICAgIGZvciAoYXV0byBtYXNrIDogdHJhaXRzTWFza3MpIHsKKyAg
ICAgICAgUmVmPENTU0ZvbnRGYWNlPiBmYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZShudWxscHRy
LCBudWxscHRyLCBudWxscHRyLCB0cnVlKTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IGZhbWlseUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVk
KCk7CisgICAgICAgIGZhbWlseUxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKSk7CisgICAgICAgIGZhY2UtPnNldEZh
bWlsaWVzKCpmYW1pbHlMaXN0KTsKKyAgICAgICAgZmFjZS0+c2V0VHJhaXRzTWFzayhtYXNrKTsK
KyAgICAgICAgZmFjZS0+YWRvcHRTb3VyY2Uoc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNv
dXJjZT4oZmFjZS5nZXQoKSwgZmFtaWx5TmFtZSkpOworICAgICAgICBBU1NFUlQoIWZhY2UtPmFs
bFNvdXJjZXNGYWlsZWQoKSk7CisgICAgICAgIGZhY2VzLmFwcGVuZChXVEZNb3ZlKGZhY2UpKTsK
KyAgICB9CisgICAgbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZS5hZGQoZmFtaWx5
TmFtZSwgV1RGTW92ZShmYWNlcykpOworfQorCiB2b2lkIENTU0ZvbnRGYWNlU2V0OjphZGQoQ1NT
Rm9udEZhY2UmIGZhY2UpCiB7CiAgICAgQVNTRVJUKCFoYXNGYWNlKGZhY2UpKTsKIAotICAgIG1f
ZmFjZXMuYXBwZW5kKGZhY2UpOwogICAgIGZhY2UuYWRkQ2xpZW50KCp0aGlzKTsKKyAgICBtX2Nh
Y2hlLmNsZWFyKCk7CisKKyAgICBpZiAoZmFjZS5jc3NDb25uZWN0aW9uKCkpCisgICAgICAgIG1f
ZmFjZXMuaW5zZXJ0KG1fZmFjZXNQYXJ0aXRpb25JbmRleCsrLCBmYWNlKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fZmFjZXMuYXBwZW5kKGZhY2UpOworCisgICAgaWYgKGZhY2UuZmFtaWxpZXMoKSkg
eworICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiAqZmFjZS5mYW1pbGllcygpKSB7CisgICAgICAg
ICAgICBTdHJpbmcgZmFtaWx5TmFtZSA9IENTU0ZvbnRTZWxlY3Rvcjo6ZmFtaWx5TmFtZUZyb21Q
cmltaXRpdmUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2ZhY2VzTG9va3VwVGFibGUuYWRk
KGZhbWlseU5hbWUsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PigpKTsKKyAgICAgICAgICAgIGF1
dG8mIGZhbWlseUZvbnRGYWNlcyA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgICAg
ICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgICAgICAvLyBtX2xv
Y2FsbHlJbnN0YWxsZWRGb250RmFjZXMgZ3Jvd3Mgd2l0aG91dCBib3VuZCwgZXZlbnR1YWxseSBl
bmNvcnBvcmF0aW5nIGV2ZXJ5IGZvbnQgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uCisgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyBieSBkZXNpZ24uCisgICAgICAgICAgICAgICAgcmVnaXN0ZXJM
b2NhbEZvbnRGYWNlc0ZvckZhbWlseShmYW1pbHlOYW1lKTsKKyAgICAgICAgICAgICAgICBmYW1p
bHlGb250RmFjZXMgPSB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZhbWlseUZv
bnRGYWNlcy5hcHBlbmQoZmFjZSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoZmFjZS5z
dGF0dXMoKSA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpMb2FkaW5nIHx8IGZhY2Uuc3RhdHVzKCkg
PT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6VGltZWRPdXQpCiAgICAgICAgIGluY3JlbWVudEFjdGl2
ZUNvdW50KCk7CiB9CiAKIHZvaWQgQ1NTRm9udEZhY2VTZXQ6OnJlbW92ZShjb25zdCBDU1NGb250
RmFjZSYgZmFjZSkKIHsKKyAgICBtX2NhY2hlLmNsZWFyKCk7CisKKyAgICBpZiAoZmFjZS5mYW1p
bGllcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgaXRlbSA6ICpmYWNlLmZhbWlsaWVzKCkpIHsK
KyAgICAgICAgICAgIFN0cmluZyBmYW1pbHlOYW1lID0gQ1NTRm9udFNlbGVjdG9yOjpmYW1pbHlO
YW1lRnJvbVByaW1pdGl2ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkp
OworICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fZmFjZXNMb29rdXBUYWJsZS5maW5kKGZh
bWlseU5hbWUpOworICAgICAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZmFjZXNMb29rdXBU
YWJsZS5lbmQoKSk7CisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZXJhdG9yLT52YWx1ZS5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvci0+dmFsdWVbaV0ucHRyKCkgPT0gJmZhY2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBp
dGVyYXRvci0+dmFsdWUucmVtb3ZlKGkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoZm91bmQp
OworICAgICAgICAgICAgaWYgKCFpdGVyYXRvci0+dmFsdWUuc2l6ZSgpKQorICAgICAgICAgICAg
ICAgIG1fZmFjZXNMb29rdXBUYWJsZS5yZW1vdmUoaXRlcmF0b3IpOworICAgICAgICB9CisgICAg
fQorCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZhY2VzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIGlmIChtX2ZhY2VzW2ldLnB0cigpID09ICZmYWNlKSB7CisgICAgICAgICAgICBpZiAo
aSA8IG1fZmFjZXNQYXJ0aXRpb25JbmRleCkKKyAgICAgICAgICAgICAgICAtLW1fZmFjZXNQYXJ0
aXRpb25JbmRleDsKICAgICAgICAgICAgIG1fZmFjZXNbaV0tPnJlbW92ZUNsaWVudCgqdGhpcyk7
CiAgICAgICAgICAgICBtX2ZhY2VzLnJlbW92ZShpKTsKICAgICAgICAgICAgIGlmIChmYWNlLnN0
YXR1cygpID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OkxvYWRpbmcgfHwgZmFjZS5zdGF0dXMoKSA9
PSBDU1NGb250RmFjZTo6U3RhdHVzOjpUaW1lZE91dCkKQEAgLTk3LDMwICsxNzcsNDMgQEAgdm9p
ZCBDU1NGb250RmFjZVNldDo6cmVtb3ZlKGNvbnN0IENTU0ZvbnRGYWNlJiBmYWNlKQogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmc+IGV4dHJhY3RG
YW1pbGllcyhjb25zdCBDU1NWYWx1ZUxpc3QmIGxpc3QpCit2b2lkIENTU0ZvbnRGYWNlU2V0Ojpj
bGVhcigpCiB7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKLSAgICBmb3IgKGF1dG8mIGZh
bWlseSA6IGxpc3QpIHsKLSAgICAgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihmYW1pbHkuZ2V0KCkpOwotICAgICAgICBp
ZiAoIXByaW1pdGl2ZS5pc0ZvbnRGYW1pbHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICByZXN1bHQuYWRkKHByaW1pdGl2ZS5mb250RmFtaWx5KCkuZmFtaWx5TmFtZSk7Ci0gICAg
fQotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9mYWNlcy5jbGVhcigpOworICAgIG1fZmFjZXNM
b29rdXBUYWJsZS5jbGVhcigpOworICAgIG1fbG9jYWxseUluc3RhbGxlZEZhY2VzTG9va3VwVGFi
bGUuY2xlYXIoKTsKKyAgICBtX2NhY2hlLmNsZWFyKCk7CiB9CiAKLXN0YXRpYyBib29sIGZhbWls
aWVzSW50ZXJzZWN0KGNvbnN0IENTU0ZvbnRGYWNlJiBmYWNlLCBjb25zdCBDU1NWYWx1ZUxpc3Qm
IHJlcXVlc3QpCitjb25zdCBDU1NGb250RmFjZSYgQ1NTRm9udEZhY2VTZXQ6Om9wZXJhdG9yW10o
c2l6ZV90IGkpIGNvbnN0CiB7Ci0gICAgaWYgKCFmYWNlLmZhbWlsaWVzKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBBU1NFUlQoaSA8IGZhY2VDb3VudCgpKTsKKyAgICByZXR1cm4gbV9m
YWNlc1tpXTsKK30KIAotICAgIEhhc2hTZXQ8U3RyaW5nPiBmYWNlRmFtaWxpZXMgPSBleHRyYWN0
RmFtaWxpZXMoKmZhY2UuZmFtaWxpZXMoKSk7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHJlcXVlc3RG
YW1pbGllcyA9IGV4dHJhY3RGYW1pbGllcyhyZXF1ZXN0KTsKLSAgICBmb3IgKGF1dG8mIGZhbWls
eTEgOiBmYWNlRmFtaWxpZXMpIHsKLSAgICAgICAgaWYgKHJlcXVlc3RGYW1pbGllcy5jb250YWlu
cyhmYW1pbHkxKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7CitzdGF0aWMgT3B0aW9uYWw8Rm9udFRyYWl0c01hc2s+IGNvbXB1dGVGb250VHJhaXRz
TWFzayhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKK3sKKyAgICBSZWZQdHI8Q1NTVmFs
dWU+IHN0eWxlVmFsdWUgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9u
dFN0eWxlKS5nZXQoKTsKKyAgICBpZiAoIXN0eWxlVmFsdWUpCisgICAgICAgIHN0eWxlVmFsdWUg
PSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vcm1hbCkucHRyKCk7CisKKyAgICBGb250VHJhaXRzTWFzayBzdHlsZU1hc2s7CisgICAgaWYg
KGF1dG8gc3R5bGVNYXNrT3B0aW9uYWwgPSBDU1NGb250RmFjZTo6Y2FsY3VsYXRlU3R5bGUoKnN0
eWxlVmFsdWUpKQorICAgICAgICBzdHlsZU1hc2sgPSBzdHlsZU1hc2tPcHRpb25hbC52YWx1ZSgp
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisKKyAgICBSZWZQdHI8Q1NTVmFs
dWU+IHdlaWdodFZhbHVlID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZv
bnRXZWlnaHQpLmdldCgpOworICAgIGlmICghd2VpZ2h0VmFsdWUpCisgICAgICAgIHdlaWdodFZh
bHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb3JtYWwpLnB0cigpOworCisgICAgRm9udFRyYWl0c01hc2sgd2VpZ2h0TWFzazsKKyAg
ICBpZiAoYXV0byB3ZWlnaHRNYXNrT3B0aW9uYWwgPSBDU1NGb250RmFjZTo6Y2FsY3VsYXRlV2Vp
Z2h0KCp3ZWlnaHRWYWx1ZSkpCisgICAgICAgIHdlaWdodE1hc2sgPSB3ZWlnaHRNYXNrT3B0aW9u
YWwudmFsdWUoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBOdWxsb3B0OworCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3R5
bGVNYXNrKSB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih3ZWlnaHRNYXNrKSk7CiB9CiAKIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRGYWNlPj4gQ1NTRm9udEZhY2VTZXQ6Om1h
dGNoaW5nRmFjZXMoY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJiBlYykKQEAgLTEzMiwxNCArMjI1LDE1IEBAIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPENTU0ZvbnRGYWNlPj4gQ1NTRm9udEZhY2VTZXQ6Om1hdGNoaW5nRmFjZXMoY29uc3QKICAg
ICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAg
ICBib29sIGRlc2lyZWRTdHlsZUlzTm9ybWFsID0gdHJ1ZTsKLSAgICBpZiAoUmVmUHRyPENTU1Zh
bHVlPiBkZXNpcmVkU3R5bGUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRTdHlsZSkpIHsKLSAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmRlc2ly
ZWRTdHlsZSkpIHsKLSAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzaXJlZFN0eWxlSXNOb3JtYWwgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmRlc2lyZWRTdHlsZSkuZ2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlTm9ybWFsOworCisgICAgRm9udFRyYWl0c01hc2sgZm9udFRyYWl0c01hc2s7Cisg
ICAgaWYgKGF1dG8gbWFza09wdGlvbmFsID0gY29tcHV0ZUZvbnRUcmFpdHNNYXNrKHN0eWxlLmdl
dCgpKSkKKyAgICAgICAgZm9udFRyYWl0c01hc2sgPSBtYXNrT3B0aW9uYWwudmFsdWUoKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KKwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gZmFtaWx5ID0gc3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKICAgICBpZiAoIWlzPENTU1ZhbHVl
TGlzdD4oZmFtaWx5LmdldCgpKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CkBAIC0xNDcs
MjMgKzI0MSwyMyBAQCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4+
IENTU0ZvbnRGYWNlU2V0OjptYXRjaGluZ0ZhY2VzKGNvbnN0CiAgICAgfQogICAgIENTU1ZhbHVl
TGlzdCYgZmFtaWx5TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZhbWlseSk7CiAKLSAg
ICAvLyBNYXRjaCBDU1NGb250U2VsZWN0b3I6OmdldEZvbnRGYWNlKCkKLSAgICBmb3IgKGF1dG8m
IGZhY2UgOiBtX2ZhY2VzKSB7Ci0gICAgICAgIGlmICghZmFtaWxpZXNJbnRlcnNlY3QoZmFjZSwg
ZmFtaWx5TGlzdCkgfHwgKGRlc2lyZWRTdHlsZUlzTm9ybWFsICYmICEoZmFjZS0+dHJhaXRzTWFz
aygpICYgRm9udFN0eWxlTm9ybWFsTWFzaykpKQorICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1
bmlxdWVGYW1pbGllczsKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGZhbWlseUxpc3QpIHsKKyAg
ICAgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihmYW1pbHkuZ2V0KCkpOworICAgICAgICBpZiAoIXByaW1pdGl2ZS5pc0Zv
bnRGYW1pbHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXN1bHQuYXBwZW5k
KGZhY2UuZ2V0KCkpOworICAgICAgICB1bmlxdWVGYW1pbGllcy5hZGQocHJpbWl0aXZlLmZvbnRG
YW1pbHkoKS5mYW1pbHlOYW1lKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KIAotdm9p
ZCBDU1NGb250RmFjZVNldDo6bG9hZChjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgYXV0byBtYXRjaGluZ0ZhY2VzID0gdGhp
cy0+bWF0Y2hpbmdGYWNlcyhmb250LCB0ZXh0LCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICBy
ZXR1cm47CisgICAgZm9yIChhdXRvJiBmYW1pbHkgOiB1bmlxdWVGYW1pbGllcykgeworICAgICAg
ICBDU1NTZWdtZW50ZWRGb250RmFjZSogZmFjZXMgPSBnZXRGb250RmFjZShmb250VHJhaXRzTWFz
aywgZmFtaWx5KTsKKyAgICAgICAgaWYgKCFmYWNlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBmb3IgKGF1dG8mIGNvbnN0aXR1ZW50RmFjZSA6IGZhY2VzLT5jb25zdGl0dWVudEZh
Y2VzKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbnN0aXR1ZW50RmFjZS5nZXQoKSk7
CisgICAgfQogCi0gICAgZm9yIChhdXRvJiBmYWNlIDogbWF0Y2hpbmdGYWNlcykKLSAgICAgICAg
ZmFjZS5nZXQoKS5sb2FkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBDU1NGb250
RmFjZVNldDo6Y2hlY2soY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTc5LDYgKzI3MywxMTggQEAgYm9vbCBDU1NGb250RmFjZVNl
dDo6Y2hlY2soY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlv
bkNvZGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorY2xhc3MgRm9udEZhY2VDb21wYXJhdG9yIHsK
K3B1YmxpYzoKKyAgICBGb250RmFjZUNvbXBhcmF0b3IoRm9udFRyYWl0c01hc2sgZGVzaXJlZFRy
YWl0c01hc2tGb3JDb21wYXJpc29uKQorICAgICAgICA6IG1fZGVzaXJlZFRyYWl0c01hc2tGb3JD
b21wYXJpc29uKGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbikKKyAgICB7CisgICAgICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fZGVzaXJlZFRyYWl0c01hc2tGb3JD
b21wYXJpc29uICYgRm9udFdlaWdodE1hc2spOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBDU1NGb250RmFjZSYgZmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBzZWNvbmQpCisg
ICAgeworICAgICAgICBGb250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC50cmFp
dHNNYXNrKCk7CisgICAgICAgIEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01hc2sgPSBzZWNv
bmQudHJhaXRzTWFzaygpOworCisgICAgICAgIGJvb2wgZmlyc3RIYXNEZXNpcmVkU3R5bGUgPSBm
aXJzdFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRT
dHlsZU1hc2s7CisgICAgICAgIGJvb2wgc2Vjb25kSGFzRGVzaXJlZFN0eWxlID0gc2Vjb25kVHJh
aXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFz
azsKKworICAgICAgICBpZiAoZmlyc3RIYXNEZXNpcmVkU3R5bGUgIT0gc2Vjb25kSGFzRGVzaXJl
ZFN0eWxlKQorICAgICAgICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxlOworCisgICAg
ICAgIGlmICgobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFs
aWNNYXNrKSAmJiAhZmlyc3QuaXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5pc0xvY2FsRmFs
bGJhY2soKSkgeworICAgICAgICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0
ZWQgdGhhdCBpdCBjYW4gb25seSBzdXBwb3J0IGl0YWxpY3MgdG8gYSBmb250IHRoYXQgY2xhaW1z
IHRvIHN1cHBvcnQKKyAgICAgICAgICAgIC8vIGFsbCBzdHlsZXMuIFRoZSBzcGVjaWFsaXplZCBm
b250IGlzIG1vcmUgbGlrZWx5IHRvIGJlIHRoZSBvbmUgdGhlIGF1dGhvciB3YW50cyB1c2VkLgor
ICAgICAgICAgICAgYm9vbCBmaXJzdFJlcXVpcmVzSXRhbGljcyA9IChmaXJzdFRyYWl0c01hc2sg
JiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZU5v
cm1hbE1hc2spOworICAgICAgICAgICAgYm9vbCBzZWNvbmRSZXF1aXJlc0l0YWxpY3MgPSAoc2Vj
b25kVHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEoc2Vjb25kVHJhaXRzTWFz
ayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spOworICAgICAgICAgICAgaWYgKGZpcnN0UmVxdWlyZXNJ
dGFsaWNzICE9IHNlY29uZFJlcXVpcmVzSXRhbGljcykKKyAgICAgICAgICAgICAgICByZXR1cm4g
Zmlyc3RSZXF1aXJlc0l0YWxpY3M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2Vjb25kVHJh
aXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFdlaWdodE1h
c2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChmaXJzdFRyYWl0c01h
c2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRXZWlnaHRNYXNrKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvMjAxMS9XRC1jc3MzLWZvbnRzLTIwMTExMDA0LyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSBz
YXlzIDoKKyAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyBsZXNzIHRoYW4g
NDAwLCB3ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBhcmUgY2hlY2tlZCBpbiBkZXNj
ZW5kaW5nIG9yZGVyIGZvbGxvd2VkIGJ5IHdlaWdodHMgYWJvdmUgdGhlIGRlc2lyZWQgd2VpZ2h0
IGluIGFzY2VuZGluZyBvcmRlciB1bnRpbCBhIG1hdGNoIGlzIGZvdW5kLgorICAgICAgICAvLyAg
IC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIGdyZWF0ZXIgdGhhbiA1MDAsIHdlaWdodHMgYWJv
dmUgdGhlIGRlc2lyZWQgd2VpZ2h0IGFyZSBjaGVja2VkIGluIGFzY2VuZGluZyBvcmRlciBmb2xs
b3dlZCBieSB3ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBpbiBkZXNjZW5kaW5nIG9y
ZGVyIHVudGlsIGEgbWF0Y2ggaXMgZm91bmQuCisgICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJl
ZCB3ZWlnaHQgaXMgNDAwLCA1MDAgaXMgY2hlY2tlZCBmaXJzdCBhbmQgdGhlbiB0aGUgcnVsZSBm
b3IgZGVzaXJlZCB3ZWlnaHRzIGxlc3MgdGhhbiA0MDAgaXMgdXNlZC4KKyAgICAgICAgLy8gICAt
IElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyA1MDAsIDQwMCBpcyBjaGVja2VkIGZpcnN0IGFuZCB0
aGVuIHRoZSBydWxlIGZvciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFuIDQwMCBpcyB1c2VkLgor
CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYWxsYmFja1J1bGVTZXRzID0gOTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJ1bGVzUGVyU2V0ID0gODsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IEZvbnRUcmFpdHNNYXNrIHdlaWdodEZhbGxiYWNrUnVsZVNldHNbZmFsbGJhY2tS
dWxlU2V0c11bcnVsZXNQZXJTZXRdID0geworICAgICAgICAgICAgeyBGb250V2VpZ2h0MjAwTWFz
aywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFz
aywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFz
aywgRm9udFdlaWdodDkwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDEwME1hc2ss
IEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ss
IEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ss
IEZvbnRXZWlnaHQ5MDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQyMDBNYXNrLCBG
b250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBG
b250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBG
b250V2VpZ2h0OTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0NTAwTWFzaywgRm9u
dFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9u
dFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9u
dFdlaWdodDkwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDQwME1hc2ssIEZvbnRX
ZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2ssIEZvbnRX
ZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRX
ZWlnaHQ5MDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2Vp
Z2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2Vp
Z2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2Vp
Z2h0MTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdo
dDkwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdo
dDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdo
dDEwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ3
MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0
MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQx
MDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0NzAw
TWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAw
TWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAw
TWFzayB9CisgICAgICAgIH07CisKKyAgICAgICAgdW5zaWduZWQgcnVsZVNldEluZGV4ID0gMDsK
KyAgICAgICAgZm9yICg7ICEobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiAoMSA8
PCAoRm9udFdlaWdodDEwMEJpdCArIHJ1bGVTZXRJbmRleCkpKTsgcnVsZVNldEluZGV4KyspIHsg
fQorCisgICAgICAgIGNvbnN0IEZvbnRUcmFpdHNNYXNrKiB3ZWlnaHRGYWxsYmFja1J1bGUgPSB3
ZWlnaHRGYWxsYmFja1J1bGVTZXRzW3J1bGVTZXRJbmRleF07CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBydWxlc1BlclNldDsgKytpKSB7CisgICAgICAgICAgICBpZiAoc2Vjb25k
VHJhaXRzTWFzayAmIHdlaWdodEZhbGxiYWNrUnVsZVtpXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoZmlyc3RUcmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJh
Y2tSdWxlW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGb250VHJhaXRzTWFz
ayBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbjsKK307CisKK0NTU1NlZ21lbnRlZEZv
bnRGYWNlKiBDU1NGb250RmFjZVNldDo6Z2V0Rm9udEZhY2UoRm9udFRyYWl0c01hc2sgdHJhaXRz
TWFzaywgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgYXV0byBpdGVyYXRvciA9
IG1fZmFjZXNMb29rdXBUYWJsZS5maW5kKGZhbWlseSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1f
ZmFjZXNMb29rdXBUYWJsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0
byYgZmFtaWx5Rm9udEZhY2VzID0gaXRlcmF0b3ItPnZhbHVlOworCisgICAgYXV0byYgc2VnbWVu
dGVkRm9udEZhY2VDYWNoZSA9IG1fY2FjaGUuYWRkKGZhbWlseSwgSGFzaE1hcDx1bnNpZ25lZCwg
c3RkOjp1bmlxdWVfcHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4oKSkuaXRlcmF0b3ItPnZhbHVl
OworCisgICAgYXV0byYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUuYWRkKHRyYWl0c01h
c2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoZmFjZSkKKyAgICAgICAgcmV0
dXJuIGZhY2UuZ2V0KCk7CisKKyAgICBmYWNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NTZWdtZW50
ZWRGb250RmFjZT4oKTsKKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENTU0Zv
bnRGYWNlPiwgMzI+IGNhbmRpZGF0ZUZvbnRGYWNlczsKKyAgICBmb3IgKGludCBpID0gZmFtaWx5
Rm9udEZhY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIENTU0ZvbnRGYWNl
JiBjYW5kaWRhdGUgPSBmYW1pbHlGb250RmFjZXNbaV07CisgICAgICAgIHVuc2lnbmVkIGNhbmRp
ZGF0ZVRyYWl0c01hc2sgPSBjYW5kaWRhdGUudHJhaXRzTWFzaygpOworICAgICAgICBpZiAoKHRy
YWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sg
JiBGb250U3R5bGVOb3JtYWxNYXNrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBj
YW5kaWRhdGVGb250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgfQorCisgICAgYXV0byBs
b2NhbEl0ZXJhdG9yID0gbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZS5maW5kKGZh
bWlseSk7CisgICAgaWYgKGxvY2FsSXRlcmF0b3IgIT0gbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNM
b29rdXBUYWJsZS5lbmQoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGxvY2Fs
SXRlcmF0b3ItPnZhbHVlKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVUcmFpdHNN
YXNrID0gY2FuZGlkYXRlLT50cmFpdHNNYXNrKCk7CisgICAgICAgICAgICBpZiAoKHRyYWl0c01h
c2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250
U3R5bGVOb3JtYWxNYXNrKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGNhbmRpZGF0ZUZvbnRGYWNlcy5hcHBlbmQoY2FuZGlkYXRlKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2FuZGlkYXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRp
ZGF0ZUZvbnRGYWNlcy5lbmQoKSwgRm9udEZhY2VDb21wYXJhdG9yKHRyYWl0c01hc2spKTsKKyAg
ICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZUZvbnRGYWNlcykKKyAgICAgICAgZmFj
ZS0+YXBwZW5kRm9udEZhY2UoY2FuZGlkYXRlLmdldCgpKTsKKworICAgIHJldHVybiBmYWNlLmdl
dCgpOworfQorCiB2b2lkIENTU0ZvbnRGYWNlU2V0OjpzdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2Um
IGZhY2UsIENTU0ZvbnRGYWNlOjpTdGF0dXMgb2xkU3RhdGUsIENTU0ZvbnRGYWNlOjpTdGF0dXMg
bmV3U3RhdGUpCiB7CiAgICAgQVNTRVJUKGhhc0ZhY2UoZmFjZSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2VTZXQuaAppbmRleCA2Njk0N2Q3ODFiOGM4MWQ4NDIxZmUwOTJhMWI2YWNiZWE0MjM0
YjlmLi5mYWQyOGViNDU5YTNlZmM3MjlmYmJjYTc1ZDRjN2QyYmI4YTg3NGU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTZXQuaApAQCAtMjcsNyArMjcsOSBAQAogI2RlZmluZSBDU1NGb250
RmFjZVNldF9oCiAKICNpbmNsdWRlICJDU1NGb250RmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiw5ICszOCw5IEBAIGNsYXNz
IEZvbnRGYWNlU2V0OwogY2xhc3MgQ1NTRm9udEZhY2VTZXRDbGllbnQgewogcHVibGljOgogICAg
IHZpcnR1YWwgfkNTU0ZvbnRGYWNlU2V0Q2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGZh
Y2VGaW5pc2hlZChDU1NGb250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc3RhcnRlZExvYWRpbmcoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXBs
ZXRlZExvYWRpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZhY2VGaW5pc2hlZChDU1NGb250
RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRl
ZExvYWRpbmcoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGNvbXBsZXRlZExvYWRpbmcoKSB7IH07
CiB9OwogCiBjbGFzcyBDU1NGb250RmFjZVNldCBmaW5hbCA6IHB1YmxpYyBDU1NGb250RmFjZTo6
Q2xpZW50IHsKQEAgLTUwLDExICs1MiwxMyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGZhY2VDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFjZXMuc2l6ZSgpOyB9CiAgICAgdm9pZCBhZGQoQ1NTRm9u
dEZhY2UmKTsKICAgICB2b2lkIHJlbW92ZShjb25zdCBDU1NGb250RmFjZSYpOwotICAgIGNvbnN0
IENTU0ZvbnRGYWNlJiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2ZhY2Vz
W2ldOyB9CisgICAgdm9pZCBjbGVhcigpOworICAgIGNvbnN0IENTU0ZvbnRGYWNlJiBvcGVyYXRv
cltdKHNpemVfdCBpKSBjb25zdDsKIAotICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIGZvbnQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgY2hlY2soY29u
c3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKIAor
ICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBnZXRGb250RmFjZShGb250VHJhaXRzTWFzaywgY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOworCiAgICAgZW51bSBjbGFzcyBTdGF0dXMgewogICAg
ICAgICBMb2FkaW5nLAogICAgICAgICBMb2FkZWQKQEAgLTY5LDcgKzczLDE0IEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIHZvaWQgc3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiwgQ1NTRm9udEZh
Y2U6OlN0YXR1cyBvbGRTdGF0ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0ZSkgb3ZlcnJp
ZGU7CiAKKyAgICB2b2lkIHJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoY29uc3QgU3Ry
aW5nJik7CisKKyAgICAvLyBtX2ZhY2VzIHNob3VsZCBob2xkIGFsbCB0aGUgc2FtZSBmb250cyBh
cyB0aGUgb25lcyBpbnNpZGUgaW5zaWRlIG1fZmFjZXNMb29rdXBUYWJsZS4KICAgICBWZWN0b3I8
UmVmPENTU0ZvbnRGYWNlPj4gbV9mYWNlczsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJl
ZjxDU1NGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1fZmFjZXNMb29rdXBU
YWJsZTsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+LCBBU0NJ
SUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1fbG9jYWxseUluc3RhbGxlZEZhY2VzTG9va3VwVGFibGU7
CisgICAgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxD
U1NTZWdtZW50ZWRGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1fY2FjaGU7
CisgICAgc2l6ZV90IG1fZmFjZXNQYXJ0aXRpb25JbmRleCB7IDAgfTsgLy8gQWxsIGVudHJpZXMg
aW4gbV9mYWNlcyBiZWZvcmUgdGhpcyBpbmRleCBhcmUgQ1NTLWNvbm5lY3RlZC4KICAgICBTdGF0
dXMgbV9zdGF0dXMgeyBTdGF0dXM6OkxvYWRlZCB9OwogICAgIENTU0ZvbnRGYWNlU2V0Q2xpZW50
JiBtX2NsaWVudDsKICAgICB1bnNpZ25lZCBtX2FjdGl2ZUNvdW50IHsgMCB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAppbmRleCAxZTI5YjU3ZmZkZmUzODA3NDZlNjcyMzIz
MGQ1NTM0OWE1OWZiOTlmLi5mNjIwMjVkNjkwMjc4MmJkMzU0Mjk0ZmZhMjBlODRjZjE2NWMyZDI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaApAQCAtNDUsNiArNDUsOCBA
QCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBDU1NGb250RmFjZVNvdXJjZSBmaW5hbCA6IHB1
YmxpYyBDYWNoZWRGb250Q2xpZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKKyAgICBDU1NGb250RmFjZVNvdXJjZShDU1NGb250RmFjZSYgb3duZXIsIGNvbnN0IFN0
cmluZyYgZmFtaWx5TmFtZU9yVVJJLCBDYWNoZWRGb250KiA9IG51bGxwdHIsIFNWR0ZvbnRGYWNl
RWxlbWVudCogPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIH5DU1NGb250RmFjZVNvdXJjZSgpOwog
CiAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgPT4gU3VjY2VzcwogICAgIC8vICAgICAgICAg
ICAgICAgICAgICAvLwpAQCAtNTcsMTAgKzU5LDYgQEAgcHVibGljOgogICAgICAgICBTdWNjZXNz
LAogICAgICAgICBGYWlsdXJlCiAgICAgfTsKLQotICAgIENTU0ZvbnRGYWNlU291cmNlKENTU0Zv
bnRGYWNlJiBvd25lciwgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lT3JVUkksIENhY2hlZEZvbnQq
ID0gbnVsbHB0ciwgU1ZHRm9udEZhY2VFbGVtZW50KiA9IG51bGxwdHIpOwotICAgIHZpcnR1YWwg
fkNTU0ZvbnRGYWNlU291cmNlKCk7Ci0KICAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0dXM7IH0KIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZU9yVVJJ
KCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbHlOYW1lT3JVUkk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggMmM4YzJjNmQzNjQxYTE4MjVkZGVhZmFmOGZkYWM1MWVk
ZDUxMzNmZC4uNjgzNjNlMmFkMWIwNGRjOWQ1YzYzNDlmMzM3MDM0Mjk4MzlmOTVmZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTY1LDYgKzY1LDcgQEAgc3RhdGlj
IHVuc2lnbmVkIGZvbnRTZWxlY3RvcklkOwogCiBDU1NGb250U2VsZWN0b3I6OkNTU0ZvbnRTZWxl
Y3RvcihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX2RvY3VtZW50KCZkb2N1bWVudCkKKyAg
ICAsIG1fZm9udEZhY2VTZXQoKnRoaXMpCiAgICAgLCBtX2JlZ2luTG9hZGluZ1RpbWVyKCp0aGlz
LCAmQ1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRUaW1lckZpcmVkKQogICAgICwgbV91bmlxdWVJ
ZCgrK2ZvbnRTZWxlY3RvcklkKQogICAgICwgbV92ZXJzaW9uKDApCkBAIC04NSw3ICs4Niw3IEBA
IENTU0ZvbnRTZWxlY3Rvcjo6fkNTU0ZvbnRTZWxlY3RvcigpCiAKIGJvb2wgQ1NTRm9udFNlbGVj
dG9yOjppc0VtcHR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mb250cy5pc0VtcHR5KCk7Cisg
ICAgcmV0dXJuICFtX2ZvbnRGYWNlU2V0LmZhY2VDb3VudCgpOwogfQogCiB2b2lkIENTU0ZvbnRT
ZWxlY3Rvcjo6YXBwZW5kU291cmNlcyhDU1NGb250RmFjZSYgZm9udEZhY2UsIENTU1ZhbHVlTGlz
dCYgc3JjTGlzdCwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJ
blVzZXJBZ2VudFNoYWRvd1RyZWUpCkBAIC0xNDQsMzAgKzE0NSw3IEBAIFN0cmluZyBDU1NGb250
U2VsZWN0b3I6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVl
JiB2YWx1ZSkKICAgICB9CiB9CiAKLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjpyZWdpc3RlckxvY2Fs
Rm9udEZhY2VzRm9yRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKLXsKLSAgICBBU1NF
UlQoIW1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5jb250YWlucyhmYW1pbHlOYW1lKSk7Ci0K
LSAgICBWZWN0b3I8Rm9udFRyYWl0c01hc2s+IHRyYWl0c01hc2tzID0gRm9udENhY2hlOjpzaW5n
bGV0b24oKS5nZXRUcmFpdHNJbkZhbWlseShmYW1pbHlOYW1lKTsKLSAgICBpZiAodHJhaXRzTWFz
a3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8UmVmPENTU0ZvbnRG
YWNlPj4gZmFjZXMgPSB7IH07Ci0gICAgZm9yIChhdXRvIG1hc2sgOiB0cmFpdHNNYXNrcykgewot
ICAgICAgICBSZWY8Q1NTRm9udEZhY2U+IGZhY2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKCp0aGlz
LCBudWxscHRyLCB0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IGZhbWlseUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAg
ICAgIGZhbWlseUxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZv
bnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKSk7Ci0gICAgICAgIGZhY2UtPnNldEZhbWlsaWVzKCpm
YW1pbHlMaXN0KTsKLSAgICAgICAgZmFjZS0+c2V0VHJhaXRzTWFzayhtYXNrKTsKLSAgICAgICAg
ZmFjZS0+YWRvcHRTb3VyY2Uoc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oZmFj
ZS5nZXQoKSwgZmFtaWx5TmFtZSkpOwotICAgICAgICBBU1NFUlQoIWZhY2UtPmFsbFNvdXJjZXNG
YWlsZWQoKSk7Ci0gICAgICAgIGZhY2VzLmFwcGVuZChXVEZNb3ZlKGZhY2UpKTsKLSAgICB9Ci0g
ICAgbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBXVEZNb3ZlKGZh
Y2VzKSk7Ci19Ci0KLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3Qg
U3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQordm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNl
UnVsZShTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxlLCBib29sIGlzSW5pdGlhdGluZ0Vs
ZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpCiB7CiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVz
JiBzdHlsZSA9IGZvbnRGYWNlUnVsZS5wcm9wZXJ0aWVzKCk7CiAgICAgUmVmUHRyPENTU1ZhbHVl
PiBmb250RmFtaWx5ID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRG
YW1pbHkpOwpAQCAtMjAxLDcgKzE3OSw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250
RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwgYm9vCiAgICAg
aWYgKCFzcmNMaXN0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWY8Q1NTRm9u
dEZhY2U+IGZvbnRGYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZSgqdGhpcyk7CisgICAgUmVmPENT
U0ZvbnRGYWNlPiBmb250RmFjZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUodGhpcywgJmZvbnRGYWNl
UnVsZSk7CiAKICAgICBpZiAoIWZvbnRGYWNlLT5zZXRGYW1pbGllcygqZm9udEZhbWlseSkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIzMCwyMiArMjA4LDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6
OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxlLCBi
b28KICAgICBpZiAoZm9udEZhY2UtPmFsbFNvdXJjZXNGYWlsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgZm9yIChhdXRvJiBpdGVtIDogZmFtaWx5TGlzdCkgewotICAgICAgICBTdHJpbmcg
ZmFtaWx5TmFtZSA9IGZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPihpdGVtLmdldCgpKSk7Ci0gICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250
RmFjZXMuYWRkKGZhbWlseU5hbWUsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PigpKTsKLSAgICAg
ICAgYXV0byYgZmFtaWx5Rm9udEZhY2VzID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAg
ICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICByZWdpc3Rlckxv
Y2FsRm9udEZhY2VzRm9yRmFtaWx5KGZhbWlseU5hbWUpOwotICAgICAgICAgICAgZmFtaWx5Rm9u
dEZhY2VzID0geyB9OwotICAgICAgICB9Ci0KLSAgICAgICAgZmFtaWx5Rm9udEZhY2VzLmFwcGVu
ZChmb250RmFjZS5jb3B5UmVmKCkpOwotICAgICAgICAKLSAgICAgICAgKyttX3ZlcnNpb247Ci0g
ICAgfQorICAgIG1fZm9udEZhY2VTZXQuYWRkKGZvbnRGYWNlLmdldCgpKTsKIH0KIAogdm9pZCBD
U1NGb250U2VsZWN0b3I6OnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRTZWxl
Y3RvckNsaWVudCYgY2xpZW50KQpAQCAtMzA0LDg0ICsyNjcsMTMgQEAgc3RhdGljIGNvbnN0IEF0
b21pY1N0cmluZyYgcmVzb2x2ZUdlbmVyaWNGYW1pbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBGb250RGUKICAgICByZXR1cm4gZmFtaWx5TmFtZTsKIH0KIAotY2xhc3MgRm9udEZhY2VDb21w
YXJhdG9yIHsKLXB1YmxpYzoKLSAgICBGb250RmFjZUNvbXBhcmF0b3IoRm9udFRyYWl0c01hc2sg
ZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uKQotICAgICAgICA6IG1fZGVzaXJlZFRyYWl0
c01hc2tGb3JDb21wYXJpc29uKGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbikKLSAgICB7
Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fZGVzaXJlZFRyYWl0
c01hc2tGb3JDb21wYXJpc29uICYgRm9udFdlaWdodE1hc2spOwotICAgIH0KLQotICAgIGJvb2wg
b3BlcmF0b3IoKShjb25zdCBDU1NGb250RmFjZSYgZmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBz
ZWNvbmQpCi0gICAgewotICAgICAgICBGb250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBm
aXJzdC50cmFpdHNNYXNrKCk7Ci0gICAgICAgIEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01h
c2sgPSBzZWNvbmQudHJhaXRzTWFzaygpOwotCi0gICAgICAgIGJvb2wgZmlyc3RIYXNEZXNpcmVk
U3R5bGUgPSBmaXJzdFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNv
biAmIEZvbnRTdHlsZU1hc2s7Ci0gICAgICAgIGJvb2wgc2Vjb25kSGFzRGVzaXJlZFN0eWxlID0g
c2Vjb25kVHJhaXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9u
dFN0eWxlTWFzazsKLQotICAgICAgICBpZiAoZmlyc3RIYXNEZXNpcmVkU3R5bGUgIT0gc2Vjb25k
SGFzRGVzaXJlZFN0eWxlKQotICAgICAgICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxl
OwotCi0gICAgICAgIGlmICgobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250
U3R5bGVJdGFsaWNNYXNrKSAmJiAhZmlyc3QuaXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5p
c0xvY2FsRmFsbGJhY2soKSkgewotICAgICAgICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhh
cyBpbmRpY2F0ZWQgdGhhdCBpdCBjYW4gb25seSBzdXBwb3J0IGl0YWxpY3MgdG8gYSBmb250IHRo
YXQgY2xhaW1zIHRvIHN1cHBvcnQKLSAgICAgICAgICAgIC8vIGFsbCBzdHlsZXMuIFRoZSBzcGVj
aWFsaXplZCBmb250IGlzIG1vcmUgbGlrZWx5IHRvIGJlIHRoZSBvbmUgdGhlIGF1dGhvciB3YW50
cyB1c2VkLgotICAgICAgICAgICAgYm9vbCBmaXJzdFJlcXVpcmVzSXRhbGljcyA9IChmaXJzdFRy
YWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhKGZpcnN0VHJhaXRzTWFzayAmIEZv
bnRTdHlsZU5vcm1hbE1hc2spOwotICAgICAgICAgICAgYm9vbCBzZWNvbmRSZXF1aXJlc0l0YWxp
Y3MgPSAoc2Vjb25kVHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEoc2Vjb25k
VHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spOwotICAgICAgICAgICAgaWYgKGZpcnN0
UmVxdWlyZXNJdGFsaWNzICE9IHNlY29uZFJlcXVpcmVzSXRhbGljcykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmlyc3RSZXF1aXJlc0l0YWxpY3M7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
c2Vjb25kVHJhaXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9u
dFdlaWdodE1hc2spCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChmaXJz
dFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRXZWln
aHRNYXNrKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvMjAxMS9XRC1jc3MzLWZvbnRzLTIwMTExMDA0LyNmb250LW1hdGNoaW5nLWFs
Z29yaXRobSBzYXlzIDoKLSAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyBs
ZXNzIHRoYW4gNDAwLCB3ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBhcmUgY2hlY2tl
ZCBpbiBkZXNjZW5kaW5nIG9yZGVyIGZvbGxvd2VkIGJ5IHdlaWdodHMgYWJvdmUgdGhlIGRlc2ly
ZWQgd2VpZ2h0IGluIGFzY2VuZGluZyBvcmRlciB1bnRpbCBhIG1hdGNoIGlzIGZvdW5kLgotICAg
ICAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIGdyZWF0ZXIgdGhhbiA1MDAsIHdl
aWdodHMgYWJvdmUgdGhlIGRlc2lyZWQgd2VpZ2h0IGFyZSBjaGVja2VkIGluIGFzY2VuZGluZyBv
cmRlciBmb2xsb3dlZCBieSB3ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBpbiBkZXNj
ZW5kaW5nIG9yZGVyIHVudGlsIGEgbWF0Y2ggaXMgZm91bmQuCi0gICAgICAgIC8vICAgLSBJZiB0
aGUgZGVzaXJlZCB3ZWlnaHQgaXMgNDAwLCA1MDAgaXMgY2hlY2tlZCBmaXJzdCBhbmQgdGhlbiB0
aGUgcnVsZSBmb3IgZGVzaXJlZCB3ZWlnaHRzIGxlc3MgdGhhbiA0MDAgaXMgdXNlZC4KLSAgICAg
ICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyA1MDAsIDQwMCBpcyBjaGVja2VkIGZp
cnN0IGFuZCB0aGVuIHRoZSBydWxlIGZvciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFuIDQwMCBp
cyB1c2VkLgotCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYWxsYmFja1J1bGVTZXRz
ID0gOTsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJ1bGVzUGVyU2V0ID0gODsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IEZvbnRUcmFpdHNNYXNrIHdlaWdodEZhbGxiYWNrUnVsZVNldHNb
ZmFsbGJhY2tSdWxlU2V0c11bcnVsZXNQZXJTZXRdID0gewotICAgICAgICAgICAgeyBGb250V2Vp
Z2h0MjAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2Vp
Z2h0NTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2Vp
Z2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9udFdlaWdo
dDEwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdo
dDUwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdo
dDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZvbnRXZWlnaHQy
MDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1
MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4
MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAotICAgICAgICAgICAgeyBGb250V2VpZ2h0NTAw
TWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAw
TWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAw
TWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9udFdlaWdodDQwME1h
c2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1h
c2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1h
c2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZvbnRXZWlnaHQ3MDBNYXNr
LCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNr
LCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNr
LCBGb250V2VpZ2h0MTAwTWFzayB9LAotICAgICAgICAgICAgeyBGb250V2VpZ2h0ODAwTWFzaywg
Rm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywg
Rm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywg
Rm9udFdlaWdodDEwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9udFdlaWdodDkwME1hc2ssIEZv
bnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZv
bnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZv
bnRXZWlnaHQxMDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250
V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250
V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250
V2VpZ2h0MTAwTWFzayB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdW5zaWduZWQgcnVsZVNldElu
ZGV4ID0gMDsKLSAgICAgICAgZm9yICg7ICEobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlz
b24gJiAoMSA8PCAoRm9udFdlaWdodDEwMEJpdCArIHJ1bGVTZXRJbmRleCkpKTsgcnVsZVNldElu
ZGV4KyspIHsgfQotCi0gICAgICAgIGNvbnN0IEZvbnRUcmFpdHNNYXNrKiB3ZWlnaHRGYWxsYmFj
a1J1bGUgPSB3ZWlnaHRGYWxsYmFja1J1bGVTZXRzW3J1bGVTZXRJbmRleF07Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlc1BlclNldDsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAoc2Vjb25kVHJhaXRzTWFzayAmIHdlaWdodEZhbGxiYWNrUnVsZVtpXSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoZmlyc3RUcmFpdHNNYXNrICYgd2Vp
Z2h0RmFsbGJhY2tSdWxlW2ldKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBGb250
VHJhaXRzTWFzayBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbjsKLX07Ci0KIEZvbnRS
YW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUp
CiB7CiAgICAgLy8gRklYTUU6IFRoZSBzcGVjIChhbmQgRmlyZWZveCkgc2F5cyB1c2VyIHNwZWNp
ZmllZCBnZW5lcmljIGZhbWlsaWVzIChzYW5zLXNlcmlmIGV0Yy4pIHNob3VsZCBiZSByZXNvbHZl
ZCBiZWZvcmUgdGhlIEBmb250LWZhY2UgbG9va3VwIHRvby4KICAgICBib29sIHJlc29sdmVHZW5l
cmljRmFtaWx5Rmlyc3QgPSBmYW1pbHlOYW1lID09IHN0YW5kYXJkRmFtaWx5OwogCiAgICAgQXRv
bWljU3RyaW5nIGZhbWlseUZvckxvb2t1cCA9IHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QgPyBy
ZXNvbHZlR2VuZXJpY0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVzY3JpcHRpb24sIGZhbWlseU5h
bWUpIDogZmFtaWx5TmFtZTsKLSAgICBDU1NTZWdtZW50ZWRGb250RmFjZSogZmFjZSA9IGdldEZv
bnRGYWNlKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5Rm9yTG9va3VwKTsKKyAgICBDU1NTZWdtZW50
ZWRGb250RmFjZSogZmFjZSA9IG1fZm9udEZhY2VTZXQuZ2V0Rm9udEZhY2UoZm9udERlc2NyaXB0
aW9uLnRyYWl0c01hc2soKSwgZmFtaWx5Rm9yTG9va3VwKTsKICAgICBpZiAoIWZhY2UpIHsKICAg
ICAgICAgaWYgKCFyZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0KQogICAgICAgICAgICAgZmFtaWx5
Rm9yTG9va3VwID0gcmVzb2x2ZUdlbmVyaWNGYW1pbHkobV9kb2N1bWVudCwgZm9udERlc2NyaXB0
aW9uLCBmYW1pbHlOYW1lKTsKQEAgLTM5MSw0OSArMjgzLDYgQEAgRm9udFJhbmdlcyBDU1NGb250
U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3IKICAgICByZXR1cm4gZmFjZS0+Zm9udFJhbmdlcyhmb250RGVzY3JpcHRpb24pOwogfQog
Ci1DU1NTZWdtZW50ZWRGb250RmFjZSogQ1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBm
YW1pbHkpCi17Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fZm9udEZhY2VzLmZpbmQoZmFtaWx5KTsK
LSAgICBpZiAoaXRlcmF0b3IgPT0gbV9mb250RmFjZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGF1dG8mIGZhbWlseUZvbnRGYWNlcyA9IGl0ZXJhdG9yLT52YWx1ZTsKLQot
ICAgIGF1dG8mIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBtX2ZvbnRzLmFkZChmYW1pbHksIEhh
c2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4+KCkp
Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2sgPSBmb250
RGVzY3JpcHRpb24udHJhaXRzTWFzaygpOwotCi0gICAgYXV0byYgZmFjZSA9IHNlZ21lbnRlZEZv
bnRGYWNlQ2FjaGUuYWRkKHRyYWl0c01hc2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAg
ICBpZiAoZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhY2UuZ2V0KCk7Ci0KLSAgICBmYWNlID0gc3Rk
OjptYWtlX3VuaXF1ZTxDU1NTZWdtZW50ZWRGb250RmFjZT4oKnRoaXMpOwotCi0gICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9udEZhY2U+LCAzMj4gY2FuZGlkYXRlRm9udEZh
Y2VzOwotICAgIGZvciAoaW50IGkgPSBmYW1pbHlGb250RmFjZXMuc2l6ZSgpIC0gMTsgaSA+PSAw
OyAtLWkpIHsKLSAgICAgICAgQ1NTRm9udEZhY2UmIGNhbmRpZGF0ZSA9IGZhbWlseUZvbnRGYWNl
c1tpXTsKLSAgICAgICAgdW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRpZGF0ZS50
cmFpdHNNYXNrKCk7Ci0gICAgICAgIGlmICgodHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1h
c2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNhbmRpZGF0ZUZvbnRGYWNlcy5hcHBlbmQoY2Fu
ZGlkYXRlKTsKLSAgICB9Ci0KLSAgICBhdXRvIGxvY2FsSXRlcmF0b3IgPSBtX2xvY2FsbHlJbnN0
YWxsZWRGb250RmFjZXMuZmluZChmYW1pbHkpOwotICAgIGlmIChsb2NhbEl0ZXJhdG9yICE9IG1f
bG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5lbmQoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGNh
bmRpZGF0ZSA6IGxvY2FsSXRlcmF0b3ItPnZhbHVlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBj
YW5kaWRhdGVUcmFpdHNNYXNrID0gY2FuZGlkYXRlLT50cmFpdHNNYXNrKCk7Ci0gICAgICAgICAg
ICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRy
YWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGNhbmRpZGF0ZUZvbnRGYWNlcy5hcHBlbmQoY2FuZGlkYXRlKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2FuZGlkYXRlRm9udEZhY2Vz
LmJlZ2luKCksIGNhbmRpZGF0ZUZvbnRGYWNlcy5lbmQoKSwgRm9udEZhY2VDb21wYXJhdG9yKHRy
YWl0c01hc2spKTsKLSAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZUZvbnRGYWNl
cykKLSAgICAgICAgZmFjZS0+YXBwZW5kRm9udEZhY2UoY2FuZGlkYXRlLmdldCgpKTsKLQotICAg
IHJldHVybiBmYWNlLmdldCgpOwotfQotCiB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6Y2xlYXJEb2N1
bWVudCgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KSB7CkBAIC00NTQsOSArMzAzLDcgQEAgdm9p
ZCBDU1NGb250U2VsZWN0b3I6OmNsZWFyRG9jdW1lbnQoKQogICAgIG1fZG9jdW1lbnQgPSBudWxs
cHRyOwogCiAgICAgLy8gRklYTUU6IFRoaXMgb2JqZWN0IHNob3VsZCBvdXRsaXZlIHRoZSBEb2N1
bWVudC4KLSAgICBtX2ZvbnRGYWNlcy5jbGVhcigpOwotICAgIG1fbG9jYWxseUluc3RhbGxlZEZv
bnRGYWNlcy5jbGVhcigpOwotICAgIG1fZm9udHMuY2xlYXIoKTsKKyAgICBtX2ZvbnRGYWNlU2V0
LmNsZWFyKCk7CiAgICAgbV9jbGllbnRzLmNsZWFyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuaAppbmRleCA5YTI3ZmUyMmVmNzJkNGE5NzdiNmY3MzVhMzEwMjM1OTYxOTY1
NWMxLi5jZmVlOGVlZjczMzQxZWUwZTE0N2FjOGU0MjljN2YwMGJjZTI5YjNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIENTU0Zv
bnRTZWxlY3Rvcl9oCiAKICNpbmNsdWRlICJDU1NGb250RmFjZS5oIgorI2luY2x1ZGUgIkNTU0Zv
bnRGYWNlU2V0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCkBAIC00OCw3ICs0OSw3IEBAIGNs
YXNzIENhY2hlZEZvbnQ7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFN0eWxlUnVsZUZvbnRGYWNl
OwogCi1jbGFzcyBDU1NGb250U2VsZWN0b3IgZmluYWwgOiBwdWJsaWMgRm9udFNlbGVjdG9yIHsK
K2NsYXNzIENTU0ZvbnRTZWxlY3RvciBmaW5hbCA6IHB1YmxpYyBGb250U2VsZWN0b3IsIHB1Ymxp
YyBDU1NGb250RmFjZVNldENsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDU1NGb250
U2VsZWN0b3I+IGNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgewpAQCAtNjIsMTIgKzYz
LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZvbnRSYW5nZXMgZm9udFJhbmdlc0ZvckZhbWls
eShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3VudCgpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgUmVmUHRyPEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IHNpemVfdCkgb3ZlcnJpZGU7Ci0gICAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIGdldEZvbnRGYWNl
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKIAog
ICAgIHZvaWQgY2xlYXJEb2N1bWVudCgpOwogCiAgICAgc3RhdGljIHZvaWQgYXBwZW5kU291cmNl
cyhDU1NGb250RmFjZSYsIENTU1ZhbHVlTGlzdCYsIERvY3VtZW50KiwgYm9vbCBpc0luaXRpYXRp
bmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKLSAgICB2b2lkIGFkZEZvbnRGYWNlUnVs
ZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSYsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNl
ckFnZW50U2hhZG93VHJlZSk7CisgICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoU3R5bGVSdWxlRm9u
dEZhY2UmLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOwog
CiAgICAgdm9pZCBmb250TG9hZGVkKCk7CiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUludmFs
aWRhdGVkKCkgb3ZlcnJpZGU7CkBAIC05MCwxMiArOTAsOCBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBiZWdpbkxvYWRUaW1lckZpcmVkKCk7CiAKLSAgICB2b2lkIHJlZ2lzdGVyTG9jYWxGb250RmFj
ZXNGb3JGYW1pbHkoY29uc3QgU3RyaW5nJik7Ci0KICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsK
LSAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+LCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+IG1fZm9udEZhY2VzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8
UmVmPENTU0ZvbnRGYWNlPj4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9sb2NhbGx5SW5z
dGFsbGVkRm9udEZhY2VzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPHVuc2lnbmVkLCBz
dGQ6OnVuaXF1ZV9wdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+PiwgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPiBtX2ZvbnRzOworICAgIENTU0ZvbnRGYWNlU2V0IG1fZm9udEZhY2VTZXQ7CiAgICAg
SGFzaFNldDxGb250U2VsZWN0b3JDbGllbnQqPiBtX2NsaWVudHM7CiAKICAgICBWZWN0b3I8Q2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkRm9udD4+IG1fZm9udHNUb0JlZ2luTG9hZGluZzsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCmluZGV4IGY1ZmNiYWVh
OGRkYWU4NjliNmQzZmM5MzAyNzQ5YzIyNmI5OTAzYWYuLjRjMjBkMzhmZTRlNmQ2Zjk2MjI2YjQ0
M2NlZDNlNTNmOGZlMDE1ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZv
bnRGYWNlLmNwcApAQCAtMzcsOCArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNT
U1NlZ21lbnRlZEZvbnRGYWNlOjpDU1NTZWdtZW50ZWRGb250RmFjZShDU1NGb250U2VsZWN0b3Im
IGZvbnRTZWxlY3RvcikKLSAgICA6IG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKK0NTU1Nl
Z21lbnRlZEZvbnRGYWNlOjpDU1NTZWdtZW50ZWRGb250RmFjZSgpCiB7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKaW5kZXggMDdiNzFmODJkYjcyNGZjOWNl
NTFkOWUxMGY3ODA2MTVhMjYzMzQ3Zi4uOTIwMzYxMmQwOTExMzcxZjBiMDRhODAwNzkyNjk2MTU5
ZmVjZTU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRG
YWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKQEAg
LTQyLDE5ICs0MiwxOCBAQCBjbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBDU1NTZWdtZW50
ZWRGb250RmFjZSBmaW5hbCA6IHB1YmxpYyBDU1NGb250RmFjZTo6Q2xpZW50IHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBDU1NTZWdtZW50ZWRGb250RmFjZShD
U1NGb250U2VsZWN0b3ImKTsKKyAgICBDU1NTZWdtZW50ZWRGb250RmFjZSgpOwogICAgIH5DU1NT
ZWdtZW50ZWRGb250RmFjZSgpOwogCi0gICAgQ1NTRm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3Io
KSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3RvcjsgfQotCiAgICAgdm9pZCBhcHBlbmRGb250
RmFjZShSZWY8Q1NTRm9udEZhY2U+JiYpOwogCiAgICAgRm9udFJhbmdlcyBmb250UmFuZ2VzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwogCisgICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4sIDE+
JiBjb25zdGl0dWVudEZhY2VzKCkgeyByZXR1cm4gbV9mb250RmFjZXM7IH0KKwogcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgZm9udExvYWRlZChDU1NGb250RmFjZSYpIG92ZXJyaWRlOwogCi0g
ICAgQ1NTRm9udFNlbGVjdG9yJiBtX2ZvbnRTZWxlY3RvcjsKICAgICBIYXNoTWFwPEZvbnREZXNj
cmlwdGlvbktleSwgRm9udFJhbmdlcywgRm9udERlc2NyaXB0aW9uS2V5SGFzaCwgV1RGOjpTaW1w
bGVDbGFzc0hhc2hUcmFpdHM8Rm9udERlc2NyaXB0aW9uS2V5Pj4gbV9jYWNoZTsKICAgICBWZWN0
b3I8UmVmPENTU0ZvbnRGYWNlPiwgMT4gbV9mb250RmFjZXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFj
ZS5jcHAKaW5kZXggYzQ1ZThkMjcxMWYwNzU5NzY5NWRmNjI2MjY0Yzg5ZTM4ZDNjNWVmYS4uNjc0
MjA1ZTFhOTE5Y2Y5NzIxYTBjOWE1MTExNzNlYmNkZmRkZTFhMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZh
Y2UuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgUmVmUHRyPEZvbnRGYWNlPiBGb250RmFjZTo6Y3Jl
YXRlKEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIFNjcmlwdEV4ZWN1dGlvbkNvbnQKIH0KIAog
Rm9udEZhY2U6OkZvbnRGYWNlKEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIENTU0ZvbnRTZWxl
Y3RvciYgZm9udFNlbGVjdG9yKQotICAgIDogbV9iYWNraW5nKENTU0ZvbnRGYWNlOjpjcmVhdGUo
Zm9udFNlbGVjdG9yLCB0aGlzKSkKKyAgICA6IG1fYmFja2luZyhDU1NGb250RmFjZTo6Y3JlYXRl
KCZmb250U2VsZWN0b3IsIG51bGxwdHIsIHRoaXMpKQogICAgICwgbV9wcm9taXNlKGNyZWF0ZVBy
b21pc2UoZXhlY1N0YXRlKSkKIHsKICAgICBtX2JhY2tpbmctPmFkZENsaWVudCgqdGhpcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Gb250RmFjZVNldC5oCmluZGV4IGMwNWVkMThlNGNlOGFmNTFmOGYyZTgwNDEyNTFh
YjU0MDAxZGMyYzcuLmQ0MTRiYzNiMjQzY2M0Yzk3MDg5OTQ5MGU0ZWJhNDQ4MTk1OWU1NTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5oCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIFJlZjxGb250RmFjZVNldD4gbV90YXJnZXQ7Ci0gICAgICAgIHNp
emVfdCBtX2luZGV4IHsgMCB9OworICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsgLy8gRklY
TUU6IFRoZXJlIG5lZWRzIHRvIGJlIGEgbWVjaGFuaXNtIHRvIHVwZGF0aW5nIHRoaXMgaW5kZXgg
d2hlbiBmb250cyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIEZv
bnRGYWNlU2V0LgogICAgIH07CiAgICAgSXRlcmF0b3IgY3JlYXRlSXRlcmF0b3IoKSB7IHJldHVy
biBJdGVyYXRvcigqdGhpcyk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnRGYWNlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVu
dC5oCmluZGV4IGQyODI4M2EzM2I5ZTM1ZjViOGMzMDY0YWQ2NmYzNzhjZjY1Njg4MDguLjVlNGM1
MDA5ZmUyOWU1MzA0MDEzZDI5MWJjYzZkMGI5YTA4NDQ2YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRm9udEZhY2VFbGVtZW50LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIFNWR0Zv
bnRFbGVtZW50KiBhc3NvY2lhdGVkRm9udEVsZW1lbnQoKSBjb25zdDsKICAgICB2b2lkIHJlYnVp
bGRGb250RmFjZSgpOwogICAgIAotICAgIGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlJiBmb250RmFj
ZVJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNlUnVsZS5nZXQoKTsgfQorICAgIFN0eWxl
UnVsZUZvbnRGYWNlJiBmb250RmFjZVJ1bGUoKSB7IHJldHVybiBtX2ZvbnRGYWNlUnVsZS5nZXQo
KTsgfQogCiBwcml2YXRlOgogICAgIFNWR0ZvbnRGYWNlRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271867</attachid>
            <date>2016-02-20 13:38:37 -0800</date>
            <delta_ts>2016-02-21 16:49:47 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-153347-20160220133818.patch</filename>
            <type>text/plain</type>
            <size>65047</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2ODUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY5NjA2ZDFhOWRiZmIz
ZTNjY2VjMWJjNmZiZWFmNmI2MzYxNjY4MC4uZDkyNjYwOWIxY2JkMDY5ZGMwMTA3ZjkyNjYyYzEz
NzczNDFhYTg3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE2LTAyLTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0ZvbnQgTG9h
ZGluZ10gU3BsaXQgQ1NTRm9udFNlbGVjdG9yIGludG8gYSBGb250RmFjZVNldCBpbXBsZW1lbnRh
dGlvbiBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMzNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAq
IGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Q1NT
Rm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmNhbGN1bGF0ZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpzZXRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZTo6Y2FsY3VsYXRlV2VpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlOjpzZXRXZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6
OmZvbnRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnB1bXApOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmZvbnQpOgorICAgICAgICAqIGNzcy9DU1NGb250
RmFjZS5oOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNldDo6fkNTU0ZvbnRGYWNlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU2V0OjpoYXNGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNl
U2V0OjpyZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6
OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUZvbnRUcmFpdHNNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRG
YWNlU2V0OjptYXRjaGluZ0ZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFy
YXRvcjo6Rm9udEZhY2VDb21wYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29t
cGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6
Z2V0Rm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEZhbWlsaWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhbWlsaWVzSW50ZXJzZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Ojpsb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKiBj
c3MvQ1NTRm9udEZhY2VTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xp
ZW50OjpmYWNlRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXRDbGll
bnQ6OnN0YXJ0ZWRMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xp
ZW50Ojpjb21wbGV0ZWRMb2FkaW5nKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
aDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZvbnRTZWxlY3Rvcjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0
b3I6OmFkZEZvbnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6
OmZvbnRSYW5nZXNGb3JGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9y
OjpjbGVhckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6cmVn
aXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250RmFjZUNvbXBhcmF0b3I6OkZvbnRGYWNlQ29tcGFyYXRvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250RmFjZUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZSk6IERlbGV0ZWQu
CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFj
ZTo6Q1NTU2VnbWVudGVkRm9udEZhY2UpOgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5oOgorICAgICAgICAqIGNzcy9Gb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250RmFjZTo6Rm9udEZhY2UpOgorICAgICAgICAqIGNzcy9Gb250RmFjZVNldC5oOgorICAgICAg
ICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuaDoKKwogMjAxNi0wMi0xOSAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgbW9yZSBjb25jcmV0ZSB0
eXBlcyBmb3IgcGFyc2luZyBwb3NpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0
Y2gvRmV0Y2hIZWFkZXJzLmNwcAppbmRleCA4MTIzZTg2YjkyMjcwMzlkMGNhMjBjZDkzY2M5M2E0
YzAzMjc1ZjdjLi4xMDhmYTdiMWQ1NWJiNDUzYmRkNjM2NDBjMWM5OThlOTc4YjMyMTBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCkBAIC0xNzks
NyArMTc5LDcgQEAgdm9pZCBGZXRjaEhlYWRlcnM6OmZpbGwoY29uc3QgRmV0Y2hIZWFkZXJzKiBo
ZWFkZXJzKQogICAgIH0KIH0KIAotYm9vbCBGZXRjaEhlYWRlcnM6Okl0ZXJhdG9yOjpuZXh0KFN0
cmluZyYgbmV4dEtleSwgU3RyaW5nJiBuZXh0VmFsdWUpCitib29sIEZldGNoSGVhZGVyczo6SXRl
cmF0b3I6Om5leHQoSlNDOjpFeGVjU3RhdGUmLCBTdHJpbmcmIG5leHRLZXksIFN0cmluZyYgbmV4
dFZhbHVlKQogewogICAgIHdoaWxlIChtX2N1cnJlbnRJbmRleCA8IG1fa2V5cy5zaXplKCkpIHsK
ICAgICAgICAgYXV0byYga2V5ID0gbV9rZXlzW21fY3VycmVudEluZGV4KytdOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmgKaW5kZXggZjM1ODFkMzI0YmU4Njk1
NTViNDU2OTkyNWY0MDc4NGJkMmZlYjc2Ni4uYWU3OTUwYTRiZDU5NWUyZTNhMmIwOGFkMDQxMmU4
MzdiODI1ZGMzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRj
aEhlYWRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVy
cy5oCkBAIC0zMyw2ICszMywxMCBAQAogCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogCitu
YW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4ZWNTdGF0ZTsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwpAQCAtNzAsNyArNzQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHVzaW5nIEtleSA9IFN0cmluZzsKICAgICAgICAgdXNpbmcgVmFsdWUgPSBTdHJp
bmc7CiAKLSAgICAgICAgYm9vbCBuZXh0KFN0cmluZyYgbmV4dEtleSwgU3RyaW5nJiBuZXh0VmFs
dWUpOworICAgICAgICBib29sIG5leHQoSlNDOjpFeGVjU3RhdGUmLCBTdHJpbmcmIG5leHRLZXks
IFN0cmluZyYgbmV4dFZhbHVlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZjxGZXRjaEhl
YWRlcnM+IG1faGVhZGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTS2V5VmFsdWVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlW
YWx1ZUl0ZXJhdG9yLmgKaW5kZXggZmJiZmZkMGM1N2JiMGFlZTA5MmJiYjNiZjQ4Y2M5MmU4MDc5
OGM5ZC4uOTg1NjYzNjdhNzgyZDVhNjA0ZWEzYTUzZDk2NjdjNWFlMDk0ZjRjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmgKQEAgLTEyMiw3
ICsxMjIsNyBAQCBib29sIEpTS2V5VmFsdWVJdGVyYXRvcjxKU1dyYXBwZXI+OjpuZXh0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlJiB2YQogewogICAgIHR5cGVuYW1lIERPTVdy
YXBwZWQ6Okl0ZXJhdG9yOjpLZXkgbmV4dEtleTsKICAgICB0eXBlbmFtZSBET01XcmFwcGVkOjpJ
dGVyYXRvcjo6VmFsdWUgbmV4dFZhbHVlOwotICAgIGlmIChtX2l0ZXJhdG9yLm5leHQobmV4dEtl
eSwgbmV4dFZhbHVlKSkgeworICAgIGlmIChtX2l0ZXJhdG9yLm5leHQoc3RhdGUsIG5leHRLZXks
IG5leHRWYWx1ZSkpIHsKICAgICAgICAgdmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCmluZGV4
IDU1MmU5OWNmYTFlMWVhYWE0YWEzMjY5NTkwMDM4ZGFhYTVhMDIwMTcuLjhlZjA2ZWFiZmFmYjIw
YzY4N2U2NmUwMjUyYjQxOTg4ODI5ZmVhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNw
cApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlLmgiCiAKICNpbmNsdWRl
ICJDU1NGb250RmFjZVNvdXJjZS5oIgorI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU3JjVmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NGb250RmFtaWx5LmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZlYXR1cmVWYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgpAQCAtMzgsMTYgKzM5LDQ4IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udExvYWRlci5oIgorI2luY2x1ZGUgIkZvbnRGYWNl
LmgiCiAjaW5jbHVkZSAiRm9udFZhcmlhbnRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0aWVzLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotQ1NTRm9udEZhY2U6OkNTU0ZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVj
dG9yLCBGb250RmFjZSogd3JhcHBlciwgYm9vbCBpc0xvY2FsRmFsbGJhY2spCit2b2lkIENTU0Zv
bnRGYWNlOjphcHBlbmRTb3VyY2VzKENTU0ZvbnRGYWNlJiBmb250RmFjZSwgQ1NTVmFsdWVMaXN0
JiBzcmNMaXN0LCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudElu
VXNlckFnZW50U2hhZG93VHJlZSkKK3sKKyAgICBmb3IgKGF1dG8mIHNyYyA6IHNyY0xpc3QpIHsK
KyAgICAgICAgLy8gQW4gaXRlbSBpbiB0aGUgbGlzdCBlaXRoZXIgc3BlY2lmaWVzIGEgc3RyaW5n
IChsb2NhbCBmb250IG5hbWUpIG9yIGEgVVJMIChyZW1vdGUgZm9udCB0byBkb3dubG9hZCkuCisg
ICAgICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUmIGl0ZW0gPSBkb3duY2FzdDxDU1NGb250RmFjZVNy
Y1ZhbHVlPihzcmMuZ2V0KCkpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9udEZhY2VT
b3VyY2U+IHNvdXJjZTsKKyAgICAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1l
bnQgPSBudWxscHRyOworICAgICAgICBib29sIGZvdW5kU1ZHRm9udCA9IGZhbHNlOworCisjaWYg
RU5BQkxFKFNWR19GT05UUykKKyAgICAgICAgZm91bmRTVkdGb250ID0gaXRlbS5pc1NWR0ZvbnRG
YWNlU3JjKCkgfHwgaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyAgICAgICAgZm9udEZhY2VF
bGVtZW50ID0gaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyNlbmRpZgorICAgICAgICBpZiAo
IWl0ZW0uaXNMb2NhbCgpKSB7CisgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1
bWVudCA/IGRvY3VtZW50LT5zZXR0aW5ncygpIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGJvb2wg
YWxsb3dEb3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8fCAoc2V0dGluZ3MgJiYgc2V0dGluZ3Mt
PmRvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgpKTsKKyAgICAgICAgICAgIGlmIChhbGxv
d0Rvd25sb2FkaW5nICYmIGl0ZW0uaXNTdXBwb3J0ZWRGb3JtYXQoKSAmJiBkb2N1bWVudCkgewor
ICAgICAgICAgICAgICAgIGlmIChDYWNoZWRGb250KiBjYWNoZWRGb250ID0gaXRlbS5jYWNoZWRG
b250KGRvY3VtZW50LCBmb3VuZFNWR0ZvbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2Vu
dFNoYWRvd1RyZWUpKQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5p
cXVlPENTU0ZvbnRGYWNlU291cmNlPihmb250RmFjZSwgaXRlbS5yZXNvdXJjZSgpLCBjYWNoZWRG
b250KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzb3VyY2Ug
PSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmb250RmFjZSwgaXRlbS5yZXNv
dXJjZSgpLCBudWxscHRyLCBmb250RmFjZUVsZW1lbnQpOworCisgICAgICAgIGlmIChzb3VyY2Up
CisgICAgICAgICAgICBmb250RmFjZS5hZG9wdFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkpOworICAg
IH0KKyAgICBmb250RmFjZS5zb3VyY2VzUG9wdWxhdGVkKCk7Cit9CisKK0NTU0ZvbnRGYWNlOjpD
U1NGb250RmFjZShDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciwgU3R5bGVSdWxlRm9udEZh
Y2UqIGNzc0Nvbm5lY3Rpb24sIEZvbnRGYWNlKiB3cmFwcGVyLCBib29sIGlzTG9jYWxGYWxsYmFj
aykKICAgICA6IG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKLSAgICAsIG1fd3JhcHBlcih3
cmFwcGVyKQorICAgICwgbV9jc3NDb25uZWN0aW9uKGNzc0Nvbm5lY3Rpb24pCisgICAgLCBtX3dy
YXBwZXIod3JhcHBlciA/IHdyYXBwZXItPmNyZWF0ZVdlYWtQdHIoKSA6IFdlYWtQdHI8Rm9udEZh
Y2U+KCkpCiAgICAgLCBtX2lzTG9jYWxGYWxsYmFjayhpc0xvY2FsRmFsbGJhY2spCiB7CiB9CkBA
IC02OSw3NCArMTAyLDc2IEBAIGJvb2wgQ1NTRm9udEZhY2U6OnNldEZhbWlsaWVzKENTU1ZhbHVl
JiBmYW1pbHkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ1NTRm9udEZhY2U6OnNldFN0
eWxlKENTU1ZhbHVlJiBzdHlsZSkKK09wdGlvbmFsPEZvbnRUcmFpdHNNYXNrPiBDU1NGb250RmFj
ZTo6Y2FsY3VsYXRlU3R5bGUoQ1NTVmFsdWUmIHN0eWxlKQogewogICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KHN0eWxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gTnVsbG9wdDsKIAotICAgIHVuc2lnbmVkIHN0eWxlTWFzayA9IDA7CiAgICAgc3dpdGNoIChk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oc3R5bGUpLmdldFZhbHVlSUQoKSkgewogICAgIGNh
c2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgIHN0eWxlTWFzayA9IEZvbnRTdHlsZU5vcm1hbE1h
c2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFN0eWxlTm9ybWFsTWFzazsK
ICAgICBjYXNlIENTU1ZhbHVlSXRhbGljOgogICAgIGNhc2UgQ1NTVmFsdWVPYmxpcXVlOgotICAg
ICAgICBzdHlsZU1hc2sgPSBGb250U3R5bGVJdGFsaWNNYXNrOwotICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIEZvbnRTdHlsZUl0YWxpY01hc2s7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
c3R5bGVNYXNrID0gRm9udFN0eWxlTm9ybWFsTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiBGb250U3R5bGVOb3JtYWxNYXNrOwogICAgIH0KIAotICAgIG1fdHJhaXRzTWFzayA9
IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJh
aXRzTWFzaykgJiAofkZvbnRTdHlsZU1hc2spKSB8IHN0eWxlTWFzayk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIEZvbnRTdHlsZU5vcm1hbE1hc2s7CiB9CiAKLWJvb2wgQ1NTRm9udEZh
Y2U6OnNldFdlaWdodChDU1NWYWx1ZSYgd2VpZ2h0KQorYm9vbCBDU1NGb250RmFjZTo6c2V0U3R5
bGUoQ1NTVmFsdWUmIHN0eWxlKQoreworICAgIGlmIChhdXRvIG1hc2sgPSBjYWxjdWxhdGVTdHls
ZShzdHlsZSkpIHsKKyAgICAgICAgbV90cmFpdHNNYXNrID0gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0
c01hc2s+KChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90cmFpdHNNYXNrKSAmICh+Rm9udFN0eWxl
TWFzaykpIHwgbWFzay52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworT3B0aW9uYWw8Rm9udFRyYWl0c01hc2s+IENTU0ZvbnRGYWNl
OjpjYWxjdWxhdGVXZWlnaHQoQ1NTVmFsdWUmIHdlaWdodCkKIHsKICAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPih3ZWlnaHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBOdWxsb3B0OwogCi0gICAgdW5zaWduZWQgd2VpZ2h0TWFzayA9IDA7CiAgICAgc3dpdGNo
IChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4od2VpZ2h0KS5nZXRWYWx1ZUlEKCkpIHsKICAg
ICBjYXNlIENTU1ZhbHVlQm9sZDoKICAgICBjYXNlIENTU1ZhbHVlQm9sZGVyOgogICAgIGNhc2Ug
Q1NTVmFsdWU3MDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0NzAwTWFzazsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0NzAwTWFzazsKICAgICBjYXNl
IENTU1ZhbHVlTm9ybWFsOgogICAgIGNhc2UgQ1NTVmFsdWU0MDA6Ci0gICAgICAgIHdlaWdodE1h
c2sgPSBGb250V2VpZ2h0NDAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBG
b250V2VpZ2h0NDAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlOTAwOgotICAgICAgICB3ZWlnaHRN
YXNrID0gRm9udFdlaWdodDkwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
Rm9udFdlaWdodDkwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZTgwMDoKLSAgICAgICAgd2VpZ2h0
TWFzayA9IEZvbnRXZWlnaHQ4MDBNYXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJu
IEZvbnRXZWlnaHQ4MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWU2MDA6Ci0gICAgICAgIHdlaWdo
dE1hc2sgPSBGb250V2VpZ2h0NjAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBGb250V2VpZ2h0NjAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlNTAwOgotICAgICAgICB3ZWln
aHRNYXNrID0gRm9udFdlaWdodDUwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm4gRm9udFdlaWdodDUwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZTMwMDoKLSAgICAgICAgd2Vp
Z2h0TWFzayA9IEZvbnRXZWlnaHQzMDBNYXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIEZvbnRXZWlnaHQzMDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWVMaWdodGVyOgogICAgIGNh
c2UgQ1NTVmFsdWUyMDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0MjAwTWFzazsK
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0MjAwTWFzazsKICAgICBj
YXNlIENTU1ZhbHVlMTAwOgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDEwME1hc2s7
Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFdlaWdodDEwME1hc2s7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQ0MDBNYXNrOwotICAgICAg
ICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ0MDBNYXNrOwogICAgIH0KIAotICAg
IG1fdHJhaXRzTWFzayA9IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fdHJhaXRzTWFzaykgJiAofkZvbnRXZWlnaHRNYXNrKSkgfCB3ZWlnaHRNYXNr
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gRm9udFdlaWdodDQwME1hc2s7Cit9CisK
K2Jvb2wgQ1NTRm9udEZhY2U6OnNldFdlaWdodChDU1NWYWx1ZSYgd2VpZ2h0KQoreworICAgIGlm
IChhdXRvIG1hc2sgPSBjYWxjdWxhdGVXZWlnaHQod2VpZ2h0KSkgeworICAgICAgICBtX3RyYWl0
c01hc2sgPSBzdGF0aWNfY2FzdDxGb250VHJhaXRzTWFzaz4oKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihtX3RyYWl0c01hc2spICYgKH5Gb250V2VpZ2h0TWFzaykpIHwgbWFzay52YWx1ZSgpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29s
IENTU0ZvbnRGYWNlOjpzZXRVbmljb2RlUmFuZ2UoQ1NTVmFsdWUmIHVuaWNvZGVSYW5nZSkKQEAg
LTIzNyw5ICsyNzIsMzkgQEAgdm9pZCBDU1NGb250RmFjZTo6YWRkQ2xpZW50KENsaWVudCYgY2xp
ZW50KQogCiB2b2lkIENTU0ZvbnRGYWNlOjpyZW1vdmVDbGllbnQoQ2xpZW50JiBjbGllbnQpCiB7
CisgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9jbGllbnRz
LnJlbW92ZSgmY2xpZW50KTsKIH0KIAorUmVmPEZvbnRGYWNlPiBDU1NGb250RmFjZTo6d3JhcHBl
cihKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlKQoreworICAgIGlmIChtX3dyYXBwZXIpCisgICAg
ICAgIHJldHVybiBSZWY8Rm9udEZhY2U+KCptX3dyYXBwZXIuZ2V0KCkpOworCisgICAgUmVmPEZv
bnRGYWNlPiB3cmFwcGVyID0gRm9udEZhY2U6OmNyZWF0ZShleGVjU3RhdGUsICp0aGlzKTsKKyAg
ICBzd2l0Y2ggKG1fc3RhdHVzKSB7CisgICAgY2FzZSBTdGF0dXM6OlBlbmRpbmc6CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgU3RhdHVzOjpMb2FkaW5nOgorICAgICAgICB3cmFwcGVyLT5zdGF0
ZUNoYW5nZWQoKnRoaXMsIFN0YXR1czo6UGVuZGluZywgU3RhdHVzOjpMb2FkaW5nKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBTdGF0dXM6OlRpbWVkT3V0OgorICAgICAgICB3cmFwcGVyLT5z
dGF0ZUNoYW5nZWQoKnRoaXMsIFN0YXR1czo6UGVuZGluZywgU3RhdHVzOjpMb2FkaW5nKTsKKyAg
ICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCp0aGlzLCBTdGF0dXM6OkxvYWRpbmcsIFN0YXR1
czo6VGltZWRPdXQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YXR1czo6U3VjY2VzczoK
KyAgICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCp0aGlzLCBTdGF0dXM6OlBlbmRpbmcsIFN0
YXR1czo6TG9hZGluZyk7CisgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgqdGhpcywgU3Rh
dHVzOjpQZW5kaW5nLCBTdGF0dXM6OlN1Y2Nlc3MpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFN0YXR1czo6RmFpbHVyZToKKyAgICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCp0aGlzLCBT
dGF0dXM6OlBlbmRpbmcsIFN0YXR1czo6TG9hZGluZyk7CisgICAgICAgIHdyYXBwZXItPnN0YXRl
Q2hhbmdlZCgqdGhpcywgU3RhdHVzOjpQZW5kaW5nLCBTdGF0dXM6OkZhaWx1cmUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgbV93cmFwcGVyID0gd3JhcHBlci0+Y3JlYXRlV2Vha1B0cigp
OworICAgIHJldHVybiB3cmFwcGVyOworfQorCiB2b2lkIENTU0ZvbnRGYWNlOjphZG9wdFNvdXJj
ZShzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9udEZhY2VTb3VyY2U+JiYgc291cmNlKQogewogICAgIG1f
c291cmNlcy5hcHBlbmQoV1RGTW92ZShzb3VyY2UpKTsKQEAgLTI4Miw2ICszNDcsNyBAQCB2b2lk
IENTU0ZvbnRGYWNlOjpmb250TG9hZGVkKENTU0ZvbnRGYWNlU291cmNlJikKICAgICBpZiAobV9z
b3VyY2VzUG9wdWxhdGVkKQogICAgICAgICBwdW1wKCk7CiAKKyAgICBBU1NFUlQobV9mb250U2Vs
ZWN0b3IpOwogICAgIG1fZm9udFNlbGVjdG9yLT5mb250TG9hZGVkKCk7CiAKICAgICBmb3IgKGF1
dG8mIGNsaWVudCA6IG1fY2xpZW50cykKQEAgLTI5Niw5ICszNjIsMTAgQEAgc2l6ZV90IENTU0Zv
bnRGYWNlOjpwdW1wKCkKIAogICAgICAgICBpZiAoc291cmNlLT5zdGF0dXMoKSA9PSBDU1NGb250
RmFjZVNvdXJjZTo6U3RhdHVzOjpQZW5kaW5nKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9zdGF0
dXMgPT0gU3RhdHVzOjpQZW5kaW5nIHx8IG1fc3RhdHVzID09IFN0YXR1czo6TG9hZGluZyB8fCBt
X3N0YXR1cyA9PSBTdGF0dXM6OlRpbWVkT3V0KTsKKyAgICAgICAgICAgIEFTU0VSVChtX2ZvbnRT
ZWxlY3Rvcik7CiAgICAgICAgICAgICBpZiAobV9zdGF0dXMgPT0gU3RhdHVzOjpQZW5kaW5nKQog
ICAgICAgICAgICAgICAgIHNldFN0YXR1cyhTdGF0dXM6OkxvYWRpbmcpOwotICAgICAgICAgICAg
c291cmNlLT5sb2FkKG1fZm9udFNlbGVjdG9yLmdldCgpKTsKKyAgICAgICAgICAgIHNvdXJjZS0+
bG9hZCgqbV9mb250U2VsZWN0b3IpOwogICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChzb3Vy
Y2UtPnN0YXR1cygpKSB7CkBAIC0zNDUsOCArNDEyLDEwIEBAIFJlZlB0cjxGb250PiBDU1NGb250
RmFjZTo6Zm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBz
eW50CiAgICAgc2l6ZV90IHN0YXJ0SW5kZXggPSBwdW1wKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IHN0YXJ0SW5kZXg7IGkgPCBtX3NvdXJjZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byYg
c291cmNlID0gbV9zb3VyY2VzW2ldOwotICAgICAgICBpZiAoc291cmNlLT5zdGF0dXMoKSA9PSBD
U1NGb250RmFjZVNvdXJjZTo6U3RhdHVzOjpQZW5kaW5nKQotICAgICAgICAgICAgc291cmNlLT5s
b2FkKG1fZm9udFNlbGVjdG9yLmdldCgpKTsKKyAgICAgICAgaWYgKHNvdXJjZS0+c3RhdHVzKCkg
PT0gQ1NTRm9udEZhY2VTb3VyY2U6OlN0YXR1czo6UGVuZGluZykgeworICAgICAgICAgICAgQVNT
RVJUKG1fZm9udFNlbGVjdG9yKTsKKyAgICAgICAgICAgIHNvdXJjZS0+bG9hZCgqbV9mb250U2Vs
ZWN0b3IpOworICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChzb3VyY2UtPnN0YXR1cygpKSB7
CiAgICAgICAgIGNhc2UgQ1NTRm9udEZhY2VTb3VyY2U6OlN0YXR1czo6UGVuZGluZzoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlLmgKaW5kZXggMTA3ZDlmMjgyMzg2YjZlNmM2MWFkYjFiYjNkZjk5MGUy
MGRlZmM0Zi4uOWJlYjUwN2E1MWY1NWRhZWYzNDIxYjU1Y2RkMDgzYWI4NWM2ZDQ3MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlLmgKQEAgLTI3LDcgKzI3LDYgQEAKICNkZWZpbmUgQ1NTRm9udEZh
Y2VfaAogCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTRm9udEZh
Y2VTb3VyY2UuaCIKICNpbmNsdWRlICJGb250RmVhdHVyZVNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
VGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtMzYsMjIgKzM1LDI5IEBACiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKK2NsYXNzIEV4ZWNTdGF0ZTsKK30KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBDU1NGb250RmFjZVNvdXJjZTsKK2NsYXNzIENTU0ZvbnRTZWxlY3RvcjsKIGNsYXNzIENT
U1NlZ21lbnRlZEZvbnRGYWNlOwogY2xhc3MgQ1NTVmFsdWU7CiBjbGFzcyBDU1NWYWx1ZUxpc3Q7
CitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIEZvbnQ7CiBj
bGFzcyBGb250RmFjZTsKIAotLy8gRklYTUU6IFRoaXMgY2xhc3MgZG9lcyBub3QgbmVlZCB0byBi
ZSByZWZlcmVuY2UgY291bnRlZC4KIGNsYXNzIENTU0ZvbnRGYWNlIGZpbmFsIDogcHVibGljIFJl
ZkNvdW50ZWQ8Q1NTRm9udEZhY2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0ZvbnRG
YWNlPiBjcmVhdGUoQ1NTRm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3IsIEZvbnRGYWNlKiB3cmFw
cGVyID0gbnVsbHB0ciwgYm9vbCBpc0xvY2FsRmFsbGJhY2sgPSBmYWxzZSkKKyAgICBzdGF0aWMg
UmVmPENTU0ZvbnRGYWNlPiBjcmVhdGUoQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IsIFN0
eWxlUnVsZUZvbnRGYWNlKiBjc3NDb25uZWN0aW9uID0gbnVsbHB0ciwgRm9udEZhY2UqIHdyYXBw
ZXIgPSBudWxscHRyLCBib29sIGlzTG9jYWxGYWxsYmFjayA9IGZhbHNlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRm9udEZhY2UoZm9udFNlbGVjdG9yLCB3cmFwcGVy
LCBpc0xvY2FsRmFsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRm9u
dEZhY2UoZm9udFNlbGVjdG9yLCBjc3NDb25uZWN0aW9uLCB3cmFwcGVyLCBpc0xvY2FsRmFsbGJh
Y2spKTsKICAgICB9CiAgICAgdmlydHVhbCB+Q1NTRm9udEZhY2UoKTsKIApAQCAtNzgsNiArODQs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VHJhaXRzTWFzayhGb250VHJhaXRzTWFzayB0cmFp
dHNNYXNrKSB7IG1fdHJhaXRzTWFzayA9IHRyYWl0c01hc2s7IH0KICAgICBib29sIGlzTG9jYWxG
YWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2NhbEZhbGxiYWNrOyB9CiAgICAgU3RhdHVz
IHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgU3R5bGVSdWxlRm9udEZh
Y2UqIGNzc0Nvbm5lY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Nzc0Nvbm5lY3Rpb24uZ2V0KCk7
IH0KKworICAgIHN0YXRpYyBPcHRpb25hbDxGb250VHJhaXRzTWFzaz4gY2FsY3VsYXRlU3R5bGUo
Q1NTVmFsdWUmIHN0eWxlKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8Rm9udFRyYWl0c01hc2s+IGNh
bGN1bGF0ZVdlaWdodChDU1NWYWx1ZSYgd2VpZ2h0KTsKIAogICAgIGNsYXNzIENsaWVudDsKICAg
ICB2b2lkIGFkZENsaWVudChDbGllbnQmKTsKQEAgLTkzLDYgKzEwMyw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGxvYWQoKTsKICAgICBSZWZQdHI8Rm9udD4gZm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKTsKIAorICAgIHN0
YXRpYyB2b2lkIGFwcGVuZFNvdXJjZXMoQ1NTRm9udEZhY2UmLCBDU1NWYWx1ZUxpc3QmLCBEb2N1
bWVudCosIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CisK
ICAgICBjbGFzcyBDbGllbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Q2xpZW50
KCkgeyB9CkBAIC0xMzIsMTQgKzE0NCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIFVDaGFyMzIgbV90
bzsKICAgICB9OwogCi0gICAgRm9udEZhY2UqIHdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBtX3dy
YXBwZXI7IH0KKyAgICAvLyBXZSBkb24ndCBndWFyYW50ZWUgdGhhdCB0aGUgRm9udEZhY2Ugd3Jh
cHBlciB3aWxsIGJlIHRoZSBzYW1lIGVhY2ggdGltZSB5b3UgYXNrIGZvciBpdC4KKyAgICBSZWY8
Rm9udEZhY2U+IHdyYXBwZXIoSlNDOjpFeGVjU3RhdGUmKTsKIAogI2lmIEVOQUJMRShTVkdfRk9O
VFMpCiAgICAgYm9vbCBoYXNTVkdGb250RmFjZVNvdXJjZSgpIGNvbnN0OwogI2VuZGlmCiAKIHBy
aXZhdGU6Ci0gICAgQ1NTRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yJiwgRm9udEZhY2UqLCBib29s
IGlzTG9jYWxGYWxsYmFjayk7CisgICAgQ1NTRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yKiwgU3R5
bGVSdWxlRm9udEZhY2UqLCBGb250RmFjZSosIGJvb2wgaXNMb2NhbEZhbGxiYWNrKTsKIAogICAg
IHNpemVfdCBwdW1wKCk7CiAgICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzKTsKQEAgLTE0NywxMiAr
MTYwLDEzIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbV9mYW1pbGllczsK
ICAgICBGb250VHJhaXRzTWFzayBtX3RyYWl0c01hc2sgeyBzdGF0aWNfY2FzdDxGb250VHJhaXRz
TWFzaz4oRm9udFN0eWxlTm9ybWFsTWFzayB8IEZvbnRXZWlnaHQ0MDBNYXNrKSB9OwogICAgIFZl
Y3RvcjxVbmljb2RlUmFuZ2U+IG1fcmFuZ2VzOwotICAgIEhhc2hTZXQ8Q2xpZW50Kj4gbV9jbGll
bnRzOwotICAgIFJlZjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwotICAgIEZvbnRG
YWNlKiBtX3dyYXBwZXI7CiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZlYXR1cmVTZXR0aW5n
czsKICAgICBGb250VmFyaWFudFNldHRpbmdzIG1fdmFyaWFudFNldHRpbmdzOwogICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9udEZhY2VTb3VyY2U+PiBtX3NvdXJjZXM7CisgICAgUmVm
UHRyPENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7CisgICAgUmVmUHRyPFN0eWxlUnVs
ZUZvbnRGYWNlPiBtX2Nzc0Nvbm5lY3Rpb247CisgICAgSGFzaFNldDxDbGllbnQqPiBtX2NsaWVu
dHM7CisgICAgV2Vha1B0cjxGb250RmFjZT4gbV93cmFwcGVyOwogICAgIFN0YXR1cyBtX3N0YXR1
cyB7IFN0YXR1czo6UGVuZGluZyB9OwogICAgIGJvb2wgbV9pc0xvY2FsRmFsbGJhY2sgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9zb3VyY2VzUG9wdWxhdGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VTZXQuY3BwCmluZGV4IGEwZjVmZDY1MzA0ZDI5NjVkNjczZjIyMzQ5ZTNl
NjI1Njk5N2JhODMuLmIxYjc3MDUxNWE4OTQyMjc5ZGFlZjk4MGFkNWFkOTliNWU3MzVmYjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcApAQCAtMjYsMTEgKzI2LDE1IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VTZXQuaCIKIAorI2luY2x1
ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhbWlseS5oIgogI2lu
Y2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1
ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2Uu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIK
KyNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDQsNiArNDgsMTEgQEAgQ1NTRm9udEZhY2VTZXQ6On5D
U1NGb250RmFjZVNldCgpCiB7CiAgICAgZm9yIChhdXRvJiBmYWNlIDogbV9mYWNlcykKICAgICAg
ICAgZmFjZS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKworICAgIGZvciAoYXV0byYgcGFpciA6IG1f
bG9jYWxseUluc3RhbGxlZEZhY2VzTG9va3VwVGFibGUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBm
YWNlIDogcGFpci52YWx1ZSkKKyAgICAgICAgICAgIGZhY2UtPnJlbW92ZUNsaWVudCgqdGhpcyk7
CisgICAgfQogfQogCiB2b2lkIENTU0ZvbnRGYWNlU2V0OjppbmNyZW1lbnRBY3RpdmVDb3VudCgp
CkBAIC03MCwyMyArNzksMTIyIEBAIGJvb2wgQ1NTRm9udEZhY2VTZXQ6Omhhc0ZhY2UoY29uc3Qg
Q1NTRm9udEZhY2UmIGZhY2UpIGNvbnN0CiAgICAgICAgIGlmIChteUZhY2UucHRyKCkgPT0gJmZh
Y2UpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK3ZvaWQgQ1NTRm9udEZhY2VTZXQ6OnJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1p
bHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQoreworICAgIEFTU0VSVCghbV9sb2NhbGx5SW5z
dGFsbGVkRmFjZXNMb29rdXBUYWJsZS5jb250YWlucyhmYW1pbHlOYW1lKSk7CisKKyAgICBWZWN0
b3I8Rm9udFRyYWl0c01hc2s+IHRyYWl0c01hc2tzID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5n
ZXRUcmFpdHNJbkZhbWlseShmYW1pbHlOYW1lKTsKKyAgICBpZiAodHJhaXRzTWFza3MuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4gZmFj
ZXMgPSB7IH07CisgICAgZm9yIChhdXRvIG1hc2sgOiB0cmFpdHNNYXNrcykgeworICAgICAgICBS
ZWY8Q1NTRm9udEZhY2U+IGZhY2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIsIHRydWUpOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlz
dD4gZmFtaWx5TGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKKyAg
ICAgICAgZmFtaWx5TGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
Rm9udEZhbWlseVZhbHVlKGZhbWlseU5hbWUpKTsKKyAgICAgICAgZmFjZS0+c2V0RmFtaWxpZXMo
KmZhbWlseUxpc3QpOworICAgICAgICBmYWNlLT5zZXRUcmFpdHNNYXNrKG1hc2spOworICAgICAg
ICBmYWNlLT5hZG9wdFNvdXJjZShzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihm
YWNlLmdldCgpLCBmYW1pbHlOYW1lKSk7CisgICAgICAgIEFTU0VSVCghZmFjZS0+YWxsU291cmNl
c0ZhaWxlZCgpKTsKKyAgICAgICAgZmFjZXMuYXBwZW5kKFdURk1vdmUoZmFjZSkpOworICAgIH0K
KyAgICBtX2xvY2FsbHlJbnN0YWxsZWRGYWNlc0xvb2t1cFRhYmxlLmFkZChmYW1pbHlOYW1lLCBX
VEZNb3ZlKGZhY2VzKSk7Cit9CisKK1N0cmluZyBDU1NGb250RmFjZVNldDo6ZmFtaWx5TmFtZUZy
b21QcmltaXRpdmUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZS5pc0ZvbnRGYW1pbHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmZvbnRGYW1pbHkoKS5m
YW1pbHlOYW1lOworICAgIGlmICghdmFsdWUuaXNWYWx1ZUlEKCkpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgcmF3IHRleHQgZm9yIGFsbCB0aGUgZ2Vu
ZXJpYyBmYW1pbHkgdHlwZXMsIHNpbmNlIEBmb250LWZhY2UgaXMgYSB3YXkgb2YgYWN0dWFsbHkK
KyAgICAvLyBkZWZpbmluZyB3aGF0IGZvbnQgdG8gdXNlIGZvciB0aG9zZSB0eXBlcy4KKyAgICBz
d2l0Y2ggKHZhbHVlLmdldFZhbHVlSUQoKSkgeworICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAg
ICAgICAgcmV0dXJuIHNlcmlmRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6Cisg
ICAgICAgIHJldHVybiBzYW5zU2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6
CisgICAgICAgIHJldHVybiBjdXJzaXZlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5
OgorICAgICAgICByZXR1cm4gZmFudGFzeUZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlTW9ub3Nw
YWNlOgorICAgICAgICByZXR1cm4gbW9ub3NwYWNlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVX
ZWJraXRQaWN0b2dyYXBoOgorICAgICAgICByZXR1cm4gcGljdG9ncmFwaEZhbWlseTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4geyB9OworICAgIH0KK30KKwogdm9pZCBDU1NGb250RmFj
ZVNldDo6YWRkKENTU0ZvbnRGYWNlJiBmYWNlKQogewogICAgIEFTU0VSVCghaGFzRmFjZShmYWNl
KSk7CiAKLSAgICBtX2ZhY2VzLmFwcGVuZChmYWNlKTsKICAgICBmYWNlLmFkZENsaWVudCgqdGhp
cyk7CisgICAgbV9jYWNoZS5jbGVhcigpOworCisgICAgaWYgKGZhY2UuY3NzQ29ubmVjdGlvbigp
KQorICAgICAgICBtX2ZhY2VzLmluc2VydChtX2ZhY2VzUGFydGl0aW9uSW5kZXgrKywgZmFjZSk7
CisgICAgZWxzZQorICAgICAgICBtX2ZhY2VzLmFwcGVuZChmYWNlKTsKKworICAgIGlmIChmYWNl
LmZhbWlsaWVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogKmZhY2UuZmFtaWxpZXMo
KSkgeworICAgICAgICAgICAgU3RyaW5nIGZhbWlseU5hbWUgPSBDU1NGb250RmFjZVNldDo6ZmFt
aWx5TmFtZUZyb21QcmltaXRpdmUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0
KCkpKTsKKyAgICAgICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2ZhY2VzTG9v
a3VwVGFibGUuYWRkKGZhbWlseU5hbWUsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PigpKTsKKyAg
ICAgICAgICAgIGF1dG8mIGZhbWlseUZvbnRGYWNlcyA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CisgICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMgZ3Jvd3Mgd2l0aG91dCBib3VuZCwg
ZXZlbnR1YWxseSBlbmNvcnBvcmF0aW5nIGV2ZXJ5IGZvbnQgaW5zdGFsbGVkIG9uIHRoZSBzeXN0
ZW0uCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBieSBkZXNpZ24uCisgICAgICAgICAgICAg
ICAgcmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseShmYW1pbHlOYW1lKTsKKyAgICAgICAg
ICAgICAgICBmYW1pbHlGb250RmFjZXMgPSB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZhbWlseUZvbnRGYWNlcy5hcHBlbmQoZmFjZSk7CisgICAgICAgIH0KKyAgICB9CisKICAg
ICBpZiAoZmFjZS5zdGF0dXMoKSA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpMb2FkaW5nIHx8IGZh
Y2Uuc3RhdHVzKCkgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6VGltZWRPdXQpCiAgICAgICAgIGlu
Y3JlbWVudEFjdGl2ZUNvdW50KCk7CiB9CiAKIHZvaWQgQ1NTRm9udEZhY2VTZXQ6OnJlbW92ZShj
b25zdCBDU1NGb250RmFjZSYgZmFjZSkKIHsKKyAgICBtX2NhY2hlLmNsZWFyKCk7CisKKyAgICBp
ZiAoZmFjZS5mYW1pbGllcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgaXRlbSA6ICpmYWNlLmZh
bWlsaWVzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBmYW1pbHlOYW1lID0gQ1NTRm9udEZhY2VT
ZXQ6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihp
dGVtLmdldCgpKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mYWNlc0xvb2t1cFRh
YmxlLmZpbmQoZmFtaWx5TmFtZSk7CisgICAgICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9m
YWNlc0xvb2t1cFRhYmxlLmVuZCgpKTsKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlcmF0b3ItPnZhbHVlLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZVtpXS5wdHIoKSA9
PSAmZmFjZSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS5yZW1vdmUoaSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFT
U0VSVChmb3VuZCk7CisgICAgICAgICAgICBpZiAoIWl0ZXJhdG9yLT52YWx1ZS5zaXplKCkpCisg
ICAgICAgICAgICAgICAgbV9mYWNlc0xvb2t1cFRhYmxlLnJlbW92ZShpdGVyYXRvcik7CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZmFjZXMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgaWYgKG1fZmFjZXNbaV0ucHRyKCkgPT0gJmZhY2UpIHsKKyAgICAg
ICAgICAgIGlmIChpIDwgbV9mYWNlc1BhcnRpdGlvbkluZGV4KQorICAgICAgICAgICAgICAgIC0t
bV9mYWNlc1BhcnRpdGlvbkluZGV4OwogICAgICAgICAgICAgbV9mYWNlc1tpXS0+cmVtb3ZlQ2xp
ZW50KCp0aGlzKTsKICAgICAgICAgICAgIG1fZmFjZXMucmVtb3ZlKGkpOwogICAgICAgICAgICAg
aWYgKGZhY2Uuc3RhdHVzKCkgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6TG9hZGluZyB8fCBmYWNl
LnN0YXR1cygpID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlRpbWVkT3V0KQpAQCAtOTcsMzAgKzIw
NSw0MyBAQCB2b2lkIENTU0ZvbnRGYWNlU2V0OjpyZW1vdmUoY29uc3QgQ1NTRm9udEZhY2UmIGZh
Y2UpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PFN0cmlu
Zz4gZXh0cmFjdEZhbWlsaWVzKGNvbnN0IENTU1ZhbHVlTGlzdCYgbGlzdCkKK3ZvaWQgQ1NTRm9u
dEZhY2VTZXQ6OmNsZWFyKCkKIHsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwotICAgIGZv
ciAoYXV0byYgZmFtaWx5IDogbGlzdCkgewotICAgICAgICBjb25zdCBDU1NQcmltaXRpdmVWYWx1
ZSYgcHJpbWl0aXZlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGZhbWlseS5nZXQoKSk7
Ci0gICAgICAgIGlmICghcHJpbWl0aXZlLmlzRm9udEZhbWlseSgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIHJlc3VsdC5hZGQocHJpbWl0aXZlLmZvbnRGYW1pbHkoKS5mYW1pbHlO
YW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX2ZhY2VzLmNsZWFyKCk7Cisg
ICAgbV9mYWNlc0xvb2t1cFRhYmxlLmNsZWFyKCk7CisgICAgbV9sb2NhbGx5SW5zdGFsbGVkRmFj
ZXNMb29rdXBUYWJsZS5jbGVhcigpOworICAgIG1fY2FjaGUuY2xlYXIoKTsKIH0KIAotc3RhdGlj
IGJvb2wgZmFtaWxpZXNJbnRlcnNlY3QoY29uc3QgQ1NTRm9udEZhY2UmIGZhY2UsIGNvbnN0IENT
U1ZhbHVlTGlzdCYgcmVxdWVzdCkKK0NTU0ZvbnRGYWNlJiBDU1NGb250RmFjZVNldDo6b3BlcmF0
b3JbXShzaXplX3QgaSkKIHsKLSAgICBpZiAoIWZhY2UuZmFtaWxpZXMoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIEFTU0VSVChpIDwgZmFjZUNvdW50KCkpOworICAgIHJldHVybiBtX2Zh
Y2VzW2ldOworfQogCi0gICAgSGFzaFNldDxTdHJpbmc+IGZhY2VGYW1pbGllcyA9IGV4dHJhY3RG
YW1pbGllcygqZmFjZS5mYW1pbGllcygpKTsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVxdWVzdEZh
bWlsaWVzID0gZXh0cmFjdEZhbWlsaWVzKHJlcXVlc3QpOwotICAgIGZvciAoYXV0byYgZmFtaWx5
MSA6IGZhY2VGYW1pbGllcykgewotICAgICAgICBpZiAocmVxdWVzdEZhbWlsaWVzLmNvbnRhaW5z
KGZhbWlseTEpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKK3N0YXRpYyBPcHRpb25hbDxGb250VHJhaXRzTWFzaz4gY29tcHV0ZUZvbnRUcmFpdHNN
YXNrKE11dGFibGVTdHlsZVByb3BlcnRpZXMmIHN0eWxlKQoreworICAgIFJlZlB0cjxDU1NWYWx1
ZT4gc3R5bGVWYWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250
U3R5bGUpLmdldCgpOworICAgIGlmICghc3R5bGVWYWx1ZSkKKyAgICAgICAgc3R5bGVWYWx1ZSA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Tm9ybWFsKS5wdHIoKTsKKworICAgIEZvbnRUcmFpdHNNYXNrIHN0eWxlTWFzazsKKyAgICBpZiAo
YXV0byBzdHlsZU1hc2tPcHRpb25hbCA9IENTU0ZvbnRGYWNlOjpjYWxjdWxhdGVTdHlsZSgqc3R5
bGVWYWx1ZSkpCisgICAgICAgIHN0eWxlTWFzayA9IHN0eWxlTWFza09wdGlvbmFsLnZhbHVlKCk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKworICAgIFJlZlB0cjxDU1NWYWx1
ZT4gd2VpZ2h0VmFsdWUgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9u
dFdlaWdodCkuZ2V0KCk7CisgICAgaWYgKCF3ZWlnaHRWYWx1ZSkKKyAgICAgICAgd2VpZ2h0VmFs
dWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vcm1hbCkucHRyKCk7CisKKyAgICBGb250VHJhaXRzTWFzayB3ZWlnaHRNYXNrOworICAg
IGlmIChhdXRvIHdlaWdodE1hc2tPcHRpb25hbCA9IENTU0ZvbnRGYWNlOjpjYWxjdWxhdGVXZWln
aHQoKndlaWdodFZhbHVlKSkKKyAgICAgICAgd2VpZ2h0TWFzayA9IHdlaWdodE1hc2tPcHRpb25h
bC52YWx1ZSgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdHls
ZU1hc2spIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdlaWdodE1hc2spKTsKIH0KIAogVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9udEZhY2U+PiBDU1NGb250RmFjZVNldDo6bWF0
Y2hpbmdGYWNlcyhjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtMTMyLDE0ICsyNTMsMTUgQEAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8Q1NTRm9udEZhY2U+PiBDU1NGb250RmFjZVNldDo6bWF0Y2hpbmdGYWNlcyhjb25zdAogICAg
ICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAg
IGJvb2wgZGVzaXJlZFN0eWxlSXNOb3JtYWwgPSB0cnVlOwotICAgIGlmIChSZWZQdHI8Q1NTVmFs
dWU+IGRlc2lyZWRTdHlsZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
Rm9udFN0eWxlKSkgewotICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZGVzaXJl
ZFN0eWxlKSkgewotICAgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICBkZXNpcmVkU3R5bGVJc05vcm1hbCA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZGVzaXJlZFN0eWxlKS5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb3JtYWw7CisKKyAgICBGb250VHJhaXRzTWFzayBmb250VHJhaXRzTWFzazsKKyAg
ICBpZiAoYXV0byBtYXNrT3B0aW9uYWwgPSBjb21wdXRlRm9udFRyYWl0c01hc2soc3R5bGUuZ2V0
KCkpKQorICAgICAgICBmb250VHJhaXRzTWFzayA9IG1hc2tPcHRpb25hbC52YWx1ZSgpOworICAg
IGVsc2UgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQorCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBmYW1pbHkgPSBzdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwogICAgIGlmICghaXM8Q1NTVmFsdWVM
aXN0PihmYW1pbHkuZ2V0KCkpKSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKQEAgLTE0Nywy
MyArMjY5LDIzIEBAIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRGYWNlPj4g
Q1NTRm9udEZhY2VTZXQ6Om1hdGNoaW5nRmFjZXMoY29uc3QKICAgICB9CiAgICAgQ1NTVmFsdWVM
aXN0JiBmYW1pbHlMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqZmFtaWx5KTsKIAotICAg
IC8vIE1hdGNoIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udEZhY2UoKQotICAgIGZvciAoYXV0byYg
ZmFjZSA6IG1fZmFjZXMpIHsKLSAgICAgICAgaWYgKCFmYW1pbGllc0ludGVyc2VjdChmYWNlLCBm
YW1pbHlMaXN0KSB8fCAoZGVzaXJlZFN0eWxlSXNOb3JtYWwgJiYgIShmYWNlLT50cmFpdHNNYXNr
KCkgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkpCisgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IHVu
aXF1ZUZhbWlsaWVzOworICAgIGZvciAoYXV0byYgZmFtaWx5IDogZmFtaWx5TGlzdCkgeworICAg
ICAgICBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KGZhbWlseS5nZXQoKSk7CisgICAgICAgIGlmICghcHJpbWl0aXZlLmlzRm9u
dEZhbWlseSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
ZmFjZS5nZXQoKSk7CisgICAgICAgIHVuaXF1ZUZhbWlsaWVzLmFkZChwcmltaXRpdmUuZm9udEZh
bWlseSgpLmZhbWlseU5hbWUpOwogICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQogCi12b2lk
IENTU0ZvbnRGYWNlU2V0Ojpsb2FkKGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0
ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBhdXRvIG1hdGNoaW5nRmFjZXMgPSB0aGlz
LT5tYXRjaGluZ0ZhY2VzKGZvbnQsIHRleHQsIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJl
dHVybjsKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IHVuaXF1ZUZhbWlsaWVzKSB7CisgICAgICAg
IENTU1NlZ21lbnRlZEZvbnRGYWNlKiBmYWNlcyA9IGdldEZvbnRGYWNlKGZvbnRUcmFpdHNNYXNr
LCBmYW1pbHkpOworICAgICAgICBpZiAoIWZhY2VzKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGZvciAoYXV0byYgY29uc3RpdHVlbnRGYWNlIDogZmFjZXMtPmNvbnN0aXR1ZW50RmFj
ZXMoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29uc3RpdHVlbnRGYWNlLmdldCgpKTsK
KyAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGZhY2UgOiBtYXRjaGluZ0ZhY2VzKQotICAgICAgICBm
YWNlLmdldCgpLmxvYWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBib29sIENTU0ZvbnRG
YWNlU2V0OjpjaGVjayhjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCkBAIC0xNzksNiArMzAxLDExOCBAQCBib29sIENTU0ZvbnRGYWNlU2V0
OjpjaGVjayhjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9u
Q29kZQogICAgIHJldHVybiB0cnVlOwogfQogCitjbGFzcyBGb250RmFjZUNvbXBhcmF0b3Igewor
cHVibGljOgorICAgIEZvbnRGYWNlQ29tcGFyYXRvcihGb250VHJhaXRzTWFzayBkZXNpcmVkVHJh
aXRzTWFza0ZvckNvbXBhcmlzb24pCisgICAgICAgIDogbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNv
bXBhcmlzb24oZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uKQorICAgIHsKKyAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9kZXNpcmVkVHJhaXRzTWFza0ZvckNv
bXBhcmlzb24gJiBGb250V2VpZ2h0TWFzayk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IENTU0ZvbnRGYWNlJiBmaXJzdCwgY29uc3QgQ1NTRm9udEZhY2UmIHNlY29uZCkKKyAg
ICB7CisgICAgICAgIEZvbnRUcmFpdHNNYXNrIGZpcnN0VHJhaXRzTWFzayA9IGZpcnN0LnRyYWl0
c01hc2soKTsKKyAgICAgICAgRm9udFRyYWl0c01hc2sgc2Vjb25kVHJhaXRzTWFzayA9IHNlY29u
ZC50cmFpdHNNYXNrKCk7CisKKyAgICAgICAgYm9vbCBmaXJzdEhhc0Rlc2lyZWRTdHlsZSA9IGZp
cnN0VHJhaXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0
eWxlTWFzazsKKyAgICAgICAgYm9vbCBzZWNvbmRIYXNEZXNpcmVkU3R5bGUgPSBzZWNvbmRUcmFp
dHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVNYXNr
OworCisgICAgICAgIGlmIChmaXJzdEhhc0Rlc2lyZWRTdHlsZSAhPSBzZWNvbmRIYXNEZXNpcmVk
U3R5bGUpCisgICAgICAgICAgICByZXR1cm4gZmlyc3RIYXNEZXNpcmVkU3R5bGU7CisKKyAgICAg
ICAgaWYgKChtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRTdHlsZUl0YWxp
Y01hc2spICYmICFmaXJzdC5pc0xvY2FsRmFsbGJhY2soKSAmJiAhc2Vjb25kLmlzTG9jYWxGYWxs
YmFjaygpKSB7CisgICAgICAgICAgICAvLyBQcmVmZXIgYSBmb250IHRoYXQgaGFzIGluZGljYXRl
ZCB0aGF0IGl0IGNhbiBvbmx5IHN1cHBvcnQgaXRhbGljcyB0byBhIGZvbnQgdGhhdCBjbGFpbXMg
dG8gc3VwcG9ydAorICAgICAgICAgICAgLy8gYWxsIHN0eWxlcy4gVGhlIHNwZWNpYWxpemVkIGZv
bnQgaXMgbW9yZSBsaWtlbHkgdG8gYmUgdGhlIG9uZSB0aGUgYXV0aG9yIHdhbnRzIHVzZWQuCisg
ICAgICAgICAgICBib29sIGZpcnN0UmVxdWlyZXNJdGFsaWNzID0gKGZpcnN0VHJhaXRzTWFzayAm
IEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEoZmlyc3RUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9y
bWFsTWFzayk7CisgICAgICAgICAgICBib29sIHNlY29uZFJlcXVpcmVzSXRhbGljcyA9IChzZWNv
bmRUcmFpdHNNYXNrICYgRm9udFN0eWxlSXRhbGljTWFzaykgJiYgIShzZWNvbmRUcmFpdHNNYXNr
ICYgRm9udFN0eWxlTm9ybWFsTWFzayk7CisgICAgICAgICAgICBpZiAoZmlyc3RSZXF1aXJlc0l0
YWxpY3MgIT0gc2Vjb25kUmVxdWlyZXNJdGFsaWNzKQorICAgICAgICAgICAgICAgIHJldHVybiBm
aXJzdFJlcXVpcmVzSXRhbGljczsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZWNvbmRUcmFp
dHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFz
aykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGZpcnN0VHJhaXRzTWFz
ayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFdlaWdodE1hc2spCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui8yMDExL1dELWNzczMtZm9udHMtMjAxMTEwMDQvI2ZvbnQtbWF0Y2hpbmctYWxnb3JpdGhtIHNh
eXMgOgorICAgICAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIGxlc3MgdGhhbiA0
MDAsIHdlaWdodHMgYmVsb3cgdGhlIGRlc2lyZWQgd2VpZ2h0IGFyZSBjaGVja2VkIGluIGRlc2Nl
bmRpbmcgb3JkZXIgZm9sbG93ZWQgYnkgd2VpZ2h0cyBhYm92ZSB0aGUgZGVzaXJlZCB3ZWlnaHQg
aW4gYXNjZW5kaW5nIG9yZGVyIHVudGlsIGEgbWF0Y2ggaXMgZm91bmQuCisgICAgICAgIC8vICAg
LSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgZ3JlYXRlciB0aGFuIDUwMCwgd2VpZ2h0cyBhYm92
ZSB0aGUgZGVzaXJlZCB3ZWlnaHQgYXJlIGNoZWNrZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGZvbGxv
d2VkIGJ5IHdlaWdodHMgYmVsb3cgdGhlIGRlc2lyZWQgd2VpZ2h0IGluIGRlc2NlbmRpbmcgb3Jk
ZXIgdW50aWwgYSBtYXRjaCBpcyBmb3VuZC4KKyAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVk
IHdlaWdodCBpcyA0MDAsIDUwMCBpcyBjaGVja2VkIGZpcnN0IGFuZCB0aGVuIHRoZSBydWxlIGZv
ciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFuIDQwMCBpcyB1c2VkLgorICAgICAgICAvLyAgIC0g
SWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIDUwMCwgNDAwIGlzIGNoZWNrZWQgZmlyc3QgYW5kIHRo
ZW4gdGhlIHJ1bGUgZm9yIGRlc2lyZWQgd2VpZ2h0cyBsZXNzIHRoYW4gNDAwIGlzIHVzZWQuCisK
KyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZhbGxiYWNrUnVsZVNldHMgPSA5OworICAg
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcnVsZXNQZXJTZXQgPSA4OworICAgICAgICBzdGF0
aWMgY29uc3QgRm9udFRyYWl0c01hc2sgd2VpZ2h0RmFsbGJhY2tSdWxlU2V0c1tmYWxsYmFja1J1
bGVTZXRzXVtydWxlc1BlclNldF0gPSB7CisgICAgICAgICAgICB7IEZvbnRXZWlnaHQyMDBNYXNr
LCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNr
LCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNr
LCBGb250V2VpZ2h0OTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0MTAwTWFzaywg
Rm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywg
Rm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywg
Rm9udFdlaWdodDkwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDIwME1hc2ssIEZv
bnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZv
bnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZv
bnRXZWlnaHQ5MDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250
V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBGb250
V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250
V2VpZ2h0OTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdl
aWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdl
aWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdl
aWdodDkwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWln
aHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWln
aHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWln
aHQxMDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0
OTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0
NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0
MTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0OTAwTWFzaywgRm9udFdlaWdodDcw
ME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQw
ME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEw
ME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ3MDBN
YXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBN
YXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBN
YXNrIH0KKyAgICAgICAgfTsKKworICAgICAgICB1bnNpZ25lZCBydWxlU2V0SW5kZXggPSAwOwor
ICAgICAgICBmb3IgKDsgIShtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmICgxIDw8
IChGb250V2VpZ2h0MTAwQml0ICsgcnVsZVNldEluZGV4KSkpOyBydWxlU2V0SW5kZXgrKykgeyB9
CisKKyAgICAgICAgY29uc3QgRm9udFRyYWl0c01hc2sqIHdlaWdodEZhbGxiYWNrUnVsZSA9IHdl
aWdodEZhbGxiYWNrUnVsZVNldHNbcnVsZVNldEluZGV4XTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJ1bGVzUGVyU2V0OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzZWNvbmRU
cmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tSdWxlW2ldKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGlmIChmaXJzdFRyYWl0c01hc2sgJiB3ZWlnaHRGYWxsYmFj
a1J1bGVbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCitwcml2YXRlOgorICAgIEZvbnRUcmFpdHNNYXNr
IG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uOworfTsKKworQ1NTU2VnbWVudGVkRm9u
dEZhY2UqIENTU0ZvbnRGYWNlU2V0OjpnZXRGb250RmFjZShGb250VHJhaXRzTWFzayB0cmFpdHNN
YXNrLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0g
bV9mYWNlc0xvb2t1cFRhYmxlLmZpbmQoZmFtaWx5KTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9m
YWNlc0xvb2t1cFRhYmxlLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRv
JiBmYW1pbHlGb250RmFjZXMgPSBpdGVyYXRvci0+dmFsdWU7CisKKyAgICBhdXRvJiBzZWdtZW50
ZWRGb250RmFjZUNhY2hlID0gbV9jYWNoZS5hZGQoZmFtaWx5LCBIYXNoTWFwPHVuc2lnbmVkLCBz
dGQ6OnVuaXF1ZV9wdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+PigpKS5pdGVyYXRvci0+dmFsdWU7
CisKKyAgICBhdXRvJiBmYWNlID0gc2VnbWVudGVkRm9udEZhY2VDYWNoZS5hZGQodHJhaXRzTWFz
aywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGlmIChmYWNlKQorICAgICAgICByZXR1
cm4gZmFjZS5nZXQoKTsKKworICAgIGZhY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1NlZ21lbnRl
ZEZvbnRGYWNlPigpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9u
dEZhY2U+LCAzMj4gY2FuZGlkYXRlRm9udEZhY2VzOworICAgIGZvciAoaW50IGkgPSBmYW1pbHlG
b250RmFjZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgQ1NTRm9udEZhY2Um
IGNhbmRpZGF0ZSA9IGZhbWlseUZvbnRGYWNlc1tpXTsKKyAgICAgICAgdW5zaWduZWQgY2FuZGlk
YXRlVHJhaXRzTWFzayA9IGNhbmRpZGF0ZS50cmFpdHNNYXNrKCk7CisgICAgICAgIGlmICgodHJh
aXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAm
IEZvbnRTdHlsZU5vcm1hbE1hc2spKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNh
bmRpZGF0ZUZvbnRGYWNlcy5hcHBlbmQoY2FuZGlkYXRlKTsKKyAgICB9CisKKyAgICBhdXRvIGxv
Y2FsSXRlcmF0b3IgPSBtX2xvY2FsbHlJbnN0YWxsZWRGYWNlc0xvb2t1cFRhYmxlLmZpbmQoZmFt
aWx5KTsKKyAgICBpZiAobG9jYWxJdGVyYXRvciAhPSBtX2xvY2FsbHlJbnN0YWxsZWRGYWNlc0xv
b2t1cFRhYmxlLmVuZCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbG9jYWxJ
dGVyYXRvci0+dmFsdWUpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRyYWl0c01h
c2sgPSBjYW5kaWRhdGUtPnRyYWl0c01hc2soKTsKKyAgICAgICAgICAgIGlmICgodHJhaXRzTWFz
ayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAmIEZvbnRT
dHlsZU5vcm1hbE1hc2spKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
Y2FuZGlkYXRlRm9udEZhY2VzLmFwcGVuZChjYW5kaWRhdGUpOworICAgICAgICB9CisgICAgfQor
CisgICAgc3RkOjpzdGFibGVfc29ydChjYW5kaWRhdGVGb250RmFjZXMuYmVnaW4oKSwgY2FuZGlk
YXRlRm9udEZhY2VzLmVuZCgpLCBGb250RmFjZUNvbXBhcmF0b3IodHJhaXRzTWFzaykpOworICAg
IGZvciAoYXV0byYgY2FuZGlkYXRlIDogY2FuZGlkYXRlRm9udEZhY2VzKQorICAgICAgICBmYWNl
LT5hcHBlbmRGb250RmFjZShjYW5kaWRhdGUuZ2V0KCkpOworCisgICAgcmV0dXJuIGZhY2UuZ2V0
KCk7Cit9CisKIHZvaWQgQ1NTRm9udEZhY2VTZXQ6OnN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYg
ZmFjZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBvbGRTdGF0ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBu
ZXdTdGF0ZSkKIHsKICAgICBBU1NFUlQoaGFzRmFjZShmYWNlKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZVNldC5oCmluZGV4IDY2OTQ3ZDc4MWI4YzgxZDg0MjFmZTA5MmExYjZhY2JlYTQyMzRi
OWYuLjQwMWI2MzZlZDc0ZWIwYmFkNjgxMWE1ZjRjZTJkMzBlYzRhODQ1YWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNldC5oCkBAIC0yNywxOCArMjcsMjEgQEAKICNkZWZpbmUgQ1NTRm9u
dEZhY2VTZXRfaAogCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2UuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTUHJpbWl0aXZlVmFs
dWU7CiBjbGFzcyBGb250RmFjZVNldDsKIAogY2xhc3MgQ1NTRm9udEZhY2VTZXRDbGllbnQgewog
cHVibGljOgogICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlU2V0Q2xpZW50KCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGZhY2VGaW5pc2hlZChDU1NGb250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZExvYWRpbmcoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGNvbXBsZXRlZExvYWRpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZhY2VGaW5p
c2hlZChDU1NGb250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMpIHsgfTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RhcnRlZExvYWRpbmcoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGNvbXBsZXRlZExv
YWRpbmcoKSB7IH07CiB9OwogCiBjbGFzcyBDU1NGb250RmFjZVNldCBmaW5hbCA6IHB1YmxpYyBD
U1NGb250RmFjZTo6Q2xpZW50IHsKQEAgLTUwLDExICs1MywxMyBAQCBwdWJsaWM6CiAgICAgc2l6
ZV90IGZhY2VDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFjZXMuc2l6ZSgpOyB9CiAgICAgdm9p
ZCBhZGQoQ1NTRm9udEZhY2UmKTsKICAgICB2b2lkIHJlbW92ZShjb25zdCBDU1NGb250RmFjZSYp
OwotICAgIGNvbnN0IENTU0ZvbnRGYWNlJiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJl
dHVybiBtX2ZhY2VzW2ldOyB9CisgICAgdm9pZCBjbGVhcigpOworICAgIENTU0ZvbnRGYWNlJiBv
cGVyYXRvcltdKHNpemVfdCBpKTsKIAotICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIGZvbnQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgY2hlY2soY29u
c3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKIAor
ICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBnZXRGb250RmFjZShGb250VHJhaXRzTWFzaywgY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOworCiAgICAgZW51bSBjbGFzcyBTdGF0dXMgewogICAg
ICAgICBMb2FkaW5nLAogICAgICAgICBMb2FkZWQKQEAgLTY5LDcgKzc0LDE2IEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIHZvaWQgc3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiwgQ1NTRm9udEZh
Y2U6OlN0YXR1cyBvbGRTdGF0ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0ZSkgb3ZlcnJp
ZGU7CiAKKyAgICB2b2lkIHJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoY29uc3QgU3Ry
aW5nJik7CisKKyAgICBzdGF0aWMgU3RyaW5nIGZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGNvbnN0
IENTU1ByaW1pdGl2ZVZhbHVlJik7CisKKyAgICAvLyBtX2ZhY2VzIHNob3VsZCBob2xkIGFsbCB0
aGUgc2FtZSBmb250cyBhcyB0aGUgb25lcyBpbnNpZGUgaW5zaWRlIG1fZmFjZXNMb29rdXBUYWJs
ZS4KICAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4gbV9mYWNlczsKKyAgICBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+
IG1fZmFjZXNMb29rdXBUYWJsZTsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxDU1NG
b250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1fbG9jYWxseUluc3RhbGxlZEZh
Y2VzTG9va3VwVGFibGU7CisgICAgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8dW5zaWduZWQsIHN0
ZDo6dW5pcXVlX3B0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2
ZUhhc2g+IG1fY2FjaGU7CisgICAgc2l6ZV90IG1fZmFjZXNQYXJ0aXRpb25JbmRleCB7IDAgfTsg
Ly8gQWxsIGVudHJpZXMgaW4gbV9mYWNlcyBiZWZvcmUgdGhpcyBpbmRleCBhcmUgQ1NTLWNvbm5l
Y3RlZC4KICAgICBTdGF0dXMgbV9zdGF0dXMgeyBTdGF0dXM6OkxvYWRlZCB9OwogICAgIENTU0Zv
bnRGYWNlU2V0Q2xpZW50JiBtX2NsaWVudDsKICAgICB1bnNpZ25lZCBtX2FjdGl2ZUNvdW50IHsg
MCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAppbmRleCAxZTI5YjU3ZmZk
ZmUzODA3NDZlNjcyMzIzMGQ1NTM0OWE1OWZiOTlmLi5mNjIwMjVkNjkwMjc4MmJkMzU0Mjk0ZmZh
MjBlODRjZjE2NWMyZDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaApA
QCAtNDUsNiArNDUsOCBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBDU1NGb250RmFjZVNv
dXJjZSBmaW5hbCA6IHB1YmxpYyBDYWNoZWRGb250Q2xpZW50IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBDU1NGb250RmFjZVNvdXJjZShDU1NGb250RmFjZSYg
b3duZXIsIGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZU9yVVJJLCBDYWNoZWRGb250KiA9IG51bGxw
dHIsIFNWR0ZvbnRGYWNlRWxlbWVudCogPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIH5DU1NGb250
RmFjZVNvdXJjZSgpOwogCiAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgPT4gU3VjY2Vzcwog
ICAgIC8vICAgICAgICAgICAgICAgICAgICAvLwpAQCAtNTcsMTAgKzU5LDYgQEAgcHVibGljOgog
ICAgICAgICBTdWNjZXNzLAogICAgICAgICBGYWlsdXJlCiAgICAgfTsKLQotICAgIENTU0ZvbnRG
YWNlU291cmNlKENTU0ZvbnRGYWNlJiBvd25lciwgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lT3JV
UkksIENhY2hlZEZvbnQqID0gbnVsbHB0ciwgU1ZHRm9udEZhY2VFbGVtZW50KiA9IG51bGxwdHIp
OwotICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlU291cmNlKCk7Ci0KICAgICBTdGF0dXMgc3RhdHVz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5TmFtZU9yVVJJKCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbHlOYW1lT3JVUkk7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggMmM4YzJjNmQzNjQxYTE4MjVk
ZGVhZmFmOGZkYWM1MWVkZDUxMzNmZC4uODU1OGEzYzIxZmY1ZWMyYWY4MmNkMDcxNGFiOTAwZThj
NTY2ODU4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTMxLDcg
KzMxLDYgQEAKICNpbmNsdWRlICJDU1NGb250RmFjZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNl
UnVsZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCi0jaW5jbHVkZSAiQ1NTRm9u
dEZhY2VTcmNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYW1pbHkuaCIKICNpbmNsdWRlICJD
U1NGb250RmVhdHVyZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKQEAg
LTY1LDYgKzY0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGZvbnRTZWxlY3RvcklkOwogCiBDU1NGb250
U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3RvcihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX2Rv
Y3VtZW50KCZkb2N1bWVudCkKKyAgICAsIG1fZm9udEZhY2VTZXQoKnRoaXMpCiAgICAgLCBtX2Jl
Z2luTG9hZGluZ1RpbWVyKCp0aGlzLCAmQ1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRUaW1lckZp
cmVkKQogICAgICwgbV91bmlxdWVJZCgrK2ZvbnRTZWxlY3RvcklkKQogICAgICwgbV92ZXJzaW9u
KDApCkBAIC04NSw4OSArODUsMTAgQEAgQ1NTRm9udFNlbGVjdG9yOjp+Q1NTRm9udFNlbGVjdG9y
KCkKIAogYm9vbCBDU1NGb250U2VsZWN0b3I6OmlzRW1wdHkoKSBjb25zdAogewotICAgIHJldHVy
biBtX2ZvbnRzLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIW1fZm9udEZhY2VTZXQuZmFjZUNvdW50
KCk7CiB9CiAKLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjphcHBlbmRTb3VyY2VzKENTU0ZvbnRGYWNl
JiBmb250RmFjZSwgQ1NTVmFsdWVMaXN0JiBzcmNMaXN0LCBEb2N1bWVudCogZG9jdW1lbnQsIGJv
b2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSkKLXsKLSAgICBmb3Ig
KGF1dG8mIHNyYyA6IHNyY0xpc3QpIHsKLSAgICAgICAgLy8gQW4gaXRlbSBpbiB0aGUgbGlzdCBl
aXRoZXIgc3BlY2lmaWVzIGEgc3RyaW5nIChsb2NhbCBmb250IG5hbWUpIG9yIGEgVVJMIChyZW1v
dGUgZm9udCB0byBkb3dubG9hZCkuCi0gICAgICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUmIGl0ZW0g
PSBkb3duY2FzdDxDU1NGb250RmFjZVNyY1ZhbHVlPihzcmMuZ2V0KCkpOwotICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q1NTRm9udEZhY2VTb3VyY2U+IHNvdXJjZTsKLSAgICAgICAgU1ZHRm9udEZh
Y2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSBudWxscHRyOwotICAgICAgICBib29sIGZvdW5k
U1ZHRm9udCA9IGZhbHNlOwotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgZm91bmRT
VkdGb250ID0gaXRlbS5pc1NWR0ZvbnRGYWNlU3JjKCkgfHwgaXRlbS5zdmdGb250RmFjZUVsZW1l
bnQoKTsKLSAgICAgICAgZm9udEZhY2VFbGVtZW50ID0gaXRlbS5zdmdGb250RmFjZUVsZW1lbnQo
KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWl0ZW0uaXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCA/IGRvY3VtZW50LT5zZXR0aW5ncygpIDogbnVs
bHB0cjsKLSAgICAgICAgICAgIGJvb2wgYWxsb3dEb3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8
fCAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmRvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgp
KTsKLSAgICAgICAgICAgIGlmIChhbGxvd0Rvd25sb2FkaW5nICYmIGl0ZW0uaXNTdXBwb3J0ZWRG
b3JtYXQoKSAmJiBkb2N1bWVudCkgewotICAgICAgICAgICAgICAgIGlmIChDYWNoZWRGb250KiBj
YWNoZWRGb250ID0gaXRlbS5jYWNoZWRGb250KGRvY3VtZW50LCBmb3VuZFNWR0ZvbnQsIGlzSW5p
dGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpKQotICAgICAgICAgICAgICAgICAg
ICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmb250RmFjZSwg
aXRlbS5yZXNvdXJjZSgpLCBjYWNoZWRGb250KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291
cmNlPihmb250RmFjZSwgaXRlbS5yZXNvdXJjZSgpLCBudWxscHRyLCBmb250RmFjZUVsZW1lbnQp
OwotCi0gICAgICAgIGlmIChzb3VyY2UpCi0gICAgICAgICAgICBmb250RmFjZS5hZG9wdFNvdXJj
ZShXVEZNb3ZlKHNvdXJjZSkpOwotICAgIH0KLSAgICBmb250RmFjZS5zb3VyY2VzUG9wdWxhdGVk
KCk7Ci19Ci0KLVN0cmluZyBDU1NGb250U2VsZWN0b3I6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZl
KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNGb250
RmFtaWx5KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5mb250RmFtaWx5KCkuZmFtaWx5TmFtZTsK
LSAgICBpZiAoIXZhbHVlLmlzVmFsdWVJRCgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
Ly8gV2UgbmVlZCB0byB1c2UgdGhlIHJhdyB0ZXh0IGZvciBhbGwgdGhlIGdlbmVyaWMgZmFtaWx5
IHR5cGVzLCBzaW5jZSBAZm9udC1mYWNlIGlzIGEgd2F5IG9mIGFjdHVhbGx5Ci0gICAgLy8gZGVm
aW5pbmcgd2hhdCBmb250IHRvIHVzZSBmb3IgdGhvc2UgdHlwZXMuCi0gICAgc3dpdGNoICh2YWx1
ZS5nZXRWYWx1ZUlEKCkpIHsKLSAgICBjYXNlIENTU1ZhbHVlU2VyaWY6Ci0gICAgICAgIHJldHVy
biBzZXJpZkZhbWlseTsKLSAgICBjYXNlIENTU1ZhbHVlU2Fuc1NlcmlmOgotICAgICAgICByZXR1
cm4gc2Fuc1NlcmlmRmFtaWx5OwotICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgotICAgICAgICBy
ZXR1cm4gY3Vyc2l2ZUZhbWlseTsKLSAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKLSAgICAgICAg
cmV0dXJuIGZhbnRhc3lGYW1pbHk7Ci0gICAgY2FzZSBDU1NWYWx1ZU1vbm9zcGFjZToKLSAgICAg
ICAgcmV0dXJuIG1vbm9zcGFjZUZhbWlseTsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9n
cmFwaDoKLSAgICAgICAgcmV0dXJuIHBpY3RvZ3JhcGhGYW1pbHk7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjpyZWdp
c3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKLXsK
LSAgICBBU1NFUlQoIW1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5jb250YWlucyhmYW1pbHlO
YW1lKSk7Ci0KLSAgICBWZWN0b3I8Rm9udFRyYWl0c01hc2s+IHRyYWl0c01hc2tzID0gRm9udENh
Y2hlOjpzaW5nbGV0b24oKS5nZXRUcmFpdHNJbkZhbWlseShmYW1pbHlOYW1lKTsKLSAgICBpZiAo
dHJhaXRzTWFza3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8UmVm
PENTU0ZvbnRGYWNlPj4gZmFjZXMgPSB7IH07Ci0gICAgZm9yIChhdXRvIG1hc2sgOiB0cmFpdHNN
YXNrcykgewotICAgICAgICBSZWY8Q1NTRm9udEZhY2U+IGZhY2UgPSBDU1NGb250RmFjZTo6Y3Jl
YXRlKCp0aGlzLCBudWxscHRyLCB0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IGZhbWlseUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVk
KCk7Ci0gICAgICAgIGZhbWlseUxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKSk7Ci0gICAgICAgIGZhY2UtPnNldEZh
bWlsaWVzKCpmYW1pbHlMaXN0KTsKLSAgICAgICAgZmFjZS0+c2V0VHJhaXRzTWFzayhtYXNrKTsK
LSAgICAgICAgZmFjZS0+YWRvcHRTb3VyY2Uoc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNv
dXJjZT4oZmFjZS5nZXQoKSwgZmFtaWx5TmFtZSkpOwotICAgICAgICBBU1NFUlQoIWZhY2UtPmFs
bFNvdXJjZXNGYWlsZWQoKSk7Ci0gICAgICAgIGZhY2VzLmFwcGVuZChXVEZNb3ZlKGZhY2UpKTsK
LSAgICB9Ci0gICAgbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBX
VEZNb3ZlKGZhY2VzKSk7Ci19Ci0KLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1
bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwgYm9vbCBpc0luaXRpYXRp
bmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQordm9pZCBDU1NGb250U2VsZWN0b3I6OmFk
ZEZvbnRGYWNlUnVsZShTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxlLCBib29sIGlzSW5p
dGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpCiB7CiAgICAgY29uc3QgU3R5bGVQ
cm9wZXJ0aWVzJiBzdHlsZSA9IGZvbnRGYWNlUnVsZS5wcm9wZXJ0aWVzKCk7CiAgICAgUmVmUHRy
PENTU1ZhbHVlPiBmb250RmFtaWx5ID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eUZvbnRGYW1pbHkpOwpAQCAtMjAxLDcgKzEyMiw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9y
OjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwg
Ym9vCiAgICAgaWYgKCFzcmNMaXN0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWY8Q1NTRm9udEZhY2U+IGZvbnRGYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZSgqdGhpcyk7Cisg
ICAgUmVmPENTU0ZvbnRGYWNlPiBmb250RmFjZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUodGhpcywg
JmZvbnRGYWNlUnVsZSk7CiAKICAgICBpZiAoIWZvbnRGYWNlLT5zZXRGYW1pbGllcygqZm9udEZh
bWlseSkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyNiwyNiArMTQ3LDExIEBAIHZvaWQgQ1NTRm9u
dFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRG
YWNlUnVsZSwgYm9vCiAgICAgaWYgKGZlYXR1cmVTZXR0aW5ncyAmJiAhZm9udEZhY2UtPnNldEZl
YXR1cmVTZXR0aW5ncygqZmVhdHVyZVNldHRpbmdzKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXBwZW5kU291cmNlcyhmb250RmFjZSwgc3JjTGlzdCwgbV9kb2N1bWVudCwgaXNJbml0aWF0aW5n
RWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CisgICAgQ1NTRm9udEZhY2U6OmFwcGVuZFNv
dXJjZXMoZm9udEZhY2UsIHNyY0xpc3QsIG1fZG9jdW1lbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJ
blVzZXJBZ2VudFNoYWRvd1RyZWUpOwogICAgIGlmIChmb250RmFjZS0+YWxsU291cmNlc0ZhaWxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBmYW1pbHlMaXN0
KSB7Ci0gICAgICAgIFN0cmluZyBmYW1pbHlOYW1lID0gZmFtaWx5TmFtZUZyb21QcmltaXRpdmUo
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpKTsKLSAgICAgICAgaWYgKGZh
bWlseU5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBtX2ZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgVmVjdG9yPFJlZjxDU1NG
b250RmFjZT4+KCkpOwotICAgICAgICBhdXRvJiBmYW1pbHlGb250RmFjZXMgPSBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOwotICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAg
ICAgICAgICAgIHJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoZmFtaWx5TmFtZSk7Ci0g
ICAgICAgICAgICBmYW1pbHlGb250RmFjZXMgPSB7IH07Ci0gICAgICAgIH0KLQotICAgICAgICBm
YW1pbHlGb250RmFjZXMuYXBwZW5kKGZvbnRGYWNlLmNvcHlSZWYoKSk7Ci0gICAgICAgIAotICAg
ICAgICArK21fdmVyc2lvbjsKLSAgICB9CisgICAgbV9mb250RmFjZVNldC5hZGQoZm9udEZhY2Uu
Z2V0KCkpOwogfQogCiB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6cmVnaXN0ZXJGb3JJbnZhbGlkYXRp
b25DYWxsYmFja3MoRm9udFNlbGVjdG9yQ2xpZW50JiBjbGllbnQpCkBAIC0zMDQsODQgKzIxMCwx
MyBAQCBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiByZXNvbHZlR2VuZXJpY0ZhbWlseShEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEZvbnREZQogICAgIHJldHVybiBmYW1pbHlOYW1lOwogfQog
Ci1jbGFzcyBGb250RmFjZUNvbXBhcmF0b3IgewotcHVibGljOgotICAgIEZvbnRGYWNlQ29tcGFy
YXRvcihGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24pCi0gICAg
ICAgIDogbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24oZGVzaXJlZFRyYWl0c01hc2tG
b3JDb21wYXJpc29uKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04obV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFzayk7
Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENTU0ZvbnRGYWNlJiBmaXJzdCwg
Y29uc3QgQ1NTRm9udEZhY2UmIHNlY29uZCkKLSAgICB7Ci0gICAgICAgIEZvbnRUcmFpdHNNYXNr
IGZpcnN0VHJhaXRzTWFzayA9IGZpcnN0LnRyYWl0c01hc2soKTsKLSAgICAgICAgRm9udFRyYWl0
c01hc2sgc2Vjb25kVHJhaXRzTWFzayA9IHNlY29uZC50cmFpdHNNYXNrKCk7Ci0KLSAgICAgICAg
Ym9vbCBmaXJzdEhhc0Rlc2lyZWRTdHlsZSA9IGZpcnN0VHJhaXRzTWFzayAmIG1fZGVzaXJlZFRy
YWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFzazsKLSAgICAgICAgYm9vbCBzZWNv
bmRIYXNEZXNpcmVkU3R5bGUgPSBzZWNvbmRUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFz
a0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVNYXNrOwotCi0gICAgICAgIGlmIChmaXJzdEhhc0Rl
c2lyZWRTdHlsZSAhPSBzZWNvbmRIYXNEZXNpcmVkU3R5bGUpCi0gICAgICAgICAgICByZXR1cm4g
Zmlyc3RIYXNEZXNpcmVkU3R5bGU7Ci0KLSAgICAgICAgaWYgKChtX2Rlc2lyZWRUcmFpdHNNYXNr
Rm9yQ29tcGFyaXNvbiAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICFmaXJzdC5pc0xvY2FsRmFs
bGJhY2soKSAmJiAhc2Vjb25kLmlzTG9jYWxGYWxsYmFjaygpKSB7Ci0gICAgICAgICAgICAvLyBQ
cmVmZXIgYSBmb250IHRoYXQgaGFzIGluZGljYXRlZCB0aGF0IGl0IGNhbiBvbmx5IHN1cHBvcnQg
aXRhbGljcyB0byBhIGZvbnQgdGhhdCBjbGFpbXMgdG8gc3VwcG9ydAotICAgICAgICAgICAgLy8g
YWxsIHN0eWxlcy4gVGhlIHNwZWNpYWxpemVkIGZvbnQgaXMgbW9yZSBsaWtlbHkgdG8gYmUgdGhl
IG9uZSB0aGUgYXV0aG9yIHdhbnRzIHVzZWQuCi0gICAgICAgICAgICBib29sIGZpcnN0UmVxdWly
ZXNJdGFsaWNzID0gKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEo
Zmlyc3RUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzayk7Ci0gICAgICAgICAgICBib29s
IHNlY29uZFJlcXVpcmVzSXRhbGljcyA9IChzZWNvbmRUcmFpdHNNYXNrICYgRm9udFN0eWxlSXRh
bGljTWFzaykgJiYgIShzZWNvbmRUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzayk7Ci0g
ICAgICAgICAgICBpZiAoZmlyc3RSZXF1aXJlc0l0YWxpY3MgIT0gc2Vjb25kUmVxdWlyZXNJdGFs
aWNzKQotICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFJlcXVpcmVzSXRhbGljczsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChzZWNvbmRUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFz
a0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFzaykKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKGZpcnN0VHJhaXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JD
b21wYXJpc29uICYgRm9udFdlaWdodE1hc2spCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWNzczMtZm9udHMtMjAxMTEw
MDQvI2ZvbnQtbWF0Y2hpbmctYWxnb3JpdGhtIHNheXMgOgotICAgICAgICAvLyAgIC0gSWYgdGhl
IGRlc2lyZWQgd2VpZ2h0IGlzIGxlc3MgdGhhbiA0MDAsIHdlaWdodHMgYmVsb3cgdGhlIGRlc2ly
ZWQgd2VpZ2h0IGFyZSBjaGVja2VkIGluIGRlc2NlbmRpbmcgb3JkZXIgZm9sbG93ZWQgYnkgd2Vp
Z2h0cyBhYm92ZSB0aGUgZGVzaXJlZCB3ZWlnaHQgaW4gYXNjZW5kaW5nIG9yZGVyIHVudGlsIGEg
bWF0Y2ggaXMgZm91bmQuCi0gICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMg
Z3JlYXRlciB0aGFuIDUwMCwgd2VpZ2h0cyBhYm92ZSB0aGUgZGVzaXJlZCB3ZWlnaHQgYXJlIGNo
ZWNrZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGZvbGxvd2VkIGJ5IHdlaWdodHMgYmVsb3cgdGhlIGRl
c2lyZWQgd2VpZ2h0IGluIGRlc2NlbmRpbmcgb3JkZXIgdW50aWwgYSBtYXRjaCBpcyBmb3VuZC4K
LSAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyA0MDAsIDUwMCBpcyBjaGVj
a2VkIGZpcnN0IGFuZCB0aGVuIHRoZSBydWxlIGZvciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFu
IDQwMCBpcyB1c2VkLgotICAgICAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIDUw
MCwgNDAwIGlzIGNoZWNrZWQgZmlyc3QgYW5kIHRoZW4gdGhlIHJ1bGUgZm9yIGRlc2lyZWQgd2Vp
Z2h0cyBsZXNzIHRoYW4gNDAwIGlzIHVzZWQuCi0KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGZhbGxiYWNrUnVsZVNldHMgPSA5OwotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
cnVsZXNQZXJTZXQgPSA4OwotICAgICAgICBzdGF0aWMgY29uc3QgRm9udFRyYWl0c01hc2sgd2Vp
Z2h0RmFsbGJhY2tSdWxlU2V0c1tmYWxsYmFja1J1bGVTZXRzXVtydWxlc1BlclNldF0gPSB7Ci0g
ICAgICAgICAgICB7IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdl
aWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdl
aWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAotICAg
ICAgICAgICAgeyBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWln
aHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWln
aHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAg
ICAgICAgIHsgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0
NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0
NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAg
ICAgICB7IEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIw
ME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcw
ME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAotICAgICAgICAg
ICAgeyBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBN
YXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBN
YXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAgICAgICAg
IHsgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFz
aywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFz
aywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0sCi0gICAgICAgICAgICB7
IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ss
IEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ss
IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9LAotICAgICAgICAgICAgeyBG
b250V2VpZ2h0OTAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBG
b250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBG
b250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9u
dFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9u
dFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9u
dFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0KLSAgICAgICAgfTsKLQotICAgICAg
ICB1bnNpZ25lZCBydWxlU2V0SW5kZXggPSAwOwotICAgICAgICBmb3IgKDsgIShtX2Rlc2lyZWRU
cmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmICgxIDw8IChGb250V2VpZ2h0MTAwQml0ICsgcnVsZVNl
dEluZGV4KSkpOyBydWxlU2V0SW5kZXgrKykgeyB9Ci0KLSAgICAgICAgY29uc3QgRm9udFRyYWl0
c01hc2sqIHdlaWdodEZhbGxiYWNrUnVsZSA9IHdlaWdodEZhbGxiYWNrUnVsZVNldHNbcnVsZVNl
dEluZGV4XTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzUGVyU2V0OyAr
K2kpIHsKLSAgICAgICAgICAgIGlmIChzZWNvbmRUcmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tS
dWxlW2ldKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChm
aXJzdFRyYWl0c01hc2sgJiB3ZWlnaHRGYWxsYmFja1J1bGVbaV0pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIEZvbnRUcmFpdHNNYXNrIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21w
YXJpc29uOwotfTsKLQogRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JG
YW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICAvLyBGSVhNRTogVGhlIHNwZWMgKGFuZCBGaXJl
Zm94KSBzYXlzIHVzZXIgc3BlY2lmaWVkIGdlbmVyaWMgZmFtaWxpZXMgKHNhbnMtc2VyaWYgZXRj
Likgc2hvdWxkIGJlIHJlc29sdmVkIGJlZm9yZSB0aGUgQGZvbnQtZmFjZSBsb29rdXAgdG9vLgog
ICAgIGJvb2wgcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCA9IGZhbWlseU5hbWUgPT0gc3RhbmRh
cmRGYW1pbHk7CiAKICAgICBBdG9taWNTdHJpbmcgZmFtaWx5Rm9yTG9va3VwID0gcmVzb2x2ZUdl
bmVyaWNGYW1pbHlGaXJzdCA/IHJlc29sdmVHZW5lcmljRmFtaWx5KG1fZG9jdW1lbnQsIGZvbnRE
ZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSkgOiBmYW1pbHlOYW1lOwotICAgIENTU1NlZ21lbnRlZEZv
bnRGYWNlKiBmYWNlID0gZ2V0Rm9udEZhY2UoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlGb3JMb29r
dXApOworICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBmYWNlID0gbV9mb250RmFjZVNldC5nZXRG
b250RmFjZShmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpLCBmYW1pbHlGb3JMb29rdXApOwog
ICAgIGlmICghZmFjZSkgewogICAgICAgICBpZiAoIXJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3Qp
CiAgICAgICAgICAgICBmYW1pbHlGb3JMb29rdXAgPSByZXNvbHZlR2VuZXJpY0ZhbWlseShtX2Rv
Y3VtZW50LCBmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwpAQCAtMzkxLDQ5ICsyMjYsNiBA
QCBGb250UmFuZ2VzIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcgogICAgIHJldHVybiBmYWNlLT5mb250UmFuZ2VzKGZv
bnREZXNjcmlwdGlvbik7CiB9CiAKLUNTU1NlZ21lbnRlZEZvbnRGYWNlKiBDU1NGb250U2VsZWN0
b3I6OmdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKLXsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9mb250
RmFjZXMuZmluZChmYW1pbHkpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2ZvbnRGYWNlcy5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byYgZmFtaWx5Rm9udEZhY2VzID0g
aXRlcmF0b3ItPnZhbHVlOwotCi0gICAgYXV0byYgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9IG1f
Zm9udHMuYWRkKGZhbWlseSwgSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPENTU1Nl
Z21lbnRlZEZvbnRGYWNlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgRm9udFRyYWl0c01h
c2sgdHJhaXRzTWFzayA9IGZvbnREZXNjcmlwdGlvbi50cmFpdHNNYXNrKCk7Ci0KLSAgICBhdXRv
JiBmYWNlID0gc2VnbWVudGVkRm9udEZhY2VDYWNoZS5hZGQodHJhaXRzTWFzaywgbnVsbHB0ciku
aXRlcmF0b3ItPnZhbHVlOwotICAgIGlmIChmYWNlKQotICAgICAgICByZXR1cm4gZmFjZS5nZXQo
KTsKLQotICAgIGZhY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1NlZ21lbnRlZEZvbnRGYWNlPigq
dGhpcyk7Ci0KLSAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4s
IDMyPiBjYW5kaWRhdGVGb250RmFjZXM7Ci0gICAgZm9yIChpbnQgaSA9IGZhbWlseUZvbnRGYWNl
cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBDU1NGb250RmFjZSYgY2FuZGlk
YXRlID0gZmFtaWx5Rm9udEZhY2VzW2ldOwotICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVUcmFp
dHNNYXNrID0gY2FuZGlkYXRlLnRyYWl0c01hc2soKTsKLSAgICAgICAgaWYgKCh0cmFpdHNNYXNr
ICYgRm9udFN0eWxlTm9ybWFsTWFzaykgJiYgIShjYW5kaWRhdGVUcmFpdHNNYXNrICYgRm9udFN0
eWxlTm9ybWFsTWFzaykpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FuZGlkYXRl
Rm9udEZhY2VzLmFwcGVuZChjYW5kaWRhdGUpOwotICAgIH0KLQotICAgIGF1dG8gbG9jYWxJdGVy
YXRvciA9IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5maW5kKGZhbWlseSk7Ci0gICAgaWYg
KGxvY2FsSXRlcmF0b3IgIT0gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmVuZCgpKSB7Ci0g
ICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbG9jYWxJdGVyYXRvci0+dmFsdWUpIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRyYWl0c01hc2sgPSBjYW5kaWRhdGUtPnRyYWl0
c01hc2soKTsKLSAgICAgICAgICAgIGlmICgodHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1h
c2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY2FuZGlkYXRlRm9udEZhY2VzLmFw
cGVuZChjYW5kaWRhdGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RkOjpzdGFibGVfc29y
dChjYW5kaWRhdGVGb250RmFjZXMuYmVnaW4oKSwgY2FuZGlkYXRlRm9udEZhY2VzLmVuZCgpLCBG
b250RmFjZUNvbXBhcmF0b3IodHJhaXRzTWFzaykpOwotICAgIGZvciAoYXV0byYgY2FuZGlkYXRl
IDogY2FuZGlkYXRlRm9udEZhY2VzKQotICAgICAgICBmYWNlLT5hcHBlbmRGb250RmFjZShjYW5k
aWRhdGUuZ2V0KCkpOwotCi0gICAgcmV0dXJuIGZhY2UuZ2V0KCk7Ci19Ci0KIHZvaWQgQ1NTRm9u
dFNlbGVjdG9yOjpjbGVhckRvY3VtZW50KCkKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQpIHsKQEAg
LTQ1NCw5ICsyNDYsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6Y2xlYXJEb2N1bWVudCgpCiAg
ICAgbV9kb2N1bWVudCA9IG51bGxwdHI7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvYmplY3Qgc2hv
dWxkIG91dGxpdmUgdGhlIERvY3VtZW50LgotICAgIG1fZm9udEZhY2VzLmNsZWFyKCk7Ci0gICAg
bV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmNsZWFyKCk7Ci0gICAgbV9mb250cy5jbGVhcigp
OworICAgIG1fZm9udEZhY2VTZXQuY2xlYXIoKTsKICAgICBtX2NsaWVudHMuY2xlYXIoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCmluZGV4IDlhMjdmZTIyZWY3MmQ0YTk3
N2I2ZjczNWEzMTAyMzU5NjE5NjU1YzEuLjYyZDdmZDAwNWY0OGZhYzBmM2I3MTg5YWYwYjAyNTNi
OGUxZTBmN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTI3LDYgKzI3
LDcgQEAKICNkZWZpbmUgQ1NTRm9udFNlbGVjdG9yX2gKIAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNl
LmgiCisjaW5jbHVkZSAiQ1NTRm9udEZhY2VTZXQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIK
QEAgLTQ4LDcgKzQ5LDcgQEAgY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNzIERvY3VtZW50OwogY2xh
c3MgU3R5bGVSdWxlRm9udEZhY2U7CiAKLWNsYXNzIENTU0ZvbnRTZWxlY3RvciBmaW5hbCA6IHB1
YmxpYyBGb250U2VsZWN0b3IgeworY2xhc3MgQ1NTRm9udFNlbGVjdG9yIGZpbmFsIDogcHVibGlj
IEZvbnRTZWxlY3RvciwgcHVibGljIENTU0ZvbnRGYWNlU2V0Q2xpZW50IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPENTU0ZvbnRTZWxlY3Rvcj4gY3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkK
ICAgICB7CkBAIC02MiwxMiArNjMsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRm9udFJhbmdl
cyBmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21p
Y1N0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50
KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBSZWZQdHI8Rm9udD4gZmFsbGJhY2tGb250QXQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgc2l6ZV90KSBvdmVycmlkZTsKLSAgICBDU1NTZWdtZW50ZWRG
b250RmFjZSogZ2V0Rm9udEZhY2UoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHkpOwogCiAgICAgdm9pZCBjbGVhckRvY3VtZW50KCk7CiAKLSAgICBzdGF0
aWMgdm9pZCBhcHBlbmRTb3VyY2VzKENTU0ZvbnRGYWNlJiwgQ1NTVmFsdWVMaXN0JiwgRG9jdW1l
bnQqLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOwotICAg
IHZvaWQgYWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlJiwgYm9vbCBpc0lu
aXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKKyAgICB2b2lkIGFkZEZvbnRG
YWNlUnVsZShTdHlsZVJ1bGVGb250RmFjZSYsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNl
ckFnZW50U2hhZG93VHJlZSk7CiAKICAgICB2b2lkIGZvbnRMb2FkZWQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgZm9udENhY2hlSW52YWxpZGF0ZWQoKSBvdmVycmlkZTsKQEAgLTgxLDggKzgwLDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBiZWdpbkxvYWRpbmdGb250U29vbihDYWNoZWRGb250Kik7CiAK
LSAgICBzdGF0aWMgU3RyaW5nIGZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGNvbnN0IENTU1ByaW1p
dGl2ZVZhbHVlJik7Ci0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ1NTRm9udFNlbGVjdG9yKERv
Y3VtZW50Jik7CiAKQEAgLTkwLDEyICs4Nyw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGJlZ2lu
TG9hZFRpbWVyRmlyZWQoKTsKIAotICAgIHZvaWQgcmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZh
bWlseShjb25zdCBTdHJpbmcmKTsKLQogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwotICAgIEhh
c2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4sIEFTQ0lJQ2FzZUluc2Vuc2l0
aXZlSGFzaD4gbV9mb250RmFjZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWY8Q1NT
Rm9udEZhY2U+PiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX2xvY2FsbHlJbnN0YWxsZWRG
b250RmFjZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5p
cXVlX3B0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+
IG1fZm9udHM7CisgICAgQ1NTRm9udEZhY2VTZXQgbV9mb250RmFjZVNldDsKICAgICBIYXNoU2V0
PEZvbnRTZWxlY3RvckNsaWVudCo+IG1fY2xpZW50czsKIAogICAgIFZlY3RvcjxDYWNoZWRSZXNv
dXJjZUhhbmRsZTxDYWNoZWRGb250Pj4gbV9mb250c1RvQmVnaW5Mb2FkaW5nOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKaW5kZXggZjVmY2JhZWE4ZGRhZTg2
OWI2ZDNmYzkzMDI3NDljMjI2Yjk5MDNhZi4uNGMyMGQzOGZlNGU2ZDZmOTYyMjZiNDQzY2VkM2U1
M2Y4ZmUwMTVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZv
bnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2Uu
Y3BwCkBAIC0zNyw4ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NTU2VnbWVu
dGVkRm9udEZhY2U6OkNTU1NlZ21lbnRlZEZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciYgZm9udFNl
bGVjdG9yKQotICAgIDogbV9mb250U2VsZWN0b3IoZm9udFNlbGVjdG9yKQorQ1NTU2VnbWVudGVk
Rm9udEZhY2U6OkNTU1NlZ21lbnRlZEZvbnRGYWNlKCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAppbmRleCAwN2I3MWY4MmRiNzI0ZmM5Y2U1MWQ5ZTEw
Zjc4MDYxNWEyNjMzNDdmLi45MjAzNjEyZDA5MTEzNzFmMGIwNGE4MDA3OTI2OTYxNTlmZWNlNTRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaApAQCAtNDIsMTkg
KzQyLDE4IEBAIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIENTU1NlZ21lbnRlZEZvbnRG
YWNlIGZpbmFsIDogcHVibGljIENTU0ZvbnRGYWNlOjpDbGllbnQgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKENTU0ZvbnRT
ZWxlY3RvciYpOworICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKCk7CiAgICAgfkNTU1NlZ21lbnRl
ZEZvbnRGYWNlKCk7CiAKLSAgICBDU1NGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvcigpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yOyB9Ci0KICAgICB2b2lkIGFwcGVuZEZvbnRGYWNlKFJl
ZjxDU1NGb250RmFjZT4mJik7CiAKICAgICBGb250UmFuZ2VzIGZvbnRSYW5nZXMoY29uc3QgRm9u
dERlc2NyaXB0aW9uJik7CiAKKyAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPiwgMT4mIGNvbnN0
aXR1ZW50RmFjZXMoKSB7IHJldHVybiBtX2ZvbnRGYWNlczsgfQorCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlJikgb3ZlcnJpZGU7CiAKLSAgICBDU1NG
b250U2VsZWN0b3ImIG1fZm9udFNlbGVjdG9yOwogICAgIEhhc2hNYXA8Rm9udERlc2NyaXB0aW9u
S2V5LCBGb250UmFuZ2VzLCBGb250RGVzY3JpcHRpb25LZXlIYXNoLCBXVEY6OlNpbXBsZUNsYXNz
SGFzaFRyYWl0czxGb250RGVzY3JpcHRpb25LZXk+PiBtX2NhY2hlOwogICAgIFZlY3RvcjxSZWY8
Q1NTRm9udEZhY2U+LCAxPiBtX2ZvbnRGYWNlczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvRm9udEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcApp
bmRleCBjNDVlOGQyNzExZjA3NTk3Njk1ZGY2MjYyNjRjODllMzhkM2M1ZWZhLi5mNGE3ODY5NTll
NzJiMzM3OTQxNzQwODE1NWJmZWQ1NDFhMmNmYTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAK
QEAgLTc1LDcgKzc1LDcgQEAgUmVmUHRyPEZvbnRGYWNlPiBGb250RmFjZTo6Y3JlYXRlKEpTQzo6
RXhlY1N0YXRlJiBleGVjU3RhdGUsIFNjcmlwdEV4ZWN1dGlvbkNvbnQKICAgICAgICAgYXV0byB2
YWx1ZSA9IEZvbnRGYWNlOjpwYXJzZVN0cmluZyhzb3VyY2VTdHJpbmcsIENTU1Byb3BlcnR5U3Jj
KTsKICAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUuZ2V0KCkpKSB7CiAgICAgICAg
ICAgICBDU1NWYWx1ZUxpc3QmIHNyY0xpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1
ZSk7Ci0gICAgICAgICAgICBDU1NGb250U2VsZWN0b3I6OmFwcGVuZFNvdXJjZXMocmVzdWx0LT5i
YWNraW5nKCksIHNyY0xpc3QsICZkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCksIGZhbHNlKTsK
KyAgICAgICAgICAgIENTU0ZvbnRGYWNlOjphcHBlbmRTb3VyY2VzKHJlc3VsdC0+YmFja2luZygp
LCBzcmNMaXN0LCAmZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLCBmYWxzZSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTExMCw5ICsxMTAsMjMgQEAgUmVmUHRyPEZvbnRGYWNlPiBGb250RmFj
ZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIFNjcmlwdEV4ZWN1dGlvbkNvbnQK
ICAgICByZXR1cm4gcmVzdWx0LnB0cigpOwogfQogCitSZWY8Rm9udEZhY2U+IEZvbnRGYWNlOjpj
cmVhdGUoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgQ1NTRm9udEZhY2UmIGZhY2UpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udEZhY2UoZXhlY1N0YXRlLCBmYWNlKSk7Cit9CisK
IEZvbnRGYWNlOjpGb250RmFjZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBDU1NGb250U2Vs
ZWN0b3ImIGZvbnRTZWxlY3RvcikKLSAgICA6IG1fYmFja2luZyhDU1NGb250RmFjZTo6Y3JlYXRl
KGZvbnRTZWxlY3RvciwgdGhpcykpCisgICAgOiBtX2JhY2tpbmcoQ1NTRm9udEZhY2U6OmNyZWF0
ZSgmZm9udFNlbGVjdG9yLCBudWxscHRyLCB0aGlzKSkKICAgICAsIG1fcHJvbWlzZShjcmVhdGVQ
cm9taXNlKGV4ZWNTdGF0ZSkpCisgICAgLCBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCit7CisgICAg
bV9iYWNraW5nLT5hZGRDbGllbnQoKnRoaXMpOworfQorCitGb250RmFjZTo6Rm9udEZhY2UoSlND
OjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgQ1NTRm9udEZhY2UmIGZhY2UpCisgICAgOiBtX2JhY2tp
bmcoZmFjZSkKKyAgICAsIG1fcHJvbWlzZShjcmVhdGVQcm9taXNlKGV4ZWNTdGF0ZSkpCisgICAg
LCBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCiB7CiAgICAgbV9iYWNraW5nLT5hZGRDbGllbnQoKnRo
aXMpOwogfQpAQCAtMTIyLDYgKzEzNiwxMSBAQCBGb250RmFjZTo6fkZvbnRGYWNlKCkKICAgICBt
X2JhY2tpbmctPnJlbW92ZUNsaWVudCgqdGhpcyk7CiB9CiAKK1dlYWtQdHI8Rm9udEZhY2U+IEZv
bnRGYWNlOjpjcmVhdGVXZWFrUHRyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWFrUHRyRmFj
dG9yeS5jcmVhdGVXZWFrUHRyKCk7Cit9CisKIFJlZlB0cjxDU1NWYWx1ZT4gRm9udEZhY2U6OnBh
cnNlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQp
CiB7CiAgICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlID0gTXV0YWJsZVN0eWxl
UHJvcGVydGllczo6Y3JlYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9u
dEZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oCmluZGV4IGY2NmZiOWFmZGY2
OGVmNWMxYTZmYzVhY2E5NzJjMjA3YzM1ZjRkMzQuLjA3OWY5MDMxYTg3NTk0ZTE5MTA5YjUyMjE0
MDBkZDI2YThmMDJmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIERlcHJlY2F0ZWQgewpAQCAtNDgs
NiArNDksNyBAQCBjbGFzcyBEaWN0aW9uYXJ5OwogY2xhc3MgRm9udEZhY2UgZmluYWwgOiBwdWJs
aWMgUmVmQ291bnRlZDxGb250RmFjZT4sIHB1YmxpYyBDU1NGb250RmFjZTo6Q2xpZW50IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEZvbnRGYWNlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUm
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzb3VyY2UsIGNvbnN0IERpY3Rpb25hcnkmIGRlc2NyaXB0
b3JzLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3RhdGljIFJlZjxGb250RmFjZT4gY3JlYXRlKEpT
Qzo6RXhlY1N0YXRlJiwgQ1NTRm9udEZhY2UmKTsKICAgICB2aXJ0dWFsIH5Gb250RmFjZSgpOwog
CiAgICAgdm9pZCBzZXRGYW1pbHkoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAt
NzYsMTYgKzc4LDIwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBh
cnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIENTU1Byb3BlcnR5SUQpOwogCisgICAgdmlydHVhbCB2
b2lkIHN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMgb2xkU3Rh
dGUsIENTU0ZvbnRGYWNlOjpTdGF0dXMgbmV3U3RhdGUpIG92ZXJyaWRlOworCisgICAgV2Vha1B0
cjxGb250RmFjZT4gY3JlYXRlV2Vha1B0cigpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEZvbnRG
YWNlKEpTQzo6RXhlY1N0YXRlJiwgQ1NTRm9udFNlbGVjdG9yJik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiwgQ1NTRm9udEZhY2U6OlN0YXR1cyBvbGRTdGF0
ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0ZSkgb3ZlcnJpZGU7CisgICAgRm9udEZhY2Uo
SlNDOjpFeGVjU3RhdGUmLCBDU1NGb250RmFjZSYpOwogCiAgICAgdm9pZCBmdWxmaWxsUHJvbWlz
ZSgpOwogICAgIHZvaWQgcmVqZWN0UHJvbWlzZShFeGNlcHRpb25Db2RlKTsKIAogICAgIFJlZjxD
U1NGb250RmFjZT4gbV9iYWNraW5nOwogICAgIFByb21pc2UgbV9wcm9taXNlOworICAgIFdlYWtQ
dHJGYWN0b3J5PEZvbnRGYWNlPiBtX3dlYWtQdHJGYWN0b3J5OwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9Gb250RmFjZVNldC5jcHAKaW5kZXggN2VkNzc0NjZiNDI0MjkzZGNlYjdmM2I1NTI0YmUxODRl
MWM1YTgyYy4uZjkyMTk0Y2I0M2E1ZjIzNGYwOGI4MjcwZmE5MTBlNjJhMjVmMzQzMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvRm9udEZhY2VTZXQuY3BwCkBAIC02MCwxMSArNjAsMTEgQEAgRm9udEZhY2VTZXQ6
Okl0ZXJhdG9yOjpJdGVyYXRvcihGb250RmFjZVNldCYgc2V0KQogewogfQogCi1ib29sIEZvbnRG
YWNlU2V0OjpJdGVyYXRvcjo6bmV4dChSZWZQdHI8Rm9udEZhY2U+JiBrZXksIFJlZlB0cjxGb250
RmFjZT4mIHZhbHVlKQorYm9vbCBGb250RmFjZVNldDo6SXRlcmF0b3I6Om5leHQoSlNDOjpFeGVj
U3RhdGUmIGV4ZWNTdGF0ZSwgUmVmUHRyPEZvbnRGYWNlPiYga2V5LCBSZWZQdHI8Rm9udEZhY2U+
JiB2YWx1ZSkKIHsKICAgICBpZiAobV9pbmRleCA9PSBtX3RhcmdldC0+c2l6ZSgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBrZXkgPSBtX3RhcmdldC0+bV9iYWNraW5nW21faW5kZXgrK10u
d3JhcHBlcigpOworICAgIGtleSA9IG1fdGFyZ2V0LT5tX2JhY2tpbmdbbV9pbmRleCsrXS53cmFw
cGVyKGV4ZWNTdGF0ZSk7CiAgICAgdmFsdWUgPSBrZXk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpA
QCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgRm9udEZhY2VTZXQ6OmNsZWFyKCkKICAgICAgICAgbV9i
YWNraW5nLnJlbW92ZShtX2JhY2tpbmdbMF0pOwogfQogCi12b2lkIEZvbnRGYWNlU2V0Ojpsb2Fk
KGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBEZWZlcnJlZFdyYXBwZXIm
JiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgRm9udEZhY2VTZXQ6OmxvYWQoSlND
OjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcm
IHRleHQsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIGF1dG8gbWF0Y2hpbmdGYWNlcyA9IG1fYmFja2luZy5tYXRjaGluZ0ZhY2VzKGZvbnQsIHRl
eHQsIGVjKTsKICAgICBpZiAoZWMpCkBAIC0xMzksMTEgKzEzOSwxMSBAQCB2b2lkIEZvbnRGYWNl
U2V0Ojpsb2FkKGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBEZWZlcnJl
ZFdyYXBwZXImJgogICAgIH0KIAogICAgIGZvciAoYXV0byYgZmFjZSA6IG1hdGNoaW5nRmFjZXMp
IHsKLSAgICAgICAgcGVuZGluZ1Byb21pc2UtPmZhY2VzLmFwcGVuZChmYWNlLmdldCgpLndyYXBw
ZXIoKSk7CisgICAgICAgIHBlbmRpbmdQcm9taXNlLT5mYWNlcy5hcHBlbmQoZmFjZS5nZXQoKS53
cmFwcGVyKGV4ZWNTdGF0ZSkpOwogICAgICAgICBpZiAoZmFjZS5nZXQoKS5zdGF0dXMoKSA9PSBD
U1NGb250RmFjZTo6U3RhdHVzOjpTdWNjZXNzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIHdhaXRpbmcgPSB0cnVlOwotICAgICAgICBhdXRvJiB2ZWN0b3IgPSBtX3BlbmRpbmdQcm9t
aXNlcy5hZGQoUmVmUHRyPEZvbnRGYWNlPihmYWNlLmdldCgpLndyYXBwZXIoKSksIFZlY3RvcjxS
ZWY8UGVuZGluZ1Byb21pc2U+PigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8mIHZl
Y3RvciA9IG1fcGVuZGluZ1Byb21pc2VzLmFkZChSZWZQdHI8Q1NTRm9udEZhY2U+KCZmYWNlLmdl
dCgpKSwgVmVjdG9yPFJlZjxQZW5kaW5nUHJvbWlzZT4+KCkpLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICAgICAgdmVjdG9yLmFwcGVuZChwZW5kaW5nUHJvbWlzZS5jb3B5UmVmKCkpOwogICAgIH0KIApA
QCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgRm9udEZhY2VTZXQ6OmZ1bGZpbGxQcm9taXNlKCkKIAog
dm9pZCBGb250RmFjZVNldDo6ZmFjZUZpbmlzaGVkKENTU0ZvbnRGYWNlJiBmYWNlLCBDU1NGb250
RmFjZTo6U3RhdHVzIG5ld1N0YXR1cykKIHsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9wZW5kaW5n
UHJvbWlzZXMuZmluZChmYWNlLndyYXBwZXIoKSk7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcGVu
ZGluZ1Byb21pc2VzLmZpbmQoJmZhY2UpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX3BlbmRpbmdQ
cm9taXNlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvRm9udEZhY2VTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5o
CmluZGV4IGMwNWVkMThlNGNlOGFmNTFmOGYyZTgwNDEyNTFhYjU0MDAxZGMyYzcuLjkwN2U1NTUz
MTI0MzYxMWUyY2I0Nzc3YTdmZDBhZDU5M2E0MmQ5YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Gb250RmFjZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNl
dC5oCkBAIC0zOCw2ICszOCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBFeGVjU3Rh
dGU7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CkBAIC01OSw4
ICs2Myw4IEBAIHB1YmxpYzoKICAgICBib29sIHJlbW92ZShGb250RmFjZSopOwogICAgIHZvaWQg
Y2xlYXIoKTsKIAotICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIGZvbnQsIERlZmVycmVkV3Jh
cHBlciYmIHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IGxvYWQoZm9udCwgU3RyaW5nKCIg
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocHJvbWlzZSksIGVjKTsg
fQotICAgIHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwg
RGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgbG9h
ZChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IFN0cmluZyYgZm9udCwgRGVmZXJyZWRXcmFwcGVyJiYg
cHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgbG9hZChleGVjU3RhdGUsIGZvbnQsIFN0cmlu
ZygiICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHByb21pc2UpLCBl
Yyk7IH0KKyAgICB2b2lkIGxvYWQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBTdHJpbmcmIGZvbnQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIGJvb2wgY2hlY2soY29uc3QgU3RyaW5nJiBmb250LCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gY2hlY2soZm9udCwgU3RyaW5nKCIgIiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksIGVjKTsgfQogICAgIGJvb2wgY2hlY2soY29uc3QgU3RyaW5nJiBmb250LCBj
b25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKIApAQCAtNzYsMTEgKzgwLDExIEBA
IHB1YmxpYzoKICAgICAgICAgdXNpbmcgS2V5ID0gUmVmUHRyPEZvbnRGYWNlPjsKICAgICAgICAg
dXNpbmcgVmFsdWUgPSBSZWZQdHI8Rm9udEZhY2U+OwogCi0gICAgICAgIGJvb2wgbmV4dChLZXkm
IG5leHRLZXksIFZhbHVlJiBuZXh0VmFsdWUpOworICAgICAgICBib29sIG5leHQoSlNDOjpFeGVj
U3RhdGUmLCBLZXkmIG5leHRLZXksIFZhbHVlJiBuZXh0VmFsdWUpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgUmVmPEZvbnRGYWNlU2V0PiBtX3RhcmdldDsKLSAgICAgICAgc2l6ZV90IG1faW5k
ZXggeyAwIH07CisgICAgICAgIHNpemVfdCBtX2luZGV4IHsgMCB9OyAvLyBGSVhNRTogVGhlcmUg
bmVlZHMgdG8gYmUgYSBtZWNoYW5pc20gdG8gdXBkYXRpbmcgdGhpcyBpbmRleCB3aGVuIGZvbnRz
IGFyZSBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhlIG1pZGRsZSBvZiB0aGUgRm9udEZhY2VTZXQu
CiAgICAgfTsKICAgICBJdGVyYXRvciBjcmVhdGVJdGVyYXRvcigpIHsgcmV0dXJuIEl0ZXJhdG9y
KCp0aGlzKTsgfQogCkBAIC0xMjQsNyArMTI4LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgZGVyZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQogCiAgICAgQ1NTRm9u
dEZhY2VTZXQgbV9iYWNraW5nOwotICAgIEhhc2hNYXA8UmVmUHRyPEZvbnRGYWNlPiwgVmVjdG9y
PFJlZjxQZW5kaW5nUHJvbWlzZT4+PiBtX3BlbmRpbmdQcm9taXNlczsKKyAgICBIYXNoTWFwPFJl
ZlB0cjxDU1NGb250RmFjZT4sIFZlY3RvcjxSZWY8UGVuZGluZ1Byb21pc2U+Pj4gbV9wZW5kaW5n
UHJvbWlzZXM7CiAgICAgT3B0aW9uYWw8UHJvbWlzZT4gbV9wcm9taXNlOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250RmFjZVNldC5pZGwKaW5kZXggNGZmNjg1ZGNhY2Q5YjUyZWMyNzM1NWUwZGRiMzUx
ZGYzZTU2ZmU3OC4uZThhMDQ3Mjg4NTRkYjljMzUxMzk2YjU4NDY2ZjdjNTE2ZDAwNzJlZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaWRsCkBAIC00OCw3ICs0OCw3IEBAIGVudW0gRm9udEZh
Y2VTZXRMb2FkU3RhdHVzIHsKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ubG9hZGluZ2Rv
bmU7CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmxvYWRpbmdlcnJvcjsKIAotICAgIFtS
YWlzZXNFeGNlcHRpb25dIFByb21pc2UgbG9hZChET01TdHJpbmcgZm9udCwgb3B0aW9uYWwgRE9N
U3RyaW5nIHRleHQpOworICAgIFtSYWlzZXNFeGNlcHRpb24sIENhbGxXaXRoPVNjcmlwdFN0YXRl
XSBQcm9taXNlIGxvYWQoRE9NU3RyaW5nIGZvbnQsIG9wdGlvbmFsIERPTVN0cmluZyB0ZXh0KTsK
ICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGNoZWNrKERPTVN0cmluZyBmb250LCBvcHRp
b25hbCBET01TdHJpbmcgdGV4dCk7CiAKICAgICBbQ3VzdG9tXSByZWFkb25seSBhdHRyaWJ1dGUg
UHJvbWlzZSByZWFkeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFj
ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaAppbmRl
eCBkMjgyODNhMzNiOWUzNWY1YjhjMzA2NGFkNjZmMzc4Y2Y2NTY4ODA4Li41ZTRjNTAwOWZlMjll
NTMwNDAxM2QyOTFiY2M2ZDBiOWEwODQ0NmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRm9udEZhY2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRG
YWNlRWxlbWVudC5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBTVkdGb250RWxlbWVu
dCogYXNzb2NpYXRlZEZvbnRFbGVtZW50KCkgY29uc3Q7CiAgICAgdm9pZCByZWJ1aWxkRm9udEZh
Y2UoKTsKICAgICAKLSAgICBjb25zdCBTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9mb250RmFjZVJ1bGUuZ2V0KCk7IH0KKyAgICBTdHlsZVJ1bGVGb250
RmFjZSYgZm9udEZhY2VSdWxlKCkgeyByZXR1cm4gbV9mb250RmFjZVJ1bGUuZ2V0KCk7IH0KIAog
cHJpdmF0ZToKICAgICBTVkdGb250RmFjZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Jik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271894</attachid>
            <date>2016-02-21 16:49:49 -0800</date>
            <delta_ts>2016-02-21 17:04:11 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-153347-20160221164931.patch</filename>
            <type>text/plain</type>
            <size>82961</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2ODUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY5NjA2ZDFhOWRiZmIz
ZTNjY2VjMWJjNmZiZWFmNmI2MzYxNjY4MC4uZDkyNjYwOWIxY2JkMDY5ZGMwMTA3ZjkyNjYyYzEz
NzczNDFhYTg3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE2LTAyLTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0ZvbnQgTG9h
ZGluZ10gU3BsaXQgQ1NTRm9udFNlbGVjdG9yIGludG8gYSBGb250RmFjZVNldCBpbXBsZW1lbnRh
dGlvbiBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMzNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAq
IGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Q1NT
Rm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmNhbGN1bGF0ZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpzZXRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZTo6Y2FsY3VsYXRlV2VpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlOjpzZXRXZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6
OmZvbnRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnB1bXApOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmZvbnQpOgorICAgICAgICAqIGNzcy9DU1NGb250
RmFjZS5oOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNldDo6fkNTU0ZvbnRGYWNlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU2V0OjpoYXNGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNl
U2V0OjpyZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6
OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUZvbnRUcmFpdHNNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRG
YWNlU2V0OjptYXRjaGluZ0ZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFy
YXRvcjo6Rm9udEZhY2VDb21wYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29t
cGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6
Z2V0Rm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEZhbWlsaWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhbWlsaWVzSW50ZXJzZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Ojpsb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKiBj
c3MvQ1NTRm9udEZhY2VTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xp
ZW50OjpmYWNlRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXRDbGll
bnQ6OnN0YXJ0ZWRMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xp
ZW50Ojpjb21wbGV0ZWRMb2FkaW5nKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
aDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZvbnRTZWxlY3Rvcjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0
b3I6OmFkZEZvbnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6
OmZvbnRSYW5nZXNGb3JGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9y
OjpjbGVhckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6cmVn
aXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250RmFjZUNvbXBhcmF0b3I6OkZvbnRGYWNlQ29tcGFyYXRvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250RmFjZUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZSk6IERlbGV0ZWQu
CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFj
ZTo6Q1NTU2VnbWVudGVkRm9udEZhY2UpOgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5oOgorICAgICAgICAqIGNzcy9Gb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250RmFjZTo6Rm9udEZhY2UpOgorICAgICAgICAqIGNzcy9Gb250RmFjZVNldC5oOgorICAgICAg
ICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuaDoKKwogMjAxNi0wMi0xOSAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgbW9yZSBjb25jcmV0ZSB0
eXBlcyBmb3IgcGFyc2luZyBwb3NpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0
Y2gvRmV0Y2hIZWFkZXJzLmNwcAppbmRleCA4MTIzZTg2YjkyMjcwMzlkMGNhMjBjZDkzY2M5M2E0
YzAzMjc1ZjdjLi4xMDhmYTdiMWQ1NWJiNDUzYmRkNjM2NDBjMWM5OThlOTc4YjMyMTBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCkBAIC0xNzks
NyArMTc5LDcgQEAgdm9pZCBGZXRjaEhlYWRlcnM6OmZpbGwoY29uc3QgRmV0Y2hIZWFkZXJzKiBo
ZWFkZXJzKQogICAgIH0KIH0KIAotYm9vbCBGZXRjaEhlYWRlcnM6Okl0ZXJhdG9yOjpuZXh0KFN0
cmluZyYgbmV4dEtleSwgU3RyaW5nJiBuZXh0VmFsdWUpCitib29sIEZldGNoSGVhZGVyczo6SXRl
cmF0b3I6Om5leHQoSlNDOjpFeGVjU3RhdGUmLCBTdHJpbmcmIG5leHRLZXksIFN0cmluZyYgbmV4
dFZhbHVlKQogewogICAgIHdoaWxlIChtX2N1cnJlbnRJbmRleCA8IG1fa2V5cy5zaXplKCkpIHsK
ICAgICAgICAgYXV0byYga2V5ID0gbV9rZXlzW21fY3VycmVudEluZGV4KytdOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmgKaW5kZXggZjM1ODFkMzI0YmU4Njk1
NTViNDU2OTkyNWY0MDc4NGJkMmZlYjc2Ni4uYWU3OTUwYTRiZDU5NWUyZTNhMmIwOGFkMDQxMmU4
MzdiODI1ZGMzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRj
aEhlYWRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVy
cy5oCkBAIC0zMyw2ICszMywxMCBAQAogCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogCitu
YW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4ZWNTdGF0ZTsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwpAQCAtNzAsNyArNzQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHVzaW5nIEtleSA9IFN0cmluZzsKICAgICAgICAgdXNpbmcgVmFsdWUgPSBTdHJp
bmc7CiAKLSAgICAgICAgYm9vbCBuZXh0KFN0cmluZyYgbmV4dEtleSwgU3RyaW5nJiBuZXh0VmFs
dWUpOworICAgICAgICBib29sIG5leHQoSlNDOjpFeGVjU3RhdGUmLCBTdHJpbmcmIG5leHRLZXks
IFN0cmluZyYgbmV4dFZhbHVlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZjxGZXRjaEhl
YWRlcnM+IG1faGVhZGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTS2V5VmFsdWVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlW
YWx1ZUl0ZXJhdG9yLmgKaW5kZXggZmJiZmZkMGM1N2JiMGFlZTA5MmJiYjNiZjQ4Y2M5MmU4MDc5
OGM5ZC4uOTg1NjYzNjdhNzgyZDVhNjA0ZWEzYTUzZDk2NjdjNWFlMDk0ZjRjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmgKQEAgLTEyMiw3
ICsxMjIsNyBAQCBib29sIEpTS2V5VmFsdWVJdGVyYXRvcjxKU1dyYXBwZXI+OjpuZXh0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlJiB2YQogewogICAgIHR5cGVuYW1lIERPTVdy
YXBwZWQ6Okl0ZXJhdG9yOjpLZXkgbmV4dEtleTsKICAgICB0eXBlbmFtZSBET01XcmFwcGVkOjpJ
dGVyYXRvcjo6VmFsdWUgbmV4dFZhbHVlOwotICAgIGlmIChtX2l0ZXJhdG9yLm5leHQobmV4dEtl
eSwgbmV4dFZhbHVlKSkgeworICAgIGlmIChtX2l0ZXJhdG9yLm5leHQoc3RhdGUsIG5leHRLZXks
IG5leHRWYWx1ZSkpIHsKICAgICAgICAgdmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCmluZGV4
IDU1MmU5OWNmYTFlMWVhYWE0YWEzMjY5NTkwMDM4ZGFhYTVhMDIwMTcuLmNhNmVhYWVmZmFhNjRj
NzdjOWVjN2VhNTZmNGI2Mjc4MDcyZDg2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNw
cApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlLmgiCiAKICNpbmNsdWRl
ICJDU1NGb250RmFjZVNvdXJjZS5oIgorI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU3JjVmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NGb250RmFtaWx5LmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZlYXR1cmVWYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgpAQCAtMzgsMTYgKzM5LDQ4IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udExvYWRlci5oIgorI2luY2x1ZGUgIkZvbnRGYWNl
LmgiCiAjaW5jbHVkZSAiRm9udFZhcmlhbnRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0aWVzLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotQ1NTRm9udEZhY2U6OkNTU0ZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVj
dG9yLCBGb250RmFjZSogd3JhcHBlciwgYm9vbCBpc0xvY2FsRmFsbGJhY2spCit2b2lkIENTU0Zv
bnRGYWNlOjphcHBlbmRTb3VyY2VzKENTU0ZvbnRGYWNlJiBmb250RmFjZSwgQ1NTVmFsdWVMaXN0
JiBzcmNMaXN0LCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudElu
VXNlckFnZW50U2hhZG93VHJlZSkKK3sKKyAgICBmb3IgKGF1dG8mIHNyYyA6IHNyY0xpc3QpIHsK
KyAgICAgICAgLy8gQW4gaXRlbSBpbiB0aGUgbGlzdCBlaXRoZXIgc3BlY2lmaWVzIGEgc3RyaW5n
IChsb2NhbCBmb250IG5hbWUpIG9yIGEgVVJMIChyZW1vdGUgZm9udCB0byBkb3dubG9hZCkuCisg
ICAgICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUmIGl0ZW0gPSBkb3duY2FzdDxDU1NGb250RmFjZVNy
Y1ZhbHVlPihzcmMuZ2V0KCkpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9udEZhY2VT
b3VyY2U+IHNvdXJjZTsKKyAgICAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1l
bnQgPSBudWxscHRyOworICAgICAgICBib29sIGZvdW5kU1ZHRm9udCA9IGZhbHNlOworCisjaWYg
RU5BQkxFKFNWR19GT05UUykKKyAgICAgICAgZm91bmRTVkdGb250ID0gaXRlbS5pc1NWR0ZvbnRG
YWNlU3JjKCkgfHwgaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyAgICAgICAgZm9udEZhY2VF
bGVtZW50ID0gaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyNlbmRpZgorICAgICAgICBpZiAo
IWl0ZW0uaXNMb2NhbCgpKSB7CisgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1
bWVudCA/IGRvY3VtZW50LT5zZXR0aW5ncygpIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGJvb2wg
YWxsb3dEb3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8fCAoc2V0dGluZ3MgJiYgc2V0dGluZ3Mt
PmRvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgpKTsKKyAgICAgICAgICAgIGlmIChhbGxv
d0Rvd25sb2FkaW5nICYmIGl0ZW0uaXNTdXBwb3J0ZWRGb3JtYXQoKSAmJiBkb2N1bWVudCkgewor
ICAgICAgICAgICAgICAgIGlmIChDYWNoZWRGb250KiBjYWNoZWRGb250ID0gaXRlbS5jYWNoZWRG
b250KGRvY3VtZW50LCBmb3VuZFNWR0ZvbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2Vu
dFNoYWRvd1RyZWUpKQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5p
cXVlPENTU0ZvbnRGYWNlU291cmNlPihmb250RmFjZSwgaXRlbS5yZXNvdXJjZSgpLCBjYWNoZWRG
b250KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzb3VyY2Ug
PSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmb250RmFjZSwgaXRlbS5yZXNv
dXJjZSgpLCBudWxscHRyLCBmb250RmFjZUVsZW1lbnQpOworCisgICAgICAgIGlmIChzb3VyY2Up
CisgICAgICAgICAgICBmb250RmFjZS5hZG9wdFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkpOworICAg
IH0KKyAgICBmb250RmFjZS5zb3VyY2VzUG9wdWxhdGVkKCk7Cit9CisKK0NTU0ZvbnRGYWNlOjpD
U1NGb250RmFjZShDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciwgU3R5bGVSdWxlRm9udEZh
Y2UqIGNzc0Nvbm5lY3Rpb24sIEZvbnRGYWNlKiB3cmFwcGVyLCBib29sIGlzTG9jYWxGYWxsYmFj
aykKICAgICA6IG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKLSAgICAsIG1fd3JhcHBlcih3
cmFwcGVyKQorICAgICwgbV9jc3NDb25uZWN0aW9uKGNzc0Nvbm5lY3Rpb24pCisgICAgLCBtX3dy
YXBwZXIod3JhcHBlciA/IHdyYXBwZXItPmNyZWF0ZVdlYWtQdHIoKSA6IFdlYWtQdHI8Rm9udEZh
Y2U+KCkpCiAgICAgLCBtX2lzTG9jYWxGYWxsYmFjayhpc0xvY2FsRmFsbGJhY2spCiB7CiB9CkBA
IC02NSw3OCArOTgsOTMgQEAgYm9vbCBDU1NGb250RmFjZTo6c2V0RmFtaWxpZXMoQ1NTVmFsdWUm
IGZhbWlseSkKICAgICBpZiAoIWZhbWlseUxpc3QubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG9sZEZhbWlsaWVzID0gbV9mYW1pbGll
czsKICAgICBtX2ZhbWlsaWVzID0gJmZhbWlseUxpc3Q7CisKKyAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5mb250UHJvcGVydHlDaGFuZ2VkKCp0aGlz
LCBvbGRGYW1pbGllcy5nZXQoKSk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NG
b250RmFjZTo6c2V0U3R5bGUoQ1NTVmFsdWUmIHN0eWxlKQorT3B0aW9uYWw8Rm9udFRyYWl0c01h
c2s+IENTU0ZvbnRGYWNlOjpjYWxjdWxhdGVTdHlsZShDU1NWYWx1ZSYgc3R5bGUpCiB7CiAgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oc3R5bGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBOdWxsb3B0OwogCi0gICAgdW5zaWduZWQgc3R5bGVNYXNrID0gMDsK
ICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihzdHlsZSkuZ2V0VmFsdWVJ
RCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgc3R5bGVNYXNrID0gRm9u
dFN0eWxlTm9ybWFsTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250U3R5
bGVOb3JtYWxNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWVJdGFsaWM6CiAgICAgY2FzZSBDU1NWYWx1
ZU9ibGlxdWU6Ci0gICAgICAgIHN0eWxlTWFzayA9IEZvbnRTdHlsZUl0YWxpY01hc2s7Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFN0eWxlSXRhbGljTWFzazsKICAgICBkZWZh
dWx0OgotICAgICAgICBzdHlsZU1hc2sgPSBGb250U3R5bGVOb3JtYWxNYXNrOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRTdHlsZU5vcm1hbE1hc2s7CiAgICAgfQogCi0gICAg
bV90cmFpdHNNYXNrID0gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV90cmFpdHNNYXNrKSAmICh+Rm9udFN0eWxlTWFzaykpIHwgc3R5bGVNYXNrKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gRm9udFN0eWxlTm9ybWFsTWFzazsKIH0KIAot
Ym9vbCBDU1NGb250RmFjZTo6c2V0V2VpZ2h0KENTU1ZhbHVlJiB3ZWlnaHQpCitib29sIENTU0Zv
bnRGYWNlOjpzZXRTdHlsZShDU1NWYWx1ZSYgc3R5bGUpCit7CisgICAgaWYgKGF1dG8gbWFzayA9
IGNhbGN1bGF0ZVN0eWxlKHN0eWxlKSkgeworICAgICAgICBtX3RyYWl0c01hc2sgPSBzdGF0aWNf
Y2FzdDxGb250VHJhaXRzTWFzaz4oKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RyYWl0c01hc2sp
ICYgKH5Gb250U3R5bGVNYXNrKSkgfCBtYXNrLnZhbHVlKCkpOworCisgICAgICAgIGZvciAoYXV0
byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5mb250UHJvcGVydHlD
aGFuZ2VkKCp0aGlzKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitPcHRpb25hbDxGb250VHJhaXRzTWFzaz4gQ1NTRm9udEZhY2U6OmNhbGN1
bGF0ZVdlaWdodChDU1NWYWx1ZSYgd2VpZ2h0KQogewogICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KHdlaWdodCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CiAKLSAgICB1bnNpZ25lZCB3ZWlnaHRNYXNrID0gMDsKICAgICBzd2l0Y2ggKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih3ZWlnaHQpLmdldFZhbHVlSUQoKSkgewogICAgIGNhc2Ug
Q1NTVmFsdWVCb2xkOgogICAgIGNhc2UgQ1NTVmFsdWVCb2xkZXI6CiAgICAgY2FzZSBDU1NWYWx1
ZTcwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQ3MDBNYXNrOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ3MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFs
dWVOb3JtYWw6CiAgICAgY2FzZSBDU1NWYWx1ZTQwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZv
bnRXZWlnaHQ0MDBNYXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWln
aHQ0MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWU5MDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBG
b250V2VpZ2h0OTAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2Vp
Z2h0OTAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlODAwOgotICAgICAgICB3ZWlnaHRNYXNrID0g
Rm9udFdlaWdodDgwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFdl
aWdodDgwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZTYwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9
IEZvbnRXZWlnaHQ2MDBNYXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRX
ZWlnaHQ2MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWU1MDA6Ci0gICAgICAgIHdlaWdodE1hc2sg
PSBGb250V2VpZ2h0NTAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250
V2VpZ2h0NTAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlMzAwOgotICAgICAgICB3ZWlnaHRNYXNr
ID0gRm9udFdlaWdodDMwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9u
dFdlaWdodDMwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZUxpZ2h0ZXI6CiAgICAgY2FzZSBDU1NW
YWx1ZTIwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQyMDBNYXNrOwotICAgICAg
ICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQyMDBNYXNrOwogICAgIGNhc2UgQ1NT
VmFsdWUxMDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0MTAwTWFzazsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0MTAwTWFzazsKICAgICBkZWZhdWx0
OgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDQwME1hc2s7Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm4gRm9udFdlaWdodDQwME1hc2s7CiAgICAgfQogCi0gICAgbV90cmFp
dHNNYXNrID0gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obV90cmFpdHNNYXNrKSAmICh+Rm9udFdlaWdodE1hc2spKSB8IHdlaWdodE1hc2spOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBGb250V2VpZ2h0NDAwTWFzazsKK30KKworYm9vbCBD
U1NGb250RmFjZTo6c2V0V2VpZ2h0KENTU1ZhbHVlJiB3ZWlnaHQpCit7CisgICAgaWYgKGF1dG8g
bWFzayA9IGNhbGN1bGF0ZVdlaWdodCh3ZWlnaHQpKSB7CisgICAgICAgIG1fdHJhaXRzTWFzayA9
IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJh
aXRzTWFzaykgJiAofkZvbnRXZWlnaHRNYXNrKSkgfCBtYXNrLnZhbHVlKCkpOworCisgICAgICAg
IGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5mb250
UHJvcGVydHlDaGFuZ2VkKCp0aGlzKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQ1NTRm9udEZhY2U6OnNldFVuaWNvZGVSYW5n
ZShDU1NWYWx1ZSYgdW5pY29kZVJhbmdlKQpAQCAtMTUwLDYgKzE5OCwxMCBAQCBib29sIENTU0Zv
bnRGYWNlOjpzZXRVbmljb2RlUmFuZ2UoQ1NTVmFsdWUmIHVuaWNvZGVSYW5nZSkKICAgICAgICAg
Q1NTVW5pY29kZVJhbmdlVmFsdWUmIHJhbmdlID0gZG93bmNhc3Q8Q1NTVW5pY29kZVJhbmdlVmFs
dWU+KHJhbmdlVmFsdWUuZ2V0KCkpOwogICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoVW5pY29kZVJh
bmdlKHJhbmdlLmZyb20oKSwgcmFuZ2UudG8oKSkpOwogICAgIH0KKworICAgIGZvciAoYXV0byog
Y2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmZvbnRQcm9wZXJ0eUNoYW5nZWQo
KnRoaXMpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2MCw2ICsyMTIsMTAgQEAgYm9v
bCBDU1NGb250RmFjZTo6c2V0VmFyaWFudExpZ2F0dXJlcyhDU1NWYWx1ZSYgdmFyaWFudExpZ2F0
dXJlcykKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzID0gbGln
YXR1cmVzLmRpc2NyZXRpb25hcnlMaWdhdHVyZXM7CiAgICAgbV92YXJpYW50U2V0dGluZ3MuaGlz
dG9yaWNhbExpZ2F0dXJlcyA9IGxpZ2F0dXJlcy5oaXN0b3JpY2FsTGlnYXR1cmVzOwogICAgIG1f
dmFyaWFudFNldHRpbmdzLmNvbnRleHR1YWxBbHRlcm5hdGVzID0gbGlnYXR1cmVzLmNvbnRleHR1
YWxBbHRlcm5hdGVzOworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAg
ICAgIGNsaWVudC0+Zm9udFByb3BlcnR5Q2hhbmdlZCgqdGhpcyk7CisKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTY4LDYgKzIyNCwxMCBAQCBib29sIENTU0ZvbnRGYWNlOjpzZXRWYXJpYW50
UG9zaXRpb24oQ1NTVmFsdWUmIHZhcmlhbnRQb3NpdGlvbikKICAgICBpZiAoIWlzPENTU1ByaW1p
dGl2ZVZhbHVlPih2YXJpYW50UG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
bV92YXJpYW50U2V0dGluZ3MucG9zaXRpb24gPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFyaWFudFBvc2l0aW9uKTsKKworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQor
ICAgICAgICBjbGllbnQtPmZvbnRQcm9wZXJ0eUNoYW5nZWQoKnRoaXMpOworCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTE3Niw2ICsyMzYsMTAgQEAgYm9vbCBDU1NGb250RmFjZTo6c2V0VmFy
aWFudENhcHMoQ1NTVmFsdWUmIHZhcmlhbnRDYXBzKQogICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhcmlhbnRDYXBzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG1fdmFyaWFu
dFNldHRpbmdzLmNhcHMgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFyaWFudENhcHMp
OworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+
Zm9udFByb3BlcnR5Q2hhbmdlZCgqdGhpcyk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTg3LDYgKzI1MSwxMCBAQCBib29sIENTU0ZvbnRGYWNlOjpzZXRWYXJpYW50TnVtZXJpYyhDU1NW
YWx1ZSYgdmFyaWFudE51bWVyaWMpCiAgICAgbV92YXJpYW50U2V0dGluZ3MubnVtZXJpY0ZyYWN0
aW9uID0gbnVtZXJpYy5mcmFjdGlvbjsKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5udW1lcmljT3Jk
aW5hbCA9IG51bWVyaWMub3JkaW5hbDsKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5udW1lcmljU2xh
c2hlZFplcm8gPSBudW1lcmljLnNsYXNoZWRaZXJvOworCisgICAgZm9yIChhdXRvKiBjbGllbnQg
OiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+Zm9udFByb3BlcnR5Q2hhbmdlZCgqdGhpcyk7
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTk1LDYgKzI2MywxMCBAQCBib29sIENTU0Zv
bnRGYWNlOjpzZXRWYXJpYW50QWx0ZXJuYXRlcyhDU1NWYWx1ZSYgdmFyaWFudEFsdGVybmF0ZXMp
CiAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFyaWFudEFsdGVybmF0ZXMpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV92YXJpYW50U2V0dGluZ3MuYWx0ZXJuYXRlcyA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YXJpYW50QWx0ZXJuYXRlcyk7CisKKyAgICBmb3Ig
KGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5mb250UHJvcGVydHlD
aGFuZ2VkKCp0aGlzKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMDQsNiArMjc2LDEw
IEBAIGJvb2wgQ1NTRm9udEZhY2U6OnNldFZhcmlhbnRFYXN0QXNpYW4oQ1NTVmFsdWUmIHZhcmlh
bnRFYXN0QXNpYW4pCiAgICAgbV92YXJpYW50U2V0dGluZ3MuZWFzdEFzaWFuVmFyaWFudCA9IGVh
c3RBc2lhbi52YXJpYW50OwogICAgIG1fdmFyaWFudFNldHRpbmdzLmVhc3RBc2lhbldpZHRoID0g
ZWFzdEFzaWFuLndpZHRoOwogICAgIG1fdmFyaWFudFNldHRpbmdzLmVhc3RBc2lhblJ1YnkgPSBl
YXN0QXNpYW4ucnVieTsKKworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAg
ICAgICBjbGllbnQtPmZvbnRQcm9wZXJ0eUNoYW5nZWQoKnRoaXMpOworCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTIxOCw2ICsyOTQsMTAgQEAgYm9vbCBDU1NGb250RmFjZTo6c2V0RmVhdHVy
ZVNldHRpbmdzKENTU1ZhbHVlJiBmZWF0dXJlU2V0dGluZ3MpCiAgICAgICAgIENTU0ZvbnRGZWF0
dXJlVmFsdWUmIGZlYXR1cmUgPSBkb3duY2FzdDxDU1NGb250RmVhdHVyZVZhbHVlPihyYW5nZVZh
bHVlLmdldCgpKTsKICAgICAgICAgbV9mZWF0dXJlU2V0dGluZ3MuaW5zZXJ0KEZvbnRGZWF0dXJl
KGZlYXR1cmUudGFnKCksIGZlYXR1cmUudmFsdWUoKSkpOwogICAgIH0KKworICAgIGZvciAoYXV0
byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmZvbnRQcm9wZXJ0eUNoYW5n
ZWQoKnRoaXMpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIzNyw5ICszMTcsMzkgQEAg
dm9pZCBDU1NGb250RmFjZTo6YWRkQ2xpZW50KENsaWVudCYgY2xpZW50KQogCiB2b2lkIENTU0Zv
bnRGYWNlOjpyZW1vdmVDbGllbnQoQ2xpZW50JiBjbGllbnQpCiB7CisgICAgQVNTRVJUKG1fY2xp
ZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsK
IH0KIAorUmVmPEZvbnRGYWNlPiBDU1NGb250RmFjZTo6d3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSYg
ZXhlY1N0YXRlKQoreworICAgIGlmIChtX3dyYXBwZXIpCisgICAgICAgIHJldHVybiBSZWY8Rm9u
dEZhY2U+KCptX3dyYXBwZXIuZ2V0KCkpOworCisgICAgUmVmPEZvbnRGYWNlPiB3cmFwcGVyID0g
Rm9udEZhY2U6OmNyZWF0ZShleGVjU3RhdGUsICp0aGlzKTsKKyAgICBzd2l0Y2ggKG1fc3RhdHVz
KSB7CisgICAgY2FzZSBTdGF0dXM6OlBlbmRpbmc6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U3RhdHVzOjpMb2FkaW5nOgorICAgICAgICB3cmFwcGVyLT5mb250U3RhdGVDaGFuZ2VkKCp0aGlz
LCBTdGF0dXM6OlBlbmRpbmcsIFN0YXR1czo6TG9hZGluZyk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU3RhdHVzOjpUaW1lZE91dDoKKyAgICAgICAgd3JhcHBlci0+Zm9udFN0YXRlQ2hhbmdl
ZCgqdGhpcywgU3RhdHVzOjpQZW5kaW5nLCBTdGF0dXM6OkxvYWRpbmcpOworICAgICAgICB3cmFw
cGVyLT5mb250U3RhdGVDaGFuZ2VkKCp0aGlzLCBTdGF0dXM6OkxvYWRpbmcsIFN0YXR1czo6VGlt
ZWRPdXQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YXR1czo6U3VjY2VzczoKKyAgICAg
ICAgd3JhcHBlci0+Zm9udFN0YXRlQ2hhbmdlZCgqdGhpcywgU3RhdHVzOjpQZW5kaW5nLCBTdGF0
dXM6OkxvYWRpbmcpOworICAgICAgICB3cmFwcGVyLT5mb250U3RhdGVDaGFuZ2VkKCp0aGlzLCBT
dGF0dXM6OlBlbmRpbmcsIFN0YXR1czo6U3VjY2Vzcyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgU3RhdHVzOjpGYWlsdXJlOgorICAgICAgICB3cmFwcGVyLT5mb250U3RhdGVDaGFuZ2VkKCp0
aGlzLCBTdGF0dXM6OlBlbmRpbmcsIFN0YXR1czo6TG9hZGluZyk7CisgICAgICAgIHdyYXBwZXIt
PmZvbnRTdGF0ZUNoYW5nZWQoKnRoaXMsIFN0YXR1czo6UGVuZGluZywgU3RhdHVzOjpGYWlsdXJl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fd3JhcHBlciA9IHdyYXBwZXItPmNyZWF0
ZVdlYWtQdHIoKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogdm9pZCBDU1NGb250RmFjZTo6
YWRvcHRTb3VyY2Uoc3RkOjp1bmlxdWVfcHRyPENTU0ZvbnRGYWNlU291cmNlPiYmIHNvdXJjZSkK
IHsKICAgICBtX3NvdXJjZXMuYXBwZW5kKFdURk1vdmUoc291cmNlKSk7CkBAIC0yNjksNyArMzc5
LDcgQEAgdm9pZCBDU1NGb250RmFjZTo6c2V0U3RhdHVzKFN0YXR1cyBuZXdTdGF0dXMpCiAgICAg
fQogCiAgICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+
c3RhdGVDaGFuZ2VkKCp0aGlzLCBtX3N0YXR1cywgbmV3U3RhdHVzKTsKKyAgICAgICAgY2xpZW50
LT5mb250U3RhdGVDaGFuZ2VkKCp0aGlzLCBtX3N0YXR1cywgbmV3U3RhdHVzKTsKIAogICAgIG1f
c3RhdHVzID0gbmV3U3RhdHVzOwogfQpAQCAtMjgyLDYgKzM5Miw3IEBAIHZvaWQgQ1NTRm9udEZh
Y2U6OmZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UmKQogICAgIGlmIChtX3NvdXJjZXNQb3B1
bGF0ZWQpCiAgICAgICAgIHB1bXAoKTsKIAorICAgIEFTU0VSVChtX2ZvbnRTZWxlY3Rvcik7CiAg
ICAgbV9mb250U2VsZWN0b3ItPmZvbnRMb2FkZWQoKTsKIAogICAgIGZvciAoYXV0byYgY2xpZW50
IDogbV9jbGllbnRzKQpAQCAtMjk2LDkgKzQwNywxMCBAQCBzaXplX3QgQ1NTRm9udEZhY2U6OnB1
bXAoKQogCiAgICAgICAgIGlmIChzb3VyY2UtPnN0YXR1cygpID09IENTU0ZvbnRGYWNlU291cmNl
OjpTdGF0dXM6OlBlbmRpbmcpIHsKICAgICAgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTdGF0
dXM6OlBlbmRpbmcgfHwgbV9zdGF0dXMgPT0gU3RhdHVzOjpMb2FkaW5nIHx8IG1fc3RhdHVzID09
IFN0YXR1czo6VGltZWRPdXQpOworICAgICAgICAgICAgQVNTRVJUKG1fZm9udFNlbGVjdG9yKTsK
ICAgICAgICAgICAgIGlmIChtX3N0YXR1cyA9PSBTdGF0dXM6OlBlbmRpbmcpCiAgICAgICAgICAg
ICAgICAgc2V0U3RhdHVzKFN0YXR1czo6TG9hZGluZyk7Ci0gICAgICAgICAgICBzb3VyY2UtPmxv
YWQobV9mb250U2VsZWN0b3IuZ2V0KCkpOworICAgICAgICAgICAgc291cmNlLT5sb2FkKCptX2Zv
bnRTZWxlY3Rvcik7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKHNvdXJjZS0+c3RhdHVz
KCkpIHsKQEAgLTM0NSw4ICs0NTcsMTAgQEAgUmVmUHRyPEZvbnQ+IENTU0ZvbnRGYWNlOjpmb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnQKICAgICBz
aXplX3Qgc3RhcnRJbmRleCA9IHB1bXAoKTsKICAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRl
eDsgaSA8IG1fc291cmNlcy5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvJiBzb3VyY2UgPSBt
X3NvdXJjZXNbaV07Ci0gICAgICAgIGlmIChzb3VyY2UtPnN0YXR1cygpID09IENTU0ZvbnRGYWNl
U291cmNlOjpTdGF0dXM6OlBlbmRpbmcpCi0gICAgICAgICAgICBzb3VyY2UtPmxvYWQobV9mb250
U2VsZWN0b3IuZ2V0KCkpOworICAgICAgICBpZiAoc291cmNlLT5zdGF0dXMoKSA9PSBDU1NGb250
RmFjZVNvdXJjZTo6U3RhdHVzOjpQZW5kaW5nKSB7CisgICAgICAgICAgICBBU1NFUlQobV9mb250
U2VsZWN0b3IpOworICAgICAgICAgICAgc291cmNlLT5sb2FkKCptX2ZvbnRTZWxlY3Rvcik7Cisg
ICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKHNvdXJjZS0+c3RhdHVzKCkpIHsKICAgICAgICAg
Y2FzZSBDU1NGb250RmFjZVNvdXJjZTo6U3RhdHVzOjpQZW5kaW5nOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2UuaAppbmRleCAxMDdkOWYyODIzODZiNmU2YzYxYWRiMWJiM2RmOTkwZTIwZGVmYzRmLi5m
YjQ3ZjM1YTlmZTBhYmE4ZDc3NzA5ZDZkYTIxY2YyZjQ5Njc5MGRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2UuaApAQCAtMjcsNyArMjcsNiBAQAogI2RlZmluZSBDU1NGb250RmFjZV9oCiAKICNp
bmNsdWRlICJDU1NGb250RmFjZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NGb250RmFjZVNvdXJjZS5o
IgogI2luY2x1ZGUgIkZvbnRGZWF0dXJlU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3Mu
aCIKICNpbmNsdWRlIDxtZW1vcnk+CkBAIC0zNiwyMiArMzUsMjkgQEAKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
Y2xhc3MgRXhlY1N0YXRlOworfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENTU0Zv
bnRGYWNlU291cmNlOworY2xhc3MgQ1NTRm9udFNlbGVjdG9yOwogY2xhc3MgQ1NTU2VnbWVudGVk
Rm9udEZhY2U7CiBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIENTU1ZhbHVlTGlzdDsKK2NsYXNzIERv
Y3VtZW50OwogY2xhc3MgRm9udERlc2NyaXB0aW9uOwogY2xhc3MgRm9udDsKIGNsYXNzIEZvbnRG
YWNlOwogCi0vLyBGSVhNRTogVGhpcyBjbGFzcyBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlZmVyZW5j
ZSBjb3VudGVkLgogY2xhc3MgQ1NTRm9udEZhY2UgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxD
U1NGb250RmFjZT4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTRm9udEZhY2U+IGNyZWF0
ZShDU1NGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvciwgRm9udEZhY2UqIHdyYXBwZXIgPSBudWxs
cHRyLCBib29sIGlzTG9jYWxGYWxsYmFjayA9IGZhbHNlKQorICAgIHN0YXRpYyBSZWY8Q1NTRm9u
dEZhY2U+IGNyZWF0ZShDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciwgU3R5bGVSdWxlRm9u
dEZhY2UqIGNzc0Nvbm5lY3Rpb24gPSBudWxscHRyLCBGb250RmFjZSogd3JhcHBlciA9IG51bGxw
dHIsIGJvb2wgaXNMb2NhbEZhbGxiYWNrID0gZmFsc2UpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDU1NGb250RmFjZShmb250U2VsZWN0b3IsIHdyYXBwZXIsIGlzTG9jYWxG
YWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGb250RmFjZShmb250
U2VsZWN0b3IsIGNzc0Nvbm5lY3Rpb24sIHdyYXBwZXIsIGlzTG9jYWxGYWxsYmFjaykpOwogICAg
IH0KICAgICB2aXJ0dWFsIH5DU1NGb250RmFjZSgpOwogCkBAIC03OCw2ICs4NCwxMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRUcmFpdHNNYXNrKEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2spIHsg
bV90cmFpdHNNYXNrID0gdHJhaXRzTWFzazsgfQogICAgIGJvb2wgaXNMb2NhbEZhbGxiYWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0xvY2FsRmFsbGJhY2s7IH0KICAgICBTdGF0dXMgc3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICBTdHlsZVJ1bGVGb250RmFjZSogY3NzQ29u
bmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY3NzQ29ubmVjdGlvbi5nZXQoKTsgfQorCisgICAg
c3RhdGljIE9wdGlvbmFsPEZvbnRUcmFpdHNNYXNrPiBjYWxjdWxhdGVTdHlsZShDU1NWYWx1ZSYg
c3R5bGUpOworICAgIHN0YXRpYyBPcHRpb25hbDxGb250VHJhaXRzTWFzaz4gY2FsY3VsYXRlV2Vp
Z2h0KENTU1ZhbHVlJiB3ZWlnaHQpOwogCiAgICAgY2xhc3MgQ2xpZW50OwogICAgIHZvaWQgYWRk
Q2xpZW50KENsaWVudCYpOwpAQCAtOTMsMTEgKzEwMywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBs
b2FkKCk7CiAgICAgUmVmUHRyPEZvbnQ+IGZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CiAKKyAgICBzdGF0aWMgdm9p
ZCBhcHBlbmRTb3VyY2VzKENTU0ZvbnRGYWNlJiwgQ1NTVmFsdWVMaXN0JiwgRG9jdW1lbnQqLCBi
b29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOworCiAgICAgY2xh
c3MgQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZm9udExvYWRlZChDU1NGb250RmFjZSYpIHsgfTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYsIFN0YXR1cyBvbGRTdGF0
ZSwgU3RhdHVzIG5ld1N0YXRlKSB7IFVOVVNFRF9QQVJBTShvbGRTdGF0ZSk7IFVOVVNFRF9QQVJB
TShuZXdTdGF0ZSk7IH07CisgICAgICAgIHZpcnR1YWwgdm9pZCBmb250U3RhdGVDaGFuZ2VkKENT
U0ZvbnRGYWNlJiwgU3RhdHVzIG9sZFN0YXRlLCBTdGF0dXMgbmV3U3RhdGUpIHsgVU5VU0VEX1BB
UkFNKG9sZFN0YXRlKTsgVU5VU0VEX1BBUkFNKG5ld1N0YXRlKTsgfTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGZvbnRQcm9wZXJ0eUNoYW5nZWQoQ1NTRm9udEZhY2UmLCBDU1NWYWx1ZUxpc3QqIG9s
ZEZhbWlsaWVzID0gbnVsbHB0cikgeyBVTlVTRURfUEFSQU0ob2xkRmFtaWxpZXMpOyB9OwogICAg
IH07CiAKICAgICAvLyBQZW5kaW5nID0+IExvYWRpbmcgID0+IFRpbWVkT3V0CkBAIC0xMzIsMTQg
KzE0NSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIFVDaGFyMzIgbV90bzsKICAgICB9OwogCi0gICAg
Rm9udEZhY2UqIHdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXI7IH0KKyAgICAvLyBX
ZSBkb24ndCBndWFyYW50ZWUgdGhhdCB0aGUgRm9udEZhY2Ugd3JhcHBlciB3aWxsIGJlIHRoZSBz
YW1lIGV2ZXJ5IHRpbWUgeW91IGFzayBmb3IgaXQuCisgICAgUmVmPEZvbnRGYWNlPiB3cmFwcGVy
KEpTQzo6RXhlY1N0YXRlJik7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIGJvb2wgaGFz
U1ZHRm9udEZhY2VTb3VyY2UoKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRlOgotICAgIENTU0Zv
bnRGYWNlKENTU0ZvbnRTZWxlY3RvciYsIEZvbnRGYWNlKiwgYm9vbCBpc0xvY2FsRmFsbGJhY2sp
OworICAgIENTU0ZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciosIFN0eWxlUnVsZUZvbnRGYWNlKiwg
Rm9udEZhY2UqLCBib29sIGlzTG9jYWxGYWxsYmFjayk7CiAKICAgICBzaXplX3QgcHVtcCgpOwog
ICAgIHZvaWQgc2V0U3RhdHVzKFN0YXR1cyk7CkBAIC0xNDcsMTIgKzE2MSwxMyBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG1fZmFtaWxpZXM7CiAgICAgRm9udFRyYWl0c01h
c2sgbV90cmFpdHNNYXNrIHsgc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KEZvbnRTdHlsZU5v
cm1hbE1hc2sgfCBGb250V2VpZ2h0NDAwTWFzaykgfTsKICAgICBWZWN0b3I8VW5pY29kZVJhbmdl
PiBtX3JhbmdlczsKLSAgICBIYXNoU2V0PENsaWVudCo+IG1fY2xpZW50czsKLSAgICBSZWY8Q1NT
Rm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKLSAgICBGb250RmFjZSogbV93cmFwcGVyOwog
ICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mZWF0dXJlU2V0dGluZ3M7CiAgICAgRm9udFZhcmlh
bnRTZXR0aW5ncyBtX3ZhcmlhbnRTZXR0aW5nczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PENTU0ZvbnRGYWNlU291cmNlPj4gbV9zb3VyY2VzOworICAgIFJlZlB0cjxDU1NGb250U2VsZWN0
b3I+IG1fZm9udFNlbGVjdG9yOworICAgIFJlZlB0cjxTdHlsZVJ1bGVGb250RmFjZT4gbV9jc3ND
b25uZWN0aW9uOworICAgIEhhc2hTZXQ8Q2xpZW50Kj4gbV9jbGllbnRzOworICAgIFdlYWtQdHI8
Rm9udEZhY2U+IG1fd3JhcHBlcjsKICAgICBTdGF0dXMgbV9zdGF0dXMgeyBTdGF0dXM6OlBlbmRp
bmcgfTsKICAgICBib29sIG1faXNMb2NhbEZhbGxiYWNrIHsgZmFsc2UgfTsKICAgICBib29sIG1f
c291cmNlc1BvcHVsYXRlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0
LmNwcAppbmRleCBhMGY1ZmQ2NTMwNGQyOTY1ZDY3M2YyMjM0OWUzZTYyNTY5OTdiYTgzLi40ZjVl
YTY3NmM4MTc1ZDZmMjY0ZTM3NzNlMmI4MjRlMmUxMzgxYmZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZVNldC5jcHAKQEAgLTI2LDE3ICsyNiwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU2V0LmgiCiAKKyNpbmNsdWRlICJDU1NGb250RmFjZVNv
dXJjZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYW1pbHkuaCIKICNpbmNsdWRlICJDU1NGb250U2Vs
ZWN0b3IuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVW
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU1NlZ21lbnRlZEZvbnRGYWNlLmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVMaXN0LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCisjaW5jbHVkZSAiRm9udENh
Y2hlLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotQ1NTRm9udEZhY2VTZXQ6OkNTU0ZvbnRGYWNlU2V0KENTU0ZvbnRGYWNlU2V0Q2xpZW50
JiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCitDU1NGb250RmFjZVNldDo6Q1NTRm9u
dEZhY2VTZXQoKQogewogfQogCkBAIC00NCw2ICs0NywyMiBAQCBDU1NGb250RmFjZVNldDo6fkNT
U0ZvbnRGYWNlU2V0KCkKIHsKICAgICBmb3IgKGF1dG8mIGZhY2UgOiBtX2ZhY2VzKQogICAgICAg
ICBmYWNlLT5yZW1vdmVDbGllbnQoKnRoaXMpOworCisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9s
b2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZSkgeworICAgICAgICBmb3IgKGF1dG8mIGZh
Y2UgOiBwYWlyLnZhbHVlKQorICAgICAgICAgICAgZmFjZS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsK
KyAgICB9Cit9CisKK3ZvaWQgQ1NTRm9udEZhY2VTZXQ6OmFkZENsaWVudChDU1NGb250RmFjZVNl
dENsaWVudCYgY2xpZW50KQoreworICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Cit9CisKK3Zv
aWQgQ1NTRm9udEZhY2VTZXQ6OnJlbW92ZUNsaWVudChDU1NGb250RmFjZVNldENsaWVudCYgY2xp
ZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAgIG1f
Y2xpZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKIHZvaWQgQ1NTRm9udEZhY2VTZXQ6OmluY3Jl
bWVudEFjdGl2ZUNvdW50KCkKQEAgLTUxLDcgKzcwLDggQEAgdm9pZCBDU1NGb250RmFjZVNldDo6
aW5jcmVtZW50QWN0aXZlQ291bnQoKQogICAgICsrbV9hY3RpdmVDb3VudDsKICAgICBpZiAobV9h
Y3RpdmVDb3VudCA9PSAxKSB7CiAgICAgICAgIG1fc3RhdHVzID0gU3RhdHVzOjpMb2FkaW5nOwot
ICAgICAgICBtX2NsaWVudC5zdGFydGVkTG9hZGluZygpOworICAgICAgICBmb3IgKGF1dG8qIGNs
aWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+c3RhcnRlZExvYWRpbmcoKTsK
ICAgICB9CiB9CiAKQEAgLTYwLDcgKzgwLDggQEAgdm9pZCBDU1NGb250RmFjZVNldDo6ZGVjcmVt
ZW50QWN0aXZlQ291bnQoKQogICAgIC0tbV9hY3RpdmVDb3VudDsKICAgICBpZiAoIW1fYWN0aXZl
Q291bnQpIHsKICAgICAgICAgbV9zdGF0dXMgPSBTdGF0dXM6OkxvYWRlZDsKLSAgICAgICAgbV9j
bGllbnQuY29tcGxldGVkTG9hZGluZygpOworICAgICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1f
Y2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+Y29tcGxldGVkTG9hZGluZygpOwogICAgIH0K
IH0KIApAQCAtNzAsMjMgKzkxLDEzNCBAQCBib29sIENTU0ZvbnRGYWNlU2V0OjpoYXNGYWNlKGNv
bnN0IENTU0ZvbnRGYWNlJiBmYWNlKSBjb25zdAogICAgICAgICBpZiAobXlGYWNlLnB0cigpID09
ICZmYWNlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCit2b2lkIENTU0ZvbnRGYWNlU2V0OjpyZWdpc3RlckxvY2FsRm9udEZhY2VzRm9y
RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fbG9jYWxs
eUluc3RhbGxlZEZhY2VzTG9va3VwVGFibGUuY29udGFpbnMoZmFtaWx5TmFtZSkpOworCisgICAg
VmVjdG9yPEZvbnRUcmFpdHNNYXNrPiB0cmFpdHNNYXNrcyA9IEZvbnRDYWNoZTo6c2luZ2xldG9u
KCkuZ2V0VHJhaXRzSW5GYW1pbHkoZmFtaWx5TmFtZSk7CisgICAgaWYgKHRyYWl0c01hc2tzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+
IGZhY2VzID0geyB9OworICAgIGZvciAoYXV0byBtYXNrIDogdHJhaXRzTWFza3MpIHsKKyAgICAg
ICAgUmVmPENTU0ZvbnRGYWNlPiBmYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZShudWxscHRyLCBu
dWxscHRyLCBudWxscHRyLCB0cnVlKTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IGZhbWlseUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7
CisgICAgICAgIGZhbWlseUxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKSk7CisgICAgICAgIGZhY2UtPnNldEZhbWls
aWVzKCpmYW1pbHlMaXN0KTsKKyAgICAgICAgZmFjZS0+c2V0VHJhaXRzTWFzayhtYXNrKTsKKyAg
ICAgICAgZmFjZS0+YWRvcHRTb3VyY2Uoc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJj
ZT4oZmFjZS5nZXQoKSwgZmFtaWx5TmFtZSkpOworICAgICAgICBBU1NFUlQoIWZhY2UtPmFsbFNv
dXJjZXNGYWlsZWQoKSk7CisgICAgICAgIGZhY2VzLmFwcGVuZChXVEZNb3ZlKGZhY2UpKTsKKyAg
ICB9CisgICAgbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZS5hZGQoZmFtaWx5TmFt
ZSwgV1RGTW92ZShmYWNlcykpOworfQorCitTdHJpbmcgQ1NTRm9udEZhY2VTZXQ6OmZhbWlseU5h
bWVGcm9tUHJpbWl0aXZlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUuaXNGb250RmFtaWx5KCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5mb250RmFtaWx5
KCkuZmFtaWx5TmFtZTsKKyAgICBpZiAoIXZhbHVlLmlzVmFsdWVJRCgpKQorICAgICAgICByZXR1
cm4geyB9OworCisgICAgLy8gV2UgbmVlZCB0byB1c2UgdGhlIHJhdyB0ZXh0IGZvciBhbGwgdGhl
IGdlbmVyaWMgZmFtaWx5IHR5cGVzLCBzaW5jZSBAZm9udC1mYWNlIGlzIGEgd2F5IG9mIGFjdHVh
bGx5CisgICAgLy8gZGVmaW5pbmcgd2hhdCBmb250IHRvIHVzZSBmb3IgdGhvc2UgdHlwZXMuCisg
ICAgc3dpdGNoICh2YWx1ZS5nZXRWYWx1ZUlEKCkpIHsKKyAgICBjYXNlIENTU1ZhbHVlU2VyaWY6
CisgICAgICAgIHJldHVybiBzZXJpZkZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlU2Fuc1Nlcmlm
OgorICAgICAgICByZXR1cm4gc2Fuc1NlcmlmRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVDdXJz
aXZlOgorICAgICAgICByZXR1cm4gY3Vyc2l2ZUZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlRmFu
dGFzeToKKyAgICAgICAgcmV0dXJuIGZhbnRhc3lGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZU1v
bm9zcGFjZToKKyAgICAgICAgcmV0dXJuIG1vbm9zcGFjZUZhbWlseTsKKyAgICBjYXNlIENTU1Zh
bHVlV2Via2l0UGljdG9ncmFwaDoKKyAgICAgICAgcmV0dXJuIHBpY3RvZ3JhcGhGYW1pbHk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTRm9u
dEZhY2VTZXQ6OmFkZFRvRmFjZXNMb29rdXBUYWJsZShDU1NGb250RmFjZSYgZmFjZSkKK3sKKyAg
ICBpZiAoZmFjZS5mYW1pbGllcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgaXRlbSA6ICpmYWNl
LmZhbWlsaWVzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBmYW1pbHlOYW1lID0gQ1NTRm9udEZh
Y2VTZXQ6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PihpdGVtLmdldCgpKSk7CisgICAgICAgICAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9mYWNlc0xvb2t1cFRhYmxlLmFkZChmYW1pbHlOYW1lLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNl
Pj4oKSk7CisgICAgICAgICAgICBhdXRvJiBmYW1pbHlGb250RmFjZXMgPSBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOworICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Cisg
ICAgICAgICAgICAgICAgLy8gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzIGdyb3dzIHdpdGhv
dXQgYm91bmQsIGV2ZW50dWFsbHkgZW5jb3Jwb3JhdGluZyBldmVyeSBmb250IGluc3RhbGxlZCBv
biB0aGUgc3lzdGVtLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYnkgZGVzaWduLgorICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoZmFtaWx5TmFtZSk7
CisgICAgICAgICAgICAgICAgZmFtaWx5Rm9udEZhY2VzID0geyB9OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmYW1pbHlGb250RmFjZXMuYXBwZW5kKGZhY2UpOworICAgICAgICB9Cisg
ICAgfQorfQorCiB2b2lkIENTU0ZvbnRGYWNlU2V0OjphZGQoQ1NTRm9udEZhY2UmIGZhY2UpCiB7
CiAgICAgQVNTRVJUKCFoYXNGYWNlKGZhY2UpKTsKIAotICAgIG1fZmFjZXMuYXBwZW5kKGZhY2Up
OwogICAgIGZhY2UuYWRkQ2xpZW50KCp0aGlzKTsKKyAgICBtX2NhY2hlLmNsZWFyKCk7CisKKyAg
ICBpZiAoZmFjZS5jc3NDb25uZWN0aW9uKCkpCisgICAgICAgIG1fZmFjZXMuaW5zZXJ0KG1fZmFj
ZXNQYXJ0aXRpb25JbmRleCsrLCBmYWNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fZmFjZXMuYXBw
ZW5kKGZhY2UpOworCisgICAgYWRkVG9GYWNlc0xvb2t1cFRhYmxlKGZhY2UpOworCiAgICAgaWYg
KGZhY2Uuc3RhdHVzKCkgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6TG9hZGluZyB8fCBmYWNlLnN0
YXR1cygpID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlRpbWVkT3V0KQogICAgICAgICBpbmNyZW1l
bnRBY3RpdmVDb3VudCgpOwogfQogCit2b2lkIENTU0ZvbnRGYWNlU2V0OjpyZW1vdmVGcm9tRmFj
ZXNMb29rdXBUYWJsZShjb25zdCBDU1NGb250RmFjZSYgZmFjZSwgY29uc3QgQ1NTVmFsdWVMaXN0
JiBmYW1pbGllc1RvU2VhcmNoRm9yKQoreworICAgIGZvciAoYXV0byYgaXRlbSA6IGZhbWlsaWVz
VG9TZWFyY2hGb3IpIHsKKyAgICAgICAgU3RyaW5nIGZhbWlseU5hbWUgPSBDU1NGb250RmFjZVNl
dDo6ZmFtaWx5TmFtZUZyb21QcmltaXRpdmUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0
ZW0uZ2V0KCkpKTsKKyAgICAgICAgaWYgKGZhbWlseU5hbWUuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fZmFjZXNMb29rdXBUYWJs
ZS5maW5kKGZhbWlseU5hbWUpOworICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9mYWNlc0xv
b2t1cFRhYmxlLmVuZCgpKTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZXJhdG9yLT52YWx1ZS5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZVtpXS5wdHIoKSA9PSAmZmFjZSkgeworICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUu
cmVtb3ZlKGkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIEFTU0VSVChmb3VuZCk7CisgICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVl
LnNpemUoKSkKKyAgICAgICAgICAgIG1fZmFjZXNMb29rdXBUYWJsZS5yZW1vdmUoaXRlcmF0b3Ip
OworICAgIH0KK30KKwogdm9pZCBDU1NGb250RmFjZVNldDo6cmVtb3ZlKGNvbnN0IENTU0ZvbnRG
YWNlJiBmYWNlKQogeworICAgIG1fY2FjaGUuY2xlYXIoKTsKKworICAgIGlmIChmYWNlLmZhbWls
aWVzKCkpCisgICAgICAgIHJlbW92ZUZyb21GYWNlc0xvb2t1cFRhYmxlKGZhY2UsICpmYWNlLmZh
bWlsaWVzKCkpOworCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZhY2VzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIGlmIChtX2ZhY2VzW2ldLnB0cigpID09ICZmYWNlKSB7CisgICAgICAg
ICAgICBpZiAoaSA8IG1fZmFjZXNQYXJ0aXRpb25JbmRleCkKKyAgICAgICAgICAgICAgICAtLW1f
ZmFjZXNQYXJ0aXRpb25JbmRleDsKICAgICAgICAgICAgIG1fZmFjZXNbaV0tPnJlbW92ZUNsaWVu
dCgqdGhpcyk7CiAgICAgICAgICAgICBtX2ZhY2VzLnJlbW92ZShpKTsKICAgICAgICAgICAgIGlm
IChmYWNlLnN0YXR1cygpID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OkxvYWRpbmcgfHwgZmFjZS5z
dGF0dXMoKSA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpUaW1lZE91dCkKQEAgLTk3LDMwICsyMjks
NDMgQEAgdm9pZCBDU1NGb250RmFjZVNldDo6cmVtb3ZlKGNvbnN0IENTU0ZvbnRGYWNlJiBmYWNl
KQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmc+
IGV4dHJhY3RGYW1pbGllcyhjb25zdCBDU1NWYWx1ZUxpc3QmIGxpc3QpCit2b2lkIENTU0ZvbnRG
YWNlU2V0OjpjbGVhcigpCiB7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKLSAgICBmb3Ig
KGF1dG8mIGZhbWlseSA6IGxpc3QpIHsKLSAgICAgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihmYW1pbHkuZ2V0KCkpOwot
ICAgICAgICBpZiAoIXByaW1pdGl2ZS5pc0ZvbnRGYW1pbHkoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICByZXN1bHQuYWRkKHByaW1pdGl2ZS5mb250RmFtaWx5KCkuZmFtaWx5TmFt
ZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9mYWNlcy5jbGVhcigpOworICAg
IG1fZmFjZXNMb29rdXBUYWJsZS5jbGVhcigpOworICAgIG1fbG9jYWxseUluc3RhbGxlZEZhY2Vz
TG9va3VwVGFibGUuY2xlYXIoKTsKKyAgICBtX2NhY2hlLmNsZWFyKCk7CiB9CiAKLXN0YXRpYyBi
b29sIGZhbWlsaWVzSW50ZXJzZWN0KGNvbnN0IENTU0ZvbnRGYWNlJiBmYWNlLCBjb25zdCBDU1NW
YWx1ZUxpc3QmIHJlcXVlc3QpCitDU1NGb250RmFjZSYgQ1NTRm9udEZhY2VTZXQ6Om9wZXJhdG9y
W10oc2l6ZV90IGkpCiB7Ci0gICAgaWYgKCFmYWNlLmZhbWlsaWVzKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBBU1NFUlQoaSA8IGZhY2VDb3VudCgpKTsKKyAgICByZXR1cm4gbV9mYWNl
c1tpXTsKK30KIAotICAgIEhhc2hTZXQ8U3RyaW5nPiBmYWNlRmFtaWxpZXMgPSBleHRyYWN0RmFt
aWxpZXMoKmZhY2UuZmFtaWxpZXMoKSk7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHJlcXVlc3RGYW1p
bGllcyA9IGV4dHJhY3RGYW1pbGllcyhyZXF1ZXN0KTsKLSAgICBmb3IgKGF1dG8mIGZhbWlseTEg
OiBmYWNlRmFtaWxpZXMpIHsKLSAgICAgICAgaWYgKHJlcXVlc3RGYW1pbGllcy5jb250YWlucyhm
YW1pbHkxKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7CitzdGF0aWMgT3B0aW9uYWw8Rm9udFRyYWl0c01hc2s+IGNvbXB1dGVGb250VHJhaXRzTWFz
ayhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWU+
IHN0eWxlVmFsdWUgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0
eWxlKS5nZXQoKTsKKyAgICBpZiAoIXN0eWxlVmFsdWUpCisgICAgICAgIHN0eWxlVmFsdWUgPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
cm1hbCkucHRyKCk7CisKKyAgICBGb250VHJhaXRzTWFzayBzdHlsZU1hc2s7CisgICAgaWYgKGF1
dG8gc3R5bGVNYXNrT3B0aW9uYWwgPSBDU1NGb250RmFjZTo6Y2FsY3VsYXRlU3R5bGUoKnN0eWxl
VmFsdWUpKQorICAgICAgICBzdHlsZU1hc2sgPSBzdHlsZU1hc2tPcHRpb25hbC52YWx1ZSgpOwor
ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisKKyAgICBSZWZQdHI8Q1NTVmFsdWU+
IHdlaWdodFZhbHVlID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRX
ZWlnaHQpLmdldCgpOworICAgIGlmICghd2VpZ2h0VmFsdWUpCisgICAgICAgIHdlaWdodFZhbHVl
ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb3JtYWwpLnB0cigpOworCisgICAgRm9udFRyYWl0c01hc2sgd2VpZ2h0TWFzazsKKyAgICBp
ZiAoYXV0byB3ZWlnaHRNYXNrT3B0aW9uYWwgPSBDU1NGb250RmFjZTo6Y2FsY3VsYXRlV2VpZ2h0
KCp3ZWlnaHRWYWx1ZSkpCisgICAgICAgIHdlaWdodE1hc2sgPSB3ZWlnaHRNYXNrT3B0aW9uYWwu
dmFsdWUoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBOdWxsb3B0OworCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3R5bGVN
YXNrKSB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih3ZWlnaHRNYXNrKSk7CiB9CiAKIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRGYWNlPj4gQ1NTRm9udEZhY2VTZXQ6Om1hdGNo
aW5nRmFjZXMoY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2Rl
JiBlYykKQEAgLTEzMiwxNCArMjc3LDE1IEBAIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PENTU0ZvbnRGYWNlPj4gQ1NTRm9udEZhY2VTZXQ6Om1hdGNoaW5nRmFjZXMoY29uc3QKICAgICAg
ICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBi
b29sIGRlc2lyZWRTdHlsZUlzTm9ybWFsID0gdHJ1ZTsKLSAgICBpZiAoUmVmUHRyPENTU1ZhbHVl
PiBkZXNpcmVkU3R5bGUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZv
bnRTdHlsZSkpIHsKLSAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmRlc2lyZWRT
dHlsZSkpIHsKLSAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzaXJlZFN0eWxlSXNOb3JtYWwgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmRlc2lyZWRTdHlsZSkuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlTm9ybWFsOworCisgICAgRm9udFRyYWl0c01hc2sgZm9udFRyYWl0c01hc2s7CisgICAg
aWYgKGF1dG8gbWFza09wdGlvbmFsID0gY29tcHV0ZUZvbnRUcmFpdHNNYXNrKHN0eWxlLmdldCgp
KSkKKyAgICAgICAgZm9udFRyYWl0c01hc2sgPSBtYXNrT3B0aW9uYWwudmFsdWUoKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KKwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gZmFtaWx5ID0gc3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKICAgICBpZiAoIWlzPENTU1ZhbHVlTGlz
dD4oZmFtaWx5LmdldCgpKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CkBAIC0xNDcsMjMg
KzI5MywyMyBAQCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4+IENT
U0ZvbnRGYWNlU2V0OjptYXRjaGluZ0ZhY2VzKGNvbnN0CiAgICAgfQogICAgIENTU1ZhbHVlTGlz
dCYgZmFtaWx5TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZhbWlseSk7CiAKLSAgICAv
LyBNYXRjaCBDU1NGb250U2VsZWN0b3I6OmdldEZvbnRGYWNlKCkKLSAgICBmb3IgKGF1dG8mIGZh
Y2UgOiBtX2ZhY2VzKSB7Ci0gICAgICAgIGlmICghZmFtaWxpZXNJbnRlcnNlY3QoZmFjZSwgZmFt
aWx5TGlzdCkgfHwgKGRlc2lyZWRTdHlsZUlzTm9ybWFsICYmICEoZmFjZS0+dHJhaXRzTWFzaygp
ICYgRm9udFN0eWxlTm9ybWFsTWFzaykpKQorICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1bmlx
dWVGYW1pbGllczsKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGZhbWlseUxpc3QpIHsKKyAgICAg
ICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihmYW1pbHkuZ2V0KCkpOworICAgICAgICBpZiAoIXByaW1pdGl2ZS5pc0ZvbnRG
YW1pbHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXN1bHQuYXBwZW5kKGZh
Y2UuZ2V0KCkpOworICAgICAgICB1bmlxdWVGYW1pbGllcy5hZGQocHJpbWl0aXZlLmZvbnRGYW1p
bHkoKS5mYW1pbHlOYW1lKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KIAotdm9pZCBD
U1NGb250RmFjZVNldDo6bG9hZChjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgYXV0byBtYXRjaGluZ0ZhY2VzID0gdGhpcy0+
bWF0Y2hpbmdGYWNlcyhmb250LCB0ZXh0LCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1
cm47CisgICAgZm9yIChhdXRvJiBmYW1pbHkgOiB1bmlxdWVGYW1pbGllcykgeworICAgICAgICBD
U1NTZWdtZW50ZWRGb250RmFjZSogZmFjZXMgPSBnZXRGb250RmFjZShmb250VHJhaXRzTWFzaywg
ZmFtaWx5KTsKKyAgICAgICAgaWYgKCFmYWNlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBmb3IgKGF1dG8mIGNvbnN0aXR1ZW50RmFjZSA6IGZhY2VzLT5jb25zdGl0dWVudEZhY2Vz
KCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbnN0aXR1ZW50RmFjZS5nZXQoKSk7Cisg
ICAgfQogCi0gICAgZm9yIChhdXRvJiBmYWNlIDogbWF0Y2hpbmdGYWNlcykKLSAgICAgICAgZmFj
ZS5nZXQoKS5sb2FkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBDU1NGb250RmFj
ZVNldDo6Y2hlY2soY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQpAQCAtMTc5LDcgKzMyNSwxMTkgQEAgYm9vbCBDU1NGb250RmFjZVNldDo6
Y2hlY2soY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNv
ZGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDU1NGb250RmFjZVNldDo6c3RhdGVDaGFu
Z2VkKENTU0ZvbnRGYWNlJiBmYWNlLCBDU1NGb250RmFjZTo6U3RhdHVzIG9sZFN0YXRlLCBDU1NG
b250RmFjZTo6U3RhdHVzIG5ld1N0YXRlKQorY2xhc3MgRm9udEZhY2VDb21wYXJhdG9yIHsKK3B1
YmxpYzoKKyAgICBGb250RmFjZUNvbXBhcmF0b3IoRm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0
c01hc2tGb3JDb21wYXJpc29uKQorICAgICAgICA6IG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21w
YXJpc29uKGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbikKKyAgICB7CisgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21w
YXJpc29uICYgRm9udFdlaWdodE1hc2spOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IoKShj
b25zdCBDU1NGb250RmFjZSYgZmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBzZWNvbmQpCisgICAg
eworICAgICAgICBGb250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC50cmFpdHNN
YXNrKCk7CisgICAgICAgIEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01hc2sgPSBzZWNvbmQu
dHJhaXRzTWFzaygpOworCisgICAgICAgIGJvb2wgZmlyc3RIYXNEZXNpcmVkU3R5bGUgPSBmaXJz
dFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRTdHls
ZU1hc2s7CisgICAgICAgIGJvb2wgc2Vjb25kSGFzRGVzaXJlZFN0eWxlID0gc2Vjb25kVHJhaXRz
TWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFzazsK
KworICAgICAgICBpZiAoZmlyc3RIYXNEZXNpcmVkU3R5bGUgIT0gc2Vjb25kSGFzRGVzaXJlZFN0
eWxlKQorICAgICAgICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxlOworCisgICAgICAg
IGlmICgobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNN
YXNrKSAmJiAhZmlyc3QuaXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5pc0xvY2FsRmFsbGJh
Y2soKSkgeworICAgICAgICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0ZWQg
dGhhdCBpdCBjYW4gb25seSBzdXBwb3J0IGl0YWxpY3MgdG8gYSBmb250IHRoYXQgY2xhaW1zIHRv
IHN1cHBvcnQKKyAgICAgICAgICAgIC8vIGFsbCBzdHlsZXMuIFRoZSBzcGVjaWFsaXplZCBmb250
IGlzIG1vcmUgbGlrZWx5IHRvIGJlIHRoZSBvbmUgdGhlIGF1dGhvciB3YW50cyB1c2VkLgorICAg
ICAgICAgICAgYm9vbCBmaXJzdFJlcXVpcmVzSXRhbGljcyA9IChmaXJzdFRyYWl0c01hc2sgJiBG
b250U3R5bGVJdGFsaWNNYXNrKSAmJiAhKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1h
bE1hc2spOworICAgICAgICAgICAgYm9vbCBzZWNvbmRSZXF1aXJlc0l0YWxpY3MgPSAoc2Vjb25k
VHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEoc2Vjb25kVHJhaXRzTWFzayAm
IEZvbnRTdHlsZU5vcm1hbE1hc2spOworICAgICAgICAgICAgaWYgKGZpcnN0UmVxdWlyZXNJdGFs
aWNzICE9IHNlY29uZFJlcXVpcmVzSXRhbGljcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmly
c3RSZXF1aXJlc0l0YWxpY3M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2Vjb25kVHJhaXRz
TWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFdlaWdodE1hc2sp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChmaXJzdFRyYWl0c01hc2sg
JiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRXZWlnaHRNYXNrKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
MjAxMS9XRC1jc3MzLWZvbnRzLTIwMTExMDA0LyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSBzYXlz
IDoKKyAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyBsZXNzIHRoYW4gNDAw
LCB3ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBhcmUgY2hlY2tlZCBpbiBkZXNjZW5k
aW5nIG9yZGVyIGZvbGxvd2VkIGJ5IHdlaWdodHMgYWJvdmUgdGhlIGRlc2lyZWQgd2VpZ2h0IGlu
IGFzY2VuZGluZyBvcmRlciB1bnRpbCBhIG1hdGNoIGlzIGZvdW5kLgorICAgICAgICAvLyAgIC0g
SWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIGdyZWF0ZXIgdGhhbiA1MDAsIHdlaWdodHMgYWJvdmUg
dGhlIGRlc2lyZWQgd2VpZ2h0IGFyZSBjaGVja2VkIGluIGFzY2VuZGluZyBvcmRlciBmb2xsb3dl
ZCBieSB3ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBpbiBkZXNjZW5kaW5nIG9yZGVy
IHVudGlsIGEgbWF0Y2ggaXMgZm91bmQuCisgICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3
ZWlnaHQgaXMgNDAwLCA1MDAgaXMgY2hlY2tlZCBmaXJzdCBhbmQgdGhlbiB0aGUgcnVsZSBmb3Ig
ZGVzaXJlZCB3ZWlnaHRzIGxlc3MgdGhhbiA0MDAgaXMgdXNlZC4KKyAgICAgICAgLy8gICAtIElm
IHRoZSBkZXNpcmVkIHdlaWdodCBpcyA1MDAsIDQwMCBpcyBjaGVja2VkIGZpcnN0IGFuZCB0aGVu
IHRoZSBydWxlIGZvciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFuIDQwMCBpcyB1c2VkLgorCisg
ICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYWxsYmFja1J1bGVTZXRzID0gOTsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJ1bGVzUGVyU2V0ID0gODsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IEZvbnRUcmFpdHNNYXNrIHdlaWdodEZhbGxiYWNrUnVsZVNldHNbZmFsbGJhY2tSdWxl
U2V0c11bcnVsZXNQZXJTZXRdID0geworICAgICAgICAgICAgeyBGb250V2VpZ2h0MjAwTWFzaywg
Rm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywg
Rm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywg
Rm9udFdlaWdodDkwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDEwME1hc2ssIEZv
bnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZv
bnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZv
bnRXZWlnaHQ5MDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250
V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250
V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250
V2VpZ2h0OTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdl
aWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdl
aWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdl
aWdodDkwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWln
aHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWln
aHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWln
aHQ5MDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0
ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0
NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0
MTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkw
ME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQw
ME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEw
ME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ3MDBN
YXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBN
YXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBN
YXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFz
aywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFz
aywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFz
ayB9CisgICAgICAgIH07CisKKyAgICAgICAgdW5zaWduZWQgcnVsZVNldEluZGV4ID0gMDsKKyAg
ICAgICAgZm9yICg7ICEobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiAoMSA8PCAo
Rm9udFdlaWdodDEwMEJpdCArIHJ1bGVTZXRJbmRleCkpKTsgcnVsZVNldEluZGV4KyspIHsgfQor
CisgICAgICAgIGNvbnN0IEZvbnRUcmFpdHNNYXNrKiB3ZWlnaHRGYWxsYmFja1J1bGUgPSB3ZWln
aHRGYWxsYmFja1J1bGVTZXRzW3J1bGVTZXRJbmRleF07CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBydWxlc1BlclNldDsgKytpKSB7CisgICAgICAgICAgICBpZiAoc2Vjb25kVHJh
aXRzTWFzayAmIHdlaWdodEZhbGxiYWNrUnVsZVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBpZiAoZmlyc3RUcmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tS
dWxlW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGb250VHJhaXRzTWFzayBt
X2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbjsKK307CisKK0NTU1NlZ21lbnRlZEZvbnRG
YWNlKiBDU1NGb250RmFjZVNldDo6Z2V0Rm9udEZhY2UoRm9udFRyYWl0c01hc2sgdHJhaXRzTWFz
aywgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1f
ZmFjZXNMb29rdXBUYWJsZS5maW5kKGZhbWlseSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZmFj
ZXNMb29rdXBUYWJsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byYg
ZmFtaWx5Rm9udEZhY2VzID0gaXRlcmF0b3ItPnZhbHVlOworCisgICAgYXV0byYgc2VnbWVudGVk
Rm9udEZhY2VDYWNoZSA9IG1fY2FjaGUuYWRkKGZhbWlseSwgSGFzaE1hcDx1bnNpZ25lZCwgc3Rk
Ojp1bmlxdWVfcHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOwor
CisgICAgYXV0byYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUuYWRkKHRyYWl0c01hc2ss
IG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoZmFjZSkKKyAgICAgICAgcmV0dXJu
IGZhY2UuZ2V0KCk7CisKKyAgICBmYWNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NTZWdtZW50ZWRG
b250RmFjZT4oKTsKKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRG
YWNlPiwgMzI+IGNhbmRpZGF0ZUZvbnRGYWNlczsKKyAgICBmb3IgKGludCBpID0gZmFtaWx5Rm9u
dEZhY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIENTU0ZvbnRGYWNlJiBj
YW5kaWRhdGUgPSBmYW1pbHlGb250RmFjZXNbaV07CisgICAgICAgIHVuc2lnbmVkIGNhbmRpZGF0
ZVRyYWl0c01hc2sgPSBjYW5kaWRhdGUudHJhaXRzTWFzaygpOworICAgICAgICBpZiAoKHRyYWl0
c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBG
b250U3R5bGVOb3JtYWxNYXNrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYW5k
aWRhdGVGb250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgfQorCisgICAgYXV0byBsb2Nh
bEl0ZXJhdG9yID0gbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZS5maW5kKGZhbWls
eSk7CisgICAgaWYgKGxvY2FsSXRlcmF0b3IgIT0gbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29r
dXBUYWJsZS5lbmQoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGxvY2FsSXRl
cmF0b3ItPnZhbHVlKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVUcmFpdHNNYXNr
ID0gY2FuZGlkYXRlLT50cmFpdHNNYXNrKCk7CisgICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sg
JiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5
bGVOb3JtYWxNYXNrKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNh
bmRpZGF0ZUZvbnRGYWNlcy5hcHBlbmQoY2FuZGlkYXRlKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2FuZGlkYXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRpZGF0
ZUZvbnRGYWNlcy5lbmQoKSwgRm9udEZhY2VDb21wYXJhdG9yKHRyYWl0c01hc2spKTsKKyAgICBm
b3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZUZvbnRGYWNlcykKKyAgICAgICAgZmFjZS0+
YXBwZW5kRm9udEZhY2UoY2FuZGlkYXRlLmdldCgpKTsKKworICAgIHJldHVybiBmYWNlLmdldCgp
OworfQorCit2b2lkIENTU0ZvbnRGYWNlU2V0Ojpmb250U3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNl
JiBmYWNlLCBDU1NGb250RmFjZTo6U3RhdHVzIG9sZFN0YXRlLCBDU1NGb250RmFjZTo6U3RhdHVz
IG5ld1N0YXRlKQogewogICAgIEFTU0VSVChoYXNGYWNlKGZhY2UpKTsKICAgICBpZiAob2xkU3Rh
dGUgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6UGVuZGluZykgewpAQCAtMTg4LDkgKzQ0NiwyMyBA
QCB2b2lkIENTU0ZvbnRGYWNlU2V0OjpzdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2UmIGZhY2UsIENT
U0ZvbnRGYWNlOjpTdGF0dXMgb2xkU3RhdAogICAgIH0KICAgICBpZiAobmV3U3RhdGUgPT0gQ1NT
Rm9udEZhY2U6OlN0YXR1czo6U3VjY2VzcyB8fCBuZXdTdGF0ZSA9PSBDU1NGb250RmFjZTo6U3Rh
dHVzOjpGYWlsdXJlKSB7CiAgICAgICAgIEFTU0VSVChvbGRTdGF0ZSA9PSBDU1NGb250RmFjZTo6
U3RhdHVzOjpMb2FkaW5nIHx8IG9sZFN0YXRlID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlRpbWVk
T3V0KTsKLSAgICAgICAgbV9jbGllbnQuZmFjZUZpbmlzaGVkKGZhY2UsIG5ld1N0YXRlKTsKKyAg
ICAgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgICAgICBjbGllbnQt
PmZhY2VGaW5pc2hlZChmYWNlLCBuZXdTdGF0ZSk7CiAgICAgICAgIGRlY3JlbWVudEFjdGl2ZUNv
dW50KCk7CiAgICAgfQogfQogCit2b2lkIENTU0ZvbnRGYWNlU2V0Ojpmb250UHJvcGVydHlDaGFu
Z2VkKENTU0ZvbnRGYWNlJiBmYWNlLCBDU1NWYWx1ZUxpc3QqIG9sZEZhbWlsaWVzKQoreworICAg
IG1fY2FjaGUuY2xlYXIoKTsKKworICAgIGlmIChvbGRGYW1pbGllcykgeworICAgICAgICByZW1v
dmVGcm9tRmFjZXNMb29rdXBUYWJsZShmYWNlLCAqb2xkRmFtaWxpZXMpOworICAgICAgICBhZGRU
b0ZhY2VzTG9va3VwVGFibGUoZmFjZSk7CisgICAgfQorCisgICAgZm9yIChhdXRvKiBjbGllbnQg
OiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+Zm9udE1vZGlmaWVkKCk7Cit9CisKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmgKaW5kZXggNjY5NDdkNzgxYjhjODFkODQyMWZlMDky
YTFiNmFjYmVhNDIzNGI5Zi4uN2RmZWRmMmIzYTExNzBjZGFhNzEwZTY0NWMzNzdkN2Y4OGZmN2U5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmgKQEAgLTI3LDM0ICsyNyw0NiBAQAog
I2RlZmluZSBDU1NGb250RmFjZVNldF9oCiAKICNpbmNsdWRlICJDU1NGb250RmFjZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBD
U1NQcmltaXRpdmVWYWx1ZTsKIGNsYXNzIEZvbnRGYWNlU2V0OwogCiBjbGFzcyBDU1NGb250RmFj
ZVNldENsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q1NTRm9udEZhY2VTZXRDbGllbnQo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZmFjZUZpbmlzaGVkKENTU0ZvbnRGYWNlJiwgQ1NTRm9u
dEZhY2U6OlN0YXR1cykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkTG9hZGluZygpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGxldGVkTG9hZGluZygpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZmFjZUZpbmlzaGVkKENTU0ZvbnRGYWNlJiwgQ1NTRm9udEZhY2U6OlN0YXR1cykgeyB9
OworICAgIHZpcnR1YWwgdm9pZCBmb250TW9kaWZpZWQoKSB7IH07CisgICAgdmlydHVhbCB2b2lk
IHN0YXJ0ZWRMb2FkaW5nKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBjb21wbGV0ZWRMb2FkaW5n
KCkgeyB9OwogfTsKIAotY2xhc3MgQ1NTRm9udEZhY2VTZXQgZmluYWwgOiBwdWJsaWMgQ1NTRm9u
dEZhY2U6OkNsaWVudCB7CitjbGFzcyBDU1NGb250RmFjZVNldCBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGVkPENTU0ZvbnRGYWNlU2V0PiwgcHVibGljIENTU0ZvbnRGYWNlOjpDbGllbnQgewogcHVi
bGljOgotICAgIENTU0ZvbnRGYWNlU2V0KENTU0ZvbnRGYWNlU2V0Q2xpZW50Jik7CisgICAgc3Rh
dGljIFJlZjxDU1NGb250RmFjZVNldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENTU0ZvbnRGYWNlU2V0KCkpOworICAgIH0KICAgICB+Q1NTRm9udEZhY2VT
ZXQoKTsKIAorICAgIHZvaWQgYWRkQ2xpZW50KENTU0ZvbnRGYWNlU2V0Q2xpZW50Jik7CisgICAg
dm9pZCByZW1vdmVDbGllbnQoQ1NTRm9udEZhY2VTZXRDbGllbnQmKTsKKwogICAgIGJvb2wgaGFz
RmFjZShjb25zdCBDU1NGb250RmFjZSYpIGNvbnN0OwogICAgIHNpemVfdCBmYWNlQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2ZhY2VzLnNpemUoKTsgfQogICAgIHZvaWQgYWRkKENTU0ZvbnRGYWNl
Jik7CiAgICAgdm9pZCByZW1vdmUoY29uc3QgQ1NTRm9udEZhY2UmKTsKLSAgICBjb25zdCBDU1NG
b250RmFjZSYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9mYWNlc1tpXTsg
fQorICAgIHZvaWQgY2xlYXIoKTsKKyAgICBDU1NGb250RmFjZSYgb3BlcmF0b3JbXShzaXplX3Qg
aSk7CiAKLSAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRl
eHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGNoZWNrKGNvbnN0IFN0cmluZyYgZm9udCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAKKyAgICBDU1NTZWdtZW50ZWRG
b250RmFjZSogZ2V0Rm9udEZhY2UoRm9udFRyYWl0c01hc2ssIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5KTsKKwogICAgIGVudW0gY2xhc3MgU3RhdHVzIHsKICAgICAgICAgTG9hZGluZywKICAg
ICAgICAgTG9hZGVkCkBAIC02NCwxNCArNzYsMjkgQEAgcHVibGljOgogICAgIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRGYWNlPj4gbWF0Y2hpbmdGYWNlcyhjb25zdCBTdHJp
bmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2YXRl
OgorICAgIENTU0ZvbnRGYWNlU2V0KCk7CisKKyAgICB2b2lkIHJlbW92ZUZyb21GYWNlc0xvb2t1
cFRhYmxlKGNvbnN0IENTU0ZvbnRGYWNlJiwgY29uc3QgQ1NTVmFsdWVMaXN0JiBmYW1pbGllc1Rv
U2VhcmNoRm9yKTsKKyAgICB2b2lkIGFkZFRvRmFjZXNMb29rdXBUYWJsZShDU1NGb250RmFjZSYp
OworCiAgICAgdm9pZCBpbmNyZW1lbnRBY3RpdmVDb3VudCgpOwogICAgIHZvaWQgZGVjcmVtZW50
QWN0aXZlQ291bnQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzdGF0ZUNoYW5nZWQoQ1NTRm9udEZh
Y2UmLCBDU1NGb250RmFjZTo6U3RhdHVzIG9sZFN0YXRlLCBDU1NGb250RmFjZTo6U3RhdHVzIG5l
d1N0YXRlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9udFN0YXRlQ2hhbmdlZChDU1NG
b250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMgb2xkU3RhdGUsIENTU0ZvbnRGYWNlOjpTdGF0
dXMgbmV3U3RhdGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmb250UHJvcGVydHlDaGFu
Z2VkKENTU0ZvbnRGYWNlJiwgQ1NTVmFsdWVMaXN0KiBvbGRGYW1pbGllcyA9IG51bGxwdHIpIG92
ZXJyaWRlOworCisgICAgdm9pZCByZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KGNvbnN0
IFN0cmluZyYpOworCisgICAgc3RhdGljIFN0cmluZyBmYW1pbHlOYW1lRnJvbVByaW1pdGl2ZShj
b25zdCBDU1NQcmltaXRpdmVWYWx1ZSYpOwogCi0gICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+
IG1fZmFjZXM7CisgICAgLy8gbV9mYWNlcyBzaG91bGQgaG9sZCBhbGwgdGhlIHNhbWUgZm9udHMg
YXMgdGhlIG9uZXMgaW5zaWRlIGluc2lkZSBtX2ZhY2VzTG9va3VwVGFibGUuCisgICAgVmVjdG9y
PFJlZjxDU1NGb250RmFjZT4+IG1fZmFjZXM7IC8vIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBtb3Zp
bmcgbV9mYWNlcyB0byBGb250RmFjZVNldCBhbmQgbWFraW5nIGl0IHJlZmVyZW5jZSBGb250RmFj
ZXMuIFRoaXMgbWF5IGNsZWFuIHVwIHRoZSBmb250IGxvYWRpbmcgZGVzaWduLgorICAgIEhhc2hN
YXA8U3RyaW5nLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4gbV9mYWNlc0xvb2t1cFRhYmxlOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVm
PENTU0ZvbnRGYWNlPj4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9sb2NhbGx5SW5zdGFs
bGVkRmFjZXNMb29rdXBUYWJsZTsKKyAgICBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDx1bnNpZ25l
ZCwgc3RkOjp1bmlxdWVfcHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4sIEFTQ0lJQ2FzZUluc2Vu
c2l0aXZlSGFzaD4gbV9jYWNoZTsKKyAgICBzaXplX3QgbV9mYWNlc1BhcnRpdGlvbkluZGV4IHsg
MCB9OyAvLyBBbGwgZW50cmllcyBpbiBtX2ZhY2VzIGJlZm9yZSB0aGlzIGluZGV4IGFyZSBDU1Mt
Y29ubmVjdGVkLgogICAgIFN0YXR1cyBtX3N0YXR1cyB7IFN0YXR1czo6TG9hZGVkIH07Ci0gICAg
Q1NTRm9udEZhY2VTZXRDbGllbnQmIG1fY2xpZW50OworICAgIEhhc2hTZXQ8Q1NTRm9udEZhY2VT
ZXRDbGllbnQqPiBtX2NsaWVudHM7CiAgICAgdW5zaWduZWQgbV9hY3RpdmVDb3VudCB7IDAgfTsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgKaW5kZXggMWUyOWI1N2Zm
ZGZlMzgwNzQ2ZTY3MjMyMzBkNTUzNDlhNTlmYjk5Zi4uZjYyMDI1ZDY5MDI3ODJiZDM1NDI5NGZm
YTIwZTg0Y2YxNjVjMmQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgK
QEAgLTQ1LDYgKzQ1LDggQEAgY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgQ1NTRm9udEZhY2VT
b3VyY2UgZmluYWwgOiBwdWJsaWMgQ2FjaGVkRm9udENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAgQ1NTRm9udEZhY2VTb3VyY2UoQ1NTRm9udEZhY2Um
IG93bmVyLCBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWVPclVSSSwgQ2FjaGVkRm9udCogPSBudWxs
cHRyLCBTVkdGb250RmFjZUVsZW1lbnQqID0gbnVsbHB0cik7CisgICAgdmlydHVhbCB+Q1NTRm9u
dEZhY2VTb3VyY2UoKTsKIAogICAgIC8vICAgICAgICAgICAgICAgICAgICAgID0+IFN1Y2Nlc3MK
ICAgICAvLyAgICAgICAgICAgICAgICAgICAgLy8KQEAgLTU3LDEwICs1OSw2IEBAIHB1YmxpYzoK
ICAgICAgICAgU3VjY2VzcywKICAgICAgICAgRmFpbHVyZQogICAgIH07Ci0KLSAgICBDU1NGb250
RmFjZVNvdXJjZShDU1NGb250RmFjZSYgb3duZXIsIGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZU9y
VVJJLCBDYWNoZWRGb250KiA9IG51bGxwdHIsIFNWR0ZvbnRGYWNlRWxlbWVudCogPSBudWxscHRy
KTsKLSAgICB2aXJ0dWFsIH5DU1NGb250RmFjZVNvdXJjZSgpOwotCiAgICAgU3RhdHVzIHN0YXR1
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseU5hbWVPclVSSSgpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWx5TmFtZU9yVVJJOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCmluZGV4IDJjOGMyYzZkMzY0MWExODI1
ZGRlYWZhZjhmZGFjNTFlZGQ1MTMzZmQuLjhhNzRjOThhZDA0NzFmZGJiNGEyMDRkNmQ2OTJjODc1
OTVhOWVhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCkBAIC0zMSw3
ICszMSw2IEBACiAjaW5jbHVkZSAiQ1NTRm9udEZhY2UuaCIKICNpbmNsdWRlICJDU1NGb250RmFj
ZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NGb250RmFjZVNvdXJjZS5oIgotI2luY2x1ZGUgIkNTU0Zv
bnRGYWNlU3JjVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGb250RmFtaWx5LmgiCiAjaW5jbHVkZSAi
Q1NTRm9udEZlYXR1cmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCkBA
IC00Niw2ICs0NSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udEZhY2VTZXQuaCIKICNpbmNs
dWRlICJGb250VmFyaWFudEJ1aWxkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCkBAIC02NSw2ICs2NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBmb250U2Vs
ZWN0b3JJZDsKIAogQ1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IoRG9jdW1lbnQmIGRv
Y3VtZW50KQogICAgIDogbV9kb2N1bWVudCgmZG9jdW1lbnQpCisgICAgLCBtX2Nzc0ZvbnRGYWNl
U2V0KENTU0ZvbnRGYWNlU2V0OjpjcmVhdGUoKSkKICAgICAsIG1fYmVnaW5Mb2FkaW5nVGltZXIo
KnRoaXMsICZDU1NGb250U2VsZWN0b3I6OmJlZ2luTG9hZFRpbWVyRmlyZWQpCiAgICAgLCBtX3Vu
aXF1ZUlkKCsrZm9udFNlbGVjdG9ySWQpCiAgICAgLCBtX3ZlcnNpb24oMCkKQEAgLTc1LDk5ICs3
NiwzMiBAQCBDU1NGb250U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3RvcihEb2N1bWVudCYgZG9jdW1l
bnQpCiAKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgRm9udENhY2hlOjpzaW5nbGV0b24o
KS5hZGRDbGllbnQoKnRoaXMpOworICAgIG1fY3NzRm9udEZhY2VTZXQtPmFkZENsaWVudCgqdGhp
cyk7CiB9CiAKIENTU0ZvbnRTZWxlY3Rvcjo6fkNTU0ZvbnRTZWxlY3RvcigpCiB7CiAgICAgY2xl
YXJEb2N1bWVudCgpOworICAgIG1fY3NzRm9udEZhY2VTZXQtPnJlbW92ZUNsaWVudCgqdGhpcyk7
CiAgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmVDbGllbnQoKnRoaXMpOwogfQogCi1i
b29sIENTU0ZvbnRTZWxlY3Rvcjo6aXNFbXB0eSgpIGNvbnN0CitGb250RmFjZVNldCYgQ1NTRm9u
dFNlbGVjdG9yOjpmb250RmFjZVNldCgpCiB7Ci0gICAgcmV0dXJuIG1fZm9udHMuaXNFbXB0eSgp
OwotfQotCi12b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YXBwZW5kU291cmNlcyhDU1NGb250RmFjZSYg
Zm9udEZhY2UsIENTU1ZhbHVlTGlzdCYgc3JjTGlzdCwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29s
IGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpCi17Ci0gICAgZm9yIChh
dXRvJiBzcmMgOiBzcmNMaXN0KSB7Ci0gICAgICAgIC8vIEFuIGl0ZW0gaW4gdGhlIGxpc3QgZWl0
aGVyIHNwZWNpZmllcyBhIHN0cmluZyAobG9jYWwgZm9udCBuYW1lKSBvciBhIFVSTCAocmVtb3Rl
IGZvbnQgdG8gZG93bmxvYWQpLgotICAgICAgICBDU1NGb250RmFjZVNyY1ZhbHVlJiBpdGVtID0g
ZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oc3JjLmdldCgpKTsKLSAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPENTU0ZvbnRGYWNlU291cmNlPiBzb3VyY2U7Ci0gICAgICAgIFNWR0ZvbnRGYWNl
RWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0cjsKLSAgICAgICAgYm9vbCBmb3VuZFNW
R0ZvbnQgPSBmYWxzZTsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgIGZvdW5kU1ZH
Rm9udCA9IGl0ZW0uaXNTVkdGb250RmFjZVNyYygpIHx8IGl0ZW0uc3ZnRm9udEZhY2VFbGVtZW50
KCk7Ci0gICAgICAgIGZvbnRGYWNlRWxlbWVudCA9IGl0ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCk7
Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFpdGVtLmlzTG9jYWwoKSkgewotICAgICAgICAgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+c2V0dGluZ3MoKSA6IG51bGxw
dHI7Ci0gICAgICAgICAgICBib29sIGFsbG93RG93bmxvYWRpbmcgPSBmb3VuZFNWR0ZvbnQgfHwg
KHNldHRpbmdzICYmIHNldHRpbmdzLT5kb3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWQoKSk7
Ci0gICAgICAgICAgICBpZiAoYWxsb3dEb3dubG9hZGluZyAmJiBpdGVtLmlzU3VwcG9ydGVkRm9y
bWF0KCkgJiYgZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoQ2FjaGVkRm9udCogY2Fj
aGVkRm9udCA9IGl0ZW0uY2FjaGVkRm9udChkb2N1bWVudCwgZm91bmRTVkdGb250LCBpc0luaXRp
YXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKSkKLSAgICAgICAgICAgICAgICAgICAg
c291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oZm9udEZhY2UsIGl0
ZW0ucmVzb3VyY2UoKSwgY2FjaGVkRm9udCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgc291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJj
ZT4oZm9udEZhY2UsIGl0ZW0ucmVzb3VyY2UoKSwgbnVsbHB0ciwgZm9udEZhY2VFbGVtZW50KTsK
LQotICAgICAgICBpZiAoc291cmNlKQotICAgICAgICAgICAgZm9udEZhY2UuYWRvcHRTb3VyY2Uo
V1RGTW92ZShzb3VyY2UpKTsKKyAgICBpZiAoIW1fZm9udEZhY2VTZXQpIHsKKyAgICAgICAgQVNT
RVJUKG1fZG9jdW1lbnQpOworICAgICAgICBtX2ZvbnRGYWNlU2V0ID0gRm9udEZhY2VTZXQ6OmNy
ZWF0ZSgqbV9kb2N1bWVudCwgbV9jc3NGb250RmFjZVNldC5nZXQoKSk7CiAgICAgfQotICAgIGZv
bnRGYWNlLnNvdXJjZXNQb3B1bGF0ZWQoKTsKLX0KIAotU3RyaW5nIENTU0ZvbnRTZWxlY3Rvcjo6
ZmFtaWx5TmFtZUZyb21QcmltaXRpdmUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZS5pc0ZvbnRGYW1pbHkoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmZv
bnRGYW1pbHkoKS5mYW1pbHlOYW1lOwotICAgIGlmICghdmFsdWUuaXNWYWx1ZUlEKCkpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgcmF3IHRleHQgZm9y
IGFsbCB0aGUgZ2VuZXJpYyBmYW1pbHkgdHlwZXMsIHNpbmNlIEBmb250LWZhY2UgaXMgYSB3YXkg
b2YgYWN0dWFsbHkKLSAgICAvLyBkZWZpbmluZyB3aGF0IGZvbnQgdG8gdXNlIGZvciB0aG9zZSB0
eXBlcy4KLSAgICBzd2l0Y2ggKHZhbHVlLmdldFZhbHVlSUQoKSkgewotICAgIGNhc2UgQ1NTVmFs
dWVTZXJpZjoKLSAgICAgICAgcmV0dXJuIHNlcmlmRmFtaWx5OwotICAgIGNhc2UgQ1NTVmFsdWVT
YW5zU2VyaWY6Ci0gICAgICAgIHJldHVybiBzYW5zU2VyaWZGYW1pbHk7Ci0gICAgY2FzZSBDU1NW
YWx1ZUN1cnNpdmU6Ci0gICAgICAgIHJldHVybiBjdXJzaXZlRmFtaWx5OwotICAgIGNhc2UgQ1NT
VmFsdWVGYW50YXN5OgotICAgICAgICByZXR1cm4gZmFudGFzeUZhbWlseTsKLSAgICBjYXNlIENT
U1ZhbHVlTW9ub3NwYWNlOgotICAgICAgICByZXR1cm4gbW9ub3NwYWNlRmFtaWx5OwotICAgIGNh
c2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dyYXBoOgotICAgICAgICByZXR1cm4gcGljdG9ncmFwaEZh
bWlseTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KKyAgICByZXR1
cm4gKm1fZm9udEZhY2VTZXQ7CiB9CiAKLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjpyZWdpc3Rlckxv
Y2FsRm9udEZhY2VzRm9yRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKK2Jvb2wgQ1NT
Rm9udFNlbGVjdG9yOjppc0VtcHR5KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIW1fbG9jYWxseUlu
c3RhbGxlZEZvbnRGYWNlcy5jb250YWlucyhmYW1pbHlOYW1lKSk7Ci0KLSAgICBWZWN0b3I8Rm9u
dFRyYWl0c01hc2s+IHRyYWl0c01hc2tzID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5nZXRUcmFp
dHNJbkZhbWlseShmYW1pbHlOYW1lKTsKLSAgICBpZiAodHJhaXRzTWFza3MuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4gZmFjZXMgPSB7
IH07Ci0gICAgZm9yIChhdXRvIG1hc2sgOiB0cmFpdHNNYXNrcykgewotICAgICAgICBSZWY8Q1NT
Rm9udEZhY2U+IGZhY2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKCp0aGlzLCBudWxscHRyLCB0cnVl
KTsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGZhbWlseUxpc3QgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgICAgIGZhbWlseUxpc3Qt
PmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShm
YW1pbHlOYW1lKSk7Ci0gICAgICAgIGZhY2UtPnNldEZhbWlsaWVzKCpmYW1pbHlMaXN0KTsKLSAg
ICAgICAgZmFjZS0+c2V0VHJhaXRzTWFzayhtYXNrKTsKLSAgICAgICAgZmFjZS0+YWRvcHRTb3Vy
Y2Uoc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oZmFjZS5nZXQoKSwgZmFtaWx5
TmFtZSkpOwotICAgICAgICBBU1NFUlQoIWZhY2UtPmFsbFNvdXJjZXNGYWlsZWQoKSk7Ci0gICAg
ICAgIGZhY2VzLmFwcGVuZChXVEZNb3ZlKGZhY2UpKTsKLSAgICB9Ci0gICAgbV9sb2NhbGx5SW5z
dGFsbGVkRm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBXVEZNb3ZlKGZhY2VzKSk7CisgICAgcmV0
dXJuICFtX2Nzc0ZvbnRGYWNlU2V0LT5mYWNlQ291bnQoKTsKIH0KIAotdm9pZCBDU1NGb250U2Vs
ZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VS
dWxlLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpCit2b2lk
IENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKFN0eWxlUnVsZUZvbnRGYWNlJiBmb250
RmFjZVJ1bGUsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSkK
IHsKICAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlID0gZm9udEZhY2VSdWxlLnByb3Bl
cnRpZXMoKTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRGYW1pbHkgPSBzdHlsZS5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CkBAIC0yMDEsNyArMTM1LDggQEAg
dm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250
RmFjZSYgZm9udEZhY2VSdWxlLCBib28KICAgICBpZiAoIXNyY0xpc3QubGVuZ3RoKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlZjxDU1NGb250RmFjZT4gZm9udEZhY2UgPSBDU1NGb250RmFj
ZTo6Y3JlYXRlKCp0aGlzKTsKKyAgICBtX2NyZWF0aW5nRm9udCA9IHRydWU7CisgICAgUmVmPENT
U0ZvbnRGYWNlPiBmb250RmFjZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUodGhpcywgJmZvbnRGYWNl
UnVsZSk7CiAKICAgICBpZiAoIWZvbnRGYWNlLT5zZXRGYW1pbGllcygqZm9udEZhbWlseSkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIyNiwyNiArMTYxLDEzIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9y
OjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwg
Ym9vCiAgICAgaWYgKGZlYXR1cmVTZXR0aW5ncyAmJiAhZm9udEZhY2UtPnNldEZlYXR1cmVTZXR0
aW5ncygqZmVhdHVyZVNldHRpbmdzKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBwZW5kU291
cmNlcyhmb250RmFjZSwgc3JjTGlzdCwgbV9kb2N1bWVudCwgaXNJbml0aWF0aW5nRWxlbWVudElu
VXNlckFnZW50U2hhZG93VHJlZSk7CisgICAgQ1NTRm9udEZhY2U6OmFwcGVuZFNvdXJjZXMoZm9u
dEZhY2UsIHNyY0xpc3QsIG1fZG9jdW1lbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2Vu
dFNoYWRvd1RyZWUpOwogICAgIGlmIChmb250RmFjZS0+YWxsU291cmNlc0ZhaWxlZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBmYW1pbHlMaXN0KSB7Ci0gICAg
ICAgIFN0cmluZyBmYW1pbHlOYW1lID0gZmFtaWx5TmFtZUZyb21QcmltaXRpdmUoZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpKTsKLSAgICAgICAgaWYgKGZhbWlseU5hbWUu
aXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX2ZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+
KCkpOwotICAgICAgICBhdXRvJiBmYW1pbHlGb250RmFjZXMgPSBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwotICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAg
IHJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoZmFtaWx5TmFtZSk7Ci0gICAgICAgICAg
ICBmYW1pbHlGb250RmFjZXMgPSB7IH07Ci0gICAgICAgIH0KLQotICAgICAgICBmYW1pbHlGb250
RmFjZXMuYXBwZW5kKGZvbnRGYWNlLmNvcHlSZWYoKSk7Ci0gICAgICAgIAotICAgICAgICArK21f
dmVyc2lvbjsKLSAgICB9CisgICAgbV9jc3NGb250RmFjZVNldC0+YWRkKGZvbnRGYWNlLmdldCgp
KTsKKyAgICBtX2NyZWF0aW5nRm9udCA9IGZhbHNlOworICAgICsrbV92ZXJzaW9uOwogfQogCiB2
b2lkIENTU0ZvbnRTZWxlY3Rvcjo6cmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFja3MoRm9u
dFNlbGVjdG9yQ2xpZW50JiBjbGllbnQpCkBAIC0yNzMsNiArMTk1LDEyIEBAIHZvaWQgQ1NTRm9u
dFNlbGVjdG9yOjpmb250TG9hZGVkKCkKICAgICBkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNr
cygpOwogfQogCit2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udE1vZGlmaWVkKCkKK3sKKyAgICBp
ZiAoIW1fY3JlYXRpbmdGb250KQorICAgICAgICBkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNr
cygpOworfQorCiB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udENhY2hlSW52YWxpZGF0ZWQoKQog
ewogICAgIGRpc3BhdGNoSW52YWxpZGF0aW9uQ2FsbGJhY2tzKCk7CkBAIC0zMDQsODQgKzIzMiwx
MyBAQCBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiByZXNvbHZlR2VuZXJpY0ZhbWlseShEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEZvbnREZQogICAgIHJldHVybiBmYW1pbHlOYW1lOwogfQog
Ci1jbGFzcyBGb250RmFjZUNvbXBhcmF0b3IgewotcHVibGljOgotICAgIEZvbnRGYWNlQ29tcGFy
YXRvcihGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24pCi0gICAg
ICAgIDogbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24oZGVzaXJlZFRyYWl0c01hc2tG
b3JDb21wYXJpc29uKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04obV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFzayk7
Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENTU0ZvbnRGYWNlJiBmaXJzdCwg
Y29uc3QgQ1NTRm9udEZhY2UmIHNlY29uZCkKLSAgICB7Ci0gICAgICAgIEZvbnRUcmFpdHNNYXNr
IGZpcnN0VHJhaXRzTWFzayA9IGZpcnN0LnRyYWl0c01hc2soKTsKLSAgICAgICAgRm9udFRyYWl0
c01hc2sgc2Vjb25kVHJhaXRzTWFzayA9IHNlY29uZC50cmFpdHNNYXNrKCk7Ci0KLSAgICAgICAg
Ym9vbCBmaXJzdEhhc0Rlc2lyZWRTdHlsZSA9IGZpcnN0VHJhaXRzTWFzayAmIG1fZGVzaXJlZFRy
YWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFzazsKLSAgICAgICAgYm9vbCBzZWNv
bmRIYXNEZXNpcmVkU3R5bGUgPSBzZWNvbmRUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFz
a0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVNYXNrOwotCi0gICAgICAgIGlmIChmaXJzdEhhc0Rl
c2lyZWRTdHlsZSAhPSBzZWNvbmRIYXNEZXNpcmVkU3R5bGUpCi0gICAgICAgICAgICByZXR1cm4g
Zmlyc3RIYXNEZXNpcmVkU3R5bGU7Ci0KLSAgICAgICAgaWYgKChtX2Rlc2lyZWRUcmFpdHNNYXNr
Rm9yQ29tcGFyaXNvbiAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICFmaXJzdC5pc0xvY2FsRmFs
bGJhY2soKSAmJiAhc2Vjb25kLmlzTG9jYWxGYWxsYmFjaygpKSB7Ci0gICAgICAgICAgICAvLyBQ
cmVmZXIgYSBmb250IHRoYXQgaGFzIGluZGljYXRlZCB0aGF0IGl0IGNhbiBvbmx5IHN1cHBvcnQg
aXRhbGljcyB0byBhIGZvbnQgdGhhdCBjbGFpbXMgdG8gc3VwcG9ydAotICAgICAgICAgICAgLy8g
YWxsIHN0eWxlcy4gVGhlIHNwZWNpYWxpemVkIGZvbnQgaXMgbW9yZSBsaWtlbHkgdG8gYmUgdGhl
IG9uZSB0aGUgYXV0aG9yIHdhbnRzIHVzZWQuCi0gICAgICAgICAgICBib29sIGZpcnN0UmVxdWly
ZXNJdGFsaWNzID0gKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEo
Zmlyc3RUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzayk7Ci0gICAgICAgICAgICBib29s
IHNlY29uZFJlcXVpcmVzSXRhbGljcyA9IChzZWNvbmRUcmFpdHNNYXNrICYgRm9udFN0eWxlSXRh
bGljTWFzaykgJiYgIShzZWNvbmRUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzayk7Ci0g
ICAgICAgICAgICBpZiAoZmlyc3RSZXF1aXJlc0l0YWxpY3MgIT0gc2Vjb25kUmVxdWlyZXNJdGFs
aWNzKQotICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFJlcXVpcmVzSXRhbGljczsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChzZWNvbmRUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFz
a0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFzaykKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKGZpcnN0VHJhaXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JD
b21wYXJpc29uICYgRm9udFdlaWdodE1hc2spCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWNzczMtZm9udHMtMjAxMTEw
MDQvI2ZvbnQtbWF0Y2hpbmctYWxnb3JpdGhtIHNheXMgOgotICAgICAgICAvLyAgIC0gSWYgdGhl
IGRlc2lyZWQgd2VpZ2h0IGlzIGxlc3MgdGhhbiA0MDAsIHdlaWdodHMgYmVsb3cgdGhlIGRlc2ly
ZWQgd2VpZ2h0IGFyZSBjaGVja2VkIGluIGRlc2NlbmRpbmcgb3JkZXIgZm9sbG93ZWQgYnkgd2Vp
Z2h0cyBhYm92ZSB0aGUgZGVzaXJlZCB3ZWlnaHQgaW4gYXNjZW5kaW5nIG9yZGVyIHVudGlsIGEg
bWF0Y2ggaXMgZm91bmQuCi0gICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMg
Z3JlYXRlciB0aGFuIDUwMCwgd2VpZ2h0cyBhYm92ZSB0aGUgZGVzaXJlZCB3ZWlnaHQgYXJlIGNo
ZWNrZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGZvbGxvd2VkIGJ5IHdlaWdodHMgYmVsb3cgdGhlIGRl
c2lyZWQgd2VpZ2h0IGluIGRlc2NlbmRpbmcgb3JkZXIgdW50aWwgYSBtYXRjaCBpcyBmb3VuZC4K
LSAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyA0MDAsIDUwMCBpcyBjaGVj
a2VkIGZpcnN0IGFuZCB0aGVuIHRoZSBydWxlIGZvciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFu
IDQwMCBpcyB1c2VkLgotICAgICAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIDUw
MCwgNDAwIGlzIGNoZWNrZWQgZmlyc3QgYW5kIHRoZW4gdGhlIHJ1bGUgZm9yIGRlc2lyZWQgd2Vp
Z2h0cyBsZXNzIHRoYW4gNDAwIGlzIHVzZWQuCi0KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGZhbGxiYWNrUnVsZVNldHMgPSA5OwotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
cnVsZXNQZXJTZXQgPSA4OwotICAgICAgICBzdGF0aWMgY29uc3QgRm9udFRyYWl0c01hc2sgd2Vp
Z2h0RmFsbGJhY2tSdWxlU2V0c1tmYWxsYmFja1J1bGVTZXRzXVtydWxlc1BlclNldF0gPSB7Ci0g
ICAgICAgICAgICB7IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdl
aWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdl
aWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAotICAg
ICAgICAgICAgeyBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWln
aHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWln
aHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAg
ICAgICAgIHsgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0
NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0
NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAg
ICAgICB7IEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIw
ME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcw
ME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAotICAgICAgICAg
ICAgeyBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBN
YXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBN
YXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAgICAgICAg
IHsgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFz
aywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFz
aywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0sCi0gICAgICAgICAgICB7
IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ss
IEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ss
IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9LAotICAgICAgICAgICAgeyBG
b250V2VpZ2h0OTAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBG
b250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBG
b250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9u
dFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9u
dFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9u
dFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0KLSAgICAgICAgfTsKLQotICAgICAg
ICB1bnNpZ25lZCBydWxlU2V0SW5kZXggPSAwOwotICAgICAgICBmb3IgKDsgIShtX2Rlc2lyZWRU
cmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmICgxIDw8IChGb250V2VpZ2h0MTAwQml0ICsgcnVsZVNl
dEluZGV4KSkpOyBydWxlU2V0SW5kZXgrKykgeyB9Ci0KLSAgICAgICAgY29uc3QgRm9udFRyYWl0
c01hc2sqIHdlaWdodEZhbGxiYWNrUnVsZSA9IHdlaWdodEZhbGxiYWNrUnVsZVNldHNbcnVsZVNl
dEluZGV4XTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzUGVyU2V0OyAr
K2kpIHsKLSAgICAgICAgICAgIGlmIChzZWNvbmRUcmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tS
dWxlW2ldKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChm
aXJzdFRyYWl0c01hc2sgJiB3ZWlnaHRGYWxsYmFja1J1bGVbaV0pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIEZvbnRUcmFpdHNNYXNrIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21w
YXJpc29uOwotfTsKLQogRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JG
YW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICAvLyBGSVhNRTogVGhlIHNwZWMgKGFuZCBGaXJl
Zm94KSBzYXlzIHVzZXIgc3BlY2lmaWVkIGdlbmVyaWMgZmFtaWxpZXMgKHNhbnMtc2VyaWYgZXRj
Likgc2hvdWxkIGJlIHJlc29sdmVkIGJlZm9yZSB0aGUgQGZvbnQtZmFjZSBsb29rdXAgdG9vLgog
ICAgIGJvb2wgcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCA9IGZhbWlseU5hbWUgPT0gc3RhbmRh
cmRGYW1pbHk7CiAKICAgICBBdG9taWNTdHJpbmcgZmFtaWx5Rm9yTG9va3VwID0gcmVzb2x2ZUdl
bmVyaWNGYW1pbHlGaXJzdCA/IHJlc29sdmVHZW5lcmljRmFtaWx5KG1fZG9jdW1lbnQsIGZvbnRE
ZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSkgOiBmYW1pbHlOYW1lOwotICAgIENTU1NlZ21lbnRlZEZv
bnRGYWNlKiBmYWNlID0gZ2V0Rm9udEZhY2UoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlGb3JMb29r
dXApOworICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBmYWNlID0gbV9jc3NGb250RmFjZVNldC0+
Z2V0Rm9udEZhY2UoZm9udERlc2NyaXB0aW9uLnRyYWl0c01hc2soKSwgZmFtaWx5Rm9yTG9va3Vw
KTsKICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgaWYgKCFyZXNvbHZlR2VuZXJpY0ZhbWlseUZp
cnN0KQogICAgICAgICAgICAgZmFtaWx5Rm9yTG9va3VwID0gcmVzb2x2ZUdlbmVyaWNGYW1pbHko
bV9kb2N1bWVudCwgZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKQEAgLTM5MSw0OSArMjQ4
LDYgQEAgRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1pbHkoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3IKICAgICByZXR1cm4gZmFjZS0+Zm9udFJhbmdl
cyhmb250RGVzY3JpcHRpb24pOwogfQogCi1DU1NTZWdtZW50ZWRGb250RmFjZSogQ1NTRm9udFNl
bGVjdG9yOjpnZXRGb250RmFjZShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgYXV0byBpdGVyYXRvciA9IG1f
Zm9udEZhY2VzLmZpbmQoZmFtaWx5KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9mb250RmFjZXMu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8mIGZhbWlseUZvbnRGYWNl
cyA9IGl0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGF1dG8mIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUg
PSBtX2ZvbnRzLmFkZChmYW1pbHksIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxD
U1NTZWdtZW50ZWRGb250RmFjZT4+KCkpLml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIEZvbnRUcmFp
dHNNYXNrIHRyYWl0c01hc2sgPSBmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpOwotCi0gICAg
YXV0byYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUuYWRkKHRyYWl0c01hc2ssIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhY2Uu
Z2V0KCk7Ci0KLSAgICBmYWNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NTZWdtZW50ZWRGb250RmFj
ZT4oKnRoaXMpOwotCi0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9udEZh
Y2U+LCAzMj4gY2FuZGlkYXRlRm9udEZhY2VzOwotICAgIGZvciAoaW50IGkgPSBmYW1pbHlGb250
RmFjZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgQ1NTRm9udEZhY2UmIGNh
bmRpZGF0ZSA9IGZhbWlseUZvbnRGYWNlc1tpXTsKLSAgICAgICAgdW5zaWduZWQgY2FuZGlkYXRl
VHJhaXRzTWFzayA9IGNhbmRpZGF0ZS50cmFpdHNNYXNrKCk7Ci0gICAgICAgIGlmICgodHJhaXRz
TWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAmIEZv
bnRTdHlsZU5vcm1hbE1hc2spKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNhbmRp
ZGF0ZUZvbnRGYWNlcy5hcHBlbmQoY2FuZGlkYXRlKTsKLSAgICB9Ci0KLSAgICBhdXRvIGxvY2Fs
SXRlcmF0b3IgPSBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMuZmluZChmYW1pbHkpOwotICAg
IGlmIChsb2NhbEl0ZXJhdG9yICE9IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5lbmQoKSkg
ewotICAgICAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGxvY2FsSXRlcmF0b3ItPnZhbHVlKSB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVUcmFpdHNNYXNrID0gY2FuZGlkYXRlLT50
cmFpdHNNYXNrKCk7Ci0gICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5bGVOb3Jt
YWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNhbmRpZGF0ZUZvbnRGYWNl
cy5hcHBlbmQoY2FuZGlkYXRlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0ZDo6c3RhYmxl
X3NvcnQoY2FuZGlkYXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRpZGF0ZUZvbnRGYWNlcy5lbmQo
KSwgRm9udEZhY2VDb21wYXJhdG9yKHRyYWl0c01hc2spKTsKLSAgICBmb3IgKGF1dG8mIGNhbmRp
ZGF0ZSA6IGNhbmRpZGF0ZUZvbnRGYWNlcykKLSAgICAgICAgZmFjZS0+YXBwZW5kRm9udEZhY2Uo
Y2FuZGlkYXRlLmdldCgpKTsKLQotICAgIHJldHVybiBmYWNlLmdldCgpOwotfQotCiB2b2lkIENT
U0ZvbnRTZWxlY3Rvcjo6Y2xlYXJEb2N1bWVudCgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KSB7
CkBAIC00NTQsOSArMjY4LDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmNsZWFyRG9jdW1lbnQo
KQogICAgIG1fZG9jdW1lbnQgPSBudWxscHRyOwogCiAgICAgLy8gRklYTUU6IFRoaXMgb2JqZWN0
IHNob3VsZCBvdXRsaXZlIHRoZSBEb2N1bWVudC4KLSAgICBtX2ZvbnRGYWNlcy5jbGVhcigpOwot
ICAgIG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5jbGVhcigpOwotICAgIG1fZm9udHMuY2xl
YXIoKTsKKyAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5jbGVhcigpOwogICAgIG1fY2xpZW50cy5jbGVh
cigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKaW5kZXggOWEyN2ZlMjJl
ZjcyZDRhOTc3YjZmNzM1YTMxMDIzNTk2MTk2NTVjMS4uYzExMmU4OGY3NDc2NTljODkwNTUwMjYx
YjVlZDUxOWRhODZmZmYxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRT
ZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaApAQCAt
MjcsNiArMjcsNyBAQAogI2RlZmluZSBDU1NGb250U2VsZWN0b3JfaAogCiAjaW5jbHVkZSAiQ1NT
Rm9udEZhY2UuaCIKKyNpbmNsdWRlICJDU1NGb250RmFjZVNldC5oIgogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRTZWxl
Y3Rvci5oIgpAQCAtNDgsNyArNDksNyBAQCBjbGFzcyBDYWNoZWRGb250OwogY2xhc3MgRG9jdW1l
bnQ7CiBjbGFzcyBTdHlsZVJ1bGVGb250RmFjZTsKIAotY2xhc3MgQ1NTRm9udFNlbGVjdG9yIGZp
bmFsIDogcHVibGljIEZvbnRTZWxlY3RvciB7CitjbGFzcyBDU1NGb250U2VsZWN0b3IgZmluYWwg
OiBwdWJsaWMgRm9udFNlbGVjdG9yLCBwdWJsaWMgQ1NTRm9udEZhY2VTZXRDbGllbnQgewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8Q1NTRm9udFNlbGVjdG9yPiBjcmVhdGUoRG9jdW1lbnQmIGRv
Y3VtZW50KQogICAgIHsKQEAgLTYyLDEyICs2MywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBG
b250UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29u
c3QgQXRvbWljU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBzaXplX3QgZmFsbGJhY2tG
b250Q291bnQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJlZlB0cjxGb250PiBmYWxsYmFja0Zv
bnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3QpIG92ZXJyaWRlOwotICAgIENTU1Nl
Z21lbnRlZEZvbnRGYWNlKiBnZXRGb250RmFjZShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGNsZWFyRG9jdW1lbnQoKTsKIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGVuZFNvdXJjZXMoQ1NTRm9udEZhY2UmLCBDU1NWYWx1ZUxpc3Qm
LCBEb2N1bWVudCosIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJl
ZSk7Ci0gICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UmLCBi
b29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOworICAgIHZvaWQg
YWRkRm9udEZhY2VSdWxlKFN0eWxlUnVsZUZvbnRGYWNlJiwgYm9vbCBpc0luaXRpYXRpbmdFbGVt
ZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKIAogICAgIHZvaWQgZm9udExvYWRlZCgpOwogICAg
IHZpcnR1YWwgdm9pZCBmb250Q2FjaGVJbnZhbGlkYXRlZCgpIG92ZXJyaWRlOwpAQCAtODEsMjEg
KzgwLDIwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYmVnaW5Mb2FkaW5nRm9udFNvb24oQ2FjaGVk
Rm9udCopOwogCi0gICAgc3RhdGljIFN0cmluZyBmYW1pbHlOYW1lRnJvbVByaW1pdGl2ZShjb25z
dCBDU1NQcmltaXRpdmVWYWx1ZSYpOworICAgIEZvbnRGYWNlU2V0JiBmb250RmFjZVNldCgpOwog
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENTU0ZvbnRTZWxlY3RvcihEb2N1bWVudCYpOwogCiAg
ICAgdm9pZCBkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygpOwogCi0gICAgdm9pZCBiZWdp
bkxvYWRUaW1lckZpcmVkKCk7CisgICAgdmlydHVhbCB2b2lkIGZvbnRNb2RpZmllZCgpIG92ZXJy
aWRlOwogCi0gICAgdm9pZCByZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgYmVnaW5Mb2FkVGltZXJGaXJlZCgpOwogCiAgICAgRG9jdW1lbnQq
IG1fZG9jdW1lbnQ7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+
PiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX2ZvbnRGYWNlczsKLSAgICBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+
IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlczsKLSAgICBIYXNoTWFwPFN0cmluZywgSGFzaE1h
cDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4sIEFTQ0lJ
Q2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9mb250czsKKyAgICBSZWZQdHI8Rm9udEZhY2VTZXQ+IG1f
Zm9udEZhY2VTZXQ7CisgICAgUmVmPENTU0ZvbnRGYWNlU2V0PiBtX2Nzc0ZvbnRGYWNlU2V0Owog
ICAgIEhhc2hTZXQ8Rm9udFNlbGVjdG9yQ2xpZW50Kj4gbV9jbGllbnRzOwogCiAgICAgVmVjdG9y
PENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZvbnQ+PiBtX2ZvbnRzVG9CZWdpbkxvYWRpbmc7
CkBAIC0xMDMsNiArMTAxLDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fdW5pcXVlSWQ7
CiAgICAgdW5zaWduZWQgbV92ZXJzaW9uOworICAgIGJvb2wgbV9jcmVhdGluZ0ZvbnQgeyBmYWxz
ZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5jcHAKaW5kZXggZjVmY2JhZWE4ZGRhZTg2OWI2ZDNmYzkzMDI3
NDljMjI2Yjk5MDNhZi4uNGMyMGQzOGZlNGU2ZDZmOTYyMjZiNDQzY2VkM2U1M2Y4ZmUwMTVmNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCkBAIC0zNyw4
ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NTU2VnbWVudGVkRm9udEZhY2U6
OkNTU1NlZ21lbnRlZEZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yKQotICAg
IDogbV9mb250U2VsZWN0b3IoZm9udFNlbGVjdG9yKQorQ1NTU2VnbWVudGVkRm9udEZhY2U6OkNT
U1NlZ21lbnRlZEZvbnRGYWNlKCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVu
dGVkRm9udEZhY2UuaAppbmRleCAwN2I3MWY4MmRiNzI0ZmM5Y2U1MWQ5ZTEwZjc4MDYxNWEyNjMz
NDdmLi45MjAzNjEyZDA5MTEzNzFmMGIwNGE4MDA3OTI2OTYxNTlmZWNlNTRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaApAQCAtNDIsMTkgKzQyLDE4IEBAIGNs
YXNzIEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIENTU1NlZ21lbnRlZEZvbnRGYWNlIGZpbmFsIDog
cHVibGljIENTU0ZvbnRGYWNlOjpDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciYpOwor
ICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKCk7CiAgICAgfkNTU1NlZ21lbnRlZEZvbnRGYWNlKCk7
CiAKLSAgICBDU1NGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udFNlbGVjdG9yOyB9Ci0KICAgICB2b2lkIGFwcGVuZEZvbnRGYWNlKFJlZjxDU1NGb250RmFj
ZT4mJik7CiAKICAgICBGb250UmFuZ2VzIGZvbnRSYW5nZXMoY29uc3QgRm9udERlc2NyaXB0aW9u
Jik7CiAKKyAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPiwgMT4mIGNvbnN0aXR1ZW50RmFjZXMo
KSB7IHJldHVybiBtX2ZvbnRGYWNlczsgfQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBm
b250TG9hZGVkKENTU0ZvbnRGYWNlJikgb3ZlcnJpZGU7CiAKLSAgICBDU1NGb250U2VsZWN0b3Im
IG1fZm9udFNlbGVjdG9yOwogICAgIEhhc2hNYXA8Rm9udERlc2NyaXB0aW9uS2V5LCBGb250UmFu
Z2VzLCBGb250RGVzY3JpcHRpb25LZXlIYXNoLCBXVEY6OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxG
b250RGVzY3JpcHRpb25LZXk+PiBtX2NhY2hlOwogICAgIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+
LCAxPiBtX2ZvbnRGYWNlczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9u
dEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAppbmRleCBjNDVlOGQy
NzExZjA3NTk3Njk1ZGY2MjYyNjRjODllMzhkM2M1ZWZhLi5iZDMxYTQyZWQyM2U2MTYxN2E2MmM5
NWJlOWM2ZTcxN2IyZjNkYjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZh
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKQEAgLTc1LDcgKzc1
LDcgQEAgUmVmUHRyPEZvbnRGYWNlPiBGb250RmFjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlJiBl
eGVjU3RhdGUsIFNjcmlwdEV4ZWN1dGlvbkNvbnQKICAgICAgICAgYXV0byB2YWx1ZSA9IEZvbnRG
YWNlOjpwYXJzZVN0cmluZyhzb3VyY2VTdHJpbmcsIENTU1Byb3BlcnR5U3JjKTsKICAgICAgICAg
aWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBDU1NWYWx1
ZUxpc3QmIHNyY0xpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7Ci0gICAgICAg
ICAgICBDU1NGb250U2VsZWN0b3I6OmFwcGVuZFNvdXJjZXMocmVzdWx0LT5iYWNraW5nKCksIHNy
Y0xpc3QsICZkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCksIGZhbHNlKTsKKyAgICAgICAgICAg
IENTU0ZvbnRGYWNlOjphcHBlbmRTb3VyY2VzKHJlc3VsdC0+YmFja2luZygpLCBzcmNMaXN0LCAm
ZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLCBmYWxzZSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTExMCw5ICsxMTAsMjMgQEAgUmVmUHRyPEZvbnRGYWNlPiBGb250RmFjZTo6Y3JlYXRlKEpT
Qzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIFNjcmlwdEV4ZWN1dGlvbkNvbnQKICAgICByZXR1cm4g
cmVzdWx0LnB0cigpOwogfQogCitSZWY8Rm9udEZhY2U+IEZvbnRGYWNlOjpjcmVhdGUoSlNDOjpF
eGVjU3RhdGUmIGV4ZWNTdGF0ZSwgQ1NTRm9udEZhY2UmIGZhY2UpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRm9udEZhY2UoZXhlY1N0YXRlLCBmYWNlKSk7Cit9CisKIEZvbnRGYWNlOjpG
b250RmFjZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBDU1NGb250U2VsZWN0b3ImIGZvbnRT
ZWxlY3RvcikKLSAgICA6IG1fYmFja2luZyhDU1NGb250RmFjZTo6Y3JlYXRlKGZvbnRTZWxlY3Rv
ciwgdGhpcykpCisgICAgOiBtX2JhY2tpbmcoQ1NTRm9udEZhY2U6OmNyZWF0ZSgmZm9udFNlbGVj
dG9yLCBudWxscHRyLCB0aGlzKSkKKyAgICAsIG1fcHJvbWlzZShjcmVhdGVQcm9taXNlKGV4ZWNT
dGF0ZSkpCisgICAgLCBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCit7CisgICAgbV9iYWNraW5nLT5h
ZGRDbGllbnQoKnRoaXMpOworfQorCitGb250RmFjZTo6Rm9udEZhY2UoSlNDOjpFeGVjU3RhdGUm
IGV4ZWNTdGF0ZSwgQ1NTRm9udEZhY2UmIGZhY2UpCisgICAgOiBtX2JhY2tpbmcoZmFjZSkKICAg
ICAsIG1fcHJvbWlzZShjcmVhdGVQcm9taXNlKGV4ZWNTdGF0ZSkpCisgICAgLCBtX3dlYWtQdHJG
YWN0b3J5KHRoaXMpCiB7CiAgICAgbV9iYWNraW5nLT5hZGRDbGllbnQoKnRoaXMpOwogfQpAQCAt
MTIyLDYgKzEzNiwxMSBAQCBGb250RmFjZTo6fkZvbnRGYWNlKCkKICAgICBtX2JhY2tpbmctPnJl
bW92ZUNsaWVudCgqdGhpcyk7CiB9CiAKK1dlYWtQdHI8Rm9udEZhY2U+IEZvbnRGYWNlOjpjcmVh
dGVXZWFrUHRyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVX
ZWFrUHRyKCk7Cit9CisKIFJlZlB0cjxDU1NWYWx1ZT4gRm9udEZhY2U6OnBhcnNlU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgUmVm
PE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
Y3JlYXRlKCk7CkBAIC0zMTcsMTggKzMzNiwyNSBAQCBTdHJpbmcgRm9udEZhY2U6OnN0YXR1cygp
IGNvbnN0CiAgICAgcmV0dXJuIFN0cmluZygiZXJyb3IiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKIH0KIAotdm9pZCBGb250RmFjZTo6c3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiBm
YWNlLCBDU1NGb250RmFjZTo6U3RhdHVzLCBDU1NGb250RmFjZTo6U3RhdHVzIG5ld1N0YXRlKQor
dm9pZCBGb250RmFjZTo6Zm9udFN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYgZmFjZSwgQ1NTRm9u
dEZhY2U6OlN0YXR1cywgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0ZSkKIHsKICAgICBBU1NF
UlRfVU5VU0VEKGZhY2UsICZmYWNlID09IG1fYmFja2luZy5wdHIoKSk7CiAgICAgc3dpdGNoIChu
ZXdTdGF0ZSkgeworICAgIGNhc2UgQ1NTRm9udEZhY2U6OlN0YXR1czo6TG9hZGluZzoKKyAgICAg
ICAgLy8gV2Ugc3RpbGwgbmVlZCB0byByZXNvbHZlIHByb21pc2VzIHdoZW4gbG9hZGluZyBjb21w
bGV0ZXMsIGV2ZW4gaWYgYWxsIHJlZmVyZW5jZXMgdG8gdXNlIGhhdmUgZmFsbGVuIG91dCBvZiBz
Y29wZS4KKyAgICAgICAgcmVmKCk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTRm9udEZh
Y2U6OlN0YXR1czo6VGltZWRPdXQ6CiAgICAgICAgIHJlamVjdFByb21pc2UoTkVUV09SS19FUlIp
OworICAgICAgICBkZXJlZigpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NGb250RmFj
ZTo6U3RhdHVzOjpTdWNjZXNzOgogICAgICAgICBmdWxmaWxsUHJvbWlzZSgpOworICAgICAgICBk
ZXJlZigpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NGb250RmFjZTo6U3RhdHVzOjpG
YWlsdXJlOgogICAgICAgICByZWplY3RQcm9taXNlKE5FVFdPUktfRVJSKTsKKyAgICAgICAgZGVy
ZWYoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0ZvbnRGYWNlLmgKaW5kZXggZjY2ZmI5YWZkZjY4ZWY1YzFhNmZjNWFjYTk3MmMyMDdjMzVm
NGQzNC4uODNhMzNkMzdjNzFjNzBjZDM0YTA2NWFiOWMzMzM3Nzg1YTM1NTQyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRGYWNlLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgRGVwcmVjYXRlZCB7CkBAIC00OCw2ICs0OSw3IEBAIGNsYXNzIERpY3Rpb25h
cnk7CiBjbGFzcyBGb250RmFjZSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRGYWNlPiwg
cHVibGljIENTU0ZvbnRGYWNlOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8
Rm9udEZhY2U+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNv
dXJjZSwgY29uc3QgRGljdGlvbmFyeSYgZGVzY3JpcHRvcnMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBzdGF0aWMgUmVmPEZvbnRGYWNlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUmLCBDU1NGb250RmFj
ZSYpOwogICAgIHZpcnR1YWwgfkZvbnRGYWNlKCk7CiAKICAgICB2b2lkIHNldEZhbWlseShjb25z
dCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkBAIC03NiwxNiArNzgsMjAgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwg
Q1NTUHJvcGVydHlJRCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZm9udFN0YXRlQ2hhbmdlZChDU1NG
b250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMgb2xkU3RhdGUsIENTU0ZvbnRGYWNlOjpTdGF0
dXMgbmV3U3RhdGUpIG92ZXJyaWRlOworCisgICAgV2Vha1B0cjxGb250RmFjZT4gY3JlYXRlV2Vh
a1B0cigpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEZvbnRGYWNlKEpTQzo6RXhlY1N0YXRlJiwg
Q1NTRm9udFNlbGVjdG9yJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhdGVDaGFuZ2VkKENTU0Zv
bnRGYWNlJiwgQ1NTRm9udEZhY2U6OlN0YXR1cyBvbGRTdGF0ZSwgQ1NTRm9udEZhY2U6OlN0YXR1
cyBuZXdTdGF0ZSkgb3ZlcnJpZGU7CisgICAgRm9udEZhY2UoSlNDOjpFeGVjU3RhdGUmLCBDU1NG
b250RmFjZSYpOwogCiAgICAgdm9pZCBmdWxmaWxsUHJvbWlzZSgpOwogICAgIHZvaWQgcmVqZWN0
UHJvbWlzZShFeGNlcHRpb25Db2RlKTsKIAogICAgIFJlZjxDU1NGb250RmFjZT4gbV9iYWNraW5n
OwogICAgIFByb21pc2UgbV9wcm9taXNlOworICAgIFdlYWtQdHJGYWN0b3J5PEZvbnRGYWNlPiBt
X3dlYWtQdHJGYWN0b3J5OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRGYWNlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5jcHAKaW5k
ZXggN2VkNzc0NjZiNDI0MjkzZGNlYjdmM2I1NTI0YmUxODRlMWM1YTgyYy4uZmUzZWQyODgzZWM1
ZjViYjVmZDQ1ZjkxOTlhYTU3NmUwZWY1MTUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0ZvbnRGYWNlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQu
Y3BwCkBAIC00MiwxNyArNDIsMzkgQEAgc3RhdGljIEZvbnRGYWNlU2V0OjpQcm9taXNlIGNyZWF0
ZVByb21pc2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWMpCiAgICAgcmV0dXJuIEZvbnRGYWNlU2V0OjpQ
cm9taXNlKERlZmVycmVkV3JhcHBlcigmZXhlYywgJmdsb2JhbE9iamVjdCwgSlNDOjpKU1Byb21p
c2VEZWZlcnJlZDo6Y3JlYXRlKCZleGVjLCAmZ2xvYmFsT2JqZWN0KSkpOwogfQogCi1Gb250RmFj
ZVNldDo6Rm9udEZhY2VTZXQoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcykKK1Jl
ZjxGb250RmFjZVNldD4gRm9udEZhY2VTZXQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5pdGlhbEZhY2VzKQoreworICAgIFJlZjxG
b250RmFjZVNldD4gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBGb250RmFjZVNldChkb2N1bWVudCwg
aW5pdGlhbEZhY2VzKSk7CisgICAgcmVzdWx0LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitSZWY8Rm9udEZhY2VTZXQ+IEZvbnRGYWNlU2V0OjpjcmVhdGUoRG9j
dW1lbnQmIGRvY3VtZW50LCBDU1NGb250RmFjZVNldCYgYmFja2luZykKK3sKKyAgICBSZWY8Rm9u
dEZhY2VTZXQ+IHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgRm9udEZhY2VTZXQoZG9jdW1lbnQsIGJh
Y2tpbmcpKTsKKyAgICByZXN1bHQtPnN1c3BlbmRJZk5lZWRlZCgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK0ZvbnRGYWNlU2V0OjpGb250RmFjZVNldChEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5pdGlhbEZhY2VzKQogICAgIDogQWN0aXZl
RE9NT2JqZWN0KCZkb2N1bWVudCkKLSAgICAsIG1fYmFja2luZygqdGhpcykKLSAgICAsIG1fcHJv
bWlzZShjcmVhdGVQcm9taXNlKGV4ZWNTdGF0ZSkpCisgICAgLCBtX2JhY2tpbmcoQ1NTRm9udEZh
Y2VTZXQ6OmNyZWF0ZSgpKQogeworICAgIG1fYmFja2luZy0+YWRkQ2xpZW50KCp0aGlzKTsKICAg
ICBmb3IgKGF1dG8mIGZhY2UgOiBpbml0aWFsRmFjZXMpCiAgICAgICAgIGFkZChmYWNlLmdldCgp
KTsKIH0KIAorRm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KERvY3VtZW50JiBkb2N1bWVudCwgQ1NT
Rm9udEZhY2VTZXQmIGJhY2tpbmcpCisgICAgOiBBY3RpdmVET01PYmplY3QoJmRvY3VtZW50KQor
ICAgICwgbV9iYWNraW5nKGJhY2tpbmcpCit7CisgICAgbV9iYWNraW5nLT5hZGRDbGllbnQoKnRo
aXMpOworfQorCiBGb250RmFjZVNldDo6fkZvbnRGYWNlU2V0KCkKIHsKKyAgICBtX2JhY2tpbmct
PnJlbW92ZUNsaWVudCgqdGhpcyk7CiB9CiAKIEZvbnRGYWNlU2V0OjpJdGVyYXRvcjo6SXRlcmF0
b3IoRm9udEZhY2VTZXQmIHNldCkKQEAgLTYwLDExICs4MiwxMSBAQCBGb250RmFjZVNldDo6SXRl
cmF0b3I6Okl0ZXJhdG9yKEZvbnRGYWNlU2V0JiBzZXQpCiB7CiB9CiAKLWJvb2wgRm9udEZhY2VT
ZXQ6Okl0ZXJhdG9yOjpuZXh0KFJlZlB0cjxGb250RmFjZT4mIGtleSwgUmVmUHRyPEZvbnRGYWNl
PiYgdmFsdWUpCitib29sIEZvbnRGYWNlU2V0OjpJdGVyYXRvcjo6bmV4dChKU0M6OkV4ZWNTdGF0
ZSYgZXhlY1N0YXRlLCBSZWZQdHI8Rm9udEZhY2U+JiBrZXksIFJlZlB0cjxGb250RmFjZT4mIHZh
bHVlKQogewogICAgIGlmIChtX2luZGV4ID09IG1fdGFyZ2V0LT5zaXplKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGtleSA9IG1fdGFyZ2V0LT5tX2JhY2tpbmdbbV9pbmRleCsrXS53cmFw
cGVyKCk7CisgICAga2V5ID0gbV90YXJnZXQtPm1fYmFja2luZy5nZXQoKVttX2luZGV4KytdLndy
YXBwZXIoZXhlY1N0YXRlKTsKICAgICB2YWx1ZSA9IGtleTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CkBAIC04MiwxOCArMTA0LDE4IEBAIGJvb2wgRm9udEZhY2VTZXQ6OmhhcyhGb250RmFjZSogZmFj
ZSkgY29uc3QKIHsKICAgICBpZiAoIWZhY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gbV9iYWNraW5nLmhhc0ZhY2UoZmFjZS0+YmFja2luZygpKTsKKyAgICByZXR1cm4gbV9i
YWNraW5nLT5oYXNGYWNlKGZhY2UtPmJhY2tpbmcoKSk7CiB9CiAKIHNpemVfdCBGb250RmFjZVNl
dDo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYmFja2luZy5mYWNlQ291bnQoKTsKKyAg
ICByZXR1cm4gbV9iYWNraW5nLT5mYWNlQ291bnQoKTsKIH0KIAogRm9udEZhY2VTZXQmIEZvbnRG
YWNlU2V0OjphZGQoRm9udEZhY2UqIGZhY2UpCiB7Ci0gICAgaWYgKGZhY2UgJiYgIW1fYmFja2lu
Zy5oYXNGYWNlKGZhY2UtPmJhY2tpbmcoKSkpCi0gICAgICAgIG1fYmFja2luZy5hZGQoZmFjZS0+
YmFja2luZygpKTsKKyAgICBpZiAoZmFjZSAmJiAhbV9iYWNraW5nLT5oYXNGYWNlKGZhY2UtPmJh
Y2tpbmcoKSkpCisgICAgICAgIG1fYmFja2luZy0+YWRkKGZhY2UtPmJhY2tpbmcoKSk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC0xMDIsMjEgKzEyNCwyMSBAQCBib29sIEZvbnRGYWNlU2V0
OjpyZW1vdmUoRm9udEZhY2UqIGZhY2UpCiAgICAgaWYgKCFmYWNlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBib29sIHJlc3VsdCA9IG1fYmFja2luZy5oYXNGYWNlKGZhY2UtPmJhY2tp
bmcoKSk7CisgICAgYm9vbCByZXN1bHQgPSBtX2JhY2tpbmctPmhhc0ZhY2UoZmFjZS0+YmFja2lu
ZygpKTsKICAgICBpZiAocmVzdWx0KQotICAgICAgICBtX2JhY2tpbmcucmVtb3ZlKGZhY2UtPmJh
Y2tpbmcoKSk7CisgICAgICAgIG1fYmFja2luZy0+cmVtb3ZlKGZhY2UtPmJhY2tpbmcoKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBGb250RmFjZVNldDo6Y2xlYXIoKQogewotICAg
IHdoaWxlIChtX2JhY2tpbmcuZmFjZUNvdW50KCkpCi0gICAgICAgIG1fYmFja2luZy5yZW1vdmUo
bV9iYWNraW5nWzBdKTsKKyAgICB3aGlsZSAobV9iYWNraW5nLT5mYWNlQ291bnQoKSkKKyAgICAg
ICAgbV9iYWNraW5nLT5yZW1vdmUobV9iYWNraW5nLmdldCgpWzBdKTsKIH0KIAotdm9pZCBGb250
RmFjZVNldDo6bG9hZChjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRGVm
ZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIEZvbnRGYWNl
U2V0Ojpsb2FkKEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIGNvbnN0IFN0cmluZyYgZm9udCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBhdXRvIG1hdGNoaW5nRmFjZXMgPSBtX2JhY2tpbmcubWF0Y2hpbmdG
YWNlcyhmb250LCB0ZXh0LCBlYyk7CisgICAgYXV0byBtYXRjaGluZ0ZhY2VzID0gbV9iYWNraW5n
LT5tYXRjaGluZ0ZhY2VzKGZvbnQsIHRleHQsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTM5LDExICsxNjEsMTEgQEAgdm9pZCBGb250RmFjZVNldDo6bG9hZChjb25z
dCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRGVmZXJyZWRXcmFwcGVyJiYKICAg
ICB9CiAKICAgICBmb3IgKGF1dG8mIGZhY2UgOiBtYXRjaGluZ0ZhY2VzKSB7Ci0gICAgICAgIHBl
bmRpbmdQcm9taXNlLT5mYWNlcy5hcHBlbmQoZmFjZS5nZXQoKS53cmFwcGVyKCkpOworICAgICAg
ICBwZW5kaW5nUHJvbWlzZS0+ZmFjZXMuYXBwZW5kKGZhY2UuZ2V0KCkud3JhcHBlcihleGVjU3Rh
dGUpKTsKICAgICAgICAgaWYgKGZhY2UuZ2V0KCkuc3RhdHVzKCkgPT0gQ1NTRm9udEZhY2U6OlN0
YXR1czo6U3VjY2VzcykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB3YWl0aW5nID0g
dHJ1ZTsKLSAgICAgICAgYXV0byYgdmVjdG9yID0gbV9wZW5kaW5nUHJvbWlzZXMuYWRkKFJlZlB0
cjxGb250RmFjZT4oZmFjZS5nZXQoKS53cmFwcGVyKCkpLCBWZWN0b3I8UmVmPFBlbmRpbmdQcm9t
aXNlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvJiB2ZWN0b3IgPSBtX3BlbmRp
bmdQcm9taXNlcy5hZGQoUmVmUHRyPENTU0ZvbnRGYWNlPigmZmFjZS5nZXQoKSksIFZlY3RvcjxS
ZWY8UGVuZGluZ1Byb21pc2U+PigpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIHZlY3Rvci5h
cHBlbmQocGVuZGluZ1Byb21pc2UuY29weVJlZigpKTsKICAgICB9CiAKQEAgLTE1MywxNCArMTc1
LDE0IEBAIHZvaWQgRm9udEZhY2VTZXQ6OmxvYWQoY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBT
dHJpbmcmIHRleHQsIERlZmVycmVkV3JhcHBlciYmCiAKIGJvb2wgRm9udEZhY2VTZXQ6OmNoZWNr
KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewotICAgIHJldHVybiBtX2JhY2tpbmcuY2hlY2soZmFtaWx5LCB0ZXh0LCBlYyk7Cisg
ICAgcmV0dXJuIG1fYmFja2luZy0+Y2hlY2soZmFtaWx5LCB0ZXh0LCBlYyk7CiB9CiAKIGF1dG8g
Rm9udEZhY2VTZXQ6OnByb21pc2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSkgLT4gUHJvbWlz
ZSYKIHsKICAgICBpZiAoIW1fcHJvbWlzZSkgewogICAgICAgICBtX3Byb21pc2UgPSBjcmVhdGVQ
cm9taXNlKGV4ZWNTdGF0ZSk7Ci0gICAgICAgIGlmIChtX2JhY2tpbmcuc3RhdHVzKCkgPT0gQ1NT
Rm9udEZhY2VTZXQ6OlN0YXR1czo6TG9hZGVkKQorICAgICAgICBpZiAobV9iYWNraW5nLT5zdGF0
dXMoKSA9PSBDU1NGb250RmFjZVNldDo6U3RhdHVzOjpMb2FkZWQpCiAgICAgICAgICAgICBmdWxm
aWxsUHJvbWlzZSgpOwogICAgIH0KICAgICByZXR1cm4gbV9wcm9taXNlLnZhbHVlKCk7CkBAIC0x
NjgsNyArMTkwLDcgQEAgYXV0byBGb250RmFjZVNldDo6cHJvbWlzZShKU0M6OkV4ZWNTdGF0ZSYg
ZXhlY1N0YXRlKSAtPiBQcm9taXNlJgogICAgIAogU3RyaW5nIEZvbnRGYWNlU2V0OjpzdGF0dXMo
KSBjb25zdAogewotICAgIHN3aXRjaCAobV9iYWNraW5nLnN0YXR1cygpKSB7CisgICAgc3dpdGNo
IChtX2JhY2tpbmctPnN0YXR1cygpKSB7CiAgICAgY2FzZSBDU1NGb250RmFjZVNldDo6U3RhdHVz
OjpMb2FkaW5nOgogICAgICAgICByZXR1cm4gU3RyaW5nKCJsb2FkaW5nIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgY2FzZSBDU1NGb250RmFjZVNldDo6U3RhdHVzOjpMb2Fk
ZWQ6CkBAIC0xODAsNyArMjAyLDcgQEAgU3RyaW5nIEZvbnRGYWNlU2V0OjpzdGF0dXMoKSBjb25z
dAogCiBib29sIEZvbnRGYWNlU2V0OjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9iYWNraW5nLnN0YXR1cygpID09IENTU0ZvbnRGYWNlU2V0
OjpTdGF0dXM6OkxvYWRlZDsKKyAgICByZXR1cm4gbV9iYWNraW5nLT5zdGF0dXMoKSA9PSBDU1NG
b250RmFjZVNldDo6U3RhdHVzOjpMb2FkZWQ7CiB9CiAKIHZvaWQgRm9udEZhY2VTZXQ6OnN0YXJ0
ZWRMb2FkaW5nKCkKQEAgLTIwOSw3ICsyMzEsNyBAQCB2b2lkIEZvbnRGYWNlU2V0OjpmdWxmaWxs
UHJvbWlzZSgpCiAKIHZvaWQgRm9udEZhY2VTZXQ6OmZhY2VGaW5pc2hlZChDU1NGb250RmFjZSYg
ZmFjZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0dXMpCiB7Ci0gICAgYXV0byBpdGVyYXRv
ciA9IG1fcGVuZGluZ1Byb21pc2VzLmZpbmQoZmFjZS53cmFwcGVyKCkpOworICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3BlbmRpbmdQcm9taXNlcy5maW5kKCZmYWNlKTsKICAgICBpZiAoaXRlcmF0b3Ig
PT0gbV9wZW5kaW5nUHJvbWlzZXMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Rm9udEZhY2VTZXQuaAppbmRleCBjMDVlZDE4ZTRjZThhZjUxZjhmMmU4MDQxMjUxYWI1NDAwMWRj
MmM3Li40OGY2M2UzMDE0YzhhNWQ3MWU1YzQzOTAwZmNhMTI2ZWE4YzZmNzRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvRm9udEZhY2VTZXQuaApAQCAtMzgsNiArMzgsMTAgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKK25hbWVzcGFjZSBKU0Mgewor
Y2xhc3MgRXhlY1N0YXRlOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3Vt
ZW50OwpAQCAtNDUsMTIgKzQ5LDggQEAgY2xhc3MgRm9udEZhY2U7CiAKIGNsYXNzIEZvbnRGYWNl
U2V0IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udEZhY2VTZXQ+LCBwdWJsaWMgQ1NTRm9u
dEZhY2VTZXRDbGllbnQsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMg
QWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZvbnRGYWNlU2V0PiBj
cmVhdGUoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25z
dCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcykKLSAgICB7Ci0gICAgICAg
IFJlZjxGb250RmFjZVNldD4gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBGb250RmFjZVNldChleGVj
U3RhdGUsIGRvY3VtZW50LCBpbml0aWFsRmFjZXMpKTsKLSAgICAgICAgcmVzdWx0LT5zdXNwZW5k
SWZOZWVkZWQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgc3RhdGljIFJl
ZjxGb250RmFjZVNldD4gY3JlYXRlKERvY3VtZW50JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250
RmFjZT4+JiBpbml0aWFsRmFjZXMpOworICAgIHN0YXRpYyBSZWY8Rm9udEZhY2VTZXQ+IGNyZWF0
ZShEb2N1bWVudCYsIENTU0ZvbnRGYWNlU2V0JiBiYWNraW5nKTsKICAgICB2aXJ0dWFsIH5Gb250
RmFjZVNldCgpOwogCiAgICAgYm9vbCBoYXMoRm9udEZhY2UqKSBjb25zdDsKQEAgLTU5LDggKzU5
LDggQEAgcHVibGljOgogICAgIGJvb2wgcmVtb3ZlKEZvbnRGYWNlKik7CiAgICAgdm9pZCBjbGVh
cigpOwogCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYgZm9udCwgRGVmZXJyZWRXcmFwcGVy
JiYgcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgbG9hZChmb250LCBTdHJpbmcoIiAiLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwcm9taXNlKSwgZWMpOyB9Ci0g
ICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBEZWZl
cnJlZFdyYXBwZXImJiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBsb2FkKEpT
Qzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIGNvbnN0IFN0cmluZyYgZm9udCwgRGVmZXJyZWRXcmFw
cGVyJiYgcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgbG9hZChleGVjU3RhdGUsIGZvbnQs
IFN0cmluZygiICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHByb21p
c2UpLCBlYyk7IH0KKyAgICB2b2lkIGxvYWQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBTdHJpbmcm
IGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgY2hlY2soY29uc3QgU3RyaW5nJiBmb250LCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gY2hlY2soZm9udCwgU3RyaW5nKCIgIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksIGVjKTsgfQogICAgIGJvb2wgY2hlY2soY29uc3QgU3RyaW5nJiBm
b250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKIApAQCAtNjksNiArNjks
OCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBET01Qcm9taXNlPEZvbnRGYWNlU2V0JiwgRE9NQ29y
ZUV4Y2VwdGlvbiY+IFByb21pc2U7CiAgICAgUHJvbWlzZSYgcHJvbWlzZShKU0M6OkV4ZWNTdGF0
ZSYpOwogCisgICAgQ1NTRm9udEZhY2VTZXQmIGJhY2tpbmcoKSB7IHJldHVybiBtX2JhY2tpbmc7
IH0KKwogICAgIGNsYXNzIEl0ZXJhdG9yIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGV4cGxpY2l0
IEl0ZXJhdG9yKEZvbnRGYWNlU2V0Jik7CkBAIC03NiwxMSArNzgsMTEgQEAgcHVibGljOgogICAg
ICAgICB1c2luZyBLZXkgPSBSZWZQdHI8Rm9udEZhY2U+OwogICAgICAgICB1c2luZyBWYWx1ZSA9
IFJlZlB0cjxGb250RmFjZT47CiAKLSAgICAgICAgYm9vbCBuZXh0KEtleSYgbmV4dEtleSwgVmFs
dWUmIG5leHRWYWx1ZSk7CisgICAgICAgIGJvb2wgbmV4dChKU0M6OkV4ZWNTdGF0ZSYsIEtleSYg
bmV4dEtleSwgVmFsdWUmIG5leHRWYWx1ZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWY8
Rm9udEZhY2VTZXQ+IG1fdGFyZ2V0OwotICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsKKyAg
ICAgICAgc2l6ZV90IG1faW5kZXggeyAwIH07IC8vIEZJWE1FOiBUaGVyZSBuZWVkcyB0byBiZSBh
IG1lY2hhbmlzbSB0byBoYW5kbGUgd2hlbiBmb250cyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9t
IHRoZSBtaWRkbGUgb2YgdGhlIEZvbnRGYWNlU2V0LgogICAgIH07CiAgICAgSXRlcmF0b3IgY3Jl
YXRlSXRlcmF0b3IoKSB7IHJldHVybiBJdGVyYXRvcigqdGhpcyk7IH0KIApAQCAtMTA0LDcgKzEw
Niw4IEBAIHByaXZhdGU6CiAgICAgICAgIFByb21pc2UgcHJvbWlzZTsKICAgICB9OwogCi0gICAg
Rm9udEZhY2VTZXQoSlNDOjpFeGVjU3RhdGUmLCBEb2N1bWVudCYsIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Rm9udEZhY2U+PiYpOworICAgIEZvbnRGYWNlU2V0KERvY3VtZW50JiwgY29uc3QgVmVjdG9y
PFJlZlB0cjxGb250RmFjZT4+Jik7CisgICAgRm9udEZhY2VTZXQoRG9jdW1lbnQmLCBDU1NGb250
RmFjZVNldCYpOwogCiAgICAgdm9pZCBmdWxmaWxsUHJvbWlzZSgpOwogCkBAIC0xMjMsOCArMTI2
LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlk
ZSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlk
ZSB7IGRlcmVmKCk7IH0KIAotICAgIENTU0ZvbnRGYWNlU2V0IG1fYmFja2luZzsKLSAgICBIYXNo
TWFwPFJlZlB0cjxGb250RmFjZT4sIFZlY3RvcjxSZWY8UGVuZGluZ1Byb21pc2U+Pj4gbV9wZW5k
aW5nUHJvbWlzZXM7CisgICAgUmVmPENTU0ZvbnRGYWNlU2V0PiBtX2JhY2tpbmc7CisgICAgSGFz
aE1hcDxSZWZQdHI8Q1NTRm9udEZhY2U+LCBWZWN0b3I8UmVmPFBlbmRpbmdQcm9taXNlPj4+IG1f
cGVuZGluZ1Byb21pc2VzOwogICAgIE9wdGlvbmFsPFByb21pc2U+IG1fcHJvbWlzZTsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaWRsCmluZGV4IDRmZjY4NWRjYWNkOWI1MmVjMjczNTVl
MGRkYjM1MWRmM2U1NmZlNzguLjZjYWY1NWE1MmUxZmFjNGQ2NzQ3MTk1ZWYyZWVkNWIwOWI0OGUx
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmlkbApAQCAtMjksNyArMjksNyBAQCBlbnVt
IEZvbnRGYWNlU2V0TG9hZFN0YXR1cyB7CiB9OwogCiBbCi0gICAgQ29uc3RydWN0b3JDYWxsV2l0
aD1TY3JpcHRTdGF0ZSZEb2N1bWVudCwKKyAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50
LAogICAgIENvbnN0cnVjdG9yKHNlcXVlbmNlPEZvbnRGYWNlPiBpbml0aWFsRmFjZXMpCiBdIGlu
dGVyZmFjZSBGb250RmFjZVNldCA6IEV2ZW50VGFyZ2V0IHsKICAgICBbQ3VzdG9tXSBPYmplY3Qg
ZW50cmllcygpOwpAQCAtNDgsNyArNDgsNyBAQCBlbnVtIEZvbnRGYWNlU2V0TG9hZFN0YXR1cyB7
CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmxvYWRpbmdkb25lOwogICAgIGF0dHJpYnV0
ZSBFdmVudEhhbmRsZXIgb25sb2FkaW5nZXJyb3I7CiAKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBQ
cm9taXNlIGxvYWQoRE9NU3RyaW5nIGZvbnQsIG9wdGlvbmFsIERPTVN0cmluZyB0ZXh0KTsKKyAg
ICBbUmFpc2VzRXhjZXB0aW9uLCBDYWxsV2l0aD1TY3JpcHRTdGF0ZV0gUHJvbWlzZSBsb2FkKERP
TVN0cmluZyBmb250LCBvcHRpb25hbCBET01TdHJpbmcgdGV4dCk7CiAgICAgW1JhaXNlc0V4Y2Vw
dGlvbl0gYm9vbGVhbiBjaGVjayhET01TdHJpbmcgZm9udCwgb3B0aW9uYWwgRE9NU3RyaW5nIHRl
eHQpOwogCiAgICAgW0N1c3RvbV0gcmVhZG9ubHkgYXR0cmlidXRlIFByb21pc2UgcmVhZHk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA5MGEwY2FjM2I3MWNkN2NhMjA3NmM5MTdiMWEyMmIx
OWRlYWQ2ZjgxLi5lNmUxNGRhYjc4YjlhMjc3Y2I5NmZlZTU0ZDdkNTkxOGIxZTM0NzJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAKICNpbmNsdWRlICJFdmVudEhh
bmRsZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkZv
Y3VzQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZvbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGb250
RmFjZVNldC5oIgogI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNjY3OSwxNCArNjY3
OSwxMCBAQCBEb2N1bWVudCYgRG9jdW1lbnQ6OmVuc3VyZVRlbXBsYXRlRG9jdW1lbnQoKQogfQog
I2VuZGlmCiAKLSNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5UUykKLVJlZlB0cjxGb250TG9hZGVy
PiBEb2N1bWVudDo6Zm9udHMoKQorUmVmPEZvbnRGYWNlU2V0PiBEb2N1bWVudDo6Zm9udHMoKQog
ewotICAgIGlmICghbV9mb250bG9hZGVyKQotICAgICAgICBtX2ZvbnRsb2FkZXIgPSBGb250TG9h
ZGVyOjpjcmVhdGUodGhpcyk7Ci0gICAgcmV0dXJuIG1fZm9udGxvYWRlcjsKKyAgICByZXR1cm4g
Zm9udFNlbGVjdG9yKCkuZm9udEZhY2VTZXQoKTsKIH0KLSNlbmRpZgogCiBmbG9hdCBEb2N1bWVu
dDo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA1
ZjljMmEyOWI2ODA0ZmU5ODhjOWI0NDgzZDYzOTE2NjBkY2IyODgzLi5mZjMzYTg4NzgwYzE3NGFk
YzAwZGMwNmFlM2QxYjI2ZTJiMmQ4ODQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMjA1LDkg
KzIwNSw3IEBAIGNsYXNzIFRleHRBdXRvc2l6ZXI7CiBjbGFzcyBET01TZWN1cml0eVBvbGljeTsK
ICNlbmRpZgogCi0jaWYgRU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMpCi1jbGFzcyBGb250TG9hZGVy
OwotI2VuZGlmCitjbGFzcyBGb250RmFjZVNldDsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKIApAQCAtMTI3NSw5ICsxMjczLDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCBTZWN1cml0eU9yaWdpbiogdG9wT3JpZ2luKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7
CiAKLSNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5UUykKLSAgICBSZWZQdHI8Rm9udExvYWRlcj4g
Zm9udHMoKTsKLSNlbmRpZgorICAgIFJlZjxGb250RmFjZVNldD4gZm9udHMoKTsKIAogICAgIHZv
aWQgZW5zdXJlUGx1Z0luc0luamVjdGVkU2NyaXB0KERPTVdyYXBwZXJXb3JsZCYpOwogCkBAIC0x
NzU2LDEwICsxNzUyLDYgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+
IG1fZm9udFNlbGVjdG9yOwogCi0jaWYgRU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMpCi0gICAgUmVm
UHRyPEZvbnRMb2FkZXI+IG1fZm9udGxvYWRlcjsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFdFQl9S
RVBMQVkpCiAgICAgUmVmUHRyPEpTQzo6SW5wdXRDdXJzb3I+IG1faW5wdXRDdXJzb3I7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCmluZGV4IDYxYzY3YzRjMjMzMzU4MzYxMjJjYmE3M2Qy
NTk2NGE5MDY5YTRmNmUuLmRhNmVkNTMxYmViZmYyNzYwN2YzODQ1ZWU1NmI5ZTUyMTk1MGJkNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbApAQCAtMjY1LDcgKzI2NSw3IEBACiAgICAgW0NvbmRp
dGlvbmFsPUNTU19SRUdJT05TXSBET01OYW1lZEZsb3dDb2xsZWN0aW9uIHdlYmtpdEdldE5hbWVk
Rmxvd3MoKTsKIAogI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkgJiYgTEFOR1VBR0Vf
SkFWQVNDUklQVAotICAgIFtDb25kaXRpb25hbD1GT05UX0xPQURfRVZFTlRTXSByZWFkb25seSBh
dHRyaWJ1dGUgRm9udExvYWRlciBmb250czsKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgRm9udEZh
Y2VTZXQgZm9udHM7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoRU5BQkxFX0lPU19UT1VDSF9FVkVO
VFMpICYmIEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZh
Y2VFbGVtZW50LmgKaW5kZXggZDI4MjgzYTMzYjllMzVmNWI4YzMwNjRhZDY2ZjM3OGNmNjU2ODgw
OC4uNWU0YzUwMDlmZTI5ZTUzMDQwMTNkMjkxYmNjNmQwYjlhMDg0NDZhNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAg
ICAgU1ZHRm9udEVsZW1lbnQqIGFzc29jaWF0ZWRGb250RWxlbWVudCgpIGNvbnN0OwogICAgIHZv
aWQgcmVidWlsZEZvbnRGYWNlKCk7CiAgICAgCi0gICAgY29uc3QgU3R5bGVSdWxlRm9udEZhY2Um
IGZvbnRGYWNlUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udEZhY2VSdWxlLmdldCgpOyB9Cisg
ICAgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSgpIHsgcmV0dXJuIG1fZm9udEZhY2VS
dWxlLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271895</attachid>
            <date>2016-02-21 17:04:14 -0800</date>
            <delta_ts>2016-02-21 19:44:41 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-153347-20160221170355.patch</filename>
            <type>text/plain</type>
            <size>83095</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2ODUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY5NjA2ZDFhOWRiZmIz
ZTNjY2VjMWJjNmZiZWFmNmI2MzYxNjY4MC4uZDkyNjYwOWIxY2JkMDY5ZGMwMTA3ZjkyNjYyYzEz
NzczNDFhYTg3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE2LTAyLTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0ZvbnQgTG9h
ZGluZ10gU3BsaXQgQ1NTRm9udFNlbGVjdG9yIGludG8gYSBGb250RmFjZVNldCBpbXBsZW1lbnRh
dGlvbiBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMzNDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAq
IGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Q1NT
Rm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmNhbGN1bGF0ZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpzZXRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZTo6Y2FsY3VsYXRlV2VpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlOjpzZXRXZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6
OmZvbnRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnB1bXApOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmZvbnQpOgorICAgICAgICAqIGNzcy9DU1NGb250
RmFjZS5oOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNldDo6fkNTU0ZvbnRGYWNlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU2V0OjpoYXNGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNl
U2V0OjpyZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6
OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZUZvbnRUcmFpdHNNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRG
YWNlU2V0OjptYXRjaGluZ0ZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFy
YXRvcjo6Rm9udEZhY2VDb21wYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29t
cGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6
Z2V0Rm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEZhbWlsaWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhbWlsaWVzSW50ZXJzZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Ojpsb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKiBj
c3MvQ1NTRm9udEZhY2VTZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xp
ZW50OjpmYWNlRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXRDbGll
bnQ6OnN0YXJ0ZWRMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xp
ZW50Ojpjb21wbGV0ZWRMb2FkaW5nKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
aDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZvbnRTZWxlY3Rvcjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0
b3I6OmFkZEZvbnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6
OmZvbnRSYW5nZXNGb3JGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9y
OjpjbGVhckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6cmVn
aXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250RmFjZUNvbXBhcmF0b3I6OkZvbnRGYWNlQ29tcGFyYXRvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250RmFjZUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZSk6IERlbGV0ZWQu
CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFj
ZTo6Q1NTU2VnbWVudGVkRm9udEZhY2UpOgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5oOgorICAgICAgICAqIGNzcy9Gb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250RmFjZTo6Rm9udEZhY2UpOgorICAgICAgICAqIGNzcy9Gb250RmFjZVNldC5oOgorICAgICAg
ICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuaDoKKwogMjAxNi0wMi0xOSAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgbW9yZSBjb25jcmV0ZSB0
eXBlcyBmb3IgcGFyc2luZyBwb3NpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0
Y2gvRmV0Y2hIZWFkZXJzLmNwcAppbmRleCA4MTIzZTg2YjkyMjcwMzlkMGNhMjBjZDkzY2M5M2E0
YzAzMjc1ZjdjLi4xMDhmYTdiMWQ1NWJiNDUzYmRkNjM2NDBjMWM5OThlOTc4YjMyMTBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCkBAIC0xNzks
NyArMTc5LDcgQEAgdm9pZCBGZXRjaEhlYWRlcnM6OmZpbGwoY29uc3QgRmV0Y2hIZWFkZXJzKiBo
ZWFkZXJzKQogICAgIH0KIH0KIAotYm9vbCBGZXRjaEhlYWRlcnM6Okl0ZXJhdG9yOjpuZXh0KFN0
cmluZyYgbmV4dEtleSwgU3RyaW5nJiBuZXh0VmFsdWUpCitib29sIEZldGNoSGVhZGVyczo6SXRl
cmF0b3I6Om5leHQoSlNDOjpFeGVjU3RhdGUmLCBTdHJpbmcmIG5leHRLZXksIFN0cmluZyYgbmV4
dFZhbHVlKQogewogICAgIHdoaWxlIChtX2N1cnJlbnRJbmRleCA8IG1fa2V5cy5zaXplKCkpIHsK
ICAgICAgICAgYXV0byYga2V5ID0gbV9rZXlzW21fY3VycmVudEluZGV4KytdOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmgKaW5kZXggZjM1ODFkMzI0YmU4Njk1
NTViNDU2OTkyNWY0MDc4NGJkMmZlYjc2Ni4uYWU3OTUwYTRiZDU5NWUyZTNhMmIwOGFkMDQxMmU4
MzdiODI1ZGMzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRj
aEhlYWRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVy
cy5oCkBAIC0zMyw2ICszMywxMCBAQAogCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogCitu
YW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4ZWNTdGF0ZTsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwpAQCAtNzAsNyArNzQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHVzaW5nIEtleSA9IFN0cmluZzsKICAgICAgICAgdXNpbmcgVmFsdWUgPSBTdHJp
bmc7CiAKLSAgICAgICAgYm9vbCBuZXh0KFN0cmluZyYgbmV4dEtleSwgU3RyaW5nJiBuZXh0VmFs
dWUpOworICAgICAgICBib29sIG5leHQoSlNDOjpFeGVjU3RhdGUmLCBTdHJpbmcmIG5leHRLZXks
IFN0cmluZyYgbmV4dFZhbHVlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZjxGZXRjaEhl
YWRlcnM+IG1faGVhZGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTS2V5VmFsdWVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlW
YWx1ZUl0ZXJhdG9yLmgKaW5kZXggZmJiZmZkMGM1N2JiMGFlZTA5MmJiYjNiZjQ4Y2M5MmU4MDc5
OGM5ZC4uOTg1NjYzNjdhNzgyZDVhNjA0ZWEzYTUzZDk2NjdjNWFlMDk0ZjRjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmgKQEAgLTEyMiw3
ICsxMjIsNyBAQCBib29sIEpTS2V5VmFsdWVJdGVyYXRvcjxKU1dyYXBwZXI+OjpuZXh0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlJiB2YQogewogICAgIHR5cGVuYW1lIERPTVdy
YXBwZWQ6Okl0ZXJhdG9yOjpLZXkgbmV4dEtleTsKICAgICB0eXBlbmFtZSBET01XcmFwcGVkOjpJ
dGVyYXRvcjo6VmFsdWUgbmV4dFZhbHVlOwotICAgIGlmIChtX2l0ZXJhdG9yLm5leHQobmV4dEtl
eSwgbmV4dFZhbHVlKSkgeworICAgIGlmIChtX2l0ZXJhdG9yLm5leHQoc3RhdGUsIG5leHRLZXks
IG5leHRWYWx1ZSkpIHsKICAgICAgICAgdmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCmluZGV4
IDU1MmU5OWNmYTFlMWVhYWE0YWEzMjY5NTkwMDM4ZGFhYTVhMDIwMTcuLmNhNmVhYWVmZmFhNjRj
NzdjOWVjN2VhNTZmNGI2Mjc4MDcyZDg2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNw
cApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlLmgiCiAKICNpbmNsdWRl
ICJDU1NGb250RmFjZVNvdXJjZS5oIgorI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU3JjVmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NGb250RmFtaWx5LmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZlYXR1cmVWYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgpAQCAtMzgsMTYgKzM5LDQ4IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udExvYWRlci5oIgorI2luY2x1ZGUgIkZvbnRGYWNl
LmgiCiAjaW5jbHVkZSAiRm9udFZhcmlhbnRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0aWVzLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotQ1NTRm9udEZhY2U6OkNTU0ZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVj
dG9yLCBGb250RmFjZSogd3JhcHBlciwgYm9vbCBpc0xvY2FsRmFsbGJhY2spCit2b2lkIENTU0Zv
bnRGYWNlOjphcHBlbmRTb3VyY2VzKENTU0ZvbnRGYWNlJiBmb250RmFjZSwgQ1NTVmFsdWVMaXN0
JiBzcmNMaXN0LCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudElu
VXNlckFnZW50U2hhZG93VHJlZSkKK3sKKyAgICBmb3IgKGF1dG8mIHNyYyA6IHNyY0xpc3QpIHsK
KyAgICAgICAgLy8gQW4gaXRlbSBpbiB0aGUgbGlzdCBlaXRoZXIgc3BlY2lmaWVzIGEgc3RyaW5n
IChsb2NhbCBmb250IG5hbWUpIG9yIGEgVVJMIChyZW1vdGUgZm9udCB0byBkb3dubG9hZCkuCisg
ICAgICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUmIGl0ZW0gPSBkb3duY2FzdDxDU1NGb250RmFjZVNy
Y1ZhbHVlPihzcmMuZ2V0KCkpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9udEZhY2VT
b3VyY2U+IHNvdXJjZTsKKyAgICAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1l
bnQgPSBudWxscHRyOworICAgICAgICBib29sIGZvdW5kU1ZHRm9udCA9IGZhbHNlOworCisjaWYg
RU5BQkxFKFNWR19GT05UUykKKyAgICAgICAgZm91bmRTVkdGb250ID0gaXRlbS5pc1NWR0ZvbnRG
YWNlU3JjKCkgfHwgaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyAgICAgICAgZm9udEZhY2VF
bGVtZW50ID0gaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyNlbmRpZgorICAgICAgICBpZiAo
IWl0ZW0uaXNMb2NhbCgpKSB7CisgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1
bWVudCA/IGRvY3VtZW50LT5zZXR0aW5ncygpIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGJvb2wg
YWxsb3dEb3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8fCAoc2V0dGluZ3MgJiYgc2V0dGluZ3Mt
PmRvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgpKTsKKyAgICAgICAgICAgIGlmIChhbGxv
d0Rvd25sb2FkaW5nICYmIGl0ZW0uaXNTdXBwb3J0ZWRGb3JtYXQoKSAmJiBkb2N1bWVudCkgewor
ICAgICAgICAgICAgICAgIGlmIChDYWNoZWRGb250KiBjYWNoZWRGb250ID0gaXRlbS5jYWNoZWRG
b250KGRvY3VtZW50LCBmb3VuZFNWR0ZvbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2Vu
dFNoYWRvd1RyZWUpKQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5p
cXVlPENTU0ZvbnRGYWNlU291cmNlPihmb250RmFjZSwgaXRlbS5yZXNvdXJjZSgpLCBjYWNoZWRG
b250KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzb3VyY2Ug
PSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmb250RmFjZSwgaXRlbS5yZXNv
dXJjZSgpLCBudWxscHRyLCBmb250RmFjZUVsZW1lbnQpOworCisgICAgICAgIGlmIChzb3VyY2Up
CisgICAgICAgICAgICBmb250RmFjZS5hZG9wdFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkpOworICAg
IH0KKyAgICBmb250RmFjZS5zb3VyY2VzUG9wdWxhdGVkKCk7Cit9CisKK0NTU0ZvbnRGYWNlOjpD
U1NGb250RmFjZShDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciwgU3R5bGVSdWxlRm9udEZh
Y2UqIGNzc0Nvbm5lY3Rpb24sIEZvbnRGYWNlKiB3cmFwcGVyLCBib29sIGlzTG9jYWxGYWxsYmFj
aykKICAgICA6IG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKLSAgICAsIG1fd3JhcHBlcih3
cmFwcGVyKQorICAgICwgbV9jc3NDb25uZWN0aW9uKGNzc0Nvbm5lY3Rpb24pCisgICAgLCBtX3dy
YXBwZXIod3JhcHBlciA/IHdyYXBwZXItPmNyZWF0ZVdlYWtQdHIoKSA6IFdlYWtQdHI8Rm9udEZh
Y2U+KCkpCiAgICAgLCBtX2lzTG9jYWxGYWxsYmFjayhpc0xvY2FsRmFsbGJhY2spCiB7CiB9CkBA
IC02NSw3OCArOTgsOTMgQEAgYm9vbCBDU1NGb250RmFjZTo6c2V0RmFtaWxpZXMoQ1NTVmFsdWUm
IGZhbWlseSkKICAgICBpZiAoIWZhbWlseUxpc3QubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG9sZEZhbWlsaWVzID0gbV9mYW1pbGll
czsKICAgICBtX2ZhbWlsaWVzID0gJmZhbWlseUxpc3Q7CisKKyAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5mb250UHJvcGVydHlDaGFuZ2VkKCp0aGlz
LCBvbGRGYW1pbGllcy5nZXQoKSk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NG
b250RmFjZTo6c2V0U3R5bGUoQ1NTVmFsdWUmIHN0eWxlKQorT3B0aW9uYWw8Rm9udFRyYWl0c01h
c2s+IENTU0ZvbnRGYWNlOjpjYWxjdWxhdGVTdHlsZShDU1NWYWx1ZSYgc3R5bGUpCiB7CiAgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oc3R5bGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBOdWxsb3B0OwogCi0gICAgdW5zaWduZWQgc3R5bGVNYXNrID0gMDsK
ICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihzdHlsZSkuZ2V0VmFsdWVJ
RCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgc3R5bGVNYXNrID0gRm9u
dFN0eWxlTm9ybWFsTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250U3R5
bGVOb3JtYWxNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWVJdGFsaWM6CiAgICAgY2FzZSBDU1NWYWx1
ZU9ibGlxdWU6Ci0gICAgICAgIHN0eWxlTWFzayA9IEZvbnRTdHlsZUl0YWxpY01hc2s7Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFN0eWxlSXRhbGljTWFzazsKICAgICBkZWZh
dWx0OgotICAgICAgICBzdHlsZU1hc2sgPSBGb250U3R5bGVOb3JtYWxNYXNrOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRTdHlsZU5vcm1hbE1hc2s7CiAgICAgfQogCi0gICAg
bV90cmFpdHNNYXNrID0gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV90cmFpdHNNYXNrKSAmICh+Rm9udFN0eWxlTWFzaykpIHwgc3R5bGVNYXNrKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gRm9udFN0eWxlTm9ybWFsTWFzazsKIH0KIAot
Ym9vbCBDU1NGb250RmFjZTo6c2V0V2VpZ2h0KENTU1ZhbHVlJiB3ZWlnaHQpCitib29sIENTU0Zv
bnRGYWNlOjpzZXRTdHlsZShDU1NWYWx1ZSYgc3R5bGUpCit7CisgICAgaWYgKGF1dG8gbWFzayA9
IGNhbGN1bGF0ZVN0eWxlKHN0eWxlKSkgeworICAgICAgICBtX3RyYWl0c01hc2sgPSBzdGF0aWNf
Y2FzdDxGb250VHJhaXRzTWFzaz4oKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RyYWl0c01hc2sp
ICYgKH5Gb250U3R5bGVNYXNrKSkgfCBtYXNrLnZhbHVlKCkpOworCisgICAgICAgIGZvciAoYXV0
byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5mb250UHJvcGVydHlD
aGFuZ2VkKCp0aGlzKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitPcHRpb25hbDxGb250VHJhaXRzTWFzaz4gQ1NTRm9udEZhY2U6OmNhbGN1
bGF0ZVdlaWdodChDU1NWYWx1ZSYgd2VpZ2h0KQogewogICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KHdlaWdodCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CiAKLSAgICB1bnNpZ25lZCB3ZWlnaHRNYXNrID0gMDsKICAgICBzd2l0Y2ggKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih3ZWlnaHQpLmdldFZhbHVlSUQoKSkgewogICAgIGNhc2Ug
Q1NTVmFsdWVCb2xkOgogICAgIGNhc2UgQ1NTVmFsdWVCb2xkZXI6CiAgICAgY2FzZSBDU1NWYWx1
ZTcwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQ3MDBNYXNrOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ3MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFs
dWVOb3JtYWw6CiAgICAgY2FzZSBDU1NWYWx1ZTQwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZv
bnRXZWlnaHQ0MDBNYXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWln
aHQ0MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWU5MDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBG
b250V2VpZ2h0OTAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2Vp
Z2h0OTAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlODAwOgotICAgICAgICB3ZWlnaHRNYXNrID0g
Rm9udFdlaWdodDgwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFdl
aWdodDgwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZTYwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9
IEZvbnRXZWlnaHQ2MDBNYXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRX
ZWlnaHQ2MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWU1MDA6Ci0gICAgICAgIHdlaWdodE1hc2sg
PSBGb250V2VpZ2h0NTAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250
V2VpZ2h0NTAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlMzAwOgotICAgICAgICB3ZWlnaHRNYXNr
ID0gRm9udFdlaWdodDMwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9u
dFdlaWdodDMwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZUxpZ2h0ZXI6CiAgICAgY2FzZSBDU1NW
YWx1ZTIwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQyMDBNYXNrOwotICAgICAg
ICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQyMDBNYXNrOwogICAgIGNhc2UgQ1NT
VmFsdWUxMDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0MTAwTWFzazsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0MTAwTWFzazsKICAgICBkZWZhdWx0
OgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDQwME1hc2s7Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm4gRm9udFdlaWdodDQwME1hc2s7CiAgICAgfQogCi0gICAgbV90cmFp
dHNNYXNrID0gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obV90cmFpdHNNYXNrKSAmICh+Rm9udFdlaWdodE1hc2spKSB8IHdlaWdodE1hc2spOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBGb250V2VpZ2h0NDAwTWFzazsKK30KKworYm9vbCBD
U1NGb250RmFjZTo6c2V0V2VpZ2h0KENTU1ZhbHVlJiB3ZWlnaHQpCit7CisgICAgaWYgKGF1dG8g
bWFzayA9IGNhbGN1bGF0ZVdlaWdodCh3ZWlnaHQpKSB7CisgICAgICAgIG1fdHJhaXRzTWFzayA9
IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJh
aXRzTWFzaykgJiAofkZvbnRXZWlnaHRNYXNrKSkgfCBtYXNrLnZhbHVlKCkpOworCisgICAgICAg
IGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5mb250
UHJvcGVydHlDaGFuZ2VkKCp0aGlzKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgQ1NTRm9udEZhY2U6OnNldFVuaWNvZGVSYW5n
ZShDU1NWYWx1ZSYgdW5pY29kZVJhbmdlKQpAQCAtMTUwLDYgKzE5OCwxMCBAQCBib29sIENTU0Zv
bnRGYWNlOjpzZXRVbmljb2RlUmFuZ2UoQ1NTVmFsdWUmIHVuaWNvZGVSYW5nZSkKICAgICAgICAg
Q1NTVW5pY29kZVJhbmdlVmFsdWUmIHJhbmdlID0gZG93bmNhc3Q8Q1NTVW5pY29kZVJhbmdlVmFs
dWU+KHJhbmdlVmFsdWUuZ2V0KCkpOwogICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoVW5pY29kZVJh
bmdlKHJhbmdlLmZyb20oKSwgcmFuZ2UudG8oKSkpOwogICAgIH0KKworICAgIGZvciAoYXV0byog
Y2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmZvbnRQcm9wZXJ0eUNoYW5nZWQo
KnRoaXMpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2MCw2ICsyMTIsMTAgQEAgYm9v
bCBDU1NGb250RmFjZTo6c2V0VmFyaWFudExpZ2F0dXJlcyhDU1NWYWx1ZSYgdmFyaWFudExpZ2F0
dXJlcykKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzID0gbGln
YXR1cmVzLmRpc2NyZXRpb25hcnlMaWdhdHVyZXM7CiAgICAgbV92YXJpYW50U2V0dGluZ3MuaGlz
dG9yaWNhbExpZ2F0dXJlcyA9IGxpZ2F0dXJlcy5oaXN0b3JpY2FsTGlnYXR1cmVzOwogICAgIG1f
dmFyaWFudFNldHRpbmdzLmNvbnRleHR1YWxBbHRlcm5hdGVzID0gbGlnYXR1cmVzLmNvbnRleHR1
YWxBbHRlcm5hdGVzOworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAg
ICAgIGNsaWVudC0+Zm9udFByb3BlcnR5Q2hhbmdlZCgqdGhpcyk7CisKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTY4LDYgKzIyNCwxMCBAQCBib29sIENTU0ZvbnRGYWNlOjpzZXRWYXJpYW50
UG9zaXRpb24oQ1NTVmFsdWUmIHZhcmlhbnRQb3NpdGlvbikKICAgICBpZiAoIWlzPENTU1ByaW1p
dGl2ZVZhbHVlPih2YXJpYW50UG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
bV92YXJpYW50U2V0dGluZ3MucG9zaXRpb24gPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFyaWFudFBvc2l0aW9uKTsKKworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQor
ICAgICAgICBjbGllbnQtPmZvbnRQcm9wZXJ0eUNoYW5nZWQoKnRoaXMpOworCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTE3Niw2ICsyMzYsMTAgQEAgYm9vbCBDU1NGb250RmFjZTo6c2V0VmFy
aWFudENhcHMoQ1NTVmFsdWUmIHZhcmlhbnRDYXBzKQogICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhcmlhbnRDYXBzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG1fdmFyaWFu
dFNldHRpbmdzLmNhcHMgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFyaWFudENhcHMp
OworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+
Zm9udFByb3BlcnR5Q2hhbmdlZCgqdGhpcyk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTg3LDYgKzI1MSwxMCBAQCBib29sIENTU0ZvbnRGYWNlOjpzZXRWYXJpYW50TnVtZXJpYyhDU1NW
YWx1ZSYgdmFyaWFudE51bWVyaWMpCiAgICAgbV92YXJpYW50U2V0dGluZ3MubnVtZXJpY0ZyYWN0
aW9uID0gbnVtZXJpYy5mcmFjdGlvbjsKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5udW1lcmljT3Jk
aW5hbCA9IG51bWVyaWMub3JkaW5hbDsKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5udW1lcmljU2xh
c2hlZFplcm8gPSBudW1lcmljLnNsYXNoZWRaZXJvOworCisgICAgZm9yIChhdXRvKiBjbGllbnQg
OiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+Zm9udFByb3BlcnR5Q2hhbmdlZCgqdGhpcyk7
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTk1LDYgKzI2MywxMCBAQCBib29sIENTU0Zv
bnRGYWNlOjpzZXRWYXJpYW50QWx0ZXJuYXRlcyhDU1NWYWx1ZSYgdmFyaWFudEFsdGVybmF0ZXMp
CiAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFyaWFudEFsdGVybmF0ZXMpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV92YXJpYW50U2V0dGluZ3MuYWx0ZXJuYXRlcyA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YXJpYW50QWx0ZXJuYXRlcyk7CisKKyAgICBmb3Ig
KGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5mb250UHJvcGVydHlD
aGFuZ2VkKCp0aGlzKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMDQsNiArMjc2LDEw
IEBAIGJvb2wgQ1NTRm9udEZhY2U6OnNldFZhcmlhbnRFYXN0QXNpYW4oQ1NTVmFsdWUmIHZhcmlh
bnRFYXN0QXNpYW4pCiAgICAgbV92YXJpYW50U2V0dGluZ3MuZWFzdEFzaWFuVmFyaWFudCA9IGVh
c3RBc2lhbi52YXJpYW50OwogICAgIG1fdmFyaWFudFNldHRpbmdzLmVhc3RBc2lhbldpZHRoID0g
ZWFzdEFzaWFuLndpZHRoOwogICAgIG1fdmFyaWFudFNldHRpbmdzLmVhc3RBc2lhblJ1YnkgPSBl
YXN0QXNpYW4ucnVieTsKKworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAg
ICAgICBjbGllbnQtPmZvbnRQcm9wZXJ0eUNoYW5nZWQoKnRoaXMpOworCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTIxOCw2ICsyOTQsMTAgQEAgYm9vbCBDU1NGb250RmFjZTo6c2V0RmVhdHVy
ZVNldHRpbmdzKENTU1ZhbHVlJiBmZWF0dXJlU2V0dGluZ3MpCiAgICAgICAgIENTU0ZvbnRGZWF0
dXJlVmFsdWUmIGZlYXR1cmUgPSBkb3duY2FzdDxDU1NGb250RmVhdHVyZVZhbHVlPihyYW5nZVZh
bHVlLmdldCgpKTsKICAgICAgICAgbV9mZWF0dXJlU2V0dGluZ3MuaW5zZXJ0KEZvbnRGZWF0dXJl
KGZlYXR1cmUudGFnKCksIGZlYXR1cmUudmFsdWUoKSkpOwogICAgIH0KKworICAgIGZvciAoYXV0
byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmZvbnRQcm9wZXJ0eUNoYW5n
ZWQoKnRoaXMpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIzNyw5ICszMTcsMzkgQEAg
dm9pZCBDU1NGb250RmFjZTo6YWRkQ2xpZW50KENsaWVudCYgY2xpZW50KQogCiB2b2lkIENTU0Zv
bnRGYWNlOjpyZW1vdmVDbGllbnQoQ2xpZW50JiBjbGllbnQpCiB7CisgICAgQVNTRVJUKG1fY2xp
ZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsK
IH0KIAorUmVmPEZvbnRGYWNlPiBDU1NGb250RmFjZTo6d3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSYg
ZXhlY1N0YXRlKQoreworICAgIGlmIChtX3dyYXBwZXIpCisgICAgICAgIHJldHVybiBSZWY8Rm9u
dEZhY2U+KCptX3dyYXBwZXIuZ2V0KCkpOworCisgICAgUmVmPEZvbnRGYWNlPiB3cmFwcGVyID0g
Rm9udEZhY2U6OmNyZWF0ZShleGVjU3RhdGUsICp0aGlzKTsKKyAgICBzd2l0Y2ggKG1fc3RhdHVz
KSB7CisgICAgY2FzZSBTdGF0dXM6OlBlbmRpbmc6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U3RhdHVzOjpMb2FkaW5nOgorICAgICAgICB3cmFwcGVyLT5mb250U3RhdGVDaGFuZ2VkKCp0aGlz
LCBTdGF0dXM6OlBlbmRpbmcsIFN0YXR1czo6TG9hZGluZyk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU3RhdHVzOjpUaW1lZE91dDoKKyAgICAgICAgd3JhcHBlci0+Zm9udFN0YXRlQ2hhbmdl
ZCgqdGhpcywgU3RhdHVzOjpQZW5kaW5nLCBTdGF0dXM6OkxvYWRpbmcpOworICAgICAgICB3cmFw
cGVyLT5mb250U3RhdGVDaGFuZ2VkKCp0aGlzLCBTdGF0dXM6OkxvYWRpbmcsIFN0YXR1czo6VGlt
ZWRPdXQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YXR1czo6U3VjY2VzczoKKyAgICAg
ICAgd3JhcHBlci0+Zm9udFN0YXRlQ2hhbmdlZCgqdGhpcywgU3RhdHVzOjpQZW5kaW5nLCBTdGF0
dXM6OkxvYWRpbmcpOworICAgICAgICB3cmFwcGVyLT5mb250U3RhdGVDaGFuZ2VkKCp0aGlzLCBT
dGF0dXM6OlBlbmRpbmcsIFN0YXR1czo6U3VjY2Vzcyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgU3RhdHVzOjpGYWlsdXJlOgorICAgICAgICB3cmFwcGVyLT5mb250U3RhdGVDaGFuZ2VkKCp0
aGlzLCBTdGF0dXM6OlBlbmRpbmcsIFN0YXR1czo6TG9hZGluZyk7CisgICAgICAgIHdyYXBwZXIt
PmZvbnRTdGF0ZUNoYW5nZWQoKnRoaXMsIFN0YXR1czo6UGVuZGluZywgU3RhdHVzOjpGYWlsdXJl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fd3JhcHBlciA9IHdyYXBwZXItPmNyZWF0
ZVdlYWtQdHIoKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogdm9pZCBDU1NGb250RmFjZTo6
YWRvcHRTb3VyY2Uoc3RkOjp1bmlxdWVfcHRyPENTU0ZvbnRGYWNlU291cmNlPiYmIHNvdXJjZSkK
IHsKICAgICBtX3NvdXJjZXMuYXBwZW5kKFdURk1vdmUoc291cmNlKSk7CkBAIC0yNjksNyArMzc5
LDcgQEAgdm9pZCBDU1NGb250RmFjZTo6c2V0U3RhdHVzKFN0YXR1cyBuZXdTdGF0dXMpCiAgICAg
fQogCiAgICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+
c3RhdGVDaGFuZ2VkKCp0aGlzLCBtX3N0YXR1cywgbmV3U3RhdHVzKTsKKyAgICAgICAgY2xpZW50
LT5mb250U3RhdGVDaGFuZ2VkKCp0aGlzLCBtX3N0YXR1cywgbmV3U3RhdHVzKTsKIAogICAgIG1f
c3RhdHVzID0gbmV3U3RhdHVzOwogfQpAQCAtMjgyLDYgKzM5Miw3IEBAIHZvaWQgQ1NTRm9udEZh
Y2U6OmZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UmKQogICAgIGlmIChtX3NvdXJjZXNQb3B1
bGF0ZWQpCiAgICAgICAgIHB1bXAoKTsKIAorICAgIEFTU0VSVChtX2ZvbnRTZWxlY3Rvcik7CiAg
ICAgbV9mb250U2VsZWN0b3ItPmZvbnRMb2FkZWQoKTsKIAogICAgIGZvciAoYXV0byYgY2xpZW50
IDogbV9jbGllbnRzKQpAQCAtMjk2LDkgKzQwNywxMCBAQCBzaXplX3QgQ1NTRm9udEZhY2U6OnB1
bXAoKQogCiAgICAgICAgIGlmIChzb3VyY2UtPnN0YXR1cygpID09IENTU0ZvbnRGYWNlU291cmNl
OjpTdGF0dXM6OlBlbmRpbmcpIHsKICAgICAgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTdGF0
dXM6OlBlbmRpbmcgfHwgbV9zdGF0dXMgPT0gU3RhdHVzOjpMb2FkaW5nIHx8IG1fc3RhdHVzID09
IFN0YXR1czo6VGltZWRPdXQpOworICAgICAgICAgICAgQVNTRVJUKG1fZm9udFNlbGVjdG9yKTsK
ICAgICAgICAgICAgIGlmIChtX3N0YXR1cyA9PSBTdGF0dXM6OlBlbmRpbmcpCiAgICAgICAgICAg
ICAgICAgc2V0U3RhdHVzKFN0YXR1czo6TG9hZGluZyk7Ci0gICAgICAgICAgICBzb3VyY2UtPmxv
YWQobV9mb250U2VsZWN0b3IuZ2V0KCkpOworICAgICAgICAgICAgc291cmNlLT5sb2FkKCptX2Zv
bnRTZWxlY3Rvcik7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKHNvdXJjZS0+c3RhdHVz
KCkpIHsKQEAgLTM0NSw4ICs0NTcsMTAgQEAgUmVmUHRyPEZvbnQ+IENTU0ZvbnRGYWNlOjpmb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29sIHN5bnQKICAgICBz
aXplX3Qgc3RhcnRJbmRleCA9IHB1bXAoKTsKICAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRl
eDsgaSA8IG1fc291cmNlcy5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvJiBzb3VyY2UgPSBt
X3NvdXJjZXNbaV07Ci0gICAgICAgIGlmIChzb3VyY2UtPnN0YXR1cygpID09IENTU0ZvbnRGYWNl
U291cmNlOjpTdGF0dXM6OlBlbmRpbmcpCi0gICAgICAgICAgICBzb3VyY2UtPmxvYWQobV9mb250
U2VsZWN0b3IuZ2V0KCkpOworICAgICAgICBpZiAoc291cmNlLT5zdGF0dXMoKSA9PSBDU1NGb250
RmFjZVNvdXJjZTo6U3RhdHVzOjpQZW5kaW5nKSB7CisgICAgICAgICAgICBBU1NFUlQobV9mb250
U2VsZWN0b3IpOworICAgICAgICAgICAgc291cmNlLT5sb2FkKCptX2ZvbnRTZWxlY3Rvcik7Cisg
ICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKHNvdXJjZS0+c3RhdHVzKCkpIHsKICAgICAgICAg
Y2FzZSBDU1NGb250RmFjZVNvdXJjZTo6U3RhdHVzOjpQZW5kaW5nOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2UuaAppbmRleCAxMDdkOWYyODIzODZiNmU2YzYxYWRiMWJiM2RmOTkwZTIwZGVmYzRmLi5m
YjQ3ZjM1YTlmZTBhYmE4ZDc3NzA5ZDZkYTIxY2YyZjQ5Njc5MGRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2UuaApAQCAtMjcsNyArMjcsNiBAQAogI2RlZmluZSBDU1NGb250RmFjZV9oCiAKICNp
bmNsdWRlICJDU1NGb250RmFjZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NGb250RmFjZVNvdXJjZS5o
IgogI2luY2x1ZGUgIkZvbnRGZWF0dXJlU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3Mu
aCIKICNpbmNsdWRlIDxtZW1vcnk+CkBAIC0zNiwyMiArMzUsMjkgQEAKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
Y2xhc3MgRXhlY1N0YXRlOworfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENTU0Zv
bnRGYWNlU291cmNlOworY2xhc3MgQ1NTRm9udFNlbGVjdG9yOwogY2xhc3MgQ1NTU2VnbWVudGVk
Rm9udEZhY2U7CiBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIENTU1ZhbHVlTGlzdDsKK2NsYXNzIERv
Y3VtZW50OwogY2xhc3MgRm9udERlc2NyaXB0aW9uOwogY2xhc3MgRm9udDsKIGNsYXNzIEZvbnRG
YWNlOwogCi0vLyBGSVhNRTogVGhpcyBjbGFzcyBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlZmVyZW5j
ZSBjb3VudGVkLgogY2xhc3MgQ1NTRm9udEZhY2UgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxD
U1NGb250RmFjZT4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTRm9udEZhY2U+IGNyZWF0
ZShDU1NGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvciwgRm9udEZhY2UqIHdyYXBwZXIgPSBudWxs
cHRyLCBib29sIGlzTG9jYWxGYWxsYmFjayA9IGZhbHNlKQorICAgIHN0YXRpYyBSZWY8Q1NTRm9u
dEZhY2U+IGNyZWF0ZShDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciwgU3R5bGVSdWxlRm9u
dEZhY2UqIGNzc0Nvbm5lY3Rpb24gPSBudWxscHRyLCBGb250RmFjZSogd3JhcHBlciA9IG51bGxw
dHIsIGJvb2wgaXNMb2NhbEZhbGxiYWNrID0gZmFsc2UpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDU1NGb250RmFjZShmb250U2VsZWN0b3IsIHdyYXBwZXIsIGlzTG9jYWxG
YWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGb250RmFjZShmb250
U2VsZWN0b3IsIGNzc0Nvbm5lY3Rpb24sIHdyYXBwZXIsIGlzTG9jYWxGYWxsYmFjaykpOwogICAg
IH0KICAgICB2aXJ0dWFsIH5DU1NGb250RmFjZSgpOwogCkBAIC03OCw2ICs4NCwxMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRUcmFpdHNNYXNrKEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2spIHsg
bV90cmFpdHNNYXNrID0gdHJhaXRzTWFzazsgfQogICAgIGJvb2wgaXNMb2NhbEZhbGxiYWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0xvY2FsRmFsbGJhY2s7IH0KICAgICBTdGF0dXMgc3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICBTdHlsZVJ1bGVGb250RmFjZSogY3NzQ29u
bmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY3NzQ29ubmVjdGlvbi5nZXQoKTsgfQorCisgICAg
c3RhdGljIE9wdGlvbmFsPEZvbnRUcmFpdHNNYXNrPiBjYWxjdWxhdGVTdHlsZShDU1NWYWx1ZSYg
c3R5bGUpOworICAgIHN0YXRpYyBPcHRpb25hbDxGb250VHJhaXRzTWFzaz4gY2FsY3VsYXRlV2Vp
Z2h0KENTU1ZhbHVlJiB3ZWlnaHQpOwogCiAgICAgY2xhc3MgQ2xpZW50OwogICAgIHZvaWQgYWRk
Q2xpZW50KENsaWVudCYpOwpAQCAtOTMsMTEgKzEwMywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBs
b2FkKCk7CiAgICAgUmVmUHRyPEZvbnQ+IGZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CiAKKyAgICBzdGF0aWMgdm9p
ZCBhcHBlbmRTb3VyY2VzKENTU0ZvbnRGYWNlJiwgQ1NTVmFsdWVMaXN0JiwgRG9jdW1lbnQqLCBi
b29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOworCiAgICAgY2xh
c3MgQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZm9udExvYWRlZChDU1NGb250RmFjZSYpIHsgfTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYsIFN0YXR1cyBvbGRTdGF0
ZSwgU3RhdHVzIG5ld1N0YXRlKSB7IFVOVVNFRF9QQVJBTShvbGRTdGF0ZSk7IFVOVVNFRF9QQVJB
TShuZXdTdGF0ZSk7IH07CisgICAgICAgIHZpcnR1YWwgdm9pZCBmb250U3RhdGVDaGFuZ2VkKENT
U0ZvbnRGYWNlJiwgU3RhdHVzIG9sZFN0YXRlLCBTdGF0dXMgbmV3U3RhdGUpIHsgVU5VU0VEX1BB
UkFNKG9sZFN0YXRlKTsgVU5VU0VEX1BBUkFNKG5ld1N0YXRlKTsgfTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGZvbnRQcm9wZXJ0eUNoYW5nZWQoQ1NTRm9udEZhY2UmLCBDU1NWYWx1ZUxpc3QqIG9s
ZEZhbWlsaWVzID0gbnVsbHB0cikgeyBVTlVTRURfUEFSQU0ob2xkRmFtaWxpZXMpOyB9OwogICAg
IH07CiAKICAgICAvLyBQZW5kaW5nID0+IExvYWRpbmcgID0+IFRpbWVkT3V0CkBAIC0xMzIsMTQg
KzE0NSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIFVDaGFyMzIgbV90bzsKICAgICB9OwogCi0gICAg
Rm9udEZhY2UqIHdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXI7IH0KKyAgICAvLyBX
ZSBkb24ndCBndWFyYW50ZWUgdGhhdCB0aGUgRm9udEZhY2Ugd3JhcHBlciB3aWxsIGJlIHRoZSBz
YW1lIGV2ZXJ5IHRpbWUgeW91IGFzayBmb3IgaXQuCisgICAgUmVmPEZvbnRGYWNlPiB3cmFwcGVy
KEpTQzo6RXhlY1N0YXRlJik7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIGJvb2wgaGFz
U1ZHRm9udEZhY2VTb3VyY2UoKSBjb25zdDsKICNlbmRpZgogCiBwcml2YXRlOgotICAgIENTU0Zv
bnRGYWNlKENTU0ZvbnRTZWxlY3RvciYsIEZvbnRGYWNlKiwgYm9vbCBpc0xvY2FsRmFsbGJhY2sp
OworICAgIENTU0ZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciosIFN0eWxlUnVsZUZvbnRGYWNlKiwg
Rm9udEZhY2UqLCBib29sIGlzTG9jYWxGYWxsYmFjayk7CiAKICAgICBzaXplX3QgcHVtcCgpOwog
ICAgIHZvaWQgc2V0U3RhdHVzKFN0YXR1cyk7CkBAIC0xNDcsMTIgKzE2MSwxMyBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG1fZmFtaWxpZXM7CiAgICAgRm9udFRyYWl0c01h
c2sgbV90cmFpdHNNYXNrIHsgc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KEZvbnRTdHlsZU5v
cm1hbE1hc2sgfCBGb250V2VpZ2h0NDAwTWFzaykgfTsKICAgICBWZWN0b3I8VW5pY29kZVJhbmdl
PiBtX3JhbmdlczsKLSAgICBIYXNoU2V0PENsaWVudCo+IG1fY2xpZW50czsKLSAgICBSZWY8Q1NT
Rm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKLSAgICBGb250RmFjZSogbV93cmFwcGVyOwog
ICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mZWF0dXJlU2V0dGluZ3M7CiAgICAgRm9udFZhcmlh
bnRTZXR0aW5ncyBtX3ZhcmlhbnRTZXR0aW5nczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PENTU0ZvbnRGYWNlU291cmNlPj4gbV9zb3VyY2VzOworICAgIFJlZlB0cjxDU1NGb250U2VsZWN0
b3I+IG1fZm9udFNlbGVjdG9yOworICAgIFJlZlB0cjxTdHlsZVJ1bGVGb250RmFjZT4gbV9jc3ND
b25uZWN0aW9uOworICAgIEhhc2hTZXQ8Q2xpZW50Kj4gbV9jbGllbnRzOworICAgIFdlYWtQdHI8
Rm9udEZhY2U+IG1fd3JhcHBlcjsKICAgICBTdGF0dXMgbV9zdGF0dXMgeyBTdGF0dXM6OlBlbmRp
bmcgfTsKICAgICBib29sIG1faXNMb2NhbEZhbGxiYWNrIHsgZmFsc2UgfTsKICAgICBib29sIG1f
c291cmNlc1BvcHVsYXRlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0
LmNwcAppbmRleCBhMGY1ZmQ2NTMwNGQyOTY1ZDY3M2YyMjM0OWUzZTYyNTY5OTdiYTgzLi5iMjY1
ZDYzZjAwYWI0MWE5YTRhYmJmOWEwMWM4ZGMxMDMxZGZlN2YxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZVNldC5jcHAKQEAgLTI2LDE3ICsyNiwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU2V0LmgiCiAKKyNpbmNsdWRlICJDU1NGb250RmFjZVNv
dXJjZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYW1pbHkuaCIKICNpbmNsdWRlICJDU1NGb250U2Vs
ZWN0b3IuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVW
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU1NlZ21lbnRlZEZvbnRGYWNlLmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVMaXN0LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCisjaW5jbHVkZSAiRm9udENh
Y2hlLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotQ1NTRm9udEZhY2VTZXQ6OkNTU0ZvbnRGYWNlU2V0KENTU0ZvbnRGYWNlU2V0Q2xpZW50
JiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCitDU1NGb250RmFjZVNldDo6Q1NTRm9u
dEZhY2VTZXQoKQogewogfQogCkBAIC00NCw2ICs0NywyMiBAQCBDU1NGb250RmFjZVNldDo6fkNT
U0ZvbnRGYWNlU2V0KCkKIHsKICAgICBmb3IgKGF1dG8mIGZhY2UgOiBtX2ZhY2VzKQogICAgICAg
ICBmYWNlLT5yZW1vdmVDbGllbnQoKnRoaXMpOworCisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9s
b2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZSkgeworICAgICAgICBmb3IgKGF1dG8mIGZh
Y2UgOiBwYWlyLnZhbHVlKQorICAgICAgICAgICAgZmFjZS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsK
KyAgICB9Cit9CisKK3ZvaWQgQ1NTRm9udEZhY2VTZXQ6OmFkZENsaWVudChDU1NGb250RmFjZVNl
dENsaWVudCYgY2xpZW50KQoreworICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Cit9CisKK3Zv
aWQgQ1NTRm9udEZhY2VTZXQ6OnJlbW92ZUNsaWVudChDU1NGb250RmFjZVNldENsaWVudCYgY2xp
ZW50KQoreworICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAgIG1f
Y2xpZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKIHZvaWQgQ1NTRm9udEZhY2VTZXQ6OmluY3Jl
bWVudEFjdGl2ZUNvdW50KCkKQEAgLTUxLDcgKzcwLDggQEAgdm9pZCBDU1NGb250RmFjZVNldDo6
aW5jcmVtZW50QWN0aXZlQ291bnQoKQogICAgICsrbV9hY3RpdmVDb3VudDsKICAgICBpZiAobV9h
Y3RpdmVDb3VudCA9PSAxKSB7CiAgICAgICAgIG1fc3RhdHVzID0gU3RhdHVzOjpMb2FkaW5nOwot
ICAgICAgICBtX2NsaWVudC5zdGFydGVkTG9hZGluZygpOworICAgICAgICBmb3IgKGF1dG8qIGNs
aWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+c3RhcnRlZExvYWRpbmcoKTsK
ICAgICB9CiB9CiAKQEAgLTYwLDcgKzgwLDggQEAgdm9pZCBDU1NGb250RmFjZVNldDo6ZGVjcmVt
ZW50QWN0aXZlQ291bnQoKQogICAgIC0tbV9hY3RpdmVDb3VudDsKICAgICBpZiAoIW1fYWN0aXZl
Q291bnQpIHsKICAgICAgICAgbV9zdGF0dXMgPSBTdGF0dXM6OkxvYWRlZDsKLSAgICAgICAgbV9j
bGllbnQuY29tcGxldGVkTG9hZGluZygpOworICAgICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1f
Y2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+Y29tcGxldGVkTG9hZGluZygpOwogICAgIH0K
IH0KIApAQCAtNzAsMjMgKzkxLDE0MCBAQCBib29sIENTU0ZvbnRGYWNlU2V0OjpoYXNGYWNlKGNv
bnN0IENTU0ZvbnRGYWNlJiBmYWNlKSBjb25zdAogICAgICAgICBpZiAobXlGYWNlLnB0cigpID09
ICZmYWNlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCit2b2lkIENTU0ZvbnRGYWNlU2V0OjpyZWdpc3RlckxvY2FsRm9udEZhY2VzRm9y
RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fbG9jYWxs
eUluc3RhbGxlZEZhY2VzTG9va3VwVGFibGUuY29udGFpbnMoZmFtaWx5TmFtZSkpOworCisgICAg
VmVjdG9yPEZvbnRUcmFpdHNNYXNrPiB0cmFpdHNNYXNrcyA9IEZvbnRDYWNoZTo6c2luZ2xldG9u
KCkuZ2V0VHJhaXRzSW5GYW1pbHkoZmFtaWx5TmFtZSk7CisgICAgaWYgKHRyYWl0c01hc2tzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+
IGZhY2VzID0geyB9OworICAgIGZvciAoYXV0byBtYXNrIDogdHJhaXRzTWFza3MpIHsKKyAgICAg
ICAgUmVmPENTU0ZvbnRGYWNlPiBmYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZShudWxscHRyLCBu
dWxscHRyLCBudWxscHRyLCB0cnVlKTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IGZhbWlseUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7
CisgICAgICAgIGZhbWlseUxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKSk7CisgICAgICAgIGZhY2UtPnNldEZhbWls
aWVzKCpmYW1pbHlMaXN0KTsKKyAgICAgICAgZmFjZS0+c2V0VHJhaXRzTWFzayhtYXNrKTsKKyAg
ICAgICAgZmFjZS0+YWRvcHRTb3VyY2Uoc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJj
ZT4oZmFjZS5nZXQoKSwgZmFtaWx5TmFtZSkpOworICAgICAgICBBU1NFUlQoIWZhY2UtPmFsbFNv
dXJjZXNGYWlsZWQoKSk7CisgICAgICAgIGZhY2VzLmFwcGVuZChXVEZNb3ZlKGZhY2UpKTsKKyAg
ICB9CisgICAgbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZS5hZGQoZmFtaWx5TmFt
ZSwgV1RGTW92ZShmYWNlcykpOworfQorCitTdHJpbmcgQ1NTRm9udEZhY2VTZXQ6OmZhbWlseU5h
bWVGcm9tUHJpbWl0aXZlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUuaXNGb250RmFtaWx5KCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5mb250RmFtaWx5
KCkuZmFtaWx5TmFtZTsKKyAgICBpZiAoIXZhbHVlLmlzVmFsdWVJRCgpKQorICAgICAgICByZXR1
cm4geyB9OworCisgICAgLy8gV2UgbmVlZCB0byB1c2UgdGhlIHJhdyB0ZXh0IGZvciBhbGwgdGhl
IGdlbmVyaWMgZmFtaWx5IHR5cGVzLCBzaW5jZSBAZm9udC1mYWNlIGlzIGEgd2F5IG9mIGFjdHVh
bGx5CisgICAgLy8gZGVmaW5pbmcgd2hhdCBmb250IHRvIHVzZSBmb3IgdGhvc2UgdHlwZXMuCisg
ICAgc3dpdGNoICh2YWx1ZS5nZXRWYWx1ZUlEKCkpIHsKKyAgICBjYXNlIENTU1ZhbHVlU2VyaWY6
CisgICAgICAgIHJldHVybiBzZXJpZkZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlU2Fuc1Nlcmlm
OgorICAgICAgICByZXR1cm4gc2Fuc1NlcmlmRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVDdXJz
aXZlOgorICAgICAgICByZXR1cm4gY3Vyc2l2ZUZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlRmFu
dGFzeToKKyAgICAgICAgcmV0dXJuIGZhbnRhc3lGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZU1v
bm9zcGFjZToKKyAgICAgICAgcmV0dXJuIG1vbm9zcGFjZUZhbWlseTsKKyAgICBjYXNlIENTU1Zh
bHVlV2Via2l0UGljdG9ncmFwaDoKKyAgICAgICAgcmV0dXJuIHBpY3RvZ3JhcGhGYW1pbHk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTRm9u
dEZhY2VTZXQ6OmFkZFRvRmFjZXNMb29rdXBUYWJsZShDU1NGb250RmFjZSYgZmFjZSkKK3sKKyAg
ICBpZiAoZmFjZS5mYW1pbGllcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgaXRlbSA6ICpmYWNl
LmZhbWlsaWVzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBmYW1pbHlOYW1lID0gQ1NTRm9udEZh
Y2VTZXQ6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PihpdGVtLmdldCgpKSk7CisgICAgICAgICAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9mYWNlc0xvb2t1cFRhYmxlLmFkZChmYW1pbHlOYW1lLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNl
Pj4oKSk7CisgICAgICAgICAgICBhdXRvJiBmYW1pbHlGb250RmFjZXMgPSBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOworICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Cisg
ICAgICAgICAgICAgICAgLy8gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzIGdyb3dzIHdpdGhv
dXQgYm91bmQsIGV2ZW50dWFsbHkgZW5jb3Jwb3JhdGluZyBldmVyeSBmb250IGluc3RhbGxlZCBv
biB0aGUgc3lzdGVtLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYnkgZGVzaWduLgorICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoZmFtaWx5TmFtZSk7
CisgICAgICAgICAgICAgICAgZmFtaWx5Rm9udEZhY2VzID0geyB9OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmYW1pbHlGb250RmFjZXMuYXBwZW5kKGZhY2UpOworICAgICAgICB9Cisg
ICAgfQorfQorCiB2b2lkIENTU0ZvbnRGYWNlU2V0OjphZGQoQ1NTRm9udEZhY2UmIGZhY2UpCiB7
CiAgICAgQVNTRVJUKCFoYXNGYWNlKGZhY2UpKTsKIAotICAgIG1fZmFjZXMuYXBwZW5kKGZhY2Up
OworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmZv
bnRNb2RpZmllZCgpOworCiAgICAgZmFjZS5hZGRDbGllbnQoKnRoaXMpOworICAgIG1fY2FjaGUu
Y2xlYXIoKTsKKworICAgIGlmIChmYWNlLmNzc0Nvbm5lY3Rpb24oKSkKKyAgICAgICAgbV9mYWNl
cy5pbnNlcnQobV9mYWNlc1BhcnRpdGlvbkluZGV4KyssIGZhY2UpOworICAgIGVsc2UKKyAgICAg
ICAgbV9mYWNlcy5hcHBlbmQoZmFjZSk7CisKKyAgICBhZGRUb0ZhY2VzTG9va3VwVGFibGUoZmFj
ZSk7CisKICAgICBpZiAoZmFjZS5zdGF0dXMoKSA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpMb2Fk
aW5nIHx8IGZhY2Uuc3RhdHVzKCkgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6VGltZWRPdXQpCiAg
ICAgICAgIGluY3JlbWVudEFjdGl2ZUNvdW50KCk7CiB9CiAKK3ZvaWQgQ1NTRm9udEZhY2VTZXQ6
OnJlbW92ZUZyb21GYWNlc0xvb2t1cFRhYmxlKGNvbnN0IENTU0ZvbnRGYWNlJiBmYWNlLCBjb25z
dCBDU1NWYWx1ZUxpc3QmIGZhbWlsaWVzVG9TZWFyY2hGb3IpCit7CisgICAgZm9yIChhdXRvJiBp
dGVtIDogZmFtaWxpZXNUb1NlYXJjaEZvcikgeworICAgICAgICBTdHJpbmcgZmFtaWx5TmFtZSA9
IENTU0ZvbnRGYWNlU2V0OjpmYW1pbHlOYW1lRnJvbVByaW1pdGl2ZShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkpOworICAgICAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9m
YWNlc0xvb2t1cFRhYmxlLmZpbmQoZmFtaWx5TmFtZSk7CisgICAgICAgIEFTU0VSVChpdGVyYXRv
ciAhPSBtX2ZhY2VzTG9va3VwVGFibGUuZW5kKCkpOworICAgICAgICBib29sIGZvdW5kID0gZmFs
c2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlcmF0b3ItPnZhbHVlLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3ItPnZhbHVlW2ldLnB0cigpID09ICZm
YWNlKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGl0
ZXJhdG9yLT52YWx1ZS5yZW1vdmUoaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGZvdW5kKTsKKyAgICAgICAgaWYgKCFp
dGVyYXRvci0+dmFsdWUuc2l6ZSgpKQorICAgICAgICAgICAgbV9mYWNlc0xvb2t1cFRhYmxlLnJl
bW92ZShpdGVyYXRvcik7CisgICAgfQorfQorCiB2b2lkIENTU0ZvbnRGYWNlU2V0OjpyZW1vdmUo
Y29uc3QgQ1NTRm9udEZhY2UmIGZhY2UpCiB7CisgICAgbV9jYWNoZS5jbGVhcigpOworCisgICAg
Zm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+Zm9udE1vZGlm
aWVkKCk7CisKKyAgICBpZiAoZmFjZS5mYW1pbGllcygpKQorICAgICAgICByZW1vdmVGcm9tRmFj
ZXNMb29rdXBUYWJsZShmYWNlLCAqZmFjZS5mYW1pbGllcygpKTsKKwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9mYWNlcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9mYWNlc1tp
XS5wdHIoKSA9PSAmZmFjZSkgeworICAgICAgICAgICAgaWYgKGkgPCBtX2ZhY2VzUGFydGl0aW9u
SW5kZXgpCisgICAgICAgICAgICAgICAgLS1tX2ZhY2VzUGFydGl0aW9uSW5kZXg7CiAgICAgICAg
ICAgICBtX2ZhY2VzW2ldLT5yZW1vdmVDbGllbnQoKnRoaXMpOwogICAgICAgICAgICAgbV9mYWNl
cy5yZW1vdmUoaSk7CiAgICAgICAgICAgICBpZiAoZmFjZS5zdGF0dXMoKSA9PSBDU1NGb250RmFj
ZTo6U3RhdHVzOjpMb2FkaW5nIHx8IGZhY2Uuc3RhdHVzKCkgPT0gQ1NTRm9udEZhY2U6OlN0YXR1
czo6VGltZWRPdXQpCkBAIC05NywzMCArMjM1LDQzIEBAIHZvaWQgQ1NTRm9udEZhY2VTZXQ6OnJl
bW92ZShjb25zdCBDU1NGb250RmFjZSYgZmFjZSkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBleHRyYWN0RmFtaWxpZXMoY29uc3QgQ1NTVmFs
dWVMaXN0JiBsaXN0KQordm9pZCBDU1NGb250RmFjZVNldDo6Y2xlYXIoKQogewotICAgIEhhc2hT
ZXQ8U3RyaW5nPiByZXN1bHQ7Ci0gICAgZm9yIChhdXRvJiBmYW1pbHkgOiBsaXN0KSB7Ci0gICAg
ICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oZmFtaWx5LmdldCgpKTsKLSAgICAgICAgaWYgKCFwcmltaXRpdmUuaXNGb250
RmFtaWx5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVzdWx0LmFkZChwcmlt
aXRpdmUuZm9udEZhbWlseSgpLmZhbWlseU5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0
OworICAgIG1fZmFjZXMuY2xlYXIoKTsKKyAgICBtX2ZhY2VzTG9va3VwVGFibGUuY2xlYXIoKTsK
KyAgICBtX2xvY2FsbHlJbnN0YWxsZWRGYWNlc0xvb2t1cFRhYmxlLmNsZWFyKCk7CisgICAgbV9j
YWNoZS5jbGVhcigpOwogfQogCi1zdGF0aWMgYm9vbCBmYW1pbGllc0ludGVyc2VjdChjb25zdCBD
U1NGb250RmFjZSYgZmFjZSwgY29uc3QgQ1NTVmFsdWVMaXN0JiByZXF1ZXN0KQorQ1NTRm9udEZh
Y2UmIENTU0ZvbnRGYWNlU2V0OjpvcGVyYXRvcltdKHNpemVfdCBpKQogewotICAgIGlmICghZmFj
ZS5mYW1pbGllcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGkgPCBmYWNl
Q291bnQoKSk7CisgICAgcmV0dXJuIG1fZmFjZXNbaV07Cit9CiAKLSAgICBIYXNoU2V0PFN0cmlu
Zz4gZmFjZUZhbWlsaWVzID0gZXh0cmFjdEZhbWlsaWVzKCpmYWNlLmZhbWlsaWVzKCkpOwotICAg
IEhhc2hTZXQ8U3RyaW5nPiByZXF1ZXN0RmFtaWxpZXMgPSBleHRyYWN0RmFtaWxpZXMocmVxdWVz
dCk7Ci0gICAgZm9yIChhdXRvJiBmYW1pbHkxIDogZmFjZUZhbWlsaWVzKSB7Ci0gICAgICAgIGlm
IChyZXF1ZXN0RmFtaWxpZXMuY29udGFpbnMoZmFtaWx5MSkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworc3RhdGljIE9wdGlvbmFsPEZvbnRUcmFp
dHNNYXNrPiBjb21wdXRlRm9udFRyYWl0c01hc2soTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5
bGUpCit7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBzdHlsZVZhbHVlID0gc3R5bGUuZ2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCk7CisgICAgaWYgKCFzdHlsZVZh
bHVlKQorICAgICAgICBzdHlsZVZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLnB0cigpOworCisgICAgRm9udFRyYWl0
c01hc2sgc3R5bGVNYXNrOworICAgIGlmIChhdXRvIHN0eWxlTWFza09wdGlvbmFsID0gQ1NTRm9u
dEZhY2U6OmNhbGN1bGF0ZVN0eWxlKCpzdHlsZVZhbHVlKSkKKyAgICAgICAgc3R5bGVNYXNrID0g
c3R5bGVNYXNrT3B0aW9uYWwudmFsdWUoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBOdWxs
b3B0OworCisgICAgUmVmUHRyPENTU1ZhbHVlPiB3ZWlnaHRWYWx1ZSA9IHN0eWxlLmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKTsKKyAgICBpZiAoIXdlaWdo
dFZhbHVlKQorICAgICAgICB3ZWlnaHRWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKS5wdHIoKTsKKworICAgIEZvbnRU
cmFpdHNNYXNrIHdlaWdodE1hc2s7CisgICAgaWYgKGF1dG8gd2VpZ2h0TWFza09wdGlvbmFsID0g
Q1NTRm9udEZhY2U6OmNhbGN1bGF0ZVdlaWdodCgqd2VpZ2h0VmFsdWUpKQorICAgICAgICB3ZWln
aHRNYXNrID0gd2VpZ2h0TWFza09wdGlvbmFsLnZhbHVlKCk7CisgICAgZWxzZQorICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxGb250VHJhaXRzTWFzaz4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0eWxlTWFzaykgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
d2VpZ2h0TWFzaykpOwogfQogCiBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250
RmFjZT4+IENTU0ZvbnRGYWNlU2V0OjptYXRjaGluZ0ZhY2VzKGNvbnN0IFN0cmluZyYgZm9udCwg
Y29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMzIsMTQgKzI4MywxNSBAQCBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4+IENTU0ZvbnRGYWNlU2V0
OjptYXRjaGluZ0ZhY2VzKGNvbnN0CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgYm9vbCBkZXNpcmVkU3R5bGVJc05vcm1hbCA9IHRy
dWU7Ci0gICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gZGVzaXJlZFN0eWxlID0gc3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpKSB7Ci0gICAgICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCpkZXNpcmVkU3R5bGUpKSB7Ci0gICAgICAgICAgICBlYyA9IFNZ
TlRBWF9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAg
IGRlc2lyZWRTdHlsZUlzTm9ybWFsID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpkZXNp
cmVkU3R5bGUpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbDsKKworICAgIEZvbnRUcmFp
dHNNYXNrIGZvbnRUcmFpdHNNYXNrOworICAgIGlmIChhdXRvIG1hc2tPcHRpb25hbCA9IGNvbXB1
dGVGb250VHJhaXRzTWFzayhzdHlsZS5nZXQoKSkpCisgICAgICAgIGZvbnRUcmFpdHNNYXNrID0g
bWFza09wdGlvbmFsLnZhbHVlKCk7CisgICAgZWxzZSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VS
UjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisKICAgICBSZWZQdHI8Q1NTVmFsdWU+
IGZhbWlseSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWls
eSk7CiAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KGZhbWlseS5nZXQoKSkpIHsKICAgICAgICAg
ZWMgPSBTWU5UQVhfRVJSOwpAQCAtMTQ3LDIzICsyOTksMjMgQEAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8Q1NTRm9udEZhY2U+PiBDU1NGb250RmFjZVNldDo6bWF0Y2hpbmdGYWNlcyhj
b25zdAogICAgIH0KICAgICBDU1NWYWx1ZUxpc3QmIGZhbWlseUxpc3QgPSBkb3duY2FzdDxDU1NW
YWx1ZUxpc3Q+KCpmYW1pbHkpOwogCi0gICAgLy8gTWF0Y2ggQ1NTRm9udFNlbGVjdG9yOjpnZXRG
b250RmFjZSgpCi0gICAgZm9yIChhdXRvJiBmYWNlIDogbV9mYWNlcykgewotICAgICAgICBpZiAo
IWZhbWlsaWVzSW50ZXJzZWN0KGZhY2UsIGZhbWlseUxpc3QpIHx8IChkZXNpcmVkU3R5bGVJc05v
cm1hbCAmJiAhKGZhY2UtPnRyYWl0c01hc2soKSAmIEZvbnRTdHlsZU5vcm1hbE1hc2spKSkKKyAg
ICBIYXNoU2V0PEF0b21pY1N0cmluZz4gdW5pcXVlRmFtaWxpZXM7CisgICAgZm9yIChhdXRvJiBm
YW1pbHkgOiBmYW1pbHlMaXN0KSB7CisgICAgICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBw
cmltaXRpdmUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oZmFtaWx5LmdldCgpKTsKKyAg
ICAgICAgaWYgKCFwcmltaXRpdmUuaXNGb250RmFtaWx5KCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChmYWNlLmdldCgpKTsKKyAgICAgICAgdW5pcXVlRmFt
aWxpZXMuYWRkKHByaW1pdGl2ZS5mb250RmFtaWx5KCkuZmFtaWx5TmFtZSk7CiAgICAgfQotICAg
IHJldHVybiByZXN1bHQ7Ci19CiAKLXZvaWQgQ1NTRm9udEZhY2VTZXQ6OmxvYWQoY29uc3QgU3Ry
aW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGF1dG8gbWF0Y2hpbmdGYWNlcyA9IHRoaXMtPm1hdGNoaW5nRmFjZXMoZm9udCwgdGV4dCwgZWMp
OwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOworICAgIGZvciAoYXV0byYgZmFtaWx5IDog
dW5pcXVlRmFtaWxpZXMpIHsKKyAgICAgICAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIGZhY2VzID0g
Z2V0Rm9udEZhY2UoZm9udFRyYWl0c01hc2ssIGZhbWlseSk7CisgICAgICAgIGlmICghZmFjZXMp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChhdXRvJiBjb25zdGl0dWVudEZh
Y2UgOiBmYWNlcy0+Y29uc3RpdHVlbnRGYWNlcygpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChjb25zdGl0dWVudEZhY2UuZ2V0KCkpOworICAgIH0KIAotICAgIGZvciAoYXV0byYgZmFjZSA6
IG1hdGNoaW5nRmFjZXMpCi0gICAgICAgIGZhY2UuZ2V0KCkubG9hZCgpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIGJvb2wgQ1NTRm9udEZhY2VTZXQ6OmNoZWNrKGNvbnN0IFN0cmluZyYgZm9u
dCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE3OSw3ICszMzEs
MTE5IEBAIGJvb2wgQ1NTRm9udEZhY2VTZXQ6OmNoZWNrKGNvbnN0IFN0cmluZyYgZm9udCwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgQ1NTRm9udEZhY2VTZXQ6OnN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYgZmFjZSwgQ1NTRm9u
dEZhY2U6OlN0YXR1cyBvbGRTdGF0ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0ZSkKK2Ns
YXNzIEZvbnRGYWNlQ29tcGFyYXRvciB7CitwdWJsaWM6CisgICAgRm9udEZhY2VDb21wYXJhdG9y
KEZvbnRUcmFpdHNNYXNrIGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbikKKyAgICAgICAg
OiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbihkZXNpcmVkVHJhaXRzTWFza0ZvckNv
bXBhcmlzb24pCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRXZWlnaHRNYXNrKTsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgQ1NTRm9udEZhY2UmIGZpcnN0LCBjb25z
dCBDU1NGb250RmFjZSYgc2Vjb25kKQorICAgIHsKKyAgICAgICAgRm9udFRyYWl0c01hc2sgZmly
c3RUcmFpdHNNYXNrID0gZmlyc3QudHJhaXRzTWFzaygpOworICAgICAgICBGb250VHJhaXRzTWFz
ayBzZWNvbmRUcmFpdHNNYXNrID0gc2Vjb25kLnRyYWl0c01hc2soKTsKKworICAgICAgICBib29s
IGZpcnN0SGFzRGVzaXJlZFN0eWxlID0gZmlyc3RUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRz
TWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVNYXNrOworICAgICAgICBib29sIHNlY29uZEhh
c0Rlc2lyZWRTdHlsZSA9IHNlY29uZFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9y
Q29tcGFyaXNvbiAmIEZvbnRTdHlsZU1hc2s7CisKKyAgICAgICAgaWYgKGZpcnN0SGFzRGVzaXJl
ZFN0eWxlICE9IHNlY29uZEhhc0Rlc2lyZWRTdHlsZSkKKyAgICAgICAgICAgIHJldHVybiBmaXJz
dEhhc0Rlc2lyZWRTdHlsZTsKKworICAgICAgICBpZiAoKG1fZGVzaXJlZFRyYWl0c01hc2tGb3JD
b21wYXJpc29uICYgRm9udFN0eWxlSXRhbGljTWFzaykgJiYgIWZpcnN0LmlzTG9jYWxGYWxsYmFj
aygpICYmICFzZWNvbmQuaXNMb2NhbEZhbGxiYWNrKCkpIHsKKyAgICAgICAgICAgIC8vIFByZWZl
ciBhIGZvbnQgdGhhdCBoYXMgaW5kaWNhdGVkIHRoYXQgaXQgY2FuIG9ubHkgc3VwcG9ydCBpdGFs
aWNzIHRvIGEgZm9udCB0aGF0IGNsYWltcyB0byBzdXBwb3J0CisgICAgICAgICAgICAvLyBhbGwg
c3R5bGVzLiBUaGUgc3BlY2lhbGl6ZWQgZm9udCBpcyBtb3JlIGxpa2VseSB0byBiZSB0aGUgb25l
IHRoZSBhdXRob3Igd2FudHMgdXNlZC4KKyAgICAgICAgICAgIGJvb2wgZmlyc3RSZXF1aXJlc0l0
YWxpY3MgPSAoZmlyc3RUcmFpdHNNYXNrICYgRm9udFN0eWxlSXRhbGljTWFzaykgJiYgIShmaXJz
dFRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKTsKKyAgICAgICAgICAgIGJvb2wgc2Vj
b25kUmVxdWlyZXNJdGFsaWNzID0gKHNlY29uZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNN
YXNrKSAmJiAhKHNlY29uZFRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKTsKKyAgICAg
ICAgICAgIGlmIChmaXJzdFJlcXVpcmVzSXRhbGljcyAhPSBzZWNvbmRSZXF1aXJlc0l0YWxpY3Mp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0UmVxdWlyZXNJdGFsaWNzOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHNlY29uZFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9y
Q29tcGFyaXNvbiAmIEZvbnRXZWlnaHRNYXNrKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoZmlyc3RUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBh
cmlzb24gJiBGb250V2VpZ2h0TWFzaykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtY3NzMy1mb250cy0yMDExMTAwNC8j
Zm9udC1tYXRjaGluZy1hbGdvcml0aG0gc2F5cyA6CisgICAgICAgIC8vICAgLSBJZiB0aGUgZGVz
aXJlZCB3ZWlnaHQgaXMgbGVzcyB0aGFuIDQwMCwgd2VpZ2h0cyBiZWxvdyB0aGUgZGVzaXJlZCB3
ZWlnaHQgYXJlIGNoZWNrZWQgaW4gZGVzY2VuZGluZyBvcmRlciBmb2xsb3dlZCBieSB3ZWlnaHRz
IGFib3ZlIHRoZSBkZXNpcmVkIHdlaWdodCBpbiBhc2NlbmRpbmcgb3JkZXIgdW50aWwgYSBtYXRj
aCBpcyBmb3VuZC4KKyAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyBncmVh
dGVyIHRoYW4gNTAwLCB3ZWlnaHRzIGFib3ZlIHRoZSBkZXNpcmVkIHdlaWdodCBhcmUgY2hlY2tl
ZCBpbiBhc2NlbmRpbmcgb3JkZXIgZm9sbG93ZWQgYnkgd2VpZ2h0cyBiZWxvdyB0aGUgZGVzaXJl
ZCB3ZWlnaHQgaW4gZGVzY2VuZGluZyBvcmRlciB1bnRpbCBhIG1hdGNoIGlzIGZvdW5kLgorICAg
ICAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIDQwMCwgNTAwIGlzIGNoZWNrZWQg
Zmlyc3QgYW5kIHRoZW4gdGhlIHJ1bGUgZm9yIGRlc2lyZWQgd2VpZ2h0cyBsZXNzIHRoYW4gNDAw
IGlzIHVzZWQuCisgICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgNTAwLCA0
MDAgaXMgY2hlY2tlZCBmaXJzdCBhbmQgdGhlbiB0aGUgcnVsZSBmb3IgZGVzaXJlZCB3ZWlnaHRz
IGxlc3MgdGhhbiA0MDAgaXMgdXNlZC4KKworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
ZmFsbGJhY2tSdWxlU2V0cyA9IDk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBydWxl
c1BlclNldCA9IDg7CisgICAgICAgIHN0YXRpYyBjb25zdCBGb250VHJhaXRzTWFzayB3ZWlnaHRG
YWxsYmFja1J1bGVTZXRzW2ZhbGxiYWNrUnVsZVNldHNdW3J1bGVzUGVyU2V0XSA9IHsKKyAgICAg
ICAgICAgIHsgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0
NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0
NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCisgICAgICAg
ICAgICB7IEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDQw
ME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcw
ME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAorICAgICAgICAg
ICAgeyBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQ0MDBN
YXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBN
YXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKKyAgICAgICAgICAg
IHsgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFz
aywgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFz
aywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCisgICAgICAgICAgICB7
IEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ss
IEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ss
IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAorICAgICAgICAgICAgeyBG
b250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrLCBG
b250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBG
b250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9u
dFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9u
dFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9u
dFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRX
ZWlnaHQ5MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRX
ZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRX
ZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2Vp
Z2h0ODAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2Vp
Z2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2Vp
Z2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfQorICAgICAgICB9OworCisgICAgICAgIHVu
c2lnbmVkIHJ1bGVTZXRJbmRleCA9IDA7CisgICAgICAgIGZvciAoOyAhKG1fZGVzaXJlZFRyYWl0
c01hc2tGb3JDb21wYXJpc29uICYgKDEgPDwgKEZvbnRXZWlnaHQxMDBCaXQgKyBydWxlU2V0SW5k
ZXgpKSk7IHJ1bGVTZXRJbmRleCsrKSB7IH0KKworICAgICAgICBjb25zdCBGb250VHJhaXRzTWFz
ayogd2VpZ2h0RmFsbGJhY2tSdWxlID0gd2VpZ2h0RmFsbGJhY2tSdWxlU2V0c1tydWxlU2V0SW5k
ZXhdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXNQZXJTZXQ7ICsraSkg
eworICAgICAgICAgICAgaWYgKHNlY29uZFRyYWl0c01hc2sgJiB3ZWlnaHRGYWxsYmFja1J1bGVb
aV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGZpcnN0
VHJhaXRzTWFzayAmIHdlaWdodEZhbGxiYWNrUnVsZVtpXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgRm9udFRyYWl0c01hc2sgbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlz
b247Cit9OworCitDU1NTZWdtZW50ZWRGb250RmFjZSogQ1NTRm9udEZhY2VTZXQ6OmdldEZvbnRG
YWNlKEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2ssIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
KQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2ZhY2VzTG9va3VwVGFibGUuZmluZChmYW1pbHkp
OworICAgIGlmIChpdGVyYXRvciA9PSBtX2ZhY2VzTG9va3VwVGFibGUuZW5kKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGF1dG8mIGZhbWlseUZvbnRGYWNlcyA9IGl0ZXJhdG9yLT52
YWx1ZTsKKworICAgIGF1dG8mIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBtX2NhY2hlLmFkZChm
YW1pbHksIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWdtZW50ZWRGb250
RmFjZT4+KCkpLml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGF1dG8mIGZhY2UgPSBzZWdtZW50ZWRG
b250RmFjZUNhY2hlLmFkZCh0cmFpdHNNYXNrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Cisg
ICAgaWYgKGZhY2UpCisgICAgICAgIHJldHVybiBmYWNlLmdldCgpOworCisgICAgZmFjZSA9IHN0
ZDo6bWFrZV91bmlxdWU8Q1NTU2VnbWVudGVkRm9udEZhY2U+KCk7CisKKyAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4sIDMyPiBjYW5kaWRhdGVGb250RmFjZXM7
CisgICAgZm9yIChpbnQgaSA9IGZhbWlseUZvbnRGYWNlcy5zaXplKCkgLSAxOyBpID49IDA7IC0t
aSkgeworICAgICAgICBDU1NGb250RmFjZSYgY2FuZGlkYXRlID0gZmFtaWx5Rm9udEZhY2VzW2ld
OworICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVUcmFpdHNNYXNrID0gY2FuZGlkYXRlLnRyYWl0
c01hc2soKTsKKyAgICAgICAgaWYgKCh0cmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzaykg
JiYgIShjYW5kaWRhdGVUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzaykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgY2FuZGlkYXRlRm9udEZhY2VzLmFwcGVuZChjYW5kaWRh
dGUpOworICAgIH0KKworICAgIGF1dG8gbG9jYWxJdGVyYXRvciA9IG1fbG9jYWxseUluc3RhbGxl
ZEZhY2VzTG9va3VwVGFibGUuZmluZChmYW1pbHkpOworICAgIGlmIChsb2NhbEl0ZXJhdG9yICE9
IG1fbG9jYWxseUluc3RhbGxlZEZhY2VzTG9va3VwVGFibGUuZW5kKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBjYW5kaWRhdGUgOiBsb2NhbEl0ZXJhdG9yLT52YWx1ZSkgeworICAgICAgICAgICAg
dW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRpZGF0ZS0+dHJhaXRzTWFzaygpOwor
ICAgICAgICAgICAgaWYgKCh0cmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzaykgJiYgIShj
YW5kaWRhdGVUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzaykpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBjYW5kaWRhdGVGb250RmFjZXMuYXBwZW5kKGNhbmRp
ZGF0ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnN0YWJsZV9zb3J0KGNhbmRpZGF0
ZUZvbnRGYWNlcy5iZWdpbigpLCBjYW5kaWRhdGVGb250RmFjZXMuZW5kKCksIEZvbnRGYWNlQ29t
cGFyYXRvcih0cmFpdHNNYXNrKSk7CisgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRh
dGVGb250RmFjZXMpCisgICAgICAgIGZhY2UtPmFwcGVuZEZvbnRGYWNlKGNhbmRpZGF0ZS5nZXQo
KSk7CisKKyAgICByZXR1cm4gZmFjZS5nZXQoKTsKK30KKwordm9pZCBDU1NGb250RmFjZVNldDo6
Zm9udFN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYgZmFjZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBv
bGRTdGF0ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0ZSkKIHsKICAgICBBU1NFUlQoaGFz
RmFjZShmYWNlKSk7CiAgICAgaWYgKG9sZFN0YXRlID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlBl
bmRpbmcpIHsKQEAgLTE4OCw5ICs0NTIsMjMgQEAgdm9pZCBDU1NGb250RmFjZVNldDo6c3RhdGVD
aGFuZ2VkKENTU0ZvbnRGYWNlJiBmYWNlLCBDU1NGb250RmFjZTo6U3RhdHVzIG9sZFN0YXQKICAg
ICB9CiAgICAgaWYgKG5ld1N0YXRlID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlN1Y2Nlc3MgfHwg
bmV3U3RhdGUgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6RmFpbHVyZSkgewogICAgICAgICBBU1NF
UlQob2xkU3RhdGUgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6TG9hZGluZyB8fCBvbGRTdGF0ZSA9
PSBDU1NGb250RmFjZTo6U3RhdHVzOjpUaW1lZE91dCk7Ci0gICAgICAgIG1fY2xpZW50LmZhY2VG
aW5pc2hlZChmYWNlLCBuZXdTdGF0ZSk7CisgICAgICAgIGZvciAoYXV0byogY2xpZW50IDogbV9j
bGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5mYWNlRmluaXNoZWQoZmFjZSwgbmV3U3RhdGUp
OwogICAgICAgICBkZWNyZW1lbnRBY3RpdmVDb3VudCgpOwogICAgIH0KIH0KIAordm9pZCBDU1NG
b250RmFjZVNldDo6Zm9udFByb3BlcnR5Q2hhbmdlZChDU1NGb250RmFjZSYgZmFjZSwgQ1NTVmFs
dWVMaXN0KiBvbGRGYW1pbGllcykKK3sKKyAgICBtX2NhY2hlLmNsZWFyKCk7CisKKyAgICBpZiAo
b2xkRmFtaWxpZXMpIHsKKyAgICAgICAgcmVtb3ZlRnJvbUZhY2VzTG9va3VwVGFibGUoZmFjZSwg
Km9sZEZhbWlsaWVzKTsKKyAgICAgICAgYWRkVG9GYWNlc0xvb2t1cFRhYmxlKGZhY2UpOworICAg
IH0KKworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQt
PmZvbnRNb2RpZmllZCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udEZhY2VTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5oCmlu
ZGV4IDY2OTQ3ZDc4MWI4YzgxZDg0MjFmZTA5MmExYjZhY2JlYTQyMzRiOWYuLjdkZmVkZjJiM2Ex
MTcwY2RhYTcxMGU2NDVjMzc3ZDdmODhmZjdlOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZVNldC5oCkBAIC0yNywzNCArMjcsNDYgQEAKICNkZWZpbmUgQ1NTRm9udEZhY2VTZXRfaAogCiAj
aW5jbHVkZSAiQ1NTRm9udEZhY2UuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CiBjbGFzcyBGb250
RmFjZVNldDsKIAogY2xhc3MgQ1NTRm9udEZhY2VTZXRDbGllbnQgewogcHVibGljOgogICAgIHZp
cnR1YWwgfkNTU0ZvbnRGYWNlU2V0Q2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGZhY2VG
aW5pc2hlZChDU1NGb250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc3RhcnRlZExvYWRpbmcoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXBsZXRl
ZExvYWRpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZhY2VGaW5pc2hlZChDU1NGb250RmFj
ZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9udE1vZGlm
aWVkKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkTG9hZGluZygpIHsgfTsKKyAgICB2
aXJ0dWFsIHZvaWQgY29tcGxldGVkTG9hZGluZygpIHsgfTsKIH07CiAKLWNsYXNzIENTU0ZvbnRG
YWNlU2V0IGZpbmFsIDogcHVibGljIENTU0ZvbnRGYWNlOjpDbGllbnQgeworY2xhc3MgQ1NTRm9u
dEZhY2VTZXQgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NGb250RmFjZVNldD4sIHB1Ymxp
YyBDU1NGb250RmFjZTo6Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBDU1NGb250RmFjZVNldChDU1NG
b250RmFjZVNldENsaWVudCYpOworICAgIHN0YXRpYyBSZWY8Q1NTRm9udEZhY2VTZXQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGb250RmFjZVNldCgp
KTsKKyAgICB9CiAgICAgfkNTU0ZvbnRGYWNlU2V0KCk7CiAKKyAgICB2b2lkIGFkZENsaWVudChD
U1NGb250RmFjZVNldENsaWVudCYpOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KENTU0ZvbnRGYWNl
U2V0Q2xpZW50Jik7CisKICAgICBib29sIGhhc0ZhY2UoY29uc3QgQ1NTRm9udEZhY2UmKSBjb25z
dDsKICAgICBzaXplX3QgZmFjZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9mYWNlcy5zaXplKCk7
IH0KICAgICB2b2lkIGFkZChDU1NGb250RmFjZSYpOwogICAgIHZvaWQgcmVtb3ZlKGNvbnN0IENT
U0ZvbnRGYWNlJik7Ci0gICAgY29uc3QgQ1NTRm9udEZhY2UmIG9wZXJhdG9yW10oc2l6ZV90IGkp
IGNvbnN0IHsgcmV0dXJuIG1fZmFjZXNbaV07IH0KKyAgICB2b2lkIGNsZWFyKCk7CisgICAgQ1NT
Rm9udEZhY2UmIG9wZXJhdG9yW10oc2l6ZV90IGkpOwogCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0
cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9v
bCBjaGVjayhjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9u
Q29kZSYpOwogCisgICAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIGdldEZvbnRGYWNlKEZvbnRUcmFp
dHNNYXNrLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CisKICAgICBlbnVtIGNsYXNzIFN0
YXR1cyB7CiAgICAgICAgIExvYWRpbmcsCiAgICAgICAgIExvYWRlZApAQCAtNjQsMTQgKzc2LDI5
IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFj
ZT4+IG1hdGNoaW5nRmFjZXMoY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQs
IEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToKKyAgICBDU1NGb250RmFjZVNldCgpOworCisg
ICAgdm9pZCByZW1vdmVGcm9tRmFjZXNMb29rdXBUYWJsZShjb25zdCBDU1NGb250RmFjZSYsIGNv
bnN0IENTU1ZhbHVlTGlzdCYgZmFtaWxpZXNUb1NlYXJjaEZvcik7CisgICAgdm9pZCBhZGRUb0Zh
Y2VzTG9va3VwVGFibGUoQ1NTRm9udEZhY2UmKTsKKwogICAgIHZvaWQgaW5jcmVtZW50QWN0aXZl
Q291bnQoKTsKICAgICB2b2lkIGRlY3JlbWVudEFjdGl2ZUNvdW50KCk7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgc3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiwgQ1NTRm9udEZhY2U6OlN0YXR1cyBvbGRT
dGF0ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGZvbnRTdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2UmLCBDU1NGb250RmFjZTo6U3RhdHVz
IG9sZFN0YXRlLCBDU1NGb250RmFjZTo6U3RhdHVzIG5ld1N0YXRlKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZm9udFByb3BlcnR5Q2hhbmdlZChDU1NGb250RmFjZSYsIENTU1ZhbHVlTGlz
dCogb2xkRmFtaWxpZXMgPSBudWxscHRyKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVnaXN0ZXJM
b2NhbEZvbnRGYWNlc0ZvckZhbWlseShjb25zdCBTdHJpbmcmKTsKKworICAgIHN0YXRpYyBTdHJp
bmcgZmFtaWx5TmFtZUZyb21QcmltaXRpdmUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKIAot
ICAgIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PiBtX2ZhY2VzOworICAgIC8vIG1fZmFjZXMgc2hv
dWxkIGhvbGQgYWxsIHRoZSBzYW1lIGZvbnRzIGFzIHRoZSBvbmVzIGluc2lkZSBpbnNpZGUgbV9m
YWNlc0xvb2t1cFRhYmxlLgorICAgIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PiBtX2ZhY2VzOyAv
LyBXZSBzaG91bGQgaW52ZXN0aWdhdGUgbW92aW5nIG1fZmFjZXMgdG8gRm9udEZhY2VTZXQgYW5k
IG1ha2luZyBpdCByZWZlcmVuY2UgRm9udEZhY2VzLiBUaGlzIG1heSBjbGVhbiB1cCB0aGUgZm9u
dCBsb2FkaW5nIGRlc2lnbi4KKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxDU1NGb250
RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1fZmFjZXNMb29rdXBUYWJsZTsKKyAg
ICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNl
bnNpdGl2ZUhhc2g+IG1fbG9jYWxseUluc3RhbGxlZEZhY2VzTG9va3VwVGFibGU7CisgICAgSGFz
aE1hcDxTdHJpbmcsIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWdtZW50
ZWRGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1fY2FjaGU7CisgICAgc2l6
ZV90IG1fZmFjZXNQYXJ0aXRpb25JbmRleCB7IDAgfTsgLy8gQWxsIGVudHJpZXMgaW4gbV9mYWNl
cyBiZWZvcmUgdGhpcyBpbmRleCBhcmUgQ1NTLWNvbm5lY3RlZC4KICAgICBTdGF0dXMgbV9zdGF0
dXMgeyBTdGF0dXM6OkxvYWRlZCB9OwotICAgIENTU0ZvbnRGYWNlU2V0Q2xpZW50JiBtX2NsaWVu
dDsKKyAgICBIYXNoU2V0PENTU0ZvbnRGYWNlU2V0Q2xpZW50Kj4gbV9jbGllbnRzOwogICAgIHVu
c2lnbmVkIG1fYWN0aXZlQ291bnQgeyAwIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNvdXJjZS5oCmluZGV4IDFlMjliNTdmZmRmZTM4MDc0NmU2NzIzMjMwZDU1MzQ5YTU5ZmI5
OWYuLmY2MjAyNWQ2OTAyNzgyYmQzNTQyOTRmZmEyMGU4NGNmMTY1YzJkMjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCkBAIC00NSw2ICs0NSw4IEBAIGNsYXNzIFNoYXJl
ZEJ1ZmZlcjsKIGNsYXNzIENTU0ZvbnRGYWNlU291cmNlIGZpbmFsIDogcHVibGljIENhY2hlZEZv
bnRDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIENT
U0ZvbnRGYWNlU291cmNlKENTU0ZvbnRGYWNlJiBvd25lciwgY29uc3QgU3RyaW5nJiBmYW1pbHlO
YW1lT3JVUkksIENhY2hlZEZvbnQqID0gbnVsbHB0ciwgU1ZHRm9udEZhY2VFbGVtZW50KiA9IG51
bGxwdHIpOworICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlU291cmNlKCk7CiAKICAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICA9PiBTdWNjZXNzCiAgICAgLy8gICAgICAgICAgICAgICAgICAgIC8v
CkBAIC01NywxMCArNTksNiBAQCBwdWJsaWM6CiAgICAgICAgIFN1Y2Nlc3MsCiAgICAgICAgIEZh
aWx1cmUKICAgICB9OwotCi0gICAgQ1NTRm9udEZhY2VTb3VyY2UoQ1NTRm9udEZhY2UmIG93bmVy
LCBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWVPclVSSSwgQ2FjaGVkRm9udCogPSBudWxscHRyLCBT
VkdGb250RmFjZUVsZW1lbnQqID0gbnVsbHB0cik7Ci0gICAgdmlydHVhbCB+Q1NTRm9udEZhY2VT
b3VyY2UoKTsKLQogICAgIFN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsg
fQogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lT3JVUkkoKSBjb25zdCB7IHJl
dHVybiBtX2ZhbWlseU5hbWVPclVSSTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmNwcAppbmRleCAyYzhjMmM2ZDM2NDFhMTgyNWRkZWFmYWY4ZmRhYzUxZWRkNTEzM2ZkLi44YTc0
Yzk4YWQwNDcxZmRiYjRhMjA0ZDZkNjkyYzg3NTk1YTllYWE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkNTU0ZvbnRG
YWNlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZh
Y2VTb3VyY2UuaCIKLSNpbmNsdWRlICJDU1NGb250RmFjZVNyY1ZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTRm9udEZhbWlseS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGZWF0dXJlVmFsdWUuaCIKICNpbmNs
dWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgpAQCAtNDYsNiArNDUsNyBAQAogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2lu
Y2x1ZGUgIkZvbnRGYWNlU2V0LmgiCiAjaW5jbHVkZSAiRm9udFZhcmlhbnRCdWlsZGVyLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNjUsNiArNjUs
NyBAQCBzdGF0aWMgdW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7CiAKIENTU0ZvbnRTZWxlY3Rvcjo6
Q1NTRm9udFNlbGVjdG9yKERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoJmRv
Y3VtZW50KQorICAgICwgbV9jc3NGb250RmFjZVNldChDU1NGb250RmFjZVNldDo6Y3JlYXRlKCkp
CiAgICAgLCBtX2JlZ2luTG9hZGluZ1RpbWVyKCp0aGlzLCAmQ1NTRm9udFNlbGVjdG9yOjpiZWdp
bkxvYWRUaW1lckZpcmVkKQogICAgICwgbV91bmlxdWVJZCgrK2ZvbnRTZWxlY3RvcklkKQogICAg
ICwgbV92ZXJzaW9uKDApCkBAIC03NSw5OSArNzYsMzIgQEAgQ1NTRm9udFNlbGVjdG9yOjpDU1NG
b250U2VsZWN0b3IoRG9jdW1lbnQmIGRvY3VtZW50KQogCiAgICAgQVNTRVJUKG1fZG9jdW1lbnQp
OwogICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuYWRkQ2xpZW50KCp0aGlzKTsKKyAgICBtX2Nz
c0ZvbnRGYWNlU2V0LT5hZGRDbGllbnQoKnRoaXMpOwogfQogCiBDU1NGb250U2VsZWN0b3I6On5D
U1NGb250U2VsZWN0b3IoKQogewogICAgIGNsZWFyRG9jdW1lbnQoKTsKKyAgICBtX2Nzc0ZvbnRG
YWNlU2V0LT5yZW1vdmVDbGllbnQoKnRoaXMpOwogICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCku
cmVtb3ZlQ2xpZW50KCp0aGlzKTsKIH0KIAotYm9vbCBDU1NGb250U2VsZWN0b3I6OmlzRW1wdHko
KSBjb25zdAorRm9udEZhY2VTZXQmIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXQoKQogewot
ICAgIHJldHVybiBtX2ZvbnRzLmlzRW1wdHkoKTsKLX0KLQotdm9pZCBDU1NGb250U2VsZWN0b3I6
OmFwcGVuZFNvdXJjZXMoQ1NTRm9udEZhY2UmIGZvbnRGYWNlLCBDU1NWYWx1ZUxpc3QmIHNyY0xp
c3QsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdl
bnRTaGFkb3dUcmVlKQotewotICAgIGZvciAoYXV0byYgc3JjIDogc3JjTGlzdCkgewotICAgICAg
ICAvLyBBbiBpdGVtIGluIHRoZSBsaXN0IGVpdGhlciBzcGVjaWZpZXMgYSBzdHJpbmcgKGxvY2Fs
IGZvbnQgbmFtZSkgb3IgYSBVUkwgKHJlbW90ZSBmb250IHRvIGRvd25sb2FkKS4KLSAgICAgICAg
Q1NTRm9udEZhY2VTcmNWYWx1ZSYgaXRlbSA9IGRvd25jYXN0PENTU0ZvbnRGYWNlU3JjVmFsdWU+
KHNyYy5nZXQoKSk7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NGb250RmFjZVNvdXJjZT4g
c291cmNlOwotICAgICAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IG51
bGxwdHI7Ci0gICAgICAgIGJvb2wgZm91bmRTVkdGb250ID0gZmFsc2U7Ci0KLSNpZiBFTkFCTEUo
U1ZHX0ZPTlRTKQotICAgICAgICBmb3VuZFNWR0ZvbnQgPSBpdGVtLmlzU1ZHRm9udEZhY2VTcmMo
KSB8fCBpdGVtLnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwotICAgICAgICBmb250RmFjZUVsZW1lbnQg
PSBpdGVtLnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwotI2VuZGlmCi0gICAgICAgIGlmICghaXRlbS5p
c0xvY2FsKCkpIHsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50ID8g
ZG9jdW1lbnQtPnNldHRpbmdzKCkgOiBudWxscHRyOwotICAgICAgICAgICAgYm9vbCBhbGxvd0Rv
d25sb2FkaW5nID0gZm91bmRTVkdGb250IHx8IChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+ZG93bmxv
YWRhYmxlQmluYXJ5Rm9udHNFbmFibGVkKCkpOwotICAgICAgICAgICAgaWYgKGFsbG93RG93bmxv
YWRpbmcgJiYgaXRlbS5pc1N1cHBvcnRlZEZvcm1hdCgpICYmIGRvY3VtZW50KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKENhY2hlZEZvbnQqIGNhY2hlZEZvbnQgPSBpdGVtLmNhY2hlZEZvbnQoZG9j
dW1lbnQsIGZvdW5kU1ZHRm9udCwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93
VHJlZSkpCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NT
Rm9udEZhY2VTb3VyY2U+KGZvbnRGYWNlLCBpdGVtLnJlc291cmNlKCksIGNhY2hlZEZvbnQpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNvdXJjZSA9IHN0ZDo6
bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGZvbnRGYWNlLCBpdGVtLnJlc291cmNlKCks
IG51bGxwdHIsIGZvbnRGYWNlRWxlbWVudCk7Ci0KLSAgICAgICAgaWYgKHNvdXJjZSkKLSAgICAg
ICAgICAgIGZvbnRGYWNlLmFkb3B0U291cmNlKFdURk1vdmUoc291cmNlKSk7CisgICAgaWYgKCFt
X2ZvbnRGYWNlU2V0KSB7CisgICAgICAgIEFTU0VSVChtX2RvY3VtZW50KTsKKyAgICAgICAgbV9m
b250RmFjZVNldCA9IEZvbnRGYWNlU2V0OjpjcmVhdGUoKm1fZG9jdW1lbnQsIG1fY3NzRm9udEZh
Y2VTZXQuZ2V0KCkpOwogICAgIH0KLSAgICBmb250RmFjZS5zb3VyY2VzUG9wdWxhdGVkKCk7Ci19
CiAKLVN0cmluZyBDU1NGb250U2VsZWN0b3I6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGNvbnN0
IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNGb250RmFtaWx5
KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5mb250RmFtaWx5KCkuZmFtaWx5TmFtZTsKLSAgICBp
ZiAoIXZhbHVlLmlzVmFsdWVJRCgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgLy8gV2Ug
bmVlZCB0byB1c2UgdGhlIHJhdyB0ZXh0IGZvciBhbGwgdGhlIGdlbmVyaWMgZmFtaWx5IHR5cGVz
LCBzaW5jZSBAZm9udC1mYWNlIGlzIGEgd2F5IG9mIGFjdHVhbGx5Ci0gICAgLy8gZGVmaW5pbmcg
d2hhdCBmb250IHRvIHVzZSBmb3IgdGhvc2UgdHlwZXMuCi0gICAgc3dpdGNoICh2YWx1ZS5nZXRW
YWx1ZUlEKCkpIHsKLSAgICBjYXNlIENTU1ZhbHVlU2VyaWY6Ci0gICAgICAgIHJldHVybiBzZXJp
ZkZhbWlseTsKLSAgICBjYXNlIENTU1ZhbHVlU2Fuc1NlcmlmOgotICAgICAgICByZXR1cm4gc2Fu
c1NlcmlmRmFtaWx5OwotICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgotICAgICAgICByZXR1cm4g
Y3Vyc2l2ZUZhbWlseTsKLSAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKLSAgICAgICAgcmV0dXJu
IGZhbnRhc3lGYW1pbHk7Ci0gICAgY2FzZSBDU1NWYWx1ZU1vbm9zcGFjZToKLSAgICAgICAgcmV0
dXJuIG1vbm9zcGFjZUZhbWlseTsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoK
LSAgICAgICAgcmV0dXJuIHBpY3RvZ3JhcGhGYW1pbHk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICB9CisgICAgcmV0dXJuICptX2ZvbnRGYWNlU2V0OwogfQogCi12b2lk
IENTU0ZvbnRTZWxlY3Rvcjo6cmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseShjb25zdCBT
dHJpbmcmIGZhbWlseU5hbWUpCitib29sIENTU0ZvbnRTZWxlY3Rvcjo6aXNFbXB0eSgpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKCFtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMuY29udGFpbnMoZmFt
aWx5TmFtZSkpOwotCi0gICAgVmVjdG9yPEZvbnRUcmFpdHNNYXNrPiB0cmFpdHNNYXNrcyA9IEZv
bnRDYWNoZTo6c2luZ2xldG9uKCkuZ2V0VHJhaXRzSW5GYW1pbHkoZmFtaWx5TmFtZSk7Ci0gICAg
aWYgKHRyYWl0c01hc2tzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9y
PFJlZjxDU1NGb250RmFjZT4+IGZhY2VzID0geyB9OwotICAgIGZvciAoYXV0byBtYXNrIDogdHJh
aXRzTWFza3MpIHsKLSAgICAgICAgUmVmPENTU0ZvbnRGYWNlPiBmYWNlID0gQ1NTRm9udEZhY2U6
OmNyZWF0ZSgqdGhpcywgbnVsbHB0ciwgdHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBmYW1pbHlMaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFy
YXRlZCgpOwotICAgICAgICBmYW1pbHlMaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVGb250RmFtaWx5VmFsdWUoZmFtaWx5TmFtZSkpOwotICAgICAgICBmYWNlLT5z
ZXRGYW1pbGllcygqZmFtaWx5TGlzdCk7Ci0gICAgICAgIGZhY2UtPnNldFRyYWl0c01hc2sobWFz
ayk7Ci0gICAgICAgIGZhY2UtPmFkb3B0U291cmNlKHN0ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZh
Y2VTb3VyY2U+KGZhY2UuZ2V0KCksIGZhbWlseU5hbWUpKTsKLSAgICAgICAgQVNTRVJUKCFmYWNl
LT5hbGxTb3VyY2VzRmFpbGVkKCkpOwotICAgICAgICBmYWNlcy5hcHBlbmQoV1RGTW92ZShmYWNl
KSk7Ci0gICAgfQotICAgIG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5hZGQoZmFtaWx5TmFt
ZSwgV1RGTW92ZShmYWNlcykpOworICAgIHJldHVybiAhbV9jc3NGb250RmFjZVNldC0+ZmFjZUNv
dW50KCk7CiB9CiAKLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3Qg
U3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQordm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNl
UnVsZShTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxlLCBib29sIGlzSW5pdGlhdGluZ0Vs
ZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpCiB7CiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVz
JiBzdHlsZSA9IGZvbnRGYWNlUnVsZS5wcm9wZXJ0aWVzKCk7CiAgICAgUmVmUHRyPENTU1ZhbHVl
PiBmb250RmFtaWx5ID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRG
YW1pbHkpOwpAQCAtMjAxLDcgKzEzNSw4IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250
RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwgYm9vCiAgICAg
aWYgKCFzcmNMaXN0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWY8Q1NTRm9u
dEZhY2U+IGZvbnRGYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV9jcmVh
dGluZ0ZvbnQgPSB0cnVlOworICAgIFJlZjxDU1NGb250RmFjZT4gZm9udEZhY2UgPSBDU1NGb250
RmFjZTo6Y3JlYXRlKHRoaXMsICZmb250RmFjZVJ1bGUpOwogCiAgICAgaWYgKCFmb250RmFjZS0+
c2V0RmFtaWxpZXMoKmZvbnRGYW1pbHkpKQogICAgICAgICByZXR1cm47CkBAIC0yMjYsMjYgKzE2
MSwxMyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxl
UnVsZUZvbnRGYWNlJiBmb250RmFjZVJ1bGUsIGJvbwogICAgIGlmIChmZWF0dXJlU2V0dGluZ3Mg
JiYgIWZvbnRGYWNlLT5zZXRGZWF0dXJlU2V0dGluZ3MoKmZlYXR1cmVTZXR0aW5ncykpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGFwcGVuZFNvdXJjZXMoZm9udEZhY2UsIHNyY0xpc3QsIG1fZG9j
dW1lbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOworICAgIENT
U0ZvbnRGYWNlOjphcHBlbmRTb3VyY2VzKGZvbnRGYWNlLCBzcmNMaXN0LCBtX2RvY3VtZW50LCBp
c0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKICAgICBpZiAoZm9udEZh
Y2UtPmFsbFNvdXJjZXNGYWlsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRv
JiBpdGVtIDogZmFtaWx5TGlzdCkgewotICAgICAgICBTdHJpbmcgZmFtaWx5TmFtZSA9IGZhbWls
eU5hbWVGcm9tUHJpbWl0aXZlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgp
KSk7Ci0gICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5h
bWUsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PigpKTsKLSAgICAgICAgYXV0byYgZmFtaWx5Rm9u
dEZhY2VzID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgaWYgKGFkZFJlc3Vs
dC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICByZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFt
aWx5KGZhbWlseU5hbWUpOwotICAgICAgICAgICAgZmFtaWx5Rm9udEZhY2VzID0geyB9OwotICAg
ICAgICB9Ci0KLSAgICAgICAgZmFtaWx5Rm9udEZhY2VzLmFwcGVuZChmb250RmFjZS5jb3B5UmVm
KCkpOwotICAgICAgICAKLSAgICAgICAgKyttX3ZlcnNpb247Ci0gICAgfQorICAgIG1fY3NzRm9u
dEZhY2VTZXQtPmFkZChmb250RmFjZS5nZXQoKSk7CisgICAgbV9jcmVhdGluZ0ZvbnQgPSBmYWxz
ZTsKKyAgICArK21fdmVyc2lvbjsKIH0KIAogdm9pZCBDU1NGb250U2VsZWN0b3I6OnJlZ2lzdGVy
Rm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRTZWxlY3RvckNsaWVudCYgY2xpZW50KQpAQCAt
MjczLDYgKzE5NSwxMiBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udExvYWRlZCgpCiAgICAg
ZGlzcGF0Y2hJbnZhbGlkYXRpb25DYWxsYmFja3MoKTsKIH0KIAordm9pZCBDU1NGb250U2VsZWN0
b3I6OmZvbnRNb2RpZmllZCgpCit7CisgICAgaWYgKCFtX2NyZWF0aW5nRm9udCkKKyAgICAgICAg
ZGlzcGF0Y2hJbnZhbGlkYXRpb25DYWxsYmFja3MoKTsKK30KKwogdm9pZCBDU1NGb250U2VsZWN0
b3I6OmZvbnRDYWNoZUludmFsaWRhdGVkKCkKIHsKICAgICBkaXNwYXRjaEludmFsaWRhdGlvbkNh
bGxiYWNrcygpOwpAQCAtMzA0LDg0ICsyMzIsMTMgQEAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmlu
ZyYgcmVzb2x2ZUdlbmVyaWNGYW1pbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBGb250RGUK
ICAgICByZXR1cm4gZmFtaWx5TmFtZTsKIH0KIAotY2xhc3MgRm9udEZhY2VDb21wYXJhdG9yIHsK
LXB1YmxpYzoKLSAgICBGb250RmFjZUNvbXBhcmF0b3IoRm9udFRyYWl0c01hc2sgZGVzaXJlZFRy
YWl0c01hc2tGb3JDb21wYXJpc29uKQotICAgICAgICA6IG1fZGVzaXJlZFRyYWl0c01hc2tGb3JD
b21wYXJpc29uKGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbikKLSAgICB7Ci0gICAgICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fZGVzaXJlZFRyYWl0c01hc2tGb3JD
b21wYXJpc29uICYgRm9udFdlaWdodE1hc2spOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBDU1NGb250RmFjZSYgZmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBzZWNvbmQpCi0g
ICAgewotICAgICAgICBGb250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC50cmFp
dHNNYXNrKCk7Ci0gICAgICAgIEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01hc2sgPSBzZWNv
bmQudHJhaXRzTWFzaygpOwotCi0gICAgICAgIGJvb2wgZmlyc3RIYXNEZXNpcmVkU3R5bGUgPSBm
aXJzdFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRT
dHlsZU1hc2s7Ci0gICAgICAgIGJvb2wgc2Vjb25kSGFzRGVzaXJlZFN0eWxlID0gc2Vjb25kVHJh
aXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFz
azsKLQotICAgICAgICBpZiAoZmlyc3RIYXNEZXNpcmVkU3R5bGUgIT0gc2Vjb25kSGFzRGVzaXJl
ZFN0eWxlKQotICAgICAgICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxlOwotCi0gICAg
ICAgIGlmICgobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFs
aWNNYXNrKSAmJiAhZmlyc3QuaXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5pc0xvY2FsRmFs
bGJhY2soKSkgewotICAgICAgICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0
ZWQgdGhhdCBpdCBjYW4gb25seSBzdXBwb3J0IGl0YWxpY3MgdG8gYSBmb250IHRoYXQgY2xhaW1z
IHRvIHN1cHBvcnQKLSAgICAgICAgICAgIC8vIGFsbCBzdHlsZXMuIFRoZSBzcGVjaWFsaXplZCBm
b250IGlzIG1vcmUgbGlrZWx5IHRvIGJlIHRoZSBvbmUgdGhlIGF1dGhvciB3YW50cyB1c2VkLgot
ICAgICAgICAgICAgYm9vbCBmaXJzdFJlcXVpcmVzSXRhbGljcyA9IChmaXJzdFRyYWl0c01hc2sg
JiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZU5v
cm1hbE1hc2spOwotICAgICAgICAgICAgYm9vbCBzZWNvbmRSZXF1aXJlc0l0YWxpY3MgPSAoc2Vj
b25kVHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEoc2Vjb25kVHJhaXRzTWFz
ayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spOwotICAgICAgICAgICAgaWYgKGZpcnN0UmVxdWlyZXNJ
dGFsaWNzICE9IHNlY29uZFJlcXVpcmVzSXRhbGljcykKLSAgICAgICAgICAgICAgICByZXR1cm4g
Zmlyc3RSZXF1aXJlc0l0YWxpY3M7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2Vjb25kVHJh
aXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFdlaWdodE1h
c2spCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChmaXJzdFRyYWl0c01h
c2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRXZWlnaHRNYXNrKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvMjAxMS9XRC1jc3MzLWZvbnRzLTIwMTExMDA0LyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSBz
YXlzIDoKLSAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyBsZXNzIHRoYW4g
NDAwLCB3ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBhcmUgY2hlY2tlZCBpbiBkZXNj
ZW5kaW5nIG9yZGVyIGZvbGxvd2VkIGJ5IHdlaWdodHMgYWJvdmUgdGhlIGRlc2lyZWQgd2VpZ2h0
IGluIGFzY2VuZGluZyBvcmRlciB1bnRpbCBhIG1hdGNoIGlzIGZvdW5kLgotICAgICAgICAvLyAg
IC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIGdyZWF0ZXIgdGhhbiA1MDAsIHdlaWdodHMgYWJv
dmUgdGhlIGRlc2lyZWQgd2VpZ2h0IGFyZSBjaGVja2VkIGluIGFzY2VuZGluZyBvcmRlciBmb2xs
b3dlZCBieSB3ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBpbiBkZXNjZW5kaW5nIG9y
ZGVyIHVudGlsIGEgbWF0Y2ggaXMgZm91bmQuCi0gICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJl
ZCB3ZWlnaHQgaXMgNDAwLCA1MDAgaXMgY2hlY2tlZCBmaXJzdCBhbmQgdGhlbiB0aGUgcnVsZSBm
b3IgZGVzaXJlZCB3ZWlnaHRzIGxlc3MgdGhhbiA0MDAgaXMgdXNlZC4KLSAgICAgICAgLy8gICAt
IElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyA1MDAsIDQwMCBpcyBjaGVja2VkIGZpcnN0IGFuZCB0
aGVuIHRoZSBydWxlIGZvciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFuIDQwMCBpcyB1c2VkLgot
Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYWxsYmFja1J1bGVTZXRzID0gOTsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJ1bGVzUGVyU2V0ID0gODsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IEZvbnRUcmFpdHNNYXNrIHdlaWdodEZhbGxiYWNrUnVsZVNldHNbZmFsbGJhY2tS
dWxlU2V0c11bcnVsZXNQZXJTZXRdID0gewotICAgICAgICAgICAgeyBGb250V2VpZ2h0MjAwTWFz
aywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFz
aywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFz
aywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9udFdlaWdodDEwME1hc2ss
IEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ss
IEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ss
IEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZvbnRXZWlnaHQyMDBNYXNrLCBG
b250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBG
b250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBG
b250V2VpZ2h0OTAwTWFzayB9LAotICAgICAgICAgICAgeyBGb250V2VpZ2h0NTAwTWFzaywgRm9u
dFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9u
dFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9u
dFdlaWdodDkwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9udFdlaWdodDQwME1hc2ssIEZvbnRX
ZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2ssIEZvbnRX
ZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRX
ZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2Vp
Z2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2Vp
Z2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2Vp
Z2h0MTAwTWFzayB9LAotICAgICAgICAgICAgeyBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdo
dDkwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdo
dDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdo
dDEwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ3
MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0
MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQx
MDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0NzAw
TWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAw
TWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAw
TWFzayB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdW5zaWduZWQgcnVsZVNldEluZGV4ID0gMDsK
LSAgICAgICAgZm9yICg7ICEobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiAoMSA8
PCAoRm9udFdlaWdodDEwMEJpdCArIHJ1bGVTZXRJbmRleCkpKTsgcnVsZVNldEluZGV4KyspIHsg
fQotCi0gICAgICAgIGNvbnN0IEZvbnRUcmFpdHNNYXNrKiB3ZWlnaHRGYWxsYmFja1J1bGUgPSB3
ZWlnaHRGYWxsYmFja1J1bGVTZXRzW3J1bGVTZXRJbmRleF07Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBydWxlc1BlclNldDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc2Vjb25k
VHJhaXRzTWFzayAmIHdlaWdodEZhbGxiYWNrUnVsZVtpXSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoZmlyc3RUcmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJh
Y2tSdWxlW2ldKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBGb250VHJhaXRzTWFz
ayBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbjsKLX07Ci0KIEZvbnRSYW5nZXMgQ1NT
Rm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAg
Ly8gRklYTUU6IFRoZSBzcGVjIChhbmQgRmlyZWZveCkgc2F5cyB1c2VyIHNwZWNpZmllZCBnZW5l
cmljIGZhbWlsaWVzIChzYW5zLXNlcmlmIGV0Yy4pIHNob3VsZCBiZSByZXNvbHZlZCBiZWZvcmUg
dGhlIEBmb250LWZhY2UgbG9va3VwIHRvby4KICAgICBib29sIHJlc29sdmVHZW5lcmljRmFtaWx5
Rmlyc3QgPSBmYW1pbHlOYW1lID09IHN0YW5kYXJkRmFtaWx5OwogCiAgICAgQXRvbWljU3RyaW5n
IGZhbWlseUZvckxvb2t1cCA9IHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QgPyByZXNvbHZlR2Vu
ZXJpY0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpIDogZmFt
aWx5TmFtZTsKLSAgICBDU1NTZWdtZW50ZWRGb250RmFjZSogZmFjZSA9IGdldEZvbnRGYWNlKGZv
bnREZXNjcmlwdGlvbiwgZmFtaWx5Rm9yTG9va3VwKTsKKyAgICBDU1NTZWdtZW50ZWRGb250RmFj
ZSogZmFjZSA9IG1fY3NzRm9udEZhY2VTZXQtPmdldEZvbnRGYWNlKGZvbnREZXNjcmlwdGlvbi50
cmFpdHNNYXNrKCksIGZhbWlseUZvckxvb2t1cCk7CiAgICAgaWYgKCFmYWNlKSB7CiAgICAgICAg
IGlmICghcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCkKICAgICAgICAgICAgIGZhbWlseUZvckxv
b2t1cCA9IHJlc29sdmVHZW5lcmljRmFtaWx5KG1fZG9jdW1lbnQsIGZvbnREZXNjcmlwdGlvbiwg
ZmFtaWx5TmFtZSk7CkBAIC0zOTEsNDkgKzI0OCw2IEBAIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVj
dG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
CiAgICAgcmV0dXJuIGZhY2UtPmZvbnRSYW5nZXMoZm9udERlc2NyaXB0aW9uKTsKIH0KIAotQ1NT
U2VnbWVudGVkRm9udEZhY2UqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udEZhY2UoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
KQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2ZvbnRGYWNlcy5maW5kKGZhbWlseSk7Ci0gICAg
aWYgKGl0ZXJhdG9yID09IG1fZm9udEZhY2VzLmVuZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBhdXRvJiBmYW1pbHlGb250RmFjZXMgPSBpdGVyYXRvci0+dmFsdWU7Ci0KLSAgICBh
dXRvJiBzZWdtZW50ZWRGb250RmFjZUNhY2hlID0gbV9mb250cy5hZGQoZmFtaWx5LCBIYXNoTWFw
PHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+PigpKS5pdGVy
YXRvci0+dmFsdWU7Ci0KLSAgICBGb250VHJhaXRzTWFzayB0cmFpdHNNYXNrID0gZm9udERlc2Ny
aXB0aW9uLnRyYWl0c01hc2soKTsKLQotICAgIGF1dG8mIGZhY2UgPSBzZWdtZW50ZWRGb250RmFj
ZUNhY2hlLmFkZCh0cmFpdHNNYXNrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgaWYg
KGZhY2UpCi0gICAgICAgIHJldHVybiBmYWNlLmdldCgpOwotCi0gICAgZmFjZSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q1NTU2VnbWVudGVkRm9udEZhY2U+KCp0aGlzKTsKLQotICAgIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRGYWNlPiwgMzI+IGNhbmRpZGF0ZUZvbnRGYWNlczsK
LSAgICBmb3IgKGludCBpID0gZmFtaWx5Rm9udEZhY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7Ci0gICAgICAgIENTU0ZvbnRGYWNlJiBjYW5kaWRhdGUgPSBmYW1pbHlGb250RmFjZXNbaV07
Ci0gICAgICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRyYWl0c01hc2sgPSBjYW5kaWRhdGUudHJhaXRz
TWFzaygpOwotICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSAm
JiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBjYW5kaWRhdGVGb250RmFjZXMuYXBwZW5kKGNhbmRpZGF0
ZSk7Ci0gICAgfQotCi0gICAgYXV0byBsb2NhbEl0ZXJhdG9yID0gbV9sb2NhbGx5SW5zdGFsbGVk
Rm9udEZhY2VzLmZpbmQoZmFtaWx5KTsKLSAgICBpZiAobG9jYWxJdGVyYXRvciAhPSBtX2xvY2Fs
bHlJbnN0YWxsZWRGb250RmFjZXMuZW5kKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBjYW5kaWRh
dGUgOiBsb2NhbEl0ZXJhdG9yLT52YWx1ZSkgewotICAgICAgICAgICAgdW5zaWduZWQgY2FuZGlk
YXRlVHJhaXRzTWFzayA9IGNhbmRpZGF0ZS0+dHJhaXRzTWFzaygpOwotICAgICAgICAgICAgaWYg
KCh0cmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzaykgJiYgIShjYW5kaWRhdGVUcmFpdHNN
YXNrICYgRm9udFN0eWxlTm9ybWFsTWFzaykpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBjYW5kaWRhdGVGb250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBzdGQ6OnN0YWJsZV9zb3J0KGNhbmRpZGF0ZUZvbnRGYWNlcy5iZWdp
bigpLCBjYW5kaWRhdGVGb250RmFjZXMuZW5kKCksIEZvbnRGYWNlQ29tcGFyYXRvcih0cmFpdHNN
YXNrKSk7Ci0gICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVGb250RmFjZXMpCi0g
ICAgICAgIGZhY2UtPmFwcGVuZEZvbnRGYWNlKGNhbmRpZGF0ZS5nZXQoKSk7Ci0KLSAgICByZXR1
cm4gZmFjZS5nZXQoKTsKLX0KLQogdm9pZCBDU1NGb250U2VsZWN0b3I6OmNsZWFyRG9jdW1lbnQo
KQogewogICAgIGlmICghbV9kb2N1bWVudCkgewpAQCAtNDU0LDkgKzI2OCw3IEBAIHZvaWQgQ1NT
Rm9udFNlbGVjdG9yOjpjbGVhckRvY3VtZW50KCkKICAgICBtX2RvY3VtZW50ID0gbnVsbHB0cjsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIG9iamVjdCBzaG91bGQgb3V0bGl2ZSB0aGUgRG9jdW1lbnQu
Ci0gICAgbV9mb250RmFjZXMuY2xlYXIoKTsKLSAgICBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFj
ZXMuY2xlYXIoKTsKLSAgICBtX2ZvbnRzLmNsZWFyKCk7CisgICAgbV9jc3NGb250RmFjZVNldC0+
Y2xlYXIoKTsKICAgICBtX2NsaWVudHMuY2xlYXIoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5oCmluZGV4IDlhMjdmZTIyZWY3MmQ0YTk3N2I2ZjczNWEzMTAyMzU5NjE5NjU1
YzEuLmMxMTJlODhmNzQ3NjU5Yzg5MDU1MDI2MWI1ZWQ1MTlkYTg2ZmZmMTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgQ1NTRm9u
dFNlbGVjdG9yX2gKIAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlLmgiCisjaW5jbHVkZSAiQ1NTRm9u
dEZhY2VTZXQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKQEAgLTQ4LDcgKzQ5LDcgQEAgY2xh
c3MgQ2FjaGVkRm9udDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgU3R5bGVSdWxlRm9udEZhY2U7
CiAKLWNsYXNzIENTU0ZvbnRTZWxlY3RvciBmaW5hbCA6IHB1YmxpYyBGb250U2VsZWN0b3Igewor
Y2xhc3MgQ1NTRm9udFNlbGVjdG9yIGZpbmFsIDogcHVibGljIEZvbnRTZWxlY3RvciwgcHVibGlj
IENTU0ZvbnRGYWNlU2V0Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENTU0ZvbnRT
ZWxlY3Rvcj4gY3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkKICAgICB7CkBAIC02MiwxMiArNjMs
MTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRm9udFJhbmdlcyBmb250UmFuZ2VzRm9yRmFtaWx5
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBSZWZQdHI8Rm9udD4gZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
c2l6ZV90KSBvdmVycmlkZTsKLSAgICBDU1NTZWdtZW50ZWRGb250RmFjZSogZ2V0Rm9udEZhY2Uo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOwogCiAg
ICAgdm9pZCBjbGVhckRvY3VtZW50KCk7CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2Vz
KENTU0ZvbnRGYWNlJiwgQ1NTVmFsdWVMaXN0JiwgRG9jdW1lbnQqLCBib29sIGlzSW5pdGlhdGlu
Z0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOwotICAgIHZvaWQgYWRkRm9udEZhY2VSdWxl
KGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlJiwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2Vy
QWdlbnRTaGFkb3dUcmVlKTsKKyAgICB2b2lkIGFkZEZvbnRGYWNlUnVsZShTdHlsZVJ1bGVGb250
RmFjZSYsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CiAK
ICAgICB2b2lkIGZvbnRMb2FkZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZm9udENhY2hlSW52YWxp
ZGF0ZWQoKSBvdmVycmlkZTsKQEAgLTgxLDIxICs4MCwyMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGJlZ2luTG9hZGluZ0ZvbnRTb29uKENhY2hlZEZvbnQqKTsKIAotICAgIHN0YXRpYyBTdHJpbmcg
ZmFtaWx5TmFtZUZyb21QcmltaXRpdmUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKKyAgICBG
b250RmFjZVNldCYgZm9udEZhY2VTZXQoKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDU1NG
b250U2VsZWN0b3IoRG9jdW1lbnQmKTsKIAogICAgIHZvaWQgZGlzcGF0Y2hJbnZhbGlkYXRpb25D
YWxsYmFja3MoKTsKIAotICAgIHZvaWQgYmVnaW5Mb2FkVGltZXJGaXJlZCgpOworICAgIHZpcnR1
YWwgdm9pZCBmb250TW9kaWZpZWQoKSBvdmVycmlkZTsKIAotICAgIHZvaWQgcmVnaXN0ZXJMb2Nh
bEZvbnRGYWNlc0ZvckZhbWlseShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGJlZ2luTG9hZFRp
bWVyRmlyZWQoKTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4g
bV9mb250RmFjZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+
PiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXM7
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxD
U1NTZWdtZW50ZWRGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1fZm9udHM7
CisgICAgUmVmUHRyPEZvbnRGYWNlU2V0PiBtX2ZvbnRGYWNlU2V0OworICAgIFJlZjxDU1NGb250
RmFjZVNldD4gbV9jc3NGb250RmFjZVNldDsKICAgICBIYXNoU2V0PEZvbnRTZWxlY3RvckNsaWVu
dCo+IG1fY2xpZW50czsKIAogICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRG
b250Pj4gbV9mb250c1RvQmVnaW5Mb2FkaW5nOwpAQCAtMTAzLDYgKzEwMSw3IEBAIHByaXZhdGU6
CiAKICAgICB1bnNpZ25lZCBtX3VuaXF1ZUlkOwogICAgIHVuc2lnbmVkIG1fdmVyc2lvbjsKKyAg
ICBib29sIG1fY3JlYXRpbmdGb250IHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCmluZGV4
IGY1ZmNiYWVhOGRkYWU4NjliNmQzZmM5MzAyNzQ5YzIyNmI5OTAzYWYuLjRjMjBkMzhmZTRlNmQ2
Zjk2MjI2YjQ0M2NlZDNlNTNmOGZlMDE1ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
Z21lbnRlZEZvbnRGYWNlLmNwcApAQCAtMzcsOCArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUNTU1NlZ21lbnRlZEZvbnRGYWNlOjpDU1NTZWdtZW50ZWRGb250RmFjZShDU1NGb250
U2VsZWN0b3ImIGZvbnRTZWxlY3RvcikKLSAgICA6IG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3Rv
cikKK0NTU1NlZ21lbnRlZEZvbnRGYWNlOjpDU1NTZWdtZW50ZWRGb250RmFjZSgpCiB7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKaW5kZXggMDdiNzFmODJk
YjcyNGZjOWNlNTFkOWUxMGY3ODA2MTVhMjYzMzQ3Zi4uOTIwMzYxMmQwOTExMzcxZjBiMDRhODAw
NzkyNjk2MTU5ZmVjZTU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21l
bnRlZEZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRG
YWNlLmgKQEAgLTQyLDE5ICs0MiwxOCBAQCBjbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBD
U1NTZWdtZW50ZWRGb250RmFjZSBmaW5hbCA6IHB1YmxpYyBDU1NGb250RmFjZTo6Q2xpZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBDU1NTZWdtZW50ZWRG
b250RmFjZShDU1NGb250U2VsZWN0b3ImKTsKKyAgICBDU1NTZWdtZW50ZWRGb250RmFjZSgpOwog
ICAgIH5DU1NTZWdtZW50ZWRGb250RmFjZSgpOwogCi0gICAgQ1NTRm9udFNlbGVjdG9yJiBmb250
U2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3RvcjsgfQotCiAgICAgdm9pZCBh
cHBlbmRGb250RmFjZShSZWY8Q1NTRm9udEZhY2U+JiYpOwogCiAgICAgRm9udFJhbmdlcyBmb250
UmFuZ2VzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwogCisgICAgVmVjdG9yPFJlZjxDU1NGb250
RmFjZT4sIDE+JiBjb25zdGl0dWVudEZhY2VzKCkgeyByZXR1cm4gbV9mb250RmFjZXM7IH0KKwog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZm9udExvYWRlZChDU1NGb250RmFjZSYpIG92ZXJy
aWRlOwogCi0gICAgQ1NTRm9udFNlbGVjdG9yJiBtX2ZvbnRTZWxlY3RvcjsKICAgICBIYXNoTWFw
PEZvbnREZXNjcmlwdGlvbktleSwgRm9udFJhbmdlcywgRm9udERlc2NyaXB0aW9uS2V5SGFzaCwg
V1RGOjpTaW1wbGVDbGFzc0hhc2hUcmFpdHM8Rm9udERlc2NyaXB0aW9uS2V5Pj4gbV9jYWNoZTsK
ICAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPiwgMT4gbV9mb250RmFjZXM7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9Gb250RmFjZS5jcHAKaW5kZXggYzQ1ZThkMjcxMWYwNzU5NzY5NWRmNjI2MjY0Yzg5ZTM4ZDNj
NWVmYS4uYTBiZDgyNDc2MGYyZjA5ZjI0YjA4ZDhmMmY4YzkwYzIzYzRjYTNjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvRm9udEZhY2UuY3BwCkBAIC03NSw3ICs3NSw3IEBAIFJlZlB0cjxGb250RmFjZT4gRm9udEZh
Y2U6OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBTY3JpcHRFeGVjdXRpb25Db250
CiAgICAgICAgIGF1dG8gdmFsdWUgPSBGb250RmFjZTo6cGFyc2VTdHJpbmcoc291cmNlU3RyaW5n
LCBDU1NQcm9wZXJ0eVNyYyk7CiAgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlLmdl
dCgpKSkgewogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0JiBzcmNMaXN0ID0gZG93bmNhc3Q8Q1NT
VmFsdWVMaXN0PigqdmFsdWUpOwotICAgICAgICAgICAgQ1NTRm9udFNlbGVjdG9yOjphcHBlbmRT
b3VyY2VzKHJlc3VsdC0+YmFja2luZygpLCBzcmNMaXN0LCAmZG93bmNhc3Q8RG9jdW1lbnQ+KGNv
bnRleHQpLCBmYWxzZSk7CisgICAgICAgICAgICBDU1NGb250RmFjZTo6YXBwZW5kU291cmNlcyhy
ZXN1bHQtPmJhY2tpbmcoKSwgc3JjTGlzdCwgJmRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSwg
ZmFsc2UpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMTAsOCArMTEwLDIyIEBAIFJlZlB0cjxG
b250RmFjZT4gRm9udEZhY2U6OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBTY3Jp
cHRFeGVjdXRpb25Db250CiAgICAgcmV0dXJuIHJlc3VsdC5wdHIoKTsKIH0KIAorUmVmPEZvbnRG
YWNlPiBGb250RmFjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIENTU0ZvbnRG
YWNlJiBmYWNlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZvbnRGYWNlKGV4ZWNTdGF0
ZSwgZmFjZSkpOworfQorCiBGb250RmFjZTo6Rm9udEZhY2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWNT
dGF0ZSwgQ1NTRm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3IpCi0gICAgOiBtX2JhY2tpbmcoQ1NT
Rm9udEZhY2U6OmNyZWF0ZShmb250U2VsZWN0b3IsIHRoaXMpKQorICAgIDogbV93ZWFrUHRyRmFj
dG9yeSh0aGlzKQorICAgICwgbV9iYWNraW5nKENTU0ZvbnRGYWNlOjpjcmVhdGUoJmZvbnRTZWxl
Y3RvciwgbnVsbHB0ciwgdGhpcykpCisgICAgLCBtX3Byb21pc2UoY3JlYXRlUHJvbWlzZShleGVj
U3RhdGUpKQoreworICAgIG1fYmFja2luZy0+YWRkQ2xpZW50KCp0aGlzKTsKK30KKworRm9udEZh
Y2U6OkZvbnRGYWNlKEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIENTU0ZvbnRGYWNlJiBmYWNl
KQorICAgIDogbV93ZWFrUHRyRmFjdG9yeSh0aGlzKQorICAgICwgbV9iYWNraW5nKGZhY2UpCiAg
ICAgLCBtX3Byb21pc2UoY3JlYXRlUHJvbWlzZShleGVjU3RhdGUpKQogewogICAgIG1fYmFja2lu
Zy0+YWRkQ2xpZW50KCp0aGlzKTsKQEAgLTEyMiw2ICsxMzYsMTEgQEAgRm9udEZhY2U6On5Gb250
RmFjZSgpCiAgICAgbV9iYWNraW5nLT5yZW1vdmVDbGllbnQoKnRoaXMpOwogfQogCitXZWFrUHRy
PEZvbnRGYWNlPiBGb250RmFjZTo6Y3JlYXRlV2Vha1B0cigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOworfQorCiBSZWZQdHI8Q1NTVmFsdWU+
IEZvbnRGYWNlOjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlEKQogewogICAgIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZSA9
IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwpAQCAtMzE3LDE4ICszMzYsMjUgQEAg
U3RyaW5nIEZvbnRGYWNlOjpzdGF0dXMoKSBjb25zdAogICAgIHJldHVybiBTdHJpbmcoImVycm9y
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiB9CiAKLXZvaWQgRm9udEZhY2U6OnN0
YXRlQ2hhbmdlZChDU1NGb250RmFjZSYgZmFjZSwgQ1NTRm9udEZhY2U6OlN0YXR1cywgQ1NTRm9u
dEZhY2U6OlN0YXR1cyBuZXdTdGF0ZSkKK3ZvaWQgRm9udEZhY2U6OmZvbnRTdGF0ZUNoYW5nZWQo
Q1NTRm9udEZhY2UmIGZhY2UsIENTU0ZvbnRGYWNlOjpTdGF0dXMsIENTU0ZvbnRGYWNlOjpTdGF0
dXMgbmV3U3RhdGUpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChmYWNlLCAmZmFjZSA9PSBtX2JhY2tp
bmcucHRyKCkpOwogICAgIHN3aXRjaCAobmV3U3RhdGUpIHsKKyAgICBjYXNlIENTU0ZvbnRGYWNl
OjpTdGF0dXM6OkxvYWRpbmc6CisgICAgICAgIC8vIFdlIHN0aWxsIG5lZWQgdG8gcmVzb2x2ZSBw
cm9taXNlcyB3aGVuIGxvYWRpbmcgY29tcGxldGVzLCBldmVuIGlmIGFsbCByZWZlcmVuY2VzIHRv
IHVzZSBoYXZlIGZhbGxlbiBvdXQgb2Ygc2NvcGUuCisgICAgICAgIHJlZigpOworICAgICAgICBi
cmVhazsKICAgICBjYXNlIENTU0ZvbnRGYWNlOjpTdGF0dXM6OlRpbWVkT3V0OgogICAgICAgICBy
ZWplY3RQcm9taXNlKE5FVFdPUktfRVJSKTsKKyAgICAgICAgZGVyZWYoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQ1NTRm9udEZhY2U6OlN0YXR1czo6U3VjY2VzczoKICAgICAgICAgZnVs
ZmlsbFByb21pc2UoKTsKKyAgICAgICAgZGVyZWYoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgQ1NTRm9udEZhY2U6OlN0YXR1czo6RmFpbHVyZToKICAgICAgICAgcmVqZWN0UHJvbWlzZShO
RVRXT1JLX0VSUik7CisgICAgICAgIGRlcmVmKCk7CiAgICAgICAgIHJldHVybjsKICAgICBkZWZh
dWx0OgogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9u
dEZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oCmluZGV4IGY2NmZiOWFmZGY2
OGVmNWMxYTZmYzVhY2E5NzJjMjA3YzM1ZjRkMzQuLjEwYTE3NzAxMGJmN2U1NzEzOTljOWRlZWE5
NWEwZGMyNTcyNGI0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIERlcHJlY2F0ZWQgewpAQCAtNDgs
NiArNDksNyBAQCBjbGFzcyBEaWN0aW9uYXJ5OwogY2xhc3MgRm9udEZhY2UgZmluYWwgOiBwdWJs
aWMgUmVmQ291bnRlZDxGb250RmFjZT4sIHB1YmxpYyBDU1NGb250RmFjZTo6Q2xpZW50IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEZvbnRGYWNlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUm
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzb3VyY2UsIGNvbnN0IERpY3Rpb25hcnkmIGRlc2NyaXB0
b3JzLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3RhdGljIFJlZjxGb250RmFjZT4gY3JlYXRlKEpT
Qzo6RXhlY1N0YXRlJiwgQ1NTRm9udEZhY2UmKTsKICAgICB2aXJ0dWFsIH5Gb250RmFjZSgpOwog
CiAgICAgdm9pZCBzZXRGYW1pbHkoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAt
NzYsMTQgKzc4LDE4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBh
cnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIENTU1Byb3BlcnR5SUQpOwogCisgICAgdmlydHVhbCB2
b2lkIGZvbnRTdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2UmLCBDU1NGb250RmFjZTo6U3RhdHVzIG9s
ZFN0YXRlLCBDU1NGb250RmFjZTo6U3RhdHVzIG5ld1N0YXRlKSBvdmVycmlkZTsKKworICAgIFdl
YWtQdHI8Rm9udEZhY2U+IGNyZWF0ZVdlYWtQdHIoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBG
b250RmFjZShKU0M6OkV4ZWNTdGF0ZSYsIENTU0ZvbnRTZWxlY3RvciYpOwotCi0gICAgdmlydHVh
bCB2b2lkIHN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMgb2xk
U3RhdGUsIENTU0ZvbnRGYWNlOjpTdGF0dXMgbmV3U3RhdGUpIG92ZXJyaWRlOworICAgIEZvbnRG
YWNlKEpTQzo6RXhlY1N0YXRlJiwgQ1NTRm9udEZhY2UmKTsKIAogICAgIHZvaWQgZnVsZmlsbFBy
b21pc2UoKTsKICAgICB2b2lkIHJlamVjdFByb21pc2UoRXhjZXB0aW9uQ29kZSk7CiAKKyAgICBX
ZWFrUHRyRmFjdG9yeTxGb250RmFjZT4gbV93ZWFrUHRyRmFjdG9yeTsKICAgICBSZWY8Q1NTRm9u
dEZhY2U+IG1fYmFja2luZzsKICAgICBQcm9taXNlIG1fcHJvbWlzZTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRGYWNlU2V0LmNwcAppbmRleCA3ZWQ3NzQ2NmI0MjQyOTNkY2ViN2YzYjU1MjRiZTE4NGUx
YzVhODJjLi5mZTNlZDI4ODNlYzVmNWJiNWZkNDVmOTE5OWFhNTc2ZTBlZjUxNTE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Gb250RmFjZVNldC5jcHAKQEAgLTQyLDE3ICs0MiwzOSBAQCBzdGF0aWMgRm9udEZh
Y2VTZXQ6OlByb21pc2UgY3JlYXRlUHJvbWlzZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYykKICAgICBy
ZXR1cm4gRm9udEZhY2VTZXQ6OlByb21pc2UoRGVmZXJyZWRXcmFwcGVyKCZleGVjLCAmZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJmV4ZWMsICZnbG9iYWxPYmpl
Y3QpKSk7CiB9CiAKLUZvbnRGYWNlU2V0OjpGb250RmFjZVNldChKU0M6OkV4ZWNTdGF0ZSYgZXhl
Y1N0YXRlLCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+
PiYgaW5pdGlhbEZhY2VzKQorUmVmPEZvbnRGYWNlU2V0PiBGb250RmFjZVNldDo6Y3JlYXRlKERv
Y3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+JiBpbml0aWFs
RmFjZXMpCit7CisgICAgUmVmPEZvbnRGYWNlU2V0PiByZXN1bHQgPSBhZG9wdFJlZigqbmV3IEZv
bnRGYWNlU2V0KGRvY3VtZW50LCBpbml0aWFsRmFjZXMpKTsKKyAgICByZXN1bHQtPnN1c3BlbmRJ
Zk5lZWRlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZjxGb250RmFjZVNldD4gRm9u
dEZhY2VTZXQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIENTU0ZvbnRGYWNlU2V0JiBiYWNr
aW5nKQoreworICAgIFJlZjxGb250RmFjZVNldD4gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBGb250
RmFjZVNldChkb2N1bWVudCwgYmFja2luZykpOworICAgIHJlc3VsdC0+c3VzcGVuZElmTmVlZGVk
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KERv
Y3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+JiBpbml0aWFs
RmFjZXMpCiAgICAgOiBBY3RpdmVET01PYmplY3QoJmRvY3VtZW50KQotICAgICwgbV9iYWNraW5n
KCp0aGlzKQotICAgICwgbV9wcm9taXNlKGNyZWF0ZVByb21pc2UoZXhlY1N0YXRlKSkKKyAgICAs
IG1fYmFja2luZyhDU1NGb250RmFjZVNldDo6Y3JlYXRlKCkpCiB7CisgICAgbV9iYWNraW5nLT5h
ZGRDbGllbnQoKnRoaXMpOwogICAgIGZvciAoYXV0byYgZmFjZSA6IGluaXRpYWxGYWNlcykKICAg
ICAgICAgYWRkKGZhY2UuZ2V0KCkpOwogfQogCitGb250RmFjZVNldDo6Rm9udEZhY2VTZXQoRG9j
dW1lbnQmIGRvY3VtZW50LCBDU1NGb250RmFjZVNldCYgYmFja2luZykKKyAgICA6IEFjdGl2ZURP
TU9iamVjdCgmZG9jdW1lbnQpCisgICAgLCBtX2JhY2tpbmcoYmFja2luZykKK3sKKyAgICBtX2Jh
Y2tpbmctPmFkZENsaWVudCgqdGhpcyk7Cit9CisKIEZvbnRGYWNlU2V0Ojp+Rm9udEZhY2VTZXQo
KQogeworICAgIG1fYmFja2luZy0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKIH0KIAogRm9udEZhY2VT
ZXQ6Okl0ZXJhdG9yOjpJdGVyYXRvcihGb250RmFjZVNldCYgc2V0KQpAQCAtNjAsMTEgKzgyLDEx
IEBAIEZvbnRGYWNlU2V0OjpJdGVyYXRvcjo6SXRlcmF0b3IoRm9udEZhY2VTZXQmIHNldCkKIHsK
IH0KIAotYm9vbCBGb250RmFjZVNldDo6SXRlcmF0b3I6Om5leHQoUmVmUHRyPEZvbnRGYWNlPiYg
a2V5LCBSZWZQdHI8Rm9udEZhY2U+JiB2YWx1ZSkKK2Jvb2wgRm9udEZhY2VTZXQ6Okl0ZXJhdG9y
OjpuZXh0KEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIFJlZlB0cjxGb250RmFjZT4mIGtleSwg
UmVmUHRyPEZvbnRGYWNlPiYgdmFsdWUpCiB7CiAgICAgaWYgKG1faW5kZXggPT0gbV90YXJnZXQt
PnNpemUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAga2V5ID0gbV90YXJnZXQtPm1fYmFj
a2luZ1ttX2luZGV4KytdLndyYXBwZXIoKTsKKyAgICBrZXkgPSBtX3RhcmdldC0+bV9iYWNraW5n
LmdldCgpW21faW5kZXgrK10ud3JhcHBlcihleGVjU3RhdGUpOwogICAgIHZhbHVlID0ga2V5Owog
ICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTgyLDE4ICsxMDQsMTggQEAgYm9vbCBGb250RmFjZVNl
dDo6aGFzKEZvbnRGYWNlKiBmYWNlKSBjb25zdAogewogICAgIGlmICghZmFjZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX2JhY2tpbmcuaGFzRmFjZShmYWNlLT5iYWNraW5n
KCkpOworICAgIHJldHVybiBtX2JhY2tpbmctPmhhc0ZhY2UoZmFjZS0+YmFja2luZygpKTsKIH0K
IAogc2l6ZV90IEZvbnRGYWNlU2V0OjpzaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9iYWNr
aW5nLmZhY2VDb3VudCgpOworICAgIHJldHVybiBtX2JhY2tpbmctPmZhY2VDb3VudCgpOwogfQog
CiBGb250RmFjZVNldCYgRm9udEZhY2VTZXQ6OmFkZChGb250RmFjZSogZmFjZSkKIHsKLSAgICBp
ZiAoZmFjZSAmJiAhbV9iYWNraW5nLmhhc0ZhY2UoZmFjZS0+YmFja2luZygpKSkKLSAgICAgICAg
bV9iYWNraW5nLmFkZChmYWNlLT5iYWNraW5nKCkpOworICAgIGlmIChmYWNlICYmICFtX2JhY2tp
bmctPmhhc0ZhY2UoZmFjZS0+YmFja2luZygpKSkKKyAgICAgICAgbV9iYWNraW5nLT5hZGQoZmFj
ZS0+YmFja2luZygpKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEwMiwyMSArMTI0LDIx
IEBAIGJvb2wgRm9udEZhY2VTZXQ6OnJlbW92ZShGb250RmFjZSogZmFjZSkKICAgICBpZiAoIWZh
Y2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgcmVzdWx0ID0gbV9iYWNraW5n
Lmhhc0ZhY2UoZmFjZS0+YmFja2luZygpKTsKKyAgICBib29sIHJlc3VsdCA9IG1fYmFja2luZy0+
aGFzRmFjZShmYWNlLT5iYWNraW5nKCkpOwogICAgIGlmIChyZXN1bHQpCi0gICAgICAgIG1fYmFj
a2luZy5yZW1vdmUoZmFjZS0+YmFja2luZygpKTsKKyAgICAgICAgbV9iYWNraW5nLT5yZW1vdmUo
ZmFjZS0+YmFja2luZygpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIEZvbnRGYWNl
U2V0OjpjbGVhcigpCiB7Ci0gICAgd2hpbGUgKG1fYmFja2luZy5mYWNlQ291bnQoKSkKLSAgICAg
ICAgbV9iYWNraW5nLnJlbW92ZShtX2JhY2tpbmdbMF0pOworICAgIHdoaWxlIChtX2JhY2tpbmct
PmZhY2VDb3VudCgpKQorICAgICAgICBtX2JhY2tpbmctPnJlbW92ZShtX2JhY2tpbmcuZ2V0KClb
MF0pOwogfQogCi12b2lkIEZvbnRGYWNlU2V0Ojpsb2FkKGNvbnN0IFN0cmluZyYgZm9udCwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3ZvaWQgRm9udEZhY2VTZXQ6OmxvYWQoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwg
Y29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIERlZmVycmVkV3JhcHBlciYm
IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGF1dG8gbWF0Y2hpbmdGYWNlcyA9
IG1fYmFja2luZy5tYXRjaGluZ0ZhY2VzKGZvbnQsIHRleHQsIGVjKTsKKyAgICBhdXRvIG1hdGNo
aW5nRmFjZXMgPSBtX2JhY2tpbmctPm1hdGNoaW5nRmFjZXMoZm9udCwgdGV4dCwgZWMpOwogICAg
IGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMzksMTEgKzE2MSwxMSBAQCB2b2lkIEZv
bnRGYWNlU2V0Ojpsb2FkKGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBE
ZWZlcnJlZFdyYXBwZXImJgogICAgIH0KIAogICAgIGZvciAoYXV0byYgZmFjZSA6IG1hdGNoaW5n
RmFjZXMpIHsKLSAgICAgICAgcGVuZGluZ1Byb21pc2UtPmZhY2VzLmFwcGVuZChmYWNlLmdldCgp
LndyYXBwZXIoKSk7CisgICAgICAgIHBlbmRpbmdQcm9taXNlLT5mYWNlcy5hcHBlbmQoZmFjZS5n
ZXQoKS53cmFwcGVyKGV4ZWNTdGF0ZSkpOwogICAgICAgICBpZiAoZmFjZS5nZXQoKS5zdGF0dXMo
KSA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpTdWNjZXNzKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIHdhaXRpbmcgPSB0cnVlOwotICAgICAgICBhdXRvJiB2ZWN0b3IgPSBtX3BlbmRp
bmdQcm9taXNlcy5hZGQoUmVmUHRyPEZvbnRGYWNlPihmYWNlLmdldCgpLndyYXBwZXIoKSksIFZl
Y3RvcjxSZWY8UGVuZGluZ1Byb21pc2U+PigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1
dG8mIHZlY3RvciA9IG1fcGVuZGluZ1Byb21pc2VzLmFkZChSZWZQdHI8Q1NTRm9udEZhY2U+KCZm
YWNlLmdldCgpKSwgVmVjdG9yPFJlZjxQZW5kaW5nUHJvbWlzZT4+KCkpLml0ZXJhdG9yLT52YWx1
ZTsKICAgICAgICAgdmVjdG9yLmFwcGVuZChwZW5kaW5nUHJvbWlzZS5jb3B5UmVmKCkpOwogICAg
IH0KIApAQCAtMTUzLDE0ICsxNzUsMTQgQEAgdm9pZCBGb250RmFjZVNldDo6bG9hZChjb25zdCBT
dHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRGVmZXJyZWRXcmFwcGVyJiYKIAogYm9v
bCBGb250RmFjZVNldDo6Y2hlY2soY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IFN0cmluZyYg
dGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgcmV0dXJuIG1fYmFja2luZy5jaGVjayhm
YW1pbHksIHRleHQsIGVjKTsKKyAgICByZXR1cm4gbV9iYWNraW5nLT5jaGVjayhmYW1pbHksIHRl
eHQsIGVjKTsKIH0KIAogYXV0byBGb250RmFjZVNldDo6cHJvbWlzZShKU0M6OkV4ZWNTdGF0ZSYg
ZXhlY1N0YXRlKSAtPiBQcm9taXNlJgogewogICAgIGlmICghbV9wcm9taXNlKSB7CiAgICAgICAg
IG1fcHJvbWlzZSA9IGNyZWF0ZVByb21pc2UoZXhlY1N0YXRlKTsKLSAgICAgICAgaWYgKG1fYmFj
a2luZy5zdGF0dXMoKSA9PSBDU1NGb250RmFjZVNldDo6U3RhdHVzOjpMb2FkZWQpCisgICAgICAg
IGlmIChtX2JhY2tpbmctPnN0YXR1cygpID09IENTU0ZvbnRGYWNlU2V0OjpTdGF0dXM6OkxvYWRl
ZCkKICAgICAgICAgICAgIGZ1bGZpbGxQcm9taXNlKCk7CiAgICAgfQogICAgIHJldHVybiBtX3By
b21pc2UudmFsdWUoKTsKQEAgLTE2OCw3ICsxOTAsNyBAQCBhdXRvIEZvbnRGYWNlU2V0Ojpwcm9t
aXNlKEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUpIC0+IFByb21pc2UmCiAgICAgCiBTdHJpbmcg
Rm9udEZhY2VTZXQ6OnN0YXR1cygpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChtX2JhY2tpbmcuc3Rh
dHVzKCkpIHsKKyAgICBzd2l0Y2ggKG1fYmFja2luZy0+c3RhdHVzKCkpIHsKICAgICBjYXNlIENT
U0ZvbnRGYWNlU2V0OjpTdGF0dXM6OkxvYWRpbmc6CiAgICAgICAgIHJldHVybiBTdHJpbmcoImxv
YWRpbmciLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBjYXNlIENTU0ZvbnRG
YWNlU2V0OjpTdGF0dXM6OkxvYWRlZDoKQEAgLTE4MCw3ICsyMDIsNyBAQCBTdHJpbmcgRm9udEZh
Y2VTZXQ6OnN0YXR1cygpIGNvbnN0CiAKIGJvb2wgRm9udEZhY2VTZXQ6OmNhblN1c3BlbmRGb3JE
b2N1bWVudFN1c3BlbnNpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX2JhY2tpbmcuc3RhdHVz
KCkgPT0gQ1NTRm9udEZhY2VTZXQ6OlN0YXR1czo6TG9hZGVkOworICAgIHJldHVybiBtX2JhY2tp
bmctPnN0YXR1cygpID09IENTU0ZvbnRGYWNlU2V0OjpTdGF0dXM6OkxvYWRlZDsKIH0KIAogdm9p
ZCBGb250RmFjZVNldDo6c3RhcnRlZExvYWRpbmcoKQpAQCAtMjA5LDcgKzIzMSw3IEBAIHZvaWQg
Rm9udEZhY2VTZXQ6OmZ1bGZpbGxQcm9taXNlKCkKIAogdm9pZCBGb250RmFjZVNldDo6ZmFjZUZp
bmlzaGVkKENTU0ZvbnRGYWNlJiBmYWNlLCBDU1NGb250RmFjZTo6U3RhdHVzIG5ld1N0YXR1cykK
IHsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9wZW5kaW5nUHJvbWlzZXMuZmluZChmYWNlLndyYXBw
ZXIoKSk7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1Byb21pc2VzLmZpbmQoJmZhY2Up
OwogICAgIGlmIChpdGVyYXRvciA9PSBtX3BlbmRpbmdQcm9taXNlcy5lbmQoKSkKICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5oCmluZGV4IGMwNWVkMThlNGNlOGFmNTFm
OGYyZTgwNDEyNTFhYjU0MDAxZGMyYzcuLjQ4ZjYzZTMwMTRjOGE1ZDcxZTVjNDM5MDBmY2ExMjZl
YThjNmY3NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5oCkBAIC0zOCw2ICszOCwxMCBAQAog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAorbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBFeGVjU3RhdGU7Cit9CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CkBAIC00NSwxMiArNDksOCBAQCBjbGFzcyBGb250RmFj
ZTsKIAogY2xhc3MgRm9udEZhY2VTZXQgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250RmFj
ZVNldD4sIHB1YmxpYyBDU1NGb250RmFjZVNldENsaWVudCwgcHVibGljIEV2ZW50VGFyZ2V0V2l0
aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Rm9udEZhY2VTZXQ+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBEb2N1
bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5pdGlhbEZh
Y2VzKQotICAgIHsKLSAgICAgICAgUmVmPEZvbnRGYWNlU2V0PiByZXN1bHQgPSBhZG9wdFJlZigq
bmV3IEZvbnRGYWNlU2V0KGV4ZWNTdGF0ZSwgZG9jdW1lbnQsIGluaXRpYWxGYWNlcykpOwotICAg
ICAgICByZXN1bHQtPnN1c3BlbmRJZk5lZWRlZCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KKyAgICBzdGF0aWMgUmVmPEZvbnRGYWNlU2V0PiBjcmVhdGUoRG9jdW1lbnQmLCBjb25z
dCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcyk7CisgICAgc3RhdGljIFJl
ZjxGb250RmFjZVNldD4gY3JlYXRlKERvY3VtZW50JiwgQ1NTRm9udEZhY2VTZXQmIGJhY2tpbmcp
OwogICAgIHZpcnR1YWwgfkZvbnRGYWNlU2V0KCk7CiAKICAgICBib29sIGhhcyhGb250RmFjZSop
IGNvbnN0OwpAQCAtNTksOCArNTksOCBAQCBwdWJsaWM6CiAgICAgYm9vbCByZW1vdmUoRm9udEZh
Y2UqKTsKICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiBm
b250LCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBsb2Fk
KGZvbnQsIFN0cmluZygiICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3Zl
KHByb21pc2UpLCBlYyk7IH0KLSAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiBmb250LCBjb25z
dCBTdHJpbmcmIHRleHQsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIGxvYWQoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgY29uc3QgU3RyaW5n
JiBmb250LCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBs
b2FkKGV4ZWNTdGF0ZSwgZm9udCwgU3RyaW5nKCIgIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksIFdURk1vdmUocHJvbWlzZSksIGVjKTsgfQorICAgIHZvaWQgbG9hZChKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBEZWZlcnJlZFdy
YXBwZXImJiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBjaGVjayhjb25zdCBT
dHJpbmcmIGZvbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjaGVjayhmb250LCBTdHJp
bmcoIiAiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgZWMpOyB9CiAgICAgYm9vbCBj
aGVjayhjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29k
ZSYpOwogCkBAIC02OSw2ICs2OSw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIERPTVByb21pc2U8
Rm9udEZhY2VTZXQmLCBET01Db3JlRXhjZXB0aW9uJj4gUHJvbWlzZTsKICAgICBQcm9taXNlJiBw
cm9taXNlKEpTQzo6RXhlY1N0YXRlJik7CiAKKyAgICBDU1NGb250RmFjZVNldCYgYmFja2luZygp
IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCiAgICAgY2xhc3MgSXRlcmF0b3IgewogICAgIHB1Ymxp
YzoKICAgICAgICAgZXhwbGljaXQgSXRlcmF0b3IoRm9udEZhY2VTZXQmKTsKQEAgLTc2LDExICs3
OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEtleSA9IFJlZlB0cjxGb250RmFjZT47CiAg
ICAgICAgIHVzaW5nIFZhbHVlID0gUmVmUHRyPEZvbnRGYWNlPjsKIAotICAgICAgICBib29sIG5l
eHQoS2V5JiBuZXh0S2V5LCBWYWx1ZSYgbmV4dFZhbHVlKTsKKyAgICAgICAgYm9vbCBuZXh0KEpT
Qzo6RXhlY1N0YXRlJiwgS2V5JiBuZXh0S2V5LCBWYWx1ZSYgbmV4dFZhbHVlKTsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIFJlZjxGb250RmFjZVNldD4gbV90YXJnZXQ7Ci0gICAgICAgIHNpemVf
dCBtX2luZGV4IHsgMCB9OworICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsgLy8gRklYTUU6
IFRoZXJlIG5lZWRzIHRvIGJlIGEgbWVjaGFuaXNtIHRvIGhhbmRsZSB3aGVuIGZvbnRzIGFyZSBh
ZGRlZCBvciByZW1vdmVkIGZyb20gdGhlIG1pZGRsZSBvZiB0aGUgRm9udEZhY2VTZXQuCiAgICAg
fTsKICAgICBJdGVyYXRvciBjcmVhdGVJdGVyYXRvcigpIHsgcmV0dXJuIEl0ZXJhdG9yKCp0aGlz
KTsgfQogCkBAIC0xMDQsNyArMTA2LDggQEAgcHJpdmF0ZToKICAgICAgICAgUHJvbWlzZSBwcm9t
aXNlOwogICAgIH07CiAKLSAgICBGb250RmFjZVNldChKU0M6OkV4ZWNTdGF0ZSYsIERvY3VtZW50
JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+Jik7CisgICAgRm9udEZhY2VTZXQoRG9j
dW1lbnQmLCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mKTsKKyAgICBGb250RmFjZVNl
dChEb2N1bWVudCYsIENTU0ZvbnRGYWNlU2V0Jik7CiAKICAgICB2b2lkIGZ1bGZpbGxQcm9taXNl
KCk7CiAKQEAgLTEyMyw4ICsxMjYsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZWZF
dmVudFRhcmdldCgpIG92ZXJyaWRlIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZF
dmVudFRhcmdldCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQogCi0gICAgQ1NTRm9udEZhY2VTZXQg
bV9iYWNraW5nOwotICAgIEhhc2hNYXA8UmVmUHRyPEZvbnRGYWNlPiwgVmVjdG9yPFJlZjxQZW5k
aW5nUHJvbWlzZT4+PiBtX3BlbmRpbmdQcm9taXNlczsKKyAgICBSZWY8Q1NTRm9udEZhY2VTZXQ+
IG1fYmFja2luZzsKKyAgICBIYXNoTWFwPFJlZlB0cjxDU1NGb250RmFjZT4sIFZlY3RvcjxSZWY8
UGVuZGluZ1Byb21pc2U+Pj4gbV9wZW5kaW5nUHJvbWlzZXM7CiAgICAgT3B0aW9uYWw8UHJvbWlz
ZT4gbV9wcm9taXNlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRG
YWNlU2V0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5pZGwKaW5kZXggNGZm
Njg1ZGNhY2Q5YjUyZWMyNzM1NWUwZGRiMzUxZGYzZTU2ZmU3OC4uNmNhZjU1YTUyZTFmYWM0ZDY3
NDcxOTVlZjJlZWQ1YjA5YjQ4ZTFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRGYWNlU2V0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaWRsCkBA
IC0yOSw3ICsyOSw3IEBAIGVudW0gRm9udEZhY2VTZXRMb2FkU3RhdHVzIHsKIH07CiAKIFsKLSAg
ICBDb25zdHJ1Y3RvckNhbGxXaXRoPVNjcmlwdFN0YXRlJkRvY3VtZW50LAorICAgIENvbnN0cnVj
dG9yQ2FsbFdpdGg9RG9jdW1lbnQsCiAgICAgQ29uc3RydWN0b3Ioc2VxdWVuY2U8Rm9udEZhY2U+
IGluaXRpYWxGYWNlcykKIF0gaW50ZXJmYWNlIEZvbnRGYWNlU2V0IDogRXZlbnRUYXJnZXQgewog
ICAgIFtDdXN0b21dIE9iamVjdCBlbnRyaWVzKCk7CkBAIC00OCw3ICs0OCw3IEBAIGVudW0gRm9u
dEZhY2VTZXRMb2FkU3RhdHVzIHsKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ubG9hZGlu
Z2RvbmU7CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmxvYWRpbmdlcnJvcjsKIAotICAg
IFtSYWlzZXNFeGNlcHRpb25dIFByb21pc2UgbG9hZChET01TdHJpbmcgZm9udCwgb3B0aW9uYWwg
RE9NU3RyaW5nIHRleHQpOworICAgIFtSYWlzZXNFeGNlcHRpb24sIENhbGxXaXRoPVNjcmlwdFN0
YXRlXSBQcm9taXNlIGxvYWQoRE9NU3RyaW5nIGZvbnQsIG9wdGlvbmFsIERPTVN0cmluZyB0ZXh0
KTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGNoZWNrKERPTVN0cmluZyBmb250LCBv
cHRpb25hbCBET01TdHJpbmcgdGV4dCk7CiAKICAgICBbQ3VzdG9tXSByZWFkb25seSBhdHRyaWJ1
dGUgUHJvbWlzZSByZWFkeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDkwYTBjYWMzYjcx
Y2Q3Y2EyMDc2YzkxN2IxYTIyYjE5ZGVhZDZmODEuLmU2ZTE0ZGFiNzhiOWEyNzdjYjk2ZmVlNTRk
N2Q1OTE4YjFlMzQ3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNjIsNyArNjIsNyBA
QAogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvblN0eWxlU2hl
ZXRzLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRm9udExvYWRl
ci5oIgorI2luY2x1ZGUgIkZvbnRGYWNlU2V0LmgiCiAjaW5jbHVkZSAiRm9ybUNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
LmgiCkBAIC02Njc5LDE0ICs2Njc5LDEwIEBAIERvY3VtZW50JiBEb2N1bWVudDo6ZW5zdXJlVGVt
cGxhdGVEb2N1bWVudCgpCiB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShGT05UX0xPQURfRVZFTlRT
KQotUmVmUHRyPEZvbnRMb2FkZXI+IERvY3VtZW50Ojpmb250cygpCitSZWY8Rm9udEZhY2VTZXQ+
IERvY3VtZW50Ojpmb250cygpCiB7Ci0gICAgaWYgKCFtX2ZvbnRsb2FkZXIpCi0gICAgICAgIG1f
Zm9udGxvYWRlciA9IEZvbnRMb2FkZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICByZXR1cm4gbV9mb250
bG9hZGVyOworICAgIHJldHVybiBmb250U2VsZWN0b3IoKS5mb250RmFjZVNldCgpOwogfQotI2Vu
ZGlmCiAKIGZsb2F0IERvY3VtZW50OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCmluZGV4IDVmOWMyYTI5YjY4MDRmZTk4OGM5YjQ0ODNkNjM5MTY2MGRjYjI4
ODMuLmZmMzNhODg3ODBjMTc0YWRjMDBkYzA2YWUzZDFiMjZlMmIyZDg4NDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCkBAIC0yMDUsOSArMjA1LDcgQEAgY2xhc3MgVGV4dEF1dG9zaXplcjsKIGNsYXNz
IERPTVNlY3VyaXR5UG9saWN5OwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5U
UykKLWNsYXNzIEZvbnRMb2FkZXI7Ci0jZW5kaWYKK2NsYXNzIEZvbnRGYWNlU2V0OwogCiB0eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC0xMjc1LDkgKzEyNzMsNyBAQCBwdWJsaWM6CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiB0b3BPcmlnaW4oKSBj
b25zdCBvdmVycmlkZSBmaW5hbDsKIAotI2lmIEVOQUJMRShGT05UX0xPQURfRVZFTlRTKQotICAg
IFJlZlB0cjxGb250TG9hZGVyPiBmb250cygpOwotI2VuZGlmCisgICAgUmVmPEZvbnRGYWNlU2V0
PiBmb250cygpOwogCiAgICAgdm9pZCBlbnN1cmVQbHVnSW5zSW5qZWN0ZWRTY3JpcHQoRE9NV3Jh
cHBlcldvcmxkJik7CiAKQEAgLTE3NTYsMTAgKzE3NTIsNiBAQCBwcml2YXRlOgogCiAgICAgUmVm
UHRyPENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7CiAKLSNpZiBFTkFCTEUoRk9OVF9M
T0FEX0VWRU5UUykKLSAgICBSZWZQdHI8Rm9udExvYWRlcj4gbV9mb250bG9hZGVyOwotI2VuZGlm
Ci0KICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKICAgICBSZWZQdHI8SlNDOjpJbnB1dEN1cnNvcj4g
bV9pbnB1dEN1cnNvcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKaW5kZXggNjFjNjdj
NGMyMzMzNTgzNjEyMmNiYTczZDI1OTY0YTkwNjlhNGY2ZS4uZGE2ZWQ1MzFiZWJmZjI3NjA3ZjM4
NDVlZTU2YjllNTIxOTUwYmQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCkBAIC0yNjUsNyAr
MjY1LDcgQEAKICAgICBbQ29uZGl0aW9uYWw9Q1NTX1JFR0lPTlNdIERPTU5hbWVkRmxvd0NvbGxl
Y3Rpb24gd2Via2l0R2V0TmFtZWRGbG93cygpOwogCiAjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZB
U0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUCi0gICAgW0NvbmRpdGlvbmFsPUZPTlRfTE9B
RF9FVkVOVFNdIHJlYWRvbmx5IGF0dHJpYnV0ZSBGb250TG9hZGVyIGZvbnRzOworICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBGb250RmFjZVNldCBmb250czsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChF
TkFCTEVfSU9TX1RPVUNIX0VWRU5UUykgJiYgRU5BQkxFX0lPU19UT1VDSF9FVkVOVFMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaAppbmRleCBkMjgyODNhMzNiOWUzNWY1Yjhj
MzA2NGFkNjZmMzc4Y2Y2NTY4ODA4Li41ZTRjNTAwOWZlMjllNTMwNDAxM2QyOTFiY2M2ZDBiOWEw
ODQ0NmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5oCkBAIC01MCw3
ICs1MCw3IEBAIHB1YmxpYzoKICAgICBTVkdGb250RWxlbWVudCogYXNzb2NpYXRlZEZvbnRFbGVt
ZW50KCkgY29uc3Q7CiAgICAgdm9pZCByZWJ1aWxkRm9udEZhY2UoKTsKICAgICAKLSAgICBjb25z
dCBTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9mb250
RmFjZVJ1bGUuZ2V0KCk7IH0KKyAgICBTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxlKCkg
eyByZXR1cm4gbV9mb250RmFjZVJ1bGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBTVkdGb250
RmFjZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271898</attachid>
            <date>2016-02-21 19:44:44 -0800</date>
            <delta_ts>2016-02-21 20:58:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153347-20160221194426.patch</filename>
            <type>text/plain</type>
            <size>94497</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2ODUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY5NjA2ZDFhOWRiZmIz
ZTNjY2VjMWJjNmZiZWFmNmI2MzYxNjY4MC4uYjRjNjRjNjk1ODYwMzcxNWQ3M2E5Y2NjYWQxYWNj
ZjY1ZDYyMWY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NSBAQAorMjAxNi0wMi0yMSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtGb250IExv
YWRpbmddIFNwbGl0IENTU0ZvbnRTZWxlY3RvciBpbnRvIGEgRm9udEZhY2VTZXQgaW1wbGVtZW50
YXRpb24gYW5kIHRoZSByZXN0IG9mIHRoZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMzQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBkb2N1bWVu
dC5mb250cyBKYXZhc2NyaXB0IG9iamVjdC4gSXQgZG9lcyBzbyBieSBicmlkaW5nIHRoZQorICAg
ICAgICBhbHJlYWR5LWV4aXN0aW5nIEZvbnRGYWNlU2V0IEphdmFzY3JpcHQgb2JqZWN0IHdpdGgg
dGhlIENTU0ZvbnRTZWxlY3RvciBXZWJDb3JlIG9iamVjdC4KKyAgICAgICAgQ1NTRm9udFNlbGVj
dG9yIHVzZWQgdG8gaG9sZCBpbnRlcm5hbCBvYmplY3RzIGZvciBlYWNoIEBmb250LWZhY2Ugb2Jq
ZWN0IGluIHRoZQorICAgICAgICBEb2N1bWVudC4gVGhlc2Ugb2JqZWN0cyBoYXZlIGJlZW4gbW92
ZWQgaW50byBDU1NGb250RmFjZVNldCwgc28gQ1NTRm9udFNlbGVjdG9yIHNpbXBseQorICAgICAg
ICBqdXN0IG93bnMgYW4gaW5zdGFuY2Ugb2YgYSBDU1NGb250RmFjZVNldC4KKworICAgICAgICBU
aGUgbGlmZXRpbWUgb2YgdGhlIEZvbnRGYWNlIGFuZCBGb250RmFjZVNldCBvYmplY3RzIGlzIGEg
bGl0dGxlIGludGVyZXN0aW5nOiBiZWNhdXNlCisgICAgICAgIGFsbCB0aGUgb3duZXJzaGlwIHJl
ZmVyZW5jZXMgYXJlIGluc2lkZSB0aGUgV2ViQ29yZSBDU1NGb250RmFjZXssU2V0fSBvYmplY3Rz
LCB0aGUKKyAgICAgICAgaGlnaGVyLWxldmVsIEphdmFzY3JpcHQgRm9udEZhY2V7LFNldH0gb2Jq
ZWN0cyBhcmUgaGVsZCB0aHJvdWdoIGEgV2Vha1B0ci4gVGhpcyBtZWFucworICAgICAgICB0aGF0
IGlmIGFsbCB0aGUgcmVmZXJlbmNlcyB0byB0aGVzZSBoaWdoZXItbGV2ZWwgb2JqZWN0cyBnbyBh
d2F5LCBhbmQgeW91IHJlLXF1ZXJ5IHRoZQorICAgICAgICBkb2N1bWVudCBmb3IgaXRzIEZvbnRG
YWNlIG9iamVjdHMsIHlvdSBtYXkgZ2V0IGEgbmV3IG9iamVjdCAoYWxiZWl0IHdpdGggdGhlIHNh
bWUKKyAgICAgICAgc3RhdGUgYXMgYSBwcmV2aW91cyBvYmplY3QpLiBIb3dldmVyLCB0aGlzIHdv
bid0IG9jY3VyIGlmIHRoZXJlIGFyZSBhbnkgcmVmZXJlbmNlcyB0bworICAgICAgICB0aGUgb2xk
IG9iamVjdCwgd2hpY2ggbWVhbnMgaXQgaXMgYWxtb3N0IG5vdCBvYnNlcnZhYmxlLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggZG9lc24ndCBpbXBsZW1lbnQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVu
IHRoZSBDU1NPTSBhbmQgdGhlIEZvbnRGYWNlCisgICAgICAgIG9iamVjdHMuIENoYW5naW5nIG9u
ZSBzaG91bGQgcmVzdWx0IGluIGEgY2hhbmdlIGluIHRoZSBvdGhlciwgYnV0IHRoYXQgd2lsbCBi
ZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBhIGZvcnRoY29taW5nIHBhdGNoLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggZG9lcyBpbXBsZW1lbnQgKGFuZCB0ZXN0KSB0aGUgYWJpbGl0eSB0byBhZGQg
YSBuZXcgRm9udEZhY2UgdG8gdGhlIERvY3VtZW50CisgICAgICAgIHRvIGNhdXNlIGEgcmVsYXlv
dXQsIGFzIHdlbGwgYXMgY2hhbmdpbmcgcHJvcGVydGllcyBvZiBleGlzdGluZyBGb250RmFjZSBv
YmplY3RzIGFscmVhZHkKKyAgICAgICAgaW4gdGhlIERvY3VtZW50IHRvIGNhdXNlIGEgcmVsYXlv
dXQuCisKKyAgICAgICAgVGVzdDogZmFzdC90ZXh0L2ZvbnQtZmFjZS1zZXQtZG9jdW1lbnQuaHRt
bAorCisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmV0Y2hIZWFkZXJzOjpJdGVyYXRvcjo6bmV4dCk6IFBhc3MgYW4gZXh0cmEgYXJn
dW1lbnQuCisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0tleVZhbHVlSXRlcmF0b3IuaDogVGhlIEV4ZWNTdGF0ZSBpcyBuZWNl
c3NhcnkgdG8gYnVpbGQgYW4gZXh0ZXJuYWwKKyAgICAgICAgd3JhcHBlciBmcm9tIGFuIGV4aXN0
aW5nIENTU0ZvbnRGYWNlIG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkpTS2V5VmFsdWVJdGVy
YXRvcjxKU1dyYXBwZXI+OjpuZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmFwcGVuZFNvdXJjZXMpOiBNb3ZlZCBmcm9t
IENTU0ZvbnRTZWxlY3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpDU1NGb250
RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6bm90aWZ5Q2xpZW50c09mRm9u
dFByb3BlcnR5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpzZXRGYW1p
bGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Y2FsY3VsYXRlU3R5bGUpOiBT
aGFyZWQgY29kZSBiZXR3ZWVuIENTU0ZvbnRGYWNlU2V0IGFuZAorICAgICAgICBDU1NGb250RmFj
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpzZXRTdHlsZSk6IFVwZGF0ZSB0byB1
c2UgY2FsY3VsYXRlU3R5bGUoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpjYWxj
dWxhdGVXZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpzZXRX
ZWlnaHQpOiBVcGRhdGUgdG8gdXNlIGNhY3VsYXRlV2VpZ2h0KCkuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250RmFjZTo6c2V0VW5pY29kZVJhbmdlKTogTm90aWZ5IGNsaWVudHMuCisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250RmFjZTo6c2V0VmFyaWFudExpZ2F0dXJlcyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnNldFZhcmlhbnRQb3NpdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnNldFZhcmlhbnRDYXBzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6c2V0VmFyaWFudE51bWVyaWMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpzZXRWYXJpYW50QWx0ZXJuYXRlcyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnNldFZhcmlhbnRFYXN0QXNpYW4p
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpzZXRGZWF0dXJlU2V0dGlu
Z3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpyZW1vdmVDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OndyYXBwZXIpOiBCdWlsZCBhIG5ldyB3
cmFwcGVyIGlmIG9uZSBkb2Vzbid0IGFscmVhZHkKKyAgICAgICAgZXhpc3QuIE5vdGUgdGhhdCB0
aGlzIHJlcXVpcmVzIGFuIEV4ZWNTdGF0ZSB0byBjcmVhdGUgYSBwcm9taXNlLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udEZhY2U6OnNldFN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
b250RmFjZTo6Zm9udExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6cHVt
cCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9udCk6CisgICAgICAgICogY3Nz
L0NTU0ZvbnRGYWNlLmg6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0OjpDU1NGb250RmFjZVNldCk6IE1vdmVkIGNvZGUg
ZnJvbSBDU1NGb250U2VsZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6
fkNTU0ZvbnRGYWNlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0OjphZGRD
bGllbnQpOiBUaGlzIG9iamVjdCBjYW4gbm93IGhhdmUgbXVsdGlwbGUKKyAgICAgICAgY2xpZW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0OjpyZW1vdmVDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6OmluY3JlbWVudEFjdGl2ZUNvdW50KTogVXBk
YXRlIGZvciBtdWx0aXBsZSBjbGllbnRzLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VT
ZXQ6OmRlY3JlbWVudEFjdGl2ZUNvdW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NG
b250RmFjZVNldDo6aGFzRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6
cmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseSk6IE1vdmVkIGZyb20KKyAgICAgICAgQ1NT
Rm9udFNlbGVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6OmZhbWlseU5h
bWVGcm9tUHJpbWl0aXZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNl
dDo6YWRkVG9GYWNlc0xvb2t1cFRhYmxlKTogVGhpcyBoZWxwZXIgZnVuY3Rpb24gY2FuCisgICAg
ICAgIGJlIHVzZWQgd2hlbiBhIHByb3BlcnR5IG9mIGEgRm9udEZhY2UgaXMgY2hhbmdlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0OjphZGQpOiBVcGRhdGUgdG8gdXNlIGFkZFRv
RmFjZXNMb29rdXBUYWJsZSgpLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6OnJl
bW92ZUZyb21GYWNlc0xvb2t1cFRhYmxlKTogU2FtZSBhcworICAgICAgICBhZGRUb0ZhY2VzTG9v
a3VwVGFibGUoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0OjpyZW1vdmUpOiBV
cGRhdGUgdG8gdXNlIHJlbW92ZUZyb21GYWNlc0xvb2t1cFRhYmxlKCkuCisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNldDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZh
Y2VTZXQ6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUZvbnRUcmFpdHNN
YXNrKTogTW92ZWQgZnJvbSBDU1NGb250U2VsZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpDU1NG
b250RmFjZVNldDo6bWF0Y2hpbmdGYWNlcyk6IFVwZGF0ZSB0byB1c2UgbmV3IGRhdGEgc3RydWN0
dXJlcy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFyYXRvcjo6Rm9udEZhY2VDb21w
YXJhdG9yKTogTW92ZWQgZnJvbQorICAgICAgICBDU1NGb250U2VsZWN0b3IuCisgICAgICAgIChX
ZWJDb3JlOjpGb250RmFjZUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRm9udEZhY2VTZXQ6OmdldEZvbnRGYWNlKTogVXBkYXRlIHRvIHVzZSBuZXcgZGF0YSBz
dHJ1Y3R1cmVzLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6OmZvbnRTdGF0ZUNo
YW5nZWQpOiBVcGRhdGUgdG8gdXNlIG11bHRpcGxlIGNsaWVudHMuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250RmFjZVNldDo6Zm9udFByb3BlcnR5Q2hhbmdlZCk6IFdlIG11c3QgdXBkYXRlIG91
ciBpbnRlcm5hbAorICAgICAgICBkYXRhIHN0cnVjdHVyZSBpZiB0aGUgZmFtaWx5IG5hbWUgY2hh
bmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RGYW1pbGllcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpmYW1pbGllc0ludGVyc2VjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNldDo6bG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
U1NGb250RmFjZVNldDo6c3RhdGVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NT
Rm9udEZhY2VTZXQuaDogTm93IG5lZWRzIHRvIGJlIFJlZkNvdW50ZWQuIE5ldyBkYXRhIHN0cnVj
dHVyZXMgYXJlCisgICAgICAgIHRha2VuIGZyb20gQ1NTRm9udFNlbGVjdG9yLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udEZhY2VTZXRDbGllbnQ6OmZhY2VGaW5pc2hlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZVNldENsaWVudDo6Zm9udE1vZGlmaWVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xpZW50OjpzdGFydGVkTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZVNldENsaWVudDo6Y29tcGxldGVkTG9hZGluZyk6CisgICAgICAg
ICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmg6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rv
ci5jcHA6IE1vdmUgY29kZSBpbnRvIENTU0ZvbnRGYWNlU2V0LgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Rm9udFNlbGVjdG9yOjp+Q1NTRm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVj
dG9yOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9u
dEZhY2VSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udE1vZGlm
aWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZh
bWlseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmNsZWFyRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphcHBlbmRTb3VyY2VzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6ZmFtaWx5TmFtZUZyb21Q
cmltaXRpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpy
ZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRGYWNlQ29tcGFyYXRvcjo6Rm9udEZhY2VDb21wYXJhdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnRGYWNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmg6CisgICAgICAgICogY3NzL0NTU1Nl
Z21lbnRlZEZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlZ21lbnRlZEZvbnRG
YWNlOjpDU1NTZWdtZW50ZWRGb250RmFjZSk6CisgICAgICAgICogY3NzL0NTU1NlZ21lbnRlZEZv
bnRGYWNlLmg6CisgICAgICAgICogY3NzL0ZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRGYWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OkZvbnRGYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpjcmVhdGVXZWFrUHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRGYWNlOjpmb250U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRGYWNlOjpzdGF0ZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9Gb250RmFj
ZS5oOgorICAgICAgICAqIGNzcy9Gb250RmFjZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250RmFjZVNldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjpGb250
RmFjZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZVNldDo6fkZvbnRGYWNlU2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjpJdGVyYXRvcjo6bmV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250RmFjZVNldDo6aGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNl
U2V0OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjphZGQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
RmFjZVNldDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OmxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OmNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRGYWNlU2V0OjpzdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OmNh
blN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZh
Y2VTZXQ6OmZhY2VGaW5pc2hlZCk6CisgICAgICAgICogY3NzL0ZvbnRGYWNlU2V0Lmg6CisgICAg
ICAgICogY3NzL0ZvbnRGYWNlU2V0LmlkbDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZvbnRzKToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOgorICAgICAgICAqIHN2Zy9TVkdGb250
RmFjZUVsZW1lbnQuaDoKKwogMjAxNi0wMi0xOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgbW9yZSBjb25jcmV0ZSB0eXBlcyBmb3IgcGFyc2lu
ZyBwb3NpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0
Y2hIZWFkZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJz
LmNwcAppbmRleCA4MTIzZTg2YjkyMjcwMzlkMGNhMjBjZDkzY2M5M2E0YzAzMjc1ZjdjLi4xMDhm
YTdiMWQ1NWJiNDUzYmRkNjM2NDBjMWM5OThlOTc4YjMyMTBlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCkBAIC0xNzksNyArMTc5LDcgQEAgdm9p
ZCBGZXRjaEhlYWRlcnM6OmZpbGwoY29uc3QgRmV0Y2hIZWFkZXJzKiBoZWFkZXJzKQogICAgIH0K
IH0KIAotYm9vbCBGZXRjaEhlYWRlcnM6Okl0ZXJhdG9yOjpuZXh0KFN0cmluZyYgbmV4dEtleSwg
U3RyaW5nJiBuZXh0VmFsdWUpCitib29sIEZldGNoSGVhZGVyczo6SXRlcmF0b3I6Om5leHQoSlND
OjpFeGVjU3RhdGUmLCBTdHJpbmcmIG5leHRLZXksIFN0cmluZyYgbmV4dFZhbHVlKQogewogICAg
IHdoaWxlIChtX2N1cnJlbnRJbmRleCA8IG1fa2V5cy5zaXplKCkpIHsKICAgICAgICAgYXV0byYg
a2V5ID0gbV9rZXlzW21fY3VycmVudEluZGV4KytdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmV0Y2gvRmV0Y2hIZWFkZXJzLmgKaW5kZXggZjM1ODFkMzI0YmU4Njk1NTViNDU2OTkyNWY0MDc4
NGJkMmZlYjc2Ni4uYWU3OTUwYTRiZDU5NWUyZTNhMmIwOGFkMDQxMmU4MzdiODI1ZGMzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5oCkBAIC0zMyw2ICsz
MywxMCBAQAogCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogCituYW1lc3BhY2UgSlNDIHsK
K2NsYXNzIEV4ZWNTdGF0ZTsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIGlu
dCBFeGNlcHRpb25Db2RlOwpAQCAtNzAsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHVzaW5n
IEtleSA9IFN0cmluZzsKICAgICAgICAgdXNpbmcgVmFsdWUgPSBTdHJpbmc7CiAKLSAgICAgICAg
Ym9vbCBuZXh0KFN0cmluZyYgbmV4dEtleSwgU3RyaW5nJiBuZXh0VmFsdWUpOworICAgICAgICBi
b29sIG5leHQoSlNDOjpFeGVjU3RhdGUmLCBTdHJpbmcmIG5leHRLZXksIFN0cmluZyYgbmV4dFZh
bHVlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZjxGZXRjaEhlYWRlcnM+IG1faGVhZGVy
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTS2V5VmFsdWVJdGVy
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmgK
aW5kZXggZmJiZmZkMGM1N2JiMGFlZTA5MmJiYjNiZjQ4Y2M5MmU4MDc5OGM5ZC4uOTg1NjYzNjdh
NzgyZDVhNjA0ZWEzYTUzZDk2NjdjNWFlMDk0ZjRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmgKQEAgLTEyMiw3ICsxMjIsNyBAQCBib29s
IEpTS2V5VmFsdWVJdGVyYXRvcjxKU1dyYXBwZXI+OjpuZXh0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlJiB2YQogewogICAgIHR5cGVuYW1lIERPTVdyYXBwZWQ6Okl0ZXJhdG9y
OjpLZXkgbmV4dEtleTsKICAgICB0eXBlbmFtZSBET01XcmFwcGVkOjpJdGVyYXRvcjo6VmFsdWUg
bmV4dFZhbHVlOwotICAgIGlmIChtX2l0ZXJhdG9yLm5leHQobmV4dEtleSwgbmV4dFZhbHVlKSkg
eworICAgIGlmIChtX2l0ZXJhdG9yLm5leHQoc3RhdGUsIG5leHRLZXksIG5leHRWYWx1ZSkpIHsK
ICAgICAgICAgdmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCmluZGV4IDU1MmU5OWNmYTFlMWVh
YWE0YWEzMjY5NTkwMDM4ZGFhYTVhMDIwMTcuLjI0MGUyNDQ3Y2NiODgzNWFkMzA2NzE3YTU2OTBi
OTg5Mjk2ZjVhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcApAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlLmgiCiAKICNpbmNsdWRlICJDU1NGb250RmFjZVNv
dXJjZS5oIgorI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU3JjVmFsdWUuaCIKICNpbmNsdWRlICJDU1NG
b250RmFtaWx5LmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZlYXR1cmVWYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU0ZvbnRTZWxlY3Rvci5oIgpAQCAtMzgsMTYgKzM5LDQ4IEBACiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0j
aW5jbHVkZSAiRm9udExvYWRlci5oIgorI2luY2x1ZGUgIkZvbnRGYWNlLmgiCiAjaW5jbHVkZSAi
Rm9udFZhcmlhbnRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCisj
aW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NTRm9udEZh
Y2U6OkNTU0ZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yLCBGb250RmFjZSog
d3JhcHBlciwgYm9vbCBpc0xvY2FsRmFsbGJhY2spCit2b2lkIENTU0ZvbnRGYWNlOjphcHBlbmRT
b3VyY2VzKENTU0ZvbnRGYWNlJiBmb250RmFjZSwgQ1NTVmFsdWVMaXN0JiBzcmNMaXN0LCBEb2N1
bWVudCogZG9jdW1lbnQsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93
VHJlZSkKK3sKKyAgICBmb3IgKGF1dG8mIHNyYyA6IHNyY0xpc3QpIHsKKyAgICAgICAgLy8gQW4g
aXRlbSBpbiB0aGUgbGlzdCBlaXRoZXIgc3BlY2lmaWVzIGEgc3RyaW5nIChsb2NhbCBmb250IG5h
bWUpIG9yIGEgVVJMIChyZW1vdGUgZm9udCB0byBkb3dubG9hZCkuCisgICAgICAgIENTU0ZvbnRG
YWNlU3JjVmFsdWUmIGl0ZW0gPSBkb3duY2FzdDxDU1NGb250RmFjZVNyY1ZhbHVlPihzcmMuZ2V0
KCkpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9udEZhY2VTb3VyY2U+IHNvdXJjZTsK
KyAgICAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSBudWxscHRyOwor
ICAgICAgICBib29sIGZvdW5kU1ZHRm9udCA9IGZhbHNlOworCisjaWYgRU5BQkxFKFNWR19GT05U
UykKKyAgICAgICAgZm91bmRTVkdGb250ID0gaXRlbS5pc1NWR0ZvbnRGYWNlU3JjKCkgfHwgaXRl
bS5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyAgICAgICAgZm9udEZhY2VFbGVtZW50ID0gaXRlbS5z
dmdGb250RmFjZUVsZW1lbnQoKTsKKyNlbmRpZgorICAgICAgICBpZiAoIWl0ZW0uaXNMb2NhbCgp
KSB7CisgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCA/IGRvY3VtZW50
LT5zZXR0aW5ncygpIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGJvb2wgYWxsb3dEb3dubG9hZGlu
ZyA9IGZvdW5kU1ZHRm9udCB8fCAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmRvd25sb2FkYWJsZUJp
bmFyeUZvbnRzRW5hYmxlZCgpKTsKKyAgICAgICAgICAgIGlmIChhbGxvd0Rvd25sb2FkaW5nICYm
IGl0ZW0uaXNTdXBwb3J0ZWRGb3JtYXQoKSAmJiBkb2N1bWVudCkgeworICAgICAgICAgICAgICAg
IGlmIChDYWNoZWRGb250KiBjYWNoZWRGb250ID0gaXRlbS5jYWNoZWRGb250KGRvY3VtZW50LCBm
b3VuZFNWR0ZvbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpKQor
ICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNl
U291cmNlPihmb250RmFjZSwgaXRlbS5yZXNvdXJjZSgpLCBjYWNoZWRGb250KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5p
cXVlPENTU0ZvbnRGYWNlU291cmNlPihmb250RmFjZSwgaXRlbS5yZXNvdXJjZSgpLCBudWxscHRy
LCBmb250RmFjZUVsZW1lbnQpOworCisgICAgICAgIGlmIChzb3VyY2UpCisgICAgICAgICAgICBm
b250RmFjZS5hZG9wdFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkpOworICAgIH0KKyAgICBmb250RmFj
ZS5zb3VyY2VzUG9wdWxhdGVkKCk7Cit9CisKK0NTU0ZvbnRGYWNlOjpDU1NGb250RmFjZShDU1NG
b250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciwgU3R5bGVSdWxlRm9udEZhY2UqIGNzc0Nvbm5lY3Rp
b24sIEZvbnRGYWNlKiB3cmFwcGVyLCBib29sIGlzTG9jYWxGYWxsYmFjaykKICAgICA6IG1fZm9u
dFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKLSAgICAsIG1fd3JhcHBlcih3cmFwcGVyKQorICAgICwg
bV9jc3NDb25uZWN0aW9uKGNzc0Nvbm5lY3Rpb24pCisgICAgLCBtX3dyYXBwZXIod3JhcHBlciA/
IHdyYXBwZXItPmNyZWF0ZVdlYWtQdHIoKSA6IFdlYWtQdHI8Rm9udEZhY2U+KCkpCiAgICAgLCBt
X2lzTG9jYWxGYWxsYmFjayhpc0xvY2FsRmFsbGJhY2spCiB7CiB9CkBAIC01Niw2ICs4OSwxNSBA
QCBDU1NGb250RmFjZTo6fkNTU0ZvbnRGYWNlKCkKIHsKIH0KIAordm9pZCBDU1NGb250RmFjZTo6
bm90aWZ5Q2xpZW50c09mRm9udFByb3BlcnR5Q2hhbmdlKCkKK3sKKyAgICBhdXRvIGNsaWVudHND
b3B5ID0gbV9jbGllbnRzOworICAgIGZvciAoYXV0byogY2xpZW50IDogY2xpZW50c0NvcHkpIHsK
KyAgICAgICAgaWYgKG1fY2xpZW50cy5jb250YWlucyhjbGllbnQpKQorICAgICAgICAgICAgY2xp
ZW50LT5mb250UHJvcGVydHlDaGFuZ2VkKCp0aGlzKTsKKyAgICB9Cit9CisKIGJvb2wgQ1NTRm9u
dEZhY2U6OnNldEZhbWlsaWVzKENTU1ZhbHVlJiBmYW1pbHkpCiB7CiAgICAgaWYgKCFpczxDU1NW
YWx1ZUxpc3Q+KGZhbWlseSkpCkBAIC02NSw3OCArMTA3LDk0IEBAIGJvb2wgQ1NTRm9udEZhY2U6
OnNldEZhbWlsaWVzKENTU1ZhbHVlJiBmYW1pbHkpCiAgICAgaWYgKCFmYW1pbHlMaXN0Lmxlbmd0
aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBv
bGRGYW1pbGllcyA9IG1fZmFtaWxpZXM7CiAgICAgbV9mYW1pbGllcyA9ICZmYW1pbHlMaXN0Owor
CisgICAgYXV0byBjbGllbnRzQ29weSA9IG1fY2xpZW50czsKKyAgICBmb3IgKGF1dG8qIGNsaWVu
dCA6IGNsaWVudHNDb3B5KSB7CisgICAgICAgIGlmIChtX2NsaWVudHMuY29udGFpbnMoY2xpZW50
KSkKKyAgICAgICAgICAgIGNsaWVudC0+Zm9udFByb3BlcnR5Q2hhbmdlZCgqdGhpcywgb2xkRmFt
aWxpZXMuZ2V0KCkpOworICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENTU0Zv
bnRGYWNlOjpzZXRTdHlsZShDU1NWYWx1ZSYgc3R5bGUpCitPcHRpb25hbDxGb250VHJhaXRzTWFz
az4gQ1NTRm9udEZhY2U6OmNhbGN1bGF0ZVN0eWxlKENTU1ZhbHVlJiBzdHlsZSkKIHsKICAgICBp
ZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPihzdHlsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAKLSAgICB1bnNpZ25lZCBzdHlsZU1hc2sgPSAwOwog
ICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHN0eWxlKS5nZXRWYWx1ZUlE
KCkpIHsKICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICBzdHlsZU1hc2sgPSBGb250
U3R5bGVOb3JtYWxNYXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRTdHls
ZU5vcm1hbE1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZUl0YWxpYzoKICAgICBjYXNlIENTU1ZhbHVl
T2JsaXF1ZToKLSAgICAgICAgc3R5bGVNYXNrID0gRm9udFN0eWxlSXRhbGljTWFzazsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250U3R5bGVJdGFsaWNNYXNrOwogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHN0eWxlTWFzayA9IEZvbnRTdHlsZU5vcm1hbE1hc2s7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4gRm9udFN0eWxlTm9ybWFsTWFzazsKICAgICB9CiAKLSAgICBt
X3RyYWl0c01hc2sgPSBzdGF0aWNfY2FzdDxGb250VHJhaXRzTWFzaz4oKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX3RyYWl0c01hc2spICYgKH5Gb250U3R5bGVNYXNrKSkgfCBzdHlsZU1hc2spOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBGb250U3R5bGVOb3JtYWxNYXNrOwogfQogCi1i
b29sIENTU0ZvbnRGYWNlOjpzZXRXZWlnaHQoQ1NTVmFsdWUmIHdlaWdodCkKK2Jvb2wgQ1NTRm9u
dEZhY2U6OnNldFN0eWxlKENTU1ZhbHVlJiBzdHlsZSkKK3sKKyAgICBpZiAoYXV0byBtYXNrID0g
Y2FsY3VsYXRlU3R5bGUoc3R5bGUpKSB7CisgICAgICAgIG1fdHJhaXRzTWFzayA9IHN0YXRpY19j
YXN0PEZvbnRUcmFpdHNNYXNrPigoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJhaXRzTWFzaykg
JiAofkZvbnRTdHlsZU1hc2spKSB8IG1hc2sudmFsdWUoKSk7CisKKyAgICAgICAgbm90aWZ5Q2xp
ZW50c09mRm9udFByb3BlcnR5Q2hhbmdlKCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworT3B0aW9uYWw8Rm9udFRyYWl0c01hc2s+IENTU0Zv
bnRGYWNlOjpjYWxjdWxhdGVXZWlnaHQoQ1NTVmFsdWUmIHdlaWdodCkKIHsKICAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPih3ZWlnaHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogCi0gICAgdW5zaWduZWQgd2VpZ2h0TWFzayA9IDA7CiAgICAg
c3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4od2VpZ2h0KS5nZXRWYWx1ZUlEKCkp
IHsKICAgICBjYXNlIENTU1ZhbHVlQm9sZDoKICAgICBjYXNlIENTU1ZhbHVlQm9sZGVyOgogICAg
IGNhc2UgQ1NTVmFsdWU3MDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0NzAwTWFz
azsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0NzAwTWFzazsKICAg
ICBjYXNlIENTU1ZhbHVlTm9ybWFsOgogICAgIGNhc2UgQ1NTVmFsdWU0MDA6Ci0gICAgICAgIHdl
aWdodE1hc2sgPSBGb250V2VpZ2h0NDAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybiBGb250V2VpZ2h0NDAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlOTAwOgotICAgICAgICB3
ZWlnaHRNYXNrID0gRm9udFdlaWdodDkwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBy
ZXR1cm4gRm9udFdlaWdodDkwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZTgwMDoKLSAgICAgICAg
d2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQ4MDBNYXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIEZvbnRXZWlnaHQ4MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWU2MDA6Ci0gICAgICAg
IHdlaWdodE1hc2sgPSBGb250V2VpZ2h0NjAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiBGb250V2VpZ2h0NjAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlNTAwOgotICAgICAg
ICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDUwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm4gRm9udFdlaWdodDUwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZTMwMDoKLSAgICAg
ICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQzMDBNYXNrOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIEZvbnRXZWlnaHQzMDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWVMaWdodGVyOgog
ICAgIGNhc2UgQ1NTVmFsdWUyMDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0MjAw
TWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0MjAwTWFzazsK
ICAgICBjYXNlIENTU1ZhbHVlMTAwOgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDEw
ME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFdlaWdodDEwME1hc2s7
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQ0MDBNYXNrOwot
ICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ0MDBNYXNrOwogICAgIH0K
IAotICAgIG1fdHJhaXRzTWFzayA9IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fdHJhaXRzTWFzaykgJiAofkZvbnRXZWlnaHRNYXNrKSkgfCB3ZWln
aHRNYXNrKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gRm9udFdlaWdodDQwME1hc2s7
Cit9CisKK2Jvb2wgQ1NTRm9udEZhY2U6OnNldFdlaWdodChDU1NWYWx1ZSYgd2VpZ2h0KQorewor
ICAgIGlmIChhdXRvIG1hc2sgPSBjYWxjdWxhdGVXZWlnaHQod2VpZ2h0KSkgeworICAgICAgICBt
X3RyYWl0c01hc2sgPSBzdGF0aWNfY2FzdDxGb250VHJhaXRzTWFzaz4oKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX3RyYWl0c01hc2spICYgKH5Gb250V2VpZ2h0TWFzaykpIHwgbWFzay52YWx1ZSgp
KTsKKworICAgICAgICBub3RpZnlDbGllbnRzT2ZGb250UHJvcGVydHlDaGFuZ2UoKTsKKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
Q1NTRm9udEZhY2U6OnNldFVuaWNvZGVSYW5nZShDU1NWYWx1ZSYgdW5pY29kZVJhbmdlKQpAQCAt
MTUwLDYgKzIwOCw5IEBAIGJvb2wgQ1NTRm9udEZhY2U6OnNldFVuaWNvZGVSYW5nZShDU1NWYWx1
ZSYgdW5pY29kZVJhbmdlKQogICAgICAgICBDU1NVbmljb2RlUmFuZ2VWYWx1ZSYgcmFuZ2UgPSBk
b3duY2FzdDxDU1NVbmljb2RlUmFuZ2VWYWx1ZT4ocmFuZ2VWYWx1ZS5nZXQoKSk7CiAgICAgICAg
IG1fcmFuZ2VzLmFwcGVuZChVbmljb2RlUmFuZ2UocmFuZ2UuZnJvbSgpLCByYW5nZS50bygpKSk7
CiAgICAgfQorCisgICAgbm90aWZ5Q2xpZW50c09mRm9udFByb3BlcnR5Q2hhbmdlKCk7CisKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTYwLDYgKzIyMSw5IEBAIGJvb2wgQ1NTRm9udEZhY2U6
OnNldFZhcmlhbnRMaWdhdHVyZXMoQ1NTVmFsdWUmIHZhcmlhbnRMaWdhdHVyZXMpCiAgICAgbV92
YXJpYW50U2V0dGluZ3MuZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyA9IGxpZ2F0dXJlcy5kaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzOwogICAgIG1fdmFyaWFudFNldHRpbmdzLmhpc3RvcmljYWxMaWdhdHVy
ZXMgPSBsaWdhdHVyZXMuaGlzdG9yaWNhbExpZ2F0dXJlczsKICAgICBtX3ZhcmlhbnRTZXR0aW5n
cy5jb250ZXh0dWFsQWx0ZXJuYXRlcyA9IGxpZ2F0dXJlcy5jb250ZXh0dWFsQWx0ZXJuYXRlczsK
KworICAgIG5vdGlmeUNsaWVudHNPZkZvbnRQcm9wZXJ0eUNoYW5nZSgpOworCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTE2OCw2ICsyMzIsOSBAQCBib29sIENTU0ZvbnRGYWNlOjpzZXRWYXJp
YW50UG9zaXRpb24oQ1NTVmFsdWUmIHZhcmlhbnRQb3NpdGlvbikKICAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPih2YXJpYW50UG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgbV92YXJpYW50U2V0dGluZ3MucG9zaXRpb24gPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFyaWFudFBvc2l0aW9uKTsKKworICAgIG5vdGlmeUNsaWVudHNPZkZvbnRQcm9wZXJ0eUNo
YW5nZSgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE3Niw2ICsyNDMsOSBAQCBib29s
IENTU0ZvbnRGYWNlOjpzZXRWYXJpYW50Q2FwcyhDU1NWYWx1ZSYgdmFyaWFudENhcHMpCiAgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFyaWFudENhcHMpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgbV92YXJpYW50U2V0dGluZ3MuY2FwcyA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPih2YXJpYW50Q2Fwcyk7CisKKyAgICBub3RpZnlDbGllbnRzT2ZGb250UHJvcGVydHlD
aGFuZ2UoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xODcsNiArMjU3LDkgQEAgYm9v
bCBDU1NGb250RmFjZTo6c2V0VmFyaWFudE51bWVyaWMoQ1NTVmFsdWUmIHZhcmlhbnROdW1lcmlj
KQogICAgIG1fdmFyaWFudFNldHRpbmdzLm51bWVyaWNGcmFjdGlvbiA9IG51bWVyaWMuZnJhY3Rp
b247CiAgICAgbV92YXJpYW50U2V0dGluZ3MubnVtZXJpY09yZGluYWwgPSBudW1lcmljLm9yZGlu
YWw7CiAgICAgbV92YXJpYW50U2V0dGluZ3MubnVtZXJpY1NsYXNoZWRaZXJvID0gbnVtZXJpYy5z
bGFzaGVkWmVybzsKKworICAgIG5vdGlmeUNsaWVudHNPZkZvbnRQcm9wZXJ0eUNoYW5nZSgpOwor
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE5NSw2ICsyNjgsOSBAQCBib29sIENTU0ZvbnRG
YWNlOjpzZXRWYXJpYW50QWx0ZXJuYXRlcyhDU1NWYWx1ZSYgdmFyaWFudEFsdGVybmF0ZXMpCiAg
ICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFyaWFudEFsdGVybmF0ZXMpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgbV92YXJpYW50U2V0dGluZ3MuYWx0ZXJuYXRlcyA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YXJpYW50QWx0ZXJuYXRlcyk7CisKKyAgICBub3RpZnlD
bGllbnRzT2ZGb250UHJvcGVydHlDaGFuZ2UoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0yMDQsNiArMjgwLDkgQEAgYm9vbCBDU1NGb250RmFjZTo6c2V0VmFyaWFudEVhc3RBc2lhbihD
U1NWYWx1ZSYgdmFyaWFudEVhc3RBc2lhbikKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5lYXN0QXNp
YW5WYXJpYW50ID0gZWFzdEFzaWFuLnZhcmlhbnQ7CiAgICAgbV92YXJpYW50U2V0dGluZ3MuZWFz
dEFzaWFuV2lkdGggPSBlYXN0QXNpYW4ud2lkdGg7CiAgICAgbV92YXJpYW50U2V0dGluZ3MuZWFz
dEFzaWFuUnVieSA9IGVhc3RBc2lhbi5ydWJ5OworCisgICAgbm90aWZ5Q2xpZW50c09mRm9udFBy
b3BlcnR5Q2hhbmdlKCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjE4LDYgKzI5Nyw5
IEBAIGJvb2wgQ1NTRm9udEZhY2U6OnNldEZlYXR1cmVTZXR0aW5ncyhDU1NWYWx1ZSYgZmVhdHVy
ZVNldHRpbmdzKQogICAgICAgICBDU1NGb250RmVhdHVyZVZhbHVlJiBmZWF0dXJlID0gZG93bmNh
c3Q8Q1NTRm9udEZlYXR1cmVWYWx1ZT4ocmFuZ2VWYWx1ZS5nZXQoKSk7CiAgICAgICAgIG1fZmVh
dHVyZVNldHRpbmdzLmluc2VydChGb250RmVhdHVyZShmZWF0dXJlLnRhZygpLCBmZWF0dXJlLnZh
bHVlKCkpKTsKICAgICB9CisKKyAgICBub3RpZnlDbGllbnRzT2ZGb250UHJvcGVydHlDaGFuZ2Uo
KTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMzcsOSArMzE5LDM5IEBAIHZvaWQgQ1NT
Rm9udEZhY2U6OmFkZENsaWVudChDbGllbnQmIGNsaWVudCkKIAogdm9pZCBDU1NGb250RmFjZTo6
cmVtb3ZlQ2xpZW50KENsaWVudCYgY2xpZW50KQogeworICAgIEFTU0VSVChtX2NsaWVudHMuY29u
dGFpbnMoJmNsaWVudCkpOwogICAgIG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKK1Jl
ZjxGb250RmFjZT4gQ1NTRm9udEZhY2U6OndyYXBwZXIoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0
ZSkKK3sKKyAgICBpZiAobV93cmFwcGVyKQorICAgICAgICByZXR1cm4gUmVmPEZvbnRGYWNlPigq
bV93cmFwcGVyLmdldCgpKTsKKworICAgIFJlZjxGb250RmFjZT4gd3JhcHBlciA9IEZvbnRGYWNl
OjpjcmVhdGUoZXhlY1N0YXRlLCAqdGhpcyk7CisgICAgc3dpdGNoIChtX3N0YXR1cykgeworICAg
IGNhc2UgU3RhdHVzOjpQZW5kaW5nOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YXR1czo6
TG9hZGluZzoKKyAgICAgICAgd3JhcHBlci0+Zm9udFN0YXRlQ2hhbmdlZCgqdGhpcywgU3RhdHVz
OjpQZW5kaW5nLCBTdGF0dXM6OkxvYWRpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0
YXR1czo6VGltZWRPdXQ6CisgICAgICAgIHdyYXBwZXItPmZvbnRTdGF0ZUNoYW5nZWQoKnRoaXMs
IFN0YXR1czo6UGVuZGluZywgU3RhdHVzOjpMb2FkaW5nKTsKKyAgICAgICAgd3JhcHBlci0+Zm9u
dFN0YXRlQ2hhbmdlZCgqdGhpcywgU3RhdHVzOjpMb2FkaW5nLCBTdGF0dXM6OlRpbWVkT3V0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGF0dXM6OlN1Y2Nlc3M6CisgICAgICAgIHdyYXBw
ZXItPmZvbnRTdGF0ZUNoYW5nZWQoKnRoaXMsIFN0YXR1czo6UGVuZGluZywgU3RhdHVzOjpMb2Fk
aW5nKTsKKyAgICAgICAgd3JhcHBlci0+Zm9udFN0YXRlQ2hhbmdlZCgqdGhpcywgU3RhdHVzOjpQ
ZW5kaW5nLCBTdGF0dXM6OlN1Y2Nlc3MpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YXR1
czo6RmFpbHVyZToKKyAgICAgICAgd3JhcHBlci0+Zm9udFN0YXRlQ2hhbmdlZCgqdGhpcywgU3Rh
dHVzOjpQZW5kaW5nLCBTdGF0dXM6OkxvYWRpbmcpOworICAgICAgICB3cmFwcGVyLT5mb250U3Rh
dGVDaGFuZ2VkKCp0aGlzLCBTdGF0dXM6OlBlbmRpbmcsIFN0YXR1czo6RmFpbHVyZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBtX3dyYXBwZXIgPSB3cmFwcGVyLT5jcmVhdGVXZWFrUHRy
KCk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIHZvaWQgQ1NTRm9udEZhY2U6OmFkb3B0U291
cmNlKHN0ZDo6dW5pcXVlX3B0cjxDU1NGb250RmFjZVNvdXJjZT4mJiBzb3VyY2UpCiB7CiAgICAg
bV9zb3VyY2VzLmFwcGVuZChXVEZNb3ZlKHNvdXJjZSkpOwpAQCAtMjY4LDggKzM4MCw4IEBAIHZv
aWQgQ1NTRm9udEZhY2U6OnNldFN0YXR1cyhTdGF0dXMgbmV3U3RhdHVzKQogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAg
Y2xpZW50LT5zdGF0ZUNoYW5nZWQoKnRoaXMsIG1fc3RhdHVzLCBuZXdTdGF0dXMpOworICAgIGZv
ciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmZvbnRTdGF0ZUNo
YW5nZWQoKnRoaXMsIG1fc3RhdHVzLCBuZXdTdGF0dXMpOwogCiAgICAgbV9zdGF0dXMgPSBuZXdT
dGF0dXM7CiB9CkBAIC0yODIsOSArMzk0LDEwIEBAIHZvaWQgQ1NTRm9udEZhY2U6OmZvbnRMb2Fk
ZWQoQ1NTRm9udEZhY2VTb3VyY2UmKQogICAgIGlmIChtX3NvdXJjZXNQb3B1bGF0ZWQpCiAgICAg
ICAgIHB1bXAoKTsKIAorICAgIEFTU0VSVChtX2ZvbnRTZWxlY3Rvcik7CiAgICAgbV9mb250U2Vs
ZWN0b3ItPmZvbnRMb2FkZWQoKTsKIAotICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRz
KQorICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQogICAgICAgICBjbGllbnQtPmZv
bnRMb2FkZWQoKnRoaXMpOwogfQogCkBAIC0yOTYsOSArNDA5LDEwIEBAIHNpemVfdCBDU1NGb250
RmFjZTo6cHVtcCgpCiAKICAgICAgICAgaWYgKHNvdXJjZS0+c3RhdHVzKCkgPT0gQ1NTRm9udEZh
Y2VTb3VyY2U6OlN0YXR1czo6UGVuZGluZykgewogICAgICAgICAgICAgQVNTRVJUKG1fc3RhdHVz
ID09IFN0YXR1czo6UGVuZGluZyB8fCBtX3N0YXR1cyA9PSBTdGF0dXM6OkxvYWRpbmcgfHwgbV9z
dGF0dXMgPT0gU3RhdHVzOjpUaW1lZE91dCk7CisgICAgICAgICAgICBBU1NFUlQobV9mb250U2Vs
ZWN0b3IpOwogICAgICAgICAgICAgaWYgKG1fc3RhdHVzID09IFN0YXR1czo6UGVuZGluZykKICAg
ICAgICAgICAgICAgICBzZXRTdGF0dXMoU3RhdHVzOjpMb2FkaW5nKTsKLSAgICAgICAgICAgIHNv
dXJjZS0+bG9hZChtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAgICAgICAgICBzb3VyY2UtPmxv
YWQoKm1fZm9udFNlbGVjdG9yKTsKICAgICAgICAgfQogCiAgICAgICAgIHN3aXRjaCAoc291cmNl
LT5zdGF0dXMoKSkgewpAQCAtMzQ1LDggKzQ1OSwxMCBAQCBSZWZQdHI8Rm9udD4gQ1NTRm9udEZh
Y2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJvb2wgc3lu
dAogICAgIHNpemVfdCBzdGFydEluZGV4ID0gcHVtcCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBz
dGFydEluZGV4OyBpIDwgbV9zb3VyY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8mIHNv
dXJjZSA9IG1fc291cmNlc1tpXTsKLSAgICAgICAgaWYgKHNvdXJjZS0+c3RhdHVzKCkgPT0gQ1NT
Rm9udEZhY2VTb3VyY2U6OlN0YXR1czo6UGVuZGluZykKLSAgICAgICAgICAgIHNvdXJjZS0+bG9h
ZChtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAgICAgIGlmIChzb3VyY2UtPnN0YXR1cygpID09
IENTU0ZvbnRGYWNlU291cmNlOjpTdGF0dXM6OlBlbmRpbmcpIHsKKyAgICAgICAgICAgIEFTU0VS
VChtX2ZvbnRTZWxlY3Rvcik7CisgICAgICAgICAgICBzb3VyY2UtPmxvYWQoKm1fZm9udFNlbGVj
dG9yKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN3aXRjaCAoc291cmNlLT5zdGF0dXMoKSkgewog
ICAgICAgICBjYXNlIENTU0ZvbnRGYWNlU291cmNlOjpTdGF0dXM6OlBlbmRpbmc6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZS5oCmluZGV4IDEwN2Q5ZjI4MjM4NmI2ZTZjNjFhZGIxYmIzZGY5OTBlMjBk
ZWZjNGYuLmEyNDI5NTZiMzJlMmJmMDhhZDJjNDgyMjgzMjE0NjY3MjYzYTc3YzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZS5oCkBAIC0yNyw3ICsyNyw2IEBACiAjZGVmaW5lIENTU0ZvbnRGYWNl
X2gKIAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgotI2luY2x1ZGUgIkNTU0ZvbnRGYWNl
U291cmNlLmgiCiAjaW5jbHVkZSAiRm9udEZlYXR1cmVTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRl
eHRGbGFncy5oIgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTM2LDIyICszNSwyOSBAQAogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNl
IEpTQyB7CitjbGFzcyBFeGVjU3RhdGU7Cit9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgQ1NTRm9udEZhY2VTb3VyY2U7CitjbGFzcyBDU1NGb250U2VsZWN0b3I7CiBjbGFzcyBDU1NT
ZWdtZW50ZWRGb250RmFjZTsKIGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgQ1NTVmFsdWVMaXN0Owor
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBGb250OwogY2xh
c3MgRm9udEZhY2U7CiAKLS8vIEZJWE1FOiBUaGlzIGNsYXNzIGRvZXMgbm90IG5lZWQgdG8gYmUg
cmVmZXJlbmNlIGNvdW50ZWQuCiBjbGFzcyBDU1NGb250RmFjZSBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGVkPENTU0ZvbnRGYWNlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NGb250RmFj
ZT4gY3JlYXRlKENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yLCBGb250RmFjZSogd3JhcHBl
ciA9IG51bGxwdHIsIGJvb2wgaXNMb2NhbEZhbGxiYWNrID0gZmFsc2UpCisgICAgc3RhdGljIFJl
ZjxDU1NGb250RmFjZT4gY3JlYXRlKENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yLCBTdHls
ZVJ1bGVGb250RmFjZSogY3NzQ29ubmVjdGlvbiA9IG51bGxwdHIsIEZvbnRGYWNlKiB3cmFwcGVy
ID0gbnVsbHB0ciwgYm9vbCBpc0xvY2FsRmFsbGJhY2sgPSBmYWxzZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZvbnRGYWNlKGZvbnRTZWxlY3Rvciwgd3JhcHBlciwg
aXNMb2NhbEZhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZvbnRG
YWNlKGZvbnRTZWxlY3RvciwgY3NzQ29ubmVjdGlvbiwgd3JhcHBlciwgaXNMb2NhbEZhbGxiYWNr
KSk7CiAgICAgfQogICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlKCk7CiAKQEAgLTc4LDYgKzg0LDEw
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRyYWl0c01hc2soRm9udFRyYWl0c01hc2sgdHJhaXRz
TWFzaykgeyBtX3RyYWl0c01hc2sgPSB0cmFpdHNNYXNrOyB9CiAgICAgYm9vbCBpc0xvY2FsRmFs
bGJhY2soKSBjb25zdCB7IHJldHVybiBtX2lzTG9jYWxGYWxsYmFjazsgfQogICAgIFN0YXR1cyBz
dGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorICAgIFN0eWxlUnVsZUZvbnRGYWNl
KiBjc3NDb25uZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jc3NDb25uZWN0aW9uLmdldCgpOyB9
CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8Rm9udFRyYWl0c01hc2s+IGNhbGN1bGF0ZVN0eWxlKENT
U1ZhbHVlJiBzdHlsZSk7CisgICAgc3RhdGljIE9wdGlvbmFsPEZvbnRUcmFpdHNNYXNrPiBjYWxj
dWxhdGVXZWlnaHQoQ1NTVmFsdWUmIHdlaWdodCk7CiAKICAgICBjbGFzcyBDbGllbnQ7CiAgICAg
dm9pZCBhZGRDbGllbnQoQ2xpZW50Jik7CkBAIC05MywxMSArMTAzLDE0IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGxvYWQoKTsKICAgICBSZWZQdHI8Rm9udD4gZm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKTsKIAorICAgIHN0
YXRpYyB2b2lkIGFwcGVuZFNvdXJjZXMoQ1NTRm9udEZhY2UmLCBDU1NWYWx1ZUxpc3QmLCBEb2N1
bWVudCosIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CisK
ICAgICBjbGFzcyBDbGllbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Q2xpZW50
KCkgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlJikgeyB9
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiwgU3RhdHVz
IG9sZFN0YXRlLCBTdGF0dXMgbmV3U3RhdGUpIHsgVU5VU0VEX1BBUkFNKG9sZFN0YXRlKTsgVU5V
U0VEX1BBUkFNKG5ld1N0YXRlKTsgfTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZvbnRTdGF0ZUNo
YW5nZWQoQ1NTRm9udEZhY2UmLCBTdGF0dXMgb2xkU3RhdGUsIFN0YXR1cyBuZXdTdGF0ZSkgeyBV
TlVTRURfUEFSQU0ob2xkU3RhdGUpOyBVTlVTRURfUEFSQU0obmV3U3RhdGUpOyB9OworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZm9udFByb3BlcnR5Q2hhbmdlZChDU1NGb250RmFjZSYsIENTU1ZhbHVl
TGlzdCogb2xkRmFtaWxpZXMgPSBudWxscHRyKSB7IFVOVVNFRF9QQVJBTShvbGRGYW1pbGllcyk7
IH07CiAgICAgfTsKIAogICAgIC8vIFBlbmRpbmcgPT4gTG9hZGluZyAgPT4gVGltZWRPdXQKQEAg
LTEzMiwyNyArMTQ1LDMwIEBAIHB1YmxpYzoKICAgICAgICAgVUNoYXIzMiBtX3RvOwogICAgIH07
CiAKLSAgICBGb250RmFjZSogd3JhcHBlcigpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBlcjsgfQor
ICAgIC8vIFdlIGRvbid0IGd1YXJhbnRlZSB0aGF0IHRoZSBGb250RmFjZSB3cmFwcGVyIHdpbGwg
YmUgdGhlIHNhbWUgZXZlcnkgdGltZSB5b3UgYXNrIGZvciBpdC4KKyAgICBSZWY8Rm9udEZhY2U+
IHdyYXBwZXIoSlNDOjpFeGVjU3RhdGUmKTsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAg
Ym9vbCBoYXNTVkdGb250RmFjZVNvdXJjZSgpIGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6Ci0g
ICAgQ1NTRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yJiwgRm9udEZhY2UqLCBib29sIGlzTG9jYWxG
YWxsYmFjayk7CisgICAgQ1NTRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yKiwgU3R5bGVSdWxlRm9u
dEZhY2UqLCBGb250RmFjZSosIGJvb2wgaXNMb2NhbEZhbGxiYWNrKTsKIAogICAgIHNpemVfdCBw
dW1wKCk7CiAgICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzKTsKKyAgICB2b2lkIG5vdGlmeUNsaWVu
dHNPZkZvbnRQcm9wZXJ0eUNoYW5nZSgpOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbV9m
YW1pbGllczsKICAgICBGb250VHJhaXRzTWFzayBtX3RyYWl0c01hc2sgeyBzdGF0aWNfY2FzdDxG
b250VHJhaXRzTWFzaz4oRm9udFN0eWxlTm9ybWFsTWFzayB8IEZvbnRXZWlnaHQ0MDBNYXNrKSB9
OwogICAgIFZlY3RvcjxVbmljb2RlUmFuZ2U+IG1fcmFuZ2VzOwotICAgIEhhc2hTZXQ8Q2xpZW50
Kj4gbV9jbGllbnRzOwotICAgIFJlZjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwot
ICAgIEZvbnRGYWNlKiBtX3dyYXBwZXI7CiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZlYXR1
cmVTZXR0aW5nczsKICAgICBGb250VmFyaWFudFNldHRpbmdzIG1fdmFyaWFudFNldHRpbmdzOwog
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9udEZhY2VTb3VyY2U+PiBtX3NvdXJjZXM7
CisgICAgUmVmUHRyPENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7CisgICAgUmVmUHRy
PFN0eWxlUnVsZUZvbnRGYWNlPiBtX2Nzc0Nvbm5lY3Rpb247CisgICAgSGFzaFNldDxDbGllbnQq
PiBtX2NsaWVudHM7CisgICAgV2Vha1B0cjxGb250RmFjZT4gbV93cmFwcGVyOwogICAgIFN0YXR1
cyBtX3N0YXR1cyB7IFN0YXR1czo6UGVuZGluZyB9OwogICAgIGJvb2wgbV9pc0xvY2FsRmFsbGJh
Y2sgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zb3VyY2VzUG9wdWxhdGVkIHsgZmFsc2UgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCmluZGV4IGEwZjVmZDY1MzA0ZDI5NjVkNjcz
ZjIyMzQ5ZTNlNjI1Njk5N2JhODMuLmIyNjVkNjNmMDBhYjQxYTlhNGFiYmY5YTAxYzhkYzEwMzFk
ZmU3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcApAQCAtMjYsMTcgKzI2
LDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VTZXQuaCIK
IAorI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhbWls
eS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTU2VnbWVudGVk
Rm9udEZhY2UuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NWYWx1
ZVBvb2wuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRp
ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DU1NGb250RmFjZVNldDo6Q1NTRm9udEZh
Y2VTZXQoQ1NTRm9udEZhY2VTZXRDbGllbnQmIGNsaWVudCkKLSAgICA6IG1fY2xpZW50KGNsaWVu
dCkKK0NTU0ZvbnRGYWNlU2V0OjpDU1NGb250RmFjZVNldCgpCiB7CiB9CiAKQEAgLTQ0LDYgKzQ3
LDIyIEBAIENTU0ZvbnRGYWNlU2V0Ojp+Q1NTRm9udEZhY2VTZXQoKQogewogICAgIGZvciAoYXV0
byYgZmFjZSA6IG1fZmFjZXMpCiAgICAgICAgIGZhY2UtPnJlbW92ZUNsaWVudCgqdGhpcyk7CisK
KyAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2xvY2FsbHlJbnN0YWxsZWRGYWNlc0xvb2t1cFRhYmxl
KSB7CisgICAgICAgIGZvciAoYXV0byYgZmFjZSA6IHBhaXIudmFsdWUpCisgICAgICAgICAgICBm
YWNlLT5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIH0KK30KKwordm9pZCBDU1NGb250RmFjZVNl
dDo6YWRkQ2xpZW50KENTU0ZvbnRGYWNlU2V0Q2xpZW50JiBjbGllbnQpCit7CisgICAgbV9jbGll
bnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBDU1NGb250RmFjZVNldDo6cmVtb3ZlQ2xpZW50
KENTU0ZvbnRGYWNlU2V0Q2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5j
b250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsKIH0KIAog
dm9pZCBDU1NGb250RmFjZVNldDo6aW5jcmVtZW50QWN0aXZlQ291bnQoKQpAQCAtNTEsNyArNzAs
OCBAQCB2b2lkIENTU0ZvbnRGYWNlU2V0OjppbmNyZW1lbnRBY3RpdmVDb3VudCgpCiAgICAgKytt
X2FjdGl2ZUNvdW50OwogICAgIGlmIChtX2FjdGl2ZUNvdW50ID09IDEpIHsKICAgICAgICAgbV9z
dGF0dXMgPSBTdGF0dXM6OkxvYWRpbmc7Ci0gICAgICAgIG1fY2xpZW50LnN0YXJ0ZWRMb2FkaW5n
KCk7CisgICAgICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAg
Y2xpZW50LT5zdGFydGVkTG9hZGluZygpOwogICAgIH0KIH0KIApAQCAtNjAsNyArODAsOCBAQCB2
b2lkIENTU0ZvbnRGYWNlU2V0OjpkZWNyZW1lbnRBY3RpdmVDb3VudCgpCiAgICAgLS1tX2FjdGl2
ZUNvdW50OwogICAgIGlmICghbV9hY3RpdmVDb3VudCkgewogICAgICAgICBtX3N0YXR1cyA9IFN0
YXR1czo6TG9hZGVkOwotICAgICAgICBtX2NsaWVudC5jb21wbGV0ZWRMb2FkaW5nKCk7CisgICAg
ICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5j
b21wbGV0ZWRMb2FkaW5nKCk7CiAgICAgfQogfQogCkBAIC03MCwyMyArOTEsMTQwIEBAIGJvb2wg
Q1NTRm9udEZhY2VTZXQ6Omhhc0ZhY2UoY29uc3QgQ1NTRm9udEZhY2UmIGZhY2UpIGNvbnN0CiAg
ICAgICAgIGlmIChteUZhY2UucHRyKCkgPT0gJmZhY2UpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgQ1NTRm9udEZhY2VTZXQ6
OnJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1l
KQoreworICAgIEFTU0VSVCghbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZS5jb250
YWlucyhmYW1pbHlOYW1lKSk7CisKKyAgICBWZWN0b3I8Rm9udFRyYWl0c01hc2s+IHRyYWl0c01h
c2tzID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5nZXRUcmFpdHNJbkZhbWlseShmYW1pbHlOYW1l
KTsKKyAgICBpZiAodHJhaXRzTWFza3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4gZmFjZXMgPSB7IH07CisgICAgZm9yIChhdXRvIG1h
c2sgOiB0cmFpdHNNYXNrcykgeworICAgICAgICBSZWY8Q1NTRm9udEZhY2U+IGZhY2UgPSBDU1NG
b250RmFjZTo6Y3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIHRydWUpOworICAgICAg
ICAKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZmFtaWx5TGlzdCA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKKyAgICAgICAgZmFtaWx5TGlzdC0+YXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKGZhbWlseU5hbWUp
KTsKKyAgICAgICAgZmFjZS0+c2V0RmFtaWxpZXMoKmZhbWlseUxpc3QpOworICAgICAgICBmYWNl
LT5zZXRUcmFpdHNNYXNrKG1hc2spOworICAgICAgICBmYWNlLT5hZG9wdFNvdXJjZShzdGQ6Om1h
a2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmYWNlLmdldCgpLCBmYW1pbHlOYW1lKSk7Cisg
ICAgICAgIEFTU0VSVCghZmFjZS0+YWxsU291cmNlc0ZhaWxlZCgpKTsKKyAgICAgICAgZmFjZXMu
YXBwZW5kKFdURk1vdmUoZmFjZSkpOworICAgIH0KKyAgICBtX2xvY2FsbHlJbnN0YWxsZWRGYWNl
c0xvb2t1cFRhYmxlLmFkZChmYW1pbHlOYW1lLCBXVEZNb3ZlKGZhY2VzKSk7Cit9CisKK1N0cmlu
ZyBDU1NGb250RmFjZVNldDo6ZmFtaWx5TmFtZUZyb21QcmltaXRpdmUoY29uc3QgQ1NTUHJpbWl0
aXZlVmFsdWUmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0ZvbnRGYW1pbHkoKSkKKyAgICAg
ICAgcmV0dXJuIHZhbHVlLmZvbnRGYW1pbHkoKS5mYW1pbHlOYW1lOworICAgIGlmICghdmFsdWUu
aXNWYWx1ZUlEKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICAvLyBXZSBuZWVkIHRvIHVz
ZSB0aGUgcmF3IHRleHQgZm9yIGFsbCB0aGUgZ2VuZXJpYyBmYW1pbHkgdHlwZXMsIHNpbmNlIEBm
b250LWZhY2UgaXMgYSB3YXkgb2YgYWN0dWFsbHkKKyAgICAvLyBkZWZpbmluZyB3aGF0IGZvbnQg
dG8gdXNlIGZvciB0aG9zZSB0eXBlcy4KKyAgICBzd2l0Y2ggKHZhbHVlLmdldFZhbHVlSUQoKSkg
eworICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAgICAgcmV0dXJuIHNlcmlmRmFtaWx5Owor
ICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6CisgICAgICAgIHJldHVybiBzYW5zU2VyaWZGYW1p
bHk7CisgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6CisgICAgICAgIHJldHVybiBjdXJzaXZlRmFt
aWx5OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAgICAgICByZXR1cm4gZmFudGFzeUZh
bWlseTsKKyAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgorICAgICAgICByZXR1cm4gbW9ub3Nw
YWNlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dyYXBoOgorICAgICAgICBy
ZXR1cm4gcGljdG9ncmFwaEZhbWlseTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4geyB9
OworICAgIH0KK30KKwordm9pZCBDU1NGb250RmFjZVNldDo6YWRkVG9GYWNlc0xvb2t1cFRhYmxl
KENTU0ZvbnRGYWNlJiBmYWNlKQoreworICAgIGlmIChmYWNlLmZhbWlsaWVzKCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBpdGVtIDogKmZhY2UuZmFtaWxpZXMoKSkgeworICAgICAgICAgICAgU3Ry
aW5nIGZhbWlseU5hbWUgPSBDU1NGb250RmFjZVNldDo6ZmFtaWx5TmFtZUZyb21QcmltaXRpdmUo
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpKTsKKyAgICAgICAgICAgIGlm
IChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2ZhY2VzTG9va3VwVGFibGUuYWRkKGZhbWlseU5h
bWUsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PigpKTsKKyAgICAgICAgICAgIGF1dG8mIGZhbWls
eUZvbnRGYWNlcyA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBpZiAo
YWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgICAgICAvLyBtX2xvY2FsbHlJbnN0
YWxsZWRGb250RmFjZXMgZ3Jvd3Mgd2l0aG91dCBib3VuZCwgZXZlbnR1YWxseSBlbmNvcnBvcmF0
aW5nIGV2ZXJ5IGZvbnQgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAg
Ly8gVGhpcyBpcyBieSBkZXNpZ24uCisgICAgICAgICAgICAgICAgcmVnaXN0ZXJMb2NhbEZvbnRG
YWNlc0ZvckZhbWlseShmYW1pbHlOYW1lKTsKKyAgICAgICAgICAgICAgICBmYW1pbHlGb250RmFj
ZXMgPSB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZhbWlseUZvbnRGYWNlcy5h
cHBlbmQoZmFjZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgQ1NTRm9udEZhY2VTZXQ6
OmFkZChDU1NGb250RmFjZSYgZmFjZSkKIHsKICAgICBBU1NFUlQoIWhhc0ZhY2UoZmFjZSkpOwog
Ci0gICAgbV9mYWNlcy5hcHBlbmQoZmFjZSk7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2Ns
aWVudHMpCisgICAgICAgIGNsaWVudC0+Zm9udE1vZGlmaWVkKCk7CisKICAgICBmYWNlLmFkZENs
aWVudCgqdGhpcyk7CisgICAgbV9jYWNoZS5jbGVhcigpOworCisgICAgaWYgKGZhY2UuY3NzQ29u
bmVjdGlvbigpKQorICAgICAgICBtX2ZhY2VzLmluc2VydChtX2ZhY2VzUGFydGl0aW9uSW5kZXgr
KywgZmFjZSk7CisgICAgZWxzZQorICAgICAgICBtX2ZhY2VzLmFwcGVuZChmYWNlKTsKKworICAg
IGFkZFRvRmFjZXNMb29rdXBUYWJsZShmYWNlKTsKKwogICAgIGlmIChmYWNlLnN0YXR1cygpID09
IENTU0ZvbnRGYWNlOjpTdGF0dXM6OkxvYWRpbmcgfHwgZmFjZS5zdGF0dXMoKSA9PSBDU1NGb250
RmFjZTo6U3RhdHVzOjpUaW1lZE91dCkKICAgICAgICAgaW5jcmVtZW50QWN0aXZlQ291bnQoKTsK
IH0KIAordm9pZCBDU1NGb250RmFjZVNldDo6cmVtb3ZlRnJvbUZhY2VzTG9va3VwVGFibGUoY29u
c3QgQ1NTRm9udEZhY2UmIGZhY2UsIGNvbnN0IENTU1ZhbHVlTGlzdCYgZmFtaWxpZXNUb1NlYXJj
aEZvcikKK3sKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBmYW1pbGllc1RvU2VhcmNoRm9yKSB7Cisg
ICAgICAgIFN0cmluZyBmYW1pbHlOYW1lID0gQ1NTRm9udEZhY2VTZXQ6OmZhbWlseU5hbWVGcm9t
UHJpbWl0aXZlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKSk7CisgICAg
ICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2ZhY2VzTG9va3VwVGFibGUuZmluZChmYW1pbHlOYW1l
KTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZmFjZXNMb29rdXBUYWJsZS5lbmQoKSk7
CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpdGVyYXRvci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpdGVy
YXRvci0+dmFsdWVbaV0ucHRyKCkgPT0gJmZhY2UpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLnJlbW92ZShpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NF
UlQoZm91bmQpOworICAgICAgICBpZiAoIWl0ZXJhdG9yLT52YWx1ZS5zaXplKCkpCisgICAgICAg
ICAgICBtX2ZhY2VzTG9va3VwVGFibGUucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB9Cit9CisKIHZv
aWQgQ1NTRm9udEZhY2VTZXQ6OnJlbW92ZShjb25zdCBDU1NGb250RmFjZSYgZmFjZSkKIHsKKyAg
ICBtX2NhY2hlLmNsZWFyKCk7CisKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykK
KyAgICAgICAgY2xpZW50LT5mb250TW9kaWZpZWQoKTsKKworICAgIGlmIChmYWNlLmZhbWlsaWVz
KCkpCisgICAgICAgIHJlbW92ZUZyb21GYWNlc0xvb2t1cFRhYmxlKGZhY2UsICpmYWNlLmZhbWls
aWVzKCkpOworCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZhY2VzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIGlmIChtX2ZhY2VzW2ldLnB0cigpID09ICZmYWNlKSB7CisgICAgICAgICAg
ICBpZiAoaSA8IG1fZmFjZXNQYXJ0aXRpb25JbmRleCkKKyAgICAgICAgICAgICAgICAtLW1fZmFj
ZXNQYXJ0aXRpb25JbmRleDsKICAgICAgICAgICAgIG1fZmFjZXNbaV0tPnJlbW92ZUNsaWVudCgq
dGhpcyk7CiAgICAgICAgICAgICBtX2ZhY2VzLnJlbW92ZShpKTsKICAgICAgICAgICAgIGlmIChm
YWNlLnN0YXR1cygpID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OkxvYWRpbmcgfHwgZmFjZS5zdGF0
dXMoKSA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpUaW1lZE91dCkKQEAgLTk3LDMwICsyMzUsNDMg
QEAgdm9pZCBDU1NGb250RmFjZVNldDo6cmVtb3ZlKGNvbnN0IENTU0ZvbnRGYWNlJiBmYWNlKQog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmc+IGV4
dHJhY3RGYW1pbGllcyhjb25zdCBDU1NWYWx1ZUxpc3QmIGxpc3QpCit2b2lkIENTU0ZvbnRGYWNl
U2V0OjpjbGVhcigpCiB7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKLSAgICBmb3IgKGF1
dG8mIGZhbWlseSA6IGxpc3QpIHsKLSAgICAgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHBy
aW1pdGl2ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihmYW1pbHkuZ2V0KCkpOwotICAg
ICAgICBpZiAoIXByaW1pdGl2ZS5pc0ZvbnRGYW1pbHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICByZXN1bHQuYWRkKHByaW1pdGl2ZS5mb250RmFtaWx5KCkuZmFtaWx5TmFtZSk7
Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9mYWNlcy5jbGVhcigpOworICAgIG1f
ZmFjZXNMb29rdXBUYWJsZS5jbGVhcigpOworICAgIG1fbG9jYWxseUluc3RhbGxlZEZhY2VzTG9v
a3VwVGFibGUuY2xlYXIoKTsKKyAgICBtX2NhY2hlLmNsZWFyKCk7CiB9CiAKLXN0YXRpYyBib29s
IGZhbWlsaWVzSW50ZXJzZWN0KGNvbnN0IENTU0ZvbnRGYWNlJiBmYWNlLCBjb25zdCBDU1NWYWx1
ZUxpc3QmIHJlcXVlc3QpCitDU1NGb250RmFjZSYgQ1NTRm9udEZhY2VTZXQ6Om9wZXJhdG9yW10o
c2l6ZV90IGkpCiB7Ci0gICAgaWYgKCFmYWNlLmZhbWlsaWVzKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBBU1NFUlQoaSA8IGZhY2VDb3VudCgpKTsKKyAgICByZXR1cm4gbV9mYWNlc1tp
XTsKK30KIAotICAgIEhhc2hTZXQ8U3RyaW5nPiBmYWNlRmFtaWxpZXMgPSBleHRyYWN0RmFtaWxp
ZXMoKmZhY2UuZmFtaWxpZXMoKSk7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHJlcXVlc3RGYW1pbGll
cyA9IGV4dHJhY3RGYW1pbGllcyhyZXF1ZXN0KTsKLSAgICBmb3IgKGF1dG8mIGZhbWlseTEgOiBm
YWNlRmFtaWxpZXMpIHsKLSAgICAgICAgaWYgKHJlcXVlc3RGYW1pbGllcy5jb250YWlucyhmYW1p
bHkxKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
CitzdGF0aWMgT3B0aW9uYWw8Rm9udFRyYWl0c01hc2s+IGNvbXB1dGVGb250VHJhaXRzTWFzayhN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSkKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHN0
eWxlVmFsdWUgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxl
KS5nZXQoKTsKKyAgICBpZiAoIXN0eWxlVmFsdWUpCisgICAgICAgIHN0eWxlVmFsdWUgPSBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1h
bCkucHRyKCk7CisKKyAgICBGb250VHJhaXRzTWFzayBzdHlsZU1hc2s7CisgICAgaWYgKGF1dG8g
c3R5bGVNYXNrT3B0aW9uYWwgPSBDU1NGb250RmFjZTo6Y2FsY3VsYXRlU3R5bGUoKnN0eWxlVmFs
dWUpKQorICAgICAgICBzdHlsZU1hc2sgPSBzdHlsZU1hc2tPcHRpb25hbC52YWx1ZSgpOworICAg
IGVsc2UKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHdl
aWdodFZhbHVlID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWln
aHQpLmdldCgpOworICAgIGlmICghd2VpZ2h0VmFsdWUpCisgICAgICAgIHdlaWdodFZhbHVlID0g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b3JtYWwpLnB0cigpOworCisgICAgRm9udFRyYWl0c01hc2sgd2VpZ2h0TWFzazsKKyAgICBpZiAo
YXV0byB3ZWlnaHRNYXNrT3B0aW9uYWwgPSBDU1NGb250RmFjZTo6Y2FsY3VsYXRlV2VpZ2h0KCp3
ZWlnaHRWYWx1ZSkpCisgICAgICAgIHdlaWdodE1hc2sgPSB3ZWlnaHRNYXNrT3B0aW9uYWwudmFs
dWUoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBOdWxsb3B0OworCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3R5bGVNYXNr
KSB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih3ZWlnaHRNYXNrKSk7CiB9CiAKIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRGYWNlPj4gQ1NTRm9udEZhY2VTZXQ6Om1hdGNoaW5n
RmFjZXMoY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiBl
YykKQEAgLTEzMiwxNCArMjgzLDE1IEBAIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENT
U0ZvbnRGYWNlPj4gQ1NTRm9udEZhY2VTZXQ6Om1hdGNoaW5nRmFjZXMoY29uc3QKICAgICAgICAg
ZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBib29s
IGRlc2lyZWRTdHlsZUlzTm9ybWFsID0gdHJ1ZTsKLSAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBk
ZXNpcmVkU3R5bGUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRT
dHlsZSkpIHsKLSAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmRlc2lyZWRTdHls
ZSkpIHsKLSAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzaXJlZFN0eWxlSXNOb3JtYWwgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKmRlc2lyZWRTdHlsZSkuZ2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlTm9ybWFsOworCisgICAgRm9udFRyYWl0c01hc2sgZm9udFRyYWl0c01hc2s7CisgICAgaWYg
KGF1dG8gbWFza09wdGlvbmFsID0gY29tcHV0ZUZvbnRUcmFpdHNNYXNrKHN0eWxlLmdldCgpKSkK
KyAgICAgICAgZm9udFRyYWl0c01hc2sgPSBtYXNrT3B0aW9uYWwudmFsdWUoKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KKwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gZmFtaWx5ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4o
ZmFtaWx5LmdldCgpKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CkBAIC0xNDcsMjMgKzI5
OSwyMyBAQCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4+IENTU0Zv
bnRGYWNlU2V0OjptYXRjaGluZ0ZhY2VzKGNvbnN0CiAgICAgfQogICAgIENTU1ZhbHVlTGlzdCYg
ZmFtaWx5TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZhbWlseSk7CiAKLSAgICAvLyBN
YXRjaCBDU1NGb250U2VsZWN0b3I6OmdldEZvbnRGYWNlKCkKLSAgICBmb3IgKGF1dG8mIGZhY2Ug
OiBtX2ZhY2VzKSB7Ci0gICAgICAgIGlmICghZmFtaWxpZXNJbnRlcnNlY3QoZmFjZSwgZmFtaWx5
TGlzdCkgfHwgKGRlc2lyZWRTdHlsZUlzTm9ybWFsICYmICEoZmFjZS0+dHJhaXRzTWFzaygpICYg
Rm9udFN0eWxlTm9ybWFsTWFzaykpKQorICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1bmlxdWVG
YW1pbGllczsKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGZhbWlseUxpc3QpIHsKKyAgICAgICAg
Y29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPihmYW1pbHkuZ2V0KCkpOworICAgICAgICBpZiAoIXByaW1pdGl2ZS5pc0ZvbnRGYW1p
bHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXN1bHQuYXBwZW5kKGZhY2Uu
Z2V0KCkpOworICAgICAgICB1bmlxdWVGYW1pbGllcy5hZGQocHJpbWl0aXZlLmZvbnRGYW1pbHko
KS5mYW1pbHlOYW1lKTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KIAotdm9pZCBDU1NG
b250RmFjZVNldDo6bG9hZChjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgYXV0byBtYXRjaGluZ0ZhY2VzID0gdGhpcy0+bWF0
Y2hpbmdGYWNlcyhmb250LCB0ZXh0LCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47
CisgICAgZm9yIChhdXRvJiBmYW1pbHkgOiB1bmlxdWVGYW1pbGllcykgeworICAgICAgICBDU1NT
ZWdtZW50ZWRGb250RmFjZSogZmFjZXMgPSBnZXRGb250RmFjZShmb250VHJhaXRzTWFzaywgZmFt
aWx5KTsKKyAgICAgICAgaWYgKCFmYWNlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBmb3IgKGF1dG8mIGNvbnN0aXR1ZW50RmFjZSA6IGZhY2VzLT5jb25zdGl0dWVudEZhY2VzKCkp
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbnN0aXR1ZW50RmFjZS5nZXQoKSk7CisgICAg
fQogCi0gICAgZm9yIChhdXRvJiBmYWNlIDogbWF0Y2hpbmdGYWNlcykKLSAgICAgICAgZmFjZS5n
ZXQoKS5sb2FkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBDU1NGb250RmFjZVNl
dDo6Y2hlY2soY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQpAQCAtMTc5LDcgKzMzMSwxMTkgQEAgYm9vbCBDU1NGb250RmFjZVNldDo6Y2hl
Y2soY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDU1NGb250RmFjZVNldDo6c3RhdGVDaGFuZ2Vk
KENTU0ZvbnRGYWNlJiBmYWNlLCBDU1NGb250RmFjZTo6U3RhdHVzIG9sZFN0YXRlLCBDU1NGb250
RmFjZTo6U3RhdHVzIG5ld1N0YXRlKQorY2xhc3MgRm9udEZhY2VDb21wYXJhdG9yIHsKK3B1Ymxp
YzoKKyAgICBGb250RmFjZUNvbXBhcmF0b3IoRm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0c01h
c2tGb3JDb21wYXJpc29uKQorICAgICAgICA6IG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJp
c29uKGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbikKKyAgICB7CisgICAgICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJp
c29uICYgRm9udFdlaWdodE1hc2spOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBDU1NGb250RmFjZSYgZmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBzZWNvbmQpCisgICAgewor
ICAgICAgICBGb250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC50cmFpdHNNYXNr
KCk7CisgICAgICAgIEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01hc2sgPSBzZWNvbmQudHJh
aXRzTWFzaygpOworCisgICAgICAgIGJvb2wgZmlyc3RIYXNEZXNpcmVkU3R5bGUgPSBmaXJzdFRy
YWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRTdHlsZU1h
c2s7CisgICAgICAgIGJvb2wgc2Vjb25kSGFzRGVzaXJlZFN0eWxlID0gc2Vjb25kVHJhaXRzTWFz
ayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFzazsKKwor
ICAgICAgICBpZiAoZmlyc3RIYXNEZXNpcmVkU3R5bGUgIT0gc2Vjb25kSGFzRGVzaXJlZFN0eWxl
KQorICAgICAgICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxlOworCisgICAgICAgIGlm
ICgobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNNYXNr
KSAmJiAhZmlyc3QuaXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5pc0xvY2FsRmFsbGJhY2so
KSkgeworICAgICAgICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0ZWQgdGhh
dCBpdCBjYW4gb25seSBzdXBwb3J0IGl0YWxpY3MgdG8gYSBmb250IHRoYXQgY2xhaW1zIHRvIHN1
cHBvcnQKKyAgICAgICAgICAgIC8vIGFsbCBzdHlsZXMuIFRoZSBzcGVjaWFsaXplZCBmb250IGlz
IG1vcmUgbGlrZWx5IHRvIGJlIHRoZSBvbmUgdGhlIGF1dGhvciB3YW50cyB1c2VkLgorICAgICAg
ICAgICAgYm9vbCBmaXJzdFJlcXVpcmVzSXRhbGljcyA9IChmaXJzdFRyYWl0c01hc2sgJiBGb250
U3R5bGVJdGFsaWNNYXNrKSAmJiAhKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1h
c2spOworICAgICAgICAgICAgYm9vbCBzZWNvbmRSZXF1aXJlc0l0YWxpY3MgPSAoc2Vjb25kVHJh
aXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEoc2Vjb25kVHJhaXRzTWFzayAmIEZv
bnRTdHlsZU5vcm1hbE1hc2spOworICAgICAgICAgICAgaWYgKGZpcnN0UmVxdWlyZXNJdGFsaWNz
ICE9IHNlY29uZFJlcXVpcmVzSXRhbGljcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RS
ZXF1aXJlc0l0YWxpY3M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2Vjb25kVHJhaXRzTWFz
ayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFdlaWdodE1hc2spCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChmaXJzdFRyYWl0c01hc2sgJiBt
X2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRXZWlnaHRNYXNrKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAx
MS9XRC1jc3MzLWZvbnRzLTIwMTExMDA0LyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSBzYXlzIDoK
KyAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyBsZXNzIHRoYW4gNDAwLCB3
ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBhcmUgY2hlY2tlZCBpbiBkZXNjZW5kaW5n
IG9yZGVyIGZvbGxvd2VkIGJ5IHdlaWdodHMgYWJvdmUgdGhlIGRlc2lyZWQgd2VpZ2h0IGluIGFz
Y2VuZGluZyBvcmRlciB1bnRpbCBhIG1hdGNoIGlzIGZvdW5kLgorICAgICAgICAvLyAgIC0gSWYg
dGhlIGRlc2lyZWQgd2VpZ2h0IGlzIGdyZWF0ZXIgdGhhbiA1MDAsIHdlaWdodHMgYWJvdmUgdGhl
IGRlc2lyZWQgd2VpZ2h0IGFyZSBjaGVja2VkIGluIGFzY2VuZGluZyBvcmRlciBmb2xsb3dlZCBi
eSB3ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdlaWdodCBpbiBkZXNjZW5kaW5nIG9yZGVyIHVu
dGlsIGEgbWF0Y2ggaXMgZm91bmQuCisgICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWln
aHQgaXMgNDAwLCA1MDAgaXMgY2hlY2tlZCBmaXJzdCBhbmQgdGhlbiB0aGUgcnVsZSBmb3IgZGVz
aXJlZCB3ZWlnaHRzIGxlc3MgdGhhbiA0MDAgaXMgdXNlZC4KKyAgICAgICAgLy8gICAtIElmIHRo
ZSBkZXNpcmVkIHdlaWdodCBpcyA1MDAsIDQwMCBpcyBjaGVja2VkIGZpcnN0IGFuZCB0aGVuIHRo
ZSBydWxlIGZvciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFuIDQwMCBpcyB1c2VkLgorCisgICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYWxsYmFja1J1bGVTZXRzID0gOTsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHJ1bGVzUGVyU2V0ID0gODsKKyAgICAgICAgc3RhdGljIGNv
bnN0IEZvbnRUcmFpdHNNYXNrIHdlaWdodEZhbGxiYWNrUnVsZVNldHNbZmFsbGJhY2tSdWxlU2V0
c11bcnVsZXNQZXJTZXRdID0geworICAgICAgICAgICAgeyBGb250V2VpZ2h0MjAwTWFzaywgRm9u
dFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9u
dFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9u
dFdlaWdodDkwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDEwME1hc2ssIEZvbnRX
ZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRX
ZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRX
ZWlnaHQ5MDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2Vp
Z2h0MTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2Vp
Z2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2Vp
Z2h0OTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdo
dDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdo
dDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdo
dDkwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQz
MDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQ2
MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5
MDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAw
TWFzaywgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAw
TWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAw
TWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1h
c2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1h
c2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1h
c2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNr
LCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNr
LCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNr
IH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywg
Rm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywg
Rm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9
CisgICAgICAgIH07CisKKyAgICAgICAgdW5zaWduZWQgcnVsZVNldEluZGV4ID0gMDsKKyAgICAg
ICAgZm9yICg7ICEobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiAoMSA8PCAoRm9u
dFdlaWdodDEwMEJpdCArIHJ1bGVTZXRJbmRleCkpKTsgcnVsZVNldEluZGV4KyspIHsgfQorCisg
ICAgICAgIGNvbnN0IEZvbnRUcmFpdHNNYXNrKiB3ZWlnaHRGYWxsYmFja1J1bGUgPSB3ZWlnaHRG
YWxsYmFja1J1bGVTZXRzW3J1bGVTZXRJbmRleF07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBydWxlc1BlclNldDsgKytpKSB7CisgICAgICAgICAgICBpZiAoc2Vjb25kVHJhaXRz
TWFzayAmIHdlaWdodEZhbGxiYWNrUnVsZVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpZiAoZmlyc3RUcmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tSdWxl
W2ldKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGb250VHJhaXRzTWFzayBtX2Rl
c2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbjsKK307CisKK0NTU1NlZ21lbnRlZEZvbnRGYWNl
KiBDU1NGb250RmFjZVNldDo6Z2V0Rm9udEZhY2UoRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzaywg
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fZmFj
ZXNMb29rdXBUYWJsZS5maW5kKGZhbWlseSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZmFjZXNM
b29rdXBUYWJsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byYgZmFt
aWx5Rm9udEZhY2VzID0gaXRlcmF0b3ItPnZhbHVlOworCisgICAgYXV0byYgc2VnbWVudGVkRm9u
dEZhY2VDYWNoZSA9IG1fY2FjaGUuYWRkKGZhbWlseSwgSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1
bmlxdWVfcHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOworCisg
ICAgYXV0byYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUuYWRkKHRyYWl0c01hc2ssIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBpZiAoZmFjZSkKKyAgICAgICAgcmV0dXJuIGZh
Y2UuZ2V0KCk7CisKKyAgICBmYWNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NTZWdtZW50ZWRGb250
RmFjZT4oKTsKKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRGYWNl
PiwgMzI+IGNhbmRpZGF0ZUZvbnRGYWNlczsKKyAgICBmb3IgKGludCBpID0gZmFtaWx5Rm9udEZh
Y2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIENTU0ZvbnRGYWNlJiBjYW5k
aWRhdGUgPSBmYW1pbHlGb250RmFjZXNbaV07CisgICAgICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRy
YWl0c01hc2sgPSBjYW5kaWRhdGUudHJhaXRzTWFzaygpOworICAgICAgICBpZiAoKHRyYWl0c01h
c2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250
U3R5bGVOb3JtYWxNYXNrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYW5kaWRh
dGVGb250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgfQorCisgICAgYXV0byBsb2NhbEl0
ZXJhdG9yID0gbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZS5maW5kKGZhbWlseSk7
CisgICAgaWYgKGxvY2FsSXRlcmF0b3IgIT0gbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBU
YWJsZS5lbmQoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGxvY2FsSXRlcmF0
b3ItPnZhbHVlKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVUcmFpdHNNYXNrID0g
Y2FuZGlkYXRlLT50cmFpdHNNYXNrKCk7CisgICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBG
b250U3R5bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVO
b3JtYWxNYXNrKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNhbmRp
ZGF0ZUZvbnRGYWNlcy5hcHBlbmQoY2FuZGlkYXRlKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0ZDo6c3RhYmxlX3NvcnQoY2FuZGlkYXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRpZGF0ZUZv
bnRGYWNlcy5lbmQoKSwgRm9udEZhY2VDb21wYXJhdG9yKHRyYWl0c01hc2spKTsKKyAgICBmb3Ig
KGF1dG8mIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZUZvbnRGYWNlcykKKyAgICAgICAgZmFjZS0+YXBw
ZW5kRm9udEZhY2UoY2FuZGlkYXRlLmdldCgpKTsKKworICAgIHJldHVybiBmYWNlLmdldCgpOwor
fQorCit2b2lkIENTU0ZvbnRGYWNlU2V0Ojpmb250U3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiBm
YWNlLCBDU1NGb250RmFjZTo6U3RhdHVzIG9sZFN0YXRlLCBDU1NGb250RmFjZTo6U3RhdHVzIG5l
d1N0YXRlKQogewogICAgIEFTU0VSVChoYXNGYWNlKGZhY2UpKTsKICAgICBpZiAob2xkU3RhdGUg
PT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6UGVuZGluZykgewpAQCAtMTg4LDkgKzQ1MiwyMyBAQCB2
b2lkIENTU0ZvbnRGYWNlU2V0OjpzdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2UmIGZhY2UsIENTU0Zv
bnRGYWNlOjpTdGF0dXMgb2xkU3RhdAogICAgIH0KICAgICBpZiAobmV3U3RhdGUgPT0gQ1NTRm9u
dEZhY2U6OlN0YXR1czo6U3VjY2VzcyB8fCBuZXdTdGF0ZSA9PSBDU1NGb250RmFjZTo6U3RhdHVz
OjpGYWlsdXJlKSB7CiAgICAgICAgIEFTU0VSVChvbGRTdGF0ZSA9PSBDU1NGb250RmFjZTo6U3Rh
dHVzOjpMb2FkaW5nIHx8IG9sZFN0YXRlID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlRpbWVkT3V0
KTsKLSAgICAgICAgbV9jbGllbnQuZmFjZUZpbmlzaGVkKGZhY2UsIG5ld1N0YXRlKTsKKyAgICAg
ICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgICAgICBjbGllbnQtPmZh
Y2VGaW5pc2hlZChmYWNlLCBuZXdTdGF0ZSk7CiAgICAgICAgIGRlY3JlbWVudEFjdGl2ZUNvdW50
KCk7CiAgICAgfQogfQogCit2b2lkIENTU0ZvbnRGYWNlU2V0Ojpmb250UHJvcGVydHlDaGFuZ2Vk
KENTU0ZvbnRGYWNlJiBmYWNlLCBDU1NWYWx1ZUxpc3QqIG9sZEZhbWlsaWVzKQoreworICAgIG1f
Y2FjaGUuY2xlYXIoKTsKKworICAgIGlmIChvbGRGYW1pbGllcykgeworICAgICAgICByZW1vdmVG
cm9tRmFjZXNMb29rdXBUYWJsZShmYWNlLCAqb2xkRmFtaWxpZXMpOworICAgICAgICBhZGRUb0Zh
Y2VzTG9va3VwVGFibGUoZmFjZSk7CisgICAgfQorCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBt
X2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+Zm9udE1vZGlmaWVkKCk7Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmgKaW5kZXggNjY5NDdkNzgxYjhjODFkODQyMWZlMDkyYTFi
NmFjYmVhNDIzNGI5Zi4uN2RmZWRmMmIzYTExNzBjZGFhNzEwZTY0NWMzNzdkN2Y4OGZmN2U5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmgKQEAgLTI3LDM0ICsyNyw0NiBAQAogI2Rl
ZmluZSBDU1NGb250RmFjZVNldF9oCiAKICNpbmNsdWRlICJDU1NGb250RmFjZS5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1NQ
cmltaXRpdmVWYWx1ZTsKIGNsYXNzIEZvbnRGYWNlU2V0OwogCiBjbGFzcyBDU1NGb250RmFjZVNl
dENsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q1NTRm9udEZhY2VTZXRDbGllbnQoKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZmFjZUZpbmlzaGVkKENTU0ZvbnRGYWNlJiwgQ1NTRm9udEZh
Y2U6OlN0YXR1cykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkTG9hZGluZygpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgY29tcGxldGVkTG9hZGluZygpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZmFjZUZpbmlzaGVkKENTU0ZvbnRGYWNlJiwgQ1NTRm9udEZhY2U6OlN0YXR1cykgeyB9Owor
ICAgIHZpcnR1YWwgdm9pZCBmb250TW9kaWZpZWQoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIHN0
YXJ0ZWRMb2FkaW5nKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBjb21wbGV0ZWRMb2FkaW5nKCkg
eyB9OwogfTsKIAotY2xhc3MgQ1NTRm9udEZhY2VTZXQgZmluYWwgOiBwdWJsaWMgQ1NTRm9udEZh
Y2U6OkNsaWVudCB7CitjbGFzcyBDU1NGb250RmFjZVNldCBmaW5hbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPENTU0ZvbnRGYWNlU2V0PiwgcHVibGljIENTU0ZvbnRGYWNlOjpDbGllbnQgewogcHVibGlj
OgotICAgIENTU0ZvbnRGYWNlU2V0KENTU0ZvbnRGYWNlU2V0Q2xpZW50Jik7CisgICAgc3RhdGlj
IFJlZjxDU1NGb250RmFjZVNldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IENTU0ZvbnRGYWNlU2V0KCkpOworICAgIH0KICAgICB+Q1NTRm9udEZhY2VTZXQo
KTsKIAorICAgIHZvaWQgYWRkQ2xpZW50KENTU0ZvbnRGYWNlU2V0Q2xpZW50Jik7CisgICAgdm9p
ZCByZW1vdmVDbGllbnQoQ1NTRm9udEZhY2VTZXRDbGllbnQmKTsKKwogICAgIGJvb2wgaGFzRmFj
ZShjb25zdCBDU1NGb250RmFjZSYpIGNvbnN0OwogICAgIHNpemVfdCBmYWNlQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2ZhY2VzLnNpemUoKTsgfQogICAgIHZvaWQgYWRkKENTU0ZvbnRGYWNlJik7
CiAgICAgdm9pZCByZW1vdmUoY29uc3QgQ1NTRm9udEZhY2UmKTsKLSAgICBjb25zdCBDU1NGb250
RmFjZSYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9mYWNlc1tpXTsgfQor
ICAgIHZvaWQgY2xlYXIoKTsKKyAgICBDU1NGb250RmFjZSYgb3BlcmF0b3JbXShzaXplX3QgaSk7
CiAKLSAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQs
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGNoZWNrKGNvbnN0IFN0cmluZyYgZm9udCwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAKKyAgICBDU1NTZWdtZW50ZWRGb250
RmFjZSogZ2V0Rm9udEZhY2UoRm9udFRyYWl0c01hc2ssIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5KTsKKwogICAgIGVudW0gY2xhc3MgU3RhdHVzIHsKICAgICAgICAgTG9hZGluZywKICAgICAg
ICAgTG9hZGVkCkBAIC02NCwxNCArNzYsMjkgQEAgcHVibGljOgogICAgIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRGYWNlPj4gbWF0Y2hpbmdGYWNlcyhjb25zdCBTdHJpbmcm
IGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2YXRlOgor
ICAgIENTU0ZvbnRGYWNlU2V0KCk7CisKKyAgICB2b2lkIHJlbW92ZUZyb21GYWNlc0xvb2t1cFRh
YmxlKGNvbnN0IENTU0ZvbnRGYWNlJiwgY29uc3QgQ1NTVmFsdWVMaXN0JiBmYW1pbGllc1RvU2Vh
cmNoRm9yKTsKKyAgICB2b2lkIGFkZFRvRmFjZXNMb29rdXBUYWJsZShDU1NGb250RmFjZSYpOwor
CiAgICAgdm9pZCBpbmNyZW1lbnRBY3RpdmVDb3VudCgpOwogICAgIHZvaWQgZGVjcmVtZW50QWN0
aXZlQ291bnQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2Um
LCBDU1NGb250RmFjZTo6U3RhdHVzIG9sZFN0YXRlLCBDU1NGb250RmFjZTo6U3RhdHVzIG5ld1N0
YXRlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9udFN0YXRlQ2hhbmdlZChDU1NGb250
RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMgb2xkU3RhdGUsIENTU0ZvbnRGYWNlOjpTdGF0dXMg
bmV3U3RhdGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmb250UHJvcGVydHlDaGFuZ2Vk
KENTU0ZvbnRGYWNlJiwgQ1NTVmFsdWVMaXN0KiBvbGRGYW1pbGllcyA9IG51bGxwdHIpIG92ZXJy
aWRlOworCisgICAgdm9pZCByZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KGNvbnN0IFN0
cmluZyYpOworCisgICAgc3RhdGljIFN0cmluZyBmYW1pbHlOYW1lRnJvbVByaW1pdGl2ZShjb25z
dCBDU1NQcmltaXRpdmVWYWx1ZSYpOwogCi0gICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+IG1f
ZmFjZXM7CisgICAgLy8gbV9mYWNlcyBzaG91bGQgaG9sZCBhbGwgdGhlIHNhbWUgZm9udHMgYXMg
dGhlIG9uZXMgaW5zaWRlIGluc2lkZSBtX2ZhY2VzTG9va3VwVGFibGUuCisgICAgVmVjdG9yPFJl
ZjxDU1NGb250RmFjZT4+IG1fZmFjZXM7IC8vIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBtb3Zpbmcg
bV9mYWNlcyB0byBGb250RmFjZVNldCBhbmQgbWFraW5nIGl0IHJlZmVyZW5jZSBGb250RmFjZXMu
IFRoaXMgbWF5IGNsZWFuIHVwIHRoZSBmb250IGxvYWRpbmcgZGVzaWduLgorICAgIEhhc2hNYXA8
U3RyaW5nLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFz
aD4gbV9mYWNlc0xvb2t1cFRhYmxlOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmPENT
U0ZvbnRGYWNlPj4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9sb2NhbGx5SW5zdGFsbGVk
RmFjZXNMb29rdXBUYWJsZTsKKyAgICBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDx1bnNpZ25lZCwg
c3RkOjp1bmlxdWVfcHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4sIEFTQ0lJQ2FzZUluc2Vuc2l0
aXZlSGFzaD4gbV9jYWNoZTsKKyAgICBzaXplX3QgbV9mYWNlc1BhcnRpdGlvbkluZGV4IHsgMCB9
OyAvLyBBbGwgZW50cmllcyBpbiBtX2ZhY2VzIGJlZm9yZSB0aGlzIGluZGV4IGFyZSBDU1MtY29u
bmVjdGVkLgogICAgIFN0YXR1cyBtX3N0YXR1cyB7IFN0YXR1czo6TG9hZGVkIH07Ci0gICAgQ1NT
Rm9udEZhY2VTZXRDbGllbnQmIG1fY2xpZW50OworICAgIEhhc2hTZXQ8Q1NTRm9udEZhY2VTZXRD
bGllbnQqPiBtX2NsaWVudHM7CiAgICAgdW5zaWduZWQgbV9hY3RpdmVDb3VudCB7IDAgfTsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgKaW5kZXggMWUyOWI1N2ZmZGZl
MzgwNzQ2ZTY3MjMyMzBkNTUzNDlhNTlmYjk5Zi4uZjYyMDI1ZDY5MDI3ODJiZDM1NDI5NGZmYTIw
ZTg0Y2YxNjVjMmQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgKQEAg
LTQ1LDYgKzQ1LDggQEAgY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgQ1NTRm9udEZhY2VTb3Vy
Y2UgZmluYWwgOiBwdWJsaWMgQ2FjaGVkRm9udENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CisgICAgQ1NTRm9udEZhY2VTb3VyY2UoQ1NTRm9udEZhY2UmIG93
bmVyLCBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWVPclVSSSwgQ2FjaGVkRm9udCogPSBudWxscHRy
LCBTVkdGb250RmFjZUVsZW1lbnQqID0gbnVsbHB0cik7CisgICAgdmlydHVhbCB+Q1NTRm9udEZh
Y2VTb3VyY2UoKTsKIAogICAgIC8vICAgICAgICAgICAgICAgICAgICAgID0+IFN1Y2Nlc3MKICAg
ICAvLyAgICAgICAgICAgICAgICAgICAgLy8KQEAgLTU3LDEwICs1OSw2IEBAIHB1YmxpYzoKICAg
ICAgICAgU3VjY2VzcywKICAgICAgICAgRmFpbHVyZQogICAgIH07Ci0KLSAgICBDU1NGb250RmFj
ZVNvdXJjZShDU1NGb250RmFjZSYgb3duZXIsIGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZU9yVVJJ
LCBDYWNoZWRGb250KiA9IG51bGxwdHIsIFNWR0ZvbnRGYWNlRWxlbWVudCogPSBudWxscHRyKTsK
LSAgICB2aXJ0dWFsIH5DU1NGb250RmFjZVNvdXJjZSgpOwotCiAgICAgU3RhdHVzIHN0YXR1cygp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZh
bWlseU5hbWVPclVSSSgpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWx5TmFtZU9yVVJJOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCmluZGV4IDJjOGMyYzZkMzY0MWExODI1ZGRl
YWZhZjhmZGFjNTFlZGQ1MTMzZmQuLjhhNzRjOThhZDA0NzFmZGJiNGEyMDRkNmQ2OTJjODc1OTVh
OWVhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCkBAIC0zMSw3ICsz
MSw2IEBACiAjaW5jbHVkZSAiQ1NTRm9udEZhY2UuaCIKICNpbmNsdWRlICJDU1NGb250RmFjZVJ1
bGUuaCIKICNpbmNsdWRlICJDU1NGb250RmFjZVNvdXJjZS5oIgotI2luY2x1ZGUgIkNTU0ZvbnRG
YWNlU3JjVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGb250RmFtaWx5LmgiCiAjaW5jbHVkZSAiQ1NT
Rm9udEZlYXR1cmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCkBAIC00
Niw2ICs0NSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAj
aW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udEZhY2VTZXQuaCIKICNpbmNsdWRl
ICJGb250VmFyaWFudEJ1aWxkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCkBAIC02NSw2ICs2NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBmb250U2VsZWN0
b3JJZDsKIAogQ1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogICAgIDogbV9kb2N1bWVudCgmZG9jdW1lbnQpCisgICAgLCBtX2Nzc0ZvbnRGYWNlU2V0
KENTU0ZvbnRGYWNlU2V0OjpjcmVhdGUoKSkKICAgICAsIG1fYmVnaW5Mb2FkaW5nVGltZXIoKnRo
aXMsICZDU1NGb250U2VsZWN0b3I6OmJlZ2luTG9hZFRpbWVyRmlyZWQpCiAgICAgLCBtX3VuaXF1
ZUlkKCsrZm9udFNlbGVjdG9ySWQpCiAgICAgLCBtX3ZlcnNpb24oMCkKQEAgLTc1LDk5ICs3Niwz
MiBAQCBDU1NGb250U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3RvcihEb2N1bWVudCYgZG9jdW1lbnQp
CiAKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5h
ZGRDbGllbnQoKnRoaXMpOworICAgIG1fY3NzRm9udEZhY2VTZXQtPmFkZENsaWVudCgqdGhpcyk7
CiB9CiAKIENTU0ZvbnRTZWxlY3Rvcjo6fkNTU0ZvbnRTZWxlY3RvcigpCiB7CiAgICAgY2xlYXJE
b2N1bWVudCgpOworICAgIG1fY3NzRm9udEZhY2VTZXQtPnJlbW92ZUNsaWVudCgqdGhpcyk7CiAg
ICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmVDbGllbnQoKnRoaXMpOwogfQogCi1ib29s
IENTU0ZvbnRTZWxlY3Rvcjo6aXNFbXB0eSgpIGNvbnN0CitGb250RmFjZVNldCYgQ1NTRm9udFNl
bGVjdG9yOjpmb250RmFjZVNldCgpCiB7Ci0gICAgcmV0dXJuIG1fZm9udHMuaXNFbXB0eSgpOwot
fQotCi12b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YXBwZW5kU291cmNlcyhDU1NGb250RmFjZSYgZm9u
dEZhY2UsIENTU1ZhbHVlTGlzdCYgc3JjTGlzdCwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlz
SW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpCi17Ci0gICAgZm9yIChhdXRv
JiBzcmMgOiBzcmNMaXN0KSB7Ci0gICAgICAgIC8vIEFuIGl0ZW0gaW4gdGhlIGxpc3QgZWl0aGVy
IHNwZWNpZmllcyBhIHN0cmluZyAobG9jYWwgZm9udCBuYW1lKSBvciBhIFVSTCAocmVtb3RlIGZv
bnQgdG8gZG93bmxvYWQpLgotICAgICAgICBDU1NGb250RmFjZVNyY1ZhbHVlJiBpdGVtID0gZG93
bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oc3JjLmdldCgpKTsKLSAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPENTU0ZvbnRGYWNlU291cmNlPiBzb3VyY2U7Ci0gICAgICAgIFNWR0ZvbnRGYWNlRWxl
bWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0cjsKLSAgICAgICAgYm9vbCBmb3VuZFNWR0Zv
bnQgPSBmYWxzZTsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgIGZvdW5kU1ZHRm9u
dCA9IGl0ZW0uaXNTVkdGb250RmFjZVNyYygpIHx8IGl0ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCk7
Ci0gICAgICAgIGZvbnRGYWNlRWxlbWVudCA9IGl0ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCk7Ci0j
ZW5kaWYKLSAgICAgICAgaWYgKCFpdGVtLmlzTG9jYWwoKSkgewotICAgICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+c2V0dGluZ3MoKSA6IG51bGxwdHI7
Ci0gICAgICAgICAgICBib29sIGFsbG93RG93bmxvYWRpbmcgPSBmb3VuZFNWR0ZvbnQgfHwgKHNl
dHRpbmdzICYmIHNldHRpbmdzLT5kb3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWQoKSk7Ci0g
ICAgICAgICAgICBpZiAoYWxsb3dEb3dubG9hZGluZyAmJiBpdGVtLmlzU3VwcG9ydGVkRm9ybWF0
KCkgJiYgZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoQ2FjaGVkRm9udCogY2FjaGVk
Rm9udCA9IGl0ZW0uY2FjaGVkRm9udChkb2N1bWVudCwgZm91bmRTVkdGb250LCBpc0luaXRpYXRp
bmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKSkKLSAgICAgICAgICAgICAgICAgICAgc291
cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oZm9udEZhY2UsIGl0ZW0u
cmVzb3VyY2UoKSwgY2FjaGVkRm9udCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgc291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4o
Zm9udEZhY2UsIGl0ZW0ucmVzb3VyY2UoKSwgbnVsbHB0ciwgZm9udEZhY2VFbGVtZW50KTsKLQot
ICAgICAgICBpZiAoc291cmNlKQotICAgICAgICAgICAgZm9udEZhY2UuYWRvcHRTb3VyY2UoV1RG
TW92ZShzb3VyY2UpKTsKKyAgICBpZiAoIW1fZm9udEZhY2VTZXQpIHsKKyAgICAgICAgQVNTRVJU
KG1fZG9jdW1lbnQpOworICAgICAgICBtX2ZvbnRGYWNlU2V0ID0gRm9udEZhY2VTZXQ6OmNyZWF0
ZSgqbV9kb2N1bWVudCwgbV9jc3NGb250RmFjZVNldC5nZXQoKSk7CiAgICAgfQotICAgIGZvbnRG
YWNlLnNvdXJjZXNQb3B1bGF0ZWQoKTsKLX0KIAotU3RyaW5nIENTU0ZvbnRTZWxlY3Rvcjo6ZmFt
aWx5TmFtZUZyb21QcmltaXRpdmUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZS5pc0ZvbnRGYW1pbHkoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmZvbnRG
YW1pbHkoKS5mYW1pbHlOYW1lOwotICAgIGlmICghdmFsdWUuaXNWYWx1ZUlEKCkpCi0gICAgICAg
IHJldHVybiB7IH07Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgcmF3IHRleHQgZm9yIGFs
bCB0aGUgZ2VuZXJpYyBmYW1pbHkgdHlwZXMsIHNpbmNlIEBmb250LWZhY2UgaXMgYSB3YXkgb2Yg
YWN0dWFsbHkKLSAgICAvLyBkZWZpbmluZyB3aGF0IGZvbnQgdG8gdXNlIGZvciB0aG9zZSB0eXBl
cy4KLSAgICBzd2l0Y2ggKHZhbHVlLmdldFZhbHVlSUQoKSkgewotICAgIGNhc2UgQ1NTVmFsdWVT
ZXJpZjoKLSAgICAgICAgcmV0dXJuIHNlcmlmRmFtaWx5OwotICAgIGNhc2UgQ1NTVmFsdWVTYW5z
U2VyaWY6Ci0gICAgICAgIHJldHVybiBzYW5zU2VyaWZGYW1pbHk7Ci0gICAgY2FzZSBDU1NWYWx1
ZUN1cnNpdmU6Ci0gICAgICAgIHJldHVybiBjdXJzaXZlRmFtaWx5OwotICAgIGNhc2UgQ1NTVmFs
dWVGYW50YXN5OgotICAgICAgICByZXR1cm4gZmFudGFzeUZhbWlseTsKLSAgICBjYXNlIENTU1Zh
bHVlTW9ub3NwYWNlOgotICAgICAgICByZXR1cm4gbW9ub3NwYWNlRmFtaWx5OwotICAgIGNhc2Ug
Q1NTVmFsdWVXZWJraXRQaWN0b2dyYXBoOgotICAgICAgICByZXR1cm4gcGljdG9ncmFwaEZhbWls
eTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KKyAgICByZXR1cm4g
Km1fZm9udEZhY2VTZXQ7CiB9CiAKLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjpyZWdpc3RlckxvY2Fs
Rm9udEZhY2VzRm9yRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKK2Jvb2wgQ1NTRm9u
dFNlbGVjdG9yOjppc0VtcHR5KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIW1fbG9jYWxseUluc3Rh
bGxlZEZvbnRGYWNlcy5jb250YWlucyhmYW1pbHlOYW1lKSk7Ci0KLSAgICBWZWN0b3I8Rm9udFRy
YWl0c01hc2s+IHRyYWl0c01hc2tzID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5nZXRUcmFpdHNJ
bkZhbWlseShmYW1pbHlOYW1lKTsKLSAgICBpZiAodHJhaXRzTWFza3MuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4gZmFjZXMgPSB7IH07
Ci0gICAgZm9yIChhdXRvIG1hc2sgOiB0cmFpdHNNYXNrcykgewotICAgICAgICBSZWY8Q1NTRm9u
dEZhY2U+IGZhY2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKCp0aGlzLCBudWxscHRyLCB0cnVlKTsK
LSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGZhbWlseUxpc3QgPSBDU1NW
YWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgICAgIGZhbWlseUxpc3QtPmFw
cGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1p
bHlOYW1lKSk7Ci0gICAgICAgIGZhY2UtPnNldEZhbWlsaWVzKCpmYW1pbHlMaXN0KTsKLSAgICAg
ICAgZmFjZS0+c2V0VHJhaXRzTWFzayhtYXNrKTsKLSAgICAgICAgZmFjZS0+YWRvcHRTb3VyY2Uo
c3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oZmFjZS5nZXQoKSwgZmFtaWx5TmFt
ZSkpOwotICAgICAgICBBU1NFUlQoIWZhY2UtPmFsbFNvdXJjZXNGYWlsZWQoKSk7Ci0gICAgICAg
IGZhY2VzLmFwcGVuZChXVEZNb3ZlKGZhY2UpKTsKLSAgICB9Ci0gICAgbV9sb2NhbGx5SW5zdGFs
bGVkRm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBXVEZNb3ZlKGZhY2VzKSk7CisgICAgcmV0dXJu
ICFtX2Nzc0ZvbnRGYWNlU2V0LT5mYWNlQ291bnQoKTsKIH0KIAotdm9pZCBDU1NGb250U2VsZWN0
b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxl
LCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpCit2b2lkIENT
U0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKFN0eWxlUnVsZUZvbnRGYWNlJiBmb250RmFj
ZVJ1bGUsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSkKIHsK
ICAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlID0gZm9udEZhY2VSdWxlLnByb3BlcnRp
ZXMoKTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRGYW1pbHkgPSBzdHlsZS5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CkBAIC0yMDEsNyArMTM1LDggQEAgdm9p
ZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFj
ZSYgZm9udEZhY2VSdWxlLCBib28KICAgICBpZiAoIXNyY0xpc3QubGVuZ3RoKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZjxDU1NGb250RmFjZT4gZm9udEZhY2UgPSBDU1NGb250RmFjZTo6
Y3JlYXRlKCp0aGlzKTsKKyAgICBtX2NyZWF0aW5nRm9udCA9IHRydWU7CisgICAgUmVmPENTU0Zv
bnRGYWNlPiBmb250RmFjZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUodGhpcywgJmZvbnRGYWNlUnVs
ZSk7CiAKICAgICBpZiAoIWZvbnRGYWNlLT5zZXRGYW1pbGllcygqZm9udEZhbWlseSkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTIyNiwyNiArMTYxLDEzIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjph
ZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwgYm9v
CiAgICAgaWYgKGZlYXR1cmVTZXR0aW5ncyAmJiAhZm9udEZhY2UtPnNldEZlYXR1cmVTZXR0aW5n
cygqZmVhdHVyZVNldHRpbmdzKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBwZW5kU291cmNl
cyhmb250RmFjZSwgc3JjTGlzdCwgbV9kb2N1bWVudCwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNl
ckFnZW50U2hhZG93VHJlZSk7CisgICAgQ1NTRm9udEZhY2U6OmFwcGVuZFNvdXJjZXMoZm9udEZh
Y2UsIHNyY0xpc3QsIG1fZG9jdW1lbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNo
YWRvd1RyZWUpOwogICAgIGlmIChmb250RmFjZS0+YWxsU291cmNlc0ZhaWxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBmYW1pbHlMaXN0KSB7Ci0gICAgICAg
IFN0cmluZyBmYW1pbHlOYW1lID0gZmFtaWx5TmFtZUZyb21QcmltaXRpdmUoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpKTsKLSAgICAgICAgaWYgKGZhbWlseU5hbWUuaXNF
bXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2ZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+KCkp
OwotICAgICAgICBhdXRvJiBmYW1pbHlGb250RmFjZXMgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlOwotICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgIHJl
Z2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoZmFtaWx5TmFtZSk7Ci0gICAgICAgICAgICBm
YW1pbHlGb250RmFjZXMgPSB7IH07Ci0gICAgICAgIH0KLQotICAgICAgICBmYW1pbHlGb250RmFj
ZXMuYXBwZW5kKGZvbnRGYWNlLmNvcHlSZWYoKSk7Ci0gICAgICAgIAotICAgICAgICArK21fdmVy
c2lvbjsKLSAgICB9CisgICAgbV9jc3NGb250RmFjZVNldC0+YWRkKGZvbnRGYWNlLmdldCgpKTsK
KyAgICBtX2NyZWF0aW5nRm9udCA9IGZhbHNlOworICAgICsrbV92ZXJzaW9uOwogfQogCiB2b2lk
IENTU0ZvbnRTZWxlY3Rvcjo6cmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFja3MoRm9udFNl
bGVjdG9yQ2xpZW50JiBjbGllbnQpCkBAIC0yNzMsNiArMTk1LDEyIEBAIHZvaWQgQ1NTRm9udFNl
bGVjdG9yOjpmb250TG9hZGVkKCkKICAgICBkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygp
OwogfQogCit2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udE1vZGlmaWVkKCkKK3sKKyAgICBpZiAo
IW1fY3JlYXRpbmdGb250KQorICAgICAgICBkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygp
OworfQorCiB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udENhY2hlSW52YWxpZGF0ZWQoKQogewog
ICAgIGRpc3BhdGNoSW52YWxpZGF0aW9uQ2FsbGJhY2tzKCk7CkBAIC0zMDQsODQgKzIzMiwxMyBA
QCBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiByZXNvbHZlR2VuZXJpY0ZhbWlseShEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEZvbnREZQogICAgIHJldHVybiBmYW1pbHlOYW1lOwogfQogCi1j
bGFzcyBGb250RmFjZUNvbXBhcmF0b3IgewotcHVibGljOgotICAgIEZvbnRGYWNlQ29tcGFyYXRv
cihGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24pCi0gICAgICAg
IDogbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24oZGVzaXJlZFRyYWl0c01hc2tGb3JD
b21wYXJpc29uKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04obV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFzayk7Ci0g
ICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENTU0ZvbnRGYWNlJiBmaXJzdCwgY29u
c3QgQ1NTRm9udEZhY2UmIHNlY29uZCkKLSAgICB7Ci0gICAgICAgIEZvbnRUcmFpdHNNYXNrIGZp
cnN0VHJhaXRzTWFzayA9IGZpcnN0LnRyYWl0c01hc2soKTsKLSAgICAgICAgRm9udFRyYWl0c01h
c2sgc2Vjb25kVHJhaXRzTWFzayA9IHNlY29uZC50cmFpdHNNYXNrKCk7Ci0KLSAgICAgICAgYm9v
bCBmaXJzdEhhc0Rlc2lyZWRTdHlsZSA9IGZpcnN0VHJhaXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0
c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFzazsKLSAgICAgICAgYm9vbCBzZWNvbmRI
YXNEZXNpcmVkU3R5bGUgPSBzZWNvbmRUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFza0Zv
ckNvbXBhcmlzb24gJiBGb250U3R5bGVNYXNrOwotCi0gICAgICAgIGlmIChmaXJzdEhhc0Rlc2ly
ZWRTdHlsZSAhPSBzZWNvbmRIYXNEZXNpcmVkU3R5bGUpCi0gICAgICAgICAgICByZXR1cm4gZmly
c3RIYXNEZXNpcmVkU3R5bGU7Ci0KLSAgICAgICAgaWYgKChtX2Rlc2lyZWRUcmFpdHNNYXNrRm9y
Q29tcGFyaXNvbiAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICFmaXJzdC5pc0xvY2FsRmFsbGJh
Y2soKSAmJiAhc2Vjb25kLmlzTG9jYWxGYWxsYmFjaygpKSB7Ci0gICAgICAgICAgICAvLyBQcmVm
ZXIgYSBmb250IHRoYXQgaGFzIGluZGljYXRlZCB0aGF0IGl0IGNhbiBvbmx5IHN1cHBvcnQgaXRh
bGljcyB0byBhIGZvbnQgdGhhdCBjbGFpbXMgdG8gc3VwcG9ydAotICAgICAgICAgICAgLy8gYWxs
IHN0eWxlcy4gVGhlIHNwZWNpYWxpemVkIGZvbnQgaXMgbW9yZSBsaWtlbHkgdG8gYmUgdGhlIG9u
ZSB0aGUgYXV0aG9yIHdhbnRzIHVzZWQuCi0gICAgICAgICAgICBib29sIGZpcnN0UmVxdWlyZXNJ
dGFsaWNzID0gKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEoZmly
c3RUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzayk7Ci0gICAgICAgICAgICBib29sIHNl
Y29uZFJlcXVpcmVzSXRhbGljcyA9IChzZWNvbmRUcmFpdHNNYXNrICYgRm9udFN0eWxlSXRhbGlj
TWFzaykgJiYgIShzZWNvbmRUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzayk7Ci0gICAg
ICAgICAgICBpZiAoZmlyc3RSZXF1aXJlc0l0YWxpY3MgIT0gc2Vjb25kUmVxdWlyZXNJdGFsaWNz
KQotICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFJlcXVpcmVzSXRhbGljczsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChzZWNvbmRUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFza0Zv
ckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFzaykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKGZpcnN0VHJhaXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21w
YXJpc29uICYgRm9udFdlaWdodE1hc2spCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWNzczMtZm9udHMtMjAxMTEwMDQv
I2ZvbnQtbWF0Y2hpbmctYWxnb3JpdGhtIHNheXMgOgotICAgICAgICAvLyAgIC0gSWYgdGhlIGRl
c2lyZWQgd2VpZ2h0IGlzIGxlc3MgdGhhbiA0MDAsIHdlaWdodHMgYmVsb3cgdGhlIGRlc2lyZWQg
d2VpZ2h0IGFyZSBjaGVja2VkIGluIGRlc2NlbmRpbmcgb3JkZXIgZm9sbG93ZWQgYnkgd2VpZ2h0
cyBhYm92ZSB0aGUgZGVzaXJlZCB3ZWlnaHQgaW4gYXNjZW5kaW5nIG9yZGVyIHVudGlsIGEgbWF0
Y2ggaXMgZm91bmQuCi0gICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgZ3Jl
YXRlciB0aGFuIDUwMCwgd2VpZ2h0cyBhYm92ZSB0aGUgZGVzaXJlZCB3ZWlnaHQgYXJlIGNoZWNr
ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGZvbGxvd2VkIGJ5IHdlaWdodHMgYmVsb3cgdGhlIGRlc2ly
ZWQgd2VpZ2h0IGluIGRlc2NlbmRpbmcgb3JkZXIgdW50aWwgYSBtYXRjaCBpcyBmb3VuZC4KLSAg
ICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyA0MDAsIDUwMCBpcyBjaGVja2Vk
IGZpcnN0IGFuZCB0aGVuIHRoZSBydWxlIGZvciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFuIDQw
MCBpcyB1c2VkLgotICAgICAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIDUwMCwg
NDAwIGlzIGNoZWNrZWQgZmlyc3QgYW5kIHRoZW4gdGhlIHJ1bGUgZm9yIGRlc2lyZWQgd2VpZ2h0
cyBsZXNzIHRoYW4gNDAwIGlzIHVzZWQuCi0KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGZhbGxiYWNrUnVsZVNldHMgPSA5OwotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcnVs
ZXNQZXJTZXQgPSA4OwotICAgICAgICBzdGF0aWMgY29uc3QgRm9udFRyYWl0c01hc2sgd2VpZ2h0
RmFsbGJhY2tSdWxlU2V0c1tmYWxsYmFja1J1bGVTZXRzXVtydWxlc1BlclNldF0gPSB7Ci0gICAg
ICAgICAgICB7IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdo
dDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdo
dDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAotICAgICAg
ICAgICAgeyBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQ0
MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3
MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAgICAg
ICAgIHsgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0NDAw
TWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAw
TWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgICAg
ICB7IEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1h
c2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1h
c2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAotICAgICAgICAgICAg
eyBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNr
LCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNr
LCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAgICAgICAgIHsg
Rm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzaywg
Rm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywg
Rm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZv
bnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZv
bnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZv
bnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9LAotICAgICAgICAgICAgeyBGb250
V2VpZ2h0OTAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250
V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250
V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9udFdl
aWdodDgwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdl
aWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdl
aWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0KLSAgICAgICAgfTsKLQotICAgICAgICB1
bnNpZ25lZCBydWxlU2V0SW5kZXggPSAwOwotICAgICAgICBmb3IgKDsgIShtX2Rlc2lyZWRUcmFp
dHNNYXNrRm9yQ29tcGFyaXNvbiAmICgxIDw8IChGb250V2VpZ2h0MTAwQml0ICsgcnVsZVNldElu
ZGV4KSkpOyBydWxlU2V0SW5kZXgrKykgeyB9Ci0KLSAgICAgICAgY29uc3QgRm9udFRyYWl0c01h
c2sqIHdlaWdodEZhbGxiYWNrUnVsZSA9IHdlaWdodEZhbGxiYWNrUnVsZVNldHNbcnVsZVNldElu
ZGV4XTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzUGVyU2V0OyArK2kp
IHsKLSAgICAgICAgICAgIGlmIChzZWNvbmRUcmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tSdWxl
W2ldKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChmaXJz
dFRyYWl0c01hc2sgJiB3ZWlnaHRGYWxsYmFja1J1bGVbaV0pCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIEZvbnRUcmFpdHNNYXNrIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJp
c29uOwotfTsKLQogRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1p
bHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICAvLyBGSVhNRTogVGhlIHNwZWMgKGFuZCBGaXJlZm94
KSBzYXlzIHVzZXIgc3BlY2lmaWVkIGdlbmVyaWMgZmFtaWxpZXMgKHNhbnMtc2VyaWYgZXRjLikg
c2hvdWxkIGJlIHJlc29sdmVkIGJlZm9yZSB0aGUgQGZvbnQtZmFjZSBsb29rdXAgdG9vLgogICAg
IGJvb2wgcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCA9IGZhbWlseU5hbWUgPT0gc3RhbmRhcmRG
YW1pbHk7CiAKICAgICBBdG9taWNTdHJpbmcgZmFtaWx5Rm9yTG9va3VwID0gcmVzb2x2ZUdlbmVy
aWNGYW1pbHlGaXJzdCA/IHJlc29sdmVHZW5lcmljRmFtaWx5KG1fZG9jdW1lbnQsIGZvbnREZXNj
cmlwdGlvbiwgZmFtaWx5TmFtZSkgOiBmYW1pbHlOYW1lOwotICAgIENTU1NlZ21lbnRlZEZvbnRG
YWNlKiBmYWNlID0gZ2V0Rm9udEZhY2UoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlGb3JMb29rdXAp
OworICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBmYWNlID0gbV9jc3NGb250RmFjZVNldC0+Z2V0
Rm9udEZhY2UoZm9udERlc2NyaXB0aW9uLnRyYWl0c01hc2soKSwgZmFtaWx5Rm9yTG9va3VwKTsK
ICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgaWYgKCFyZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0
KQogICAgICAgICAgICAgZmFtaWx5Rm9yTG9va3VwID0gcmVzb2x2ZUdlbmVyaWNGYW1pbHkobV9k
b2N1bWVudCwgZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKQEAgLTM5MSw0OSArMjQ4LDYg
QEAgRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3IKICAgICByZXR1cm4gZmFjZS0+Zm9udFJhbmdlcyhm
b250RGVzY3JpcHRpb24pOwogfQogCi1DU1NTZWdtZW50ZWRGb250RmFjZSogQ1NTRm9udFNlbGVj
dG9yOjpnZXRGb250RmFjZShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fZm9u
dEZhY2VzLmZpbmQoZmFtaWx5KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9mb250RmFjZXMuZW5k
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8mIGZhbWlseUZvbnRGYWNlcyA9
IGl0ZXJhdG9yLT52YWx1ZTsKLQotICAgIGF1dG8mIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBt
X2ZvbnRzLmFkZChmYW1pbHksIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxDU1NT
ZWdtZW50ZWRGb250RmFjZT4+KCkpLml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIEZvbnRUcmFpdHNN
YXNrIHRyYWl0c01hc2sgPSBmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpOwotCi0gICAgYXV0
byYgZmFjZSA9IHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUuYWRkKHRyYWl0c01hc2ssIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhY2UuZ2V0
KCk7Ci0KLSAgICBmYWNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NTZWdtZW50ZWRGb250RmFjZT4o
KnRoaXMpOwotCi0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9udEZhY2U+
LCAzMj4gY2FuZGlkYXRlRm9udEZhY2VzOwotICAgIGZvciAoaW50IGkgPSBmYW1pbHlGb250RmFj
ZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgQ1NTRm9udEZhY2UmIGNhbmRp
ZGF0ZSA9IGZhbWlseUZvbnRGYWNlc1tpXTsKLSAgICAgICAgdW5zaWduZWQgY2FuZGlkYXRlVHJh
aXRzTWFzayA9IGNhbmRpZGF0ZS50cmFpdHNNYXNrKCk7Ci0gICAgICAgIGlmICgodHJhaXRzTWFz
ayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAmIEZvbnRT
dHlsZU5vcm1hbE1hc2spKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNhbmRpZGF0
ZUZvbnRGYWNlcy5hcHBlbmQoY2FuZGlkYXRlKTsKLSAgICB9Ci0KLSAgICBhdXRvIGxvY2FsSXRl
cmF0b3IgPSBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMuZmluZChmYW1pbHkpOwotICAgIGlm
IChsb2NhbEl0ZXJhdG9yICE9IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5lbmQoKSkgewot
ICAgICAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGxvY2FsSXRlcmF0b3ItPnZhbHVlKSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVUcmFpdHNNYXNrID0gY2FuZGlkYXRlLT50cmFp
dHNNYXNrKCk7Ci0gICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxN
YXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNhbmRpZGF0ZUZvbnRGYWNlcy5h
cHBlbmQoY2FuZGlkYXRlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0ZDo6c3RhYmxlX3Nv
cnQoY2FuZGlkYXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRpZGF0ZUZvbnRGYWNlcy5lbmQoKSwg
Rm9udEZhY2VDb21wYXJhdG9yKHRyYWl0c01hc2spKTsKLSAgICBmb3IgKGF1dG8mIGNhbmRpZGF0
ZSA6IGNhbmRpZGF0ZUZvbnRGYWNlcykKLSAgICAgICAgZmFjZS0+YXBwZW5kRm9udEZhY2UoY2Fu
ZGlkYXRlLmdldCgpKTsKLQotICAgIHJldHVybiBmYWNlLmdldCgpOwotfQotCiB2b2lkIENTU0Zv
bnRTZWxlY3Rvcjo6Y2xlYXJEb2N1bWVudCgpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KSB7CkBA
IC00NTQsOSArMjY4LDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmNsZWFyRG9jdW1lbnQoKQog
ICAgIG1fZG9jdW1lbnQgPSBudWxscHRyOwogCiAgICAgLy8gRklYTUU6IFRoaXMgb2JqZWN0IHNo
b3VsZCBvdXRsaXZlIHRoZSBEb2N1bWVudC4KLSAgICBtX2ZvbnRGYWNlcy5jbGVhcigpOwotICAg
IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5jbGVhcigpOwotICAgIG1fZm9udHMuY2xlYXIo
KTsKKyAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5jbGVhcigpOwogICAgIG1fY2xpZW50cy5jbGVhcigp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKaW5kZXggOWEyN2ZlMjJlZjcy
ZDRhOTc3YjZmNzM1YTMxMDIzNTk2MTk2NTVjMS4uYzExMmU4OGY3NDc2NTljODkwNTUwMjYxYjVl
ZDUxOWRhODZmZmYxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxl
Y3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaApAQCAtMjcs
NiArMjcsNyBAQAogI2RlZmluZSBDU1NGb250U2VsZWN0b3JfaAogCiAjaW5jbHVkZSAiQ1NTRm9u
dEZhY2UuaCIKKyNpbmNsdWRlICJDU1NGb250RmFjZVNldC5oIgogI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rv
ci5oIgpAQCAtNDgsNyArNDksNyBAQCBjbGFzcyBDYWNoZWRGb250OwogY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBTdHlsZVJ1bGVGb250RmFjZTsKIAotY2xhc3MgQ1NTRm9udFNlbGVjdG9yIGZpbmFs
IDogcHVibGljIEZvbnRTZWxlY3RvciB7CitjbGFzcyBDU1NGb250U2VsZWN0b3IgZmluYWwgOiBw
dWJsaWMgRm9udFNlbGVjdG9yLCBwdWJsaWMgQ1NTRm9udEZhY2VTZXRDbGllbnQgewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8Q1NTRm9udFNlbGVjdG9yPiBjcmVhdGUoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogICAgIHsKQEAgLTYyLDEyICs2MywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBGb250
UmFuZ2VzIGZvbnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbWljU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBzaXplX3QgZmFsbGJhY2tGb250
Q291bnQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJlZlB0cjxGb250PiBmYWxsYmFja0ZvbnRB
dChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3QpIG92ZXJyaWRlOwotICAgIENTU1NlZ21l
bnRlZEZvbnRGYWNlKiBnZXRGb250RmFjZShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGNsZWFyRG9jdW1lbnQoKTsKIAotICAg
IHN0YXRpYyB2b2lkIGFwcGVuZFNvdXJjZXMoQ1NTRm9udEZhY2UmLCBDU1NWYWx1ZUxpc3QmLCBE
b2N1bWVudCosIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7
Ci0gICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UmLCBib29s
IGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOworICAgIHZvaWQgYWRk
Rm9udEZhY2VSdWxlKFN0eWxlUnVsZUZvbnRGYWNlJiwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKIAogICAgIHZvaWQgZm9udExvYWRlZCgpOwogICAgIHZp
cnR1YWwgdm9pZCBmb250Q2FjaGVJbnZhbGlkYXRlZCgpIG92ZXJyaWRlOwpAQCAtODEsMjEgKzgw
LDIwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYmVnaW5Mb2FkaW5nRm9udFNvb24oQ2FjaGVkRm9u
dCopOwogCi0gICAgc3RhdGljIFN0cmluZyBmYW1pbHlOYW1lRnJvbVByaW1pdGl2ZShjb25zdCBD
U1NQcmltaXRpdmVWYWx1ZSYpOworICAgIEZvbnRGYWNlU2V0JiBmb250RmFjZVNldCgpOwogCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IENTU0ZvbnRTZWxlY3RvcihEb2N1bWVudCYpOwogCiAgICAg
dm9pZCBkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygpOwogCi0gICAgdm9pZCBiZWdpbkxv
YWRUaW1lckZpcmVkKCk7CisgICAgdmlydHVhbCB2b2lkIGZvbnRNb2RpZmllZCgpIG92ZXJyaWRl
OwogCi0gICAgdm9pZCByZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KGNvbnN0IFN0cmlu
ZyYpOworICAgIHZvaWQgYmVnaW5Mb2FkVGltZXJGaXJlZCgpOwogCiAgICAgRG9jdW1lbnQqIG1f
ZG9jdW1lbnQ7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+Piwg
QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX2ZvbnRGYWNlczsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1f
bG9jYWxseUluc3RhbGxlZEZvbnRGYWNlczsKLSAgICBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDx1
bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4sIEFTQ0lJQ2Fz
ZUluc2Vuc2l0aXZlSGFzaD4gbV9mb250czsKKyAgICBSZWZQdHI8Rm9udEZhY2VTZXQ+IG1fZm9u
dEZhY2VTZXQ7CisgICAgUmVmPENTU0ZvbnRGYWNlU2V0PiBtX2Nzc0ZvbnRGYWNlU2V0OwogICAg
IEhhc2hTZXQ8Rm9udFNlbGVjdG9yQ2xpZW50Kj4gbV9jbGllbnRzOwogCiAgICAgVmVjdG9yPENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZvbnQ+PiBtX2ZvbnRzVG9CZWdpbkxvYWRpbmc7CkBA
IC0xMDMsNiArMTAxLDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fdW5pcXVlSWQ7CiAg
ICAgdW5zaWduZWQgbV92ZXJzaW9uOworICAgIGJvb2wgbV9jcmVhdGluZ0ZvbnQgeyBmYWxzZSB9
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
ZWdtZW50ZWRGb250RmFjZS5jcHAKaW5kZXggZjVmY2JhZWE4ZGRhZTg2OWI2ZDNmYzkzMDI3NDlj
MjI2Yjk5MDNhZi4uNGMyMGQzOGZlNGU2ZDZmOTYyMjZiNDQzY2VkM2U1M2Y4ZmUwMTVmNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCkBAIC0zNyw4ICsz
Nyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NTU2VnbWVudGVkRm9udEZhY2U6OkNT
U1NlZ21lbnRlZEZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yKQotICAgIDog
bV9mb250U2VsZWN0b3IoZm9udFNlbGVjdG9yKQorQ1NTU2VnbWVudGVkRm9udEZhY2U6OkNTU1Nl
Z21lbnRlZEZvbnRGYWNlKCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlZ21lbnRlZEZvbnRGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVk
Rm9udEZhY2UuaAppbmRleCAwN2I3MWY4MmRiNzI0ZmM5Y2U1MWQ5ZTEwZjc4MDYxNWEyNjMzNDdm
Li45MjAzNjEyZDA5MTEzNzFmMGIwNGE4MDA3OTI2OTYxNTlmZWNlNTRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaApAQCAtNDIsMTkgKzQyLDE4IEBAIGNsYXNz
IEZvbnREZXNjcmlwdGlvbjsKIGNsYXNzIENTU1NlZ21lbnRlZEZvbnRGYWNlIGZpbmFsIDogcHVi
bGljIENTU0ZvbnRGYWNlOjpDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciYpOworICAg
IENTU1NlZ21lbnRlZEZvbnRGYWNlKCk7CiAgICAgfkNTU1NlZ21lbnRlZEZvbnRGYWNlKCk7CiAK
LSAgICBDU1NGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dFNlbGVjdG9yOyB9Ci0KICAgICB2b2lkIGFwcGVuZEZvbnRGYWNlKFJlZjxDU1NGb250RmFjZT4m
Jik7CiAKICAgICBGb250UmFuZ2VzIGZvbnRSYW5nZXMoY29uc3QgRm9udERlc2NyaXB0aW9uJik7
CiAKKyAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPiwgMT4mIGNvbnN0aXR1ZW50RmFjZXMoKSB7
IHJldHVybiBtX2ZvbnRGYWNlczsgfQorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBmb250
TG9hZGVkKENTU0ZvbnRGYWNlJikgb3ZlcnJpZGU7CiAKLSAgICBDU1NGb250U2VsZWN0b3ImIG1f
Zm9udFNlbGVjdG9yOwogICAgIEhhc2hNYXA8Rm9udERlc2NyaXB0aW9uS2V5LCBGb250UmFuZ2Vz
LCBGb250RGVzY3JpcHRpb25LZXlIYXNoLCBXVEY6OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxGb250
RGVzY3JpcHRpb25LZXk+PiBtX2NhY2hlOwogICAgIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+LCAx
PiBtX2ZvbnRGYWNlczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZh
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAppbmRleCBjNDVlOGQyNzEx
ZjA3NTk3Njk1ZGY2MjYyNjRjODllMzhkM2M1ZWZhLi5hMGJkODI0NzYwZjJmMDlmMjRiMDhkOGYy
ZjhjOTBjMjNjNGNhM2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKQEAgLTc1LDcgKzc1LDcg
QEAgUmVmUHRyPEZvbnRGYWNlPiBGb250RmFjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0YXRlJiBleGVj
U3RhdGUsIFNjcmlwdEV4ZWN1dGlvbkNvbnQKICAgICAgICAgYXV0byB2YWx1ZSA9IEZvbnRGYWNl
OjpwYXJzZVN0cmluZyhzb3VyY2VTdHJpbmcsIENTU1Byb3BlcnR5U3JjKTsKICAgICAgICAgaWYg
KGlzPENTU1ZhbHVlTGlzdD4odmFsdWUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxp
c3QmIHNyY0xpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7Ci0gICAgICAgICAg
ICBDU1NGb250U2VsZWN0b3I6OmFwcGVuZFNvdXJjZXMocmVzdWx0LT5iYWNraW5nKCksIHNyY0xp
c3QsICZkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCksIGZhbHNlKTsKKyAgICAgICAgICAgIENT
U0ZvbnRGYWNlOjphcHBlbmRTb3VyY2VzKHJlc3VsdC0+YmFja2luZygpLCBzcmNMaXN0LCAmZG93
bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLCBmYWxzZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTExMCw4ICsxMTAsMjIgQEAgUmVmUHRyPEZvbnRGYWNlPiBGb250RmFjZTo6Y3JlYXRlKEpTQzo6
RXhlY1N0YXRlJiBleGVjU3RhdGUsIFNjcmlwdEV4ZWN1dGlvbkNvbnQKICAgICByZXR1cm4gcmVz
dWx0LnB0cigpOwogfQogCitSZWY8Rm9udEZhY2U+IEZvbnRGYWNlOjpjcmVhdGUoSlNDOjpFeGVj
U3RhdGUmIGV4ZWNTdGF0ZSwgQ1NTRm9udEZhY2UmIGZhY2UpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRm9udEZhY2UoZXhlY1N0YXRlLCBmYWNlKSk7Cit9CisKIEZvbnRGYWNlOjpGb250
RmFjZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBDU1NGb250U2VsZWN0b3ImIGZvbnRTZWxl
Y3RvcikKLSAgICA6IG1fYmFja2luZyhDU1NGb250RmFjZTo6Y3JlYXRlKGZvbnRTZWxlY3Rvciwg
dGhpcykpCisgICAgOiBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCisgICAgLCBtX2JhY2tpbmcoQ1NT
Rm9udEZhY2U6OmNyZWF0ZSgmZm9udFNlbGVjdG9yLCBudWxscHRyLCB0aGlzKSkKKyAgICAsIG1f
cHJvbWlzZShjcmVhdGVQcm9taXNlKGV4ZWNTdGF0ZSkpCit7CisgICAgbV9iYWNraW5nLT5hZGRD
bGllbnQoKnRoaXMpOworfQorCitGb250RmFjZTo6Rm9udEZhY2UoSlNDOjpFeGVjU3RhdGUmIGV4
ZWNTdGF0ZSwgQ1NTRm9udEZhY2UmIGZhY2UpCisgICAgOiBtX3dlYWtQdHJGYWN0b3J5KHRoaXMp
CisgICAgLCBtX2JhY2tpbmcoZmFjZSkKICAgICAsIG1fcHJvbWlzZShjcmVhdGVQcm9taXNlKGV4
ZWNTdGF0ZSkpCiB7CiAgICAgbV9iYWNraW5nLT5hZGRDbGllbnQoKnRoaXMpOwpAQCAtMTIyLDYg
KzEzNiwxMSBAQCBGb250RmFjZTo6fkZvbnRGYWNlKCkKICAgICBtX2JhY2tpbmctPnJlbW92ZUNs
aWVudCgqdGhpcyk7CiB9CiAKK1dlYWtQdHI8Rm9udEZhY2U+IEZvbnRGYWNlOjpjcmVhdGVXZWFr
UHRyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRy
KCk7Cit9CisKIFJlZlB0cjxDU1NWYWx1ZT4gRm9udEZhY2U6OnBhcnNlU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgUmVmPE11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRl
KCk7CkBAIC0zMTcsMTggKzMzNiwyNSBAQCBTdHJpbmcgRm9udEZhY2U6OnN0YXR1cygpIGNvbnN0
CiAgICAgcmV0dXJuIFN0cmluZygiZXJyb3IiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKIH0KIAotdm9pZCBGb250RmFjZTo6c3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiBmYWNlLCBD
U1NGb250RmFjZTo6U3RhdHVzLCBDU1NGb250RmFjZTo6U3RhdHVzIG5ld1N0YXRlKQordm9pZCBG
b250RmFjZTo6Zm9udFN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYgZmFjZSwgQ1NTRm9udEZhY2U6
OlN0YXR1cywgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0ZSkKIHsKICAgICBBU1NFUlRfVU5V
U0VEKGZhY2UsICZmYWNlID09IG1fYmFja2luZy5wdHIoKSk7CiAgICAgc3dpdGNoIChuZXdTdGF0
ZSkgeworICAgIGNhc2UgQ1NTRm9udEZhY2U6OlN0YXR1czo6TG9hZGluZzoKKyAgICAgICAgLy8g
V2Ugc3RpbGwgbmVlZCB0byByZXNvbHZlIHByb21pc2VzIHdoZW4gbG9hZGluZyBjb21wbGV0ZXMs
IGV2ZW4gaWYgYWxsIHJlZmVyZW5jZXMgdG8gdXNlIGhhdmUgZmFsbGVuIG91dCBvZiBzY29wZS4K
KyAgICAgICAgcmVmKCk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTRm9udEZhY2U6OlN0
YXR1czo6VGltZWRPdXQ6CiAgICAgICAgIHJlamVjdFByb21pc2UoTkVUV09SS19FUlIpOworICAg
ICAgICBkZXJlZigpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NGb250RmFjZTo6U3Rh
dHVzOjpTdWNjZXNzOgogICAgICAgICBmdWxmaWxsUHJvbWlzZSgpOworICAgICAgICBkZXJlZigp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NGb250RmFjZTo6U3RhdHVzOjpGYWlsdXJl
OgogICAgICAgICByZWplY3RQcm9taXNlKE5FVFdPUktfRVJSKTsKKyAgICAgICAgZGVyZWYoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRGYWNlLmgKaW5kZXggZjY2ZmI5YWZkZjY4ZWY1YzFhNmZjNWFjYTk3MmMyMDdjMzVmNGQzNC4u
MTBhMTc3MDEwYmY3ZTU3MTM5OWM5ZGVlYTk1YTBkYzI1NzI0YjQ0MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRG
YWNlLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgRGVwcmVjYXRlZCB7CkBAIC00OCw2ICs0OSw3IEBAIGNsYXNzIERpY3Rpb25hcnk7CiBj
bGFzcyBGb250RmFjZSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRGYWNlPiwgcHVibGlj
IENTU0ZvbnRGYWNlOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8Rm9udEZh
Y2U+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25z
dCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNvdXJjZSwg
Y29uc3QgRGljdGlvbmFyeSYgZGVzY3JpcHRvcnMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0
aWMgUmVmPEZvbnRGYWNlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUmLCBDU1NGb250RmFjZSYpOwog
ICAgIHZpcnR1YWwgfkZvbnRGYWNlKCk7CiAKICAgICB2b2lkIHNldEZhbWlseShjb25zdCBTdHJp
bmcmLCBFeGNlcHRpb25Db2RlJik7CkBAIC03NiwxNCArNzgsMTggQEAgcHVibGljOgogCiAgICAg
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgQ1NTUHJv
cGVydHlJRCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZm9udFN0YXRlQ2hhbmdlZChDU1NGb250RmFj
ZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMgb2xkU3RhdGUsIENTU0ZvbnRGYWNlOjpTdGF0dXMgbmV3
U3RhdGUpIG92ZXJyaWRlOworCisgICAgV2Vha1B0cjxGb250RmFjZT4gY3JlYXRlV2Vha1B0cigp
IGNvbnN0OworCiBwcml2YXRlOgogICAgIEZvbnRGYWNlKEpTQzo6RXhlY1N0YXRlJiwgQ1NTRm9u
dFNlbGVjdG9yJik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNl
JiwgQ1NTRm9udEZhY2U6OlN0YXR1cyBvbGRTdGF0ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdT
dGF0ZSkgb3ZlcnJpZGU7CisgICAgRm9udEZhY2UoSlNDOjpFeGVjU3RhdGUmLCBDU1NGb250RmFj
ZSYpOwogCiAgICAgdm9pZCBmdWxmaWxsUHJvbWlzZSgpOwogICAgIHZvaWQgcmVqZWN0UHJvbWlz
ZShFeGNlcHRpb25Db2RlKTsKIAorICAgIFdlYWtQdHJGYWN0b3J5PEZvbnRGYWNlPiBtX3dlYWtQ
dHJGYWN0b3J5OwogICAgIFJlZjxDU1NGb250RmFjZT4gbV9iYWNraW5nOwogICAgIFByb21pc2Ug
bV9wcm9taXNlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNl
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuY3BwCmluZGV4IDdlZDc3NDY2
YjQyNDI5M2RjZWI3ZjNiNTUyNGJlMTg0ZTFjNWE4MmMuLmZlM2VkMjg4M2VjNWY1YmI1ZmQ0NWY5
MTk5YWE1NzZlMGVmNTE1MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFj
ZVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcApAQCAtNDIs
MTcgKzQyLDM5IEBAIHN0YXRpYyBGb250RmFjZVNldDo6UHJvbWlzZSBjcmVhdGVQcm9taXNlKEpT
Qzo6RXhlY1N0YXRlJiBleGVjKQogICAgIHJldHVybiBGb250RmFjZVNldDo6UHJvbWlzZShEZWZl
cnJlZFdyYXBwZXIoJmV4ZWMsICZnbG9iYWxPYmplY3QsIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6
OmNyZWF0ZSgmZXhlYywgJmdsb2JhbE9iamVjdCkpKTsKIH0KIAotRm9udEZhY2VTZXQ6OkZvbnRG
YWNlU2V0KEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIERvY3VtZW50JiBkb2N1bWVudCwgY29u
c3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+JiBpbml0aWFsRmFjZXMpCitSZWY8Rm9udEZhY2VT
ZXQ+IEZvbnRGYWNlU2V0OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBWZWN0b3I8
UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcykKK3sKKyAgICBSZWY8Rm9udEZhY2VTZXQ+
IHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgRm9udEZhY2VTZXQoZG9jdW1lbnQsIGluaXRpYWxGYWNl
cykpOworICAgIHJlc3VsdC0+c3VzcGVuZElmTmVlZGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworUmVmPEZvbnRGYWNlU2V0PiBGb250RmFjZVNldDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1
bWVudCwgQ1NTRm9udEZhY2VTZXQmIGJhY2tpbmcpCit7CisgICAgUmVmPEZvbnRGYWNlU2V0PiBy
ZXN1bHQgPSBhZG9wdFJlZigqbmV3IEZvbnRGYWNlU2V0KGRvY3VtZW50LCBiYWNraW5nKSk7Cisg
ICAgcmVzdWx0LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitG
b250RmFjZVNldDo6Rm9udEZhY2VTZXQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBWZWN0b3I8
UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcykKICAgICA6IEFjdGl2ZURPTU9iamVjdCgm
ZG9jdW1lbnQpCi0gICAgLCBtX2JhY2tpbmcoKnRoaXMpCi0gICAgLCBtX3Byb21pc2UoY3JlYXRl
UHJvbWlzZShleGVjU3RhdGUpKQorICAgICwgbV9iYWNraW5nKENTU0ZvbnRGYWNlU2V0OjpjcmVh
dGUoKSkKIHsKKyAgICBtX2JhY2tpbmctPmFkZENsaWVudCgqdGhpcyk7CiAgICAgZm9yIChhdXRv
JiBmYWNlIDogaW5pdGlhbEZhY2VzKQogICAgICAgICBhZGQoZmFjZS5nZXQoKSk7CiB9CiAKK0Zv
bnRGYWNlU2V0OjpGb250RmFjZVNldChEb2N1bWVudCYgZG9jdW1lbnQsIENTU0ZvbnRGYWNlU2V0
JiBiYWNraW5nKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KCZkb2N1bWVudCkKKyAgICAsIG1fYmFj
a2luZyhiYWNraW5nKQoreworICAgIG1fYmFja2luZy0+YWRkQ2xpZW50KCp0aGlzKTsKK30KKwog
Rm9udEZhY2VTZXQ6On5Gb250RmFjZVNldCgpCiB7CisgICAgbV9iYWNraW5nLT5yZW1vdmVDbGll
bnQoKnRoaXMpOwogfQogCiBGb250RmFjZVNldDo6SXRlcmF0b3I6Okl0ZXJhdG9yKEZvbnRGYWNl
U2V0JiBzZXQpCkBAIC02MCwxMSArODIsMTEgQEAgRm9udEZhY2VTZXQ6Okl0ZXJhdG9yOjpJdGVy
YXRvcihGb250RmFjZVNldCYgc2V0KQogewogfQogCi1ib29sIEZvbnRGYWNlU2V0OjpJdGVyYXRv
cjo6bmV4dChSZWZQdHI8Rm9udEZhY2U+JiBrZXksIFJlZlB0cjxGb250RmFjZT4mIHZhbHVlKQor
Ym9vbCBGb250RmFjZVNldDo6SXRlcmF0b3I6Om5leHQoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0
ZSwgUmVmUHRyPEZvbnRGYWNlPiYga2V5LCBSZWZQdHI8Rm9udEZhY2U+JiB2YWx1ZSkKIHsKICAg
ICBpZiAobV9pbmRleCA9PSBtX3RhcmdldC0+c2l6ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBrZXkgPSBtX3RhcmdldC0+bV9iYWNraW5nW21faW5kZXgrK10ud3JhcHBlcigpOworICAg
IGtleSA9IG1fdGFyZ2V0LT5tX2JhY2tpbmcuZ2V0KClbbV9pbmRleCsrXS53cmFwcGVyKGV4ZWNT
dGF0ZSk7CiAgICAgdmFsdWUgPSBrZXk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtODIsMTgg
KzEwNCwxOCBAQCBib29sIEZvbnRGYWNlU2V0OjpoYXMoRm9udEZhY2UqIGZhY2UpIGNvbnN0CiB7
CiAgICAgaWYgKCFmYWNlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fYmFj
a2luZy5oYXNGYWNlKGZhY2UtPmJhY2tpbmcoKSk7CisgICAgcmV0dXJuIG1fYmFja2luZy0+aGFz
RmFjZShmYWNlLT5iYWNraW5nKCkpOwogfQogCiBzaXplX3QgRm9udEZhY2VTZXQ6OnNpemUoKSBj
b25zdAogewotICAgIHJldHVybiBtX2JhY2tpbmcuZmFjZUNvdW50KCk7CisgICAgcmV0dXJuIG1f
YmFja2luZy0+ZmFjZUNvdW50KCk7CiB9CiAKIEZvbnRGYWNlU2V0JiBGb250RmFjZVNldDo6YWRk
KEZvbnRGYWNlKiBmYWNlKQogewotICAgIGlmIChmYWNlICYmICFtX2JhY2tpbmcuaGFzRmFjZShm
YWNlLT5iYWNraW5nKCkpKQotICAgICAgICBtX2JhY2tpbmcuYWRkKGZhY2UtPmJhY2tpbmcoKSk7
CisgICAgaWYgKGZhY2UgJiYgIW1fYmFja2luZy0+aGFzRmFjZShmYWNlLT5iYWNraW5nKCkpKQor
ICAgICAgICBtX2JhY2tpbmctPmFkZChmYWNlLT5iYWNraW5nKCkpOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApAQCAtMTAyLDIxICsxMjQsMjEgQEAgYm9vbCBGb250RmFjZVNldDo6cmVtb3ZlKEZv
bnRGYWNlKiBmYWNlKQogICAgIGlmICghZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgYm9vbCByZXN1bHQgPSBtX2JhY2tpbmcuaGFzRmFjZShmYWNlLT5iYWNraW5nKCkpOworICAg
IGJvb2wgcmVzdWx0ID0gbV9iYWNraW5nLT5oYXNGYWNlKGZhY2UtPmJhY2tpbmcoKSk7CiAgICAg
aWYgKHJlc3VsdCkKLSAgICAgICAgbV9iYWNraW5nLnJlbW92ZShmYWNlLT5iYWNraW5nKCkpOwor
ICAgICAgICBtX2JhY2tpbmctPnJlbW92ZShmYWNlLT5iYWNraW5nKCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIHZvaWQgRm9udEZhY2VTZXQ6OmNsZWFyKCkKIHsKLSAgICB3aGlsZSAobV9i
YWNraW5nLmZhY2VDb3VudCgpKQotICAgICAgICBtX2JhY2tpbmcucmVtb3ZlKG1fYmFja2luZ1sw
XSk7CisgICAgd2hpbGUgKG1fYmFja2luZy0+ZmFjZUNvdW50KCkpCisgICAgICAgIG1fYmFja2lu
Zy0+cmVtb3ZlKG1fYmFja2luZy5nZXQoKVswXSk7CiB9CiAKLXZvaWQgRm9udEZhY2VTZXQ6Omxv
YWQoY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIERlZmVycmVkV3JhcHBl
ciYmIHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBGb250RmFjZVNldDo6bG9hZChK
U0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgYXV0byBtYXRjaGluZ0ZhY2VzID0gbV9iYWNraW5nLm1hdGNoaW5nRmFjZXMoZm9udCwg
dGV4dCwgZWMpOworICAgIGF1dG8gbWF0Y2hpbmdGYWNlcyA9IG1fYmFja2luZy0+bWF0Y2hpbmdG
YWNlcyhmb250LCB0ZXh0LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKQEAg
LTEzOSwxMSArMTYxLDExIEBAIHZvaWQgRm9udEZhY2VTZXQ6OmxvYWQoY29uc3QgU3RyaW5nJiBm
b250LCBjb25zdCBTdHJpbmcmIHRleHQsIERlZmVycmVkV3JhcHBlciYmCiAgICAgfQogCiAgICAg
Zm9yIChhdXRvJiBmYWNlIDogbWF0Y2hpbmdGYWNlcykgewotICAgICAgICBwZW5kaW5nUHJvbWlz
ZS0+ZmFjZXMuYXBwZW5kKGZhY2UuZ2V0KCkud3JhcHBlcigpKTsKKyAgICAgICAgcGVuZGluZ1By
b21pc2UtPmZhY2VzLmFwcGVuZChmYWNlLmdldCgpLndyYXBwZXIoZXhlY1N0YXRlKSk7CiAgICAg
ICAgIGlmIChmYWNlLmdldCgpLnN0YXR1cygpID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlN1Y2Nl
c3MpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgd2FpdGluZyA9IHRydWU7Ci0gICAg
ICAgIGF1dG8mIHZlY3RvciA9IG1fcGVuZGluZ1Byb21pc2VzLmFkZChSZWZQdHI8Rm9udEZhY2U+
KGZhY2UuZ2V0KCkud3JhcHBlcigpKSwgVmVjdG9yPFJlZjxQZW5kaW5nUHJvbWlzZT4+KCkpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byYgdmVjdG9yID0gbV9wZW5kaW5nUHJvbWlzZXMu
YWRkKFJlZlB0cjxDU1NGb250RmFjZT4oJmZhY2UuZ2V0KCkpLCBWZWN0b3I8UmVmPFBlbmRpbmdQ
cm9taXNlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB2ZWN0b3IuYXBwZW5kKHBlbmRp
bmdQcm9taXNlLmNvcHlSZWYoKSk7CiAgICAgfQogCkBAIC0xNTMsMTQgKzE3NSwxNCBAQCB2b2lk
IEZvbnRGYWNlU2V0Ojpsb2FkKGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBEZWZlcnJlZFdyYXBwZXImJgogCiBib29sIEZvbnRGYWNlU2V0OjpjaGVjayhjb25zdCBTdHJp
bmcmIGZhbWlseSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAg
ICByZXR1cm4gbV9iYWNraW5nLmNoZWNrKGZhbWlseSwgdGV4dCwgZWMpOworICAgIHJldHVybiBt
X2JhY2tpbmctPmNoZWNrKGZhbWlseSwgdGV4dCwgZWMpOwogfQogCiBhdXRvIEZvbnRGYWNlU2V0
Ojpwcm9taXNlKEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUpIC0+IFByb21pc2UmCiB7CiAgICAg
aWYgKCFtX3Byb21pc2UpIHsKICAgICAgICAgbV9wcm9taXNlID0gY3JlYXRlUHJvbWlzZShleGVj
U3RhdGUpOwotICAgICAgICBpZiAobV9iYWNraW5nLnN0YXR1cygpID09IENTU0ZvbnRGYWNlU2V0
OjpTdGF0dXM6OkxvYWRlZCkKKyAgICAgICAgaWYgKG1fYmFja2luZy0+c3RhdHVzKCkgPT0gQ1NT
Rm9udEZhY2VTZXQ6OlN0YXR1czo6TG9hZGVkKQogICAgICAgICAgICAgZnVsZmlsbFByb21pc2Uo
KTsKICAgICB9CiAgICAgcmV0dXJuIG1fcHJvbWlzZS52YWx1ZSgpOwpAQCAtMTY4LDcgKzE5MCw3
IEBAIGF1dG8gRm9udEZhY2VTZXQ6OnByb21pc2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSkg
LT4gUHJvbWlzZSYKICAgICAKIFN0cmluZyBGb250RmFjZVNldDo6c3RhdHVzKCkgY29uc3QKIHsK
LSAgICBzd2l0Y2ggKG1fYmFja2luZy5zdGF0dXMoKSkgeworICAgIHN3aXRjaCAobV9iYWNraW5n
LT5zdGF0dXMoKSkgewogICAgIGNhc2UgQ1NTRm9udEZhY2VTZXQ6OlN0YXR1czo6TG9hZGluZzoK
ICAgICAgICAgcmV0dXJuIFN0cmluZygibG9hZGluZyIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgIGNhc2UgQ1NTRm9udEZhY2VTZXQ6OlN0YXR1czo6TG9hZGVkOgpAQCAtMTgw
LDcgKzIwMiw3IEBAIFN0cmluZyBGb250RmFjZVNldDo6c3RhdHVzKCkgY29uc3QKIAogYm9vbCBG
b250RmFjZVNldDo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fYmFja2luZy5zdGF0dXMoKSA9PSBDU1NGb250RmFjZVNldDo6U3RhdHVzOjpM
b2FkZWQ7CisgICAgcmV0dXJuIG1fYmFja2luZy0+c3RhdHVzKCkgPT0gQ1NTRm9udEZhY2VTZXQ6
OlN0YXR1czo6TG9hZGVkOwogfQogCiB2b2lkIEZvbnRGYWNlU2V0OjpzdGFydGVkTG9hZGluZygp
CkBAIC0yMDksNyArMjMxLDcgQEAgdm9pZCBGb250RmFjZVNldDo6ZnVsZmlsbFByb21pc2UoKQog
CiB2b2lkIEZvbnRGYWNlU2V0OjpmYWNlRmluaXNoZWQoQ1NTRm9udEZhY2UmIGZhY2UsIENTU0Zv
bnRGYWNlOjpTdGF0dXMgbmV3U3RhdHVzKQogewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX3BlbmRp
bmdQcm9taXNlcy5maW5kKGZhY2Uud3JhcHBlcigpKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9w
ZW5kaW5nUHJvbWlzZXMuZmluZCgmZmFjZSk7CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fcGVuZGlu
Z1Byb21pc2VzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0
LmgKaW5kZXggYzA1ZWQxOGU0Y2U4YWY1MWY4ZjJlODA0MTI1MWFiNTQwMDFkYzJjNy4uNDhmNjNl
MzAxNGM4YTVkNzFlNWM0MzkwMGZjYTEyNmVhOGM2Zjc0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNl
U2V0LmgKQEAgLTM4LDYgKzM4LDEwIEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4ZWNT
dGF0ZTsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKQEAgLTQ1
LDEyICs0OSw4IEBAIGNsYXNzIEZvbnRGYWNlOwogCiBjbGFzcyBGb250RmFjZVNldCBmaW5hbCA6
IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRGYWNlU2V0PiwgcHVibGljIENTU0ZvbnRGYWNlU2V0Q2xp
ZW50LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIEFjdGl2ZURPTU9i
amVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGb250RmFjZVNldD4gY3JlYXRlKEpTQzo6
RXhlY1N0YXRlJiBleGVjU3RhdGUsIERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxGb250RmFjZT4+JiBpbml0aWFsRmFjZXMpCi0gICAgewotICAgICAgICBSZWY8Rm9udEZh
Y2VTZXQ+IHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgRm9udEZhY2VTZXQoZXhlY1N0YXRlLCBkb2N1
bWVudCwgaW5pdGlhbEZhY2VzKSk7Ci0gICAgICAgIHJlc3VsdC0+c3VzcGVuZElmTmVlZGVkKCk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIHN0YXRpYyBSZWY8Rm9udEZhY2VT
ZXQ+IGNyZWF0ZShEb2N1bWVudCYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5p
dGlhbEZhY2VzKTsKKyAgICBzdGF0aWMgUmVmPEZvbnRGYWNlU2V0PiBjcmVhdGUoRG9jdW1lbnQm
LCBDU1NGb250RmFjZVNldCYgYmFja2luZyk7CiAgICAgdmlydHVhbCB+Rm9udEZhY2VTZXQoKTsK
IAogICAgIGJvb2wgaGFzKEZvbnRGYWNlKikgY29uc3Q7CkBAIC01OSw4ICs1OSw4IEBAIHB1Ymxp
YzoKICAgICBib29sIHJlbW92ZShGb250RmFjZSopOwogICAgIHZvaWQgY2xlYXIoKTsKIAotICAg
IHZvaWQgbG9hZChjb25zdCBTdHJpbmcmIGZvbnQsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IGxvYWQoZm9udCwgU3RyaW5nKCIgIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocHJvbWlzZSksIGVjKTsgfQotICAgIHZvaWQgbG9h
ZChjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRGVmZXJyZWRXcmFwcGVy
JiYgcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgbG9hZChKU0M6OkV4ZWNTdGF0
ZSYgZXhlY1N0YXRlLCBjb25zdCBTdHJpbmcmIGZvbnQsIERlZmVycmVkV3JhcHBlciYmIHByb21p
c2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IGxvYWQoZXhlY1N0YXRlLCBmb250LCBTdHJpbmcoIiAi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwcm9taXNlKSwgZWMpOyB9
CisgICAgdm9pZCBsb2FkKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgU3RyaW5nJiBmb250LCBjb25z
dCBTdHJpbmcmIHRleHQsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UsIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICBib29sIGNoZWNrKGNvbnN0IFN0cmluZyYgZm9udCwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGNoZWNrKGZvbnQsIFN0cmluZygiICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLCBlYyk7IH0KICAgICBib29sIGNoZWNrKGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAKQEAgLTY5LDYgKzY5LDggQEAgcHVibGlj
OgogICAgIHR5cGVkZWYgRE9NUHJvbWlzZTxGb250RmFjZVNldCYsIERPTUNvcmVFeGNlcHRpb24m
PiBQcm9taXNlOwogICAgIFByb21pc2UmIHByb21pc2UoSlNDOjpFeGVjU3RhdGUmKTsKIAorICAg
IENTU0ZvbnRGYWNlU2V0JiBiYWNraW5nKCkgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKICAgICBj
bGFzcyBJdGVyYXRvciB7CiAgICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBJdGVyYXRvcihG
b250RmFjZVNldCYpOwpAQCAtNzYsMTEgKzc4LDExIEBAIHB1YmxpYzoKICAgICAgICAgdXNpbmcg
S2V5ID0gUmVmUHRyPEZvbnRGYWNlPjsKICAgICAgICAgdXNpbmcgVmFsdWUgPSBSZWZQdHI8Rm9u
dEZhY2U+OwogCi0gICAgICAgIGJvb2wgbmV4dChLZXkmIG5leHRLZXksIFZhbHVlJiBuZXh0VmFs
dWUpOworICAgICAgICBib29sIG5leHQoSlNDOjpFeGVjU3RhdGUmLCBLZXkmIG5leHRLZXksIFZh
bHVlJiBuZXh0VmFsdWUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmPEZvbnRGYWNlU2V0
PiBtX3RhcmdldDsKLSAgICAgICAgc2l6ZV90IG1faW5kZXggeyAwIH07CisgICAgICAgIHNpemVf
dCBtX2luZGV4IHsgMCB9OyAvLyBGSVhNRTogVGhlcmUgbmVlZHMgdG8gYmUgYSBtZWNoYW5pc20g
dG8gaGFuZGxlIHdoZW4gZm9udHMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgbWlkZGxl
IG9mIHRoZSBGb250RmFjZVNldC4KICAgICB9OwogICAgIEl0ZXJhdG9yIGNyZWF0ZUl0ZXJhdG9y
KCkgeyByZXR1cm4gSXRlcmF0b3IoKnRoaXMpOyB9CiAKQEAgLTEwNCw3ICsxMDYsOCBAQCBwcml2
YXRlOgogICAgICAgICBQcm9taXNlIHByb21pc2U7CiAgICAgfTsKIAotICAgIEZvbnRGYWNlU2V0
KEpTQzo6RXhlY1N0YXRlJiwgRG9jdW1lbnQmLCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNl
Pj4mKTsKKyAgICBGb250RmFjZVNldChEb2N1bWVudCYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9u
dEZhY2U+PiYpOworICAgIEZvbnRGYWNlU2V0KERvY3VtZW50JiwgQ1NTRm9udEZhY2VTZXQmKTsK
IAogICAgIHZvaWQgZnVsZmlsbFByb21pc2UoKTsKIApAQCAtMTIzLDggKzEyNiw4IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyBkZXJlZigp
OyB9CiAKLSAgICBDU1NGb250RmFjZVNldCBtX2JhY2tpbmc7Ci0gICAgSGFzaE1hcDxSZWZQdHI8
Rm9udEZhY2U+LCBWZWN0b3I8UmVmPFBlbmRpbmdQcm9taXNlPj4+IG1fcGVuZGluZ1Byb21pc2Vz
OworICAgIFJlZjxDU1NGb250RmFjZVNldD4gbV9iYWNraW5nOworICAgIEhhc2hNYXA8UmVmUHRy
PENTU0ZvbnRGYWNlPiwgVmVjdG9yPFJlZjxQZW5kaW5nUHJvbWlzZT4+PiBtX3BlbmRpbmdQcm9t
aXNlczsKICAgICBPcHRpb25hbDxQcm9taXNlPiBtX3Byb21pc2U7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaWRsIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRGYWNlU2V0LmlkbAppbmRleCA0ZmY2ODVkY2FjZDliNTJlYzI3MzU1ZTBkZGIzNTFkZjNl
NTZmZTc4Li42Y2FmNTVhNTJlMWZhYzRkNjc0NzE5NWVmMmVlZDViMDliNDhlMWJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Gb250RmFjZVNldC5pZGwKQEAgLTI5LDcgKzI5LDcgQEAgZW51bSBGb250RmFjZVNl
dExvYWRTdGF0dXMgewogfTsKIAogWwotICAgIENvbnN0cnVjdG9yQ2FsbFdpdGg9U2NyaXB0U3Rh
dGUmRG9jdW1lbnQsCisgICAgQ29uc3RydWN0b3JDYWxsV2l0aD1Eb2N1bWVudCwKICAgICBDb25z
dHJ1Y3RvcihzZXF1ZW5jZTxGb250RmFjZT4gaW5pdGlhbEZhY2VzKQogXSBpbnRlcmZhY2UgRm9u
dEZhY2VTZXQgOiBFdmVudFRhcmdldCB7CiAgICAgW0N1c3RvbV0gT2JqZWN0IGVudHJpZXMoKTsK
QEAgLTQ4LDcgKzQ4LDcgQEAgZW51bSBGb250RmFjZVNldExvYWRTdGF0dXMgewogICAgIGF0dHJp
YnV0ZSBFdmVudEhhbmRsZXIgb25sb2FkaW5nZG9uZTsKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5k
bGVyIG9ubG9hZGluZ2Vycm9yOwogCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gUHJvbWlzZSBsb2Fk
KERPTVN0cmluZyBmb250LCBvcHRpb25hbCBET01TdHJpbmcgdGV4dCk7CisgICAgW1JhaXNlc0V4
Y2VwdGlvbiwgQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIFByb21pc2UgbG9hZChET01TdHJpbmcgZm9u
dCwgb3B0aW9uYWwgRE9NU3RyaW5nIHRleHQpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xl
YW4gY2hlY2soRE9NU3RyaW5nIGZvbnQsIG9wdGlvbmFsIERPTVN0cmluZyB0ZXh0KTsKIAogICAg
IFtDdXN0b21dIHJlYWRvbmx5IGF0dHJpYnV0ZSBQcm9taXNlIHJlYWR5OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKaW5kZXggOTBhMGNhYzNiNzFjZDdjYTIwNzZjOTE3YjFhMjJiMTlkZWFkNmY4MS4u
ZTZlMTRkYWI3OGI5YTI3N2NiOTZmZWU1NGQ3ZDU5MThiMWUzNDcyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCkBAIC02Miw3ICs2Miw3IEBACiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAj
aW5jbHVkZSAiRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xs
ZXIuaCIKLSNpbmNsdWRlICJGb250TG9hZGVyLmgiCisjaW5jbHVkZSAiRm9udEZhY2VTZXQuaCIK
ICNpbmNsdWRlICJGb3JtQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTY2NzksMTQgKzY2NzksMTAgQEAgRG9j
dW1lbnQmIERvY3VtZW50OjplbnN1cmVUZW1wbGF0ZURvY3VtZW50KCkKIH0KICNlbmRpZgogCi0j
aWYgRU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMpCi1SZWZQdHI8Rm9udExvYWRlcj4gRG9jdW1lbnQ6
OmZvbnRzKCkKK1JlZjxGb250RmFjZVNldD4gRG9jdW1lbnQ6OmZvbnRzKCkKIHsKLSAgICBpZiAo
IW1fZm9udGxvYWRlcikKLSAgICAgICAgbV9mb250bG9hZGVyID0gRm9udExvYWRlcjo6Y3JlYXRl
KHRoaXMpOwotICAgIHJldHVybiBtX2ZvbnRsb2FkZXI7CisgICAgcmV0dXJuIGZvbnRTZWxlY3Rv
cigpLmZvbnRGYWNlU2V0KCk7CiB9Ci0jZW5kaWYKIAogZmxvYXQgRG9jdW1lbnQ6OmRldmljZVNj
YWxlRmFjdG9yKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggNWY5YzJhMjliNjgw
NGZlOTg4YzliNDQ4M2Q2MzkxNjYwZGNiMjg4My4uZmYzM2E4ODc4MGMxNzRhZGMwMGRjMDZhZTNk
MWIyNmUyYjJkODg0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTIwNSw5ICsyMDUsNyBAQCBj
bGFzcyBUZXh0QXV0b3NpemVyOwogY2xhc3MgRE9NU2VjdXJpdHlQb2xpY3k7CiAjZW5kaWYKIAot
I2lmIEVOQUJMRShGT05UX0xPQURfRVZFTlRTKQotY2xhc3MgRm9udExvYWRlcjsKLSNlbmRpZgor
Y2xhc3MgRm9udEZhY2VTZXQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKQEAgLTEy
NzUsOSArMTI3Myw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgU2Vj
dXJpdHlPcmlnaW4qIHRvcE9yaWdpbigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogCi0jaWYgRU5B
QkxFKEZPTlRfTE9BRF9FVkVOVFMpCi0gICAgUmVmUHRyPEZvbnRMb2FkZXI+IGZvbnRzKCk7Ci0j
ZW5kaWYKKyAgICBSZWY8Rm9udEZhY2VTZXQ+IGZvbnRzKCk7CiAKICAgICB2b2lkIGVuc3VyZVBs
dWdJbnNJbmplY3RlZFNjcmlwdChET01XcmFwcGVyV29ybGQmKTsKIApAQCAtMTc1NiwxMCArMTc1
Miw2IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxl
Y3RvcjsKIAotI2lmIEVOQUJMRShGT05UX0xPQURfRVZFTlRTKQotICAgIFJlZlB0cjxGb250TG9h
ZGVyPiBtX2ZvbnRsb2FkZXI7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQogICAg
IFJlZlB0cjxKU0M6OklucHV0Q3Vyc29yPiBtX2lucHV0Q3Vyc29yOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmlkbAppbmRleCA2MWM2N2M0YzIzMzM1ODM2MTIyY2JhNzNkMjU5NjRhOTA2OWE0
ZjZlLi5kYTZlZDUzMWJlYmZmMjc2MDdmMzg0NWVlNTZiOWU1MjE5NTBiZDc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5pZGwKQEAgLTI2NSw3ICsyNjUsNyBAQAogICAgIFtDb25kaXRpb25hbD1DU1Nf
UkVHSU9OU10gRE9NTmFtZWRGbG93Q29sbGVjdGlvbiB3ZWJraXRHZXROYW1lZEZsb3dzKCk7CiAK
ICNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdVQUdFX0pBVkFTQ1JJUFQK
LSAgICBbQ29uZGl0aW9uYWw9Rk9OVF9MT0FEX0VWRU5UU10gcmVhZG9ubHkgYXR0cmlidXRlIEZv
bnRMb2FkZXIgZm9udHM7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEZvbnRGYWNlU2V0IGZvbnRz
OwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTKSAmJiBFTkFC
TEVfSU9TX1RPVUNIX0VWRU5UUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnRGYWNlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5o
CmluZGV4IGQyODI4M2EzM2I5ZTM1ZjViOGMzMDY0YWQ2NmYzNzhjZjY1Njg4MDguLjVlNGM1MDA5
ZmUyOWU1MzA0MDEzZDI5MWJjYzZkMGI5YTA4NDQ2YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rm9udEZhY2VFbGVtZW50LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIFNWR0ZvbnRF
bGVtZW50KiBhc3NvY2lhdGVkRm9udEVsZW1lbnQoKSBjb25zdDsKICAgICB2b2lkIHJlYnVpbGRG
b250RmFjZSgpOwogICAgIAotICAgIGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlJiBmb250RmFjZVJ1
bGUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNlUnVsZS5nZXQoKTsgfQorICAgIFN0eWxlUnVs
ZUZvbnRGYWNlJiBmb250RmFjZVJ1bGUoKSB7IHJldHVybiBtX2ZvbnRGYWNlUnVsZS5nZXQoKTsg
fQogCiBwcml2YXRlOgogICAgIFNWR0ZvbnRGYWNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQmKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzYzE2NWI4MmY5ZWI2NjFlOWRiM2MwZTA3ZDhmNWVmNTRk
ODc4ZjRiLi5kNzVlNzVlMzg1OGQyZTQ2OTMyM2Q0YzEzMzZmNzlmMjBlN2FmMDJmIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTYtMDItMjEgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxk
QGFwcGxlLmNvbT4KKworICAgICAgICBbRm9udCBMb2FkaW5nXSBTcGxpdCBDU1NGb250U2VsZWN0
b3IgaW50byBhIEZvbnRGYWNlU2V0IGltcGxlbWVudGF0aW9uIGFuZCB0aGUgcmVzdCBvZiB0aGUg
Y2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MzM0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
ZmFzdC90ZXh0L2ZvbnQtZmFjZS1qYXZhc2NyaXB0Lmh0bWw6CisgICAgICAgICogZmFzdC90ZXh0
L2ZvbnQtZmFjZS1zZXQtZG9jdW1lbnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L3RleHQvZm9udC1mYWNlLXNldC1kb2N1bWVudC5odG1sOiBBZGRlZC4KKwogMjAxNi0wMi0x
OSAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdtYWlsLmNvbT4KIAogICAgICAgICBb
SU5UTF0gSW1wbGVtZW50IE51bWJlciBGb3JtYXQgRnVuY3Rpb25zCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L3RleHQvZm9udC1mYWNlLWphdmFzY3JpcHQuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvdGV4dC9mb250LWZhY2UtamF2YXNjcmlwdC5odG1sCmluZGV4IDNkM2EzN2QzNzMxN2I2
MGQ4YjYxYzAyY2I2Y2Q2YmViZWRhYzg3YmYuLjhhZWRiM2MxNTM2MGIwOGY2N2M2ZjdiZTVmZmY1
MjYxOWExNTk1NmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9mb250LWZhY2Ut
amF2YXNjcmlwdC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9mb250LWZhY2UtamF2
YXNjcmlwdC5odG1sCkBAIC0xLDQgKzEsNSBAQAogPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KIDxo
ZWFkPgogPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+CiA8L2hlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvZm9udC1mYWNl
LXNldC1kb2N1bWVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvZm9udC1m
YWNlLXNldC1kb2N1bWVudC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmMyNzkyNjM2ZWZhN2Mz
OTZkNDQ3Y2NiMjkzYWViYjE4MzFmZWFlMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvdGV4dC9mb250LWZhY2Utc2V0LWRvY3VtZW50LWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDE3IEBACitQQVNTIGRvY3VtZW50LmZvbnRzLnNpemUgaXMgMgorUEFTUyBvYmplY3QuZG9uZSBp
cyBmYWxzZQorUEFTUyBvYmplY3QudmFsdWUuZmFtaWx5IGlzICJNeUZvbnQxIgorUEFTUyBvYmpl
Y3QuZG9uZSBpcyBmYWxzZQorUEFTUyBvYmplY3QudmFsdWUuZmFtaWx5IGlzICJNeUZvbnQyIgor
UEFTUyBvYmplY3QuZG9uZSBpcyB0cnVlCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
ZXN0RWxlbWVudCIpLm9mZnNldFdpZHRoIGlzIG5vdCBvcmlnaW5hbFdpZHRoCitQQVNTIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0RWxlbWVudCIpLm9mZnNldFdpZHRoIGlzIG9yaWdpbmFs
V2lkdGgKK1BBU1Mgb2JqZWN0Lmxlbmd0aCBpcyAyCitQQVNTIG9iamVjdFswXS5mYW1pbHkgaXMg
Ik15Rm9udDMiCitQQVNTIG9iamVjdFsxXS5mYW1pbHkgaXMgIk15Rm9udDMiCitQQVNTIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0RWxlbWVudCIpLm9mZnNldFdpZHRoIGlzIG5vdCBvcmln
aW5hbFdpZHRoCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0RWxlbWVudCIpLm9m
ZnNldFdpZHRoIGlzIG9yaWdpbmFsV2lkdGgKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
L2ZvbnQtZmFjZS1zZXQtZG9jdW1lbnQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9mb250
LWZhY2Utc2V0LWRvY3VtZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTcxYTBlZjkzM2YxNWQ2ZDM0YzA4
MmY1ZGUxNGYyZTgyN2M3YzFlMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
dGV4dC9mb250LWZhY2Utc2V0LWRvY3VtZW50Lmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgaWQ9InN0eWxlRWxlbWVudCI+CitAZm9u
dC1mYWNlIHsKKyAgICBmb250LWZhbWlseTogIk15Rm9udDEiOworICAgIHNyYzogdXJsKCIuLi8u
Li9yZXNvdXJjZXMvQWhlbS50dGYiKSBmb3JtYXQoInRydWV0eXBlIik7Cit9CitAZm9udC1mYWNl
IHsKKyAgICBmb250LWZhbWlseTogIk15Rm9udDIiOworICAgIHNyYzogdXJsKCIuLi8uLi9yZXNv
dXJjZXMvQWhlbS5vdGYiKSBmb3JtYXQoIm9wZW50eXBlIik7Cit9Cis8L3N0eWxlPgorPC9oZWFk
PgorPGJvZHk+Cis8c3BhbiBpZD0idGVzdEVsZW1lbnQiIHN0eWxlPSJmb250OiA1MHB4IEFwcGxp
ZWRGb250Ij5sPC9zcGFuPgorPHNjcmlwdD4KK3ZhciBvcmlnaW5hbFdpZHRoID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInRlc3RFbGVtZW50Iikub2Zmc2V0V2lkdGg7CisKK3Nob3VsZEJlKCJk
b2N1bWVudC5mb250cy5zaXplIiwgIjIiKTsKK3ZhciBpdGVyYXRvciA9IGRvY3VtZW50LmZvbnRz
LmtleXMoKTsKK3ZhciBvYmplY3QgPSBpdGVyYXRvci5uZXh0KCk7CitzaG91bGRCZUZhbHNlKCJv
YmplY3QuZG9uZSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJvYmplY3QudmFsdWUuZmFtaWx5
IiwgIk15Rm9udDEiKTsKK29iamVjdCA9IGl0ZXJhdG9yLm5leHQoKTsKK3Nob3VsZEJlRmFsc2Uo
Im9iamVjdC5kb25lIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm9iamVjdC52YWx1ZS5mYW1p
bHkiLCAiTXlGb250MiIpOworb2JqZWN0ID0gaXRlcmF0b3IubmV4dCgpOworc2hvdWxkQmVUcnVl
KCJvYmplY3QuZG9uZSIpOworaXRlcmF0b3IgPSB1bmRlZmluZWQ7CitvYmplY3QgPSB1bmRlZmlu
ZWQ7CisKK3NlbGYuanNUZXN0SXNBc3luYyA9IHRydWU7CitmdW5jdGlvbiBzdGFydExvYWRpbmco
KSB7CisgICAgdmFyIGFwcGxpZWRGb250ID0gdW5kZWZpbmVkOworICAgIGRvY3VtZW50LmZvbnRz
LmtleXMoKS5uZXh0KCkudmFsdWUubG9hZCgpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGRv
Y3VtZW50LmZvbnRzLmtleXMoKS5uZXh0KCkudmFsdWUuZmFtaWx5ID0gIkFwcGxpZWRGb250IjsK
KyAgICAgICAgc2hvdWxkTm90QmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGVzdEVsZW1l
bnRcIikub2Zmc2V0V2lkdGgiLCAib3JpZ2luYWxXaWR0aCIpOworICAgICAgICBkb2N1bWVudC5m
b250cy5rZXlzKCkubmV4dCgpLnZhbHVlLmZhbWlseSA9ICJNeUZvbnQxIjsKKyAgICAgICAgc2hv
dWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGVzdEVsZW1lbnRcIikub2Zmc2V0V2lk
dGgiLCAib3JpZ2luYWxXaWR0aCIpOworICAgICAgICBkb2N1bWVudC5mb250cy5hZGQobmV3IEZv
bnRGYWNlKCJNeUZvbnQzIiwgInVybChcIi4uLy4uL3Jlc291cmNlcy9BaGVtLm90ZlwiKSIsIHt9
KSk7CisgICAgICAgIHJldHVybiBkb2N1bWVudC5mb250cy5sb2FkKCJNeUZvbnQzIik7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIkxvYWRpbmcgc2hvdWxkIHN1Y2Nl
ZWQuIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7
CisgICAgICAgIHRlc3RGYWlsZWQoIlNob3VsZCBub3QgYmUgYWJsZSB0byBwYXJzZSBhcyBhIGZv
bnQ6IHByb3BlcnR5LiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlv
bigpIHsKKyAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKG5ldyBGb250RmFjZSgiTXlGb250MyIs
ICJ1cmwoXCIuLi8uLi9yZXNvdXJjZXMvQWhlbS50dGZcIikiLCB7J3ZhcmlhbnQnOiAnc21hbGwt
Y2Fwcyd9KSk7CisgICAgICAgIHJldHVybiBkb2N1bWVudC5mb250cy5sb2FkKCI1MHB4IE15Rm9u
dDMiKTsKKyAgICB9KS50aGVuKGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgb2JqZWN0ID0geDsKKyAg
ICAgICAgc2hvdWxkQmUoIm9iamVjdC5sZW5ndGgiLCAiMiIpOworICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoIm9iamVjdFswXS5mYW1pbHkiLCAiTXlGb250MyIpOworICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoIm9iamVjdFsxXS5mYW1pbHkiLCAiTXlGb250MyIpOworICAgICAg
ICBhcHBsaWVkRm9udCA9IG5ldyBGb250RmFjZSgiQXBwbGllZEZvbnQiLCAidXJsKFwiLi4vLi4v
cmVzb3VyY2VzL0FoZW0ub3RmXCIpIiwge30pOworICAgICAgICBkb2N1bWVudC5mb250cy5hZGQo
YXBwbGllZEZvbnQpOworICAgICAgICByZXR1cm4gYXBwbGllZEZvbnQubG9hZGVkOworICAgIH0s
IGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVkKCJMb2FkaW5nIHNob3VsZCBzdWNjZWVk
LiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KS50aGVuKGZ1bmN0aW9uKHgpIHsK
KyAgICAgICAgc2hvdWxkTm90QmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGVzdEVsZW1l
bnRcIikub2Zmc2V0V2lkdGgiLCAib3JpZ2luYWxXaWR0aCIpOworICAgICAgICBkb2N1bWVudC5m
b250cy5kZWxldGUoYXBwbGllZEZvbnQpOworICAgICAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoXCJ0ZXN0RWxlbWVudFwiKS5vZmZzZXRXaWR0aCIsICJvcmlnaW5hbFdpZHRo
Iik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICB0ZXN0RmFpbGVkKCJMb2FkaW5nIHNob3VsZCBzdWNjZWVkLiIpOworICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICB9KTsKK30KK2lmICh3aW5kb3cuR0NDb250cm9sbGVyKSB7CisgICAgd2lu
ZG93LkdDQ29udHJvbGxlci5jb2xsZWN0KCk7Cit9CitzdGFydExvYWRpbmcoKTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271900</attachid>
            <date>2016-02-21 20:58:05 -0800</date>
            <delta_ts>2016-02-22 10:00:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153347-20160221205747.patch</filename>
            <type>text/plain</type>
            <size>95916</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2ODUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY5NjA2ZDFhOWRiZmIz
ZTNjY2VjMWJjNmZiZWFmNmI2MzYxNjY4MC4uNzAyNGI4YmZhMjIwZmEzZTMyNTZhMWRlMDQzMDVl
MmEyNWFjNWU1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAxNi0wMi0yMSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtGb250IExv
YWRpbmddIFNwbGl0IENTU0ZvbnRTZWxlY3RvciBpbnRvIGEgRm9udEZhY2VTZXQgaW1wbGVtZW50
YXRpb24gYW5kIHRoZSByZXN0IG9mIHRoZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMzQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBkb2N1bWVu
dC5mb250cyBKYXZhc2NyaXB0IG9iamVjdC4gSXQgZG9lcyBzbyBieSBicmlkaW5nIHRoZQorICAg
ICAgICBhbHJlYWR5LWV4aXN0aW5nIEZvbnRGYWNlU2V0IEphdmFzY3JpcHQgb2JqZWN0IHdpdGgg
dGhlIENTU0ZvbnRTZWxlY3RvciBXZWJDb3JlIG9iamVjdC4KKyAgICAgICAgQ1NTRm9udFNlbGVj
dG9yIHVzZWQgdG8gaG9sZCBpbnRlcm5hbCBvYmplY3RzIGZvciBlYWNoIEBmb250LWZhY2Ugb2Jq
ZWN0IGluIHRoZQorICAgICAgICBEb2N1bWVudC4gVGhlc2Ugb2JqZWN0cyBoYXZlIGJlZW4gbW92
ZWQgaW50byBDU1NGb250RmFjZVNldCwgc28gQ1NTRm9udFNlbGVjdG9yIHNpbXBseQorICAgICAg
ICBqdXN0IG93bnMgYW4gaW5zdGFuY2Ugb2YgYSBDU1NGb250RmFjZVNldC4KKworICAgICAgICBU
aGUgbGlmZXRpbWUgb2YgdGhlIEZvbnRGYWNlIGFuZCBGb250RmFjZVNldCBvYmplY3RzIGlzIGEg
bGl0dGxlIGludGVyZXN0aW5nOiBiZWNhdXNlCisgICAgICAgIGFsbCB0aGUgb3duZXJzaGlwIHJl
ZmVyZW5jZXMgYXJlIGluc2lkZSB0aGUgV2ViQ29yZSBDU1NGb250RmFjZXssU2V0fSBvYmplY3Rz
LCB0aGUKKyAgICAgICAgaGlnaGVyLWxldmVsIEphdmFzY3JpcHQgRm9udEZhY2V7LFNldH0gb2Jq
ZWN0cyBhcmUgaGVsZCB0aHJvdWdoIGEgV2Vha1B0ci4gVGhpcyBtZWFucworICAgICAgICB0aGF0
IGlmIGFsbCB0aGUgcmVmZXJlbmNlcyB0byB0aGVzZSBoaWdoZXItbGV2ZWwgb2JqZWN0cyBnbyBh
d2F5LCBhbmQgeW91IHJlLXF1ZXJ5IHRoZQorICAgICAgICBkb2N1bWVudCBmb3IgaXRzIEZvbnRG
YWNlIG9iamVjdHMsIHlvdSBtYXkgZ2V0IGEgbmV3IG9iamVjdCAoYWxiZWl0IHdpdGggdGhlIHNh
bWUKKyAgICAgICAgc3RhdGUgYXMgYSBwcmV2aW91cyBvYmplY3QpLiBIb3dldmVyLCB0aGlzIHdv
bid0IG9jY3VyIGlmIHRoZXJlIGFyZSBhbnkgcmVmZXJlbmNlcyB0bworICAgICAgICB0aGUgb2xk
IG9iamVjdCwgd2hpY2ggbWVhbnMgaXQgaXMgYWxtb3N0IG5vdCBvYnNlcnZhYmxlLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggZG9lc24ndCBpbXBsZW1lbnQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVu
IHRoZSBDU1NPTSBhbmQgdGhlIEZvbnRGYWNlCisgICAgICAgIG9iamVjdHMuIENoYW5naW5nIG9u
ZSBzaG91bGQgcmVzdWx0IGluIGEgY2hhbmdlIGluIHRoZSBvdGhlciwgYnV0IHRoYXQgd2lsbCBi
ZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBhIGZvcnRoY29taW5nIHBhdGNoLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxzbyBkb2Vzbid0IGFsdGVyIHRoZSBsaWZldGltZSBvZiB0aGUgQ1NTRm9u
dFNlbGVjdG9yLCB3aGljaCBtZWFucyB0aGF0IGFsbAorICAgICAgICB0aGUgRG9jdW1lbnQncyBm
b250cyBtYXkgYmUgZGVzdHJveWVkIGFuZCByZWNyZWF0ZWQgZnJvbSBDU1MuIFRoZXJlIGFyZSBh
IGZldyB0aGluZ3MKKyAgICAgICAgd2hpY2ggY2FuIHRyaWdnZXIgdGhpcy4gQSBzdWJzZXF1ZW50
IHBhdGNoIHdpbGwgbWFrZSB0aGUgQ1NTRm9udFNlbGVjdG9yIG91dGxpdmUgdGhlCisgICAgICAg
IERvY3VtZW50LgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBpbXBsZW1lbnQgKGFuZCB0ZXN0
KSB0aGUgYWJpbGl0eSB0byBhZGQgYSBuZXcgRm9udEZhY2UgdG8gdGhlIERvY3VtZW50CisgICAg
ICAgIHRvIGNhdXNlIGEgcmVsYXlvdXQsIGFzIHdlbGwgYXMgY2hhbmdpbmcgcHJvcGVydGllcyBv
ZiBleGlzdGluZyBGb250RmFjZSBvYmplY3RzIGFscmVhZHkKKyAgICAgICAgaW4gdGhlIERvY3Vt
ZW50IHRvIGNhdXNlIGEgcmVsYXlvdXQuCisKKyAgICAgICAgVGVzdDogZmFzdC90ZXh0L2ZvbnQt
ZmFjZS1zZXQtZG9jdW1lbnQuaHRtbAorCisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEhl
YWRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hIZWFkZXJzOjpJdGVyYXRvcjo6bmV4
dCk6IFBhc3MgYW4gZXh0cmEgYXJndW1lbnQuCisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRj
aEhlYWRlcnMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0tleVZhbHVlSXRlcmF0b3IuaDog
VGhlIEV4ZWNTdGF0ZSBpcyBuZWNlc3NhcnkgdG8gYnVpbGQgYW4gZXh0ZXJuYWwKKyAgICAgICAg
d3JhcHBlciBmcm9tIGFuIGV4aXN0aW5nIENTU0ZvbnRGYWNlIG9iamVjdC4KKyAgICAgICAgKFdl
YkNvcmU6OkpTS2V5VmFsdWVJdGVyYXRvcjxKU1dyYXBwZXI+OjpuZXh0KToKKyAgICAgICAgKiBj
c3MvQ1NTRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmFwcGVu
ZFNvdXJjZXMpOiBNb3ZlZCBmcm9tIENTU0ZvbnRTZWxlY3Rvci4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlOjpDU1NGb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFj
ZTo6bm90aWZ5Q2xpZW50c09mRm9udFByb3BlcnR5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlOjpzZXRGYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFj
ZTo6Y2FsY3VsYXRlU3R5bGUpOiBTaGFyZWQgY29kZSBiZXR3ZWVuIENTU0ZvbnRGYWNlU2V0IGFu
ZAorICAgICAgICBDU1NGb250RmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpz
ZXRTdHlsZSk6IFVwZGF0ZSB0byB1c2UgY2FsY3VsYXRlU3R5bGUoKS4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZvbnRGYWNlOjpjYWxjdWxhdGVXZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZvbnRGYWNlOjpzZXRXZWlnaHQpOiBVcGRhdGUgdG8gdXNlIGNhY3VsYXRlV2VpZ2h0
KCkuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6c2V0VW5pY29kZVJhbmdlKTogTm90
aWZ5IGNsaWVudHMuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6c2V0VmFyaWFudExp
Z2F0dXJlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnNldFZhcmlh
bnRQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnNldFZh
cmlhbnRDYXBzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6c2V0VmFy
aWFudE51bWVyaWMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpzZXRW
YXJpYW50QWx0ZXJuYXRlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6
OnNldFZhcmlhbnRFYXN0QXNpYW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRG
YWNlOjpzZXRGZWF0dXJlU2V0dGluZ3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRGYWNlOjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6Ondy
YXBwZXIpOiBCdWlsZCBhIG5ldyB3cmFwcGVyIGlmIG9uZSBkb2Vzbid0IGFscmVhZHkKKyAgICAg
ICAgZXhpc3QuIE5vdGUgdGhhdCB0aGlzIHJlcXVpcmVzIGFuIEV4ZWNTdGF0ZSB0byBjcmVhdGUg
YSBwcm9taXNlLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnNldFN0YXR1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9udExvYWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZTo6cHVtcCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6
Zm9udCk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmg6CisgICAgICAgICogY3NzL0NTU0Zv
bnRGYWNlU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0OjpDU1NGb250
RmFjZVNldCk6IE1vdmVkIGNvZGUgZnJvbSBDU1NGb250U2VsZWN0b3IuCisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNldDo6fkNTU0ZvbnRGYWNlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU2V0OjphZGRDbGllbnQpOiBUaGlzIG9iamVjdCBjYW4gbm93IGhhdmUgbXVs
dGlwbGUKKyAgICAgICAgY2xpZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0
OjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6OmluY3Jl
bWVudEFjdGl2ZUNvdW50KTogVXBkYXRlIGZvciBtdWx0aXBsZSBjbGllbnRzLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6OmRlY3JlbWVudEFjdGl2ZUNvdW50KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6aGFzRmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNldDo6cmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseSk6IE1v
dmVkIGZyb20KKyAgICAgICAgQ1NTRm9udFNlbGVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Rm9udEZhY2VTZXQ6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZVNldDo6YWRkVG9GYWNlc0xvb2t1cFRhYmxlKTogVGhpcyBoZWxw
ZXIgZnVuY3Rpb24gY2FuCisgICAgICAgIGJlIHVzZWQgd2hlbiBhIHByb3BlcnR5IG9mIGEgRm9u
dEZhY2UgaXMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0OjphZGQp
OiBVcGRhdGUgdG8gdXNlIGFkZFRvRmFjZXNMb29rdXBUYWJsZSgpLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRm9udEZhY2VTZXQ6OnJlbW92ZUZyb21GYWNlc0xvb2t1cFRhYmxlKTogU2FtZSBhcwor
ICAgICAgICBhZGRUb0ZhY2VzTG9va3VwVGFibGUoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRGYWNlU2V0OjpyZW1vdmUpOiBVcGRhdGUgdG8gdXNlIHJlbW92ZUZyb21GYWNlc0xvb2t1cFRh
YmxlKCkuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6Y2xlYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUZvbnRUcmFpdHNNYXNrKTogTW92ZWQgZnJvbSBDU1NGb250U2VsZWN0b3IuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6bWF0Y2hpbmdGYWNlcyk6IFVwZGF0ZSB0
byB1c2UgbmV3IGRhdGEgc3RydWN0dXJlcy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29t
cGFyYXRvcjo6Rm9udEZhY2VDb21wYXJhdG9yKTogTW92ZWQgZnJvbQorICAgICAgICBDU1NGb250
U2VsZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZUNvbXBhcmF0b3I6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6OmdldEZvbnRGYWNlKTogVXBk
YXRlIHRvIHVzZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9u
dEZhY2VTZXQ6OmZvbnRTdGF0ZUNoYW5nZWQpOiBVcGRhdGUgdG8gdXNlIG11bHRpcGxlIGNsaWVu
dHMuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6Zm9udFByb3BlcnR5Q2hhbmdl
ZCk6IFdlIG11c3QgdXBkYXRlIG91ciBpbnRlcm5hbAorICAgICAgICBkYXRhIHN0cnVjdHVyZSBp
ZiB0aGUgZmFtaWx5IG5hbWUgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RGYW1p
bGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmYW1pbGllc0ludGVyc2VjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6bG9hZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6c3RhdGVDaGFuZ2VkKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTZXQuaDogTm93IG5lZWRzIHRvIGJlIFJlZkNv
dW50ZWQuIE5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlCisgICAgICAgIHRha2VuIGZyb20gQ1NTRm9u
dFNlbGVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXRDbGllbnQ6OmZhY2VG
aW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldENsaWVudDo6Zm9udE1v
ZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xpZW50OjpzdGFydGVk
TG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldENsaWVudDo6Y29tcGxl
dGVkTG9hZGluZyk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmg6CisgICAgICAg
ICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6IE1vdmUgY29kZSBpbnRvIENTU0ZvbnRGYWNlU2V0
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjp+Q1NTRm9udFNlbGVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRTZWxlY3Rvcjo6Zm9udE1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxl
Y3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2Vs
ZWN0b3I6OmNsZWFyRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9y
OjphcHBlbmRTb3VyY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxl
Y3Rvcjo6ZmFtaWx5TmFtZUZyb21QcmltaXRpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRm9udFNlbGVjdG9yOjpyZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFyYXRvcjo6Rm9udEZhY2VDb21w
YXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFyYXRvcjo6
b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6
OmdldEZvbnRGYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmg6
CisgICAgICAgICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlZ21lbnRlZEZvbnRGYWNlOjpDU1NTZWdtZW50ZWRGb250RmFjZSk6CisgICAgICAg
ICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmg6CisgICAgICAgICogY3NzL0ZvbnRGYWNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udEZhY2U6OkZvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpjcmVh
dGVXZWFrUHRyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpmb250U3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpzdGF0ZUNoYW5nZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIGNzcy9Gb250RmFjZS5oOgorICAgICAgICAqIGNzcy9Gb250RmFjZVNldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZVNldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRGYWNlU2V0OjpGb250RmFjZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFj
ZVNldDo6fkZvbnRGYWNlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjpJdGVy
YXRvcjo6bmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZVNldDo6aGFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRG
YWNlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250RmFjZVNldDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udEZhY2VTZXQ6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OmNoZWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjpzdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udEZhY2VTZXQ6OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OmZhY2VGaW5pc2hlZCk6CisgICAgICAgICogY3Nz
L0ZvbnRGYWNlU2V0Lmg6CisgICAgICAgICogY3NzL0ZvbnRGYWNlU2V0LmlkbDoKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZvbnRzKToK
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOgor
ICAgICAgICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuaDoKKwogMjAxNi0wMi0xOSAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgbW9yZSBjb25j
cmV0ZSB0eXBlcyBmb3IgcGFyc2luZyBwb3NpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcAppbmRleCA4MTIzZTg2YjkyMjcwMzlkMGNhMjBjZDkz
Y2M5M2E0YzAzMjc1ZjdjLi4xMDhmYTdiMWQ1NWJiNDUzYmRkNjM2NDBjMWM5OThlOTc4YjMyMTBl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCkBA
IC0xNzksNyArMTc5LDcgQEAgdm9pZCBGZXRjaEhlYWRlcnM6OmZpbGwoY29uc3QgRmV0Y2hIZWFk
ZXJzKiBoZWFkZXJzKQogICAgIH0KIH0KIAotYm9vbCBGZXRjaEhlYWRlcnM6Okl0ZXJhdG9yOjpu
ZXh0KFN0cmluZyYgbmV4dEtleSwgU3RyaW5nJiBuZXh0VmFsdWUpCitib29sIEZldGNoSGVhZGVy
czo6SXRlcmF0b3I6Om5leHQoSlNDOjpFeGVjU3RhdGUmLCBTdHJpbmcmIG5leHRLZXksIFN0cmlu
ZyYgbmV4dFZhbHVlKQogewogICAgIHdoaWxlIChtX2N1cnJlbnRJbmRleCA8IG1fa2V5cy5zaXpl
KCkpIHsKICAgICAgICAgYXV0byYga2V5ID0gbV9rZXlzW21fY3VycmVudEluZGV4KytdOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmgKaW5kZXggZjM1ODFkMzI0
YmU4Njk1NTViNDU2OTkyNWY0MDc4NGJkMmZlYjc2Ni4uYWU3OTUwYTRiZDU5NWUyZTNhMmIwOGFk
MDQxMmU4MzdiODI1ZGMzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEhlYWRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNo
SGVhZGVycy5oCkBAIC0zMyw2ICszMywxMCBAQAogCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5o
IgogCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4ZWNTdGF0ZTsKK30KKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwpAQCAtNzAsNyArNzQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHVzaW5nIEtleSA9IFN0cmluZzsKICAgICAgICAgdXNpbmcgVmFsdWUg
PSBTdHJpbmc7CiAKLSAgICAgICAgYm9vbCBuZXh0KFN0cmluZyYgbmV4dEtleSwgU3RyaW5nJiBu
ZXh0VmFsdWUpOworICAgICAgICBib29sIG5leHQoSlNDOjpFeGVjU3RhdGUmLCBTdHJpbmcmIG5l
eHRLZXksIFN0cmluZyYgbmV4dFZhbHVlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZjxG
ZXRjaEhlYWRlcnM+IG1faGVhZGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTS2V5VmFsdWVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNLZXlWYWx1ZUl0ZXJhdG9yLmgKaW5kZXggZmJiZmZkMGM1N2JiMGFlZTA5MmJiYjNiZjQ4Y2M5
MmU4MDc5OGM5ZC4uOTg1NjYzNjdhNzgyZDVhNjA0ZWEzYTUzZDk2NjdjNWFlMDk0ZjRjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmgKQEAg
LTEyMiw3ICsxMjIsNyBAQCBib29sIEpTS2V5VmFsdWVJdGVyYXRvcjxKU1dyYXBwZXI+OjpuZXh0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlJiB2YQogewogICAgIHR5cGVuYW1l
IERPTVdyYXBwZWQ6Okl0ZXJhdG9yOjpLZXkgbmV4dEtleTsKICAgICB0eXBlbmFtZSBET01XcmFw
cGVkOjpJdGVyYXRvcjo6VmFsdWUgbmV4dFZhbHVlOwotICAgIGlmIChtX2l0ZXJhdG9yLm5leHQo
bmV4dEtleSwgbmV4dFZhbHVlKSkgeworICAgIGlmIChtX2l0ZXJhdG9yLm5leHQoc3RhdGUsIG5l
eHRLZXksIG5leHRWYWx1ZSkpIHsKICAgICAgICAgdmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3Bw
CmluZGV4IDU1MmU5OWNmYTFlMWVhYWE0YWEzMjY5NTkwMDM4ZGFhYTVhMDIwMTcuLjI0MGUyNDQ3
Y2NiODgzNWFkMzA2NzE3YTU2OTBiOTg5Mjk2ZjVhNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlLmgiCiAKICNp
bmNsdWRlICJDU1NGb250RmFjZVNvdXJjZS5oIgorI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU3JjVmFs
dWUuaCIKICNpbmNsdWRlICJDU1NGb250RmFtaWx5LmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZlYXR1
cmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgpAQCAtMzgsMTYgKzM5LDQ4
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAi
Rm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udExvYWRlci5oIgorI2luY2x1ZGUgIkZv
bnRGYWNlLmgiCiAjaW5jbHVkZSAiRm9udFZhcmlhbnRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotQ1NTRm9udEZhY2U6OkNTU0ZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciYgZm9u
dFNlbGVjdG9yLCBGb250RmFjZSogd3JhcHBlciwgYm9vbCBpc0xvY2FsRmFsbGJhY2spCit2b2lk
IENTU0ZvbnRGYWNlOjphcHBlbmRTb3VyY2VzKENTU0ZvbnRGYWNlJiBmb250RmFjZSwgQ1NTVmFs
dWVMaXN0JiBzcmNMaXN0LCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNJbml0aWF0aW5nRWxl
bWVudEluVXNlckFnZW50U2hhZG93VHJlZSkKK3sKKyAgICBmb3IgKGF1dG8mIHNyYyA6IHNyY0xp
c3QpIHsKKyAgICAgICAgLy8gQW4gaXRlbSBpbiB0aGUgbGlzdCBlaXRoZXIgc3BlY2lmaWVzIGEg
c3RyaW5nIChsb2NhbCBmb250IG5hbWUpIG9yIGEgVVJMIChyZW1vdGUgZm9udCB0byBkb3dubG9h
ZCkuCisgICAgICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUmIGl0ZW0gPSBkb3duY2FzdDxDU1NGb250
RmFjZVNyY1ZhbHVlPihzcmMuZ2V0KCkpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9u
dEZhY2VTb3VyY2U+IHNvdXJjZTsKKyAgICAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFj
ZUVsZW1lbnQgPSBudWxscHRyOworICAgICAgICBib29sIGZvdW5kU1ZHRm9udCA9IGZhbHNlOwor
CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAgICAgZm91bmRTVkdGb250ID0gaXRlbS5pc1NW
R0ZvbnRGYWNlU3JjKCkgfHwgaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyAgICAgICAgZm9u
dEZhY2VFbGVtZW50ID0gaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyNlbmRpZgorICAgICAg
ICBpZiAoIWl0ZW0uaXNMb2NhbCgpKSB7CisgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBkb2N1bWVudCA/IGRvY3VtZW50LT5zZXR0aW5ncygpIDogbnVsbHB0cjsKKyAgICAgICAgICAg
IGJvb2wgYWxsb3dEb3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8fCAoc2V0dGluZ3MgJiYgc2V0
dGluZ3MtPmRvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgpKTsKKyAgICAgICAgICAgIGlm
IChhbGxvd0Rvd25sb2FkaW5nICYmIGl0ZW0uaXNTdXBwb3J0ZWRGb3JtYXQoKSAmJiBkb2N1bWVu
dCkgeworICAgICAgICAgICAgICAgIGlmIChDYWNoZWRGb250KiBjYWNoZWRGb250ID0gaXRlbS5j
YWNoZWRGb250KGRvY3VtZW50LCBmb3VuZFNWR0ZvbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVz
ZXJBZ2VudFNoYWRvd1RyZWUpKQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1h
a2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmb250RmFjZSwgaXRlbS5yZXNvdXJjZSgpLCBj
YWNoZWRGb250KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBz
b3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmb250RmFjZSwgaXRl
bS5yZXNvdXJjZSgpLCBudWxscHRyLCBmb250RmFjZUVsZW1lbnQpOworCisgICAgICAgIGlmIChz
b3VyY2UpCisgICAgICAgICAgICBmb250RmFjZS5hZG9wdFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkp
OworICAgIH0KKyAgICBmb250RmFjZS5zb3VyY2VzUG9wdWxhdGVkKCk7Cit9CisKK0NTU0ZvbnRG
YWNlOjpDU1NGb250RmFjZShDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciwgU3R5bGVSdWxl
Rm9udEZhY2UqIGNzc0Nvbm5lY3Rpb24sIEZvbnRGYWNlKiB3cmFwcGVyLCBib29sIGlzTG9jYWxG
YWxsYmFjaykKICAgICA6IG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKLSAgICAsIG1fd3Jh
cHBlcih3cmFwcGVyKQorICAgICwgbV9jc3NDb25uZWN0aW9uKGNzc0Nvbm5lY3Rpb24pCisgICAg
LCBtX3dyYXBwZXIod3JhcHBlciA/IHdyYXBwZXItPmNyZWF0ZVdlYWtQdHIoKSA6IFdlYWtQdHI8
Rm9udEZhY2U+KCkpCiAgICAgLCBtX2lzTG9jYWxGYWxsYmFjayhpc0xvY2FsRmFsbGJhY2spCiB7
CiB9CkBAIC01Niw2ICs4OSwxNSBAQCBDU1NGb250RmFjZTo6fkNTU0ZvbnRGYWNlKCkKIHsKIH0K
IAordm9pZCBDU1NGb250RmFjZTo6bm90aWZ5Q2xpZW50c09mRm9udFByb3BlcnR5Q2hhbmdlKCkK
K3sKKyAgICBhdXRvIGNsaWVudHNDb3B5ID0gbV9jbGllbnRzOworICAgIGZvciAoYXV0byogY2xp
ZW50IDogY2xpZW50c0NvcHkpIHsKKyAgICAgICAgaWYgKG1fY2xpZW50cy5jb250YWlucyhjbGll
bnQpKQorICAgICAgICAgICAgY2xpZW50LT5mb250UHJvcGVydHlDaGFuZ2VkKCp0aGlzKTsKKyAg
ICB9Cit9CisKIGJvb2wgQ1NTRm9udEZhY2U6OnNldEZhbWlsaWVzKENTU1ZhbHVlJiBmYW1pbHkp
CiB7CiAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KGZhbWlseSkpCkBAIC02NSw3OCArMTA3LDk0
IEBAIGJvb2wgQ1NTRm9udEZhY2U6OnNldEZhbWlsaWVzKENTU1ZhbHVlJiBmYW1pbHkpCiAgICAg
aWYgKCFmYW1pbHlMaXN0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBvbGRGYW1pbGllcyA9IG1fZmFtaWxpZXM7CiAgICAgbV9mYW1p
bGllcyA9ICZmYW1pbHlMaXN0OworCisgICAgYXV0byBjbGllbnRzQ29weSA9IG1fY2xpZW50czsK
KyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNsaWVudHNDb3B5KSB7CisgICAgICAgIGlmIChtX2Ns
aWVudHMuY29udGFpbnMoY2xpZW50KSkKKyAgICAgICAgICAgIGNsaWVudC0+Zm9udFByb3BlcnR5
Q2hhbmdlZCgqdGhpcywgb2xkRmFtaWxpZXMuZ2V0KCkpOworICAgIH0KKwogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIENTU0ZvbnRGYWNlOjpzZXRTdHlsZShDU1NWYWx1ZSYgc3R5bGUpCitP
cHRpb25hbDxGb250VHJhaXRzTWFzaz4gQ1NTRm9udEZhY2U6OmNhbGN1bGF0ZVN0eWxlKENTU1Zh
bHVlJiBzdHlsZSkKIHsKICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPihzdHlsZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAKLSAgICB1bnNp
Z25lZCBzdHlsZU1hc2sgPSAwOwogICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHN0eWxlKS5nZXRWYWx1ZUlEKCkpIHsKICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAg
ICAgICBzdHlsZU1hc2sgPSBGb250U3R5bGVOb3JtYWxNYXNrOwotICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIEZvbnRTdHlsZU5vcm1hbE1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZUl0YWxp
YzoKICAgICBjYXNlIENTU1ZhbHVlT2JsaXF1ZToKLSAgICAgICAgc3R5bGVNYXNrID0gRm9udFN0
eWxlSXRhbGljTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250U3R5bGVJ
dGFsaWNNYXNrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN0eWxlTWFzayA9IEZvbnRTdHlsZU5v
cm1hbE1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFN0eWxlTm9ybWFs
TWFzazsKICAgICB9CiAKLSAgICBtX3RyYWl0c01hc2sgPSBzdGF0aWNfY2FzdDxGb250VHJhaXRz
TWFzaz4oKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RyYWl0c01hc2spICYgKH5Gb250U3R5bGVN
YXNrKSkgfCBzdHlsZU1hc2spOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBGb250U3R5
bGVOb3JtYWxNYXNrOwogfQogCi1ib29sIENTU0ZvbnRGYWNlOjpzZXRXZWlnaHQoQ1NTVmFsdWUm
IHdlaWdodCkKK2Jvb2wgQ1NTRm9udEZhY2U6OnNldFN0eWxlKENTU1ZhbHVlJiBzdHlsZSkKK3sK
KyAgICBpZiAoYXV0byBtYXNrID0gY2FsY3VsYXRlU3R5bGUoc3R5bGUpKSB7CisgICAgICAgIG1f
dHJhaXRzTWFzayA9IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fdHJhaXRzTWFzaykgJiAofkZvbnRTdHlsZU1hc2spKSB8IG1hc2sudmFsdWUoKSk7
CisKKyAgICAgICAgbm90aWZ5Q2xpZW50c09mRm9udFByb3BlcnR5Q2hhbmdlKCk7CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworT3B0aW9uYWw8
Rm9udFRyYWl0c01hc2s+IENTU0ZvbnRGYWNlOjpjYWxjdWxhdGVXZWlnaHQoQ1NTVmFsdWUmIHdl
aWdodCkKIHsKICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih3ZWlnaHQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBOdWxsb3B0OwogCi0gICAgdW5zaWduZWQg
d2VpZ2h0TWFzayA9IDA7CiAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
d2VpZ2h0KS5nZXRWYWx1ZUlEKCkpIHsKICAgICBjYXNlIENTU1ZhbHVlQm9sZDoKICAgICBjYXNl
IENTU1ZhbHVlQm9sZGVyOgogICAgIGNhc2UgQ1NTVmFsdWU3MDA6Ci0gICAgICAgIHdlaWdodE1h
c2sgPSBGb250V2VpZ2h0NzAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBG
b250V2VpZ2h0NzAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgogICAgIGNhc2UgQ1NT
VmFsdWU0MDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0NDAwTWFzazsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0NDAwTWFzazsKICAgICBjYXNlIENT
U1ZhbHVlOTAwOgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDkwME1hc2s7Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFdlaWdodDkwME1hc2s7CiAgICAgY2FzZSBD
U1NWYWx1ZTgwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQ4MDBNYXNrOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ4MDBNYXNrOwogICAgIGNhc2Ug
Q1NTVmFsdWU2MDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0NjAwTWFzazsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0NjAwTWFzazsKICAgICBjYXNl
IENTU1ZhbHVlNTAwOgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDUwME1hc2s7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFdlaWdodDUwME1hc2s7CiAgICAgY2Fz
ZSBDU1NWYWx1ZTMwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQzMDBNYXNrOwot
ICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQzMDBNYXNrOwogICAgIGNh
c2UgQ1NTVmFsdWVMaWdodGVyOgogICAgIGNhc2UgQ1NTVmFsdWUyMDA6Ci0gICAgICAgIHdlaWdo
dE1hc2sgPSBGb250V2VpZ2h0MjAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBGb250V2VpZ2h0MjAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVlMTAwOgotICAgICAgICB3ZWln
aHRNYXNrID0gRm9udFdlaWdodDEwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm4gRm9udFdlaWdodDEwME1hc2s7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgd2VpZ2h0TWFzayA9
IEZvbnRXZWlnaHQ0MDBNYXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRX
ZWlnaHQ0MDBNYXNrOwogICAgIH0KIAotICAgIG1fdHJhaXRzTWFzayA9IHN0YXRpY19jYXN0PEZv
bnRUcmFpdHNNYXNrPigoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJhaXRzTWFzaykgJiAofkZv
bnRXZWlnaHRNYXNrKSkgfCB3ZWlnaHRNYXNrKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gRm9udFdlaWdodDQwME1hc2s7Cit9CisKK2Jvb2wgQ1NTRm9udEZhY2U6OnNldFdlaWdodChD
U1NWYWx1ZSYgd2VpZ2h0KQoreworICAgIGlmIChhdXRvIG1hc2sgPSBjYWxjdWxhdGVXZWlnaHQo
d2VpZ2h0KSkgeworICAgICAgICBtX3RyYWl0c01hc2sgPSBzdGF0aWNfY2FzdDxGb250VHJhaXRz
TWFzaz4oKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RyYWl0c01hc2spICYgKH5Gb250V2VpZ2h0
TWFzaykpIHwgbWFzay52YWx1ZSgpKTsKKworICAgICAgICBub3RpZnlDbGllbnRzT2ZGb250UHJv
cGVydHlDaGFuZ2UoKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIGJvb2wgQ1NTRm9udEZhY2U6OnNldFVuaWNvZGVSYW5nZShDU1NWYWx1
ZSYgdW5pY29kZVJhbmdlKQpAQCAtMTUwLDYgKzIwOCw5IEBAIGJvb2wgQ1NTRm9udEZhY2U6OnNl
dFVuaWNvZGVSYW5nZShDU1NWYWx1ZSYgdW5pY29kZVJhbmdlKQogICAgICAgICBDU1NVbmljb2Rl
UmFuZ2VWYWx1ZSYgcmFuZ2UgPSBkb3duY2FzdDxDU1NVbmljb2RlUmFuZ2VWYWx1ZT4ocmFuZ2VW
YWx1ZS5nZXQoKSk7CiAgICAgICAgIG1fcmFuZ2VzLmFwcGVuZChVbmljb2RlUmFuZ2UocmFuZ2Uu
ZnJvbSgpLCByYW5nZS50bygpKSk7CiAgICAgfQorCisgICAgbm90aWZ5Q2xpZW50c09mRm9udFBy
b3BlcnR5Q2hhbmdlKCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTYwLDYgKzIyMSw5
IEBAIGJvb2wgQ1NTRm9udEZhY2U6OnNldFZhcmlhbnRMaWdhdHVyZXMoQ1NTVmFsdWUmIHZhcmlh
bnRMaWdhdHVyZXMpCiAgICAgbV92YXJpYW50U2V0dGluZ3MuZGlzY3JldGlvbmFyeUxpZ2F0dXJl
cyA9IGxpZ2F0dXJlcy5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOwogICAgIG1fdmFyaWFudFNldHRp
bmdzLmhpc3RvcmljYWxMaWdhdHVyZXMgPSBsaWdhdHVyZXMuaGlzdG9yaWNhbExpZ2F0dXJlczsK
ICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5jb250ZXh0dWFsQWx0ZXJuYXRlcyA9IGxpZ2F0dXJlcy5j
b250ZXh0dWFsQWx0ZXJuYXRlczsKKworICAgIG5vdGlmeUNsaWVudHNPZkZvbnRQcm9wZXJ0eUNo
YW5nZSgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2OCw2ICsyMzIsOSBAQCBib29s
IENTU0ZvbnRGYWNlOjpzZXRWYXJpYW50UG9zaXRpb24oQ1NTVmFsdWUmIHZhcmlhbnRQb3NpdGlv
bikKICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YXJpYW50UG9zaXRpb24pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV92YXJpYW50U2V0dGluZ3MucG9zaXRpb24gPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFyaWFudFBvc2l0aW9uKTsKKworICAgIG5vdGlmeUNs
aWVudHNPZkZvbnRQcm9wZXJ0eUNoYW5nZSgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTE3Niw2ICsyNDMsOSBAQCBib29sIENTU0ZvbnRGYWNlOjpzZXRWYXJpYW50Q2FwcyhDU1NWYWx1
ZSYgdmFyaWFudENhcHMpCiAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFyaWFudENh
cHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV92YXJpYW50U2V0dGluZ3MuY2FwcyA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YXJpYW50Q2Fwcyk7CisKKyAgICBub3RpZnlD
bGllbnRzT2ZGb250UHJvcGVydHlDaGFuZ2UoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0xODcsNiArMjU3LDkgQEAgYm9vbCBDU1NGb250RmFjZTo6c2V0VmFyaWFudE51bWVyaWMoQ1NT
VmFsdWUmIHZhcmlhbnROdW1lcmljKQogICAgIG1fdmFyaWFudFNldHRpbmdzLm51bWVyaWNGcmFj
dGlvbiA9IG51bWVyaWMuZnJhY3Rpb247CiAgICAgbV92YXJpYW50U2V0dGluZ3MubnVtZXJpY09y
ZGluYWwgPSBudW1lcmljLm9yZGluYWw7CiAgICAgbV92YXJpYW50U2V0dGluZ3MubnVtZXJpY1Ns
YXNoZWRaZXJvID0gbnVtZXJpYy5zbGFzaGVkWmVybzsKKworICAgIG5vdGlmeUNsaWVudHNPZkZv
bnRQcm9wZXJ0eUNoYW5nZSgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE5NSw2ICsy
NjgsOSBAQCBib29sIENTU0ZvbnRGYWNlOjpzZXRWYXJpYW50QWx0ZXJuYXRlcyhDU1NWYWx1ZSYg
dmFyaWFudEFsdGVybmF0ZXMpCiAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFyaWFu
dEFsdGVybmF0ZXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV92YXJpYW50U2V0dGlu
Z3MuYWx0ZXJuYXRlcyA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YXJpYW50QWx0ZXJu
YXRlcyk7CisKKyAgICBub3RpZnlDbGllbnRzT2ZGb250UHJvcGVydHlDaGFuZ2UoKTsKKwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0yMDQsNiArMjgwLDkgQEAgYm9vbCBDU1NGb250RmFjZTo6
c2V0VmFyaWFudEVhc3RBc2lhbihDU1NWYWx1ZSYgdmFyaWFudEVhc3RBc2lhbikKICAgICBtX3Zh
cmlhbnRTZXR0aW5ncy5lYXN0QXNpYW5WYXJpYW50ID0gZWFzdEFzaWFuLnZhcmlhbnQ7CiAgICAg
bV92YXJpYW50U2V0dGluZ3MuZWFzdEFzaWFuV2lkdGggPSBlYXN0QXNpYW4ud2lkdGg7CiAgICAg
bV92YXJpYW50U2V0dGluZ3MuZWFzdEFzaWFuUnVieSA9IGVhc3RBc2lhbi5ydWJ5OworCisgICAg
bm90aWZ5Q2xpZW50c09mRm9udFByb3BlcnR5Q2hhbmdlKCk7CisKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMjE4LDYgKzI5Nyw5IEBAIGJvb2wgQ1NTRm9udEZhY2U6OnNldEZlYXR1cmVTZXR0
aW5ncyhDU1NWYWx1ZSYgZmVhdHVyZVNldHRpbmdzKQogICAgICAgICBDU1NGb250RmVhdHVyZVZh
bHVlJiBmZWF0dXJlID0gZG93bmNhc3Q8Q1NTRm9udEZlYXR1cmVWYWx1ZT4ocmFuZ2VWYWx1ZS5n
ZXQoKSk7CiAgICAgICAgIG1fZmVhdHVyZVNldHRpbmdzLmluc2VydChGb250RmVhdHVyZShmZWF0
dXJlLnRhZygpLCBmZWF0dXJlLnZhbHVlKCkpKTsKICAgICB9CisKKyAgICBub3RpZnlDbGllbnRz
T2ZGb250UHJvcGVydHlDaGFuZ2UoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMzcs
OSArMzE5LDM5IEBAIHZvaWQgQ1NTRm9udEZhY2U6OmFkZENsaWVudChDbGllbnQmIGNsaWVudCkK
IAogdm9pZCBDU1NGb250RmFjZTo6cmVtb3ZlQ2xpZW50KENsaWVudCYgY2xpZW50KQogeworICAg
IEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOwogICAgIG1fY2xpZW50cy5yZW1v
dmUoJmNsaWVudCk7CiB9CiAKK1JlZjxGb250RmFjZT4gQ1NTRm9udEZhY2U6OndyYXBwZXIoSlND
OjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSkKK3sKKyAgICBpZiAobV93cmFwcGVyKQorICAgICAgICBy
ZXR1cm4gUmVmPEZvbnRGYWNlPigqbV93cmFwcGVyLmdldCgpKTsKKworICAgIFJlZjxGb250RmFj
ZT4gd3JhcHBlciA9IEZvbnRGYWNlOjpjcmVhdGUoZXhlY1N0YXRlLCAqdGhpcyk7CisgICAgc3dp
dGNoIChtX3N0YXR1cykgeworICAgIGNhc2UgU3RhdHVzOjpQZW5kaW5nOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIFN0YXR1czo6TG9hZGluZzoKKyAgICAgICAgd3JhcHBlci0+Zm9udFN0YXRl
Q2hhbmdlZCgqdGhpcywgU3RhdHVzOjpQZW5kaW5nLCBTdGF0dXM6OkxvYWRpbmcpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFN0YXR1czo6VGltZWRPdXQ6CisgICAgICAgIHdyYXBwZXItPmZv
bnRTdGF0ZUNoYW5nZWQoKnRoaXMsIFN0YXR1czo6UGVuZGluZywgU3RhdHVzOjpMb2FkaW5nKTsK
KyAgICAgICAgd3JhcHBlci0+Zm9udFN0YXRlQ2hhbmdlZCgqdGhpcywgU3RhdHVzOjpMb2FkaW5n
LCBTdGF0dXM6OlRpbWVkT3V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGF0dXM6OlN1
Y2Nlc3M6CisgICAgICAgIHdyYXBwZXItPmZvbnRTdGF0ZUNoYW5nZWQoKnRoaXMsIFN0YXR1czo6
UGVuZGluZywgU3RhdHVzOjpMb2FkaW5nKTsKKyAgICAgICAgd3JhcHBlci0+Zm9udFN0YXRlQ2hh
bmdlZCgqdGhpcywgU3RhdHVzOjpQZW5kaW5nLCBTdGF0dXM6OlN1Y2Nlc3MpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFN0YXR1czo6RmFpbHVyZToKKyAgICAgICAgd3JhcHBlci0+Zm9udFN0
YXRlQ2hhbmdlZCgqdGhpcywgU3RhdHVzOjpQZW5kaW5nLCBTdGF0dXM6OkxvYWRpbmcpOworICAg
ICAgICB3cmFwcGVyLT5mb250U3RhdGVDaGFuZ2VkKCp0aGlzLCBTdGF0dXM6OlBlbmRpbmcsIFN0
YXR1czo6RmFpbHVyZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBtX3dyYXBwZXIgPSB3
cmFwcGVyLT5jcmVhdGVXZWFrUHRyKCk7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIHZvaWQg
Q1NTRm9udEZhY2U6OmFkb3B0U291cmNlKHN0ZDo6dW5pcXVlX3B0cjxDU1NGb250RmFjZVNvdXJj
ZT4mJiBzb3VyY2UpCiB7CiAgICAgbV9zb3VyY2VzLmFwcGVuZChXVEZNb3ZlKHNvdXJjZSkpOwpA
QCAtMjY4LDggKzM4MCw4IEBAIHZvaWQgQ1NTRm9udEZhY2U6OnNldFN0YXR1cyhTdGF0dXMgbmV3
U3RhdHVzKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6
IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5zdGF0ZUNoYW5nZWQoKnRoaXMsIG1fc3RhdHVz
LCBuZXdTdGF0dXMpOworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAg
ICBjbGllbnQtPmZvbnRTdGF0ZUNoYW5nZWQoKnRoaXMsIG1fc3RhdHVzLCBuZXdTdGF0dXMpOwog
CiAgICAgbV9zdGF0dXMgPSBuZXdTdGF0dXM7CiB9CkBAIC0yODIsOSArMzk0LDEwIEBAIHZvaWQg
Q1NTRm9udEZhY2U6OmZvbnRMb2FkZWQoQ1NTRm9udEZhY2VTb3VyY2UmKQogICAgIGlmIChtX3Nv
dXJjZXNQb3B1bGF0ZWQpCiAgICAgICAgIHB1bXAoKTsKIAorICAgIEFTU0VSVChtX2ZvbnRTZWxl
Y3Rvcik7CiAgICAgbV9mb250U2VsZWN0b3ItPmZvbnRMb2FkZWQoKTsKIAotICAgIGZvciAoYXV0
byYgY2xpZW50IDogbV9jbGllbnRzKQorICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRz
KQogICAgICAgICBjbGllbnQtPmZvbnRMb2FkZWQoKnRoaXMpOwogfQogCkBAIC0yOTYsOSArNDA5
LDEwIEBAIHNpemVfdCBDU1NGb250RmFjZTo6cHVtcCgpCiAKICAgICAgICAgaWYgKHNvdXJjZS0+
c3RhdHVzKCkgPT0gQ1NTRm9udEZhY2VTb3VyY2U6OlN0YXR1czo6UGVuZGluZykgewogICAgICAg
ICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFN0YXR1czo6UGVuZGluZyB8fCBtX3N0YXR1cyA9PSBT
dGF0dXM6OkxvYWRpbmcgfHwgbV9zdGF0dXMgPT0gU3RhdHVzOjpUaW1lZE91dCk7CisgICAgICAg
ICAgICBBU1NFUlQobV9mb250U2VsZWN0b3IpOwogICAgICAgICAgICAgaWYgKG1fc3RhdHVzID09
IFN0YXR1czo6UGVuZGluZykKICAgICAgICAgICAgICAgICBzZXRTdGF0dXMoU3RhdHVzOjpMb2Fk
aW5nKTsKLSAgICAgICAgICAgIHNvdXJjZS0+bG9hZChtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7Cisg
ICAgICAgICAgICBzb3VyY2UtPmxvYWQoKm1fZm9udFNlbGVjdG9yKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHN3aXRjaCAoc291cmNlLT5zdGF0dXMoKSkgewpAQCAtMzQ1LDggKzQ1OSwxMCBAQCBS
ZWZQdHI8Rm9udD4gQ1NTRm9udEZhY2U6OmZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGJvb2wgc3ludAogICAgIHNpemVfdCBzdGFydEluZGV4ID0gcHVtcCgpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbV9zb3VyY2VzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIGF1dG8mIHNvdXJjZSA9IG1fc291cmNlc1tpXTsKLSAgICAgICAgaWYgKHNv
dXJjZS0+c3RhdHVzKCkgPT0gQ1NTRm9udEZhY2VTb3VyY2U6OlN0YXR1czo6UGVuZGluZykKLSAg
ICAgICAgICAgIHNvdXJjZS0+bG9hZChtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAgICAgIGlm
IChzb3VyY2UtPnN0YXR1cygpID09IENTU0ZvbnRGYWNlU291cmNlOjpTdGF0dXM6OlBlbmRpbmcp
IHsKKyAgICAgICAgICAgIEFTU0VSVChtX2ZvbnRTZWxlY3Rvcik7CisgICAgICAgICAgICBzb3Vy
Y2UtPmxvYWQoKm1fZm9udFNlbGVjdG9yKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN3aXRjaCAo
c291cmNlLT5zdGF0dXMoKSkgewogICAgICAgICBjYXNlIENTU0ZvbnRGYWNlU291cmNlOjpTdGF0
dXM6OlBlbmRpbmc6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCmluZGV4IDEwN2Q5ZjI4MjM4NmI2
ZTZjNjFhZGIxYmIzZGY5OTBlMjBkZWZjNGYuLmEyNDI5NTZiMzJlMmJmMDhhZDJjNDgyMjgzMjE0
NjY3MjYzYTc3YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCkBAIC0yNyw3ICsyNyw2IEBA
CiAjZGVmaW5lIENTU0ZvbnRGYWNlX2gKIAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgot
I2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVkZSAiRm9udEZlYXR1cmVTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTM2
LDIyICszNSwyOSBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBFeGVjU3RhdGU7Cit9CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTRm9udEZhY2VTb3VyY2U7CitjbGFzcyBDU1NGb250
U2VsZWN0b3I7CiBjbGFzcyBDU1NTZWdtZW50ZWRGb250RmFjZTsKIGNsYXNzIENTU1ZhbHVlOwog
Y2xhc3MgQ1NTVmFsdWVMaXN0OworY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGb250RGVzY3JpcHRp
b247CiBjbGFzcyBGb250OwogY2xhc3MgRm9udEZhY2U7CiAKLS8vIEZJWE1FOiBUaGlzIGNsYXNz
IGRvZXMgbm90IG5lZWQgdG8gYmUgcmVmZXJlbmNlIGNvdW50ZWQuCiBjbGFzcyBDU1NGb250RmFj
ZSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENTU0ZvbnRGYWNlPiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxDU1NGb250RmFjZT4gY3JlYXRlKENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVj
dG9yLCBGb250RmFjZSogd3JhcHBlciA9IG51bGxwdHIsIGJvb2wgaXNMb2NhbEZhbGxiYWNrID0g
ZmFsc2UpCisgICAgc3RhdGljIFJlZjxDU1NGb250RmFjZT4gY3JlYXRlKENTU0ZvbnRTZWxlY3Rv
ciogZm9udFNlbGVjdG9yLCBTdHlsZVJ1bGVGb250RmFjZSogY3NzQ29ubmVjdGlvbiA9IG51bGxw
dHIsIEZvbnRGYWNlKiB3cmFwcGVyID0gbnVsbHB0ciwgYm9vbCBpc0xvY2FsRmFsbGJhY2sgPSBm
YWxzZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZvbnRGYWNlKGZv
bnRTZWxlY3Rvciwgd3JhcHBlciwgaXNMb2NhbEZhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENTU0ZvbnRGYWNlKGZvbnRTZWxlY3RvciwgY3NzQ29ubmVjdGlvbiwgd3Jh
cHBlciwgaXNMb2NhbEZhbGxiYWNrKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNl
KCk7CiAKQEAgLTc4LDYgKzg0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRyYWl0c01hc2so
Rm9udFRyYWl0c01hc2sgdHJhaXRzTWFzaykgeyBtX3RyYWl0c01hc2sgPSB0cmFpdHNNYXNrOyB9
CiAgICAgYm9vbCBpc0xvY2FsRmFsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2lzTG9jYWxGYWxs
YmFjazsgfQogICAgIFN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQor
ICAgIFN0eWxlUnVsZUZvbnRGYWNlKiBjc3NDb25uZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9j
c3NDb25uZWN0aW9uLmdldCgpOyB9CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8Rm9udFRyYWl0c01h
c2s+IGNhbGN1bGF0ZVN0eWxlKENTU1ZhbHVlJiBzdHlsZSk7CisgICAgc3RhdGljIE9wdGlvbmFs
PEZvbnRUcmFpdHNNYXNrPiBjYWxjdWxhdGVXZWlnaHQoQ1NTVmFsdWUmIHdlaWdodCk7CiAKICAg
ICBjbGFzcyBDbGllbnQ7CiAgICAgdm9pZCBhZGRDbGllbnQoQ2xpZW50Jik7CkBAIC05MywxMSAr
MTAzLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGxvYWQoKTsKICAgICBSZWZQdHI8Rm9udD4gZm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljSXRhbGljKTsKIAorICAgIHN0YXRpYyB2b2lkIGFwcGVuZFNvdXJjZXMoQ1NTRm9udEZhY2Um
LCBDU1NWYWx1ZUxpc3QmLCBEb2N1bWVudCosIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNl
ckFnZW50U2hhZG93VHJlZSk7CisKICAgICBjbGFzcyBDbGllbnQgewogICAgIHB1YmxpYzoKICAg
ICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmb250TG9h
ZGVkKENTU0ZvbnRGYWNlJikgeyB9OwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhdGVDaGFuZ2Vk
KENTU0ZvbnRGYWNlJiwgU3RhdHVzIG9sZFN0YXRlLCBTdGF0dXMgbmV3U3RhdGUpIHsgVU5VU0VE
X1BBUkFNKG9sZFN0YXRlKTsgVU5VU0VEX1BBUkFNKG5ld1N0YXRlKTsgfTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGZvbnRTdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2UmLCBTdGF0dXMgb2xkU3RhdGUs
IFN0YXR1cyBuZXdTdGF0ZSkgeyBVTlVTRURfUEFSQU0ob2xkU3RhdGUpOyBVTlVTRURfUEFSQU0o
bmV3U3RhdGUpOyB9OworICAgICAgICB2aXJ0dWFsIHZvaWQgZm9udFByb3BlcnR5Q2hhbmdlZChD
U1NGb250RmFjZSYsIENTU1ZhbHVlTGlzdCogb2xkRmFtaWxpZXMgPSBudWxscHRyKSB7IFVOVVNF
RF9QQVJBTShvbGRGYW1pbGllcyk7IH07CiAgICAgfTsKIAogICAgIC8vIFBlbmRpbmcgPT4gTG9h
ZGluZyAgPT4gVGltZWRPdXQKQEAgLTEzMiwyNyArMTQ1LDMwIEBAIHB1YmxpYzoKICAgICAgICAg
VUNoYXIzMiBtX3RvOwogICAgIH07CiAKLSAgICBGb250RmFjZSogd3JhcHBlcigpIGNvbnN0IHsg
cmV0dXJuIG1fd3JhcHBlcjsgfQorICAgIC8vIFdlIGRvbid0IGd1YXJhbnRlZSB0aGF0IHRoZSBG
b250RmFjZSB3cmFwcGVyIHdpbGwgYmUgdGhlIHNhbWUgZXZlcnkgdGltZSB5b3UgYXNrIGZvciBp
dC4KKyAgICBSZWY8Rm9udEZhY2U+IHdyYXBwZXIoSlNDOjpFeGVjU3RhdGUmKTsKIAogI2lmIEVO
QUJMRShTVkdfRk9OVFMpCiAgICAgYm9vbCBoYXNTVkdGb250RmFjZVNvdXJjZSgpIGNvbnN0Owog
I2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgQ1NTRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yJiwgRm9u
dEZhY2UqLCBib29sIGlzTG9jYWxGYWxsYmFjayk7CisgICAgQ1NTRm9udEZhY2UoQ1NTRm9udFNl
bGVjdG9yKiwgU3R5bGVSdWxlRm9udEZhY2UqLCBGb250RmFjZSosIGJvb2wgaXNMb2NhbEZhbGxi
YWNrKTsKIAogICAgIHNpemVfdCBwdW1wKCk7CiAgICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzKTsK
KyAgICB2b2lkIG5vdGlmeUNsaWVudHNPZkZvbnRQcm9wZXJ0eUNoYW5nZSgpOwogCiAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gbV9mYW1pbGllczsKICAgICBGb250VHJhaXRzTWFzayBtX3RyYWl0
c01hc2sgeyBzdGF0aWNfY2FzdDxGb250VHJhaXRzTWFzaz4oRm9udFN0eWxlTm9ybWFsTWFzayB8
IEZvbnRXZWlnaHQ0MDBNYXNrKSB9OwogICAgIFZlY3RvcjxVbmljb2RlUmFuZ2U+IG1fcmFuZ2Vz
OwotICAgIEhhc2hTZXQ8Q2xpZW50Kj4gbV9jbGllbnRzOwotICAgIFJlZjxDU1NGb250U2VsZWN0
b3I+IG1fZm9udFNlbGVjdG9yOwotICAgIEZvbnRGYWNlKiBtX3dyYXBwZXI7CiAgICAgRm9udEZl
YXR1cmVTZXR0aW5ncyBtX2ZlYXR1cmVTZXR0aW5nczsKICAgICBGb250VmFyaWFudFNldHRpbmdz
IG1fdmFyaWFudFNldHRpbmdzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9udEZh
Y2VTb3VyY2U+PiBtX3NvdXJjZXM7CisgICAgUmVmUHRyPENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250
U2VsZWN0b3I7CisgICAgUmVmUHRyPFN0eWxlUnVsZUZvbnRGYWNlPiBtX2Nzc0Nvbm5lY3Rpb247
CisgICAgSGFzaFNldDxDbGllbnQqPiBtX2NsaWVudHM7CisgICAgV2Vha1B0cjxGb250RmFjZT4g
bV93cmFwcGVyOwogICAgIFN0YXR1cyBtX3N0YXR1cyB7IFN0YXR1czo6UGVuZGluZyB9OwogICAg
IGJvb2wgbV9pc0xvY2FsRmFsbGJhY2sgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zb3VyY2VzUG9w
dWxhdGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCmluZGV4
IGEwZjVmZDY1MzA0ZDI5NjVkNjczZjIyMzQ5ZTNlNjI1Njk5N2JhODMuLmQ0MzhjOTRjZmQ3Y2E3
M2U1Njk1ZWNkMDE4Y2Y1N2RjODcwNzc0YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U2V0LmNwcApAQCAtMjYsMTcgKzI2LDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiQ1NTRm9udEZhY2VTZXQuaCIKIAorI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAj
aW5jbHVkZSAiQ1NTRm9udEZhbWlseS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgog
I2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCisj
aW5jbHVkZSAiQ1NTU2VnbWVudGVkRm9udEZhY2UuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3Qu
aCIKKyNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNp
bmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DU1NG
b250RmFjZVNldDo6Q1NTRm9udEZhY2VTZXQoQ1NTRm9udEZhY2VTZXRDbGllbnQmIGNsaWVudCkK
LSAgICA6IG1fY2xpZW50KGNsaWVudCkKK0NTU0ZvbnRGYWNlU2V0OjpDU1NGb250RmFjZVNldCgp
CiB7CiB9CiAKQEAgLTQ0LDYgKzQ3LDIyIEBAIENTU0ZvbnRGYWNlU2V0Ojp+Q1NTRm9udEZhY2VT
ZXQoKQogewogICAgIGZvciAoYXV0byYgZmFjZSA6IG1fZmFjZXMpCiAgICAgICAgIGZhY2UtPnJl
bW92ZUNsaWVudCgqdGhpcyk7CisKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2xvY2FsbHlJbnN0
YWxsZWRGYWNlc0xvb2t1cFRhYmxlKSB7CisgICAgICAgIGZvciAoYXV0byYgZmFjZSA6IHBhaXIu
dmFsdWUpCisgICAgICAgICAgICBmYWNlLT5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIH0KK30K
Kwordm9pZCBDU1NGb250RmFjZVNldDo6YWRkQ2xpZW50KENTU0ZvbnRGYWNlU2V0Q2xpZW50JiBj
bGllbnQpCit7CisgICAgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsKK30KKwordm9pZCBDU1NGb250
RmFjZVNldDo6cmVtb3ZlQ2xpZW50KENTU0ZvbnRGYWNlU2V0Q2xpZW50JiBjbGllbnQpCit7Cisg
ICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJl
bW92ZSgmY2xpZW50KTsKIH0KIAogdm9pZCBDU1NGb250RmFjZVNldDo6aW5jcmVtZW50QWN0aXZl
Q291bnQoKQpAQCAtNTEsNyArNzAsOCBAQCB2b2lkIENTU0ZvbnRGYWNlU2V0OjppbmNyZW1lbnRB
Y3RpdmVDb3VudCgpCiAgICAgKyttX2FjdGl2ZUNvdW50OwogICAgIGlmIChtX2FjdGl2ZUNvdW50
ID09IDEpIHsKICAgICAgICAgbV9zdGF0dXMgPSBTdGF0dXM6OkxvYWRpbmc7Ci0gICAgICAgIG1f
Y2xpZW50LnN0YXJ0ZWRMb2FkaW5nKCk7CisgICAgICAgIGZvciAoYXV0byogY2xpZW50IDogbV9j
bGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5zdGFydGVkTG9hZGluZygpOwogICAgIH0KIH0K
IApAQCAtNjAsNyArODAsOCBAQCB2b2lkIENTU0ZvbnRGYWNlU2V0OjpkZWNyZW1lbnRBY3RpdmVD
b3VudCgpCiAgICAgLS1tX2FjdGl2ZUNvdW50OwogICAgIGlmICghbV9hY3RpdmVDb3VudCkgewog
ICAgICAgICBtX3N0YXR1cyA9IFN0YXR1czo6TG9hZGVkOwotICAgICAgICBtX2NsaWVudC5jb21w
bGV0ZWRMb2FkaW5nKCk7CisgICAgICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQor
ICAgICAgICAgICAgY2xpZW50LT5jb21wbGV0ZWRMb2FkaW5nKCk7CiAgICAgfQogfQogCkBAIC03
MCwyMyArOTEsMTQwIEBAIGJvb2wgQ1NTRm9udEZhY2VTZXQ6Omhhc0ZhY2UoY29uc3QgQ1NTRm9u
dEZhY2UmIGZhY2UpIGNvbnN0CiAgICAgICAgIGlmIChteUZhY2UucHRyKCkgPT0gJmZhY2UpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K3ZvaWQgQ1NTRm9udEZhY2VTZXQ6OnJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoY29u
c3QgU3RyaW5nJiBmYW1pbHlOYW1lKQoreworICAgIEFTU0VSVCghbV9sb2NhbGx5SW5zdGFsbGVk
RmFjZXNMb29rdXBUYWJsZS5jb250YWlucyhmYW1pbHlOYW1lKSk7CisKKyAgICBWZWN0b3I8Rm9u
dFRyYWl0c01hc2s+IHRyYWl0c01hc2tzID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5nZXRUcmFp
dHNJbkZhbWlseShmYW1pbHlOYW1lKTsKKyAgICBpZiAodHJhaXRzTWFza3MuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4gZmFjZXMgPSB7
IH07CisgICAgZm9yIChhdXRvIG1hc2sgOiB0cmFpdHNNYXNrcykgeworICAgICAgICBSZWY8Q1NT
Rm9udEZhY2U+IGZhY2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIsIHRydWUpOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZmFt
aWx5TGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKKyAgICAgICAg
ZmFtaWx5TGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9udEZh
bWlseVZhbHVlKGZhbWlseU5hbWUpKTsKKyAgICAgICAgZmFjZS0+c2V0RmFtaWxpZXMoKmZhbWls
eUxpc3QpOworICAgICAgICBmYWNlLT5zZXRUcmFpdHNNYXNrKG1hc2spOworICAgICAgICBmYWNl
LT5hZG9wdFNvdXJjZShzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmYWNlLmdl
dCgpLCBmYW1pbHlOYW1lKSk7CisgICAgICAgIEFTU0VSVCghZmFjZS0+YWxsU291cmNlc0ZhaWxl
ZCgpKTsKKyAgICAgICAgZmFjZXMuYXBwZW5kKFdURk1vdmUoZmFjZSkpOworICAgIH0KKyAgICBt
X2xvY2FsbHlJbnN0YWxsZWRGYWNlc0xvb2t1cFRhYmxlLmFkZChmYW1pbHlOYW1lLCBXVEZNb3Zl
KGZhY2VzKSk7Cit9CisKK1N0cmluZyBDU1NGb250RmFjZVNldDo6ZmFtaWx5TmFtZUZyb21Qcmlt
aXRpdmUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5p
c0ZvbnRGYW1pbHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmZvbnRGYW1pbHkoKS5mYW1pbHlO
YW1lOworICAgIGlmICghdmFsdWUuaXNWYWx1ZUlEKCkpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgcmF3IHRleHQgZm9yIGFsbCB0aGUgZ2VuZXJpYyBm
YW1pbHkgdHlwZXMsIHNpbmNlIEBmb250LWZhY2UgaXMgYSB3YXkgb2YgYWN0dWFsbHkKKyAgICAv
LyBkZWZpbmluZyB3aGF0IGZvbnQgdG8gdXNlIGZvciB0aG9zZSB0eXBlcy4KKyAgICBzd2l0Y2gg
KHZhbHVlLmdldFZhbHVlSUQoKSkgeworICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAgICAg
cmV0dXJuIHNlcmlmRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6CisgICAgICAg
IHJldHVybiBzYW5zU2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6CisgICAg
ICAgIHJldHVybiBjdXJzaXZlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAg
ICAgICByZXR1cm4gZmFudGFzeUZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgor
ICAgICAgICByZXR1cm4gbW9ub3NwYWNlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQ
aWN0b2dyYXBoOgorICAgICAgICByZXR1cm4gcGljdG9ncmFwaEZhbWlseTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4geyB9OworICAgIH0KK30KKwordm9pZCBDU1NGb250RmFjZVNldDo6
YWRkVG9GYWNlc0xvb2t1cFRhYmxlKENTU0ZvbnRGYWNlJiBmYWNlKQoreworICAgIGlmIChmYWNl
LmZhbWlsaWVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogKmZhY2UuZmFtaWxpZXMo
KSkgeworICAgICAgICAgICAgU3RyaW5nIGZhbWlseU5hbWUgPSBDU1NGb250RmFjZVNldDo6ZmFt
aWx5TmFtZUZyb21QcmltaXRpdmUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0
KCkpKTsKKyAgICAgICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2ZhY2VzTG9v
a3VwVGFibGUuYWRkKGZhbWlseU5hbWUsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PigpKTsKKyAg
ICAgICAgICAgIGF1dG8mIGZhbWlseUZvbnRGYWNlcyA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CisgICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMgZ3Jvd3Mgd2l0aG91dCBib3VuZCwg
ZXZlbnR1YWxseSBlbmNvcnBvcmF0aW5nIGV2ZXJ5IGZvbnQgaW5zdGFsbGVkIG9uIHRoZSBzeXN0
ZW0uCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBieSBkZXNpZ24uCisgICAgICAgICAgICAg
ICAgcmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseShmYW1pbHlOYW1lKTsKKyAgICAgICAg
ICAgICAgICBmYW1pbHlGb250RmFjZXMgPSB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZhbWlseUZvbnRGYWNlcy5hcHBlbmQoZmFjZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
IHZvaWQgQ1NTRm9udEZhY2VTZXQ6OmFkZChDU1NGb250RmFjZSYgZmFjZSkKIHsKICAgICBBU1NF
UlQoIWhhc0ZhY2UoZmFjZSkpOwogCi0gICAgbV9mYWNlcy5hcHBlbmQoZmFjZSk7CisgICAgZm9y
IChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+Zm9udE1vZGlmaWVk
KCk7CisKICAgICBmYWNlLmFkZENsaWVudCgqdGhpcyk7CisgICAgbV9jYWNoZS5jbGVhcigpOwor
CisgICAgaWYgKGZhY2UuY3NzQ29ubmVjdGlvbigpKQorICAgICAgICBtX2ZhY2VzLmluc2VydCht
X2ZhY2VzUGFydGl0aW9uSW5kZXgrKywgZmFjZSk7CisgICAgZWxzZQorICAgICAgICBtX2ZhY2Vz
LmFwcGVuZChmYWNlKTsKKworICAgIGFkZFRvRmFjZXNMb29rdXBUYWJsZShmYWNlKTsKKwogICAg
IGlmIChmYWNlLnN0YXR1cygpID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OkxvYWRpbmcgfHwgZmFj
ZS5zdGF0dXMoKSA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpUaW1lZE91dCkKICAgICAgICAgaW5j
cmVtZW50QWN0aXZlQ291bnQoKTsKIH0KIAordm9pZCBDU1NGb250RmFjZVNldDo6cmVtb3ZlRnJv
bUZhY2VzTG9va3VwVGFibGUoY29uc3QgQ1NTRm9udEZhY2UmIGZhY2UsIGNvbnN0IENTU1ZhbHVl
TGlzdCYgZmFtaWxpZXNUb1NlYXJjaEZvcikKK3sKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBmYW1p
bGllc1RvU2VhcmNoRm9yKSB7CisgICAgICAgIFN0cmluZyBmYW1pbHlOYW1lID0gQ1NTRm9udEZh
Y2VTZXQ6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PihpdGVtLmdldCgpKSk7CisgICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2ZhY2VzTG9va3Vw
VGFibGUuZmluZChmYW1pbHlOYW1lKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZmFj
ZXNMb29rdXBUYWJsZS5lbmQoKSk7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVyYXRvci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChpdGVyYXRvci0+dmFsdWVbaV0ucHRyKCkgPT0gJmZhY2UpIHsKKyAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaXRlcmF0b3ItPnZh
bHVlLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kLCBmb3VuZCk7CisgICAgICAgIGlm
ICghaXRlcmF0b3ItPnZhbHVlLnNpemUoKSkKKyAgICAgICAgICAgIG1fZmFjZXNMb29rdXBUYWJs
ZS5yZW1vdmUoaXRlcmF0b3IpOworICAgIH0KK30KKwogdm9pZCBDU1NGb250RmFjZVNldDo6cmVt
b3ZlKGNvbnN0IENTU0ZvbnRGYWNlJiBmYWNlKQogeworICAgIG1fY2FjaGUuY2xlYXIoKTsKKwor
ICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmZvbnRN
b2RpZmllZCgpOworCisgICAgaWYgKGZhY2UuZmFtaWxpZXMoKSkKKyAgICAgICAgcmVtb3ZlRnJv
bUZhY2VzTG9va3VwVGFibGUoZmFjZSwgKmZhY2UuZmFtaWxpZXMoKSk7CisKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZmFjZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1fZmFj
ZXNbaV0ucHRyKCkgPT0gJmZhY2UpIHsKKyAgICAgICAgICAgIGlmIChpIDwgbV9mYWNlc1BhcnRp
dGlvbkluZGV4KQorICAgICAgICAgICAgICAgIC0tbV9mYWNlc1BhcnRpdGlvbkluZGV4OwogICAg
ICAgICAgICAgbV9mYWNlc1tpXS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKICAgICAgICAgICAgIG1f
ZmFjZXMucmVtb3ZlKGkpOwogICAgICAgICAgICAgaWYgKGZhY2Uuc3RhdHVzKCkgPT0gQ1NTRm9u
dEZhY2U6OlN0YXR1czo6TG9hZGluZyB8fCBmYWNlLnN0YXR1cygpID09IENTU0ZvbnRGYWNlOjpT
dGF0dXM6OlRpbWVkT3V0KQpAQCAtOTcsMzAgKzIzNSw0MyBAQCB2b2lkIENTU0ZvbnRGYWNlU2V0
OjpyZW1vdmUoY29uc3QgQ1NTRm9udEZhY2UmIGZhY2UpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PFN0cmluZz4gZXh0cmFjdEZhbWlsaWVzKGNvbnN0IENT
U1ZhbHVlTGlzdCYgbGlzdCkKK3ZvaWQgQ1NTRm9udEZhY2VTZXQ6OmNsZWFyKCkKIHsKLSAgICBI
YXNoU2V0PFN0cmluZz4gcmVzdWx0OwotICAgIGZvciAoYXV0byYgZmFtaWx5IDogbGlzdCkgewot
ICAgICAgICBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KGZhbWlseS5nZXQoKSk7Ci0gICAgICAgIGlmICghcHJpbWl0aXZlLmlz
Rm9udEZhbWlseSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJlc3VsdC5hZGQo
cHJpbWl0aXZlLmZvbnRGYW1pbHkoKS5mYW1pbHlOYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICBtX2ZhY2VzLmNsZWFyKCk7CisgICAgbV9mYWNlc0xvb2t1cFRhYmxlLmNsZWFy
KCk7CisgICAgbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZS5jbGVhcigpOworICAg
IG1fY2FjaGUuY2xlYXIoKTsKIH0KIAotc3RhdGljIGJvb2wgZmFtaWxpZXNJbnRlcnNlY3QoY29u
c3QgQ1NTRm9udEZhY2UmIGZhY2UsIGNvbnN0IENTU1ZhbHVlTGlzdCYgcmVxdWVzdCkKK0NTU0Zv
bnRGYWNlJiBDU1NGb250RmFjZVNldDo6b3BlcmF0b3JbXShzaXplX3QgaSkKIHsKLSAgICBpZiAo
IWZhY2UuZmFtaWxpZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChpIDwg
ZmFjZUNvdW50KCkpOworICAgIHJldHVybiBtX2ZhY2VzW2ldOworfQogCi0gICAgSGFzaFNldDxT
dHJpbmc+IGZhY2VGYW1pbGllcyA9IGV4dHJhY3RGYW1pbGllcygqZmFjZS5mYW1pbGllcygpKTsK
LSAgICBIYXNoU2V0PFN0cmluZz4gcmVxdWVzdEZhbWlsaWVzID0gZXh0cmFjdEZhbWlsaWVzKHJl
cXVlc3QpOwotICAgIGZvciAoYXV0byYgZmFtaWx5MSA6IGZhY2VGYW1pbGllcykgewotICAgICAg
ICBpZiAocmVxdWVzdEZhbWlsaWVzLmNvbnRhaW5zKGZhbWlseTEpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKK3N0YXRpYyBPcHRpb25hbDxGb250
VHJhaXRzTWFzaz4gY29tcHV0ZUZvbnRUcmFpdHNNYXNrKE11dGFibGVTdHlsZVByb3BlcnRpZXMm
IHN0eWxlKQoreworICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3R5bGVWYWx1ZSA9IHN0eWxlLmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpLmdldCgpOworICAgIGlmICghc3R5
bGVWYWx1ZSkKKyAgICAgICAgc3R5bGVWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKS5wdHIoKTsKKworICAgIEZvbnRU
cmFpdHNNYXNrIHN0eWxlTWFzazsKKyAgICBpZiAoYXV0byBzdHlsZU1hc2tPcHRpb25hbCA9IENT
U0ZvbnRGYWNlOjpjYWxjdWxhdGVTdHlsZSgqc3R5bGVWYWx1ZSkpCisgICAgICAgIHN0eWxlTWFz
ayA9IHN0eWxlTWFza09wdGlvbmFsLnZhbHVlKCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
TnVsbG9wdDsKKworICAgIFJlZlB0cjxDU1NWYWx1ZT4gd2VpZ2h0VmFsdWUgPSBzdHlsZS5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCk7CisgICAgaWYgKCF3
ZWlnaHRWYWx1ZSkKKyAgICAgICAgd2VpZ2h0VmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCkucHRyKCk7CisKKyAgICBG
b250VHJhaXRzTWFzayB3ZWlnaHRNYXNrOworICAgIGlmIChhdXRvIHdlaWdodE1hc2tPcHRpb25h
bCA9IENTU0ZvbnRGYWNlOjpjYWxjdWxhdGVXZWlnaHQoKndlaWdodFZhbHVlKSkKKyAgICAgICAg
d2VpZ2h0TWFzayA9IHdlaWdodE1hc2tPcHRpb25hbC52YWx1ZSgpOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIE51bGxvcHQ7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01h
c2s+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdHlsZU1hc2spIHwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHdlaWdodE1hc2spKTsKIH0KIAogVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NT
Rm9udEZhY2U+PiBDU1NGb250RmFjZVNldDo6bWF0Y2hpbmdGYWNlcyhjb25zdCBTdHJpbmcmIGZv
bnQsIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTMyLDE0ICsyODMsMTUg
QEAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9udEZhY2U+PiBDU1NGb250RmFj
ZVNldDo6bWF0Y2hpbmdGYWNlcyhjb25zdAogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIGJvb2wgZGVzaXJlZFN0eWxlSXNOb3JtYWwg
PSB0cnVlOwotICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGRlc2lyZWRTdHlsZSA9IHN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxlKSkgewotICAgICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZGVzaXJlZFN0eWxlKSkgewotICAgICAgICAgICAgZWMg
PSBTWU5UQVhfRVJSOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
ICAgICBkZXNpcmVkU3R5bGVJc05vcm1hbCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
ZGVzaXJlZFN0eWxlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWw7CisKKyAgICBGb250
VHJhaXRzTWFzayBmb250VHJhaXRzTWFzazsKKyAgICBpZiAoYXV0byBtYXNrT3B0aW9uYWwgPSBj
b21wdXRlRm9udFRyYWl0c01hc2soc3R5bGUuZ2V0KCkpKQorICAgICAgICBmb250VHJhaXRzTWFz
ayA9IG1hc2tPcHRpb25hbC52YWx1ZSgpOworICAgIGVsc2UgeworICAgICAgICBlYyA9IFNZTlRB
WF9FUlI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorCiAgICAgUmVmUHRyPENTU1Zh
bHVlPiBmYW1pbHkgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRG
YW1pbHkpOwogICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PihmYW1pbHkuZ2V0KCkpKSB7CiAgICAg
ICAgIGVjID0gU1lOVEFYX0VSUjsKQEAgLTE0NywyMyArMjk5LDIzIEBAIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRGYWNlPj4gQ1NTRm9udEZhY2VTZXQ6Om1hdGNoaW5nRmFj
ZXMoY29uc3QKICAgICB9CiAgICAgQ1NTVmFsdWVMaXN0JiBmYW1pbHlMaXN0ID0gZG93bmNhc3Q8
Q1NTVmFsdWVMaXN0PigqZmFtaWx5KTsKIAotICAgIC8vIE1hdGNoIENTU0ZvbnRTZWxlY3Rvcjo6
Z2V0Rm9udEZhY2UoKQotICAgIGZvciAoYXV0byYgZmFjZSA6IG1fZmFjZXMpIHsKLSAgICAgICAg
aWYgKCFmYW1pbGllc0ludGVyc2VjdChmYWNlLCBmYW1pbHlMaXN0KSB8fCAoZGVzaXJlZFN0eWxl
SXNOb3JtYWwgJiYgIShmYWNlLT50cmFpdHNNYXNrKCkgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkp
CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IHVuaXF1ZUZhbWlsaWVzOworICAgIGZvciAoYXV0
byYgZmFtaWx5IDogZmFtaWx5TGlzdCkgeworICAgICAgICBjb25zdCBDU1NQcmltaXRpdmVWYWx1
ZSYgcHJpbWl0aXZlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGZhbWlseS5nZXQoKSk7
CisgICAgICAgIGlmICghcHJpbWl0aXZlLmlzRm9udEZhbWlseSgpKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZmFjZS5nZXQoKSk7CisgICAgICAgIHVuaXF1
ZUZhbWlsaWVzLmFkZChwcmltaXRpdmUuZm9udEZhbWlseSgpLmZhbWlseU5hbWUpOwogICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQogCi12b2lkIENTU0ZvbnRGYWNlU2V0Ojpsb2FkKGNvbnN0
IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBhdXRvIG1hdGNoaW5nRmFjZXMgPSB0aGlzLT5tYXRjaGluZ0ZhY2VzKGZvbnQsIHRleHQs
IGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKKyAgICBmb3IgKGF1dG8mIGZhbWls
eSA6IHVuaXF1ZUZhbWlsaWVzKSB7CisgICAgICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBmYWNl
cyA9IGdldEZvbnRGYWNlKGZvbnRUcmFpdHNNYXNrLCBmYW1pbHkpOworICAgICAgICBpZiAoIWZh
Y2VzKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAoYXV0byYgY29uc3RpdHVl
bnRGYWNlIDogZmFjZXMtPmNvbnN0aXR1ZW50RmFjZXMoKSkKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoY29uc3RpdHVlbnRGYWNlLmdldCgpKTsKKyAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGZh
Y2UgOiBtYXRjaGluZ0ZhY2VzKQotICAgICAgICBmYWNlLmdldCgpLmxvYWQoKTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBib29sIENTU0ZvbnRGYWNlU2V0OjpjaGVjayhjb25zdCBTdHJpbmcm
IGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNzksNyAr
MzMxLDExOSBAQCBib29sIENTU0ZvbnRGYWNlU2V0OjpjaGVjayhjb25zdCBTdHJpbmcmIGZvbnQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZQogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIENTU0ZvbnRGYWNlU2V0OjpzdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2UmIGZhY2UsIENT
U0ZvbnRGYWNlOjpTdGF0dXMgb2xkU3RhdGUsIENTU0ZvbnRGYWNlOjpTdGF0dXMgbmV3U3RhdGUp
CitjbGFzcyBGb250RmFjZUNvbXBhcmF0b3IgeworcHVibGljOgorICAgIEZvbnRGYWNlQ29tcGFy
YXRvcihGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24pCisgICAg
ICAgIDogbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24oZGVzaXJlZFRyYWl0c01hc2tG
b3JDb21wYXJpc29uKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04obV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFzayk7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IENTU0ZvbnRGYWNlJiBmaXJzdCwg
Y29uc3QgQ1NTRm9udEZhY2UmIHNlY29uZCkKKyAgICB7CisgICAgICAgIEZvbnRUcmFpdHNNYXNr
IGZpcnN0VHJhaXRzTWFzayA9IGZpcnN0LnRyYWl0c01hc2soKTsKKyAgICAgICAgRm9udFRyYWl0
c01hc2sgc2Vjb25kVHJhaXRzTWFzayA9IHNlY29uZC50cmFpdHNNYXNrKCk7CisKKyAgICAgICAg
Ym9vbCBmaXJzdEhhc0Rlc2lyZWRTdHlsZSA9IGZpcnN0VHJhaXRzTWFzayAmIG1fZGVzaXJlZFRy
YWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlTWFzazsKKyAgICAgICAgYm9vbCBzZWNv
bmRIYXNEZXNpcmVkU3R5bGUgPSBzZWNvbmRUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFz
a0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVNYXNrOworCisgICAgICAgIGlmIChmaXJzdEhhc0Rl
c2lyZWRTdHlsZSAhPSBzZWNvbmRIYXNEZXNpcmVkU3R5bGUpCisgICAgICAgICAgICByZXR1cm4g
Zmlyc3RIYXNEZXNpcmVkU3R5bGU7CisKKyAgICAgICAgaWYgKChtX2Rlc2lyZWRUcmFpdHNNYXNr
Rm9yQ29tcGFyaXNvbiAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICFmaXJzdC5pc0xvY2FsRmFs
bGJhY2soKSAmJiAhc2Vjb25kLmlzTG9jYWxGYWxsYmFjaygpKSB7CisgICAgICAgICAgICAvLyBQ
cmVmZXIgYSBmb250IHRoYXQgaGFzIGluZGljYXRlZCB0aGF0IGl0IGNhbiBvbmx5IHN1cHBvcnQg
aXRhbGljcyB0byBhIGZvbnQgdGhhdCBjbGFpbXMgdG8gc3VwcG9ydAorICAgICAgICAgICAgLy8g
YWxsIHN0eWxlcy4gVGhlIHNwZWNpYWxpemVkIGZvbnQgaXMgbW9yZSBsaWtlbHkgdG8gYmUgdGhl
IG9uZSB0aGUgYXV0aG9yIHdhbnRzIHVzZWQuCisgICAgICAgICAgICBib29sIGZpcnN0UmVxdWly
ZXNJdGFsaWNzID0gKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01hc2spICYmICEo
Zmlyc3RUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzayk7CisgICAgICAgICAgICBib29s
IHNlY29uZFJlcXVpcmVzSXRhbGljcyA9IChzZWNvbmRUcmFpdHNNYXNrICYgRm9udFN0eWxlSXRh
bGljTWFzaykgJiYgIShzZWNvbmRUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzayk7Cisg
ICAgICAgICAgICBpZiAoZmlyc3RSZXF1aXJlc0l0YWxpY3MgIT0gc2Vjb25kUmVxdWlyZXNJdGFs
aWNzKQorICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFJlcXVpcmVzSXRhbGljczsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzZWNvbmRUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFz
a0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFzaykKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKGZpcnN0VHJhaXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JD
b21wYXJpc29uICYgRm9udFdlaWdodE1hc2spCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELWNzczMtZm9udHMtMjAxMTEw
MDQvI2ZvbnQtbWF0Y2hpbmctYWxnb3JpdGhtIHNheXMgOgorICAgICAgICAvLyAgIC0gSWYgdGhl
IGRlc2lyZWQgd2VpZ2h0IGlzIGxlc3MgdGhhbiA0MDAsIHdlaWdodHMgYmVsb3cgdGhlIGRlc2ly
ZWQgd2VpZ2h0IGFyZSBjaGVja2VkIGluIGRlc2NlbmRpbmcgb3JkZXIgZm9sbG93ZWQgYnkgd2Vp
Z2h0cyBhYm92ZSB0aGUgZGVzaXJlZCB3ZWlnaHQgaW4gYXNjZW5kaW5nIG9yZGVyIHVudGlsIGEg
bWF0Y2ggaXMgZm91bmQuCisgICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMg
Z3JlYXRlciB0aGFuIDUwMCwgd2VpZ2h0cyBhYm92ZSB0aGUgZGVzaXJlZCB3ZWlnaHQgYXJlIGNo
ZWNrZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGZvbGxvd2VkIGJ5IHdlaWdodHMgYmVsb3cgdGhlIGRl
c2lyZWQgd2VpZ2h0IGluIGRlc2NlbmRpbmcgb3JkZXIgdW50aWwgYSBtYXRjaCBpcyBmb3VuZC4K
KyAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyA0MDAsIDUwMCBpcyBjaGVj
a2VkIGZpcnN0IGFuZCB0aGVuIHRoZSBydWxlIGZvciBkZXNpcmVkIHdlaWdodHMgbGVzcyB0aGFu
IDQwMCBpcyB1c2VkLgorICAgICAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIDUw
MCwgNDAwIGlzIGNoZWNrZWQgZmlyc3QgYW5kIHRoZW4gdGhlIHJ1bGUgZm9yIGRlc2lyZWQgd2Vp
Z2h0cyBsZXNzIHRoYW4gNDAwIGlzIHVzZWQuCisKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGZhbGxiYWNrUnVsZVNldHMgPSA5OworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
cnVsZXNQZXJTZXQgPSA4OworICAgICAgICBzdGF0aWMgY29uc3QgRm9udFRyYWl0c01hc2sgd2Vp
Z2h0RmFsbGJhY2tSdWxlU2V0c1tmYWxsYmFja1J1bGVTZXRzXVtydWxlc1BlclNldF0gPSB7Cisg
ICAgICAgICAgICB7IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdl
aWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdl
aWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAorICAg
ICAgICAgICAgeyBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWln
aHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWln
aHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKKyAgICAg
ICAgICAgIHsgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0
NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0
NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCisgICAgICAg
ICAgICB7IEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIw
ME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcw
ME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAorICAgICAgICAg
ICAgeyBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBN
YXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBN
YXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKKyAgICAgICAgICAg
IHsgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFz
aywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFz
aywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0sCisgICAgICAgICAgICB7
IEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ss
IEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ss
IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9LAorICAgICAgICAgICAgeyBG
b250V2VpZ2h0OTAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBG
b250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBG
b250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9u
dFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9u
dFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9u
dFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0KKyAgICAgICAgfTsKKworICAgICAg
ICB1bnNpZ25lZCBydWxlU2V0SW5kZXggPSAwOworICAgICAgICBmb3IgKDsgIShtX2Rlc2lyZWRU
cmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmICgxIDw8IChGb250V2VpZ2h0MTAwQml0ICsgcnVsZVNl
dEluZGV4KSkpOyBydWxlU2V0SW5kZXgrKykgeyB9CisKKyAgICAgICAgY29uc3QgRm9udFRyYWl0
c01hc2sqIHdlaWdodEZhbGxiYWNrUnVsZSA9IHdlaWdodEZhbGxiYWNrUnVsZVNldHNbcnVsZVNl
dEluZGV4XTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzUGVyU2V0OyAr
K2kpIHsKKyAgICAgICAgICAgIGlmIChzZWNvbmRUcmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tS
dWxlW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChm
aXJzdFRyYWl0c01hc2sgJiB3ZWlnaHRGYWxsYmFja1J1bGVbaV0pCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
Citwcml2YXRlOgorICAgIEZvbnRUcmFpdHNNYXNrIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21w
YXJpc29uOworfTsKKworQ1NTU2VnbWVudGVkRm9udEZhY2UqIENTU0ZvbnRGYWNlU2V0OjpnZXRG
b250RmFjZShGb250VHJhaXRzTWFzayB0cmFpdHNNYXNrLCBjb25zdCBBdG9taWNTdHJpbmcmIGZh
bWlseSkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9mYWNlc0xvb2t1cFRhYmxlLmZpbmQoZmFt
aWx5KTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9mYWNlc0xvb2t1cFRhYmxlLmVuZCgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvJiBmYW1pbHlGb250RmFjZXMgPSBpdGVyYXRv
ci0+dmFsdWU7CisKKyAgICBhdXRvJiBzZWdtZW50ZWRGb250RmFjZUNhY2hlID0gbV9jYWNoZS5h
ZGQoZmFtaWx5LCBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VnbWVudGVk
Rm9udEZhY2U+PigpKS5pdGVyYXRvci0+dmFsdWU7CisKKyAgICBhdXRvJiBmYWNlID0gc2VnbWVu
dGVkRm9udEZhY2VDYWNoZS5hZGQodHJhaXRzTWFzaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVl
OworICAgIGlmIChmYWNlKQorICAgICAgICByZXR1cm4gZmFjZS5nZXQoKTsKKworICAgIGZhY2Ug
PSBzdGQ6Om1ha2VfdW5pcXVlPENTU1NlZ21lbnRlZEZvbnRGYWNlPigpOworCisgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9udEZhY2U+LCAzMj4gY2FuZGlkYXRlRm9udEZh
Y2VzOworICAgIGZvciAoaW50IGkgPSBmYW1pbHlGb250RmFjZXMuc2l6ZSgpIC0gMTsgaSA+PSAw
OyAtLWkpIHsKKyAgICAgICAgQ1NTRm9udEZhY2UmIGNhbmRpZGF0ZSA9IGZhbWlseUZvbnRGYWNl
c1tpXTsKKyAgICAgICAgdW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRpZGF0ZS50
cmFpdHNNYXNrKCk7CisgICAgICAgIGlmICgodHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1h
c2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhbmRpZGF0ZUZvbnRGYWNlcy5hcHBlbmQoY2Fu
ZGlkYXRlKTsKKyAgICB9CisKKyAgICBhdXRvIGxvY2FsSXRlcmF0b3IgPSBtX2xvY2FsbHlJbnN0
YWxsZWRGYWNlc0xvb2t1cFRhYmxlLmZpbmQoZmFtaWx5KTsKKyAgICBpZiAobG9jYWxJdGVyYXRv
ciAhPSBtX2xvY2FsbHlJbnN0YWxsZWRGYWNlc0xvb2t1cFRhYmxlLmVuZCgpKSB7CisgICAgICAg
IGZvciAoYXV0byYgY2FuZGlkYXRlIDogbG9jYWxJdGVyYXRvci0+dmFsdWUpIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRyYWl0c01hc2sgPSBjYW5kaWRhdGUtPnRyYWl0c01hc2so
KTsKKyAgICAgICAgICAgIGlmICgodHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spICYm
ICEoY2FuZGlkYXRlVHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY2FuZGlkYXRlRm9udEZhY2VzLmFwcGVuZChj
YW5kaWRhdGUpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RkOjpzdGFibGVfc29ydChjYW5k
aWRhdGVGb250RmFjZXMuYmVnaW4oKSwgY2FuZGlkYXRlRm9udEZhY2VzLmVuZCgpLCBGb250RmFj
ZUNvbXBhcmF0b3IodHJhaXRzTWFzaykpOworICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogY2Fu
ZGlkYXRlRm9udEZhY2VzKQorICAgICAgICBmYWNlLT5hcHBlbmRGb250RmFjZShjYW5kaWRhdGUu
Z2V0KCkpOworCisgICAgcmV0dXJuIGZhY2UuZ2V0KCk7Cit9CisKK3ZvaWQgQ1NTRm9udEZhY2VT
ZXQ6OmZvbnRTdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2UmIGZhY2UsIENTU0ZvbnRGYWNlOjpTdGF0
dXMgb2xkU3RhdGUsIENTU0ZvbnRGYWNlOjpTdGF0dXMgbmV3U3RhdGUpCiB7CiAgICAgQVNTRVJU
KGhhc0ZhY2UoZmFjZSkpOwogICAgIGlmIChvbGRTdGF0ZSA9PSBDU1NGb250RmFjZTo6U3RhdHVz
OjpQZW5kaW5nKSB7CkBAIC0xODgsOSArNDUyLDIzIEBAIHZvaWQgQ1NTRm9udEZhY2VTZXQ6OnN0
YXRlQ2hhbmdlZChDU1NGb250RmFjZSYgZmFjZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBvbGRTdGF0
CiAgICAgfQogICAgIGlmIChuZXdTdGF0ZSA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpTdWNjZXNz
IHx8IG5ld1N0YXRlID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OkZhaWx1cmUpIHsKICAgICAgICAg
QVNTRVJUKG9sZFN0YXRlID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OkxvYWRpbmcgfHwgb2xkU3Rh
dGUgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6VGltZWRPdXQpOwotICAgICAgICBtX2NsaWVudC5m
YWNlRmluaXNoZWQoZmFjZSwgbmV3U3RhdGUpOworICAgICAgICBmb3IgKGF1dG8qIGNsaWVudCA6
IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+ZmFjZUZpbmlzaGVkKGZhY2UsIG5ld1N0
YXRlKTsKICAgICAgICAgZGVjcmVtZW50QWN0aXZlQ291bnQoKTsKICAgICB9CiB9CiAKK3ZvaWQg
Q1NTRm9udEZhY2VTZXQ6OmZvbnRQcm9wZXJ0eUNoYW5nZWQoQ1NTRm9udEZhY2UmIGZhY2UsIENT
U1ZhbHVlTGlzdCogb2xkRmFtaWxpZXMpCit7CisgICAgbV9jYWNoZS5jbGVhcigpOworCisgICAg
aWYgKG9sZEZhbWlsaWVzKSB7CisgICAgICAgIHJlbW92ZUZyb21GYWNlc0xvb2t1cFRhYmxlKGZh
Y2UsICpvbGRGYW1pbGllcyk7CisgICAgICAgIGFkZFRvRmFjZXNMb29rdXBUYWJsZShmYWNlKTsK
KyAgICB9CisKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xp
ZW50LT5mb250TW9kaWZpZWQoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQu
aAppbmRleCA2Njk0N2Q3ODFiOGM4MWQ4NDIxZmUwOTJhMWI2YWNiZWE0MjM0YjlmLi43ZGZlZGYy
YjNhMTE3MGNkYWE3MTBlNjQ1YzM3N2Q3Zjg4ZmY3ZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2VTZXQuaApAQCAtMjcsMzQgKzI3LDQ2IEBACiAjZGVmaW5lIENTU0ZvbnRGYWNlU2V0X2gK
IAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwogY2xhc3Mg
Rm9udEZhY2VTZXQ7CiAKIGNsYXNzIENTU0ZvbnRGYWNlU2V0Q2xpZW50IHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5DU1NGb250RmFjZVNldENsaWVudCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBm
YWNlRmluaXNoZWQoQ1NTRm9udEZhY2UmLCBDU1NGb250RmFjZTo6U3RhdHVzKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHN0YXJ0ZWRMb2FkaW5nKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb21w
bGV0ZWRMb2FkaW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmYWNlRmluaXNoZWQoQ1NTRm9u
dEZhY2UmLCBDU1NGb250RmFjZTo6U3RhdHVzKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGZvbnRN
b2RpZmllZCgpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZExvYWRpbmcoKSB7IH07Cisg
ICAgdmlydHVhbCB2b2lkIGNvbXBsZXRlZExvYWRpbmcoKSB7IH07CiB9OwogCi1jbGFzcyBDU1NG
b250RmFjZVNldCBmaW5hbCA6IHB1YmxpYyBDU1NGb250RmFjZTo6Q2xpZW50IHsKK2NsYXNzIENT
U0ZvbnRGYWNlU2V0IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTRm9udEZhY2VTZXQ+LCBw
dWJsaWMgQ1NTRm9udEZhY2U6OkNsaWVudCB7CiBwdWJsaWM6Ci0gICAgQ1NTRm9udEZhY2VTZXQo
Q1NTRm9udEZhY2VTZXRDbGllbnQmKTsKKyAgICBzdGF0aWMgUmVmPENTU0ZvbnRGYWNlU2V0PiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRm9udEZhY2VT
ZXQoKSk7CisgICAgfQogICAgIH5DU1NGb250RmFjZVNldCgpOwogCisgICAgdm9pZCBhZGRDbGll
bnQoQ1NTRm9udEZhY2VTZXRDbGllbnQmKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChDU1NGb250
RmFjZVNldENsaWVudCYpOworCiAgICAgYm9vbCBoYXNGYWNlKGNvbnN0IENTU0ZvbnRGYWNlJikg
Y29uc3Q7CiAgICAgc2l6ZV90IGZhY2VDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFjZXMuc2l6
ZSgpOyB9CiAgICAgdm9pZCBhZGQoQ1NTRm9udEZhY2UmKTsKICAgICB2b2lkIHJlbW92ZShjb25z
dCBDU1NGb250RmFjZSYpOwotICAgIGNvbnN0IENTU0ZvbnRGYWNlJiBvcGVyYXRvcltdKHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiBtX2ZhY2VzW2ldOyB9CisgICAgdm9pZCBjbGVhcigpOworICAg
IENTU0ZvbnRGYWNlJiBvcGVyYXRvcltdKHNpemVfdCBpKTsKIAotICAgIHZvaWQgbG9hZChjb25z
dCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IGJvb2wgY2hlY2soY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2Vw
dGlvbkNvZGUmKTsKIAorICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBnZXRGb250RmFjZShGb250
VHJhaXRzTWFzaywgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOworCiAgICAgZW51bSBjbGFz
cyBTdGF0dXMgewogICAgICAgICBMb2FkaW5nLAogICAgICAgICBMb2FkZWQKQEAgLTY0LDE0ICs3
NiwyOSBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9u
dEZhY2U+PiBtYXRjaGluZ0ZhY2VzKGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0
ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAKIHByaXZhdGU6CisgICAgQ1NTRm9udEZhY2VTZXQoKTsK
KworICAgIHZvaWQgcmVtb3ZlRnJvbUZhY2VzTG9va3VwVGFibGUoY29uc3QgQ1NTRm9udEZhY2Um
LCBjb25zdCBDU1NWYWx1ZUxpc3QmIGZhbWlsaWVzVG9TZWFyY2hGb3IpOworICAgIHZvaWQgYWRk
VG9GYWNlc0xvb2t1cFRhYmxlKENTU0ZvbnRGYWNlJik7CisKICAgICB2b2lkIGluY3JlbWVudEFj
dGl2ZUNvdW50KCk7CiAgICAgdm9pZCBkZWNyZW1lbnRBY3RpdmVDb3VudCgpOwogCi0gICAgdmly
dHVhbCB2b2lkIHN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMg
b2xkU3RhdGUsIENTU0ZvbnRGYWNlOjpTdGF0dXMgbmV3U3RhdGUpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBmb250U3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiwgQ1NTRm9udEZhY2U6OlN0
YXR1cyBvbGRTdGF0ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0ZSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGZvbnRQcm9wZXJ0eUNoYW5nZWQoQ1NTRm9udEZhY2UmLCBDU1NWYWx1
ZUxpc3QqIG9sZEZhbWlsaWVzID0gbnVsbHB0cikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlZ2lz
dGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoY29uc3QgU3RyaW5nJik7CisKKyAgICBzdGF0aWMg
U3RyaW5nIGZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7
CiAKLSAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4gbV9mYWNlczsKKyAgICAvLyBtX2ZhY2Vz
IHNob3VsZCBob2xkIGFsbCB0aGUgc2FtZSBmb250cyBhcyB0aGUgb25lcyBpbnNpZGUgaW5zaWRl
IG1fZmFjZXNMb29rdXBUYWJsZS4KKyAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4gbV9mYWNl
czsgLy8gV2Ugc2hvdWxkIGludmVzdGlnYXRlIG1vdmluZyBtX2ZhY2VzIHRvIEZvbnRGYWNlU2V0
IGFuZCBtYWtpbmcgaXQgcmVmZXJlbmNlIEZvbnRGYWNlcy4gVGhpcyBtYXkgY2xlYW4gdXAgdGhl
IGZvbnQgbG9hZGluZyBkZXNpZ24uCisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWY8Q1NT
Rm9udEZhY2U+PiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX2ZhY2VzTG9va3VwVGFibGU7
CisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PiwgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiBtX2xvY2FsbHlJbnN0YWxsZWRGYWNlc0xvb2t1cFRhYmxlOworICAg
IEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2Vn
bWVudGVkRm9udEZhY2U+PiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX2NhY2hlOworICAg
IHNpemVfdCBtX2ZhY2VzUGFydGl0aW9uSW5kZXggeyAwIH07IC8vIEFsbCBlbnRyaWVzIGluIG1f
ZmFjZXMgYmVmb3JlIHRoaXMgaW5kZXggYXJlIENTUy1jb25uZWN0ZWQuCiAgICAgU3RhdHVzIG1f
c3RhdHVzIHsgU3RhdHVzOjpMb2FkZWQgfTsKLSAgICBDU1NGb250RmFjZVNldENsaWVudCYgbV9j
bGllbnQ7CisgICAgSGFzaFNldDxDU1NGb250RmFjZVNldENsaWVudCo+IG1fY2xpZW50czsKICAg
ICB1bnNpZ25lZCBtX2FjdGl2ZUNvdW50IHsgMCB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2VTb3VyY2UuaAppbmRleCAxZTI5YjU3ZmZkZmUzODA3NDZlNjcyMzIzMGQ1NTM0OWE1
OWZiOTlmLi5mNjIwMjVkNjkwMjc4MmJkMzU0Mjk0ZmZhMjBlODRjZjE2NWMyZDI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaApAQCAtNDUsNiArNDUsOCBAQCBjbGFzcyBT
aGFyZWRCdWZmZXI7CiBjbGFzcyBDU1NGb250RmFjZVNvdXJjZSBmaW5hbCA6IHB1YmxpYyBDYWNo
ZWRGb250Q2xpZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAg
ICBDU1NGb250RmFjZVNvdXJjZShDU1NGb250RmFjZSYgb3duZXIsIGNvbnN0IFN0cmluZyYgZmFt
aWx5TmFtZU9yVVJJLCBDYWNoZWRGb250KiA9IG51bGxwdHIsIFNWR0ZvbnRGYWNlRWxlbWVudCog
PSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIH5DU1NGb250RmFjZVNvdXJjZSgpOwogCiAgICAgLy8g
ICAgICAgICAgICAgICAgICAgICAgPT4gU3VjY2VzcwogICAgIC8vICAgICAgICAgICAgICAgICAg
ICAvLwpAQCAtNTcsMTAgKzU5LDYgQEAgcHVibGljOgogICAgICAgICBTdWNjZXNzLAogICAgICAg
ICBGYWlsdXJlCiAgICAgfTsKLQotICAgIENTU0ZvbnRGYWNlU291cmNlKENTU0ZvbnRGYWNlJiBv
d25lciwgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lT3JVUkksIENhY2hlZEZvbnQqID0gbnVsbHB0
ciwgU1ZHRm9udEZhY2VFbGVtZW50KiA9IG51bGxwdHIpOwotICAgIHZpcnR1YWwgfkNTU0ZvbnRG
YWNlU291cmNlKCk7Ci0KICAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
dXM7IH0KIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZU9yVVJJKCkgY29uc3Qg
eyByZXR1cm4gbV9mYW1pbHlOYW1lT3JVUkk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxl
Y3Rvci5jcHAKaW5kZXggMmM4YzJjNmQzNjQxYTE4MjVkZGVhZmFmOGZkYWM1MWVkZDUxMzNmZC4u
OGE3NGM5OGFkMDQ3MWZkYmI0YTIwNGQ2ZDY5MmM4NzU5NWE5ZWFhOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJDU1NG
b250RmFjZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgogI2luY2x1ZGUgIkNTU0Zv
bnRGYWNlU291cmNlLmgiCi0jaW5jbHVkZSAiQ1NTRm9udEZhY2VTcmNWYWx1ZS5oIgogI2luY2x1
ZGUgIkNTU0ZvbnRGYW1pbHkuaCIKICNpbmNsdWRlICJDU1NGb250RmVhdHVyZVZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKQEAgLTQ2LDYgKzQ1LDcgQEAKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIK
KyNpbmNsdWRlICJGb250RmFjZVNldC5oIgogI2luY2x1ZGUgIkZvbnRWYXJpYW50QnVpbGRlci5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTY1LDYg
KzY1LDcgQEAgc3RhdGljIHVuc2lnbmVkIGZvbnRTZWxlY3RvcklkOwogCiBDU1NGb250U2VsZWN0
b3I6OkNTU0ZvbnRTZWxlY3RvcihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgOiBtX2RvY3VtZW50
KCZkb2N1bWVudCkKKyAgICAsIG1fY3NzRm9udEZhY2VTZXQoQ1NTRm9udEZhY2VTZXQ6OmNyZWF0
ZSgpKQogICAgICwgbV9iZWdpbkxvYWRpbmdUaW1lcigqdGhpcywgJkNTU0ZvbnRTZWxlY3Rvcjo6
YmVnaW5Mb2FkVGltZXJGaXJlZCkKICAgICAsIG1fdW5pcXVlSWQoKytmb250U2VsZWN0b3JJZCkK
ICAgICAsIG1fdmVyc2lvbigwKQpAQCAtNzUsOTkgKzc2LDMyIEBAIENTU0ZvbnRTZWxlY3Rvcjo6
Q1NTRm9udFNlbGVjdG9yKERvY3VtZW50JiBkb2N1bWVudCkKIAogICAgIEFTU0VSVChtX2RvY3Vt
ZW50KTsKICAgICBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmFkZENsaWVudCgqdGhpcyk7CisgICAg
bV9jc3NGb250RmFjZVNldC0+YWRkQ2xpZW50KCp0aGlzKTsKIH0KIAogQ1NTRm9udFNlbGVjdG9y
Ojp+Q1NTRm9udFNlbGVjdG9yKCkKIHsKICAgICBjbGVhckRvY3VtZW50KCk7CisgICAgbV9jc3NG
b250RmFjZVNldC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKICAgICBGb250Q2FjaGU6OnNpbmdsZXRv
bigpLnJlbW92ZUNsaWVudCgqdGhpcyk7CiB9CiAKLWJvb2wgQ1NTRm9udFNlbGVjdG9yOjppc0Vt
cHR5KCkgY29uc3QKK0ZvbnRGYWNlU2V0JiBDU1NGb250U2VsZWN0b3I6OmZvbnRGYWNlU2V0KCkK
IHsKLSAgICByZXR1cm4gbV9mb250cy5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgQ1NTRm9udFNlbGVj
dG9yOjphcHBlbmRTb3VyY2VzKENTU0ZvbnRGYWNlJiBmb250RmFjZSwgQ1NTVmFsdWVMaXN0JiBz
cmNMaXN0LCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNl
ckFnZW50U2hhZG93VHJlZSkKLXsKLSAgICBmb3IgKGF1dG8mIHNyYyA6IHNyY0xpc3QpIHsKLSAg
ICAgICAgLy8gQW4gaXRlbSBpbiB0aGUgbGlzdCBlaXRoZXIgc3BlY2lmaWVzIGEgc3RyaW5nIChs
b2NhbCBmb250IG5hbWUpIG9yIGEgVVJMIChyZW1vdGUgZm9udCB0byBkb3dubG9hZCkuCi0gICAg
ICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUmIGl0ZW0gPSBkb3duY2FzdDxDU1NGb250RmFjZVNyY1Zh
bHVlPihzcmMuZ2V0KCkpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9udEZhY2VTb3Vy
Y2U+IHNvdXJjZTsKLSAgICAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQg
PSBudWxscHRyOwotICAgICAgICBib29sIGZvdW5kU1ZHRm9udCA9IGZhbHNlOwotCi0jaWYgRU5B
QkxFKFNWR19GT05UUykKLSAgICAgICAgZm91bmRTVkdGb250ID0gaXRlbS5pc1NWR0ZvbnRGYWNl
U3JjKCkgfHwgaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKTsKLSAgICAgICAgZm9udEZhY2VFbGVt
ZW50ID0gaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKTsKLSNlbmRpZgotICAgICAgICBpZiAoIWl0
ZW0uaXNMb2NhbCgpKSB7Ci0gICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVu
dCA/IGRvY3VtZW50LT5zZXR0aW5ncygpIDogbnVsbHB0cjsKLSAgICAgICAgICAgIGJvb2wgYWxs
b3dEb3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8fCAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmRv
d25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgpKTsKLSAgICAgICAgICAgIGlmIChhbGxvd0Rv
d25sb2FkaW5nICYmIGl0ZW0uaXNTdXBwb3J0ZWRGb3JtYXQoKSAmJiBkb2N1bWVudCkgewotICAg
ICAgICAgICAgICAgIGlmIChDYWNoZWRGb250KiBjYWNoZWRGb250ID0gaXRlbS5jYWNoZWRGb250
KGRvY3VtZW50LCBmb3VuZFNWR0ZvbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNo
YWRvd1RyZWUpKQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVl
PENTU0ZvbnRGYWNlU291cmNlPihmb250RmFjZSwgaXRlbS5yZXNvdXJjZSgpLCBjYWNoZWRGb250
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzb3VyY2UgPSBz
dGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmb250RmFjZSwgaXRlbS5yZXNvdXJj
ZSgpLCBudWxscHRyLCBmb250RmFjZUVsZW1lbnQpOwotCi0gICAgICAgIGlmIChzb3VyY2UpCi0g
ICAgICAgICAgICBmb250RmFjZS5hZG9wdFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkpOworICAgIGlm
ICghbV9mb250RmFjZVNldCkgeworICAgICAgICBBU1NFUlQobV9kb2N1bWVudCk7CisgICAgICAg
IG1fZm9udEZhY2VTZXQgPSBGb250RmFjZVNldDo6Y3JlYXRlKCptX2RvY3VtZW50LCBtX2Nzc0Zv
bnRGYWNlU2V0LmdldCgpKTsKICAgICB9Ci0gICAgZm9udEZhY2Uuc291cmNlc1BvcHVsYXRlZCgp
OwotfQogCi1TdHJpbmcgQ1NTRm9udFNlbGVjdG9yOjpmYW1pbHlOYW1lRnJvbVByaW1pdGl2ZShj
b25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzRm9udEZh
bWlseSgpKQotICAgICAgICByZXR1cm4gdmFsdWUuZm9udEZhbWlseSgpLmZhbWlseU5hbWU7Ci0g
ICAgaWYgKCF2YWx1ZS5pc1ZhbHVlSUQoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIC8v
IFdlIG5lZWQgdG8gdXNlIHRoZSByYXcgdGV4dCBmb3IgYWxsIHRoZSBnZW5lcmljIGZhbWlseSB0
eXBlcywgc2luY2UgQGZvbnQtZmFjZSBpcyBhIHdheSBvZiBhY3R1YWxseQotICAgIC8vIGRlZmlu
aW5nIHdoYXQgZm9udCB0byB1c2UgZm9yIHRob3NlIHR5cGVzLgotICAgIHN3aXRjaCAodmFsdWUu
Z2V0VmFsdWVJRCgpKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZVNlcmlmOgotICAgICAgICByZXR1cm4g
c2VyaWZGYW1pbHk7Ci0gICAgY2FzZSBDU1NWYWx1ZVNhbnNTZXJpZjoKLSAgICAgICAgcmV0dXJu
IHNhbnNTZXJpZkZhbWlseTsKLSAgICBjYXNlIENTU1ZhbHVlQ3Vyc2l2ZToKLSAgICAgICAgcmV0
dXJuIGN1cnNpdmVGYW1pbHk7Ci0gICAgY2FzZSBDU1NWYWx1ZUZhbnRhc3k6Ci0gICAgICAgIHJl
dHVybiBmYW50YXN5RmFtaWx5OwotICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6Ci0gICAgICAg
IHJldHVybiBtb25vc3BhY2VGYW1pbHk7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3Jh
cGg6Ci0gICAgICAgIHJldHVybiBwaWN0b2dyYXBoRmFtaWx5OwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgfQorICAgIHJldHVybiAqbV9mb250RmFjZVNldDsKIH0KIAot
dm9pZCBDU1NGb250U2VsZWN0b3I6OnJlZ2lzdGVyTG9jYWxGb250RmFjZXNGb3JGYW1pbHkoY29u
c3QgU3RyaW5nJiBmYW1pbHlOYW1lKQorYm9vbCBDU1NGb250U2VsZWN0b3I6OmlzRW1wdHkoKSBj
b25zdAogewotICAgIEFTU0VSVCghbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmNvbnRhaW5z
KGZhbWlseU5hbWUpKTsKLQotICAgIFZlY3RvcjxGb250VHJhaXRzTWFzaz4gdHJhaXRzTWFza3Mg
PSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmdldFRyYWl0c0luRmFtaWx5KGZhbWlseU5hbWUpOwot
ICAgIGlmICh0cmFpdHNNYXNrcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZl
Y3RvcjxSZWY8Q1NTRm9udEZhY2U+PiBmYWNlcyA9IHsgfTsKLSAgICBmb3IgKGF1dG8gbWFzayA6
IHRyYWl0c01hc2tzKSB7Ci0gICAgICAgIFJlZjxDU1NGb250RmFjZT4gZmFjZSA9IENTU0ZvbnRG
YWNlOjpjcmVhdGUoKnRoaXMsIG51bGxwdHIsIHRydWUpOwotICAgICAgICAKLSAgICAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gZmFtaWx5TGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFT
ZXBhcmF0ZWQoKTsKLSAgICAgICAgZmFtaWx5TGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKGZhbWlseU5hbWUpKTsKLSAgICAgICAgZmFj
ZS0+c2V0RmFtaWxpZXMoKmZhbWlseUxpc3QpOwotICAgICAgICBmYWNlLT5zZXRUcmFpdHNNYXNr
KG1hc2spOwotICAgICAgICBmYWNlLT5hZG9wdFNvdXJjZShzdGQ6Om1ha2VfdW5pcXVlPENTU0Zv
bnRGYWNlU291cmNlPihmYWNlLmdldCgpLCBmYW1pbHlOYW1lKSk7Ci0gICAgICAgIEFTU0VSVCgh
ZmFjZS0+YWxsU291cmNlc0ZhaWxlZCgpKTsKLSAgICAgICAgZmFjZXMuYXBwZW5kKFdURk1vdmUo
ZmFjZSkpOwotICAgIH0KLSAgICBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMuYWRkKGZhbWls
eU5hbWUsIFdURk1vdmUoZmFjZXMpKTsKKyAgICByZXR1cm4gIW1fY3NzRm9udEZhY2VTZXQtPmZh
Y2VDb3VudCgpOwogfQogCi12b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNv
bnN0IFN0eWxlUnVsZUZvbnRGYWNlJiBmb250RmFjZVJ1bGUsIGJvb2wgaXNJbml0aWF0aW5nRWxl
bWVudEluVXNlckFnZW50U2hhZG93VHJlZSkKK3ZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250
RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwgYm9vbCBpc0luaXRpYXRp
bmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQogewogICAgIGNvbnN0IFN0eWxlUHJvcGVy
dGllcyYgc3R5bGUgPSBmb250RmFjZVJ1bGUucHJvcGVydGllcygpOwogICAgIFJlZlB0cjxDU1NW
YWx1ZT4gZm9udEZhbWlseSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlG
b250RmFtaWx5KTsKQEAgLTIwMSw3ICsxMzUsOCBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRk
Rm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlJiBmb250RmFjZVJ1bGUsIGJvbwog
ICAgIGlmICghc3JjTGlzdC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmPENT
U0ZvbnRGYWNlPiBmb250RmFjZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUoKnRoaXMpOworICAgIG1f
Y3JlYXRpbmdGb250ID0gdHJ1ZTsKKyAgICBSZWY8Q1NTRm9udEZhY2U+IGZvbnRGYWNlID0gQ1NT
Rm9udEZhY2U6OmNyZWF0ZSh0aGlzLCAmZm9udEZhY2VSdWxlKTsKIAogICAgIGlmICghZm9udEZh
Y2UtPnNldEZhbWlsaWVzKCpmb250RmFtaWx5KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjI2LDI2
ICsxNjEsMTMgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBT
dHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxlLCBib28KICAgICBpZiAoZmVhdHVyZVNldHRp
bmdzICYmICFmb250RmFjZS0+c2V0RmVhdHVyZVNldHRpbmdzKCpmZWF0dXJlU2V0dGluZ3MpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhcHBlbmRTb3VyY2VzKGZvbnRGYWNlLCBzcmNMaXN0LCBt
X2RvY3VtZW50LCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKKyAg
ICBDU1NGb250RmFjZTo6YXBwZW5kU291cmNlcyhmb250RmFjZSwgc3JjTGlzdCwgbV9kb2N1bWVu
dCwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CiAgICAgaWYgKGZv
bnRGYWNlLT5hbGxTb3VyY2VzRmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAo
YXV0byYgaXRlbSA6IGZhbWlseUxpc3QpIHsKLSAgICAgICAgU3RyaW5nIGZhbWlseU5hbWUgPSBm
YW1pbHlOYW1lRnJvbVByaW1pdGl2ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5n
ZXQoKSkpOwotICAgICAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udEZhY2VzLmFkZChmYW1p
bHlOYW1lLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4oKSk7Ci0gICAgICAgIGF1dG8mIGZhbWls
eUZvbnRGYWNlcyA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIGlmIChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgcmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0Zv
ckZhbWlseShmYW1pbHlOYW1lKTsKLSAgICAgICAgICAgIGZhbWlseUZvbnRGYWNlcyA9IHsgfTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZhbWlseUZvbnRGYWNlcy5hcHBlbmQoZm9udEZhY2UuY29w
eVJlZigpKTsKLSAgICAgICAgCi0gICAgICAgICsrbV92ZXJzaW9uOwotICAgIH0KKyAgICBtX2Nz
c0ZvbnRGYWNlU2V0LT5hZGQoZm9udEZhY2UuZ2V0KCkpOworICAgIG1fY3JlYXRpbmdGb250ID0g
ZmFsc2U7CisgICAgKyttX3ZlcnNpb247CiB9CiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpyZWdp
c3RlckZvckludmFsaWRhdGlvbkNhbGxiYWNrcyhGb250U2VsZWN0b3JDbGllbnQmIGNsaWVudCkK
QEAgLTI3Myw2ICsxOTUsMTIgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRMb2FkZWQoKQog
ICAgIGRpc3BhdGNoSW52YWxpZGF0aW9uQ2FsbGJhY2tzKCk7CiB9CiAKK3ZvaWQgQ1NTRm9udFNl
bGVjdG9yOjpmb250TW9kaWZpZWQoKQoreworICAgIGlmICghbV9jcmVhdGluZ0ZvbnQpCisgICAg
ICAgIGRpc3BhdGNoSW52YWxpZGF0aW9uQ2FsbGJhY2tzKCk7Cit9CisKIHZvaWQgQ1NTRm9udFNl
bGVjdG9yOjpmb250Q2FjaGVJbnZhbGlkYXRlZCgpCiB7CiAgICAgZGlzcGF0Y2hJbnZhbGlkYXRp
b25DYWxsYmFja3MoKTsKQEAgLTMwNCw4NCArMjMyLDEzIEBAIHN0YXRpYyBjb25zdCBBdG9taWNT
dHJpbmcmIHJlc29sdmVHZW5lcmljRmFtaWx5KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRm9u
dERlCiAgICAgcmV0dXJuIGZhbWlseU5hbWU7CiB9CiAKLWNsYXNzIEZvbnRGYWNlQ29tcGFyYXRv
ciB7Ci1wdWJsaWM6Ci0gICAgRm9udEZhY2VDb21wYXJhdG9yKEZvbnRUcmFpdHNNYXNrIGRlc2ly
ZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbikKLSAgICAgICAgOiBtX2Rlc2lyZWRUcmFpdHNNYXNr
Rm9yQ29tcGFyaXNvbihkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24pCi0gICAgewotICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2Rlc2lyZWRUcmFpdHNNYXNr
Rm9yQ29tcGFyaXNvbiAmIEZvbnRXZWlnaHRNYXNrKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJh
dG9yKCkoY29uc3QgQ1NTRm9udEZhY2UmIGZpcnN0LCBjb25zdCBDU1NGb250RmFjZSYgc2Vjb25k
KQotICAgIHsKLSAgICAgICAgRm9udFRyYWl0c01hc2sgZmlyc3RUcmFpdHNNYXNrID0gZmlyc3Qu
dHJhaXRzTWFzaygpOwotICAgICAgICBGb250VHJhaXRzTWFzayBzZWNvbmRUcmFpdHNNYXNrID0g
c2Vjb25kLnRyYWl0c01hc2soKTsKLQotICAgICAgICBib29sIGZpcnN0SGFzRGVzaXJlZFN0eWxl
ID0gZmlyc3RUcmFpdHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBG
b250U3R5bGVNYXNrOwotICAgICAgICBib29sIHNlY29uZEhhc0Rlc2lyZWRTdHlsZSA9IHNlY29u
ZFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRTdHls
ZU1hc2s7Ci0KLSAgICAgICAgaWYgKGZpcnN0SGFzRGVzaXJlZFN0eWxlICE9IHNlY29uZEhhc0Rl
c2lyZWRTdHlsZSkKLSAgICAgICAgICAgIHJldHVybiBmaXJzdEhhc0Rlc2lyZWRTdHlsZTsKLQot
ICAgICAgICBpZiAoKG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxl
SXRhbGljTWFzaykgJiYgIWZpcnN0LmlzTG9jYWxGYWxsYmFjaygpICYmICFzZWNvbmQuaXNMb2Nh
bEZhbGxiYWNrKCkpIHsKLSAgICAgICAgICAgIC8vIFByZWZlciBhIGZvbnQgdGhhdCBoYXMgaW5k
aWNhdGVkIHRoYXQgaXQgY2FuIG9ubHkgc3VwcG9ydCBpdGFsaWNzIHRvIGEgZm9udCB0aGF0IGNs
YWltcyB0byBzdXBwb3J0Ci0gICAgICAgICAgICAvLyBhbGwgc3R5bGVzLiBUaGUgc3BlY2lhbGl6
ZWQgZm9udCBpcyBtb3JlIGxpa2VseSB0byBiZSB0aGUgb25lIHRoZSBhdXRob3Igd2FudHMgdXNl
ZC4KLSAgICAgICAgICAgIGJvb2wgZmlyc3RSZXF1aXJlc0l0YWxpY3MgPSAoZmlyc3RUcmFpdHNN
YXNrICYgRm9udFN0eWxlSXRhbGljTWFzaykgJiYgIShmaXJzdFRyYWl0c01hc2sgJiBGb250U3R5
bGVOb3JtYWxNYXNrKTsKLSAgICAgICAgICAgIGJvb2wgc2Vjb25kUmVxdWlyZXNJdGFsaWNzID0g
KHNlY29uZFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhKHNlY29uZFRyYWl0
c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKTsKLSAgICAgICAgICAgIGlmIChmaXJzdFJlcXVp
cmVzSXRhbGljcyAhPSBzZWNvbmRSZXF1aXJlc0l0YWxpY3MpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZpcnN0UmVxdWlyZXNJdGFsaWNzOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNlY29u
ZFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRXZWln
aHRNYXNrKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoZmlyc3RUcmFp
dHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFz
aykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIC8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMTEvV0QtY3NzMy1mb250cy0yMDExMTAwNC8jZm9udC1tYXRjaGluZy1hbGdvcml0
aG0gc2F5cyA6Ci0gICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgbGVzcyB0
aGFuIDQwMCwgd2VpZ2h0cyBiZWxvdyB0aGUgZGVzaXJlZCB3ZWlnaHQgYXJlIGNoZWNrZWQgaW4g
ZGVzY2VuZGluZyBvcmRlciBmb2xsb3dlZCBieSB3ZWlnaHRzIGFib3ZlIHRoZSBkZXNpcmVkIHdl
aWdodCBpbiBhc2NlbmRpbmcgb3JkZXIgdW50aWwgYSBtYXRjaCBpcyBmb3VuZC4KLSAgICAgICAg
Ly8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyBncmVhdGVyIHRoYW4gNTAwLCB3ZWlnaHRz
IGFib3ZlIHRoZSBkZXNpcmVkIHdlaWdodCBhcmUgY2hlY2tlZCBpbiBhc2NlbmRpbmcgb3JkZXIg
Zm9sbG93ZWQgYnkgd2VpZ2h0cyBiZWxvdyB0aGUgZGVzaXJlZCB3ZWlnaHQgaW4gZGVzY2VuZGlu
ZyBvcmRlciB1bnRpbCBhIG1hdGNoIGlzIGZvdW5kLgotICAgICAgICAvLyAgIC0gSWYgdGhlIGRl
c2lyZWQgd2VpZ2h0IGlzIDQwMCwgNTAwIGlzIGNoZWNrZWQgZmlyc3QgYW5kIHRoZW4gdGhlIHJ1
bGUgZm9yIGRlc2lyZWQgd2VpZ2h0cyBsZXNzIHRoYW4gNDAwIGlzIHVzZWQuCi0gICAgICAgIC8v
ICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgNTAwLCA0MDAgaXMgY2hlY2tlZCBmaXJzdCBh
bmQgdGhlbiB0aGUgcnVsZSBmb3IgZGVzaXJlZCB3ZWlnaHRzIGxlc3MgdGhhbiA0MDAgaXMgdXNl
ZC4KLQotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFsbGJhY2tSdWxlU2V0cyA9IDk7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBydWxlc1BlclNldCA9IDg7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBGb250VHJhaXRzTWFzayB3ZWlnaHRGYWxsYmFja1J1bGVTZXRzW2ZhbGxi
YWNrUnVsZVNldHNdW3J1bGVzUGVyU2V0XSA9IHsKLSAgICAgICAgICAgIHsgRm9udFdlaWdodDIw
ME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDUw
ME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgw
ME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZvbnRXZWlnaHQxMDBN
YXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBN
YXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBN
YXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAotICAgICAgICAgICAgeyBGb250V2VpZ2h0MjAwTWFz
aywgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFz
aywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFz
aywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9udFdlaWdodDUwME1hc2ss
IEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2ss
IEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ss
IEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZvbnRXZWlnaHQ0MDBNYXNrLCBG
b250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBG
b250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBG
b250V2VpZ2h0OTAwTWFzayB9LAotICAgICAgICAgICAgeyBGb250V2VpZ2h0NzAwTWFzaywgRm9u
dFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9u
dFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9u
dFdlaWdodDEwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9udFdlaWdodDgwME1hc2ssIEZvbnRX
ZWlnaHQ5MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRX
ZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRX
ZWlnaHQxMDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZvbnRXZWlnaHQ5MDBNYXNrLCBGb250V2Vp
Z2h0NzAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2Vp
Z2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2Vp
Z2h0MTAwTWFzayB9LAotICAgICAgICAgICAgeyBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdo
dDcwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdo
dDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdo
dDEwME1hc2sgfQotICAgICAgICB9OwotCi0gICAgICAgIHVuc2lnbmVkIHJ1bGVTZXRJbmRleCA9
IDA7Ci0gICAgICAgIGZvciAoOyAhKG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYg
KDEgPDwgKEZvbnRXZWlnaHQxMDBCaXQgKyBydWxlU2V0SW5kZXgpKSk7IHJ1bGVTZXRJbmRleCsr
KSB7IH0KLQotICAgICAgICBjb25zdCBGb250VHJhaXRzTWFzayogd2VpZ2h0RmFsbGJhY2tSdWxl
ID0gd2VpZ2h0RmFsbGJhY2tSdWxlU2V0c1tydWxlU2V0SW5kZXhdOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcnVsZXNQZXJTZXQ7ICsraSkgewotICAgICAgICAgICAgaWYgKHNl
Y29uZFRyYWl0c01hc2sgJiB3ZWlnaHRGYWxsYmFja1J1bGVbaV0pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGZpcnN0VHJhaXRzTWFzayAmIHdlaWdodEZh
bGxiYWNrUnVsZVtpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRm9udFRyYWl0
c01hc2sgbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb247Ci19OwotCiBGb250UmFuZ2Vz
IENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQogewog
ICAgIC8vIEZJWE1FOiBUaGUgc3BlYyAoYW5kIEZpcmVmb3gpIHNheXMgdXNlciBzcGVjaWZpZWQg
Z2VuZXJpYyBmYW1pbGllcyAoc2Fucy1zZXJpZiBldGMuKSBzaG91bGQgYmUgcmVzb2x2ZWQgYmVm
b3JlIHRoZSBAZm9udC1mYWNlIGxvb2t1cCB0b28uCiAgICAgYm9vbCByZXNvbHZlR2VuZXJpY0Zh
bWlseUZpcnN0ID0gZmFtaWx5TmFtZSA9PSBzdGFuZGFyZEZhbWlseTsKIAogICAgIEF0b21pY1N0
cmluZyBmYW1pbHlGb3JMb29rdXAgPSByZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0ID8gcmVzb2x2
ZUdlbmVyaWNGYW1pbHkobV9kb2N1bWVudCwgZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKSA6
IGZhbWlseU5hbWU7Ci0gICAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIGZhY2UgPSBnZXRGb250RmFj
ZShmb250RGVzY3JpcHRpb24sIGZhbWlseUZvckxvb2t1cCk7CisgICAgQ1NTU2VnbWVudGVkRm9u
dEZhY2UqIGZhY2UgPSBtX2Nzc0ZvbnRGYWNlU2V0LT5nZXRGb250RmFjZShmb250RGVzY3JpcHRp
b24udHJhaXRzTWFzaygpLCBmYW1pbHlGb3JMb29rdXApOwogICAgIGlmICghZmFjZSkgewogICAg
ICAgICBpZiAoIXJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QpCiAgICAgICAgICAgICBmYW1pbHlG
b3JMb29rdXAgPSByZXNvbHZlR2VuZXJpY0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVzY3JpcHRp
b24sIGZhbWlseU5hbWUpOwpAQCAtMzkxLDQ5ICsyNDgsNiBAQCBGb250UmFuZ2VzIENTU0ZvbnRT
ZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcgogICAgIHJldHVybiBmYWNlLT5mb250UmFuZ2VzKGZvbnREZXNjcmlwdGlvbik7CiB9CiAK
LUNTU1NlZ21lbnRlZEZvbnRGYWNlKiBDU1NGb250U2VsZWN0b3I6OmdldEZvbnRGYWNlKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZh
bWlseSkKLXsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9mb250RmFjZXMuZmluZChmYW1pbHkpOwot
ICAgIGlmIChpdGVyYXRvciA9PSBtX2ZvbnRGYWNlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgYXV0byYgZmFtaWx5Rm9udEZhY2VzID0gaXRlcmF0b3ItPnZhbHVlOwotCi0g
ICAgYXV0byYgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9IG1fZm9udHMuYWRkKGZhbWlseSwgSGFz
aE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4oKSku
aXRlcmF0b3ItPnZhbHVlOwotCi0gICAgRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzayA9IGZvbnRE
ZXNjcmlwdGlvbi50cmFpdHNNYXNrKCk7Ci0KLSAgICBhdXRvJiBmYWNlID0gc2VnbWVudGVkRm9u
dEZhY2VDYWNoZS5hZGQodHJhaXRzTWFzaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAg
IGlmIChmYWNlKQotICAgICAgICByZXR1cm4gZmFjZS5nZXQoKTsKLQotICAgIGZhY2UgPSBzdGQ6
Om1ha2VfdW5pcXVlPENTU1NlZ21lbnRlZEZvbnRGYWNlPigqdGhpcyk7Ci0KLSAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4sIDMyPiBjYW5kaWRhdGVGb250RmFj
ZXM7Ci0gICAgZm9yIChpbnQgaSA9IGZhbWlseUZvbnRGYWNlcy5zaXplKCkgLSAxOyBpID49IDA7
IC0taSkgewotICAgICAgICBDU1NGb250RmFjZSYgY2FuZGlkYXRlID0gZmFtaWx5Rm9udEZhY2Vz
W2ldOwotICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVUcmFpdHNNYXNrID0gY2FuZGlkYXRlLnRy
YWl0c01hc2soKTsKLSAgICAgICAgaWYgKCh0cmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFz
aykgJiYgIShjYW5kaWRhdGVUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzaykpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FuZGlkYXRlRm9udEZhY2VzLmFwcGVuZChjYW5k
aWRhdGUpOwotICAgIH0KLQotICAgIGF1dG8gbG9jYWxJdGVyYXRvciA9IG1fbG9jYWxseUluc3Rh
bGxlZEZvbnRGYWNlcy5maW5kKGZhbWlseSk7Ci0gICAgaWYgKGxvY2FsSXRlcmF0b3IgIT0gbV9s
b2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmVuZCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2Fu
ZGlkYXRlIDogbG9jYWxJdGVyYXRvci0+dmFsdWUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNh
bmRpZGF0ZVRyYWl0c01hc2sgPSBjYW5kaWRhdGUtPnRyYWl0c01hc2soKTsKLSAgICAgICAgICAg
IGlmICgodHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spICYmICEoY2FuZGlkYXRlVHJh
aXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgY2FuZGlkYXRlRm9udEZhY2VzLmFwcGVuZChjYW5kaWRhdGUpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgc3RkOjpzdGFibGVfc29ydChjYW5kaWRhdGVGb250RmFjZXMu
YmVnaW4oKSwgY2FuZGlkYXRlRm9udEZhY2VzLmVuZCgpLCBGb250RmFjZUNvbXBhcmF0b3IodHJh
aXRzTWFzaykpOwotICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogY2FuZGlkYXRlRm9udEZhY2Vz
KQotICAgICAgICBmYWNlLT5hcHBlbmRGb250RmFjZShjYW5kaWRhdGUuZ2V0KCkpOwotCi0gICAg
cmV0dXJuIGZhY2UuZ2V0KCk7Ci19Ci0KIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpjbGVhckRvY3Vt
ZW50KCkKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQpIHsKQEAgLTQ1NCw5ICsyNjgsNyBAQCB2b2lk
IENTU0ZvbnRTZWxlY3Rvcjo6Y2xlYXJEb2N1bWVudCgpCiAgICAgbV9kb2N1bWVudCA9IG51bGxw
dHI7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvYmplY3Qgc2hvdWxkIG91dGxpdmUgdGhlIERvY3Vt
ZW50LgotICAgIG1fZm9udEZhY2VzLmNsZWFyKCk7Ci0gICAgbV9sb2NhbGx5SW5zdGFsbGVkRm9u
dEZhY2VzLmNsZWFyKCk7Ci0gICAgbV9mb250cy5jbGVhcigpOworICAgIG1fY3NzRm9udEZhY2VT
ZXQtPmNsZWFyKCk7CiAgICAgbV9jbGllbnRzLmNsZWFyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuaAppbmRleCA5YTI3ZmUyMmVmNzJkNGE5NzdiNmY3MzVhMzEwMjM1OTYx
OTY1NWMxLi5jMTEyZTg4Zjc0NzY1OWM4OTA1NTAyNjFiNWVkNTE5ZGE4NmZmZjE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIENT
U0ZvbnRTZWxlY3Rvcl9oCiAKICNpbmNsdWRlICJDU1NGb250RmFjZS5oIgorI2luY2x1ZGUgIkNT
U0ZvbnRGYWNlU2V0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNs
dWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCkBAIC00OCw3ICs0OSw3IEBA
IGNsYXNzIENhY2hlZEZvbnQ7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFN0eWxlUnVsZUZvbnRG
YWNlOwogCi1jbGFzcyBDU1NGb250U2VsZWN0b3IgZmluYWwgOiBwdWJsaWMgRm9udFNlbGVjdG9y
IHsKK2NsYXNzIENTU0ZvbnRTZWxlY3RvciBmaW5hbCA6IHB1YmxpYyBGb250U2VsZWN0b3IsIHB1
YmxpYyBDU1NGb250RmFjZVNldENsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDU1NG
b250U2VsZWN0b3I+IGNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgewpAQCAtNjIsMTIg
KzYzLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZvbnRSYW5nZXMgZm9udFJhbmdlc0ZvckZh
bWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHNpemVfdCBmYWxsYmFja0ZvbnRDb3VudCgpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgUmVmUHRyPEZvbnQ+IGZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIHNpemVfdCkgb3ZlcnJpZGU7Ci0gICAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIGdldEZvbnRG
YWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsK
IAogICAgIHZvaWQgY2xlYXJEb2N1bWVudCgpOwogCi0gICAgc3RhdGljIHZvaWQgYXBwZW5kU291
cmNlcyhDU1NGb250RmFjZSYsIENTU1ZhbHVlTGlzdCYsIERvY3VtZW50KiwgYm9vbCBpc0luaXRp
YXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKLSAgICB2b2lkIGFkZEZvbnRGYWNl
UnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSYsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudElu
VXNlckFnZW50U2hhZG93VHJlZSk7CisgICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoU3R5bGVSdWxl
Rm9udEZhY2UmLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUp
OwogCiAgICAgdm9pZCBmb250TG9hZGVkKCk7CiAgICAgdmlydHVhbCB2b2lkIGZvbnRDYWNoZUlu
dmFsaWRhdGVkKCkgb3ZlcnJpZGU7CkBAIC04MSwyMSArODAsMjAgQEAgcHVibGljOgogCiAgICAg
dm9pZCBiZWdpbkxvYWRpbmdGb250U29vbihDYWNoZWRGb250Kik7CiAKLSAgICBzdGF0aWMgU3Ry
aW5nIGZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7Cisg
ICAgRm9udEZhY2VTZXQmIGZvbnRGYWNlU2V0KCk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
Q1NTRm9udFNlbGVjdG9yKERvY3VtZW50Jik7CiAKICAgICB2b2lkIGRpc3BhdGNoSW52YWxpZGF0
aW9uQ2FsbGJhY2tzKCk7CiAKLSAgICB2b2lkIGJlZ2luTG9hZFRpbWVyRmlyZWQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZm9udE1vZGlmaWVkKCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHJlZ2lzdGVy
TG9jYWxGb250RmFjZXNGb3JGYW1pbHkoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBiZWdpbkxv
YWRUaW1lckZpcmVkKCk7CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICBIYXNoTWFw
PFN0cmluZywgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhh
c2g+IG1fZm9udEZhY2VzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmPENTU0ZvbnRG
YWNlPj4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZh
Y2VzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9w
dHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+PiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX2Zv
bnRzOworICAgIFJlZlB0cjxGb250RmFjZVNldD4gbV9mb250RmFjZVNldDsKKyAgICBSZWY8Q1NT
Rm9udEZhY2VTZXQ+IG1fY3NzRm9udEZhY2VTZXQ7CiAgICAgSGFzaFNldDxGb250U2VsZWN0b3JD
bGllbnQqPiBtX2NsaWVudHM7CiAKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
aGVkRm9udD4+IG1fZm9udHNUb0JlZ2luTG9hZGluZzsKQEAgLTEwMyw2ICsxMDEsNyBAQCBwcml2
YXRlOgogCiAgICAgdW5zaWduZWQgbV91bmlxdWVJZDsKICAgICB1bnNpZ25lZCBtX3ZlcnNpb247
CisgICAgYm9vbCBtX2NyZWF0aW5nRm9udCB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9u
dEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcApp
bmRleCBmNWZjYmFlYThkZGFlODY5YjZkM2ZjOTMwMjc0OWMyMjZiOTkwM2FmLi40YzIwZDM4ZmU0
ZTZkNmY5NjIyNmI0NDNjZWQzZTUzZjhmZTAxNWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5jcHAKQEAgLTM3LDggKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1DU1NTZWdtZW50ZWRGb250RmFjZTo6Q1NTU2VnbWVudGVkRm9udEZhY2UoQ1NT
Rm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3IpCi0gICAgOiBtX2ZvbnRTZWxlY3Rvcihmb250U2Vs
ZWN0b3IpCitDU1NTZWdtZW50ZWRGb250RmFjZTo6Q1NTU2VnbWVudGVkRm9udEZhY2UoKQogewog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCmluZGV4IDA3Yjcx
ZjgyZGI3MjRmYzljZTUxZDllMTBmNzgwNjE1YTI2MzM0N2YuLjkyMDM2MTJkMDkxMTM3MWYwYjA0
YTgwMDc5MjY5NjE1OWZlY2U1NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
ZWdtZW50ZWRGb250RmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRG
b250RmFjZS5oCkBAIC00MiwxOSArNDIsMTggQEAgY2xhc3MgRm9udERlc2NyaXB0aW9uOwogY2xh
c3MgQ1NTU2VnbWVudGVkRm9udEZhY2UgZmluYWwgOiBwdWJsaWMgQ1NTRm9udEZhY2U6OkNsaWVu
dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgQ1NTU2VnbWVu
dGVkRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yJik7CisgICAgQ1NTU2VnbWVudGVkRm9udEZhY2Uo
KTsKICAgICB+Q1NTU2VnbWVudGVkRm9udEZhY2UoKTsKIAotICAgIENTU0ZvbnRTZWxlY3RvciYg
Zm9udFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0b3I7IH0KLQogICAgIHZv
aWQgYXBwZW5kRm9udEZhY2UoUmVmPENTU0ZvbnRGYWNlPiYmKTsKIAogICAgIEZvbnRSYW5nZXMg
Zm9udFJhbmdlcyhjb25zdCBGb250RGVzY3JpcHRpb24mKTsKIAorICAgIFZlY3RvcjxSZWY8Q1NT
Rm9udEZhY2U+LCAxPiYgY29uc3RpdHVlbnRGYWNlcygpIHsgcmV0dXJuIG1fZm9udEZhY2VzOyB9
CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ1NTRm9udEZhY2UmKSBv
dmVycmlkZTsKIAotICAgIENTU0ZvbnRTZWxlY3RvciYgbV9mb250U2VsZWN0b3I7CiAgICAgSGFz
aE1hcDxGb250RGVzY3JpcHRpb25LZXksIEZvbnRSYW5nZXMsIEZvbnREZXNjcmlwdGlvbktleUhh
c2gsIFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZvbnREZXNjcmlwdGlvbktleT4+IG1fY2Fj
aGU7CiAgICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4sIDE+IG1fZm9udEZhY2VzOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRm9udEZhY2UuY3BwCmluZGV4IGM0NWU4ZDI3MTFmMDc1OTc2OTVkZjYyNjI2NGM4OWUz
OGQzYzVlZmEuLmEwYmQ4MjQ3NjBmMmYwOWYyNGIwOGQ4ZjJmOGM5MGMyM2M0Y2EzYzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0ZvbnRGYWNlLmNwcApAQCAtNzUsNyArNzUsNyBAQCBSZWZQdHI8Rm9udEZhY2U+IEZv
bnRGYWNlOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgU2NyaXB0RXhlY3V0aW9u
Q29udAogICAgICAgICBhdXRvIHZhbHVlID0gRm9udEZhY2U6OnBhcnNlU3RyaW5nKHNvdXJjZVN0
cmluZywgQ1NTUHJvcGVydHlTcmMpOwogICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1
ZS5nZXQoKSkpIHsKICAgICAgICAgICAgIENTU1ZhbHVlTGlzdCYgc3JjTGlzdCA9IGRvd25jYXN0
PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKLSAgICAgICAgICAgIENTU0ZvbnRTZWxlY3Rvcjo6YXBw
ZW5kU291cmNlcyhyZXN1bHQtPmJhY2tpbmcoKSwgc3JjTGlzdCwgJmRvd25jYXN0PERvY3VtZW50
Pihjb250ZXh0KSwgZmFsc2UpOworICAgICAgICAgICAgQ1NTRm9udEZhY2U6OmFwcGVuZFNvdXJj
ZXMocmVzdWx0LT5iYWNraW5nKCksIHNyY0xpc3QsICZkb3duY2FzdDxEb2N1bWVudD4oY29udGV4
dCksIGZhbHNlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVjID0gU1lOVEFYX0VS
UjsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTEwLDggKzExMCwyMiBAQCBSZWZQ
dHI8Rm9udEZhY2U+IEZvbnRGYWNlOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwg
U2NyaXB0RXhlY3V0aW9uQ29udAogICAgIHJldHVybiByZXN1bHQucHRyKCk7CiB9CiAKK1JlZjxG
b250RmFjZT4gRm9udEZhY2U6OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBDU1NG
b250RmFjZSYgZmFjZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGb250RmFjZShleGVj
U3RhdGUsIGZhY2UpKTsKK30KKwogRm9udEZhY2U6OkZvbnRGYWNlKEpTQzo6RXhlY1N0YXRlJiBl
eGVjU3RhdGUsIENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yKQotICAgIDogbV9iYWNraW5n
KENTU0ZvbnRGYWNlOjpjcmVhdGUoZm9udFNlbGVjdG9yLCB0aGlzKSkKKyAgICA6IG1fd2Vha1B0
ckZhY3RvcnkodGhpcykKKyAgICAsIG1fYmFja2luZyhDU1NGb250RmFjZTo6Y3JlYXRlKCZmb250
U2VsZWN0b3IsIG51bGxwdHIsIHRoaXMpKQorICAgICwgbV9wcm9taXNlKGNyZWF0ZVByb21pc2Uo
ZXhlY1N0YXRlKSkKK3sKKyAgICBtX2JhY2tpbmctPmFkZENsaWVudCgqdGhpcyk7Cit9CisKK0Zv
bnRGYWNlOjpGb250RmFjZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBDU1NGb250RmFjZSYg
ZmFjZSkKKyAgICA6IG1fd2Vha1B0ckZhY3RvcnkodGhpcykKKyAgICAsIG1fYmFja2luZyhmYWNl
KQogICAgICwgbV9wcm9taXNlKGNyZWF0ZVByb21pc2UoZXhlY1N0YXRlKSkKIHsKICAgICBtX2Jh
Y2tpbmctPmFkZENsaWVudCgqdGhpcyk7CkBAIC0xMjIsNiArMTM2LDExIEBAIEZvbnRGYWNlOjp+
Rm9udEZhY2UoKQogICAgIG1fYmFja2luZy0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKIH0KIAorV2Vh
a1B0cjxGb250RmFjZT4gRm9udEZhY2U6OmNyZWF0ZVdlYWtQdHIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsKK30KKwogUmVmUHRyPENTU1Zh
bHVlPiBGb250RmFjZTo6cGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCkKIHsKICAgICBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5
bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKQEAgLTMxNywxOCArMzM2LDI1
IEBAIFN0cmluZyBGb250RmFjZTo6c3RhdHVzKCkgY29uc3QKICAgICByZXR1cm4gU3RyaW5nKCJl
cnJvciIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogfQogCi12b2lkIEZvbnRGYWNl
OjpzdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2UmIGZhY2UsIENTU0ZvbnRGYWNlOjpTdGF0dXMsIENT
U0ZvbnRGYWNlOjpTdGF0dXMgbmV3U3RhdGUpCit2b2lkIEZvbnRGYWNlOjpmb250U3RhdGVDaGFu
Z2VkKENTU0ZvbnRGYWNlJiBmYWNlLCBDU1NGb250RmFjZTo6U3RhdHVzLCBDU1NGb250RmFjZTo6
U3RhdHVzIG5ld1N0YXRlKQogewogICAgIEFTU0VSVF9VTlVTRUQoZmFjZSwgJmZhY2UgPT0gbV9i
YWNraW5nLnB0cigpKTsKICAgICBzd2l0Y2ggKG5ld1N0YXRlKSB7CisgICAgY2FzZSBDU1NGb250
RmFjZTo6U3RhdHVzOjpMb2FkaW5nOgorICAgICAgICAvLyBXZSBzdGlsbCBuZWVkIHRvIHJlc29s
dmUgcHJvbWlzZXMgd2hlbiBsb2FkaW5nIGNvbXBsZXRlcywgZXZlbiBpZiBhbGwgcmVmZXJlbmNl
cyB0byB1c2UgaGF2ZSBmYWxsZW4gb3V0IG9mIHNjb3BlLgorICAgICAgICByZWYoKTsKKyAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDU1NGb250RmFjZTo6U3RhdHVzOjpUaW1lZE91dDoKICAgICAg
ICAgcmVqZWN0UHJvbWlzZShORVRXT1JLX0VSUik7CisgICAgICAgIGRlcmVmKCk7CiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIENTU0ZvbnRGYWNlOjpTdGF0dXM6OlN1Y2Nlc3M6CiAgICAgICAg
IGZ1bGZpbGxQcm9taXNlKCk7CisgICAgICAgIGRlcmVmKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIENTU0ZvbnRGYWNlOjpTdGF0dXM6OkZhaWx1cmU6CiAgICAgICAgIHJlamVjdFByb21p
c2UoTkVUV09SS19FUlIpOworICAgICAgICBkZXJlZigpOwogICAgICAgICByZXR1cm47CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuaAppbmRleCBmNjZmYjlh
ZmRmNjhlZjVjMWE2ZmM1YWNhOTcyYzIwN2MzNWY0ZDM0Li4xMGExNzcwMTBiZjdlNTcxMzk5Yzlk
ZWVhOTVhMGRjMjU3MjRiNDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZh
Y2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuaApAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBEZXByZWNhdGVkIHsKQEAg
LTQ4LDYgKzQ5LDcgQEAgY2xhc3MgRGljdGlvbmFyeTsKIGNsYXNzIEZvbnRGYWNlIGZpbmFsIDog
cHVibGljIFJlZkNvdW50ZWQ8Rm9udEZhY2U+LCBwdWJsaWMgQ1NTRm9udEZhY2U6OkNsaWVudCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxGb250RmFjZT4gY3JlYXRlKEpTQzo6RXhlY1N0
YXRlJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc291cmNlLCBjb25zdCBEaWN0aW9uYXJ5JiBkZXNj
cmlwdG9ycywgRXhjZXB0aW9uQ29kZSYpOworICAgIHN0YXRpYyBSZWY8Rm9udEZhY2U+IGNyZWF0
ZShKU0M6OkV4ZWNTdGF0ZSYsIENTU0ZvbnRGYWNlJik7CiAgICAgdmlydHVhbCB+Rm9udEZhY2Uo
KTsKIAogICAgIHZvaWQgc2V0RmFtaWx5KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsK
QEAgLTc2LDE0ICs3OCwxOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmLCBDU1NQcm9wZXJ0eUlEKTsKIAorICAgIHZpcnR1
YWwgdm9pZCBmb250U3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiwgQ1NTRm9udEZhY2U6OlN0YXR1
cyBvbGRTdGF0ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0ZSkgb3ZlcnJpZGU7CisKKyAg
ICBXZWFrUHRyPEZvbnRGYWNlPiBjcmVhdGVXZWFrUHRyKCkgY29uc3Q7CisKIHByaXZhdGU6CiAg
ICAgRm9udEZhY2UoSlNDOjpFeGVjU3RhdGUmLCBDU1NGb250U2VsZWN0b3ImKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBzdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2UmLCBDU1NGb250RmFjZTo6U3RhdHVz
IG9sZFN0YXRlLCBDU1NGb250RmFjZTo6U3RhdHVzIG5ld1N0YXRlKSBvdmVycmlkZTsKKyAgICBG
b250RmFjZShKU0M6OkV4ZWNTdGF0ZSYsIENTU0ZvbnRGYWNlJik7CiAKICAgICB2b2lkIGZ1bGZp
bGxQcm9taXNlKCk7CiAgICAgdm9pZCByZWplY3RQcm9taXNlKEV4Y2VwdGlvbkNvZGUpOwogCisg
ICAgV2Vha1B0ckZhY3Rvcnk8Rm9udEZhY2U+IG1fd2Vha1B0ckZhY3Rvcnk7CiAgICAgUmVmPENT
U0ZvbnRGYWNlPiBtX2JhY2tpbmc7CiAgICAgUHJvbWlzZSBtX3Byb21pc2U7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250RmFjZVNldC5jcHAKaW5kZXggN2VkNzc0NjZiNDI0MjkzZGNlYjdmM2I1NTI0YmUx
ODRlMWM1YTgyYy4uZmUzZWQyODgzZWM1ZjViYjVmZDQ1ZjkxOTlhYTU3NmUwZWY1MTUxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuY3BwCkBAIC00MiwxNyArNDIsMzkgQEAgc3RhdGljIEZv
bnRGYWNlU2V0OjpQcm9taXNlIGNyZWF0ZVByb21pc2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWMpCiAg
ICAgcmV0dXJuIEZvbnRGYWNlU2V0OjpQcm9taXNlKERlZmVycmVkV3JhcHBlcigmZXhlYywgJmds
b2JhbE9iamVjdCwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZleGVjLCAmZ2xvYmFs
T2JqZWN0KSkpOwogfQogCi1Gb250RmFjZVNldDo6Rm9udEZhY2VTZXQoSlNDOjpFeGVjU3RhdGUm
IGV4ZWNTdGF0ZSwgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRG
YWNlPj4mIGluaXRpYWxGYWNlcykKK1JlZjxGb250RmFjZVNldD4gRm9udEZhY2VTZXQ6OmNyZWF0
ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5p
dGlhbEZhY2VzKQoreworICAgIFJlZjxGb250RmFjZVNldD4gcmVzdWx0ID0gYWRvcHRSZWYoKm5l
dyBGb250RmFjZVNldChkb2N1bWVudCwgaW5pdGlhbEZhY2VzKSk7CisgICAgcmVzdWx0LT5zdXNw
ZW5kSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWY8Rm9udEZhY2VTZXQ+
IEZvbnRGYWNlU2V0OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBDU1NGb250RmFjZVNldCYg
YmFja2luZykKK3sKKyAgICBSZWY8Rm9udEZhY2VTZXQ+IHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcg
Rm9udEZhY2VTZXQoZG9jdW1lbnQsIGJhY2tpbmcpKTsKKyAgICByZXN1bHQtPnN1c3BlbmRJZk5l
ZWRlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0ZvbnRGYWNlU2V0OjpGb250RmFjZVNl
dChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5p
dGlhbEZhY2VzKQogICAgIDogQWN0aXZlRE9NT2JqZWN0KCZkb2N1bWVudCkKLSAgICAsIG1fYmFj
a2luZygqdGhpcykKLSAgICAsIG1fcHJvbWlzZShjcmVhdGVQcm9taXNlKGV4ZWNTdGF0ZSkpCisg
ICAgLCBtX2JhY2tpbmcoQ1NTRm9udEZhY2VTZXQ6OmNyZWF0ZSgpKQogeworICAgIG1fYmFja2lu
Zy0+YWRkQ2xpZW50KCp0aGlzKTsKICAgICBmb3IgKGF1dG8mIGZhY2UgOiBpbml0aWFsRmFjZXMp
CiAgICAgICAgIGFkZChmYWNlLmdldCgpKTsKIH0KIAorRm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0
KERvY3VtZW50JiBkb2N1bWVudCwgQ1NTRm9udEZhY2VTZXQmIGJhY2tpbmcpCisgICAgOiBBY3Rp
dmVET01PYmplY3QoJmRvY3VtZW50KQorICAgICwgbV9iYWNraW5nKGJhY2tpbmcpCit7CisgICAg
bV9iYWNraW5nLT5hZGRDbGllbnQoKnRoaXMpOworfQorCiBGb250RmFjZVNldDo6fkZvbnRGYWNl
U2V0KCkKIHsKKyAgICBtX2JhY2tpbmctPnJlbW92ZUNsaWVudCgqdGhpcyk7CiB9CiAKIEZvbnRG
YWNlU2V0OjpJdGVyYXRvcjo6SXRlcmF0b3IoRm9udEZhY2VTZXQmIHNldCkKQEAgLTYwLDExICs4
MiwxMSBAQCBGb250RmFjZVNldDo6SXRlcmF0b3I6Okl0ZXJhdG9yKEZvbnRGYWNlU2V0JiBzZXQp
CiB7CiB9CiAKLWJvb2wgRm9udEZhY2VTZXQ6Okl0ZXJhdG9yOjpuZXh0KFJlZlB0cjxGb250RmFj
ZT4mIGtleSwgUmVmUHRyPEZvbnRGYWNlPiYgdmFsdWUpCitib29sIEZvbnRGYWNlU2V0OjpJdGVy
YXRvcjo6bmV4dChKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBSZWZQdHI8Rm9udEZhY2U+JiBr
ZXksIFJlZlB0cjxGb250RmFjZT4mIHZhbHVlKQogewogICAgIGlmIChtX2luZGV4ID09IG1fdGFy
Z2V0LT5zaXplKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGtleSA9IG1fdGFyZ2V0LT5t
X2JhY2tpbmdbbV9pbmRleCsrXS53cmFwcGVyKCk7CisgICAga2V5ID0gbV90YXJnZXQtPm1fYmFj
a2luZy5nZXQoKVttX2luZGV4KytdLndyYXBwZXIoZXhlY1N0YXRlKTsKICAgICB2YWx1ZSA9IGtl
eTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC04MiwxOCArMTA0LDE4IEBAIGJvb2wgRm9udEZh
Y2VTZXQ6OmhhcyhGb250RmFjZSogZmFjZSkgY29uc3QKIHsKICAgICBpZiAoIWZhY2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9iYWNraW5nLmhhc0ZhY2UoZmFjZS0+YmFj
a2luZygpKTsKKyAgICByZXR1cm4gbV9iYWNraW5nLT5oYXNGYWNlKGZhY2UtPmJhY2tpbmcoKSk7
CiB9CiAKIHNpemVfdCBGb250RmFjZVNldDo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
YmFja2luZy5mYWNlQ291bnQoKTsKKyAgICByZXR1cm4gbV9iYWNraW5nLT5mYWNlQ291bnQoKTsK
IH0KIAogRm9udEZhY2VTZXQmIEZvbnRGYWNlU2V0OjphZGQoRm9udEZhY2UqIGZhY2UpCiB7Ci0g
ICAgaWYgKGZhY2UgJiYgIW1fYmFja2luZy5oYXNGYWNlKGZhY2UtPmJhY2tpbmcoKSkpCi0gICAg
ICAgIG1fYmFja2luZy5hZGQoZmFjZS0+YmFja2luZygpKTsKKyAgICBpZiAoZmFjZSAmJiAhbV9i
YWNraW5nLT5oYXNGYWNlKGZhY2UtPmJhY2tpbmcoKSkpCisgICAgICAgIG1fYmFja2luZy0+YWRk
KGZhY2UtPmJhY2tpbmcoKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMDIsMjEgKzEy
NCwyMSBAQCBib29sIEZvbnRGYWNlU2V0OjpyZW1vdmUoRm9udEZhY2UqIGZhY2UpCiAgICAgaWYg
KCFmYWNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIHJlc3VsdCA9IG1fYmFj
a2luZy5oYXNGYWNlKGZhY2UtPmJhY2tpbmcoKSk7CisgICAgYm9vbCByZXN1bHQgPSBtX2JhY2tp
bmctPmhhc0ZhY2UoZmFjZS0+YmFja2luZygpKTsKICAgICBpZiAocmVzdWx0KQotICAgICAgICBt
X2JhY2tpbmcucmVtb3ZlKGZhY2UtPmJhY2tpbmcoKSk7CisgICAgICAgIG1fYmFja2luZy0+cmVt
b3ZlKGZhY2UtPmJhY2tpbmcoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBGb250
RmFjZVNldDo6Y2xlYXIoKQogewotICAgIHdoaWxlIChtX2JhY2tpbmcuZmFjZUNvdW50KCkpCi0g
ICAgICAgIG1fYmFja2luZy5yZW1vdmUobV9iYWNraW5nWzBdKTsKKyAgICB3aGlsZSAobV9iYWNr
aW5nLT5mYWNlQ291bnQoKSkKKyAgICAgICAgbV9iYWNraW5nLT5yZW1vdmUobV9iYWNraW5nLmdl
dCgpWzBdKTsKIH0KIAotdm9pZCBGb250RmFjZVNldDo6bG9hZChjb25zdCBTdHJpbmcmIGZvbnQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit2b2lkIEZvbnRGYWNlU2V0Ojpsb2FkKEpTQzo6RXhlY1N0YXRlJiBleGVjU3Rh
dGUsIGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBEZWZlcnJlZFdyYXBw
ZXImJiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBhdXRvIG1hdGNoaW5nRmFj
ZXMgPSBtX2JhY2tpbmcubWF0Y2hpbmdGYWNlcyhmb250LCB0ZXh0LCBlYyk7CisgICAgYXV0byBt
YXRjaGluZ0ZhY2VzID0gbV9iYWNraW5nLT5tYXRjaGluZ0ZhY2VzKGZvbnQsIHRleHQsIGVjKTsK
ICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTM5LDExICsxNjEsMTEgQEAgdm9p
ZCBGb250RmFjZVNldDo6bG9hZChjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4
dCwgRGVmZXJyZWRXcmFwcGVyJiYKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIGZhY2UgOiBtYXRj
aGluZ0ZhY2VzKSB7Ci0gICAgICAgIHBlbmRpbmdQcm9taXNlLT5mYWNlcy5hcHBlbmQoZmFjZS5n
ZXQoKS53cmFwcGVyKCkpOworICAgICAgICBwZW5kaW5nUHJvbWlzZS0+ZmFjZXMuYXBwZW5kKGZh
Y2UuZ2V0KCkud3JhcHBlcihleGVjU3RhdGUpKTsKICAgICAgICAgaWYgKGZhY2UuZ2V0KCkuc3Rh
dHVzKCkgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6U3VjY2VzcykKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB3YWl0aW5nID0gdHJ1ZTsKLSAgICAgICAgYXV0byYgdmVjdG9yID0gbV9w
ZW5kaW5nUHJvbWlzZXMuYWRkKFJlZlB0cjxGb250RmFjZT4oZmFjZS5nZXQoKS53cmFwcGVyKCkp
LCBWZWN0b3I8UmVmPFBlbmRpbmdQcm9taXNlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOworICAgICAg
ICBhdXRvJiB2ZWN0b3IgPSBtX3BlbmRpbmdQcm9taXNlcy5hZGQoUmVmUHRyPENTU0ZvbnRGYWNl
PigmZmFjZS5nZXQoKSksIFZlY3RvcjxSZWY8UGVuZGluZ1Byb21pc2U+PigpKS5pdGVyYXRvci0+
dmFsdWU7CiAgICAgICAgIHZlY3Rvci5hcHBlbmQocGVuZGluZ1Byb21pc2UuY29weVJlZigpKTsK
ICAgICB9CiAKQEAgLTE1MywxNCArMTc1LDE0IEBAIHZvaWQgRm9udEZhY2VTZXQ6OmxvYWQoY29u
c3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIERlZmVycmVkV3JhcHBlciYmCiAK
IGJvb2wgRm9udEZhY2VTZXQ6OmNoZWNrKGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBTdHJp
bmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIHJldHVybiBtX2JhY2tpbmcuY2hl
Y2soZmFtaWx5LCB0ZXh0LCBlYyk7CisgICAgcmV0dXJuIG1fYmFja2luZy0+Y2hlY2soZmFtaWx5
LCB0ZXh0LCBlYyk7CiB9CiAKIGF1dG8gRm9udEZhY2VTZXQ6OnByb21pc2UoSlNDOjpFeGVjU3Rh
dGUmIGV4ZWNTdGF0ZSkgLT4gUHJvbWlzZSYKIHsKICAgICBpZiAoIW1fcHJvbWlzZSkgewogICAg
ICAgICBtX3Byb21pc2UgPSBjcmVhdGVQcm9taXNlKGV4ZWNTdGF0ZSk7Ci0gICAgICAgIGlmICht
X2JhY2tpbmcuc3RhdHVzKCkgPT0gQ1NTRm9udEZhY2VTZXQ6OlN0YXR1czo6TG9hZGVkKQorICAg
ICAgICBpZiAobV9iYWNraW5nLT5zdGF0dXMoKSA9PSBDU1NGb250RmFjZVNldDo6U3RhdHVzOjpM
b2FkZWQpCiAgICAgICAgICAgICBmdWxmaWxsUHJvbWlzZSgpOwogICAgIH0KICAgICByZXR1cm4g
bV9wcm9taXNlLnZhbHVlKCk7CkBAIC0xNjgsNyArMTkwLDcgQEAgYXV0byBGb250RmFjZVNldDo6
cHJvbWlzZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlKSAtPiBQcm9taXNlJgogICAgIAogU3Ry
aW5nIEZvbnRGYWNlU2V0OjpzdGF0dXMoKSBjb25zdAogewotICAgIHN3aXRjaCAobV9iYWNraW5n
LnN0YXR1cygpKSB7CisgICAgc3dpdGNoIChtX2JhY2tpbmctPnN0YXR1cygpKSB7CiAgICAgY2Fz
ZSBDU1NGb250RmFjZVNldDo6U3RhdHVzOjpMb2FkaW5nOgogICAgICAgICByZXR1cm4gU3RyaW5n
KCJsb2FkaW5nIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgY2FzZSBDU1NG
b250RmFjZVNldDo6U3RhdHVzOjpMb2FkZWQ6CkBAIC0xODAsNyArMjAyLDcgQEAgU3RyaW5nIEZv
bnRGYWNlU2V0OjpzdGF0dXMoKSBjb25zdAogCiBib29sIEZvbnRGYWNlU2V0OjpjYW5TdXNwZW5k
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9iYWNraW5nLnN0
YXR1cygpID09IENTU0ZvbnRGYWNlU2V0OjpTdGF0dXM6OkxvYWRlZDsKKyAgICByZXR1cm4gbV9i
YWNraW5nLT5zdGF0dXMoKSA9PSBDU1NGb250RmFjZVNldDo6U3RhdHVzOjpMb2FkZWQ7CiB9CiAK
IHZvaWQgRm9udEZhY2VTZXQ6OnN0YXJ0ZWRMb2FkaW5nKCkKQEAgLTIwOSw3ICsyMzEsNyBAQCB2
b2lkIEZvbnRGYWNlU2V0OjpmdWxmaWxsUHJvbWlzZSgpCiAKIHZvaWQgRm9udEZhY2VTZXQ6OmZh
Y2VGaW5pc2hlZChDU1NGb250RmFjZSYgZmFjZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0
dXMpCiB7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1Byb21pc2VzLmZpbmQoZmFjZS53
cmFwcGVyKCkpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3BlbmRpbmdQcm9taXNlcy5maW5kKCZm
YWNlKTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9wZW5kaW5nUHJvbWlzZXMuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaAppbmRleCBjMDVlZDE4ZTRjZThh
ZjUxZjhmMmU4MDQxMjUxYWI1NDAwMWRjMmM3Li40OGY2M2UzMDE0YzhhNWQ3MWU1YzQzOTAwZmNh
MTI2ZWE4YzZmNzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaApAQCAtMzgsNiArMzgsMTAg
QEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgRXhlY1N0YXRlOworfQorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwpAQCAtNDUsMTIgKzQ5LDggQEAgY2xhc3MgRm9u
dEZhY2U7CiAKIGNsYXNzIEZvbnRGYWNlU2V0IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9u
dEZhY2VTZXQ+LCBwdWJsaWMgQ1NTRm9udEZhY2VTZXRDbGllbnQsIHB1YmxpYyBFdmVudFRhcmdl
dFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZvbnRGYWNlU2V0PiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwg
RG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBWZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRp
YWxGYWNlcykKLSAgICB7Ci0gICAgICAgIFJlZjxGb250RmFjZVNldD4gcmVzdWx0ID0gYWRvcHRS
ZWYoKm5ldyBGb250RmFjZVNldChleGVjU3RhdGUsIGRvY3VtZW50LCBpbml0aWFsRmFjZXMpKTsK
LSAgICAgICAgcmVzdWx0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9CisgICAgc3RhdGljIFJlZjxGb250RmFjZVNldD4gY3JlYXRlKERvY3VtZW50Jiwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+JiBpbml0aWFsRmFjZXMpOworICAgIHN0YXRp
YyBSZWY8Rm9udEZhY2VTZXQ+IGNyZWF0ZShEb2N1bWVudCYsIENTU0ZvbnRGYWNlU2V0JiBiYWNr
aW5nKTsKICAgICB2aXJ0dWFsIH5Gb250RmFjZVNldCgpOwogCiAgICAgYm9vbCBoYXMoRm9udEZh
Y2UqKSBjb25zdDsKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIGJvb2wgcmVtb3ZlKEZv
bnRGYWNlKik7CiAgICAgdm9pZCBjbGVhcigpOwogCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmlu
ZyYgZm9udCwgRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
bG9hZChmb250LCBTdHJpbmcoIiAiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RG
TW92ZShwcm9taXNlKSwgZWMpOyB9Ci0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYgZm9udCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBsb2FkKEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIGNvbnN0IFN0
cmluZyYgZm9udCwgRGVmZXJyZWRXcmFwcGVyJiYgcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgbG9hZChleGVjU3RhdGUsIGZvbnQsIFN0cmluZygiICIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLCBXVEZNb3ZlKHByb21pc2UpLCBlYyk7IH0KKyAgICB2b2lkIGxvYWQoSlNDOjpF
eGVjU3RhdGUmLCBjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRGVmZXJy
ZWRXcmFwcGVyJiYgcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgY2hlY2soY29u
c3QgU3RyaW5nJiBmb250LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gY2hlY2soZm9udCwg
U3RyaW5nKCIgIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIGVjKTsgfQogICAgIGJv
b2wgY2hlY2soY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlv
bkNvZGUmKTsKIApAQCAtNjksNiArNjksOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBET01Qcm9t
aXNlPEZvbnRGYWNlU2V0JiwgRE9NQ29yZUV4Y2VwdGlvbiY+IFByb21pc2U7CiAgICAgUHJvbWlz
ZSYgcHJvbWlzZShKU0M6OkV4ZWNTdGF0ZSYpOwogCisgICAgQ1NTRm9udEZhY2VTZXQmIGJhY2tp
bmcoKSB7IHJldHVybiBtX2JhY2tpbmc7IH0KKwogICAgIGNsYXNzIEl0ZXJhdG9yIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIGV4cGxpY2l0IEl0ZXJhdG9yKEZvbnRGYWNlU2V0Jik7CkBAIC03Niwx
MSArNzgsMTEgQEAgcHVibGljOgogICAgICAgICB1c2luZyBLZXkgPSBSZWZQdHI8Rm9udEZhY2U+
OwogICAgICAgICB1c2luZyBWYWx1ZSA9IFJlZlB0cjxGb250RmFjZT47CiAKLSAgICAgICAgYm9v
bCBuZXh0KEtleSYgbmV4dEtleSwgVmFsdWUmIG5leHRWYWx1ZSk7CisgICAgICAgIGJvb2wgbmV4
dChKU0M6OkV4ZWNTdGF0ZSYsIEtleSYgbmV4dEtleSwgVmFsdWUmIG5leHRWYWx1ZSk7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBSZWY8Rm9udEZhY2VTZXQ+IG1fdGFyZ2V0OwotICAgICAgICBz
aXplX3QgbV9pbmRleCB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1faW5kZXggeyAwIH07IC8vIEZJ
WE1FOiBUaGVyZSBuZWVkcyB0byBiZSBhIG1lY2hhbmlzbSB0byBoYW5kbGUgd2hlbiBmb250cyBh
cmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIEZvbnRGYWNlU2V0Lgog
ICAgIH07CiAgICAgSXRlcmF0b3IgY3JlYXRlSXRlcmF0b3IoKSB7IHJldHVybiBJdGVyYXRvcigq
dGhpcyk7IH0KIApAQCAtMTA0LDcgKzEwNiw4IEBAIHByaXZhdGU6CiAgICAgICAgIFByb21pc2Ug
cHJvbWlzZTsKICAgICB9OwogCi0gICAgRm9udEZhY2VTZXQoSlNDOjpFeGVjU3RhdGUmLCBEb2N1
bWVudCYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYpOworICAgIEZvbnRGYWNlU2V0
KERvY3VtZW50JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxGb250RmFjZT4+Jik7CisgICAgRm9udEZh
Y2VTZXQoRG9jdW1lbnQmLCBDU1NGb250RmFjZVNldCYpOwogCiAgICAgdm9pZCBmdWxmaWxsUHJv
bWlzZSgpOwogCkBAIC0xMjMsOCArMTI2LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
cmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRl
cmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSB7IGRlcmVmKCk7IH0KIAotICAgIENTU0ZvbnRGYWNl
U2V0IG1fYmFja2luZzsKLSAgICBIYXNoTWFwPFJlZlB0cjxGb250RmFjZT4sIFZlY3RvcjxSZWY8
UGVuZGluZ1Byb21pc2U+Pj4gbV9wZW5kaW5nUHJvbWlzZXM7CisgICAgUmVmPENTU0ZvbnRGYWNl
U2V0PiBtX2JhY2tpbmc7CisgICAgSGFzaE1hcDxSZWZQdHI8Q1NTRm9udEZhY2U+LCBWZWN0b3I8
UmVmPFBlbmRpbmdQcm9taXNlPj4+IG1fcGVuZGluZ1Byb21pc2VzOwogICAgIE9wdGlvbmFsPFBy
b21pc2U+IG1fcHJvbWlzZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9G
b250RmFjZVNldC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaWRsCmluZGV4
IDRmZjY4NWRjYWNkOWI1MmVjMjczNTVlMGRkYjM1MWRmM2U1NmZlNzguLjZjYWY1NWE1MmUxZmFj
NGQ2NzQ3MTk1ZWYyZWVkNWIwOWI0OGUxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9Gb250RmFjZVNldC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0Lmlk
bApAQCAtMjksNyArMjksNyBAQCBlbnVtIEZvbnRGYWNlU2V0TG9hZFN0YXR1cyB7CiB9OwogCiBb
Ci0gICAgQ29uc3RydWN0b3JDYWxsV2l0aD1TY3JpcHRTdGF0ZSZEb2N1bWVudCwKKyAgICBDb25z
dHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAogICAgIENvbnN0cnVjdG9yKHNlcXVlbmNlPEZvbnRG
YWNlPiBpbml0aWFsRmFjZXMpCiBdIGludGVyZmFjZSBGb250RmFjZVNldCA6IEV2ZW50VGFyZ2V0
IHsKICAgICBbQ3VzdG9tXSBPYmplY3QgZW50cmllcygpOwpAQCAtNDgsNyArNDgsNyBAQCBlbnVt
IEZvbnRGYWNlU2V0TG9hZFN0YXR1cyB7CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmxv
YWRpbmdkb25lOwogICAgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25sb2FkaW5nZXJyb3I7CiAK
LSAgICBbUmFpc2VzRXhjZXB0aW9uXSBQcm9taXNlIGxvYWQoRE9NU3RyaW5nIGZvbnQsIG9wdGlv
bmFsIERPTVN0cmluZyB0ZXh0KTsKKyAgICBbUmFpc2VzRXhjZXB0aW9uLCBDYWxsV2l0aD1TY3Jp
cHRTdGF0ZV0gUHJvbWlzZSBsb2FkKERPTVN0cmluZyBmb250LCBvcHRpb25hbCBET01TdHJpbmcg
dGV4dCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBjaGVjayhET01TdHJpbmcgZm9u
dCwgb3B0aW9uYWwgRE9NU3RyaW5nIHRleHQpOwogCiAgICAgW0N1c3RvbV0gcmVhZG9ubHkgYXR0
cmlidXRlIFByb21pc2UgcmVhZHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA5MGEwY2Fj
M2I3MWNkN2NhMjA3NmM5MTdiMWEyMmIxOWRlYWQ2ZjgxLi5lNmUxNGRhYjc4YjlhMjc3Y2I5NmZl
ZTU0ZDdkNTkxOGIxZTM0NzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTYyLDcgKzYy
LDcgQEAKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25TdHls
ZVNoZWV0cy5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZvbnRM
b2FkZXIuaCIKKyNpbmNsdWRlICJGb250RmFjZVNldC5oIgogI2luY2x1ZGUgIkZvcm1Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudC5oIgpAQCAtNjY3OSwxNCArNjY3OSwxMCBAQCBEb2N1bWVudCYgRG9jdW1lbnQ6OmVuc3Vy
ZVRlbXBsYXRlRG9jdW1lbnQoKQogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoRk9OVF9MT0FEX0VW
RU5UUykKLVJlZlB0cjxGb250TG9hZGVyPiBEb2N1bWVudDo6Zm9udHMoKQorUmVmPEZvbnRGYWNl
U2V0PiBEb2N1bWVudDo6Zm9udHMoKQogewotICAgIGlmICghbV9mb250bG9hZGVyKQotICAgICAg
ICBtX2ZvbnRsb2FkZXIgPSBGb250TG9hZGVyOjpjcmVhdGUodGhpcyk7Ci0gICAgcmV0dXJuIG1f
Zm9udGxvYWRlcjsKKyAgICByZXR1cm4gZm9udFNlbGVjdG9yKCkuZm9udEZhY2VTZXQoKTsKIH0K
LSNlbmRpZgogCiBmbG9hdCBEb2N1bWVudDo6ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdAogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAppbmRleCA1ZjljMmEyOWI2ODA0ZmU5ODhjOWI0NDgzZDYzOTE2NjBk
Y2IyODgzLi5mZjMzYTg4NzgwYzE3NGFkYzAwZGMwNmFlM2QxYjI2ZTJiMmQ4ODQ2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaApAQCAtMjA1LDkgKzIwNSw3IEBAIGNsYXNzIFRleHRBdXRvc2l6ZXI7CiBj
bGFzcyBET01TZWN1cml0eVBvbGljeTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKEZPTlRfTE9BRF9F
VkVOVFMpCi1jbGFzcyBGb250TG9hZGVyOwotI2VuZGlmCitjbGFzcyBGb250RmFjZVNldDsKIAog
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIApAQCAtMTI3NSw5ICsxMjczLDcgQEAgcHVibGlj
OgogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogdG9wT3JpZ2lu
KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAKLSNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5UUykK
LSAgICBSZWZQdHI8Rm9udExvYWRlcj4gZm9udHMoKTsKLSNlbmRpZgorICAgIFJlZjxGb250RmFj
ZVNldD4gZm9udHMoKTsKIAogICAgIHZvaWQgZW5zdXJlUGx1Z0luc0luamVjdGVkU2NyaXB0KERP
TVdyYXBwZXJXb3JsZCYpOwogCkBAIC0xNzU2LDEwICsxNzUyLDYgQEAgcHJpdmF0ZToKIAogICAg
IFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwogCi0jaWYgRU5BQkxFKEZP
TlRfTE9BRF9FVkVOVFMpCi0gICAgUmVmUHRyPEZvbnRMb2FkZXI+IG1fZm9udGxvYWRlcjsKLSNl
bmRpZgotCiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAgICAgUmVmUHRyPEpTQzo6SW5wdXRDdXJz
b3I+IG1faW5wdXRDdXJzb3I7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCmluZGV4IDYx
YzY3YzRjMjMzMzU4MzYxMjJjYmE3M2QyNTk2NGE5MDY5YTRmNmUuLmRhNmVkNTMxYmViZmYyNzYw
N2YzODQ1ZWU1NmI5ZTUyMTk1MGJkNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbApAQCAtMjY1
LDcgKzI2NSw3IEBACiAgICAgW0NvbmRpdGlvbmFsPUNTU19SRUdJT05TXSBET01OYW1lZEZsb3dD
b2xsZWN0aW9uIHdlYmtpdEdldE5hbWVkRmxvd3MoKTsKIAogI2lmIGRlZmluZWQoTEFOR1VBR0Vf
SkFWQVNDUklQVCkgJiYgTEFOR1VBR0VfSkFWQVNDUklQVAotICAgIFtDb25kaXRpb25hbD1GT05U
X0xPQURfRVZFTlRTXSByZWFkb25seSBhdHRyaWJ1dGUgRm9udExvYWRlciBmb250czsKKyAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRm9udEZhY2VTZXQgZm9udHM7CiAjZW5kaWYKIAogI2lmIGRlZmlu
ZWQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFMpICYmIEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmgKaW5kZXggZDI4MjgzYTMzYjllMzVm
NWI4YzMwNjRhZDY2ZjM3OGNmNjU2ODgwOC4uNWU0YzUwMDlmZTI5ZTUzMDQwMTNkMjkxYmNjNmQw
YjlhMDg0NDZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaApAQCAt
NTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgU1ZHRm9udEVsZW1lbnQqIGFzc29jaWF0ZWRGb250
RWxlbWVudCgpIGNvbnN0OwogICAgIHZvaWQgcmVidWlsZEZvbnRGYWNlKCk7CiAgICAgCi0gICAg
Y29uc3QgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udEZhY2VSdWxlLmdldCgpOyB9CisgICAgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVs
ZSgpIHsgcmV0dXJuIG1fZm9udEZhY2VSdWxlLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgU1ZH
Rm9udEZhY2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDNjMTY1YjgyZjllYjY2MWU5ZGIzYzBlMDdkOGY1ZWY1NGQ4NzhmNGIuLmQ3NWU3NWUzODU4ZDJl
NDY5MzIzZDRjMTMzNmY3OWYyMGU3YWYwMmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0w
Mi0yMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAg
IFtGb250IExvYWRpbmddIFNwbGl0IENTU0ZvbnRTZWxlY3RvciBpbnRvIGEgRm9udEZhY2VTZXQg
aW1wbGVtZW50YXRpb24gYW5kIHRoZSByZXN0IG9mIHRoZSBjbGFzcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMzQ3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L3RleHQvZm9udC1mYWNlLWph
dmFzY3JpcHQuaHRtbDoKKyAgICAgICAgKiBmYXN0L3RleHQvZm9udC1mYWNlLXNldC1kb2N1bWVu
dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvdGV4dC9mb250LWZhY2Utc2V0
LWRvY3VtZW50Lmh0bWw6IEFkZGVkLgorCiAyMDE2LTAyLTE5ICBTdWtvbHNhayBTYWtzaHV3b25n
ICA8c3Vrb2xzYWtAZ21haWwuY29tPgogCiAgICAgICAgIFtJTlRMXSBJbXBsZW1lbnQgTnVtYmVy
IEZvcm1hdCBGdW5jdGlvbnMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9mb250
LWZhY2UtamF2YXNjcmlwdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2ZvbnQtZmFjZS1q
YXZhc2NyaXB0Lmh0bWwKaW5kZXggM2QzYTM3ZDM3MzE3YjYwZDhiNjFjMDJjYjZjZDZiZWJlZGFj
ODdiZi4uOGFlZGIzYzE1MzYwYjA4ZjY3YzZmN2JlNWZmZjUyNjE5YTE1OTU2ZiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2ZvbnQtZmFjZS1qYXZhc2NyaXB0Lmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0L2ZvbnQtZmFjZS1qYXZhc2NyaXB0Lmh0bWwKQEAgLTEsNCAr
MSw1IEBACiA8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9mb250LWZhY2Utc2V0LWRvY3VtZW50LWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9mb250LWZhY2Utc2V0LWRvY3VtZW50LWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44MjQ0ZTBkZWMxMzkxOTg0OTYyOWI1OGMyMGQwN2MxMzAyMzM5
MzU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2ZvbnQtZmFjZS1z
ZXQtZG9jdW1lbnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1BBU1MgZG9jdW1lbnQu
Zm9udHMuc2l6ZSBpcyAyCitQQVNTIG9iamVjdC5kb25lIGlzIGZhbHNlCitQQVNTIG9iamVjdC52
YWx1ZS5mYW1pbHkgaXMgIk15Rm9udDEiCitQQVNTIG9iamVjdC5kb25lIGlzIGZhbHNlCitQQVNT
IG9iamVjdC52YWx1ZS5mYW1pbHkgaXMgIk15Rm9udDIiCitQQVNTIG9iamVjdC5kb25lIGlzIHRy
dWUKK1BBU1MgZm9udEZhY2VTZXQuc2l6ZSBpcyAyCitQQVNTIG9iamVjdC5kb25lIGlzIGZhbHNl
CitQQVNTIG9iamVjdC52YWx1ZS5mYW1pbHkgaXMgIk15Rm9udDEiCitQQVNTIG9iamVjdC5kb25l
IGlzIGZhbHNlCitQQVNTIG9iamVjdC52YWx1ZS5mYW1pbHkgaXMgIk15Rm9udDIiCitQQVNTIG9i
amVjdC5kb25lIGlzIHRydWUKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RFbGVt
ZW50Iikub2Zmc2V0V2lkdGggaXMgbm90IG9yaWdpbmFsV2lkdGgKK1BBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInRlc3RFbGVtZW50Iikub2Zmc2V0V2lkdGggaXMgb3JpZ2luYWxXaWR0aAor
UEFTUyBvYmplY3QubGVuZ3RoIGlzIDIKK1BBU1Mgb2JqZWN0WzBdLmZhbWlseSBpcyAiTXlGb250
MyIKK1BBU1Mgb2JqZWN0WzFdLmZhbWlseSBpcyAiTXlGb250MyIKK1BBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInRlc3RFbGVtZW50Iikub2Zmc2V0V2lkdGggaXMgbm90IG9yaWdpbmFsV2lk
dGgKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RFbGVtZW50Iikub2Zmc2V0V2lk
dGggaXMgb3JpZ2luYWxXaWR0aAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCitPbiBMb2FkIEV4ZWN1dGVkLgorbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC90ZXh0L2ZvbnQtZmFjZS1zZXQtZG9jdW1lbnQuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC9mb250LWZhY2Utc2V0LWRvY3VtZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc0NTNkM2Y0
YWY1NzFjZWE2OTYwMDJmYmQ5ODQxMDlhZmE5ZGJlMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvdGV4dC9mb250LWZhY2Utc2V0LWRvY3VtZW50Lmh0bWwKQEAgLTAsMCArMSwx
MDUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIGlkPSJzdHlsZUVs
ZW1lbnQiPgorQGZvbnQtZmFjZSB7CisgICAgZm9udC1mYW1pbHk6ICJNeUZvbnQxIjsKKyAgICBz
cmM6IHVybCgiLi4vLi4vcmVzb3VyY2VzL0FoZW0udHRmIikgZm9ybWF0KCJ0cnVldHlwZSIpOwor
fQorQGZvbnQtZmFjZSB7CisgICAgZm9udC1mYW1pbHk6ICJNeUZvbnQyIjsKKyAgICBzcmM6IHVy
bCgiLi4vLi4vcmVzb3VyY2VzL0FoZW0ub3RmIikgZm9ybWF0KCJvcGVudHlwZSIpOworfQorPC9z
dHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ib25Mb2FkRWxlbWVudCI+PC9kaXY+Cis8
c3BhbiBpZD0idGVzdEVsZW1lbnQiIHN0eWxlPSJmb250OiA1MHB4IEFwcGxpZWRGb250Ij5sPC9z
cGFuPgorPHNjcmlwdD4KK3dpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgib25Mb2FkRWxlbWVudCIpLmlubmVyVGV4dCA9ICJPbiBMb2FkIEV4
ZWN1dGVkLiI7Cit9Cit2YXIgb3JpZ2luYWxXaWR0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0ZXN0RWxlbWVudCIpLm9mZnNldFdpZHRoOworCitzaG91bGRCZSgiZG9jdW1lbnQuZm9udHMu
c2l6ZSIsICIyIik7Cit2YXIgaXRlcmF0b3IgPSBkb2N1bWVudC5mb250cy5rZXlzKCk7Cit2YXIg
b2JqZWN0ID0gaXRlcmF0b3IubmV4dCgpOworc2hvdWxkQmVGYWxzZSgib2JqZWN0LmRvbmUiKTsK
K3Nob3VsZEJlRXF1YWxUb1N0cmluZygib2JqZWN0LnZhbHVlLmZhbWlseSIsICJNeUZvbnQxIik7
CitvYmplY3QgPSBpdGVyYXRvci5uZXh0KCk7CitzaG91bGRCZUZhbHNlKCJvYmplY3QuZG9uZSIp
Oworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJvYmplY3QudmFsdWUuZmFtaWx5IiwgIk15Rm9udDIi
KTsKK29iamVjdCA9IGl0ZXJhdG9yLm5leHQoKTsKK3Nob3VsZEJlVHJ1ZSgib2JqZWN0LmRvbmUi
KTsKKwordmFyIGZvbnRGYWNlU2V0ID0gbmV3IEZvbnRGYWNlU2V0KFtdKTsKK2ZvbnRGYWNlU2V0
LmFkZChuZXcgRm9udEZhY2UoIk15Rm9udDIiLCAidXJsKFwiYXNkZlwiKSIsIHt9KSk7Citmb250
RmFjZVNldC5hZGQoZG9jdW1lbnQuZm9udHMua2V5cygpLm5leHQoKS52YWx1ZSk7CitzaG91bGRC
ZSgiZm9udEZhY2VTZXQuc2l6ZSIsICIyIik7CitpdGVyYXRvciA9IGZvbnRGYWNlU2V0LmtleXMo
KTsKK29iamVjdCA9IGl0ZXJhdG9yLm5leHQoKTsKK3Nob3VsZEJlRmFsc2UoIm9iamVjdC5kb25l
Iik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm9iamVjdC52YWx1ZS5mYW1pbHkiLCAiTXlGb250
MSIpOworb2JqZWN0ID0gaXRlcmF0b3IubmV4dCgpOworc2hvdWxkQmVGYWxzZSgib2JqZWN0LmRv
bmUiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygib2JqZWN0LnZhbHVlLmZhbWlseSIsICJNeUZv
bnQyIik7CitvYmplY3QgPSBpdGVyYXRvci5uZXh0KCk7CitzaG91bGRCZVRydWUoIm9iamVjdC5k
b25lIik7CisKK2l0ZXJhdG9yID0gdW5kZWZpbmVkOworb2JqZWN0ID0gdW5kZWZpbmVkOworCitz
ZWxmLmpzVGVzdElzQXN5bmMgPSB0cnVlOworZnVuY3Rpb24gc3RhcnRMb2FkaW5nKCkgeworICAg
IHZhciBhcHBsaWVkRm9udCA9IHVuZGVmaW5lZDsKKyAgICBkb2N1bWVudC5mb250cy5rZXlzKCku
bmV4dCgpLnZhbHVlLmxvYWQoKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZG9j
dW1lbnQuZm9udHMua2V5cygpLm5leHQoKS52YWx1ZS5sb2FkZWQ7CisgICAgfSwgZnVuY3Rpb24o
KSB7CisgICAgICAgIHRlc3RGYWlsZWQoIkxvYWRpbmcgc2hvdWxkIHN1Y2NlZWQuIik7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGRv
Y3VtZW50LmZvbnRzLmtleXMoKS5uZXh0KCkudmFsdWUuZmFtaWx5ID0gIkFwcGxpZWRGb250IjsK
KyAgICAgICAgc2hvdWxkTm90QmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGVzdEVsZW1l
bnRcIikub2Zmc2V0V2lkdGgiLCAib3JpZ2luYWxXaWR0aCIpOworICAgICAgICBkb2N1bWVudC5m
b250cy5rZXlzKCkubmV4dCgpLnZhbHVlLmZhbWlseSA9ICJNeUZvbnQxIjsKKyAgICAgICAgc2hv
dWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGVzdEVsZW1lbnRcIikub2Zmc2V0V2lk
dGgiLCAib3JpZ2luYWxXaWR0aCIpOworICAgICAgICBkb2N1bWVudC5mb250cy5hZGQobmV3IEZv
bnRGYWNlKCJNeUZvbnQzIiwgInVybChcIi4uLy4uL3Jlc291cmNlcy9BaGVtLm90ZlwiKSIsIHt9
KSk7CisgICAgICAgIHJldHVybiBkb2N1bWVudC5mb250cy5sb2FkKCJNeUZvbnQzIik7CisgICAg
fSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlRoZSBzYW1lIHByb21pc2Ugc2hv
dWxkIG5vdCBmYWlsIGFuZCB0aGVuIHN1Y2NlZWQuIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlNob3VsZCBu
b3QgYmUgYWJsZSB0byBwYXJzZSBhcyBhIGZvbnQ6IHByb3BlcnR5LiIpOworICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgZG9jdW1lbnQuZm9udHMu
YWRkKG5ldyBGb250RmFjZSgiTXlGb250MyIsICJ1cmwoXCIuLi8uLi9yZXNvdXJjZXMvQWhlbS50
dGZcIikiLCB7J3ZhcmlhbnQnOiAnc21hbGwtY2Fwcyd9KSk7CisgICAgICAgIHJldHVybiBkb2N1
bWVudC5mb250cy5sb2FkKCI1MHB4IE15Rm9udDMiKTsKKyAgICB9KS50aGVuKGZ1bmN0aW9uKHgp
IHsKKyAgICAgICAgb2JqZWN0ID0geDsKKyAgICAgICAgc2hvdWxkQmUoIm9iamVjdC5sZW5ndGgi
LCAiMiIpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm9iamVjdFswXS5mYW1pbHki
LCAiTXlGb250MyIpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm9iamVjdFsxXS5m
YW1pbHkiLCAiTXlGb250MyIpOworICAgICAgICBvYmplY3QgPSB1bmRlZmluZWQ7CisgICAgICAg
IGFwcGxpZWRGb250ID0gbmV3IEZvbnRGYWNlKCJBcHBsaWVkRm9udCIsICJ1cmwoXCIuLi8uLi9y
ZXNvdXJjZXMvQWhlbS5vdGZcIikiLCB7fSk7CisgICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChh
cHBsaWVkRm9udCk7CisgICAgICAgIHJldHVybiBhcHBsaWVkRm9udC5sb2FkZWQ7CisgICAgfSwg
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIkxvYWRpbmcgc2hvdWxkIHN1Y2NlZWQu
Iik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pLnRoZW4oZnVuY3Rpb24oeCkgewor
ICAgICAgICBzaG91bGROb3RCZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0ZXN0RWxlbWVu
dFwiKS5vZmZzZXRXaWR0aCIsICJvcmlnaW5hbFdpZHRoIik7CisgICAgICAgIGRvY3VtZW50LmZv
bnRzLmRlbGV0ZShhcHBsaWVkRm9udCk7CisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChcInRlc3RFbGVtZW50XCIpLm9mZnNldFdpZHRoIiwgIm9yaWdpbmFsV2lkdGgi
KTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAg
IHRlc3RGYWlsZWQoIkxvYWRpbmcgc2hvdWxkIHN1Y2NlZWQuIik7CisgICAgICAgIGZpbmlzaEpT
VGVzdCgpOworICAgIH0pOworfQoraWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisgICAgd2luZG93
LkdDQ29udHJvbGxlci5jb2xsZWN0KCk7CitzdGFydExvYWRpbmcoKTsKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>
<flag name="review"
          id="296730"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271942</attachid>
            <date>2016-02-22 12:35:53 -0800</date>
            <delta_ts>2016-02-22 12:35:53 -0800</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-153347-20160222123535.patch</filename>
            <type>text/plain</type>
            <size>97578</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2OTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQzMWFmNzkyMDc2YzMw
YWJlOWEzM2Y0MTY1MWQ1MTE5OWUzY2M1NS4uNjE0NTMwMjU4MWVkNjZiODcxNTBjNzFiNmQ1OWM1
MGIzOTY2Njk1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAxNi0wMi0yMiAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtGb250IExv
YWRpbmddIFNwbGl0IENTU0ZvbnRTZWxlY3RvciBpbnRvIGEgRm9udEZhY2VTZXQgaW1wbGVtZW50
YXRpb24gYW5kIHRoZSByZXN0IG9mIHRoZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMzQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBkb2N1bWVu
dC5mb250cyBKYXZhc2NyaXB0IG9iamVjdC4gSXQgZG9lcyBzbyBieSBicmlkaW5nIHRoZQorICAg
ICAgICBhbHJlYWR5LWV4aXN0aW5nIEZvbnRGYWNlU2V0IEphdmFzY3JpcHQgb2JqZWN0IHdpdGgg
dGhlIENTU0ZvbnRTZWxlY3RvciBXZWJDb3JlIG9iamVjdC4KKyAgICAgICAgQ1NTRm9udFNlbGVj
dG9yIHVzZWQgdG8gaG9sZCBpbnRlcm5hbCBvYmplY3RzIGZvciBlYWNoIEBmb250LWZhY2Ugb2Jq
ZWN0IGluIHRoZQorICAgICAgICBEb2N1bWVudC4gVGhlc2Ugb2JqZWN0cyBoYXZlIGJlZW4gbW92
ZWQgaW50byBDU1NGb250RmFjZVNldCwgc28gQ1NTRm9udFNlbGVjdG9yIHNpbXBseQorICAgICAg
ICBqdXN0IG93bnMgYW4gaW5zdGFuY2Ugb2YgYSBDU1NGb250RmFjZVNldC4KKworICAgICAgICBU
aGUgbGlmZXRpbWUgb2YgdGhlIEZvbnRGYWNlIGFuZCBGb250RmFjZVNldCBvYmplY3RzIGlzIGEg
bGl0dGxlIGludGVyZXN0aW5nOiBiZWNhdXNlCisgICAgICAgIGFsbCB0aGUgb3duZXJzaGlwIHJl
ZmVyZW5jZXMgYXJlIGluc2lkZSB0aGUgV2ViQ29yZSBDU1NGb250RmFjZXssU2V0fSBvYmplY3Rz
LCB0aGUKKyAgICAgICAgaGlnaGVyLWxldmVsIEphdmFzY3JpcHQgRm9udEZhY2V7LFNldH0gb2Jq
ZWN0cyBhcmUgaGVsZCB0aHJvdWdoIGEgV2Vha1B0ci4gVGhpcyBtZWFucworICAgICAgICB0aGF0
IGlmIGFsbCB0aGUgcmVmZXJlbmNlcyB0byB0aGVzZSBoaWdoZXItbGV2ZWwgb2JqZWN0cyBnbyBh
d2F5LCBhbmQgeW91IHJlLXF1ZXJ5IHRoZQorICAgICAgICBkb2N1bWVudCBmb3IgaXRzIEZvbnRG
YWNlIG9iamVjdHMsIHlvdSBtYXkgZ2V0IGEgbmV3IG9iamVjdCAoYWxiZWl0IHdpdGggdGhlIHNh
bWUKKyAgICAgICAgc3RhdGUgYXMgYSBwcmV2aW91cyBvYmplY3QpLiBIb3dldmVyLCB0aGlzIHdv
bid0IG9jY3VyIGlmIHRoZXJlIGFyZSBhbnkgcmVmZXJlbmNlcyB0bworICAgICAgICB0aGUgb2xk
IG9iamVjdCwgd2hpY2ggbWVhbnMgaXQgaXMgYWxtb3N0IG5vdCBvYnNlcnZhYmxlLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggZG9lc24ndCBpbXBsZW1lbnQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVu
IHRoZSBDU1NPTSBhbmQgdGhlIEZvbnRGYWNlCisgICAgICAgIG9iamVjdHMuIENoYW5naW5nIG9u
ZSBzaG91bGQgcmVzdWx0IGluIGEgY2hhbmdlIGluIHRoZSBvdGhlciwgYnV0IHRoYXQgd2lsbCBi
ZQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBhIGZvcnRoY29taW5nIHBhdGNoLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxzbyBkb2Vzbid0IGFsdGVyIHRoZSBsaWZldGltZSBvZiB0aGUgQ1NTRm9u
dFNlbGVjdG9yLCB3aGljaCBtZWFucyB0aGF0IGFsbAorICAgICAgICB0aGUgRG9jdW1lbnQncyBm
b250cyBtYXkgYmUgZGVzdHJveWVkIGFuZCByZWNyZWF0ZWQgZnJvbSBDU1MuIFRoZXJlIGFyZSBh
IGZldyB0aGluZ3MKKyAgICAgICAgd2hpY2ggY2FuIHRyaWdnZXIgdGhpcy4gQSBzdWJzZXF1ZW50
IHBhdGNoIHdpbGwgbWFrZSB0aGUgQ1NTRm9udFNlbGVjdG9yIG91dGxpdmUgdGhlCisgICAgICAg
IERvY3VtZW50LgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBpbXBsZW1lbnQgKGFuZCB0ZXN0
KSB0aGUgYWJpbGl0eSB0byBhZGQgYSBuZXcgRm9udEZhY2UgdG8gdGhlIERvY3VtZW50CisgICAg
ICAgIHRvIGNhdXNlIGEgcmVsYXlvdXQsIGFzIHdlbGwgYXMgY2hhbmdpbmcgcHJvcGVydGllcyBv
ZiBleGlzdGluZyBGb250RmFjZSBvYmplY3RzIGFscmVhZHkKKyAgICAgICAgaW4gdGhlIERvY3Vt
ZW50IHRvIGNhdXNlIGEgcmVsYXlvdXQuCisKKyAgICAgICAgVGVzdDogZmFzdC90ZXh0L2ZvbnQt
ZmFjZS1zZXQtZG9jdW1lbnQuaHRtbAorCisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEhl
YWRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hIZWFkZXJzOjpJdGVyYXRvcjo6bmV4
dCk6IFBhc3MgYW4gZXh0cmEgYXJndW1lbnQuCisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRj
aEhlYWRlcnMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0tleVZhbHVlSXRlcmF0b3IuaDog
VGhlIEV4ZWNTdGF0ZSBpcyBuZWNlc3NhcnkgdG8gYnVpbGQgYW4gZXh0ZXJuYWwKKyAgICAgICAg
d3JhcHBlciBmcm9tIGFuIGV4aXN0aW5nIENTU0ZvbnRGYWNlIG9iamVjdC4KKyAgICAgICAgKFdl
YkNvcmU6OkpTS2V5VmFsdWVJdGVyYXRvcjxKU1dyYXBwZXI+OjpuZXh0KToKKyAgICAgICAgKiBj
c3MvQ1NTRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OmFwcGVu
ZFNvdXJjZXMpOiBNb3ZlZCBmcm9tIENTU0ZvbnRTZWxlY3Rvci4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlOjpDU1NGb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFj
ZTo6bm90aWZ5Q2xpZW50c09mRm9udFByb3BlcnR5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlOjpzZXRGYW1pbGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFj
ZTo6Y2FsY3VsYXRlU3R5bGUpOiBTaGFyZWQgY29kZSBiZXR3ZWVuIENTU0ZvbnRGYWNlU2V0IGFu
ZAorICAgICAgICBDU1NGb250RmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpz
ZXRTdHlsZSk6IFVwZGF0ZSB0byB1c2UgY2FsY3VsYXRlU3R5bGUoKS4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZvbnRGYWNlOjpjYWxjdWxhdGVXZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZvbnRGYWNlOjpzZXRXZWlnaHQpOiBVcGRhdGUgdG8gdXNlIGNhY3VsYXRlV2VpZ2h0
KCkuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6c2V0VW5pY29kZVJhbmdlKTogTm90
aWZ5IGNsaWVudHMuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6c2V0VmFyaWFudExp
Z2F0dXJlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnNldFZhcmlh
bnRQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnNldFZh
cmlhbnRDYXBzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6c2V0VmFy
aWFudE51bWVyaWMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpzZXRW
YXJpYW50QWx0ZXJuYXRlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6
OnNldFZhcmlhbnRFYXN0QXNpYW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRG
YWNlOjpzZXRGZWF0dXJlU2V0dGluZ3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRGYWNlOjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6Ondy
YXBwZXIpOiBCdWlsZCBhIG5ldyB3cmFwcGVyIGlmIG9uZSBkb2Vzbid0IGFscmVhZHkKKyAgICAg
ICAgZXhpc3QuIE5vdGUgdGhhdCB0aGlzIHJlcXVpcmVzIGFuIEV4ZWNTdGF0ZSB0byBjcmVhdGUg
YSBwcm9taXNlLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OnNldFN0YXR1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9udExvYWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZTo6cHVtcCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6
Zm9udCk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmg6CisgICAgICAgICogY3NzL0NTU0Zv
bnRGYWNlU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0OjpDU1NGb250
RmFjZVNldCk6IE1vdmVkIGNvZGUgZnJvbSBDU1NGb250U2VsZWN0b3IuCisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNldDo6fkNTU0ZvbnRGYWNlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU2V0OjphZGRDbGllbnQpOiBUaGlzIG9iamVjdCBjYW4gbm93IGhhdmUgbXVs
dGlwbGUKKyAgICAgICAgY2xpZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0
OjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6OmluY3Jl
bWVudEFjdGl2ZUNvdW50KTogVXBkYXRlIGZvciBtdWx0aXBsZSBjbGllbnRzLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6OmRlY3JlbWVudEFjdGl2ZUNvdW50KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6aGFzRmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNldDo6cmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseSk6IE1v
dmVkIGZyb20KKyAgICAgICAgQ1NTRm9udFNlbGVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Rm9udEZhY2VTZXQ6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZVNldDo6YWRkVG9GYWNlc0xvb2t1cFRhYmxlKTogVGhpcyBoZWxw
ZXIgZnVuY3Rpb24gY2FuCisgICAgICAgIGJlIHVzZWQgd2hlbiBhIHByb3BlcnR5IG9mIGEgRm9u
dEZhY2UgaXMgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0OjphZGQp
OiBVcGRhdGUgdG8gdXNlIGFkZFRvRmFjZXNMb29rdXBUYWJsZSgpLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRm9udEZhY2VTZXQ6OnJlbW92ZUZyb21GYWNlc0xvb2t1cFRhYmxlKTogU2FtZSBhcwor
ICAgICAgICBhZGRUb0ZhY2VzTG9va3VwVGFibGUoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRGYWNlU2V0OjpyZW1vdmUpOiBVcGRhdGUgdG8gdXNlIHJlbW92ZUZyb21GYWNlc0xvb2t1cFRh
YmxlKCkuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6Y2xlYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUZvbnRUcmFpdHNNYXNrKTogTW92ZWQgZnJvbSBDU1NGb250U2VsZWN0b3IuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6bWF0Y2hpbmdGYWNlcyk6IFVwZGF0ZSB0
byB1c2UgbmV3IGRhdGEgc3RydWN0dXJlcy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29t
cGFyYXRvcjo6Rm9udEZhY2VDb21wYXJhdG9yKTogTW92ZWQgZnJvbQorICAgICAgICBDU1NGb250
U2VsZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZUNvbXBhcmF0b3I6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6OmdldEZvbnRGYWNlKTogVXBk
YXRlIHRvIHVzZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9u
dEZhY2VTZXQ6OmZvbnRTdGF0ZUNoYW5nZWQpOiBVcGRhdGUgdG8gdXNlIG11bHRpcGxlIGNsaWVu
dHMuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6Zm9udFByb3BlcnR5Q2hhbmdl
ZCk6IFdlIG11c3QgdXBkYXRlIG91ciBpbnRlcm5hbAorICAgICAgICBkYXRhIHN0cnVjdHVyZSBp
ZiB0aGUgZmFtaWx5IG5hbWUgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RGYW1p
bGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmYW1pbGllc0ludGVyc2VjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6bG9hZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6c3RhdGVDaGFuZ2VkKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTZXQuaDogTm93IG5lZWRzIHRvIGJlIFJlZkNv
dW50ZWQuIE5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlCisgICAgICAgIHRha2VuIGZyb20gQ1NTRm9u
dFNlbGVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTZXRDbGllbnQ6OmZhY2VG
aW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldENsaWVudDo6Zm9udE1v
ZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Q2xpZW50OjpzdGFydGVk
TG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldENsaWVudDo6Y29tcGxl
dGVkTG9hZGluZyk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmg6CisgICAgICAg
ICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6IE1vdmUgY29kZSBpbnRvIENTU0ZvbnRGYWNlU2V0
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjp+Q1NTRm9udFNlbGVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRTZWxlY3Rvcjo6Zm9udE1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxl
Y3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2Vs
ZWN0b3I6OmNsZWFyRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9y
OjphcHBlbmRTb3VyY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxl
Y3Rvcjo6ZmFtaWx5TmFtZUZyb21QcmltaXRpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRm9udFNlbGVjdG9yOjpyZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFyYXRvcjo6Rm9udEZhY2VDb21w
YXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlQ29tcGFyYXRvcjo6
b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6
OmdldEZvbnRGYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmg6
CisgICAgICAgICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlZ21lbnRlZEZvbnRGYWNlOjpDU1NTZWdtZW50ZWRGb250RmFjZSk6CisgICAgICAg
ICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmg6CisgICAgICAgICogY3NzL0ZvbnRGYWNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udEZhY2U6OkZvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpjcmVh
dGVXZWFrUHRyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpmb250U3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpzdGF0ZUNoYW5nZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIGNzcy9Gb250RmFjZS5oOgorICAgICAgICAqIGNzcy9Gb250RmFjZVNldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZVNldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRGYWNlU2V0OjpGb250RmFjZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFj
ZVNldDo6fkZvbnRGYWNlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjpJdGVy
YXRvcjo6bmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZVNldDo6aGFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRG
YWNlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250RmFjZVNldDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udEZhY2VTZXQ6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OmNoZWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0OjpzdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udEZhY2VTZXQ6OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OmZhY2VGaW5pc2hlZCk6CisgICAgICAgICogY3Nz
L0ZvbnRGYWNlU2V0Lmg6CisgICAgICAgICogY3NzL0ZvbnRGYWNlU2V0LmlkbDoKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZvbnRzKToK
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOgor
ICAgICAgICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuaDoKKwogMjAxNi0wMi0yMiAgSmVyIE5v
YmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgQVZGb3VuZGF0aW9u
TlNVUkxTZXNzaW9uRW5hYmxlZCBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZldGNoL0ZldGNoSGVhZGVycy5jcHAKaW5kZXggODEyM2U4NmI5MjI3MDM5ZDBjYTIwY2Q5M2Nj
OTNhNGMwMzI3NWY3Yy4uMTA4ZmE3YjFkNTViYjQ1M2JkZDYzNjQwYzFjOTk4ZTk3OGIzMjEwZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcApAQCAt
MTc5LDcgKzE3OSw3IEBAIHZvaWQgRmV0Y2hIZWFkZXJzOjpmaWxsKGNvbnN0IEZldGNoSGVhZGVy
cyogaGVhZGVycykKICAgICB9CiB9CiAKLWJvb2wgRmV0Y2hIZWFkZXJzOjpJdGVyYXRvcjo6bmV4
dChTdHJpbmcmIG5leHRLZXksIFN0cmluZyYgbmV4dFZhbHVlKQorYm9vbCBGZXRjaEhlYWRlcnM6
Okl0ZXJhdG9yOjpuZXh0KEpTQzo6RXhlY1N0YXRlJiwgU3RyaW5nJiBuZXh0S2V5LCBTdHJpbmcm
IG5leHRWYWx1ZSkKIHsKICAgICB3aGlsZSAobV9jdXJyZW50SW5kZXggPCBtX2tleXMuc2l6ZSgp
KSB7CiAgICAgICAgIGF1dG8mIGtleSA9IG1fa2V5c1ttX2N1cnJlbnRJbmRleCsrXTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5oCmluZGV4IDU3ZmY3M2ZmNzYy
Y2U4OGQwMGIzYmY2NTI3MjI5NjcyYTM1ZTk5Y2QuLjgwZDE0ZTMwMzYyNWQ0ODMzMTg1MmRlNTcw
YzBkNzI2NGIxMDI2NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hIZWFkZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhl
YWRlcnMuaApAQCAtMzMsNiArMzMsMTAgQEAKIAogI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIK
IAorbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBFeGVjU3RhdGU7Cit9CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKQEAgLTY1LDcgKzY5LDcgQEAgcHVi
bGljOgogICAgIGNsYXNzIEl0ZXJhdG9yIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGV4cGxpY2l0
IEl0ZXJhdG9yKEZldGNoSGVhZGVycyYpOwotICAgICAgICBib29sIG5leHQoU3RyaW5nJiBuZXh0
S2V5LCBTdHJpbmcmIG5leHRWYWx1ZSk7CisgICAgICAgIGJvb2wgbmV4dChKU0M6OkV4ZWNTdGF0
ZSYsIFN0cmluZyYgbmV4dEtleSwgU3RyaW5nJiBuZXh0VmFsdWUpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgUmVmPEZldGNoSGVhZGVycz4gbV9oZWFkZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlWYWx1ZUl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0tleVZhbHVlSXRlcmF0b3IuaAppbmRleCAwNjdiYjk2YjU3ODkxM2Ni
MmMzY2M1ZTBlYzE1YTEwMmRhZmU5MWZmLi5jNWY4NGFjMjJmY2FkYzA0ZWM0MWUyY2QyMWUxNjYz
OWVkNzMyZmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0tleVZh
bHVlSXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0tleVZhbHVl
SXRlcmF0b3IuaApAQCAtMTI5LDcgKzEyOSw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUga2V5VmFs
dWVJdGVyYXRvckZvckVhY2goSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBwCiAg
ICAgdHlwZW5hbWUgSlNXcmFwcGVyOjpJdGVyYXRvcktleSBuZXh0S2V5OwogICAgIHR5cGVuYW1l
IEpTV3JhcHBlcjo6SXRlcmF0b3JWYWx1ZSBuZXh0VmFsdWU7CiAgICAgYXV0byBpdGVyYXRvciA9
IHdyYXBwZXItPndyYXBwZWQoKS5jcmVhdGVJdGVyYXRvcigpOwotICAgIHdoaWxlICghaXRlcmF0
b3IubmV4dChuZXh0S2V5LCBuZXh0VmFsdWUpKSB7CisgICAgd2hpbGUgKCFpdGVyYXRvci5uZXh0
KHN0YXRlLCBuZXh0S2V5LCBuZXh0VmFsdWUpKSB7CiAgICAgICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgYXJndW1lbnRzOwogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHRvSlMoJnN0YXRl
LCB3cmFwcGVyLT5nbG9iYWxPYmplY3QoKSwgbmV4dFZhbHVlKSk7CiAgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQodG9KUygmc3RhdGUsIHdyYXBwZXItPmdsb2JhbE9iamVjdCgpLCBuZXh0S2V5KSk7
CkBAIC0xNTMsNyArMTUzLDcgQEAgYm9vbCBKU0tleVZhbHVlSXRlcmF0b3I8SlNXcmFwcGVyPjo6
bmV4dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSYgdmEKIHsKICAgICB0eXBl
bmFtZSBKU1dyYXBwZXI6Okl0ZXJhdG9yS2V5IG5leHRLZXk7CiAgICAgdHlwZW5hbWUgSlNXcmFw
cGVyOjpJdGVyYXRvclZhbHVlIG5leHRWYWx1ZTsKLSAgICBpZiAobV9pdGVyYXRvci5uZXh0KG5l
eHRLZXksIG5leHRWYWx1ZSkpIHsKKyAgICBpZiAobV9pdGVyYXRvci5uZXh0KHN0YXRlLCBuZXh0
S2V5LCBuZXh0VmFsdWUpKSB7CiAgICAgICAgIHZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IGZjMDkxODc0ZDJkOTg0YjY3MGVh
MTc2MDUzYTQwOGJlNjAxZmM4M2MuLmRiOTE0NWFkZGIzZjA3OTI1MjEyNzkzMWM0MjZmOGRmYjY5
ZDAxNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCkBAIC00MDM5LDYgKzQwMzksNyBAQCBzdWIgR2V0TmF0aXZlVHlwZQogICAg
IG15ICRzdmdOYXRpdmVUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldFNWR1R5cGVOZWVkaW5nVGVh
ck9mZigkdHlwZSk7CiAgICAgcmV0dXJuICIke3N2Z05hdGl2ZVR5cGV9KiIgaWYgJHN2Z05hdGl2
ZVR5cGU7CiAgICAgcmV0dXJuICJSZWZQdHI8RE9NU3RyaW5nTGlzdD4iIGlmICR0eXBlIGVxICJE
T01TdHJpbmdMaXN0IjsKKyAgICByZXR1cm4gIlJlZlB0cjxGb250RmFjZT4iIGlmICR0eXBlIGVx
ICJGb250RmFjZSI7CiAgICAgcmV0dXJuICJSZWZQdHI8JHt0eXBlfT4iIGlmICRjb2RlR2VuZXJh
dG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSBhbmQgbm90ICR0eXBlIGVxICJBcnJheUJ1ZmZl
ciI7CiAgICAgcmV0dXJuICRuYXRpdmVUeXBleyR0eXBlfSBpZiBleGlzdHMgJG5hdGl2ZVR5cGV7
JHR5cGV9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAppbmRleCA1NTJlOTljZmExZTFl
YWFhNGFhMzI2OTU5MDAzOGRhYWE1YTAyMDE3Li4wZTgxZDc5ZTE4ZDJkNTc2NTlkMTZmZWViMTJl
OTQwYzY2MjUzNWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJDU1NGb250RmFjZS5oIgogCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VT
b3VyY2UuaCIKKyNpbmNsdWRlICJDU1NGb250RmFjZVNyY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NT
Rm9udEZhbWlseS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGZWF0dXJlVmFsdWUuaCIKICNpbmNsdWRl
ICJDU1NGb250U2VsZWN0b3IuaCIKQEAgLTM4LDE2ICszOSw0OCBAQAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgot
I2luY2x1ZGUgIkZvbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGb250RmFjZS5oIgogI2luY2x1ZGUg
IkZvbnRWYXJpYW50QnVpbGRlci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgor
I2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU0ZvbnRG
YWNlOjpDU1NGb250RmFjZShDU1NGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvciwgRm9udEZhY2Uq
IHdyYXBwZXIsIGJvb2wgaXNMb2NhbEZhbGxiYWNrKQordm9pZCBDU1NGb250RmFjZTo6YXBwZW5k
U291cmNlcyhDU1NGb250RmFjZSYgZm9udEZhY2UsIENTU1ZhbHVlTGlzdCYgc3JjTGlzdCwgRG9j
dW1lbnQqIGRvY3VtZW50LCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRv
d1RyZWUpCit7CisgICAgZm9yIChhdXRvJiBzcmMgOiBzcmNMaXN0KSB7CisgICAgICAgIC8vIEFu
IGl0ZW0gaW4gdGhlIGxpc3QgZWl0aGVyIHNwZWNpZmllcyBhIHN0cmluZyAobG9jYWwgZm9udCBu
YW1lKSBvciBhIFVSTCAocmVtb3RlIGZvbnQgdG8gZG93bmxvYWQpLgorICAgICAgICBDU1NGb250
RmFjZVNyY1ZhbHVlJiBpdGVtID0gZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oc3JjLmdl
dCgpKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENTU0ZvbnRGYWNlU291cmNlPiBzb3VyY2U7
CisgICAgICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gbnVsbHB0cjsK
KyAgICAgICAgYm9vbCBmb3VuZFNWR0ZvbnQgPSBmYWxzZTsKKworI2lmIEVOQUJMRShTVkdfRk9O
VFMpCisgICAgICAgIGZvdW5kU1ZHRm9udCA9IGl0ZW0uaXNTVkdGb250RmFjZVNyYygpIHx8IGl0
ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCk7CisgICAgICAgIGZvbnRGYWNlRWxlbWVudCA9IGl0ZW0u
c3ZnRm9udEZhY2VFbGVtZW50KCk7CisjZW5kaWYKKyAgICAgICAgaWYgKCFpdGVtLmlzTG9jYWwo
KSkgeworICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQgPyBkb2N1bWVu
dC0+c2V0dGluZ3MoKSA6IG51bGxwdHI7CisgICAgICAgICAgICBib29sIGFsbG93RG93bmxvYWRp
bmcgPSBmb3VuZFNWR0ZvbnQgfHwgKHNldHRpbmdzICYmIHNldHRpbmdzLT5kb3dubG9hZGFibGVC
aW5hcnlGb250c0VuYWJsZWQoKSk7CisgICAgICAgICAgICBpZiAoYWxsb3dEb3dubG9hZGluZyAm
JiBpdGVtLmlzU3VwcG9ydGVkRm9ybWF0KCkgJiYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoQ2FjaGVkRm9udCogY2FjaGVkRm9udCA9IGl0ZW0uY2FjaGVkRm9udChkb2N1bWVudCwg
Zm91bmRTVkdGb250LCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKSkK
KyAgICAgICAgICAgICAgICAgICAgc291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFj
ZVNvdXJjZT4oZm9udEZhY2UsIGl0ZW0ucmVzb3VyY2UoKSwgY2FjaGVkRm9udCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc291cmNlID0gc3RkOjptYWtlX3Vu
aXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oZm9udEZhY2UsIGl0ZW0ucmVzb3VyY2UoKSwgbnVsbHB0
ciwgZm9udEZhY2VFbGVtZW50KTsKKworICAgICAgICBpZiAoc291cmNlKQorICAgICAgICAgICAg
Zm9udEZhY2UuYWRvcHRTb3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKKyAgICB9CisgICAgZm9udEZh
Y2Uuc291cmNlc1BvcHVsYXRlZCgpOworfQorCitDU1NGb250RmFjZTo6Q1NTRm9udEZhY2UoQ1NT
Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IsIFN0eWxlUnVsZUZvbnRGYWNlKiBjc3NDb25uZWN0
aW9uLCBGb250RmFjZSogd3JhcHBlciwgYm9vbCBpc0xvY2FsRmFsbGJhY2spCiAgICAgOiBtX2Zv
bnRTZWxlY3Rvcihmb250U2VsZWN0b3IpCi0gICAgLCBtX3dyYXBwZXIod3JhcHBlcikKKyAgICAs
IG1fY3NzQ29ubmVjdGlvbihjc3NDb25uZWN0aW9uKQorICAgICwgbV93cmFwcGVyKHdyYXBwZXIg
PyB3cmFwcGVyLT5jcmVhdGVXZWFrUHRyKCkgOiBXZWFrUHRyPEZvbnRGYWNlPigpKQogICAgICwg
bV9pc0xvY2FsRmFsbGJhY2soaXNMb2NhbEZhbGxiYWNrKQogewogfQpAQCAtNTYsNiArODksMTUg
QEAgQ1NTRm9udEZhY2U6On5DU1NGb250RmFjZSgpCiB7CiB9CiAKK3ZvaWQgQ1NTRm9udEZhY2U6
Om5vdGlmeUNsaWVudHNPZkZvbnRQcm9wZXJ0eUNoYW5nZSgpCit7CisgICAgYXV0byBjbGllbnRz
Q29weSA9IG1fY2xpZW50czsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNsaWVudHNDb3B5KSB7
CisgICAgICAgIGlmIChtX2NsaWVudHMuY29udGFpbnMoY2xpZW50KSkKKyAgICAgICAgICAgIGNs
aWVudC0+Zm9udFByb3BlcnR5Q2hhbmdlZCgqdGhpcyk7CisgICAgfQorfQorCiBib29sIENTU0Zv
bnRGYWNlOjpzZXRGYW1pbGllcyhDU1NWYWx1ZSYgZmFtaWx5KQogewogICAgIGlmICghaXM8Q1NT
VmFsdWVMaXN0PihmYW1pbHkpKQpAQCAtNjUsNzggKzEwNyw5NCBAQCBib29sIENTU0ZvbnRGYWNl
OjpzZXRGYW1pbGllcyhDU1NWYWx1ZSYgZmFtaWx5KQogICAgIGlmICghZmFtaWx5TGlzdC5sZW5n
dGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4g
b2xkRmFtaWxpZXMgPSBtX2ZhbWlsaWVzOwogICAgIG1fZmFtaWxpZXMgPSAmZmFtaWx5TGlzdDsK
KworICAgIGF1dG8gY2xpZW50c0NvcHkgPSBtX2NsaWVudHM7CisgICAgZm9yIChhdXRvKiBjbGll
bnQgOiBjbGllbnRzQ29weSkgeworICAgICAgICBpZiAobV9jbGllbnRzLmNvbnRhaW5zKGNsaWVu
dCkpCisgICAgICAgICAgICBjbGllbnQtPmZvbnRQcm9wZXJ0eUNoYW5nZWQoKnRoaXMsIG9sZEZh
bWlsaWVzLmdldCgpKTsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDU1NG
b250RmFjZTo6c2V0U3R5bGUoQ1NTVmFsdWUmIHN0eWxlKQorT3B0aW9uYWw8Rm9udFRyYWl0c01h
c2s+IENTU0ZvbnRGYWNlOjpjYWxjdWxhdGVTdHlsZU1hc2soQ1NTVmFsdWUmIHN0eWxlKQogewog
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHN0eWxlKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKIAotICAgIHVuc2lnbmVkIHN0eWxlTWFzayA9
IDA7CiAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oc3R5bGUpLmdldFZh
bHVlSUQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Ci0gICAgICAgIHN0eWxlTWFzayA9
IEZvbnRTdHlsZU5vcm1hbE1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9u
dFN0eWxlTm9ybWFsTWFzazsKICAgICBjYXNlIENTU1ZhbHVlSXRhbGljOgogICAgIGNhc2UgQ1NT
VmFsdWVPYmxpcXVlOgotICAgICAgICBzdHlsZU1hc2sgPSBGb250U3R5bGVJdGFsaWNNYXNrOwot
ICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRTdHlsZUl0YWxpY01hc2s7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgc3R5bGVNYXNrID0gRm9udFN0eWxlTm9ybWFsTWFzazsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250U3R5bGVOb3JtYWxNYXNrOwogICAgIH0KIAot
ICAgIG1fdHJhaXRzTWFzayA9IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fdHJhaXRzTWFzaykgJiAofkZvbnRTdHlsZU1hc2spKSB8IHN0eWxlTWFz
ayk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZvbnRTdHlsZU5vcm1hbE1hc2s7CiB9
CiAKLWJvb2wgQ1NTRm9udEZhY2U6OnNldFdlaWdodChDU1NWYWx1ZSYgd2VpZ2h0KQorYm9vbCBD
U1NGb250RmFjZTo6c2V0U3R5bGUoQ1NTVmFsdWUmIHN0eWxlKQoreworICAgIGlmIChhdXRvIG1h
c2sgPSBjYWxjdWxhdGVTdHlsZU1hc2soc3R5bGUpKSB7CisgICAgICAgIG1fdHJhaXRzTWFzayA9
IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPigoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJh
aXRzTWFzaykgJiAofkZvbnRTdHlsZU1hc2spKSB8IG1hc2sudmFsdWUoKSk7CisKKyAgICAgICAg
bm90aWZ5Q2xpZW50c09mRm9udFByb3BlcnR5Q2hhbmdlKCk7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworT3B0aW9uYWw8Rm9udFRyYWl0c01h
c2s+IENTU0ZvbnRGYWNlOjpjYWxjdWxhdGVXZWlnaHRNYXNrKENTU1ZhbHVlJiB3ZWlnaHQpCiB7
CiAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4od2VpZ2h0KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKIAotICAgIHVuc2lnbmVkIHdlaWdodE1h
c2sgPSAwOwogICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHdlaWdodCku
Z2V0VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUJvbGQ6CiAgICAgY2FzZSBDU1NWYWx1
ZUJvbGRlcjoKICAgICBjYXNlIENTU1ZhbHVlNzAwOgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9u
dFdlaWdodDcwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFdlaWdo
dDcwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKICAgICBjYXNlIENTU1ZhbHVlNDAw
OgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDQwME1hc2s7Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm4gRm9udFdlaWdodDQwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZTkw
MDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQ5MDBNYXNrOwotICAgICAgICBicmVh
azsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ5MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFsdWU4
MDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0ODAwTWFzazsKLSAgICAgICAgYnJl
YWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0ODAwTWFzazsKICAgICBjYXNlIENTU1ZhbHVl
NjAwOgotICAgICAgICB3ZWlnaHRNYXNrID0gRm9udFdlaWdodDYwME1hc2s7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4gRm9udFdlaWdodDYwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1
ZTUwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9IEZvbnRXZWlnaHQ1MDBNYXNrOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRXZWlnaHQ1MDBNYXNrOwogICAgIGNhc2UgQ1NTVmFs
dWUzMDA6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2VpZ2h0MzAwTWFzazsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0MzAwTWFzazsKICAgICBjYXNlIENTU1Zh
bHVlTGlnaHRlcjoKICAgICBjYXNlIENTU1ZhbHVlMjAwOgotICAgICAgICB3ZWlnaHRNYXNrID0g
Rm9udFdlaWdodDIwME1hc2s7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gRm9udFdl
aWdodDIwME1hc2s7CiAgICAgY2FzZSBDU1NWYWx1ZTEwMDoKLSAgICAgICAgd2VpZ2h0TWFzayA9
IEZvbnRXZWlnaHQxMDBNYXNrOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIEZvbnRX
ZWlnaHQxMDBNYXNrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHdlaWdodE1hc2sgPSBGb250V2Vp
Z2h0NDAwTWFzazsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBGb250V2VpZ2h0NDAw
TWFzazsKICAgICB9CiAKLSAgICBtX3RyYWl0c01hc2sgPSBzdGF0aWNfY2FzdDxGb250VHJhaXRz
TWFzaz4oKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RyYWl0c01hc2spICYgKH5Gb250V2VpZ2h0
TWFzaykpIHwgd2VpZ2h0TWFzayk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZvbnRX
ZWlnaHQ0MDBNYXNrOworfQorCitib29sIENTU0ZvbnRGYWNlOjpzZXRXZWlnaHQoQ1NTVmFsdWUm
IHdlaWdodCkKK3sKKyAgICBpZiAoYXV0byBtYXNrID0gY2FsY3VsYXRlV2VpZ2h0TWFzayh3ZWln
aHQpKSB7CisgICAgICAgIG1fdHJhaXRzTWFzayA9IHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNr
Pigoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJhaXRzTWFzaykgJiAofkZvbnRXZWlnaHRNYXNr
KSkgfCBtYXNrLnZhbHVlKCkpOworCisgICAgICAgIG5vdGlmeUNsaWVudHNPZkZvbnRQcm9wZXJ0
eUNoYW5nZSgpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBDU1NGb250RmFjZTo6c2V0VW5pY29kZVJhbmdlKENTU1ZhbHVlJiB1
bmljb2RlUmFuZ2UpCkBAIC0xNTAsNiArMjA4LDkgQEAgYm9vbCBDU1NGb250RmFjZTo6c2V0VW5p
Y29kZVJhbmdlKENTU1ZhbHVlJiB1bmljb2RlUmFuZ2UpCiAgICAgICAgIENTU1VuaWNvZGVSYW5n
ZVZhbHVlJiByYW5nZSA9IGRvd25jYXN0PENTU1VuaWNvZGVSYW5nZVZhbHVlPihyYW5nZVZhbHVl
LmdldCgpKTsKICAgICAgICAgbV9yYW5nZXMuYXBwZW5kKFVuaWNvZGVSYW5nZShyYW5nZS5mcm9t
KCksIHJhbmdlLnRvKCkpKTsKICAgICB9CisKKyAgICBub3RpZnlDbGllbnRzT2ZGb250UHJvcGVy
dHlDaGFuZ2UoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNjAsNiArMjIxLDkgQEAg
Ym9vbCBDU1NGb250RmFjZTo6c2V0VmFyaWFudExpZ2F0dXJlcyhDU1NWYWx1ZSYgdmFyaWFudExp
Z2F0dXJlcykKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzID0g
bGlnYXR1cmVzLmRpc2NyZXRpb25hcnlMaWdhdHVyZXM7CiAgICAgbV92YXJpYW50U2V0dGluZ3Mu
aGlzdG9yaWNhbExpZ2F0dXJlcyA9IGxpZ2F0dXJlcy5oaXN0b3JpY2FsTGlnYXR1cmVzOwogICAg
IG1fdmFyaWFudFNldHRpbmdzLmNvbnRleHR1YWxBbHRlcm5hdGVzID0gbGlnYXR1cmVzLmNvbnRl
eHR1YWxBbHRlcm5hdGVzOworCisgICAgbm90aWZ5Q2xpZW50c09mRm9udFByb3BlcnR5Q2hhbmdl
KCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTY4LDYgKzIzMiw5IEBAIGJvb2wgQ1NT
Rm9udEZhY2U6OnNldFZhcmlhbnRQb3NpdGlvbihDU1NWYWx1ZSYgdmFyaWFudFBvc2l0aW9uKQog
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhcmlhbnRQb3NpdGlvbikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5wb3NpdGlvbiA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPih2YXJpYW50UG9zaXRpb24pOworCisgICAgbm90aWZ5Q2xpZW50
c09mRm9udFByb3BlcnR5Q2hhbmdlKCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTc2
LDYgKzI0Myw5IEBAIGJvb2wgQ1NTRm9udEZhY2U6OnNldFZhcmlhbnRDYXBzKENTU1ZhbHVlJiB2
YXJpYW50Q2FwcykKICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YXJpYW50Q2Fwcykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5jYXBzID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhcmlhbnRDYXBzKTsKKworICAgIG5vdGlmeUNsaWVu
dHNPZkZvbnRQcm9wZXJ0eUNoYW5nZSgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE4
Nyw2ICsyNTcsOSBAQCBib29sIENTU0ZvbnRGYWNlOjpzZXRWYXJpYW50TnVtZXJpYyhDU1NWYWx1
ZSYgdmFyaWFudE51bWVyaWMpCiAgICAgbV92YXJpYW50U2V0dGluZ3MubnVtZXJpY0ZyYWN0aW9u
ID0gbnVtZXJpYy5mcmFjdGlvbjsKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5udW1lcmljT3JkaW5h
bCA9IG51bWVyaWMub3JkaW5hbDsKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5udW1lcmljU2xhc2hl
ZFplcm8gPSBudW1lcmljLnNsYXNoZWRaZXJvOworCisgICAgbm90aWZ5Q2xpZW50c09mRm9udFBy
b3BlcnR5Q2hhbmdlKCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTk1LDYgKzI2OCw5
IEBAIGJvb2wgQ1NTRm9udEZhY2U6OnNldFZhcmlhbnRBbHRlcm5hdGVzKENTU1ZhbHVlJiB2YXJp
YW50QWx0ZXJuYXRlcykKICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YXJpYW50QWx0
ZXJuYXRlcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX3ZhcmlhbnRTZXR0aW5ncy5h
bHRlcm5hdGVzID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhcmlhbnRBbHRlcm5hdGVz
KTsKKworICAgIG5vdGlmeUNsaWVudHNPZkZvbnRQcm9wZXJ0eUNoYW5nZSgpOworCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTIwNCw2ICsyODAsOSBAQCBib29sIENTU0ZvbnRGYWNlOjpzZXRW
YXJpYW50RWFzdEFzaWFuKENTU1ZhbHVlJiB2YXJpYW50RWFzdEFzaWFuKQogICAgIG1fdmFyaWFu
dFNldHRpbmdzLmVhc3RBc2lhblZhcmlhbnQgPSBlYXN0QXNpYW4udmFyaWFudDsKICAgICBtX3Zh
cmlhbnRTZXR0aW5ncy5lYXN0QXNpYW5XaWR0aCA9IGVhc3RBc2lhbi53aWR0aDsKICAgICBtX3Zh
cmlhbnRTZXR0aW5ncy5lYXN0QXNpYW5SdWJ5ID0gZWFzdEFzaWFuLnJ1Ynk7CisKKyAgICBub3Rp
ZnlDbGllbnRzT2ZGb250UHJvcGVydHlDaGFuZ2UoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0yMTgsNiArMjk3LDkgQEAgYm9vbCBDU1NGb250RmFjZTo6c2V0RmVhdHVyZVNldHRpbmdz
KENTU1ZhbHVlJiBmZWF0dXJlU2V0dGluZ3MpCiAgICAgICAgIENTU0ZvbnRGZWF0dXJlVmFsdWUm
IGZlYXR1cmUgPSBkb3duY2FzdDxDU1NGb250RmVhdHVyZVZhbHVlPihyYW5nZVZhbHVlLmdldCgp
KTsKICAgICAgICAgbV9mZWF0dXJlU2V0dGluZ3MuaW5zZXJ0KEZvbnRGZWF0dXJlKGZlYXR1cmUu
dGFnKCksIGZlYXR1cmUudmFsdWUoKSkpOwogICAgIH0KKworICAgIG5vdGlmeUNsaWVudHNPZkZv
bnRQcm9wZXJ0eUNoYW5nZSgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIzNyw5ICsz
MTksMzkgQEAgdm9pZCBDU1NGb250RmFjZTo6YWRkQ2xpZW50KENsaWVudCYgY2xpZW50KQogCiB2
b2lkIENTU0ZvbnRGYWNlOjpyZW1vdmVDbGllbnQoQ2xpZW50JiBjbGllbnQpCiB7CisgICAgQVNT
RVJUKG1fY2xpZW50cy5jb250YWlucygmY2xpZW50KSk7CiAgICAgbV9jbGllbnRzLnJlbW92ZSgm
Y2xpZW50KTsKIH0KIAorUmVmPEZvbnRGYWNlPiBDU1NGb250RmFjZTo6d3JhcHBlcihKU0M6OkV4
ZWNTdGF0ZSYgZXhlY1N0YXRlKQoreworICAgIGlmIChtX3dyYXBwZXIpCisgICAgICAgIHJldHVy
biBSZWY8Rm9udEZhY2U+KCptX3dyYXBwZXIuZ2V0KCkpOworCisgICAgUmVmPEZvbnRGYWNlPiB3
cmFwcGVyID0gRm9udEZhY2U6OmNyZWF0ZShleGVjU3RhdGUsICp0aGlzKTsKKyAgICBzd2l0Y2gg
KG1fc3RhdHVzKSB7CisgICAgY2FzZSBTdGF0dXM6OlBlbmRpbmc6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU3RhdHVzOjpMb2FkaW5nOgorICAgICAgICB3cmFwcGVyLT5mb250U3RhdGVDaGFu
Z2VkKCp0aGlzLCBTdGF0dXM6OlBlbmRpbmcsIFN0YXR1czo6TG9hZGluZyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU3RhdHVzOjpUaW1lZE91dDoKKyAgICAgICAgd3JhcHBlci0+Zm9udFN0
YXRlQ2hhbmdlZCgqdGhpcywgU3RhdHVzOjpQZW5kaW5nLCBTdGF0dXM6OkxvYWRpbmcpOworICAg
ICAgICB3cmFwcGVyLT5mb250U3RhdGVDaGFuZ2VkKCp0aGlzLCBTdGF0dXM6OkxvYWRpbmcsIFN0
YXR1czo6VGltZWRPdXQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YXR1czo6U3VjY2Vz
czoKKyAgICAgICAgd3JhcHBlci0+Zm9udFN0YXRlQ2hhbmdlZCgqdGhpcywgU3RhdHVzOjpQZW5k
aW5nLCBTdGF0dXM6OkxvYWRpbmcpOworICAgICAgICB3cmFwcGVyLT5mb250U3RhdGVDaGFuZ2Vk
KCp0aGlzLCBTdGF0dXM6OlBlbmRpbmcsIFN0YXR1czo6U3VjY2Vzcyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgU3RhdHVzOjpGYWlsdXJlOgorICAgICAgICB3cmFwcGVyLT5mb250U3RhdGVD
aGFuZ2VkKCp0aGlzLCBTdGF0dXM6OlBlbmRpbmcsIFN0YXR1czo6TG9hZGluZyk7CisgICAgICAg
IHdyYXBwZXItPmZvbnRTdGF0ZUNoYW5nZWQoKnRoaXMsIFN0YXR1czo6UGVuZGluZywgU3RhdHVz
OjpGYWlsdXJlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fd3JhcHBlciA9IHdyYXBw
ZXItPmNyZWF0ZVdlYWtQdHIoKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwogdm9pZCBDU1NG
b250RmFjZTo6YWRvcHRTb3VyY2Uoc3RkOjp1bmlxdWVfcHRyPENTU0ZvbnRGYWNlU291cmNlPiYm
IHNvdXJjZSkKIHsKICAgICBtX3NvdXJjZXMuYXBwZW5kKFdURk1vdmUoc291cmNlKSk7CkBAIC0y
NjgsOCArMzgwLDggQEAgdm9pZCBDU1NGb250RmFjZTo6c2V0U3RhdHVzKFN0YXR1cyBuZXdTdGF0
dXMpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9j
bGllbnRzKQotICAgICAgICBjbGllbnQtPnN0YXRlQ2hhbmdlZCgqdGhpcywgbV9zdGF0dXMsIG5l
d1N0YXR1cyk7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNs
aWVudC0+Zm9udFN0YXRlQ2hhbmdlZCgqdGhpcywgbV9zdGF0dXMsIG5ld1N0YXR1cyk7CiAKICAg
ICBtX3N0YXR1cyA9IG5ld1N0YXR1czsKIH0KQEAgLTI4Miw5ICszOTQsMTAgQEAgdm9pZCBDU1NG
b250RmFjZTo6Zm9udExvYWRlZChDU1NGb250RmFjZVNvdXJjZSYpCiAgICAgaWYgKG1fc291cmNl
c1BvcHVsYXRlZCkKICAgICAgICAgcHVtcCgpOwogCisgICAgQVNTRVJUKG1fZm9udFNlbGVjdG9y
KTsKICAgICBtX2ZvbnRTZWxlY3Rvci0+Zm9udExvYWRlZCgpOwogCi0gICAgZm9yIChhdXRvJiBj
bGllbnQgOiBtX2NsaWVudHMpCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCiAg
ICAgICAgIGNsaWVudC0+Zm9udExvYWRlZCgqdGhpcyk7CiB9CiAKQEAgLTI5Niw5ICs0MDksMTAg
QEAgc2l6ZV90IENTU0ZvbnRGYWNlOjpwdW1wKCkKIAogICAgICAgICBpZiAoc291cmNlLT5zdGF0
dXMoKSA9PSBDU1NGb250RmFjZVNvdXJjZTo6U3RhdHVzOjpQZW5kaW5nKSB7CiAgICAgICAgICAg
ICBBU1NFUlQobV9zdGF0dXMgPT0gU3RhdHVzOjpQZW5kaW5nIHx8IG1fc3RhdHVzID09IFN0YXR1
czo6TG9hZGluZyB8fCBtX3N0YXR1cyA9PSBTdGF0dXM6OlRpbWVkT3V0KTsKKyAgICAgICAgICAg
IEFTU0VSVChtX2ZvbnRTZWxlY3Rvcik7CiAgICAgICAgICAgICBpZiAobV9zdGF0dXMgPT0gU3Rh
dHVzOjpQZW5kaW5nKQogICAgICAgICAgICAgICAgIHNldFN0YXR1cyhTdGF0dXM6OkxvYWRpbmcp
OwotICAgICAgICAgICAgc291cmNlLT5sb2FkKG1fZm9udFNlbGVjdG9yLmdldCgpKTsKKyAgICAg
ICAgICAgIHNvdXJjZS0+bG9hZCgqbV9mb250U2VsZWN0b3IpOwogICAgICAgICB9CiAKICAgICAg
ICAgc3dpdGNoIChzb3VyY2UtPnN0YXR1cygpKSB7CkBAIC0zNDUsOCArNDU5LDEwIEBAIFJlZlB0
cjxGb250PiBDU1NGb250RmFjZTo6Zm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgYm9vbCBzeW50CiAgICAgc2l6ZV90IHN0YXJ0SW5kZXggPSBwdW1wKCk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBtX3NvdXJjZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgYXV0byYgc291cmNlID0gbV9zb3VyY2VzW2ldOwotICAgICAgICBpZiAoc291cmNl
LT5zdGF0dXMoKSA9PSBDU1NGb250RmFjZVNvdXJjZTo6U3RhdHVzOjpQZW5kaW5nKQotICAgICAg
ICAgICAgc291cmNlLT5sb2FkKG1fZm9udFNlbGVjdG9yLmdldCgpKTsKKyAgICAgICAgaWYgKHNv
dXJjZS0+c3RhdHVzKCkgPT0gQ1NTRm9udEZhY2VTb3VyY2U6OlN0YXR1czo6UGVuZGluZykgewor
ICAgICAgICAgICAgQVNTRVJUKG1fZm9udFNlbGVjdG9yKTsKKyAgICAgICAgICAgIHNvdXJjZS0+
bG9hZCgqbV9mb250U2VsZWN0b3IpOworICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChzb3Vy
Y2UtPnN0YXR1cygpKSB7CiAgICAgICAgIGNhc2UgQ1NTRm9udEZhY2VTb3VyY2U6OlN0YXR1czo6
UGVuZGluZzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKaW5kZXggMTA3ZDlmMjgyMzg2YjZlNmM2
MWFkYjFiYjNkZjk5MGUyMGRlZmM0Zi4uYTQ4ZWZmNTRmNTRlMTlkZWRjMDJiNjZjZDAzZWU3NjMz
ODc2ZDI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKQEAgLTI3LDcgKzI3LDYgQEAKICNk
ZWZpbmUgQ1NTRm9udEZhY2VfaAogCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxlLmgiCi0jaW5j
bHVkZSAiQ1NTRm9udEZhY2VTb3VyY2UuaCIKICNpbmNsdWRlICJGb250RmVhdHVyZVNldHRpbmdz
LmgiCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtMzYsMjIg
KzM1LDI5IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4ZWNTdGF0ZTsKK30KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBDU1NGb250RmFjZVNvdXJjZTsKK2NsYXNzIENTU0ZvbnRTZWxl
Y3RvcjsKIGNsYXNzIENTU1NlZ21lbnRlZEZvbnRGYWNlOwogY2xhc3MgQ1NTVmFsdWU7CiBjbGFz
cyBDU1NWYWx1ZUxpc3Q7CitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsK
IGNsYXNzIEZvbnQ7CiBjbGFzcyBGb250RmFjZTsKIAotLy8gRklYTUU6IFRoaXMgY2xhc3MgZG9l
cyBub3QgbmVlZCB0byBiZSByZWZlcmVuY2UgY291bnRlZC4KIGNsYXNzIENTU0ZvbnRGYWNlIGZp
bmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTRm9udEZhY2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGUoQ1NTRm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3Is
IEZvbnRGYWNlKiB3cmFwcGVyID0gbnVsbHB0ciwgYm9vbCBpc0xvY2FsRmFsbGJhY2sgPSBmYWxz
ZSkKKyAgICBzdGF0aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGUoQ1NTRm9udFNlbGVjdG9yKiBm
b250U2VsZWN0b3IsIFN0eWxlUnVsZUZvbnRGYWNlKiBjc3NDb25uZWN0aW9uID0gbnVsbHB0ciwg
Rm9udEZhY2UqIHdyYXBwZXIgPSBudWxscHRyLCBib29sIGlzTG9jYWxGYWxsYmFjayA9IGZhbHNl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRm9udEZhY2UoZm9udFNl
bGVjdG9yLCB3cmFwcGVyLCBpc0xvY2FsRmFsbGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ1NTRm9udEZhY2UoZm9udFNlbGVjdG9yLCBjc3NDb25uZWN0aW9uLCB3cmFwcGVy
LCBpc0xvY2FsRmFsbGJhY2spKTsKICAgICB9CiAgICAgdmlydHVhbCB+Q1NTRm9udEZhY2UoKTsK
IApAQCAtNzgsNiArODQsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VHJhaXRzTWFzayhGb250
VHJhaXRzTWFzayB0cmFpdHNNYXNrKSB7IG1fdHJhaXRzTWFzayA9IHRyYWl0c01hc2s7IH0KICAg
ICBib29sIGlzTG9jYWxGYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNMb2NhbEZhbGxiYWNr
OyB9CiAgICAgU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAg
U3R5bGVSdWxlRm9udEZhY2UqIGNzc0Nvbm5lY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Nzc0Nv
bm5lY3Rpb24uZ2V0KCk7IH0KKworICAgIHN0YXRpYyBPcHRpb25hbDxGb250VHJhaXRzTWFzaz4g
Y2FsY3VsYXRlU3R5bGVNYXNrKENTU1ZhbHVlJiBzdHlsZSk7CisgICAgc3RhdGljIE9wdGlvbmFs
PEZvbnRUcmFpdHNNYXNrPiBjYWxjdWxhdGVXZWlnaHRNYXNrKENTU1ZhbHVlJiB3ZWlnaHQpOwog
CiAgICAgY2xhc3MgQ2xpZW50OwogICAgIHZvaWQgYWRkQ2xpZW50KENsaWVudCYpOwpAQCAtOTMs
MTEgKzEwMywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2FkKCk7CiAgICAgUmVmUHRyPEZvbnQ+
IGZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY0l0YWxpYyk7CiAKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VzKENTU0ZvbnRG
YWNlJiwgQ1NTVmFsdWVMaXN0JiwgRG9jdW1lbnQqLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJ
blVzZXJBZ2VudFNoYWRvd1RyZWUpOworCiAgICAgY2xhc3MgQ2xpZW50IHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZm9u
dExvYWRlZChDU1NGb250RmFjZSYpIHsgfTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0YXRlQ2hh
bmdlZChDU1NGb250RmFjZSYsIFN0YXR1cyBvbGRTdGF0ZSwgU3RhdHVzIG5ld1N0YXRlKSB7IFVO
VVNFRF9QQVJBTShvbGRTdGF0ZSk7IFVOVVNFRF9QQVJBTShuZXdTdGF0ZSk7IH07CisgICAgICAg
IHZpcnR1YWwgdm9pZCBmb250U3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiwgU3RhdHVzIG9sZFN0
YXRlLCBTdGF0dXMgbmV3U3RhdGUpIHsgVU5VU0VEX1BBUkFNKG9sZFN0YXRlKTsgVU5VU0VEX1BB
UkFNKG5ld1N0YXRlKTsgfTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZvbnRQcm9wZXJ0eUNoYW5n
ZWQoQ1NTRm9udEZhY2UmLCBDU1NWYWx1ZUxpc3QqIG9sZEZhbWlsaWVzID0gbnVsbHB0cikgeyBV
TlVTRURfUEFSQU0ob2xkRmFtaWxpZXMpOyB9OwogICAgIH07CiAKICAgICAvLyBQZW5kaW5nID0+
IExvYWRpbmcgID0+IFRpbWVkT3V0CkBAIC0xMzIsMjcgKzE0NSwzMCBAQCBwdWJsaWM6CiAgICAg
ICAgIFVDaGFyMzIgbV90bzsKICAgICB9OwogCi0gICAgRm9udEZhY2UqIHdyYXBwZXIoKSBjb25z
dCB7IHJldHVybiBtX3dyYXBwZXI7IH0KKyAgICAvLyBXZSBkb24ndCBndWFyYW50ZWUgdGhhdCB0
aGUgRm9udEZhY2Ugd3JhcHBlciB3aWxsIGJlIHRoZSBzYW1lIGV2ZXJ5IHRpbWUgeW91IGFzayBm
b3IgaXQuCisgICAgUmVmPEZvbnRGYWNlPiB3cmFwcGVyKEpTQzo6RXhlY1N0YXRlJik7CiAKICNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIGJvb2wgaGFzU1ZHRm9udEZhY2VTb3VyY2UoKSBjb25z
dDsKICNlbmRpZgogCiBwcml2YXRlOgotICAgIENTU0ZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciYs
IEZvbnRGYWNlKiwgYm9vbCBpc0xvY2FsRmFsbGJhY2spOworICAgIENTU0ZvbnRGYWNlKENTU0Zv
bnRTZWxlY3RvciosIFN0eWxlUnVsZUZvbnRGYWNlKiwgRm9udEZhY2UqLCBib29sIGlzTG9jYWxG
YWxsYmFjayk7CiAKICAgICBzaXplX3QgcHVtcCgpOwogICAgIHZvaWQgc2V0U3RhdHVzKFN0YXR1
cyk7CisgICAgdm9pZCBub3RpZnlDbGllbnRzT2ZGb250UHJvcGVydHlDaGFuZ2UoKTsKIAogICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG1fZmFtaWxpZXM7CiAgICAgRm9udFRyYWl0c01hc2sgbV90
cmFpdHNNYXNrIHsgc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KEZvbnRTdHlsZU5vcm1hbE1h
c2sgfCBGb250V2VpZ2h0NDAwTWFzaykgfTsKICAgICBWZWN0b3I8VW5pY29kZVJhbmdlPiBtX3Jh
bmdlczsKLSAgICBIYXNoU2V0PENsaWVudCo+IG1fY2xpZW50czsKLSAgICBSZWY8Q1NTRm9udFNl
bGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKLSAgICBGb250RmFjZSogbV93cmFwcGVyOwogICAgIEZv
bnRGZWF0dXJlU2V0dGluZ3MgbV9mZWF0dXJlU2V0dGluZ3M7CiAgICAgRm9udFZhcmlhbnRTZXR0
aW5ncyBtX3ZhcmlhbnRTZXR0aW5nczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU0Zv
bnRGYWNlU291cmNlPj4gbV9zb3VyY2VzOworICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1f
Zm9udFNlbGVjdG9yOworICAgIFJlZlB0cjxTdHlsZVJ1bGVGb250RmFjZT4gbV9jc3NDb25uZWN0
aW9uOworICAgIEhhc2hTZXQ8Q2xpZW50Kj4gbV9jbGllbnRzOworICAgIFdlYWtQdHI8Rm9udEZh
Y2U+IG1fd3JhcHBlcjsKICAgICBTdGF0dXMgbV9zdGF0dXMgeyBTdGF0dXM6OlBlbmRpbmcgfTsK
ICAgICBib29sIG1faXNMb2NhbEZhbGxiYWNrIHsgZmFsc2UgfTsKICAgICBib29sIG1fc291cmNl
c1BvcHVsYXRlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2VTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcApp
bmRleCBhMGY1ZmQ2NTMwNGQyOTY1ZDY3M2YyMjM0OWUzZTYyNTY5OTdiYTgzLi4xZWYzMTgxMDE2
ZGU2MjA3ODNmMjRhYTkwMzIzYjhjOGUyOTcwZWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNldC5jcHAKQEAgLTI2LDE3ICsyNiwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkNTU0ZvbnRGYWNlU2V0LmgiCiAKKyNpbmNsdWRlICJDU1NGb250RmFjZVNvdXJjZS5o
IgogI2luY2x1ZGUgIkNTU0ZvbnRGYW1pbHkuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5o
IgorI2luY2x1ZGUgIkNTU1NlZ21lbnRlZEZvbnRGYWNlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVM
aXN0LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgi
CiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Q1NTRm9udEZhY2VTZXQ6OkNTU0ZvbnRGYWNlU2V0KENTU0ZvbnRGYWNlU2V0Q2xpZW50JiBjbGll
bnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCitDU1NGb250RmFjZVNldDo6Q1NTRm9udEZhY2VT
ZXQoKQogewogfQogCkBAIC00NCw2ICs0NywyMiBAQCBDU1NGb250RmFjZVNldDo6fkNTU0ZvbnRG
YWNlU2V0KCkKIHsKICAgICBmb3IgKGF1dG8mIGZhY2UgOiBtX2ZhY2VzKQogICAgICAgICBmYWNl
LT5yZW1vdmVDbGllbnQoKnRoaXMpOworCisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9sb2NhbGx5
SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZSkgeworICAgICAgICBmb3IgKGF1dG8mIGZhY2UgOiBw
YWlyLnZhbHVlKQorICAgICAgICAgICAgZmFjZS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ1NTRm9udEZhY2VTZXQ6OmFkZENsaWVudChDU1NGb250RmFjZVNldENsaWVu
dCYgY2xpZW50KQoreworICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Cit9CisKK3ZvaWQgQ1NT
Rm9udEZhY2VTZXQ6OnJlbW92ZUNsaWVudChDU1NGb250RmFjZVNldENsaWVudCYgY2xpZW50KQor
eworICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoJmNsaWVudCkpOworICAgIG1fY2xpZW50
cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKIHZvaWQgQ1NTRm9udEZhY2VTZXQ6OmluY3JlbWVudEFj
dGl2ZUNvdW50KCkKQEAgLTUxLDcgKzcwLDggQEAgdm9pZCBDU1NGb250RmFjZVNldDo6aW5jcmVt
ZW50QWN0aXZlQ291bnQoKQogICAgICsrbV9hY3RpdmVDb3VudDsKICAgICBpZiAobV9hY3RpdmVD
b3VudCA9PSAxKSB7CiAgICAgICAgIG1fc3RhdHVzID0gU3RhdHVzOjpMb2FkaW5nOwotICAgICAg
ICBtX2NsaWVudC5zdGFydGVkTG9hZGluZygpOworICAgICAgICBmb3IgKGF1dG8qIGNsaWVudCA6
IG1fY2xpZW50cykKKyAgICAgICAgICAgIGNsaWVudC0+c3RhcnRlZExvYWRpbmcoKTsKICAgICB9
CiB9CiAKQEAgLTYwLDcgKzgwLDggQEAgdm9pZCBDU1NGb250RmFjZVNldDo6ZGVjcmVtZW50QWN0
aXZlQ291bnQoKQogICAgIC0tbV9hY3RpdmVDb3VudDsKICAgICBpZiAoIW1fYWN0aXZlQ291bnQp
IHsKICAgICAgICAgbV9zdGF0dXMgPSBTdGF0dXM6OkxvYWRlZDsKLSAgICAgICAgbV9jbGllbnQu
Y29tcGxldGVkTG9hZGluZygpOworICAgICAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xpZW50
cykKKyAgICAgICAgICAgIGNsaWVudC0+Y29tcGxldGVkTG9hZGluZygpOwogICAgIH0KIH0KIApA
QCAtNzAsMjMgKzkxLDE0MSBAQCBib29sIENTU0ZvbnRGYWNlU2V0OjpoYXNGYWNlKGNvbnN0IENT
U0ZvbnRGYWNlJiBmYWNlKSBjb25zdAogICAgICAgICBpZiAobXlGYWNlLnB0cigpID09ICZmYWNl
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCit2b2lkIENTU0ZvbnRGYWNlU2V0OjpyZWdpc3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5
KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fbG9jYWxseUluc3Rh
bGxlZEZhY2VzTG9va3VwVGFibGUuY29udGFpbnMoZmFtaWx5TmFtZSkpOworCisgICAgVmVjdG9y
PEZvbnRUcmFpdHNNYXNrPiB0cmFpdHNNYXNrcyA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2V0
VHJhaXRzSW5GYW1pbHkoZmFtaWx5TmFtZSk7CisgICAgaWYgKHRyYWl0c01hc2tzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+IGZhY2Vz
OworICAgIGZvciAoYXV0byBtYXNrIDogdHJhaXRzTWFza3MpIHsKKyAgICAgICAgUmVmPENTU0Zv
bnRGYWNlPiBmYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZShudWxscHRyLCBudWxscHRyLCBudWxs
cHRyLCB0cnVlKTsKKyAgICAgICAgCisgICAgICAgIFJlZjxDU1NWYWx1ZUxpc3Q+IGZhbWlseUxp
c3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisgICAgICAgIGZhbWls
eUxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlW
YWx1ZShmYW1pbHlOYW1lKSk7CisgICAgICAgIGZhY2UtPnNldEZhbWlsaWVzKGZhbWlseUxpc3Qu
Z2V0KCkpOworICAgICAgICBmYWNlLT5zZXRUcmFpdHNNYXNrKG1hc2spOworICAgICAgICBmYWNl
LT5hZG9wdFNvdXJjZShzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmYWNlLmdl
dCgpLCBmYW1pbHlOYW1lKSk7CisgICAgICAgIEFTU0VSVCghZmFjZS0+YWxsU291cmNlc0ZhaWxl
ZCgpKTsKKyAgICAgICAgZmFjZXMuYXBwZW5kKFdURk1vdmUoZmFjZSkpOworICAgIH0KKyAgICBt
X2xvY2FsbHlJbnN0YWxsZWRGYWNlc0xvb2t1cFRhYmxlLmFkZChmYW1pbHlOYW1lLCBXVEZNb3Zl
KGZhY2VzKSk7Cit9CisKK1N0cmluZyBDU1NGb250RmFjZVNldDo6ZmFtaWx5TmFtZUZyb21Qcmlt
aXRpdmUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5p
c0ZvbnRGYW1pbHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmZvbnRGYW1pbHkoKS5mYW1pbHlO
YW1lOworICAgIGlmICghdmFsdWUuaXNWYWx1ZUlEKCkpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgcmF3IHRleHQgZm9yIGFsbCB0aGUgZ2VuZXJpYyBm
YW1pbHkgdHlwZXMsIHNpbmNlIEBmb250LWZhY2UgaXMgYSB3YXkgb2YgYWN0dWFsbHkKKyAgICAv
LyBkZWZpbmluZyB3aGF0IGZvbnQgdG8gdXNlIGZvciB0aG9zZSB0eXBlcy4KKyAgICBzd2l0Y2gg
KHZhbHVlLmdldFZhbHVlSUQoKSkgeworICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAgICAg
cmV0dXJuIHNlcmlmRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6CisgICAgICAg
IHJldHVybiBzYW5zU2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6CisgICAg
ICAgIHJldHVybiBjdXJzaXZlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAg
ICAgICByZXR1cm4gZmFudGFzeUZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgor
ICAgICAgICByZXR1cm4gbW9ub3NwYWNlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQ
aWN0b2dyYXBoOgorICAgICAgICByZXR1cm4gcGljdG9ncmFwaEZhbWlseTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4geyB9OworICAgIH0KK30KKwordm9pZCBDU1NGb250RmFjZVNldDo6
YWRkVG9GYWNlc0xvb2t1cFRhYmxlKENTU0ZvbnRGYWNlJiBmYWNlKQoreworICAgIGlmICghZmFj
ZS5mYW1pbGllcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiAq
ZmFjZS5mYW1pbGllcygpKSB7CisgICAgICAgIFN0cmluZyBmYW1pbHlOYW1lID0gQ1NTRm9udEZh
Y2VTZXQ6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PihpdGVtLmdldCgpKSk7CisgICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9mYWNlc0xvb2t1
cFRhYmxlLmFkZChmYW1pbHlOYW1lLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4oKSk7CisgICAg
ICAgIGF1dG8mIGZhbWlseUZvbnRGYWNlcyA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cisg
ICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgLy8gbV9sb2Nh
bGx5SW5zdGFsbGVkRm9udEZhY2VzIGdyb3dzIHdpdGhvdXQgYm91bmQsIGV2ZW50dWFsbHkgZW5j
b3Jwb3JhdGluZyBldmVyeSBmb250IGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtLgorICAgICAgICAg
ICAgLy8gVGhpcyBpcyBieSBkZXNpZ24uCisgICAgICAgICAgICByZWdpc3RlckxvY2FsRm9udEZh
Y2VzRm9yRmFtaWx5KGZhbWlseU5hbWUpOworICAgICAgICAgICAgZmFtaWx5Rm9udEZhY2VzID0g
eyB9OworICAgICAgICB9CisKKyAgICAgICAgZmFtaWx5Rm9udEZhY2VzLmFwcGVuZChmYWNlKTsK
KyAgICB9Cit9CisKIHZvaWQgQ1NTRm9udEZhY2VTZXQ6OmFkZChDU1NGb250RmFjZSYgZmFjZSkK
IHsKICAgICBBU1NFUlQoIWhhc0ZhY2UoZmFjZSkpOwogCi0gICAgbV9mYWNlcy5hcHBlbmQoZmFj
ZSk7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+
Zm9udE1vZGlmaWVkKCk7CisKICAgICBmYWNlLmFkZENsaWVudCgqdGhpcyk7CisgICAgbV9jYWNo
ZS5jbGVhcigpOworCisgICAgaWYgKGZhY2UuY3NzQ29ubmVjdGlvbigpKQorICAgICAgICBtX2Zh
Y2VzLmluc2VydChtX2ZhY2VzUGFydGl0aW9uSW5kZXgrKywgZmFjZSk7CisgICAgZWxzZQorICAg
ICAgICBtX2ZhY2VzLmFwcGVuZChmYWNlKTsKKworICAgIGFkZFRvRmFjZXNMb29rdXBUYWJsZShm
YWNlKTsKKwogICAgIGlmIChmYWNlLnN0YXR1cygpID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6Okxv
YWRpbmcgfHwgZmFjZS5zdGF0dXMoKSA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpUaW1lZE91dCkK
ICAgICAgICAgaW5jcmVtZW50QWN0aXZlQ291bnQoKTsKIH0KIAordm9pZCBDU1NGb250RmFjZVNl
dDo6cmVtb3ZlRnJvbUZhY2VzTG9va3VwVGFibGUoY29uc3QgQ1NTRm9udEZhY2UmIGZhY2UsIGNv
bnN0IENTU1ZhbHVlTGlzdCYgZmFtaWxpZXNUb1NlYXJjaEZvcikKK3sKKyAgICBmb3IgKGF1dG8m
IGl0ZW0gOiBmYW1pbGllc1RvU2VhcmNoRm9yKSB7CisgICAgICAgIFN0cmluZyBmYW1pbHlOYW1l
ID0gQ1NTRm9udEZhY2VTZXQ6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKSk7CisgICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBt
X2ZhY2VzTG9va3VwVGFibGUuZmluZChmYW1pbHlOYW1lKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJh
dG9yICE9IG1fZmFjZXNMb29rdXBUYWJsZS5lbmQoKSk7CisgICAgICAgIGJvb2wgZm91bmQgPSBm
YWxzZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVyYXRvci0+dmFsdWUuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpdGVyYXRvci0+dmFsdWVbaV0ucHRyKCkgPT0g
JmZhY2UpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
aXRlcmF0b3ItPnZhbHVlLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kLCBmb3VuZCk7
CisgICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLnNpemUoKSkKKyAgICAgICAgICAgIG1fZmFj
ZXNMb29rdXBUYWJsZS5yZW1vdmUoaXRlcmF0b3IpOworICAgIH0KK30KKwogdm9pZCBDU1NGb250
RmFjZVNldDo6cmVtb3ZlKGNvbnN0IENTU0ZvbnRGYWNlJiBmYWNlKQogeworICAgIG1fY2FjaGUu
Y2xlYXIoKTsKKworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBj
bGllbnQtPmZvbnRNb2RpZmllZCgpOworCisgICAgaWYgKGZhY2UuZmFtaWxpZXMoKSkKKyAgICAg
ICAgcmVtb3ZlRnJvbUZhY2VzTG9va3VwVGFibGUoZmFjZSwgKmZhY2UuZmFtaWxpZXMoKSk7CisK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZmFjZXMuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgaWYgKG1fZmFjZXNbaV0ucHRyKCkgPT0gJmZhY2UpIHsKKyAgICAgICAgICAgIGlmIChpIDwg
bV9mYWNlc1BhcnRpdGlvbkluZGV4KQorICAgICAgICAgICAgICAgIC0tbV9mYWNlc1BhcnRpdGlv
bkluZGV4OwogICAgICAgICAgICAgbV9mYWNlc1tpXS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKICAg
ICAgICAgICAgIG1fZmFjZXMucmVtb3ZlKGkpOwogICAgICAgICAgICAgaWYgKGZhY2Uuc3RhdHVz
KCkgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6TG9hZGluZyB8fCBmYWNlLnN0YXR1cygpID09IENT
U0ZvbnRGYWNlOjpTdGF0dXM6OlRpbWVkT3V0KQpAQCAtOTcsMzAgKzIzNiw0MyBAQCB2b2lkIENT
U0ZvbnRGYWNlU2V0OjpyZW1vdmUoY29uc3QgQ1NTRm9udEZhY2UmIGZhY2UpCiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKLXN0YXRpYyBIYXNoU2V0PFN0cmluZz4gZXh0cmFjdEZhbWls
aWVzKGNvbnN0IENTU1ZhbHVlTGlzdCYgbGlzdCkKK3ZvaWQgQ1NTRm9udEZhY2VTZXQ6OmNsZWFy
KCkKIHsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwotICAgIGZvciAoYXV0byYgZmFtaWx5
IDogbGlzdCkgewotICAgICAgICBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGZhbWlseS5nZXQoKSk7Ci0gICAgICAgIGlmICgh
cHJpbWl0aXZlLmlzRm9udEZhbWlseSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IHJlc3VsdC5hZGQocHJpbWl0aXZlLmZvbnRGYW1pbHkoKS5mYW1pbHlOYW1lKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX2ZhY2VzLmNsZWFyKCk7CisgICAgbV9mYWNlc0xvb2t1
cFRhYmxlLmNsZWFyKCk7CisgICAgbV9sb2NhbGx5SW5zdGFsbGVkRmFjZXNMb29rdXBUYWJsZS5j
bGVhcigpOworICAgIG1fY2FjaGUuY2xlYXIoKTsKIH0KIAotc3RhdGljIGJvb2wgZmFtaWxpZXNJ
bnRlcnNlY3QoY29uc3QgQ1NTRm9udEZhY2UmIGZhY2UsIGNvbnN0IENTU1ZhbHVlTGlzdCYgcmVx
dWVzdCkKK0NTU0ZvbnRGYWNlJiBDU1NGb250RmFjZVNldDo6b3BlcmF0b3JbXShzaXplX3QgaSkK
IHsKLSAgICBpZiAoIWZhY2UuZmFtaWxpZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IEFTU0VSVChpIDwgZmFjZUNvdW50KCkpOworICAgIHJldHVybiBtX2ZhY2VzW2ldOworfQogCi0g
ICAgSGFzaFNldDxTdHJpbmc+IGZhY2VGYW1pbGllcyA9IGV4dHJhY3RGYW1pbGllcygqZmFjZS5m
YW1pbGllcygpKTsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVxdWVzdEZhbWlsaWVzID0gZXh0cmFj
dEZhbWlsaWVzKHJlcXVlc3QpOwotICAgIGZvciAoYXV0byYgZmFtaWx5MSA6IGZhY2VGYW1pbGll
cykgewotICAgICAgICBpZiAocmVxdWVzdEZhbWlsaWVzLmNvbnRhaW5zKGZhbWlseTEpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKK3N0YXRpYyBP
cHRpb25hbDxGb250VHJhaXRzTWFzaz4gY29tcHV0ZUZvbnRUcmFpdHNNYXNrKE11dGFibGVTdHls
ZVByb3BlcnRpZXMmIHN0eWxlKQoreworICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3R5bGVWYWx1ZSA9
IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpLmdldCgpOwor
ICAgIGlmICghc3R5bGVWYWx1ZSkKKyAgICAgICAgc3R5bGVWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKS5wdHIoKTsK
KworICAgIEZvbnRUcmFpdHNNYXNrIHN0eWxlTWFzazsKKyAgICBpZiAoYXV0byBzdHlsZU1hc2tP
cHRpb25hbCA9IENTU0ZvbnRGYWNlOjpjYWxjdWxhdGVTdHlsZU1hc2soKnN0eWxlVmFsdWUpKQor
ICAgICAgICBzdHlsZU1hc2sgPSBzdHlsZU1hc2tPcHRpb25hbC52YWx1ZSgpOworICAgIGVsc2UK
KyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHdlaWdodFZh
bHVlID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdl
dCgpOworICAgIGlmICghd2VpZ2h0VmFsdWUpCisgICAgICAgIHdlaWdodFZhbHVlID0gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwp
LnB0cigpOworCisgICAgRm9udFRyYWl0c01hc2sgd2VpZ2h0TWFzazsKKyAgICBpZiAoYXV0byB3
ZWlnaHRNYXNrT3B0aW9uYWwgPSBDU1NGb250RmFjZTo6Y2FsY3VsYXRlV2VpZ2h0TWFzaygqd2Vp
Z2h0VmFsdWUpKQorICAgICAgICB3ZWlnaHRNYXNrID0gd2VpZ2h0TWFza09wdGlvbmFsLnZhbHVl
KCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxGb250VHJhaXRzTWFzaz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0eWxlTWFzaykg
fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4od2VpZ2h0TWFzaykpOwogfQogCiBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4+IENTU0ZvbnRGYWNlU2V0OjptYXRjaGluZ0Zh
Y2VzKGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMp
CkBAIC0xMzIsMTQgKzI4NCwxNSBAQCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NG
b250RmFjZT4+IENTU0ZvbnRGYWNlU2V0OjptYXRjaGluZ0ZhY2VzKGNvbnN0CiAgICAgICAgIGVj
ID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgYm9vbCBk
ZXNpcmVkU3R5bGVJc05vcm1hbCA9IHRydWU7Ci0gICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gZGVz
aXJlZFN0eWxlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5
bGUpKSB7Ci0gICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpkZXNpcmVkU3R5bGUp
KSB7Ci0gICAgICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgICAgIGRlc2lyZWRTdHlsZUlzTm9ybWFsID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCpkZXNpcmVkU3R5bGUpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1
ZU5vcm1hbDsKKworICAgIEZvbnRUcmFpdHNNYXNrIGZvbnRUcmFpdHNNYXNrOworICAgIGlmIChh
dXRvIG1hc2tPcHRpb25hbCA9IGNvbXB1dGVGb250VHJhaXRzTWFzayhzdHlsZS5nZXQoKSkpCisg
ICAgICAgIGZvbnRUcmFpdHNNYXNrID0gbWFza09wdGlvbmFsLnZhbHVlKCk7CisgICAgZWxzZSB7
CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CisKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGZhbWlseSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KGZh
bWlseS5nZXQoKSkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwpAQCAtMTQ3LDIzICszMDAs
MjMgQEAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9udEZhY2U+PiBDU1NGb250
RmFjZVNldDo6bWF0Y2hpbmdGYWNlcyhjb25zdAogICAgIH0KICAgICBDU1NWYWx1ZUxpc3QmIGZh
bWlseUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpmYW1pbHkpOwogCi0gICAgLy8gTWF0
Y2ggQ1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZSgpCi0gICAgZm9yIChhdXRvJiBmYWNlIDog
bV9mYWNlcykgewotICAgICAgICBpZiAoIWZhbWlsaWVzSW50ZXJzZWN0KGZhY2UsIGZhbWlseUxp
c3QpIHx8IChkZXNpcmVkU3R5bGVJc05vcm1hbCAmJiAhKGZhY2UtPnRyYWl0c01hc2soKSAmIEZv
bnRTdHlsZU5vcm1hbE1hc2spKSkKKyAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gdW5pcXVlRmFt
aWxpZXM7CisgICAgZm9yIChhdXRvJiBmYW1pbHkgOiBmYW1pbHlMaXN0KSB7CisgICAgICAgIGNv
bnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oZmFtaWx5LmdldCgpKTsKKyAgICAgICAgaWYgKCFwcmltaXRpdmUuaXNGb250RmFtaWx5
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChmYWNlLmdl
dCgpKTsKKyAgICAgICAgdW5pcXVlRmFtaWxpZXMuYWRkKHByaW1pdGl2ZS5mb250RmFtaWx5KCku
ZmFtaWx5TmFtZSk7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19CiAKLXZvaWQgQ1NTRm9u
dEZhY2VTZXQ6OmxvYWQoY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGF1dG8gbWF0Y2hpbmdGYWNlcyA9IHRoaXMtPm1hdGNo
aW5nRmFjZXMoZm9udCwgdGV4dCwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwor
ICAgIGZvciAoYXV0byYgZmFtaWx5IDogdW5pcXVlRmFtaWxpZXMpIHsKKyAgICAgICAgQ1NTU2Vn
bWVudGVkRm9udEZhY2UqIGZhY2VzID0gZ2V0Rm9udEZhY2UoZm9udFRyYWl0c01hc2ssIGZhbWls
eSk7CisgICAgICAgIGlmICghZmFjZXMpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
Zm9yIChhdXRvJiBjb25zdGl0dWVudEZhY2UgOiBmYWNlcy0+Y29uc3RpdHVlbnRGYWNlcygpKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb25zdGl0dWVudEZhY2UuZ2V0KCkpOworICAgIH0K
IAotICAgIGZvciAoYXV0byYgZmFjZSA6IG1hdGNoaW5nRmFjZXMpCi0gICAgICAgIGZhY2UuZ2V0
KCkubG9hZCgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGJvb2wgQ1NTRm9udEZhY2VTZXQ6
OmNoZWNrKGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25D
b2RlJiBlYykKQEAgLTE3OSw3ICszMzIsMTE5IEBAIGJvb2wgQ1NTRm9udEZhY2VTZXQ6OmNoZWNr
KGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ1NTRm9udEZhY2VTZXQ6OnN0YXRlQ2hhbmdlZChD
U1NGb250RmFjZSYgZmFjZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBvbGRTdGF0ZSwgQ1NTRm9udEZh
Y2U6OlN0YXR1cyBuZXdTdGF0ZSkKK2NsYXNzIEZvbnRGYWNlQ29tcGFyYXRvciB7CitwdWJsaWM6
CisgICAgRm9udEZhY2VDb21wYXJhdG9yKEZvbnRUcmFpdHNNYXNrIGRlc2lyZWRUcmFpdHNNYXNr
Rm9yQ29tcGFyaXNvbikKKyAgICAgICAgOiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNv
bihkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24pCisgICAgeworICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNv
biAmIEZvbnRXZWlnaHRNYXNrKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
Q1NTRm9udEZhY2UmIGZpcnN0LCBjb25zdCBDU1NGb250RmFjZSYgc2Vjb25kKQorICAgIHsKKyAg
ICAgICAgRm9udFRyYWl0c01hc2sgZmlyc3RUcmFpdHNNYXNrID0gZmlyc3QudHJhaXRzTWFzaygp
OworICAgICAgICBGb250VHJhaXRzTWFzayBzZWNvbmRUcmFpdHNNYXNrID0gc2Vjb25kLnRyYWl0
c01hc2soKTsKKworICAgICAgICBib29sIGZpcnN0SGFzRGVzaXJlZFN0eWxlID0gZmlyc3RUcmFp
dHNNYXNrICYgbV9kZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVNYXNr
OworICAgICAgICBib29sIHNlY29uZEhhc0Rlc2lyZWRTdHlsZSA9IHNlY29uZFRyYWl0c01hc2sg
JiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRTdHlsZU1hc2s7CisKKyAg
ICAgICAgaWYgKGZpcnN0SGFzRGVzaXJlZFN0eWxlICE9IHNlY29uZEhhc0Rlc2lyZWRTdHlsZSkK
KyAgICAgICAgICAgIHJldHVybiBmaXJzdEhhc0Rlc2lyZWRTdHlsZTsKKworICAgICAgICBpZiAo
KG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlSXRhbGljTWFzaykg
JiYgIWZpcnN0LmlzTG9jYWxGYWxsYmFjaygpICYmICFzZWNvbmQuaXNMb2NhbEZhbGxiYWNrKCkp
IHsKKyAgICAgICAgICAgIC8vIFByZWZlciBhIGZvbnQgdGhhdCBoYXMgaW5kaWNhdGVkIHRoYXQg
aXQgY2FuIG9ubHkgc3VwcG9ydCBpdGFsaWNzIHRvIGEgZm9udCB0aGF0IGNsYWltcyB0byBzdXBw
b3J0CisgICAgICAgICAgICAvLyBhbGwgc3R5bGVzLiBUaGUgc3BlY2lhbGl6ZWQgZm9udCBpcyBt
b3JlIGxpa2VseSB0byBiZSB0aGUgb25lIHRoZSBhdXRob3Igd2FudHMgdXNlZC4KKyAgICAgICAg
ICAgIGJvb2wgZmlyc3RSZXF1aXJlc0l0YWxpY3MgPSAoZmlyc3RUcmFpdHNNYXNrICYgRm9udFN0
eWxlSXRhbGljTWFzaykgJiYgIShmaXJzdFRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNr
KTsKKyAgICAgICAgICAgIGJvb2wgc2Vjb25kUmVxdWlyZXNJdGFsaWNzID0gKHNlY29uZFRyYWl0
c01hc2sgJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhKHNlY29uZFRyYWl0c01hc2sgJiBGb250
U3R5bGVOb3JtYWxNYXNrKTsKKyAgICAgICAgICAgIGlmIChmaXJzdFJlcXVpcmVzSXRhbGljcyAh
PSBzZWNvbmRSZXF1aXJlc0l0YWxpY3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0UmVx
dWlyZXNJdGFsaWNzOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNlY29uZFRyYWl0c01hc2sg
JiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRXZWlnaHRNYXNrKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoZmlyc3RUcmFpdHNNYXNrICYgbV9k
ZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250V2VpZ2h0TWFzaykKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEv
V0QtY3NzMy1mb250cy0yMDExMTAwNC8jZm9udC1tYXRjaGluZy1hbGdvcml0aG0gc2F5cyA6Cisg
ICAgICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgbGVzcyB0aGFuIDQwMCwgd2Vp
Z2h0cyBiZWxvdyB0aGUgZGVzaXJlZCB3ZWlnaHQgYXJlIGNoZWNrZWQgaW4gZGVzY2VuZGluZyBv
cmRlciBmb2xsb3dlZCBieSB3ZWlnaHRzIGFib3ZlIHRoZSBkZXNpcmVkIHdlaWdodCBpbiBhc2Nl
bmRpbmcgb3JkZXIgdW50aWwgYSBtYXRjaCBpcyBmb3VuZC4KKyAgICAgICAgLy8gICAtIElmIHRo
ZSBkZXNpcmVkIHdlaWdodCBpcyBncmVhdGVyIHRoYW4gNTAwLCB3ZWlnaHRzIGFib3ZlIHRoZSBk
ZXNpcmVkIHdlaWdodCBhcmUgY2hlY2tlZCBpbiBhc2NlbmRpbmcgb3JkZXIgZm9sbG93ZWQgYnkg
d2VpZ2h0cyBiZWxvdyB0aGUgZGVzaXJlZCB3ZWlnaHQgaW4gZGVzY2VuZGluZyBvcmRlciB1bnRp
bCBhIG1hdGNoIGlzIGZvdW5kLgorICAgICAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0
IGlzIDQwMCwgNTAwIGlzIGNoZWNrZWQgZmlyc3QgYW5kIHRoZW4gdGhlIHJ1bGUgZm9yIGRlc2ly
ZWQgd2VpZ2h0cyBsZXNzIHRoYW4gNDAwIGlzIHVzZWQuCisgICAgICAgIC8vICAgLSBJZiB0aGUg
ZGVzaXJlZCB3ZWlnaHQgaXMgNTAwLCA0MDAgaXMgY2hlY2tlZCBmaXJzdCBhbmQgdGhlbiB0aGUg
cnVsZSBmb3IgZGVzaXJlZCB3ZWlnaHRzIGxlc3MgdGhhbiA0MDAgaXMgdXNlZC4KKworICAgICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFsbGJhY2tSdWxlU2V0cyA9IDk7CisgICAgICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBydWxlc1BlclNldCA9IDg7CisgICAgICAgIHN0YXRpYyBjb25z
dCBGb250VHJhaXRzTWFzayB3ZWlnaHRGYWxsYmFja1J1bGVTZXRzW2ZhbGxiYWNrUnVsZVNldHNd
W3J1bGVzUGVyU2V0XSA9IHsKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDIwME1hc2ssIEZvbnRX
ZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRX
ZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRX
ZWlnaHQ5MDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2Vp
Z2h0MzAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2Vp
Z2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2Vp
Z2h0OTAwTWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdo
dDEwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdo
dDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdo
dDkwME1hc2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQz
MDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQ2
MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5
MDBNYXNrIH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAw
TWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrLCBGb250V2VpZ2h0NjAw
TWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAw
TWFzayB9LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDgwME1h
c2ssIEZvbnRXZWlnaHQ5MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1h
c2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1h
c2sgfSwKKyAgICAgICAgICAgIHsgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNr
LCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNr
LCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdlaWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNr
IH0sCisgICAgICAgICAgICB7IEZvbnRXZWlnaHQ5MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywg
Rm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywg
Rm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9
LAorICAgICAgICAgICAgeyBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDcwME1hc2ssIEZv
bnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZv
bnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfQor
ICAgICAgICB9OworCisgICAgICAgIHVuc2lnbmVkIHJ1bGVTZXRJbmRleCA9IDA7CisgICAgICAg
IGZvciAoOyAhKG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgKDEgPDwgKEZvbnRX
ZWlnaHQxMDBCaXQgKyBydWxlU2V0SW5kZXgpKSk7IHJ1bGVTZXRJbmRleCsrKSB7IH0KKworICAg
ICAgICBjb25zdCBGb250VHJhaXRzTWFzayogd2VpZ2h0RmFsbGJhY2tSdWxlID0gd2VpZ2h0RmFs
bGJhY2tSdWxlU2V0c1tydWxlU2V0SW5kZXhdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcnVsZXNQZXJTZXQ7ICsraSkgeworICAgICAgICAgICAgaWYgKHNlY29uZFRyYWl0c01h
c2sgJiB3ZWlnaHRGYWxsYmFja1J1bGVbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgaWYgKGZpcnN0VHJhaXRzTWFzayAmIHdlaWdodEZhbGxiYWNrUnVsZVtp
XSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRm9udFRyYWl0c01hc2sgbV9kZXNp
cmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb247Cit9OworCitDU1NTZWdtZW50ZWRGb250RmFjZSog
Q1NTRm9udEZhY2VTZXQ6OmdldEZvbnRGYWNlKEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2ssIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2ZhY2Vz
TG9va3VwVGFibGUuZmluZChmYW1pbHkpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2ZhY2VzTG9v
a3VwVGFibGUuZW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8mIGZhbWls
eUZvbnRGYWNlcyA9IGl0ZXJhdG9yLT52YWx1ZTsKKworICAgIGF1dG8mIHNlZ21lbnRlZEZvbnRG
YWNlQ2FjaGUgPSBtX2NhY2hlLmFkZChmYW1pbHksIEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5p
cXVlX3B0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4+KCkpLml0ZXJhdG9yLT52YWx1ZTsKKworICAg
IGF1dG8mIGZhY2UgPSBzZWdtZW50ZWRGb250RmFjZUNhY2hlLmFkZCh0cmFpdHNNYXNrLCBudWxs
cHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgaWYgKGZhY2UpCisgICAgICAgIHJldHVybiBmYWNl
LmdldCgpOworCisgICAgZmFjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTU2VnbWVudGVkRm9udEZh
Y2U+KCk7CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4s
IDMyPiBjYW5kaWRhdGVGb250RmFjZXM7CisgICAgZm9yIChpbnQgaSA9IGZhbWlseUZvbnRGYWNl
cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBDU1NGb250RmFjZSYgY2FuZGlk
YXRlID0gZmFtaWx5Rm9udEZhY2VzW2ldOworICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVUcmFp
dHNNYXNrID0gY2FuZGlkYXRlLnRyYWl0c01hc2soKTsKKyAgICAgICAgaWYgKCh0cmFpdHNNYXNr
ICYgRm9udFN0eWxlTm9ybWFsTWFzaykgJiYgIShjYW5kaWRhdGVUcmFpdHNNYXNrICYgRm9udFN0
eWxlTm9ybWFsTWFzaykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FuZGlkYXRl
Rm9udEZhY2VzLmFwcGVuZChjYW5kaWRhdGUpOworICAgIH0KKworICAgIGF1dG8gbG9jYWxJdGVy
YXRvciA9IG1fbG9jYWxseUluc3RhbGxlZEZhY2VzTG9va3VwVGFibGUuZmluZChmYW1pbHkpOwor
ICAgIGlmIChsb2NhbEl0ZXJhdG9yICE9IG1fbG9jYWxseUluc3RhbGxlZEZhY2VzTG9va3VwVGFi
bGUuZW5kKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBsb2NhbEl0ZXJhdG9y
LT52YWx1ZSkgeworICAgICAgICAgICAgdW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNh
bmRpZGF0ZS0+dHJhaXRzTWFzaygpOworICAgICAgICAgICAgaWYgKCh0cmFpdHNNYXNrICYgRm9u
dFN0eWxlTm9ybWFsTWFzaykgJiYgIShjYW5kaWRhdGVUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9y
bWFsTWFzaykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjYW5kaWRh
dGVGb250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBz
dGQ6OnN0YWJsZV9zb3J0KGNhbmRpZGF0ZUZvbnRGYWNlcy5iZWdpbigpLCBjYW5kaWRhdGVGb250
RmFjZXMuZW5kKCksIEZvbnRGYWNlQ29tcGFyYXRvcih0cmFpdHNNYXNrKSk7CisgICAgZm9yIChh
dXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVGb250RmFjZXMpCisgICAgICAgIGZhY2UtPmFwcGVu
ZEZvbnRGYWNlKGNhbmRpZGF0ZS5nZXQoKSk7CisKKyAgICByZXR1cm4gZmFjZS5nZXQoKTsKK30K
Kwordm9pZCBDU1NGb250RmFjZVNldDo6Zm9udFN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYgZmFj
ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBvbGRTdGF0ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdT
dGF0ZSkKIHsKICAgICBBU1NFUlQoaGFzRmFjZShmYWNlKSk7CiAgICAgaWYgKG9sZFN0YXRlID09
IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlBlbmRpbmcpIHsKQEAgLTE4OCw5ICs0NTMsMjMgQEAgdm9p
ZCBDU1NGb250RmFjZVNldDo6c3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiBmYWNlLCBDU1NGb250
RmFjZTo6U3RhdHVzIG9sZFN0YXQKICAgICB9CiAgICAgaWYgKG5ld1N0YXRlID09IENTU0ZvbnRG
YWNlOjpTdGF0dXM6OlN1Y2Nlc3MgfHwgbmV3U3RhdGUgPT0gQ1NTRm9udEZhY2U6OlN0YXR1czo6
RmFpbHVyZSkgewogICAgICAgICBBU1NFUlQob2xkU3RhdGUgPT0gQ1NTRm9udEZhY2U6OlN0YXR1
czo6TG9hZGluZyB8fCBvbGRTdGF0ZSA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpUaW1lZE91dCk7
Ci0gICAgICAgIG1fY2xpZW50LmZhY2VGaW5pc2hlZChmYWNlLCBuZXdTdGF0ZSk7CisgICAgICAg
IGZvciAoYXV0byogY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICAgICAgY2xpZW50LT5mYWNl
RmluaXNoZWQoZmFjZSwgbmV3U3RhdGUpOwogICAgICAgICBkZWNyZW1lbnRBY3RpdmVDb3VudCgp
OwogICAgIH0KIH0KIAordm9pZCBDU1NGb250RmFjZVNldDo6Zm9udFByb3BlcnR5Q2hhbmdlZChD
U1NGb250RmFjZSYgZmFjZSwgQ1NTVmFsdWVMaXN0KiBvbGRGYW1pbGllcykKK3sKKyAgICBtX2Nh
Y2hlLmNsZWFyKCk7CisKKyAgICBpZiAob2xkRmFtaWxpZXMpIHsKKyAgICAgICAgcmVtb3ZlRnJv
bUZhY2VzTG9va3VwVGFibGUoZmFjZSwgKm9sZEZhbWlsaWVzKTsKKyAgICAgICAgYWRkVG9GYWNl
c0xvb2t1cFRhYmxlKGZhY2UpOworICAgIH0KKworICAgIGZvciAoYXV0byogY2xpZW50IDogbV9j
bGllbnRzKQorICAgICAgICBjbGllbnQtPmZvbnRNb2RpZmllZCgpOworfQorCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNldC5oCmluZGV4IDY2OTQ3ZDc4MWI4YzgxZDg0MjFmZTA5MmExYjZh
Y2JlYTQyMzRiOWYuLjdkZmVkZjJiM2ExMTcwY2RhYTcxMGU2NDVjMzc3ZDdmODhmZjdlOWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5oCkBAIC0yNywzNCArMjcsNDYgQEAKICNkZWZp
bmUgQ1NTRm9udEZhY2VTZXRfaAogCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2UuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTUHJp
bWl0aXZlVmFsdWU7CiBjbGFzcyBGb250RmFjZVNldDsKIAogY2xhc3MgQ1NTRm9udEZhY2VTZXRD
bGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlU2V0Q2xpZW50KCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGZhY2VGaW5pc2hlZChDU1NGb250RmFjZSYsIENTU0ZvbnRGYWNl
OjpTdGF0dXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZExvYWRpbmcoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGNvbXBsZXRlZExvYWRpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGZhY2VGaW5pc2hlZChDU1NGb250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMpIHsgfTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZm9udE1vZGlmaWVkKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBzdGFy
dGVkTG9hZGluZygpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGxldGVkTG9hZGluZygpIHsg
fTsKIH07CiAKLWNsYXNzIENTU0ZvbnRGYWNlU2V0IGZpbmFsIDogcHVibGljIENTU0ZvbnRGYWNl
OjpDbGllbnQgeworY2xhc3MgQ1NTRm9udEZhY2VTZXQgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRl
ZDxDU1NGb250RmFjZVNldD4sIHB1YmxpYyBDU1NGb250RmFjZTo6Q2xpZW50IHsKIHB1YmxpYzoK
LSAgICBDU1NGb250RmFjZVNldChDU1NGb250RmFjZVNldENsaWVudCYpOworICAgIHN0YXRpYyBS
ZWY8Q1NTRm9udEZhY2VTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDU1NGb250RmFjZVNldCgpKTsKKyAgICB9CiAgICAgfkNTU0ZvbnRGYWNlU2V0KCk7
CiAKKyAgICB2b2lkIGFkZENsaWVudChDU1NGb250RmFjZVNldENsaWVudCYpOworICAgIHZvaWQg
cmVtb3ZlQ2xpZW50KENTU0ZvbnRGYWNlU2V0Q2xpZW50Jik7CisKICAgICBib29sIGhhc0ZhY2Uo
Y29uc3QgQ1NTRm9udEZhY2UmKSBjb25zdDsKICAgICBzaXplX3QgZmFjZUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9mYWNlcy5zaXplKCk7IH0KICAgICB2b2lkIGFkZChDU1NGb250RmFjZSYpOwog
ICAgIHZvaWQgcmVtb3ZlKGNvbnN0IENTU0ZvbnRGYWNlJik7Ci0gICAgY29uc3QgQ1NTRm9udEZh
Y2UmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fZmFjZXNbaV07IH0KKyAg
ICB2b2lkIGNsZWFyKCk7CisgICAgQ1NTRm9udEZhY2UmIG9wZXJhdG9yW10oc2l6ZV90IGkpOwog
Ci0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBF
eGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBjaGVjayhjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0
IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgQ1NTU2VnbWVudGVkRm9udEZh
Y2UqIGdldEZvbnRGYWNlKEZvbnRUcmFpdHNNYXNrLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eSk7CisKICAgICBlbnVtIGNsYXNzIFN0YXR1cyB7CiAgICAgICAgIExvYWRpbmcsCiAgICAgICAg
IExvYWRlZApAQCAtNjQsMTQgKzc2LDI5IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4+IG1hdGNoaW5nRmFjZXMoY29uc3QgU3RyaW5nJiBm
b250LCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToKKyAg
ICBDU1NGb250RmFjZVNldCgpOworCisgICAgdm9pZCByZW1vdmVGcm9tRmFjZXNMb29rdXBUYWJs
ZShjb25zdCBDU1NGb250RmFjZSYsIGNvbnN0IENTU1ZhbHVlTGlzdCYgZmFtaWxpZXNUb1NlYXJj
aEZvcik7CisgICAgdm9pZCBhZGRUb0ZhY2VzTG9va3VwVGFibGUoQ1NTRm9udEZhY2UmKTsKKwog
ICAgIHZvaWQgaW5jcmVtZW50QWN0aXZlQ291bnQoKTsKICAgICB2b2lkIGRlY3JlbWVudEFjdGl2
ZUNvdW50KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiwg
Q1NTRm9udEZhY2U6OlN0YXR1cyBvbGRTdGF0ZSwgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0
ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGZvbnRTdGF0ZUNoYW5nZWQoQ1NTRm9udEZh
Y2UmLCBDU1NGb250RmFjZTo6U3RhdHVzIG9sZFN0YXRlLCBDU1NGb250RmFjZTo6U3RhdHVzIG5l
d1N0YXRlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9udFByb3BlcnR5Q2hhbmdlZChD
U1NGb250RmFjZSYsIENTU1ZhbHVlTGlzdCogb2xkRmFtaWxpZXMgPSBudWxscHRyKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgcmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseShjb25zdCBTdHJp
bmcmKTsKKworICAgIHN0YXRpYyBTdHJpbmcgZmFtaWx5TmFtZUZyb21QcmltaXRpdmUoY29uc3Qg
Q1NTUHJpbWl0aXZlVmFsdWUmKTsKIAotICAgIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PiBtX2Zh
Y2VzOworICAgIC8vIG1fZmFjZXMgc2hvdWxkIGhvbGQgYWxsIHRoZSBzYW1lIGZvbnRzIGFzIHRo
ZSBvbmVzIGluc2lkZSBpbnNpZGUgbV9mYWNlc0xvb2t1cFRhYmxlLgorICAgIFZlY3RvcjxSZWY8
Q1NTRm9udEZhY2U+PiBtX2ZhY2VzOyAvLyBXZSBzaG91bGQgaW52ZXN0aWdhdGUgbW92aW5nIG1f
ZmFjZXMgdG8gRm9udEZhY2VTZXQgYW5kIG1ha2luZyBpdCByZWZlcmVuY2UgRm9udEZhY2VzLiBU
aGlzIG1heSBjbGVhbiB1cCB0aGUgZm9udCBsb2FkaW5nIGRlc2lnbi4KKyAgICBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+
IG1fZmFjZXNMb29rdXBUYWJsZTsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxDU1NG
b250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IG1fbG9jYWxseUluc3RhbGxlZEZh
Y2VzTG9va3VwVGFibGU7CisgICAgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8dW5zaWduZWQsIHN0
ZDo6dW5pcXVlX3B0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4+LCBBU0NJSUNhc2VJbnNlbnNpdGl2
ZUhhc2g+IG1fY2FjaGU7CisgICAgc2l6ZV90IG1fZmFjZXNQYXJ0aXRpb25JbmRleCB7IDAgfTsg
Ly8gQWxsIGVudHJpZXMgaW4gbV9mYWNlcyBiZWZvcmUgdGhpcyBpbmRleCBhcmUgQ1NTLWNvbm5l
Y3RlZC4KICAgICBTdGF0dXMgbV9zdGF0dXMgeyBTdGF0dXM6OkxvYWRlZCB9OwotICAgIENTU0Zv
bnRGYWNlU2V0Q2xpZW50JiBtX2NsaWVudDsKKyAgICBIYXNoU2V0PENTU0ZvbnRGYWNlU2V0Q2xp
ZW50Kj4gbV9jbGllbnRzOwogICAgIHVuc2lnbmVkIG1fYWN0aXZlQ291bnQgeyAwIH07CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCmluZGV4IDFlMjliNTdmZmRmZTM4
MDc0NmU2NzIzMjMwZDU1MzQ5YTU5ZmI5OWYuLmY2MjAyNWQ2OTAyNzgyYmQzNTQyOTRmZmEyMGU4
NGNmMTY1YzJkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNv
dXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCkBAIC00
NSw2ICs0NSw4IEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIENTU0ZvbnRGYWNlU291cmNl
IGZpbmFsIDogcHVibGljIENhY2hlZEZvbnRDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgorICAgIENTU0ZvbnRGYWNlU291cmNlKENTU0ZvbnRGYWNlJiBvd25l
ciwgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lT3JVUkksIENhY2hlZEZvbnQqID0gbnVsbHB0ciwg
U1ZHRm9udEZhY2VFbGVtZW50KiA9IG51bGxwdHIpOworICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNl
U291cmNlKCk7CiAKICAgICAvLyAgICAgICAgICAgICAgICAgICAgICA9PiBTdWNjZXNzCiAgICAg
Ly8gICAgICAgICAgICAgICAgICAgIC8vCkBAIC01NywxMCArNTksNiBAQCBwdWJsaWM6CiAgICAg
ICAgIFN1Y2Nlc3MsCiAgICAgICAgIEZhaWx1cmUKICAgICB9OwotCi0gICAgQ1NTRm9udEZhY2VT
b3VyY2UoQ1NTRm9udEZhY2UmIG93bmVyLCBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWVPclVSSSwg
Q2FjaGVkRm9udCogPSBudWxscHRyLCBTVkdGb250RmFjZUVsZW1lbnQqID0gbnVsbHB0cik7Ci0g
ICAgdmlydHVhbCB+Q1NTRm9udEZhY2VTb3VyY2UoKTsKLQogICAgIFN0YXR1cyBzdGF0dXMoKSBj
b25zdCB7IHJldHVybiBtX3N0YXR1czsgfQogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHlOYW1lT3JVUkkoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlseU5hbWVPclVSSTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAppbmRleCAyYzhjMmM2ZDM2NDFhMTgyNWRkZWFm
YWY4ZmRhYzUxZWRkNTEzM2ZkLi44YTc0Yzk4YWQwNDcxZmRiYjRhMjA0ZDZkNjkyYzg3NTk1YTll
YWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcApAQCAtMzEsNyArMzEs
NiBAQAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxl
LmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VTb3VyY2UuaCIKLSNpbmNsdWRlICJDU1NGb250RmFj
ZVNyY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhbWlseS5oIgogI2luY2x1ZGUgIkNTU0Zv
bnRGZWF0dXJlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgpAQCAtNDYs
NiArNDUsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRGYWNlU2V0LmgiCiAjaW5jbHVkZSAi
Rm9udFZhcmlhbnRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgpAQCAtNjUsNiArNjUsNyBAQCBzdGF0aWMgdW5zaWduZWQgZm9udFNlbGVjdG9y
SWQ7CiAKIENTU0ZvbnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVjdG9yKERvY3VtZW50JiBkb2N1bWVu
dCkKICAgICA6IG1fZG9jdW1lbnQoJmRvY3VtZW50KQorICAgICwgbV9jc3NGb250RmFjZVNldChD
U1NGb250RmFjZVNldDo6Y3JlYXRlKCkpCiAgICAgLCBtX2JlZ2luTG9hZGluZ1RpbWVyKCp0aGlz
LCAmQ1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRUaW1lckZpcmVkKQogICAgICwgbV91bmlxdWVJ
ZCgrK2ZvbnRTZWxlY3RvcklkKQogICAgICwgbV92ZXJzaW9uKDApCkBAIC03NSw5OSArNzYsMzIg
QEAgQ1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IoRG9jdW1lbnQmIGRvY3VtZW50KQog
CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQpOwogICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuYWRk
Q2xpZW50KCp0aGlzKTsKKyAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5hZGRDbGllbnQoKnRoaXMpOwog
fQogCiBDU1NGb250U2VsZWN0b3I6On5DU1NGb250U2VsZWN0b3IoKQogewogICAgIGNsZWFyRG9j
dW1lbnQoKTsKKyAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5yZW1vdmVDbGllbnQoKnRoaXMpOwogICAg
IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlQ2xpZW50KCp0aGlzKTsKIH0KIAotYm9vbCBD
U1NGb250U2VsZWN0b3I6OmlzRW1wdHkoKSBjb25zdAorRm9udEZhY2VTZXQmIENTU0ZvbnRTZWxl
Y3Rvcjo6Zm9udEZhY2VTZXQoKQogewotICAgIHJldHVybiBtX2ZvbnRzLmlzRW1wdHkoKTsKLX0K
LQotdm9pZCBDU1NGb250U2VsZWN0b3I6OmFwcGVuZFNvdXJjZXMoQ1NTRm9udEZhY2UmIGZvbnRG
YWNlLCBDU1NWYWx1ZUxpc3QmIHNyY0xpc3QsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBpc0lu
aXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQotewotICAgIGZvciAoYXV0byYg
c3JjIDogc3JjTGlzdCkgewotICAgICAgICAvLyBBbiBpdGVtIGluIHRoZSBsaXN0IGVpdGhlciBz
cGVjaWZpZXMgYSBzdHJpbmcgKGxvY2FsIGZvbnQgbmFtZSkgb3IgYSBVUkwgKHJlbW90ZSBmb250
IHRvIGRvd25sb2FkKS4KLSAgICAgICAgQ1NTRm9udEZhY2VTcmNWYWx1ZSYgaXRlbSA9IGRvd25j
YXN0PENTU0ZvbnRGYWNlU3JjVmFsdWU+KHNyYy5nZXQoKSk7Ci0gICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxDU1NGb250RmFjZVNvdXJjZT4gc291cmNlOwotICAgICAgICBTVkdGb250RmFjZUVsZW1l
bnQqIGZvbnRGYWNlRWxlbWVudCA9IG51bGxwdHI7Ci0gICAgICAgIGJvb2wgZm91bmRTVkdGb250
ID0gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICBmb3VuZFNWR0ZvbnQg
PSBpdGVtLmlzU1ZHRm9udEZhY2VTcmMoKSB8fCBpdGVtLnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwot
ICAgICAgICBmb250RmFjZUVsZW1lbnQgPSBpdGVtLnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwotI2Vu
ZGlmCi0gICAgICAgIGlmICghaXRlbS5pc0xvY2FsKCkpIHsKLSAgICAgICAgICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IGRvY3VtZW50ID8gZG9jdW1lbnQtPnNldHRpbmdzKCkgOiBudWxscHRyOwot
ICAgICAgICAgICAgYm9vbCBhbGxvd0Rvd25sb2FkaW5nID0gZm91bmRTVkdGb250IHx8IChzZXR0
aW5ncyAmJiBzZXR0aW5ncy0+ZG93bmxvYWRhYmxlQmluYXJ5Rm9udHNFbmFibGVkKCkpOwotICAg
ICAgICAgICAgaWYgKGFsbG93RG93bmxvYWRpbmcgJiYgaXRlbS5pc1N1cHBvcnRlZEZvcm1hdCgp
ICYmIGRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKENhY2hlZEZvbnQqIGNhY2hlZEZv
bnQgPSBpdGVtLmNhY2hlZEZvbnQoZG9jdW1lbnQsIGZvdW5kU1ZHRm9udCwgaXNJbml0aWF0aW5n
RWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSkpCi0gICAgICAgICAgICAgICAgICAgIHNvdXJj
ZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGZvbnRGYWNlLCBpdGVtLnJl
c291cmNlKCksIGNhY2hlZEZvbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIHNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGZv
bnRGYWNlLCBpdGVtLnJlc291cmNlKCksIG51bGxwdHIsIGZvbnRGYWNlRWxlbWVudCk7Ci0KLSAg
ICAgICAgaWYgKHNvdXJjZSkKLSAgICAgICAgICAgIGZvbnRGYWNlLmFkb3B0U291cmNlKFdURk1v
dmUoc291cmNlKSk7CisgICAgaWYgKCFtX2ZvbnRGYWNlU2V0KSB7CisgICAgICAgIEFTU0VSVCht
X2RvY3VtZW50KTsKKyAgICAgICAgbV9mb250RmFjZVNldCA9IEZvbnRGYWNlU2V0OjpjcmVhdGUo
Km1fZG9jdW1lbnQsIG1fY3NzRm9udEZhY2VTZXQuZ2V0KCkpOwogICAgIH0KLSAgICBmb250RmFj
ZS5zb3VyY2VzUG9wdWxhdGVkKCk7Ci19CiAKLVN0cmluZyBDU1NGb250U2VsZWN0b3I6OmZhbWls
eU5hbWVGcm9tUHJpbWl0aXZlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUuaXNGb250RmFtaWx5KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5mb250RmFt
aWx5KCkuZmFtaWx5TmFtZTsKLSAgICBpZiAoIXZhbHVlLmlzVmFsdWVJRCgpKQotICAgICAgICBy
ZXR1cm4geyB9OwotCi0gICAgLy8gV2UgbmVlZCB0byB1c2UgdGhlIHJhdyB0ZXh0IGZvciBhbGwg
dGhlIGdlbmVyaWMgZmFtaWx5IHR5cGVzLCBzaW5jZSBAZm9udC1mYWNlIGlzIGEgd2F5IG9mIGFj
dHVhbGx5Ci0gICAgLy8gZGVmaW5pbmcgd2hhdCBmb250IHRvIHVzZSBmb3IgdGhvc2UgdHlwZXMu
Ci0gICAgc3dpdGNoICh2YWx1ZS5nZXRWYWx1ZUlEKCkpIHsKLSAgICBjYXNlIENTU1ZhbHVlU2Vy
aWY6Ci0gICAgICAgIHJldHVybiBzZXJpZkZhbWlseTsKLSAgICBjYXNlIENTU1ZhbHVlU2Fuc1Nl
cmlmOgotICAgICAgICByZXR1cm4gc2Fuc1NlcmlmRmFtaWx5OwotICAgIGNhc2UgQ1NTVmFsdWVD
dXJzaXZlOgotICAgICAgICByZXR1cm4gY3Vyc2l2ZUZhbWlseTsKLSAgICBjYXNlIENTU1ZhbHVl
RmFudGFzeToKLSAgICAgICAgcmV0dXJuIGZhbnRhc3lGYW1pbHk7Ci0gICAgY2FzZSBDU1NWYWx1
ZU1vbm9zcGFjZToKLSAgICAgICAgcmV0dXJuIG1vbm9zcGFjZUZhbWlseTsKLSAgICBjYXNlIENT
U1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKLSAgICAgICAgcmV0dXJuIHBpY3RvZ3JhcGhGYW1pbHk7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9CisgICAgcmV0dXJuICpt
X2ZvbnRGYWNlU2V0OwogfQogCi12b2lkIENTU0ZvbnRTZWxlY3Rvcjo6cmVnaXN0ZXJMb2NhbEZv
bnRGYWNlc0ZvckZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCitib29sIENTU0ZvbnRT
ZWxlY3Rvcjo6aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFtX2xvY2FsbHlJbnN0YWxs
ZWRGb250RmFjZXMuY29udGFpbnMoZmFtaWx5TmFtZSkpOwotCi0gICAgVmVjdG9yPEZvbnRUcmFp
dHNNYXNrPiB0cmFpdHNNYXNrcyA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2V0VHJhaXRzSW5G
YW1pbHkoZmFtaWx5TmFtZSk7Ci0gICAgaWYgKHRyYWl0c01hc2tzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+IGZhY2VzID0geyB9Owot
ICAgIGZvciAoYXV0byBtYXNrIDogdHJhaXRzTWFza3MpIHsKLSAgICAgICAgUmVmPENTU0ZvbnRG
YWNlPiBmYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZSgqdGhpcywgbnVsbHB0ciwgdHJ1ZSk7Ci0g
ICAgICAgIAotICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmYW1pbHlMaXN0ID0gQ1NTVmFs
dWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgICAgICBmYW1pbHlMaXN0LT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5VmFsdWUoZmFtaWx5
TmFtZSkpOwotICAgICAgICBmYWNlLT5zZXRGYW1pbGllcygqZmFtaWx5TGlzdCk7Ci0gICAgICAg
IGZhY2UtPnNldFRyYWl0c01hc2sobWFzayk7Ci0gICAgICAgIGZhY2UtPmFkb3B0U291cmNlKHN0
ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGZhY2UuZ2V0KCksIGZhbWlseU5hbWUp
KTsKLSAgICAgICAgQVNTRVJUKCFmYWNlLT5hbGxTb3VyY2VzRmFpbGVkKCkpOwotICAgICAgICBm
YWNlcy5hcHBlbmQoV1RGTW92ZShmYWNlKSk7Ci0gICAgfQotICAgIG1fbG9jYWxseUluc3RhbGxl
ZEZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgV1RGTW92ZShmYWNlcykpOworICAgIHJldHVybiAh
bV9jc3NGb250RmFjZVNldC0+ZmFjZUNvdW50KCk7CiB9CiAKLXZvaWQgQ1NTRm9udFNlbGVjdG9y
OjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwg
Ym9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQordm9pZCBDU1NG
b250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VS
dWxlLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpCiB7CiAg
ICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSA9IGZvbnRGYWNlUnVsZS5wcm9wZXJ0aWVz
KCk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBmb250RmFtaWx5ID0gc3R5bGUuZ2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwpAQCAtMjAxLDcgKzEzNSw4IEBAIHZvaWQg
Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2Um
IGZvbnRGYWNlUnVsZSwgYm9vCiAgICAgaWYgKCFzcmNMaXN0Lmxlbmd0aCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBSZWY8Q1NTRm9udEZhY2U+IGZvbnRGYWNlID0gQ1NTRm9udEZhY2U6OmNy
ZWF0ZSgqdGhpcyk7CisgICAgbV9jcmVhdGluZ0ZvbnQgPSB0cnVlOworICAgIFJlZjxDU1NGb250
RmFjZT4gZm9udEZhY2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKHRoaXMsICZmb250RmFjZVJ1bGUp
OwogCiAgICAgaWYgKCFmb250RmFjZS0+c2V0RmFtaWxpZXMoKmZvbnRGYW1pbHkpKQogICAgICAg
ICByZXR1cm47CkBAIC0yMjYsMjYgKzE2MSwxMyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRk
Rm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlJiBmb250RmFjZVJ1bGUsIGJvbwog
ICAgIGlmIChmZWF0dXJlU2V0dGluZ3MgJiYgIWZvbnRGYWNlLT5zZXRGZWF0dXJlU2V0dGluZ3Mo
KmZlYXR1cmVTZXR0aW5ncykpCiAgICAgICAgIHJldHVybjsKIAotICAgIGFwcGVuZFNvdXJjZXMo
Zm9udEZhY2UsIHNyY0xpc3QsIG1fZG9jdW1lbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJB
Z2VudFNoYWRvd1RyZWUpOworICAgIENTU0ZvbnRGYWNlOjphcHBlbmRTb3VyY2VzKGZvbnRGYWNl
LCBzcmNMaXN0LCBtX2RvY3VtZW50LCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFk
b3dUcmVlKTsKICAgICBpZiAoZm9udEZhY2UtPmFsbFNvdXJjZXNGYWlsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZm9yIChhdXRvJiBpdGVtIDogZmFtaWx5TGlzdCkgewotICAgICAgICBT
dHJpbmcgZmFtaWx5TmFtZSA9IGZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKSk7Ci0gICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PigpKTsK
LSAgICAgICAgYXV0byYgZmFtaWx5Rm9udEZhY2VzID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKLSAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICByZWdp
c3RlckxvY2FsRm9udEZhY2VzRm9yRmFtaWx5KGZhbWlseU5hbWUpOwotICAgICAgICAgICAgZmFt
aWx5Rm9udEZhY2VzID0geyB9OwotICAgICAgICB9Ci0KLSAgICAgICAgZmFtaWx5Rm9udEZhY2Vz
LmFwcGVuZChmb250RmFjZS5jb3B5UmVmKCkpOwotICAgICAgICAKLSAgICAgICAgKyttX3ZlcnNp
b247Ci0gICAgfQorICAgIG1fY3NzRm9udEZhY2VTZXQtPmFkZChmb250RmFjZS5nZXQoKSk7Cisg
ICAgbV9jcmVhdGluZ0ZvbnQgPSBmYWxzZTsKKyAgICArK21fdmVyc2lvbjsKIH0KIAogdm9pZCBD
U1NGb250U2VsZWN0b3I6OnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRTZWxl
Y3RvckNsaWVudCYgY2xpZW50KQpAQCAtMjczLDYgKzE5NSwxMiBAQCB2b2lkIENTU0ZvbnRTZWxl
Y3Rvcjo6Zm9udExvYWRlZCgpCiAgICAgZGlzcGF0Y2hJbnZhbGlkYXRpb25DYWxsYmFja3MoKTsK
IH0KIAordm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRNb2RpZmllZCgpCit7CisgICAgaWYgKCFt
X2NyZWF0aW5nRm9udCkKKyAgICAgICAgZGlzcGF0Y2hJbnZhbGlkYXRpb25DYWxsYmFja3MoKTsK
K30KKwogdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRDYWNoZUludmFsaWRhdGVkKCkKIHsKICAg
ICBkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygpOwpAQCAtMzA0LDg0ICsyMzIsMTMgQEAg
c3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgcmVzb2x2ZUdlbmVyaWNGYW1pbHkoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBGb250RGUKICAgICByZXR1cm4gZmFtaWx5TmFtZTsKIH0KIAotY2xh
c3MgRm9udEZhY2VDb21wYXJhdG9yIHsKLXB1YmxpYzoKLSAgICBGb250RmFjZUNvbXBhcmF0b3Io
Rm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uKQotICAgICAgICA6
IG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uKGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29t
cGFyaXNvbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KG1fZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFdlaWdodE1hc2spOwotICAg
IH0KLQotICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBDU1NGb250RmFjZSYgZmlyc3QsIGNvbnN0
IENTU0ZvbnRGYWNlJiBzZWNvbmQpCi0gICAgewotICAgICAgICBGb250VHJhaXRzTWFzayBmaXJz
dFRyYWl0c01hc2sgPSBmaXJzdC50cmFpdHNNYXNrKCk7Ci0gICAgICAgIEZvbnRUcmFpdHNNYXNr
IHNlY29uZFRyYWl0c01hc2sgPSBzZWNvbmQudHJhaXRzTWFzaygpOwotCi0gICAgICAgIGJvb2wg
Zmlyc3RIYXNEZXNpcmVkU3R5bGUgPSBmaXJzdFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNN
YXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRTdHlsZU1hc2s7Ci0gICAgICAgIGJvb2wgc2Vjb25kSGFz
RGVzaXJlZFN0eWxlID0gc2Vjb25kVHJhaXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JD
b21wYXJpc29uICYgRm9udFN0eWxlTWFzazsKLQotICAgICAgICBpZiAoZmlyc3RIYXNEZXNpcmVk
U3R5bGUgIT0gc2Vjb25kSGFzRGVzaXJlZFN0eWxlKQotICAgICAgICAgICAgcmV0dXJuIGZpcnN0
SGFzRGVzaXJlZFN0eWxlOwotCi0gICAgICAgIGlmICgobV9kZXNpcmVkVHJhaXRzTWFza0ZvckNv
bXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhZmlyc3QuaXNMb2NhbEZhbGxiYWNr
KCkgJiYgIXNlY29uZC5pc0xvY2FsRmFsbGJhY2soKSkgewotICAgICAgICAgICAgLy8gUHJlZmVy
IGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0ZWQgdGhhdCBpdCBjYW4gb25seSBzdXBwb3J0IGl0YWxp
Y3MgdG8gYSBmb250IHRoYXQgY2xhaW1zIHRvIHN1cHBvcnQKLSAgICAgICAgICAgIC8vIGFsbCBz
dHlsZXMuIFRoZSBzcGVjaWFsaXplZCBmb250IGlzIG1vcmUgbGlrZWx5IHRvIGJlIHRoZSBvbmUg
dGhlIGF1dGhvciB3YW50cyB1c2VkLgotICAgICAgICAgICAgYm9vbCBmaXJzdFJlcXVpcmVzSXRh
bGljcyA9IChmaXJzdFRyYWl0c01hc2sgJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhKGZpcnN0
VHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spOwotICAgICAgICAgICAgYm9vbCBzZWNv
bmRSZXF1aXJlc0l0YWxpY3MgPSAoc2Vjb25kVHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxpY01h
c2spICYmICEoc2Vjb25kVHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spOwotICAgICAg
ICAgICAgaWYgKGZpcnN0UmVxdWlyZXNJdGFsaWNzICE9IHNlY29uZFJlcXVpcmVzSXRhbGljcykK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RSZXF1aXJlc0l0YWxpY3M7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoc2Vjb25kVHJhaXRzTWFzayAmIG1fZGVzaXJlZFRyYWl0c01hc2tGb3JD
b21wYXJpc29uICYgRm9udFdlaWdodE1hc2spCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmIChmaXJzdFRyYWl0c01hc2sgJiBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFy
aXNvbiAmIEZvbnRXZWlnaHRNYXNrKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAg
ICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1jc3MzLWZvbnRzLTIwMTExMDA0LyNm
b250LW1hdGNoaW5nLWFsZ29yaXRobSBzYXlzIDoKLSAgICAgICAgLy8gICAtIElmIHRoZSBkZXNp
cmVkIHdlaWdodCBpcyBsZXNzIHRoYW4gNDAwLCB3ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVkIHdl
aWdodCBhcmUgY2hlY2tlZCBpbiBkZXNjZW5kaW5nIG9yZGVyIGZvbGxvd2VkIGJ5IHdlaWdodHMg
YWJvdmUgdGhlIGRlc2lyZWQgd2VpZ2h0IGluIGFzY2VuZGluZyBvcmRlciB1bnRpbCBhIG1hdGNo
IGlzIGZvdW5kLgotICAgICAgICAvLyAgIC0gSWYgdGhlIGRlc2lyZWQgd2VpZ2h0IGlzIGdyZWF0
ZXIgdGhhbiA1MDAsIHdlaWdodHMgYWJvdmUgdGhlIGRlc2lyZWQgd2VpZ2h0IGFyZSBjaGVja2Vk
IGluIGFzY2VuZGluZyBvcmRlciBmb2xsb3dlZCBieSB3ZWlnaHRzIGJlbG93IHRoZSBkZXNpcmVk
IHdlaWdodCBpbiBkZXNjZW5kaW5nIG9yZGVyIHVudGlsIGEgbWF0Y2ggaXMgZm91bmQuCi0gICAg
ICAgIC8vICAgLSBJZiB0aGUgZGVzaXJlZCB3ZWlnaHQgaXMgNDAwLCA1MDAgaXMgY2hlY2tlZCBm
aXJzdCBhbmQgdGhlbiB0aGUgcnVsZSBmb3IgZGVzaXJlZCB3ZWlnaHRzIGxlc3MgdGhhbiA0MDAg
aXMgdXNlZC4KLSAgICAgICAgLy8gICAtIElmIHRoZSBkZXNpcmVkIHdlaWdodCBpcyA1MDAsIDQw
MCBpcyBjaGVja2VkIGZpcnN0IGFuZCB0aGVuIHRoZSBydWxlIGZvciBkZXNpcmVkIHdlaWdodHMg
bGVzcyB0aGFuIDQwMCBpcyB1c2VkLgotCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBm
YWxsYmFja1J1bGVTZXRzID0gOTsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJ1bGVz
UGVyU2V0ID0gODsKLSAgICAgICAgc3RhdGljIGNvbnN0IEZvbnRUcmFpdHNNYXNrIHdlaWdodEZh
bGxiYWNrUnVsZVNldHNbZmFsbGJhY2tSdWxlU2V0c11bcnVsZXNQZXJTZXRdID0gewotICAgICAg
ICAgICAgeyBGb250V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQ0
MDBNYXNrLCBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3
MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAgICAg
ICAgIHsgRm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0NDAw
TWFzaywgRm9udFdlaWdodDUwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAw
TWFzaywgRm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgICAg
ICB7IEZvbnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDQwME1h
c2ssIEZvbnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdlaWdodDcwME1h
c2ssIEZvbnRXZWlnaHQ4MDBNYXNrLCBGb250V2VpZ2h0OTAwTWFzayB9LAotICAgICAgICAgICAg
eyBGb250V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWlnaHQyMDBNYXNr
LCBGb250V2VpZ2h0MTAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNr
LCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2sgfSwKLSAgICAgICAgICAgIHsg
Rm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250V2VpZ2h0MjAwTWFzaywg
Rm9udFdlaWdodDEwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywg
Rm9udFdlaWdodDgwME1hc2ssIEZvbnRXZWlnaHQ5MDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZv
bnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2ssIEZv
bnRXZWlnaHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZv
bnRXZWlnaHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9LAotICAgICAgICAgICAgeyBGb250
V2VpZ2h0ODAwTWFzaywgRm9udFdlaWdodDkwME1hc2ssIEZvbnRXZWlnaHQ2MDBNYXNrLCBGb250
V2VpZ2h0NTAwTWFzaywgRm9udFdlaWdodDQwME1hc2ssIEZvbnRXZWlnaHQzMDBNYXNrLCBGb250
V2VpZ2h0MjAwTWFzaywgRm9udFdlaWdodDEwME1hc2sgfSwKLSAgICAgICAgICAgIHsgRm9udFdl
aWdodDkwME1hc2ssIEZvbnRXZWlnaHQ3MDBNYXNrLCBGb250V2VpZ2h0NjAwTWFzaywgRm9udFdl
aWdodDUwME1hc2ssIEZvbnRXZWlnaHQ0MDBNYXNrLCBGb250V2VpZ2h0MzAwTWFzaywgRm9udFdl
aWdodDIwME1hc2ssIEZvbnRXZWlnaHQxMDBNYXNrIH0sCi0gICAgICAgICAgICB7IEZvbnRXZWln
aHQ4MDBNYXNrLCBGb250V2VpZ2h0NzAwTWFzaywgRm9udFdlaWdodDYwME1hc2ssIEZvbnRXZWln
aHQ1MDBNYXNrLCBGb250V2VpZ2h0NDAwTWFzaywgRm9udFdlaWdodDMwME1hc2ssIEZvbnRXZWln
aHQyMDBNYXNrLCBGb250V2VpZ2h0MTAwTWFzayB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdW5z
aWduZWQgcnVsZVNldEluZGV4ID0gMDsKLSAgICAgICAgZm9yICg7ICEobV9kZXNpcmVkVHJhaXRz
TWFza0ZvckNvbXBhcmlzb24gJiAoMSA8PCAoRm9udFdlaWdodDEwMEJpdCArIHJ1bGVTZXRJbmRl
eCkpKTsgcnVsZVNldEluZGV4KyspIHsgfQotCi0gICAgICAgIGNvbnN0IEZvbnRUcmFpdHNNYXNr
KiB3ZWlnaHRGYWxsYmFja1J1bGUgPSB3ZWlnaHRGYWxsYmFja1J1bGVTZXRzW3J1bGVTZXRJbmRl
eF07Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlc1BlclNldDsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoc2Vjb25kVHJhaXRzTWFzayAmIHdlaWdodEZhbGxiYWNrUnVsZVtp
XSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoZmlyc3RU
cmFpdHNNYXNrICYgd2VpZ2h0RmFsbGJhY2tSdWxlW2ldKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBGb250VHJhaXRzTWFzayBtX2Rlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNv
bjsKLX07Ci0KIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJp
bmcmIGZhbWlseU5hbWUpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBzcGVjIChhbmQgRmlyZWZveCkg
c2F5cyB1c2VyIHNwZWNpZmllZCBnZW5lcmljIGZhbWlsaWVzIChzYW5zLXNlcmlmIGV0Yy4pIHNo
b3VsZCBiZSByZXNvbHZlZCBiZWZvcmUgdGhlIEBmb250LWZhY2UgbG9va3VwIHRvby4KICAgICBi
b29sIHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QgPSBmYW1pbHlOYW1lID09IHN0YW5kYXJkRmFt
aWx5OwogCiAgICAgQXRvbWljU3RyaW5nIGZhbWlseUZvckxvb2t1cCA9IHJlc29sdmVHZW5lcmlj
RmFtaWx5Rmlyc3QgPyByZXNvbHZlR2VuZXJpY0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVzY3Jp
cHRpb24sIGZhbWlseU5hbWUpIDogZmFtaWx5TmFtZTsKLSAgICBDU1NTZWdtZW50ZWRGb250RmFj
ZSogZmFjZSA9IGdldEZvbnRGYWNlKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5Rm9yTG9va3VwKTsK
KyAgICBDU1NTZWdtZW50ZWRGb250RmFjZSogZmFjZSA9IG1fY3NzRm9udEZhY2VTZXQtPmdldEZv
bnRGYWNlKGZvbnREZXNjcmlwdGlvbi50cmFpdHNNYXNrKCksIGZhbWlseUZvckxvb2t1cCk7CiAg
ICAgaWYgKCFmYWNlKSB7CiAgICAgICAgIGlmICghcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCkK
ICAgICAgICAgICAgIGZhbWlseUZvckxvb2t1cCA9IHJlc29sdmVHZW5lcmljRmFtaWx5KG1fZG9j
dW1lbnQsIGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CkBAIC0zOTEsNDkgKzI0OCw2IEBA
IEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyCiAgICAgcmV0dXJuIGZhY2UtPmZvbnRSYW5nZXMoZm9u
dERlc2NyaXB0aW9uKTsKIH0KIAotQ1NTU2VnbWVudGVkRm9udEZhY2UqIENTU0ZvbnRTZWxlY3Rv
cjo6Z2V0Rm9udEZhY2UoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2ZvbnRG
YWNlcy5maW5kKGZhbWlseSk7Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1fZm9udEZhY2VzLmVuZCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvJiBmYW1pbHlGb250RmFjZXMgPSBp
dGVyYXRvci0+dmFsdWU7Ci0KLSAgICBhdXRvJiBzZWdtZW50ZWRGb250RmFjZUNhY2hlID0gbV9m
b250cy5hZGQoZmFtaWx5LCBIYXNoTWFwPHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2Vn
bWVudGVkRm9udEZhY2U+PigpKS5pdGVyYXRvci0+dmFsdWU7Ci0KLSAgICBGb250VHJhaXRzTWFz
ayB0cmFpdHNNYXNrID0gZm9udERlc2NyaXB0aW9uLnRyYWl0c01hc2soKTsKLQotICAgIGF1dG8m
IGZhY2UgPSBzZWdtZW50ZWRGb250RmFjZUNhY2hlLmFkZCh0cmFpdHNNYXNrLCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWU7Ci0gICAgaWYgKGZhY2UpCi0gICAgICAgIHJldHVybiBmYWNlLmdldCgp
OwotCi0gICAgZmFjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTU2VnbWVudGVkRm9udEZhY2U+KCp0
aGlzKTsKLQotICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENTU0ZvbnRGYWNlPiwg
MzI+IGNhbmRpZGF0ZUZvbnRGYWNlczsKLSAgICBmb3IgKGludCBpID0gZmFtaWx5Rm9udEZhY2Vz
LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIENTU0ZvbnRGYWNlJiBjYW5kaWRh
dGUgPSBmYW1pbHlGb250RmFjZXNbaV07Ci0gICAgICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRyYWl0
c01hc2sgPSBjYW5kaWRhdGUudHJhaXRzTWFzaygpOwotICAgICAgICBpZiAoKHRyYWl0c01hc2sg
JiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5
bGVOb3JtYWxNYXNrKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjYW5kaWRhdGVG
b250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7Ci0gICAgfQotCi0gICAgYXV0byBsb2NhbEl0ZXJh
dG9yID0gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmZpbmQoZmFtaWx5KTsKLSAgICBpZiAo
bG9jYWxJdGVyYXRvciAhPSBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMuZW5kKCkpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBsb2NhbEl0ZXJhdG9yLT52YWx1ZSkgewotICAg
ICAgICAgICAgdW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRpZGF0ZS0+dHJhaXRz
TWFzaygpOwotICAgICAgICAgICAgaWYgKCh0cmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFz
aykgJiYgIShjYW5kaWRhdGVUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzaykpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjYW5kaWRhdGVGb250RmFjZXMuYXBw
ZW5kKGNhbmRpZGF0ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGQ6OnN0YWJsZV9zb3J0
KGNhbmRpZGF0ZUZvbnRGYWNlcy5iZWdpbigpLCBjYW5kaWRhdGVGb250RmFjZXMuZW5kKCksIEZv
bnRGYWNlQ29tcGFyYXRvcih0cmFpdHNNYXNrKSk7Ci0gICAgZm9yIChhdXRvJiBjYW5kaWRhdGUg
OiBjYW5kaWRhdGVGb250RmFjZXMpCi0gICAgICAgIGZhY2UtPmFwcGVuZEZvbnRGYWNlKGNhbmRp
ZGF0ZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gZmFjZS5nZXQoKTsKLX0KLQogdm9pZCBDU1NGb250
U2VsZWN0b3I6OmNsZWFyRG9jdW1lbnQoKQogewogICAgIGlmICghbV9kb2N1bWVudCkgewpAQCAt
NDU0LDkgKzI2OCw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpjbGVhckRvY3VtZW50KCkKICAg
ICBtX2RvY3VtZW50ID0gbnVsbHB0cjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG9iamVjdCBzaG91
bGQgb3V0bGl2ZSB0aGUgRG9jdW1lbnQuCi0gICAgbV9mb250RmFjZXMuY2xlYXIoKTsKLSAgICBt
X2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMuY2xlYXIoKTsKLSAgICBtX2ZvbnRzLmNsZWFyKCk7
CisgICAgbV9jc3NGb250RmFjZVNldC0+Y2xlYXIoKTsKICAgICBtX2NsaWVudHMuY2xlYXIoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCmluZGV4IDlhMjdmZTIyZWY3MmQ0
YTk3N2I2ZjczNWEzMTAyMzU5NjE5NjU1YzEuLmMxMTJlODhmNzQ3NjU5Yzg5MDU1MDI2MWI1ZWQ1
MTlkYTg2ZmZmMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTI3LDYg
KzI3LDcgQEAKICNkZWZpbmUgQ1NTRm9udFNlbGVjdG9yX2gKIAogI2luY2x1ZGUgIkNTU0ZvbnRG
YWNlLmgiCisjaW5jbHVkZSAiQ1NTRm9udEZhY2VTZXQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3Iu
aCIKQEAgLTQ4LDcgKzQ5LDcgQEAgY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNzIERvY3VtZW50Owog
Y2xhc3MgU3R5bGVSdWxlRm9udEZhY2U7CiAKLWNsYXNzIENTU0ZvbnRTZWxlY3RvciBmaW5hbCA6
IHB1YmxpYyBGb250U2VsZWN0b3IgeworY2xhc3MgQ1NTRm9udFNlbGVjdG9yIGZpbmFsIDogcHVi
bGljIEZvbnRTZWxlY3RvciwgcHVibGljIENTU0ZvbnRGYWNlU2V0Q2xpZW50IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPENTU0ZvbnRTZWxlY3Rvcj4gY3JlYXRlKERvY3VtZW50JiBkb2N1bWVu
dCkKICAgICB7CkBAIC02MiwxMiArNjMsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRm9udFJh
bmdlcyBmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0
b21pY1N0cmluZyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgc2l6ZV90IGZhbGxiYWNrRm9udENv
dW50KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBSZWZQdHI8Rm9udD4gZmFsbGJhY2tGb250QXQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgc2l6ZV90KSBvdmVycmlkZTsKLSAgICBDU1NTZWdtZW50
ZWRGb250RmFjZSogZ2V0Rm9udEZhY2UoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bWljU3RyaW5nJiBmYW1pbHkpOwogCiAgICAgdm9pZCBjbGVhckRvY3VtZW50KCk7CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VzKENTU0ZvbnRGYWNlJiwgQ1NTVmFsdWVMaXN0JiwgRG9j
dW1lbnQqLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOwot
ICAgIHZvaWQgYWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlJiwgYm9vbCBp
c0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKKyAgICB2b2lkIGFkZEZv
bnRGYWNlUnVsZShTdHlsZVJ1bGVGb250RmFjZSYsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudElu
VXNlckFnZW50U2hhZG93VHJlZSk7CiAKICAgICB2b2lkIGZvbnRMb2FkZWQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgZm9udENhY2hlSW52YWxpZGF0ZWQoKSBvdmVycmlkZTsKQEAgLTgxLDIxICs4MCwy
MCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGJlZ2luTG9hZGluZ0ZvbnRTb29uKENhY2hlZEZvbnQq
KTsKIAotICAgIHN0YXRpYyBTdHJpbmcgZmFtaWx5TmFtZUZyb21QcmltaXRpdmUoY29uc3QgQ1NT
UHJpbWl0aXZlVmFsdWUmKTsKKyAgICBGb250RmFjZVNldCYgZm9udEZhY2VTZXQoKTsKIAogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBDU1NGb250U2VsZWN0b3IoRG9jdW1lbnQmKTsKIAogICAgIHZv
aWQgZGlzcGF0Y2hJbnZhbGlkYXRpb25DYWxsYmFja3MoKTsKIAotICAgIHZvaWQgYmVnaW5Mb2Fk
VGltZXJGaXJlZCgpOworICAgIHZpcnR1YWwgdm9pZCBmb250TW9kaWZpZWQoKSBvdmVycmlkZTsK
IAotICAgIHZvaWQgcmVnaXN0ZXJMb2NhbEZvbnRGYWNlc0ZvckZhbWlseShjb25zdCBTdHJpbmcm
KTsKKyAgICB2b2lkIGJlZ2luTG9hZFRpbWVyRmlyZWQoKTsKIAogICAgIERvY3VtZW50KiBtX2Rv
Y3VtZW50OwotICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4sIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9mb250RmFjZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PiwgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX2xv
Y2FsbHlJbnN0YWxsZWRGb250RmFjZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIEhhc2hNYXA8dW5z
aWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4+LCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+IG1fZm9udHM7CisgICAgUmVmUHRyPEZvbnRGYWNlU2V0PiBtX2ZvbnRG
YWNlU2V0OworICAgIFJlZjxDU1NGb250RmFjZVNldD4gbV9jc3NGb250RmFjZVNldDsKICAgICBI
YXNoU2V0PEZvbnRTZWxlY3RvckNsaWVudCo+IG1fY2xpZW50czsKIAogICAgIFZlY3RvcjxDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRGb250Pj4gbV9mb250c1RvQmVnaW5Mb2FkaW5nOwpAQCAt
MTAzLDYgKzEwMSw3IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX3VuaXF1ZUlkOwogICAg
IHVuc2lnbmVkIG1fdmVyc2lvbjsKKyAgICBib29sIG1fY3JlYXRpbmdGb250IHsgZmFsc2UgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuY3BwCmluZGV4IGY1ZmNiYWVhOGRkYWU4NjliNmQzZmM5MzAyNzQ5YzIy
NmI5OTAzYWYuLjRjMjBkMzhmZTRlNmQ2Zjk2MjI2YjQ0M2NlZDNlNTNmOGZlMDE1ZjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcApAQCAtMzcsOCArMzcs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1NlZ21lbnRlZEZvbnRGYWNlOjpDU1NT
ZWdtZW50ZWRGb250RmFjZShDU1NGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvcikKLSAgICA6IG1f
Zm9udFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKK0NTU1NlZ21lbnRlZEZvbnRGYWNlOjpDU1NTZWdt
ZW50ZWRGb250RmFjZSgpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZv
bnRGYWNlLmgKaW5kZXggMDdiNzFmODJkYjcyNGZjOWNlNTFkOWUxMGY3ODA2MTVhMjYzMzQ3Zi4u
OTIwMzYxMmQwOTExMzcxZjBiMDRhODAwNzkyNjk2MTU5ZmVjZTU0YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKQEAgLTQyLDE5ICs0MiwxOCBAQCBjbGFzcyBG
b250RGVzY3JpcHRpb247CiBjbGFzcyBDU1NTZWdtZW50ZWRGb250RmFjZSBmaW5hbCA6IHB1Ymxp
YyBDU1NGb250RmFjZTo6Q2xpZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBDU1NTZWdtZW50ZWRGb250RmFjZShDU1NGb250U2VsZWN0b3ImKTsKKyAgICBD
U1NTZWdtZW50ZWRGb250RmFjZSgpOwogICAgIH5DU1NTZWdtZW50ZWRGb250RmFjZSgpOwogCi0g
ICAgQ1NTRm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRT
ZWxlY3RvcjsgfQotCiAgICAgdm9pZCBhcHBlbmRGb250RmFjZShSZWY8Q1NTRm9udEZhY2U+JiYp
OwogCiAgICAgRm9udFJhbmdlcyBmb250UmFuZ2VzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwog
CisgICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4sIDE+JiBjb25zdGl0dWVudEZhY2VzKCkgeyBy
ZXR1cm4gbV9mb250RmFjZXM7IH0KKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZm9udExv
YWRlZChDU1NGb250RmFjZSYpIG92ZXJyaWRlOwogCi0gICAgQ1NTRm9udFNlbGVjdG9yJiBtX2Zv
bnRTZWxlY3RvcjsKICAgICBIYXNoTWFwPEZvbnREZXNjcmlwdGlvbktleSwgRm9udFJhbmdlcywg
Rm9udERlc2NyaXB0aW9uS2V5SGFzaCwgV1RGOjpTaW1wbGVDbGFzc0hhc2hUcmFpdHM8Rm9udERl
c2NyaXB0aW9uS2V5Pj4gbV9jYWNoZTsKICAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPiwgMT4g
bV9mb250RmFjZXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKaW5kZXggYzQ1ZThkMjcxMWYw
NzU5NzY5NWRmNjI2MjY0Yzg5ZTM4ZDNjNWVmYS4uYTBiZDgyNDc2MGYyZjA5ZjI0YjA4ZDhmMmY4
YzkwYzIzYzRjYTNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwCkBAIC03NSw3ICs3NSw3IEBA
IFJlZlB0cjxGb250RmFjZT4gRm9udEZhY2U6OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0
YXRlLCBTY3JpcHRFeGVjdXRpb25Db250CiAgICAgICAgIGF1dG8gdmFsdWUgPSBGb250RmFjZTo6
cGFyc2VTdHJpbmcoc291cmNlU3RyaW5nLCBDU1NQcm9wZXJ0eVNyYyk7CiAgICAgICAgIGlmIChp
czxDU1NWYWx1ZUxpc3Q+KHZhbHVlLmdldCgpKSkgewogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0
JiBzcmNMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOwotICAgICAgICAgICAg
Q1NTRm9udFNlbGVjdG9yOjphcHBlbmRTb3VyY2VzKHJlc3VsdC0+YmFja2luZygpLCBzcmNMaXN0
LCAmZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLCBmYWxzZSk7CisgICAgICAgICAgICBDU1NG
b250RmFjZTo6YXBwZW5kU291cmNlcyhyZXN1bHQtPmJhY2tpbmcoKSwgc3JjTGlzdCwgJmRvd25j
YXN0PERvY3VtZW50Pihjb250ZXh0KSwgZmFsc2UpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0x
MTAsOCArMTEwLDIyIEBAIFJlZlB0cjxGb250RmFjZT4gRm9udEZhY2U6OmNyZWF0ZShKU0M6OkV4
ZWNTdGF0ZSYgZXhlY1N0YXRlLCBTY3JpcHRFeGVjdXRpb25Db250CiAgICAgcmV0dXJuIHJlc3Vs
dC5wdHIoKTsKIH0KIAorUmVmPEZvbnRGYWNlPiBGb250RmFjZTo6Y3JlYXRlKEpTQzo6RXhlY1N0
YXRlJiBleGVjU3RhdGUsIENTU0ZvbnRGYWNlJiBmYWNlKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZvbnRGYWNlKGV4ZWNTdGF0ZSwgZmFjZSkpOworfQorCiBGb250RmFjZTo6Rm9udEZh
Y2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgQ1NTRm9udFNlbGVjdG9yJiBmb250U2VsZWN0
b3IpCi0gICAgOiBtX2JhY2tpbmcoQ1NTRm9udEZhY2U6OmNyZWF0ZShmb250U2VsZWN0b3IsIHRo
aXMpKQorICAgIDogbV93ZWFrUHRyRmFjdG9yeSh0aGlzKQorICAgICwgbV9iYWNraW5nKENTU0Zv
bnRGYWNlOjpjcmVhdGUoJmZvbnRTZWxlY3RvciwgbnVsbHB0ciwgdGhpcykpCisgICAgLCBtX3By
b21pc2UoY3JlYXRlUHJvbWlzZShleGVjU3RhdGUpKQoreworICAgIG1fYmFja2luZy0+YWRkQ2xp
ZW50KCp0aGlzKTsKK30KKworRm9udEZhY2U6OkZvbnRGYWNlKEpTQzo6RXhlY1N0YXRlJiBleGVj
U3RhdGUsIENTU0ZvbnRGYWNlJiBmYWNlKQorICAgIDogbV93ZWFrUHRyRmFjdG9yeSh0aGlzKQor
ICAgICwgbV9iYWNraW5nKGZhY2UpCiAgICAgLCBtX3Byb21pc2UoY3JlYXRlUHJvbWlzZShleGVj
U3RhdGUpKQogewogICAgIG1fYmFja2luZy0+YWRkQ2xpZW50KCp0aGlzKTsKQEAgLTEyMiw2ICsx
MzYsMTEgQEAgRm9udEZhY2U6On5Gb250RmFjZSgpCiAgICAgbV9iYWNraW5nLT5yZW1vdmVDbGll
bnQoKnRoaXMpOwogfQogCitXZWFrUHRyPEZvbnRGYWNlPiBGb250RmFjZTo6Y3JlYXRlV2Vha1B0
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigp
OworfQorCiBSZWZQdHI8Q1NTVmFsdWU+IEZvbnRGYWNlOjpwYXJzZVN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewogICAgIFJlZjxNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzPiBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgp
OwpAQCAtMzE3LDE4ICszMzYsMjUgQEAgU3RyaW5nIEZvbnRGYWNlOjpzdGF0dXMoKSBjb25zdAog
ICAgIHJldHVybiBTdHJpbmcoImVycm9yIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CiB9CiAKLXZvaWQgRm9udEZhY2U6OnN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYgZmFjZSwgQ1NT
Rm9udEZhY2U6OlN0YXR1cywgQ1NTRm9udEZhY2U6OlN0YXR1cyBuZXdTdGF0ZSkKK3ZvaWQgRm9u
dEZhY2U6OmZvbnRTdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2UmIGZhY2UsIENTU0ZvbnRGYWNlOjpT
dGF0dXMsIENTU0ZvbnRGYWNlOjpTdGF0dXMgbmV3U3RhdGUpCiB7CiAgICAgQVNTRVJUX1VOVVNF
RChmYWNlLCAmZmFjZSA9PSBtX2JhY2tpbmcucHRyKCkpOwogICAgIHN3aXRjaCAobmV3U3RhdGUp
IHsKKyAgICBjYXNlIENTU0ZvbnRGYWNlOjpTdGF0dXM6OkxvYWRpbmc6CisgICAgICAgIC8vIFdl
IHN0aWxsIG5lZWQgdG8gcmVzb2x2ZSBwcm9taXNlcyB3aGVuIGxvYWRpbmcgY29tcGxldGVzLCBl
dmVuIGlmIGFsbCByZWZlcmVuY2VzIHRvIHVzZSBoYXZlIGZhbGxlbiBvdXQgb2Ygc2NvcGUuCisg
ICAgICAgIHJlZigpOworICAgICAgICBicmVhazsKICAgICBjYXNlIENTU0ZvbnRGYWNlOjpTdGF0
dXM6OlRpbWVkT3V0OgogICAgICAgICByZWplY3RQcm9taXNlKE5FVFdPUktfRVJSKTsKKyAgICAg
ICAgZGVyZWYoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTRm9udEZhY2U6OlN0YXR1
czo6U3VjY2VzczoKICAgICAgICAgZnVsZmlsbFByb21pc2UoKTsKKyAgICAgICAgZGVyZWYoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTRm9udEZhY2U6OlN0YXR1czo6RmFpbHVyZToK
ICAgICAgICAgcmVqZWN0UHJvbWlzZShORVRXT1JLX0VSUik7CisgICAgICAgIGRlcmVmKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250
RmFjZS5oCmluZGV4IGY2NmZiOWFmZGY2OGVmNWMxYTZmYzVhY2E5NzJjMjA3YzM1ZjRkMzQuLjEw
YTE3NzAxMGJmN2U1NzEzOTljOWRlZWE5NWEwZGMyNTcyNGI0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFj
ZS5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIERlcHJlY2F0ZWQgewpAQCAtNDgsNiArNDksNyBAQCBjbGFzcyBEaWN0aW9uYXJ5OwogY2xh
c3MgRm9udEZhY2UgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250RmFjZT4sIHB1YmxpYyBD
U1NGb250RmFjZTo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEZvbnRGYWNl
PiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3Qg
U3RyaW5nJiBmYW1pbHksIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzb3VyY2UsIGNv
bnN0IERpY3Rpb25hcnkmIGRlc2NyaXB0b3JzLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3RhdGlj
IFJlZjxGb250RmFjZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlJiwgQ1NTRm9udEZhY2UmKTsKICAg
ICB2aXJ0dWFsIH5Gb250RmFjZSgpOwogCiAgICAgdm9pZCBzZXRGYW1pbHkoY29uc3QgU3RyaW5n
JiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtNzYsMTQgKzc4LDE4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIENTU1Byb3Bl
cnR5SUQpOwogCisgICAgdmlydHVhbCB2b2lkIGZvbnRTdGF0ZUNoYW5nZWQoQ1NTRm9udEZhY2Um
LCBDU1NGb250RmFjZTo6U3RhdHVzIG9sZFN0YXRlLCBDU1NGb250RmFjZTo6U3RhdHVzIG5ld1N0
YXRlKSBvdmVycmlkZTsKKworICAgIFdlYWtQdHI8Rm9udEZhY2U+IGNyZWF0ZVdlYWtQdHIoKSBj
b25zdDsKKwogcHJpdmF0ZToKICAgICBGb250RmFjZShKU0M6OkV4ZWNTdGF0ZSYsIENTU0ZvbnRT
ZWxlY3RvciYpOwotCi0gICAgdmlydHVhbCB2b2lkIHN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYs
IENTU0ZvbnRGYWNlOjpTdGF0dXMgb2xkU3RhdGUsIENTU0ZvbnRGYWNlOjpTdGF0dXMgbmV3U3Rh
dGUpIG92ZXJyaWRlOworICAgIEZvbnRGYWNlKEpTQzo6RXhlY1N0YXRlJiwgQ1NTRm9udEZhY2Um
KTsKIAogICAgIHZvaWQgZnVsZmlsbFByb21pc2UoKTsKICAgICB2b2lkIHJlamVjdFByb21pc2Uo
RXhjZXB0aW9uQ29kZSk7CiAKKyAgICBXZWFrUHRyRmFjdG9yeTxGb250RmFjZT4gbV93ZWFrUHRy
RmFjdG9yeTsKICAgICBSZWY8Q1NTRm9udEZhY2U+IG1fYmFja2luZzsKICAgICBQcm9taXNlIG1f
cHJvbWlzZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcAppbmRleCA4YzQ2YWVlMDQ5
YTY2ZmM0MWE1YmE5OWZlZTYxZjBlYTZlMzliNmUyLi40MDk0YjE5YThmMzVmYzEyNTdkODRiNmYx
MzE0MDI2ZjBiMzBkZmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VT
ZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5jcHAKQEAgLTQyLDE3
ICs0MiwzOSBAQCBzdGF0aWMgRm9udEZhY2VTZXQ6OlByb21pc2UgY3JlYXRlUHJvbWlzZShKU0M6
OkV4ZWNTdGF0ZSYgZXhlYykKICAgICByZXR1cm4gRm9udEZhY2VTZXQ6OlByb21pc2UoRGVmZXJy
ZWRXcmFwcGVyKCZleGVjLCAmZ2xvYmFsT2JqZWN0LCBKU0M6OkpTUHJvbWlzZURlZmVycmVkOjpj
cmVhdGUoJmV4ZWMsICZnbG9iYWxPYmplY3QpKSk7CiB9CiAKLUZvbnRGYWNlU2V0OjpGb250RmFj
ZVNldChKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0
IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5pdGlhbEZhY2VzKQorUmVmPEZvbnRGYWNlU2V0
PiBGb250RmFjZVNldDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxGb250RmFjZT4+JiBpbml0aWFsRmFjZXMpCit7CisgICAgUmVmPEZvbnRGYWNlU2V0PiBy
ZXN1bHQgPSBhZG9wdFJlZigqbmV3IEZvbnRGYWNlU2V0KGRvY3VtZW50LCBpbml0aWFsRmFjZXMp
KTsKKyAgICByZXN1bHQtPnN1c3BlbmRJZk5lZWRlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1JlZjxGb250RmFjZVNldD4gRm9udEZhY2VTZXQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1l
bnQsIENTU0ZvbnRGYWNlU2V0JiBiYWNraW5nKQoreworICAgIFJlZjxGb250RmFjZVNldD4gcmVz
dWx0ID0gYWRvcHRSZWYoKm5ldyBGb250RmFjZVNldChkb2N1bWVudCwgYmFja2luZykpOworICAg
IHJlc3VsdC0+c3VzcGVuZElmTmVlZGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRm9u
dEZhY2VTZXQ6OkZvbnRGYWNlU2V0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxGb250RmFjZT4+JiBpbml0aWFsRmFjZXMpCiAgICAgOiBBY3RpdmVET01PYmplY3QoJmRv
Y3VtZW50KQotICAgICwgbV9iYWNraW5nKCp0aGlzKQotICAgICwgbV9wcm9taXNlKGNyZWF0ZVBy
b21pc2UoZXhlY1N0YXRlKSkKKyAgICAsIG1fYmFja2luZyhDU1NGb250RmFjZVNldDo6Y3JlYXRl
KCkpCiB7CisgICAgbV9iYWNraW5nLT5hZGRDbGllbnQoKnRoaXMpOwogICAgIGZvciAoYXV0byYg
ZmFjZSA6IGluaXRpYWxGYWNlcykKICAgICAgICAgYWRkKGZhY2UuZ2V0KCkpOwogfQogCitGb250
RmFjZVNldDo6Rm9udEZhY2VTZXQoRG9jdW1lbnQmIGRvY3VtZW50LCBDU1NGb250RmFjZVNldCYg
YmFja2luZykKKyAgICA6IEFjdGl2ZURPTU9iamVjdCgmZG9jdW1lbnQpCisgICAgLCBtX2JhY2tp
bmcoYmFja2luZykKK3sKKyAgICBtX2JhY2tpbmctPmFkZENsaWVudCgqdGhpcyk7Cit9CisKIEZv
bnRGYWNlU2V0Ojp+Rm9udEZhY2VTZXQoKQogeworICAgIG1fYmFja2luZy0+cmVtb3ZlQ2xpZW50
KCp0aGlzKTsKIH0KIAogRm9udEZhY2VTZXQ6Okl0ZXJhdG9yOjpJdGVyYXRvcihGb250RmFjZVNl
dCYgc2V0KQpAQCAtNjAsMTEgKzgyLDExIEBAIEZvbnRGYWNlU2V0OjpJdGVyYXRvcjo6SXRlcmF0
b3IoRm9udEZhY2VTZXQmIHNldCkKIHsKIH0KIAotYm9vbCBGb250RmFjZVNldDo6SXRlcmF0b3I6
Om5leHQoRm9udEZhY2UqJiBrZXksIEZvbnRGYWNlKiYgdmFsdWUpCitib29sIEZvbnRGYWNlU2V0
OjpJdGVyYXRvcjo6bmV4dChKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBSZWZQdHI8Rm9udEZh
Y2U+JiBrZXksIFJlZlB0cjxGb250RmFjZT4mIHZhbHVlKQogewogICAgIGlmIChtX2luZGV4ID09
IG1fdGFyZ2V0LT5zaXplKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGtleSA9IG1fdGFy
Z2V0LT5tX2JhY2tpbmdbbV9pbmRleCsrXS53cmFwcGVyKCk7CisgICAga2V5ID0gbV90YXJnZXQt
PmJhY2tpbmcoKVttX2luZGV4KytdLndyYXBwZXIoZXhlY1N0YXRlKTsKICAgICB2YWx1ZSA9IGtl
eTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC03OCw0NSArMTAwLDQ1IEBAIEZvbnRGYWNlU2V0
OjpQZW5kaW5nUHJvbWlzZTo6flBlbmRpbmdQcm9taXNlKCkKIHsKIH0KIAotYm9vbCBGb250RmFj
ZVNldDo6aGFzKEZvbnRGYWNlKiBmYWNlKSBjb25zdAorYm9vbCBGb250RmFjZVNldDo6aGFzKFJl
ZlB0cjxXZWJDb3JlOjpGb250RmFjZT4gZmFjZSkgY29uc3QKIHsKICAgICBpZiAoIWZhY2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9iYWNraW5nLmhhc0ZhY2UoZmFjZS0+
YmFja2luZygpKTsKKyAgICByZXR1cm4gbV9iYWNraW5nLT5oYXNGYWNlKGZhY2UtPmJhY2tpbmco
KSk7CiB9CiAKIHNpemVfdCBGb250RmFjZVNldDo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fYmFja2luZy5mYWNlQ291bnQoKTsKKyAgICByZXR1cm4gbV9iYWNraW5nLT5mYWNlQ291bnQo
KTsKIH0KIAotRm9udEZhY2VTZXQmIEZvbnRGYWNlU2V0OjphZGQoRm9udEZhY2UqIGZhY2UpCitG
b250RmFjZVNldCYgRm9udEZhY2VTZXQ6OmFkZChSZWZQdHI8V2ViQ29yZTo6Rm9udEZhY2U+IGZh
Y2UpCiB7Ci0gICAgaWYgKGZhY2UgJiYgIW1fYmFja2luZy5oYXNGYWNlKGZhY2UtPmJhY2tpbmco
KSkpCi0gICAgICAgIG1fYmFja2luZy5hZGQoZmFjZS0+YmFja2luZygpKTsKKyAgICBpZiAoZmFj
ZSAmJiAhbV9iYWNraW5nLT5oYXNGYWNlKGZhY2UtPmJhY2tpbmcoKSkpCisgICAgICAgIG1fYmFj
a2luZy0+YWRkKGZhY2UtPmJhY2tpbmcoKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1ib29s
IEZvbnRGYWNlU2V0OjpyZW1vdmUoRm9udEZhY2UqIGZhY2UpCitib29sIEZvbnRGYWNlU2V0Ojpy
ZW1vdmUoUmVmUHRyPFdlYkNvcmU6OkZvbnRGYWNlPiBmYWNlKQogewogICAgIGlmICghZmFjZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCByZXN1bHQgPSBtX2JhY2tpbmcuaGFz
RmFjZShmYWNlLT5iYWNraW5nKCkpOworICAgIGJvb2wgcmVzdWx0ID0gbV9iYWNraW5nLT5oYXNG
YWNlKGZhY2UtPmJhY2tpbmcoKSk7CiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgbV9iYWNraW5n
LnJlbW92ZShmYWNlLT5iYWNraW5nKCkpOworICAgICAgICBtX2JhY2tpbmctPnJlbW92ZShmYWNl
LT5iYWNraW5nKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgRm9udEZhY2VTZXQ6
OmNsZWFyKCkKIHsKLSAgICB3aGlsZSAobV9iYWNraW5nLmZhY2VDb3VudCgpKQotICAgICAgICBt
X2JhY2tpbmcucmVtb3ZlKG1fYmFja2luZ1swXSk7CisgICAgd2hpbGUgKG1fYmFja2luZy0+ZmFj
ZUNvdW50KCkpCisgICAgICAgIG1fYmFja2luZy0+cmVtb3ZlKG1fYmFja2luZy5nZXQoKVswXSk7
CiB9CiAKLXZvaWQgRm9udEZhY2VTZXQ6OmxvYWQoY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBT
dHJpbmcmIHRleHQsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBGb250RmFjZVNldDo6bG9hZChKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBjb25z
dCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRGVmZXJyZWRXcmFwcGVyJiYgcHJv
bWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgYXV0byBtYXRjaGluZ0ZhY2VzID0gbV9i
YWNraW5nLm1hdGNoaW5nRmFjZXMoZm9udCwgdGV4dCwgZWMpOworICAgIGF1dG8gbWF0Y2hpbmdG
YWNlcyA9IG1fYmFja2luZy0+bWF0Y2hpbmdGYWNlcyhmb250LCB0ZXh0LCBlYyk7CiAgICAgaWYg
KGVjKQogICAgICAgICByZXR1cm47CiAKQEAgLTEzOSwxMSArMTYxLDExIEBAIHZvaWQgRm9udEZh
Y2VTZXQ6OmxvYWQoY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRleHQsIERlZmVy
cmVkV3JhcHBlciYmCiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBmYWNlIDogbWF0Y2hpbmdGYWNl
cykgewotICAgICAgICBwZW5kaW5nUHJvbWlzZS0+ZmFjZXMuYXBwZW5kKGZhY2UuZ2V0KCkud3Jh
cHBlcigpKTsKKyAgICAgICAgcGVuZGluZ1Byb21pc2UtPmZhY2VzLmFwcGVuZChmYWNlLmdldCgp
LndyYXBwZXIoZXhlY1N0YXRlKSk7CiAgICAgICAgIGlmIChmYWNlLmdldCgpLnN0YXR1cygpID09
IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlN1Y2Nlc3MpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgd2FpdGluZyA9IHRydWU7Ci0gICAgICAgIGF1dG8mIHZlY3RvciA9IG1fcGVuZGluZ1By
b21pc2VzLmFkZChSZWZQdHI8Rm9udEZhY2U+KGZhY2UuZ2V0KCkud3JhcHBlcigpKSwgVmVjdG9y
PFJlZjxQZW5kaW5nUHJvbWlzZT4+KCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byYg
dmVjdG9yID0gbV9wZW5kaW5nUHJvbWlzZXMuYWRkKFJlZlB0cjxDU1NGb250RmFjZT4oJmZhY2Uu
Z2V0KCkpLCBWZWN0b3I8UmVmPFBlbmRpbmdQcm9taXNlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgICAgICB2ZWN0b3IuYXBwZW5kKHBlbmRpbmdQcm9taXNlLmNvcHlSZWYoKSk7CiAgICAgfQog
CkBAIC0xNTMsMTQgKzE3NSwxNCBAQCB2b2lkIEZvbnRGYWNlU2V0Ojpsb2FkKGNvbnN0IFN0cmlu
ZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBEZWZlcnJlZFdyYXBwZXImJgogCiBib29sIEZv
bnRGYWNlU2V0OjpjaGVjayhjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICByZXR1cm4gbV9iYWNraW5nLmNoZWNrKGZhbWls
eSwgdGV4dCwgZWMpOworICAgIHJldHVybiBtX2JhY2tpbmctPmNoZWNrKGZhbWlseSwgdGV4dCwg
ZWMpOwogfQogCiBhdXRvIEZvbnRGYWNlU2V0Ojpwcm9taXNlKEpTQzo6RXhlY1N0YXRlJiBleGVj
U3RhdGUpIC0+IFByb21pc2UmCiB7CiAgICAgaWYgKCFtX3Byb21pc2UpIHsKICAgICAgICAgbV9w
cm9taXNlID0gY3JlYXRlUHJvbWlzZShleGVjU3RhdGUpOwotICAgICAgICBpZiAobV9iYWNraW5n
LnN0YXR1cygpID09IENTU0ZvbnRGYWNlU2V0OjpTdGF0dXM6OkxvYWRlZCkKKyAgICAgICAgaWYg
KG1fYmFja2luZy0+c3RhdHVzKCkgPT0gQ1NTRm9udEZhY2VTZXQ6OlN0YXR1czo6TG9hZGVkKQog
ICAgICAgICAgICAgZnVsZmlsbFByb21pc2UoKTsKICAgICB9CiAgICAgcmV0dXJuIG1fcHJvbWlz
ZS52YWx1ZSgpOwpAQCAtMTY4LDcgKzE5MCw3IEBAIGF1dG8gRm9udEZhY2VTZXQ6OnByb21pc2Uo
SlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSkgLT4gUHJvbWlzZSYKICAgICAKIFN0cmluZyBGb250
RmFjZVNldDo6c3RhdHVzKCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKG1fYmFja2luZy5zdGF0dXMo
KSkgeworICAgIHN3aXRjaCAobV9iYWNraW5nLT5zdGF0dXMoKSkgewogICAgIGNhc2UgQ1NTRm9u
dEZhY2VTZXQ6OlN0YXR1czo6TG9hZGluZzoKICAgICAgICAgcmV0dXJuIFN0cmluZygibG9hZGlu
ZyIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIGNhc2UgQ1NTRm9udEZhY2VT
ZXQ6OlN0YXR1czo6TG9hZGVkOgpAQCAtMTgwLDcgKzIwMiw3IEBAIFN0cmluZyBGb250RmFjZVNl
dDo6c3RhdHVzKCkgY29uc3QKIAogYm9vbCBGb250RmFjZVNldDo6Y2FuU3VzcGVuZEZvckRvY3Vt
ZW50U3VzcGVuc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYmFja2luZy5zdGF0dXMoKSA9
PSBDU1NGb250RmFjZVNldDo6U3RhdHVzOjpMb2FkZWQ7CisgICAgcmV0dXJuIG1fYmFja2luZy0+
c3RhdHVzKCkgPT0gQ1NTRm9udEZhY2VTZXQ6OlN0YXR1czo6TG9hZGVkOwogfQogCiB2b2lkIEZv
bnRGYWNlU2V0OjpzdGFydGVkTG9hZGluZygpCkBAIC0yMDksNyArMjMxLDcgQEAgdm9pZCBGb250
RmFjZVNldDo6ZnVsZmlsbFByb21pc2UoKQogCiB2b2lkIEZvbnRGYWNlU2V0OjpmYWNlRmluaXNo
ZWQoQ1NTRm9udEZhY2UmIGZhY2UsIENTU0ZvbnRGYWNlOjpTdGF0dXMgbmV3U3RhdHVzKQogewot
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3BlbmRpbmdQcm9taXNlcy5maW5kKGZhY2Uud3JhcHBlcigp
KTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9wZW5kaW5nUHJvbWlzZXMuZmluZCgmZmFjZSk7CiAg
ICAgaWYgKGl0ZXJhdG9yID09IG1fcGVuZGluZ1Byb21pc2VzLmVuZCgpKQogICAgICAgICByZXR1
cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmgKaW5kZXggMjkwNmUyNzdlYTE3NGNmY2UwMmYz
NTg2YjhhMjYwMzQ4NDE2Y2M4ZC4uMWZkZWNiOGZmYzJhNjM1ZTMxYjViYTJlZGJmOWFhNTU0NDBm
YmI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmgKQEAgLTM4LDYgKzM4LDEwIEBACiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCitu
YW1lc3BhY2UgSlNDIHsKK2NsYXNzIEV4ZWNTdGF0ZTsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBEb2N1bWVudDsKQEAgLTQ1LDIyICs0OSwxOCBAQCBjbGFzcyBGb250RmFjZTsK
IAogY2xhc3MgRm9udEZhY2VTZXQgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250RmFjZVNl
dD4sIHB1YmxpYyBDU1NGb250RmFjZVNldENsaWVudCwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElu
bGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8Rm9udEZhY2VTZXQ+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBEb2N1bWVu
dCYgZG9jdW1lbnQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5pdGlhbEZhY2Vz
KQotICAgIHsKLSAgICAgICAgUmVmPEZvbnRGYWNlU2V0PiByZXN1bHQgPSBhZG9wdFJlZigqbmV3
IEZvbnRGYWNlU2V0KGV4ZWNTdGF0ZSwgZG9jdW1lbnQsIGluaXRpYWxGYWNlcykpOwotICAgICAg
ICByZXN1bHQtPnN1c3BlbmRJZk5lZWRlZCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KKyAgICBzdGF0aWMgUmVmPEZvbnRGYWNlU2V0PiBjcmVhdGUoRG9jdW1lbnQmLCBjb25zdCBW
ZWN0b3I8UmVmUHRyPEZvbnRGYWNlPj4mIGluaXRpYWxGYWNlcyk7CisgICAgc3RhdGljIFJlZjxG
b250RmFjZVNldD4gY3JlYXRlKERvY3VtZW50JiwgQ1NTRm9udEZhY2VTZXQmIGJhY2tpbmcpOwog
ICAgIHZpcnR1YWwgfkZvbnRGYWNlU2V0KCk7CiAKLSAgICBib29sIGhhcyhGb250RmFjZSopIGNv
bnN0OworICAgIGJvb2wgaGFzKFJlZlB0cjxXZWJDb3JlOjpGb250RmFjZT4pIGNvbnN0OwogICAg
IHNpemVfdCBzaXplKCkgY29uc3Q7Ci0gICAgRm9udEZhY2VTZXQmIGFkZChGb250RmFjZSopOwot
ICAgIGJvb2wgcmVtb3ZlKEZvbnRGYWNlKik7CisgICAgRm9udEZhY2VTZXQmIGFkZChSZWZQdHI8
V2ViQ29yZTo6Rm9udEZhY2U+KTsKKyAgICBib29sIHJlbW92ZShSZWZQdHI8V2ViQ29yZTo6Rm9u
dEZhY2U+KTsKICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5n
JiBmb250LCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBs
b2FkKGZvbnQsIFN0cmluZygiICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZN
b3ZlKHByb21pc2UpLCBlYyk7IH0KLSAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiBmb250LCBj
b25zdCBTdHJpbmcmIHRleHQsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIGxvYWQoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgY29uc3QgU3Ry
aW5nJiBmb250LCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykg
eyBsb2FkKGV4ZWNTdGF0ZSwgZm9udCwgU3RyaW5nKCIgIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCksIFdURk1vdmUocHJvbWlzZSksIGVjKTsgfQorICAgIHZvaWQgbG9hZChKU0M6OkV4
ZWNTdGF0ZSYsIGNvbnN0IFN0cmluZyYgZm9udCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBEZWZlcnJl
ZFdyYXBwZXImJiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBjaGVjayhjb25z
dCBTdHJpbmcmIGZvbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjaGVjayhmb250LCBT
dHJpbmcoIiAiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgZWMpOyB9CiAgICAgYm9v
bCBjaGVjayhjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9u
Q29kZSYpOwogCkBAIC02OSwxNCArNjksMTYgQEAgcHVibGljOgogICAgIHR5cGVkZWYgRE9NUHJv
bWlzZTxGb250RmFjZVNldCYsIERPTUNvcmVFeGNlcHRpb24mPiBQcm9taXNlOwogICAgIFByb21p
c2UmIHByb21pc2UoSlNDOjpFeGVjU3RhdGUmKTsKIAorICAgIENTU0ZvbnRGYWNlU2V0JiBiYWNr
aW5nKCkgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKICAgICBjbGFzcyBJdGVyYXRvciB7CiAgICAg
cHVibGljOgogICAgICAgICBleHBsaWNpdCBJdGVyYXRvcihGb250RmFjZVNldCYpOwotICAgICAg
ICBib29sIG5leHQoRm9udEZhY2UqJiBuZXh0S2V5LCBGb250RmFjZSomIG5leHRWYWx1ZSk7Cisg
ICAgICAgIGJvb2wgbmV4dChKU0M6OkV4ZWNTdGF0ZSYsIFJlZlB0cjxGb250RmFjZT4mIG5leHRL
ZXksIFJlZlB0cjxGb250RmFjZT4mIG5leHRWYWx1ZSk7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBSZWY8Rm9udEZhY2VTZXQ+IG1fdGFyZ2V0OwotICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAg
fTsKKyAgICAgICAgc2l6ZV90IG1faW5kZXggeyAwIH07IC8vIEZJWE1FOiBUaGVyZSBuZWVkcyB0
byBiZSBhIG1lY2hhbmlzbSB0byBoYW5kbGUgd2hlbiBmb250cyBhcmUgYWRkZWQgb3IgcmVtb3Zl
ZCBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIEZvbnRGYWNlU2V0LgogICAgIH07CiAgICAgSXRlcmF0
b3IgY3JlYXRlSXRlcmF0b3IoKSB7IHJldHVybiBJdGVyYXRvcigqdGhpcyk7IH0KIApAQCAtMTAw
LDcgKzEwMiw4IEBAIHByaXZhdGU6CiAgICAgICAgIFByb21pc2UgcHJvbWlzZTsKICAgICB9Owog
Ci0gICAgRm9udEZhY2VTZXQoSlNDOjpFeGVjU3RhdGUmLCBEb2N1bWVudCYsIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Rm9udEZhY2U+PiYpOworICAgIEZvbnRGYWNlU2V0KERvY3VtZW50JiwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxGb250RmFjZT4+Jik7CisgICAgRm9udEZhY2VTZXQoRG9jdW1lbnQmLCBD
U1NGb250RmFjZVNldCYpOwogCiAgICAgdm9pZCBmdWxmaWxsUHJvbWlzZSgpOwogCkBAIC0xMTks
OCArMTIyLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBv
dmVycmlkZSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBv
dmVycmlkZSB7IGRlcmVmKCk7IH0KIAotICAgIENTU0ZvbnRGYWNlU2V0IG1fYmFja2luZzsKLSAg
ICBIYXNoTWFwPFJlZlB0cjxGb250RmFjZT4sIFZlY3RvcjxSZWY8UGVuZGluZ1Byb21pc2U+Pj4g
bV9wZW5kaW5nUHJvbWlzZXM7CisgICAgUmVmPENTU0ZvbnRGYWNlU2V0PiBtX2JhY2tpbmc7Cisg
ICAgSGFzaE1hcDxSZWZQdHI8Q1NTRm9udEZhY2U+LCBWZWN0b3I8UmVmPFBlbmRpbmdQcm9taXNl
Pj4+IG1fcGVuZGluZ1Byb21pc2VzOwogICAgIE9wdGlvbmFsPFByb21pc2U+IG1fcHJvbWlzZTsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaWRsCmluZGV4IGRlNzQ5MmQ4ZDFiNzU2YzQw
OWRiMTIzYTVlYWJmMzRiMmJmZTY0MzkuLmJmNjU5MzhjYzI0ZjVjZTE0NDkzODIwMWNiNjZiODU0
MGJiNjJkMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZVNldC5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmlkbApAQCAtMjksNyArMjksNyBA
QCBlbnVtIEZvbnRGYWNlU2V0TG9hZFN0YXR1cyB7CiB9OwogCiBbCi0gICAgQ29uc3RydWN0b3JD
YWxsV2l0aD1TY3JpcHRTdGF0ZSZEb2N1bWVudCwKKyAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURv
Y3VtZW50LAogICAgIENvbnN0cnVjdG9yKHNlcXVlbmNlPEZvbnRGYWNlPiBpbml0aWFsRmFjZXMp
CiBdIGludGVyZmFjZSBGb250RmFjZVNldCA6IEV2ZW50VGFyZ2V0IHsKICAgICBib29sZWFuIGhh
cyhGb250RmFjZSBmb250KTsKQEAgLTQ4LDcgKzQ4LDcgQEAgZW51bSBGb250RmFjZVNldExvYWRT
dGF0dXMgewogICAgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25sb2FkaW5nZG9uZTsKICAgICBh
dHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ubG9hZGluZ2Vycm9yOwogCi0gICAgW1JhaXNlc0V4Y2Vw
dGlvbl0gUHJvbWlzZSBsb2FkKERPTVN0cmluZyBmb250LCBvcHRpb25hbCBET01TdHJpbmcgdGV4
dCk7CisgICAgW1JhaXNlc0V4Y2VwdGlvbiwgQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIFByb21pc2Ug
bG9hZChET01TdHJpbmcgZm9udCwgb3B0aW9uYWwgRE9NU3RyaW5nIHRleHQpOwogICAgIFtSYWlz
ZXNFeGNlcHRpb25dIGJvb2xlYW4gY2hlY2soRE9NU3RyaW5nIGZvbnQsIG9wdGlvbmFsIERPTVN0
cmluZyB0ZXh0KTsKIAogICAgIFtDdXN0b21dIHJlYWRvbmx5IGF0dHJpYnV0ZSBQcm9taXNlIHJl
YWR5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggN2RlZDMwY2Y3ZjQ3NWFhZGVlZjhmODNk
MDViY2MyZDI2MTNlZGY0Ni4uZTM4MWIzNGViMzEyNjhkNmRlMzM3ZDI5Y2ZiY2IyNWEzYjk2MDE2
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC02Miw3ICs2Miw3IEBACiAjaW5jbHVkZSAi
RXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCIKICNpbmNs
dWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJGb250TG9hZGVyLmgiCisjaW5jbHVk
ZSAiRm9udEZhY2VTZXQuaCIKICNpbmNsdWRlICJGb3JtQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTY2ODQs
MTQgKzY2ODQsMTAgQEAgRG9jdW1lbnQmIERvY3VtZW50OjplbnN1cmVUZW1wbGF0ZURvY3VtZW50
KCkKIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMpCi1SZWZQdHI8Rm9u
dExvYWRlcj4gRG9jdW1lbnQ6OmZvbnRzKCkKK1JlZjxGb250RmFjZVNldD4gRG9jdW1lbnQ6OmZv
bnRzKCkKIHsKLSAgICBpZiAoIW1fZm9udGxvYWRlcikKLSAgICAgICAgbV9mb250bG9hZGVyID0g
Rm9udExvYWRlcjo6Y3JlYXRlKHRoaXMpOwotICAgIHJldHVybiBtX2ZvbnRsb2FkZXI7CisgICAg
cmV0dXJuIGZvbnRTZWxlY3RvcigpLmZvbnRGYWNlU2V0KCk7CiB9Ci0jZW5kaWYKIAogZmxvYXQg
RG9jdW1lbnQ6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
aW5kZXggZjE1YjAwNmRmZTEzNmNjMjI3OGI4OWE4NjBhZTMzMWFmZDA0YjEyNy4uOWU5ZGZhN2Zm
NGI4OWI5MjJlZGI0Y2I0OTUzYjNlN2I5NTQ2M2ZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAg
LTIwMSw5ICsyMDEsNyBAQCBjbGFzcyBUZXh0QXV0b3NpemVyOwogY2xhc3MgRE9NU2VjdXJpdHlQ
b2xpY3k7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShGT05UX0xPQURfRVZFTlRTKQotY2xhc3MgRm9u
dExvYWRlcjsKLSNlbmRpZgorY2xhc3MgRm9udEZhY2VTZXQ7CiAKIHR5cGVkZWYgaW50IEV4Y2Vw
dGlvbkNvZGU7CiAKQEAgLTEyNjcsOSArMTI2NSw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHRvcE9yaWdpbigpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsOwogCi0jaWYgRU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMpCi0gICAgUmVmUHRyPEZvbnRM
b2FkZXI+IGZvbnRzKCk7Ci0jZW5kaWYKKyAgICBSZWY8Rm9udEZhY2VTZXQ+IGZvbnRzKCk7CiAK
ICAgICB2b2lkIGVuc3VyZVBsdWdJbnNJbmplY3RlZFNjcmlwdChET01XcmFwcGVyV29ybGQmKTsK
IApAQCAtMTc1MSwxMCArMTc0Nyw2IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8Q1NTRm9udFNl
bGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKIAotI2lmIEVOQUJMRShGT05UX0xPQURfRVZFTlRTKQot
ICAgIFJlZlB0cjxGb250TG9hZGVyPiBtX2ZvbnRsb2FkZXI7Ci0jZW5kaWYKLQogI2lmIEVOQUJM
RShXRUJfUkVQTEFZKQogICAgIFJlZlB0cjxKU0M6OklucHV0Q3Vyc29yPiBtX2lucHV0Q3Vyc29y
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAppbmRleCA2MWM2N2M0YzIzMzM1ODM2MTIy
Y2JhNzNkMjU5NjRhOTA2OWE0ZjZlLi5kYTZlZDUzMWJlYmZmMjc2MDdmMzg0NWVlNTZiOWU1MjE5
NTBiZDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKQEAgLTI2NSw3ICsyNjUsNyBAQAogICAg
IFtDb25kaXRpb25hbD1DU1NfUkVHSU9OU10gRE9NTmFtZWRGbG93Q29sbGVjdGlvbiB3ZWJraXRH
ZXROYW1lZEZsb3dzKCk7CiAKICNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExB
TkdVQUdFX0pBVkFTQ1JJUFQKLSAgICBbQ29uZGl0aW9uYWw9Rk9OVF9MT0FEX0VWRU5UU10gcmVh
ZG9ubHkgYXR0cmlidXRlIEZvbnRMb2FkZXIgZm9udHM7CisgICAgcmVhZG9ubHkgYXR0cmlidXRl
IEZvbnRGYWNlU2V0IGZvbnRzOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEVOQUJMRV9JT1NfVE9V
Q0hfRVZFTlRTKSAmJiBFTkFCTEVfSU9TX1RPVUNIX0VWRU5UUwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnRGYWNlRWxlbWVudC5oCmluZGV4IGQyODI4M2EzM2I5ZTM1ZjViOGMzMDY0YWQ2NmYzNzhj
ZjY1Njg4MDguLjVlNGM1MDA5ZmUyOWU1MzA0MDEzZDI5MWJjYzZkMGI5YTA4NDQ2YTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVi
bGljOgogICAgIFNWR0ZvbnRFbGVtZW50KiBhc3NvY2lhdGVkRm9udEVsZW1lbnQoKSBjb25zdDsK
ICAgICB2b2lkIHJlYnVpbGRGb250RmFjZSgpOwogICAgIAotICAgIGNvbnN0IFN0eWxlUnVsZUZv
bnRGYWNlJiBmb250RmFjZVJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRGYWNlUnVsZS5nZXQo
KTsgfQorICAgIFN0eWxlUnVsZUZvbnRGYWNlJiBmb250RmFjZVJ1bGUoKSB7IHJldHVybiBtX2Zv
bnRGYWNlUnVsZS5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIFNWR0ZvbnRGYWNlRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1NTgyM2Q3NmFmMmEzOTk5
ZTJmZjBmZDQ4ZWFiOGRiYTcxZGUzMTI1Li43OGQyYTdmY2E4ZDU4YWJjOWY2ODczMDFlNTEwYjJm
YmQyM2Q1Y2RiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDItMjIgIE15bGVzIEMuIE1h
eGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbRm9udCBMb2FkaW5nXSBT
cGxpdCBDU1NGb250U2VsZWN0b3IgaW50byBhIEZvbnRGYWNlU2V0IGltcGxlbWVudGF0aW9uIGFu
ZCB0aGUgcmVzdCBvZiB0aGUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MzM0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogZmFzdC90ZXh0L2ZvbnQtZmFjZS1qYXZhc2NyaXB0Lmh0bWw6Cisg
ICAgICAgICogZmFzdC90ZXh0L2ZvbnQtZmFjZS1zZXQtZG9jdW1lbnQtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQvZm9udC1mYWNlLXNldC1kb2N1bWVudC5odG1sOiBB
ZGRlZC4KKwogMjAxNi0wMi0yMiAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZWJhc2VsaW5lIHRlc3RzIGZvciBpb3Mtc2ltdWxhdG9yIGFmdGVyIFczQyBI
VE1ML0RPTSByZS1zeW5jIGluIHIxOTY4ODMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
dGV4dC9mb250LWZhY2UtamF2YXNjcmlwdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2Zv
bnQtZmFjZS1qYXZhc2NyaXB0Lmh0bWwKaW5kZXggM2QzYTM3ZDM3MzE3YjYwZDhiNjFjMDJjYjZj
ZDZiZWJlZGFjODdiZi4uOGFlZGIzYzE1MzYwYjA4ZjY3YzZmN2JlNWZmZjUyNjE5YTE1OTU2ZiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2ZvbnQtZmFjZS1qYXZhc2NyaXB0Lmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2ZvbnQtZmFjZS1qYXZhc2NyaXB0Lmh0bWwK
QEAgLTEsNCArMSw1IEBACiA8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgogPGhlYWQ+CiA8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9mb250LWZhY2Utc2V0LWRvY3VtZW50
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9mb250LWZhY2Utc2V0LWRvY3Vt
ZW50LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjQ0ZTBkZWMxMzkxOTg0OTYyOWI1OGMyMGQw
N2MxMzAyMzM5MzU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2Zv
bnQtZmFjZS1zZXQtZG9jdW1lbnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1BBU1Mg
ZG9jdW1lbnQuZm9udHMuc2l6ZSBpcyAyCitQQVNTIG9iamVjdC5kb25lIGlzIGZhbHNlCitQQVNT
IG9iamVjdC52YWx1ZS5mYW1pbHkgaXMgIk15Rm9udDEiCitQQVNTIG9iamVjdC5kb25lIGlzIGZh
bHNlCitQQVNTIG9iamVjdC52YWx1ZS5mYW1pbHkgaXMgIk15Rm9udDIiCitQQVNTIG9iamVjdC5k
b25lIGlzIHRydWUKK1BBU1MgZm9udEZhY2VTZXQuc2l6ZSBpcyAyCitQQVNTIG9iamVjdC5kb25l
IGlzIGZhbHNlCitQQVNTIG9iamVjdC52YWx1ZS5mYW1pbHkgaXMgIk15Rm9udDEiCitQQVNTIG9i
amVjdC5kb25lIGlzIGZhbHNlCitQQVNTIG9iamVjdC52YWx1ZS5mYW1pbHkgaXMgIk15Rm9udDIi
CitQQVNTIG9iamVjdC5kb25lIGlzIHRydWUKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InRlc3RFbGVtZW50Iikub2Zmc2V0V2lkdGggaXMgbm90IG9yaWdpbmFsV2lkdGgKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RFbGVtZW50Iikub2Zmc2V0V2lkdGggaXMgb3JpZ2lu
YWxXaWR0aAorUEFTUyBvYmplY3QubGVuZ3RoIGlzIDIKK1BBU1Mgb2JqZWN0WzBdLmZhbWlseSBp
cyAiTXlGb250MyIKK1BBU1Mgb2JqZWN0WzFdLmZhbWlseSBpcyAiTXlGb250MyIKK1BBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RFbGVtZW50Iikub2Zmc2V0V2lkdGggaXMgbm90IG9y
aWdpbmFsV2lkdGgKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RFbGVtZW50Iiku
b2Zmc2V0V2lkdGggaXMgb3JpZ2luYWxXaWR0aAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCitPbiBMb2FkIEV4ZWN1dGVkLgorbApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC90ZXh0L2ZvbnQtZmFjZS1zZXQtZG9jdW1lbnQuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvdGV4dC9mb250LWZhY2Utc2V0LWRvY3VtZW50Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Zjc0NTNkM2Y0YWY1NzFjZWE2OTYwMDJmYmQ5ODQxMDlhZmE5ZGJlMgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9mb250LWZhY2Utc2V0LWRvY3VtZW50Lmh0bWwKQEAg
LTAsMCArMSwxMDUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIGlk
PSJzdHlsZUVsZW1lbnQiPgorQGZvbnQtZmFjZSB7CisgICAgZm9udC1mYW1pbHk6ICJNeUZvbnQx
IjsKKyAgICBzcmM6IHVybCgiLi4vLi4vcmVzb3VyY2VzL0FoZW0udHRmIikgZm9ybWF0KCJ0cnVl
dHlwZSIpOworfQorQGZvbnQtZmFjZSB7CisgICAgZm9udC1mYW1pbHk6ICJNeUZvbnQyIjsKKyAg
ICBzcmM6IHVybCgiLi4vLi4vcmVzb3VyY2VzL0FoZW0ub3RmIikgZm9ybWF0KCJvcGVudHlwZSIp
OworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ib25Mb2FkRWxlbWVudCI+
PC9kaXY+Cis8c3BhbiBpZD0idGVzdEVsZW1lbnQiIHN0eWxlPSJmb250OiA1MHB4IEFwcGxpZWRG
b250Ij5sPC9zcGFuPgorPHNjcmlwdD4KK3dpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib25Mb2FkRWxlbWVudCIpLmlubmVyVGV4dCA9ICJP
biBMb2FkIEV4ZWN1dGVkLiI7Cit9Cit2YXIgb3JpZ2luYWxXaWR0aCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ0ZXN0RWxlbWVudCIpLm9mZnNldFdpZHRoOworCitzaG91bGRCZSgiZG9jdW1l
bnQuZm9udHMuc2l6ZSIsICIyIik7Cit2YXIgaXRlcmF0b3IgPSBkb2N1bWVudC5mb250cy5rZXlz
KCk7Cit2YXIgb2JqZWN0ID0gaXRlcmF0b3IubmV4dCgpOworc2hvdWxkQmVGYWxzZSgib2JqZWN0
LmRvbmUiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygib2JqZWN0LnZhbHVlLmZhbWlseSIsICJN
eUZvbnQxIik7CitvYmplY3QgPSBpdGVyYXRvci5uZXh0KCk7CitzaG91bGRCZUZhbHNlKCJvYmpl
Y3QuZG9uZSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJvYmplY3QudmFsdWUuZmFtaWx5Iiwg
Ik15Rm9udDIiKTsKK29iamVjdCA9IGl0ZXJhdG9yLm5leHQoKTsKK3Nob3VsZEJlVHJ1ZSgib2Jq
ZWN0LmRvbmUiKTsKKwordmFyIGZvbnRGYWNlU2V0ID0gbmV3IEZvbnRGYWNlU2V0KFtdKTsKK2Zv
bnRGYWNlU2V0LmFkZChuZXcgRm9udEZhY2UoIk15Rm9udDIiLCAidXJsKFwiYXNkZlwiKSIsIHt9
KSk7Citmb250RmFjZVNldC5hZGQoZG9jdW1lbnQuZm9udHMua2V5cygpLm5leHQoKS52YWx1ZSk7
CitzaG91bGRCZSgiZm9udEZhY2VTZXQuc2l6ZSIsICIyIik7CitpdGVyYXRvciA9IGZvbnRGYWNl
U2V0LmtleXMoKTsKK29iamVjdCA9IGl0ZXJhdG9yLm5leHQoKTsKK3Nob3VsZEJlRmFsc2UoIm9i
amVjdC5kb25lIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm9iamVjdC52YWx1ZS5mYW1pbHki
LCAiTXlGb250MSIpOworb2JqZWN0ID0gaXRlcmF0b3IubmV4dCgpOworc2hvdWxkQmVGYWxzZSgi
b2JqZWN0LmRvbmUiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygib2JqZWN0LnZhbHVlLmZhbWls
eSIsICJNeUZvbnQyIik7CitvYmplY3QgPSBpdGVyYXRvci5uZXh0KCk7CitzaG91bGRCZVRydWUo
Im9iamVjdC5kb25lIik7CisKK2l0ZXJhdG9yID0gdW5kZWZpbmVkOworb2JqZWN0ID0gdW5kZWZp
bmVkOworCitzZWxmLmpzVGVzdElzQXN5bmMgPSB0cnVlOworZnVuY3Rpb24gc3RhcnRMb2FkaW5n
KCkgeworICAgIHZhciBhcHBsaWVkRm9udCA9IHVuZGVmaW5lZDsKKyAgICBkb2N1bWVudC5mb250
cy5rZXlzKCkubmV4dCgpLnZhbHVlLmxvYWQoKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gZG9jdW1lbnQuZm9udHMua2V5cygpLm5leHQoKS52YWx1ZS5sb2FkZWQ7CisgICAgfSwg
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIkxvYWRpbmcgc2hvdWxkIHN1Y2NlZWQu
Iik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGRvY3VtZW50LmZvbnRzLmtleXMoKS5uZXh0KCkudmFsdWUuZmFtaWx5ID0gIkFwcGxp
ZWRGb250IjsKKyAgICAgICAgc2hvdWxkTm90QmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwi
dGVzdEVsZW1lbnRcIikub2Zmc2V0V2lkdGgiLCAib3JpZ2luYWxXaWR0aCIpOworICAgICAgICBk
b2N1bWVudC5mb250cy5rZXlzKCkubmV4dCgpLnZhbHVlLmZhbWlseSA9ICJNeUZvbnQxIjsKKyAg
ICAgICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGVzdEVsZW1lbnRcIiku
b2Zmc2V0V2lkdGgiLCAib3JpZ2luYWxXaWR0aCIpOworICAgICAgICBkb2N1bWVudC5mb250cy5h
ZGQobmV3IEZvbnRGYWNlKCJNeUZvbnQzIiwgInVybChcIi4uLy4uL3Jlc291cmNlcy9BaGVtLm90
ZlwiKSIsIHt9KSk7CisgICAgICAgIHJldHVybiBkb2N1bWVudC5mb250cy5sb2FkKCJNeUZvbnQz
Iik7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlRoZSBzYW1lIHBy
b21pc2Ugc2hvdWxkIG5vdCBmYWlsIGFuZCB0aGVuIHN1Y2NlZWQuIik7CisgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQo
IlNob3VsZCBub3QgYmUgYWJsZSB0byBwYXJzZSBhcyBhIGZvbnQ6IHByb3BlcnR5LiIpOworICAg
ICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgZG9jdW1l
bnQuZm9udHMuYWRkKG5ldyBGb250RmFjZSgiTXlGb250MyIsICJ1cmwoXCIuLi8uLi9yZXNvdXJj
ZXMvQWhlbS50dGZcIikiLCB7J3ZhcmlhbnQnOiAnc21hbGwtY2Fwcyd9KSk7CisgICAgICAgIHJl
dHVybiBkb2N1bWVudC5mb250cy5sb2FkKCI1MHB4IE15Rm9udDMiKTsKKyAgICB9KS50aGVuKGZ1
bmN0aW9uKHgpIHsKKyAgICAgICAgb2JqZWN0ID0geDsKKyAgICAgICAgc2hvdWxkQmUoIm9iamVj
dC5sZW5ndGgiLCAiMiIpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm9iamVjdFsw
XS5mYW1pbHkiLCAiTXlGb250MyIpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIm9i
amVjdFsxXS5mYW1pbHkiLCAiTXlGb250MyIpOworICAgICAgICBvYmplY3QgPSB1bmRlZmluZWQ7
CisgICAgICAgIGFwcGxpZWRGb250ID0gbmV3IEZvbnRGYWNlKCJBcHBsaWVkRm9udCIsICJ1cmwo
XCIuLi8uLi9yZXNvdXJjZXMvQWhlbS5vdGZcIikiLCB7fSk7CisgICAgICAgIGRvY3VtZW50LmZv
bnRzLmFkZChhcHBsaWVkRm9udCk7CisgICAgICAgIHJldHVybiBhcHBsaWVkRm9udC5sb2FkZWQ7
CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIkxvYWRpbmcgc2hvdWxk
IHN1Y2NlZWQuIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pLnRoZW4oZnVuY3Rp
b24oeCkgeworICAgICAgICBzaG91bGROb3RCZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0
ZXN0RWxlbWVudFwiKS5vZmZzZXRXaWR0aCIsICJvcmlnaW5hbFdpZHRoIik7CisgICAgICAgIGRv
Y3VtZW50LmZvbnRzLmRlbGV0ZShhcHBsaWVkRm9udCk7CisgICAgICAgIHNob3VsZEJlKCJkb2N1
bWVudC5nZXRFbGVtZW50QnlJZChcInRlc3RFbGVtZW50XCIpLm9mZnNldFdpZHRoIiwgIm9yaWdp
bmFsV2lkdGgiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7
CisgICAgICAgIHRlc3RGYWlsZWQoIkxvYWRpbmcgc2hvdWxkIHN1Y2NlZWQuIik7CisgICAgICAg
IGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfQoraWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisg
ICAgd2luZG93LkdDQ29udHJvbGxlci5jb2xsZWN0KCk7CitzdGFydExvYWRpbmcoKTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>