<?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>148355</bug_id>
          
          <creation_ts>2015-08-21 22:11:15 -0700</creation_ts>
          <short_desc>@font-face related cleanup</short_desc>
          <delta_ts>2015-08-24 01:10:22 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1120085</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-21 22:11:15 -0700</bug_when>
    <thetext>@font-face related cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120086</commentid>
    <comment_count>1</comment_count>
      <attachid>259711</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-21 22:18:26 -0700</bug_when>
    <thetext>Created attachment 259711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120099</commentid>
    <comment_count>2</comment_count>
      <attachid>259717</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-22 01:58:53 -0700</bug_when>
    <thetext>Created attachment 259717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120101</commentid>
    <comment_count>3</comment_count>
      <attachid>259719</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-22 02:31:57 -0700</bug_when>
    <thetext>Created attachment 259719
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120178</commentid>
    <comment_count>4</comment_count>
      <attachid>259719</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-08-23 09:08:04 -0700</bug_when>
    <thetext>Comment on attachment 259719
Patch

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

&gt; Source/WebCore/css/CSSFontFace.cpp:101
&gt; +    for (CSSSegmentedFontFace* face : m_segmentedFontFaces)

When I write a like like this, I write auto* because I don’t feel the need to recite the class name to make the one line of code below readable and auto is much shorter and can never accidentally widen a type to a base class pointer.

&gt; Source/WebCore/css/CSSFontSelector.cpp:93
&gt; +            return Optional&lt;FontTraitsMask&gt;();

Instead I think this can and should be:

    return Nullopt;

Could also possibly use:

    return { };

&gt; Source/WebCore/css/CSSFontSelector.cpp:187
&gt; +    if (RuntimeEnabledFeatures::sharedFeatures().fontLoadEventsEnabled())
&gt; +        rule = static_pointer_cast&lt;CSSFontFaceRule&gt;(fontFaceRule-&gt;createCSSOMWrapper());

I would not expect this to compile. There is no local variable with the type fontFaceRule in scope here.

I know you just moved this, but seems really awkward to have to cast to CSSFontFaceRule. Can we override createCSSOMWrapper in StyleRuleFontFace to narrow the type there rather than here at the call site?

&gt; Source/WebCore/css/CSSFontSelector.cpp:236
&gt; +        return String();

I like to use { } instead of String() here in new code. What do you think?

&gt; Source/WebCore/css/CSSFontSelector.cpp:263
&gt; +    RefPtr&lt;CSSValue&gt; fontFamily = style.getPropertyCSSValue(CSSPropertyFontFamily);
&gt; +    RefPtr&lt;CSSValue&gt; src = style.getPropertyCSSValue(CSSPropertySrc);
&gt; +    RefPtr&lt;CSSValue&gt; unicodeRange = style.getPropertyCSSValue(CSSPropertyUnicodeRange);

I’m not sure why getPropertyCSSValue returns a PassRefPtr; it’s returning internal state, not creating a new object. Using smart pointers here results in unnecessary reference count churn and extra &quot;get&quot; calls and such.

&gt; Source/WebCore/css/CSSFontSelector.cpp:281
&gt; +    FontTraitsMask traitsMask;
&gt; +    if (Optional&lt;FontTraitsMask&gt; computedTraitsMask = computeTraitsMask(style))
&gt; +        traitsMask = computedTraitsMask.value();
&gt; +    else
&gt; +        return;

I’d suggest using auto here.

I also think the early return is easier to read, even though it doesn’t scope the computed traits mask local as tightly.

auto computedTraitsMask = computeTraitsMask(style);
if (!computedTraitsMask)
    return;
auto traitsMask = computedTraitsMask.value();

&gt; Source/WebCore/css/CSSFontSelector.cpp:300
&gt; +        auto&amp; familyFontFaces = m_fontFaces.add(familyName, nullptr).iterator-&gt;value;

Why do we use unique_ptr&lt;Vector&gt; instead of just Vector in this map? Is it really more efficient to do that?

&gt; Source/WebCore/css/CSSFontSelector.cpp:304
&gt;              ASSERT(!m_locallyInstalledFontFaces.contains(familyName));

Can all the code in scope in this if statement go into a function? It really seems to distract from the main purpose of the addFontFaceRule function, and I don’t think it even uses anything except &quot;this&quot; and &quot;familyName&quot;.

&gt; Source/WebCore/css/CSSFontSelector.cpp:306
&gt; +            Vector&lt;FontTraitsMask&gt; locallyInstalledFontsTraitsMasks = FontCache::singleton().getTraitsInFamily(familyName);

Given its narrow scope, I suggest just calling this “traitsMasks”.

&gt; Source/WebCore/css/CSSFontSelector.cpp:308
&gt; +                auto familyLocallyInstalledFaces = std::make_unique&lt;Vector&lt;Ref&lt;CSSFontFace&gt;&gt;&gt;();

I don’t think we need the word family in this local variable. Frankly, given its narrow scope, I might just suggest calling it “faces”.

&gt; Source/WebCore/css/CSSFontSelector.cpp:309
&gt; +                for (FontTraitsMask mask : locallyInstalledFontsTraitsMasks) {

auto here?

&gt; Source/WebCore/css/CSSFontSelector.cpp:310
&gt; +                    Ref&lt;CSSFontFace&gt; locallyInstalledFontFace = CSSFontFace::create(mask, nullptr, true);

auto here?

Given its narrow scope, I suggest just calling this local variable “face”.

&gt; Source/WebCore/css/CSSFontSelector.cpp:315
&gt;                  m_locallyInstalledFontFaces.set(familyName, WTF::move(familyLocallyInstalledFaces));

Should use add here rather than set.

&gt; Source/WebCore/css/CSSFontSelector.cpp:481
&gt; +    Vector&lt;Ref&lt;CSSFontFace&gt;&gt;* familyFontFaces = m_fontFaces.get(family);

I suggest using auto* here.

&gt; Source/WebCore/css/CSSFontSelector.cpp:512
&gt; +        if (Vector&lt;Ref&lt;CSSFontFace&gt;&gt;* familyLocallyInstalledFontFaces = m_locallyInstalledFontFaces.get(family)) {

I suggest auto* here. Also, given the narrow scope, I would just call this “faces”.

&gt; Source/WebCore/css/CSSFontSelector.cpp:525
&gt; +        for (auto&amp; candidateFontFace : candidateFontFaces)

Given the narrow scope, I suggest just calling this “face”.

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:248
&gt; +        return Vector&lt;FontTraitsMask&gt;();

I like to use { } here instead of restating the type.

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:252
&gt; +        return Vector&lt;FontTraitsMask&gt;();

Ditto.

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:254
&gt; +    Vector&lt;FontTraitsMask&gt; traitsMasks;

This will be slightly more efficient if we use reserveInitialCapacity and uncheckedAppend.

&gt; Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp:142
&gt; +    return Vector&lt;FontTraitsMask&gt;();

return { };

&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:561
&gt; +    Vector&lt;FontTraitsMask&gt; result;
&gt; +    for (unsigned mask : procData.m_traitsMasks)
&gt; +        result.append(static_cast&lt;FontTraitsMask&gt;(mask));
&gt; +    return result;

This would be slightly more efficient if we used reserveInitialCapacity and uncheckedAppend. That’s one benefit of the copyToVector template function and makes me wish we had one that like for creating a new vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120241</commentid>
    <comment_count>5</comment_count>
      <attachid>259719</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-24 00:12:37 -0700</bug_when>
    <thetext>Comment on attachment 259719
Patch

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

&gt;&gt; Source/WebCore/css/CSSFontSelector.cpp:187
&gt;&gt; +        rule = static_pointer_cast&lt;CSSFontFaceRule&gt;(fontFaceRule-&gt;createCSSOMWrapper());
&gt; 
&gt; I would not expect this to compile. There is no local variable with the type fontFaceRule in scope here.
&gt; 
&gt; I know you just moved this, but seems really awkward to have to cast to CSSFontFaceRule. Can we override createCSSOMWrapper in StyleRuleFontFace to narrow the type there rather than here at the call site?

FONT_LOAD_EVENTS are off :|

&gt;&gt; Source/WebCore/css/CSSFontSelector.cpp:236
&gt;&gt; +        return String();
&gt; 
&gt; I like to use { } instead of String() here in new code. What do you think?

I think in some cases it is valuable to restate the return type (if the code is sufficiently complicated). In this case, I don&apos;t think it is, so I prefer { }.

&gt;&gt; Source/WebCore/css/CSSFontSelector.cpp:263
&gt;&gt; +    RefPtr&lt;CSSValue&gt; unicodeRange = style.getPropertyCSSValue(CSSPropertyUnicodeRange);
&gt; 
&gt; I’m not sure why getPropertyCSSValue returns a PassRefPtr; it’s returning internal state, not creating a new object. Using smart pointers here results in unnecessary reference count churn and extra &quot;get&quot; calls and such.

This is a good idea for a follow up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120242</commentid>
    <comment_count>6</comment_count>
      <attachid>259750</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-24 00:15:53 -0700</bug_when>
    <thetext>Created attachment 259750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120243</commentid>
    <comment_count>7</comment_count>
      <attachid>259719</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-24 00:24:28 -0700</bug_when>
    <thetext>Comment on attachment 259719
Patch

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

&gt;&gt; Source/WebCore/css/CSSFontSelector.cpp:300
&gt;&gt; +        auto&amp; familyFontFaces = m_fontFaces.add(familyName, nullptr).iterator-&gt;value;
&gt; 
&gt; Why do we use unique_ptr&lt;Vector&gt; instead of just Vector in this map? Is it really more efficient to do that?

I suspect it&apos;s because the author wanted to use HashMap::get() instead of HashMap::find(). Instead, we want to use find().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120244</commentid>
    <comment_count>8</comment_count>
      <attachid>259751</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-24 00:40:14 -0700</bug_when>
    <thetext>Created attachment 259751
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120247</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-24 01:06:13 -0700</bug_when>
    <thetext>Committed r188853: &lt;http://trac.webkit.org/changeset/188853&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120250</commentid>
    <comment_count>10</comment_count>
      <attachid>259719</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-08-24 01:10:22 -0700</bug_when>
    <thetext>Comment on attachment 259719
Patch

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

&gt;&gt;&gt; Source/WebCore/css/CSSFontSelector.cpp:263
&gt;&gt;&gt; +    RefPtr&lt;CSSValue&gt; unicodeRange = style.getPropertyCSSValue(CSSPropertyUnicodeRange);
&gt;&gt; 
&gt;&gt; I’m not sure why getPropertyCSSValue returns a PassRefPtr; it’s returning internal state, not creating a new object. Using smart pointers here results in unnecessary reference count churn and extra &quot;get&quot; calls and such.
&gt; 
&gt; This is a good idea for a follow up patch.

https://bugs.webkit.org/show_bug.cgi?id=148374</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259711</attachid>
            <date>2015-08-21 22:18:26 -0700</date>
            <delta_ts>2015-08-22 01:58:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148355-20150821221820.patch</filename>
            <type>text/plain</type>
            <size>31732</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4ODE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDYyY2EyMzJlMzYwYTI0
ZDU3NDg5YjY5OTc0MjViOTBiZDIxYjE4OS4uOTlmYTU4NDQzODRiNzdmM2MyOGRkMjQzNjMyNjA5
ZGE2MDJkMTk5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE1LTA4LTIxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQGZvbnQtZmFj
ZSByZWxhdGVkIGNsZWFudXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0ODM1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVwIG11Y2ggb2Ygb3VyIGNvZGUgcmVsYXRlZCB0
byB3ZWIgZm9udHMuIEluIGdlbmVyYWwsIGl0CisgICAgICAgIG1pZ3JhdGVzIHRvIHVzaW5nIEMr
KyBmb3ItZWFjaCBzdHlsZSBsb29wcywgdXNlcyBSZWYgaW5zdGVhZCBvZiBSZWZQdHIgd2hlbgor
ICAgICAgICB0aGluZ3MgY2FuJ3QgYmUgbnVsbHB0ciwgbWlncmF0ZXMgdG8gQysrIFJ2YWx1ZS1y
ZWZlcmVuY2VzIGluc3RlYWQgb2YKKyAgICAgICAgUGFzc1JlZlB0ciwgYW5kIHJlZmFjdG9ycyBD
U1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSgpIHRvIHVzZSBoZWxwZXIKKyAgICAgICAg
ZnVuY3Rpb25zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJl
aGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9udExvYWRlZCk6IFVzZSBhIEMrKyBmb3ItZWFjaCBs
b29wLgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Rm9udEZhY2U6OmNyZWF0ZSk6IFVzZSBDKysgUnZhbHVlLXJlZmVyZW5jZXMgaW5zdGVhZCBvZgor
ICAgICAgICBQYXNzUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OkNTU0Zv
bnRGYWNlKTogRGl0dG8uCisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb21wdXRlVHJhaXRzTWFzayk6IE1pZ3JhdGVkIGEgY2h1bmsgb2YKKyAg
ICAgICAgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoKSBpbnRvIHRoaXMgaGVscGVy
IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9udEZhY2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6IENhbGwgdGhlIG5l
d2x5LWNyZWF0ZWQgaGVscGVyCisgICAgICAgIGZ1bmN0aW9ucy4gSW4gYWRkaXRpb24sIG1pZ3Jh
dGUgdG8gUmVmcyBpbnN0ZWFkIG9mIFJlZlB0cnMuCisgICAgICAgIChXZWJDb3JlOjpjb21wYXJl
Rm9udEZhY2VzKTogTWlncmF0ZSB0byByZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnRGYWNlKTogTWlncmF0ZSB0
byBSZWZzIGluc3RlYWQgb2YKKyAgICAgICAgUmVmUHRycy4gQWxzbyB1c2UgQysrIGZvci1lYWNo
IGxvb3BzLgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuaDoKKyAgICAgICAgKiBjc3Mv
Q1NTU2VnbWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVk
Rm9udEZhY2U6On5DU1NTZWdtZW50ZWRGb250RmFjZSk6IFVzZSBDKysgZm9yLWVhY2gKKyAgICAg
ICAgbG9vcHMuCisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6aXNWYWxp
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OmFwcGVu
ZEZvbnRGYWNlKTogTWlncmF0ZSB0byBSdmFsdWUtCisgICAgICAgIHJlZmVyZW5jZXMgaW5zdGVh
ZCBvZiBQYXNzUmVmUHRyLgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBSZXR1cm4gdGhlIHJlc3VsdCBpbnN0
ZWFkIG9mIGJlaW5nCisgICAgICAgIHBhc3NlZCBhbiBvdXQgcGFyYW1ldGVyLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnRyYWl0c0luRmFtaWx5RW51bVByb2MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBEaXR0by4KKwogMjAxNS0wOC0yMSAgQ29t
bWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjE4ODc5MiBhbmQgcjE4ODgwMy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2UuY3BwCmluZGV4IGY2MmE1ZmJkOTdlZTY3MDIwNzdjYzhhYzYwZmQzN2ZhZGE4YTQ5MWUuLmEx
YWI5M2UzMWRjYjUzZDdmYjgzMjRiZDA4NDQ4MDFlNDY1M2RhYzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlLmNwcApAQCAtOTgsOSArOTgsOCBAQCB2b2lkIENTU0ZvbnRGYWNlOjpmb250TG9h
ZGVkKENTU0ZvbnRGYWNlU291cmNlKiBzb3VyY2UpCiAgICAgfQogI2VuZGlmCiAKLSAgICBIYXNo
U2V0PENTU1NlZ21lbnRlZEZvbnRGYWNlKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2VnbWVudGVkRm9u
dEZhY2VzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxDU1NTZWdtZW50ZWRGb250RmFjZSo+Ojpp
dGVyYXRvciBpdCA9IG1fc2VnbWVudGVkRm9udEZhY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgKCppdCktPmZvbnRMb2FkZWQodGhpcyk7CisgICAgZm9yIChDU1NTZWdtZW50
ZWRGb250RmFjZSogZmFjZSA6IG1fc2VnbWVudGVkRm9udEZhY2VzKQorICAgICAgICBmYWNlLT5m
b250TG9hZGVkKHRoaXMpOwogCiAjaWYgRU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMpCiAgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuZm9udExvYWRFdmVudHNF
bmFibGVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCmluZGV4IGRiNjdiYzY2NDMzYjVmNTAw
OGVhZWRmNWQ5YjE1MGE5MDE2Y2JkMjUuLjllYjAyMWEzZjM5NmI4MTQ4MjZhZDg5MmJmMjRmYTkw
OTRkMWY4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCkBAIC00NCw3ICs0NCw3IEBAIGNs
YXNzIEZvbnQ7CiAKIGNsYXNzIENTU0ZvbnRGYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTRm9u
dEZhY2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGUoRm9u
dFRyYWl0c01hc2sgdHJhaXRzTWFzaywgUGFzc1JlZlB0cjxDU1NGb250RmFjZVJ1bGU+IHJ1bGUs
IGJvb2wgaXNMb2NhbEZhbGxiYWNrID0gZmFsc2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NT
Rm9udEZhY2UodHJhaXRzTWFzaywgcnVsZSwgaXNMb2NhbEZhbGxiYWNrKSk7IH0KKyAgICBzdGF0
aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGUoRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzaywgUmVm
UHRyPENTU0ZvbnRGYWNlUnVsZT4mJiBydWxlLCBib29sIGlzTG9jYWxGYWxsYmFjayA9IGZhbHNl
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZvbnRGYWNlKHRyYWl0c01hc2ssIFdURjo6bW92
ZShydWxlKSwgaXNMb2NhbEZhbGxiYWNrKSk7IH0KIAogICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0
c01hc2soKSBjb25zdCB7IHJldHVybiBtX3RyYWl0c01hc2s7IH0KIApAQCAtOTIsNyArOTIsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBDU1NGb250RmFjZShGb250VHJhaXRz
TWFzayB0cmFpdHNNYXNrLCBQYXNzUmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4gcnVsZSwgYm9vbCBp
c0xvY2FsRmFsbGJhY2spCisgICAgQ1NTRm9udEZhY2UoRm9udFRyYWl0c01hc2sgdHJhaXRzTWFz
aywgUmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4mJiBydWxlLCBib29sIGlzTG9jYWxGYWxsYmFjaykK
ICAgICAgICAgOiBtX3RyYWl0c01hc2sodHJhaXRzTWFzaykKICAgICAgICAgLCBtX2FjdGl2ZVNv
dXJjZSgwKQogICAgICAgICAsIG1faXNMb2NhbEZhbGxiYWNrKGlzTG9jYWxGYWxsYmFjaykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggMjY5ZGRmY2RhN2VlZThjZjU5
YzAzYmFhMTFjYjE3MWQ1ZDQ4ZGI4MS4uMGRmNDQwZDBjYjZiZmNkM2EwOGJjNDZkNDJiNmVmNTI0
MjM0NGJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTg0LDMx
ICs4NCwxMyBAQCBib29sIENTU0ZvbnRTZWxlY3Rvcjo6aXNFbXB0eSgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fZm9udHMuaXNFbXB0eSgpOwogfQogCi12b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9u
dEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUsIGJvb2wgaXNJ
bml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSkKK3N0YXRpYyBPcHRpb25hbDxG
b250VHJhaXRzTWFzaz4gY29tcHV0ZVRyYWl0c01hc2soY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBz
dHlsZSkKIHsKLSAgICAvLyBPYnRhaW4gdGhlIGZvbnQtZmFtaWx5IHByb3BlcnR5IGFuZCB0aGUg
c3JjIHByb3BlcnR5LiAgQm90aCBtdXN0IGJlIGRlZmluZWQuCi0gICAgY29uc3QgU3R5bGVQcm9w
ZXJ0aWVzJiBzdHlsZSA9IGZvbnRGYWNlUnVsZS0+cHJvcGVydGllcygpOwotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gZm9udEZhbWlseSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlGb250RmFtaWx5KTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHNyYyA9IHN0eWxlLmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlTcmMpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29k
ZVJhbmdlID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVSYW5n
ZSk7Ci0gICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KGZvbnRGYW1pbHkuZ2V0KCkpIHx8ICFpczxD
U1NWYWx1ZUxpc3Q+KHNyYy5nZXQoKSkgfHwgKHVuaWNvZGVSYW5nZSAmJiAhaXM8Q1NTVmFsdWVM
aXN0PigqdW5pY29kZVJhbmdlKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1ZhbHVlTGlz
dCYgZmFtaWx5TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZvbnRGYW1pbHkpOwotICAg
IGlmICghZmFtaWx5TGlzdC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTVmFs
dWVMaXN0JiBzcmNMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pigqc3JjKTsKLSAgICBpZiAo
IXNyY0xpc3QubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1ZhbHVlTGlzdCog
cmFuZ2VMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih1bmljb2RlUmFuZ2UuZ2V0KCkpOwot
CiAgICAgdW5zaWduZWQgdHJhaXRzTWFzayA9IDA7CiAKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVl
PiBmb250U3R5bGUgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0
eWxlKSkgewogICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFN0eWxlKSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxGb250VHJh
aXRzTWFzaz4oKTsKIAogICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqZm9udFN0eWxlKS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1h
bDoKQEAgLTEyNiw3ICsxMDgsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VS
dWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUsIGJvbwogCiAgICAgaWYg
KFJlZlB0cjxDU1NWYWx1ZT4gZm9udFdlaWdodCA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlGb250V2VpZ2h0KSkgewogICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqZm9udFdlaWdodCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1
cm4gT3B0aW9uYWw8Rm9udFRyYWl0c01hc2s+KCk7CiAKICAgICAgICAgc3dpdGNoIChkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkgewogICAgICAg
ICBjYXNlIENTU1ZhbHVlQm9sZDoKQEAgLTE3MSwxMiArMTUzLDEyIEBAIHZvaWQgQ1NTRm9udFNl
bGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNl
UnVsZSwgYm9vCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoZm9udFZhcmlhbnQucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgICAgICBmb250VmFyaWFudCA9IGxpc3QucmVsZWFzZU5vbk51bGwo
KTsKICAgICAgICAgfSBlbHNlIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqZm9udFZhcmlhbnQpKQot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPEZvbnRUcmFp
dHNNYXNrPigpOwogCiAgICAgICAgIENTU1ZhbHVlTGlzdCYgdmFyaWFudExpc3QgPSBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCpmb250VmFyaWFudCk7CiAgICAgICAgIHVuc2lnbmVkIG51bVZhcmlh
bnRzID0gdmFyaWFudExpc3QubGVuZ3RoKCk7CiAgICAgICAgIGlmICghbnVtVmFyaWFudHMpCi0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Rm9udFRyYWl0
c01hc2s+KCk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhcmlhbnRz
OyArK2kpIHsKICAgICAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhcmlhbnRMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpLT5nZXRWYWx1ZUlEKCkpIHsK
QEAgLTE5Myw4ICsxNzUsMTggQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVs
ZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlLCBib28KICAgICB9IGVsc2UK
ICAgICAgICAgdHJhaXRzTWFzayB8PSBGb250VmFyaWFudE1hc2s7CiAKLSAgICAvLyBFYWNoIGl0
ZW0gaW4gdGhlIHNyYyBwcm9wZXJ0eSdzIGxpc3QgaXMgYSBzaW5nbGUgQ1NTRm9udEZhY2VTb3Vy
Y2UuIFB1dCB0aGVtIGFsbCBpbnRvIGEgQ1NTRm9udEZhY2UuCi0gICAgUmVmUHRyPENTU0ZvbnRG
YWNlPiBmb250RmFjZTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KHRy
YWl0c01hc2spOworfQorCitzdGF0aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGVGb250RmFjZShD
U1NWYWx1ZUxpc3QmIHNyY0xpc3QsIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2ssIERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVl
KQoreworICAgIFJlZlB0cjxDU1NGb250RmFjZVJ1bGU+IHJ1bGU7CisjaWYgRU5BQkxFKEZPTlRf
TE9BRF9FVkVOVFMpCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTIxMTYgLSBUaGlzIENTU0ZvbnRGYWNlUnVsZSBoYXMgbm8gcGFyZW50Lgor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmZvbnRMb2Fk
RXZlbnRzRW5hYmxlZCgpKQorICAgICAgICBydWxlID0gc3RhdGljX3BvaW50ZXJfY2FzdDxDU1NG
b250RmFjZVJ1bGU+KGZvbnRGYWNlUnVsZS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkpOworI2VuZGlm
CisgICAgUmVmPENTU0ZvbnRGYWNlPiBmb250RmFjZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUodHJh
aXRzTWFzaywgV1RGOjptb3ZlKHJ1bGUpKTsKIAogICAgIGludCBzcmNMZW5ndGggPSBzcmNMaXN0
Lmxlbmd0aCgpOwogCkBAIC0yMDksMTAgKzIwMSwxMCBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6
YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUsIGJv
bwogICAgICAgICBmb3VuZFNWR0ZvbnQgPSBpdGVtLmlzU1ZHRm9udEZhY2VTcmMoKSB8fCBpdGVt
LnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwogI2VuZGlmCiAgICAgICAgIGlmICghaXRlbS5pc0xvY2Fs
KCkpIHsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZG9jdW1lbnQgPyBtX2Rv
Y3VtZW50LT5mcmFtZSgpID8gJm1fZG9jdW1lbnQtPmZyYW1lKCktPnNldHRpbmdzKCkgOiAwIDog
MDsKKyAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50ID8gZG9jdW1lbnQt
PmZyYW1lKCkgPyAmZG9jdW1lbnQtPmZyYW1lKCktPnNldHRpbmdzKCkgOiAwIDogMDsKICAgICAg
ICAgICAgIGJvb2wgYWxsb3dEb3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8fCAoc2V0dGluZ3Mg
JiYgc2V0dGluZ3MtPmRvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgpKTsKLSAgICAgICAg
ICAgIGlmIChhbGxvd0Rvd25sb2FkaW5nICYmIGl0ZW0uaXNTdXBwb3J0ZWRGb3JtYXQoKSAmJiBt
X2RvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgQ2FjaGVkRm9udCogY2FjaGVkRm9udCA9IGl0
ZW0uY2FjaGVkRm9udChtX2RvY3VtZW50LCBmb3VuZFNWR0ZvbnQsIGlzSW5pdGlhdGluZ0VsZW1l
bnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOworICAgICAgICAgICAgaWYgKGFsbG93RG93bmxvYWRp
bmcgJiYgaXRlbS5pc1N1cHBvcnRlZEZvcm1hdCgpICYmIGRvY3VtZW50KSB7CisgICAgICAgICAg
ICAgICAgQ2FjaGVkRm9udCogY2FjaGVkRm9udCA9IGl0ZW0uY2FjaGVkRm9udChkb2N1bWVudCwg
Zm91bmRTVkdGb250LCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsK
ICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkRm9udCkgewogICAgICAgICAgICAgICAgICAgICBz
b3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihpdGVtLnJlc291cmNl
KCksIGNhY2hlZEZvbnQpOwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCkBAIC0yMjUsMTYgKzIxNyw2
IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxl
Rm9udEZhY2UqIGZvbnRGYWNlUnVsZSwgYm9vCiAgICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1h
a2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihpdGVtLnJlc291cmNlKCkpOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCFmb250RmFjZSkgewotICAgICAgICAgICAgUmVmUHRyPENTU0ZvbnRG
YWNlUnVsZT4gcnVsZTsKLSNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5UUykKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyMTE2
IC0gVGhpcyBDU1NGb250RmFjZVJ1bGUgaGFzIG5vIHBhcmVudC4KLSAgICAgICAgICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmZvbnRMb2FkRXZlbnRzRW5h
YmxlZCgpKQotICAgICAgICAgICAgICAgIHJ1bGUgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PENTU0Zv
bnRGYWNlUnVsZT4oZm9udEZhY2VSdWxlLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7Ci0jZW5kaWYK
LSAgICAgICAgICAgIGZvbnRGYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxG
b250VHJhaXRzTWFzaz4odHJhaXRzTWFzayksIHJ1bGUpOwotICAgICAgICB9Ci0KICAgICAgICAg
aWYgKHNvdXJjZSkgewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgICAgICAgICBzb3VyY2Ut
PnNldFNWR0ZvbnRGYWNlRWxlbWVudChpdGVtLnN2Z0ZvbnRGYWNlRWxlbWVudCgpKTsKQEAgLTI0
Myw5ICsyMjUsNjMgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25z
dCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlLCBib28KICAgICAgICAgfQogICAgIH0K
IAotICAgIEFTU0VSVChmb250RmFjZSk7CisgICAgcmV0dXJuIGZvbnRGYWNlOworfQorCitzdGF0
aWMgU3RyaW5nIGZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVl
JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNGb250RmFtaWx5KCkpCisgICAgICAgIHJldHVy
biB2YWx1ZS5mb250RmFtaWx5KCkuZmFtaWx5TmFtZTsKKyAgICBpZiAoIXZhbHVlLmlzVmFsdWVJ
RCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBXZSBuZWVkIHRvIHVzZSB0
aGUgcmF3IHRleHQgZm9yIGFsbCB0aGUgZ2VuZXJpYyBmYW1pbHkgdHlwZXMsIHNpbmNlIEBmb250
LWZhY2UgaXMgYSB3YXkgb2YgYWN0dWFsbHkKKyAgICAvLyBkZWZpbmluZyB3aGF0IGZvbnQgdG8g
dXNlIGZvciB0aG9zZSB0eXBlcy4KKyAgICBzd2l0Y2ggKHZhbHVlLmdldFZhbHVlSUQoKSkgewor
ICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAgICAgcmV0dXJuIHNlcmlmRmFtaWx5OworICAg
IGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6CisgICAgICAgIHJldHVybiBzYW5zU2VyaWZGYW1pbHk7
CisgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6CisgICAgICAgIHJldHVybiBjdXJzaXZlRmFtaWx5
OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAgICAgICByZXR1cm4gZmFudGFzeUZhbWls
eTsKKyAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgorICAgICAgICByZXR1cm4gbW9ub3NwYWNl
RmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dyYXBoOgorICAgICAgICByZXR1
cm4gcGljdG9ncmFwaEZhbWlseTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgfQorfQorCit2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNv
bnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUsIGJvb2wgaXNJbml0aWF0aW5nRWxl
bWVudEluVXNlckFnZW50U2hhZG93VHJlZSkKK3sKKyAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMm
IHN0eWxlID0gZm9udEZhY2VSdWxlLT5wcm9wZXJ0aWVzKCk7CisgICAgUmVmUHRyPENTU1ZhbHVl
PiBmb250RmFtaWx5ID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRG
YW1pbHkpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3JjID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eVNyYyk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlUmFuZ2Ug
PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VW5pY29kZVJhbmdlKTsKKyAg
ICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oZm9udEZhbWlseS5nZXQoKSkgfHwgIWlzPENTU1ZhbHVl
TGlzdD4oc3JjLmdldCgpKSB8fCAodW5pY29kZVJhbmdlICYmICFpczxDU1NWYWx1ZUxpc3Q+KCp1
bmljb2RlUmFuZ2UpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTVmFsdWVMaXN0JiBmYW1p
bHlMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqZm9udEZhbWlseSk7CisgICAgaWYgKCFm
YW1pbHlMaXN0Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NWYWx1ZUxpc3Qm
IHNyY0xpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpzcmMpOworICAgIGlmICghc3JjTGlz
dC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTVmFsdWVMaXN0KiByYW5nZUxp
c3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHVuaWNvZGVSYW5nZS5nZXQoKSk7CisKKyAgICBG
b250VHJhaXRzTWFzayB0cmFpdHNNYXNrOworICAgIGlmIChPcHRpb25hbDxGb250VHJhaXRzTWFz
az4gY29tcHV0ZWRUcmFpdHNNYXNrID0gY29tcHV0ZVRyYWl0c01hc2soc3R5bGUpKQorICAgICAg
ICB0cmFpdHNNYXNrID0gY29tcHV0ZWRUcmFpdHNNYXNrLnZhbHVlKCk7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoZm9udEZhY2UgJiYgIWZvbnRGYWNlLT5pc1ZhbGlkKCkp
CisgICAgUmVmPENTU0ZvbnRGYWNlPiBmb250RmFjZSA9IGNyZWF0ZUZvbnRGYWNlKHNyY0xpc3Qs
IHRyYWl0c01hc2ssIG1fZG9jdW1lbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNo
YWRvd1RyZWUpOworICAgIGlmICghZm9udEZhY2UtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKHJhbmdlTGlzdCkgewpAQCAtMjU2LDY1ICsyOTIsMzEgQEAgdm9pZCBDU1NG
b250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9u
dEZhY2VSdWxlLCBib28KICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIEhhc2ggdW5kZXIgZXZl
cnkgc2luZ2xlIGZhbWlseSBuYW1lLgogICAgIGZvciAoYXV0byYgaXRlbSA6IGZhbWlseUxpc3Qp
IHsKLSAgICAgICAgYXV0byYgdmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRl
bS5nZXQoKSk7Ci0gICAgICAgIFN0cmluZyBmYW1pbHlOYW1lOwotICAgICAgICBpZiAodmFsdWUu
aXNGb250RmFtaWx5KCkpIHsKLSAgICAgICAgICAgIGZhbWlseU5hbWUgPSB2YWx1ZS5mb250RmFt
aWx5KCkuZmFtaWx5TmFtZTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc1ZhbHVlSUQoKSkg
ewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB1c2UgdGhlIHJhdyB0ZXh0IGZvciBhbGwgdGhl
IGdlbmVyaWMgZmFtaWx5IHR5cGVzLCBzaW5jZSBAZm9udC1mYWNlIGlzIGEgd2F5IG9mIGFjdHVh
bGx5Ci0gICAgICAgICAgICAvLyBkZWZpbmluZyB3aGF0IGZvbnQgdG8gdXNlIGZvciB0aG9zZSB0
eXBlcy4KLSAgICAgICAgICAgIHN3aXRjaCAodmFsdWUuZ2V0VmFsdWVJRCgpKSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZVNlcmlmOgotICAgICAgICAgICAgICAgICAgICBmYW1pbHlO
YW1lID0gc2VyaWZGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6Ci0gICAgICAgICAgICAgICAgICAgIGZhbWls
eU5hbWUgPSBzYW5zU2VyaWZGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgotICAgICAgICAgICAgICAgICAgICBm
YW1pbHlOYW1lID0gY3Vyc2l2ZUZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhbnRhc3k6Ci0gICAgICAgICAgICAgICAgICAg
IGZhbWlseU5hbWUgPSBmYW50YXN5RmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgotICAgICAgICAgICAgICAg
ICAgICBmYW1pbHlOYW1lID0gbW9ub3NwYWNlRmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKLSAg
ICAgICAgICAgICAgICAgICAgZmFtaWx5TmFtZSA9IHBpY3RvZ3JhcGhGYW1pbHk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KKyAgICAgICAgU3Ry
aW5nIGZhbWlseU5hbWUgPSBmYW1pbHlOYW1lRnJvbVByaW1pdGl2ZShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkpOwogICAgICAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVj
dG9yPFJlZlB0cjxDU1NGb250RmFjZT4+PiYgZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMu
YWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byYg
ZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCFmYW1pbHlGb250RmFjZXMpIHsKLSAgICAgICAg
ICAgIGZhbWlseUZvbnRGYWNlcyA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPFJlZlB0cjxDU1NG
b250RmFjZT4+PigpOworICAgICAgICAgICAgZmFtaWx5Rm9udEZhY2VzID0gc3RkOjptYWtlX3Vu
aXF1ZTxWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4+KCk7CiAKICAgICAgICAgICAgIEFTU0VSVCgh
bV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmNvbnRhaW5zKGZhbWlseU5hbWUpKTsKIAotICAg
ICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBsb2NhbGx5SW5zdGFsbGVkRm9udHNUcmFpdHNNYXNr
czsKLSAgICAgICAgICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2V0VHJhaXRzSW5GYW1pbHko
ZmFtaWx5TmFtZSwgbG9jYWxseUluc3RhbGxlZEZvbnRzVHJhaXRzTWFza3MpOwotICAgICAgICAg
ICAgaWYgKHVuc2lnbmVkIG51bUxvY2FsbHlJbnN0YWxsZWRGYWNlcyA9IGxvY2FsbHlJbnN0YWxs
ZWRGb250c1RyYWl0c01hc2tzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZmFtaWx5
TG9jYWxseUluc3RhbGxlZEZhY2VzID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8UmVmUHRyPENT
U0ZvbnRGYWNlPj4+KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtTG9jYWxseUluc3RhbGxlZEZhY2VzOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPENTU0ZvbnRGYWNlPiBsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UgPSBDU1NGb250RmFj
ZTo6Y3JlYXRlKHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPihsb2NhbGx5SW5zdGFsbGVkRm9u
dHNUcmFpdHNNYXNrc1tpXSksIDAsIHRydWUpOworICAgICAgICAgICAgVmVjdG9yPEZvbnRUcmFp
dHNNYXNrPiBsb2NhbGx5SW5zdGFsbGVkRm9udHNUcmFpdHNNYXNrcyA9IEZvbnRDYWNoZTo6c2lu
Z2xldG9uKCkuZ2V0VHJhaXRzSW5GYW1pbHkoZmFtaWx5TmFtZSk7CisgICAgICAgICAgICBpZiAo
IWxvY2FsbHlJbnN0YWxsZWRGb250c1RyYWl0c01hc2tzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gZmFtaWx5TG9jYWxseUluc3RhbGxlZEZhY2VzID0gc3RkOjptYWtlX3VuaXF1
ZTxWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4+KCk7CisgICAgICAgICAgICAgICAgZm9yIChGb250
VHJhaXRzTWFzayBtYXNrIDogbG9jYWxseUluc3RhbGxlZEZvbnRzVHJhaXRzTWFza3MpIHsKKyAg
ICAgICAgICAgICAgICAgICAgUmVmPENTU0ZvbnRGYWNlPiBsb2NhbGx5SW5zdGFsbGVkRm9udEZh
Y2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKG1hc2ssIG51bGxwdHIsIHRydWUpOwogICAgICAgICAg
ICAgICAgICAgICBsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UtPmFkZFNvdXJjZShzdGQ6Om1ha2Vf
dW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmYW1pbHlOYW1lKSk7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UtPmlzVmFsaWQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZhbWlseUxvY2FsbHlJbnN0YWxsZWRGYWNlcy0+YXBwZW5kKGxvY2FsbHlJ
bnN0YWxsZWRGb250RmFjZSk7CisgICAgICAgICAgICAgICAgICAgIGZhbWlseUxvY2FsbHlJbnN0
YWxsZWRGYWNlcy0+YXBwZW5kKFdURjo6bW92ZShsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UpKTsK
ICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICBtX2xvY2FsbHlJbnN0YWxsZWRG
b250RmFjZXMuc2V0KGZhbWlseU5hbWUsIFdURjo6bW92ZShmYW1pbHlMb2NhbGx5SW5zdGFsbGVk
RmFjZXMpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZhbWlseUZvbnRG
YWNlcy0+YXBwZW5kKGZvbnRGYWNlKTsKKyAgICAgICAgZmFtaWx5Rm9udEZhY2VzLT5hcHBlbmQo
Zm9udEZhY2UuY29weVJlZigpKTsKICAgICAgICAgCiAgICAgICAgICsrbV92ZXJzaW9uOwogICAg
IH0KQEAgLTM3OCwxMCArMzgwLDEwIEBAIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHJlc29s
dmVHZW5lcmljRmFtaWx5KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRm9udERlCiAKIHN0YXRp
YyBGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb247CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBjb21wYXJlRm9udEZhY2VzKENTU0ZvbnRGYWNlKiBmaXJzdCwgQ1NTRm9u
dEZhY2UqIHNlY29uZCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlRm9udEZhY2VzKGNvbnN0
IENTU0ZvbnRGYWNlJiBmaXJzdCwgY29uc3QgQ1NTRm9udEZhY2UmIHNlY29uZCkKIHsKLSAgICBG
b250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC0+dHJhaXRzTWFzaygpOwotICAg
IEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01hc2sgPSBzZWNvbmQtPnRyYWl0c01hc2soKTsK
KyAgICBGb250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC50cmFpdHNNYXNrKCk7
CisgICAgRm9udFRyYWl0c01hc2sgc2Vjb25kVHJhaXRzTWFzayA9IHNlY29uZC50cmFpdHNNYXNr
KCk7CiAKICAgICBib29sIGZpcnN0SGFzRGVzaXJlZFZhcmlhbnQgPSBmaXJzdFRyYWl0c01hc2sg
JiBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudE1hc2s7CiAgICAg
Ym9vbCBzZWNvbmRIYXNEZXNpcmVkVmFyaWFudCA9IHNlY29uZFRyYWl0c01hc2sgJiBkZXNpcmVk
VHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudE1hc2s7CkBAIC0zOTAsNyArMzky
LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVGb250RmFjZXMoQ1NTRm9udEZhY2UqIGZp
cnN0LCBDU1NGb250RmFjZSogc2Vjb25kKQogICAgICAgICByZXR1cm4gZmlyc3RIYXNEZXNpcmVk
VmFyaWFudDsKIAogICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgZm9udC12YXJpYW50IGNzcyBwcm9w
ZXJ0eSBmb3IgQ1NTMi4xIGNvbXBhdGliaWxpdHkuCi0gICAgaWYgKChkZXNpcmVkVHJhaXRzTWFz
a0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spICYmICFmaXJzdC0+aXNM
b2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC0+aXNMb2NhbEZhbGxiYWNrKCkpIHsKKyAgICBpZiAo
KGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRWYXJpYW50U21hbGxDYXBzTWFz
aykgJiYgIWZpcnN0LmlzTG9jYWxGYWxsYmFjaygpICYmICFzZWNvbmQuaXNMb2NhbEZhbGxiYWNr
KCkpIHsKICAgICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0ZWQgdGhhdCBp
dCBjYW4gb25seSBzdXBwb3J0IHNtYWxsLWNhcHMgdG8gYSBmb250IHRoYXQgY2xhaW1zIHRvIHN1
cHBvcnQKICAgICAgICAgLy8gYWxsIHZhcmlhbnRzLiAgVGhlIHNwZWNpYWxpemVkIGZvbnQgaXMg
bW9yZSBsaWtlbHkgdG8gYmUgdHJ1ZSBzbWFsbC1jYXBzIGFuZCBub3QgcmVxdWlyZSBzeW50aGVz
aXMuCiAgICAgICAgIGJvb2wgZmlyc3RSZXF1aXJlc1NtYWxsQ2FwcyA9IChmaXJzdFRyYWl0c01h
c2sgJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spICYmICEoZmlyc3RUcmFpdHNNYXNrICYgRm9u
dFZhcmlhbnROb3JtYWxNYXNrKTsKQEAgLTQwNSw3ICs0MDcsNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgY29tcGFyZUZvbnRGYWNlcyhDU1NGb250RmFjZSogZmlyc3QsIENTU0ZvbnRGYWNlKiBzZWNv
bmQpCiAgICAgaWYgKGZpcnN0SGFzRGVzaXJlZFN0eWxlICE9IHNlY29uZEhhc0Rlc2lyZWRTdHls
ZSkKICAgICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxlOwogCi0gICAgaWYgKChkZXNp
cmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhZmly
c3QtPmlzTG9jYWxGYWxsYmFjaygpICYmICFzZWNvbmQtPmlzTG9jYWxGYWxsYmFjaygpKSB7Cisg
ICAgaWYgKChkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNN
YXNrKSAmJiAhZmlyc3QuaXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5pc0xvY2FsRmFsbGJh
Y2soKSkgewogICAgICAgICAvLyBQcmVmZXIgYSBmb250IHRoYXQgaGFzIGluZGljYXRlZCB0aGF0
IGl0IGNhbiBvbmx5IHN1cHBvcnQgaXRhbGljcyB0byBhIGZvbnQgdGhhdCBjbGFpbXMgdG8gc3Vw
cG9ydAogICAgICAgICAvLyBhbGwgc3R5bGVzLiAgVGhlIHNwZWNpYWxpemVkIGZvbnQgaXMgbW9y
ZSBsaWtlbHkgdG8gYmUgdGhlIG9uZSB0aGUgYXV0aG9yIHdhbnRzIHVzZWQuCiAgICAgICAgIGJv
b2wgZmlyc3RSZXF1aXJlc0l0YWxpY3MgPSAoZmlyc3RUcmFpdHNNYXNrICYgRm9udFN0eWxlSXRh
bGljTWFzaykgJiYgIShmaXJzdFRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKTsKQEAg
LTQ3Niw5ICs0NzgsOSBAQCBGb250UmFuZ2VzIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0Zv
ckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcgogCiBDU1NTZWdtZW50ZWRG
b250RmFjZSogQ1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCiB7Ci0gICAg
VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4+KiBmYW1pbHlGb250RmFjZXMgPSBtX2ZvbnRGYWNl
cy5nZXQoZmFtaWx5KTsKKyAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4qIGZhbWlseUZvbnRG
YWNlcyA9IG1fZm9udEZhY2VzLmdldChmYW1pbHkpOwogICAgIGlmICghZmFtaWx5Rm9udEZhY2Vz
IHx8IGZhbWlseUZvbnRGYWNlcy0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDx1bnNpZ25l
ZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4+JiBzZWdtZW50ZWRGb250RmFjZUNhY2hl
ID0gbV9mb250cy5hZGQoZmFtaWx5LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KCFzZWdtZW50ZWRGb250RmFjZUNhY2hlKQpAQCAtNDkwLDExICs0OTIsMTAgQEAgQ1NTU2VnbWVu
dGVkRm9udEZhY2UqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udEZhY2UoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGUKICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgZmFjZSA9IENTU1NlZ21l
bnRlZEZvbnRGYWNlOjpjcmVhdGUodGhpcyk7CiAKLSAgICAgICAgLy8gQ29sbGVjdCBhbGwgbWF0
Y2hpbmcgZmFjZXMgYW5kIHNvcnQgdGhlbSBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgotICAgICAg
ICBWZWN0b3I8Q1NTRm9udEZhY2UqLCAzMj4gY2FuZGlkYXRlRm9udEZhY2VzOworICAgICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4sIDMyPiBjYW5kaWRhdGVG
b250RmFjZXM7CiAgICAgICAgIGZvciAoaW50IGkgPSBmYW1pbHlGb250RmFjZXMtPnNpemUoKSAt
IDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBDU1NGb250RmFjZSogY2FuZGlkYXRlID0g
ZmFtaWx5Rm9udEZhY2VzLT5hdChpKS5nZXQoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNhbmRp
ZGF0ZVRyYWl0c01hc2sgPSBjYW5kaWRhdGUtPnRyYWl0c01hc2soKTsKKyAgICAgICAgICAgIENT
U0ZvbnRGYWNlJiBjYW5kaWRhdGUgPSBmYW1pbHlGb250RmFjZXMtPmF0KGkpOworICAgICAgICAg
ICAgdW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRpZGF0ZS50cmFpdHNNYXNrKCk7
CiAgICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAh
KGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICgodHJhaXRzTWFzayAmIEZvbnRWYXJpYW50
Tm9ybWFsTWFzaykgJiYgIShjYW5kaWRhdGVUcmFpdHNNYXNrICYgRm9udFZhcmlhbnROb3JtYWxN
YXNrKSkKQEAgLTUwMiwxNiArNTAzLDE0IEBAIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBDU1NGb250
U2VsZWN0b3I6OmdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlCiAjaWYg
RU5BQkxFKFNWR19GT05UUykKICAgICAgICAgICAgIC8vIEZvciBTVkcgRm9udHMgdGhhdCBzcGVj
aWZ5IHRoYXQgdGhleSBvbmx5IHN1cHBvcnQgdGhlICJub3JtYWwiIHZhcmlhbnQsIHdlIHdpbGwg
YXNzdW1lIHRoZXkgYXJlIGluY2FwYWJsZQogICAgICAgICAgICAgLy8gb2Ygc21hbGwtY2FwcyBz
eW50aGVzaXMgYW5kIGp1c3QgaWdub3JlIHRoZSBmb250IGZhY2UgYXMgYSBjYW5kaWRhdGUuCi0g
ICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5oYXNTVkdGb250RmFjZVNvdXJjZSgpICYmICh0cmFp
dHNNYXNrICYgRm9udFZhcmlhbnRTbWFsbENhcHNNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01h
c2sgJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spKQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0
ZS5oYXNTVkdGb250RmFjZVNvdXJjZSgpICYmICh0cmFpdHNNYXNrICYgRm9udFZhcmlhbnRTbWFs
bENhcHNNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250VmFyaWFudFNtYWxsQ2Fw
c01hc2spKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAgICAgICAgICBj
YW5kaWRhdGVGb250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoVmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4+KiBmYW1pbHlMb2NhbGx5SW5zdGFsbGVk
Rm9udEZhY2VzID0gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmdldChmYW1pbHkpKSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBudW1Mb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzID0gZmFtaWx5
TG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy0+c2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bUxvY2FsbHlJbnN0YWxsZWRGb250RmFjZXM7ICsraSkgewotICAg
ICAgICAgICAgICAgIENTU0ZvbnRGYWNlKiBjYW5kaWRhdGUgPSBmYW1pbHlMb2NhbGx5SW5zdGFs
bGVkRm9udEZhY2VzLT5hdChpKS5nZXQoKTsKKyAgICAgICAgaWYgKFZlY3RvcjxSZWY8Q1NTRm9u
dEZhY2U+PiogZmFtaWx5TG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcyA9IG1fbG9jYWxseUluc3Rh
bGxlZEZvbnRGYWNlcy5nZXQoZmFtaWx5KSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBjYW5k
aWRhdGUgOiAqZmFtaWx5TG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcykgewogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRyYWl0c01hc2sgPSBjYW5kaWRhdGUtPnRyYWl0c01hc2so
KTsKICAgICAgICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNr
KSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CkBAIC01MjMsOSArNTIyLDggQEAgQ1NTU2VnbWVudGVk
Rm9udEZhY2UqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udEZhY2UoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGUKIAogICAgICAgICBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gPSB0
cmFpdHNNYXNrOwogICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KGNhbmRpZGF0ZUZvbnRGYWNlcy5i
ZWdpbigpLCBjYW5kaWRhdGVGb250RmFjZXMuZW5kKCksIGNvbXBhcmVGb250RmFjZXMpOwotICAg
ICAgICB1bnNpZ25lZCBudW1DYW5kaWRhdGVzID0gY2FuZGlkYXRlRm9udEZhY2VzLnNpemUoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNhbmRpZGF0ZXM7ICsraSkKLSAg
ICAgICAgICAgIGZhY2UtPmFwcGVuZEZvbnRGYWNlKGNhbmRpZGF0ZUZvbnRGYWNlc1tpXSk7Cisg
ICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlRm9udEZhY2UgOiBjYW5kaWRhdGVGb250RmFjZXMp
CisgICAgICAgICAgICBmYWNlLT5hcHBlbmRGb250RmFjZShjYW5kaWRhdGVGb250RmFjZS5nZXQo
KSk7CiAgICAgfQogICAgIHJldHVybiBmYWNlLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5oCmluZGV4IDRiZTc0MDgxMjk5NjQ1NGU5ZmViMzBlOTdlMDQ1ZTAyNmU1Yzcz
MmMuLmM3NDMyMzVmMmM1OGU5MmJhMzY5MmFhYjBkMjVkZjhlNWFmYjk1NzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTg5LDggKzg5LDggQEAgcHJpdmF0ZToKICAgICB2
b2lkIGJlZ2luTG9hZFRpbWVyRmlyZWQoKTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50Owot
ICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZlB0cjxDU1NGb250
RmFjZT4+PiwgQ2FzZUZvbGRpbmdIYXNoPiBtX2ZvbnRGYWNlczsKLSAgICBIYXNoTWFwPFN0cmlu
Zywgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+Pj4sIENhc2VGb2xk
aW5nSGFzaD4gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzOworICAgIEhhc2hNYXA8U3RyaW5n
LCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZjxDU1NGb250RmFjZT4+PiwgQ2FzZUZvbGRpbmdI
YXNoPiBtX2ZvbnRGYWNlczsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPFZl
Y3RvcjxSZWY8Q1NTRm9udEZhY2U+Pj4sIENhc2VGb2xkaW5nSGFzaD4gbV9sb2NhbGx5SW5zdGFs
bGVkRm9udEZhY2VzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1h
cDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4+LCBDYXNlRm9sZGluZ0hh
c2g+IG1fZm9udHM7CiAgICAgSGFzaFNldDxGb250U2VsZWN0b3JDbGllbnQqPiBtX2NsaWVudHM7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCmluZGV4IDJm
MzdkNmEwZmQwOTY0YTA5OTc5ZTZkZjdlOWY3ZjE4Mjk5YTA2NzcuLjVjYmZjYTRlN2I3MjAxMDk5
NWE4MTEyYmRiNDc2YjVkZGVhNWRkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21l
bnRlZEZvbnRGYWNlLmNwcApAQCAtNDUsOSArNDUsOCBAQCBDU1NTZWdtZW50ZWRGb250RmFjZTo6
Q1NTU2VnbWVudGVkRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiBDU1NT
ZWdtZW50ZWRGb250RmFjZTo6fkNTU1NlZ21lbnRlZEZvbnRGYWNlKCkKIHsKICAgICBwcnVuZVRh
YmxlKCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG1fZm9udEZhY2VzLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICBtX2ZvbnRGYWNlc1tpXS0+
cmVtb3ZlZEZyb21TZWdtZW50ZWRGb250RmFjZSh0aGlzKTsKKyAgICBmb3IgKGF1dG8mIGZhY2Ug
OiBtX2ZvbnRGYWNlcykKKyAgICAgICAgZmFjZS0+cmVtb3ZlZEZyb21TZWdtZW50ZWRGb250RmFj
ZSh0aGlzKTsKIH0KIAogdm9pZCBDU1NTZWdtZW50ZWRGb250RmFjZTo6cHJ1bmVUYWJsZSgpCkBA
IC01OCw5ICs1Nyw4IEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZhY2U6OnBydW5lVGFibGUoKQog
Ym9vbCBDU1NTZWdtZW50ZWRGb250RmFjZTo6aXNWYWxpZCgpIGNvbnN0CiB7CiAgICAgLy8gVmFs
aWQgaWYgYXQgbGVhc3Qgb25lIGZvbnQgZmFjZSBpcyB2YWxpZC4KLSAgICB1bnNpZ25lZCBzaXpl
ID0gbV9mb250RmFjZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKLSAgICAgICAgaWYgKG1fZm9udEZhY2VzW2ldLT5pc1ZhbGlkKCkpCisgICAgZm9y
IChhdXRvJiBmYWNlIDogbV9mb250RmFjZXMpIHsKKyAgICAgICAgaWYgKGZhY2UtPmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC04NCwxMSArODIsMTEgQEAgdm9pZCBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udExvYWRlZChD
U1NGb250RmFjZSopCiAjZW5kaWYKIH0KIAotdm9pZCBDU1NTZWdtZW50ZWRGb250RmFjZTo6YXBw
ZW5kRm9udEZhY2UoUGFzc1JlZlB0cjxDU1NGb250RmFjZT4gZm9udEZhY2UpCit2b2lkIENTU1Nl
Z21lbnRlZEZvbnRGYWNlOjphcHBlbmRGb250RmFjZShSZWY8Q1NTRm9udEZhY2U+JiYgZm9udEZh
Y2UpCiB7CiAgICAgcHJ1bmVUYWJsZSgpOwogICAgIGZvbnRGYWNlLT5hZGRlZFRvU2VnbWVudGVk
Rm9udEZhY2UodGhpcyk7Ci0gICAgbV9mb250RmFjZXMuYXBwZW5kKGZvbnRGYWNlKTsKKyAgICBt
X2ZvbnRGYWNlcy5hcHBlbmQoV1RGOjptb3ZlKGZvbnRGYWNlKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IGFwcGVuZEZvbnRXaXRoSW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGluZyhGb250UmFuZ2VzJiBy
YW5nZXMsIFJlZjxGb250PiYmIGZvbnQsIGNvbnN0IFZlY3RvcjxDU1NGb250RmFjZTo6VW5pY29k
ZVJhbmdlPiYgdW5pY29kZVJhbmdlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZv
bnRGYWNlLmgKaW5kZXggZjg2OWZmNmRhMGI3ZWZhMmU0NWJmMTI2ODU0NTMyYzQ4NjU1NjUyYy4u
NWZmZWJiMThjYTgwZGQ4ZDNjYTkzMmQ2ODA5NDE4YzFkM2U1YmNlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlKik7CiAKLSAgICB2b2lkIGFwcGVuZEZv
bnRGYWNlKFBhc3NSZWZQdHI8Q1NTRm9udEZhY2U+KTsKKyAgICB2b2lkIGFwcGVuZEZvbnRGYWNl
KFJlZjxDU1NGb250RmFjZT4mJik7CiAKICAgICBGb250UmFuZ2VzIGZvbnRSYW5nZXMoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJik7CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKIAogICAgIENT
U0ZvbnRTZWxlY3RvciogbV9mb250U2VsZWN0b3I7CiAgICAgSGFzaE1hcDxGb250RGVzY3JpcHRp
b25LZXksIEZvbnRSYW5nZXMsIEZvbnREZXNjcmlwdGlvbktleUhhc2gsIFdURjo6U2ltcGxlQ2xh
c3NIYXNoVHJhaXRzPEZvbnREZXNjcmlwdGlvbktleT4+IG1fZGVzY3JpcHRpb25Ub1Jhbmdlc01h
cDsKLSAgICBWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiwgMT4gbV9mb250RmFjZXM7CisgICAg
VmVjdG9yPFJlZjxDU1NGb250RmFjZT4sIDE+IG1fZm9udEZhY2VzOwogI2lmIEVOQUJMRShGT05U
X0xPQURfRVZFTlRTKQogICAgIFZlY3RvcjxSZWZQdHI8TG9hZEZvbnRDYWxsYmFjaz4+IG1fY2Fs
bGJhY2tzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCmluZGV4IDNhMDY4NmM5OGYwMDI3MTJjZTgyZDU0ZTM4OGYxYjQwZmQ1NDJlZjYuLjI3
YjUwMGU5MWM5ODE3ZWVjYjJjZGU2OGMzMDAxNzRiOWIyZGMwNWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVi
bGljOgogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBleGlzdHMgc28gQ1NTRm9udFNlbGVjdG9yIGNh
biBoYXZlIGEgdW5pZmllZCBub3Rpb24gb2YgcHJlaW5zdGFsbGVkIGZvbnRzIGFuZCBAZm9udC1m
YWNlLgogICAgIC8vIEl0IGNvbWVzIGludG8gcGxheSB3aGVuIHlvdSBjcmVhdGUgYW4gQGZvbnQt
ZmFjZSB3aGljaCBzaGFyZXMgYSBmYW1pbHkgbmFtZSBhcyBhIHByZWluc3RhbGxlZCBmb250Lgot
ICAgIHZvaWQgZ2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVu
c2lnbmVkPiYpOworICAgIFZlY3RvcjxGb250VHJhaXRzTWFzaz4gZ2V0VHJhaXRzSW5GYW1pbHko
Y29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4g
Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcm
LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBSZWY8Rm9udD4gbGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRleCBkODdkNzk4MDE2OGZiMjBkYmQ0ZWI1N2Yw
ZGY0ZjQ4YmUyNTVmNDIwLi5jMTM2NGFiZTY1ZmFkNWM2YjQyYjI5ZTVjMmNkNzcwNzMxNzJjYjA5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCkBAIC0yMzcsNyArMjM3LDcgQEAgUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbikKICAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpn
ZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1
bnNpZ25lZD4mIHRyYWl0c01hc2tzKQorVmVjdG9yPEZvbnRUcmFpdHNNYXNrPiBGb250Q2FjaGU6
OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWVTdHIgPSBmYW1pbHlOYW1lLnN0cmlu
ZygpLmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAgQ0ZTdHJpbmdSZWYgZmFtaWx5TmFtZVN0clB0ciA9
IGZhbWlseU5hbWVTdHIuZ2V0KCk7CkBAIC0yNDUsMTIgKzI0NSwxMyBAQCB2b2lkIEZvbnRDYWNo
ZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0
b3I8dW5zaWduZQogICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3Jp
cHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMuZ2V0KCkpKTsKICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gbWF0Y2hlZERlc2NyaXB0
b3JzID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlTWF0Y2hpbmdGb250RGVzY3JpcHRv
cnMoZm9udERlc2NyaXB0b3IuZ2V0KCksIG51bGxwdHIpKTsKICAgICBpZiAoIW1hdGNoZWREZXNj
cmlwdG9ycykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gVmVjdG9yPEZvbnRUcmFp
dHNNYXNrPigpOwogCiAgICAgQ0ZJbmRleCBudW1NYXRjaGVzID0gQ0ZBcnJheUdldENvdW50KG1h
dGNoZWREZXNjcmlwdG9ycy5nZXQoKSk7CiAgICAgaWYgKCFudW1NYXRjaGVzKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBWZWN0b3I8Rm9udFRyYWl0c01hc2s+KCk7CiAKKyAgICBW
ZWN0b3I8Rm9udFRyYWl0c01hc2s+IHRyYWl0c01hc2tzOwogICAgIGZvciAoQ0ZJbmRleCBpID0g
MDsgaSA8IG51bU1hdGNoZXM7ICsraSkgewogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiB0cmFpdHMgPSBhZG9wdENGKChDRkRpY3Rpb25hcnlSZWYpQ1RGb250RGVzY3JpcHRvckNv
cHlBdHRyaWJ1dGUoKENURm9udERlc2NyaXB0b3JSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleCht
YXRjaGVkRGVzY3JpcHRvcnMuZ2V0KCksIGkpLCBrQ1RGb250VHJhaXRzQXR0cmlidXRlKSk7CiAg
ICAgICAgIENGTnVtYmVyUmVmIHJlc3VsdFJlZiA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZSh0cmFpdHMuZ2V0KCksIGtDVEZvbnRTeW1ib2xpY1RyYWl0KTsKQEAgLTI2Myw2ICsy
NjQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5zaWduZQogICAgICAgICAgICAgdHJhaXRzTWFza3Mu
YXBwZW5kKHRvVHJhaXRzTWFzayhzeW1ib2xpY1RyYWl0cywgd2VpZ2h0KSk7CiAgICAgICAgIH0K
ICAgICB9CisgICAgcmV0dXJuIHRyYWl0c01hc2tzOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVG
cmVlVHlwZS5jcHAKaW5kZXggN2I2MDM5ODM3NGQ0OTgyN2M5NmU2NWNmNDA3MTAzMzMwMjcxOTI3
OS4uZjBmNGUxMGUwOTI5MGZiZTg5NmMyOTRhYTc5NGJiM2Y1MjUxZTc3MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtMTM3LDggKzEzNyw5IEBAIFJlZjxGb250PiBGb250Q2Fj
aGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpCiAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgdGltZXNT
dHIsIGZhbHNlKTsKIH0KIAotdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKQorVmVjdG9yPEZvbnRUcmFpdHNNYXNr
PiBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYpCiB7Cisg
ICAgcmV0dXJuIFZlY3RvcjxGb250VHJhaXRzTWFzaz4oKTsKIH0KIAogc3RhdGljIFN0cmluZyBn
ZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fj
aGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNo
ZVdpbi5jcHAKaW5kZXggYWZhNDg0MWVkZjk2OWRmMmU0ZGIxNTQ1NTBjYTFmZDhjMjMxNjE1OC4u
NmJlYzJkMzE2ZTUyOGViMGE3OWMxNzgyYjIyMWVkM2M2NmFmMGI5OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAg
LTUxOSw3ICs1MTksNyBAQCBzdHJ1Y3QgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YSB7CiAgICAgfQog
CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBtX2ZhbWlseU5hbWU7Ci0gICAgSGFzaFNldDx1bnNp
Z25lZD4gbV90cmFpdHNNYXNrczsKKyAgICBIYXNoU2V0PEZvbnRUcmFpdHNNYXNrPiBtX3RyYWl0
c01hc2tzOwogfTsKIAogc3RhdGljIGludCBDQUxMQkFDSyB0cmFpdHNJbkZhbWlseUVudW1Qcm9j
KENPTlNUIExPR0ZPTlQqIGxvZ0ZvbnQsIENPTlNUIFRFWFRNRVRSSUMqIG1ldHJpY3MsIERXT1JE
IGZvbnRUeXBlLCBMUEFSQU0gbFBhcmFtKQpAQCAtNTM5LDEwICs1MzksMTAgQEAgc3RhdGljIGlu
dCBDQUxMQkFDSyB0cmFpdHNJbkZhbWlseUVudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGxvZ0ZvbnQs
IENPTlNUIFRFWFRNRVQKICAgICAgICAgd2VpZ2h0ID09IEZXX0JPTEQgPyBGb250V2VpZ2h0NzAw
TWFzayA6CiAgICAgICAgIHdlaWdodCA9PSBGV19FWFRSQUJPTEQgPyBGb250V2VpZ2h0ODAwTWFz
ayA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250V2VpZ2h0OTAwTWFzazsK
LSAgICBwcm9jRGF0YS0+bV90cmFpdHNNYXNrcy5hZGQodHJhaXRzTWFzayk7CisgICAgcHJvY0Rh
dGEtPm1fdHJhaXRzTWFza3MuYWRkKHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPih0cmFpdHNN
YXNrKSk7CiAgICAgcmV0dXJuIDE7CiB9Ci12b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1p
bHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5zaWduZWQ+JiB0cmFp
dHNNYXNrcykKK1ZlY3RvcjxGb250VHJhaXRzTWFzaz4gRm9udENhY2hlOjpnZXRUcmFpdHNJbkZh
bWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgSFduZERDIGhkYygw
KTsKIApAQCAtNTU1LDcgKzU1NSw3IEBAIHZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWls
eShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25lCiAKICAgICBU
cmFpdHNJbkZhbWlseVByb2NEYXRhIHByb2NEYXRhKGZhbWlseU5hbWUpOwogICAgIEVudW1Gb250
RmFtaWxpZXNFeChoZGMsICZsb2dGb250LCB0cmFpdHNJbkZhbWlseUVudW1Qcm9jLCByZWludGVy
cHJldF9jYXN0PExQQVJBTT4oJnByb2NEYXRhKSwgMCk7Ci0gICAgY29weVRvVmVjdG9yKHByb2NE
YXRhLm1fdHJhaXRzTWFza3MsIHRyYWl0c01hc2tzKTsKKyAgICByZXR1cm4gcHJvY0RhdGEubV90
cmFpdHNNYXNrczsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRD
YWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259717</attachid>
            <date>2015-08-22 01:58:53 -0700</date>
            <delta_ts>2015-08-22 02:31:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148355-20150822015845.patch</filename>
            <type>text/plain</type>
            <size>31256</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4ODE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDYyY2EyMzJlMzYwYTI0
ZDU3NDg5YjY5OTc0MjViOTBiZDIxYjE4OS4uYTEwMGZmODRiMmE4Mzg3YTIwMjYxMjEwOWJkZWFl
Mzc2YTkyZjhiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE1LTA4LTIyICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQGZvbnQtZmFj
ZSByZWxhdGVkIGNsZWFudXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0ODM1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVwIG11Y2ggb2Ygb3VyIGNvZGUgcmVsYXRlZCB0
byB3ZWIgZm9udHMuIEluIGdlbmVyYWwsIGl0CisgICAgICAgIG1pZ3JhdGVzIHRvIHVzaW5nIEMr
KyBmb3ItZWFjaCBzdHlsZSBsb29wcywgdXNlcyBSZWYgaW5zdGVhZCBvZiBSZWZQdHIgd2hlbgor
ICAgICAgICB0aGluZ3MgY2FuJ3QgYmUgbnVsbHB0ciwgbWlncmF0ZXMgdG8gQysrIFJ2YWx1ZS1y
ZWZlcmVuY2VzIGluc3RlYWQgb2YKKyAgICAgICAgUGFzc1JlZlB0ciwgYW5kIHJlZmFjdG9ycyBD
U1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSgpIHRvIHVzZSBoZWxwZXIKKyAgICAgICAg
ZnVuY3Rpb25zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJl
aGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9udExvYWRlZCk6IFVzZSBhIEMrKyBmb3ItZWFjaCBs
b29wLgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Rm9udEZhY2U6OmNyZWF0ZSk6IFVzZSBDKysgUnZhbHVlLXJlZmVyZW5jZXMgaW5zdGVhZCBvZgor
ICAgICAgICBQYXNzUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OkNTU0Zv
bnRGYWNlKTogRGl0dG8uCisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb21wdXRlVHJhaXRzTWFzayk6IE1pZ3JhdGVkIGEgY2h1bmsgb2YKKyAg
ICAgICAgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoKSBpbnRvIHRoaXMgaGVscGVy
IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9udEZhY2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6IENhbGwgdGhlIG5l
d2x5LWNyZWF0ZWQgaGVscGVyCisgICAgICAgIGZ1bmN0aW9ucy4gSW4gYWRkaXRpb24sIG1pZ3Jh
dGUgdG8gUmVmcyBpbnN0ZWFkIG9mIFJlZlB0cnMuCisgICAgICAgIChXZWJDb3JlOjpjb21wYXJl
Rm9udEZhY2VzKTogTWlncmF0ZSB0byByZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnRGYWNlKTogTWlncmF0ZSB0
byBSZWZzIGluc3RlYWQgb2YKKyAgICAgICAgUmVmUHRycy4gQWxzbyB1c2UgQysrIGZvci1lYWNo
IGxvb3BzLgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuaDoKKyAgICAgICAgKiBjc3Mv
Q1NTU2VnbWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVk
Rm9udEZhY2U6On5DU1NTZWdtZW50ZWRGb250RmFjZSk6IFVzZSBDKysgZm9yLWVhY2gKKyAgICAg
ICAgbG9vcHMuCisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6aXNWYWxp
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OmFwcGVu
ZEZvbnRGYWNlKTogTWlncmF0ZSB0byBSdmFsdWUtCisgICAgICAgIHJlZmVyZW5jZXMgaW5zdGVh
ZCBvZiBQYXNzUmVmUHRyLgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBSZXR1cm4gdGhlIHJlc3VsdCBpbnN0
ZWFkIG9mIGJlaW5nCisgICAgICAgIHBhc3NlZCBhbiBvdXQgcGFyYW1ldGVyLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnRyYWl0c0luRmFtaWx5RW51bVByb2MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBEaXR0by4KKwogMjAxNS0wOC0yMSAgQ29t
bWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjE4ODc5MiBhbmQgcjE4ODgwMy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2UuY3BwCmluZGV4IGY2MmE1ZmJkOTdlZTY3MDIwNzdjYzhhYzYwZmQzN2ZhZGE4YTQ5MWUuLmEx
YWI5M2UzMWRjYjUzZDdmYjgzMjRiZDA4NDQ4MDFlNDY1M2RhYzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlLmNwcApAQCAtOTgsOSArOTgsOCBAQCB2b2lkIENTU0ZvbnRGYWNlOjpmb250TG9h
ZGVkKENTU0ZvbnRGYWNlU291cmNlKiBzb3VyY2UpCiAgICAgfQogI2VuZGlmCiAKLSAgICBIYXNo
U2V0PENTU1NlZ21lbnRlZEZvbnRGYWNlKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2VnbWVudGVkRm9u
dEZhY2VzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxDU1NTZWdtZW50ZWRGb250RmFjZSo+Ojpp
dGVyYXRvciBpdCA9IG1fc2VnbWVudGVkRm9udEZhY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgKCppdCktPmZvbnRMb2FkZWQodGhpcyk7CisgICAgZm9yIChDU1NTZWdtZW50
ZWRGb250RmFjZSogZmFjZSA6IG1fc2VnbWVudGVkRm9udEZhY2VzKQorICAgICAgICBmYWNlLT5m
b250TG9hZGVkKHRoaXMpOwogCiAjaWYgRU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMpCiAgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuZm9udExvYWRFdmVudHNF
bmFibGVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCmluZGV4IGRiNjdiYzY2NDMzYjVmNTAw
OGVhZWRmNWQ5YjE1MGE5MDE2Y2JkMjUuLjllYjAyMWEzZjM5NmI4MTQ4MjZhZDg5MmJmMjRmYTkw
OTRkMWY4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCkBAIC00NCw3ICs0NCw3IEBAIGNs
YXNzIEZvbnQ7CiAKIGNsYXNzIENTU0ZvbnRGYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTRm9u
dEZhY2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGUoRm9u
dFRyYWl0c01hc2sgdHJhaXRzTWFzaywgUGFzc1JlZlB0cjxDU1NGb250RmFjZVJ1bGU+IHJ1bGUs
IGJvb2wgaXNMb2NhbEZhbGxiYWNrID0gZmFsc2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NT
Rm9udEZhY2UodHJhaXRzTWFzaywgcnVsZSwgaXNMb2NhbEZhbGxiYWNrKSk7IH0KKyAgICBzdGF0
aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGUoRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzaywgUmVm
UHRyPENTU0ZvbnRGYWNlUnVsZT4mJiBydWxlLCBib29sIGlzTG9jYWxGYWxsYmFjayA9IGZhbHNl
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZvbnRGYWNlKHRyYWl0c01hc2ssIFdURjo6bW92
ZShydWxlKSwgaXNMb2NhbEZhbGxiYWNrKSk7IH0KIAogICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0
c01hc2soKSBjb25zdCB7IHJldHVybiBtX3RyYWl0c01hc2s7IH0KIApAQCAtOTIsNyArOTIsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBDU1NGb250RmFjZShGb250VHJhaXRz
TWFzayB0cmFpdHNNYXNrLCBQYXNzUmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4gcnVsZSwgYm9vbCBp
c0xvY2FsRmFsbGJhY2spCisgICAgQ1NTRm9udEZhY2UoRm9udFRyYWl0c01hc2sgdHJhaXRzTWFz
aywgUmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4mJiBydWxlLCBib29sIGlzTG9jYWxGYWxsYmFjaykK
ICAgICAgICAgOiBtX3RyYWl0c01hc2sodHJhaXRzTWFzaykKICAgICAgICAgLCBtX2FjdGl2ZVNv
dXJjZSgwKQogICAgICAgICAsIG1faXNMb2NhbEZhbGxiYWNrKGlzTG9jYWxGYWxsYmFjaykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggMjY5ZGRmY2RhN2VlZThjZjU5
YzAzYmFhMTFjYjE3MWQ1ZDQ4ZGI4MS4uMGRmNDQwZDBjYjZiZmNkM2EwOGJjNDZkNDJiNmVmNTI0
MjM0NGJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTg0LDMx
ICs4NCwxMyBAQCBib29sIENTU0ZvbnRTZWxlY3Rvcjo6aXNFbXB0eSgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fZm9udHMuaXNFbXB0eSgpOwogfQogCi12b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9u
dEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUsIGJvb2wgaXNJ
bml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSkKK3N0YXRpYyBPcHRpb25hbDxG
b250VHJhaXRzTWFzaz4gY29tcHV0ZVRyYWl0c01hc2soY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBz
dHlsZSkKIHsKLSAgICAvLyBPYnRhaW4gdGhlIGZvbnQtZmFtaWx5IHByb3BlcnR5IGFuZCB0aGUg
c3JjIHByb3BlcnR5LiAgQm90aCBtdXN0IGJlIGRlZmluZWQuCi0gICAgY29uc3QgU3R5bGVQcm9w
ZXJ0aWVzJiBzdHlsZSA9IGZvbnRGYWNlUnVsZS0+cHJvcGVydGllcygpOwotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gZm9udEZhbWlseSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlGb250RmFtaWx5KTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHNyYyA9IHN0eWxlLmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlTcmMpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29k
ZVJhbmdlID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVSYW5n
ZSk7Ci0gICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KGZvbnRGYW1pbHkuZ2V0KCkpIHx8ICFpczxD
U1NWYWx1ZUxpc3Q+KHNyYy5nZXQoKSkgfHwgKHVuaWNvZGVSYW5nZSAmJiAhaXM8Q1NTVmFsdWVM
aXN0PigqdW5pY29kZVJhbmdlKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1ZhbHVlTGlz
dCYgZmFtaWx5TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZvbnRGYW1pbHkpOwotICAg
IGlmICghZmFtaWx5TGlzdC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTVmFs
dWVMaXN0JiBzcmNMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pigqc3JjKTsKLSAgICBpZiAo
IXNyY0xpc3QubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1ZhbHVlTGlzdCog
cmFuZ2VMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih1bmljb2RlUmFuZ2UuZ2V0KCkpOwot
CiAgICAgdW5zaWduZWQgdHJhaXRzTWFzayA9IDA7CiAKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVl
PiBmb250U3R5bGUgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0
eWxlKSkgewogICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFN0eWxlKSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxGb250VHJh
aXRzTWFzaz4oKTsKIAogICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqZm9udFN0eWxlKS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1h
bDoKQEAgLTEyNiw3ICsxMDgsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VS
dWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUsIGJvbwogCiAgICAgaWYg
KFJlZlB0cjxDU1NWYWx1ZT4gZm9udFdlaWdodCA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlGb250V2VpZ2h0KSkgewogICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqZm9udFdlaWdodCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1
cm4gT3B0aW9uYWw8Rm9udFRyYWl0c01hc2s+KCk7CiAKICAgICAgICAgc3dpdGNoIChkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkgewogICAgICAg
ICBjYXNlIENTU1ZhbHVlQm9sZDoKQEAgLTE3MSwxMiArMTUzLDEyIEBAIHZvaWQgQ1NTRm9udFNl
bGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNl
UnVsZSwgYm9vCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoZm9udFZhcmlhbnQucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgICAgICBmb250VmFyaWFudCA9IGxpc3QucmVsZWFzZU5vbk51bGwo
KTsKICAgICAgICAgfSBlbHNlIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqZm9udFZhcmlhbnQpKQot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPEZvbnRUcmFp
dHNNYXNrPigpOwogCiAgICAgICAgIENTU1ZhbHVlTGlzdCYgdmFyaWFudExpc3QgPSBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCpmb250VmFyaWFudCk7CiAgICAgICAgIHVuc2lnbmVkIG51bVZhcmlh
bnRzID0gdmFyaWFudExpc3QubGVuZ3RoKCk7CiAgICAgICAgIGlmICghbnVtVmFyaWFudHMpCi0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Rm9udFRyYWl0
c01hc2s+KCk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhcmlhbnRz
OyArK2kpIHsKICAgICAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhcmlhbnRMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpLT5nZXRWYWx1ZUlEKCkpIHsK
QEAgLTE5Myw4ICsxNzUsMTggQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVs
ZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlLCBib28KICAgICB9IGVsc2UK
ICAgICAgICAgdHJhaXRzTWFzayB8PSBGb250VmFyaWFudE1hc2s7CiAKLSAgICAvLyBFYWNoIGl0
ZW0gaW4gdGhlIHNyYyBwcm9wZXJ0eSdzIGxpc3QgaXMgYSBzaW5nbGUgQ1NTRm9udEZhY2VTb3Vy
Y2UuIFB1dCB0aGVtIGFsbCBpbnRvIGEgQ1NTRm9udEZhY2UuCi0gICAgUmVmUHRyPENTU0ZvbnRG
YWNlPiBmb250RmFjZTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KHRy
YWl0c01hc2spOworfQorCitzdGF0aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGVGb250RmFjZShD
U1NWYWx1ZUxpc3QmIHNyY0xpc3QsIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2ssIERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVl
KQoreworICAgIFJlZlB0cjxDU1NGb250RmFjZVJ1bGU+IHJ1bGU7CisjaWYgRU5BQkxFKEZPTlRf
TE9BRF9FVkVOVFMpCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTIxMTYgLSBUaGlzIENTU0ZvbnRGYWNlUnVsZSBoYXMgbm8gcGFyZW50Lgor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmZvbnRMb2Fk
RXZlbnRzRW5hYmxlZCgpKQorICAgICAgICBydWxlID0gc3RhdGljX3BvaW50ZXJfY2FzdDxDU1NG
b250RmFjZVJ1bGU+KGZvbnRGYWNlUnVsZS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkpOworI2VuZGlm
CisgICAgUmVmPENTU0ZvbnRGYWNlPiBmb250RmFjZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUodHJh
aXRzTWFzaywgV1RGOjptb3ZlKHJ1bGUpKTsKIAogICAgIGludCBzcmNMZW5ndGggPSBzcmNMaXN0
Lmxlbmd0aCgpOwogCkBAIC0yMDksMTAgKzIwMSwxMCBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6
YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUsIGJv
bwogICAgICAgICBmb3VuZFNWR0ZvbnQgPSBpdGVtLmlzU1ZHRm9udEZhY2VTcmMoKSB8fCBpdGVt
LnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwogI2VuZGlmCiAgICAgICAgIGlmICghaXRlbS5pc0xvY2Fs
KCkpIHsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZG9jdW1lbnQgPyBtX2Rv
Y3VtZW50LT5mcmFtZSgpID8gJm1fZG9jdW1lbnQtPmZyYW1lKCktPnNldHRpbmdzKCkgOiAwIDog
MDsKKyAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50ID8gZG9jdW1lbnQt
PmZyYW1lKCkgPyAmZG9jdW1lbnQtPmZyYW1lKCktPnNldHRpbmdzKCkgOiAwIDogMDsKICAgICAg
ICAgICAgIGJvb2wgYWxsb3dEb3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8fCAoc2V0dGluZ3Mg
JiYgc2V0dGluZ3MtPmRvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgpKTsKLSAgICAgICAg
ICAgIGlmIChhbGxvd0Rvd25sb2FkaW5nICYmIGl0ZW0uaXNTdXBwb3J0ZWRGb3JtYXQoKSAmJiBt
X2RvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgQ2FjaGVkRm9udCogY2FjaGVkRm9udCA9IGl0
ZW0uY2FjaGVkRm9udChtX2RvY3VtZW50LCBmb3VuZFNWR0ZvbnQsIGlzSW5pdGlhdGluZ0VsZW1l
bnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOworICAgICAgICAgICAgaWYgKGFsbG93RG93bmxvYWRp
bmcgJiYgaXRlbS5pc1N1cHBvcnRlZEZvcm1hdCgpICYmIGRvY3VtZW50KSB7CisgICAgICAgICAg
ICAgICAgQ2FjaGVkRm9udCogY2FjaGVkRm9udCA9IGl0ZW0uY2FjaGVkRm9udChkb2N1bWVudCwg
Zm91bmRTVkdGb250LCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsK
ICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkRm9udCkgewogICAgICAgICAgICAgICAgICAgICBz
b3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihpdGVtLnJlc291cmNl
KCksIGNhY2hlZEZvbnQpOwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCkBAIC0yMjUsMTYgKzIxNyw2
IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxl
Rm9udEZhY2UqIGZvbnRGYWNlUnVsZSwgYm9vCiAgICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1h
a2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihpdGVtLnJlc291cmNlKCkpOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCFmb250RmFjZSkgewotICAgICAgICAgICAgUmVmUHRyPENTU0ZvbnRG
YWNlUnVsZT4gcnVsZTsKLSNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5UUykKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyMTE2
IC0gVGhpcyBDU1NGb250RmFjZVJ1bGUgaGFzIG5vIHBhcmVudC4KLSAgICAgICAgICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmZvbnRMb2FkRXZlbnRzRW5h
YmxlZCgpKQotICAgICAgICAgICAgICAgIHJ1bGUgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PENTU0Zv
bnRGYWNlUnVsZT4oZm9udEZhY2VSdWxlLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7Ci0jZW5kaWYK
LSAgICAgICAgICAgIGZvbnRGYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxG
b250VHJhaXRzTWFzaz4odHJhaXRzTWFzayksIHJ1bGUpOwotICAgICAgICB9Ci0KICAgICAgICAg
aWYgKHNvdXJjZSkgewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgICAgICAgICBzb3VyY2Ut
PnNldFNWR0ZvbnRGYWNlRWxlbWVudChpdGVtLnN2Z0ZvbnRGYWNlRWxlbWVudCgpKTsKQEAgLTI0
Myw5ICsyMjUsNjMgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25z
dCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlLCBib28KICAgICAgICAgfQogICAgIH0K
IAotICAgIEFTU0VSVChmb250RmFjZSk7CisgICAgcmV0dXJuIGZvbnRGYWNlOworfQorCitzdGF0
aWMgU3RyaW5nIGZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVl
JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNGb250RmFtaWx5KCkpCisgICAgICAgIHJldHVy
biB2YWx1ZS5mb250RmFtaWx5KCkuZmFtaWx5TmFtZTsKKyAgICBpZiAoIXZhbHVlLmlzVmFsdWVJ
RCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBXZSBuZWVkIHRvIHVzZSB0
aGUgcmF3IHRleHQgZm9yIGFsbCB0aGUgZ2VuZXJpYyBmYW1pbHkgdHlwZXMsIHNpbmNlIEBmb250
LWZhY2UgaXMgYSB3YXkgb2YgYWN0dWFsbHkKKyAgICAvLyBkZWZpbmluZyB3aGF0IGZvbnQgdG8g
dXNlIGZvciB0aG9zZSB0eXBlcy4KKyAgICBzd2l0Y2ggKHZhbHVlLmdldFZhbHVlSUQoKSkgewor
ICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAgICAgcmV0dXJuIHNlcmlmRmFtaWx5OworICAg
IGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6CisgICAgICAgIHJldHVybiBzYW5zU2VyaWZGYW1pbHk7
CisgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6CisgICAgICAgIHJldHVybiBjdXJzaXZlRmFtaWx5
OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAgICAgICByZXR1cm4gZmFudGFzeUZhbWls
eTsKKyAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgorICAgICAgICByZXR1cm4gbW9ub3NwYWNl
RmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dyYXBoOgorICAgICAgICByZXR1
cm4gcGljdG9ncmFwaEZhbWlseTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgfQorfQorCit2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNv
bnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUsIGJvb2wgaXNJbml0aWF0aW5nRWxl
bWVudEluVXNlckFnZW50U2hhZG93VHJlZSkKK3sKKyAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMm
IHN0eWxlID0gZm9udEZhY2VSdWxlLT5wcm9wZXJ0aWVzKCk7CisgICAgUmVmUHRyPENTU1ZhbHVl
PiBmb250RmFtaWx5ID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRG
YW1pbHkpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3JjID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eVNyYyk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlUmFuZ2Ug
PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VW5pY29kZVJhbmdlKTsKKyAg
ICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oZm9udEZhbWlseS5nZXQoKSkgfHwgIWlzPENTU1ZhbHVl
TGlzdD4oc3JjLmdldCgpKSB8fCAodW5pY29kZVJhbmdlICYmICFpczxDU1NWYWx1ZUxpc3Q+KCp1
bmljb2RlUmFuZ2UpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTVmFsdWVMaXN0JiBmYW1p
bHlMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqZm9udEZhbWlseSk7CisgICAgaWYgKCFm
YW1pbHlMaXN0Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NWYWx1ZUxpc3Qm
IHNyY0xpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpzcmMpOworICAgIGlmICghc3JjTGlz
dC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTVmFsdWVMaXN0KiByYW5nZUxp
c3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHVuaWNvZGVSYW5nZS5nZXQoKSk7CisKKyAgICBG
b250VHJhaXRzTWFzayB0cmFpdHNNYXNrOworICAgIGlmIChPcHRpb25hbDxGb250VHJhaXRzTWFz
az4gY29tcHV0ZWRUcmFpdHNNYXNrID0gY29tcHV0ZVRyYWl0c01hc2soc3R5bGUpKQorICAgICAg
ICB0cmFpdHNNYXNrID0gY29tcHV0ZWRUcmFpdHNNYXNrLnZhbHVlKCk7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoZm9udEZhY2UgJiYgIWZvbnRGYWNlLT5pc1ZhbGlkKCkp
CisgICAgUmVmPENTU0ZvbnRGYWNlPiBmb250RmFjZSA9IGNyZWF0ZUZvbnRGYWNlKHNyY0xpc3Qs
IHRyYWl0c01hc2ssIG1fZG9jdW1lbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNo
YWRvd1RyZWUpOworICAgIGlmICghZm9udEZhY2UtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKHJhbmdlTGlzdCkgewpAQCAtMjU2LDY1ICsyOTIsMzEgQEAgdm9pZCBDU1NG
b250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9u
dEZhY2VSdWxlLCBib28KICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIEhhc2ggdW5kZXIgZXZl
cnkgc2luZ2xlIGZhbWlseSBuYW1lLgogICAgIGZvciAoYXV0byYgaXRlbSA6IGZhbWlseUxpc3Qp
IHsKLSAgICAgICAgYXV0byYgdmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRl
bS5nZXQoKSk7Ci0gICAgICAgIFN0cmluZyBmYW1pbHlOYW1lOwotICAgICAgICBpZiAodmFsdWUu
aXNGb250RmFtaWx5KCkpIHsKLSAgICAgICAgICAgIGZhbWlseU5hbWUgPSB2YWx1ZS5mb250RmFt
aWx5KCkuZmFtaWx5TmFtZTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc1ZhbHVlSUQoKSkg
ewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB1c2UgdGhlIHJhdyB0ZXh0IGZvciBhbGwgdGhl
IGdlbmVyaWMgZmFtaWx5IHR5cGVzLCBzaW5jZSBAZm9udC1mYWNlIGlzIGEgd2F5IG9mIGFjdHVh
bGx5Ci0gICAgICAgICAgICAvLyBkZWZpbmluZyB3aGF0IGZvbnQgdG8gdXNlIGZvciB0aG9zZSB0
eXBlcy4KLSAgICAgICAgICAgIHN3aXRjaCAodmFsdWUuZ2V0VmFsdWVJRCgpKSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZVNlcmlmOgotICAgICAgICAgICAgICAgICAgICBmYW1pbHlO
YW1lID0gc2VyaWZGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6Ci0gICAgICAgICAgICAgICAgICAgIGZhbWls
eU5hbWUgPSBzYW5zU2VyaWZGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgotICAgICAgICAgICAgICAgICAgICBm
YW1pbHlOYW1lID0gY3Vyc2l2ZUZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhbnRhc3k6Ci0gICAgICAgICAgICAgICAgICAg
IGZhbWlseU5hbWUgPSBmYW50YXN5RmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgotICAgICAgICAgICAgICAg
ICAgICBmYW1pbHlOYW1lID0gbW9ub3NwYWNlRmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKLSAg
ICAgICAgICAgICAgICAgICAgZmFtaWx5TmFtZSA9IHBpY3RvZ3JhcGhGYW1pbHk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KKyAgICAgICAgU3Ry
aW5nIGZhbWlseU5hbWUgPSBmYW1pbHlOYW1lRnJvbVByaW1pdGl2ZShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkpOwogICAgICAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVj
dG9yPFJlZlB0cjxDU1NGb250RmFjZT4+PiYgZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMu
YWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byYg
ZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCFmYW1pbHlGb250RmFjZXMpIHsKLSAgICAgICAg
ICAgIGZhbWlseUZvbnRGYWNlcyA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPFJlZlB0cjxDU1NG
b250RmFjZT4+PigpOworICAgICAgICAgICAgZmFtaWx5Rm9udEZhY2VzID0gc3RkOjptYWtlX3Vu
aXF1ZTxWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4+KCk7CiAKICAgICAgICAgICAgIEFTU0VSVCgh
bV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmNvbnRhaW5zKGZhbWlseU5hbWUpKTsKIAotICAg
ICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBsb2NhbGx5SW5zdGFsbGVkRm9udHNUcmFpdHNNYXNr
czsKLSAgICAgICAgICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2V0VHJhaXRzSW5GYW1pbHko
ZmFtaWx5TmFtZSwgbG9jYWxseUluc3RhbGxlZEZvbnRzVHJhaXRzTWFza3MpOwotICAgICAgICAg
ICAgaWYgKHVuc2lnbmVkIG51bUxvY2FsbHlJbnN0YWxsZWRGYWNlcyA9IGxvY2FsbHlJbnN0YWxs
ZWRGb250c1RyYWl0c01hc2tzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZmFtaWx5
TG9jYWxseUluc3RhbGxlZEZhY2VzID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8UmVmUHRyPENT
U0ZvbnRGYWNlPj4+KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtTG9jYWxseUluc3RhbGxlZEZhY2VzOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPENTU0ZvbnRGYWNlPiBsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UgPSBDU1NGb250RmFj
ZTo6Y3JlYXRlKHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPihsb2NhbGx5SW5zdGFsbGVkRm9u
dHNUcmFpdHNNYXNrc1tpXSksIDAsIHRydWUpOworICAgICAgICAgICAgVmVjdG9yPEZvbnRUcmFp
dHNNYXNrPiBsb2NhbGx5SW5zdGFsbGVkRm9udHNUcmFpdHNNYXNrcyA9IEZvbnRDYWNoZTo6c2lu
Z2xldG9uKCkuZ2V0VHJhaXRzSW5GYW1pbHkoZmFtaWx5TmFtZSk7CisgICAgICAgICAgICBpZiAo
IWxvY2FsbHlJbnN0YWxsZWRGb250c1RyYWl0c01hc2tzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gZmFtaWx5TG9jYWxseUluc3RhbGxlZEZhY2VzID0gc3RkOjptYWtlX3VuaXF1
ZTxWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4+KCk7CisgICAgICAgICAgICAgICAgZm9yIChGb250
VHJhaXRzTWFzayBtYXNrIDogbG9jYWxseUluc3RhbGxlZEZvbnRzVHJhaXRzTWFza3MpIHsKKyAg
ICAgICAgICAgICAgICAgICAgUmVmPENTU0ZvbnRGYWNlPiBsb2NhbGx5SW5zdGFsbGVkRm9udEZh
Y2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKG1hc2ssIG51bGxwdHIsIHRydWUpOwogICAgICAgICAg
ICAgICAgICAgICBsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UtPmFkZFNvdXJjZShzdGQ6Om1ha2Vf
dW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmYW1pbHlOYW1lKSk7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UtPmlzVmFsaWQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZhbWlseUxvY2FsbHlJbnN0YWxsZWRGYWNlcy0+YXBwZW5kKGxvY2FsbHlJ
bnN0YWxsZWRGb250RmFjZSk7CisgICAgICAgICAgICAgICAgICAgIGZhbWlseUxvY2FsbHlJbnN0
YWxsZWRGYWNlcy0+YXBwZW5kKFdURjo6bW92ZShsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UpKTsK
ICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICBtX2xvY2FsbHlJbnN0YWxsZWRG
b250RmFjZXMuc2V0KGZhbWlseU5hbWUsIFdURjo6bW92ZShmYW1pbHlMb2NhbGx5SW5zdGFsbGVk
RmFjZXMpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZhbWlseUZvbnRG
YWNlcy0+YXBwZW5kKGZvbnRGYWNlKTsKKyAgICAgICAgZmFtaWx5Rm9udEZhY2VzLT5hcHBlbmQo
Zm9udEZhY2UuY29weVJlZigpKTsKICAgICAgICAgCiAgICAgICAgICsrbV92ZXJzaW9uOwogICAg
IH0KQEAgLTM3OCwxMCArMzgwLDEwIEBAIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHJlc29s
dmVHZW5lcmljRmFtaWx5KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRm9udERlCiAKIHN0YXRp
YyBGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb247CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBjb21wYXJlRm9udEZhY2VzKENTU0ZvbnRGYWNlKiBmaXJzdCwgQ1NTRm9u
dEZhY2UqIHNlY29uZCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlRm9udEZhY2VzKGNvbnN0
IENTU0ZvbnRGYWNlJiBmaXJzdCwgY29uc3QgQ1NTRm9udEZhY2UmIHNlY29uZCkKIHsKLSAgICBG
b250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC0+dHJhaXRzTWFzaygpOwotICAg
IEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01hc2sgPSBzZWNvbmQtPnRyYWl0c01hc2soKTsK
KyAgICBGb250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC50cmFpdHNNYXNrKCk7
CisgICAgRm9udFRyYWl0c01hc2sgc2Vjb25kVHJhaXRzTWFzayA9IHNlY29uZC50cmFpdHNNYXNr
KCk7CiAKICAgICBib29sIGZpcnN0SGFzRGVzaXJlZFZhcmlhbnQgPSBmaXJzdFRyYWl0c01hc2sg
JiBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudE1hc2s7CiAgICAg
Ym9vbCBzZWNvbmRIYXNEZXNpcmVkVmFyaWFudCA9IHNlY29uZFRyYWl0c01hc2sgJiBkZXNpcmVk
VHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudE1hc2s7CkBAIC0zOTAsNyArMzky
LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVGb250RmFjZXMoQ1NTRm9udEZhY2UqIGZp
cnN0LCBDU1NGb250RmFjZSogc2Vjb25kKQogICAgICAgICByZXR1cm4gZmlyc3RIYXNEZXNpcmVk
VmFyaWFudDsKIAogICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgZm9udC12YXJpYW50IGNzcyBwcm9w
ZXJ0eSBmb3IgQ1NTMi4xIGNvbXBhdGliaWxpdHkuCi0gICAgaWYgKChkZXNpcmVkVHJhaXRzTWFz
a0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spICYmICFmaXJzdC0+aXNM
b2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC0+aXNMb2NhbEZhbGxiYWNrKCkpIHsKKyAgICBpZiAo
KGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRWYXJpYW50U21hbGxDYXBzTWFz
aykgJiYgIWZpcnN0LmlzTG9jYWxGYWxsYmFjaygpICYmICFzZWNvbmQuaXNMb2NhbEZhbGxiYWNr
KCkpIHsKICAgICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0ZWQgdGhhdCBp
dCBjYW4gb25seSBzdXBwb3J0IHNtYWxsLWNhcHMgdG8gYSBmb250IHRoYXQgY2xhaW1zIHRvIHN1
cHBvcnQKICAgICAgICAgLy8gYWxsIHZhcmlhbnRzLiAgVGhlIHNwZWNpYWxpemVkIGZvbnQgaXMg
bW9yZSBsaWtlbHkgdG8gYmUgdHJ1ZSBzbWFsbC1jYXBzIGFuZCBub3QgcmVxdWlyZSBzeW50aGVz
aXMuCiAgICAgICAgIGJvb2wgZmlyc3RSZXF1aXJlc1NtYWxsQ2FwcyA9IChmaXJzdFRyYWl0c01h
c2sgJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spICYmICEoZmlyc3RUcmFpdHNNYXNrICYgRm9u
dFZhcmlhbnROb3JtYWxNYXNrKTsKQEAgLTQwNSw3ICs0MDcsNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgY29tcGFyZUZvbnRGYWNlcyhDU1NGb250RmFjZSogZmlyc3QsIENTU0ZvbnRGYWNlKiBzZWNv
bmQpCiAgICAgaWYgKGZpcnN0SGFzRGVzaXJlZFN0eWxlICE9IHNlY29uZEhhc0Rlc2lyZWRTdHls
ZSkKICAgICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxlOwogCi0gICAgaWYgKChkZXNp
cmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhZmly
c3QtPmlzTG9jYWxGYWxsYmFjaygpICYmICFzZWNvbmQtPmlzTG9jYWxGYWxsYmFjaygpKSB7Cisg
ICAgaWYgKChkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNN
YXNrKSAmJiAhZmlyc3QuaXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5pc0xvY2FsRmFsbGJh
Y2soKSkgewogICAgICAgICAvLyBQcmVmZXIgYSBmb250IHRoYXQgaGFzIGluZGljYXRlZCB0aGF0
IGl0IGNhbiBvbmx5IHN1cHBvcnQgaXRhbGljcyB0byBhIGZvbnQgdGhhdCBjbGFpbXMgdG8gc3Vw
cG9ydAogICAgICAgICAvLyBhbGwgc3R5bGVzLiAgVGhlIHNwZWNpYWxpemVkIGZvbnQgaXMgbW9y
ZSBsaWtlbHkgdG8gYmUgdGhlIG9uZSB0aGUgYXV0aG9yIHdhbnRzIHVzZWQuCiAgICAgICAgIGJv
b2wgZmlyc3RSZXF1aXJlc0l0YWxpY3MgPSAoZmlyc3RUcmFpdHNNYXNrICYgRm9udFN0eWxlSXRh
bGljTWFzaykgJiYgIShmaXJzdFRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKTsKQEAg
LTQ3Niw5ICs0NzgsOSBAQCBGb250UmFuZ2VzIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0Zv
ckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcgogCiBDU1NTZWdtZW50ZWRG
b250RmFjZSogQ1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCiB7Ci0gICAg
VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4+KiBmYW1pbHlGb250RmFjZXMgPSBtX2ZvbnRGYWNl
cy5nZXQoZmFtaWx5KTsKKyAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4qIGZhbWlseUZvbnRG
YWNlcyA9IG1fZm9udEZhY2VzLmdldChmYW1pbHkpOwogICAgIGlmICghZmFtaWx5Rm9udEZhY2Vz
IHx8IGZhbWlseUZvbnRGYWNlcy0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDx1bnNpZ25l
ZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4+JiBzZWdtZW50ZWRGb250RmFjZUNhY2hl
ID0gbV9mb250cy5hZGQoZmFtaWx5LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KCFzZWdtZW50ZWRGb250RmFjZUNhY2hlKQpAQCAtNDkwLDExICs0OTIsMTAgQEAgQ1NTU2VnbWVu
dGVkRm9udEZhY2UqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udEZhY2UoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGUKICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgZmFjZSA9IENTU1NlZ21l
bnRlZEZvbnRGYWNlOjpjcmVhdGUodGhpcyk7CiAKLSAgICAgICAgLy8gQ29sbGVjdCBhbGwgbWF0
Y2hpbmcgZmFjZXMgYW5kIHNvcnQgdGhlbSBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgotICAgICAg
ICBWZWN0b3I8Q1NTRm9udEZhY2UqLCAzMj4gY2FuZGlkYXRlRm9udEZhY2VzOworICAgICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4sIDMyPiBjYW5kaWRhdGVG
b250RmFjZXM7CiAgICAgICAgIGZvciAoaW50IGkgPSBmYW1pbHlGb250RmFjZXMtPnNpemUoKSAt
IDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBDU1NGb250RmFjZSogY2FuZGlkYXRlID0g
ZmFtaWx5Rm9udEZhY2VzLT5hdChpKS5nZXQoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNhbmRp
ZGF0ZVRyYWl0c01hc2sgPSBjYW5kaWRhdGUtPnRyYWl0c01hc2soKTsKKyAgICAgICAgICAgIENT
U0ZvbnRGYWNlJiBjYW5kaWRhdGUgPSBmYW1pbHlGb250RmFjZXMtPmF0KGkpOworICAgICAgICAg
ICAgdW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRpZGF0ZS50cmFpdHNNYXNrKCk7
CiAgICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAh
KGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICgodHJhaXRzTWFzayAmIEZvbnRWYXJpYW50
Tm9ybWFsTWFzaykgJiYgIShjYW5kaWRhdGVUcmFpdHNNYXNrICYgRm9udFZhcmlhbnROb3JtYWxN
YXNrKSkKQEAgLTUwMiwxNiArNTAzLDE0IEBAIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBDU1NGb250
U2VsZWN0b3I6OmdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlCiAjaWYg
RU5BQkxFKFNWR19GT05UUykKICAgICAgICAgICAgIC8vIEZvciBTVkcgRm9udHMgdGhhdCBzcGVj
aWZ5IHRoYXQgdGhleSBvbmx5IHN1cHBvcnQgdGhlICJub3JtYWwiIHZhcmlhbnQsIHdlIHdpbGwg
YXNzdW1lIHRoZXkgYXJlIGluY2FwYWJsZQogICAgICAgICAgICAgLy8gb2Ygc21hbGwtY2FwcyBz
eW50aGVzaXMgYW5kIGp1c3QgaWdub3JlIHRoZSBmb250IGZhY2UgYXMgYSBjYW5kaWRhdGUuCi0g
ICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5oYXNTVkdGb250RmFjZVNvdXJjZSgpICYmICh0cmFp
dHNNYXNrICYgRm9udFZhcmlhbnRTbWFsbENhcHNNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01h
c2sgJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spKQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0
ZS5oYXNTVkdGb250RmFjZVNvdXJjZSgpICYmICh0cmFpdHNNYXNrICYgRm9udFZhcmlhbnRTbWFs
bENhcHNNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250VmFyaWFudFNtYWxsQ2Fw
c01hc2spKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAgICAgICAgICBj
YW5kaWRhdGVGb250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoVmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4+KiBmYW1pbHlMb2NhbGx5SW5zdGFsbGVk
Rm9udEZhY2VzID0gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmdldChmYW1pbHkpKSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBudW1Mb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzID0gZmFtaWx5
TG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy0+c2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bUxvY2FsbHlJbnN0YWxsZWRGb250RmFjZXM7ICsraSkgewotICAg
ICAgICAgICAgICAgIENTU0ZvbnRGYWNlKiBjYW5kaWRhdGUgPSBmYW1pbHlMb2NhbGx5SW5zdGFs
bGVkRm9udEZhY2VzLT5hdChpKS5nZXQoKTsKKyAgICAgICAgaWYgKFZlY3RvcjxSZWY8Q1NTRm9u
dEZhY2U+PiogZmFtaWx5TG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcyA9IG1fbG9jYWxseUluc3Rh
bGxlZEZvbnRGYWNlcy5nZXQoZmFtaWx5KSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBjYW5k
aWRhdGUgOiAqZmFtaWx5TG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcykgewogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRyYWl0c01hc2sgPSBjYW5kaWRhdGUtPnRyYWl0c01hc2so
KTsKICAgICAgICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNr
KSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CkBAIC01MjMsOSArNTIyLDggQEAgQ1NTU2VnbWVudGVk
Rm9udEZhY2UqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udEZhY2UoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGUKIAogICAgICAgICBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gPSB0
cmFpdHNNYXNrOwogICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KGNhbmRpZGF0ZUZvbnRGYWNlcy5i
ZWdpbigpLCBjYW5kaWRhdGVGb250RmFjZXMuZW5kKCksIGNvbXBhcmVGb250RmFjZXMpOwotICAg
ICAgICB1bnNpZ25lZCBudW1DYW5kaWRhdGVzID0gY2FuZGlkYXRlRm9udEZhY2VzLnNpemUoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNhbmRpZGF0ZXM7ICsraSkKLSAg
ICAgICAgICAgIGZhY2UtPmFwcGVuZEZvbnRGYWNlKGNhbmRpZGF0ZUZvbnRGYWNlc1tpXSk7Cisg
ICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlRm9udEZhY2UgOiBjYW5kaWRhdGVGb250RmFjZXMp
CisgICAgICAgICAgICBmYWNlLT5hcHBlbmRGb250RmFjZShjYW5kaWRhdGVGb250RmFjZS5nZXQo
KSk7CiAgICAgfQogICAgIHJldHVybiBmYWNlLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5oCmluZGV4IDRiZTc0MDgxMjk5NjQ1NGU5ZmViMzBlOTdlMDQ1ZTAyNmU1Yzcz
MmMuLmM3NDMyMzVmMmM1OGU5MmJhMzY5MmFhYjBkMjVkZjhlNWFmYjk1NzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTg5LDggKzg5LDggQEAgcHJpdmF0ZToKICAgICB2
b2lkIGJlZ2luTG9hZFRpbWVyRmlyZWQoKTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50Owot
ICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZlB0cjxDU1NGb250
RmFjZT4+PiwgQ2FzZUZvbGRpbmdIYXNoPiBtX2ZvbnRGYWNlczsKLSAgICBIYXNoTWFwPFN0cmlu
Zywgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+Pj4sIENhc2VGb2xk
aW5nSGFzaD4gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzOworICAgIEhhc2hNYXA8U3RyaW5n
LCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZjxDU1NGb250RmFjZT4+PiwgQ2FzZUZvbGRpbmdI
YXNoPiBtX2ZvbnRGYWNlczsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPFZl
Y3RvcjxSZWY8Q1NTRm9udEZhY2U+Pj4sIENhc2VGb2xkaW5nSGFzaD4gbV9sb2NhbGx5SW5zdGFs
bGVkRm9udEZhY2VzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1h
cDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4+LCBDYXNlRm9sZGluZ0hh
c2g+IG1fZm9udHM7CiAgICAgSGFzaFNldDxGb250U2VsZWN0b3JDbGllbnQqPiBtX2NsaWVudHM7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCmluZGV4IDJm
MzdkNmEwZmQwOTY0YTA5OTc5ZTZkZjdlOWY3ZjE4Mjk5YTA2NzcuLjVjYmZjYTRlN2I3MjAxMDk5
NWE4MTEyYmRiNDc2YjVkZGVhNWRkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21l
bnRlZEZvbnRGYWNlLmNwcApAQCAtNDUsOSArNDUsOCBAQCBDU1NTZWdtZW50ZWRGb250RmFjZTo6
Q1NTU2VnbWVudGVkRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiBDU1NT
ZWdtZW50ZWRGb250RmFjZTo6fkNTU1NlZ21lbnRlZEZvbnRGYWNlKCkKIHsKICAgICBwcnVuZVRh
YmxlKCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG1fZm9udEZhY2VzLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICBtX2ZvbnRGYWNlc1tpXS0+
cmVtb3ZlZEZyb21TZWdtZW50ZWRGb250RmFjZSh0aGlzKTsKKyAgICBmb3IgKGF1dG8mIGZhY2Ug
OiBtX2ZvbnRGYWNlcykKKyAgICAgICAgZmFjZS0+cmVtb3ZlZEZyb21TZWdtZW50ZWRGb250RmFj
ZSh0aGlzKTsKIH0KIAogdm9pZCBDU1NTZWdtZW50ZWRGb250RmFjZTo6cHJ1bmVUYWJsZSgpCkBA
IC01OCw5ICs1Nyw4IEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZhY2U6OnBydW5lVGFibGUoKQog
Ym9vbCBDU1NTZWdtZW50ZWRGb250RmFjZTo6aXNWYWxpZCgpIGNvbnN0CiB7CiAgICAgLy8gVmFs
aWQgaWYgYXQgbGVhc3Qgb25lIGZvbnQgZmFjZSBpcyB2YWxpZC4KLSAgICB1bnNpZ25lZCBzaXpl
ID0gbV9mb250RmFjZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKLSAgICAgICAgaWYgKG1fZm9udEZhY2VzW2ldLT5pc1ZhbGlkKCkpCisgICAgZm9y
IChhdXRvJiBmYWNlIDogbV9mb250RmFjZXMpIHsKKyAgICAgICAgaWYgKGZhY2UtPmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC04NCwxMSArODIsMTEgQEAgdm9pZCBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udExvYWRlZChD
U1NGb250RmFjZSopCiAjZW5kaWYKIH0KIAotdm9pZCBDU1NTZWdtZW50ZWRGb250RmFjZTo6YXBw
ZW5kRm9udEZhY2UoUGFzc1JlZlB0cjxDU1NGb250RmFjZT4gZm9udEZhY2UpCit2b2lkIENTU1Nl
Z21lbnRlZEZvbnRGYWNlOjphcHBlbmRGb250RmFjZShSZWY8Q1NTRm9udEZhY2U+JiYgZm9udEZh
Y2UpCiB7CiAgICAgcHJ1bmVUYWJsZSgpOwogICAgIGZvbnRGYWNlLT5hZGRlZFRvU2VnbWVudGVk
Rm9udEZhY2UodGhpcyk7Ci0gICAgbV9mb250RmFjZXMuYXBwZW5kKGZvbnRGYWNlKTsKKyAgICBt
X2ZvbnRGYWNlcy5hcHBlbmQoV1RGOjptb3ZlKGZvbnRGYWNlKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IGFwcGVuZEZvbnRXaXRoSW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGluZyhGb250UmFuZ2VzJiBy
YW5nZXMsIFJlZjxGb250PiYmIGZvbnQsIGNvbnN0IFZlY3RvcjxDU1NGb250RmFjZTo6VW5pY29k
ZVJhbmdlPiYgdW5pY29kZVJhbmdlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZv
bnRGYWNlLmgKaW5kZXggZjg2OWZmNmRhMGI3ZWZhMmU0NWJmMTI2ODU0NTMyYzQ4NjU1NjUyYy4u
NWZmZWJiMThjYTgwZGQ4ZDNjYTkzMmQ2ODA5NDE4YzFkM2U1YmNlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlKik7CiAKLSAgICB2b2lkIGFwcGVuZEZv
bnRGYWNlKFBhc3NSZWZQdHI8Q1NTRm9udEZhY2U+KTsKKyAgICB2b2lkIGFwcGVuZEZvbnRGYWNl
KFJlZjxDU1NGb250RmFjZT4mJik7CiAKICAgICBGb250UmFuZ2VzIGZvbnRSYW5nZXMoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJik7CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKIAogICAgIENT
U0ZvbnRTZWxlY3RvciogbV9mb250U2VsZWN0b3I7CiAgICAgSGFzaE1hcDxGb250RGVzY3JpcHRp
b25LZXksIEZvbnRSYW5nZXMsIEZvbnREZXNjcmlwdGlvbktleUhhc2gsIFdURjo6U2ltcGxlQ2xh
c3NIYXNoVHJhaXRzPEZvbnREZXNjcmlwdGlvbktleT4+IG1fZGVzY3JpcHRpb25Ub1Jhbmdlc01h
cDsKLSAgICBWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiwgMT4gbV9mb250RmFjZXM7CisgICAg
VmVjdG9yPFJlZjxDU1NGb250RmFjZT4sIDE+IG1fZm9udEZhY2VzOwogI2lmIEVOQUJMRShGT05U
X0xPQURfRVZFTlRTKQogICAgIFZlY3RvcjxSZWZQdHI8TG9hZEZvbnRDYWxsYmFjaz4+IG1fY2Fs
bGJhY2tzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCmluZGV4IDNhMDY4NmM5OGYwMDI3MTJjZTgyZDU0ZTM4OGYxYjQwZmQ1NDJlZjYuLjI3
YjUwMGU5MWM5ODE3ZWVjYjJjZGU2OGMzMDAxNzRiOWIyZGMwNWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVi
bGljOgogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBleGlzdHMgc28gQ1NTRm9udFNlbGVjdG9yIGNh
biBoYXZlIGEgdW5pZmllZCBub3Rpb24gb2YgcHJlaW5zdGFsbGVkIGZvbnRzIGFuZCBAZm9udC1m
YWNlLgogICAgIC8vIEl0IGNvbWVzIGludG8gcGxheSB3aGVuIHlvdSBjcmVhdGUgYW4gQGZvbnQt
ZmFjZSB3aGljaCBzaGFyZXMgYSBmYW1pbHkgbmFtZSBhcyBhIHByZWluc3RhbGxlZCBmb250Lgot
ICAgIHZvaWQgZ2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVu
c2lnbmVkPiYpOworICAgIFZlY3RvcjxGb250VHJhaXRzTWFzaz4gZ2V0VHJhaXRzSW5GYW1pbHko
Y29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4g
Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcm
LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBSZWY8Rm9udD4gbGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRleCBkODdkNzk4MDE2OGZiMjBkYmQ0ZWI1N2Yw
ZGY0ZjQ4YmUyNTVmNDIwLi5jMTM2NGFiZTY1ZmFkNWM2YjQyYjI5ZTVjMmNkNzcwNzMxNzJjYjA5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCkBAIC0yMzcsNyArMjM3LDcgQEAgUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbikKICAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpn
ZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1
bnNpZ25lZD4mIHRyYWl0c01hc2tzKQorVmVjdG9yPEZvbnRUcmFpdHNNYXNrPiBGb250Q2FjaGU6
OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWVTdHIgPSBmYW1pbHlOYW1lLnN0cmlu
ZygpLmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAgQ0ZTdHJpbmdSZWYgZmFtaWx5TmFtZVN0clB0ciA9
IGZhbWlseU5hbWVTdHIuZ2V0KCk7CkBAIC0yNDUsMTIgKzI0NSwxMyBAQCB2b2lkIEZvbnRDYWNo
ZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0
b3I8dW5zaWduZQogICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3Jp
cHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMuZ2V0KCkpKTsKICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gbWF0Y2hlZERlc2NyaXB0
b3JzID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlTWF0Y2hpbmdGb250RGVzY3JpcHRv
cnMoZm9udERlc2NyaXB0b3IuZ2V0KCksIG51bGxwdHIpKTsKICAgICBpZiAoIW1hdGNoZWREZXNj
cmlwdG9ycykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gVmVjdG9yPEZvbnRUcmFp
dHNNYXNrPigpOwogCiAgICAgQ0ZJbmRleCBudW1NYXRjaGVzID0gQ0ZBcnJheUdldENvdW50KG1h
dGNoZWREZXNjcmlwdG9ycy5nZXQoKSk7CiAgICAgaWYgKCFudW1NYXRjaGVzKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBWZWN0b3I8Rm9udFRyYWl0c01hc2s+KCk7CiAKKyAgICBW
ZWN0b3I8Rm9udFRyYWl0c01hc2s+IHRyYWl0c01hc2tzOwogICAgIGZvciAoQ0ZJbmRleCBpID0g
MDsgaSA8IG51bU1hdGNoZXM7ICsraSkgewogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiB0cmFpdHMgPSBhZG9wdENGKChDRkRpY3Rpb25hcnlSZWYpQ1RGb250RGVzY3JpcHRvckNv
cHlBdHRyaWJ1dGUoKENURm9udERlc2NyaXB0b3JSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleCht
YXRjaGVkRGVzY3JpcHRvcnMuZ2V0KCksIGkpLCBrQ1RGb250VHJhaXRzQXR0cmlidXRlKSk7CiAg
ICAgICAgIENGTnVtYmVyUmVmIHJlc3VsdFJlZiA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZSh0cmFpdHMuZ2V0KCksIGtDVEZvbnRTeW1ib2xpY1RyYWl0KTsKQEAgLTI2Myw2ICsy
NjQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5zaWduZQogICAgICAgICAgICAgdHJhaXRzTWFza3Mu
YXBwZW5kKHRvVHJhaXRzTWFzayhzeW1ib2xpY1RyYWl0cywgd2VpZ2h0KSk7CiAgICAgICAgIH0K
ICAgICB9CisgICAgcmV0dXJuIHRyYWl0c01hc2tzOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVG
cmVlVHlwZS5jcHAKaW5kZXggN2I2MDM5ODM3NGQ0OTgyN2M5NmU2NWNmNDA3MTAzMzMwMjcxOTI3
OS4uZjBmNGUxMGUwOTI5MGZiZTg5NmMyOTRhYTc5NGJiM2Y1MjUxZTc3MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtMTM3LDggKzEzNyw5IEBAIFJlZjxGb250PiBGb250Q2Fj
aGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpCiAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgdGltZXNT
dHIsIGZhbHNlKTsKIH0KIAotdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKQorVmVjdG9yPEZvbnRUcmFpdHNNYXNr
PiBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYpCiB7Cisg
ICAgcmV0dXJuIFZlY3RvcjxGb250VHJhaXRzTWFzaz4oKTsKIH0KIAogc3RhdGljIFN0cmluZyBn
ZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fj
aGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNo
ZVdpbi5jcHAKaW5kZXggYWZhNDg0MWVkZjk2OWRmMmU0ZGIxNTQ1NTBjYTFmZDhjMjMxNjE1OC4u
MDAyZmUxOWFhYThkZDhmZmZkMTYyN2ZlYzY0MTU3OWU4OTc5NDMxZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAg
LTU0Miw3ICs1NDIsNyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5RW51bVBy
b2MoQ09OU1QgTE9HRk9OVCogbG9nRm9udCwgQ09OU1QgVEVYVE1FVAogICAgIHByb2NEYXRhLT5t
X3RyYWl0c01hc2tzLmFkZCh0cmFpdHNNYXNrKTsKICAgICByZXR1cm4gMTsKIH0KLXZvaWQgRm9u
dENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUs
IFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQorVmVjdG9yPEZvbnRUcmFpdHNNYXNrPiBG
b250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFt
ZSkKIHsKICAgICBIV25kREMgaGRjKDApOwogCkBAIC01NTUsNyArNTU1LDkgQEAgdm9pZCBGb250
Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwg
VmVjdG9yPHVuc2lnbmUKIAogICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEgcHJvY0RhdGEoZmFt
aWx5TmFtZSk7CiAgICAgRW51bUZvbnRGYW1pbGllc0V4KGhkYywgJmxvZ0ZvbnQsIHRyYWl0c0lu
RmFtaWx5RW51bVByb2MsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBBUkFNPigmcHJvY0RhdGEpLCAwKTsK
LSAgICBjb3B5VG9WZWN0b3IocHJvY0RhdGEubV90cmFpdHNNYXNrcywgdHJhaXRzTWFza3MpOwor
ICAgIFZlY3RvcjxGb250VHJhaXRzTWFzaz4gcmVzdWx0OworICAgIGNvcHlUb1ZlY3Rvcihwcm9j
RGF0YS5tX3RyYWl0c01hc2tzLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0
ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0
b21pY1N0cmluZyYgZmFtaWx5KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259719</attachid>
            <date>2015-08-22 02:31:57 -0700</date>
            <delta_ts>2015-08-23 09:08:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148355-20150822023151.patch</filename>
            <type>text/plain</type>
            <size>31315</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4ODE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDYyY2EyMzJlMzYwYTI0
ZDU3NDg5YjY5OTc0MjViOTBiZDIxYjE4OS4uYTEwMGZmODRiMmE4Mzg3YTIwMjYxMjEwOWJkZWFl
Mzc2YTkyZjhiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE1LTA4LTIyICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQGZvbnQtZmFj
ZSByZWxhdGVkIGNsZWFudXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0ODM1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVwIG11Y2ggb2Ygb3VyIGNvZGUgcmVsYXRlZCB0
byB3ZWIgZm9udHMuIEluIGdlbmVyYWwsIGl0CisgICAgICAgIG1pZ3JhdGVzIHRvIHVzaW5nIEMr
KyBmb3ItZWFjaCBzdHlsZSBsb29wcywgdXNlcyBSZWYgaW5zdGVhZCBvZiBSZWZQdHIgd2hlbgor
ICAgICAgICB0aGluZ3MgY2FuJ3QgYmUgbnVsbHB0ciwgbWlncmF0ZXMgdG8gQysrIFJ2YWx1ZS1y
ZWZlcmVuY2VzIGluc3RlYWQgb2YKKyAgICAgICAgUGFzc1JlZlB0ciwgYW5kIHJlZmFjdG9ycyBD
U1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSgpIHRvIHVzZSBoZWxwZXIKKyAgICAgICAg
ZnVuY3Rpb25zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJl
aGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9udExvYWRlZCk6IFVzZSBhIEMrKyBmb3ItZWFjaCBs
b29wLgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Rm9udEZhY2U6OmNyZWF0ZSk6IFVzZSBDKysgUnZhbHVlLXJlZmVyZW5jZXMgaW5zdGVhZCBvZgor
ICAgICAgICBQYXNzUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OkNTU0Zv
bnRGYWNlKTogRGl0dG8uCisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb21wdXRlVHJhaXRzTWFzayk6IE1pZ3JhdGVkIGEgY2h1bmsgb2YKKyAg
ICAgICAgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoKSBpbnRvIHRoaXMgaGVscGVy
IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9udEZhY2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6IENhbGwgdGhlIG5l
d2x5LWNyZWF0ZWQgaGVscGVyCisgICAgICAgIGZ1bmN0aW9ucy4gSW4gYWRkaXRpb24sIG1pZ3Jh
dGUgdG8gUmVmcyBpbnN0ZWFkIG9mIFJlZlB0cnMuCisgICAgICAgIChXZWJDb3JlOjpjb21wYXJl
Rm9udEZhY2VzKTogTWlncmF0ZSB0byByZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnRGYWNlKTogTWlncmF0ZSB0
byBSZWZzIGluc3RlYWQgb2YKKyAgICAgICAgUmVmUHRycy4gQWxzbyB1c2UgQysrIGZvci1lYWNo
IGxvb3BzLgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuaDoKKyAgICAgICAgKiBjc3Mv
Q1NTU2VnbWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVk
Rm9udEZhY2U6On5DU1NTZWdtZW50ZWRGb250RmFjZSk6IFVzZSBDKysgZm9yLWVhY2gKKyAgICAg
ICAgbG9vcHMuCisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6aXNWYWxp
ZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OmFwcGVu
ZEZvbnRGYWNlKTogTWlncmF0ZSB0byBSdmFsdWUtCisgICAgICAgIHJlZmVyZW5jZXMgaW5zdGVh
ZCBvZiBQYXNzUmVmUHRyLgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBSZXR1cm4gdGhlIHJlc3VsdCBpbnN0
ZWFkIG9mIGJlaW5nCisgICAgICAgIHBhc3NlZCBhbiBvdXQgcGFyYW1ldGVyLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnRyYWl0c0luRmFtaWx5RW51bVByb2MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBEaXR0by4KKwogMjAxNS0wOC0yMSAgQ29t
bWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjE4ODc5MiBhbmQgcjE4ODgwMy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2UuY3BwCmluZGV4IGY2MmE1ZmJkOTdlZTY3MDIwNzdjYzhhYzYwZmQzN2ZhZGE4YTQ5MWUuLmEx
YWI5M2UzMWRjYjUzZDdmYjgzMjRiZDA4NDQ4MDFlNDY1M2RhYzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlLmNwcApAQCAtOTgsOSArOTgsOCBAQCB2b2lkIENTU0ZvbnRGYWNlOjpmb250TG9h
ZGVkKENTU0ZvbnRGYWNlU291cmNlKiBzb3VyY2UpCiAgICAgfQogI2VuZGlmCiAKLSAgICBIYXNo
U2V0PENTU1NlZ21lbnRlZEZvbnRGYWNlKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2VnbWVudGVkRm9u
dEZhY2VzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxDU1NTZWdtZW50ZWRGb250RmFjZSo+Ojpp
dGVyYXRvciBpdCA9IG1fc2VnbWVudGVkRm9udEZhY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgKCppdCktPmZvbnRMb2FkZWQodGhpcyk7CisgICAgZm9yIChDU1NTZWdtZW50
ZWRGb250RmFjZSogZmFjZSA6IG1fc2VnbWVudGVkRm9udEZhY2VzKQorICAgICAgICBmYWNlLT5m
b250TG9hZGVkKHRoaXMpOwogCiAjaWYgRU5BQkxFKEZPTlRfTE9BRF9FVkVOVFMpCiAgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuZm9udExvYWRFdmVudHNF
bmFibGVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCmluZGV4IGRiNjdiYzY2NDMzYjVmNTAw
OGVhZWRmNWQ5YjE1MGE5MDE2Y2JkMjUuLjllYjAyMWEzZjM5NmI4MTQ4MjZhZDg5MmJmMjRmYTkw
OTRkMWY4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCkBAIC00NCw3ICs0NCw3IEBAIGNs
YXNzIEZvbnQ7CiAKIGNsYXNzIENTU0ZvbnRGYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTRm9u
dEZhY2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGUoRm9u
dFRyYWl0c01hc2sgdHJhaXRzTWFzaywgUGFzc1JlZlB0cjxDU1NGb250RmFjZVJ1bGU+IHJ1bGUs
IGJvb2wgaXNMb2NhbEZhbGxiYWNrID0gZmFsc2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NT
Rm9udEZhY2UodHJhaXRzTWFzaywgcnVsZSwgaXNMb2NhbEZhbGxiYWNrKSk7IH0KKyAgICBzdGF0
aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGUoRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzaywgUmVm
UHRyPENTU0ZvbnRGYWNlUnVsZT4mJiBydWxlLCBib29sIGlzTG9jYWxGYWxsYmFjayA9IGZhbHNl
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZvbnRGYWNlKHRyYWl0c01hc2ssIFdURjo6bW92
ZShydWxlKSwgaXNMb2NhbEZhbGxiYWNrKSk7IH0KIAogICAgIEZvbnRUcmFpdHNNYXNrIHRyYWl0
c01hc2soKSBjb25zdCB7IHJldHVybiBtX3RyYWl0c01hc2s7IH0KIApAQCAtOTIsNyArOTIsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBDU1NGb250RmFjZShGb250VHJhaXRz
TWFzayB0cmFpdHNNYXNrLCBQYXNzUmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4gcnVsZSwgYm9vbCBp
c0xvY2FsRmFsbGJhY2spCisgICAgQ1NTRm9udEZhY2UoRm9udFRyYWl0c01hc2sgdHJhaXRzTWFz
aywgUmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4mJiBydWxlLCBib29sIGlzTG9jYWxGYWxsYmFjaykK
ICAgICAgICAgOiBtX3RyYWl0c01hc2sodHJhaXRzTWFzaykKICAgICAgICAgLCBtX2FjdGl2ZVNv
dXJjZSgwKQogICAgICAgICAsIG1faXNMb2NhbEZhbGxiYWNrKGlzTG9jYWxGYWxsYmFjaykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggMjY5ZGRmY2RhN2VlZThjZjU5
YzAzYmFhMTFjYjE3MWQ1ZDQ4ZGI4MS4uMGRmNDQwZDBjYjZiZmNkM2EwOGJjNDZkNDJiNmVmNTI0
MjM0NGJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTg0LDMx
ICs4NCwxMyBAQCBib29sIENTU0ZvbnRTZWxlY3Rvcjo6aXNFbXB0eSgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fZm9udHMuaXNFbXB0eSgpOwogfQogCi12b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9u
dEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUsIGJvb2wgaXNJ
bml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSkKK3N0YXRpYyBPcHRpb25hbDxG
b250VHJhaXRzTWFzaz4gY29tcHV0ZVRyYWl0c01hc2soY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBz
dHlsZSkKIHsKLSAgICAvLyBPYnRhaW4gdGhlIGZvbnQtZmFtaWx5IHByb3BlcnR5IGFuZCB0aGUg
c3JjIHByb3BlcnR5LiAgQm90aCBtdXN0IGJlIGRlZmluZWQuCi0gICAgY29uc3QgU3R5bGVQcm9w
ZXJ0aWVzJiBzdHlsZSA9IGZvbnRGYWNlUnVsZS0+cHJvcGVydGllcygpOwotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gZm9udEZhbWlseSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlGb250RmFtaWx5KTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHNyYyA9IHN0eWxlLmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlTcmMpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29k
ZVJhbmdlID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVSYW5n
ZSk7Ci0gICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KGZvbnRGYW1pbHkuZ2V0KCkpIHx8ICFpczxD
U1NWYWx1ZUxpc3Q+KHNyYy5nZXQoKSkgfHwgKHVuaWNvZGVSYW5nZSAmJiAhaXM8Q1NTVmFsdWVM
aXN0PigqdW5pY29kZVJhbmdlKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1ZhbHVlTGlz
dCYgZmFtaWx5TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZvbnRGYW1pbHkpOwotICAg
IGlmICghZmFtaWx5TGlzdC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTVmFs
dWVMaXN0JiBzcmNMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pigqc3JjKTsKLSAgICBpZiAo
IXNyY0xpc3QubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1ZhbHVlTGlzdCog
cmFuZ2VMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih1bmljb2RlUmFuZ2UuZ2V0KCkpOwot
CiAgICAgdW5zaWduZWQgdHJhaXRzTWFzayA9IDA7CiAKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVl
PiBmb250U3R5bGUgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0
eWxlKSkgewogICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFN0eWxlKSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxGb250VHJh
aXRzTWFzaz4oKTsKIAogICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqZm9udFN0eWxlKS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1h
bDoKQEAgLTEyNiw3ICsxMDgsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VS
dWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUsIGJvbwogCiAgICAgaWYg
KFJlZlB0cjxDU1NWYWx1ZT4gZm9udFdlaWdodCA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlGb250V2VpZ2h0KSkgewogICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqZm9udFdlaWdodCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1
cm4gT3B0aW9uYWw8Rm9udFRyYWl0c01hc2s+KCk7CiAKICAgICAgICAgc3dpdGNoIChkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkgewogICAgICAg
ICBjYXNlIENTU1ZhbHVlQm9sZDoKQEAgLTE3MSwxMiArMTUzLDEyIEBAIHZvaWQgQ1NTRm9udFNl
bGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNl
UnVsZSwgYm9vCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoZm9udFZhcmlhbnQucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgICAgICBmb250VmFyaWFudCA9IGxpc3QucmVsZWFzZU5vbk51bGwo
KTsKICAgICAgICAgfSBlbHNlIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqZm9udFZhcmlhbnQpKQot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPEZvbnRUcmFp
dHNNYXNrPigpOwogCiAgICAgICAgIENTU1ZhbHVlTGlzdCYgdmFyaWFudExpc3QgPSBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCpmb250VmFyaWFudCk7CiAgICAgICAgIHVuc2lnbmVkIG51bVZhcmlh
bnRzID0gdmFyaWFudExpc3QubGVuZ3RoKCk7CiAgICAgICAgIGlmICghbnVtVmFyaWFudHMpCi0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Rm9udFRyYWl0
c01hc2s+KCk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhcmlhbnRz
OyArK2kpIHsKICAgICAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhcmlhbnRMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpLT5nZXRWYWx1ZUlEKCkpIHsK
QEAgLTE5Myw4ICsxNzUsMTggQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVs
ZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlLCBib28KICAgICB9IGVsc2UK
ICAgICAgICAgdHJhaXRzTWFzayB8PSBGb250VmFyaWFudE1hc2s7CiAKLSAgICAvLyBFYWNoIGl0
ZW0gaW4gdGhlIHNyYyBwcm9wZXJ0eSdzIGxpc3QgaXMgYSBzaW5nbGUgQ1NTRm9udEZhY2VTb3Vy
Y2UuIFB1dCB0aGVtIGFsbCBpbnRvIGEgQ1NTRm9udEZhY2UuCi0gICAgUmVmUHRyPENTU0ZvbnRG
YWNlPiBmb250RmFjZTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KHRy
YWl0c01hc2spOworfQorCitzdGF0aWMgUmVmPENTU0ZvbnRGYWNlPiBjcmVhdGVGb250RmFjZShD
U1NWYWx1ZUxpc3QmIHNyY0xpc3QsIEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2ssIERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVl
KQoreworICAgIFJlZlB0cjxDU1NGb250RmFjZVJ1bGU+IHJ1bGU7CisjaWYgRU5BQkxFKEZPTlRf
TE9BRF9FVkVOVFMpCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTIxMTYgLSBUaGlzIENTU0ZvbnRGYWNlUnVsZSBoYXMgbm8gcGFyZW50Lgor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmZvbnRMb2Fk
RXZlbnRzRW5hYmxlZCgpKQorICAgICAgICBydWxlID0gc3RhdGljX3BvaW50ZXJfY2FzdDxDU1NG
b250RmFjZVJ1bGU+KGZvbnRGYWNlUnVsZS0+Y3JlYXRlQ1NTT01XcmFwcGVyKCkpOworI2VuZGlm
CisgICAgUmVmPENTU0ZvbnRGYWNlPiBmb250RmFjZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUodHJh
aXRzTWFzaywgV1RGOjptb3ZlKHJ1bGUpKTsKIAogICAgIGludCBzcmNMZW5ndGggPSBzcmNMaXN0
Lmxlbmd0aCgpOwogCkBAIC0yMDksMTAgKzIwMSwxMCBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6
YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUsIGJv
bwogICAgICAgICBmb3VuZFNWR0ZvbnQgPSBpdGVtLmlzU1ZHRm9udEZhY2VTcmMoKSB8fCBpdGVt
LnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwogI2VuZGlmCiAgICAgICAgIGlmICghaXRlbS5pc0xvY2Fs
KCkpIHsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZG9jdW1lbnQgPyBtX2Rv
Y3VtZW50LT5mcmFtZSgpID8gJm1fZG9jdW1lbnQtPmZyYW1lKCktPnNldHRpbmdzKCkgOiAwIDog
MDsKKyAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50ID8gZG9jdW1lbnQt
PmZyYW1lKCkgPyAmZG9jdW1lbnQtPmZyYW1lKCktPnNldHRpbmdzKCkgOiAwIDogMDsKICAgICAg
ICAgICAgIGJvb2wgYWxsb3dEb3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8fCAoc2V0dGluZ3Mg
JiYgc2V0dGluZ3MtPmRvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgpKTsKLSAgICAgICAg
ICAgIGlmIChhbGxvd0Rvd25sb2FkaW5nICYmIGl0ZW0uaXNTdXBwb3J0ZWRGb3JtYXQoKSAmJiBt
X2RvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgQ2FjaGVkRm9udCogY2FjaGVkRm9udCA9IGl0
ZW0uY2FjaGVkRm9udChtX2RvY3VtZW50LCBmb3VuZFNWR0ZvbnQsIGlzSW5pdGlhdGluZ0VsZW1l
bnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOworICAgICAgICAgICAgaWYgKGFsbG93RG93bmxvYWRp
bmcgJiYgaXRlbS5pc1N1cHBvcnRlZEZvcm1hdCgpICYmIGRvY3VtZW50KSB7CisgICAgICAgICAg
ICAgICAgQ2FjaGVkRm9udCogY2FjaGVkRm9udCA9IGl0ZW0uY2FjaGVkRm9udChkb2N1bWVudCwg
Zm91bmRTVkdGb250LCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsK
ICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkRm9udCkgewogICAgICAgICAgICAgICAgICAgICBz
b3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihpdGVtLnJlc291cmNl
KCksIGNhY2hlZEZvbnQpOwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCkBAIC0yMjUsMTYgKzIxNyw2
IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxl
Rm9udEZhY2UqIGZvbnRGYWNlUnVsZSwgYm9vCiAgICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1h
a2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihpdGVtLnJlc291cmNlKCkpOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCFmb250RmFjZSkgewotICAgICAgICAgICAgUmVmUHRyPENTU0ZvbnRG
YWNlUnVsZT4gcnVsZTsKLSNpZiBFTkFCTEUoRk9OVF9MT0FEX0VWRU5UUykKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyMTE2
IC0gVGhpcyBDU1NGb250RmFjZVJ1bGUgaGFzIG5vIHBhcmVudC4KLSAgICAgICAgICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmZvbnRMb2FkRXZlbnRzRW5h
YmxlZCgpKQotICAgICAgICAgICAgICAgIHJ1bGUgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PENTU0Zv
bnRGYWNlUnVsZT4oZm9udEZhY2VSdWxlLT5jcmVhdGVDU1NPTVdyYXBwZXIoKSk7Ci0jZW5kaWYK
LSAgICAgICAgICAgIGZvbnRGYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxG
b250VHJhaXRzTWFzaz4odHJhaXRzTWFzayksIHJ1bGUpOwotICAgICAgICB9Ci0KICAgICAgICAg
aWYgKHNvdXJjZSkgewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgICAgICAgICBzb3VyY2Ut
PnNldFNWR0ZvbnRGYWNlRWxlbWVudChpdGVtLnN2Z0ZvbnRGYWNlRWxlbWVudCgpKTsKQEAgLTI0
Myw5ICsyMjUsNjMgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25z
dCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlLCBib28KICAgICAgICAgfQogICAgIH0K
IAotICAgIEFTU0VSVChmb250RmFjZSk7CisgICAgcmV0dXJuIGZvbnRGYWNlOworfQorCitzdGF0
aWMgU3RyaW5nIGZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVl
JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNGb250RmFtaWx5KCkpCisgICAgICAgIHJldHVy
biB2YWx1ZS5mb250RmFtaWx5KCkuZmFtaWx5TmFtZTsKKyAgICBpZiAoIXZhbHVlLmlzVmFsdWVJ
RCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBXZSBuZWVkIHRvIHVzZSB0
aGUgcmF3IHRleHQgZm9yIGFsbCB0aGUgZ2VuZXJpYyBmYW1pbHkgdHlwZXMsIHNpbmNlIEBmb250
LWZhY2UgaXMgYSB3YXkgb2YgYWN0dWFsbHkKKyAgICAvLyBkZWZpbmluZyB3aGF0IGZvbnQgdG8g
dXNlIGZvciB0aG9zZSB0eXBlcy4KKyAgICBzd2l0Y2ggKHZhbHVlLmdldFZhbHVlSUQoKSkgewor
ICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAgICAgcmV0dXJuIHNlcmlmRmFtaWx5OworICAg
IGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6CisgICAgICAgIHJldHVybiBzYW5zU2VyaWZGYW1pbHk7
CisgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6CisgICAgICAgIHJldHVybiBjdXJzaXZlRmFtaWx5
OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAgICAgICByZXR1cm4gZmFudGFzeUZhbWls
eTsKKyAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgorICAgICAgICByZXR1cm4gbW9ub3NwYWNl
RmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dyYXBoOgorICAgICAgICByZXR1
cm4gcGljdG9ncmFwaEZhbWlseTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgfQorfQorCit2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNv
bnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUsIGJvb2wgaXNJbml0aWF0aW5nRWxl
bWVudEluVXNlckFnZW50U2hhZG93VHJlZSkKK3sKKyAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMm
IHN0eWxlID0gZm9udEZhY2VSdWxlLT5wcm9wZXJ0aWVzKCk7CisgICAgUmVmUHRyPENTU1ZhbHVl
PiBmb250RmFtaWx5ID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRG
YW1pbHkpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3JjID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eVNyYyk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlUmFuZ2Ug
PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VW5pY29kZVJhbmdlKTsKKyAg
ICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oZm9udEZhbWlseS5nZXQoKSkgfHwgIWlzPENTU1ZhbHVl
TGlzdD4oc3JjLmdldCgpKSB8fCAodW5pY29kZVJhbmdlICYmICFpczxDU1NWYWx1ZUxpc3Q+KCp1
bmljb2RlUmFuZ2UpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTVmFsdWVMaXN0JiBmYW1p
bHlMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqZm9udEZhbWlseSk7CisgICAgaWYgKCFm
YW1pbHlMaXN0Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NWYWx1ZUxpc3Qm
IHNyY0xpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpzcmMpOworICAgIGlmICghc3JjTGlz
dC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTVmFsdWVMaXN0KiByYW5nZUxp
c3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHVuaWNvZGVSYW5nZS5nZXQoKSk7CisKKyAgICBG
b250VHJhaXRzTWFzayB0cmFpdHNNYXNrOworICAgIGlmIChPcHRpb25hbDxGb250VHJhaXRzTWFz
az4gY29tcHV0ZWRUcmFpdHNNYXNrID0gY29tcHV0ZVRyYWl0c01hc2soc3R5bGUpKQorICAgICAg
ICB0cmFpdHNNYXNrID0gY29tcHV0ZWRUcmFpdHNNYXNrLnZhbHVlKCk7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoZm9udEZhY2UgJiYgIWZvbnRGYWNlLT5pc1ZhbGlkKCkp
CisgICAgUmVmPENTU0ZvbnRGYWNlPiBmb250RmFjZSA9IGNyZWF0ZUZvbnRGYWNlKHNyY0xpc3Qs
IHRyYWl0c01hc2ssIG1fZG9jdW1lbnQsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNo
YWRvd1RyZWUpOworICAgIGlmICghZm9udEZhY2UtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKHJhbmdlTGlzdCkgewpAQCAtMjU2LDY1ICsyOTIsMzEgQEAgdm9pZCBDU1NG
b250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9u
dEZhY2VSdWxlLCBib28KICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIEhhc2ggdW5kZXIgZXZl
cnkgc2luZ2xlIGZhbWlseSBuYW1lLgogICAgIGZvciAoYXV0byYgaXRlbSA6IGZhbWlseUxpc3Qp
IHsKLSAgICAgICAgYXV0byYgdmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRl
bS5nZXQoKSk7Ci0gICAgICAgIFN0cmluZyBmYW1pbHlOYW1lOwotICAgICAgICBpZiAodmFsdWUu
aXNGb250RmFtaWx5KCkpIHsKLSAgICAgICAgICAgIGZhbWlseU5hbWUgPSB2YWx1ZS5mb250RmFt
aWx5KCkuZmFtaWx5TmFtZTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc1ZhbHVlSUQoKSkg
ewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB1c2UgdGhlIHJhdyB0ZXh0IGZvciBhbGwgdGhl
IGdlbmVyaWMgZmFtaWx5IHR5cGVzLCBzaW5jZSBAZm9udC1mYWNlIGlzIGEgd2F5IG9mIGFjdHVh
bGx5Ci0gICAgICAgICAgICAvLyBkZWZpbmluZyB3aGF0IGZvbnQgdG8gdXNlIGZvciB0aG9zZSB0
eXBlcy4KLSAgICAgICAgICAgIHN3aXRjaCAodmFsdWUuZ2V0VmFsdWVJRCgpKSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZVNlcmlmOgotICAgICAgICAgICAgICAgICAgICBmYW1pbHlO
YW1lID0gc2VyaWZGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6Ci0gICAgICAgICAgICAgICAgICAgIGZhbWls
eU5hbWUgPSBzYW5zU2VyaWZGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgotICAgICAgICAgICAgICAgICAgICBm
YW1pbHlOYW1lID0gY3Vyc2l2ZUZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhbnRhc3k6Ci0gICAgICAgICAgICAgICAgICAg
IGZhbWlseU5hbWUgPSBmYW50YXN5RmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgotICAgICAgICAgICAgICAg
ICAgICBmYW1pbHlOYW1lID0gbW9ub3NwYWNlRmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKLSAg
ICAgICAgICAgICAgICAgICAgZmFtaWx5TmFtZSA9IHBpY3RvZ3JhcGhGYW1pbHk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KKyAgICAgICAgU3Ry
aW5nIGZhbWlseU5hbWUgPSBmYW1pbHlOYW1lRnJvbVByaW1pdGl2ZShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkpOwogICAgICAgICBpZiAoZmFtaWx5TmFtZS5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVj
dG9yPFJlZlB0cjxDU1NGb250RmFjZT4+PiYgZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMu
YWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byYg
ZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCFmYW1pbHlGb250RmFjZXMpIHsKLSAgICAgICAg
ICAgIGZhbWlseUZvbnRGYWNlcyA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPFJlZlB0cjxDU1NG
b250RmFjZT4+PigpOworICAgICAgICAgICAgZmFtaWx5Rm9udEZhY2VzID0gc3RkOjptYWtlX3Vu
aXF1ZTxWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4+KCk7CiAKICAgICAgICAgICAgIEFTU0VSVCgh
bV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmNvbnRhaW5zKGZhbWlseU5hbWUpKTsKIAotICAg
ICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBsb2NhbGx5SW5zdGFsbGVkRm9udHNUcmFpdHNNYXNr
czsKLSAgICAgICAgICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2V0VHJhaXRzSW5GYW1pbHko
ZmFtaWx5TmFtZSwgbG9jYWxseUluc3RhbGxlZEZvbnRzVHJhaXRzTWFza3MpOwotICAgICAgICAg
ICAgaWYgKHVuc2lnbmVkIG51bUxvY2FsbHlJbnN0YWxsZWRGYWNlcyA9IGxvY2FsbHlJbnN0YWxs
ZWRGb250c1RyYWl0c01hc2tzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZmFtaWx5
TG9jYWxseUluc3RhbGxlZEZhY2VzID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8UmVmUHRyPENT
U0ZvbnRGYWNlPj4+KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtTG9jYWxseUluc3RhbGxlZEZhY2VzOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPENTU0ZvbnRGYWNlPiBsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UgPSBDU1NGb250RmFj
ZTo6Y3JlYXRlKHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPihsb2NhbGx5SW5zdGFsbGVkRm9u
dHNUcmFpdHNNYXNrc1tpXSksIDAsIHRydWUpOworICAgICAgICAgICAgVmVjdG9yPEZvbnRUcmFp
dHNNYXNrPiBsb2NhbGx5SW5zdGFsbGVkRm9udHNUcmFpdHNNYXNrcyA9IEZvbnRDYWNoZTo6c2lu
Z2xldG9uKCkuZ2V0VHJhaXRzSW5GYW1pbHkoZmFtaWx5TmFtZSk7CisgICAgICAgICAgICBpZiAo
IWxvY2FsbHlJbnN0YWxsZWRGb250c1RyYWl0c01hc2tzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gZmFtaWx5TG9jYWxseUluc3RhbGxlZEZhY2VzID0gc3RkOjptYWtlX3VuaXF1
ZTxWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4+KCk7CisgICAgICAgICAgICAgICAgZm9yIChGb250
VHJhaXRzTWFzayBtYXNrIDogbG9jYWxseUluc3RhbGxlZEZvbnRzVHJhaXRzTWFza3MpIHsKKyAg
ICAgICAgICAgICAgICAgICAgUmVmPENTU0ZvbnRGYWNlPiBsb2NhbGx5SW5zdGFsbGVkRm9udEZh
Y2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKG1hc2ssIG51bGxwdHIsIHRydWUpOwogICAgICAgICAg
ICAgICAgICAgICBsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UtPmFkZFNvdXJjZShzdGQ6Om1ha2Vf
dW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihmYW1pbHlOYW1lKSk7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UtPmlzVmFsaWQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZhbWlseUxvY2FsbHlJbnN0YWxsZWRGYWNlcy0+YXBwZW5kKGxvY2FsbHlJ
bnN0YWxsZWRGb250RmFjZSk7CisgICAgICAgICAgICAgICAgICAgIGZhbWlseUxvY2FsbHlJbnN0
YWxsZWRGYWNlcy0+YXBwZW5kKFdURjo6bW92ZShsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UpKTsK
ICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICBtX2xvY2FsbHlJbnN0YWxsZWRG
b250RmFjZXMuc2V0KGZhbWlseU5hbWUsIFdURjo6bW92ZShmYW1pbHlMb2NhbGx5SW5zdGFsbGVk
RmFjZXMpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZhbWlseUZvbnRG
YWNlcy0+YXBwZW5kKGZvbnRGYWNlKTsKKyAgICAgICAgZmFtaWx5Rm9udEZhY2VzLT5hcHBlbmQo
Zm9udEZhY2UuY29weVJlZigpKTsKICAgICAgICAgCiAgICAgICAgICsrbV92ZXJzaW9uOwogICAg
IH0KQEAgLTM3OCwxMCArMzgwLDEwIEBAIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHJlc29s
dmVHZW5lcmljRmFtaWx5KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRm9udERlCiAKIHN0YXRp
YyBGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb247CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBjb21wYXJlRm9udEZhY2VzKENTU0ZvbnRGYWNlKiBmaXJzdCwgQ1NTRm9u
dEZhY2UqIHNlY29uZCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlRm9udEZhY2VzKGNvbnN0
IENTU0ZvbnRGYWNlJiBmaXJzdCwgY29uc3QgQ1NTRm9udEZhY2UmIHNlY29uZCkKIHsKLSAgICBG
b250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC0+dHJhaXRzTWFzaygpOwotICAg
IEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01hc2sgPSBzZWNvbmQtPnRyYWl0c01hc2soKTsK
KyAgICBGb250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC50cmFpdHNNYXNrKCk7
CisgICAgRm9udFRyYWl0c01hc2sgc2Vjb25kVHJhaXRzTWFzayA9IHNlY29uZC50cmFpdHNNYXNr
KCk7CiAKICAgICBib29sIGZpcnN0SGFzRGVzaXJlZFZhcmlhbnQgPSBmaXJzdFRyYWl0c01hc2sg
JiBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudE1hc2s7CiAgICAg
Ym9vbCBzZWNvbmRIYXNEZXNpcmVkVmFyaWFudCA9IHNlY29uZFRyYWl0c01hc2sgJiBkZXNpcmVk
VHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudE1hc2s7CkBAIC0zOTAsNyArMzky
LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVGb250RmFjZXMoQ1NTRm9udEZhY2UqIGZp
cnN0LCBDU1NGb250RmFjZSogc2Vjb25kKQogICAgICAgICByZXR1cm4gZmlyc3RIYXNEZXNpcmVk
VmFyaWFudDsKIAogICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgZm9udC12YXJpYW50IGNzcyBwcm9w
ZXJ0eSBmb3IgQ1NTMi4xIGNvbXBhdGliaWxpdHkuCi0gICAgaWYgKChkZXNpcmVkVHJhaXRzTWFz
a0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spICYmICFmaXJzdC0+aXNM
b2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC0+aXNMb2NhbEZhbGxiYWNrKCkpIHsKKyAgICBpZiAo
KGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRWYXJpYW50U21hbGxDYXBzTWFz
aykgJiYgIWZpcnN0LmlzTG9jYWxGYWxsYmFjaygpICYmICFzZWNvbmQuaXNMb2NhbEZhbGxiYWNr
KCkpIHsKICAgICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0ZWQgdGhhdCBp
dCBjYW4gb25seSBzdXBwb3J0IHNtYWxsLWNhcHMgdG8gYSBmb250IHRoYXQgY2xhaW1zIHRvIHN1
cHBvcnQKICAgICAgICAgLy8gYWxsIHZhcmlhbnRzLiAgVGhlIHNwZWNpYWxpemVkIGZvbnQgaXMg
bW9yZSBsaWtlbHkgdG8gYmUgdHJ1ZSBzbWFsbC1jYXBzIGFuZCBub3QgcmVxdWlyZSBzeW50aGVz
aXMuCiAgICAgICAgIGJvb2wgZmlyc3RSZXF1aXJlc1NtYWxsQ2FwcyA9IChmaXJzdFRyYWl0c01h
c2sgJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spICYmICEoZmlyc3RUcmFpdHNNYXNrICYgRm9u
dFZhcmlhbnROb3JtYWxNYXNrKTsKQEAgLTQwNSw3ICs0MDcsNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgY29tcGFyZUZvbnRGYWNlcyhDU1NGb250RmFjZSogZmlyc3QsIENTU0ZvbnRGYWNlKiBzZWNv
bmQpCiAgICAgaWYgKGZpcnN0SGFzRGVzaXJlZFN0eWxlICE9IHNlY29uZEhhc0Rlc2lyZWRTdHls
ZSkKICAgICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxlOwogCi0gICAgaWYgKChkZXNp
cmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAhZmly
c3QtPmlzTG9jYWxGYWxsYmFjaygpICYmICFzZWNvbmQtPmlzTG9jYWxGYWxsYmFjaygpKSB7Cisg
ICAgaWYgKChkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNN
YXNrKSAmJiAhZmlyc3QuaXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5pc0xvY2FsRmFsbGJh
Y2soKSkgewogICAgICAgICAvLyBQcmVmZXIgYSBmb250IHRoYXQgaGFzIGluZGljYXRlZCB0aGF0
IGl0IGNhbiBvbmx5IHN1cHBvcnQgaXRhbGljcyB0byBhIGZvbnQgdGhhdCBjbGFpbXMgdG8gc3Vw
cG9ydAogICAgICAgICAvLyBhbGwgc3R5bGVzLiAgVGhlIHNwZWNpYWxpemVkIGZvbnQgaXMgbW9y
ZSBsaWtlbHkgdG8gYmUgdGhlIG9uZSB0aGUgYXV0aG9yIHdhbnRzIHVzZWQuCiAgICAgICAgIGJv
b2wgZmlyc3RSZXF1aXJlc0l0YWxpY3MgPSAoZmlyc3RUcmFpdHNNYXNrICYgRm9udFN0eWxlSXRh
bGljTWFzaykgJiYgIShmaXJzdFRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKTsKQEAg
LTQ3Niw5ICs0NzgsOSBAQCBGb250UmFuZ2VzIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0Zv
ckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcgogCiBDU1NTZWdtZW50ZWRG
b250RmFjZSogQ1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCiB7Ci0gICAg
VmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4+KiBmYW1pbHlGb250RmFjZXMgPSBtX2ZvbnRGYWNl
cy5nZXQoZmFtaWx5KTsKKyAgICBWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4qIGZhbWlseUZvbnRG
YWNlcyA9IG1fZm9udEZhY2VzLmdldChmYW1pbHkpOwogICAgIGlmICghZmFtaWx5Rm9udEZhY2Vz
IHx8IGZhbWlseUZvbnRGYWNlcy0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDx1bnNpZ25l
ZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4+JiBzZWdtZW50ZWRGb250RmFjZUNhY2hl
ID0gbV9mb250cy5hZGQoZmFtaWx5LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KCFzZWdtZW50ZWRGb250RmFjZUNhY2hlKQpAQCAtNDkwLDExICs0OTIsMTAgQEAgQ1NTU2VnbWVu
dGVkRm9udEZhY2UqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udEZhY2UoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGUKICAgICBpZiAoIWZhY2UpIHsKICAgICAgICAgZmFjZSA9IENTU1NlZ21l
bnRlZEZvbnRGYWNlOjpjcmVhdGUodGhpcyk7CiAKLSAgICAgICAgLy8gQ29sbGVjdCBhbGwgbWF0
Y2hpbmcgZmFjZXMgYW5kIHNvcnQgdGhlbSBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgotICAgICAg
ICBWZWN0b3I8Q1NTRm9udEZhY2UqLCAzMj4gY2FuZGlkYXRlRm9udEZhY2VzOworICAgICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4sIDMyPiBjYW5kaWRhdGVG
b250RmFjZXM7CiAgICAgICAgIGZvciAoaW50IGkgPSBmYW1pbHlGb250RmFjZXMtPnNpemUoKSAt
IDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBDU1NGb250RmFjZSogY2FuZGlkYXRlID0g
ZmFtaWx5Rm9udEZhY2VzLT5hdChpKS5nZXQoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNhbmRp
ZGF0ZVRyYWl0c01hc2sgPSBjYW5kaWRhdGUtPnRyYWl0c01hc2soKTsKKyAgICAgICAgICAgIENT
U0ZvbnRGYWNlJiBjYW5kaWRhdGUgPSBmYW1pbHlGb250RmFjZXMtPmF0KGkpOworICAgICAgICAg
ICAgdW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRpZGF0ZS50cmFpdHNNYXNrKCk7
CiAgICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSAmJiAh
KGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICgodHJhaXRzTWFzayAmIEZvbnRWYXJpYW50
Tm9ybWFsTWFzaykgJiYgIShjYW5kaWRhdGVUcmFpdHNNYXNrICYgRm9udFZhcmlhbnROb3JtYWxN
YXNrKSkKQEAgLTUwMiwxNiArNTAzLDE0IEBAIENTU1NlZ21lbnRlZEZvbnRGYWNlKiBDU1NGb250
U2VsZWN0b3I6OmdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlCiAjaWYg
RU5BQkxFKFNWR19GT05UUykKICAgICAgICAgICAgIC8vIEZvciBTVkcgRm9udHMgdGhhdCBzcGVj
aWZ5IHRoYXQgdGhleSBvbmx5IHN1cHBvcnQgdGhlICJub3JtYWwiIHZhcmlhbnQsIHdlIHdpbGwg
YXNzdW1lIHRoZXkgYXJlIGluY2FwYWJsZQogICAgICAgICAgICAgLy8gb2Ygc21hbGwtY2FwcyBz
eW50aGVzaXMgYW5kIGp1c3QgaWdub3JlIHRoZSBmb250IGZhY2UgYXMgYSBjYW5kaWRhdGUuCi0g
ICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5oYXNTVkdGb250RmFjZVNvdXJjZSgpICYmICh0cmFp
dHNNYXNrICYgRm9udFZhcmlhbnRTbWFsbENhcHNNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01h
c2sgJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spKQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0
ZS5oYXNTVkdGb250RmFjZVNvdXJjZSgpICYmICh0cmFpdHNNYXNrICYgRm9udFZhcmlhbnRTbWFs
bENhcHNNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250VmFyaWFudFNtYWxsQ2Fw
c01hc2spKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAgICAgICAgICBj
YW5kaWRhdGVGb250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoVmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4+KiBmYW1pbHlMb2NhbGx5SW5zdGFsbGVk
Rm9udEZhY2VzID0gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmdldChmYW1pbHkpKSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBudW1Mb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzID0gZmFtaWx5
TG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy0+c2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bUxvY2FsbHlJbnN0YWxsZWRGb250RmFjZXM7ICsraSkgewotICAg
ICAgICAgICAgICAgIENTU0ZvbnRGYWNlKiBjYW5kaWRhdGUgPSBmYW1pbHlMb2NhbGx5SW5zdGFs
bGVkRm9udEZhY2VzLT5hdChpKS5nZXQoKTsKKyAgICAgICAgaWYgKFZlY3RvcjxSZWY8Q1NTRm9u
dEZhY2U+PiogZmFtaWx5TG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcyA9IG1fbG9jYWxseUluc3Rh
bGxlZEZvbnRGYWNlcy5nZXQoZmFtaWx5KSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBjYW5k
aWRhdGUgOiAqZmFtaWx5TG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcykgewogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRyYWl0c01hc2sgPSBjYW5kaWRhdGUtPnRyYWl0c01hc2so
KTsKICAgICAgICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNr
KSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CkBAIC01MjMsOSArNTIyLDggQEAgQ1NTU2VnbWVudGVk
Rm9udEZhY2UqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udEZhY2UoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGUKIAogICAgICAgICBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gPSB0
cmFpdHNNYXNrOwogICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KGNhbmRpZGF0ZUZvbnRGYWNlcy5i
ZWdpbigpLCBjYW5kaWRhdGVGb250RmFjZXMuZW5kKCksIGNvbXBhcmVGb250RmFjZXMpOwotICAg
ICAgICB1bnNpZ25lZCBudW1DYW5kaWRhdGVzID0gY2FuZGlkYXRlRm9udEZhY2VzLnNpemUoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNhbmRpZGF0ZXM7ICsraSkKLSAg
ICAgICAgICAgIGZhY2UtPmFwcGVuZEZvbnRGYWNlKGNhbmRpZGF0ZUZvbnRGYWNlc1tpXSk7Cisg
ICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlRm9udEZhY2UgOiBjYW5kaWRhdGVGb250RmFjZXMp
CisgICAgICAgICAgICBmYWNlLT5hcHBlbmRGb250RmFjZShjYW5kaWRhdGVGb250RmFjZS5nZXQo
KSk7CiAgICAgfQogICAgIHJldHVybiBmYWNlLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5oCmluZGV4IDRiZTc0MDgxMjk5NjQ1NGU5ZmViMzBlOTdlMDQ1ZTAyNmU1Yzcz
MmMuLmM3NDMyMzVmMmM1OGU5MmJhMzY5MmFhYjBkMjVkZjhlNWFmYjk1NzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTg5LDggKzg5LDggQEAgcHJpdmF0ZToKICAgICB2
b2lkIGJlZ2luTG9hZFRpbWVyRmlyZWQoKTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50Owot
ICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZlB0cjxDU1NGb250
RmFjZT4+PiwgQ2FzZUZvbGRpbmdIYXNoPiBtX2ZvbnRGYWNlczsKLSAgICBIYXNoTWFwPFN0cmlu
Zywgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+Pj4sIENhc2VGb2xk
aW5nSGFzaD4gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzOworICAgIEhhc2hNYXA8U3RyaW5n
LCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZjxDU1NGb250RmFjZT4+PiwgQ2FzZUZvbGRpbmdI
YXNoPiBtX2ZvbnRGYWNlczsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPFZl
Y3RvcjxSZWY8Q1NTRm9udEZhY2U+Pj4sIENhc2VGb2xkaW5nSGFzaD4gbV9sb2NhbGx5SW5zdGFs
bGVkRm9udEZhY2VzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1h
cDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPj4+LCBDYXNlRm9sZGluZ0hh
c2g+IG1fZm9udHM7CiAgICAgSGFzaFNldDxGb250U2VsZWN0b3JDbGllbnQqPiBtX2NsaWVudHM7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCmluZGV4IDJm
MzdkNmEwZmQwOTY0YTA5OTc5ZTZkZjdlOWY3ZjE4Mjk5YTA2NzcuLjVjYmZjYTRlN2I3MjAxMDk5
NWE4MTEyYmRiNDc2YjVkZGVhNWRkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21l
bnRlZEZvbnRGYWNlLmNwcApAQCAtNDUsOSArNDUsOCBAQCBDU1NTZWdtZW50ZWRGb250RmFjZTo6
Q1NTU2VnbWVudGVkRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IpCiBDU1NT
ZWdtZW50ZWRGb250RmFjZTo6fkNTU1NlZ21lbnRlZEZvbnRGYWNlKCkKIHsKICAgICBwcnVuZVRh
YmxlKCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG1fZm9udEZhY2VzLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICBtX2ZvbnRGYWNlc1tpXS0+
cmVtb3ZlZEZyb21TZWdtZW50ZWRGb250RmFjZSh0aGlzKTsKKyAgICBmb3IgKGF1dG8mIGZhY2Ug
OiBtX2ZvbnRGYWNlcykKKyAgICAgICAgZmFjZS0+cmVtb3ZlZEZyb21TZWdtZW50ZWRGb250RmFj
ZSh0aGlzKTsKIH0KIAogdm9pZCBDU1NTZWdtZW50ZWRGb250RmFjZTo6cHJ1bmVUYWJsZSgpCkBA
IC01OCw5ICs1Nyw4IEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZhY2U6OnBydW5lVGFibGUoKQog
Ym9vbCBDU1NTZWdtZW50ZWRGb250RmFjZTo6aXNWYWxpZCgpIGNvbnN0CiB7CiAgICAgLy8gVmFs
aWQgaWYgYXQgbGVhc3Qgb25lIGZvbnQgZmFjZSBpcyB2YWxpZC4KLSAgICB1bnNpZ25lZCBzaXpl
ID0gbV9mb250RmFjZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKLSAgICAgICAgaWYgKG1fZm9udEZhY2VzW2ldLT5pc1ZhbGlkKCkpCisgICAgZm9y
IChhdXRvJiBmYWNlIDogbV9mb250RmFjZXMpIHsKKyAgICAgICAgaWYgKGZhY2UtPmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC04NCwxMSArODIsMTEgQEAgdm9pZCBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udExvYWRlZChD
U1NGb250RmFjZSopCiAjZW5kaWYKIH0KIAotdm9pZCBDU1NTZWdtZW50ZWRGb250RmFjZTo6YXBw
ZW5kRm9udEZhY2UoUGFzc1JlZlB0cjxDU1NGb250RmFjZT4gZm9udEZhY2UpCit2b2lkIENTU1Nl
Z21lbnRlZEZvbnRGYWNlOjphcHBlbmRGb250RmFjZShSZWY8Q1NTRm9udEZhY2U+JiYgZm9udEZh
Y2UpCiB7CiAgICAgcHJ1bmVUYWJsZSgpOwogICAgIGZvbnRGYWNlLT5hZGRlZFRvU2VnbWVudGVk
Rm9udEZhY2UodGhpcyk7Ci0gICAgbV9mb250RmFjZXMuYXBwZW5kKGZvbnRGYWNlKTsKKyAgICBt
X2ZvbnRGYWNlcy5hcHBlbmQoV1RGOjptb3ZlKGZvbnRGYWNlKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IGFwcGVuZEZvbnRXaXRoSW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGluZyhGb250UmFuZ2VzJiBy
YW5nZXMsIFJlZjxGb250PiYmIGZvbnQsIGNvbnN0IFZlY3RvcjxDU1NGb250RmFjZTo6VW5pY29k
ZVJhbmdlPiYgdW5pY29kZVJhbmdlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWdtZW50ZWRGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZv
bnRGYWNlLmgKaW5kZXggZjg2OWZmNmRhMGI3ZWZhMmU0NWJmMTI2ODU0NTMyYzQ4NjU1NjUyYy4u
NWZmZWJiMThjYTgwZGQ4ZDNjYTkzMmQ2ODA5NDE4YzFkM2U1YmNlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlKik7CiAKLSAgICB2b2lkIGFwcGVuZEZv
bnRGYWNlKFBhc3NSZWZQdHI8Q1NTRm9udEZhY2U+KTsKKyAgICB2b2lkIGFwcGVuZEZvbnRGYWNl
KFJlZjxDU1NGb250RmFjZT4mJik7CiAKICAgICBGb250UmFuZ2VzIGZvbnRSYW5nZXMoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJik7CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKIAogICAgIENT
U0ZvbnRTZWxlY3RvciogbV9mb250U2VsZWN0b3I7CiAgICAgSGFzaE1hcDxGb250RGVzY3JpcHRp
b25LZXksIEZvbnRSYW5nZXMsIEZvbnREZXNjcmlwdGlvbktleUhhc2gsIFdURjo6U2ltcGxlQ2xh
c3NIYXNoVHJhaXRzPEZvbnREZXNjcmlwdGlvbktleT4+IG1fZGVzY3JpcHRpb25Ub1Jhbmdlc01h
cDsKLSAgICBWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiwgMT4gbV9mb250RmFjZXM7CisgICAg
VmVjdG9yPFJlZjxDU1NGb250RmFjZT4sIDE+IG1fZm9udEZhY2VzOwogI2lmIEVOQUJMRShGT05U
X0xPQURfRVZFTlRTKQogICAgIFZlY3RvcjxSZWZQdHI8TG9hZEZvbnRDYWxsYmFjaz4+IG1fY2Fs
bGJhY2tzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCmluZGV4IDNhMDY4NmM5OGYwMDI3MTJjZTgyZDU0ZTM4OGYxYjQwZmQ1NDJlZjYuLjI3
YjUwMGU5MWM5ODE3ZWVjYjJjZGU2OGMzMDAxNzRiOWIyZGMwNWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0xNjYsNyArMTY2LDcgQEAgcHVi
bGljOgogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBleGlzdHMgc28gQ1NTRm9udFNlbGVjdG9yIGNh
biBoYXZlIGEgdW5pZmllZCBub3Rpb24gb2YgcHJlaW5zdGFsbGVkIGZvbnRzIGFuZCBAZm9udC1m
YWNlLgogICAgIC8vIEl0IGNvbWVzIGludG8gcGxheSB3aGVuIHlvdSBjcmVhdGUgYW4gQGZvbnQt
ZmFjZSB3aGljaCBzaGFyZXMgYSBmYW1pbHkgbmFtZSBhcyBhIHByZWluc3RhbGxlZCBmb250Lgot
ICAgIHZvaWQgZ2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVu
c2lnbmVkPiYpOworICAgIFZlY3RvcjxGb250VHJhaXRzTWFzaz4gZ2V0VHJhaXRzSW5GYW1pbHko
Y29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4g
Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcm
LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBSZWY8Rm9udD4gbGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRleCBkODdkNzk4MDE2OGZiMjBkYmQ0ZWI1N2Yw
ZGY0ZjQ4YmUyNTVmNDIwLi5jMTM2NGFiZTY1ZmFkNWM2YjQyYjI5ZTVjMmNkNzcwNzMxNzJjYjA5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCkBAIC0yMzcsNyArMjM3LDcgQEAgUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbikKICAgICByZXR1cm4gZm9udC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpn
ZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1
bnNpZ25lZD4mIHRyYWl0c01hc2tzKQorVmVjdG9yPEZvbnRUcmFpdHNNYXNrPiBGb250Q2FjaGU6
OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWVTdHIgPSBmYW1pbHlOYW1lLnN0cmlu
ZygpLmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAgQ0ZTdHJpbmdSZWYgZmFtaWx5TmFtZVN0clB0ciA9
IGZhbWlseU5hbWVTdHIuZ2V0KCk7CkBAIC0yNDUsMTIgKzI0NSwxMyBAQCB2b2lkIEZvbnRDYWNo
ZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0
b3I8dW5zaWduZQogICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3Jp
cHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMuZ2V0KCkpKTsKICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gbWF0Y2hlZERlc2NyaXB0
b3JzID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlTWF0Y2hpbmdGb250RGVzY3JpcHRv
cnMoZm9udERlc2NyaXB0b3IuZ2V0KCksIG51bGxwdHIpKTsKICAgICBpZiAoIW1hdGNoZWREZXNj
cmlwdG9ycykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gVmVjdG9yPEZvbnRUcmFp
dHNNYXNrPigpOwogCiAgICAgQ0ZJbmRleCBudW1NYXRjaGVzID0gQ0ZBcnJheUdldENvdW50KG1h
dGNoZWREZXNjcmlwdG9ycy5nZXQoKSk7CiAgICAgaWYgKCFudW1NYXRjaGVzKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBWZWN0b3I8Rm9udFRyYWl0c01hc2s+KCk7CiAKKyAgICBW
ZWN0b3I8Rm9udFRyYWl0c01hc2s+IHRyYWl0c01hc2tzOwogICAgIGZvciAoQ0ZJbmRleCBpID0g
MDsgaSA8IG51bU1hdGNoZXM7ICsraSkgewogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiB0cmFpdHMgPSBhZG9wdENGKChDRkRpY3Rpb25hcnlSZWYpQ1RGb250RGVzY3JpcHRvckNv
cHlBdHRyaWJ1dGUoKENURm9udERlc2NyaXB0b3JSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleCht
YXRjaGVkRGVzY3JpcHRvcnMuZ2V0KCksIGkpLCBrQ1RGb250VHJhaXRzQXR0cmlidXRlKSk7CiAg
ICAgICAgIENGTnVtYmVyUmVmIHJlc3VsdFJlZiA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZSh0cmFpdHMuZ2V0KCksIGtDVEZvbnRTeW1ib2xpY1RyYWl0KTsKQEAgLTI2Myw2ICsy
NjQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5zaWduZQogICAgICAgICAgICAgdHJhaXRzTWFza3Mu
YXBwZW5kKHRvVHJhaXRzTWFzayhzeW1ib2xpY1RyYWl0cywgd2VpZ2h0KSk7CiAgICAgICAgIH0K
ICAgICB9CisgICAgcmV0dXJuIHRyYWl0c01hc2tzOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVG
cmVlVHlwZS5jcHAKaW5kZXggN2I2MDM5ODM3NGQ0OTgyN2M5NmU2NWNmNDA3MTAzMzMwMjcxOTI3
OS4uZjBmNGUxMGUwOTI5MGZiZTg5NmMyOTRhYTc5NGJiM2Y1MjUxZTc3MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtMTM3LDggKzEzNyw5IEBAIFJlZjxGb250PiBGb250Q2Fj
aGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpCiAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgdGltZXNT
dHIsIGZhbHNlKTsKIH0KIAotdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKQorVmVjdG9yPEZvbnRUcmFpdHNNYXNr
PiBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYpCiB7Cisg
ICAgcmV0dXJuIFZlY3RvcjxGb250VHJhaXRzTWFzaz4oKTsKIH0KIAogc3RhdGljIFN0cmluZyBn
ZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fj
aGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNo
ZVdpbi5jcHAKaW5kZXggYWZhNDg0MWVkZjk2OWRmMmU0ZGIxNTQ1NTBjYTFmZDhjMjMxNjE1OC4u
ODk0M2YxYzNiODBjYzI0YjM3MDhkZGNmN2E5MTJhNDA0YTdmMmY1OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAg
LTU0Miw3ICs1NDIsNyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5RW51bVBy
b2MoQ09OU1QgTE9HRk9OVCogbG9nRm9udCwgQ09OU1QgVEVYVE1FVAogICAgIHByb2NEYXRhLT5t
X3RyYWl0c01hc2tzLmFkZCh0cmFpdHNNYXNrKTsKICAgICByZXR1cm4gMTsKIH0KLXZvaWQgRm9u
dENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUs
IFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQorVmVjdG9yPEZvbnRUcmFpdHNNYXNrPiBG
b250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFt
ZSkKIHsKICAgICBIV25kREMgaGRjKDApOwogCkBAIC01NTUsNyArNTU1LDEwIEBAIHZvaWQgRm9u
dENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUs
IFZlY3Rvcjx1bnNpZ25lCiAKICAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRhIHByb2NEYXRhKGZh
bWlseU5hbWUpOwogICAgIEVudW1Gb250RmFtaWxpZXNFeChoZGMsICZsb2dGb250LCB0cmFpdHNJ
bkZhbWlseUVudW1Qcm9jLCByZWludGVycHJldF9jYXN0PExQQVJBTT4oJnByb2NEYXRhKSwgMCk7
Ci0gICAgY29weVRvVmVjdG9yKHByb2NEYXRhLm1fdHJhaXRzTWFza3MsIHRyYWl0c01hc2tzKTsK
KyAgICBWZWN0b3I8Rm9udFRyYWl0c01hc2s+IHJlc3VsdDsKKyAgICBmb3IgKHVuc2lnbmVkIG1h
c2sgOiBwcm9jRGF0YS5tX3RyYWl0c01hc2tzKQorICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRp
Y19jYXN0PEZvbnRUcmFpdHNNYXNrPihtYXNrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
c3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHkpCg==
</data>
<flag name="review"
          id="284912"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259750</attachid>
            <date>2015-08-24 00:15:53 -0700</date>
            <delta_ts>2015-08-24 00:40:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148355-20150824001545.patch</filename>
            <type>text/plain</type>
            <size>32628</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4ODUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDNmNGQ4MjJiNWNlZmU1
OWMyMWE3NDBhNjI5MTk3OTI5NzYyNTc2Mi4uZjBlYzcxYWE4OWNiNDRkYTJmYmIzYzM1NDQ0MGQy
MGY2MzA4MzgyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE1LTA4LTIzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQGZvbnQtZmFj
ZSByZWxhdGVkIGNsZWFudXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0ODM1NQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVwIG11Y2ggb2Ygb3VyIGNvZGUgcmVsYXRlZCB0byB3
ZWIgZm9udHMuIEluIGdlbmVyYWwsIGl0CisgICAgICAgIG1pZ3JhdGVzIHRvIHVzaW5nIEMrKyBm
b3ItZWFjaCBzdHlsZSBsb29wcywgdXNlcyBSZWYgaW5zdGVhZCBvZiBSZWZQdHIgd2hlbgorICAg
ICAgICB0aGluZ3MgY2FuJ3QgYmUgbnVsbHB0ciwgbWlncmF0ZXMgdG8gQysrIFJ2YWx1ZS1yZWZl
cmVuY2VzIGluc3RlYWQgb2YKKyAgICAgICAgUGFzc1JlZlB0ciwgYW5kIHJlZmFjdG9ycyBDU1NG
b250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSgpIHRvIHVzZSBoZWxwZXIKKyAgICAgICAgZnVu
Y3Rpb25zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9udExvYWRlZCk6IFVzZSBhIEMrKyBmb3ItZWFjaCBsb29w
LgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9u
dEZhY2U6OmNyZWF0ZSk6IFVzZSBDKysgUnZhbHVlLXJlZmVyZW5jZXMgaW5zdGVhZCBvZgorICAg
ICAgICBQYXNzUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OkNTU0ZvbnRG
YWNlKTogRGl0dG8uCisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlVHJhaXRzTWFzayk6IE1pZ3JhdGVkIGEgY2h1bmsgb2YKKyAgICAg
ICAgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoKSBpbnRvIHRoaXMgaGVscGVyIGZ1
bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9udEZhY2UpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6IENhbGwgdGhlIG5ld2x5
LWNyZWF0ZWQgaGVscGVyCisgICAgICAgIGZ1bmN0aW9ucy4gSW4gYWRkaXRpb24sIG1pZ3JhdGUg
dG8gUmVmcyBpbnN0ZWFkIG9mIFJlZlB0cnMuCisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlRm9u
dEZhY2VzKTogTWlncmF0ZSB0byByZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisgICAg
ICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnRGYWNlKTogTWlncmF0ZSB0byBS
ZWZzIGluc3RlYWQgb2YKKyAgICAgICAgUmVmUHRycy4gQWxzbyB1c2UgQysrIGZvci1lYWNoIGxv
b3BzLgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuaDoKKyAgICAgICAgKiBjc3MvQ1NT
U2VnbWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9u
dEZhY2U6On5DU1NTZWdtZW50ZWRGb250RmFjZSk6IFVzZSBDKysgZm9yLWVhY2gKKyAgICAgICAg
bG9vcHMuCisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6aXNWYWxpZCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OmFwcGVuZEZv
bnRGYWNlKTogTWlncmF0ZSB0byBSdmFsdWUtCisgICAgICAgIHJlZmVyZW5jZXMgaW5zdGVhZCBv
ZiBQYXNzUmVmUHRyLgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBSZXR1cm4gdGhlIHJlc3VsdCBpbnN0ZWFk
IG9mIGJlaW5nCisgICAgICAgIHBhc3NlZCBhbiBvdXQgcGFyYW1ldGVyLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBEaXR0by4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRyYWl0c0luRmFtaWx5RW51bVByb2MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBEaXR0by4KKwogMjAxNS0wOC0yMyAgQW5keSBF
c3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW0NvbnRlbnQgRmlsdGVyaW5nXSBS
RUdSRVNTSU9OIChyMTgyMzU2KTogUHJvdmlzaW9uYWwgVVJMIGlzIGluY29ycmVjdCBpbiBkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSB3aGVuIENvbnRl
bnQgRmlsdGVyaW5nIGlzIGVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCmluZGV4
IGY2MmE1ZmJkOTdlZTY3MDIwNzdjYzhhYzYwZmQzN2ZhZGE4YTQ5MWUuLjQyMTRhY2RlYjdlMmVl
ZmZjNzI0MGQ5MGU0MWZiOGQ5OWQzZTNlZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNw
cApAQCAtOTgsOSArOTgsOCBAQCB2b2lkIENTU0ZvbnRGYWNlOjpmb250TG9hZGVkKENTU0ZvbnRG
YWNlU291cmNlKiBzb3VyY2UpCiAgICAgfQogI2VuZGlmCiAKLSAgICBIYXNoU2V0PENTU1NlZ21l
bnRlZEZvbnRGYWNlKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2VnbWVudGVkRm9udEZhY2VzLmVuZCgp
OwotICAgIGZvciAoSGFzaFNldDxDU1NTZWdtZW50ZWRGb250RmFjZSo+OjppdGVyYXRvciBpdCA9
IG1fc2VnbWVudGVkRm9udEZhY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
KCppdCktPmZvbnRMb2FkZWQodGhpcyk7CisgICAgZm9yIChhdXRvKiBmYWNlIDogbV9zZWdtZW50
ZWRGb250RmFjZXMpCisgICAgICAgIGZhY2UtPmZvbnRMb2FkZWQodGhpcyk7CiAKICNpZiBFTkFC
TEUoRk9OVF9MT0FEX0VWRU5UUykKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS5mb250TG9hZEV2ZW50c0VuYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlLmgKaW5kZXggZGI2N2JjNjY0MzNiNWY1MDA4ZWFlZGY1ZDliMTUwYTkwMTZjYmQyNS4uOWVi
MDIxYTNmMzk2YjgxNDgyNmFkODkyYmYyNGZhOTA5NGQxZjgzZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgRm9udDsKIAogY2xhc3MgQ1NTRm9udEZh
Y2UgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NGb250RmFjZT4gewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Q1NTRm9udEZhY2U+IGNyZWF0ZShGb250VHJhaXRzTWFzayB0cmFpdHNNYXNrLCBQYXNz
UmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4gcnVsZSwgYm9vbCBpc0xvY2FsRmFsbGJhY2sgPSBmYWxz
ZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGb250RmFjZSh0cmFpdHNNYXNrLCBydWxlLCBp
c0xvY2FsRmFsbGJhY2spKTsgfQorICAgIHN0YXRpYyBSZWY8Q1NTRm9udEZhY2U+IGNyZWF0ZShG
b250VHJhaXRzTWFzayB0cmFpdHNNYXNrLCBSZWZQdHI8Q1NTRm9udEZhY2VSdWxlPiYmIHJ1bGUs
IGJvb2wgaXNMb2NhbEZhbGxiYWNrID0gZmFsc2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NT
Rm9udEZhY2UodHJhaXRzTWFzaywgV1RGOjptb3ZlKHJ1bGUpLCBpc0xvY2FsRmFsbGJhY2spKTsg
fQogCiAgICAgRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
aXRzTWFzazsgfQogCkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRl
OgotICAgIENTU0ZvbnRGYWNlKEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2ssIFBhc3NSZWZQdHI8
Q1NTRm9udEZhY2VSdWxlPiBydWxlLCBib29sIGlzTG9jYWxGYWxsYmFjaykKKyAgICBDU1NGb250
RmFjZShGb250VHJhaXRzTWFzayB0cmFpdHNNYXNrLCBSZWZQdHI8Q1NTRm9udEZhY2VSdWxlPiYm
IHJ1bGUsIGJvb2wgaXNMb2NhbEZhbGxiYWNrKQogICAgICAgICA6IG1fdHJhaXRzTWFzayh0cmFp
dHNNYXNrKQogICAgICAgICAsIG1fYWN0aXZlU291cmNlKDApCiAgICAgICAgICwgbV9pc0xvY2Fs
RmFsbGJhY2soaXNMb2NhbEZhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmNwcAppbmRleCAyNjlkZGZjZGE3ZWVlOGNmNTljMDNiYWExMWNiMTcxZDVkNDhkYjgxLi5lMmM0
YzM2MWNiNDhkZWNlODQyNzQzMmI5ZGMyODY2NmQ4ZWZkZTM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmNwcApAQCAtODQsMzEgKzg0LDEzIEBAIGJvb2wgQ1NTRm9udFNlbGVj
dG9yOjppc0VtcHR5KCkgY29uc3QKICAgICByZXR1cm4gbV9mb250cy5pc0VtcHR5KCk7CiB9CiAK
LXZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9u
dEZhY2UqIGZvbnRGYWNlUnVsZSwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRT
aGFkb3dUcmVlKQorc3RhdGljIE9wdGlvbmFsPEZvbnRUcmFpdHNNYXNrPiBjb21wdXRlVHJhaXRz
TWFzayhjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlKQogewotICAgIC8vIE9idGFpbiB0aGUg
Zm9udC1mYW1pbHkgcHJvcGVydHkgYW5kIHRoZSBzcmMgcHJvcGVydHkuICBCb3RoIG11c3QgYmUg
ZGVmaW5lZC4KLSAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlID0gZm9udEZhY2VSdWxl
LT5wcm9wZXJ0aWVzKCk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBmb250RmFtaWx5ID0gc3R5bGUu
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gc3JjID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVNyYyk7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlUmFuZ2UgPSBzdHlsZS5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5VW5pY29kZVJhbmdlKTsKLSAgICBpZiAoIWlzPENTU1ZhbHVlTGlz
dD4oZm9udEZhbWlseS5nZXQoKSkgfHwgIWlzPENTU1ZhbHVlTGlzdD4oc3JjLmdldCgpKSB8fCAo
dW5pY29kZVJhbmdlICYmICFpczxDU1NWYWx1ZUxpc3Q+KCp1bmljb2RlUmFuZ2UpKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQ1NTVmFsdWVMaXN0JiBmYW1pbHlMaXN0ID0gZG93bmNhc3Q8Q1NT
VmFsdWVMaXN0PigqZm9udEZhbWlseSk7Ci0gICAgaWYgKCFmYW1pbHlMaXN0Lmxlbmd0aCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NWYWx1ZUxpc3QmIHNyY0xpc3QgPSBkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KCpzcmMpOwotICAgIGlmICghc3JjTGlzdC5sZW5ndGgoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQ1NTVmFsdWVMaXN0KiByYW5nZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KHVuaWNvZGVSYW5nZS5nZXQoKSk7Ci0KICAgICB1bnNpZ25lZCB0cmFpdHNNYXNrID0g
MDsKIAogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRTdHlsZSA9IHN0eWxlLmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpKSB7CiAgICAgICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpmb250U3R5bGUpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CiAKICAgICAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKmZvbnRTdHlsZSkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2UgQ1NT
VmFsdWVOb3JtYWw6CkBAIC0xMjYsNyArMTA4LDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFk
ZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlLCBib28K
IAogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRXZWlnaHQgPSBzdHlsZS5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkpIHsKICAgICAgICAgaWYgKCFpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKmZvbnRXZWlnaHQpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CiAKICAgICAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKmZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENT
U1ZhbHVlQm9sZDoKQEAgLTE3MSwxMiArMTUzLDEyIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjph
ZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSwgYm9v
CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoZm9udFZhcmlhbnQucmVsZWFzZU5vbk51bGwoKSk7
CiAgICAgICAgICAgICBmb250VmFyaWFudCA9IGxpc3QucmVsZWFzZU5vbk51bGwoKTsKICAgICAg
ICAgfSBlbHNlIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqZm9udFZhcmlhbnQpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAKICAgICAgICAgQ1NTVmFs
dWVMaXN0JiB2YXJpYW50TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZvbnRWYXJpYW50
KTsKICAgICAgICAgdW5zaWduZWQgbnVtVmFyaWFudHMgPSB2YXJpYW50TGlzdC5sZW5ndGgoKTsK
ICAgICAgICAgaWYgKCFudW1WYXJpYW50cykKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1WYXJpYW50czsgKytpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YXJpYW50TGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKS0+Z2V0VmFs
dWVJRCgpKSB7CkBAIC0xOTMsOCArMTc1LDIwIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRG
b250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSwgYm9vCiAg
ICAgfSBlbHNlCiAgICAgICAgIHRyYWl0c01hc2sgfD0gRm9udFZhcmlhbnRNYXNrOwogCi0gICAg
Ly8gRWFjaCBpdGVtIGluIHRoZSBzcmMgcHJvcGVydHkncyBsaXN0IGlzIGEgc2luZ2xlIENTU0Zv
bnRGYWNlU291cmNlLiBQdXQgdGhlbSBhbGwgaW50byBhIENTU0ZvbnRGYWNlLgotICAgIFJlZlB0
cjxDU1NGb250RmFjZT4gZm9udEZhY2U7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRUcmFp
dHNNYXNrPih0cmFpdHNNYXNrKTsKK30KKworc3RhdGljIFJlZjxDU1NGb250RmFjZT4gY3JlYXRl
Rm9udEZhY2UoQ1NTVmFsdWVMaXN0JiBzcmNMaXN0LCBGb250VHJhaXRzTWFzayB0cmFpdHNNYXNr
LCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1
bGUsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSkKK3sKKyAg
ICBSZWZQdHI8Q1NTRm9udEZhY2VSdWxlPiBydWxlOworI2lmIEVOQUJMRShGT05UX0xPQURfRVZF
TlRTKQorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEyMTE2IC0gVGhpcyBDU1NGb250RmFjZVJ1bGUgaGFzIG5vIHBhcmVudC4KKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5mb250TG9hZEV2ZW50c0Vu
YWJsZWQoKSkKKyAgICAgICAgcnVsZSA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q1NTRm9udEZhY2VS
dWxlPihmb250RmFjZVJ1bGUtPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGZvbnRGYWNlUnVsZSk7CisjZW5kaWYKKyAgICBSZWY8Q1NTRm9udEZhY2U+IGZv
bnRGYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZSh0cmFpdHNNYXNrLCBXVEY6Om1vdmUocnVsZSkp
OwogCiAgICAgaW50IHNyY0xlbmd0aCA9IHNyY0xpc3QubGVuZ3RoKCk7CiAKQEAgLTIwOSwxMCAr
MjAzLDEwIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5
bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSwgYm9vCiAgICAgICAgIGZvdW5kU1ZHRm9udCA9
IGl0ZW0uaXNTVkdGb250RmFjZVNyYygpIHx8IGl0ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCk7CiAj
ZW5kaWYKICAgICAgICAgaWYgKCFpdGVtLmlzTG9jYWwoKSkgewotICAgICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gbV9kb2N1bWVudCA/IG1fZG9jdW1lbnQtPmZyYW1lKCkgPyAmbV9kb2N1
bWVudC0+ZnJhbWUoKS0+c2V0dGluZ3MoKSA6IDAgOiAwOworICAgICAgICAgICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+ZnJhbWUoKSA/ICZkb2N1bWVudC0+ZnJh
bWUoKS0+c2V0dGluZ3MoKSA6IDAgOiAwOwogICAgICAgICAgICAgYm9vbCBhbGxvd0Rvd25sb2Fk
aW5nID0gZm91bmRTVkdGb250IHx8IChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+ZG93bmxvYWRhYmxl
QmluYXJ5Rm9udHNFbmFibGVkKCkpOwotICAgICAgICAgICAgaWYgKGFsbG93RG93bmxvYWRpbmcg
JiYgaXRlbS5pc1N1cHBvcnRlZEZvcm1hdCgpICYmIG1fZG9jdW1lbnQpIHsKLSAgICAgICAgICAg
ICAgICBDYWNoZWRGb250KiBjYWNoZWRGb250ID0gaXRlbS5jYWNoZWRGb250KG1fZG9jdW1lbnQs
IGZvdW5kU1ZHRm9udCwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7
CisgICAgICAgICAgICBpZiAoYWxsb3dEb3dubG9hZGluZyAmJiBpdGVtLmlzU3VwcG9ydGVkRm9y
bWF0KCkgJiYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBDYWNoZWRGb250KiBjYWNoZWRG
b250ID0gaXRlbS5jYWNoZWRGb250KGRvY3VtZW50LCBmb3VuZFNWR0ZvbnQsIGlzSW5pdGlhdGlu
Z0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOwogICAgICAgICAgICAgICAgIGlmIChjYWNo
ZWRGb250KSB7CiAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8
Q1NTRm9udEZhY2VTb3VyY2U+KGl0ZW0ucmVzb3VyY2UoKSwgY2FjaGVkRm9udCk7CiAjaWYgRU5B
QkxFKFNWR19GT05UUykKQEAgLTIyNSwxNiArMjE5LDYgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6
OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlLCBi
b28KICAgICAgICAgICAgIHNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3Vy
Y2U+KGl0ZW0ucmVzb3VyY2UoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWZvbnRGYWNl
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTRm9udEZhY2VSdWxlPiBydWxlOwotI2lmIEVOQUJM
RShGT05UX0xPQURfRVZFTlRTKQotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTIxMTYgLSBUaGlzIENTU0ZvbnRGYWNlUnVsZSBo
YXMgbm8gcGFyZW50LgotICAgICAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkuZm9udExvYWRFdmVudHNFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAg
cnVsZSA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlPihmb250RmFjZVJ1bGUt
PmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKLSNlbmRpZgotICAgICAgICAgICAgZm9udEZhY2UgPSBD
U1NGb250RmFjZTo6Y3JlYXRlKHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPih0cmFpdHNNYXNr
KSwgcnVsZSk7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoc291cmNlKSB7CiAjaWYgRU5BQkxF
KFNWR19GT05UUykKICAgICAgICAgICAgIHNvdXJjZS0+c2V0U1ZHRm9udEZhY2VFbGVtZW50KGl0
ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCkpOwpAQCAtMjQzLDkgKzIyNyw4MiBAQCB2b2lkIENTU0Zv
bnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250
RmFjZVJ1bGUsIGJvbwogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKGZvbnRGYWNlKTsK
KyAgICByZXR1cm4gZm9udEZhY2U7Cit9CisKK3N0YXRpYyBTdHJpbmcgZmFtaWx5TmFtZUZyb21Q
cmltaXRpdmUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZS5pc0ZvbnRGYW1pbHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmZvbnRGYW1pbHkoKS5mYW1p
bHlOYW1lOworICAgIGlmICghdmFsdWUuaXNWYWx1ZUlEKCkpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgcmF3IHRleHQgZm9yIGFsbCB0aGUgZ2VuZXJp
YyBmYW1pbHkgdHlwZXMsIHNpbmNlIEBmb250LWZhY2UgaXMgYSB3YXkgb2YgYWN0dWFsbHkKKyAg
ICAvLyBkZWZpbmluZyB3aGF0IGZvbnQgdG8gdXNlIGZvciB0aG9zZSB0eXBlcy4KKyAgICBzd2l0
Y2ggKHZhbHVlLmdldFZhbHVlSUQoKSkgeworICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAg
ICAgcmV0dXJuIHNlcmlmRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6CisgICAg
ICAgIHJldHVybiBzYW5zU2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6Cisg
ICAgICAgIHJldHVybiBjdXJzaXZlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5Ogor
ICAgICAgICByZXR1cm4gZmFudGFzeUZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNl
OgorICAgICAgICByZXR1cm4gbW9ub3NwYWNlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVXZWJr
aXRQaWN0b2dyYXBoOgorICAgICAgICByZXR1cm4gcGljdG9ncmFwaEZhbWlseTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4geyB9OworICAgIH0KK30KKworc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4+IGNvbnN0cnVjdEZhbWlseUZvbnRGYWNlcyhj
b25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8
VmVjdG9yPFJlZjxDU1NGb250RmFjZT4+PiwgQ2FzZUZvbGRpbmdIYXNoPiYgbG9jYWxseUluc3Rh
bGxlZEZvbnRGYWNlcykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZjxDU1NGb250
RmFjZT4+PiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+
Pj4oKTsKKworICAgIEFTU0VSVCghbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5jb250YWlucyhm
YW1pbHlOYW1lKSk7CisKKyAgICBWZWN0b3I8Rm9udFRyYWl0c01hc2s+IHRyYWl0c01hc2tzID0g
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5nZXRUcmFpdHNJbkZhbWlseShmYW1pbHlOYW1lKTsKKyAg
ICBpZiAoIXRyYWl0c01hc2tzLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIGZhY2VzID0gc3Rk
OjptYWtlX3VuaXF1ZTxWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4+KCk7CisgICAgICAgIGZvciAo
YXV0byBtYXNrIDogdHJhaXRzTWFza3MpIHsKKyAgICAgICAgICAgIFJlZjxDU1NGb250RmFjZT4g
ZmFjZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUobWFzaywgbnVsbHB0ciwgdHJ1ZSk7CisgICAgICAg
ICAgICBmYWNlLT5hZGRTb3VyY2Uoc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4o
ZmFtaWx5TmFtZSkpOworICAgICAgICAgICAgQVNTRVJUKGZhY2UtPmlzVmFsaWQoKSk7CisgICAg
ICAgICAgICBmYWNlcy0+YXBwZW5kKFdURjo6bW92ZShmYWNlKSk7CisgICAgICAgIH0KKyAgICAg
ICAgbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgV1RGOjptb3ZlKGZh
Y2VzKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQ1NTRm9udFNlbGVj
dG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVs
ZSwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQoreworICAg
IGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUgPSBmb250RmFjZVJ1bGUtPnByb3BlcnRpZXMo
KTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRGYW1pbHkgPSBzdHlsZS5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBzcmMg
PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5U3JjKTsKKyAgICBSZWZQdHI8
Q1NTVmFsdWU+IHVuaWNvZGVSYW5nZSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlVbmljb2RlUmFuZ2UpOworICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pihmb250RmFtaWx5
LmdldCgpKSB8fCAhaXM8Q1NTVmFsdWVMaXN0PihzcmMuZ2V0KCkpIHx8ICh1bmljb2RlUmFuZ2Ug
JiYgIWlzPENTU1ZhbHVlTGlzdD4oKnVuaWNvZGVSYW5nZSkpKQorICAgICAgICByZXR1cm47CisK
KyAgICBDU1NWYWx1ZUxpc3QmIGZhbWlseUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpm
b250RmFtaWx5KTsKKyAgICBpZiAoIWZhbWlseUxpc3QubGVuZ3RoKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIENTU1ZhbHVlTGlzdCYgc3JjTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4o
KnNyYyk7CisgICAgaWYgKCFzcmNMaXN0Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDU1NWYWx1ZUxpc3QqIHJhbmdlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odW5pY29k
ZVJhbmdlLmdldCgpKTsKIAotICAgIGlmIChmb250RmFjZSAmJiAhZm9udEZhY2UtPmlzVmFsaWQo
KSkKKyAgICBhdXRvIGNvbXB1dGVkVHJhaXRzTWFzayA9IGNvbXB1dGVUcmFpdHNNYXNrKHN0eWxl
KTsKKyAgICBpZiAoIWNvbXB1dGVkVHJhaXRzTWFzaykKKyAgICAgICAgcmV0dXJuOworICAgIGF1
dG8gdHJhaXRzTWFzayA9IGNvbXB1dGVkVHJhaXRzTWFzay52YWx1ZSgpOworCisgICAgUmVmPENT
U0ZvbnRGYWNlPiBmb250RmFjZSA9IGNyZWF0ZUZvbnRGYWNlKHNyY0xpc3QsIHRyYWl0c01hc2ss
IG1fZG9jdW1lbnQsIGZvbnRGYWNlUnVsZSwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50
U2hhZG93VHJlZSk7CisgICAgaWYgKCFmb250RmFjZS0+aXNWYWxpZCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAocmFuZ2VMaXN0KSB7CkBAIC0yNTYsNjUgKzMxMywxNiBAQCB2b2lkIENT
U0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBm
b250RmFjZVJ1bGUsIGJvbwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gSGFzaCB1bmRlciBl
dmVyeSBzaW5nbGUgZmFtaWx5IG5hbWUuCiAgICAgZm9yIChhdXRvJiBpdGVtIDogZmFtaWx5TGlz
dCkgewotICAgICAgICBhdXRvJiB2YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihp
dGVtLmdldCgpKTsKLSAgICAgICAgU3RyaW5nIGZhbWlseU5hbWU7Ci0gICAgICAgIGlmICh2YWx1
ZS5pc0ZvbnRGYW1pbHkoKSkgewotICAgICAgICAgICAgZmFtaWx5TmFtZSA9IHZhbHVlLmZvbnRG
YW1pbHkoKS5mYW1pbHlOYW1lOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzVmFsdWVJRCgp
KSB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgcmF3IHRleHQgZm9yIGFsbCB0
aGUgZ2VuZXJpYyBmYW1pbHkgdHlwZXMsIHNpbmNlIEBmb250LWZhY2UgaXMgYSB3YXkgb2YgYWN0
dWFsbHkKLSAgICAgICAgICAgIC8vIGRlZmluaW5nIHdoYXQgZm9udCB0byB1c2UgZm9yIHRob3Nl
IHR5cGVzLgotICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5nZXRWYWx1ZUlEKCkpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2VyaWY6Ci0gICAgICAgICAgICAgICAgICAgIGZhbWls
eU5hbWUgPSBzZXJpZkZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZVNhbnNTZXJpZjoKLSAgICAgICAgICAgICAgICAgICAgZmFt
aWx5TmFtZSA9IHNhbnNTZXJpZkZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6Ci0gICAgICAgICAgICAgICAgICAg
IGZhbWlseU5hbWUgPSBjdXJzaXZlRmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKLSAgICAgICAgICAgICAgICAg
ICAgZmFtaWx5TmFtZSA9IGZhbnRhc3lGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6Ci0gICAgICAgICAgICAg
ICAgICAgIGZhbWlseU5hbWUgPSBtb25vc3BhY2VGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dyYXBoOgot
ICAgICAgICAgICAgICAgICAgICBmYW1pbHlOYW1lID0gcGljdG9ncmFwaEZhbWlseTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQorICAgICAgICBT
dHJpbmcgZmFtaWx5TmFtZSA9IGZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKSk7CiAgICAgICAgIGlmIChmYW1pbHlOYW1lLmlzRW1w
dHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxW
ZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPj4+JiBmYW1pbHlGb250RmFjZXMgPSBtX2ZvbnRGYWNl
cy5hZGQoZmFtaWx5TmFtZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICBpZiAo
IWZhbWlseUZvbnRGYWNlcykgewotICAgICAgICAgICAgZmFtaWx5Rm9udEZhY2VzID0gc3RkOjpt
YWtlX3VuaXF1ZTxWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPj4+KCk7CisgICAgICAgIGF1dG8m
IGZhbWlseUZvbnRGYWNlcyA9IG1fZm9udEZhY2VzLmFkZChmYW1pbHlOYW1lLCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWU7CisgICAgICAgIGlmICghZmFtaWx5Rm9udEZhY2VzKQorICAgICAgICAg
ICAgZmFtaWx5Rm9udEZhY2VzID0gY29uc3RydWN0RmFtaWx5Rm9udEZhY2VzKGZhbWlseU5hbWUs
IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcyk7CiAKLSAgICAgICAgICAgIEFTU0VSVCghbV9s
b2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmNvbnRhaW5zKGZhbWlseU5hbWUpKTsKLQotICAgICAg
ICAgICAgVmVjdG9yPHVuc2lnbmVkPiBsb2NhbGx5SW5zdGFsbGVkRm9udHNUcmFpdHNNYXNrczsK
LSAgICAgICAgICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2V0VHJhaXRzSW5GYW1pbHkoZmFt
aWx5TmFtZSwgbG9jYWxseUluc3RhbGxlZEZvbnRzVHJhaXRzTWFza3MpOwotICAgICAgICAgICAg
aWYgKHVuc2lnbmVkIG51bUxvY2FsbHlJbnN0YWxsZWRGYWNlcyA9IGxvY2FsbHlJbnN0YWxsZWRG
b250c1RyYWl0c01hc2tzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZmFtaWx5TG9j
YWxseUluc3RhbGxlZEZhY2VzID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8UmVmUHRyPENTU0Zv
bnRGYWNlPj4+KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtTG9jYWxseUluc3RhbGxlZEZhY2VzOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVm
UHRyPENTU0ZvbnRGYWNlPiBsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UgPSBDU1NGb250RmFjZTo6
Y3JlYXRlKHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPihsb2NhbGx5SW5zdGFsbGVkRm9udHNU
cmFpdHNNYXNrc1tpXSksIDAsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbGx5SW5z
dGFsbGVkRm9udEZhY2UtPmFkZFNvdXJjZShzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291
cmNlPihmYW1pbHlOYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChsb2NhbGx5SW5z
dGFsbGVkRm9udEZhY2UtPmlzVmFsaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZhbWlseUxv
Y2FsbHlJbnN0YWxsZWRGYWNlcy0+YXBwZW5kKGxvY2FsbHlJbnN0YWxsZWRGb250RmFjZSk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbV9sb2NhbGx5SW5zdGFsbGVkRm9u
dEZhY2VzLnNldChmYW1pbHlOYW1lLCBXVEY6Om1vdmUoZmFtaWx5TG9jYWxseUluc3RhbGxlZEZh
Y2VzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmYW1pbHlGb250RmFj
ZXMtPmFwcGVuZChmb250RmFjZSk7CisgICAgICAgIGZhbWlseUZvbnRGYWNlcy0+YXBwZW5kKGZv
bnRGYWNlLmNvcHlSZWYoKSk7CiAgICAgICAgIAogICAgICAgICArK21fdmVyc2lvbjsKICAgICB9
CkBAIC0zNzgsMTAgKzM4NiwxMCBAQCBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiByZXNvbHZl
R2VuZXJpY0ZhbWlseShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEZvbnREZQogCiBzdGF0aWMg
Rm9udFRyYWl0c01hc2sgZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uOwogCi1zdGF0aWMg
aW5saW5lIGJvb2wgY29tcGFyZUZvbnRGYWNlcyhDU1NGb250RmFjZSogZmlyc3QsIENTU0ZvbnRG
YWNlKiBzZWNvbmQpCitzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUZvbnRGYWNlcyhjb25zdCBD
U1NGb250RmFjZSYgZmlyc3QsIGNvbnN0IENTU0ZvbnRGYWNlJiBzZWNvbmQpCiB7Ci0gICAgRm9u
dFRyYWl0c01hc2sgZmlyc3RUcmFpdHNNYXNrID0gZmlyc3QtPnRyYWl0c01hc2soKTsKLSAgICBG
b250VHJhaXRzTWFzayBzZWNvbmRUcmFpdHNNYXNrID0gc2Vjb25kLT50cmFpdHNNYXNrKCk7Cisg
ICAgRm9udFRyYWl0c01hc2sgZmlyc3RUcmFpdHNNYXNrID0gZmlyc3QudHJhaXRzTWFzaygpOwor
ICAgIEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01hc2sgPSBzZWNvbmQudHJhaXRzTWFzaygp
OwogCiAgICAgYm9vbCBmaXJzdEhhc0Rlc2lyZWRWYXJpYW50ID0gZmlyc3RUcmFpdHNNYXNrICYg
ZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFZhcmlhbnRNYXNrOwogICAgIGJv
b2wgc2Vjb25kSGFzRGVzaXJlZFZhcmlhbnQgPSBzZWNvbmRUcmFpdHNNYXNrICYgZGVzaXJlZFRy
YWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFZhcmlhbnRNYXNrOwpAQCAtMzkwLDcgKzM5OCw3
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlRm9udEZhY2VzKENTU0ZvbnRGYWNlKiBmaXJz
dCwgQ1NTRm9udEZhY2UqIHNlY29uZCkKICAgICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFZh
cmlhbnQ7CiAKICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvbnQtdmFyaWFudCBjc3MgcHJvcGVy
dHkgZm9yIENTUzIuMSBjb21wYXRpYmlsaXR5LgotICAgIGlmICgoZGVzaXJlZFRyYWl0c01hc2tG
b3JDb21wYXJpc29uICYgRm9udFZhcmlhbnRTbWFsbENhcHNNYXNrKSAmJiAhZmlyc3QtPmlzTG9j
YWxGYWxsYmFjaygpICYmICFzZWNvbmQtPmlzTG9jYWxGYWxsYmFjaygpKSB7CisgICAgaWYgKChk
ZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2sp
ICYmICFmaXJzdC5pc0xvY2FsRmFsbGJhY2soKSAmJiAhc2Vjb25kLmlzTG9jYWxGYWxsYmFjaygp
KSB7CiAgICAgICAgIC8vIFByZWZlciBhIGZvbnQgdGhhdCBoYXMgaW5kaWNhdGVkIHRoYXQgaXQg
Y2FuIG9ubHkgc3VwcG9ydCBzbWFsbC1jYXBzIHRvIGEgZm9udCB0aGF0IGNsYWltcyB0byBzdXBw
b3J0CiAgICAgICAgIC8vIGFsbCB2YXJpYW50cy4gIFRoZSBzcGVjaWFsaXplZCBmb250IGlzIG1v
cmUgbGlrZWx5IHRvIGJlIHRydWUgc21hbGwtY2FwcyBhbmQgbm90IHJlcXVpcmUgc3ludGhlc2lz
LgogICAgICAgICBib29sIGZpcnN0UmVxdWlyZXNTbWFsbENhcHMgPSAoZmlyc3RUcmFpdHNNYXNr
ICYgRm9udFZhcmlhbnRTbWFsbENhcHNNYXNrKSAmJiAhKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRW
YXJpYW50Tm9ybWFsTWFzayk7CkBAIC00MDUsNyArNDEzLDcgQEAgc3RhdGljIGlubGluZSBib29s
IGNvbXBhcmVGb250RmFjZXMoQ1NTRm9udEZhY2UqIGZpcnN0LCBDU1NGb250RmFjZSogc2Vjb25k
KQogICAgIGlmIChmaXJzdEhhc0Rlc2lyZWRTdHlsZSAhPSBzZWNvbmRIYXNEZXNpcmVkU3R5bGUp
CiAgICAgICAgIHJldHVybiBmaXJzdEhhc0Rlc2lyZWRTdHlsZTsKIAotICAgIGlmICgoZGVzaXJl
ZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlSXRhbGljTWFzaykgJiYgIWZpcnN0
LT5pc0xvY2FsRmFsbGJhY2soKSAmJiAhc2Vjb25kLT5pc0xvY2FsRmFsbGJhY2soKSkgeworICAg
IGlmICgoZGVzaXJlZFRyYWl0c01hc2tGb3JDb21wYXJpc29uICYgRm9udFN0eWxlSXRhbGljTWFz
aykgJiYgIWZpcnN0LmlzTG9jYWxGYWxsYmFjaygpICYmICFzZWNvbmQuaXNMb2NhbEZhbGxiYWNr
KCkpIHsKICAgICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0ZWQgdGhhdCBp
dCBjYW4gb25seSBzdXBwb3J0IGl0YWxpY3MgdG8gYSBmb250IHRoYXQgY2xhaW1zIHRvIHN1cHBv
cnQKICAgICAgICAgLy8gYWxsIHN0eWxlcy4gIFRoZSBzcGVjaWFsaXplZCBmb250IGlzIG1vcmUg
bGlrZWx5IHRvIGJlIHRoZSBvbmUgdGhlIGF1dGhvciB3YW50cyB1c2VkLgogICAgICAgICBib29s
IGZpcnN0UmVxdWlyZXNJdGFsaWNzID0gKGZpcnN0VHJhaXRzTWFzayAmIEZvbnRTdHlsZUl0YWxp
Y01hc2spICYmICEoZmlyc3RUcmFpdHNNYXNrICYgRm9udFN0eWxlTm9ybWFsTWFzayk7CkBAIC00
NzYsOSArNDg0LDkgQEAgRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JG
YW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3IKIAogQ1NTU2VnbWVudGVkRm9u
dEZhY2UqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udEZhY2UoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQogewotICAgIFZl
Y3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+PiogZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMu
Z2V0KGZhbWlseSk7CisgICAgYXV0byogZmFtaWx5Rm9udEZhY2VzID0gbV9mb250RmFjZXMuZ2V0
KGZhbWlseSk7CiAgICAgaWYgKCFmYW1pbHlGb250RmFjZXMgfHwgZmFtaWx5Rm9udEZhY2VzLT5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPHVuc2lnbmVkLCBSZWZQdHI8Q1NTU2VnbWVudGVk
Rm9udEZhY2U+Pj4mIHNlZ21lbnRlZEZvbnRGYWNlQ2FjaGUgPSBtX2ZvbnRzLmFkZChmYW1pbHks
IG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXNlZ21lbnRlZEZvbnRGYWNlQ2Fj
aGUpCkBAIC00OTAsMTEgKzQ5OCwxMCBAQCBDU1NTZWdtZW50ZWRGb250RmFjZSogQ1NTRm9udFNl
bGVjdG9yOjpnZXRGb250RmFjZShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZQogICAgIGlm
ICghZmFjZSkgewogICAgICAgICBmYWNlID0gQ1NTU2VnbWVudGVkRm9udEZhY2U6OmNyZWF0ZSh0
aGlzKTsKIAotICAgICAgICAvLyBDb2xsZWN0IGFsbCBtYXRjaGluZyBmYWNlcyBhbmQgc29ydCB0
aGVtIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCi0gICAgICAgIFZlY3RvcjxDU1NGb250RmFjZSos
IDMyPiBjYW5kaWRhdGVGb250RmFjZXM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPENTU0ZvbnRGYWNlPiwgMzI+IGNhbmRpZGF0ZUZvbnRGYWNlczsKICAgICAgICAgZm9y
IChpbnQgaSA9IGZhbWlseUZvbnRGYWNlcy0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAg
ICAgICAgICAgIENTU0ZvbnRGYWNlKiBjYW5kaWRhdGUgPSBmYW1pbHlGb250RmFjZXMtPmF0KGkp
LmdldCgpOwotICAgICAgICAgICAgdW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRp
ZGF0ZS0+dHJhaXRzTWFzaygpOworICAgICAgICAgICAgQ1NTRm9udEZhY2UmIGNhbmRpZGF0ZSA9
IGZhbWlseUZvbnRGYWNlcy0+YXQoaSk7CisgICAgICAgICAgICB1bnNpZ25lZCBjYW5kaWRhdGVU
cmFpdHNNYXNrID0gY2FuZGlkYXRlLnRyYWl0c01hc2soKTsKICAgICAgICAgICAgIGlmICgodHJh
aXRzTWFzayAmIEZvbnRTdHlsZU5vcm1hbE1hc2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAm
IEZvbnRTdHlsZU5vcm1hbE1hc2spKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgaWYgKCh0cmFpdHNNYXNrICYgRm9udFZhcmlhbnROb3JtYWxNYXNrKSAmJiAhKGNhbmRp
ZGF0ZVRyYWl0c01hc2sgJiBGb250VmFyaWFudE5vcm1hbE1hc2spKQpAQCAtNTAyLDE2ICs1MDks
MTQgQEAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIENTU0ZvbnRTZWxlY3Rvcjo6Z2V0Rm9udEZhY2Uo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGUKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAg
ICAgICAgICAgLy8gRm9yIFNWRyBGb250cyB0aGF0IHNwZWNpZnkgdGhhdCB0aGV5IG9ubHkgc3Vw
cG9ydCB0aGUgIm5vcm1hbCIgdmFyaWFudCwgd2Ugd2lsbCBhc3N1bWUgdGhleSBhcmUgaW5jYXBh
YmxlCiAgICAgICAgICAgICAvLyBvZiBzbWFsbC1jYXBzIHN5bnRoZXNpcyBhbmQganVzdCBpZ25v
cmUgdGhlIGZvbnQgZmFjZSBhcyBhIGNhbmRpZGF0ZS4KLSAgICAgICAgICAgIGlmIChjYW5kaWRh
dGUtPmhhc1NWR0ZvbnRGYWNlU291cmNlKCkgJiYgKHRyYWl0c01hc2sgJiBGb250VmFyaWFudFNt
YWxsQ2Fwc01hc2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAmIEZvbnRWYXJpYW50U21hbGxD
YXBzTWFzaykpCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmhhc1NWR0ZvbnRGYWNlU291cmNl
KCkgJiYgKHRyYWl0c01hc2sgJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spICYmICEoY2FuZGlk
YXRlVHJhaXRzTWFzayAmIEZvbnRWYXJpYW50U21hbGxDYXBzTWFzaykpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAjZW5kaWYKICAgICAgICAgICAgIGNhbmRpZGF0ZUZvbnRGYWNlcy5hcHBl
bmQoY2FuZGlkYXRlKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChWZWN0b3I8UmVmUHRyPENT
U0ZvbnRGYWNlPj4qIGZhbWlseUxvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMgPSBtX2xvY2FsbHlJ
bnN0YWxsZWRGb250RmFjZXMuZ2V0KGZhbWlseSkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51
bUxvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMgPSBmYW1pbHlMb2NhbGx5SW5zdGFsbGVkRm9udEZh
Y2VzLT5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTG9j
YWxseUluc3RhbGxlZEZvbnRGYWNlczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQ1NTRm9udEZh
Y2UqIGNhbmRpZGF0ZSA9IGZhbWlseUxvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMtPmF0KGkpLmdl
dCgpOworICAgICAgICBpZiAoYXV0byogZmFjZXMgPSBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFj
ZXMuZ2V0KGZhbWlseSkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogKmZh
Y2VzKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNh
bmRpZGF0ZS0+dHJhaXRzTWFzaygpOwogICAgICAgICAgICAgICAgIGlmICgodHJhaXRzTWFzayAm
IEZvbnRTdHlsZU5vcm1hbE1hc2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAmIEZvbnRTdHls
ZU5vcm1hbE1hc2spKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTUyMyw5ICs1
MjgsOCBAQCBDU1NTZWdtZW50ZWRGb250RmFjZSogQ1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFj
ZShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZQogCiAgICAgICAgIGRlc2lyZWRUcmFpdHNN
YXNrRm9yQ29tcGFyaXNvbiA9IHRyYWl0c01hc2s7CiAgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQo
Y2FuZGlkYXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRpZGF0ZUZvbnRGYWNlcy5lbmQoKSwgY29t
cGFyZUZvbnRGYWNlcyk7Ci0gICAgICAgIHVuc2lnbmVkIG51bUNhbmRpZGF0ZXMgPSBjYW5kaWRh
dGVGb250RmFjZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
Q2FuZGlkYXRlczsgKytpKQotICAgICAgICAgICAgZmFjZS0+YXBwZW5kRm9udEZhY2UoY2FuZGlk
YXRlRm9udEZhY2VzW2ldKTsKKyAgICAgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRh
dGVGb250RmFjZXMpCisgICAgICAgICAgICBmYWNlLT5hcHBlbmRGb250RmFjZShjYW5kaWRhdGUu
Z2V0KCkpOwogICAgIH0KICAgICByZXR1cm4gZmFjZS5nZXQoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuaAppbmRleCA0YmU3NDA4MTI5OTY0NTRlOWZlYjMwZTk3ZTA0NWUwMjZl
NWM3MzJjLi5jNzQzMjM1ZjJjNThlOTJiYTM2OTJhYWIwZDI1ZGY4ZTVhZmI5NTc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCkBAIC04OSw4ICs4OSw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBiZWdpbkxvYWRUaW1lckZpcmVkKCk7CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVu
dDsKLSAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZWZQdHI8Q1NT
Rm9udEZhY2U+Pj4sIENhc2VGb2xkaW5nSGFzaD4gbV9mb250RmFjZXM7Ci0gICAgSGFzaE1hcDxT
dHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPj4+LCBDYXNl
Rm9sZGluZ0hhc2g+IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlczsKKyAgICBIYXNoTWFwPFN0
cmluZywgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+Pj4sIENhc2VGb2xk
aW5nSGFzaD4gbV9mb250RmFjZXM7CisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0
cjxWZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4+LCBDYXNlRm9sZGluZ0hhc2g+IG1fbG9jYWxseUlu
c3RhbGxlZEZvbnRGYWNlczsKICAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEhh
c2hNYXA8dW5zaWduZWQsIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4+PiwgQ2FzZUZvbGRp
bmdIYXNoPiBtX2ZvbnRzOwogICAgIEhhc2hTZXQ8Rm9udFNlbGVjdG9yQ2xpZW50Kj4gbV9jbGll
bnRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZh
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAppbmRl
eCAyZjM3ZDZhMGZkMDk2NGEwOTk3OWU2ZGY3ZTlmN2YxODI5OWEwNjc3Li41Y2JmY2E0ZTdiNzIw
MTA5OTVhODExMmJkYjQ3NmI1ZGRlYTVkZGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
ZWdtZW50ZWRGb250RmFjZS5jcHAKQEAgLTQ1LDkgKzQ1LDggQEAgQ1NTU2VnbWVudGVkRm9udEZh
Y2U6OkNTU1NlZ21lbnRlZEZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQog
Q1NTU2VnbWVudGVkRm9udEZhY2U6On5DU1NTZWdtZW50ZWRGb250RmFjZSgpCiB7CiAgICAgcHJ1
bmVUYWJsZSgpOwotICAgIHVuc2lnbmVkIHNpemUgPSBtX2ZvbnRGYWNlcy5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgbV9mb250RmFjZXNb
aV0tPnJlbW92ZWRGcm9tU2VnbWVudGVkRm9udEZhY2UodGhpcyk7CisgICAgZm9yIChhdXRvJiBm
YWNlIDogbV9mb250RmFjZXMpCisgICAgICAgIGZhY2UtPnJlbW92ZWRGcm9tU2VnbWVudGVkRm9u
dEZhY2UodGhpcyk7CiB9CiAKIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZhY2U6OnBydW5lVGFibGUo
KQpAQCAtNTgsOSArNTcsOCBAQCB2b2lkIENTU1NlZ21lbnRlZEZvbnRGYWNlOjpwcnVuZVRhYmxl
KCkKIGJvb2wgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmlzVmFsaWQoKSBjb25zdAogewogICAgIC8v
IFZhbGlkIGlmIGF0IGxlYXN0IG9uZSBmb250IGZhY2UgaXMgdmFsaWQuCi0gICAgdW5zaWduZWQg
c2l6ZSA9IG1fZm9udEZhY2VzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX2ZvbnRGYWNlc1tpXS0+aXNWYWxpZCgpKQorICAg
IGZvciAoYXV0byYgZmFjZSA6IG1fZm9udEZhY2VzKSB7CisgICAgICAgIGlmIChmYWNlLT5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtODQsMTEgKzgyLDExIEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRMb2Fk
ZWQoQ1NTRm9udEZhY2UqKQogI2VuZGlmCiB9CiAKLXZvaWQgQ1NTU2VnbWVudGVkRm9udEZhY2U6
OmFwcGVuZEZvbnRGYWNlKFBhc3NSZWZQdHI8Q1NTRm9udEZhY2U+IGZvbnRGYWNlKQordm9pZCBD
U1NTZWdtZW50ZWRGb250RmFjZTo6YXBwZW5kRm9udEZhY2UoUmVmPENTU0ZvbnRGYWNlPiYmIGZv
bnRGYWNlKQogewogICAgIHBydW5lVGFibGUoKTsKICAgICBmb250RmFjZS0+YWRkZWRUb1NlZ21l
bnRlZEZvbnRGYWNlKHRoaXMpOwotICAgIG1fZm9udEZhY2VzLmFwcGVuZChmb250RmFjZSk7Cisg
ICAgbV9mb250RmFjZXMuYXBwZW5kKFdURjo6bW92ZShmb250RmFjZSkpOwogfQogCiBzdGF0aWMg
dm9pZCBhcHBlbmRGb250V2l0aEludmFsaWRVbmljb2RlUmFuZ2VJZkxvYWRpbmcoRm9udFJhbmdl
cyYgcmFuZ2VzLCBSZWY8Rm9udD4mJiBmb250LCBjb25zdCBWZWN0b3I8Q1NTRm9udEZhY2U6OlVu
aWNvZGVSYW5nZT4mIHVuaWNvZGVSYW5nZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50
ZWRGb250RmFjZS5oCmluZGV4IGY4NjlmZjZkYTBiN2VmYTJlNDViZjEyNjg1NDUzMmM0ODY1NTY1
MmMuLjVmZmViYjE4Y2E4MGRkOGQzY2E5MzJkNjgwOTQxOGMxZDNlNWJjZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCkBAIC00OCw3ICs0OCw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZm9udExvYWRlZChDU1NGb250RmFjZSopOwogCi0gICAgdm9pZCBhcHBl
bmRGb250RmFjZShQYXNzUmVmUHRyPENTU0ZvbnRGYWNlPik7CisgICAgdm9pZCBhcHBlbmRGb250
RmFjZShSZWY8Q1NTRm9udEZhY2U+JiYpOwogCiAgICAgRm9udFJhbmdlcyBmb250UmFuZ2VzKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYpOwogCkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAKICAg
ICBDU1NGb250U2VsZWN0b3IqIG1fZm9udFNlbGVjdG9yOwogICAgIEhhc2hNYXA8Rm9udERlc2Ny
aXB0aW9uS2V5LCBGb250UmFuZ2VzLCBGb250RGVzY3JpcHRpb25LZXlIYXNoLCBXVEY6OlNpbXBs
ZUNsYXNzSGFzaFRyYWl0czxGb250RGVzY3JpcHRpb25LZXk+PiBtX2Rlc2NyaXB0aW9uVG9SYW5n
ZXNNYXA7Ci0gICAgVmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4sIDE+IG1fZm9udEZhY2VzOwor
ICAgIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+LCAxPiBtX2ZvbnRGYWNlczsKICNpZiBFTkFCTEUo
Rk9OVF9MT0FEX0VWRU5UUykKICAgICBWZWN0b3I8UmVmUHRyPExvYWRGb250Q2FsbGJhY2s+PiBt
X2NhbGxiYWNrczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UHJvcGVydGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcApp
bmRleCAyYzgxZDgwNzE1ZDRlYTBkNDM3MWMzODIyOGM1MTg4NDliYzYyMWE5Li41ODcyM2UxZWEy
YjllYjY2ZjlkMjY2MjJjMTJjMmM0NzhlZjVlMzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQ
cm9wZXJ0aWVzLmNwcApAQCAtNTgzLDcgKzU4Myw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IFN0
eWxlUHJvcGVydGllczo6Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
CiB7CiAgICAgaW50IGZvdW5kUHJvcGVydHlJbmRleCA9IGZpbmRQcm9wZXJ0eUluZGV4KHByb3Bl
cnR5SUQpOwogICAgIGlmIChmb3VuZFByb3BlcnR5SW5kZXggPT0gLTEpCi0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcHJvcGVydHlBdChmb3Vu
ZFByb3BlcnR5SW5kZXgpLnZhbHVlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmgKaW5kZXggM2EwNjg2Yzk4ZjAwMjcxMmNlODJkNTRlMzg4ZjFi
NDBmZDU0MmVmNi4uMjdiNTAwZTkxYzk4MTdlZWNiMmNkZTY4YzMwMDE3NGI5YjJkYzA1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTE2Niw3
ICsxNjYsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGV4aXN0cyBzbyBDU1NG
b250U2VsZWN0b3IgY2FuIGhhdmUgYSB1bmlmaWVkIG5vdGlvbiBvZiBwcmVpbnN0YWxsZWQgZm9u
dHMgYW5kIEBmb250LWZhY2UuCiAgICAgLy8gSXQgY29tZXMgaW50byBwbGF5IHdoZW4geW91IGNy
ZWF0ZSBhbiBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWlseSBuYW1lIGFzIGEgcHJlaW5z
dGFsbGVkIGZvbnQuCi0gICAgdm9pZCBnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJp
bmcmLCBWZWN0b3I8dW5zaWduZWQ+Jik7CisgICAgVmVjdG9yPEZvbnRUcmFpdHNNYXNrPiBnZXRU
cmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0
IEF0b21pY1N0cmluZyYsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCmluZGV4IGQ4N2Q3OTgwMTY4
ZmIyMGRiZDRlYjU3ZjBkZjRmNDhiZTI1NWY0MjAuLjM4Njg0M2M1NDRiOWU3NTc3N2YwOWE0YTI3
MzZkMmEzYTNlN2Q4OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKQEAgLTIzNyw3ICsyMzcs
NyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uKQogICAgIHJldHVybiBmb250LnJlbGVhc2UoKTsKIH0KIAotdm9p
ZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCitWZWN0b3I8Rm9udFRyYWl0c01h
c2s+IEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHlOYW1lKQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZVN0ciA9IGZh
bWlseU5hbWUuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKICAgICBDRlN0cmluZ1JlZiBmYW1p
bHlOYW1lU3RyUHRyID0gZmFtaWx5TmFtZVN0ci5nZXQoKTsKQEAgLTI0NSwxMiArMjQ1LDE0IEBA
IHZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZh
bWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25lCiAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JS
ZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0
dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOwogICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBt
YXRjaGVkRGVzY3JpcHRvcnMgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVNYXRjaGlu
Z0ZvbnREZXNjcmlwdG9ycyhmb250RGVzY3JpcHRvci5nZXQoKSwgbnVsbHB0cikpOwogICAgIGlm
ICghbWF0Y2hlZERlc2NyaXB0b3JzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBDRkluZGV4IG51bU1hdGNoZXMgPSBDRkFycmF5R2V0Q291bnQobWF0Y2hlZERl
c2NyaXB0b3JzLmdldCgpKTsKICAgICBpZiAoIW51bU1hdGNoZXMpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIFZlY3RvcjxGb250VHJhaXRzTWFzaz4gdHJhaXRz
TWFza3M7CisgICAgdHJhaXRzTWFza3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1NYXRjaGVz
KTsKICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBudW1NYXRjaGVzOyArK2kpIHsKICAgICAg
ICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gdHJhaXRzID0gYWRvcHRDRigoQ0ZEaWN0aW9u
YXJ5UmVmKUNURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKChDVEZvbnREZXNjcmlwdG9yUmVm
KUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgobWF0Y2hlZERlc2NyaXB0b3JzLmdldCgpLCBpKSwga0NU
Rm9udFRyYWl0c0F0dHJpYnV0ZSkpOwogICAgICAgICBDRk51bWJlclJlZiByZXN1bHRSZWYgPSAo
Q0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodHJhaXRzLmdldCgpLCBrQ1RGb250U3lt
Ym9saWNUcmFpdCk7CkBAIC0yNjAsOSArMjYyLDEwIEBAIHZvaWQgRm9udENhY2hlOjpnZXRUcmFp
dHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25l
CiAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKHJlc3VsdFJlZiwga0NGTnVtYmVySW50VHlw
ZSwgJnN5bWJvbGljVHJhaXRzKTsKICAgICAgICAgICAgIENHRmxvYXQgd2VpZ2h0ID0gMDsKICAg
ICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUod2VpZ2h0UmVmLCBrQ0ZOdW1iZXJDR0Zsb2F0VHlw
ZSwgJndlaWdodCk7Ci0gICAgICAgICAgICB0cmFpdHNNYXNrcy5hcHBlbmQodG9UcmFpdHNNYXNr
KHN5bWJvbGljVHJhaXRzLCB3ZWlnaHQpKTsKKyAgICAgICAgICAgIHRyYWl0c01hc2tzLnVuY2hl
Y2tlZEFwcGVuZCh0b1RyYWl0c01hc2soc3ltYm9saWNUcmFpdHMsIHdlaWdodCkpOwogICAgICAg
ICB9CiAgICAgfQorICAgIHJldHVybiB0cmFpdHNNYXNrczsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENh
Y2hlRnJlZVR5cGUuY3BwCmluZGV4IDdiNjAzOTgzNzRkNDk4MjdjOTZlNjVjZjQwNzEwMzMzMDI3
MTkyNzkuLjgwOTAzZTQ5Zjg4ZTI3ZmFmZDA4OTA2N2M2YjZkMDgxZmQ1ZWI0YmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZy
ZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTEzNyw4ICsxMzcsOSBAQCBSZWY8Rm9udD4gRm9u
dENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aQogICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIHRp
bWVzU3RyLCBmYWxzZSk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShj
b25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+JikKK1ZlY3RvcjxGb250VHJhaXRz
TWFzaz4gRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmKQog
eworICAgIHJldHVybiB7IH07CiB9CiAKIHN0YXRpYyBTdHJpbmcgZ2V0RmFtaWx5TmFtZVN0cmlu
Z0Zyb21GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4IGFm
YTQ4NDFlZGY5NjlkZjJlNGRiMTU0NTUwY2ExZmQ4YzIzMTYxNTguLmZlMDJkMjU1YmRkOGY3M2Vi
NmM4MTU2OTc5YWEzMmUzN2VmOTZlZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCkBAIC01NDIsNyArNTQyLDcgQEAg
c3RhdGljIGludCBDQUxMQkFDSyB0cmFpdHNJbkZhbWlseUVudW1Qcm9jKENPTlNUIExPR0ZPTlQq
IGxvZ0ZvbnQsIENPTlNUIFRFWFRNRVQKICAgICBwcm9jRGF0YS0+bV90cmFpdHNNYXNrcy5hZGQo
dHJhaXRzTWFzayk7CiAgICAgcmV0dXJuIDE7CiB9Ci12b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRz
SW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5zaWduZWQ+
JiB0cmFpdHNNYXNrcykKK1ZlY3RvcjxGb250VHJhaXRzTWFzaz4gRm9udENhY2hlOjpnZXRUcmFp
dHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgSFduZERD
IGhkYygwKTsKIApAQCAtNTU1LDcgKzU1NSwxMSBAQCB2b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRz
SW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5zaWduZQog
CiAgICAgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YSBwcm9jRGF0YShmYW1pbHlOYW1lKTsKICAgICBF
bnVtRm9udEZhbWlsaWVzRXgoaGRjLCAmbG9nRm9udCwgdHJhaXRzSW5GYW1pbHlFbnVtUHJvYywg
cmVpbnRlcnByZXRfY2FzdDxMUEFSQU0+KCZwcm9jRGF0YSksIDApOwotICAgIGNvcHlUb1ZlY3Rv
cihwcm9jRGF0YS5tX3RyYWl0c01hc2tzLCB0cmFpdHNNYXNrcyk7CisgICAgVmVjdG9yPEZvbnRU
cmFpdHNNYXNrPiByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocHJv
Y0RhdGEubV90cmFpdHNNYXNrcy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgbWFzayA6IHBy
b2NEYXRhLm1fdHJhaXRzTWFza3MpCisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoc3Rh
dGljX2Nhc3Q8Rm9udFRyYWl0c01hc2s+KG1hc2spKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259751</attachid>
            <date>2015-08-24 00:40:14 -0700</date>
            <delta_ts>2015-08-24 00:50:53 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-148355-20150824004006.patch</filename>
            <type>text/plain</type>
            <size>33323</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4ODUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDNmNGQ4MjJiNWNlZmU1
OWMyMWE3NDBhNjI5MTk3OTI5NzYyNTc2Mi4uZjBlYzcxYWE4OWNiNDRkYTJmYmIzYzM1NDQ0MGQy
MGY2MzA4MzgyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE1LTA4LTIzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQGZvbnQtZmFj
ZSByZWxhdGVkIGNsZWFudXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0ODM1NQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVwIG11Y2ggb2Ygb3VyIGNvZGUgcmVsYXRlZCB0byB3
ZWIgZm9udHMuIEluIGdlbmVyYWwsIGl0CisgICAgICAgIG1pZ3JhdGVzIHRvIHVzaW5nIEMrKyBm
b3ItZWFjaCBzdHlsZSBsb29wcywgdXNlcyBSZWYgaW5zdGVhZCBvZiBSZWZQdHIgd2hlbgorICAg
ICAgICB0aGluZ3MgY2FuJ3QgYmUgbnVsbHB0ciwgbWlncmF0ZXMgdG8gQysrIFJ2YWx1ZS1yZWZl
cmVuY2VzIGluc3RlYWQgb2YKKyAgICAgICAgUGFzc1JlZlB0ciwgYW5kIHJlZmFjdG9ycyBDU1NG
b250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSgpIHRvIHVzZSBoZWxwZXIKKyAgICAgICAgZnVu
Y3Rpb25zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9udExvYWRlZCk6IFVzZSBhIEMrKyBmb3ItZWFjaCBsb29w
LgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9u
dEZhY2U6OmNyZWF0ZSk6IFVzZSBDKysgUnZhbHVlLXJlZmVyZW5jZXMgaW5zdGVhZCBvZgorICAg
ICAgICBQYXNzUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6OkNTU0ZvbnRG
YWNlKTogRGl0dG8uCisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlVHJhaXRzTWFzayk6IE1pZ3JhdGVkIGEgY2h1bmsgb2YKKyAgICAg
ICAgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoKSBpbnRvIHRoaXMgaGVscGVyIGZ1
bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9udEZhY2UpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OmZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZSk6IENhbGwgdGhlIG5ld2x5
LWNyZWF0ZWQgaGVscGVyCisgICAgICAgIGZ1bmN0aW9ucy4gSW4gYWRkaXRpb24sIG1pZ3JhdGUg
dG8gUmVmcyBpbnN0ZWFkIG9mIFJlZlB0cnMuCisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlRm9u
dEZhY2VzKTogTWlncmF0ZSB0byByZWZlcmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisgICAg
ICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmdldEZvbnRGYWNlKTogTWlncmF0ZSB0byBS
ZWZzIGluc3RlYWQgb2YKKyAgICAgICAgUmVmUHRycy4gQWxzbyB1c2UgQysrIGZvci1lYWNoIGxv
b3BzLgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuaDoKKyAgICAgICAgKiBjc3MvQ1NT
U2VnbWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9u
dEZhY2U6On5DU1NTZWdtZW50ZWRGb250RmFjZSk6IFVzZSBDKysgZm9yLWVhY2gKKyAgICAgICAg
bG9vcHMuCisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6aXNWYWxpZCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OmFwcGVuZEZv
bnRGYWNlKTogTWlncmF0ZSB0byBSdmFsdWUtCisgICAgICAgIHJlZmVyZW5jZXMgaW5zdGVhZCBv
ZiBQYXNzUmVmUHRyLgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBSZXR1cm4gdGhlIHJlc3VsdCBpbnN0ZWFk
IG9mIGJlaW5nCisgICAgICAgIHBhc3NlZCBhbiBvdXQgcGFyYW1ldGVyLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBEaXR0by4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRyYWl0c0luRmFtaWx5RW51bVByb2MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOiBEaXR0by4KKwogMjAxNS0wOC0yMyAgQW5keSBF
c3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW0NvbnRlbnQgRmlsdGVyaW5nXSBS
RUdSRVNTSU9OIChyMTgyMzU2KTogUHJvdmlzaW9uYWwgVVJMIGlzIGluY29ycmVjdCBpbiBkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSB3aGVuIENvbnRl
bnQgRmlsdGVyaW5nIGlzIGVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCmluZGV4
IGY2MmE1ZmJkOTdlZTY3MDIwNzdjYzhhYzYwZmQzN2ZhZGE4YTQ5MWUuLjQyMTRhY2RlYjdlMmVl
ZmZjNzI0MGQ5MGU0MWZiOGQ5OWQzZTNlZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNw
cApAQCAtOTgsOSArOTgsOCBAQCB2b2lkIENTU0ZvbnRGYWNlOjpmb250TG9hZGVkKENTU0ZvbnRG
YWNlU291cmNlKiBzb3VyY2UpCiAgICAgfQogI2VuZGlmCiAKLSAgICBIYXNoU2V0PENTU1NlZ21l
bnRlZEZvbnRGYWNlKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2VnbWVudGVkRm9udEZhY2VzLmVuZCgp
OwotICAgIGZvciAoSGFzaFNldDxDU1NTZWdtZW50ZWRGb250RmFjZSo+OjppdGVyYXRvciBpdCA9
IG1fc2VnbWVudGVkRm9udEZhY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
KCppdCktPmZvbnRMb2FkZWQodGhpcyk7CisgICAgZm9yIChhdXRvKiBmYWNlIDogbV9zZWdtZW50
ZWRGb250RmFjZXMpCisgICAgICAgIGZhY2UtPmZvbnRMb2FkZWQodGhpcyk7CiAKICNpZiBFTkFC
TEUoRk9OVF9MT0FEX0VWRU5UUykKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS5mb250TG9hZEV2ZW50c0VuYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlLmgKaW5kZXggZGI2N2JjNjY0MzNiNWY1MDA4ZWFlZGY1ZDliMTUwYTkwMTZjYmQyNS4uOWVi
MDIxYTNmMzk2YjgxNDgyNmFkODkyYmYyNGZhOTA5NGQxZjgzZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgRm9udDsKIAogY2xhc3MgQ1NTRm9udEZh
Y2UgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NGb250RmFjZT4gewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Q1NTRm9udEZhY2U+IGNyZWF0ZShGb250VHJhaXRzTWFzayB0cmFpdHNNYXNrLCBQYXNz
UmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4gcnVsZSwgYm9vbCBpc0xvY2FsRmFsbGJhY2sgPSBmYWxz
ZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGb250RmFjZSh0cmFpdHNNYXNrLCBydWxlLCBp
c0xvY2FsRmFsbGJhY2spKTsgfQorICAgIHN0YXRpYyBSZWY8Q1NTRm9udEZhY2U+IGNyZWF0ZShG
b250VHJhaXRzTWFzayB0cmFpdHNNYXNrLCBSZWZQdHI8Q1NTRm9udEZhY2VSdWxlPiYmIHJ1bGUs
IGJvb2wgaXNMb2NhbEZhbGxiYWNrID0gZmFsc2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NT
Rm9udEZhY2UodHJhaXRzTWFzaywgV1RGOjptb3ZlKHJ1bGUpLCBpc0xvY2FsRmFsbGJhY2spKTsg
fQogCiAgICAgRm9udFRyYWl0c01hc2sgdHJhaXRzTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
aXRzTWFzazsgfQogCkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRl
OgotICAgIENTU0ZvbnRGYWNlKEZvbnRUcmFpdHNNYXNrIHRyYWl0c01hc2ssIFBhc3NSZWZQdHI8
Q1NTRm9udEZhY2VSdWxlPiBydWxlLCBib29sIGlzTG9jYWxGYWxsYmFjaykKKyAgICBDU1NGb250
RmFjZShGb250VHJhaXRzTWFzayB0cmFpdHNNYXNrLCBSZWZQdHI8Q1NTRm9udEZhY2VSdWxlPiYm
IHJ1bGUsIGJvb2wgaXNMb2NhbEZhbGxiYWNrKQogICAgICAgICA6IG1fdHJhaXRzTWFzayh0cmFp
dHNNYXNrKQogICAgICAgICAsIG1fYWN0aXZlU291cmNlKDApCiAgICAgICAgICwgbV9pc0xvY2Fs
RmFsbGJhY2soaXNMb2NhbEZhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmNwcAppbmRleCAyNjlkZGZjZGE3ZWVlOGNmNTljMDNiYWExMWNiMTcxZDVkNDhkYjgxLi4yMDJj
ZmMwOTVhNjdlOGU2YTUyZTUwNzg1OWI3MGYyYzkzOTliOGRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmNwcApAQCAtODQsMzEgKzg0LDEzIEBAIGJvb2wgQ1NTRm9udFNlbGVj
dG9yOjppc0VtcHR5KCkgY29uc3QKICAgICByZXR1cm4gbV9mb250cy5pc0VtcHR5KCk7CiB9CiAK
LXZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9u
dEZhY2UqIGZvbnRGYWNlUnVsZSwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRT
aGFkb3dUcmVlKQorc3RhdGljIE9wdGlvbmFsPEZvbnRUcmFpdHNNYXNrPiBjb21wdXRlVHJhaXRz
TWFzayhjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlKQogewotICAgIC8vIE9idGFpbiB0aGUg
Zm9udC1mYW1pbHkgcHJvcGVydHkgYW5kIHRoZSBzcmMgcHJvcGVydHkuICBCb3RoIG11c3QgYmUg
ZGVmaW5lZC4KLSAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlID0gZm9udEZhY2VSdWxl
LT5wcm9wZXJ0aWVzKCk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBmb250RmFtaWx5ID0gc3R5bGUu
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gc3JjID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVNyYyk7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlUmFuZ2UgPSBzdHlsZS5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5VW5pY29kZVJhbmdlKTsKLSAgICBpZiAoIWlzPENTU1ZhbHVlTGlz
dD4oZm9udEZhbWlseS5nZXQoKSkgfHwgIWlzPENTU1ZhbHVlTGlzdD4oc3JjLmdldCgpKSB8fCAo
dW5pY29kZVJhbmdlICYmICFpczxDU1NWYWx1ZUxpc3Q+KCp1bmljb2RlUmFuZ2UpKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQ1NTVmFsdWVMaXN0JiBmYW1pbHlMaXN0ID0gZG93bmNhc3Q8Q1NT
VmFsdWVMaXN0PigqZm9udEZhbWlseSk7Ci0gICAgaWYgKCFmYW1pbHlMaXN0Lmxlbmd0aCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NWYWx1ZUxpc3QmIHNyY0xpc3QgPSBkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KCpzcmMpOwotICAgIGlmICghc3JjTGlzdC5sZW5ndGgoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQ1NTVmFsdWVMaXN0KiByYW5nZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KHVuaWNvZGVSYW5nZS5nZXQoKSk7Ci0KICAgICB1bnNpZ25lZCB0cmFpdHNNYXNrID0g
MDsKIAogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRTdHlsZSA9IHN0eWxlLmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpKSB7CiAgICAgICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpmb250U3R5bGUpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CiAKICAgICAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKmZvbnRTdHlsZSkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2UgQ1NT
VmFsdWVOb3JtYWw6CkBAIC0xMjYsNyArMTA4LDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFk
ZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlLCBib28K
IAogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRXZWlnaHQgPSBzdHlsZS5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkpIHsKICAgICAgICAgaWYgKCFpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKmZvbnRXZWlnaHQpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CiAKICAgICAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKmZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENT
U1ZhbHVlQm9sZDoKQEAgLTE3MSwxMiArMTUzLDEyIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjph
ZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSwgYm9v
CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoZm9udFZhcmlhbnQucmVsZWFzZU5vbk51bGwoKSk7
CiAgICAgICAgICAgICBmb250VmFyaWFudCA9IGxpc3QucmVsZWFzZU5vbk51bGwoKTsKICAgICAg
ICAgfSBlbHNlIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqZm9udFZhcmlhbnQpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAKICAgICAgICAgQ1NTVmFs
dWVMaXN0JiB2YXJpYW50TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZvbnRWYXJpYW50
KTsKICAgICAgICAgdW5zaWduZWQgbnVtVmFyaWFudHMgPSB2YXJpYW50TGlzdC5sZW5ndGgoKTsK
ICAgICAgICAgaWYgKCFudW1WYXJpYW50cykKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1WYXJpYW50czsgKytpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YXJpYW50TGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKS0+Z2V0VmFs
dWVJRCgpKSB7CkBAIC0xOTMsOCArMTc1LDIwIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRG
b250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSwgYm9vCiAg
ICAgfSBlbHNlCiAgICAgICAgIHRyYWl0c01hc2sgfD0gRm9udFZhcmlhbnRNYXNrOwogCi0gICAg
Ly8gRWFjaCBpdGVtIGluIHRoZSBzcmMgcHJvcGVydHkncyBsaXN0IGlzIGEgc2luZ2xlIENTU0Zv
bnRGYWNlU291cmNlLiBQdXQgdGhlbSBhbGwgaW50byBhIENTU0ZvbnRGYWNlLgotICAgIFJlZlB0
cjxDU1NGb250RmFjZT4gZm9udEZhY2U7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvbnRUcmFp
dHNNYXNrPih0cmFpdHNNYXNrKTsKK30KKworc3RhdGljIFJlZjxDU1NGb250RmFjZT4gY3JlYXRl
Rm9udEZhY2UoQ1NTVmFsdWVMaXN0JiBzcmNMaXN0LCBGb250VHJhaXRzTWFzayB0cmFpdHNNYXNr
LCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1
bGUsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSkKK3sKKyAg
ICBSZWZQdHI8Q1NTRm9udEZhY2VSdWxlPiBydWxlOworI2lmIEVOQUJMRShGT05UX0xPQURfRVZF
TlRTKQorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEyMTE2IC0gVGhpcyBDU1NGb250RmFjZVJ1bGUgaGFzIG5vIHBhcmVudC4KKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5mb250TG9hZEV2ZW50c0Vu
YWJsZWQoKSkKKyAgICAgICAgcnVsZSA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q1NTRm9udEZhY2VS
dWxlPihmb250RmFjZVJ1bGUtPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGZvbnRGYWNlUnVsZSk7CisjZW5kaWYKKyAgICBSZWY8Q1NTRm9udEZhY2U+IGZv
bnRGYWNlID0gQ1NTRm9udEZhY2U6OmNyZWF0ZSh0cmFpdHNNYXNrLCBXVEY6Om1vdmUocnVsZSkp
OwogCiAgICAgaW50IHNyY0xlbmd0aCA9IHNyY0xpc3QubGVuZ3RoKCk7CiAKQEAgLTIwOSwxMCAr
MjAzLDEwIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5
bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSwgYm9vCiAgICAgICAgIGZvdW5kU1ZHRm9udCA9
IGl0ZW0uaXNTVkdGb250RmFjZVNyYygpIHx8IGl0ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCk7CiAj
ZW5kaWYKICAgICAgICAgaWYgKCFpdGVtLmlzTG9jYWwoKSkgewotICAgICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gbV9kb2N1bWVudCA/IG1fZG9jdW1lbnQtPmZyYW1lKCkgPyAmbV9kb2N1
bWVudC0+ZnJhbWUoKS0+c2V0dGluZ3MoKSA6IDAgOiAwOworICAgICAgICAgICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+ZnJhbWUoKSA/ICZkb2N1bWVudC0+ZnJh
bWUoKS0+c2V0dGluZ3MoKSA6IDAgOiAwOwogICAgICAgICAgICAgYm9vbCBhbGxvd0Rvd25sb2Fk
aW5nID0gZm91bmRTVkdGb250IHx8IChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+ZG93bmxvYWRhYmxl
QmluYXJ5Rm9udHNFbmFibGVkKCkpOwotICAgICAgICAgICAgaWYgKGFsbG93RG93bmxvYWRpbmcg
JiYgaXRlbS5pc1N1cHBvcnRlZEZvcm1hdCgpICYmIG1fZG9jdW1lbnQpIHsKLSAgICAgICAgICAg
ICAgICBDYWNoZWRGb250KiBjYWNoZWRGb250ID0gaXRlbS5jYWNoZWRGb250KG1fZG9jdW1lbnQs
IGZvdW5kU1ZHRm9udCwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7
CisgICAgICAgICAgICBpZiAoYWxsb3dEb3dubG9hZGluZyAmJiBpdGVtLmlzU3VwcG9ydGVkRm9y
bWF0KCkgJiYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBDYWNoZWRGb250KiBjYWNoZWRG
b250ID0gaXRlbS5jYWNoZWRGb250KGRvY3VtZW50LCBmb3VuZFNWR0ZvbnQsIGlzSW5pdGlhdGlu
Z0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOwogICAgICAgICAgICAgICAgIGlmIChjYWNo
ZWRGb250KSB7CiAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8
Q1NTRm9udEZhY2VTb3VyY2U+KGl0ZW0ucmVzb3VyY2UoKSwgY2FjaGVkRm9udCk7CiAjaWYgRU5B
QkxFKFNWR19GT05UUykKQEAgLTIyNSwxNiArMjE5LDYgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6
OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlLCBi
b28KICAgICAgICAgICAgIHNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3Vy
Y2U+KGl0ZW0ucmVzb3VyY2UoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWZvbnRGYWNl
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTRm9udEZhY2VSdWxlPiBydWxlOwotI2lmIEVOQUJM
RShGT05UX0xPQURfRVZFTlRTKQotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTIxMTYgLSBUaGlzIENTU0ZvbnRGYWNlUnVsZSBo
YXMgbm8gcGFyZW50LgotICAgICAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkuZm9udExvYWRFdmVudHNFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAg
cnVsZSA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlPihmb250RmFjZVJ1bGUt
PmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKLSNlbmRpZgotICAgICAgICAgICAgZm9udEZhY2UgPSBD
U1NGb250RmFjZTo6Y3JlYXRlKHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPih0cmFpdHNNYXNr
KSwgcnVsZSk7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoc291cmNlKSB7CiAjaWYgRU5BQkxF
KFNWR19GT05UUykKICAgICAgICAgICAgIHNvdXJjZS0+c2V0U1ZHRm9udEZhY2VFbGVtZW50KGl0
ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCkpOwpAQCAtMjQzLDkgKzIyNyw4MiBAQCB2b2lkIENTU0Zv
bnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250
RmFjZVJ1bGUsIGJvbwogICAgICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKGZvbnRGYWNlKTsK
KyAgICByZXR1cm4gZm9udEZhY2U7Cit9CisKK3N0YXRpYyBTdHJpbmcgZmFtaWx5TmFtZUZyb21Q
cmltaXRpdmUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZS5pc0ZvbnRGYW1pbHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmZvbnRGYW1pbHkoKS5mYW1p
bHlOYW1lOworICAgIGlmICghdmFsdWUuaXNWYWx1ZUlEKCkpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgcmF3IHRleHQgZm9yIGFsbCB0aGUgZ2VuZXJp
YyBmYW1pbHkgdHlwZXMsIHNpbmNlIEBmb250LWZhY2UgaXMgYSB3YXkgb2YgYWN0dWFsbHkKKyAg
ICAvLyBkZWZpbmluZyB3aGF0IGZvbnQgdG8gdXNlIGZvciB0aG9zZSB0eXBlcy4KKyAgICBzd2l0
Y2ggKHZhbHVlLmdldFZhbHVlSUQoKSkgeworICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAg
ICAgcmV0dXJuIHNlcmlmRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6CisgICAg
ICAgIHJldHVybiBzYW5zU2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6Cisg
ICAgICAgIHJldHVybiBjdXJzaXZlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5Ogor
ICAgICAgICByZXR1cm4gZmFudGFzeUZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNl
OgorICAgICAgICByZXR1cm4gbW9ub3NwYWNlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVXZWJr
aXRQaWN0b2dyYXBoOgorICAgICAgICByZXR1cm4gcGljdG9ncmFwaEZhbWlseTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4geyB9OworICAgIH0KK30KKworc3RhdGljIFZlY3RvcjxSZWY8
Q1NTRm9udEZhY2U+PiBjb25zdHJ1Y3RGYW1pbHlGb250RmFjZXMoY29uc3QgU3RyaW5nJiBmYW1p
bHlOYW1lLCBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+LCBDYXNlRm9s
ZGluZ0hhc2g+JiBsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzKQoreworICAgIGF1dG8gcmVzdWx0
ID0gVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+KCk7CisKKyAgICBBU1NFUlQoIWxvY2FsbHlJbnN0
YWxsZWRGb250RmFjZXMuY29udGFpbnMoZmFtaWx5TmFtZSkpOworCisgICAgVmVjdG9yPEZvbnRU
cmFpdHNNYXNrPiB0cmFpdHNNYXNrcyA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2V0VHJhaXRz
SW5GYW1pbHkoZmFtaWx5TmFtZSk7CisgICAgaWYgKCF0cmFpdHNNYXNrcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4+IGZhY2VzID0geyB9OworICAgICAgICBm
b3IgKGF1dG8gbWFzayA6IHRyYWl0c01hc2tzKSB7CisgICAgICAgICAgICBSZWY8Q1NTRm9udEZh
Y2U+IGZhY2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKG1hc2ssIG51bGxwdHIsIHRydWUpOworICAg
ICAgICAgICAgZmFjZS0+YWRkU291cmNlKHN0ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3Vy
Y2U+KGZhbWlseU5hbWUpKTsKKyAgICAgICAgICAgIEFTU0VSVChmYWNlLT5pc1ZhbGlkKCkpOwor
ICAgICAgICAgICAgZmFjZXMuYXBwZW5kKFdURjo6bW92ZShmYWNlKSk7CisgICAgICAgIH0KKyAg
ICAgICAgbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5hZGQoZmFtaWx5TmFtZSwgV1RGOjptb3Zl
KGZhY2VzKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQ1NTRm9udFNl
bGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNl
UnVsZSwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQorewor
ICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUgPSBmb250RmFjZVJ1bGUtPnByb3BlcnRp
ZXMoKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRGYW1pbHkgPSBzdHlsZS5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBz
cmMgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5U3JjKTsKKyAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHVuaWNvZGVSYW5nZSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NT
UHJvcGVydHlVbmljb2RlUmFuZ2UpOworICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pihmb250RmFt
aWx5LmdldCgpKSB8fCAhaXM8Q1NTVmFsdWVMaXN0PihzcmMuZ2V0KCkpIHx8ICh1bmljb2RlUmFu
Z2UgJiYgIWlzPENTU1ZhbHVlTGlzdD4oKnVuaWNvZGVSYW5nZSkpKQorICAgICAgICByZXR1cm47
CisKKyAgICBDU1NWYWx1ZUxpc3QmIGZhbWlseUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KCpmb250RmFtaWx5KTsKKyAgICBpZiAoIWZhbWlseUxpc3QubGVuZ3RoKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIENTU1ZhbHVlTGlzdCYgc3JjTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlz
dD4oKnNyYyk7CisgICAgaWYgKCFzcmNMaXN0Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBDU1NWYWx1ZUxpc3QqIHJhbmdlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odW5p
Y29kZVJhbmdlLmdldCgpKTsKIAotICAgIGlmIChmb250RmFjZSAmJiAhZm9udEZhY2UtPmlzVmFs
aWQoKSkKKyAgICBhdXRvIGNvbXB1dGVkVHJhaXRzTWFzayA9IGNvbXB1dGVUcmFpdHNNYXNrKHN0
eWxlKTsKKyAgICBpZiAoIWNvbXB1dGVkVHJhaXRzTWFzaykKKyAgICAgICAgcmV0dXJuOworICAg
IGF1dG8gdHJhaXRzTWFzayA9IGNvbXB1dGVkVHJhaXRzTWFzay52YWx1ZSgpOworCisgICAgUmVm
PENTU0ZvbnRGYWNlPiBmb250RmFjZSA9IGNyZWF0ZUZvbnRGYWNlKHNyY0xpc3QsIHRyYWl0c01h
c2ssIG1fZG9jdW1lbnQsIGZvbnRGYWNlUnVsZSwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFn
ZW50U2hhZG93VHJlZSk7CisgICAgaWYgKCFmb250RmFjZS0+aXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAocmFuZ2VMaXN0KSB7CkBAIC0yNTYsNjUgKzMxMywxNyBAQCB2b2lk
IENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNl
KiBmb250RmFjZVJ1bGUsIGJvbwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gSGFzaCB1bmRl
ciBldmVyeSBzaW5nbGUgZmFtaWx5IG5hbWUuCiAgICAgZm9yIChhdXRvJiBpdGVtIDogZmFtaWx5
TGlzdCkgewotICAgICAgICBhdXRvJiB2YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PihpdGVtLmdldCgpKTsKLSAgICAgICAgU3RyaW5nIGZhbWlseU5hbWU7Ci0gICAgICAgIGlmICh2
YWx1ZS5pc0ZvbnRGYW1pbHkoKSkgewotICAgICAgICAgICAgZmFtaWx5TmFtZSA9IHZhbHVlLmZv
bnRGYW1pbHkoKS5mYW1pbHlOYW1lOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzVmFsdWVJ
RCgpKSB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgcmF3IHRleHQgZm9yIGFs
bCB0aGUgZ2VuZXJpYyBmYW1pbHkgdHlwZXMsIHNpbmNlIEBmb250LWZhY2UgaXMgYSB3YXkgb2Yg
YWN0dWFsbHkKLSAgICAgICAgICAgIC8vIGRlZmluaW5nIHdoYXQgZm9udCB0byB1c2UgZm9yIHRo
b3NlIHR5cGVzLgotICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5nZXRWYWx1ZUlEKCkpIHsKLSAg
ICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2VyaWY6Ci0gICAgICAgICAgICAgICAgICAgIGZh
bWlseU5hbWUgPSBzZXJpZkZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNhbnNTZXJpZjoKLSAgICAgICAgICAgICAgICAgICAg
ZmFtaWx5TmFtZSA9IHNhbnNTZXJpZkZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6Ci0gICAgICAgICAgICAgICAg
ICAgIGZhbWlseU5hbWUgPSBjdXJzaXZlRmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKLSAgICAgICAgICAgICAg
ICAgICAgZmFtaWx5TmFtZSA9IGZhbnRhc3lGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6Ci0gICAgICAgICAg
ICAgICAgICAgIGZhbWlseU5hbWUgPSBtb25vc3BhY2VGYW1pbHk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dyYXBo
OgotICAgICAgICAgICAgICAgICAgICBmYW1pbHlOYW1lID0gcGljdG9ncmFwaEZhbWlseTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQorICAgICAg
ICBTdHJpbmcgZmFtaWx5TmFtZSA9IGZhbWlseU5hbWVGcm9tUHJpbWl0aXZlKGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKSk7CiAgICAgICAgIGlmIChmYW1pbHlOYW1lLmlz
RW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPj4+JiBmYW1pbHlGb250RmFjZXMgPSBtX2ZvbnRG
YWNlcy5hZGQoZmFtaWx5TmFtZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICBp
ZiAoIWZhbWlseUZvbnRGYWNlcykgewotICAgICAgICAgICAgZmFtaWx5Rm9udEZhY2VzID0gc3Rk
OjptYWtlX3VuaXF1ZTxWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPj4+KCk7CisgICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9mb250RmFjZXMuYWRkKGZhbWlseU5hbWUsIFZlY3RvcjxSZWY8Q1NT
Rm9udEZhY2U+PigpKTsKKyAgICAgICAgYXV0byYgZmFtaWx5Rm9udEZhY2VzID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAg
ICAgICAgICAgZmFtaWx5Rm9udEZhY2VzID0gY29uc3RydWN0RmFtaWx5Rm9udEZhY2VzKGZhbWls
eU5hbWUsIG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcyk7CiAKLSAgICAgICAgICAgIEFTU0VS
VCghbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLmNvbnRhaW5zKGZhbWlseU5hbWUpKTsKLQot
ICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBsb2NhbGx5SW5zdGFsbGVkRm9udHNUcmFpdHNN
YXNrczsKLSAgICAgICAgICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2V0VHJhaXRzSW5GYW1p
bHkoZmFtaWx5TmFtZSwgbG9jYWxseUluc3RhbGxlZEZvbnRzVHJhaXRzTWFza3MpOwotICAgICAg
ICAgICAgaWYgKHVuc2lnbmVkIG51bUxvY2FsbHlJbnN0YWxsZWRGYWNlcyA9IGxvY2FsbHlJbnN0
YWxsZWRGb250c1RyYWl0c01hc2tzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZmFt
aWx5TG9jYWxseUluc3RhbGxlZEZhY2VzID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8UmVmUHRy
PENTU0ZvbnRGYWNlPj4+KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtTG9jYWxseUluc3RhbGxlZEZhY2VzOyArK2kpIHsKLSAgICAgICAgICAgICAgICAg
ICAgUmVmUHRyPENTU0ZvbnRGYWNlPiBsb2NhbGx5SW5zdGFsbGVkRm9udEZhY2UgPSBDU1NGb250
RmFjZTo6Y3JlYXRlKHN0YXRpY19jYXN0PEZvbnRUcmFpdHNNYXNrPihsb2NhbGx5SW5zdGFsbGVk
Rm9udHNUcmFpdHNNYXNrc1tpXSksIDAsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICBsb2Nh
bGx5SW5zdGFsbGVkRm9udEZhY2UtPmFkZFNvdXJjZShzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRG
YWNlU291cmNlPihmYW1pbHlOYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChsb2Nh
bGx5SW5zdGFsbGVkRm9udEZhY2UtPmlzVmFsaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZh
bWlseUxvY2FsbHlJbnN0YWxsZWRGYWNlcy0+YXBwZW5kKGxvY2FsbHlJbnN0YWxsZWRGb250RmFj
ZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbV9sb2NhbGx5SW5zdGFs
bGVkRm9udEZhY2VzLnNldChmYW1pbHlOYW1lLCBXVEY6Om1vdmUoZmFtaWx5TG9jYWxseUluc3Rh
bGxlZEZhY2VzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmYW1pbHlG
b250RmFjZXMtPmFwcGVuZChmb250RmFjZSk7CisgICAgICAgIGZhbWlseUZvbnRGYWNlcy5hcHBl
bmQoZm9udEZhY2UuY29weVJlZigpKTsKICAgICAgICAgCiAgICAgICAgICsrbV92ZXJzaW9uOwog
ICAgIH0KQEAgLTM3OCwxMCArMzg3LDEwIEBAIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHJl
c29sdmVHZW5lcmljRmFtaWx5KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRm9udERlCiAKIHN0
YXRpYyBGb250VHJhaXRzTWFzayBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb247CiAKLXN0
YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlRm9udEZhY2VzKENTU0ZvbnRGYWNlKiBmaXJzdCwgQ1NT
Rm9udEZhY2UqIHNlY29uZCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlRm9udEZhY2VzKGNv
bnN0IENTU0ZvbnRGYWNlJiBmaXJzdCwgY29uc3QgQ1NTRm9udEZhY2UmIHNlY29uZCkKIHsKLSAg
ICBGb250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC0+dHJhaXRzTWFzaygpOwot
ICAgIEZvbnRUcmFpdHNNYXNrIHNlY29uZFRyYWl0c01hc2sgPSBzZWNvbmQtPnRyYWl0c01hc2so
KTsKKyAgICBGb250VHJhaXRzTWFzayBmaXJzdFRyYWl0c01hc2sgPSBmaXJzdC50cmFpdHNNYXNr
KCk7CisgICAgRm9udFRyYWl0c01hc2sgc2Vjb25kVHJhaXRzTWFzayA9IHNlY29uZC50cmFpdHNN
YXNrKCk7CiAKICAgICBib29sIGZpcnN0SGFzRGVzaXJlZFZhcmlhbnQgPSBmaXJzdFRyYWl0c01h
c2sgJiBkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudE1hc2s7CiAg
ICAgYm9vbCBzZWNvbmRIYXNEZXNpcmVkVmFyaWFudCA9IHNlY29uZFRyYWl0c01hc2sgJiBkZXNp
cmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudE1hc2s7CkBAIC0zOTAsNyAr
Mzk5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVGb250RmFjZXMoQ1NTRm9udEZhY2Uq
IGZpcnN0LCBDU1NGb250RmFjZSogc2Vjb25kKQogICAgICAgICByZXR1cm4gZmlyc3RIYXNEZXNp
cmVkVmFyaWFudDsKIAogICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgZm9udC12YXJpYW50IGNzcyBw
cm9wZXJ0eSBmb3IgQ1NTMi4xIGNvbXBhdGliaWxpdHkuCi0gICAgaWYgKChkZXNpcmVkVHJhaXRz
TWFza0ZvckNvbXBhcmlzb24gJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spICYmICFmaXJzdC0+
aXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC0+aXNMb2NhbEZhbGxiYWNrKCkpIHsKKyAgICBp
ZiAoKGRlc2lyZWRUcmFpdHNNYXNrRm9yQ29tcGFyaXNvbiAmIEZvbnRWYXJpYW50U21hbGxDYXBz
TWFzaykgJiYgIWZpcnN0LmlzTG9jYWxGYWxsYmFjaygpICYmICFzZWNvbmQuaXNMb2NhbEZhbGxi
YWNrKCkpIHsKICAgICAgICAgLy8gUHJlZmVyIGEgZm9udCB0aGF0IGhhcyBpbmRpY2F0ZWQgdGhh
dCBpdCBjYW4gb25seSBzdXBwb3J0IHNtYWxsLWNhcHMgdG8gYSBmb250IHRoYXQgY2xhaW1zIHRv
IHN1cHBvcnQKICAgICAgICAgLy8gYWxsIHZhcmlhbnRzLiAgVGhlIHNwZWNpYWxpemVkIGZvbnQg
aXMgbW9yZSBsaWtlbHkgdG8gYmUgdHJ1ZSBzbWFsbC1jYXBzIGFuZCBub3QgcmVxdWlyZSBzeW50
aGVzaXMuCiAgICAgICAgIGJvb2wgZmlyc3RSZXF1aXJlc1NtYWxsQ2FwcyA9IChmaXJzdFRyYWl0
c01hc2sgJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spICYmICEoZmlyc3RUcmFpdHNNYXNrICYg
Rm9udFZhcmlhbnROb3JtYWxNYXNrKTsKQEAgLTQwNSw3ICs0MTQsNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgY29tcGFyZUZvbnRGYWNlcyhDU1NGb250RmFjZSogZmlyc3QsIENTU0ZvbnRGYWNlKiBz
ZWNvbmQpCiAgICAgaWYgKGZpcnN0SGFzRGVzaXJlZFN0eWxlICE9IHNlY29uZEhhc0Rlc2lyZWRT
dHlsZSkKICAgICAgICAgcmV0dXJuIGZpcnN0SGFzRGVzaXJlZFN0eWxlOwogCi0gICAgaWYgKChk
ZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFsaWNNYXNrKSAmJiAh
Zmlyc3QtPmlzTG9jYWxGYWxsYmFjaygpICYmICFzZWNvbmQtPmlzTG9jYWxGYWxsYmFjaygpKSB7
CisgICAgaWYgKChkZXNpcmVkVHJhaXRzTWFza0ZvckNvbXBhcmlzb24gJiBGb250U3R5bGVJdGFs
aWNNYXNrKSAmJiAhZmlyc3QuaXNMb2NhbEZhbGxiYWNrKCkgJiYgIXNlY29uZC5pc0xvY2FsRmFs
bGJhY2soKSkgewogICAgICAgICAvLyBQcmVmZXIgYSBmb250IHRoYXQgaGFzIGluZGljYXRlZCB0
aGF0IGl0IGNhbiBvbmx5IHN1cHBvcnQgaXRhbGljcyB0byBhIGZvbnQgdGhhdCBjbGFpbXMgdG8g
c3VwcG9ydAogICAgICAgICAvLyBhbGwgc3R5bGVzLiAgVGhlIHNwZWNpYWxpemVkIGZvbnQgaXMg
bW9yZSBsaWtlbHkgdG8gYmUgdGhlIG9uZSB0aGUgYXV0aG9yIHdhbnRzIHVzZWQuCiAgICAgICAg
IGJvb2wgZmlyc3RSZXF1aXJlc0l0YWxpY3MgPSAoZmlyc3RUcmFpdHNNYXNrICYgRm9udFN0eWxl
SXRhbGljTWFzaykgJiYgIShmaXJzdFRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxNYXNrKTsK
QEAgLTQ3NiwyNSArNDg1LDIzIEBAIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpmb250UmFu
Z2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyCiAKIENTU1NlZ21l
bnRlZEZvbnRGYWNlKiBDU1NGb250U2VsZWN0b3I6OmdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKIHsK
LSAgICBWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPj4qIGZhbWlseUZvbnRGYWNlcyA9IG1fZm9u
dEZhY2VzLmdldChmYW1pbHkpOwotICAgIGlmICghZmFtaWx5Rm9udEZhY2VzIHx8IGZhbWlseUZv
bnRGYWNlcy0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9mb250RmFjZXMuZmluZChmYW1pbHkpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2ZvbnRG
YWNlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byYgZmFtaWx5Rm9u
dEZhY2VzID0gaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8
dW5zaWduZWQsIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4+PiYgc2VnbWVudGVkRm9udEZh
Y2VDYWNoZSA9IG1fZm9udHMuYWRkKGZhbWlseSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwot
ICAgIGlmICghc2VnbWVudGVkRm9udEZhY2VDYWNoZSkKLSAgICAgICAgc2VnbWVudGVkRm9udEZh
Y2VDYWNoZSA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1Nl
Z21lbnRlZEZvbnRGYWNlPj4+KCk7CisgICAgYXV0byYgc2VnbWVudGVkRm9udEZhY2VDYWNoZSA9
IG1fZm9udHMuYWRkKGZhbWlseSwgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRl
ZEZvbnRGYWNlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgRm9udFRyYWl0c01hc2sgdHJh
aXRzTWFzayA9IGZvbnREZXNjcmlwdGlvbi50cmFpdHNNYXNrKCk7CiAKLSAgICBSZWZQdHI8Q1NT
U2VnbWVudGVkRm9udEZhY2U+JiBmYWNlID0gc2VnbWVudGVkRm9udEZhY2VDYWNoZS0+YWRkKHRy
YWl0c01hc2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBSZWZQdHI8Q1NTU2VnbWVu
dGVkRm9udEZhY2U+JiBmYWNlID0gc2VnbWVudGVkRm9udEZhY2VDYWNoZS5hZGQodHJhaXRzTWFz
aywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZmFjZSkgewogICAgICAgICBm
YWNlID0gQ1NTU2VnbWVudGVkRm9udEZhY2U6OmNyZWF0ZSh0aGlzKTsKIAotICAgICAgICAvLyBD
b2xsZWN0IGFsbCBtYXRjaGluZyBmYWNlcyBhbmQgc29ydCB0aGVtIGluIG9yZGVyIG9mIHByZWZl
cmVuY2UuCi0gICAgICAgIFZlY3RvcjxDU1NGb250RmFjZSosIDMyPiBjYW5kaWRhdGVGb250RmFj
ZXM7Ci0gICAgICAgIGZvciAoaW50IGkgPSBmYW1pbHlGb250RmFjZXMtPnNpemUoKSAtIDE7IGkg
Pj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBDU1NGb250RmFjZSogY2FuZGlkYXRlID0gZmFtaWx5
Rm9udEZhY2VzLT5hdChpKS5nZXQoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNhbmRpZGF0ZVRy
YWl0c01hc2sgPSBjYW5kaWRhdGUtPnRyYWl0c01hc2soKTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9udEZhY2U+LCAzMj4gY2FuZGlkYXRlRm9udEZhY2VzOwor
ICAgICAgICBmb3IgKGludCBpID0gZmFtaWx5Rm9udEZhY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsg
LS1pKSB7CisgICAgICAgICAgICBDU1NGb250RmFjZSYgY2FuZGlkYXRlID0gZmFtaWx5Rm9udEZh
Y2VzW2ldOworICAgICAgICAgICAgdW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRp
ZGF0ZS50cmFpdHNNYXNrKCk7CiAgICAgICAgICAgICBpZiAoKHRyYWl0c01hc2sgJiBGb250U3R5
bGVOb3JtYWxNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250U3R5bGVOb3JtYWxN
YXNrKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICgodHJhaXRz
TWFzayAmIEZvbnRWYXJpYW50Tm9ybWFsTWFzaykgJiYgIShjYW5kaWRhdGVUcmFpdHNNYXNrICYg
Rm9udFZhcmlhbnROb3JtYWxNYXNrKSkKQEAgLTUwMiwxNiArNTA5LDE1IEBAIENTU1NlZ21lbnRl
ZEZvbnRGYWNlKiBDU1NGb250U2VsZWN0b3I6OmdldEZvbnRGYWNlKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICAgICAgICAgIC8vIEZvciBT
VkcgRm9udHMgdGhhdCBzcGVjaWZ5IHRoYXQgdGhleSBvbmx5IHN1cHBvcnQgdGhlICJub3JtYWwi
IHZhcmlhbnQsIHdlIHdpbGwgYXNzdW1lIHRoZXkgYXJlIGluY2FwYWJsZQogICAgICAgICAgICAg
Ly8gb2Ygc21hbGwtY2FwcyBzeW50aGVzaXMgYW5kIGp1c3QgaWdub3JlIHRoZSBmb250IGZhY2Ug
YXMgYSBjYW5kaWRhdGUuCi0gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5oYXNTVkdGb250RmFj
ZVNvdXJjZSgpICYmICh0cmFpdHNNYXNrICYgRm9udFZhcmlhbnRTbWFsbENhcHNNYXNrKSAmJiAh
KGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBGb250VmFyaWFudFNtYWxsQ2Fwc01hc2spKQorICAgICAg
ICAgICAgaWYgKGNhbmRpZGF0ZS5oYXNTVkdGb250RmFjZVNvdXJjZSgpICYmICh0cmFpdHNNYXNr
ICYgRm9udFZhcmlhbnRTbWFsbENhcHNNYXNrKSAmJiAhKGNhbmRpZGF0ZVRyYWl0c01hc2sgJiBG
b250VmFyaWFudFNtYWxsQ2Fwc01hc2spKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2Vu
ZGlmCiAgICAgICAgICAgICBjYW5kaWRhdGVGb250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoVmVjdG9yPFJlZlB0cjxDU1NGb250RmFjZT4+KiBmYW1p
bHlMb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzID0gbV9sb2NhbGx5SW5zdGFsbGVkRm9udEZhY2Vz
LmdldChmYW1pbHkpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBudW1Mb2NhbGx5SW5zdGFsbGVk
Rm9udEZhY2VzID0gZmFtaWx5TG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy0+c2l6ZSgpOwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUxvY2FsbHlJbnN0YWxsZWRGb250
RmFjZXM7ICsraSkgewotICAgICAgICAgICAgICAgIENTU0ZvbnRGYWNlKiBjYW5kaWRhdGUgPSBm
YW1pbHlMb2NhbGx5SW5zdGFsbGVkRm9udEZhY2VzLT5hdChpKS5nZXQoKTsKKyAgICAgICAgYXV0
byBpdGVyYXRvciA9IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlcy5maW5kKGZhbWlseSk7Cisg
ICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMuZW5kKCkp
IHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogaXRlcmF0b3ItPnZhbHVlKSB7
CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2FuZGlkYXRlVHJhaXRzTWFzayA9IGNhbmRpZGF0
ZS0+dHJhaXRzTWFzaygpOwogICAgICAgICAgICAgICAgIGlmICgodHJhaXRzTWFzayAmIEZvbnRT
dHlsZU5vcm1hbE1hc2spICYmICEoY2FuZGlkYXRlVHJhaXRzTWFzayAmIEZvbnRTdHlsZU5vcm1h
bE1hc2spKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTUyMyw5ICs1MjksOCBA
QCBDU1NTZWdtZW50ZWRGb250RmFjZSogQ1NTRm9udFNlbGVjdG9yOjpnZXRGb250RmFjZShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZQogCiAgICAgICAgIGRlc2lyZWRUcmFpdHNNYXNrRm9y
Q29tcGFyaXNvbiA9IHRyYWl0c01hc2s7CiAgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2FuZGlk
YXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRpZGF0ZUZvbnRGYWNlcy5lbmQoKSwgY29tcGFyZUZv
bnRGYWNlcyk7Ci0gICAgICAgIHVuc2lnbmVkIG51bUNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVGb250
RmFjZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2FuZGlk
YXRlczsgKytpKQotICAgICAgICAgICAgZmFjZS0+YXBwZW5kRm9udEZhY2UoY2FuZGlkYXRlRm9u
dEZhY2VzW2ldKTsKKyAgICAgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVGb250
RmFjZXMpCisgICAgICAgICAgICBmYWNlLT5hcHBlbmRGb250RmFjZShjYW5kaWRhdGUuZ2V0KCkp
OwogICAgIH0KICAgICByZXR1cm4gZmFjZS5nZXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
U2VsZWN0b3IuaAppbmRleCA0YmU3NDA4MTI5OTY0NTRlOWZlYjMwZTk3ZTA0NWUwMjZlNWM3MzJj
Li40N2VhNjQwY2UxMjRkZmNiMWViZmU1MmRlN2JlNjFkMzAxZjMwOGI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRTZWxlY3Rvci5oCkBAIC04OSw5ICs4OSw5IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBiZWdpbkxvYWRUaW1lckZpcmVkKCk7CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAg
ICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZh
Y2U+Pj4sIENhc2VGb2xkaW5nSGFzaD4gbV9mb250RmFjZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPj4+LCBDYXNlRm9sZGlu
Z0hhc2g+IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlczsKLSAgICBIYXNoTWFwPFN0cmluZywg
c3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8dW5zaWduZWQsIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250
RmFjZT4+PiwgQ2FzZUZvbGRpbmdIYXNoPiBtX2ZvbnRzOworICAgIEhhc2hNYXA8U3RyaW5nLCBW
ZWN0b3I8UmVmPENTU0ZvbnRGYWNlPj4sIENhc2VGb2xkaW5nSGFzaD4gbV9mb250RmFjZXM7Cisg
ICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWY8Q1NTRm9udEZhY2U+PiwgQ2FzZUZvbGRpbmdI
YXNoPiBtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXM7CisgICAgSGFzaE1hcDxTdHJpbmcsIEhh
c2hNYXA8dW5zaWduZWQsIFJlZlB0cjxDU1NTZWdtZW50ZWRGb250RmFjZT4+LCBDYXNlRm9sZGlu
Z0hhc2g+IG1fZm9udHM7CiAgICAgSGFzaFNldDxGb250U2VsZWN0b3JDbGllbnQqPiBtX2NsaWVu
dHM7CiAKICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkRm9udD4+IG1fZm9u
dHNUb0JlZ2luTG9hZGluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZh
Y2UuY3BwCmluZGV4IDJmMzdkNmEwZmQwOTY0YTA5OTc5ZTZkZjdlOWY3ZjE4Mjk5YTA2NzcuLjVj
YmZjYTRlN2I3MjAxMDk5NWE4MTEyYmRiNDc2YjVkZGVhNWRkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcApAQCAtNDUsOSArNDUsOCBAQCBDU1NTZWdt
ZW50ZWRGb250RmFjZTo6Q1NTU2VnbWVudGVkRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yKiBmb250
U2VsZWN0b3IpCiBDU1NTZWdtZW50ZWRGb250RmFjZTo6fkNTU1NlZ21lbnRlZEZvbnRGYWNlKCkK
IHsKICAgICBwcnVuZVRhYmxlKCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG1fZm9udEZhY2VzLnNp
emUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICBt
X2ZvbnRGYWNlc1tpXS0+cmVtb3ZlZEZyb21TZWdtZW50ZWRGb250RmFjZSh0aGlzKTsKKyAgICBm
b3IgKGF1dG8mIGZhY2UgOiBtX2ZvbnRGYWNlcykKKyAgICAgICAgZmFjZS0+cmVtb3ZlZEZyb21T
ZWdtZW50ZWRGb250RmFjZSh0aGlzKTsKIH0KIAogdm9pZCBDU1NTZWdtZW50ZWRGb250RmFjZTo6
cHJ1bmVUYWJsZSgpCkBAIC01OCw5ICs1Nyw4IEBAIHZvaWQgQ1NTU2VnbWVudGVkRm9udEZhY2U6
OnBydW5lVGFibGUoKQogYm9vbCBDU1NTZWdtZW50ZWRGb250RmFjZTo6aXNWYWxpZCgpIGNvbnN0
CiB7CiAgICAgLy8gVmFsaWQgaWYgYXQgbGVhc3Qgb25lIGZvbnQgZmFjZSBpcyB2YWxpZC4KLSAg
ICB1bnNpZ25lZCBzaXplID0gbV9mb250RmFjZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgaWYgKG1fZm9udEZhY2VzW2ldLT5pc1Zh
bGlkKCkpCisgICAgZm9yIChhdXRvJiBmYWNlIDogbV9mb250RmFjZXMpIHsKKyAgICAgICAgaWYg
KGZhY2UtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC04NCwxMSArODIsMTEgQEAgdm9pZCBDU1NTZWdtZW50ZWRGb250RmFj
ZTo6Zm9udExvYWRlZChDU1NGb250RmFjZSopCiAjZW5kaWYKIH0KIAotdm9pZCBDU1NTZWdtZW50
ZWRGb250RmFjZTo6YXBwZW5kRm9udEZhY2UoUGFzc1JlZlB0cjxDU1NGb250RmFjZT4gZm9udEZh
Y2UpCit2b2lkIENTU1NlZ21lbnRlZEZvbnRGYWNlOjphcHBlbmRGb250RmFjZShSZWY8Q1NTRm9u
dEZhY2U+JiYgZm9udEZhY2UpCiB7CiAgICAgcHJ1bmVUYWJsZSgpOwogICAgIGZvbnRGYWNlLT5h
ZGRlZFRvU2VnbWVudGVkRm9udEZhY2UodGhpcyk7Ci0gICAgbV9mb250RmFjZXMuYXBwZW5kKGZv
bnRGYWNlKTsKKyAgICBtX2ZvbnRGYWNlcy5hcHBlbmQoV1RGOjptb3ZlKGZvbnRGYWNlKSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGFwcGVuZEZvbnRXaXRoSW52YWxpZFVuaWNvZGVSYW5nZUlmTG9hZGlu
ZyhGb250UmFuZ2VzJiByYW5nZXMsIFJlZjxGb250PiYmIGZvbnQsIGNvbnN0IFZlY3RvcjxDU1NG
b250RmFjZTo6VW5pY29kZVJhbmdlPiYgdW5pY29kZVJhbmdlcykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKaW5kZXggZjg2OWZmNmRhMGI3ZWZhMmU0NWJmMTI2ODU0
NTMyYzQ4NjU1NjUyYy4uNWZmZWJiMThjYTgwZGQ4ZDNjYTkzMmQ2ODA5NDE4YzFkM2U1YmNlZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlKik7CiAKLSAg
ICB2b2lkIGFwcGVuZEZvbnRGYWNlKFBhc3NSZWZQdHI8Q1NTRm9udEZhY2U+KTsKKyAgICB2b2lk
IGFwcGVuZEZvbnRGYWNlKFJlZjxDU1NGb250RmFjZT4mJik7CiAKICAgICBGb250UmFuZ2VzIGZv
bnRSYW5nZXMoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHJp
dmF0ZToKIAogICAgIENTU0ZvbnRTZWxlY3RvciogbV9mb250U2VsZWN0b3I7CiAgICAgSGFzaE1h
cDxGb250RGVzY3JpcHRpb25LZXksIEZvbnRSYW5nZXMsIEZvbnREZXNjcmlwdGlvbktleUhhc2gs
IFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZvbnREZXNjcmlwdGlvbktleT4+IG1fZGVzY3Jp
cHRpb25Ub1Jhbmdlc01hcDsKLSAgICBWZWN0b3I8UmVmUHRyPENTU0ZvbnRGYWNlPiwgMT4gbV9m
b250RmFjZXM7CisgICAgVmVjdG9yPFJlZjxDU1NGb250RmFjZT4sIDE+IG1fZm9udEZhY2VzOwog
I2lmIEVOQUJMRShGT05UX0xPQURfRVZFTlRTKQogICAgIFZlY3RvcjxSZWZQdHI8TG9hZEZvbnRD
YWxsYmFjaz4+IG1fY2FsbGJhY2tzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3Bl
cnRpZXMuY3BwCmluZGV4IDJjODFkODA3MTVkNGVhMGQ0MzcxYzM4MjI4YzUxODg0OWJjNjIxYTku
LjU4NzIzZTFlYTJiOWViNjZmOWQyNjYyMmMxMmMyYzQ3OGVmNWUzMDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCkBAIC01ODMsNyArNTgzLDcgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gU3R5bGVQcm9wZXJ0aWVzOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHkKIHsKICAgICBpbnQgZm91bmRQcm9wZXJ0eUluZGV4ID0gZmluZFByb3BlcnR5
SW5kZXgocHJvcGVydHlJRCk7CiAgICAgaWYgKGZvdW5kUHJvcGVydHlJbmRleCA9PSAtMSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBwcm9w
ZXJ0eUF0KGZvdW5kUHJvcGVydHlJbmRleCkudmFsdWUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCAzYTA2ODZjOThmMDAyNzEyY2U4
MmQ1NGUzODhmMWI0MGZkNTQyZWY2Li4yN2I1MDBlOTFjOTgxN2VlY2IyY2RlNjhjMzAwMTc0Yjli
MmRjMDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
aApAQCAtMTY2LDcgKzE2Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gZXhp
c3RzIHNvIENTU0ZvbnRTZWxlY3RvciBjYW4gaGF2ZSBhIHVuaWZpZWQgbm90aW9uIG9mIHByZWlu
c3RhbGxlZCBmb250cyBhbmQgQGZvbnQtZmFjZS4KICAgICAvLyBJdCBjb21lcyBpbnRvIHBsYXkg
d2hlbiB5b3UgY3JlYXRlIGFuIEBmb250LWZhY2Ugd2hpY2ggc2hhcmVzIGEgZmFtaWx5IG5hbWUg
YXMgYSBwcmVpbnN0YWxsZWQgZm9udC4KLSAgICB2b2lkIGdldFRyYWl0c0luRmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKTsKKyAgICBWZWN0b3I8Rm9udFRyYWl0
c01hc2s+IGdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBm
YWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5kZXgg
ZDg3ZDc5ODAxNjhmYjIwZGJkNGViNTdmMGRmNGY0OGJlMjU1ZjQyMC4uMzg2ODQzYzU0NGI5ZTc1
Nzc3ZjA5YTRhMjczNmQyYTNhM2U3ZDg4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApAQCAt
MjM3LDcgKzIzNyw3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiAgICAgcmV0dXJuIGZvbnQucmVsZWFzZSgp
OwogfQogCi12b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKK1ZlY3RvcjxG
b250VHJhaXRzTWFzaz4gRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNT
dHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlO
YW1lU3RyID0gZmFtaWx5TmFtZS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpOwogICAgIENGU3Ry
aW5nUmVmIGZhbWlseU5hbWVTdHJQdHIgPSBmYW1pbHlOYW1lU3RyLmdldCgpOwpAQCAtMjQ1LDEy
ICsyNDUsMTQgQEAgdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmUKICAgICBSZXRhaW5QdHI8Q1RGb250
RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JD
cmVhdGVXaXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7CiAgICAgUmV0YWluUHRyPENG
QXJyYXlSZWY+IG1hdGNoZWREZXNjcmlwdG9ycyA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNy
ZWF0ZU1hdGNoaW5nRm9udERlc2NyaXB0b3JzKGZvbnREZXNjcmlwdG9yLmdldCgpLCBudWxscHRy
KSk7CiAgICAgaWYgKCFtYXRjaGVkRGVzY3JpcHRvcnMpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIENGSW5kZXggbnVtTWF0Y2hlcyA9IENGQXJyYXlHZXRDb3Vu
dChtYXRjaGVkRGVzY3JpcHRvcnMuZ2V0KCkpOwogICAgIGlmICghbnVtTWF0Y2hlcykKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCisgICAgVmVjdG9yPEZvbnRUcmFpdHNN
YXNrPiB0cmFpdHNNYXNrczsKKyAgICB0cmFpdHNNYXNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG51bU1hdGNoZXMpOwogICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IG51bU1hdGNoZXM7ICsr
aSkgewogICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiB0cmFpdHMgPSBhZG9wdENG
KChDRkRpY3Rpb25hcnlSZWYpQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoKENURm9udERl
c2NyaXB0b3JSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChtYXRjaGVkRGVzY3JpcHRvcnMuZ2V0
KCksIGkpLCBrQ1RGb250VHJhaXRzQXR0cmlidXRlKSk7CiAgICAgICAgIENGTnVtYmVyUmVmIHJl
c3VsdFJlZiA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZSh0cmFpdHMuZ2V0KCks
IGtDVEZvbnRTeW1ib2xpY1RyYWl0KTsKQEAgLTI2MCw5ICsyNjIsMTAgQEAgdm9pZCBGb250Q2Fj
aGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVj
dG9yPHVuc2lnbmUKICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUocmVzdWx0UmVmLCBrQ0ZO
dW1iZXJJbnRUeXBlLCAmc3ltYm9saWNUcmFpdHMpOwogICAgICAgICAgICAgQ0dGbG9hdCB3ZWln
aHQgPSAwOwogICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZSh3ZWlnaHRSZWYsIGtDRk51bWJl
ckNHRmxvYXRUeXBlLCAmd2VpZ2h0KTsKLSAgICAgICAgICAgIHRyYWl0c01hc2tzLmFwcGVuZCh0
b1RyYWl0c01hc2soc3ltYm9saWNUcmFpdHMsIHdlaWdodCkpOworICAgICAgICAgICAgdHJhaXRz
TWFza3MudW5jaGVja2VkQXBwZW5kKHRvVHJhaXRzTWFzayhzeW1ib2xpY1RyYWl0cywgd2VpZ2h0
KSk7CiAgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIHRyYWl0c01hc2tzOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
Q2FjaGVGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKaW5kZXggN2I2MDM5ODM3NGQ0OTgyN2M5NmU2NWNm
NDA3MTAzMzMwMjcxOTI3OS4uODA5MDNlNDlmODhlMjdmYWZkMDg5MDY3YzZiNmQwODFmZDVlYjRi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udENhY2hlRnJlZVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtMTM3LDggKzEzNyw5IEBAIFJl
ZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpCiAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNj
cmlwdGlvbiwgdGltZXNTdHIsIGZhbHNlKTsKIH0KIAotdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0
c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKQorVmVjdG9y
PEZvbnRUcmFpdHNNYXNrPiBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYpCiB7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogc3RhdGljIFN0cmluZyBnZXRGYW1p
bHlOYW1lU3RyaW5nRnJvbUZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5j
cHAKaW5kZXggYWZhNDg0MWVkZjk2OWRmMmU0ZGIxNTQ1NTBjYTFmZDhjMjMxNjE1OC4uZmUwMmQy
NTViZGQ4ZjczZWI2YzgxNTY5NzlhYTMyZTM3ZWY5NmVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAgLTU0Miw3
ICs1NDIsNyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5RW51bVByb2MoQ09O
U1QgTE9HRk9OVCogbG9nRm9udCwgQ09OU1QgVEVYVE1FVAogICAgIHByb2NEYXRhLT5tX3RyYWl0
c01hc2tzLmFkZCh0cmFpdHNNYXNrKTsKICAgICByZXR1cm4gMTsKIH0KLXZvaWQgRm9udENhY2hl
OjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rv
cjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQorVmVjdG9yPEZvbnRUcmFpdHNNYXNrPiBGb250Q2Fj
aGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKIHsK
ICAgICBIV25kREMgaGRjKDApOwogCkBAIC01NTUsNyArNTU1LDExIEBAIHZvaWQgRm9udENhY2hl
OjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rv
cjx1bnNpZ25lCiAKICAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRhIHByb2NEYXRhKGZhbWlseU5h
bWUpOwogICAgIEVudW1Gb250RmFtaWxpZXNFeChoZGMsICZsb2dGb250LCB0cmFpdHNJbkZhbWls
eUVudW1Qcm9jLCByZWludGVycHJldF9jYXN0PExQQVJBTT4oJnByb2NEYXRhKSwgMCk7Ci0gICAg
Y29weVRvVmVjdG9yKHByb2NEYXRhLm1fdHJhaXRzTWFza3MsIHRyYWl0c01hc2tzKTsKKyAgICBW
ZWN0b3I8Rm9udFRyYWl0c01hc2s+IHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShwcm9jRGF0YS5tX3RyYWl0c01hc2tzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25l
ZCBtYXNrIDogcHJvY0RhdGEubV90cmFpdHNNYXNrcykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChzdGF0aWNfY2FzdDxGb250VHJhaXRzTWFzaz4obWFzaykpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>